129 lines
6.4 KiB
C
129 lines
6.4 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: os.h
|
||
|
DATE: 2/7/00
|
||
|
|
||
|
This file contains the os interface. Note that the os interface is
|
||
|
itself an OS-independent API. The OS specific module is implemented
|
||
|
by ndis.c for Win9X/NT and linuxnet.c for linux.
|
||
|
*/
|
||
|
#ifndef _OS_H_
|
||
|
#define _OS_H_
|
||
|
|
||
|
#include "phy.h"
|
||
|
|
||
|
#define HDO_VERSION_STRING "HDR O: $Revision: #21 $";
|
||
|
|
||
|
// This is the maximum packet size that we will be sending
|
||
|
// #define MAX_PACKET_SIZE 2048
|
||
|
//#define RX_BUFFER_SIZE 2048
|
||
|
|
||
|
#define MIN_PACKET_MTU_SIZE 576
|
||
|
#define MAX_PACKET_MTU_SIZE 9202
|
||
|
#define MAX_PACKET_SIZE_2048 2048
|
||
|
#define MAX_PACKET_SIZE_1514 1514
|
||
|
#define MAX_PACKET_SIZE_1518 1518
|
||
|
#define MAX_PACKET_SIZE_JUMBO (9 * 1024)
|
||
|
|
||
|
typedef struct _MEMORY_BLOCK
|
||
|
{
|
||
|
PNV_VOID pLogical;
|
||
|
PNV_VOID pPhysical;
|
||
|
NV_UINT32 uiLength;
|
||
|
} MEMORY_BLOCK, *PMEMORY_BLOCK;
|
||
|
|
||
|
#define ALLOC_MEMORY_NONCACHED 0x0001
|
||
|
#define ALLOC_MEMORY_ALIGNED 0x0002
|
||
|
|
||
|
typedef struct _MEMORY_BLOCKEX
|
||
|
{
|
||
|
PNV_VOID pLogical;
|
||
|
PNV_VOID pPhysical;
|
||
|
NV_UINT32 uiLength;
|
||
|
/* Parameter to OS layer to indicate what type of memory is needed */
|
||
|
NV_UINT16 AllocFlags;
|
||
|
NV_UINT16 AlignmentSize; //always power of 2
|
||
|
/* Following three fields used for aligned memory allocation */
|
||
|
PNV_VOID pLogicalOrig;
|
||
|
NV_UINT32 pPhysicalOrigLow;
|
||
|
NV_UINT32 pPhysicalOrigHigh;
|
||
|
NV_UINT32 uiLengthOrig;
|
||
|
} MEMORY_BLOCKEX, *PMEMORY_BLOCKEX;
|
||
|
|
||
|
|
||
|
// The typedefs for the OS functions
|
||
|
typedef NV_API_CALL NV_SINT32 (* PFN_MEMORY_ALLOC) (PNV_VOID pOSCX, PMEMORY_BLOCK pMem);
|
||
|
typedef NV_API_CALL NV_SINT32 (* PFN_MEMORY_FREE) (PNV_VOID pOSCX, PMEMORY_BLOCK pMem);
|
||
|
typedef NV_API_CALL NV_SINT32 (* PFN_MEMORY_ALLOCEX) (PNV_VOID pOSCX, PMEMORY_BLOCKEX pMem);
|
||
|
typedef NV_API_CALL NV_SINT32 (* PFN_MEMORY_FREEEX) (PNV_VOID pOSCX, PMEMORY_BLOCKEX pMem);
|
||
|
typedef NV_API_CALL NV_SINT32 (* PFN_CLEAR_MEMORY) (PNV_VOID pOSCX, PNV_VOID pMem, NV_SINT32 iLength);
|
||
|
typedef NV_API_CALL NV_SINT32 (* PFN_STALL_EXECUTION) (PNV_VOID pOSCX, NV_UINT32 ulTimeInMicroseconds);
|
||
|
typedef NV_API_CALL NV_SINT32 (* PFN_ALLOC_RECEIVE_BUFFER) (PNV_VOID pOSCX, PMEMORY_BLOCK pMem, PNV_VOID *ppvID);
|
||
|
typedef NV_API_CALL NV_SINT32 (* PFN_FREE_RECEIVE_BUFFER) (PNV_VOID pOSCX, PMEMORY_BLOCK pMem, PNV_VOID pvID);
|
||
|
typedef NV_API_CALL NV_SINT32 (* PFN_PACKET_WAS_SENT) (PNV_VOID pOSCX, PNV_VOID pvID, NV_UINT32 ulSuccess);
|
||
|
typedef NV_API_CALL NV_SINT32 (* PFN_PACKET_WAS_RECEIVED) (PNV_VOID pOSCX, PNV_VOID pvADReadData, NV_UINT32 ulSuccess, NV_UINT8 *pNewBuffer, NV_UINT8 uc8021pPriority);
|
||
|
typedef NV_API_CALL NV_SINT32 (* PFN_LINK_STATE_HAS_CHANGED) (PNV_VOID pOSCX, NV_SINT32 nEnabled);
|
||
|
typedef NV_API_CALL NV_SINT32 (* PFN_ALLOC_TIMER) (PNV_VOID pvContext, PNV_VOID *ppvTimer);
|
||
|
typedef NV_API_CALL NV_SINT32 (* PFN_FREE_TIMER) (PNV_VOID pvContext, PNV_VOID pvTimer);
|
||
|
typedef NV_API_CALL NV_SINT32 (* PFN_INITIALIZE_TIMER) (PNV_VOID pvContext, PNV_VOID pvTimer, PTIMER_FUNC pvFunc, PNV_VOID pvFuncParameter);
|
||
|
typedef NV_API_CALL NV_SINT32 (* PFN_SET_TIMER) (PNV_VOID pvContext, PNV_VOID pvTimer, NV_UINT32 dwMillisecondsDelay);
|
||
|
typedef NV_API_CALL NV_SINT32 (* PFN_CANCEL_TIMER) (PNV_VOID pvContext, PNV_VOID pvTimer);
|
||
|
|
||
|
typedef NV_API_CALL NV_SINT32 (* PFN_PREPROCESS_PACKET) (PNV_VOID pvContext, PNV_VOID pvADReadData, PNV_VOID *ppvID,
|
||
|
NV_UINT8 *pNewBuffer, NV_UINT8 uc8021pPriority);
|
||
|
typedef NV_API_CALL PNV_VOID (* PFN_PREPROCESS_PACKET_NOPQ) (PNV_VOID pvContext, PNV_VOID pvADReadData);
|
||
|
typedef NV_API_CALL NV_SINT32 (* PFN_INDICATE_PACKETS) (PNV_VOID pvContext, PNV_VOID *ppvID, NV_UINT32 ulNumPacket);
|
||
|
typedef NV_API_CALL NV_SINT32 (* PFN_LOCK_ALLOC) (PNV_VOID pOSCX, NV_SINT32 iLockType, PNV_VOID *ppvLock);
|
||
|
typedef NV_API_CALL NV_SINT32 (* PFN_LOCK_ACQUIRE) (PNV_VOID pOSCX, NV_SINT32 iLockType, PNV_VOID pvLock);
|
||
|
typedef NV_API_CALL NV_SINT32 (* PFN_LOCK_RELEASE) (PNV_VOID pOSCX, NV_SINT32 iLockType, PNV_VOID pvLock);
|
||
|
typedef NV_API_CALL PNV_VOID (* PFN_RETURN_BUFFER_VIRTUAL) (PNV_VOID pvContext, PNV_VOID pvADReadData);
|
||
|
|
||
|
// Here are the OS functions that those objects below the OS interface
|
||
|
// can call up to.
|
||
|
typedef struct _OS_API
|
||
|
{
|
||
|
// OS Context -- this is a parameter to every OS API call
|
||
|
PNV_VOID pOSCX;
|
||
|
|
||
|
// Basic OS functions
|
||
|
PFN_MEMORY_ALLOC pfnAllocMemory;
|
||
|
PFN_MEMORY_FREE pfnFreeMemory;
|
||
|
PFN_MEMORY_ALLOCEX pfnAllocMemoryEx;
|
||
|
PFN_MEMORY_FREEEX pfnFreeMemoryEx;
|
||
|
PFN_CLEAR_MEMORY pfnClearMemory;
|
||
|
PFN_STALL_EXECUTION pfnStallExecution;
|
||
|
PFN_ALLOC_RECEIVE_BUFFER pfnAllocReceiveBuffer;
|
||
|
PFN_FREE_RECEIVE_BUFFER pfnFreeReceiveBuffer;
|
||
|
PFN_PACKET_WAS_SENT pfnPacketWasSent;
|
||
|
PFN_PACKET_WAS_RECEIVED pfnPacketWasReceived;
|
||
|
PFN_LINK_STATE_HAS_CHANGED pfnLinkStateHasChanged;
|
||
|
PFN_ALLOC_TIMER pfnAllocTimer;
|
||
|
PFN_FREE_TIMER pfnFreeTimer;
|
||
|
PFN_INITIALIZE_TIMER pfnInitializeTimer;
|
||
|
PFN_SET_TIMER pfnSetTimer;
|
||
|
PFN_CANCEL_TIMER pfnCancelTimer;
|
||
|
PFN_PREPROCESS_PACKET pfnPreprocessPacket;
|
||
|
PFN_PREPROCESS_PACKET_NOPQ pfnPreprocessPacketNopq;
|
||
|
PFN_INDICATE_PACKETS pfnIndicatePackets;
|
||
|
PFN_LOCK_ALLOC pfnLockAlloc;
|
||
|
PFN_LOCK_ACQUIRE pfnLockAcquire;
|
||
|
PFN_LOCK_RELEASE pfnLockRelease;
|
||
|
PFN_RETURN_BUFFER_VIRTUAL pfnReturnBufferVirtual;
|
||
|
} OS_API, *POS_API;
|
||
|
|
||
|
#endif // _OS_H_
|