os.h revision 272461
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 FILE: os.h 18 DATE: 2/7/00 19 20 This file contains the os interface. Note that the os interface is 21 itself an OS-independent API. The OS specific module is implemented 22 by ndis.c for Win9X/NT and linuxnet.c for linux. 23*/ 24#ifndef _OS_H_ 25#define _OS_H_ 26 27#include "phy.h" 28 29#define HDO_VERSION_STRING "HDR O: $Revision: #21 $"; 30 31// This is the maximum packet size that we will be sending 32// #define MAX_PACKET_SIZE 2048 33//#define RX_BUFFER_SIZE 2048 34 35#define MIN_PACKET_MTU_SIZE 576 36#define MAX_PACKET_MTU_SIZE 9202 37#define MAX_PACKET_SIZE_2048 2048 38#define MAX_PACKET_SIZE_1514 1514 39#define MAX_PACKET_SIZE_1518 1518 40#define MAX_PACKET_SIZE_JUMBO (9 * 1024) 41 42typedef struct _MEMORY_BLOCK 43{ 44 PNV_VOID pLogical; 45 PNV_VOID pPhysical; 46 NV_UINT32 uiLength; 47} MEMORY_BLOCK, *PMEMORY_BLOCK; 48 49#define ALLOC_MEMORY_NONCACHED 0x0001 50#define ALLOC_MEMORY_ALIGNED 0x0002 51 52typedef struct _MEMORY_BLOCKEX 53{ 54 PNV_VOID pLogical; 55 PNV_VOID pPhysical; 56 NV_UINT32 uiLength; 57 /* Parameter to OS layer to indicate what type of memory is needed */ 58 NV_UINT16 AllocFlags; 59 NV_UINT16 AlignmentSize; //always power of 2 60 /* Following three fields used for aligned memory allocation */ 61 PNV_VOID pLogicalOrig; 62 NV_UINT32 pPhysicalOrigLow; 63 NV_UINT32 pPhysicalOrigHigh; 64 NV_UINT32 uiLengthOrig; 65} MEMORY_BLOCKEX, *PMEMORY_BLOCKEX; 66 67 68// The typedefs for the OS functions 69typedef NV_API_CALL NV_SINT32 (* PFN_MEMORY_ALLOC) (PNV_VOID pOSCX, PMEMORY_BLOCK pMem); 70typedef NV_API_CALL NV_SINT32 (* PFN_MEMORY_FREE) (PNV_VOID pOSCX, PMEMORY_BLOCK pMem); 71typedef NV_API_CALL NV_SINT32 (* PFN_MEMORY_ALLOCEX) (PNV_VOID pOSCX, PMEMORY_BLOCKEX pMem); 72typedef NV_API_CALL NV_SINT32 (* PFN_MEMORY_FREEEX) (PNV_VOID pOSCX, PMEMORY_BLOCKEX pMem); 73typedef NV_API_CALL NV_SINT32 (* PFN_CLEAR_MEMORY) (PNV_VOID pOSCX, PNV_VOID pMem, NV_SINT32 iLength); 74typedef NV_API_CALL NV_SINT32 (* PFN_STALL_EXECUTION) (PNV_VOID pOSCX, NV_UINT32 ulTimeInMicroseconds); 75typedef NV_API_CALL NV_SINT32 (* PFN_ALLOC_RECEIVE_BUFFER) (PNV_VOID pOSCX, PMEMORY_BLOCK pMem, PNV_VOID *ppvID); 76typedef NV_API_CALL NV_SINT32 (* PFN_FREE_RECEIVE_BUFFER) (PNV_VOID pOSCX, PMEMORY_BLOCK pMem, PNV_VOID pvID); 77typedef NV_API_CALL NV_SINT32 (* PFN_PACKET_WAS_SENT) (PNV_VOID pOSCX, PNV_VOID pvID, NV_UINT32 ulSuccess); 78typedef NV_API_CALL NV_SINT32 (* PFN_PACKET_WAS_RECEIVED) (PNV_VOID pOSCX, PNV_VOID pvADReadData, NV_UINT32 ulSuccess, NV_UINT8 *pNewBuffer, NV_UINT8 uc8021pPriority); 79typedef NV_API_CALL NV_SINT32 (* PFN_LINK_STATE_HAS_CHANGED) (PNV_VOID pOSCX, NV_SINT32 nEnabled); 80typedef NV_API_CALL NV_SINT32 (* PFN_ALLOC_TIMER) (PNV_VOID pvContext, PNV_VOID *ppvTimer); 81typedef NV_API_CALL NV_SINT32 (* PFN_FREE_TIMER) (PNV_VOID pvContext, PNV_VOID pvTimer); 82typedef NV_API_CALL NV_SINT32 (* PFN_INITIALIZE_TIMER) (PNV_VOID pvContext, PNV_VOID pvTimer, PTIMER_FUNC pvFunc, PNV_VOID pvFuncParameter); 83typedef NV_API_CALL NV_SINT32 (* PFN_SET_TIMER) (PNV_VOID pvContext, PNV_VOID pvTimer, NV_UINT32 dwMillisecondsDelay); 84typedef NV_API_CALL NV_SINT32 (* PFN_CANCEL_TIMER) (PNV_VOID pvContext, PNV_VOID pvTimer); 85 86typedef NV_API_CALL NV_SINT32 (* PFN_PREPROCESS_PACKET) (PNV_VOID pvContext, PNV_VOID pvADReadData, PNV_VOID *ppvID, 87 NV_UINT8 *pNewBuffer, NV_UINT8 uc8021pPriority); 88typedef NV_API_CALL PNV_VOID (* PFN_PREPROCESS_PACKET_NOPQ) (PNV_VOID pvContext, PNV_VOID pvADReadData); 89typedef NV_API_CALL NV_SINT32 (* PFN_INDICATE_PACKETS) (PNV_VOID pvContext, PNV_VOID *ppvID, NV_UINT32 ulNumPacket); 90typedef NV_API_CALL NV_SINT32 (* PFN_LOCK_ALLOC) (PNV_VOID pOSCX, NV_SINT32 iLockType, PNV_VOID *ppvLock); 91typedef NV_API_CALL NV_SINT32 (* PFN_LOCK_ACQUIRE) (PNV_VOID pOSCX, NV_SINT32 iLockType, PNV_VOID pvLock); 92typedef NV_API_CALL NV_SINT32 (* PFN_LOCK_RELEASE) (PNV_VOID pOSCX, NV_SINT32 iLockType, PNV_VOID pvLock); 93typedef NV_API_CALL PNV_VOID (* PFN_RETURN_BUFFER_VIRTUAL) (PNV_VOID pvContext, PNV_VOID pvADReadData); 94 95// Here are the OS functions that those objects below the OS interface 96// can call up to. 97typedef struct _OS_API 98{ 99 // OS Context -- this is a parameter to every OS API call 100 PNV_VOID pOSCX; 101 102 // Basic OS functions 103 PFN_MEMORY_ALLOC pfnAllocMemory; 104 PFN_MEMORY_FREE pfnFreeMemory; 105 PFN_MEMORY_ALLOCEX pfnAllocMemoryEx; 106 PFN_MEMORY_FREEEX pfnFreeMemoryEx; 107 PFN_CLEAR_MEMORY pfnClearMemory; 108 PFN_STALL_EXECUTION pfnStallExecution; 109 PFN_ALLOC_RECEIVE_BUFFER pfnAllocReceiveBuffer; 110 PFN_FREE_RECEIVE_BUFFER pfnFreeReceiveBuffer; 111 PFN_PACKET_WAS_SENT pfnPacketWasSent; 112 PFN_PACKET_WAS_RECEIVED pfnPacketWasReceived; 113 PFN_LINK_STATE_HAS_CHANGED pfnLinkStateHasChanged; 114 PFN_ALLOC_TIMER pfnAllocTimer; 115 PFN_FREE_TIMER pfnFreeTimer; 116 PFN_INITIALIZE_TIMER pfnInitializeTimer; 117 PFN_SET_TIMER pfnSetTimer; 118 PFN_CANCEL_TIMER pfnCancelTimer; 119 PFN_PREPROCESS_PACKET pfnPreprocessPacket; 120 PFN_PREPROCESS_PACKET_NOPQ pfnPreprocessPacketNopq; 121 PFN_INDICATE_PACKETS pfnIndicatePackets; 122 PFN_LOCK_ALLOC pfnLockAlloc; 123 PFN_LOCK_ACQUIRE pfnLockAcquire; 124 PFN_LOCK_RELEASE pfnLockRelease; 125 PFN_RETURN_BUFFER_VIRTUAL pfnReturnBufferVirtual; 126} OS_API, *POS_API; 127 128#endif // _OS_H_ 129