freebsd-dev/sys/contrib/dev/nve/basetype.h
David E. O'Brien 1e5fec6b15 Import the nForce MCP NIC bits. This is version 1.0-0301.
Demanded by:	DES
Encouraged by:	scottl
2005-03-12 00:17:37 +00:00

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_