summaryrefslogtreecommitdiffstats
path: root/sys/contrib/dev/nve/basetype.h
blob: fd381484027a5fb918d702d8bdb51a27193c8abb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
/***************************************************************************\
|*                                                                           *|
|*       Copyright 2001-2004 NVIDIA Corporation.  All Rights Reserved.       *|
|*                                                                           *|
|*     THE INFORMATION CONTAINED HEREIN  IS PROPRIETARY AND CONFIDENTIAL     *|
|*     TO NVIDIA, CORPORATION.   USE,  REPRODUCTION OR DISCLOSURE TO ANY     *|
|*     THIRD PARTY IS SUBJECT TO WRITTEN PRE-APPROVAL BY NVIDIA, CORP.       *|
|*                                                                           *|
|*     THE INFORMATION CONTAINED HEREIN IS PROVIDED  "AS IS" WITHOUT         *|
|*     EXPRESS OR IMPLIED WARRANTY OF ANY KIND, INCLUDING ALL IMPLIED        *|
|*     WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A     *|
|*     PARTICULAR PURPOSE.                                                   *|
|*                                                                           *|
\***************************************************************************/ 


/*++

File:

	basetype.h


Abstract:

	This file contains the base type definitions used by the networking driver.


Revision History:

	SNo.	Date		Author				Description
	1.	2/7/2000	AJha				Created	

*/

#ifndef _BASETYPE_H_
#define _BASETYPE_H_

#ifndef IN
#define IN
#endif

#ifndef OUT
#define OUT
#endif

//
// Useful "types"

#ifndef NULL
#define NULL            0
#endif

#ifndef TRUE
#define TRUE            1
#endif

#ifndef FALSE
#define FALSE           0
#endif

#if 1
//
// Don't use as these are going to be deleted soon. Use NV_ instead
//
#define VOID                void
typedef VOID                *PVOID;

typedef unsigned char   UCHAR;
typedef UCHAR * PUCHAR;
typedef unsigned short  USHORT;
typedef USHORT * PUSHORT;
#ifdef linux
typedef unsigned int ULONG;
#else
typedef unsigned long ULONG;
#endif
typedef ULONG * PULONG;

typedef char CHAR;
typedef short SHORT;
typedef long LONG;

typedef unsigned int UINT;
typedef unsigned int *PUINT;


#endif


#define NV_VOID            	void
typedef NV_VOID            	*PNV_VOID;

typedef unsigned long		NV_BOOLEAN, *PNV_BOOLEAN;

typedef unsigned char		NV_UINT8, *PNV_UINT8;
typedef unsigned short		NV_UINT16, *PNV_UINT16;
#ifdef linux
typedef unsigned int		NV_UINT32, *PNV_UINT32;
#else
typedef unsigned long		NV_UINT32, *PNV_UINT32;
#endif

typedef signed char   		NV_SINT8,  *PNV_SINT8;
typedef signed short  		NV_SINT16, *PNV_SINT16;
typedef signed long   		NV_SINT32, *PNV_SINT32;


#if defined(linux)

    typedef unsigned long long           NV_UINT64, *PNV_UINT64;
    typedef signed long long             NV_SINT64, *PNV_SINT64;

#else
    #if _MSC_VER >= 1200         // MSVC 6.0 onwards
        typedef unsigned __int64 	NV_UINT64, *PNV_UINT64;
        typedef signed __int64 		NV_SINT64, *PNV_SINT64;
    #else
        typedef unsigned long     	NV_UINT64, *PNV_UINT64;
        typedef signed   long 		NV_SINT64, *PNV_SINT64;
    #endif

#endif

#ifndef _AMD64_
typedef unsigned int    NV_UINT;
typedef signed int      NV_INT;
#else

#if defined(linux)

typedef unsigned long long  NV_UINT;
typedef signed long long    NV_INT;

#else

typedef unsigned __int64    NV_UINT;
typedef signed __int64      NV_INT;

#endif
#endif


//
// Floating point definitions
//
typedef float                 NV_REAL32;   // 4-byte floating point
typedef double                NV_REAL64;   // 8-byte floating point



//
// Bit defintions
//
#define NV_BIT(bitpos)                  (1 << (bitpos))

// NV_BIT_SET 
// Sets the specified bit position (0..31). 
// Parameter bits can be 1 byte to 4 bytes, but the caller needs to make sure bitpos fits into it.
// x = 0xA0
// NV_BIT_SET(x, 1)
// Result: x = 0xA2
#define NV_BIT_SET(bits, bitpos)        ((bits) |= (NV_BIT(bitpos)))

// NV_BIT_CLEAR
// Clears the specified bit position (0..31)
// Parameter bits can be 1 byte to 4 bytes, but the caller needs to make sure bitpos fits into it.
// x = 0xAA
// NV_BIT_CLEAR(x, 1)
// Result: x = 0xA8
#define NV_BIT_CLEAR(bits, bitpos)      ((bits) &= (~NV_BIT(bitpos)))

// NV_BIT_GET 
// Gets the bit at the specified bit position (0..31)
// Parameter bits can be 1 byte to 4 bytes, but the caller needs to make sure bitpos fits into it.
// Result is either 1 or 0.
// x = 0xAA
// NV_BIT_GET(x, 1)
// Result: x = 1
#define NV_BIT_GET(bits, bitpos)        (((bits) >> (bitpos)) & 0x0001)


