1/*
2 * Copyright (C) 2010, Broadcom Corporation. All Rights Reserved.
3 *
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
11 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
13 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 * $Id: typedefs.h,v 1.103.12.6 2010/12/21 02:38:54 Exp $
16 */
17
18#ifndef _TYPEDEFS_H_
19#define _TYPEDEFS_H_
20
21#ifdef SITE_TYPEDEFS
22
23/*
24 * Define SITE_TYPEDEFS in the compile to include a site-specific
25 * typedef file "site_typedefs.h".
26 *
27 * If SITE_TYPEDEFS is not defined, then the code section below makes
28 * inferences about the compile environment based on defined symbols and
29 * possibly compiler pragmas.
30 *
31 * Following these two sections is the Default Typedefs section.
32 * This section is only processed if USE_TYPEDEF_DEFAULTS is
33 * defined. This section has a default set of typedefs and a few
34 * preprocessor symbols (TRUE, FALSE, NULL, ...).
35 */
36
37#include "site_typedefs.h"
38
39#else
40
41/*
42 * Infer the compile environment based on preprocessor symbols and pragmas.
43 * Override type definitions as needed, and include configuration-dependent
44 * header files to define types.
45 */
46
47#ifdef __cplusplus
48
49#define TYPEDEF_BOOL
50#ifndef FALSE
51#define FALSE	false
52#endif
53#ifndef TRUE
54#define TRUE	true
55#endif
56
57#else	/* ! __cplusplus */
58
59#if defined(_WIN32)
60
61#define TYPEDEF_BOOL
62typedef	unsigned char	bool;			/* consistent w/BOOL */
63
64#endif /* _WIN32 */
65
66#endif	/* ! __cplusplus */
67
68#if defined(_WIN64) && !defined(EFI)
69/* use the Windows ULONG_PTR type when compiling for 64 bit */
70#include <basetsd.h>
71#define TYPEDEF_UINTPTR
72typedef ULONG_PTR uintptr;
73#elif defined(__x86_64__)
74#define TYPEDEF_UINTPTR
75typedef unsigned long long int uintptr;
76#endif
77
78
79#if defined(_MINOSL_)
80#define _NEED_SIZE_T_
81#endif
82
83#if defined(EFI) && !defined(_WIN64)
84#define _NEED_SIZE_T_
85#endif
86
87#if defined(TARGETOS_nucleus)
88/* for 'size_t' type */
89#include <stddef.h>
90
91/* float_t types conflict with the same typedefs from the standard ANSI-C
92** math.h header file. Don't re-typedef them here.
93*/
94#define TYPEDEF_FLOAT_T
95#endif   /* TARGETOS_nucleus */
96
97#if defined(_NEED_SIZE_T_)
98typedef long unsigned int size_t;
99#endif
100
101#ifdef _MSC_VER	    /* Microsoft C */
102#define TYPEDEF_INT64
103#define TYPEDEF_UINT64
104typedef signed __int64	int64;
105typedef unsigned __int64 uint64;
106#endif
107
108#if defined(MACOSX)
109#ifdef KERNEL
110#include <libkern/version.h>
111#if VERSION_MAJOR > 10
112#define WLP2P
113#define IO80211P2P
114#define APSTA
115#define WLMCHAN
116#define WL_MULTIQUEUE
117#define WL_BSSCFG_TX_SUPR
118#define WIFI_ACT_FRAME
119#define FAST_ACTFRM_TX
120#endif
121#endif /* KERNEL */
122#define TYPEDEF_BOOL
123#endif
124
125#if defined(__NetBSD__)
126#define TYPEDEF_ULONG
127#endif
128
129#if defined(__sparc__)
130#define TYPEDEF_ULONG
131#endif
132
133
134#ifdef	linux
135/*
136 * If this is either a Linux hybrid build or the per-port code of a hybrid build
137 * then use the Linux header files to get some of the typedefs.  Otherwise, define
138 * them entirely in this file.  We can't always define the types because we get
139 * a duplicate typedef error; there is no way to "undefine" a typedef.
140 * We know when it's per-port code because each file defines LINUX_PORT at the top.
141 */
142#if !defined(LINUX_HYBRID) || defined(LINUX_PORT)
143#define TYPEDEF_UINT
144#ifndef TARGETENV_android
145#define TYPEDEF_USHORT
146#define TYPEDEF_ULONG
147#endif /* TARGETENV_android */
148#ifdef __KERNEL__
149#include <linux/version.h>
150#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19))
151#define TYPEDEF_BOOL
152#endif	/* >= 2.6.19 */
153#endif	/* __KERNEL__ */
154#endif  /* !defined(LINUX_HYBRID) || defined(LINUX_PORT) */
155#endif	/* linux */
156
157#if defined(__ECOS)
158#define TYPEDEF_UCHAR
159#define TYPEDEF_UINT
160#define TYPEDEF_USHORT
161#define TYPEDEF_ULONG
162#define TYPEDEF_BOOL
163#endif
164
165#if !defined(linux) && !defined(_WIN32) && !defined(_CFE_) && !defined(_MINOSL_) && \
166	!defined(__DJGPP__) && !defined(__ECOS) && !defined(__BOB__) && \
167	!defined(TARGETOS_nucleus)
168#define TYPEDEF_UINT
169#define TYPEDEF_USHORT
170#endif
171
172
173/* Do not support the (u)int64 types with strict ansi for GNU C */
174#if defined(__GNUC__) && defined(__STRICT_ANSI__)
175#define TYPEDEF_INT64
176#define TYPEDEF_UINT64
177#endif
178
179/* ICL accepts unsigned 64 bit type only, and complains in ANSI mode
180 * for signed or unsigned
181 */
182#if defined(__ICL)
183
184#define TYPEDEF_INT64
185
186#if defined(__STDC__)
187#define TYPEDEF_UINT64
188#endif
189
190#endif /* __ICL */
191
192#if !defined(_WIN32) && !defined(_CFE_) && !defined(_MINOSL_) && !defined(__DJGPP__) && \
193	!defined(__BOB__) && !defined(TARGETOS_nucleus)
194
195/* pick up ushort & uint from standard types.h */
196#if defined(linux) && defined(__KERNEL__)
197
198/* See note above */
199#if !defined(LINUX_HYBRID) || defined(LINUX_PORT)
200#ifdef USER_MODE
201#include <sys/types.h>
202#else
203#include <linux/types.h>	/* sys/types.h and linux/types.h are oil and water */
204#endif /* USER_MODE */
205#endif /* !defined(LINUX_HYBRID) || defined(LINUX_PORT) */
206
207#else
208
209#if defined(__ECOS)
210#include <pkgconf/infra.h>
211#include <cyg/infra/cyg_type.h>
212#include <stdarg.h>
213#endif
214
215#include <sys/types.h>
216
217#endif /* linux && __KERNEL__ */
218
219#endif
220
221#if defined(MACOSX)
222
223#ifdef __BIG_ENDIAN__
224#define IL_BIGENDIAN
225#else
226#ifdef IL_BIGENDIAN
227#error "IL_BIGENDIAN was defined for a little-endian compile"
228#endif
229#endif /* __BIG_ENDIAN__ */
230
231#if !defined(__cplusplus)
232
233#if defined(__i386__)
234typedef unsigned char bool;
235#else
236typedef unsigned int bool;
237#endif
238#define TYPE_BOOL 1
239enum {
240    false	= 0,
241    true	= 1
242};
243
244#if defined(KERNEL)
245#include <IOKit/IOTypes.h>
246#endif /* KERNEL */
247
248#endif /* __cplusplus */
249
250#endif /* MACOSX */
251
252
253/* use the default typedefs in the next section of this file */
254#define USE_TYPEDEF_DEFAULTS
255
256#endif /* SITE_TYPEDEFS */
257
258
259/*
260 * Default Typedefs
261 */
262
263#ifdef USE_TYPEDEF_DEFAULTS
264#undef USE_TYPEDEF_DEFAULTS
265
266#ifndef TYPEDEF_BOOL
267typedef	/* @abstract@ */ unsigned char	bool;
268#endif
269
270/* define uchar, ushort, uint, ulong */
271
272#ifndef TYPEDEF_UCHAR
273typedef unsigned char	uchar;
274#endif
275
276#ifndef TYPEDEF_USHORT
277typedef unsigned short	ushort;
278#endif
279
280#ifndef TYPEDEF_UINT
281typedef unsigned int	uint;
282#endif
283
284#ifndef TYPEDEF_ULONG
285typedef unsigned long	ulong;
286#endif
287
288/* define [u]int8/16/32/64, uintptr */
289
290#ifndef TYPEDEF_UINT8
291typedef unsigned char	uint8;
292#endif
293
294#ifndef TYPEDEF_UINT16
295typedef unsigned short	uint16;
296#endif
297
298#ifndef TYPEDEF_UINT32
299typedef unsigned int	uint32;
300#endif
301
302#ifndef TYPEDEF_UINT64
303typedef unsigned long long uint64;
304#endif
305
306#ifndef TYPEDEF_UINTPTR
307typedef unsigned int	uintptr;
308#endif
309
310#ifndef TYPEDEF_INT8
311typedef signed char	int8;
312#endif
313
314#ifndef TYPEDEF_INT16
315typedef signed short	int16;
316#endif
317
318#ifndef TYPEDEF_INT32
319typedef signed int	int32;
320#endif
321
322#ifndef TYPEDEF_INT64
323typedef signed long long int64;
324#endif
325
326/* define float32/64, float_t */
327
328#ifndef TYPEDEF_FLOAT32
329typedef float		float32;
330#endif
331
332#ifndef TYPEDEF_FLOAT64
333typedef double		float64;
334#endif
335
336/*
337 * abstracted floating point type allows for compile time selection of
338 * single or double precision arithmetic.  Compiling with -DFLOAT32
339 * selects single precision; the default is double precision.
340 */
341
342#ifndef TYPEDEF_FLOAT_T
343
344#if defined(FLOAT32)
345typedef float32 float_t;
346#else /* default to double precision floating point */
347typedef float64 float_t;
348#endif
349
350#endif /* TYPEDEF_FLOAT_T */
351
352/* define macro values */
353
354#ifndef FALSE
355#define FALSE	0
356#endif
357
358#ifndef TRUE
359#define TRUE	1  /* TRUE */
360#endif
361
362#ifndef NULL
363#define	NULL	0
364#endif
365
366#ifndef OFF
367#define	OFF	0
368#endif
369
370#ifndef ON
371#define	ON	1  /* ON = 1 */
372#endif
373
374#define	AUTO	(-1) /* Auto = -1 */
375
376/* define PTRSZ, INLINE */
377
378#ifndef PTRSZ
379#define	PTRSZ	sizeof(char*)
380#endif
381
382
383/* Detect compiler type. */
384#ifdef _MSC_VER
385	#define BWL_COMPILER_MICROSOFT
386#elif defined(__GNUC__)
387	#define BWL_COMPILER_GNU
388#elif defined(__CC_ARM) && __CC_ARM
389	#define BWL_COMPILER_ARMCC
390#else
391	#error "Unknown compiler!"
392#endif /* _MSC_VER */
393
394
395#ifndef INLINE
396	#if defined(BWL_COMPILER_MICROSOFT)
397		#define INLINE __inline
398	#elif defined(BWL_COMPILER_GNU)
399		#define INLINE __inline__
400	#elif defined(BWL_COMPILER_ARMCC)
401		#define INLINE	__inline
402	#else
403		#define INLINE
404	#endif /* _MSC_VER */
405#endif /* INLINE */
406
407#undef TYPEDEF_BOOL
408#undef TYPEDEF_UCHAR
409#undef TYPEDEF_USHORT
410#undef TYPEDEF_UINT
411#undef TYPEDEF_ULONG
412#undef TYPEDEF_UINT8
413#undef TYPEDEF_UINT16
414#undef TYPEDEF_UINT32
415#undef TYPEDEF_UINT64
416#undef TYPEDEF_UINTPTR
417#undef TYPEDEF_INT8
418#undef TYPEDEF_INT16
419#undef TYPEDEF_INT32
420#undef TYPEDEF_INT64
421#undef TYPEDEF_FLOAT32
422#undef TYPEDEF_FLOAT64
423#undef TYPEDEF_FLOAT_T
424
425#endif /* USE_TYPEDEF_DEFAULTS */
426
427/* Suppress unused parameter warning */
428#define UNUSED_PARAMETER(x) (void)(x)
429
430/*
431 * Including the bcmdefs.h here, to make sure everyone including typedefs.h
432 * gets this automatically
433*/
434#include <bcmdefs.h>
435/*
436 * If android target is building then include this file
437 */
438#ifndef LINUX_HYBRID
439#ifdef TARGETENV_android
440#include <bcm_android_types.h>
441#endif /* TARGETENV_android */
442#endif /* LINUX_HYBRID */
443
444#endif /* _TYPEDEFS_H_ */
445