1/*
2 * Copyright (C) 1999-2013, Broadcom Corporation
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 *
16 * $Id: typedefs.h 286783 2011-09-29 06:18:57Z $
17 */
18
19#ifndef _TYPEDEFS_H_
20#define _TYPEDEFS_H_
21
22#ifdef SITE_TYPEDEFS
23
24/*
25 * Define SITE_TYPEDEFS in the compile to include a site-specific
26 * typedef file "site_typedefs.h".
27 *
28 * If SITE_TYPEDEFS is not defined, then the code section below makes
29 * inferences about the compile environment based on defined symbols and
30 * possibly compiler pragmas.
31 *
32 * Following these two sections is the Default Typedefs section.
33 * This section is only processed if USE_TYPEDEF_DEFAULTS is
34 * defined. This section has a default set of typedefs and a few
35 * preprocessor symbols (TRUE, FALSE, NULL, ...).
36 */
37
38#include "site_typedefs.h"
39
40#else
41
42/*
43 * Infer the compile environment based on preprocessor symbols and pragmas.
44 * Override type definitions as needed, and include configuration-dependent
45 * header files to define types.
46 */
47
48#ifdef __cplusplus
49
50#define TYPEDEF_BOOL
51#ifndef FALSE
52#define FALSE	false
53#endif
54#ifndef TRUE
55#define TRUE	true
56#endif
57
58#else	/* ! __cplusplus */
59
60
61#endif	/* ! __cplusplus */
62
63#if defined(__x86_64__)
64#define TYPEDEF_UINTPTR
65typedef unsigned long long int uintptr;
66#endif
67
68
69
70
71
72#if defined(_NEED_SIZE_T_)
73typedef long unsigned int size_t;
74#endif
75
76
77
78
79#if defined(__sparc__)
80#define TYPEDEF_ULONG
81#endif
82
83
84/*
85 * If this is either a Linux hybrid build or the per-port code of a hybrid build
86 * then use the Linux header files to get some of the typedefs.  Otherwise, define
87 * them entirely in this file.  We can't always define the types because we get
88 * a duplicate typedef error; there is no way to "undefine" a typedef.
89 * We know when it's per-port code because each file defines LINUX_PORT at the top.
90 */
91#if !defined(LINUX_HYBRID) || defined(LINUX_PORT)
92#define TYPEDEF_UINT
93#ifndef TARGETENV_android
94#define TYPEDEF_USHORT
95#define TYPEDEF_ULONG
96#endif /* TARGETENV_android */
97#ifdef __KERNEL__
98#include <linux/version.h>
99#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19))
100#define TYPEDEF_BOOL
101#endif	/* >= 2.6.19 */
102/* special detection for 2.6.18-128.7.1.0.1.el5 */
103#if (LINUX_VERSION_CODE == KERNEL_VERSION(2, 6, 18))
104#include <linux/compiler.h>
105#ifdef noinline_for_stack
106#define TYPEDEF_BOOL
107#endif
108#endif	/* == 2.6.18 */
109#endif	/* __KERNEL__ */
110#endif  /* !defined(LINUX_HYBRID) || defined(LINUX_PORT) */
111
112
113
114
115/* Do not support the (u)int64 types with strict ansi for GNU C */
116#if defined(__GNUC__) && defined(__STRICT_ANSI__)
117#define TYPEDEF_INT64
118#define TYPEDEF_UINT64
119#endif
120
121/* ICL accepts unsigned 64 bit type only, and complains in ANSI mode
122 * for signed or unsigned
123 */
124#if defined(__ICL)
125
126#define TYPEDEF_INT64
127
128#if defined(__STDC__)
129#define TYPEDEF_UINT64
130#endif
131
132#endif /* __ICL */
133
134#if !defined(__DJGPP__)
135
136/* pick up ushort & uint from standard types.h */
137#if defined(__KERNEL__)
138
139/* See note above */
140#if !defined(LINUX_HYBRID) || defined(LINUX_PORT)
141#include <linux/types.h>	/* sys/types.h and linux/types.h are oil and water */
142#endif /* !defined(LINUX_HYBRID) || defined(LINUX_PORT) */
143
144#else
145
146
147#include <sys/types.h>
148
149#endif /* linux && __KERNEL__ */
150
151#endif
152
153
154
155/* use the default typedefs in the next section of this file */
156#define USE_TYPEDEF_DEFAULTS
157
158#endif /* SITE_TYPEDEFS */
159
160
161/*
162 * Default Typedefs
163 */
164
165#ifdef USE_TYPEDEF_DEFAULTS
166#undef USE_TYPEDEF_DEFAULTS
167
168#ifndef TYPEDEF_BOOL
169typedef	/* @abstract@ */ unsigned char	bool;
170#endif
171
172/* define uchar, ushort, uint, ulong */
173
174#ifndef TYPEDEF_UCHAR
175typedef unsigned char	uchar;
176#endif
177
178#ifndef TYPEDEF_USHORT
179typedef unsigned short	ushort;
180#endif
181
182#ifndef TYPEDEF_UINT
183typedef unsigned int	uint;
184#endif
185
186#ifndef TYPEDEF_ULONG
187typedef unsigned long	ulong;
188#endif
189
190/* define [u]int8/16/32/64, uintptr */
191
192#ifndef TYPEDEF_UINT8
193typedef unsigned char	uint8;
194#endif
195
196#ifndef TYPEDEF_UINT16
197typedef unsigned short	uint16;
198#endif
199
200#ifndef TYPEDEF_UINT32
201typedef unsigned int	uint32;
202#endif
203
204#ifndef TYPEDEF_UINT64
205typedef unsigned long long uint64;
206#endif
207
208#ifndef TYPEDEF_UINTPTR
209typedef unsigned int	uintptr;
210#endif
211
212#ifndef TYPEDEF_INT8
213typedef signed char	int8;
214#endif
215
216#ifndef TYPEDEF_INT16
217typedef signed short	int16;
218#endif
219
220#ifndef TYPEDEF_INT32
221typedef signed int	int32;
222#endif
223
224#ifndef TYPEDEF_INT64
225typedef signed long long int64;
226#endif
227
228/* define float32/64, float_t */
229
230#ifndef TYPEDEF_FLOAT32
231typedef float		float32;
232#endif
233
234#ifndef TYPEDEF_FLOAT64
235typedef double		float64;
236#endif
237
238/*
239 * abstracted floating point type allows for compile time selection of
240 * single or double precision arithmetic.  Compiling with -DFLOAT32
241 * selects single precision; the default is double precision.
242 */
243
244#ifndef TYPEDEF_FLOAT_T
245
246#if defined(FLOAT32)
247typedef float32 float_t;
248#else /* default to double precision floating point */
249typedef float64 float_t;
250#endif
251
252#endif /* TYPEDEF_FLOAT_T */
253
254/* define macro values */
255
256#ifndef FALSE
257#define FALSE	0
258#endif
259
260#ifndef TRUE
261#define TRUE	1  /* TRUE */
262#endif
263
264#ifndef NULL
265#define	NULL	0
266#endif
267
268#ifndef OFF
269#define	OFF	0
270#endif
271
272#ifndef ON
273#define	ON	1  /* ON = 1 */
274#endif
275
276#define	AUTO	(-1) /* Auto = -1 */
277
278/* define PTRSZ, INLINE */
279
280#ifndef PTRSZ
281#define	PTRSZ	sizeof(char*)
282#endif
283
284
285/* Detect compiler type. */
286#if defined(__GNUC__) || defined(__lint)
287	#define BWL_COMPILER_GNU
288#elif defined(__CC_ARM) && __CC_ARM
289	#define BWL_COMPILER_ARMCC
290#else
291	#error "Unknown compiler!"
292#endif
293
294
295#ifndef INLINE
296	#if defined(BWL_COMPILER_MICROSOFT)
297		#define INLINE __inline
298	#elif defined(BWL_COMPILER_GNU)
299		#define INLINE __inline__
300	#elif defined(BWL_COMPILER_ARMCC)
301		#define INLINE	__inline
302	#else
303		#define INLINE
304	#endif
305#endif /* INLINE */
306
307#undef TYPEDEF_BOOL
308#undef TYPEDEF_UCHAR
309#undef TYPEDEF_USHORT
310#undef TYPEDEF_UINT
311#undef TYPEDEF_ULONG
312#undef TYPEDEF_UINT8
313#undef TYPEDEF_UINT16
314#undef TYPEDEF_UINT32
315#undef TYPEDEF_UINT64
316#undef TYPEDEF_UINTPTR
317#undef TYPEDEF_INT8
318#undef TYPEDEF_INT16
319#undef TYPEDEF_INT32
320#undef TYPEDEF_INT64
321#undef TYPEDEF_FLOAT32
322#undef TYPEDEF_FLOAT64
323#undef TYPEDEF_FLOAT_T
324
325#endif /* USE_TYPEDEF_DEFAULTS */
326
327/* Suppress unused parameter warning */
328#define UNUSED_PARAMETER(x) (void)(x)
329
330/* Avoid warning for discarded const or volatile qualifier in special cases (-Wcast-qual) */
331#define DISCARD_QUAL(ptr, type) ((type *)(uintptr)(ptr))
332
333/*
334 * Including the bcmdefs.h here, to make sure everyone including typedefs.h
335 * gets this automatically
336*/
337#include <bcmdefs.h>
338#endif /* _TYPEDEFS_H_ */
339