1 /*
2  * dspbridge/mpu_api/inc/std.h
3  *
4  * DSP-BIOS Bridge driver support functions for TI OMAP processors.
5  *
6  * Copyright (C) 2007 Texas Instruments, Inc.
7  *
8  * This program is free software; you can redistribute it and/or modify it
9  * under the terms of the GNU Lesser General Public License as published
10  * by the Free Software Foundation version 2.1 of the License.
11  *
12  * This program is distributed .as is. WITHOUT ANY WARRANTY of any kind,
13  * whether express or implied; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  */
17 
18 
19 /*
20  *  ======== std.h ========
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 0
210 #if defined(_80_)
211 typedef int Bool;		/* boolean */
212 #elif defined(_W32_)
213 typedef long Bool;		/* boolean to match Windows boolean def */
214 #else
215 typedef MdUns Bool;		/* boolean */
216 #endif
217 #endif
218 
219 typedef SmBits Byte;		/* smallest unit of addressable store */
220 typedef void *Ptr;		/* pointer to arbitrary type */
221 
222 /* Arg should be size of Ptr */
223 #if defined(M_I86SM) || defined(_29_) || defined(_50_) || defined(_54_) || defined(_6x_)
224 typedef Int Arg;
225 #elif defined(_55_) || defined(_28_)
226 typedef void *Arg;
227 #else
228 typedef LgInt Arg;		/* uninterpreted LGSIZE-bit word */
229 #endif
230 
231 typedef Int(*Fxn) ();		/* generic function type */
232 
233 #if defined(_80_) || defined(_SUN_) || defined(_67_)
234 typedef float Float;
235 #else
236 typedef double Float;
237 #endif
238 
239 #ifndef NULL
240 #define NULL 0
241 #endif
242 
243 #if 0
244 #ifndef TRUE
245 #define FALSE ((Bool)0)
246 #define TRUE  ((Bool)1)
247 #endif
248 #endif
249 
250 /*
251  * These macros are used to cast 'Arg' types to 'Int' or 'Ptr'.
252  * These macros were added for the 55x since Arg is not the same
253  * size as Int and Ptr in 55x large model.
254  */
255 #if defined(_28l_) || defined(_55l_)
256 #define ArgToInt(A)	((Int)((long)(A) & 0xffff))
257 #define ArgToPtr(A)	((Ptr)(A))
258 #else
259 #define ArgToInt(A)	((Int)(A))
260 #define ArgToPtr(A)	((Ptr)(A))
261 #endif
262 
263 /*
264  *  ======== __inline ========
265  *  The following definitions define the macro __inline for those
266  *  C compilers that do not use __inline to indicate inline
267  *  expansion of functions.
268  *
269  *  The TI C compilers support the "inline" keyword (ala C++).  Both
270  *  Microsoft and GNU C compilers support the "__inline" keyword.  The
271  *  native SUN OS 4.x C compiler doesn't understand either.
272  */
273 #ifdef _TI_
274 #ifdef _LINT_
275 #define __inline
276 #else
277 #define __inline inline
278 #endif
279 #endif
280 
281 #ifdef _SUN4_
282 #define __inline
283 #endif
284 
285 /*
286  *  ======== inline ========
287  *  Define "inline" so that all C code can optionally use the "inline"
288  *  keyword. don't define if we are compiling with GNU C compiler version greater than 3.x
289  */
290 #if !defined(inline) && !defined(__cplusplus) && !defined(_TI_)
291 #if !((__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
292 #define inline	__inline
293 #endif
294 #endif
295 
296 #endif				/* STD_ */
297