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