1 /***************************************************************************\ 2 |* *| 3 |* Copyright 2001-2004 NVIDIA Corporation. All Rights Reserved. *| 4 |* *| 5 |* THE INFORMATION CONTAINED HEREIN IS PROPRIETARY AND CONFIDENTIAL *| 6 |* TO NVIDIA, CORPORATION. USE, REPRODUCTION OR DISCLOSURE TO ANY *| 7 |* THIRD PARTY IS SUBJECT TO WRITTEN PRE-APPROVAL BY NVIDIA, CORP. *| 8 |* *| 9 |* THE INFORMATION CONTAINED HEREIN IS PROVIDED "AS IS" WITHOUT *| 10 |* EXPRESS OR IMPLIED WARRANTY OF ANY KIND, INCLUDING ALL IMPLIED *| 11 |* WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A *| 12 |* PARTICULAR PURPOSE. *| 13 |* *| 14 \***************************************************************************/ 15 16 17 /*++ 18 19 File: 20 21 basetype.h 22 23 24 Abstract: 25 26 This file contains the base type definitions used by the networking driver. 27 28 29 Revision History: 30 31 SNo. Date Author Description 32 1. 2/7/2000 AJha Created 33 34 */ 35 36 #ifndef _BASETYPE_H_ 37 #define _BASETYPE_H_ 38 39 #ifndef IN 40 #define IN 41 #endif 42 43 #ifndef OUT 44 #define OUT 45 #endif 46 47 // 48 // Useful "types" 49 50 #ifndef NULL 51 #define NULL 0 52 #endif 53 54 #ifndef TRUE 55 #define TRUE 1 56 #endif 57 58 #ifndef FALSE 59 #define FALSE 0 60 #endif 61 62 #if 1 63 // 64 // Don't use as these are going to be deleted soon. Use NV_ instead 65 // 66 #define VOID void 67 typedef VOID *PVOID; 68 69 typedef unsigned char UCHAR; 70 typedef UCHAR * PUCHAR; 71 typedef unsigned short USHORT; 72 typedef USHORT * PUSHORT; 73 #ifdef linux 74 typedef unsigned int ULONG; 75 #else 76 typedef unsigned long ULONG; 77 #endif 78 typedef ULONG * PULONG; 79 80 typedef char CHAR; 81 typedef short SHORT; 82 typedef long LONG; 83 84 typedef unsigned int UINT; 85 typedef unsigned int *PUINT; 86 87 88 #endif 89 90 91 #define NV_VOID void 92 typedef NV_VOID *PNV_VOID; 93 94 typedef unsigned long NV_BOOLEAN, *PNV_BOOLEAN; 95 96 typedef unsigned char NV_UINT8, *PNV_UINT8; 97 typedef unsigned short NV_UINT16, *PNV_UINT16; 98 #ifdef linux 99 typedef unsigned int NV_UINT32, *PNV_UINT32; 100 #else 101 typedef unsigned long NV_UINT32, *PNV_UINT32; 102 #endif 103 104 typedef signed char NV_SINT8, *PNV_SINT8; 105 typedef signed short NV_SINT16, *PNV_SINT16; 106 typedef signed long NV_SINT32, *PNV_SINT32; 107 108 109 #if defined(linux) 110 111 typedef unsigned long long NV_UINT64, *PNV_UINT64; 112 typedef signed long long NV_SINT64, *PNV_SINT64; 113 114 #else 115 #if _MSC_VER >= 1200 // MSVC 6.0 onwards 116 typedef unsigned __int64 NV_UINT64, *PNV_UINT64; 117 typedef signed __int64 NV_SINT64, *PNV_SINT64; 118 #else 119 typedef unsigned long NV_UINT64, *PNV_UINT64; 120 typedef signed long NV_SINT64, *PNV_SINT64; 121 #endif 122 123 #endif 124 125 #ifndef _AMD64_ 126 typedef unsigned int NV_UINT; 127 typedef signed int NV_INT; 128 #else 129 130 #if defined(linux) 131 132 typedef unsigned long long NV_UINT; 133 typedef signed long long NV_INT; 134 135 #else 136 137 typedef unsigned __int64 NV_UINT; 138 typedef signed __int64 NV_INT; 139 140 #endif 141 #endif 142 143 144 // 145 // Floating point definitions 146 // 147 typedef float NV_REAL32; // 4-byte floating point 148 typedef double NV_REAL64; // 8-byte floating point 149 150 151 152 // 153 // Bit defintions 154 // 155 #define NV_BIT(bitpos) (1 << (bitpos)) 156 157 // NV_BIT_SET 158 // Sets the specified bit position (0..31). 159 // Parameter bits can be 1 byte to 4 bytes, but the caller needs to make sure bitpos fits into it. 160 // x = 0xA0 161 // NV_BIT_SET(x, 1) 162 // Result: x = 0xA2 163 #define NV_BIT_SET(bits, bitpos) ((bits) |= (NV_BIT(bitpos))) 164 165 // NV_BIT_CLEAR 166 // Clears the specified bit position (0..31) 167 // Parameter bits can be 1 byte to 4 bytes, but the caller needs to make sure bitpos fits into it. 168 // x = 0xAA 169 // NV_BIT_CLEAR(x, 1) 170 // Result: x = 0xA8 171 #define NV_BIT_CLEAR(bits, bitpos) ((bits) &= (~NV_BIT(bitpos))) 172 173 // NV_BIT_GET 174 // Gets the bit at the specified bit position (0..31) 175 // Parameter bits can be 1 byte to 4 bytes, but the caller needs to make sure bitpos fits into it. 176 // Result is either 1 or 0. 177 // x = 0xAA 178 // NV_BIT_GET(x, 1) 179 // Result: x = 1 180 #define NV_BIT_GET(bits, bitpos) (((bits) >> (bitpos)) & 0x0001) 181 182 183 // NV_BIT_GETVALUE 184 // Gets the value from a 32 bit ULONG at specified bit position. 185 // Parameter bits needs to be 4 bytes long. 186 // Ex. ul32 = 0xFEDCBA98 187 // ulVal = NV_BIT_GETVALUE(ul32, 3, 0) : Gets value from Bit position 3 to 0 188 // Result : ulVal = 8 189 #define NV_BIT_GETVALUE(ulOrigValue, bitposHi, bitposLow) (((ulOrigValue) >> (bitposLow)) & (~(0xFFFFFFFF << ((bitposHi) - (bitposLow) +1)))) 190 191 // NV_BIT_SETVALUE 192 // Set a value in a 32 bit ULONG at a specific bit position. 193 // Parameter bits needs to be 4 bytes long. 194 // Ex. ul32 = 0xFEDCBA98 195 // NV_BIT_SETVALUE(ul32, 0xF, 3, 0) : Sets value at Bit position 3 to 0 196 // Result : ul32 becomes 0xFEDCBA9F 197 #define NV_BIT_SETVALUE(ulOrigValue, ulWindowValue, bitposHi, bitposLow) \ 198 ((ulOrigValue) = ((((ulOrigValue) & (~ ((0xFFFFFFFF >> (31 - (bitposHi))) & (0xFFFFFFFF << (bitposLow))))) | ((ulWindowValue) << (bitposLow))))) 199 200 201 #define NV_BYTE(ulus, bytepos) ((ulus >> (8 * (bytepos))) & 0xFF) 202 203 204 #define SWAP_U16(us) ((((us) & 0x00FF) << 8) | \ 205 (((us) & 0xFF00) >> 8)) 206 207 #define SWAP_U32(ul) ((((ul) & 0x000000FF) << 24) | \ 208 (((ul) & 0x0000FF00) << 8) | \ 209 (((ul) & 0x00FF0000) >> 8) | \ 210 (((ul) & 0xFF000000) >> 24)) 211 212 #define NV_FIELD_OFFSET(TYPE, FIELD) ((NV_UINT32)((NV_UINT64)&((TYPE *)0)->FIELD)) 213 214 #define ADDRESS_OFFSET(structure, member) ((NV_UINT32) ((NV_UINT8 *) &(structure).member \ 215 - (NV_UINT8 *) &(structure))) 216 217 218 #define NV_MIN(a, b) ((a < b) ? a : b) 219 #define NV_MAX(a, b) ((a > b) ? a : b) 220 221 #ifdef AMD64 222 #define PNV_VOID_TO_NV_UINT64(x) ((NV_UINT64)(x)) 223 #define PNV_VOID_TO_NV_UINT32(x) ((NV_UINT32)(NV_UINT64)(x)) 224 #define NV_UINT64_TO_PNV_VOID(x) ((PNV_VOID)(x)) 225 #define NV_UINT32_TO_PNV_VOID(x) ((PNV_VOID)(NV_UINT64)(x)) 226 #else 227 #define PNV_VOID_TO_NV_UINT64(x) ((NV_UINT64)(NV_UINT32)(x)) 228 #define PNV_VOID_TO_NV_UINT32(x) ((NV_UINT32)(x)) 229 #define NV_UINT64_TO_PNV_VOID(x) ((PNV_VOID)(NV_UINT32)(x)) 230 #define NV_UINT32_TO_PNV_VOID(x) ((PNV_VOID)(x)) 231 #endif 232 233 #define NV_MAKE_TAG32(s) (((NV_UINT32)((s)[3]) << 24) | ((NV_UINT32)((s)[2]) << 16) | \ 234 ((NV_UINT32)((s)[1]) << 8) | ((NV_UINT32)((s)[0]))) 235 236 #define NV_MAKE_TAG64(s) (((NV_UINT64)((s)[7]) << 56) | ((NV_UINT64)((s)[6]) << 48) | \ 237 ((NV_UINT64)((s)[5]) << 40) | ((NV_UINT64)((s)[4]) << 32) | \ 238 ((NV_UINT64)((s)[3]) << 24) | ((NV_UINT64)((s)[2]) << 16) | \ 239 ((NV_UINT64)((s)[1]) << 8) | ((NV_UINT64)((s)[0]))) 240 241 typedef union _NVLARGE_INTEGER { 242 243 #if 0 244 // NO UNNAMED UNIONS ALLOWED !@ 245 struct { 246 NV_UINT32 LowPart; 247 NV_SINT32 HighPart; 248 }; 249 #endif 250 251 struct { 252 NV_UINT32 LowPart; 253 NV_SINT32 HighPart; 254 } u; 255 256 NV_SINT64 QuadPart; 257 258 } NVLARGE_INTEGER, *PNVLARGE_INTEGER; 259 260 261 #ifndef LINUX 262 typedef unsigned short NV_WCHAR; 263 #else 264 typedef unsigned long NV_WCHAR; 265 #endif 266 267 typedef NV_WCHAR *PNV_WSTR; 268 269 #if defined(linux) 270 #if !defined(NV_API_CALL) 271 #if defined (__i386__) 272 #define NV_API_CALL __attribute__ ((regparm(0))) 273 #else 274 #define NV_API_CALL 275 #endif 276 #endif 277 #else 278 #define NV_API_CALL 279 #endif 280 281 #endif // _BASETYPE_H_ 282