| /********************************************************************* |
| * |
| * (C) Copyright IBM Corp. 2007,2010 |
| * |
| * This program is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License as published by the |
| * Free Software Foundation; either version 2 of the License, or (at your |
| * option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, but |
| * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
| * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| * for more details. |
| * |
| * You should have received a copy of the GNU General Public License along |
| * with this program; if not, see <http://www.gnu.org/licenses>. |
| * |
| ********************************************************************/ |
| |
| #ifndef __DMA_ASSERT_H_ /* Prevent multiple inclusion */ |
| #define __DMA_ASSERT_H_ |
| |
| #ifndef __LINUX_KERNEL__ |
| |
| /*! |
| * \file spi/DMA_Assert.h |
| * |
| * \brief DMA SPI Assert Macros |
| * |
| * Two sets of assert macros are provided: |
| * - Kernel Asserts |
| * - User-mode Asserts |
| * |
| * When DMA SPIs are used within the kernel, a special assert routine is called |
| * that does NOT abort. It just prints the assertion and the location and |
| * continues. |
| * |
| * When DMA SPIs are used within user-mode code, the normal assert routine is |
| * called, which prints the assertion and location and aborts. |
| * |
| * Several levels of asserts are provided, and #define variables control which |
| * levels are activated. The following assert macros are available: |
| * |
| * SPI_abort - Always active and always issues assert(0). |
| * Primarily used for unimplemented code paths. |
| * Not available in the kernel. |
| * SPI_assert - Active by default, or when ASSERT_PROD is defined. |
| * Meant to flag user errors. |
| * SPI_assert_debug - Active by default. Meant to flag coding |
| * errors before shipping. |
| * |
| * The following #defines control which level of asserts are compiled into |
| * the code. Only one of ASSERT_ABORT, ASSERT_PROD (or nothing) should |
| * be specified. |
| * - ASSERT_ABORT means that the "abort" level is the only level |
| * of asserts that is active. Other levels are turned off. |
| * - ASSERT_PROD means that "abort" and "assert" levels are active. |
| * "assert_debug" is turned off. |
| * - Not specifying ASSERT_ABORT or ASSER_PROD means that all |
| * levels of asserts ("abort", "assert", "assert_debug") are |
| * active. |
| */ |
| |
| #include <common/namespace.h> |
| |
| |
| __BEGIN_DECLS |
| |
| |
| #include <stdio.h> |
| |
| /* ============================================================ */ |
| |
| #ifdef __CNK__ |
| |
| /*! |
| * \brief Production-level Kernel Assert. |
| * |
| * This production level of assert will be active during normal production |
| * code execution. |
| * |
| * When in the kernel, just do a printf, but don't exit. |
| */ |
| #define SPI_assert(x) DMA_KernelAssert(x) |
| |
| /*! |
| * \brief Debug-level Kernel Assert. |
| * |
| * This debug level of assert will only be active during in-house debugging. |
| * |
| * When in the kernel, just do a printf, but don't exit. |
| */ |
| #define SPI_assert_debug(x) DMA_KernelAssert(x) |
| |
| #ifdef NDEBUG |
| |
| /*! |
| * \brief No Debug Kernel Assert Internal Macro |
| * |
| * This macro is used internally for when asserts are turned off via the NDEBUG |
| * flag. It does nothing. |
| */ |
| #define DMA_KernelAssert( __assert_test ) ((void)0) |
| |
| /* ============================================================ */ |
| |
| #else /* not NDEBUG */ |
| |
| /*! |
| * \brief Kernel Assert Internal Function |
| * |
| * This function is called when the kernel determines that it needs to assert. |
| * It prints the assertion that failed and the code location, but does not |
| * abort. The kernel should continue executing. |
| * |
| * \param[in] Pointer to the assertion string that failed the test |
| * \param[in] Pointer to the name of the source file that coded the assert |
| * \param[in] Line number within the source file that coded the assert |
| */ |
| extern inline void __DMA_KernelAssert( const char *__assertion, |
| const char *__file, |
| int __line ) |
| { |
| printf("Assertion Failed: %s, file %s, line %d.\n", |
| __assertion, |
| __file, |
| __line ); |
| } |
| |
| |
| /*! |
| * \brief Kernel Assert Internal Macro |
| * |
| * This macro is used internally when asserts are turned on (the NDEBUG flag |
| * is not specified). It tests the assertion. If the assertion is true, it |
| * does nothing. If the assertion is false, it invokes the __DMA_KernelAssert |
| * internal function to print out the assert information. |
| * |
| * \param[in] Pointer to the assertion string that failed the test |
| * \param[in] Pointer to the name of the source file that coded the assert |
| * \param[in] Line number within the source file that coded the assert |
| */ |
| #define DMA_KernelAssert( __assert_test ) \ |
| ((__assert_test) ? ((void)0) : \ |
| __DMA_KernelAssert( #__assert_test, __FILE__, __LINE__ )) |
| |
| |
| #endif /* NDEBUG */ |
| |
| /* ============================================================ */ |
| |
| #else /* not __CNK__ */ |
| |
| #include <assert.h> |
| |
| #ifdef ASSERT_ABORT |
| |
| /*! |
| * \brief Abort-level Abort Assert |
| * |
| * This macro is defined when the ASSERT_ABORT level of asserts is active. |
| * |
| * This macro will assert(0). |
| * |
| */ |
| #define SPI_abort() assert(0) |
| |
| /*! |
| * \brief Abort-level Production Assert |
| * |
| * This macro is defined when the ASSERT_ABORT level of asserts is active. |
| * This macro will not assert. It will simply execute the assert test, but |
| * because abort-level-only asserts are active, it will not assert. |
| * |
| */ |
| #define SPI_assert(x) |
| |
| /*! |
| * \brief Abort-level Debug Assert |
| * |
| * This macro is defined when the ASSERT_ABORT level of asserts is active. |
| * This macro will not assert. It will simply execute the assert test, but |
| * because abort-level-only asserts are active, it will not assert. |
| * |
| */ |
| #define SPI_assert_debug(x) |
| |
| /* ============================================================ */ |
| |
| #else /* Not ASSERT_ABORT */ |
| |
| #ifdef ASSERT_PROD |
| |
| /*! |
| * \brief Production-level Abort Assert |
| * |
| * This macro is defined when the ASSERT_PROD level of asserts is active. |
| * |
| * This macro will assert(0). |
| * |
| */ |
| #define SPI_abort() assert(0) |
| |
| /*! |
| * \brief Production-level Production Assert |
| * |
| * This macro is defined when the ASSERT_PROD level of asserts is active. |
| * |
| * This macro invokes the standard assert() function with the specified |
| * assert test. |
| */ |
| #define SPI_assert(x) assert(x) |
| |
| /*! |
| * \brief Production-level Debug Assert |
| * |
| * This macro is defined when the ASSERT_PROD level of asserts is active. |
| * |
| * This macro will not assert. It will simply execute the assert test, but |
| * because production-level-only asserts are active, it will not assert. |
| */ |
| #define SPI_assert_debug(x) |
| |
| /* ============================================================ */ |
| |
| #else /* Not ASSERT_PROD */ |
| |
| /*! |
| * \brief Debug-level Abort Assert |
| * |
| * This macro is defined when all levels of asserts are desired (neither the |
| * ASSERT_ABORT nor ASSERT_PROD level of asserts is active. This is the |
| * default). |
| * |
| * This macro will assert(0). |
| * |
| */ |
| #define SPI_abort() assert(0) |
| |
| /*! |
| * \brief Debug-level Production Assert |
| * |
| * This macro is defined when all levels of asserts are desired (neither the |
| * ASSERT_ABORT nor ASSERT_PROD level of asserts is active. This is the |
| * default). |
| * |
| * This macro invokes the standard assert() function with the specified |
| * assert test. |
| */ |
| #define SPI_assert(x) assert(x) |
| |
| /*! |
| * \brief Debug-level Debug Assert |
| * |
| * This macro is defined when all levels of asserts are desired (neither the |
| * ASSERT_ABORT nor ASSERT_PROD level of asserts is active. This is the |
| * default). |
| * |
| * This macro invokes the standard assert() function with the specified |
| * assert test. |
| */ |
| #define SPI_assert_debug(x) assert(x) |
| |
| #endif |
| |
| #endif |
| |
| #endif /* __CNK__ */ |
| |
| |
| __END_DECLS |
| |
| |
| #endif /* ! __LINUX_KERNEL__ */ |
| |
| #endif |