| /* |
| * Copyright 2001-2008 Texas Instruments - http://www.ti.com/ |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| |
| /* |
| * ======== std.h ======== |
| * DSP-BIOS Bridge driver support functions for TI OMAP processors. |
| * |
| *! 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 defined(_80_) |
| typedef int Bool; /* boolean */ |
| #elif defined(_W32_) |
| typedef long Bool; /* boolean to match Windows boolean def */ |
| #else |
| typedef MdUns Bool; /* boolean */ |
| #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 |
| |
| #ifndef TRUE |
| #define FALSE ((Bool)0) |
| #define TRUE ((Bool)1) |
| #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_ */ |