/****************************************************************************** * * Author: Xilinx, Inc. * * * 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. * * * XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A * COURTESY TO YOU. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS * ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION OR STANDARD, * XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION IS FREE * FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE FOR OBTAINING * ANY THIRD PARTY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION. * XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO * THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY * WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM * CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE. * * * Xilinx hardware products are not intended for use in life support * appliances, devices, or systems. Use in such applications is * expressly prohibited. * * * (c) Copyright 2002-2004 Xilinx Inc. * All rights reserved. * * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 675 Mass Ave, Cambridge, MA 02139, USA. * ******************************************************************************/ /*****************************************************************************/ /** * * @file xbasic_types.h * * This file contains basic types for Xilinx software IP. These types do not * follow the standard naming convention with respect to using the component * name in front of each name because they are considered to be primitives. * * @note * * This file contains items which are architecture dependent. * *
* MODIFICATION HISTORY:
*
* Ver	Who    Date   Changes
* ----- ---- -------- -------------------------------------------------------
* 1.00a rmm  12/14/01 First release
*	rmm  05/09/03 Added "xassert always" macros to rid ourselves of diab
*		      compiler warnings
* 1.00a rpm  11/07/03 Added XNullHandler function as a stub interrupt handler
* 
* ******************************************************************************/ #ifndef XBASIC_TYPES_H /* prevent circular inclusions */ #define XBASIC_TYPES_H /* by using protection macros */ /***************************** Include Files *********************************/ /************************** Constant Definitions *****************************/ #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif #ifndef NULL #define NULL 0 #endif /** Null */ #define XCOMPONENT_IS_READY 0x11111111 /* component has been initialized */ #define XCOMPONENT_IS_STARTED 0x22222222 /* component has been started */ /* the following constants and declarations are for unit test purposes and are * designed to be used in test applications. */ #define XTEST_PASSED 0 #define XTEST_FAILED 1 #define XASSERT_NONE 0 #define XASSERT_OCCURRED 1 extern unsigned int XAssertStatus; extern void XAssert(char *, int); /**************************** Type Definitions *******************************/ /** @name Primitive types * These primitive types are created for transportability. * They are dependent upon the target architecture. * @{ */ #include typedef struct { u32 Upper; u32 Lower; } Xuint64; /*@}*/ /** * This data type defines an interrupt handler for a device. * The argument points to the instance of the component */ typedef void (*XInterruptHandler) (void *InstancePtr); /** * This data type defines a callback to be invoked when an * assert occurs. The callback is invoked only when asserts are enabled */ typedef void (*XAssertCallback) (char *FilenamePtr, int LineNumber); /***************** Macros (Inline Functions) Definitions *********************/ /*****************************************************************************/ /** * Return the most significant half of the 64 bit data type. * * @param x is the 64 bit word. * * @return * * The upper 32 bits of the 64 bit word. * * @note * * None. * ******************************************************************************/ #define XUINT64_MSW(x) ((x).Upper) /*****************************************************************************/ /** * Return the least significant half of the 64 bit data type. * * @param x is the 64 bit word. * * @return * * The lower 32 bits of the 64 bit word. * * @note * * None. * ******************************************************************************/ #define XUINT64_LSW(x) ((x).Lower) #ifndef NDEBUG /*****************************************************************************/ /** * This assert macro is to be used for functions that do not return anything * (void). This in conjunction with the XWaitInAssert boolean can be used to * accomodate tests so that asserts which fail allow execution to continue. * * @param expression is the expression to evaluate. If it evaluates to false, * the assert occurs. * * @return * * Returns void unless the XWaitInAssert variable is true, in which case * no return is made and an infinite loop is entered. * * @note * * None. * ******************************************************************************/ #define XASSERT_VOID(expression) \ { \ if (expression) { \ XAssertStatus = XASSERT_NONE; \ } else { \ XAssert(__FILE__, __LINE__); \ XAssertStatus = XASSERT_OCCURRED; \ return; \ } \ } /*****************************************************************************/ /** * This assert macro is to be used for functions that do return a value. This in * conjunction with the XWaitInAssert boolean can be used to accomodate tests so * that asserts which fail allow execution to continue. * * @param expression is the expression to evaluate. If it evaluates to false, * the assert occurs. * * @return * * Returns 0 unless the XWaitInAssert variable is true, in which case * no return is made and an infinite loop is entered. * * @note * * None. * ******************************************************************************/ #define XASSERT_NONVOID(expression) \ { \ if (expression) { \ XAssertStatus = XASSERT_NONE; \ } else { \ XAssert(__FILE__, __LINE__); \ XAssertStatus = XASSERT_OCCURRED; \ return 0; \ } \ } /*****************************************************************************/ /** * Always assert. This assert macro is to be used for functions that do not * return anything (void). Use for instances where an assert should always * occur. * * @return * * Returns void unless the XWaitInAssert variable is true, in which case * no return is made and an infinite loop is entered. * * @note * * None. * ******************************************************************************/ #define XASSERT_VOID_ALWAYS() \ { \ XAssert(__FILE__, __LINE__); \ XAssertStatus = XASSERT_OCCURRED; \ return; \ } /*****************************************************************************/ /** * Always assert. This assert macro is to be used for functions that do return * a value. Use for instances where an assert should always occur. * * @return * * Returns void unless the XWaitInAssert variable is true, in which case * no return is made and an infinite loop is entered. * * @note * * None. * ******************************************************************************/ #define XASSERT_NONVOID_ALWAYS() \ { \ XAssert(__FILE__, __LINE__); \ XAssertStatus = XASSERT_OCCURRED; \ return 0; \ } #else #define XASSERT_VOID(expression) #define XASSERT_VOID_ALWAYS() #define XASSERT_NONVOID(expression) #define XASSERT_NONVOID_ALWAYS() #endif /************************** Function Prototypes ******************************/ void XAssertSetCallback(XAssertCallback Routine); void XNullHandler(void *NullParameter); #endif /* end of protection macro */