/* * dspbridge/mpu_api/inc/std.h * * DSP-BIOS Bridge driver support functions for TI OMAP processors. * * Copyright (C) 2007 Texas Instruments, Inc. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation version 2.1 of the License. * * This program is distributed .as is. WITHOUT ANY WARRANTY of any kind, * whether express or implied; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ /* * ======== std.h ======== * *! Revision History *! ================ *! 16-Feb-2004 vp GNU compiler 3.x defines inline keyword. Added appropriate macros not to redefine inline keyword in this file. *! 24-Oct-2002 ashu defined _TI_ and _FIXED_ symbols for 28x. *! 24-Oct-2002 ashu defined _TI_ for 24x. *! 01-Mar-2002 kln changed LARGE_MODEL and Arg definition for 28x *! 01-Feb-2002 kln added definitions for 28x *! 08-Dec-2000 kw: added 'ArgToInt' and 'ArgToPtr' macros *! 30-Nov-2000 mf: Added _64_, _6x_; removed _7d_ *! 30-May-2000 srid: Added __TMS320C55X__ for 55x; Arg is void * for 55 . *! 18-Jun-1999 dr: Added '_TI_', fixed __inline for SUN4, added inline *! 10-Feb-1999 rt: Added '55' support, changed 54's symbol to _TMS320C5XX *! 29-Aug-1998 mf: fixed typo, removed obsolete targets *! 08-Jun-1998 mf: _67_ is synonym for _7d_ *! 10-Oct-1997 rt; added _7d_ for Raytheon C7DSP triggered by _TMS320C6700 *! 04-Aug-1997 cc: added _29_ for _TMS320C2XX *! 11-Jul-1997 dlr: _5t_, and STD_SPOXTASK keyword for Tasking *! 12-Jun-1997 mf: _TMS320C60 -> _TMS320C6200 *! 13-Feb-1997 mf: _62_, with 32-bit LgInt *! 26-Nov-1996 kw: merged bios-c00's and wsx-a27's <std.h> changes *! *and* revision history *! 12-Sep-1996 kw: added C54x #ifdef's *! 21-Aug-1996 mf: removed #define main smain for _21_ *! 14-May-1996 gp: def'd out INT, FLOAT, and COMPLEX defines for WSX. *! 11-Apr-1996 kw: define _W32_ based on _WIN32 (defined by MS compiler) *! 07-Mar-1996 mg: added Win32 support *! 06-Sep-1995 dh: added _77_ dynamic stack support via fxns77.h *! 27-Jun-1995 dh: added _77_ support *! 16-Mar-1995 mf: for _21_: #define main smain *! 01-Mar-1995 mf: set _20_ and _60_ (as well as _21_ for both) *! 22-Feb-1995 mf: Float is float for _SUN_ and _80_ *! 22-Dec-1994 mf: Added _80_ definition, for PP or MP. *! 09-Dec-1994 mf: Added _53_ definition. *! 22-Nov-1994 mf: Ptr is void * everywhere. *! Added definitions of _30_, etc. *! 23-Aug-1994 dh removed _21_ special case (kw) *! 17-Aug-1994 dh added _51_ support *! 03-Aug-1994 kw updated _80_ support *! 30-Jun-1994 kw added _80_ support *! 05-Apr-1994 kw: Added _SUN_ to _FLOAT_ definition *! 01-Mar-1994 kw: Made Bool an int (was MdUns) for _56_ (more efficient). *! Added _53_ support. */ #ifndef STD_ #define STD_ #ifdef _TMS320C28X #define _28_ 1 #ifdef LARGE_MODEL #define _28l_ 1 #endif #endif #ifdef _TMS320C2XX #define _29_ 1 #endif #ifdef _TMS320C30 #define _30_ 1 #endif #ifdef _TMS320C40 #define _40_ 1 #endif #ifdef _TMS320C50 #define _50_ 1 #endif #ifdef _TMS320C5XX #define _54_ 1 #endif #ifdef __TMS320C55X__ #define _55_ 1 #ifdef __LARGE_MODEL__ #define _55l_ 1 #endif #endif #ifdef _TMS320C6200 #define _62_ 1 #define _6x_ 1 #endif #ifdef _TMS320C6400 #define _64_ 1 #define _6x_ 1 #endif #ifdef _TMS320C6700 #define _67_ 1 #define _6x_ 1 #endif #ifdef M_I86 #define _86_ 1 #endif #ifdef _MVP_MP #define _80_ 1 #endif #ifdef _MVP_PP #define _80_ 1 #endif #ifdef _WIN32 #define _W32_ 1 #endif /* * ======== _TI_ ======== * _TI_ is defined for all TI targets */ #if defined(_29_) || defined(_30_) || defined(_40_) || defined(_50_) || defined(_54_) || defined(_55_) || defined (_6x_) || defined(_80_) || defined (_28_) || defined(_24_) #define _TI_ 1 #endif /* * ======== _FLOAT_ ======== * _FLOAT_ is defined for all targets that natively support floating point */ #if defined(_SUN_) || defined(_30_) || defined(_40_) || defined(_67_) || defined(_80_) #define _FLOAT_ 1 #endif /* * ======== _FIXED_ ======== * _FIXED_ is defined for all fixed point target architectures */ #if defined(_29_) || defined(_50_) || defined(_54_) || defined(_55_) || defined (_62_) || defined(_64_) || defined (_28_) #define _FIXED_ 1 #endif /* * ======== _TARGET_ ======== * _TARGET_ is defined for all target architectures (as opposed to * host-side software) */ #if defined(_FIXED_) || defined(_FLOAT_) #define _TARGET_ 1 #endif /* * 8, 16, 32-bit type definitions * * Sm* - 8-bit type * Md* - 16-bit type * Lg* - 32-bit type * * *Int - signed type * *Uns - unsigned type * *Bits - unsigned type (bit-maps) */ typedef char SmInt; /* SMSIZE-bit signed integer */ typedef short MdInt; /* MDSIZE-bit signed integer */ #if defined(_6x_) typedef int LgInt; /* LGSIZE-bit signed integer */ #else typedef long LgInt; /* LGSIZE-bit signed integer */ #endif typedef unsigned char SmUns; /* SMSIZE-bit unsigned integer */ typedef unsigned short MdUns; /* MDSIZE-bit unsigned integer */ #if defined(_6x_) typedef unsigned LgUns; /* LGSIZE-bit unsigned integer */ #else typedef unsigned long LgUns; /* LGSIZE-bit unsigned integer */ #endif typedef unsigned char SmBits; /* SMSIZE-bit bit string */ typedef unsigned short MdBits; /* MDSIZE-bit bit string */ #if defined(_6x_) typedef unsigned LgBits; /* LGSIZE-bit bit string */ #else typedef unsigned long LgBits; /* LGSIZE-bit bit string */ #endif /* * Aliases for standard C types */ typedef int Int; /* for those rare occasions */ typedef long int Long; typedef short int Short; typedef char Char; #define Void void typedef char *String; /* pointer to null-terminated character * sequence */ #if defined(_28_) || defined(_29_) || defined(_50_) || defined(_54_) || defined(_55_) || defined(_6x_) typedef unsigned Uns; #else typedef unsigned long Uns; #endif #if 0 #if defined(_80_) typedef int Bool; /* boolean */ #elif defined(_W32_) typedef long Bool; /* boolean to match Windows boolean def */ #else typedef MdUns Bool; /* boolean */ #endif #endif typedef SmBits Byte; /* smallest unit of addressable store */ typedef void *Ptr; /* pointer to arbitrary type */ /* Arg should be size of Ptr */ #if defined(M_I86SM) || defined(_29_) || defined(_50_) || defined(_54_) || defined(_6x_) typedef Int Arg; #elif defined(_55_) || defined(_28_) typedef void *Arg; #else typedef LgInt Arg; /* uninterpreted LGSIZE-bit word */ #endif typedef Int(*Fxn) (); /* generic function type */ #if defined(_80_) || defined(_SUN_) || defined(_67_) typedef float Float; #else typedef double Float; #endif #ifndef NULL #define NULL 0 #endif #if 0 #ifndef TRUE #define FALSE ((Bool)0) #define TRUE ((Bool)1) #endif #endif /* * These macros are used to cast 'Arg' types to 'Int' or 'Ptr'. * These macros were added for the 55x since Arg is not the same * size as Int and Ptr in 55x large model. */ #if defined(_28l_) || defined(_55l_) #define ArgToInt(A) ((Int)((long)(A) & 0xffff)) #define ArgToPtr(A) ((Ptr)(A)) #else #define ArgToInt(A) ((Int)(A)) #define ArgToPtr(A) ((Ptr)(A)) #endif /* * ======== __inline ======== * The following definitions define the macro __inline for those * C compilers that do not use __inline to indicate inline * expansion of functions. * * The TI C compilers support the "inline" keyword (ala C++). Both * Microsoft and GNU C compilers support the "__inline" keyword. The * native SUN OS 4.x C compiler doesn't understand either. */ #ifdef _TI_ #ifdef _LINT_ #define __inline #else #define __inline inline #endif #endif #ifdef _SUN4_ #define __inline #endif /* * ======== inline ======== * Define "inline" so that all C code can optionally use the "inline" * keyword. don't define if we are compiling with GNU C compiler version greater than 3.x */ #if !defined(inline) && !defined(__cplusplus) && !defined(_TI_) #if !((__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) #define inline __inline #endif #endif #endif /* STD_ */