1*5eec54d3Sjsg /* $OpenBSD: igc_defines.h,v 1.2 2024/09/06 10:54:08 jsg Exp $ */ 283306792Spatrick 383306792Spatrick /*- 483306792Spatrick * Copyright 2021 Intel Corp 583306792Spatrick * Copyright 2021 Rubicon Communications, LLC (Netgate) 683306792Spatrick * SPDX-License-Identifier: BSD-3-Clause 783306792Spatrick * 883306792Spatrick * $FreeBSD$ 983306792Spatrick */ 1083306792Spatrick 1183306792Spatrick #ifndef _IGC_DEFINES_H_ 1283306792Spatrick #define _IGC_DEFINES_H_ 1383306792Spatrick 1483306792Spatrick /* Number of Transmit and Receive Descriptors must be a multiple of 8 */ 1583306792Spatrick #define REQ_TX_DESCRIPTOR_MULTIPLE 8 1683306792Spatrick #define REQ_RX_DESCRIPTOR_MULTIPLE 8 1783306792Spatrick 1883306792Spatrick /* Definitions for power management and wakeup registers */ 1983306792Spatrick /* Wake Up Control */ 2083306792Spatrick #define IGC_WUC_APME 0x00000001 /* APM Enable */ 2183306792Spatrick #define IGC_WUC_PME_EN 0x00000002 /* PME Enable */ 2283306792Spatrick #define IGC_WUC_PME_STATUS 0x00000004 /* PME Status */ 2383306792Spatrick #define IGC_WUC_APMPME 0x00000008 /* Assert PME on APM Wakeup */ 2483306792Spatrick #define IGC_WUC_PHY_WAKE 0x00000100 /* if PHY supports wakeup */ 2583306792Spatrick 2683306792Spatrick /* Wake Up Filter Control */ 2783306792Spatrick #define IGC_WUFC_LNKC 0x00000001 /* Link Status Change Wakeup Enable */ 2883306792Spatrick #define IGC_WUFC_MAG 0x00000002 /* Magic Packet Wakeup Enable */ 2983306792Spatrick #define IGC_WUFC_EX 0x00000004 /* Directed Exact Wakeup Enable */ 3083306792Spatrick #define IGC_WUFC_MC 0x00000008 /* Directed Multicast Wakeup Enable */ 3183306792Spatrick #define IGC_WUFC_BC 0x00000010 /* Broadcast Wakeup Enable */ 3283306792Spatrick #define IGC_WUFC_ARP 0x00000020 /* ARP Request Packet Wakeup Enable */ 3383306792Spatrick #define IGC_WUFC_IPV4 0x00000040 /* Directed IPv4 Packet Wakeup Enable */ 3483306792Spatrick 3583306792Spatrick /* Wake Up Status */ 3683306792Spatrick #define IGC_WUS_LNKC IGC_WUFC_LNKC 3783306792Spatrick #define IGC_WUS_MAG IGC_WUFC_MAG 3883306792Spatrick #define IGC_WUS_EX IGC_WUFC_EX 3983306792Spatrick #define IGC_WUS_MC IGC_WUFC_MC 4083306792Spatrick #define IGC_WUS_BC IGC_WUFC_BC 4183306792Spatrick 4283306792Spatrick /* Packet types that are enabled for wake packet delivery */ 4383306792Spatrick #define WAKE_PKT_WUS ( \ 4483306792Spatrick IGC_WUS_EX | \ 4583306792Spatrick IGC_WUS_ARPD | \ 4683306792Spatrick IGC_WUS_IPV4 | \ 4783306792Spatrick IGC_WUS_IPV6 | \ 4883306792Spatrick IGC_WUS_NSD) 4983306792Spatrick 5083306792Spatrick /* Wake Up Packet Length */ 5183306792Spatrick #define IGC_WUPL_MASK 0x00000FFF 5283306792Spatrick 5383306792Spatrick /* Wake Up Packet Memory stores the first 128 bytes of the wake up packet */ 5483306792Spatrick #define IGC_WUPM_BYTES 128 5583306792Spatrick 5683306792Spatrick #define IGC_WUS_ARPD 0x00000020 /* Directed ARP Request */ 5783306792Spatrick #define IGC_WUS_IPV4 0x00000040 /* Directed IPv4 */ 5883306792Spatrick #define IGC_WUS_IPV6 0x00000080 /* Directed IPv6 */ 5983306792Spatrick #define IGC_WUS_NSD 0x00000400 /* Directed IPv6 Neighbor Solicitation */ 6083306792Spatrick 6183306792Spatrick /* Extended Device Control */ 6283306792Spatrick #define IGC_CTRL_EXT_LPCD 0x00000004 /* LCD Power Cycle Done */ 6383306792Spatrick #define IGC_CTRL_EXT_SDP4_DATA 0x00000010 /* SW Definable Pin 4 data */ 6483306792Spatrick #define IGC_CTRL_EXT_SDP6_DATA 0x00000040 /* SW Definable Pin 6 data */ 6583306792Spatrick #define IGC_CTRL_EXT_SDP3_DATA 0x00000080 /* SW Definable Pin 3 data */ 6683306792Spatrick #define IGC_CTRL_EXT_SDP6_DIR 0x00000400 /* Direction of SDP6 0=in 1=out */ 6783306792Spatrick #define IGC_CTRL_EXT_SDP3_DIR 0x00000800 /* Direction of SDP3 0=in 1=out */ 6883306792Spatrick #define IGC_CTRL_EXT_EE_RST 0x00002000 /* Reinitialize from EEPROM */ 6983306792Spatrick #define IGC_CTRL_EXT_SPD_BYPS 0x00008000 /* Speed Select Bypass */ 7083306792Spatrick #define IGC_CTRL_EXT_RO_DIS 0x00020000 /* Relaxed Ordering disable */ 7183306792Spatrick #define IGC_CTRL_EXT_DMA_DYN_CLK_EN 0x00080000 /* DMA Dynamic Clk Gating */ 7283306792Spatrick #define IGC_CTRL_EXT_LINK_MODE_PCIE_SERDES 0x00C00000 7383306792Spatrick #define IGC_CTRL_EXT_EIAME 0x01000000 7483306792Spatrick #define IGC_CTRL_EXT_DRV_LOAD 0x10000000 /* Drv loaded bit for FW */ 7583306792Spatrick #define IGC_CTRL_EXT_IAME 0x08000000 /* Int ACK Auto-mask */ 7683306792Spatrick #define IGC_CTRL_EXT_PBA_CLR 0x80000000 /* PBA Clear */ 7783306792Spatrick #define IGC_CTRL_EXT_PHYPDEN 0x00100000 7883306792Spatrick #define IGC_IVAR_VALID 0x80 7983306792Spatrick #define IGC_GPIE_NSICR 0x00000001 8083306792Spatrick #define IGC_GPIE_MSIX_MODE 0x00000010 8183306792Spatrick #define IGC_GPIE_EIAME 0x40000000 8283306792Spatrick #define IGC_GPIE_PBA 0x80000000 8383306792Spatrick 8483306792Spatrick /* Receive Descriptor bit definitions */ 8583306792Spatrick #define IGC_RXD_STAT_DD 0x01 /* Descriptor Done */ 8683306792Spatrick #define IGC_RXD_STAT_EOP 0x02 /* End of Packet */ 8783306792Spatrick #define IGC_RXD_STAT_IXSM 0x04 /* Ignore checksum */ 8883306792Spatrick #define IGC_RXD_STAT_VP 0x08 /* IEEE VLAN Packet */ 8983306792Spatrick #define IGC_RXD_STAT_UDPCS 0x10 /* UDP xsum calculated */ 9083306792Spatrick #define IGC_RXD_STAT_TCPCS 0x20 /* TCP xsum calculated */ 9183306792Spatrick #define IGC_RXD_STAT_IPCS 0x40 /* IP xsum calculated */ 9283306792Spatrick #define IGC_RXD_STAT_PIF 0x80 /* passed in-exact filter */ 9383306792Spatrick #define IGC_RXD_STAT_IPIDV 0x200 /* IP identification valid */ 9483306792Spatrick #define IGC_RXD_STAT_UDPV 0x400 /* Valid UDP checksum */ 9583306792Spatrick #define IGC_RXD_ERR_CE 0x01 /* CRC Error */ 9683306792Spatrick #define IGC_RXD_ERR_SE 0x02 /* Symbol Error */ 9783306792Spatrick #define IGC_RXD_ERR_SEQ 0x04 /* Sequence Error */ 9883306792Spatrick #define IGC_RXD_ERR_CXE 0x10 /* Carrier Extension Error */ 9983306792Spatrick #define IGC_RXD_ERR_TCPE 0x20 /* TCP/UDP Checksum Error */ 10083306792Spatrick #define IGC_RXD_ERR_IPE 0x40 /* IP Checksum Error */ 10183306792Spatrick #define IGC_RXD_ERR_RXE 0x80 /* Rx Data Error */ 10283306792Spatrick #define IGC_RXD_SPC_VLAN_MASK 0x0FFF /* VLAN ID is in lower 12 bits */ 10383306792Spatrick 10483306792Spatrick #define IGC_RXDEXT_STATERR_TST 0x00000100 /* Time Stamp taken */ 10583306792Spatrick #define IGC_RXDEXT_STATERR_LB 0x00040000 10683306792Spatrick #define IGC_RXDEXT_STATERR_L4E 0x20000000 10783306792Spatrick #define IGC_RXDEXT_STATERR_IPE 0x40000000 10883306792Spatrick #define IGC_RXDEXT_STATERR_RXE 0x80000000 10983306792Spatrick 11083306792Spatrick /* Same mask, but for extended and packet split descriptors */ 11183306792Spatrick #define IGC_RXDEXT_ERR_FRAME_ERR_MASK ( \ 11283306792Spatrick IGC_RXDEXT_STATERR_CE | \ 11383306792Spatrick IGC_RXDEXT_STATERR_SE | \ 11483306792Spatrick IGC_RXDEXT_STATERR_SEQ | \ 11583306792Spatrick IGC_RXDEXT_STATERR_CXE | \ 11683306792Spatrick IGC_RXDEXT_STATERR_RXE) 11783306792Spatrick 11883306792Spatrick #define IGC_MRQC_RSS_FIELD_MASK 0xFFFF0000 11983306792Spatrick #define IGC_MRQC_RSS_FIELD_IPV4_TCP 0x00010000 12083306792Spatrick #define IGC_MRQC_RSS_FIELD_IPV4 0x00020000 12183306792Spatrick #define IGC_MRQC_RSS_FIELD_IPV6_TCP_EX 0x00040000 12283306792Spatrick #define IGC_MRQC_RSS_FIELD_IPV6 0x00100000 12383306792Spatrick #define IGC_MRQC_RSS_FIELD_IPV6_TCP 0x00200000 12483306792Spatrick 12583306792Spatrick #define IGC_RXDPS_HDRSTAT_HDRSP 0x00008000 12683306792Spatrick 12783306792Spatrick /* Management Control */ 12883306792Spatrick #define IGC_MANC_SMBUS_EN 0x00000001 /* SMBus Enabled - RO */ 12983306792Spatrick #define IGC_MANC_ASF_EN 0x00000002 /* ASF Enabled - RO */ 13083306792Spatrick #define IGC_MANC_ARP_EN 0x00002000 /* Enable ARP Request Filtering */ 13183306792Spatrick #define IGC_MANC_RCV_TCO_EN 0x00020000 /* Receive TCO Packets Enabled */ 13283306792Spatrick #define IGC_MANC_BLK_PHY_RST_ON_IDE 0x00040000 /* Block phy resets */ 13383306792Spatrick /* Enable MAC address filtering */ 13483306792Spatrick #define IGC_MANC_EN_MAC_ADDR_FILTER 0x00100000 13583306792Spatrick /* Enable MNG packets to host memory */ 13683306792Spatrick #define IGC_MANC_EN_MNG2HOST 0x00200000 13783306792Spatrick 13883306792Spatrick #define IGC_MANC2H_PORT_623 0x00000020 /* Port 0x26f */ 13983306792Spatrick #define IGC_MANC2H_PORT_664 0x00000040 /* Port 0x298 */ 14083306792Spatrick #define IGC_MDEF_PORT_623 0x00000800 /* Port 0x26f */ 14183306792Spatrick #define IGC_MDEF_PORT_664 0x00000400 /* Port 0x298 */ 14283306792Spatrick 14383306792Spatrick /* Receive Control */ 14483306792Spatrick #define IGC_RCTL_RST 0x00000001 /* Software reset */ 14583306792Spatrick #define IGC_RCTL_EN 0x00000002 /* enable */ 14683306792Spatrick #define IGC_RCTL_SBP 0x00000004 /* store bad packet */ 14783306792Spatrick #define IGC_RCTL_UPE 0x00000008 /* unicast promisc enable */ 14883306792Spatrick #define IGC_RCTL_MPE 0x00000010 /* multicast promisc enable */ 14983306792Spatrick #define IGC_RCTL_LPE 0x00000020 /* long packet enable */ 15083306792Spatrick #define IGC_RCTL_LBM_NO 0x00000000 /* no loopback mode */ 15183306792Spatrick #define IGC_RCTL_LBM_MAC 0x00000040 /* MAC loopback mode */ 15283306792Spatrick #define IGC_RCTL_LBM_TCVR 0x000000C0 /* tcvr loopback mode */ 15383306792Spatrick #define IGC_RCTL_DTYP_PS 0x00000400 /* Packet Split descriptor */ 15483306792Spatrick #define IGC_RCTL_RDMTS_HALF 0x00000000 /* Rx desc min thresh size */ 15583306792Spatrick #define IGC_RCTL_RDMTS_HEX 0x00010000 15683306792Spatrick #define IGC_RCTL_RDMTS1_HEX IGC_RCTL_RDMTS_HEX 15783306792Spatrick #define IGC_RCTL_MO_SHIFT 12 /* multicast offset shift */ 15883306792Spatrick #define IGC_RCTL_MO_3 0x00003000 /* multicast offset 15:4 */ 15983306792Spatrick #define IGC_RCTL_BAM 0x00008000 /* broadcast enable */ 16083306792Spatrick /* these buffer sizes are valid if IGC_RCTL_BSEX is 0 */ 16183306792Spatrick #define IGC_RCTL_SZ_2048 0x00000000 /* Rx buffer size 2048 */ 16283306792Spatrick #define IGC_RCTL_SZ_1024 0x00010000 /* Rx buffer size 1024 */ 16383306792Spatrick #define IGC_RCTL_SZ_512 0x00020000 /* Rx buffer size 512 */ 16483306792Spatrick #define IGC_RCTL_SZ_256 0x00030000 /* Rx buffer size 256 */ 16583306792Spatrick /* these buffer sizes are valid if IGC_RCTL_BSEX is 1 */ 16683306792Spatrick #define IGC_RCTL_SZ_16384 0x00010000 /* Rx buffer size 16384 */ 16783306792Spatrick #define IGC_RCTL_SZ_8192 0x00020000 /* Rx buffer size 8192 */ 16883306792Spatrick #define IGC_RCTL_SZ_4096 0x00030000 /* Rx buffer size 4096 */ 16983306792Spatrick #define IGC_RCTL_VFE 0x00040000 /* vlan filter enable */ 17083306792Spatrick #define IGC_RCTL_CFIEN 0x00080000 /* canonical form enable */ 17183306792Spatrick #define IGC_RCTL_CFI 0x00100000 /* canonical form indicator */ 17283306792Spatrick #define IGC_RCTL_DPF 0x00400000 /* discard pause frames */ 17383306792Spatrick #define IGC_RCTL_PMCF 0x00800000 /* pass MAC control frames */ 17483306792Spatrick #define IGC_RCTL_BSEX 0x02000000 /* Buffer size extension */ 17583306792Spatrick #define IGC_RCTL_SECRC 0x04000000 /* Strip Ethernet CRC */ 17683306792Spatrick 17783306792Spatrick /* Use byte values for the following shift parameters 17883306792Spatrick * Usage: 17983306792Spatrick * psrctl |= (((ROUNDUP(value0, 128) >> IGC_PSRCTL_BSIZE0_SHIFT) & 18083306792Spatrick * IGC_PSRCTL_BSIZE0_MASK) | 18183306792Spatrick * ((ROUNDUP(value1, 1024) >> IGC_PSRCTL_BSIZE1_SHIFT) & 18283306792Spatrick * IGC_PSRCTL_BSIZE1_MASK) | 18383306792Spatrick * ((ROUNDUP(value2, 1024) << IGC_PSRCTL_BSIZE2_SHIFT) & 18483306792Spatrick * IGC_PSRCTL_BSIZE2_MASK) | 18583306792Spatrick * ((ROUNDUP(value3, 1024) << IGC_PSRCTL_BSIZE3_SHIFT) |; 18683306792Spatrick * IGC_PSRCTL_BSIZE3_MASK)) 18783306792Spatrick * where value0 = [128..16256], default=256 18883306792Spatrick * value1 = [1024..64512], default=4096 18983306792Spatrick * value2 = [0..64512], default=4096 19083306792Spatrick * value3 = [0..64512], default=0 19183306792Spatrick */ 19283306792Spatrick 19383306792Spatrick #define IGC_PSRCTL_BSIZE0_MASK 0x0000007F 19483306792Spatrick #define IGC_PSRCTL_BSIZE1_MASK 0x00003F00 19583306792Spatrick #define IGC_PSRCTL_BSIZE2_MASK 0x003F0000 19683306792Spatrick #define IGC_PSRCTL_BSIZE3_MASK 0x3F000000 19783306792Spatrick 19883306792Spatrick #define IGC_PSRCTL_BSIZE0_SHIFT 7 /* Shift _right_ 7 */ 19983306792Spatrick #define IGC_PSRCTL_BSIZE1_SHIFT 2 /* Shift _right_ 2 */ 20083306792Spatrick #define IGC_PSRCTL_BSIZE2_SHIFT 6 /* Shift _left_ 6 */ 20183306792Spatrick #define IGC_PSRCTL_BSIZE3_SHIFT 14 /* Shift _left_ 14 */ 20283306792Spatrick 20383306792Spatrick /* SWFW_SYNC Definitions */ 20483306792Spatrick #define IGC_SWFW_EEP_SM 0x01 20583306792Spatrick #define IGC_SWFW_PHY0_SM 0x02 20683306792Spatrick #define IGC_SWFW_PHY1_SM 0x04 20783306792Spatrick #define IGC_SWFW_CSR_SM 0x08 20883306792Spatrick #define IGC_SWFW_SW_MNG_SM 0x400 20983306792Spatrick 21083306792Spatrick /* Device Control */ 21183306792Spatrick #define IGC_CTRL_FD 0x00000001 /* Full duplex.0=half; 1=full */ 21283306792Spatrick #define IGC_CTRL_PRIOR 0x00000004 /* Priority on PCI. 0=rx,1=fair */ 21383306792Spatrick #define IGC_CTRL_GIO_MASTER_DISABLE 0x00000004 /*Blocks new Master reqs */ 21483306792Spatrick #define IGC_CTRL_LRST 0x00000008 /* Link reset. 0=normal,1=reset */ 21583306792Spatrick #define IGC_CTRL_ASDE 0x00000020 /* Auto-speed detect enable */ 21683306792Spatrick #define IGC_CTRL_SLU 0x00000040 /* Set link up (Force Link) */ 21783306792Spatrick #define IGC_CTRL_ILOS 0x00000080 /* Invert Loss-Of Signal */ 21883306792Spatrick #define IGC_CTRL_SPD_SEL 0x00000300 /* Speed Select Mask */ 21983306792Spatrick #define IGC_CTRL_SPD_10 0x00000000 /* Force 10Mb */ 22083306792Spatrick #define IGC_CTRL_SPD_100 0x00000100 /* Force 100Mb */ 22183306792Spatrick #define IGC_CTRL_SPD_1000 0x00000200 /* Force 1Gb */ 22283306792Spatrick #define IGC_CTRL_FRCSPD 0x00000800 /* Force Speed */ 22383306792Spatrick #define IGC_CTRL_FRCDPX 0x00001000 /* Force Duplex */ 22483306792Spatrick #define IGC_CTRL_SWDPIN0 0x00040000 /* SWDPIN 0 value */ 22583306792Spatrick #define IGC_CTRL_SWDPIN1 0x00080000 /* SWDPIN 1 value */ 22683306792Spatrick #define IGC_CTRL_SWDPIN2 0x00100000 /* SWDPIN 2 value */ 22783306792Spatrick #define IGC_CTRL_ADVD3WUC 0x00100000 /* D3 WUC */ 22883306792Spatrick #define IGC_CTRL_SWDPIN3 0x00200000 /* SWDPIN 3 value */ 22983306792Spatrick #define IGC_CTRL_SWDPIO0 0x00400000 /* SWDPIN 0 Input or output */ 23083306792Spatrick #define IGC_CTRL_DEV_RST 0x20000000 /* Device reset */ 23183306792Spatrick #define IGC_CTRL_RST 0x04000000 /* Global reset */ 23283306792Spatrick #define IGC_CTRL_RFCE 0x08000000 /* Receive Flow Control enable */ 23383306792Spatrick #define IGC_CTRL_TFCE 0x10000000 /* Transmit flow control enable */ 23483306792Spatrick #define IGC_CTRL_VME 0x40000000 /* IEEE VLAN mode enable */ 23583306792Spatrick #define IGC_CTRL_PHY_RST 0x80000000 /* PHY Reset */ 23683306792Spatrick 23783306792Spatrick 23883306792Spatrick #define IGC_CONNSW_AUTOSENSE_EN 0x01 23983306792Spatrick #define IGC_PCS_LCTL_FORCE_FCTRL 0x80 24083306792Spatrick 24183306792Spatrick #define IGC_PCS_LSTS_AN_COMPLETE 0x10000 24283306792Spatrick 24383306792Spatrick /* Device Status */ 24483306792Spatrick #define IGC_STATUS_FD 0x00000001 /* Duplex 0=half 1=full */ 24583306792Spatrick #define IGC_STATUS_LU 0x00000002 /* Link up.0=no,1=link */ 24683306792Spatrick #define IGC_STATUS_FUNC_MASK 0x0000000C /* PCI Function Mask */ 24783306792Spatrick #define IGC_STATUS_FUNC_SHIFT 2 24883306792Spatrick #define IGC_STATUS_FUNC_1 0x00000004 /* Function 1 */ 24983306792Spatrick #define IGC_STATUS_TXOFF 0x00000010 /* transmission paused */ 25083306792Spatrick #define IGC_STATUS_SPEED_MASK 0x000000C0 25183306792Spatrick #define IGC_STATUS_SPEED_10 0x00000000 /* Speed 10Mb/s */ 25283306792Spatrick #define IGC_STATUS_SPEED_100 0x00000040 /* Speed 100Mb/s */ 25383306792Spatrick #define IGC_STATUS_SPEED_1000 0x00000080 /* Speed 1000Mb/s */ 25483306792Spatrick #define IGC_STATUS_SPEED_2500 0x00400000 /* Speed 2.5Gb/s */ 25583306792Spatrick #define IGC_STATUS_LAN_INIT_DONE 0x00000200 /* Lan Init Compltn by NVM */ 25683306792Spatrick #define IGC_STATUS_PHYRA 0x00000400 /* PHY Reset Asserted */ 25783306792Spatrick #define IGC_STATUS_GIO_MASTER_ENABLE 0x00080000 /* Master request status */ 25883306792Spatrick #define IGC_STATUS_2P5_SKU 0x00001000 /* Val of 2.5GBE SKU strap */ 25983306792Spatrick #define IGC_STATUS_2P5_SKU_OVER 0x00002000 /* Val of 2.5GBE SKU Over */ 26083306792Spatrick #define IGC_STATUS_PCIM_STATE 0x40000000 /* PCIm function state */ 26183306792Spatrick 26283306792Spatrick #define SPEED_10 10 26383306792Spatrick #define SPEED_100 100 26483306792Spatrick #define SPEED_1000 1000 26583306792Spatrick #define SPEED_2500 2500 26683306792Spatrick #define HALF_DUPLEX 1 26783306792Spatrick #define FULL_DUPLEX 2 26883306792Spatrick 26983306792Spatrick #define ADVERTISE_10_HALF 0x0001 27083306792Spatrick #define ADVERTISE_10_FULL 0x0002 27183306792Spatrick #define ADVERTISE_100_HALF 0x0004 27283306792Spatrick #define ADVERTISE_100_FULL 0x0008 27383306792Spatrick #define ADVERTISE_1000_HALF 0x0010 /* Not used, just FYI */ 27483306792Spatrick #define ADVERTISE_1000_FULL 0x0020 27583306792Spatrick #define ADVERTISE_2500_HALF 0x0040 /* NOT used, just FYI */ 27683306792Spatrick #define ADVERTISE_2500_FULL 0x0080 27783306792Spatrick 27883306792Spatrick /* 1000/H is not supported, nor spec-compliant. */ 27983306792Spatrick #define IGC_ALL_SPEED_DUPLEX ( \ 28083306792Spatrick ADVERTISE_10_HALF | ADVERTISE_10_FULL | ADVERTISE_100_HALF | \ 28183306792Spatrick ADVERTISE_100_FULL | ADVERTISE_1000_FULL) 28283306792Spatrick #define IGC_ALL_SPEED_DUPLEX_2500 ( \ 28383306792Spatrick ADVERTISE_10_HALF | ADVERTISE_10_FULL | ADVERTISE_100_HALF | \ 28483306792Spatrick ADVERTISE_100_FULL | ADVERTISE_1000_FULL | ADVERTISE_2500_FULL) 28583306792Spatrick #define IGC_ALL_NOT_GIG ( \ 28683306792Spatrick ADVERTISE_10_HALF | ADVERTISE_10_FULL | ADVERTISE_100_HALF | \ 28783306792Spatrick ADVERTISE_100_FULL) 28883306792Spatrick #define IGC_ALL_100_SPEED (ADVERTISE_100_HALF | ADVERTISE_100_FULL) 28983306792Spatrick #define IGC_ALL_10_SPEED (ADVERTISE_10_HALF | ADVERTISE_10_FULL) 29083306792Spatrick #define IGC_ALL_HALF_DUPLEX (ADVERTISE_10_HALF | ADVERTISE_100_HALF) 29183306792Spatrick 29283306792Spatrick #define AUTONEG_ADVERTISE_SPEED_DEFAULT IGC_ALL_SPEED_DUPLEX 29383306792Spatrick #define AUTONEG_ADVERTISE_SPEED_DEFAULT_2500 IGC_ALL_SPEED_DUPLEX_2500 29483306792Spatrick 29583306792Spatrick /* LED Control */ 29683306792Spatrick #define IGC_LEDCTL_LED0_MODE_MASK 0x0000000F 29783306792Spatrick #define IGC_LEDCTL_LED0_MODE_SHIFT 0 29883306792Spatrick #define IGC_LEDCTL_LED0_IVRT 0x00000040 29983306792Spatrick #define IGC_LEDCTL_LED0_BLINK 0x00000080 30083306792Spatrick 30183306792Spatrick #define IGC_LEDCTL_MODE_LED_ON 0x0E 30283306792Spatrick #define IGC_LEDCTL_MODE_LED_OFF 0x0F 30383306792Spatrick 30483306792Spatrick /* Transmit Descriptor bit definitions */ 30583306792Spatrick #define IGC_TXD_DTYP_D 0x00100000 /* Data Descriptor */ 30683306792Spatrick #define IGC_TXD_DTYP_C 0x00000000 /* Context Descriptor */ 30783306792Spatrick #define IGC_TXD_POPTS_IXSM 0x01 /* Insert IP checksum */ 30883306792Spatrick #define IGC_TXD_POPTS_TXSM 0x02 /* Insert TCP/UDP checksum */ 30983306792Spatrick #define IGC_TXD_CMD_EOP 0x01000000 /* End of Packet */ 31083306792Spatrick #define IGC_TXD_CMD_IFCS 0x02000000 /* Insert FCS (Ethernet CRC) */ 31183306792Spatrick #define IGC_TXD_CMD_IC 0x04000000 /* Insert Checksum */ 31283306792Spatrick #define IGC_TXD_CMD_RS 0x08000000 /* Report Status */ 31383306792Spatrick #define IGC_TXD_CMD_RPS 0x10000000 /* Report Packet Sent */ 31483306792Spatrick #define IGC_TXD_CMD_DEXT 0x20000000 /* Desc extension (0 = legacy) */ 31583306792Spatrick #define IGC_TXD_CMD_VLE 0x40000000 /* Add VLAN tag */ 31683306792Spatrick #define IGC_TXD_CMD_IDE 0x80000000 /* Enable Tidv register */ 31783306792Spatrick #define IGC_TXD_STAT_DD 0x00000001 /* Descriptor Done */ 31883306792Spatrick #define IGC_TXD_CMD_TCP 0x01000000 /* TCP packet */ 31983306792Spatrick #define IGC_TXD_CMD_IP 0x02000000 /* IP packet */ 32083306792Spatrick #define IGC_TXD_CMD_TSE 0x04000000 /* TCP Seg enable */ 32183306792Spatrick #define IGC_TXD_EXTCMD_TSTAMP 0x00000010 /* IEEE1588 Timestamp packet */ 32283306792Spatrick 32383306792Spatrick /* Transmit Control */ 32483306792Spatrick #define IGC_TCTL_EN 0x00000002 /* enable Tx */ 32583306792Spatrick #define IGC_TCTL_PSP 0x00000008 /* pad short packets */ 32683306792Spatrick #define IGC_TCTL_CT 0x00000ff0 /* collision threshold */ 32783306792Spatrick #define IGC_TCTL_COLD 0x003ff000 /* collision distance */ 32883306792Spatrick #define IGC_TCTL_RTLC 0x01000000 /* Re-transmit on late collision */ 32983306792Spatrick #define IGC_TCTL_MULR 0x10000000 /* Multiple request support */ 33083306792Spatrick 33183306792Spatrick /* Transmit Arbitration Count */ 33283306792Spatrick #define IGC_TARC0_ENABLE 0x00000400 /* Enable Tx Queue 0 */ 33383306792Spatrick 33483306792Spatrick /* SerDes Control */ 33583306792Spatrick #define IGC_SCTL_DISABLE_SERDES_LOOPBACK 0x0400 33683306792Spatrick #define IGC_SCTL_ENABLE_SERDES_LOOPBACK 0x0410 33783306792Spatrick 33883306792Spatrick /* Receive Checksum Control */ 33983306792Spatrick #define IGC_RXCSUM_IPOFL 0x00000100 /* IPv4 checksum offload */ 34083306792Spatrick #define IGC_RXCSUM_TUOFL 0x00000200 /* TCP / UDP checksum offload */ 34183306792Spatrick #define IGC_RXCSUM_CRCOFL 0x00000800 /* CRC32 offload enable */ 34283306792Spatrick #define IGC_RXCSUM_IPPCSE 0x00001000 /* IP payload checksum enable */ 34383306792Spatrick #define IGC_RXCSUM_PCSD 0x00002000 /* packet checksum disabled */ 34483306792Spatrick 34583306792Spatrick /* GPY211 - I225 defines */ 34683306792Spatrick #define GPY_MMD_MASK 0xFFFF0000 34783306792Spatrick #define GPY_MMD_SHIFT 16 34883306792Spatrick #define GPY_REG_MASK 0x0000FFFF 34983306792Spatrick /* Header split receive */ 35083306792Spatrick #define IGC_RFCTL_NFSW_DIS 0x00000040 35183306792Spatrick #define IGC_RFCTL_NFSR_DIS 0x00000080 35283306792Spatrick #define IGC_RFCTL_ACK_DIS 0x00001000 35383306792Spatrick #define IGC_RFCTL_EXTEN 0x00008000 35483306792Spatrick #define IGC_RFCTL_IPV6_EX_DIS 0x00010000 35583306792Spatrick #define IGC_RFCTL_NEW_IPV6_EXT_DIS 0x00020000 35683306792Spatrick #define IGC_RFCTL_LEF 0x00040000 35783306792Spatrick 35883306792Spatrick /* Collision related configuration parameters */ 35983306792Spatrick #define IGC_CT_SHIFT 4 36083306792Spatrick #define IGC_COLLISION_THRESHOLD 15 36183306792Spatrick #define IGC_COLLISION_DISTANCE 63 36283306792Spatrick #define IGC_COLD_SHIFT 12 36383306792Spatrick 36483306792Spatrick /* Default values for the transmit IPG register */ 36583306792Spatrick #define DEFAULT_82543_TIPG_IPGT_FIBER 9 36683306792Spatrick #define DEFAULT_82543_TIPG_IPGT_COPPER 8 36783306792Spatrick 36883306792Spatrick #define IGC_TIPG_IPGT_MASK 0x000003FF 36983306792Spatrick 37083306792Spatrick #define DEFAULT_82543_TIPG_IPGR1 8 37183306792Spatrick #define IGC_TIPG_IPGR1_SHIFT 10 37283306792Spatrick 37383306792Spatrick #define DEFAULT_82543_TIPG_IPGR2 6 37483306792Spatrick #define DEFAULT_80003ES2LAN_TIPG_IPGR2 7 37583306792Spatrick #define IGC_TIPG_IPGR2_SHIFT 20 37683306792Spatrick 37783306792Spatrick /* Ethertype field values */ 37883306792Spatrick #define ETHERNET_IEEE_VLAN_TYPE 0x8100 /* 802.3ac packet */ 37983306792Spatrick 38083306792Spatrick #define ETHERNET_FCS_SIZE 4 38183306792Spatrick #define MAX_JUMBO_FRAME_SIZE 9216 38283306792Spatrick #define IGC_TX_PTR_GAP 0x1F 38383306792Spatrick 38483306792Spatrick /* Extended Configuration Control and Size */ 38583306792Spatrick #define IGC_EXTCNF_CTRL_MDIO_SW_OWNERSHIP 0x00000020 38683306792Spatrick #define IGC_EXTCNF_CTRL_LCD_WRITE_ENABLE 0x00000001 38783306792Spatrick #define IGC_EXTCNF_CTRL_OEM_WRITE_ENABLE 0x00000008 38883306792Spatrick #define IGC_EXTCNF_CTRL_SWFLAG 0x00000020 38983306792Spatrick #define IGC_EXTCNF_CTRL_GATE_PHY_CFG 0x00000080 39083306792Spatrick #define IGC_EXTCNF_SIZE_EXT_PCIE_LENGTH_MASK 0x00FF0000 39183306792Spatrick #define IGC_EXTCNF_SIZE_EXT_PCIE_LENGTH_SHIFT 16 39283306792Spatrick #define IGC_EXTCNF_CTRL_EXT_CNF_POINTER_MASK 0x0FFF0000 39383306792Spatrick #define IGC_EXTCNF_CTRL_EXT_CNF_POINTER_SHIFT 16 39483306792Spatrick 39583306792Spatrick #define IGC_PHY_CTRL_D0A_LPLU 0x00000002 39683306792Spatrick #define IGC_PHY_CTRL_NOND0A_LPLU 0x00000004 39783306792Spatrick #define IGC_PHY_CTRL_NOND0A_GBE_DISABLE 0x00000008 39883306792Spatrick #define IGC_PHY_CTRL_GBE_DISABLE 0x00000040 39983306792Spatrick 40083306792Spatrick #define IGC_KABGTXD_BGSQLBIAS 0x00050000 40183306792Spatrick 40283306792Spatrick /* PBA constants */ 40383306792Spatrick #define IGC_PBA_8K 0x0008 /* 8KB */ 40483306792Spatrick #define IGC_PBA_10K 0x000A /* 10KB */ 40583306792Spatrick #define IGC_PBA_12K 0x000C /* 12KB */ 40683306792Spatrick #define IGC_PBA_14K 0x000E /* 14KB */ 40783306792Spatrick #define IGC_PBA_16K 0x0010 /* 16KB */ 40883306792Spatrick #define IGC_PBA_18K 0x0012 40983306792Spatrick #define IGC_PBA_20K 0x0014 41083306792Spatrick #define IGC_PBA_22K 0x0016 41183306792Spatrick #define IGC_PBA_24K 0x0018 41283306792Spatrick #define IGC_PBA_26K 0x001A 41383306792Spatrick #define IGC_PBA_30K 0x001E 41483306792Spatrick #define IGC_PBA_32K 0x0020 41583306792Spatrick #define IGC_PBA_34K 0x0022 41683306792Spatrick #define IGC_PBA_35K 0x0023 41783306792Spatrick #define IGC_PBA_38K 0x0026 41883306792Spatrick #define IGC_PBA_40K 0x0028 41983306792Spatrick #define IGC_PBA_48K 0x0030 /* 48KB */ 42083306792Spatrick #define IGC_PBA_64K 0x0040 /* 64KB */ 42183306792Spatrick 42283306792Spatrick #define IGC_PBA_RXA_MASK 0xFFFF 42383306792Spatrick 42483306792Spatrick #define IGC_PBS_16K IGC_PBA_16K 42583306792Spatrick 42683306792Spatrick /* Uncorrectable/correctable ECC Error counts and enable bits */ 42783306792Spatrick #define IGC_PBECCSTS_CORR_ERR_CNT_MASK 0x000000FF 42883306792Spatrick #define IGC_PBECCSTS_UNCORR_ERR_CNT_MASK 0x0000FF00 42983306792Spatrick #define IGC_PBECCSTS_UNCORR_ERR_CNT_SHIFT 8 43083306792Spatrick #define IGC_PBECCSTS_ECC_ENABLE 0x00010000 43183306792Spatrick 43283306792Spatrick #define IFS_MAX 80 43383306792Spatrick #define IFS_MIN 40 43483306792Spatrick #define IFS_RATIO 4 43583306792Spatrick #define IFS_STEP 10 43683306792Spatrick #define MIN_NUM_XMITS 1000 43783306792Spatrick 43883306792Spatrick /* SW Semaphore Register */ 43983306792Spatrick #define IGC_SWSM_SMBI 0x00000001 /* Driver Semaphore bit */ 44083306792Spatrick #define IGC_SWSM_SWESMBI 0x00000002 /* FW Semaphore bit */ 44183306792Spatrick #define IGC_SWSM_DRV_LOAD 0x00000008 /* Driver Loaded Bit */ 44283306792Spatrick 44383306792Spatrick #define IGC_SWSM2_LOCK 0x00000002 /* Secondary driver semaphore bit */ 44483306792Spatrick 44583306792Spatrick /* Interrupt Cause Read */ 44683306792Spatrick #define IGC_ICR_TXDW 0x00000001 /* Transmit desc written back */ 44783306792Spatrick #define IGC_ICR_TXQE 0x00000002 /* Transmit Queue empty */ 44883306792Spatrick #define IGC_ICR_LSC 0x00000004 /* Link Status Change */ 44983306792Spatrick #define IGC_ICR_RXSEQ 0x00000008 /* Rx sequence error */ 45083306792Spatrick #define IGC_ICR_RXDMT0 0x00000010 /* Rx desc min. threshold (0) */ 45183306792Spatrick #define IGC_ICR_RXO 0x00000040 /* Rx overrun */ 45283306792Spatrick #define IGC_ICR_RXT0 0x00000080 /* Rx timer intr (ring 0) */ 45383306792Spatrick #define IGC_ICR_RXCFG 0x00000400 /* Rx /c/ ordered set */ 45483306792Spatrick #define IGC_ICR_GPI_EN0 0x00000800 /* GP Int 0 */ 45583306792Spatrick #define IGC_ICR_GPI_EN1 0x00001000 /* GP Int 1 */ 45683306792Spatrick #define IGC_ICR_GPI_EN2 0x00002000 /* GP Int 2 */ 45783306792Spatrick #define IGC_ICR_GPI_EN3 0x00004000 /* GP Int 3 */ 45883306792Spatrick #define IGC_ICR_TXD_LOW 0x00008000 45983306792Spatrick #define IGC_ICR_ECCER 0x00400000 /* Uncorrectable ECC Error */ 46083306792Spatrick #define IGC_ICR_TS 0x00080000 /* Time Sync Interrupt */ 46183306792Spatrick #define IGC_ICR_DRSTA 0x40000000 /* Device Reset Asserted */ 46283306792Spatrick /* If this bit asserted, the driver should claim the interrupt */ 46383306792Spatrick #define IGC_ICR_INT_ASSERTED 0x80000000 46483306792Spatrick #define IGC_ICR_DOUTSYNC 0x10000000 /* NIC DMA out of sync */ 46583306792Spatrick #define IGC_ICR_FER 0x00400000 /* Fatal Error */ 46683306792Spatrick 46783306792Spatrick 46883306792Spatrick 46983306792Spatrick /* Extended Interrupt Cause Read */ 47083306792Spatrick #define IGC_EICR_RX_QUEUE0 0x00000001 /* Rx Queue 0 Interrupt */ 47183306792Spatrick #define IGC_EICR_RX_QUEUE1 0x00000002 /* Rx Queue 1 Interrupt */ 47283306792Spatrick #define IGC_EICR_RX_QUEUE2 0x00000004 /* Rx Queue 2 Interrupt */ 47383306792Spatrick #define IGC_EICR_RX_QUEUE3 0x00000008 /* Rx Queue 3 Interrupt */ 47483306792Spatrick #define IGC_EICR_TX_QUEUE0 0x00000100 /* Tx Queue 0 Interrupt */ 47583306792Spatrick #define IGC_EICR_TX_QUEUE1 0x00000200 /* Tx Queue 1 Interrupt */ 47683306792Spatrick #define IGC_EICR_TX_QUEUE2 0x00000400 /* Tx Queue 2 Interrupt */ 47783306792Spatrick #define IGC_EICR_TX_QUEUE3 0x00000800 /* Tx Queue 3 Interrupt */ 47883306792Spatrick #define IGC_EICR_TCP_TIMER 0x40000000 /* TCP Timer */ 47983306792Spatrick #define IGC_EICR_OTHER 0x80000000 /* Interrupt Cause Active */ 48083306792Spatrick /* TCP Timer */ 48183306792Spatrick #define IGC_TCPTIMER_KS 0x00000100 /* KickStart */ 48283306792Spatrick #define IGC_TCPTIMER_COUNT_ENABLE 0x00000200 /* Count Enable */ 48383306792Spatrick #define IGC_TCPTIMER_COUNT_FINISH 0x00000400 /* Count finish */ 48483306792Spatrick #define IGC_TCPTIMER_LOOP 0x00000800 /* Loop */ 48583306792Spatrick 48683306792Spatrick /* This defines the bits that are set in the Interrupt Mask 48783306792Spatrick * Set/Read Register. Each bit is documented below: 48883306792Spatrick * o RXT0 = Receiver Timer Interrupt (ring 0) 48983306792Spatrick * o TXDW = Transmit Descriptor Written Back 49083306792Spatrick * o RXDMT0 = Receive Descriptor Minimum Threshold hit (ring 0) 49183306792Spatrick * o RXSEQ = Receive Sequence Error 49283306792Spatrick * o LSC = Link Status Change 49383306792Spatrick */ 49483306792Spatrick #define IMS_ENABLE_MASK ( \ 49583306792Spatrick IGC_IMS_RXT0 | \ 49683306792Spatrick IGC_IMS_TXDW | \ 49783306792Spatrick IGC_IMS_RXDMT0 | \ 49883306792Spatrick IGC_IMS_RXSEQ | \ 49983306792Spatrick IGC_IMS_LSC) 50083306792Spatrick 50183306792Spatrick /* Interrupt Mask Set */ 50283306792Spatrick #define IGC_IMS_TXDW IGC_ICR_TXDW /* Tx desc written back */ 50383306792Spatrick #define IGC_IMS_LSC IGC_ICR_LSC /* Link Status Change */ 50483306792Spatrick #define IGC_IMS_RXSEQ IGC_ICR_RXSEQ /* Rx sequence error */ 50583306792Spatrick #define IGC_IMS_RXDMT0 IGC_ICR_RXDMT0 /* Rx desc min. threshold */ 50683306792Spatrick #define IGC_QVECTOR_MASK 0x7FFC /* Q-vector mask */ 50783306792Spatrick #define IGC_ITR_VAL_MASK 0x04 /* ITR value mask */ 50883306792Spatrick #define IGC_IMS_RXO IGC_ICR_RXO /* Rx overrun */ 50983306792Spatrick #define IGC_IMS_RXT0 IGC_ICR_RXT0 /* Rx timer intr */ 51083306792Spatrick #define IGC_IMS_TXD_LOW IGC_ICR_TXD_LOW 51183306792Spatrick #define IGC_IMS_ECCER IGC_ICR_ECCER /* Uncorrectable ECC Error */ 51283306792Spatrick #define IGC_IMS_TS IGC_ICR_TS /* Time Sync Interrupt */ 51383306792Spatrick #define IGC_IMS_DRSTA IGC_ICR_DRSTA /* Device Reset Asserted */ 51483306792Spatrick #define IGC_IMS_DOUTSYNC IGC_ICR_DOUTSYNC /* NIC DMA out of sync */ 51583306792Spatrick #define IGC_IMS_FER IGC_ICR_FER /* Fatal Error */ 51683306792Spatrick 51783306792Spatrick #define IGC_IMS_THS IGC_ICR_THS /* ICR.TS: Thermal Sensor Event*/ 51883306792Spatrick #define IGC_IMS_MDDET IGC_ICR_MDDET /* Malicious Driver Detect */ 51983306792Spatrick /* Extended Interrupt Mask Set */ 52083306792Spatrick #define IGC_EIMS_RX_QUEUE0 IGC_EICR_RX_QUEUE0 /* Rx Queue 0 Interrupt */ 52183306792Spatrick #define IGC_EIMS_RX_QUEUE1 IGC_EICR_RX_QUEUE1 /* Rx Queue 1 Interrupt */ 52283306792Spatrick #define IGC_EIMS_RX_QUEUE2 IGC_EICR_RX_QUEUE2 /* Rx Queue 2 Interrupt */ 52383306792Spatrick #define IGC_EIMS_RX_QUEUE3 IGC_EICR_RX_QUEUE3 /* Rx Queue 3 Interrupt */ 52483306792Spatrick #define IGC_EIMS_TX_QUEUE0 IGC_EICR_TX_QUEUE0 /* Tx Queue 0 Interrupt */ 52583306792Spatrick #define IGC_EIMS_TX_QUEUE1 IGC_EICR_TX_QUEUE1 /* Tx Queue 1 Interrupt */ 52683306792Spatrick #define IGC_EIMS_TX_QUEUE2 IGC_EICR_TX_QUEUE2 /* Tx Queue 2 Interrupt */ 52783306792Spatrick #define IGC_EIMS_TX_QUEUE3 IGC_EICR_TX_QUEUE3 /* Tx Queue 3 Interrupt */ 52883306792Spatrick #define IGC_EIMS_TCP_TIMER IGC_EICR_TCP_TIMER /* TCP Timer */ 52983306792Spatrick #define IGC_EIMS_OTHER IGC_EICR_OTHER /* Interrupt Cause Active */ 53083306792Spatrick 53183306792Spatrick /* Interrupt Cause Set */ 53283306792Spatrick #define IGC_ICS_LSC IGC_ICR_LSC /* Link Status Change */ 53383306792Spatrick #define IGC_ICS_RXSEQ IGC_ICR_RXSEQ /* Rx sequence error */ 53483306792Spatrick #define IGC_ICS_RXDMT0 IGC_ICR_RXDMT0 /* Rx desc min. threshold */ 53583306792Spatrick 53683306792Spatrick /* Extended Interrupt Cause Set */ 53783306792Spatrick #define IGC_EICS_RX_QUEUE0 IGC_EICR_RX_QUEUE0 /* Rx Queue 0 Interrupt */ 53883306792Spatrick #define IGC_EICS_RX_QUEUE1 IGC_EICR_RX_QUEUE1 /* Rx Queue 1 Interrupt */ 53983306792Spatrick #define IGC_EICS_RX_QUEUE2 IGC_EICR_RX_QUEUE2 /* Rx Queue 2 Interrupt */ 54083306792Spatrick #define IGC_EICS_RX_QUEUE3 IGC_EICR_RX_QUEUE3 /* Rx Queue 3 Interrupt */ 54183306792Spatrick #define IGC_EICS_TX_QUEUE0 IGC_EICR_TX_QUEUE0 /* Tx Queue 0 Interrupt */ 54283306792Spatrick #define IGC_EICS_TX_QUEUE1 IGC_EICR_TX_QUEUE1 /* Tx Queue 1 Interrupt */ 54383306792Spatrick #define IGC_EICS_TX_QUEUE2 IGC_EICR_TX_QUEUE2 /* Tx Queue 2 Interrupt */ 54483306792Spatrick #define IGC_EICS_TX_QUEUE3 IGC_EICR_TX_QUEUE3 /* Tx Queue 3 Interrupt */ 54583306792Spatrick #define IGC_EICS_TCP_TIMER IGC_EICR_TCP_TIMER /* TCP Timer */ 54683306792Spatrick #define IGC_EICS_OTHER IGC_EICR_OTHER /* Interrupt Cause Active */ 54783306792Spatrick 54883306792Spatrick #define IGC_EITR_ITR_INT_MASK 0x0000FFFF 54983306792Spatrick #define IGC_EITR_INTERVAL 0x00007FFC 55083306792Spatrick /* IGC_EITR_CNT_IGNR is only for 82576 and newer */ 55183306792Spatrick #define IGC_EITR_CNT_IGNR 0x80000000 /* Don't reset counters on write */ 55283306792Spatrick 55383306792Spatrick /* Transmit Descriptor Control */ 55483306792Spatrick #define IGC_TXDCTL_PTHRESH 0x0000003F /* TXDCTL Prefetch Threshold */ 55583306792Spatrick #define IGC_TXDCTL_HTHRESH 0x00003F00 /* TXDCTL Host Threshold */ 55683306792Spatrick #define IGC_TXDCTL_WTHRESH 0x003F0000 /* TXDCTL Writeback Threshold */ 55783306792Spatrick #define IGC_TXDCTL_GRAN 0x01000000 /* TXDCTL Granularity */ 55883306792Spatrick #define IGC_TXDCTL_FULL_TX_DESC_WB 0x01010000 /* GRAN=1, WTHRESH=1 */ 55983306792Spatrick #define IGC_TXDCTL_MAX_TX_DESC_PREFETCH 0x0100001F /* GRAN=1, PTHRESH=31 */ 56083306792Spatrick /* Enable the counting of descriptors still to be processed. */ 56183306792Spatrick #define IGC_TXDCTL_COUNT_DESC 0x00400000 56283306792Spatrick 56383306792Spatrick /* Flow Control Constants */ 56483306792Spatrick #define FLOW_CONTROL_ADDRESS_LOW 0x00C28001 56583306792Spatrick #define FLOW_CONTROL_ADDRESS_HIGH 0x00000100 56683306792Spatrick #define FLOW_CONTROL_TYPE 0x8808 56783306792Spatrick 56883306792Spatrick /* 802.1q VLAN Packet Size */ 56983306792Spatrick #define VLAN_TAG_SIZE 4 /* 802.3ac tag (not DMA'd) */ 57083306792Spatrick #define IGC_VLAN_FILTER_TBL_SIZE 128 /* VLAN Filter Table (4096 bits) */ 57183306792Spatrick 57283306792Spatrick /* Receive Address 57383306792Spatrick * Number of high/low register pairs in the RAR. The RAR (Receive Address 57483306792Spatrick * Registers) holds the directed and multicast addresses that we monitor. 57583306792Spatrick * Technically, we have 16 spots. However, we reserve one of these spots 57683306792Spatrick * (RAR[15]) for our directed address used by controllers with 57783306792Spatrick * manageability enabled, allowing us room for 15 multicast addresses. 57883306792Spatrick */ 57983306792Spatrick #define IGC_RAR_ENTRIES 15 58083306792Spatrick #define IGC_RAH_AV 0x80000000 /* Receive descriptor valid */ 58183306792Spatrick #define IGC_RAL_MAC_ADDR_LEN 4 58283306792Spatrick #define IGC_RAH_MAC_ADDR_LEN 2 58383306792Spatrick 58483306792Spatrick /* Error Codes */ 58583306792Spatrick #define IGC_SUCCESS 0 58683306792Spatrick #define IGC_ERR_NVM 1 58783306792Spatrick #define IGC_ERR_PHY 2 58883306792Spatrick #define IGC_ERR_CONFIG 3 58983306792Spatrick #define IGC_ERR_PARAM 4 59083306792Spatrick #define IGC_ERR_MAC_INIT 5 59183306792Spatrick #define IGC_ERR_PHY_TYPE 6 59283306792Spatrick #define IGC_ERR_RESET 9 59383306792Spatrick #define IGC_ERR_MASTER_REQUESTS_PENDING 10 59483306792Spatrick #define IGC_ERR_HOST_INTERFACE_COMMAND 11 59583306792Spatrick #define IGC_BLK_PHY_RESET 12 59683306792Spatrick #define IGC_ERR_SWFW_SYNC 13 59783306792Spatrick #define IGC_NOT_IMPLEMENTED 14 59883306792Spatrick #define IGC_ERR_MBX 15 59983306792Spatrick #define IGC_ERR_INVALID_ARGUMENT 16 60083306792Spatrick #define IGC_ERR_NO_SPACE 17 60183306792Spatrick #define IGC_ERR_NVM_PBA_SECTION 18 60283306792Spatrick #define IGC_ERR_INVM_VALUE_NOT_FOUND 20 60383306792Spatrick 60483306792Spatrick /* Loop limit on how long we wait for auto-negotiation to complete */ 60583306792Spatrick #define COPPER_LINK_UP_LIMIT 10 60683306792Spatrick #define PHY_AUTO_NEG_LIMIT 45 60783306792Spatrick /* Number of 100 microseconds we wait for PCI Express master disable */ 60883306792Spatrick #define MASTER_DISABLE_TIMEOUT 800 60983306792Spatrick /* Number of milliseconds we wait for PHY configuration done after MAC reset */ 61083306792Spatrick #define PHY_CFG_TIMEOUT 100 61183306792Spatrick /* Number of 2 milliseconds we wait for acquiring MDIO ownership. */ 61283306792Spatrick #define MDIO_OWNERSHIP_TIMEOUT 10 61383306792Spatrick /* Number of milliseconds for NVM auto read done after MAC reset. */ 61483306792Spatrick #define AUTO_READ_DONE_TIMEOUT 10 61583306792Spatrick 61683306792Spatrick /* Flow Control */ 61783306792Spatrick #define IGC_FCRTH_RTH 0x0000FFF8 /* Mask Bits[15:3] for RTH */ 61883306792Spatrick #define IGC_FCRTL_RTL 0x0000FFF8 /* Mask Bits[15:3] for RTL */ 61983306792Spatrick #define IGC_FCRTL_XONE 0x80000000 /* Enable XON frame transmission */ 62083306792Spatrick 62183306792Spatrick /* Transmit Configuration Word */ 62283306792Spatrick #define IGC_TXCW_FD 0x00000020 /* TXCW full duplex */ 62383306792Spatrick #define IGC_TXCW_PAUSE 0x00000080 /* TXCW sym pause request */ 62483306792Spatrick #define IGC_TXCW_ASM_DIR 0x00000100 /* TXCW astm pause direction */ 62583306792Spatrick #define IGC_TXCW_PAUSE_MASK 0x00000180 /* TXCW pause request mask */ 62683306792Spatrick #define IGC_TXCW_ANE 0x80000000 /* Auto-neg enable */ 62783306792Spatrick 62883306792Spatrick /* Receive Configuration Word */ 62983306792Spatrick #define IGC_RXCW_CW 0x0000ffff /* RxConfigWord mask */ 63083306792Spatrick #define IGC_RXCW_IV 0x08000000 /* Receive config invalid */ 63183306792Spatrick #define IGC_RXCW_C 0x20000000 /* Receive config */ 63283306792Spatrick #define IGC_RXCW_SYNCH 0x40000000 /* Receive config synch */ 63383306792Spatrick 63483306792Spatrick #define IGC_TSYNCTXCTL_TXTT_0 0x00000001 /* Tx timestamp reg 0 valid */ 63583306792Spatrick #define IGC_TSYNCTXCTL_ENABLED 0x00000010 /* enable Tx timestamping */ 63683306792Spatrick 63783306792Spatrick #define IGC_TSYNCRXCTL_VALID 0x00000001 /* Rx timestamp valid */ 63883306792Spatrick #define IGC_TSYNCRXCTL_TYPE_MASK 0x0000000E /* Rx type mask */ 63983306792Spatrick #define IGC_TSYNCRXCTL_TYPE_L2_V2 0x00 64083306792Spatrick #define IGC_TSYNCRXCTL_TYPE_L4_V1 0x02 64183306792Spatrick #define IGC_TSYNCRXCTL_TYPE_L2_L4_V2 0x04 64283306792Spatrick #define IGC_TSYNCRXCTL_TYPE_ALL 0x08 64383306792Spatrick #define IGC_TSYNCRXCTL_TYPE_EVENT_V2 0x0A 64483306792Spatrick #define IGC_TSYNCRXCTL_ENABLED 0x00000010 /* enable Rx timestamping */ 64583306792Spatrick #define IGC_TSYNCRXCTL_SYSCFI 0x00000020 /* Sys clock frequency */ 64683306792Spatrick 64783306792Spatrick #define IGC_TSYNCRXCFG_PTP_V1_CTRLT_MASK 0x000000FF 64883306792Spatrick #define IGC_TSYNCRXCFG_PTP_V1_SYNC_MESSAGE 0x00 64983306792Spatrick #define IGC_TSYNCRXCFG_PTP_V1_DELAY_REQ_MESSAGE 0x01 65083306792Spatrick #define IGC_TSYNCRXCFG_PTP_V1_FOLLOWUP_MESSAGE 0x02 65183306792Spatrick #define IGC_TSYNCRXCFG_PTP_V1_DELAY_RESP_MESSAGE 0x03 65283306792Spatrick #define IGC_TSYNCRXCFG_PTP_V1_MANAGEMENT_MESSAGE 0x04 65383306792Spatrick 65483306792Spatrick #define IGC_TSYNCRXCFG_PTP_V2_MSGID_MASK 0x00000F00 65583306792Spatrick #define IGC_TSYNCRXCFG_PTP_V2_SYNC_MESSAGE 0x0000 65683306792Spatrick #define IGC_TSYNCRXCFG_PTP_V2_DELAY_REQ_MESSAGE 0x0100 65783306792Spatrick #define IGC_TSYNCRXCFG_PTP_V2_PATH_DELAY_REQ_MESSAGE 0x0200 65883306792Spatrick #define IGC_TSYNCRXCFG_PTP_V2_PATH_DELAY_RESP_MESSAGE 0x0300 65983306792Spatrick #define IGC_TSYNCRXCFG_PTP_V2_FOLLOWUP_MESSAGE 0x0800 66083306792Spatrick #define IGC_TSYNCRXCFG_PTP_V2_DELAY_RESP_MESSAGE 0x0900 66183306792Spatrick #define IGC_TSYNCRXCFG_PTP_V2_PATH_DELAY_FOLLOWUP_MESSAGE 0x0A00 66283306792Spatrick #define IGC_TSYNCRXCFG_PTP_V2_ANNOUNCE_MESSAGE 0x0B00 66383306792Spatrick #define IGC_TSYNCRXCFG_PTP_V2_SIGNALLING_MESSAGE 0x0C00 66483306792Spatrick #define IGC_TSYNCRXCFG_PTP_V2_MANAGEMENT_MESSAGE 0x0D00 66583306792Spatrick 66683306792Spatrick #define IGC_TIMINCA_16NS_SHIFT 24 66783306792Spatrick #define IGC_TIMINCA_INCPERIOD_SHIFT 24 66883306792Spatrick #define IGC_TIMINCA_INCVALUE_MASK 0x00FFFFFF 66983306792Spatrick 67083306792Spatrick /* Time Sync Interrupt Cause/Mask Register Bits */ 67183306792Spatrick #define TSINTR_SYS_WRAP (1 << 0) /* SYSTIM Wrap around. */ 67283306792Spatrick #define TSINTR_TXTS (1 << 1) /* Transmit Timestamp. */ 67383306792Spatrick #define TSINTR_TT0 (1 << 3) /* Target Time 0 Trigger. */ 67483306792Spatrick #define TSINTR_TT1 (1 << 4) /* Target Time 1 Trigger. */ 67583306792Spatrick #define TSINTR_AUTT0 (1 << 5) /* Auxiliary Timestamp 0 Taken. */ 67683306792Spatrick #define TSINTR_AUTT1 (1 << 6) /* Auxiliary Timestamp 1 Taken. */ 67783306792Spatrick 67883306792Spatrick #define TSYNC_INTERRUPTS TSINTR_TXTS 67983306792Spatrick 68083306792Spatrick /* TSAUXC Configuration Bits */ 68183306792Spatrick #define TSAUXC_EN_TT0 (1 << 0) /* Enable target time 0. */ 68283306792Spatrick #define TSAUXC_EN_TT1 (1 << 1) /* Enable target time 1. */ 68383306792Spatrick #define TSAUXC_EN_CLK0 (1 << 2) /* Enable Configurable Frequency Clock 0. */ 68483306792Spatrick #define TSAUXC_ST0 (1 << 4) /* Start Clock 0 Toggle on Target Time 0. */ 68583306792Spatrick #define TSAUXC_EN_CLK1 (1 << 5) /* Enable Configurable Frequency Clock 1. */ 68683306792Spatrick #define TSAUXC_ST1 (1 << 7) /* Start Clock 1 Toggle on Target Time 1. */ 68783306792Spatrick #define TSAUXC_EN_TS0 (1 << 8) /* Enable hardware timestamp 0. */ 68883306792Spatrick #define TSAUXC_EN_TS1 (1 << 10) /* Enable hardware timestamp 0. */ 68983306792Spatrick 69083306792Spatrick /* SDP Configuration Bits */ 69183306792Spatrick #define AUX0_SEL_SDP0 (0u << 0) /* Assign SDP0 to auxiliary time stamp 0. */ 69283306792Spatrick #define AUX0_SEL_SDP1 (1u << 0) /* Assign SDP1 to auxiliary time stamp 0. */ 69383306792Spatrick #define AUX0_SEL_SDP2 (2u << 0) /* Assign SDP2 to auxiliary time stamp 0. */ 69483306792Spatrick #define AUX0_SEL_SDP3 (3u << 0) /* Assign SDP3 to auxiliary time stamp 0. */ 69583306792Spatrick #define AUX0_TS_SDP_EN (1u << 2) /* Enable auxiliary time stamp trigger 0. */ 69683306792Spatrick #define AUX1_SEL_SDP0 (0u << 3) /* Assign SDP0 to auxiliary time stamp 1. */ 69783306792Spatrick #define AUX1_SEL_SDP1 (1u << 3) /* Assign SDP1 to auxiliary time stamp 1. */ 69883306792Spatrick #define AUX1_SEL_SDP2 (2u << 3) /* Assign SDP2 to auxiliary time stamp 1. */ 69983306792Spatrick #define AUX1_SEL_SDP3 (3u << 3) /* Assign SDP3 to auxiliary time stamp 1. */ 70083306792Spatrick #define AUX1_TS_SDP_EN (1u << 5) /* Enable auxiliary time stamp trigger 1. */ 70183306792Spatrick #define TS_SDP0_EN (1u << 8) /* SDP0 is assigned to Tsync. */ 70283306792Spatrick #define TS_SDP1_EN (1u << 11) /* SDP1 is assigned to Tsync. */ 70383306792Spatrick #define TS_SDP2_EN (1u << 14) /* SDP2 is assigned to Tsync. */ 70483306792Spatrick #define TS_SDP3_EN (1u << 17) /* SDP3 is assigned to Tsync. */ 70583306792Spatrick #define TS_SDP0_SEL_TT0 (0u << 6) /* Target time 0 is output on SDP0. */ 70683306792Spatrick #define TS_SDP0_SEL_TT1 (1u << 6) /* Target time 1 is output on SDP0. */ 70783306792Spatrick #define TS_SDP1_SEL_TT0 (0u << 9) /* Target time 0 is output on SDP1. */ 70883306792Spatrick #define TS_SDP1_SEL_TT1 (1u << 9) /* Target time 1 is output on SDP1. */ 70983306792Spatrick #define TS_SDP0_SEL_FC0 (2u << 6) /* Freq clock 0 is output on SDP0. */ 71083306792Spatrick #define TS_SDP0_SEL_FC1 (3u << 6) /* Freq clock 1 is output on SDP0. */ 71183306792Spatrick #define TS_SDP1_SEL_FC0 (2u << 9) /* Freq clock 0 is output on SDP1. */ 71283306792Spatrick #define TS_SDP1_SEL_FC1 (3u << 9) /* Freq clock 1 is output on SDP1. */ 71383306792Spatrick #define TS_SDP2_SEL_TT0 (0u << 12) /* Target time 0 is output on SDP2. */ 71483306792Spatrick #define TS_SDP2_SEL_TT1 (1u << 12) /* Target time 1 is output on SDP2. */ 71583306792Spatrick #define TS_SDP2_SEL_FC0 (2u << 12) /* Freq clock 0 is output on SDP2. */ 71683306792Spatrick #define TS_SDP2_SEL_FC1 (3u << 12) /* Freq clock 1 is output on SDP2. */ 71783306792Spatrick #define TS_SDP3_SEL_TT0 (0u << 15) /* Target time 0 is output on SDP3. */ 71883306792Spatrick #define TS_SDP3_SEL_TT1 (1u << 15) /* Target time 1 is output on SDP3. */ 71983306792Spatrick #define TS_SDP3_SEL_FC0 (2u << 15) /* Freq clock 0 is output on SDP3. */ 72083306792Spatrick #define TS_SDP3_SEL_FC1 (3u << 15) /* Freq clock 1 is output on SDP3. */ 72183306792Spatrick 72283306792Spatrick #define IGC_CTRL_SDP0_DIR 0x00400000 /* SDP0 Data direction */ 72383306792Spatrick #define IGC_CTRL_SDP1_DIR 0x00800000 /* SDP1 Data direction */ 72483306792Spatrick 72583306792Spatrick /* Extended Device Control */ 72683306792Spatrick #define IGC_CTRL_EXT_SDP2_DIR 0x00000400 /* SDP2 Data direction */ 72783306792Spatrick 72883306792Spatrick /* ETQF register bit definitions */ 72983306792Spatrick #define IGC_ETQF_1588 (1 << 30) 73083306792Spatrick #define IGC_FTQF_VF_BP 0x00008000 73183306792Spatrick #define IGC_FTQF_1588_TIME_STAMP 0x08000000 73283306792Spatrick #define IGC_FTQF_MASK 0xF0000000 73383306792Spatrick #define IGC_FTQF_MASK_PROTO_BP 0x10000000 73483306792Spatrick /* Immediate Interrupt Rx (A.K.A. Low Latency Interrupt) */ 73583306792Spatrick #define IGC_IMIREXT_CTRL_BP 0x00080000 /* Bypass check of ctrl bits */ 73683306792Spatrick #define IGC_IMIREXT_SIZE_BP 0x00001000 /* Packet size bypass */ 73783306792Spatrick 73883306792Spatrick #define IGC_RXDADV_STAT_TSIP 0x08000 /* timestamp in packet */ 73983306792Spatrick #define IGC_TSICR_TXTS 0x00000002 74083306792Spatrick #define IGC_TSIM_TXTS 0x00000002 74183306792Spatrick /* TUPLE Filtering Configuration */ 74283306792Spatrick #define IGC_TTQF_DISABLE_MASK 0xF0008000 /* TTQF Disable Mask */ 74383306792Spatrick #define IGC_TTQF_QUEUE_ENABLE 0x100 /* TTQF Queue Enable Bit */ 74483306792Spatrick #define IGC_TTQF_PROTOCOL_MASK 0xFF /* TTQF Protocol Mask */ 74583306792Spatrick /* TTQF TCP Bit, shift with IGC_TTQF_PROTOCOL SHIFT */ 74683306792Spatrick #define IGC_TTQF_PROTOCOL_TCP 0x0 74783306792Spatrick /* TTQF UDP Bit, shift with IGC_TTQF_PROTOCOL_SHIFT */ 74883306792Spatrick #define IGC_TTQF_PROTOCOL_UDP 0x1 74983306792Spatrick /* TTQF SCTP Bit, shift with IGC_TTQF_PROTOCOL_SHIFT */ 75083306792Spatrick #define IGC_TTQF_PROTOCOL_SCTP 0x2 75183306792Spatrick #define IGC_TTQF_PROTOCOL_SHIFT 5 /* TTQF Protocol Shift */ 752*5eec54d3Sjsg #define IGC_TTQF_QUEUE_SHIFT 16 /* TTQF Queue Shift */ 75383306792Spatrick #define IGC_TTQF_RX_QUEUE_MASK 0x70000 /* TTQF Queue Mask */ 75483306792Spatrick #define IGC_TTQF_MASK_ENABLE 0x10000000 /* TTQF Mask Enable Bit */ 75583306792Spatrick #define IGC_IMIR_CLEAR_MASK 0xF001FFFF /* IMIR Reg Clear Mask */ 75683306792Spatrick #define IGC_IMIR_PORT_BYPASS 0x20000 /* IMIR Port Bypass Bit */ 75783306792Spatrick #define IGC_IMIR_PRIORITY_SHIFT 29 /* IMIR Priority Shift */ 75883306792Spatrick #define IGC_IMIREXT_CLEAR_MASK 0x7FFFF /* IMIREXT Reg Clear Mask */ 75983306792Spatrick 76083306792Spatrick #define IGC_MDICNFG_EXT_MDIO 0x80000000 /* MDI ext/int destination */ 76183306792Spatrick #define IGC_MDICNFG_COM_MDIO 0x40000000 /* MDI shared w/ lan 0 */ 76283306792Spatrick #define IGC_MDICNFG_PHY_MASK 0x03E00000 76383306792Spatrick #define IGC_MDICNFG_PHY_SHIFT 21 76483306792Spatrick 76583306792Spatrick #define IGC_MEDIA_PORT_COPPER 1 76683306792Spatrick #define IGC_MEDIA_PORT_OTHER 2 76783306792Spatrick #define IGC_M88E1112_AUTO_COPPER_SGMII 0x2 76883306792Spatrick #define IGC_M88E1112_AUTO_COPPER_BASEX 0x3 76983306792Spatrick #define IGC_M88E1112_STATUS_LINK 0x0004 /* Interface Link Bit */ 77083306792Spatrick #define IGC_M88E1112_MAC_CTRL_1 0x10 77183306792Spatrick #define IGC_M88E1112_MAC_CTRL_1_MODE_MASK 0x0380 /* Mode Select */ 77283306792Spatrick #define IGC_M88E1112_MAC_CTRL_1_MODE_SHIFT 7 77383306792Spatrick #define IGC_M88E1112_PAGE_ADDR 0x16 77483306792Spatrick #define IGC_M88E1112_STATUS 0x01 77583306792Spatrick 77683306792Spatrick #define IGC_THSTAT_LOW_EVENT 0x20000000 /* Low thermal threshold */ 77783306792Spatrick #define IGC_THSTAT_MID_EVENT 0x00200000 /* Mid thermal threshold */ 77883306792Spatrick #define IGC_THSTAT_HIGH_EVENT 0x00002000 /* High thermal threshold */ 77983306792Spatrick #define IGC_THSTAT_PWR_DOWN 0x00000001 /* Power Down Event */ 78083306792Spatrick #define IGC_THSTAT_LINK_THROTTLE 0x00000002 /* Link Spd Throttle Event */ 78183306792Spatrick 78283306792Spatrick /* EEE defines */ 78383306792Spatrick #define IGC_IPCNFG_EEE_2_5G_AN 0x00000010 /* IPCNFG EEE Ena 2.5G AN */ 78483306792Spatrick #define IGC_IPCNFG_EEE_1G_AN 0x00000008 /* IPCNFG EEE Ena 1G AN */ 78583306792Spatrick #define IGC_IPCNFG_EEE_100M_AN 0x00000004 /* IPCNFG EEE Ena 100M AN */ 78683306792Spatrick #define IGC_EEER_TX_LPI_EN 0x00010000 /* EEER Tx LPI Enable */ 78783306792Spatrick #define IGC_EEER_RX_LPI_EN 0x00020000 /* EEER Rx LPI Enable */ 78883306792Spatrick #define IGC_EEER_LPI_FC 0x00040000 /* EEER Ena on Flow Cntrl */ 78983306792Spatrick /* EEE status */ 79083306792Spatrick #define IGC_EEER_EEE_NEG 0x20000000 /* EEE capability nego */ 79183306792Spatrick #define IGC_EEER_RX_LPI_STATUS 0x40000000 /* Rx in LPI state */ 79283306792Spatrick #define IGC_EEER_TX_LPI_STATUS 0x80000000 /* Tx in LPI state */ 79383306792Spatrick #define IGC_EEE_LP_ADV_ADDR_I350 0x040F /* EEE LP Advertisement */ 79483306792Spatrick #define IGC_M88E1543_PAGE_ADDR 0x16 /* Page Offset Register */ 79583306792Spatrick #define IGC_M88E1543_EEE_CTRL_1 0x0 79683306792Spatrick #define IGC_M88E1543_EEE_CTRL_1_MS 0x0001 /* EEE Master/Slave */ 79783306792Spatrick #define IGC_M88E1543_FIBER_CTRL 0x0 /* Fiber Control Register */ 79883306792Spatrick #define IGC_EEE_ADV_DEV_I354 7 79983306792Spatrick #define IGC_EEE_ADV_ADDR_I354 60 80083306792Spatrick #define IGC_EEE_ADV_100_SUPPORTED (1 << 1) /* 100BaseTx EEE Supported */ 80183306792Spatrick #define IGC_EEE_ADV_1000_SUPPORTED (1 << 2) /* 1000BaseT EEE Supported */ 80283306792Spatrick #define IGC_PCS_STATUS_DEV_I354 3 80383306792Spatrick #define IGC_PCS_STATUS_ADDR_I354 1 80483306792Spatrick #define IGC_PCS_STATUS_RX_LPI_RCVD 0x0400 80583306792Spatrick #define IGC_PCS_STATUS_TX_LPI_RCVD 0x0800 80683306792Spatrick #define IGC_M88E1512_CFG_REG_1 0x0010 80783306792Spatrick #define IGC_M88E1512_CFG_REG_2 0x0011 80883306792Spatrick #define IGC_M88E1512_CFG_REG_3 0x0007 80983306792Spatrick #define IGC_M88E1512_MODE 0x0014 81083306792Spatrick #define IGC_EEE_SU_LPI_CLK_STP 0x00800000 /* EEE LPI Clock Stop */ 81183306792Spatrick #define IGC_EEE_LP_ADV_DEV_I225 7 /* EEE LP Adv Device */ 81283306792Spatrick #define IGC_EEE_LP_ADV_ADDR_I225 61 /* EEE LP Adv Register */ 81383306792Spatrick 81483306792Spatrick #define IGC_MMDAC_FUNC_DATA 0x4000 /* Data, no post increment */ 81583306792Spatrick 81683306792Spatrick /* PHY Control Register */ 81783306792Spatrick #define MII_CR_SPEED_SELECT_MSB 0x0040 /* bits 6,13: 10=1000, 01=100, 00=10 */ 81883306792Spatrick #define MII_CR_COLL_TEST_ENABLE 0x0080 /* Collision test enable */ 81983306792Spatrick #define MII_CR_FULL_DUPLEX 0x0100 /* FDX =1, half duplex =0 */ 82083306792Spatrick #define MII_CR_RESTART_AUTO_NEG 0x0200 /* Restart auto negotiation */ 82183306792Spatrick #define MII_CR_ISOLATE 0x0400 /* Isolate PHY from MII */ 82283306792Spatrick #define MII_CR_POWER_DOWN 0x0800 /* Power down */ 82383306792Spatrick #define MII_CR_AUTO_NEG_EN 0x1000 /* Auto Neg Enable */ 82483306792Spatrick #define MII_CR_SPEED_SELECT_LSB 0x2000 /* bits 6,13: 10=1000, 01=100, 00=10 */ 82583306792Spatrick #define MII_CR_LOOPBACK 0x4000 /* 0 = normal, 1 = loopback */ 82683306792Spatrick #define MII_CR_RESET 0x8000 /* 0 = normal, 1 = PHY reset */ 82783306792Spatrick #define MII_CR_SPEED_1000 0x0040 82883306792Spatrick #define MII_CR_SPEED_100 0x2000 82983306792Spatrick #define MII_CR_SPEED_10 0x0000 83083306792Spatrick 83183306792Spatrick /* PHY Status Register */ 83283306792Spatrick #define MII_SR_EXTENDED_CAPS 0x0001 /* Extended register capabilities */ 83383306792Spatrick #define MII_SR_JABBER_DETECT 0x0002 /* Jabber Detected */ 83483306792Spatrick #define MII_SR_LINK_STATUS 0x0004 /* Link Status 1 = link */ 83583306792Spatrick #define MII_SR_AUTONEG_CAPS 0x0008 /* Auto Neg Capable */ 83683306792Spatrick #define MII_SR_REMOTE_FAULT 0x0010 /* Remote Fault Detect */ 83783306792Spatrick #define MII_SR_AUTONEG_COMPLETE 0x0020 /* Auto Neg Complete */ 83883306792Spatrick #define MII_SR_PREAMBLE_SUPPRESS 0x0040 /* Preamble may be suppressed */ 83983306792Spatrick #define MII_SR_EXTENDED_STATUS 0x0100 /* Ext. status info in Reg 0x0F */ 84083306792Spatrick #define MII_SR_100T2_HD_CAPS 0x0200 /* 100T2 Half Duplex Capable */ 84183306792Spatrick #define MII_SR_100T2_FD_CAPS 0x0400 /* 100T2 Full Duplex Capable */ 84283306792Spatrick #define MII_SR_10T_HD_CAPS 0x0800 /* 10T Half Duplex Capable */ 84383306792Spatrick #define MII_SR_10T_FD_CAPS 0x1000 /* 10T Full Duplex Capable */ 84483306792Spatrick #define MII_SR_100X_HD_CAPS 0x2000 /* 100X Half Duplex Capable */ 84583306792Spatrick #define MII_SR_100X_FD_CAPS 0x4000 /* 100X Full Duplex Capable */ 84683306792Spatrick #define MII_SR_100T4_CAPS 0x8000 /* 100T4 Capable */ 84783306792Spatrick 84883306792Spatrick /* Autoneg Advertisement Register */ 84983306792Spatrick #define NWAY_AR_SELECTOR_FIELD 0x0001 /* indicates IEEE 802.3 CSMA/CD */ 85083306792Spatrick #define NWAY_AR_10T_HD_CAPS 0x0020 /* 10T Half Duplex Capable */ 85183306792Spatrick #define NWAY_AR_10T_FD_CAPS 0x0040 /* 10T Full Duplex Capable */ 85283306792Spatrick #define NWAY_AR_100TX_HD_CAPS 0x0080 /* 100TX Half Duplex Capable */ 85383306792Spatrick #define NWAY_AR_100TX_FD_CAPS 0x0100 /* 100TX Full Duplex Capable */ 85483306792Spatrick #define NWAY_AR_100T4_CAPS 0x0200 /* 100T4 Capable */ 85583306792Spatrick #define NWAY_AR_PAUSE 0x0400 /* Pause operation desired */ 85683306792Spatrick #define NWAY_AR_ASM_DIR 0x0800 /* Asymmetric Pause Direction bit */ 85783306792Spatrick #define NWAY_AR_REMOTE_FAULT 0x2000 /* Remote Fault detected */ 85883306792Spatrick #define NWAY_AR_NEXT_PAGE 0x8000 /* Next Page ability supported */ 85983306792Spatrick 86083306792Spatrick /* Link Partner Ability Register (Base Page) */ 86183306792Spatrick #define NWAY_LPAR_SELECTOR_FIELD 0x0000 /* LP protocol selector field */ 86283306792Spatrick #define NWAY_LPAR_10T_HD_CAPS 0x0020 /* LP 10T Half Dplx Capable */ 86383306792Spatrick #define NWAY_LPAR_10T_FD_CAPS 0x0040 /* LP 10T Full Dplx Capable */ 86483306792Spatrick #define NWAY_LPAR_100TX_HD_CAPS 0x0080 /* LP 100TX Half Dplx Capable */ 86583306792Spatrick #define NWAY_LPAR_100TX_FD_CAPS 0x0100 /* LP 100TX Full Dplx Capable */ 86683306792Spatrick #define NWAY_LPAR_100T4_CAPS 0x0200 /* LP is 100T4 Capable */ 86783306792Spatrick #define NWAY_LPAR_PAUSE 0x0400 /* LP Pause operation desired */ 86883306792Spatrick #define NWAY_LPAR_ASM_DIR 0x0800 /* LP Asym Pause Direction bit */ 86983306792Spatrick #define NWAY_LPAR_REMOTE_FAULT 0x2000 /* LP detected Remote Fault */ 87083306792Spatrick #define NWAY_LPAR_ACKNOWLEDGE 0x4000 /* LP rx'd link code word */ 87183306792Spatrick #define NWAY_LPAR_NEXT_PAGE 0x8000 /* Next Page ability supported */ 87283306792Spatrick 87383306792Spatrick /* Autoneg Expansion Register */ 87483306792Spatrick #define NWAY_ER_LP_NWAY_CAPS 0x0001 /* LP has Auto Neg Capability */ 87583306792Spatrick #define NWAY_ER_PAGE_RXD 0x0002 /* LP 10T Half Dplx Capable */ 87683306792Spatrick #define NWAY_ER_NEXT_PAGE_CAPS 0x0004 /* LP 10T Full Dplx Capable */ 87783306792Spatrick #define NWAY_ER_LP_NEXT_PAGE_CAPS 0x0008 /* LP 100TX Half Dplx Capable */ 87883306792Spatrick #define NWAY_ER_PAR_DETECT_FAULT 0x0010 /* LP 100TX Full Dplx Capable */ 87983306792Spatrick 88083306792Spatrick /* 1000BASE-T Control Register */ 88183306792Spatrick #define CR_1000T_ASYM_PAUSE 0x0080 /* Advertise asymmetric pause bit */ 88283306792Spatrick #define CR_1000T_HD_CAPS 0x0100 /* Advertise 1000T HD capability */ 88383306792Spatrick #define CR_1000T_FD_CAPS 0x0200 /* Advertise 1000T FD capability */ 88483306792Spatrick /* 1=Repeater/switch device port 0=DTE device */ 88583306792Spatrick #define CR_1000T_REPEATER_DTE 0x0400 88683306792Spatrick /* 1=Configure PHY as Master 0=Configure PHY as Slave */ 88783306792Spatrick #define CR_1000T_MS_VALUE 0x0800 88883306792Spatrick /* 1=Master/Slave manual config value 0=Automatic Master/Slave config */ 88983306792Spatrick #define CR_1000T_MS_ENABLE 0x1000 89083306792Spatrick #define CR_1000T_TEST_MODE_NORMAL 0x0000 /* Normal Operation */ 89183306792Spatrick #define CR_1000T_TEST_MODE_1 0x2000 /* Transmit Waveform test */ 89283306792Spatrick #define CR_1000T_TEST_MODE_2 0x4000 /* Master Transmit Jitter test */ 89383306792Spatrick #define CR_1000T_TEST_MODE_3 0x6000 /* Slave Transmit Jitter test */ 89483306792Spatrick #define CR_1000T_TEST_MODE_4 0x8000 /* Transmitter Distortion test */ 89583306792Spatrick 89683306792Spatrick /* 1000BASE-T Status Register */ 89783306792Spatrick #define SR_1000T_IDLE_ERROR_CNT 0x00FF /* Num idle err since last rd */ 89883306792Spatrick #define SR_1000T_ASYM_PAUSE_DIR 0x0100 /* LP asym pause direction bit */ 89983306792Spatrick #define SR_1000T_LP_HD_CAPS 0x0400 /* LP is 1000T HD capable */ 90083306792Spatrick #define SR_1000T_LP_FD_CAPS 0x0800 /* LP is 1000T FD capable */ 90183306792Spatrick #define SR_1000T_REMOTE_RX_STATUS 0x1000 /* Remote receiver OK */ 90283306792Spatrick #define SR_1000T_LOCAL_RX_STATUS 0x2000 /* Local receiver OK */ 90383306792Spatrick #define SR_1000T_MS_CONFIG_RES 0x4000 /* 1=Local Tx Master, 0=Slave */ 90483306792Spatrick #define SR_1000T_MS_CONFIG_FAULT 0x8000 /* Master/Slave config fault */ 90583306792Spatrick 90683306792Spatrick #define SR_1000T_PHY_EXCESSIVE_IDLE_ERR_COUNT 5 90783306792Spatrick 90883306792Spatrick /* PHY 1000 MII Register/Bit Definitions */ 90983306792Spatrick /* PHY Registers defined by IEEE */ 91083306792Spatrick #define PHY_CONTROL 0x00 /* Control Register */ 91183306792Spatrick #define PHY_STATUS 0x01 /* Status Register */ 91283306792Spatrick #define PHY_ID1 0x02 /* Phy Id Reg (word 1) */ 91383306792Spatrick #define PHY_ID2 0x03 /* Phy Id Reg (word 2) */ 91483306792Spatrick #define PHY_AUTONEG_ADV 0x04 /* Autoneg Advertisement */ 91583306792Spatrick #define PHY_LP_ABILITY 0x05 /* Link Partner Ability (Base Page) */ 91683306792Spatrick #define PHY_AUTONEG_EXP 0x06 /* Autoneg Expansion Reg */ 91783306792Spatrick #define PHY_NEXT_PAGE_TX 0x07 /* Next Page Tx */ 91883306792Spatrick #define PHY_LP_NEXT_PAGE 0x08 /* Link Partner Next Page */ 91983306792Spatrick #define PHY_1000T_CTRL 0x09 /* 1000Base-T Control Reg */ 92083306792Spatrick #define PHY_1000T_STATUS 0x0A /* 1000Base-T Status Reg */ 92183306792Spatrick #define PHY_EXT_STATUS 0x0F /* Extended Status Reg */ 92283306792Spatrick 92383306792Spatrick /* PHY GPY 211 registers */ 92483306792Spatrick #define STANDARD_AN_REG_MASK 0x0007 /* MMD */ 92583306792Spatrick #define ANEG_MULTIGBT_AN_CTRL 0x0020 /* MULTI GBT AN Control Register */ 92683306792Spatrick #define MMD_DEVADDR_SHIFT 16 /* Shift MMD to higher bits */ 92783306792Spatrick #define CR_2500T_FD_CAPS 0x0080 /* Advertise 2500T FD capability */ 92883306792Spatrick 92983306792Spatrick #define PHY_CONTROL_LB 0x4000 /* PHY Loopback bit */ 93083306792Spatrick 93183306792Spatrick /* NVM Control */ 93283306792Spatrick #define IGC_EECD_SK 0x00000001 /* NVM Clock */ 93383306792Spatrick #define IGC_EECD_CS 0x00000002 /* NVM Chip Select */ 93483306792Spatrick #define IGC_EECD_DI 0x00000004 /* NVM Data In */ 93583306792Spatrick #define IGC_EECD_DO 0x00000008 /* NVM Data Out */ 93683306792Spatrick #define IGC_EECD_REQ 0x00000040 /* NVM Access Request */ 93783306792Spatrick #define IGC_EECD_GNT 0x00000080 /* NVM Access Grant */ 93883306792Spatrick #define IGC_EECD_PRES 0x00000100 /* NVM Present */ 93983306792Spatrick #define IGC_EECD_SIZE 0x00000200 /* NVM Size (0=64 word 1=256 word) */ 94083306792Spatrick /* NVM Addressing bits based on type 0=small, 1=large */ 94183306792Spatrick #define IGC_EECD_ADDR_BITS 0x00000400 94283306792Spatrick #define IGC_NVM_GRANT_ATTEMPTS 1000 /* NVM # attempts to gain grant */ 94383306792Spatrick #define IGC_EECD_AUTO_RD 0x00000200 /* NVM Auto Read done */ 94483306792Spatrick #define IGC_EECD_SIZE_EX_MASK 0x00007800 /* NVM Size */ 94583306792Spatrick #define IGC_EECD_SIZE_EX_SHIFT 11 94683306792Spatrick #define IGC_EECD_FLUPD 0x00080000 /* Update FLASH */ 94783306792Spatrick #define IGC_EECD_AUPDEN 0x00100000 /* Ena Auto FLASH update */ 94883306792Spatrick #define IGC_EECD_SEC1VAL 0x00400000 /* Sector One Valid */ 94983306792Spatrick #define IGC_EECD_SEC1VAL_VALID_MASK (IGC_EECD_AUTO_RD | IGC_EECD_PRES) 95083306792Spatrick 95183306792Spatrick #define IGC_EECD_FLUPD_I225 0x00800000 /* Update FLASH */ 95283306792Spatrick #define IGC_EECD_FLUDONE_I225 0x04000000 /* Update FLASH done */ 95383306792Spatrick #define IGC_EECD_FLASH_DETECTED_I225 0x00080000 /* FLASH detected */ 95483306792Spatrick #define IGC_FLUDONE_ATTEMPTS 20000 95583306792Spatrick #define IGC_EERD_EEWR_MAX_COUNT 512 /* buffered EEPROM words rw */ 95683306792Spatrick #define IGC_EECD_SEC1VAL_I225 0x02000000 /* Sector One Valid */ 95783306792Spatrick #define IGC_FLSECU_BLK_SW_ACCESS_I225 0x00000004 /* Block SW access */ 95883306792Spatrick #define IGC_FWSM_FW_VALID_I225 0x8000 /* FW valid bit */ 95983306792Spatrick 96083306792Spatrick #define IGC_NVM_RW_REG_DATA 16 /* Offset to data in NVM read/write regs */ 96183306792Spatrick #define IGC_NVM_RW_REG_DONE 2 /* Offset to READ/WRITE done bit */ 96283306792Spatrick #define IGC_NVM_RW_REG_START 1 /* Start operation */ 96383306792Spatrick #define IGC_NVM_RW_ADDR_SHIFT 2 /* Shift to the address bits */ 96483306792Spatrick #define IGC_NVM_POLL_WRITE 1 /* Flag for polling for write complete */ 96583306792Spatrick #define IGC_NVM_POLL_READ 0 /* Flag for polling for read complete */ 96683306792Spatrick #define IGC_FLASH_UPDATES 2000 96783306792Spatrick 96883306792Spatrick /* NVM Word Offsets */ 96983306792Spatrick #define NVM_COMPAT 0x0003 97083306792Spatrick #define NVM_ID_LED_SETTINGS 0x0004 97183306792Spatrick #define NVM_FUTURE_INIT_WORD1 0x0019 97283306792Spatrick #define NVM_COMPAT_VALID_CSUM 0x0001 97383306792Spatrick #define NVM_FUTURE_INIT_WORD1_VALID_CSUM 0x0040 97483306792Spatrick 97583306792Spatrick #define NVM_INIT_CONTROL2_REG 0x000F 97683306792Spatrick #define NVM_INIT_CONTROL3_PORT_B 0x0014 97783306792Spatrick #define NVM_INIT_3GIO_3 0x001A 97883306792Spatrick #define NVM_SWDEF_PINS_CTRL_PORT_0 0x0020 97983306792Spatrick #define NVM_INIT_CONTROL3_PORT_A 0x0024 98083306792Spatrick #define NVM_CFG 0x0012 98183306792Spatrick #define NVM_ALT_MAC_ADDR_PTR 0x0037 98283306792Spatrick #define NVM_CHECKSUM_REG 0x003F 98383306792Spatrick 98483306792Spatrick #define IGC_NVM_CFG_DONE_PORT_0 0x040000 /* MNG config cycle done */ 98583306792Spatrick #define IGC_NVM_CFG_DONE_PORT_1 0x080000 /* ...for second port */ 98683306792Spatrick 98783306792Spatrick /* Mask bits for fields in Word 0x0f of the NVM */ 98883306792Spatrick #define NVM_WORD0F_PAUSE_MASK 0x3000 98983306792Spatrick #define NVM_WORD0F_PAUSE 0x1000 99083306792Spatrick #define NVM_WORD0F_ASM_DIR 0x2000 99183306792Spatrick 99283306792Spatrick /* Mask bits for fields in Word 0x1a of the NVM */ 99383306792Spatrick #define NVM_WORD1A_ASPM_MASK 0x000C 99483306792Spatrick 99583306792Spatrick /* Mask bits for fields in Word 0x03 of the EEPROM */ 99683306792Spatrick #define NVM_COMPAT_LOM 0x0800 99783306792Spatrick 99883306792Spatrick /* length of string needed to store PBA number */ 99983306792Spatrick #define IGC_PBANUM_LENGTH 11 100083306792Spatrick 100183306792Spatrick /* For checksumming, the sum of all words in the NVM should equal 0xBABA. */ 100283306792Spatrick #define NVM_SUM 0xBABA 100383306792Spatrick 100483306792Spatrick /* PBA (printed board assembly) number words */ 100583306792Spatrick #define NVM_PBA_OFFSET_0 8 100683306792Spatrick #define NVM_PBA_OFFSET_1 9 100783306792Spatrick #define NVM_PBA_PTR_GUARD 0xFAFA 100883306792Spatrick #define NVM_WORD_SIZE_BASE_SHIFT 6 100983306792Spatrick 101083306792Spatrick /* NVM Commands - Microwire */ 101183306792Spatrick #define NVM_READ_OPCODE_MICROWIRE 0x6 /* NVM read opcode */ 101283306792Spatrick #define NVM_WRITE_OPCODE_MICROWIRE 0x5 /* NVM write opcode */ 101383306792Spatrick #define NVM_ERASE_OPCODE_MICROWIRE 0x7 /* NVM erase opcode */ 101483306792Spatrick #define NVM_EWEN_OPCODE_MICROWIRE 0x13 /* NVM erase/write enable */ 101583306792Spatrick #define NVM_EWDS_OPCODE_MICROWIRE 0x10 /* NVM erase/write disable */ 101683306792Spatrick 101783306792Spatrick /* NVM Commands - SPI */ 101883306792Spatrick #define NVM_MAX_RETRY_SPI 5000 /* Max wait of 5ms, for RDY signal */ 101983306792Spatrick #define NVM_READ_OPCODE_SPI 0x03 /* NVM read opcode */ 102083306792Spatrick #define NVM_WRITE_OPCODE_SPI 0x02 /* NVM write opcode */ 102183306792Spatrick #define NVM_A8_OPCODE_SPI 0x08 /* opcode bit-3 = address bit-8 */ 102283306792Spatrick #define NVM_WREN_OPCODE_SPI 0x06 /* NVM set Write Enable latch */ 102383306792Spatrick #define NVM_RDSR_OPCODE_SPI 0x05 /* NVM read Status register */ 102483306792Spatrick 102583306792Spatrick /* SPI NVM Status Register */ 102683306792Spatrick #define NVM_STATUS_RDY_SPI 0x01 102783306792Spatrick 102883306792Spatrick /* Word definitions for ID LED Settings */ 102983306792Spatrick #define ID_LED_RESERVED_0000 0x0000 103083306792Spatrick #define ID_LED_RESERVED_FFFF 0xFFFF 103183306792Spatrick #define ID_LED_DEFAULT ((ID_LED_OFF1_ON2 << 12) | \ 103283306792Spatrick (ID_LED_OFF1_OFF2 << 8) | \ 103383306792Spatrick (ID_LED_DEF1_DEF2 << 4) | \ 103483306792Spatrick (ID_LED_DEF1_DEF2)) 103583306792Spatrick #define ID_LED_DEF1_DEF2 0x1 103683306792Spatrick #define ID_LED_DEF1_ON2 0x2 103783306792Spatrick #define ID_LED_DEF1_OFF2 0x3 103883306792Spatrick #define ID_LED_ON1_DEF2 0x4 103983306792Spatrick #define ID_LED_ON1_ON2 0x5 104083306792Spatrick #define ID_LED_ON1_OFF2 0x6 104183306792Spatrick #define ID_LED_OFF1_DEF2 0x7 104283306792Spatrick #define ID_LED_OFF1_ON2 0x8 104383306792Spatrick #define ID_LED_OFF1_OFF2 0x9 104483306792Spatrick 104583306792Spatrick #define IGP_ACTIVITY_LED_MASK 0xFFFFF0FF 104683306792Spatrick #define IGP_ACTIVITY_LED_ENABLE 0x0300 104783306792Spatrick #define IGP_LED3_MODE 0x07000000 104883306792Spatrick 104983306792Spatrick /* PCI/PCI-X/PCI-EX Config space */ 105083306792Spatrick #define PCIX_COMMAND_REGISTER 0xE6 105183306792Spatrick #define PCIX_STATUS_REGISTER_LO 0xE8 105283306792Spatrick #define PCIX_STATUS_REGISTER_HI 0xEA 105383306792Spatrick #define PCI_HEADER_TYPE_REGISTER 0x0E 105483306792Spatrick #define PCIE_LINK_STATUS 0x12 105583306792Spatrick 105683306792Spatrick #define PCIX_COMMAND_MMRBC_MASK 0x000C 105783306792Spatrick #define PCIX_COMMAND_MMRBC_SHIFT 0x2 105883306792Spatrick #define PCIX_STATUS_HI_MMRBC_MASK 0x0060 105983306792Spatrick #define PCIX_STATUS_HI_MMRBC_SHIFT 0x5 106083306792Spatrick #define PCIX_STATUS_HI_MMRBC_4K 0x3 106183306792Spatrick #define PCIX_STATUS_HI_MMRBC_2K 0x2 106283306792Spatrick #define PCIX_STATUS_LO_FUNC_MASK 0x7 106383306792Spatrick #define PCI_HEADER_TYPE_MULTIFUNC 0x80 106483306792Spatrick #define PCIE_LINK_WIDTH_MASK 0x3F0 106583306792Spatrick #define PCIE_LINK_WIDTH_SHIFT 4 106683306792Spatrick #define PCIE_LINK_SPEED_MASK 0x0F 106783306792Spatrick #define PCIE_LINK_SPEED_2500 0x01 106883306792Spatrick #define PCIE_LINK_SPEED_5000 0x02 106983306792Spatrick 107083306792Spatrick #define PHY_REVISION_MASK 0xFFFFFFF0 107183306792Spatrick #define MAX_PHY_REG_ADDRESS 0x1F /* 5 bit address bus (0-0x1F) */ 107283306792Spatrick #define MAX_PHY_MULTI_PAGE_REG 0xF 107383306792Spatrick 107483306792Spatrick /* Bit definitions for valid PHY IDs. 107583306792Spatrick * I = Integrated 107683306792Spatrick * E = External 107783306792Spatrick */ 107883306792Spatrick #define M88IGC_E_PHY_ID 0x01410C50 107983306792Spatrick #define M88IGC_I_PHY_ID 0x01410C30 108083306792Spatrick #define M88E1011_I_PHY_ID 0x01410C20 108183306792Spatrick #define IGP01IGC_I_PHY_ID 0x02A80380 108283306792Spatrick #define M88E1111_I_PHY_ID 0x01410CC0 108383306792Spatrick #define GG82563_E_PHY_ID 0x01410CA0 108483306792Spatrick #define IGP03IGC_E_PHY_ID 0x02A80390 108583306792Spatrick #define IFE_E_PHY_ID 0x02A80330 108683306792Spatrick #define IFE_PLUS_E_PHY_ID 0x02A80320 108783306792Spatrick #define IFE_C_E_PHY_ID 0x02A80310 108883306792Spatrick #define I225_I_PHY_ID 0x67C9DC00 108983306792Spatrick 109083306792Spatrick /* M88IGC Specific Registers */ 109183306792Spatrick #define M88IGC_PHY_SPEC_CTRL 0x10 /* PHY Specific Control Reg */ 109283306792Spatrick #define M88IGC_PHY_SPEC_STATUS 0x11 /* PHY Specific Status Reg */ 109383306792Spatrick #define M88IGC_EXT_PHY_SPEC_CTRL 0x14 /* Extended PHY Specific Cntrl */ 109483306792Spatrick #define M88IGC_RX_ERR_CNTR 0x15 /* Receive Error Counter */ 109583306792Spatrick 109683306792Spatrick #define M88IGC_PHY_PAGE_SELECT 0x1D /* Reg 29 for pg number setting */ 109783306792Spatrick #define M88IGC_PHY_GEN_CONTROL 0x1E /* meaning depends on reg 29 */ 109883306792Spatrick 109983306792Spatrick /* M88IGC PHY Specific Control Register */ 110083306792Spatrick #define M88IGC_PSCR_POLARITY_REVERSAL 0x0002 /* 1=Polarity Reverse enabled */ 110183306792Spatrick /* MDI Crossover Mode bits 6:5 Manual MDI configuration */ 110283306792Spatrick #define M88IGC_PSCR_MDI_MANUAL_MODE 0x0000 110383306792Spatrick #define M88IGC_PSCR_MDIX_MANUAL_MODE 0x0020 /* Manual MDIX configuration */ 110483306792Spatrick /* 1000BASE-T: Auto crossover, 100BASE-TX/10BASE-T: MDI Mode */ 110583306792Spatrick #define M88IGC_PSCR_AUTO_X_1000T 0x0040 110683306792Spatrick /* Auto crossover enabled all speeds */ 110783306792Spatrick #define M88IGC_PSCR_AUTO_X_MODE 0x0060 110883306792Spatrick #define M88IGC_PSCR_ASSERT_CRS_ON_TX 0x0800 /* 1=Assert CRS on Tx */ 110983306792Spatrick 111083306792Spatrick /* M88IGC PHY Specific Status Register */ 111183306792Spatrick #define M88IGC_PSSR_REV_POLARITY 0x0002 /* 1=Polarity reversed */ 111283306792Spatrick #define M88IGC_PSSR_DOWNSHIFT 0x0020 /* 1=Downshifted */ 111383306792Spatrick #define M88IGC_PSSR_MDIX 0x0040 /* 1=MDIX; 0=MDI */ 111483306792Spatrick /* 0 = <50M 111583306792Spatrick * 1 = 50-80M 111683306792Spatrick * 2 = 80-110M 111783306792Spatrick * 3 = 110-140M 111883306792Spatrick * 4 = >140M 111983306792Spatrick */ 112083306792Spatrick #define M88IGC_PSSR_CABLE_LENGTH 0x0380 112183306792Spatrick #define M88IGC_PSSR_LINK 0x0400 /* 1=Link up, 0=Link down */ 112283306792Spatrick #define M88IGC_PSSR_SPD_DPLX_RESOLVED 0x0800 /* 1=Speed & Duplex resolved */ 112383306792Spatrick #define M88IGC_PSSR_SPEED 0xC000 /* Speed, bits 14:15 */ 112483306792Spatrick #define M88IGC_PSSR_1000MBS 0x8000 /* 10=1000Mbs */ 112583306792Spatrick 112683306792Spatrick #define M88IGC_PSSR_CABLE_LENGTH_SHIFT 7 112783306792Spatrick 112883306792Spatrick /* Number of times we will attempt to autonegotiate before downshifting if we 112983306792Spatrick * are the master 113083306792Spatrick */ 113183306792Spatrick #define M88IGC_EPSCR_MASTER_DOWNSHIFT_MASK 0x0C00 113283306792Spatrick #define M88IGC_EPSCR_MASTER_DOWNSHIFT_1X 0x0000 113383306792Spatrick /* Number of times we will attempt to autonegotiate before downshifting if we 113483306792Spatrick * are the slave 113583306792Spatrick */ 113683306792Spatrick #define M88IGC_EPSCR_SLAVE_DOWNSHIFT_MASK 0x0300 113783306792Spatrick #define M88IGC_EPSCR_SLAVE_DOWNSHIFT_1X 0x0100 113883306792Spatrick #define M88IGC_EPSCR_TX_CLK_25 0x0070 /* 25 MHz TX_CLK */ 113983306792Spatrick 114083306792Spatrick 114183306792Spatrick /* M88EC018 Rev 2 specific DownShift settings */ 114283306792Spatrick #define M88EC018_EPSCR_DOWNSHIFT_COUNTER_MASK 0x0E00 114383306792Spatrick #define M88EC018_EPSCR_DOWNSHIFT_COUNTER_5X 0x0800 114483306792Spatrick 114583306792Spatrick /* Bits... 114683306792Spatrick * 15-5: page 114783306792Spatrick * 4-0: register offset 114883306792Spatrick */ 114983306792Spatrick #define GG82563_PAGE_SHIFT 5 115083306792Spatrick #define GG82563_REG(page, reg) \ 115183306792Spatrick (((page) << GG82563_PAGE_SHIFT) | ((reg) & MAX_PHY_REG_ADDRESS)) 115283306792Spatrick #define GG82563_MIN_ALT_REG 30 115383306792Spatrick 115483306792Spatrick /* GG82563 Specific Registers */ 115583306792Spatrick #define GG82563_PHY_SPEC_CTRL GG82563_REG(0, 16) /* PHY Spec Cntrl */ 115683306792Spatrick #define GG82563_PHY_PAGE_SELECT GG82563_REG(0, 22) /* Page Select */ 115783306792Spatrick #define GG82563_PHY_SPEC_CTRL_2 GG82563_REG(0, 26) /* PHY Spec Cntrl2 */ 115883306792Spatrick #define GG82563_PHY_PAGE_SELECT_ALT GG82563_REG(0, 29) /* Alt Page Select */ 115983306792Spatrick 116083306792Spatrick /* MAC Specific Control Register */ 116183306792Spatrick #define GG82563_PHY_MAC_SPEC_CTRL GG82563_REG(2, 21) 116283306792Spatrick 116383306792Spatrick #define GG82563_PHY_DSP_DISTANCE GG82563_REG(5, 26) /* DSP Distance */ 116483306792Spatrick 116583306792Spatrick /* Page 193 - Port Control Registers */ 116683306792Spatrick /* Kumeran Mode Control */ 116783306792Spatrick #define GG82563_PHY_KMRN_MODE_CTRL GG82563_REG(193, 16) 116883306792Spatrick #define GG82563_PHY_PWR_MGMT_CTRL GG82563_REG(193, 20) /* Pwr Mgt Ctrl */ 116983306792Spatrick 117083306792Spatrick /* Page 194 - KMRN Registers */ 117183306792Spatrick #define GG82563_PHY_INBAND_CTRL GG82563_REG(194, 18) /* Inband Ctrl */ 117283306792Spatrick 117383306792Spatrick /* MDI Control */ 117483306792Spatrick #define IGC_MDIC_DATA_MASK 0x0000FFFF 117583306792Spatrick #define IGC_MDIC_INT_EN 0x20000000 117683306792Spatrick #define IGC_MDIC_REG_MASK 0x001F0000 117783306792Spatrick #define IGC_MDIC_REG_SHIFT 16 117883306792Spatrick #define IGC_MDIC_PHY_SHIFT 21 117983306792Spatrick #define IGC_MDIC_OP_WRITE 0x04000000 118083306792Spatrick #define IGC_MDIC_OP_READ 0x08000000 118183306792Spatrick #define IGC_MDIC_READY 0x10000000 118283306792Spatrick #define IGC_MDIC_ERROR 0x40000000 118383306792Spatrick 118483306792Spatrick #define IGC_N0_QUEUE -1 118583306792Spatrick 118683306792Spatrick #define IGC_MAX_MAC_HDR_LEN 127 118783306792Spatrick #define IGC_MAX_NETWORK_HDR_LEN 511 118883306792Spatrick 118983306792Spatrick #define IGC_VLANPQF_QUEUE_SEL(_n, q_idx) ((q_idx) << ((_n) * 4)) 119083306792Spatrick #define IGC_VLANPQF_P_VALID(_n) (0x1 << (3 + (_n) * 4)) 119183306792Spatrick #define IGC_VLANPQF_QUEUE_MASK 0x03 119283306792Spatrick #define IGC_VFTA_BLOCK_SIZE 8 119383306792Spatrick /* SerDes Control */ 119483306792Spatrick #define IGC_GEN_POLL_TIMEOUT 640 119583306792Spatrick 119683306792Spatrick /* DMA Coalescing register fields */ 119783306792Spatrick /* DMA Coalescing Watchdog Timer */ 119883306792Spatrick #define IGC_DMACR_DMACWT_MASK 0x00003FFF 119983306792Spatrick /* DMA Coalescing Rx Threshold */ 120083306792Spatrick #define IGC_DMACR_DMACTHR_MASK 0x00FF0000 120183306792Spatrick #define IGC_DMACR_DMACTHR_SHIFT 16 120283306792Spatrick /* Lx when no PCIe transactions */ 120383306792Spatrick #define IGC_DMACR_DMAC_LX_MASK 0x30000000 120483306792Spatrick #define IGC_DMACR_DMAC_LX_SHIFT 28 120583306792Spatrick #define IGC_DMACR_DMAC_EN 0x80000000 /* Enable DMA Coalescing */ 120683306792Spatrick /* DMA Coalescing BMC-to-OS Watchdog Enable */ 120783306792Spatrick #define IGC_DMACR_DC_BMC2OSW_EN 0x00008000 120883306792Spatrick 120983306792Spatrick /* DMA Coalescing Transmit Threshold */ 121083306792Spatrick #define IGC_DMCTXTH_DMCTTHR_MASK 0x00000FFF 121183306792Spatrick 121283306792Spatrick #define IGC_DMCTLX_TTLX_MASK 0x00000FFF /* Time to LX request */ 121383306792Spatrick 121483306792Spatrick /* Rx Traffic Rate Threshold */ 121583306792Spatrick #define IGC_DMCRTRH_UTRESH_MASK 0x0007FFFF 121683306792Spatrick /* Rx packet rate in current window */ 121783306792Spatrick #define IGC_DMCRTRH_LRPRCW 0x80000000 121883306792Spatrick 121983306792Spatrick /* DMA Coal Rx Traffic Current Count */ 122083306792Spatrick #define IGC_DMCCNT_CCOUNT_MASK 0x01FFFFFF 122183306792Spatrick 122283306792Spatrick /* Flow ctrl Rx Threshold High val */ 122383306792Spatrick #define IGC_FCRTC_RTH_COAL_MASK 0x0003FFF0 122483306792Spatrick #define IGC_FCRTC_RTH_COAL_SHIFT 4 122583306792Spatrick /* Lx power decision based on DMA coal */ 122683306792Spatrick #define IGC_PCIEMISC_LX_DECISION 0x00000080 122783306792Spatrick 122883306792Spatrick #define IGC_RXPBS_CFG_TS_EN 0x80000000 /* Timestamp in Rx buffer */ 122983306792Spatrick #define IGC_RXPBS_SIZE_I210_MASK 0x0000003F /* Rx packet buffer size */ 123083306792Spatrick #define IGC_TXPB0S_SIZE_I210_MASK 0x0000003F /* Tx packet buffer 0 size */ 123183306792Spatrick #define I210_RXPBSIZE_DEFAULT 0x000000A2 /* RXPBSIZE default */ 123283306792Spatrick #define I210_TXPBSIZE_DEFAULT 0x04000014 /* TXPBSIZE default */ 123383306792Spatrick 123483306792Spatrick #define IGC_LTRC_EEEMS_EN 0x00000020 /* Enable EEE LTR max send */ 123583306792Spatrick /* Minimum time for 1000BASE-T where no data will be transmit following move out 123683306792Spatrick * of EEE LPI Tx state 123783306792Spatrick */ 123883306792Spatrick #define IGC_TW_SYSTEM_1000_MASK 0x000000FF 123983306792Spatrick /* Minimum time for 100BASE-T where no data will be transmit following move out 124083306792Spatrick * of EEE LPI Tx state 124183306792Spatrick */ 124283306792Spatrick #define IGC_TW_SYSTEM_100_MASK 0x0000FF00 124383306792Spatrick #define IGC_TW_SYSTEM_100_SHIFT 8 124483306792Spatrick #define IGC_LTRMINV_LTRV_MASK 0x000003FF /* LTR minimum value */ 124583306792Spatrick #define IGC_LTRMAXV_LTRV_MASK 0x000003FF /* LTR maximum value */ 124683306792Spatrick #define IGC_LTRMINV_SCALE_MASK 0x00001C00 /* LTR minimum scale */ 124783306792Spatrick #define IGC_LTRMINV_SCALE_SHIFT 10 124883306792Spatrick /* Reg val to set scale to 1024 nsec */ 124983306792Spatrick #define IGC_LTRMINV_SCALE_1024 2 125083306792Spatrick /* Reg val to set scale to 32768 nsec */ 125183306792Spatrick #define IGC_LTRMINV_SCALE_32768 3 125283306792Spatrick #define IGC_LTRMINV_LSNP_REQ 0x00008000 /* LTR Snoop Requirement */ 125383306792Spatrick #define IGC_LTRMAXV_SCALE_MASK 0x00001C00 /* LTR maximum scale */ 125483306792Spatrick #define IGC_LTRMAXV_SCALE_SHIFT 10 125583306792Spatrick /* Reg val to set scale to 1024 nsec */ 125683306792Spatrick #define IGC_LTRMAXV_SCALE_1024 2 125783306792Spatrick /* Reg val to set scale to 32768 nsec */ 125883306792Spatrick #define IGC_LTRMAXV_SCALE_32768 3 125983306792Spatrick #define IGC_LTRMAXV_LSNP_REQ 0x00008000 /* LTR Snoop Requirement */ 126083306792Spatrick 126183306792Spatrick #define I225_RXPBSIZE_DEFAULT 0x000000A2 /* RXPBSIZE default */ 126283306792Spatrick #define I225_TXPBSIZE_DEFAULT 0x04000014 /* TXPBSIZE default */ 126383306792Spatrick #define IGC_RXPBS_SIZE_I225_MASK 0x0000003F /* Rx packet buffer size */ 126483306792Spatrick #define IGC_TXPB0S_SIZE_I225_MASK 0x0000003F /* Tx packet buffer 0 size */ 126583306792Spatrick #define IGC_STM_OPCODE 0xDB00 126683306792Spatrick #define IGC_EEPROM_FLASH_SIZE_WORD 0x11 126783306792Spatrick #define INVM_DWORD_TO_RECORD_TYPE(invm_dword) \ 126883306792Spatrick (u8)((invm_dword) & 0x7) 126983306792Spatrick #define INVM_DWORD_TO_WORD_ADDRESS(invm_dword) \ 127083306792Spatrick (u8)(((invm_dword) & 0x0000FE00) >> 9) 127183306792Spatrick #define INVM_DWORD_TO_WORD_DATA(invm_dword) \ 127283306792Spatrick (u16)(((invm_dword) & 0xFFFF0000) >> 16) 127383306792Spatrick #define IGC_INVM_RSA_KEY_SHA256_DATA_SIZE_IN_DWORDS 8 127483306792Spatrick #define IGC_INVM_CSR_AUTOLOAD_DATA_SIZE_IN_DWORDS 1 127583306792Spatrick #define IGC_INVM_ULT_BYTES_SIZE 8 127683306792Spatrick #define IGC_INVM_RECORD_SIZE_IN_BYTES 4 127783306792Spatrick #define IGC_INVM_VER_FIELD_ONE 0x1FF8 127883306792Spatrick #define IGC_INVM_VER_FIELD_TWO 0x7FE000 127983306792Spatrick #define IGC_INVM_IMGTYPE_FIELD 0x1F800000 128083306792Spatrick 128183306792Spatrick #define IGC_INVM_MAJOR_MASK 0x3F0 128283306792Spatrick #define IGC_INVM_MINOR_MASK 0xF 128383306792Spatrick #define IGC_INVM_MAJOR_SHIFT 4 128483306792Spatrick 128583306792Spatrick /* PLL Defines */ 128683306792Spatrick #define IGC_PCI_PMCSR 0x44 128783306792Spatrick #define IGC_PCI_PMCSR_D3 0x03 128883306792Spatrick #define IGC_MAX_PLL_TRIES 5 128983306792Spatrick #define IGC_PHY_PLL_UNCONF 0xFF 129083306792Spatrick #define IGC_PHY_PLL_FREQ_PAGE 0xFC0000 129183306792Spatrick #define IGC_PHY_PLL_FREQ_REG 0x000E 129283306792Spatrick #define IGC_INVM_DEFAULT_AL 0x202F 129383306792Spatrick #define IGC_INVM_AUTOLOAD 0x0A 129483306792Spatrick #define IGC_INVM_PLL_WO_VAL 0x0010 129583306792Spatrick 129683306792Spatrick /* Proxy Filter Control Extended */ 129783306792Spatrick #define IGC_PROXYFCEX_MDNS 0x00000001 /* mDNS */ 129883306792Spatrick #define IGC_PROXYFCEX_MDNS_M 0x00000002 /* mDNS Multicast */ 129983306792Spatrick #define IGC_PROXYFCEX_MDNS_U 0x00000004 /* mDNS Unicast */ 130083306792Spatrick #define IGC_PROXYFCEX_IPV4_M 0x00000008 /* IPv4 Multicast */ 130183306792Spatrick #define IGC_PROXYFCEX_IPV6_M 0x00000010 /* IPv6 Multicast */ 130283306792Spatrick #define IGC_PROXYFCEX_IGMP 0x00000020 /* IGMP */ 130383306792Spatrick #define IGC_PROXYFCEX_IGMP_M 0x00000040 /* IGMP Multicast */ 130483306792Spatrick #define IGC_PROXYFCEX_ARPRES 0x00000080 /* ARP Response */ 130583306792Spatrick #define IGC_PROXYFCEX_ARPRES_D 0x00000100 /* ARP Response Directed */ 130683306792Spatrick #define IGC_PROXYFCEX_ICMPV4 0x00000200 /* ICMPv4 */ 130783306792Spatrick #define IGC_PROXYFCEX_ICMPV4_D 0x00000400 /* ICMPv4 Directed */ 130883306792Spatrick #define IGC_PROXYFCEX_ICMPV6 0x00000800 /* ICMPv6 */ 130983306792Spatrick #define IGC_PROXYFCEX_ICMPV6_D 0x00001000 /* ICMPv6 Directed */ 131083306792Spatrick #define IGC_PROXYFCEX_DNS 0x00002000 /* DNS */ 131183306792Spatrick 131283306792Spatrick /* Proxy Filter Control */ 131383306792Spatrick #define IGC_PROXYFC_D0 0x00000001 /* Enable offload in D0 */ 131483306792Spatrick #define IGC_PROXYFC_EX 0x00000004 /* Directed exact proxy */ 131583306792Spatrick #define IGC_PROXYFC_MC 0x00000008 /* Directed MC Proxy */ 131683306792Spatrick #define IGC_PROXYFC_BC 0x00000010 /* Broadcast Proxy Enable */ 131783306792Spatrick #define IGC_PROXYFC_ARP_DIRECTED 0x00000020 /* Directed ARP Proxy Ena */ 131883306792Spatrick #define IGC_PROXYFC_IPV4 0x00000040 /* Directed IPv4 Enable */ 131983306792Spatrick #define IGC_PROXYFC_IPV6 0x00000080 /* Directed IPv6 Enable */ 132083306792Spatrick #define IGC_PROXYFC_NS 0x00000200 /* IPv6 Neighbor Solicitation */ 132183306792Spatrick #define IGC_PROXYFC_NS_DIRECTED 0x00000400 /* Directed NS Proxy Ena */ 132283306792Spatrick #define IGC_PROXYFC_ARP 0x00000800 /* ARP Request Proxy Ena */ 132383306792Spatrick /* Proxy Status */ 132483306792Spatrick #define IGC_PROXYS_CLEAR 0xFFFFFFFF /* Clear */ 132583306792Spatrick 132683306792Spatrick /* Firmware Status */ 132783306792Spatrick #define IGC_FWSTS_FWRI 0x80000000 /* FW Reset Indication */ 132883306792Spatrick /* VF Control */ 132983306792Spatrick #define IGC_VTCTRL_RST 0x04000000 /* Reset VF */ 133083306792Spatrick 133183306792Spatrick #define IGC_STATUS_LAN_ID_MASK 0x00000000C /* Mask for Lan ID field */ 133283306792Spatrick /* Lan ID bit field offset in status register */ 133383306792Spatrick #define IGC_STATUS_LAN_ID_OFFSET 2 133483306792Spatrick #define IGC_VFTA_ENTRIES 128 133583306792Spatrick 133683306792Spatrick #define IGC_UNUSEDARG 133783306792Spatrick 133883306792Spatrick #endif /* _IGC_DEFINES_H_ */ 1339