584 lines
25 KiB
C
584 lines
25 KiB
C
/***************************************************************************\
|
|
|* *|
|
|
|* 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_
|