freebsd-dev/sys/contrib/dev/nve/os.h

129 lines
6.4 KiB
C
Raw Normal View History

/***************************************************************************\
|* *|
|* 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_