📄 forcedeth.c
字号:
#define DEV_HAS_CHECKSUM 0x00010 /* device supports tx and rx checksum offloads */#define DEV_HAS_VLAN 0x00020 /* device supports vlan tagging and striping */#define DEV_HAS_MSI 0x00040 /* device supports MSI */#define DEV_HAS_MSI_X 0x00080 /* device supports MSI-X */#define DEV_HAS_POWER_CNTRL 0x00100 /* device supports power savings */#define DEV_HAS_STATISTICS_V1 0x00200 /* device supports hw statistics version 1 */#define DEV_HAS_STATISTICS_V2 0x00400 /* device supports hw statistics version 2 */#define DEV_HAS_TEST_EXTENDED 0x00800 /* device supports extended diagnostic test */#define DEV_HAS_MGMT_UNIT 0x01000 /* device supports management unit */#define DEV_HAS_CORRECT_MACADDR 0x02000 /* device supports correct mac address */#define DEV_HAS_COLLISION_FIX 0x04000 /* device supports tx collision fix */#define DEV_HAS_PAUSEFRAME_TX_V1 0x08000 /* device supports tx pause frames version 1 */#define DEV_HAS_PAUSEFRAME_TX_V2 0x10000 /* device supports tx pause frames version 2 */#define DEV_HAS_PAUSEFRAME_TX_V3 0x20000 /* device supports tx pause frames version 3 */#define NVIDIA_ETHERNET_ID(deviceid,nv_driver_data) {\ .vendor = PCI_VENDOR_ID_NVIDIA, \ .device = deviceid, \ .subvendor = PCI_ANY_ID, \ .subdevice = PCI_ANY_ID, \ .driver_data = nv_driver_data, \},#define Mv_LED_Control 16#define Mv_Page_Address 22#define Mv_LED_FORCE_OFF 0x88#define Mv_LED_DUAL_MODE3 0x40struct nvmsi_msg{ u32 address_lo; u32 address_hi; u32 data;};enum { NvRegIrqStatus = 0x000,#define NVREG_IRQSTAT_MIIEVENT 0x040#define NVREG_IRQSTAT_MASK 0x81ff NvRegIrqMask = 0x004,#define NVREG_IRQ_RX_ERROR 0x0001#define NVREG_IRQ_RX 0x0002#define NVREG_IRQ_RX_NOBUF 0x0004#define NVREG_IRQ_TX_ERR 0x0008#define NVREG_IRQ_TX_OK 0x0010#define NVREG_IRQ_TIMER 0x0020#define NVREG_IRQ_LINK 0x0040#define NVREG_IRQ_RX_FORCED 0x0080#define NVREG_IRQ_TX_FORCED 0x0100#define NVREG_IRQ_RECOVER_ERROR 0x8000#define NVREG_IRQMASK_THROUGHPUT 0x00df#define NVREG_IRQMASK_CPU 0x0060#define NVREG_IRQ_TX_ALL (NVREG_IRQ_TX_ERR|NVREG_IRQ_TX_OK|NVREG_IRQ_TX_FORCED)#define NVREG_IRQ_RX_ALL (NVREG_IRQ_RX_ERROR|NVREG_IRQ_RX|NVREG_IRQ_RX_NOBUF|NVREG_IRQ_RX_FORCED)#define NVREG_IRQ_OTHER (NVREG_IRQ_TIMER|NVREG_IRQ_LINK|NVREG_IRQ_RECOVER_ERROR)#define NVREG_IRQ_UNKNOWN (~(NVREG_IRQ_RX_ERROR|NVREG_IRQ_RX|NVREG_IRQ_RX_NOBUF|NVREG_IRQ_TX_ERR| \ NVREG_IRQ_TX_OK|NVREG_IRQ_TIMER|NVREG_IRQ_LINK|NVREG_IRQ_RX_FORCED| \ NVREG_IRQ_TX_FORCED|NVREG_IRQ_RECOVER_ERROR)) NvRegUnknownSetupReg6 = 0x008,#define NVREG_UNKSETUP6_VAL 3 /* * NVREG_POLL_DEFAULT is the interval length of the timer source on the nic * NVREG_POLL_DEFAULT=97 would result in an interval length of 1 ms */ NvRegPollingInterval = 0x00c,#define NVREG_POLL_DEFAULT_THROUGHPUT 970#define NVREG_POLL_DEFAULT_CPU 13 NvRegMSIMap0 = 0x020, NvRegMSIMap1 = 0x024, NvRegMSIIrqMask = 0x030,#define NVREG_MSI_VECTOR_0_ENABLED 0x01 NvRegMisc1 = 0x080,#define NVREG_MISC1_PAUSE_TX 0x01#define NVREG_MISC1_HD 0x02#define NVREG_MISC1_FORCE 0x3b0f3c NvRegMacReset = 0x34,#define NVREG_MAC_RESET_ASSERT 0x0F3 NvRegTransmitterControl = 0x084,#define NVREG_XMITCTL_START 0x01#define NVREG_XMITCTL_MGMT_ST 0x40000000#define NVREG_XMITCTL_SYNC_MASK 0x000f0000#define NVREG_XMITCTL_SYNC_NOT_READY 0x0#define NVREG_XMITCTL_SYNC_PHY_INIT 0x00040000#define NVREG_XMITCTL_MGMT_SEMA_MASK 0x00000f00#define NVREG_XMITCTL_MGMT_SEMA_FREE 0x0#define NVREG_XMITCTL_HOST_SEMA_MASK 0x0000f000#define NVREG_XMITCTL_HOST_SEMA_ACQ 0x0000f000#define NVREG_XMITCTL_HOST_LOADED 0x00004000#define NVREG_XMITCTL_TX_PATH_EN 0x01000000 NvRegTransmitterStatus = 0x088,#define NVREG_XMITSTAT_BUSY 0x01 NvRegPacketFilterFlags = 0x8c,#define NVREG_PFF_PAUSE_RX 0x08#define NVREG_PFF_ALWAYS 0x7F0000#define NVREG_PFF_PROMISC 0x80#define NVREG_PFF_MYADDR 0x20#define NVREG_PFF_LOOPBACK 0x10 NvRegOffloadConfig = 0x90,#define NVREG_OFFLOAD_HOMEPHY 0x601#define NVREG_OFFLOAD_NORMAL RX_NIC_BUFSIZE NvRegReceiverControl = 0x094,#define NVREG_RCVCTL_START 0x01#define NVREG_RCVCTL_RX_PATH_EN 0x01000000 NvRegReceiverStatus = 0x98,#define NVREG_RCVSTAT_BUSY 0x01 NvRegRandomSeed = 0x9c,#define NVREG_RNDSEED_MASK 0x00ff#define NVREG_RNDSEED_FORCE 0x7f00#define NVREG_RNDSEED_FORCE2 0x2d00#define NVREG_RNDSEED_FORCE3 0x7400 NvRegTxDeferral = 0xA0,#define NVREG_TX_DEFERRAL_DEFAULT 0x15050f#define NVREG_TX_DEFERRAL_RGMII_10_100 0x16070f#define NVREG_TX_DEFERRAL_RGMII_1000 0x14050f NvRegRxDeferral = 0xA4,#define NVREG_RX_DEFERRAL_DEFAULT 0x16 NvRegMacAddrA = 0xA8, NvRegMacAddrB = 0xAC, NvRegMulticastAddrA = 0xB0,#define NVREG_MCASTADDRA_FORCE 0x01 NvRegMulticastAddrB = 0xB4, NvRegMulticastMaskA = 0xB8,#define NVREG_MCASTMASKA_NONE 0xffffffff NvRegMulticastMaskB = 0xBC,#define NVREG_MCASTMASKB_NONE 0xffff NvRegPhyInterface = 0xC0,#define PHY_RGMII 0x10000000 NvRegTxRingPhysAddr = 0x100, NvRegRxRingPhysAddr = 0x104, NvRegRingSizes = 0x108,#define NVREG_RINGSZ_TXSHIFT 0#define NVREG_RINGSZ_RXSHIFT 16 NvRegTransmitPoll = 0x10c,#define NVREG_TRANSMITPOLL_MAC_ADDR_REV 0x00008000 NvRegLinkSpeed = 0x110,#define NVREG_LINKSPEED_FORCE 0x10000#define NVREG_LINKSPEED_10 1000#define NVREG_LINKSPEED_100 100#define NVREG_LINKSPEED_1000 50#define NVREG_LINKSPEED_MASK (0xFFF) NvRegUnknownSetupReg5 = 0x130,#define NVREG_UNKSETUP5_BIT31 (1<<31) NvRegTxWatermark = 0x13c,#define NVREG_TX_WM_DESC1_DEFAULT 0x0200010#define NVREG_TX_WM_DESC2_3_DEFAULT 0x1e08000#define NVREG_TX_WM_DESC2_3_1000 0xfe08000 NvRegTxRxControl = 0x144,#define NVREG_TXRXCTL_KICK 0x0001#define NVREG_TXRXCTL_BIT1 0x0002#define NVREG_TXRXCTL_BIT2 0x0004#define NVREG_TXRXCTL_IDLE 0x0008#define NVREG_TXRXCTL_RESET 0x0010#define NVREG_TXRXCTL_RXCHECK 0x0400#define NVREG_TXRXCTL_DESC_1 0#define NVREG_TXRXCTL_DESC_2 0x002100#define NVREG_TXRXCTL_DESC_3 0xc02200#define NVREG_TXRXCTL_VLANSTRIP 0x00040#define NVREG_TXRXCTL_VLANINS 0x00080 NvRegTxRingPhysAddrHigh = 0x148, NvRegRxRingPhysAddrHigh = 0x14C, NvRegTxPauseFrame = 0x170,#define NVREG_TX_PAUSEFRAME_DISABLE 0x01ff0080#define NVREG_TX_PAUSEFRAME_ENABLE_V1 0x01800010#define NVREG_TX_PAUSEFRAME_ENABLE_V2 0x056003f0#define NVREG_TX_PAUSEFRAME_ENABLE_V3 0x09f00880 NvRegMIIStatus = 0x180,#define NVREG_MIISTAT_ERROR 0x0001#define NVREG_MIISTAT_LINKCHANGE 0x0008#define NVREG_MIISTAT_MASK_RW 0x0007#define NVREG_MIISTAT_MASK_ALL 0x000f NvRegMIIMask = 0x184,#define NVREG_MII_LINKCHANGE 0x0008 NvRegAdapterControl = 0x188,#define NVREG_ADAPTCTL_START 0x02#define NVREG_ADAPTCTL_LINKUP 0x04#define NVREG_ADAPTCTL_PHYVALID 0x40000#define NVREG_ADAPTCTL_RUNNING 0x100000#define NVREG_ADAPTCTL_PHYSHIFT 24 NvRegMIISpeed = 0x18c,#define NVREG_MIISPEED_BIT8 (1<<8)#define NVREG_MIIDELAY 5 NvRegMIIControl = 0x190,#define NVREG_MIICTL_INUSE 0x08000#define NVREG_MIICTL_WRITE 0x00400#define NVREG_MIICTL_ADDRSHIFT 5 NvRegMIIData = 0x194, NvRegWakeUpFlags = 0x200,#define NVREG_WAKEUPFLAGS_VAL 0x7770#define NVREG_WAKEUPFLAGS_BUSYSHIFT 24#define NVREG_WAKEUPFLAGS_ENABLESHIFT 16#define NVREG_WAKEUPFLAGS_D3SHIFT 12#define NVREG_WAKEUPFLAGS_D2SHIFT 8#define NVREG_WAKEUPFLAGS_D1SHIFT 4#define NVREG_WAKEUPFLAGS_D0SHIFT 0#define NVREG_WAKEUPFLAGS_ACCEPT_MAGPAT 0x01#define NVREG_WAKEUPFLAGS_ACCEPT_WAKEUPPAT 0x02#define NVREG_WAKEUPFLAGS_ACCEPT_LINKCHANGE 0x04#define NVREG_WAKEUPFLAGS_ENABLE 0x1111 NvRegPatternCRC = 0x204,#define NV_UNKNOWN_VAL 0x01 NvRegPatternMask = 0x208, NvRegPowerCap = 0x268,#define NVREG_POWERCAP_D3SUPP (1<<30)#define NVREG_POWERCAP_D2SUPP (1<<26)#define NVREG_POWERCAP_D1SUPP (1<<25) NvRegPowerState = 0x26c,#define NVREG_POWERSTATE_POWEREDUP 0x8000#define NVREG_POWERSTATE_VALID 0x0100#define NVREG_POWERSTATE_MASK 0x0003#define NVREG_POWERSTATE_D0 0x0000#define NVREG_POWERSTATE_D1 0x0001#define NVREG_POWERSTATE_D2 0x0002#define NVREG_POWERSTATE_D3 0x0003 NvRegTxCnt = 0x280, NvRegTxZeroReXmt = 0x284, NvRegTxOneReXmt = 0x288, NvRegTxManyReXmt = 0x28c, NvRegTxLateCol = 0x290, NvRegTxUnderflow = 0x294, NvRegTxLossCarrier = 0x298, NvRegTxExcessDef = 0x29c, NvRegTxRetryErr = 0x2a0, NvRegRxFrameErr = 0x2a4, NvRegRxExtraByte = 0x2a8, NvRegRxLateCol = 0x2ac, NvRegRxRunt = 0x2b0, NvRegRxFrameTooLong = 0x2b4, NvRegRxOverflow = 0x2b8, NvRegRxFCSErr = 0x2bc, NvRegRxFrameAlignErr = 0x2c0, NvRegRxLenErr = 0x2c4, NvRegRxUnicast = 0x2c8, NvRegRxMulticast = 0x2cc, NvRegRxBroadcast = 0x2d0, NvRegTxDef = 0x2d4, NvRegTxFrame = 0x2d8, NvRegRxCnt = 0x2dc, NvRegTxPause = 0x2e0, NvRegRxPause = 0x2e4, NvRegRxDropFrame = 0x2e8, NvRegVlanControl = 0x300,#define NVREG_VLANCONTROL_ENABLE 0x2000 NvRegMSIXMap0 = 0x3e0, NvRegMSIXMap1 = 0x3e4, NvRegMSIXIrqStatus = 0x3f0, NvRegPowerState2 = 0x600,#define NVREG_POWERSTATE2_POWERUP_MASK 0x0F11#define NVREG_POWERSTATE2_POWERUP_REV_A3 0x0001};/* Big endian: should work, but is untested */struct ring_desc { u32 PacketBuffer; u32 FlagLen;};struct ring_desc_ex { u32 PacketBufferHigh; u32 PacketBufferLow; u32 TxVlan; u32 FlagLen;};typedef union _ring_type { struct ring_desc* orig; struct ring_desc_ex* ex;} ring_type;#define FLAG_MASK_V1 0xffff0000#define FLAG_MASK_V2 0xffffc000#define LEN_MASK_V1 (0xffffffff ^ FLAG_MASK_V1)#define LEN_MASK_V2 (0xffffffff ^ FLAG_MASK_V2)#define NV_TX_LASTPACKET (1<<16)#define NV_TX_RETRYERROR (1<<19)#define NV_TX_FORCED_INTERRUPT (1<<24)#define NV_TX_DEFERRED (1<<26)#define NV_TX_CARRIERLOST (1<<27)#define NV_TX_LATECOLLISION (1<<28)#define NV_TX_UNDERFLOW (1<<29)#define NV_TX_ERROR (1<<30) /* logical OR of all errors */#define NV_TX_VALID (1<<31)#define NV_TX2_LASTPACKET (1<<29)#define NV_TX2_RETRYERROR (1<<18)#define NV_TX2_FORCED_INTERRUPT (1<<30)#define NV_TX2_DEFERRED (1<<25)#define NV_TX2_CARRIERLOST (1<<26)#define NV_TX2_LATECOLLISION (1<<27)#define NV_TX2_UNDERFLOW (1<<28)/* error and valid are the same for both */#define NV_TX2_ERROR (1<<30) /* logical OR of all errors */#define NV_TX2_VALID (1<<31)#define NV_TX2_TSO (1<<28)#define NV_TX2_TSO_SHIFT 14#define NV_TX2_TSO_MAX_SHIFT 14#define NV_TX2_TSO_MAX_SIZE (1<<NV_TX2_TSO_MAX_SHIFT)#define NV_TX2_CHECKSUM_L3 (1<<27)#define NV_TX2_CHECKSUM_L4 (1<<26)#define NV_TX3_VLAN_TAG_PRESENT (1<<18)#define NV_RX_DESCRIPTORVALID (1<<16)#define NV_RX_MISSEDFRAME (1<<17)#define NV_RX_SUBSTRACT1 (1<<18)#define NV_RX_ERROR1 (1<<23)#define NV_RX_ERROR2 (1<<24)#define NV_RX_ERROR3 (1<<25)#define NV_RX_ERROR4 (1<<26)#define NV_RX_CRCERR (1<<27)#define NV_RX_OVERFLOW (1<<28)#define NV_RX_FRAMINGERR (1<<29)#define NV_RX_ERROR (1<<30) /* logical OR of all errors */#define NV_RX_AVAIL (1<<31)#define NV_RX2_CHECKSUMMASK (0x1C000000)#define NV_RX2_CHECKSUM_IP (0x10000000)#define NV_RX2_CHECKSUM_IP_TCP (0x14000000)#define NV_RX2_CHECKSUM_IP_UDP (0x18000000)#define NV_RX2_DESCRIPTORVALID (1<<29)#define NV_RX2_SUBSTRACT1 (1<<25)#define NV_RX2_ERROR1 (1<<18)#define NV_RX2_ERROR2 (1<<19)#define NV_RX2_ERROR3 (1<<20)#define NV_RX2_ERROR4 (1<<21)#define NV_RX2_CRCERR (1<<22)#define NV_RX2_OVERFLOW (1<<23)#define NV_RX2_FRAMINGERR (1<<24)/* error and avail are the same for both */#define NV_RX2_ERROR (1<<30) /* logical OR of all errors */#define NV_RX2_AVAIL (1<<31)#define NV_RX3_VLAN_TAG_PRESENT (1<<16)#define NV_RX3_VLAN_TAG_MASK (0x0000FFFF)/* Miscelaneous hardware related defines: */#define NV_PCI_REGSZ_VER1 0x270#define NV_PCI_REGSZ_VER2 0x2d4#define NV_PCI_REGSZ_VER3 0x604/* various timeout delays: all in usec */#define NV_TXRX_RESET_DELAY 4#define NV_TXSTOP_DELAY1 10#define NV_TXSTOP_DELAY1MAX 500000#define NV_TXSTOP_DELAY2 100#define NV_RXSTOP_DELAY1 10#define NV_RXSTOP_DELAY1MAX 500000#define NV_RXSTOP_DELAY2 100#define NV_SETUP5_DELAY 5#define NV_SETUP5_DELAYMAX 50000#define NV_POWERUP_DELAY 5#define NV_POWERUP_DELAYMAX 5000#define NV_MIIBUSY_DELAY 50#define NV_MIIPHY_DELAY 10#define NV_MIIPHY_DELAYMAX 10000#define NV_MAC_RESET_DELAY 64#define NV_WAKEUPPATTERNS 5#define NV_WAKEUPMASKENTRIES 4/* General driver defaults */#define NV_WATCHDOG_TIMEO (5*HZ)#define RX_RING_DEFAULT 128#define TX_RING_DEFAULT 64#define RX_RING_MIN RX_RING_DEFAULT#define TX_RING_MIN TX_RING_DEFAULT#define RING_MAX_DESC_VER_1 1024#define RING_MAX_DESC_VER_2_3 16384/* * Difference between the get and put pointers for the tx ring. * This is used to throttle the amount of data outstanding in the * tx ring. */#define TX_LIMIT_DIFFERENCE 1/* rx/tx mac addr + type + vlan + align + slack*/#define NV_RX_HEADERS (64)/* even more slack. */#define NV_RX_ALLOC_PAD (64)/* maximum mtu size */#define NV_PKTLIMIT_1 ETH_DATA_LEN /* hard limit not known */#define NV_PKTLIMIT_2 9100 /* Actual limit according to NVidia: 9202 */#define OOM_REFILL (1+HZ/20)#define POLL_WAIT (1+HZ/100)#define LINK_TIMEOUT (3*HZ)#define STATS_INTERVAL (10*HZ)/* * desc_ver values: * The nic supports three different descriptor types: * - DESC_VER_1: Original * - DESC_VER_2: support for jumbo frames. * - DESC_VER_3: 64-bit format. */#define DESC_VER_1 1#define DESC_VER_2 2#define DESC_VER_3 3/* PHY defines */#define PHY_OUI_MARVELL 0x5043#define PHY_OUI_CICADA 0x03f1#define PHY_OUI_VITESSE 0x01c1#define PHY_OUI_REALTEK 0x0732#define PHYID1_OUI_MASK 0x03ff#define PHYID1_OUI_SHFT 6#define PHYID2_OUI_MASK 0xfc00#define PHYID2_OUI_SHFT 10#define PHYID2_MODEL_MASK 0x03f0#define PHY_MODEL_MARVELL_E3016 0x220#define PHY_MODEL_MARVELL_E1011 0xb0#define PHY_MARVELL_E3016_INITMASK 0x0300#define PHY_CICADA_INIT1 0x0f000#define PHY_CICADA_INIT2 0x0e00#define PHY_CICADA_INIT3 0x01000#define PHY_CICADA_INIT4 0x0200#define PHY_CICADA_INIT5 0x0004#define PHY_CICADA_INIT6 0x02000#define PHY_VITESSE_INIT_REG1 0x1f#define PHY_VITESSE_INIT_REG2 0x10#define PHY_VITESSE_INIT_REG3 0x11#define PHY_VITESSE_INIT_REG4 0x12#define PHY_VITESSE_INIT_MSK1 0xc#define PHY_VITESSE_INIT_MSK2 0x0180#define PHY_VITESSE_INIT1 0x52b5#define PHY_VITESSE_INIT2 0xaf8a#define PHY_VITESSE_INIT3 0x8#define PHY_VITESSE_INIT4 0x8f8a#define PHY_VITESSE_INIT5 0xaf86#define PHY_VITESSE_INIT6 0x8f86#define PHY_VITESSE_INIT7 0xaf82#define PHY_VITESSE_INIT8 0x0100#define PHY_VITESSE_INIT9 0x8f82#define PHY_VITESSE_INIT10 0x0#define PHY_REALTEK_INIT_REG1 0x1f#define PHY_REALTEK_INIT_REG2 0x19#define PHY_REALTEK_INIT_REG3 0x13
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -