296 lines
8 KiB
C
296 lines
8 KiB
C
/*
|
|
* 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_ */
|