// NV_BIT_GETVALUE
// Gets the value from a 32 bit ULONG at specified bit position.
// Parameter bits needs to be 4 bytes long.
// Ex. ul32 = 0xFEDCBA98
// ulVal = NV_BIT_GETVALUE(ul32, 3, 0)  : Gets value from Bit position 3 to 0
// Result : ulVal = 8
#define NV_BIT_GETVALUE(ulOrigValue, bitposHi, bitposLow)  (((ulOrigValue) >> (bitposLow)) & (~(0xFFFFFFFF << ((bitposHi) - (bitposLow) +1))))

// NV_BIT_SETVALUE
// Set a value in a 32 bit ULONG at a specific bit position.
// Parameter bits needs to be 4 bytes long.
// Ex. ul32 = 0xFEDCBA98
// NV_BIT_SETVALUE(ul32, 0xF, 3, 0)  : Sets value at Bit position 3 to 0
// Result : ul32 becomes 0xFEDCBA9F
#define NV_BIT_SETVALUE(ulOrigValue, ulWindowValue, bitposHi, bitposLow)  \
    ((ulOrigValue) = ((((ulOrigValue) & (~ ((0xFFFFFFFF >> (31 - (bitposHi))) & (0xFFFFFFFF << (bitposLow))))) | ((ulWindowValue) << (bitposLow)))))


#define NV_BYTE(ulus, bytepos)  ((ulus >> (8 * (bytepos))) & 0xFF)


#define SWAP_U16(us) ((((us) & 0x00FF) << 8) | \
                      (((us) & 0xFF00) >> 8))

#define SWAP_U32(ul) ((((ul) & 0x000000FF) << 24) |   \
                        (((ul) & 0x0000FF00) <<  8) |	  \
                        (((ul) & 0x00FF0000) >>  8) |	  \
                        (((ul) & 0xFF000000) >> 24))

#define NV_FIELD_OFFSET(TYPE, FIELD)  ((NV_UINT32)((NV_UINT64)&((TYPE *)0)->FIELD))

#define ADDRESS_OFFSET(structure, member)       ((NV_UINT32) ((NV_UINT8 *) &(structure).member  \
                                                            - (NV_UINT8 *) &(structure)))


#define NV_MIN(a, b) ((a < b) ? a : b)
#define NV_MAX(a, b) ((a > b) ? a : b)

#ifdef AMD64
#define PNV_VOID_TO_NV_UINT64(x)    ((NV_UINT64)(x))
#define PNV_VOID_TO_NV_UINT32(x)    ((NV_UINT32)(NV_UINT64)(x))
#define NV_UINT64_TO_PNV_VOID(x)    ((PNV_VOID)(x))
#define NV_UINT32_TO_PNV_VOID(x)    ((PNV_VOID)(NV_UINT64)(x))
#else
#define PNV_VOID_TO_NV_UINT64(x)    ((NV_UINT64)(NV_UINT32)(x))
#define PNV_VOID_TO_NV_UINT32(x)    ((NV_UINT32)(x))
#define NV_UINT64_TO_PNV_VOID(x)    ((PNV_VOID)(NV_UINT32)(x))
#define NV_UINT32_TO_PNV_VOID(x)    ((PNV_VOID)(x))
#endif

#define NV_MAKE_TAG32(s)            (((NV_UINT32)((s)[3]) << 24) | ((NV_UINT32)((s)[2]) << 16) | \
                                     ((NV_UINT32)((s)[1]) <<  8) | ((NV_UINT32)((s)[0])))

#define NV_MAKE_TAG64(s)            (((NV_UINT64)((s)[7]) << 56) | ((NV_UINT64)((s)[6]) << 48) | \
                                     ((NV_UINT64)((s)[5]) << 40) | ((NV_UINT64)((s)[4]) << 32) | \
                                     ((NV_UINT64)((s)[3]) << 24) | ((NV_UINT64)((s)[2]) << 16) | \
                                     ((NV_UINT64)((s)[1]) <<  8) | ((NV_UINT64)((s)[0])))

typedef union _NVLARGE_INTEGER {

#if 0
    // NO UNNAMED UNIONS ALLOWED !@
    struct {
        NV_UINT32   LowPart;
        NV_SINT32   HighPart;
    };
#endif

    struct {
        NV_UINT32   LowPart;
        NV_SINT32   HighPart;
    } u;

    NV_SINT64       QuadPart;

} NVLARGE_INTEGER, *PNVLARGE_INTEGER;


#ifndef LINUX
typedef unsigned short NV_WCHAR;
#else
typedef unsigned long NV_WCHAR;
#endif

typedef NV_WCHAR *PNV_WSTR;

#if defined(linux)
#if !defined(NV_API_CALL)
#if defined (__i386__)
#define NV_API_CALL __attribute__ ((regparm(0)))
#else
#define NV_API_CALL
#endif
#endif
#else
#define NV_API_CALL
#endif

#endif // _BASETYPE_H_
OpenPOWER on IntegriCloud