diff options
Diffstat (limited to 'sys/contrib/dev/nve/adapter.h')
-rw-r--r-- | sys/contrib/dev/nve/adapter.h | 583 |
1 files changed, 583 insertions, 0 deletions
diff --git a/sys/contrib/dev/nve/adapter.h b/sys/contrib/dev/nve/adapter.h new file mode 100644 index 0000000..40520e9 --- /dev/null +++ b/sys/contrib/dev/nve/adapter.h @@ -0,0 +1,583 @@ +/***************************************************************************\ +|* *| +|* 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: adapter.h + DATE: 2/7/00 + + This file contains the hardware interface to the ethernet adapter. +*/ + +#ifndef _ADAPTER_H_ +#define _ADAPTER_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#define HDA_VERSION_STRING "HDR A: $Revision: #46 $" + +#ifdef MODS_NETWORK_BUILD +#ifndef _DRVAPP_H_ +#include "drvapp.h" +#endif +#endif + +////////////////////////////////////////////////////////////////// +// For the set and get configuration calls. +typedef struct _ADAPTER_CONFIG +{ + NV_UINT32 ulFlags; +} ADAPTER_CONFIG, *PADAPTER_CONFIG; +////////////////////////////////////////////////////////////////// + +typedef struct _ADAPTER_WRITE_OFFLOAD +{ + NV_UINT32 usBitmask; + NV_UINT32 ulMss; + +} ADAPTER_WRITE_OFFLOAD; + +////////////////////////////////////////////////////////////////// +// For the ADAPTER_Write1 call. +/* This scatter gather list should be same as defined in ndis.h by MS. + For ULONG_PTR MS header file says that it will be of same size as + pointer. It has been defined to take care of casting between differenet + sizes. +*/ +typedef struct _NVSCATTER_GATHER_ELEMENT { + NV_UINT32 PhysLow; + NV_UINT32 PhysHigh; + NV_UINT32 Length; + NV_VOID *Reserved; +} NVSCATTER_GATHER_ELEMENT, *PNVSCATTER_GATHER_ELEMENT; + +#ifndef linux +#pragma warning(disable:4200) +#endif +typedef struct _NVSCATTER_GATHER_LIST { + NV_UINT32 NumberOfElements; + NV_VOID *Reserved; + NVSCATTER_GATHER_ELEMENT Elements[0]; // Made 0 sized element to remove MODS compilation error + // Elements[0] and Elements[] have the same effect. + // sizeof(NVSCATTER_GATHER_LIST) is the same (value of 8) in both cases + // And both lead to Warning 4200 in MSVC +} NVSCATTER_GATHER_LIST, *PNVSCATTER_GATHER_LIST; +#ifndef linux +#pragma warning(default:4200) +#endif + +typedef struct _ADAPTER_WRITE_DATA1 +{ + NV_UINT32 ulTotalLength; + PNV_VOID pvID; + NV_UINT8 uc8021pPriority; + ADAPTER_WRITE_OFFLOAD *psOffload; + PNVSCATTER_GATHER_LIST pNVSGL; +} ADAPTER_WRITE_DATA1, *PADAPTER_WRITE_DATA1; + + +////////////////////////////////////////////////////////////////// +// For the ADAPTER_Write call. +typedef struct _ADAPTER_WRITE_ELEMENT +{ + PNV_VOID pPhysical; + NV_UINT32 ulLength; +} ADAPTER_WRITE_ELEMENT, *PADAPTER_WRITE_ELEMENT; + + +#define ADAPTER_WRITE_OFFLOAD_BP_SEGOFFLOAD 0 +#define ADAPTER_WRITE_OFFLOAD_BP_IPV4CHECKSUM 1 +#define ADAPTER_WRITE_OFFLOAD_BP_IPV6CHECKSUM 2 +#define ADAPTER_WRITE_OFFLOAD_BP_TCPCHECKSUM 3 +#define ADAPTER_WRITE_OFFLOAD_BP_UDPCHECKSUM 4 +#define ADAPTER_WRITE_OFFLOAD_BP_IPCHECKSUM 5 + + +// pvID is a value that will be passed back into OSAPI.pfnPacketWasSent +// when the transmission completes. if pvID is NULL, the ADAPTER code +// assumes the caller does not want the pfnPacketWasSent callback. +typedef struct _ADAPTER_WRITE_DATA +{ + NV_UINT32 ulNumberOfElements; + NV_UINT32 ulTotalLength; + PNV_VOID pvID; + NV_UINT8 uc8021pPriority; + ADAPTER_WRITE_OFFLOAD *psOffload; +#ifdef linux + ADAPTER_WRITE_ELEMENT sElement[32]; +#else + ADAPTER_WRITE_ELEMENT sElement[100]; +#endif +} ADAPTER_WRITE_DATA, *PADAPTER_WRITE_DATA; +////////////////////////////////////////////////////////////////// + + + +////////////////////////////////////////////////////////////////// +// For the ADAPTER_Read call. +typedef struct _ADAPTER_READ_ELEMENT +{ + PNV_VOID pPhysical; + NV_UINT32 ulLength; +} ADAPTER_READ_ELEMENT, *PADAPTER_READ_ELEMENT; + +typedef struct _ADAPTER_READ_OFFLOAD +{ + NV_UINT8 ucChecksumStatus; + +} ADAPTER_READ_OFFLOAD; + +typedef struct _ADAPTER_READ_DATA +{ + NV_UINT32 ulNumberOfElements; + NV_UINT32 ulTotalLength; + PNV_VOID pvID; + NV_UINT32 ulFilterMatch; + ADAPTER_READ_OFFLOAD sOffload; + ADAPTER_READ_ELEMENT sElement[10]; +} ADAPTER_READ_DATA, *PADAPTER_READ_DATA; + + +#define RDFLAG_CHK_NOCHECKSUM 0 +#define RDFLAG_CHK_IPPASSTCPFAIL 1 +#define RDFLAG_CHK_IPPASSUDPFAIL 2 +#define RDFLAG_CHK_IPFAIL 3 +#define RDFLAG_CHK_IPPASSNOTCPUDP 4 +#define RDFLAG_CHK_IPPASSTCPPASS 5 +#define RDFLAG_CHK_IPPASSUDPPASS 6 +#define RDFLAG_CHK_RESERVED 7 + + +// The ulFilterMatch flag can be a logical OR of the following +#define ADREADFL_UNICAST_MATCH 0x00000001 +#define ADREADFL_MULTICAST_MATCH 0x00000002 +#define ADREADFL_BROADCAST_MATCH 0x00000004 +////////////////////////////////////////////////////////////////// + + + +////////////////////////////////////////////////////////////////// +// For the ADAPTER_GetPowerCapabilities call. +typedef struct _ADAPTER_POWERCAPS +{ + NV_UINT32 ulPowerFlags; + NV_UINT32 ulMagicPacketWakeUpFlags; + NV_UINT32 ulPatternWakeUpFlags; + NV_UINT32 ulLinkChangeWakeUpFlags; + NV_SINT32 iMaxWakeUpPatterns; +} ADAPTER_POWERCAPS, *PADAPTER_POWERCAPS; + +// For the ADAPTER_GetPowerState and ADAPTER_SetPowerState call. +typedef struct _ADAPTER_POWERSTATE +{ + NV_UINT32 ulPowerFlags; + NV_UINT32 ulMagicPacketWakeUpFlags; + NV_UINT32 ulPatternWakeUpFlags; + NV_UINT32 ulLinkChangeWakeUpFlags; +} ADAPTER_POWERSTATE, *PADAPTER_POWERSTATE; + +// Each of the flag fields in the POWERCAPS structure above can have +// any of the following bitflags set giving the capabilites of the +// adapter. In the case of the wake up fields, these flags mean that +// wake up can happen from the specified power state. + +// For the POWERSTATE structure, the ulPowerFlags field should just +// have one of these bits set to go to that particular power state. +// The WakeUp fields can have one or more of these bits set to indicate +// what states should be woken up from. +#define POWER_STATE_D0 0x00000001 +#define POWER_STATE_D1 0x00000002 +#define POWER_STATE_D2 0x00000004 +#define POWER_STATE_D3 0x00000008 + +#define POWER_STATE_ALL (POWER_STATE_D0 | \ + POWER_STATE_D1 | \ + POWER_STATE_D2 | \ + POWER_STATE_D3) +////////////////////////////////////////////////////////////////// + + + +////////////////////////////////////////////////////////////////// +// The ADAPTER_GetPacketFilterCaps call returns a NV_UINT32 that can +// have the following capability bits set. +#define ACCEPT_UNICAST_PACKETS 0x00000001 +#define ACCEPT_MULTICAST_PACKETS 0x00000002 +#define ACCEPT_BROADCAST_PACKETS 0x00000004 +#define ACCEPT_ALL_PACKETS 0x00000008 + +#define ETH_LENGTH_OF_ADDRESS 6 + +// The ADAPTER_SetPacketFilter call uses this structure to know what +// packet filter to set. The ulPacketFilter field can contain some +// union of the bit flags above. The acMulticastMask array holds a +// 48 bit MAC address mask with a 0 in every bit position that should +// be ignored on compare and a 1 in every bit position that should +// be taken into account when comparing to see if the destination +// address of a packet should be accepted for multicast. +typedef struct _PACKET_FILTER +{ + NV_UINT32 ulFilterFlags; + NV_UINT8 acMulticastAddress[ETH_LENGTH_OF_ADDRESS]; + NV_UINT8 acMulticastMask[ETH_LENGTH_OF_ADDRESS]; +} PACKET_FILTER, *PPACKET_FILTER; +////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////// +// A WAKE_UP_PATTERN is a 128-byte pattern that the adapter can +// look for in incoming packets to decide when to wake up. Higher- +// level protocols can use this to, for example, wake up the +// adapter whenever it sees an IP packet that is addressed to it. +// A pattern consists of 128 bits of byte masks that indicate +// which bytes in the packet are relevant to the pattern, plus +// values for each byte. +#define WAKE_UP_PATTERN_SIZE 128 + +typedef struct _WAKE_UP_PATTERN +{ + NV_UINT32 aulByteMask[WAKE_UP_PATTERN_SIZE/32]; + NV_UINT8 acData[WAKE_UP_PATTERN_SIZE]; +} WAKE_UP_PATTERN, *PWAKE_UP_PATTERN; + + + +// +// +// Adapter offload +// +typedef struct _ADAPTER_OFFLOAD { + + NV_UINT32 Type; + NV_UINT32 Value0; + +} ADAPTER_OFFLOAD, *PADAPTER_OFFLOAD; + +#define ADAPTER_OFFLOAD_VLAN 0x00000001 +#define ADAPTER_OFFLOAD_IEEE802_1P 0x00000002 +#define ADAPTER_OFFLOAD_IEEE802_1PQ_PAD 0x00000004 + +////////////////////////////////////////////////////////////////// + +// CMNDATA_OS_ADAPTER +// Structure common to OS and Adapter layers +// Used for moving data from the OS layer to the adapter layer through SetCommonData +// function call from OS layer to Adapter layer +// + +typedef struct _CMNDATA_OS_ADAPTER +{ +#ifndef linux + ASF_SEC0_BASE sRegSec0Base; +#endif + NV_UINT32 bFPGA; + NV_UINT32 ulFPGAEepromSize; + NV_UINT32 bChecksumOffloadEnable; + NV_UINT32 ulChecksumOffloadBM; + NV_UINT32 ulChecksumOffloadOS; + NV_UINT32 ulMediaIF; + NV_UINT32 bOemCustomEventRead; + + // Debug only right now + //!!! Beware mods is relying on the fields blow. + NV_UINT32 ulWatermarkTFBW; + NV_UINT32 ulBackoffRseed; + NV_UINT32 ulBackoffSlotTime; + NV_UINT32 ulModeRegTxReadCompleteEnable; + NV_UINT32 ulFatalErrorRegister; + +} CMNDATA_OS_ADAPTER; + + +////////////////////////////////////////////////////////////////// +// The functional typedefs for the ADAPTER Api +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_CLOSE) (PNV_VOID pvContext, NV_UINT8 ucIsPowerDown); +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); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_DEINIT) (PNV_VOID pvContext, NV_UINT8 ucIsPowerDown); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_START) (PNV_VOID pvContext); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_STOP) (PNV_VOID pvContext, NV_UINT8 ucIsPowerDown); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_QUERY_WRITE_SLOTS) (PNV_VOID pvContext); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_WRITE) (PNV_VOID pvContext, ADAPTER_WRITE_DATA *pADWriteData); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_WRITE1) (PNV_VOID pvContext, ADAPTER_WRITE_DATA1 *pADWriteData1); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_QUERY_INTERRUPT) (PNV_VOID pvContext); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_HANDLE_INTERRUPT) (PNV_VOID pvContext); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_DISABLE_INTERRUPTS) (PNV_VOID pvContext); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_ENABLE_INTERRUPTS) (PNV_VOID pvContext); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_CLEAR_INTERRUPTS) (PNV_VOID pvContext); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_CLEAR_TX_DESC) (PNV_VOID pvContext); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_LINK_SPEED) (PNV_VOID pvContext); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_LINK_MODE) (PNV_VOID pvContext); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_LINK_STATE) (PNV_VOID pvContext, NV_UINT32 *pulLinkState); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_IS_LINK_INITIALIZING) (PNV_VOID pvContext); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_RESET_PHY_INIT_STATE) (PNV_VOID pvContext); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_TRANSMIT_QUEUE_SIZE) (PNV_VOID pvContext); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_RECEIVE_QUEUE_SIZE) (PNV_VOID pvContext); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_STATISTICS) (PNV_VOID pvContext, PADAPTER_STATS pADStats); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_POWER_CAPS) (PNV_VOID pvContext, PADAPTER_POWERCAPS pADPowerCaps); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_POWER_STATE) (PNV_VOID pvContext, PADAPTER_POWERSTATE pADPowerState); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_SET_POWER_STATE) (PNV_VOID pvContext, PADAPTER_POWERSTATE pADPowerState); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_SET_LOW_SPEED_FOR_PM) (PNV_VOID pvContext); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_PACKET_FILTER_CAPS) (PNV_VOID pvContext); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_SET_PACKET_FILTER) (PNV_VOID pvContext, PPACKET_FILTER pPacketFilter); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_SET_WAKE_UP_PATTERN) (PNV_VOID pvContext, NV_SINT32 iPattern, PWAKE_UP_PATTERN pPattern); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_ENABLE_WAKE_UP_PATTERN) (PNV_VOID pvContext, NV_SINT32 iPattern, NV_SINT32 iEnable); +typedef NV_API_CALL NV_SINT32 (* PFN_SET_NODE_ADDRESS) (PNV_VOID pvContext, NV_UINT8 *pNodeAddress); +typedef NV_API_CALL NV_SINT32 (* PFN_GET_NODE_ADDRESS) (PNV_VOID pvContext, NV_UINT8 *pNodeAddress); +typedef NV_API_CALL NV_SINT32 (* PFN_GET_ADAPTER_INFO) (PNV_VOID pvContext, PNV_VOID pVoidPtr, NV_SINT32 iType, NV_SINT32 *piLength); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_READ_PHY) (PNV_VOID pvContext, NV_UINT32 ulPhyAddr, NV_UINT32 ulPhyReg, NV_UINT32 *pulValue); +typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_WRITE_PHY) (PNV_VOID pvContext, NV_UINT32 ulPhyAddr, NV_UINT32 ulPhyReg, NV_UINT32 ulValue); +typedef NV_API_CALL NV_VOID(* PFN_ADAPTER_SET_SPPED_DUPLEX) (PNV_VOID pvContext); +typedef NV_API_CALL NV_SINT32 (*PFN_REGISTER_OFFLOAD) (PNV_VOID pvContext, PADAPTER_OFFLOAD pOffload); +typedef NV_API_CALL NV_SINT32 (*PFN_DEREGISTER_OFFLOAD) (PNV_VOID pvContext, PADAPTER_OFFLOAD pOffload); +typedef NV_API_CALL NV_SINT32 (*PFN_RX_BUFF_READY) (PNV_VOID pvContext, PMEMORY_BLOCK pMemBlock, PNV_VOID pvID); + +#ifndef linux +typedef NV_SINT32 (*PFN_ADAPTER_ASF_SETUPREGISTERS) (PNV_VOID pvContext, NV_SINT32 bInitTime); +typedef NV_SINT32 (*PFN_ADAPTER_ASF_GETSEC0BASEADDRESS) (PNV_VOID pvContext, ASF_SEC0_BASE **ppsSec0Base); +typedef NV_SINT32 (*PFN_ADAPTER_ASF_SETSOURCEIPADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucSrcIPAddress); +typedef NV_SINT32 (*PFN_ADAPTER_ASF_GETDESTIPADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucDestIPAddress); +typedef NV_SINT32 (*PFN_ADAPTER_ASF_SETDESTIPADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucDestIPAddress); +typedef NV_SINT32 (*PFN_ADAPTER_ASF_WRITEEEPROMANDSETUPREGISTERS) (PNV_VOID pvContext, NV_BOOLEAN bCompare, PNV_VOID pucValue, PNV_VOID pszSec0BaseMember, + NV_UINT16 usCount, NV_UINT32 ulAddressOffset); + +typedef NV_SINT32 (*PFN_ADAPTER_ASF_ISASFREADY) (PNV_VOID pvContext, ASF_ASFREADY *psASFReady); + +typedef NV_SINT32 (*PFN_ADAPTER_ASF_SETDESTMACADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucDestMACAddress); +typedef NV_SINT32 (*PFN_ADAPTER_ASF_GETSOURCEMACADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucSrcMACAddress); + +typedef NV_SINT32 (*PFN_ADAPTER_ASF_CHECK_FOR_EEPROM_PRESENCE) (PNV_VOID pvContext); +#endif + +typedef NV_API_CALL NV_VOID (*PFN_ADAPTER_SET_COMMONDATA) (PNV_VOID pvContext, CMNDATA_OS_ADAPTER *psOSAdpater); +typedef NV_API_CALL NV_VOID (*PFN_ADAPTER_SET_CHECKSUMOFFLOAD) (PNV_VOID pvContext, NV_UINT32 bSet); + + + +typedef struct _ADAPTER_API +{ + // The adapter context + PNV_VOID pADCX; + + // The adapter interface + PFN_ADAPTER_CLOSE pfnClose; + PFN_ADAPTER_INIT pfnInit; + PFN_ADAPTER_DEINIT pfnDeinit; + PFN_ADAPTER_START pfnStart; + PFN_ADAPTER_STOP pfnStop; + PFN_ADAPTER_QUERY_WRITE_SLOTS pfnQueryWriteSlots; + PFN_ADAPTER_WRITE pfnWrite; + PFN_ADAPTER_WRITE1 pfnWrite1; + PFN_ADAPTER_QUERY_INTERRUPT pfnQueryInterrupt; + PFN_ADAPTER_HANDLE_INTERRUPT pfnHandleInterrupt; + PFN_ADAPTER_DISABLE_INTERRUPTS pfnDisableInterrupts; + PFN_ADAPTER_ENABLE_INTERRUPTS pfnEnableInterrupts; + PFN_ADAPTER_CLEAR_INTERRUPTS pfnClearInterrupts; + PFN_ADAPTER_CLEAR_TX_DESC pfnClearTxDesc; + PFN_ADAPTER_GET_LINK_SPEED pfnGetLinkSpeed; + PFN_ADAPTER_GET_LINK_MODE pfnGetLinkMode; + PFN_ADAPTER_GET_LINK_STATE pfnGetLinkState; + PFN_ADAPTER_IS_LINK_INITIALIZING pfnIsLinkInitializing; + PFN_ADAPTER_RESET_PHY_INIT_STATE pfnResetPhyInitState; + PFN_ADAPTER_GET_TRANSMIT_QUEUE_SIZE pfnGetTransmitQueueSize; + PFN_ADAPTER_GET_RECEIVE_QUEUE_SIZE pfnGetReceiveQueueSize; + PFN_ADAPTER_GET_STATISTICS pfnGetStatistics; + PFN_ADAPTER_GET_POWER_CAPS pfnGetPowerCaps; + PFN_ADAPTER_GET_POWER_STATE pfnGetPowerState; + PFN_ADAPTER_SET_POWER_STATE pfnSetPowerState; + PFN_ADAPTER_SET_LOW_SPEED_FOR_PM pfnSetLowSpeedForPM; + PFN_ADAPTER_GET_PACKET_FILTER_CAPS pfnGetPacketFilterCaps; + PFN_ADAPTER_SET_PACKET_FILTER pfnSetPacketFilter; + PFN_ADAPTER_SET_WAKE_UP_PATTERN pfnSetWakeUpPattern; + PFN_ADAPTER_ENABLE_WAKE_UP_PATTERN pfnEnableWakeUpPattern; + PFN_SET_NODE_ADDRESS pfnSetNodeAddress; + PFN_GET_NODE_ADDRESS pfnGetNodeAddress; + PFN_GET_ADAPTER_INFO pfnGetAdapterInfo; + PFN_ADAPTER_SET_SPPED_DUPLEX pfnSetSpeedDuplex; + PFN_ADAPTER_READ_PHY pfnReadPhy; + PFN_ADAPTER_WRITE_PHY pfnWritePhy; + PFN_REGISTER_OFFLOAD pfnRegisterOffload; + PFN_DEREGISTER_OFFLOAD pfnDeRegisterOffload; + PFN_RX_BUFF_READY pfnRxBuffReady; +#ifndef linux + PFN_ADAPTER_ASF_SETUPREGISTERS pfnASFSetupRegisters; + PFN_ADAPTER_ASF_GETSEC0BASEADDRESS pfnASFGetSec0BaseAddress; + PFN_ADAPTER_ASF_SETSOURCEIPADDRESS pfnASFSetSourceIPAddress; + PFN_ADAPTER_ASF_GETDESTIPADDRESS pfnASFGetDestIPAddress; + PFN_ADAPTER_ASF_SETDESTIPADDRESS pfnASFSetDestIPAddress; + PFN_ADAPTER_ASF_WRITEEEPROMANDSETUPREGISTERS pfnASFWriteEEPROMAndSetupRegisters; + PFN_ADAPTER_ASF_SETDESTMACADDRESS pfnASFSetDestMACAddress; + PFN_ADAPTER_ASF_GETSOURCEMACADDRESS pfnASFGetSourceMACAddress; + PFN_ADAPTER_ASF_ISASFREADY pfnASFIsASFReady; + PFN_ADAPTER_ASF_CHECK_FOR_EEPROM_PRESENCE pfnASFCheckForEepromPresence; +#endif + PFN_ADAPTER_SET_COMMONDATA pfnSetCommonData; + + PFN_ADAPTER_SET_CHECKSUMOFFLOAD pfnSetChecksumOffload; + +} ADAPTER_API, *PADAPTER_API; +////////////////////////////////////////////////////////////////// + +#define MAX_PACKET_TO_ACCUMULATE 16 + +typedef struct _ADAPTER_OPEN_PARAMS +{ + PNV_VOID pOSApi; //pointer to OSAPI structure passed from higher layer + PNV_VOID pvHardwareBaseAddress; //memory mapped address passed from higher layer + NV_UINT32 ulPollInterval; //poll interval in micro seconds. Used in polling mode + NV_UINT32 MaxDpcLoop; //Maximum number of times we loop to in function ADAPTER_HandleInterrupt + NV_UINT32 MaxRxPkt; //Maximum number of packet we process each time in function UpdateReceiveDescRingData + NV_UINT32 MaxTxPkt; //Maximum number of packet we process each time in function UpdateTransmitDescRingData + NV_UINT32 MaxRxPktToAccumulate; //maximum number of rx packet we accumulate in UpdateReceiveDescRingData before + //indicating packets to OS. + NV_UINT32 SentPacketStatusSuccess; //Status returned from adapter layer to higher layer when packet was sent successfully + NV_UINT32 SentPacketStatusFailure; ////Status returned from adapter layer to higher layer when packet send was unsuccessful + NV_UINT32 SetForcedModeEveryNthRxPacket; //NOT USED: For experiment with descriptor based interrupt + NV_UINT32 SetForcedModeEveryNthTxPacket; //NOT USED: For experiment with descriptor based interrupt + NV_UINT32 RxForcedInterrupt; //NOT USED: For experiment with descriptor based interrupt + NV_UINT32 TxForcedInterrupt; //NOT USED: For experiment with descriptor based interrupt + NV_UINT32 DeviceId; //Of MAC + NV_UINT32 DeviceType; + NV_UINT32 PollIntervalInusForThroughputMode; //Of MAC + NV_UINT32 bASFEnabled; + NV_UINT32 ulDescriptorVersion; + NV_UINT32 ulMaxPacketSize; + + +#define MEDIA_IF_AUTO 0 +#define MEDIA_IF_RGMII 1 +#define MEDIA_IF_MII 2 + NV_UINT32 ulMediaIF; + + NV_UINT32 PhyPowerIsolationTimeoutInms; + NV_UINT32 PhyResetTimeoutInms; + NV_UINT32 PhyAutonegotiateTimeoutInms; + NV_UINT32 PhyLinkupTimeoutInms; + NV_UINT32 PhyRdWrTimeoutInus; + NV_UINT32 PhyPowerdownOnClose; + + // Added for Bug 100715 + NV_UINT32 bDisableMIIInterruptAndReadPhyStatus; + +}ADAPTER_OPEN_PARAMS, *PADAPTER_OPEN_PARAMS; + +////////////////////////////////////////////////////////////////// +// This is the one function in the adapter interface that is publicly +// available. The rest of the interface is returned in the pAdapterApi. +// The first argument needs to be cast to a OSAPI structure pointer. +// The second argument should be cast to a ADPATER_API structure pointer. +NV_API_CALL NV_SINT32 ADAPTER_Open (PADAPTER_OPEN_PARAMS pAdapterOpenParams, PNV_VOID *pvpAdapterApi, NV_UINT32 *pulPhyAddr); + +////////////////////////////////////////////////////////////////// + + + +////////////////////////////////////////////////////////////////// +// Here are the error codes the adapter function calls return. +#define ADAPTERERR_NONE 0x0000 +#define ADAPTERERR_COULD_NOT_ALLOC_CONTEXT 0x0001 +#define ADAPTERERR_COULD_NOT_CREATE_CONTEXT 0x0002 +#define ADAPTERERR_COULD_NOT_OPEN_PHY 0x0003 +#define ADAPTERERR_TRANSMIT_QUEUE_FULL 0x0004 +#define ADAPTERERR_COULD_NOT_INIT_PHY 0x0005 +#define ADAPTERERR_PHYS_SIZE_SMALL 0x0006 +#define ADAPTERERR_ERROR 0x0007 // Generic error +////////////////////////////////////////////////////////////////// + +// This block moved from myadap.h +// nFlag for Stop/Start ReceiverAndOrTransmitter can be an OR of +// the following two flags +#define AFFECT_RECEIVER 0x01 +#define AFFECT_TRANSMITTER 0x02 + +#define REDUCE_LENGTH_BY 48 + +#define EXTRA_WRITE_SLOT_TO_REDUCE_PER_SEND 4 +#define MAX_TX_DESCS 256 +#define MAX_TX_DESCS_VER2 (256 * 4) + +typedef struct _TX_INFO_ADAP +{ + NV_UINT32 NoOfDesc; + PNV_VOID pvVar2; +}TX_INFO_ADAP, *PTX_INFO_ADAP; + +#define WORKAROUND_FOR_MCP3_TX_STALL + +#ifdef WORKAROUND_FOR_MCP3_TX_STALL +NV_SINT32 ADAPTER_WorkaroundTXHang(PNV_VOID pvContext); +#endif + +//#define TRACK_INIT_TIME + +#ifdef TRACK_INIT_TIME +//This routine is defined in entry.c adapter doesn't link int64.lib +//We defined here so that its easy to use it in phy as well as mswin + +#define MAX_PRINT_INDEX 32 +extern NV_VOID PrintTime(NV_UINT32 ulIndex); +#define PRINT_INIT_TIME(_a) PrintTime((_a)) +#else +#define PRINT_INIT_TIME(_a) +#endif + +// Segmentation offload info +#define DEVCAPS_SEGOL_BP_ENABLE 0 +#define DEVCAPS_SEGOL_BP_IPOPTIONS 1 +#define DEVCAPS_SEGOL_BP_TCPOPTIONS 2 +#define DEVCAPS_SEGOL_BP_SEGSIZE_LO 8 +#define DEVCAPS_SEGOL_BP_SEGSIZE_HI 31 + + +// Checksum offload info +// Byte 0 : V4 TX +#define DEVCAPS_V4_TX_BP_IPOPTIONS 0 +#define DEVCAPS_V4_TX_BP_TCPOPTIONS 1 +#define DEVCAPS_V4_TX_BP_TCPCHECKSUM 2 +#define DEVCAPS_V4_TX_BP_UDPCHECKSUM 3 +#define DEVCAPS_V4_TX_BP_IPCHECKSUM 4 + +// Byte 0 : V4 RX +#define DEVCAPS_V4_RX_BP_IPOPTIONS 8 +#define DEVCAPS_V4_RX_BP_TCPOPTIONS 9 +#define DEVCAPS_V4_RX_BP_TCPCHECKSUM 10 +#define DEVCAPS_V4_RX_BP_UDPCHECKSUM 11 +#define DEVCAPS_V4_RX_BP_IPCHECKSUM 12 + +// Byte 1 : V6 TX +#define DEVCAPS_V6_TX_BP_IPOPTIONS 16 +#define DEVCAPS_V6_TX_BP_TCPOPTIONS 17 +#define DEVCAPS_V6_TX_BP_TCPCHECKSUM 18 +#define DEVCAPS_V6_TX_BP_UDPCHECKSUM 19 + +// Byte 2 : V6 RX +#define DEVCAPS_V6_RX_BP_IPOPTIONS 24 +#define DEVCAPS_V6_RX_BP_TCPOPTIONS 25 +#define DEVCAPS_V6_RX_BP_TCPCHECKSUM 26 +#define DEVCAPS_V6_RX_BP_UDPCHECKSUM 27 + + +#define DESCR_VER_1 1 // MCP1, MCP2 and CK8 descriptor version +#define DESCR_VER_2 2 // The decsriptor structure for CK8G + +// Get device and vendor IDs from 32 bit DeviceVendorID +#define GET_DEVICEID(x) (((x) >> 16) & 0xFFFF) +#define GET_VENDORID(x) ((x) & 0xFFFF) + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _ADAPTER_H_ |