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