1e5fec6b15
Demanded by: DES Encouraged by: scottl
282 lines
7.6 KiB
C
282 lines
7.6 KiB
C
/***************************************************************************\
|
|
|* *|
|
|
|* 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_
|