1 /* 2 * Copyright 2001-2008 Texas Instruments - http://www.ti.com/ 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 18 /* 19 * ======== std.h ======== 20 * DSP-BIOS Bridge driver support functions for TI OMAP processors. 21 * 22 *! Revision History 23 *! ================ 24 *! 16-Feb-2004 vp GNU compiler 3.x defines inline keyword. Added appropriate 25 macros not to redefine inline keyword in this file. 26 *! 24-Oct-2002 ashu defined _TI_ and _FIXED_ symbols for 28x. 27 *! 24-Oct-2002 ashu defined _TI_ for 24x. 28 *! 01-Mar-2002 kln changed LARGE_MODEL and Arg definition for 28x 29 *! 01-Feb-2002 kln added definitions for 28x 30 *! 08-Dec-2000 kw: added 'ArgToInt' and 'ArgToPtr' macros 31 *! 30-Nov-2000 mf: Added _64_, _6x_; removed _7d_ 32 *! 30-May-2000 srid: Added __TMS320C55X__ for 55x; Arg is void * for 55 . 33 *! 18-Jun-1999 dr: Added '_TI_', fixed __inline for SUN4, added inline 34 *! 10-Feb-1999 rt: Added '55' support, changed 54's symbol to _TMS320C5XX 35 *! 29-Aug-1998 mf: fixed typo, removed obsolete targets 36 *! 08-Jun-1998 mf: _67_ is synonym for _7d_ 37 *! 10-Oct-1997 rt; added _7d_ for Raytheon C7DSP triggered by _TMS320C6700 38 *! 04-Aug-1997 cc: added _29_ for _TMS320C2XX 39 *! 11-Jul-1997 dlr: _5t_, and STD_SPOXTASK keyword for Tasking 40 *! 12-Jun-1997 mf: _TMS320C60 -> _TMS320C6200 41 *! 13-Feb-1997 mf: _62_, with 32-bit LgInt 42 *! 26-Nov-1996 kw: merged bios-c00's and wsx-a27's <std.h> changes 43 *! *and* revision history 44 *! 12-Sep-1996 kw: added C54x #ifdef's 45 *! 21-Aug-1996 mf: removed #define main smain for _21_ 46 *! 14-May-1996 gp: def'd out INT, FLOAT, and COMPLEX defines for WSX. 47 *! 11-Apr-1996 kw: define _W32_ based on _WIN32 (defined by MS compiler) 48 *! 07-Mar-1996 mg: added Win32 support 49 *! 06-Sep-1995 dh: added _77_ dynamic stack support via fxns77.h 50 *! 27-Jun-1995 dh: added _77_ support 51 *! 16-Mar-1995 mf: for _21_: #define main smain 52 *! 01-Mar-1995 mf: set _20_ and _60_ (as well as _21_ for both) 53 *! 22-Feb-1995 mf: Float is float for _SUN_ and _80_ 54 *! 22-Dec-1994 mf: Added _80_ definition, for PP or MP. 55 *! 09-Dec-1994 mf: Added _53_ definition. 56 *! 22-Nov-1994 mf: Ptr is void * everywhere. 57 *! Added definitions of _30_, etc. 58 *! 23-Aug-1994 dh removed _21_ special case (kw) 59 *! 17-Aug-1994 dh added _51_ support 60 *! 03-Aug-1994 kw updated _80_ support 61 *! 30-Jun-1994 kw added _80_ support 62 *! 05-Apr-1994 kw: Added _SUN_ to _FLOAT_ definition 63 *! 01-Mar-1994 kw: Made Bool an int (was MdUns) for _56_ (more efficient). 64 *! Added _53_ support. 65 */ 66 67 #ifndef STD_ 68 #define STD_ 69 70 #ifdef _TMS320C28X 71 #define _28_ 1 72 #ifdef LARGE_MODEL 73 #define _28l_ 1 74 #endif 75 #endif 76 #ifdef _TMS320C2XX 77 #define _29_ 1 78 #endif 79 #ifdef _TMS320C30 80 #define _30_ 1 81 #endif 82 #ifdef _TMS320C40 83 #define _40_ 1 84 #endif 85 #ifdef _TMS320C50 86 #define _50_ 1 87 #endif 88 #ifdef _TMS320C5XX 89 #define _54_ 1 90 #endif 91 #ifdef __TMS320C55X__ 92 #define _55_ 1 93 #ifdef __LARGE_MODEL__ 94 #define _55l_ 1 95 #endif 96 #endif 97 #ifdef _TMS320C6200 98 #define _62_ 1 99 #define _6x_ 1 100 #endif 101 #ifdef _TMS320C6400 102 #define _64_ 1 103 #define _6x_ 1 104 #endif 105 #ifdef _TMS320C6700 106 #define _67_ 1 107 #define _6x_ 1 108 #endif 109 #ifdef M_I86 110 #define _86_ 1 111 #endif 112 #ifdef _MVP_MP 113 #define _80_ 1 114 #endif 115 #ifdef _MVP_PP 116 #define _80_ 1 117 #endif 118 #ifdef _WIN32 119 #define _W32_ 1 120 #endif 121 122 /* 123 * ======== _TI_ ======== 124 * _TI_ is defined for all TI targets 125 */ 126 #if defined(_29_) || defined(_30_) || defined(_40_) || defined(_50_) || defined(_54_) || defined(_55_) || defined (_6x_) || defined(_80_) || defined (_28_) || defined(_24_) 127 #define _TI_ 1 128 #endif 129 130 /* 131 * ======== _FLOAT_ ======== 132 * _FLOAT_ is defined for all targets that natively support floating point 133 */ 134 #if defined(_SUN_) || defined(_30_) || defined(_40_) || defined(_67_) || defined(_80_) 135 #define _FLOAT_ 1 136 #endif 137 138 /* 139 * ======== _FIXED_ ======== 140 * _FIXED_ is defined for all fixed point target architectures 141 */ 142 #if defined(_29_) || defined(_50_) || defined(_54_) || defined(_55_) || defined (_62_) || defined(_64_) || defined (_28_) 143 #define _FIXED_ 1 144 #endif 145 146 /* 147 * ======== _TARGET_ ======== 148 * _TARGET_ is defined for all target architectures (as opposed to 149 * host-side software) 150 */ 151 #if defined(_FIXED_) || defined(_FLOAT_) 152 #define _TARGET_ 1 153 #endif 154 155 /* 156 * 8, 16, 32-bit type definitions 157 * 158 * Sm* - 8-bit type 159 * Md* - 16-bit type 160 * Lg* - 32-bit type 161 * 162 * *Int - signed type 163 * *Uns - unsigned type 164 * *Bits - unsigned type (bit-maps) 165 */ 166 typedef char SmInt; /* SMSIZE-bit signed integer */ 167 typedef short MdInt; /* MDSIZE-bit signed integer */ 168 #if defined(_6x_) 169 typedef int LgInt; /* LGSIZE-bit signed integer */ 170 #else 171 typedef long LgInt; /* LGSIZE-bit signed integer */ 172 #endif 173 174 typedef unsigned char SmUns; /* SMSIZE-bit unsigned integer */ 175 typedef unsigned short MdUns; /* MDSIZE-bit unsigned integer */ 176 #if defined(_6x_) 177 typedef unsigned LgUns; /* LGSIZE-bit unsigned integer */ 178 #else 179 typedef unsigned long LgUns; /* LGSIZE-bit unsigned integer */ 180 #endif 181 182 typedef unsigned char SmBits; /* SMSIZE-bit bit string */ 183 typedef unsigned short MdBits; /* MDSIZE-bit bit string */ 184 #if defined(_6x_) 185 typedef unsigned LgBits; /* LGSIZE-bit bit string */ 186 #else 187 typedef unsigned long LgBits; /* LGSIZE-bit bit string */ 188 #endif 189 190 /* 191 * Aliases for standard C types 192 */ 193 typedef int Int; /* for those rare occasions */ 194 typedef long int Long; 195 typedef short int Short; 196 typedef char Char; 197 #define Void void 198 199 typedef char *String; /* pointer to null-terminated character 200 * sequence 201 */ 202 203 #if defined(_28_) || defined(_29_) || defined(_50_) || defined(_54_) || defined(_55_) || defined(_6x_) 204 typedef unsigned Uns; 205 #else 206 typedef unsigned long Uns; 207 #endif 208 209 #if defined(_80_) 210 typedef int Bool; /* boolean */ 211 #elif defined(_W32_) 212 typedef long Bool; /* boolean to match Windows boolean def */ 213 #else 214 typedef MdUns Bool; /* boolean */ 215 #endif 216 217 typedef SmBits Byte; /* smallest unit of addressable store */ 218 typedef void *Ptr; /* pointer to arbitrary type */ 219 220 /* Arg should be size of Ptr */ 221 #if defined(M_I86SM) || defined(_29_) || defined(_50_) || defined(_54_) || defined(_6x_) 222 typedef Int Arg; 223 #elif defined(_55_) || defined(_28_) 224 typedef void *Arg; 225 #else 226 typedef LgInt Arg; /* uninterpreted LGSIZE-bit word */ 227 #endif 228 229 typedef Int(*Fxn) (); /* generic function type */ 230 231 #if defined(_80_) || defined(_SUN_) || defined(_67_) 232 typedef float Float; 233 #else 234 typedef double Float; 235 #endif 236 237 #ifndef NULL 238 #define NULL 0 239 #endif 240 241 #ifndef TRUE 242 #define FALSE ((Bool)0) 243 #define TRUE ((Bool)1) 244 #endif 245 246 /* 247 * These macros are used to cast 'Arg' types to 'Int' or 'Ptr'. 248 * These macros were added for the 55x since Arg is not the same 249 * size as Int and Ptr in 55x large model. 250 */ 251 #if defined(_28l_) || defined(_55l_) 252 #define ArgToInt(A) ((Int)((long)(A) & 0xffff)) 253 #define ArgToPtr(A) ((Ptr)(A)) 254 #else 255 #define ArgToInt(A) ((Int)(A)) 256 #define ArgToPtr(A) ((Ptr)(A)) 257 #endif 258 259 /* 260 * ======== __inline ======== 261 * The following definitions define the macro __inline for those 262 * C compilers that do not use __inline to indicate inline 263 * expansion of functions. 264 * 265 * The TI C compilers support the "inline" keyword (ala C++). Both 266 * Microsoft and GNU C compilers support the "__inline" keyword. The 267 * native SUN OS 4.x C compiler doesn't understand either. 268 */ 269 #ifdef _TI_ 270 #ifdef _LINT_ 271 #define __inline 272 #else 273 #define __inline inline 274 #endif 275 #endif 276 277 #ifdef _SUN4_ 278 #define __inline 279 #endif 280 281 /* 282 * ======== inline ======== 283 * Define "inline" so that all C code can optionally use the "inline" 284 * keyword. don't define if we are compiling with GNU C compiler version greater than 3.x 285 */ 286 #if !defined(inline) && !defined(__cplusplus) && !defined(_TI_) 287 #if !((__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) 288 #define inline __inline 289 #endif 290 #endif 291 292 #endif /* STD_ */ 293