1eef4f27bSRobert Mustacchi /*
2eef4f27bSRobert Mustacchi  * Copyright 2014-2017 Cavium, Inc.
3eef4f27bSRobert Mustacchi  * The contents of this file are subject to the terms of the Common Development
4eef4f27bSRobert Mustacchi  * and Distribution License, v.1,  (the "License").
5eef4f27bSRobert Mustacchi  *
6eef4f27bSRobert Mustacchi  * You may not use this file except in compliance with the License.
7eef4f27bSRobert Mustacchi  *
8eef4f27bSRobert Mustacchi  * You can obtain a copy of the License at available
9eef4f27bSRobert Mustacchi  * at http://opensource.org/licenses/CDDL-1.0
10eef4f27bSRobert Mustacchi  *
11eef4f27bSRobert Mustacchi  * See the License for the specific language governing permissions and
12eef4f27bSRobert Mustacchi  * limitations under the License.
13eef4f27bSRobert Mustacchi  */
14eef4f27bSRobert Mustacchi 
15eef4f27bSRobert Mustacchi #ifndef __bcmtype_h__
16eef4f27bSRobert Mustacchi #define __bcmtype_h__
17eef4f27bSRobert Mustacchi 
18eef4f27bSRobert Mustacchi #if defined(UEFI) && defined (EVEREST_DIAG)
19eef4f27bSRobert Mustacchi #include <machine/endian.h>
20eef4f27bSRobert Mustacchi #endif
21eef4f27bSRobert Mustacchi 
22eef4f27bSRobert Mustacchi #ifndef IN
23eef4f27bSRobert Mustacchi #define IN
24eef4f27bSRobert Mustacchi #endif /* IN */
25eef4f27bSRobert Mustacchi 
26eef4f27bSRobert Mustacchi #ifndef OUT
27eef4f27bSRobert Mustacchi #define OUT
28eef4f27bSRobert Mustacchi #endif /* OUT */
29eef4f27bSRobert Mustacchi 
30eef4f27bSRobert Mustacchi #ifndef INOUT
31eef4f27bSRobert Mustacchi #define INOUT
32eef4f27bSRobert Mustacchi #endif /* INOUT */
33eef4f27bSRobert Mustacchi 
34eef4f27bSRobert Mustacchi #ifndef OPTIONAL
35eef4f27bSRobert Mustacchi #define OPTIONAL
36eef4f27bSRobert Mustacchi #endif /* OPTIONAL */
37eef4f27bSRobert Mustacchi 
38eef4f27bSRobert Mustacchi #if defined(__LINUX) || defined (USER_LINUX)
39eef4f27bSRobert Mustacchi 
40eef4f27bSRobert Mustacchi #ifdef __LINUX
41eef4f27bSRobert Mustacchi 
42eef4f27bSRobert Mustacchi #ifdef __BIG_ENDIAN
43eef4f27bSRobert Mustacchi #ifndef BIG_ENDIAN
44eef4f27bSRobert Mustacchi #define BIG_ENDIAN
45eef4f27bSRobert Mustacchi #endif
46eef4f27bSRobert Mustacchi #else /* __LITTLE_ENDIAN */
47eef4f27bSRobert Mustacchi #ifndef LITTLE_ENDIAN
48eef4f27bSRobert Mustacchi #define LITTLE_ENDIAN
49eef4f27bSRobert Mustacchi #endif
50eef4f27bSRobert Mustacchi #endif
51eef4f27bSRobert Mustacchi 
52eef4f27bSRobert Mustacchi /*
53eef4f27bSRobert Mustacchi  * define underscore-t types
54eef4f27bSRobert Mustacchi  */
55eef4f27bSRobert Mustacchi typedef u64 u64_t;
56eef4f27bSRobert Mustacchi typedef u32 u32_t;
57eef4f27bSRobert Mustacchi typedef u16 u16_t;
58eef4f27bSRobert Mustacchi typedef u8  u8_t;
59eef4f27bSRobert Mustacchi 
60eef4f27bSRobert Mustacchi typedef s64 s64_t;
61eef4f27bSRobert Mustacchi typedef s32 s32_t;
62eef4f27bSRobert Mustacchi typedef s16 s16_t;
63eef4f27bSRobert Mustacchi typedef s8  s8_t;
64eef4f27bSRobert Mustacchi 
65eef4f27bSRobert Mustacchi typedef unsigned long int_ptr_t;
66eef4f27bSRobert Mustacchi 
67eef4f27bSRobert Mustacchi #else /* USER_LINUX */
68eef4f27bSRobert Mustacchi 
69eef4f27bSRobert Mustacchi #if __BYTE_ORDER == __LITTLE_ENDIAN
70eef4f27bSRobert Mustacchi #undef BIG_ENDIAN
71eef4f27bSRobert Mustacchi #undef __BIG_ENDIAN
72eef4f27bSRobert Mustacchi #else
73eef4f27bSRobert Mustacchi #undef LITTLE_ENDIAN
74eef4f27bSRobert Mustacchi #undef __LITTLE_ENDIAN
75eef4f27bSRobert Mustacchi #endif
76eef4f27bSRobert Mustacchi 
77eef4f27bSRobert Mustacchi /*
78eef4f27bSRobert Mustacchi  * define underscore-t types
79eef4f27bSRobert Mustacchi  */
80eef4f27bSRobert Mustacchi typedef u_int64_t u64_t;
81eef4f27bSRobert Mustacchi typedef u_int32_t u32_t;
82eef4f27bSRobert Mustacchi typedef u_int16_t u16_t;
83eef4f27bSRobert Mustacchi typedef u_int8_t  u8_t;
84eef4f27bSRobert Mustacchi 
85eef4f27bSRobert Mustacchi typedef int64_t s64_t;
86eef4f27bSRobert Mustacchi typedef int32_t s32_t;
87eef4f27bSRobert Mustacchi typedef int16_t s16_t;
88eef4f27bSRobert Mustacchi typedef int8_t  s8_t;
89eef4f27bSRobert Mustacchi 
90eef4f27bSRobert Mustacchi typedef u_int64_t u64;
91eef4f27bSRobert Mustacchi typedef u_int32_t u32;
92eef4f27bSRobert Mustacchi typedef u_int16_t u16;
93eef4f27bSRobert Mustacchi typedef u_int8_t  u8;
94eef4f27bSRobert Mustacchi 
95eef4f27bSRobert Mustacchi typedef int64_t s64;
96eef4f27bSRobert Mustacchi typedef int32_t s32;
97eef4f27bSRobert Mustacchi typedef int16_t s16;
98eef4f27bSRobert Mustacchi typedef int8_t  s8;
99eef4f27bSRobert Mustacchi 
100eef4f27bSRobert Mustacchi typedef unsigned long int_ptr_t;
101eef4f27bSRobert Mustacchi 
102eef4f27bSRobert Mustacchi /* Define upper case types */
103eef4f27bSRobert Mustacchi 
104eef4f27bSRobert Mustacchi typedef u64_t 	U64;
105eef4f27bSRobert Mustacchi typedef u32_t 	U32;
106eef4f27bSRobert Mustacchi typedef u16_t 	U16;
107eef4f27bSRobert Mustacchi typedef u8_t  	U8;
108eef4f27bSRobert Mustacchi 
109eef4f27bSRobert Mustacchi typedef s64_t	S64;
110eef4f27bSRobert Mustacchi typedef s32_t	S32;
111eef4f27bSRobert Mustacchi typedef s16_t	S16;
112eef4f27bSRobert Mustacchi typedef s8_t	S8;
113eef4f27bSRobert Mustacchi 
114eef4f27bSRobert Mustacchi #endif
115eef4f27bSRobert Mustacchi 
116eef4f27bSRobert Mustacchi 
117eef4f27bSRobert Mustacchi 
118eef4f27bSRobert Mustacchi #else
119eef4f27bSRobert Mustacchi /*
120eef4f27bSRobert Mustacchi  * define the data model
121eef4f27bSRobert Mustacchi  */
122eef4f27bSRobert Mustacchi #if !defined(LP64) && !defined(P64) && !defined(LLP64)
123eef4f27bSRobert Mustacchi   /* VC 32-bit compiler 5.0 or later */
124eef4f27bSRobert Mustacchi   #if (defined(_MSC_VER) && (_MSC_VER > 800)) || defined(TARGET_WINDOWS)
125eef4f27bSRobert Mustacchi     #define P64
126eef4f27bSRobert Mustacchi   #elif defined(__sun)
127eef4f27bSRobert Mustacchi     /* Solaris */
128eef4f27bSRobert Mustacchi     #define LP64
129eef4f27bSRobert Mustacchi   #elif defined(_HPUX_SOURCE)
130eef4f27bSRobert Mustacchi     /* HP/UX */
131eef4f27bSRobert Mustacchi     #define LP64
132eef4f27bSRobert Mustacchi   #elif defined(__FreeBSD__)
133eef4f27bSRobert Mustacchi     /* FreeBSD */
134eef4f27bSRobert Mustacchi     #define LP64
135eef4f27bSRobert Mustacchi   #elif defined(LINUX)
136eef4f27bSRobert Mustacchi     /* Linux */
137eef4f27bSRobert Mustacchi     #define LP64
138eef4f27bSRobert Mustacchi   #elif defined(__bsdi__)
139eef4f27bSRobert Mustacchi     /* BSDI */
140eef4f27bSRobert Mustacchi     #define LP64
141eef4f27bSRobert Mustacchi   #elif defined(_IRIX)
142eef4f27bSRobert Mustacchi     /* IRIX */
143eef4f27bSRobert Mustacchi     #define LP64
144eef4f27bSRobert Mustacchi   #elif defined(UNIXWARE)
145eef4f27bSRobert Mustacchi     /* UnixWare */
146eef4f27bSRobert Mustacchi     #define LP64
147eef4f27bSRobert Mustacchi   #endif /* UNIXWARE */
148eef4f27bSRobert Mustacchi #endif /* !LP64 && !P64 && !LLP64 */
149eef4f27bSRobert Mustacchi 
150eef4f27bSRobert Mustacchi /*
151eef4f27bSRobert Mustacchi  * define sized type
152eef4f27bSRobert Mustacchi  */
153eef4f27bSRobert Mustacchi #if defined(P64) || defined(LLP64)
154eef4f27bSRobert Mustacchi   /* P64 */
155eef4f27bSRobert Mustacchi   typedef unsigned __int64    U64;
156eef4f27bSRobert Mustacchi   typedef unsigned int        U32;
157eef4f27bSRobert Mustacchi   typedef unsigned short      U16;
158eef4f27bSRobert Mustacchi   typedef unsigned char       U8;
159eef4f27bSRobert Mustacchi   typedef signed __int64      S64;
160eef4f27bSRobert Mustacchi   typedef signed int          S32;
161eef4f27bSRobert Mustacchi   typedef signed short        S16;
162eef4f27bSRobert Mustacchi   typedef signed char         S8;
163eef4f27bSRobert Mustacchi 
164eef4f27bSRobert Mustacchi   #if defined(IA64)  || defined(AMD64)
165eef4f27bSRobert Mustacchi         typedef U64  int_ptr_t;
166*55fea89dSDan Cross   #else
167*55fea89dSDan Cross     #ifndef UEFI64
168*55fea89dSDan Cross         typedef unsigned long       int_ptr_t;
169eef4f27bSRobert Mustacchi     #endif
170eef4f27bSRobert Mustacchi   #endif
171eef4f27bSRobert Mustacchi #elif defined(LP64)
172eef4f27bSRobert Mustacchi   /* LP64: Sun, HP and etc */
173eef4f27bSRobert Mustacchi   typedef unsigned long long  U64;
174eef4f27bSRobert Mustacchi   typedef unsigned int        U32;
175eef4f27bSRobert Mustacchi   typedef unsigned short      U16;
176eef4f27bSRobert Mustacchi   typedef unsigned char       U8;
177eef4f27bSRobert Mustacchi   typedef signed long long    S64;
178eef4f27bSRobert Mustacchi   typedef signed int          S32;
179eef4f27bSRobert Mustacchi   typedef signed short        S16;
180eef4f27bSRobert Mustacchi   typedef signed char         S8;
181*55fea89dSDan Cross   typedef unsigned long       int_ptr_t;
182*55fea89dSDan Cross #elif defined(__WATCOMC__)
183eef4f27bSRobert Mustacchi   typedef unsigned __int64    U64;
184eef4f27bSRobert Mustacchi   typedef unsigned long       U32;
185eef4f27bSRobert Mustacchi   typedef unsigned short      U16;
186eef4f27bSRobert Mustacchi   typedef unsigned char       U8;
187eef4f27bSRobert Mustacchi   typedef signed __int64      S64;
188eef4f27bSRobert Mustacchi   typedef signed long         S32;
189eef4f27bSRobert Mustacchi   typedef signed short        S16;
190eef4f27bSRobert Mustacchi   typedef signed char         S8;
191*55fea89dSDan Cross   typedef unsigned long       int_ptr_t;
192eef4f27bSRobert Mustacchi #else
193eef4f27bSRobert Mustacchi   /* assume others: 16-bit */
194eef4f27bSRobert Mustacchi   typedef unsigned char       U64[8];
195eef4f27bSRobert Mustacchi   typedef unsigned long       U32;
196eef4f27bSRobert Mustacchi   typedef unsigned short      U16;
197eef4f27bSRobert Mustacchi   typedef unsigned char       U8;
198eef4f27bSRobert Mustacchi   typedef signed char         S64[8];
199eef4f27bSRobert Mustacchi   typedef signed long         S32;
200eef4f27bSRobert Mustacchi   typedef signed short        S16;
201*55fea89dSDan Cross   typedef signed char         S8;
202*55fea89dSDan Cross   typedef unsigned long       int_ptr_t;
203eef4f27bSRobert Mustacchi #endif /*  */
204eef4f27bSRobert Mustacchi 
205*55fea89dSDan Cross 
206eef4f27bSRobert Mustacchi 
207eef4f27bSRobert Mustacchi /*
208eef4f27bSRobert Mustacchi  * define lower case types
209eef4f27bSRobert Mustacchi  */
210eef4f27bSRobert Mustacchi typedef U64 u64_t;
211eef4f27bSRobert Mustacchi typedef U32 u32_t;
212eef4f27bSRobert Mustacchi typedef U16 u16_t;
213eef4f27bSRobert Mustacchi typedef U8  u8_t;
214eef4f27bSRobert Mustacchi 
215eef4f27bSRobert Mustacchi typedef S64 s64_t;
216eef4f27bSRobert Mustacchi typedef S32 s32_t;
217eef4f27bSRobert Mustacchi typedef S16 s16_t;
218eef4f27bSRobert Mustacchi typedef S8  s8_t;
219eef4f27bSRobert Mustacchi 
220eef4f27bSRobert Mustacchi #ifndef LINUX
221eef4f27bSRobert Mustacchi typedef U64 u64;
222eef4f27bSRobert Mustacchi typedef U32 u32;
223eef4f27bSRobert Mustacchi typedef U16 u16;
224eef4f27bSRobert Mustacchi typedef U8  u8;
225eef4f27bSRobert Mustacchi 
226eef4f27bSRobert Mustacchi typedef S64 s64;
227eef4f27bSRobert Mustacchi typedef S32 s32;
228eef4f27bSRobert Mustacchi typedef S16 s16;
229eef4f27bSRobert Mustacchi typedef S8  s8;
230eef4f27bSRobert Mustacchi #endif
231eef4f27bSRobert Mustacchi 
232eef4f27bSRobert Mustacchi #endif
233eef4f27bSRobert Mustacchi 
234eef4f27bSRobert Mustacchi #ifdef UEFI
235eef4f27bSRobert Mustacchi #if BYTE_ORDER == LITTLE_ENDIAN
236eef4f27bSRobert Mustacchi #undef BIG_ENDIAN
237eef4f27bSRobert Mustacchi #endif
238eef4f27bSRobert Mustacchi #ifdef UEFI64
239eef4f27bSRobert Mustacchi typedef u64_t  int_ptr_t;
240eef4f27bSRobert Mustacchi #endif
241eef4f27bSRobert Mustacchi #endif
242eef4f27bSRobert Mustacchi 
243eef4f27bSRobert Mustacchi #ifdef LITTLE_ENDIAN
244eef4f27bSRobert Mustacchi #ifndef __LITTLE_ENDIAN
245eef4f27bSRobert Mustacchi #define __LITTLE_ENDIAN LITTLE_ENDIAN
246eef4f27bSRobert Mustacchi #endif /* __LITTLE_ENDIAN */
247eef4f27bSRobert Mustacchi #endif /* LITTLE_ENDIAN */
248eef4f27bSRobert Mustacchi 
249eef4f27bSRobert Mustacchi #ifdef BIG_ENDIAN
250eef4f27bSRobert Mustacchi #ifndef __BIG_ENDIAN
251eef4f27bSRobert Mustacchi #define  __BIG_ENDIAN  BIG_ENDIAN
252eef4f27bSRobert Mustacchi #endif /* __BIG_ENDIAN */
253eef4f27bSRobert Mustacchi #endif /* BIG_ENDIAN */
254eef4f27bSRobert Mustacchi 
255eef4f27bSRobert Mustacchi #ifdef __FreeBSD__
256eef4f27bSRobert Mustacchi #if _BYTE_ORDER == _LITTLE_ENDIAN
257eef4f27bSRobert Mustacchi #undef BIG_ENDIAN
258eef4f27bSRobert Mustacchi #undef __BIG_ENDIAN
259eef4f27bSRobert Mustacchi #else
260eef4f27bSRobert Mustacchi #undef LITTLE_ENDIAN
261eef4f27bSRobert Mustacchi #undef __LITTLE_ENDIAN
262eef4f27bSRobert Mustacchi #endif
263eef4f27bSRobert Mustacchi #endif /* __FreeBSD__ */
264eef4f27bSRobert Mustacchi 
265eef4f27bSRobert Mustacchi /* Signed subtraction macros with no sign extending.  */
266eef4f27bSRobert Mustacchi #define S64_SUB(_a, _b)     ((s64_t) ((s64_t) (_a) - (s64_t) (_b)))
267eef4f27bSRobert Mustacchi #define u64_SUB(_a, _b)     ((u64_t) ((s64_t) (_a) - (s64_t) (_b)))
268eef4f27bSRobert Mustacchi #define S32_SUB(_a, _b)     ((s32_t) ((s32_t) (_a) - (s32_t) (_b)))
269eef4f27bSRobert Mustacchi #define uS32_SUB(_a, _b)    ((u32_t) ((s32_t) (_a) - (s32_t) (_b)))
270eef4f27bSRobert Mustacchi #define S16_SUB(_a, _b)     ((s16_t) ((s16_t) (_a) - (s16_t) (_b)))
271eef4f27bSRobert Mustacchi #define u16_SUB(_a, _b)     ((u16_t) ((s16_t) (_a) - (s16_t) (_b)))
272eef4f27bSRobert Mustacchi #define PTR_SUB(_a, _b)     ((u8_t *) (_a) - (u8_t *) (_b))
273eef4f27bSRobert Mustacchi 
274eef4f27bSRobert Mustacchi #if (!defined LINUX ) && (!defined MFW)
275eef4f27bSRobert Mustacchi #define __builtin_offsetof(path1_nvm_image_t, f) (u32_t)((int_ptr_t)(&(((path1_nvm_image_t *)0)->f)))
276eef4f27bSRobert Mustacchi #endif
277eef4f27bSRobert Mustacchi 
278eef4f27bSRobert Mustacchi #endif/* __bcmtype_h__ */
279eef4f27bSRobert Mustacchi 
280