adapter.h revision 143439
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:   adapter.h
18    DATE:   2/7/00
19
20    This file contains the hardware interface to the ethernet adapter.
21*/
22
23#ifndef _ADAPTER_H_
24#define _ADAPTER_H_
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30#define HDA_VERSION_STRING "HDR A: $Revision: #46 $"
31
32#ifdef MODS_NETWORK_BUILD
33#ifndef _DRVAPP_H_
34#include "drvapp.h"
35#endif
36#endif
37
38//////////////////////////////////////////////////////////////////
39// For the set and get configuration calls.
40typedef struct  _ADAPTER_CONFIG
41{
42    NV_UINT32   ulFlags;
43}   ADAPTER_CONFIG, *PADAPTER_CONFIG;
44//////////////////////////////////////////////////////////////////
45
46typedef struct _ADAPTER_WRITE_OFFLOAD
47{
48    NV_UINT32   usBitmask;
49    NV_UINT32   ulMss;
50
51} ADAPTER_WRITE_OFFLOAD;
52
53//////////////////////////////////////////////////////////////////
54// For the ADAPTER_Write1 call.
55/* This scatter gather list should be same as defined in ndis.h by MS.
56   For ULONG_PTR MS header file says that it will be of same size as
57   pointer. It has been defined to take care of casting between differenet
58   sizes.
59*/
60typedef struct _NVSCATTER_GATHER_ELEMENT {
61    NV_UINT32 PhysLow;
62    NV_UINT32 PhysHigh;
63    NV_UINT32 Length;
64    NV_VOID *Reserved;
65} NVSCATTER_GATHER_ELEMENT, *PNVSCATTER_GATHER_ELEMENT;
66
67#ifndef linux
68#pragma warning(disable:4200)
69#endif
70typedef struct _NVSCATTER_GATHER_LIST {
71    NV_UINT32       NumberOfElements;
72    NV_VOID         *Reserved;
73    NVSCATTER_GATHER_ELEMENT Elements[0];   // Made 0 sized element to remove MODS compilation error
74                                            // Elements[0] and Elements[] have the same effect.
75                                            // sizeof(NVSCATTER_GATHER_LIST) is the same (value of 8) in both cases
76                                            // And both lead to Warning 4200 in MSVC
77} NVSCATTER_GATHER_LIST, *PNVSCATTER_GATHER_LIST;
78#ifndef linux
79#pragma warning(default:4200)
80#endif
81
82typedef struct  _ADAPTER_WRITE_DATA1
83{
84    NV_UINT32                   ulTotalLength;
85    PNV_VOID                    pvID;
86    NV_UINT8                    uc8021pPriority;
87    ADAPTER_WRITE_OFFLOAD       *psOffload;
88    PNVSCATTER_GATHER_LIST      pNVSGL;
89}   ADAPTER_WRITE_DATA1, *PADAPTER_WRITE_DATA1;
90
91
92//////////////////////////////////////////////////////////////////
93// For the ADAPTER_Write call.
94typedef struct  _ADAPTER_WRITE_ELEMENT
95{
96    PNV_VOID   pPhysical;
97    NV_UINT32   ulLength;
98}   ADAPTER_WRITE_ELEMENT, *PADAPTER_WRITE_ELEMENT;
99
100
101#define ADAPTER_WRITE_OFFLOAD_BP_SEGOFFLOAD      0
102#define ADAPTER_WRITE_OFFLOAD_BP_IPV4CHECKSUM    1
103#define ADAPTER_WRITE_OFFLOAD_BP_IPV6CHECKSUM    2
104#define ADAPTER_WRITE_OFFLOAD_BP_TCPCHECKSUM     3
105#define ADAPTER_WRITE_OFFLOAD_BP_UDPCHECKSUM     4
106#define ADAPTER_WRITE_OFFLOAD_BP_IPCHECKSUM      5
107
108
109// pvID is a value that will be passed back into OSAPI.pfnPacketWasSent
110// when the transmission completes. if pvID is NULL, the ADAPTER code
111// assumes the caller does not want the pfnPacketWasSent callback.
112typedef struct  _ADAPTER_WRITE_DATA
113{
114    NV_UINT32                   ulNumberOfElements;
115    NV_UINT32                   ulTotalLength;
116    PNV_VOID                    pvID;
117    NV_UINT8                    uc8021pPriority;
118    ADAPTER_WRITE_OFFLOAD       *psOffload;
119    ADAPTER_WRITE_ELEMENT       sElement[100];
120}   ADAPTER_WRITE_DATA, *PADAPTER_WRITE_DATA;
121//////////////////////////////////////////////////////////////////
122
123
124
125//////////////////////////////////////////////////////////////////
126// For the ADAPTER_Read call.
127typedef struct  _ADAPTER_READ_ELEMENT
128{
129    PNV_VOID   pPhysical;
130    NV_UINT32   ulLength;
131}   ADAPTER_READ_ELEMENT, *PADAPTER_READ_ELEMENT;
132
133typedef struct _ADAPTER_READ_OFFLOAD
134{
135    NV_UINT8  ucChecksumStatus;
136
137} ADAPTER_READ_OFFLOAD;
138
139typedef struct _ADAPTER_READ_DATA
140{
141    NV_UINT32                   ulNumberOfElements;
142    NV_UINT32                   ulTotalLength;
143    PNV_VOID                    pvID;
144    NV_UINT32                   ulFilterMatch;
145    ADAPTER_READ_OFFLOAD        sOffload;
146    ADAPTER_READ_ELEMENT        sElement[10];
147}   ADAPTER_READ_DATA, *PADAPTER_READ_DATA;
148
149
150#define RDFLAG_CHK_NOCHECKSUM      0
151#define RDFLAG_CHK_IPPASSTCPFAIL   1
152#define RDFLAG_CHK_IPPASSUDPFAIL   2
153#define RDFLAG_CHK_IPFAIL          3
154#define RDFLAG_CHK_IPPASSNOTCPUDP  4
155#define RDFLAG_CHK_IPPASSTCPPASS   5
156#define RDFLAG_CHK_IPPASSUDPPASS   6
157#define RDFLAG_CHK_RESERVED        7
158
159
160// The ulFilterMatch flag can be a logical OR of the following
161#define ADREADFL_UNICAST_MATCH          0x00000001
162#define ADREADFL_MULTICAST_MATCH        0x00000002
163#define ADREADFL_BROADCAST_MATCH        0x00000004
164//////////////////////////////////////////////////////////////////
165
166
167
168//////////////////////////////////////////////////////////////////
169// For the ADAPTER_GetPowerCapabilities call.
170typedef struct  _ADAPTER_POWERCAPS
171{
172    NV_UINT32   ulPowerFlags;
173    NV_UINT32   ulMagicPacketWakeUpFlags;
174    NV_UINT32   ulPatternWakeUpFlags;
175    NV_UINT32   ulLinkChangeWakeUpFlags;
176    NV_SINT32     iMaxWakeUpPatterns;
177}   ADAPTER_POWERCAPS, *PADAPTER_POWERCAPS;
178
179// For the ADAPTER_GetPowerState and ADAPTER_SetPowerState call.
180typedef struct  _ADAPTER_POWERSTATE
181{
182    NV_UINT32   ulPowerFlags;
183    NV_UINT32   ulMagicPacketWakeUpFlags;
184    NV_UINT32   ulPatternWakeUpFlags;
185    NV_UINT32   ulLinkChangeWakeUpFlags;
186}   ADAPTER_POWERSTATE, *PADAPTER_POWERSTATE;
187
188// Each of the flag fields in the POWERCAPS structure above can have
189// any of the following bitflags set giving the capabilites of the
190// adapter. In the case of the wake up fields, these flags mean that
191// wake up can happen from the specified power state.
192
193// For the POWERSTATE structure, the ulPowerFlags field should just
194// have one of these bits set to go to that particular power state.
195// The WakeUp fields can have one or more of these bits set to indicate
196// what states should be woken up from.
197#define POWER_STATE_D0          0x00000001
198#define POWER_STATE_D1          0x00000002
199#define POWER_STATE_D2          0x00000004
200#define POWER_STATE_D3          0x00000008
201
202#define POWER_STATE_ALL         (POWER_STATE_D0 | \
203                                POWER_STATE_D1  | \
204                                POWER_STATE_D2  | \
205                                POWER_STATE_D3)
206//////////////////////////////////////////////////////////////////
207
208
209
210//////////////////////////////////////////////////////////////////
211// The ADAPTER_GetPacketFilterCaps call returns a NV_UINT32 that can
212// have the following capability bits set.
213#define ACCEPT_UNICAST_PACKETS      0x00000001
214#define ACCEPT_MULTICAST_PACKETS    0x00000002
215#define ACCEPT_BROADCAST_PACKETS    0x00000004
216#define ACCEPT_ALL_PACKETS          0x00000008
217
218#define ETH_LENGTH_OF_ADDRESS        6
219
220// The ADAPTER_SetPacketFilter call uses this structure to know what
221// packet filter to set. The ulPacketFilter field can contain some
222// union of the bit flags above. The acMulticastMask array holds a
223// 48 bit MAC address mask with a 0 in every bit position that should
224// be ignored on compare and a 1 in every bit position that should
225// be taken into account when comparing to see if the destination
226// address of a packet should be accepted for multicast.
227typedef struct  _PACKET_FILTER
228{
229    NV_UINT32   ulFilterFlags;
230    NV_UINT8   acMulticastAddress[ETH_LENGTH_OF_ADDRESS];
231    NV_UINT8   acMulticastMask[ETH_LENGTH_OF_ADDRESS];
232}   PACKET_FILTER, *PPACKET_FILTER;
233//////////////////////////////////////////////////////////////////
234
235
236//////////////////////////////////////////////////////////////////
237// A WAKE_UP_PATTERN is a 128-byte pattern that the adapter can
238// look for in incoming packets to decide when to wake up.  Higher-
239// level protocols can use this to, for example, wake up the
240// adapter whenever it sees an IP packet that is addressed to it.
241// A pattern consists of 128 bits of byte masks that indicate
242// which bytes in the packet are relevant to the pattern, plus
243// values for each byte.
244#define WAKE_UP_PATTERN_SIZE 128
245
246typedef struct _WAKE_UP_PATTERN
247{
248    NV_UINT32   aulByteMask[WAKE_UP_PATTERN_SIZE/32];
249    NV_UINT8   acData[WAKE_UP_PATTERN_SIZE];
250}   WAKE_UP_PATTERN, *PWAKE_UP_PATTERN;
251
252
253
254//
255//
256// Adapter offload
257//
258typedef struct _ADAPTER_OFFLOAD {
259
260    NV_UINT32 Type;
261    NV_UINT32 Value0;
262
263} ADAPTER_OFFLOAD, *PADAPTER_OFFLOAD;
264
265#define ADAPTER_OFFLOAD_VLAN        0x00000001
266#define ADAPTER_OFFLOAD_IEEE802_1P    0x00000002
267#define ADAPTER_OFFLOAD_IEEE802_1PQ_PAD    0x00000004
268
269//////////////////////////////////////////////////////////////////
270
271//  CMNDATA_OS_ADAPTER
272//  Structure common to OS and Adapter layers
273//  Used for moving data from the OS layer to the adapter layer through SetCommonData
274//  function call from OS layer to Adapter layer
275//
276
277typedef struct  _CMNDATA_OS_ADAPTER
278{
279#ifndef linux
280    ASF_SEC0_BASE   sRegSec0Base;
281#endif
282    NV_UINT32           bFPGA;
283    NV_UINT32           ulFPGAEepromSize;
284    NV_UINT32           bChecksumOffloadEnable;
285    NV_UINT32           ulChecksumOffloadBM;
286    NV_UINT32           ulChecksumOffloadOS;
287    NV_UINT32           ulMediaIF;
288    NV_UINT32           bOemCustomEventRead;
289
290    // Debug only right now
291    //!!! Beware mods is relying on the fields blow.
292    NV_UINT32           ulWatermarkTFBW;
293    NV_UINT32           ulBackoffRseed;
294    NV_UINT32           ulBackoffSlotTime;
295    NV_UINT32           ulModeRegTxReadCompleteEnable;
296    NV_UINT32           ulFatalErrorRegister;
297
298} CMNDATA_OS_ADAPTER;
299
300
301//////////////////////////////////////////////////////////////////
302// The functional typedefs for the ADAPTER Api
303typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_CLOSE)  (PNV_VOID pvContext, NV_UINT8 ucIsPowerDown);
304typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_INIT)  (PNV_VOID pvContext, NV_UINT16 usForcedSpeed, NV_UINT8 ucForceDpx, NV_UINT8 ucForceMode, NV_UINT8 ucAsyncMode, NV_UINT32 *puiLinkState);
305typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_DEINIT)  (PNV_VOID pvContext, NV_UINT8 ucIsPowerDown);
306typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_START)  (PNV_VOID pvContext);
307typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_STOP)   (PNV_VOID pvContext, NV_UINT8 ucIsPowerDown);
308typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_QUERY_WRITE_SLOTS) (PNV_VOID pvContext);
309typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_WRITE) (PNV_VOID pvContext, ADAPTER_WRITE_DATA *pADWriteData);
310typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_WRITE1) (PNV_VOID pvContext, ADAPTER_WRITE_DATA1 *pADWriteData1);
311typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_QUERY_INTERRUPT) (PNV_VOID pvContext);
312typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_HANDLE_INTERRUPT) (PNV_VOID pvContext);
313typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_DISABLE_INTERRUPTS) (PNV_VOID pvContext);
314typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_ENABLE_INTERRUPTS) (PNV_VOID pvContext);
315typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_CLEAR_INTERRUPTS) (PNV_VOID pvContext);
316typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_CLEAR_TX_DESC) (PNV_VOID pvContext);
317typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_LINK_SPEED) (PNV_VOID pvContext);
318typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_LINK_MODE) (PNV_VOID pvContext);
319typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_LINK_STATE) (PNV_VOID pvContext, NV_UINT32 *pulLinkState);
320typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_IS_LINK_INITIALIZING) (PNV_VOID pvContext);
321typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_RESET_PHY_INIT_STATE) (PNV_VOID pvContext);
322typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_TRANSMIT_QUEUE_SIZE) (PNV_VOID pvContext);
323typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_RECEIVE_QUEUE_SIZE) (PNV_VOID pvContext);
324typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_STATISTICS) (PNV_VOID pvContext, PADAPTER_STATS pADStats);
325typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_POWER_CAPS) (PNV_VOID pvContext, PADAPTER_POWERCAPS pADPowerCaps);
326typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_POWER_STATE) (PNV_VOID pvContext, PADAPTER_POWERSTATE pADPowerState);
327typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_SET_POWER_STATE) (PNV_VOID pvContext, PADAPTER_POWERSTATE pADPowerState);
328typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_SET_LOW_SPEED_FOR_PM) (PNV_VOID pvContext);
329typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_PACKET_FILTER_CAPS) (PNV_VOID pvContext);
330typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_SET_PACKET_FILTER) (PNV_VOID pvContext, PPACKET_FILTER pPacketFilter);
331typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_SET_WAKE_UP_PATTERN) (PNV_VOID pvContext, NV_SINT32 iPattern, PWAKE_UP_PATTERN pPattern);
332typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_ENABLE_WAKE_UP_PATTERN) (PNV_VOID pvContext, NV_SINT32 iPattern, NV_SINT32 iEnable);
333typedef NV_API_CALL NV_SINT32 (* PFN_SET_NODE_ADDRESS) (PNV_VOID pvContext, NV_UINT8 *pNodeAddress);
334typedef NV_API_CALL NV_SINT32 (* PFN_GET_NODE_ADDRESS) (PNV_VOID pvContext, NV_UINT8 *pNodeAddress);
335typedef NV_API_CALL NV_SINT32 (* PFN_GET_ADAPTER_INFO) (PNV_VOID pvContext, PNV_VOID pVoidPtr, NV_SINT32 iType, NV_SINT32 *piLength);
336typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_READ_PHY)  (PNV_VOID pvContext, NV_UINT32 ulPhyAddr, NV_UINT32 ulPhyReg, NV_UINT32 *pulValue);
337typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_WRITE_PHY) (PNV_VOID pvContext, NV_UINT32 ulPhyAddr, NV_UINT32 ulPhyReg, NV_UINT32 ulValue);
338typedef NV_API_CALL NV_VOID(* PFN_ADAPTER_SET_SPPED_DUPLEX) (PNV_VOID pvContext);
339typedef NV_API_CALL NV_SINT32 (*PFN_REGISTER_OFFLOAD) (PNV_VOID pvContext,  PADAPTER_OFFLOAD pOffload);
340typedef NV_API_CALL NV_SINT32 (*PFN_DEREGISTER_OFFLOAD) (PNV_VOID pvContext, PADAPTER_OFFLOAD pOffload);
341typedef NV_API_CALL NV_SINT32 (*PFN_RX_BUFF_READY) (PNV_VOID pvContext, PMEMORY_BLOCK pMemBlock, PNV_VOID pvID);
342
343#ifndef linux
344typedef NV_SINT32 (*PFN_ADAPTER_ASF_SETUPREGISTERS) (PNV_VOID pvContext, NV_SINT32 bInitTime);
345typedef NV_SINT32 (*PFN_ADAPTER_ASF_GETSEC0BASEADDRESS) (PNV_VOID pvContext, ASF_SEC0_BASE **ppsSec0Base);
346typedef NV_SINT32 (*PFN_ADAPTER_ASF_SETSOURCEIPADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucSrcIPAddress);
347typedef NV_SINT32 (*PFN_ADAPTER_ASF_GETDESTIPADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucDestIPAddress);
348typedef NV_SINT32 (*PFN_ADAPTER_ASF_SETDESTIPADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucDestIPAddress);
349typedef NV_SINT32 (*PFN_ADAPTER_ASF_WRITEEEPROMANDSETUPREGISTERS) (PNV_VOID pvContext, NV_BOOLEAN bCompare, PNV_VOID pucValue, PNV_VOID pszSec0BaseMember,
350                                      NV_UINT16 usCount, NV_UINT32 ulAddressOffset);
351
352typedef NV_SINT32 (*PFN_ADAPTER_ASF_ISASFREADY) (PNV_VOID pvContext, ASF_ASFREADY *psASFReady);
353
354typedef NV_SINT32 (*PFN_ADAPTER_ASF_SETDESTMACADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucDestMACAddress);
355typedef NV_SINT32 (*PFN_ADAPTER_ASF_GETSOURCEMACADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucSrcMACAddress);
356
357typedef NV_SINT32 (*PFN_ADAPTER_ASF_CHECK_FOR_EEPROM_PRESENCE)  (PNV_VOID pvContext);
358#endif
359
360typedef NV_API_CALL NV_VOID (*PFN_ADAPTER_SET_COMMONDATA) (PNV_VOID pvContext, CMNDATA_OS_ADAPTER *psOSAdpater);
361typedef NV_API_CALL NV_VOID (*PFN_ADAPTER_SET_CHECKSUMOFFLOAD) (PNV_VOID pvContext, NV_UINT32 bSet);
362
363
364
365typedef struct  _ADAPTER_API
366{
367    // The adapter context
368    PNV_VOID                                   pADCX;
369
370    // The adapter interface
371    PFN_ADAPTER_CLOSE                       pfnClose;
372    PFN_ADAPTER_INIT                        pfnInit;
373    PFN_ADAPTER_DEINIT                      pfnDeinit;
374    PFN_ADAPTER_START                       pfnStart;
375    PFN_ADAPTER_STOP                        pfnStop;
376    PFN_ADAPTER_QUERY_WRITE_SLOTS           pfnQueryWriteSlots;
377    PFN_ADAPTER_WRITE                       pfnWrite;
378    PFN_ADAPTER_WRITE1                      pfnWrite1;
379    PFN_ADAPTER_QUERY_INTERRUPT             pfnQueryInterrupt;
380    PFN_ADAPTER_HANDLE_INTERRUPT            pfnHandleInterrupt;
381    PFN_ADAPTER_DISABLE_INTERRUPTS          pfnDisableInterrupts;
382    PFN_ADAPTER_ENABLE_INTERRUPTS           pfnEnableInterrupts;
383    PFN_ADAPTER_CLEAR_INTERRUPTS            pfnClearInterrupts;
384    PFN_ADAPTER_CLEAR_TX_DESC                pfnClearTxDesc;
385    PFN_ADAPTER_GET_LINK_SPEED              pfnGetLinkSpeed;
386    PFN_ADAPTER_GET_LINK_MODE               pfnGetLinkMode;
387    PFN_ADAPTER_GET_LINK_STATE              pfnGetLinkState;
388    PFN_ADAPTER_IS_LINK_INITIALIZING        pfnIsLinkInitializing;
389    PFN_ADAPTER_RESET_PHY_INIT_STATE        pfnResetPhyInitState;
390    PFN_ADAPTER_GET_TRANSMIT_QUEUE_SIZE     pfnGetTransmitQueueSize;
391    PFN_ADAPTER_GET_RECEIVE_QUEUE_SIZE      pfnGetReceiveQueueSize;
392    PFN_ADAPTER_GET_STATISTICS              pfnGetStatistics;
393    PFN_ADAPTER_GET_POWER_CAPS              pfnGetPowerCaps;
394    PFN_ADAPTER_GET_POWER_STATE             pfnGetPowerState;
395    PFN_ADAPTER_SET_POWER_STATE             pfnSetPowerState;
396    PFN_ADAPTER_SET_LOW_SPEED_FOR_PM        pfnSetLowSpeedForPM;
397    PFN_ADAPTER_GET_PACKET_FILTER_CAPS      pfnGetPacketFilterCaps;
398    PFN_ADAPTER_SET_PACKET_FILTER           pfnSetPacketFilter;
399    PFN_ADAPTER_SET_WAKE_UP_PATTERN         pfnSetWakeUpPattern;
400    PFN_ADAPTER_ENABLE_WAKE_UP_PATTERN      pfnEnableWakeUpPattern;
401    PFN_SET_NODE_ADDRESS                    pfnSetNodeAddress;
402    PFN_GET_NODE_ADDRESS                    pfnGetNodeAddress;
403    PFN_GET_ADAPTER_INFO                    pfnGetAdapterInfo;
404    PFN_ADAPTER_SET_SPPED_DUPLEX            pfnSetSpeedDuplex;
405    PFN_ADAPTER_READ_PHY                    pfnReadPhy;
406    PFN_ADAPTER_WRITE_PHY                    pfnWritePhy;
407    PFN_REGISTER_OFFLOAD                    pfnRegisterOffload;
408    PFN_DEREGISTER_OFFLOAD                    pfnDeRegisterOffload;
409    PFN_RX_BUFF_READY                        pfnRxBuffReady;
410#ifndef linux
411    PFN_ADAPTER_ASF_SETUPREGISTERS          pfnASFSetupRegisters;
412    PFN_ADAPTER_ASF_GETSEC0BASEADDRESS      pfnASFGetSec0BaseAddress;
413    PFN_ADAPTER_ASF_SETSOURCEIPADDRESS      pfnASFSetSourceIPAddress;
414    PFN_ADAPTER_ASF_GETDESTIPADDRESS        pfnASFGetDestIPAddress;
415    PFN_ADAPTER_ASF_SETDESTIPADDRESS        pfnASFSetDestIPAddress;
416    PFN_ADAPTER_ASF_WRITEEEPROMANDSETUPREGISTERS pfnASFWriteEEPROMAndSetupRegisters;
417    PFN_ADAPTER_ASF_SETDESTMACADDRESS       pfnASFSetDestMACAddress;
418    PFN_ADAPTER_ASF_GETSOURCEMACADDRESS     pfnASFGetSourceMACAddress;
419    PFN_ADAPTER_ASF_ISASFREADY              pfnASFIsASFReady;
420    PFN_ADAPTER_ASF_CHECK_FOR_EEPROM_PRESENCE pfnASFCheckForEepromPresence;
421#endif
422    PFN_ADAPTER_SET_COMMONDATA              pfnSetCommonData;
423
424    PFN_ADAPTER_SET_CHECKSUMOFFLOAD         pfnSetChecksumOffload;
425
426}   ADAPTER_API, *PADAPTER_API;
427//////////////////////////////////////////////////////////////////
428
429#define MAX_PACKET_TO_ACCUMULATE    16
430
431typedef struct _ADAPTER_OPEN_PARAMS
432{
433    PNV_VOID pOSApi; //pointer to OSAPI structure passed from higher layer
434    PNV_VOID pvHardwareBaseAddress; //memory mapped address passed from higher layer
435    NV_UINT32 ulPollInterval; //poll interval in micro seconds. Used in polling mode
436    NV_UINT32 MaxDpcLoop; //Maximum number of times we loop to in function ADAPTER_HandleInterrupt
437    NV_UINT32 MaxRxPkt; //Maximum number of packet we process each time in function UpdateReceiveDescRingData
438    NV_UINT32 MaxTxPkt; //Maximum number of packet we process each time in function UpdateTransmitDescRingData
439    NV_UINT32 MaxRxPktToAccumulate; //maximum number of rx packet we accumulate in UpdateReceiveDescRingData before
440                                //indicating packets to OS.
441    NV_UINT32 SentPacketStatusSuccess; //Status returned from adapter layer to higher layer when packet was sent successfully
442    NV_UINT32 SentPacketStatusFailure; ////Status returned from adapter layer to higher layer when packet send was unsuccessful
443    NV_UINT32 SetForcedModeEveryNthRxPacket; //NOT USED: For experiment with descriptor based interrupt
444    NV_UINT32 SetForcedModeEveryNthTxPacket; //NOT USED: For experiment with descriptor based interrupt
445    NV_UINT32 RxForcedInterrupt; //NOT USED: For experiment with descriptor based interrupt
446    NV_UINT32 TxForcedInterrupt; //NOT USED: For experiment with descriptor based interrupt
447    NV_UINT32 DeviceId; //Of MAC
448    NV_UINT32 DeviceType;
449    NV_UINT32 PollIntervalInusForThroughputMode; //Of MAC
450    NV_UINT32 bASFEnabled;
451    NV_UINT32 ulDescriptorVersion;
452    NV_UINT32 ulMaxPacketSize;
453
454
455#define MEDIA_IF_AUTO       0
456#define MEDIA_IF_RGMII      1
457#define MEDIA_IF_MII        2
458    NV_UINT32 ulMediaIF;
459
460	NV_UINT32	PhyPowerIsolationTimeoutInms;
461	NV_UINT32	PhyResetTimeoutInms;
462	NV_UINT32	PhyAutonegotiateTimeoutInms;
463	NV_UINT32	PhyLinkupTimeoutInms;
464	NV_UINT32	PhyRdWrTimeoutInus;
465	NV_UINT32	PhyPowerdownOnClose;
466
467    // Added for Bug 100715
468    NV_UINT32   bDisableMIIInterruptAndReadPhyStatus;
469
470}ADAPTER_OPEN_PARAMS, *PADAPTER_OPEN_PARAMS;
471
472//////////////////////////////////////////////////////////////////
473// This is the one function in the adapter interface that is publicly
474// available. The rest of the interface is returned in the pAdapterApi.
475// The first argument needs to be cast to a OSAPI structure pointer.
476// The second argument should be cast to a ADPATER_API structure pointer.
477NV_API_CALL NV_SINT32 ADAPTER_Open (PADAPTER_OPEN_PARAMS pAdapterOpenParams, PNV_VOID *pvpAdapterApi, NV_UINT32 *pulPhyAddr);
478
479//////////////////////////////////////////////////////////////////
480
481
482
483//////////////////////////////////////////////////////////////////
484// Here are the error codes the adapter function calls return.
485#define ADAPTERERR_NONE                             0x0000
486#define ADAPTERERR_COULD_NOT_ALLOC_CONTEXT          0x0001
487#define ADAPTERERR_COULD_NOT_CREATE_CONTEXT         0x0002
488#define ADAPTERERR_COULD_NOT_OPEN_PHY               0x0003
489#define ADAPTERERR_TRANSMIT_QUEUE_FULL              0x0004
490#define ADAPTERERR_COULD_NOT_INIT_PHY               0x0005
491#define ADAPTERERR_PHYS_SIZE_SMALL                    0x0006
492#define ADAPTERERR_ERROR                            0x0007  // Generic error
493//////////////////////////////////////////////////////////////////
494
495// This block moved from myadap.h
496// nFlag for Stop/Start ReceiverAndOrTransmitter can be an OR of
497// the following two flags
498#define AFFECT_RECEIVER     0x01
499#define AFFECT_TRANSMITTER  0x02
500
501#define REDUCE_LENGTH_BY 48
502
503#define EXTRA_WRITE_SLOT_TO_REDUCE_PER_SEND    4
504#define MAX_TX_DESCS                    256
505#define MAX_TX_DESCS_VER2               (256 * 4)
506
507typedef struct _TX_INFO_ADAP
508{
509    NV_UINT32   NoOfDesc;
510    PNV_VOID    pvVar2;
511}TX_INFO_ADAP, *PTX_INFO_ADAP;
512
513#define WORKAROUND_FOR_MCP3_TX_STALL
514
515#ifdef WORKAROUND_FOR_MCP3_TX_STALL
516NV_SINT32 ADAPTER_WorkaroundTXHang(PNV_VOID pvContext);
517#endif
518
519//#define TRACK_INIT_TIME
520
521#ifdef TRACK_INIT_TIME
522//This routine is defined in entry.c adapter doesn't link int64.lib
523//We defined here so that its easy to use it in phy as well as mswin
524
525#define MAX_PRINT_INDEX        32
526extern NV_VOID PrintTime(NV_UINT32 ulIndex);
527#define PRINT_INIT_TIME(_a) PrintTime((_a))
528#else
529#define PRINT_INIT_TIME(_a)
530#endif
531
532// Segmentation offload info
533#define DEVCAPS_SEGOL_BP_ENABLE       0
534#define DEVCAPS_SEGOL_BP_IPOPTIONS    1
535#define DEVCAPS_SEGOL_BP_TCPOPTIONS   2
536#define DEVCAPS_SEGOL_BP_SEGSIZE_LO   8
537#define DEVCAPS_SEGOL_BP_SEGSIZE_HI   31
538
539
540// Checksum offload info
541// Byte 0 : V4 TX
542#define DEVCAPS_V4_TX_BP_IPOPTIONS      0
543#define DEVCAPS_V4_TX_BP_TCPOPTIONS     1
544#define DEVCAPS_V4_TX_BP_TCPCHECKSUM    2
545#define DEVCAPS_V4_TX_BP_UDPCHECKSUM    3
546#define DEVCAPS_V4_TX_BP_IPCHECKSUM     4
547
548// Byte 0 : V4 RX
549#define DEVCAPS_V4_RX_BP_IPOPTIONS      8
550#define DEVCAPS_V4_RX_BP_TCPOPTIONS     9
551#define DEVCAPS_V4_RX_BP_TCPCHECKSUM    10
552#define DEVCAPS_V4_RX_BP_UDPCHECKSUM    11
553#define DEVCAPS_V4_RX_BP_IPCHECKSUM     12
554
555// Byte 1 : V6 TX
556#define DEVCAPS_V6_TX_BP_IPOPTIONS      16
557#define DEVCAPS_V6_TX_BP_TCPOPTIONS     17
558#define DEVCAPS_V6_TX_BP_TCPCHECKSUM    18
559#define DEVCAPS_V6_TX_BP_UDPCHECKSUM    19
560
561// Byte 2 : V6 RX
562#define DEVCAPS_V6_RX_BP_IPOPTIONS      24
563#define DEVCAPS_V6_RX_BP_TCPOPTIONS     25
564#define DEVCAPS_V6_RX_BP_TCPCHECKSUM    26
565#define DEVCAPS_V6_RX_BP_UDPCHECKSUM    27
566
567
568#define DESCR_VER_1         1       // MCP1, MCP2 and CK8 descriptor version
569#define DESCR_VER_2         2       // The decsriptor structure for CK8G
570
571// Get device and vendor IDs from 32 bit DeviceVendorID
572#define GET_DEVICEID(x)   (((x) >> 16) & 0xFFFF)
573#define GET_VENDORID(x)   ((x) & 0xFFFF)
574
575#ifdef __cplusplus
576} // extern "C"
577#endif
578
579#endif // _ADAPTER_H_
580