1143439Sobrien/***************************************************************************\ 2143439Sobrien|* *| 3143439Sobrien|* Copyright 2001-2004 NVIDIA Corporation. All Rights Reserved. *| 4143439Sobrien|* *| 5143439Sobrien|* THE INFORMATION CONTAINED HEREIN IS PROPRIETARY AND CONFIDENTIAL *| 6143439Sobrien|* TO NVIDIA, CORPORATION. USE, REPRODUCTION OR DISCLOSURE TO ANY *| 7143439Sobrien|* THIRD PARTY IS SUBJECT TO WRITTEN PRE-APPROVAL BY NVIDIA, CORP. *| 8143439Sobrien|* *| 9143439Sobrien|* THE INFORMATION CONTAINED HEREIN IS PROVIDED "AS IS" WITHOUT *| 10143439Sobrien|* EXPRESS OR IMPLIED WARRANTY OF ANY KIND, INCLUDING ALL IMPLIED *| 11143439Sobrien|* WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A *| 12143439Sobrien|* PARTICULAR PURPOSE. *| 13143439Sobrien|* *| 14143439Sobrien\***************************************************************************/ 15143439Sobrien 16143439Sobrien/* 17143439Sobrien FILE: os.h 18143439Sobrien DATE: 2/7/00 19143439Sobrien 20143439Sobrien This file contains the os interface. Note that the os interface is 21143439Sobrien itself an OS-independent API. The OS specific module is implemented 22143439Sobrien by ndis.c for Win9X/NT and linuxnet.c for linux. 23143439Sobrien*/ 24143439Sobrien#ifndef _OS_H_ 25143439Sobrien#define _OS_H_ 26143439Sobrien 27143439Sobrien#include "phy.h" 28143439Sobrien 29143439Sobrien#define HDO_VERSION_STRING "HDR O: $Revision: #21 $"; 30143439Sobrien 31143439Sobrien// This is the maximum packet size that we will be sending 32143439Sobrien// #define MAX_PACKET_SIZE 2048 33143439Sobrien//#define RX_BUFFER_SIZE 2048 34143439Sobrien 35143439Sobrien#define MIN_PACKET_MTU_SIZE 576 36143439Sobrien#define MAX_PACKET_MTU_SIZE 9202 37143439Sobrien#define MAX_PACKET_SIZE_2048 2048 38143439Sobrien#define MAX_PACKET_SIZE_1514 1514 39143439Sobrien#define MAX_PACKET_SIZE_1518 1518 40143439Sobrien#define MAX_PACKET_SIZE_JUMBO (9 * 1024) 41143439Sobrien 42143439Sobrientypedef struct _MEMORY_BLOCK 43143439Sobrien{ 44143439Sobrien PNV_VOID pLogical; 45143439Sobrien PNV_VOID pPhysical; 46143439Sobrien NV_UINT32 uiLength; 47143439Sobrien} MEMORY_BLOCK, *PMEMORY_BLOCK; 48143439Sobrien 49143439Sobrien#define ALLOC_MEMORY_NONCACHED 0x0001 50143439Sobrien#define ALLOC_MEMORY_ALIGNED 0x0002 51143439Sobrien 52143439Sobrientypedef struct _MEMORY_BLOCKEX 53143439Sobrien{ 54143439Sobrien PNV_VOID pLogical; 55143439Sobrien PNV_VOID pPhysical; 56143439Sobrien NV_UINT32 uiLength; 57143439Sobrien /* Parameter to OS layer to indicate what type of memory is needed */ 58143439Sobrien NV_UINT16 AllocFlags; 59143439Sobrien NV_UINT16 AlignmentSize; //always power of 2 60143439Sobrien /* Following three fields used for aligned memory allocation */ 61143439Sobrien PNV_VOID pLogicalOrig; 62143439Sobrien NV_UINT32 pPhysicalOrigLow; 63143439Sobrien NV_UINT32 pPhysicalOrigHigh; 64143439Sobrien NV_UINT32 uiLengthOrig; 65143439Sobrien} MEMORY_BLOCKEX, *PMEMORY_BLOCKEX; 66143439Sobrien 67143439Sobrien 68143439Sobrien// The typedefs for the OS functions 69143439Sobrientypedef NV_API_CALL NV_SINT32 (* PFN_MEMORY_ALLOC) (PNV_VOID pOSCX, PMEMORY_BLOCK pMem); 70143439Sobrientypedef NV_API_CALL NV_SINT32 (* PFN_MEMORY_FREE) (PNV_VOID pOSCX, PMEMORY_BLOCK pMem); 71143439Sobrientypedef NV_API_CALL NV_SINT32 (* PFN_MEMORY_ALLOCEX) (PNV_VOID pOSCX, PMEMORY_BLOCKEX pMem); 72143439Sobrientypedef NV_API_CALL NV_SINT32 (* PFN_MEMORY_FREEEX) (PNV_VOID pOSCX, PMEMORY_BLOCKEX pMem); 73143439Sobrientypedef NV_API_CALL NV_SINT32 (* PFN_CLEAR_MEMORY) (PNV_VOID pOSCX, PNV_VOID pMem, NV_SINT32 iLength); 74143439Sobrientypedef NV_API_CALL NV_SINT32 (* PFN_STALL_EXECUTION) (PNV_VOID pOSCX, NV_UINT32 ulTimeInMicroseconds); 75143439Sobrientypedef NV_API_CALL NV_SINT32 (* PFN_ALLOC_RECEIVE_BUFFER) (PNV_VOID pOSCX, PMEMORY_BLOCK pMem, PNV_VOID *ppvID); 76143439Sobrientypedef NV_API_CALL NV_SINT32 (* PFN_FREE_RECEIVE_BUFFER) (PNV_VOID pOSCX, PMEMORY_BLOCK pMem, PNV_VOID pvID); 77143439Sobrientypedef NV_API_CALL NV_SINT32 (* PFN_PACKET_WAS_SENT) (PNV_VOID pOSCX, PNV_VOID pvID, NV_UINT32 ulSuccess); 78143439Sobrientypedef NV_API_CALL NV_SINT32 (* PFN_PACKET_WAS_RECEIVED) (PNV_VOID pOSCX, PNV_VOID pvADReadData, NV_UINT32 ulSuccess, NV_UINT8 *pNewBuffer, NV_UINT8 uc8021pPriority); 79143439Sobrientypedef NV_API_CALL NV_SINT32 (* PFN_LINK_STATE_HAS_CHANGED) (PNV_VOID pOSCX, NV_SINT32 nEnabled); 80143439Sobrientypedef NV_API_CALL NV_SINT32 (* PFN_ALLOC_TIMER) (PNV_VOID pvContext, PNV_VOID *ppvTimer); 81143439Sobrientypedef NV_API_CALL NV_SINT32 (* PFN_FREE_TIMER) (PNV_VOID pvContext, PNV_VOID pvTimer); 82143439Sobrientypedef NV_API_CALL NV_SINT32 (* PFN_INITIALIZE_TIMER) (PNV_VOID pvContext, PNV_VOID pvTimer, PTIMER_FUNC pvFunc, PNV_VOID pvFuncParameter); 83143439Sobrientypedef NV_API_CALL NV_SINT32 (* PFN_SET_TIMER) (PNV_VOID pvContext, PNV_VOID pvTimer, NV_UINT32 dwMillisecondsDelay); 84143439Sobrientypedef NV_API_CALL NV_SINT32 (* PFN_CANCEL_TIMER) (PNV_VOID pvContext, PNV_VOID pvTimer); 85143439Sobrien 86143439Sobrientypedef NV_API_CALL NV_SINT32 (* PFN_PREPROCESS_PACKET) (PNV_VOID pvContext, PNV_VOID pvADReadData, PNV_VOID *ppvID, 87143439Sobrien NV_UINT8 *pNewBuffer, NV_UINT8 uc8021pPriority); 88143439Sobrientypedef NV_API_CALL PNV_VOID (* PFN_PREPROCESS_PACKET_NOPQ) (PNV_VOID pvContext, PNV_VOID pvADReadData); 89143439Sobrientypedef NV_API_CALL NV_SINT32 (* PFN_INDICATE_PACKETS) (PNV_VOID pvContext, PNV_VOID *ppvID, NV_UINT32 ulNumPacket); 90143439Sobrientypedef NV_API_CALL NV_SINT32 (* PFN_LOCK_ALLOC) (PNV_VOID pOSCX, NV_SINT32 iLockType, PNV_VOID *ppvLock); 91143439Sobrientypedef NV_API_CALL NV_SINT32 (* PFN_LOCK_ACQUIRE) (PNV_VOID pOSCX, NV_SINT32 iLockType, PNV_VOID pvLock); 92143439Sobrientypedef NV_API_CALL NV_SINT32 (* PFN_LOCK_RELEASE) (PNV_VOID pOSCX, NV_SINT32 iLockType, PNV_VOID pvLock); 93143439Sobrientypedef NV_API_CALL PNV_VOID (* PFN_RETURN_BUFFER_VIRTUAL) (PNV_VOID pvContext, PNV_VOID pvADReadData); 94143439Sobrien 95143439Sobrien// Here are the OS functions that those objects below the OS interface 96143439Sobrien// can call up to. 97143439Sobrientypedef struct _OS_API 98143439Sobrien{ 99143439Sobrien // OS Context -- this is a parameter to every OS API call 100143439Sobrien PNV_VOID pOSCX; 101143439Sobrien 102143439Sobrien // Basic OS functions 103143439Sobrien PFN_MEMORY_ALLOC pfnAllocMemory; 104143439Sobrien PFN_MEMORY_FREE pfnFreeMemory; 105143439Sobrien PFN_MEMORY_ALLOCEX pfnAllocMemoryEx; 106143439Sobrien PFN_MEMORY_FREEEX pfnFreeMemoryEx; 107143439Sobrien PFN_CLEAR_MEMORY pfnClearMemory; 108143439Sobrien PFN_STALL_EXECUTION pfnStallExecution; 109143439Sobrien PFN_ALLOC_RECEIVE_BUFFER pfnAllocReceiveBuffer; 110143439Sobrien PFN_FREE_RECEIVE_BUFFER pfnFreeReceiveBuffer; 111143439Sobrien PFN_PACKET_WAS_SENT pfnPacketWasSent; 112143439Sobrien PFN_PACKET_WAS_RECEIVED pfnPacketWasReceived; 113143439Sobrien PFN_LINK_STATE_HAS_CHANGED pfnLinkStateHasChanged; 114143439Sobrien PFN_ALLOC_TIMER pfnAllocTimer; 115143439Sobrien PFN_FREE_TIMER pfnFreeTimer; 116143439Sobrien PFN_INITIALIZE_TIMER pfnInitializeTimer; 117143439Sobrien PFN_SET_TIMER pfnSetTimer; 118143439Sobrien PFN_CANCEL_TIMER pfnCancelTimer; 119143439Sobrien PFN_PREPROCESS_PACKET pfnPreprocessPacket; 120143439Sobrien PFN_PREPROCESS_PACKET_NOPQ pfnPreprocessPacketNopq; 121143439Sobrien PFN_INDICATE_PACKETS pfnIndicatePackets; 122143439Sobrien PFN_LOCK_ALLOC pfnLockAlloc; 123143439Sobrien PFN_LOCK_ACQUIRE pfnLockAcquire; 124143439Sobrien PFN_LOCK_RELEASE pfnLockRelease; 125143439Sobrien PFN_RETURN_BUFFER_VIRTUAL pfnReturnBufferVirtual; 126143439Sobrien} OS_API, *POS_API; 127143439Sobrien 128143439Sobrien#endif // _OS_H_ 129