1 /***************************************************************************\
3 |* Copyright 2001-2004 NVIDIA Corporation. All Rights Reserved. *|
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. *|
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. *|
14 \***************************************************************************/
20 This file contains the hardware interface to the ethernet adapter.
30 #define HDA_VERSION_STRING "HDR A: $Revision: #46 $"
32 #ifdef MODS_NETWORK_BUILD
38 //////////////////////////////////////////////////////////////////
39 // For the set and get configuration calls.
40 typedef struct _ADAPTER_CONFIG
43 } ADAPTER_CONFIG, *PADAPTER_CONFIG;
44 //////////////////////////////////////////////////////////////////
46 typedef struct _ADAPTER_WRITE_OFFLOAD
51 } ADAPTER_WRITE_OFFLOAD;
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
60 typedef struct _NVSCATTER_GATHER_ELEMENT {
65 } NVSCATTER_GATHER_ELEMENT, *PNVSCATTER_GATHER_ELEMENT;
68 #pragma warning(disable:4200)
70 typedef struct _NVSCATTER_GATHER_LIST {
71 NV_UINT32 NumberOfElements;
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;
79 #pragma warning(default:4200)
82 typedef struct _ADAPTER_WRITE_DATA1
84 NV_UINT32 ulTotalLength;
86 NV_UINT8 uc8021pPriority;
87 ADAPTER_WRITE_OFFLOAD *psOffload;
88 PNVSCATTER_GATHER_LIST pNVSGL;
89 } ADAPTER_WRITE_DATA1, *PADAPTER_WRITE_DATA1;
92 //////////////////////////////////////////////////////////////////
93 // For the ADAPTER_Write call.
94 typedef struct _ADAPTER_WRITE_ELEMENT
98 } ADAPTER_WRITE_ELEMENT, *PADAPTER_WRITE_ELEMENT;
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
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.
112 typedef struct _ADAPTER_WRITE_DATA
114 NV_UINT32 ulNumberOfElements;
115 NV_UINT32 ulTotalLength;
117 NV_UINT8 uc8021pPriority;
118 ADAPTER_WRITE_OFFLOAD *psOffload;
120 ADAPTER_WRITE_ELEMENT sElement[32];
122 ADAPTER_WRITE_ELEMENT sElement[100];
124 } ADAPTER_WRITE_DATA, *PADAPTER_WRITE_DATA;
125 //////////////////////////////////////////////////////////////////
129 //////////////////////////////////////////////////////////////////
130 // For the ADAPTER_Read call.
131 typedef struct _ADAPTER_READ_ELEMENT
135 } ADAPTER_READ_ELEMENT, *PADAPTER_READ_ELEMENT;
137 typedef struct _ADAPTER_READ_OFFLOAD
139 NV_UINT8 ucChecksumStatus;
141 } ADAPTER_READ_OFFLOAD;
143 typedef struct _ADAPTER_READ_DATA
145 NV_UINT32 ulNumberOfElements;
146 NV_UINT32 ulTotalLength;
148 NV_UINT32 ulFilterMatch;
149 ADAPTER_READ_OFFLOAD sOffload;
150 ADAPTER_READ_ELEMENT sElement[10];
151 } ADAPTER_READ_DATA, *PADAPTER_READ_DATA;
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
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 //////////////////////////////////////////////////////////////////
172 //////////////////////////////////////////////////////////////////
173 // For the ADAPTER_GetPowerCapabilities call.
174 typedef struct _ADAPTER_POWERCAPS
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;
183 // For the ADAPTER_GetPowerState and ADAPTER_SetPowerState call.
184 typedef struct _ADAPTER_POWERSTATE
186 NV_UINT32 ulPowerFlags;
187 NV_UINT32 ulMagicPacketWakeUpFlags;
188 NV_UINT32 ulPatternWakeUpFlags;
189 NV_UINT32 ulLinkChangeWakeUpFlags;
190 } ADAPTER_POWERSTATE, *PADAPTER_POWERSTATE;
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.
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
206 #define POWER_STATE_ALL (POWER_STATE_D0 | \
210 //////////////////////////////////////////////////////////////////
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
222 #define ETH_LENGTH_OF_ADDRESS 6
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.
231 typedef struct _PACKET_FILTER
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 //////////////////////////////////////////////////////////////////
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
250 typedef struct _WAKE_UP_PATTERN
252 NV_UINT32 aulByteMask[WAKE_UP_PATTERN_SIZE/32];
253 NV_UINT8 acData[WAKE_UP_PATTERN_SIZE];
254 } WAKE_UP_PATTERN, *PWAKE_UP_PATTERN;
262 typedef struct _ADAPTER_OFFLOAD {
267 } ADAPTER_OFFLOAD, *PADAPTER_OFFLOAD;
269 #define ADAPTER_OFFLOAD_VLAN 0x00000001
270 #define ADAPTER_OFFLOAD_IEEE802_1P 0x00000002
271 #define ADAPTER_OFFLOAD_IEEE802_1PQ_PAD 0x00000004
273 //////////////////////////////////////////////////////////////////
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
281 typedef struct _CMNDATA_OS_ADAPTER
284 ASF_SEC0_BASE sRegSec0Base;
287 NV_UINT32 ulFPGAEepromSize;
288 NV_UINT32 bChecksumOffloadEnable;
289 NV_UINT32 ulChecksumOffloadBM;
290 NV_UINT32 ulChecksumOffloadOS;
292 NV_UINT32 bOemCustomEventRead;
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;
302 } CMNDATA_OS_ADAPTER;
305 //////////////////////////////////////////////////////////////////
306 // The functional typedefs for the ADAPTER Api
307 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_CLOSE) (PNV_VOID pvContext, NV_UINT8 ucIsPowerDown);
308 typedef 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);
309 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_DEINIT) (PNV_VOID pvContext, NV_UINT8 ucIsPowerDown);
310 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_START) (PNV_VOID pvContext);
311 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_STOP) (PNV_VOID pvContext, NV_UINT8 ucIsPowerDown);
312 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_QUERY_WRITE_SLOTS) (PNV_VOID pvContext);
313 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_WRITE) (PNV_VOID pvContext, ADAPTER_WRITE_DATA *pADWriteData);
314 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_WRITE1) (PNV_VOID pvContext, ADAPTER_WRITE_DATA1 *pADWriteData1);
315 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_QUERY_INTERRUPT) (PNV_VOID pvContext);
316 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_HANDLE_INTERRUPT) (PNV_VOID pvContext);
317 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_DISABLE_INTERRUPTS) (PNV_VOID pvContext);
318 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_ENABLE_INTERRUPTS) (PNV_VOID pvContext);
319 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_CLEAR_INTERRUPTS) (PNV_VOID pvContext);
320 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_CLEAR_TX_DESC) (PNV_VOID pvContext);
321 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_LINK_SPEED) (PNV_VOID pvContext);
322 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_LINK_MODE) (PNV_VOID pvContext);
323 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_LINK_STATE) (PNV_VOID pvContext, NV_UINT32 *pulLinkState);
324 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_IS_LINK_INITIALIZING) (PNV_VOID pvContext);
325 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_RESET_PHY_INIT_STATE) (PNV_VOID pvContext);
326 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_TRANSMIT_QUEUE_SIZE) (PNV_VOID pvContext);
327 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_RECEIVE_QUEUE_SIZE) (PNV_VOID pvContext);
328 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_STATISTICS) (PNV_VOID pvContext, PADAPTER_STATS pADStats);
329 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_POWER_CAPS) (PNV_VOID pvContext, PADAPTER_POWERCAPS pADPowerCaps);
330 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_POWER_STATE) (PNV_VOID pvContext, PADAPTER_POWERSTATE pADPowerState);
331 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_SET_POWER_STATE) (PNV_VOID pvContext, PADAPTER_POWERSTATE pADPowerState);
332 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_SET_LOW_SPEED_FOR_PM) (PNV_VOID pvContext);
333 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_PACKET_FILTER_CAPS) (PNV_VOID pvContext);
334 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_SET_PACKET_FILTER) (PNV_VOID pvContext, PPACKET_FILTER pPacketFilter);
335 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_SET_WAKE_UP_PATTERN) (PNV_VOID pvContext, NV_SINT32 iPattern, PWAKE_UP_PATTERN pPattern);
336 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_ENABLE_WAKE_UP_PATTERN) (PNV_VOID pvContext, NV_SINT32 iPattern, NV_SINT32 iEnable);
337 typedef NV_API_CALL NV_SINT32 (* PFN_SET_NODE_ADDRESS) (PNV_VOID pvContext, NV_UINT8 *pNodeAddress);
338 typedef NV_API_CALL NV_SINT32 (* PFN_GET_NODE_ADDRESS) (PNV_VOID pvContext, NV_UINT8 *pNodeAddress);
339 typedef NV_API_CALL NV_SINT32 (* PFN_GET_ADAPTER_INFO) (PNV_VOID pvContext, PNV_VOID pVoidPtr, NV_SINT32 iType, NV_SINT32 *piLength);
340 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_READ_PHY) (PNV_VOID pvContext, NV_UINT32 ulPhyAddr, NV_UINT32 ulPhyReg, NV_UINT32 *pulValue);
341 typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_WRITE_PHY) (PNV_VOID pvContext, NV_UINT32 ulPhyAddr, NV_UINT32 ulPhyReg, NV_UINT32 ulValue);
342 typedef NV_API_CALL NV_VOID(* PFN_ADAPTER_SET_SPPED_DUPLEX) (PNV_VOID pvContext);
343 typedef NV_API_CALL NV_SINT32 (*PFN_REGISTER_OFFLOAD) (PNV_VOID pvContext, PADAPTER_OFFLOAD pOffload);
344 typedef NV_API_CALL NV_SINT32 (*PFN_DEREGISTER_OFFLOAD) (PNV_VOID pvContext, PADAPTER_OFFLOAD pOffload);
345 typedef NV_API_CALL NV_SINT32 (*PFN_RX_BUFF_READY) (PNV_VOID pvContext, PMEMORY_BLOCK pMemBlock, PNV_VOID pvID);
348 typedef NV_SINT32 (*PFN_ADAPTER_ASF_SETUPREGISTERS) (PNV_VOID pvContext, NV_SINT32 bInitTime);
349 typedef NV_SINT32 (*PFN_ADAPTER_ASF_GETSEC0BASEADDRESS) (PNV_VOID pvContext, ASF_SEC0_BASE **ppsSec0Base);
350 typedef NV_SINT32 (*PFN_ADAPTER_ASF_SETSOURCEIPADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucSrcIPAddress);
351 typedef NV_SINT32 (*PFN_ADAPTER_ASF_GETDESTIPADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucDestIPAddress);
352 typedef NV_SINT32 (*PFN_ADAPTER_ASF_SETDESTIPADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucDestIPAddress);
353 typedef 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);
356 typedef NV_SINT32 (*PFN_ADAPTER_ASF_ISASFREADY) (PNV_VOID pvContext, ASF_ASFREADY *psASFReady);
358 typedef NV_SINT32 (*PFN_ADAPTER_ASF_SETDESTMACADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucDestMACAddress);
359 typedef NV_SINT32 (*PFN_ADAPTER_ASF_GETSOURCEMACADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucSrcMACAddress);
361 typedef NV_SINT32 (*PFN_ADAPTER_ASF_CHECK_FOR_EEPROM_PRESENCE) (PNV_VOID pvContext);
364 typedef NV_API_CALL NV_VOID (*PFN_ADAPTER_SET_COMMONDATA) (PNV_VOID pvContext, CMNDATA_OS_ADAPTER *psOSAdpater);
365 typedef NV_API_CALL NV_VOID (*PFN_ADAPTER_SET_CHECKSUMOFFLOAD) (PNV_VOID pvContext, NV_UINT32 bSet);
369 typedef struct _ADAPTER_API
371 // The adapter context
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;
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;
426 PFN_ADAPTER_SET_COMMONDATA pfnSetCommonData;
428 PFN_ADAPTER_SET_CHECKSUMOFFLOAD pfnSetChecksumOffload;
430 } ADAPTER_API, *PADAPTER_API;
431 //////////////////////////////////////////////////////////////////
433 #define MAX_PACKET_TO_ACCUMULATE 16
435 typedef struct _ADAPTER_OPEN_PARAMS
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;
459 #define MEDIA_IF_AUTO 0
460 #define MEDIA_IF_RGMII 1
461 #define MEDIA_IF_MII 2
464 NV_UINT32 PhyPowerIsolationTimeoutInms;
465 NV_UINT32 PhyResetTimeoutInms;
466 NV_UINT32 PhyAutonegotiateTimeoutInms;
467 NV_UINT32 PhyLinkupTimeoutInms;
468 NV_UINT32 PhyRdWrTimeoutInus;
469 NV_UINT32 PhyPowerdownOnClose;
471 // Added for Bug 100715
472 NV_UINT32 bDisableMIIInterruptAndReadPhyStatus;
474 }ADAPTER_OPEN_PARAMS, *PADAPTER_OPEN_PARAMS;
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.
481 NV_API_CALL NV_SINT32 ADAPTER_Open (PADAPTER_OPEN_PARAMS pAdapterOpenParams, PNV_VOID *pvpAdapterApi, NV_UINT32 *pulPhyAddr);
483 //////////////////////////////////////////////////////////////////
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 //////////////////////////////////////////////////////////////////
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
505 #define REDUCE_LENGTH_BY 48
507 #define EXTRA_WRITE_SLOT_TO_REDUCE_PER_SEND 4
508 #define MAX_TX_DESCS 256
509 #define MAX_TX_DESCS_VER2 (256 * 4)
511 typedef struct _TX_INFO_ADAP
515 }TX_INFO_ADAP, *PTX_INFO_ADAP;
517 #define WORKAROUND_FOR_MCP3_TX_STALL
519 #ifdef WORKAROUND_FOR_MCP3_TX_STALL
520 NV_SINT32 ADAPTER_WorkaroundTXHang(PNV_VOID pvContext);
523 //#define TRACK_INIT_TIME
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
529 #define MAX_PRINT_INDEX 32
530 extern NV_VOID PrintTime(NV_UINT32 ulIndex);
531 #define PRINT_INIT_TIME(_a) PrintTime((_a))
533 #define PRINT_INIT_TIME(_a)
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
544 // Checksum offload info
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
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
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
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
572 #define DESCR_VER_1 1 // MCP1, MCP2 and CK8 descriptor version
573 #define DESCR_VER_2 2 // The decsriptor structure for CK8G
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)
583 #endif // _ADAPTER_H_