/*
* 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_ */