18cfa0ad2SJack F Vogel /****************************************************************************** 28cfa0ad2SJack F Vogel 3a69ed8dfSJack F Vogel Copyright (c) 2001-2010, Intel Corporation 48cfa0ad2SJack F Vogel All rights reserved. 58cfa0ad2SJack F Vogel 68cfa0ad2SJack F Vogel Redistribution and use in source and binary forms, with or without 78cfa0ad2SJack F Vogel modification, are permitted provided that the following conditions are met: 88cfa0ad2SJack F Vogel 98cfa0ad2SJack F Vogel 1. Redistributions of source code must retain the above copyright notice, 108cfa0ad2SJack F Vogel this list of conditions and the following disclaimer. 118cfa0ad2SJack F Vogel 128cfa0ad2SJack F Vogel 2. Redistributions in binary form must reproduce the above copyright 138cfa0ad2SJack F Vogel notice, this list of conditions and the following disclaimer in the 148cfa0ad2SJack F Vogel documentation and/or other materials provided with the distribution. 158cfa0ad2SJack F Vogel 168cfa0ad2SJack F Vogel 3. Neither the name of the Intel Corporation nor the names of its 178cfa0ad2SJack F Vogel contributors may be used to endorse or promote products derived from 188cfa0ad2SJack F Vogel this software without specific prior written permission. 198cfa0ad2SJack F Vogel 208cfa0ad2SJack F Vogel THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 218cfa0ad2SJack F Vogel AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 228cfa0ad2SJack F Vogel IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 238cfa0ad2SJack F Vogel ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 248cfa0ad2SJack F Vogel LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 258cfa0ad2SJack F Vogel CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 268cfa0ad2SJack F Vogel SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 278cfa0ad2SJack F Vogel INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 288cfa0ad2SJack F Vogel CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 298cfa0ad2SJack F Vogel ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 308cfa0ad2SJack F Vogel POSSIBILITY OF SUCH DAMAGE. 318cfa0ad2SJack F Vogel 328cfa0ad2SJack F Vogel ******************************************************************************/ 338cfa0ad2SJack F Vogel /*$FreeBSD$*/ 348cfa0ad2SJack F Vogel 358cfa0ad2SJack F Vogel #ifndef _E1000_ICH8LAN_H_ 368cfa0ad2SJack F Vogel #define _E1000_ICH8LAN_H_ 378cfa0ad2SJack F Vogel 388cfa0ad2SJack F Vogel #define ICH_FLASH_GFPREG 0x0000 398cfa0ad2SJack F Vogel #define ICH_FLASH_HSFSTS 0x0004 408cfa0ad2SJack F Vogel #define ICH_FLASH_HSFCTL 0x0006 418cfa0ad2SJack F Vogel #define ICH_FLASH_FADDR 0x0008 428cfa0ad2SJack F Vogel #define ICH_FLASH_FDATA0 0x0010 438cfa0ad2SJack F Vogel 44d035aa2dSJack F Vogel /* Requires up to 10 seconds when MNG might be accessing part. */ 45d035aa2dSJack F Vogel #define ICH_FLASH_READ_COMMAND_TIMEOUT 10000000 46d035aa2dSJack F Vogel #define ICH_FLASH_WRITE_COMMAND_TIMEOUT 10000000 47d035aa2dSJack F Vogel #define ICH_FLASH_ERASE_COMMAND_TIMEOUT 10000000 488cfa0ad2SJack F Vogel #define ICH_FLASH_LINEAR_ADDR_MASK 0x00FFFFFF 498cfa0ad2SJack F Vogel #define ICH_FLASH_CYCLE_REPEAT_COUNT 10 508cfa0ad2SJack F Vogel 518cfa0ad2SJack F Vogel #define ICH_CYCLE_READ 0 528cfa0ad2SJack F Vogel #define ICH_CYCLE_WRITE 2 538cfa0ad2SJack F Vogel #define ICH_CYCLE_ERASE 3 548cfa0ad2SJack F Vogel 558cfa0ad2SJack F Vogel #define FLASH_GFPREG_BASE_MASK 0x1FFF 568cfa0ad2SJack F Vogel #define FLASH_SECTOR_ADDR_SHIFT 12 578cfa0ad2SJack F Vogel 588cfa0ad2SJack F Vogel #define ICH_FLASH_SEG_SIZE_256 256 598cfa0ad2SJack F Vogel #define ICH_FLASH_SEG_SIZE_4K 4096 608cfa0ad2SJack F Vogel #define ICH_FLASH_SEG_SIZE_8K 8192 618cfa0ad2SJack F Vogel #define ICH_FLASH_SEG_SIZE_64K 65536 628cfa0ad2SJack F Vogel #define ICH_FLASH_SECTOR_SIZE 4096 638cfa0ad2SJack F Vogel 648cfa0ad2SJack F Vogel #define ICH_FLASH_REG_MAPSIZE 0x00A0 658cfa0ad2SJack F Vogel 668cfa0ad2SJack F Vogel #define E1000_ICH_FWSM_RSPCIPHY 0x00000040 /* Reset PHY on PCI Reset */ 678cfa0ad2SJack F Vogel #define E1000_ICH_FWSM_DISSW 0x10000000 /* FW Disables SW Writes */ 688cfa0ad2SJack F Vogel /* FW established a valid mode */ 698cfa0ad2SJack F Vogel #define E1000_ICH_FWSM_FW_VALID 0x00008000 708cfa0ad2SJack F Vogel 718cfa0ad2SJack F Vogel #define E1000_ICH_MNG_IAMT_MODE 0x2 728cfa0ad2SJack F Vogel 737d9119bdSJack F Vogel #define E1000_FWSM_PROXY_MODE 0x00000008 /* FW is in proxy mode */ 747d9119bdSJack F Vogel 757d9119bdSJack F Vogel /* Shared Receive Address Registers */ 767d9119bdSJack F Vogel #define E1000_SHRAL(_i) (0x05438 + ((_i) * 8)) 777d9119bdSJack F Vogel #define E1000_SHRAH(_i) (0x0543C + ((_i) * 8)) 787d9119bdSJack F Vogel #define E1000_SHRAH_AV 0x80000000 /* Addr Valid bit */ 797d9119bdSJack F Vogel #define E1000_SHRAH_MAV 0x40000000 /* Multicast Addr Valid bit */ 807d9119bdSJack F Vogel 817d9119bdSJack F Vogel #define E1000_H2ME 0x05B50 /* Host to ME */ 827d9119bdSJack F Vogel #define E1000_H2ME_LSECREQ 0x00000001 /* Linksec Request */ 837d9119bdSJack F Vogel #define E1000_H2ME_LSECA 0x00000002 /* Linksec Active */ 847d9119bdSJack F Vogel #define E1000_H2ME_LSECSF 0x00000004 /* Linksec Failed */ 857d9119bdSJack F Vogel #define E1000_H2ME_LSECD 0x00000008 /* Linksec Disabled */ 867d9119bdSJack F Vogel #define E1000_H2ME_SLCAPD 0x00000010 /* Start LCAPD */ 877d9119bdSJack F Vogel #define E1000_H2ME_IPV4_ARP_EN 0x00000020 /* Arp Offload enable bit */ 887d9119bdSJack F Vogel #define E1000_H2ME_IPV6_NS_EN 0x00000040 /* NS Offload enable bit */ 897d9119bdSJack F Vogel 908cfa0ad2SJack F Vogel #define ID_LED_DEFAULT_ICH8LAN ((ID_LED_DEF1_DEF2 << 12) | \ 91d035aa2dSJack F Vogel (ID_LED_OFF1_OFF2 << 8) | \ 92d035aa2dSJack F Vogel (ID_LED_OFF1_ON2 << 4) | \ 938cfa0ad2SJack F Vogel (ID_LED_DEF1_DEF2)) 948cfa0ad2SJack F Vogel 958cfa0ad2SJack F Vogel #define E1000_ICH_NVM_SIG_WORD 0x13 968cfa0ad2SJack F Vogel #define E1000_ICH_NVM_SIG_MASK 0xC000 97d035aa2dSJack F Vogel #define E1000_ICH_NVM_VALID_SIG_MASK 0xC0 98d035aa2dSJack F Vogel #define E1000_ICH_NVM_SIG_VALUE 0x80 998cfa0ad2SJack F Vogel 1008cfa0ad2SJack F Vogel #define E1000_ICH8_LAN_INIT_TIMEOUT 1500 1018cfa0ad2SJack F Vogel 1028cfa0ad2SJack F Vogel #define E1000_FEXTNVM_SW_CONFIG 1 1038cfa0ad2SJack F Vogel #define E1000_FEXTNVM_SW_CONFIG_ICH8M (1 << 27) /* Bit redefined for ICH8M */ 1048cfa0ad2SJack F Vogel 1057d9119bdSJack F Vogel #define E1000_FEXTNVM4_BEACON_DURATION_MASK 0x7 1067d9119bdSJack F Vogel #define E1000_FEXTNVM4_BEACON_DURATION_8USEC 0x7 1077d9119bdSJack F Vogel #define E1000_FEXTNVM4_BEACON_DURATION_16USEC 0x3 1087d9119bdSJack F Vogel 1098cfa0ad2SJack F Vogel #define PCIE_ICH8_SNOOP_ALL PCIE_NO_SNOOP_ALL 1108cfa0ad2SJack F Vogel 1118cfa0ad2SJack F Vogel #define E1000_ICH_RAR_ENTRIES 7 1127d9119bdSJack F Vogel #define E1000_PCH2_RAR_ENTRIES 5 /* RAR[0], SHRA[0-3] */ 1138cfa0ad2SJack F Vogel 1148cfa0ad2SJack F Vogel #define PHY_PAGE_SHIFT 5 1158cfa0ad2SJack F Vogel #define PHY_REG(page, reg) (((page) << PHY_PAGE_SHIFT) | \ 1168cfa0ad2SJack F Vogel ((reg) & MAX_PHY_REG_ADDRESS)) 1178cfa0ad2SJack F Vogel #define IGP3_KMRN_DIAG PHY_REG(770, 19) /* KMRN Diagnostic */ 1188cfa0ad2SJack F Vogel #define IGP3_VR_CTRL PHY_REG(776, 18) /* Voltage Regulator Control */ 1198cfa0ad2SJack F Vogel #define IGP3_CAPABILITY PHY_REG(776, 19) /* Capability */ 1208cfa0ad2SJack F Vogel #define IGP3_PM_CTRL PHY_REG(769, 20) /* Power Management Control */ 1218cfa0ad2SJack F Vogel 1228cfa0ad2SJack F Vogel #define IGP3_KMRN_DIAG_PCS_LOCK_LOSS 0x0002 1238cfa0ad2SJack F Vogel #define IGP3_VR_CTRL_DEV_POWERDOWN_MODE_MASK 0x0300 1248cfa0ad2SJack F Vogel #define IGP3_VR_CTRL_MODE_SHUTDOWN 0x0200 1258cfa0ad2SJack F Vogel #define IGP3_PM_CTRL_FORCE_PWR_DOWN 0x0020 1268cfa0ad2SJack F Vogel 127d035aa2dSJack F Vogel /* PHY Wakeup Registers and defines */ 128d035aa2dSJack F Vogel #define BM_RCTL PHY_REG(BM_WUC_PAGE, 0) 129d035aa2dSJack F Vogel #define BM_WUC PHY_REG(BM_WUC_PAGE, 1) 130d035aa2dSJack F Vogel #define BM_WUFC PHY_REG(BM_WUC_PAGE, 2) 131d035aa2dSJack F Vogel #define BM_WUS PHY_REG(BM_WUC_PAGE, 3) 132d035aa2dSJack F Vogel #define BM_RAR_L(_i) (BM_PHY_REG(BM_WUC_PAGE, 16 + ((_i) << 2))) 133d035aa2dSJack F Vogel #define BM_RAR_M(_i) (BM_PHY_REG(BM_WUC_PAGE, 17 + ((_i) << 2))) 134d035aa2dSJack F Vogel #define BM_RAR_H(_i) (BM_PHY_REG(BM_WUC_PAGE, 18 + ((_i) << 2))) 135d035aa2dSJack F Vogel #define BM_RAR_CTRL(_i) (BM_PHY_REG(BM_WUC_PAGE, 19 + ((_i) << 2))) 136d035aa2dSJack F Vogel #define BM_MTA(_i) (BM_PHY_REG(BM_WUC_PAGE, 128 + ((_i) << 1))) 1377d9119bdSJack F Vogel #define BM_IPAV (BM_PHY_REG(BM_WUC_PAGE, 64)) 1387d9119bdSJack F Vogel #define BM_IP4AT_L(_i) (BM_PHY_REG(BM_WUC_PAGE, 82 + ((_i) * 2))) 1397d9119bdSJack F Vogel #define BM_IP4AT_H(_i) (BM_PHY_REG(BM_WUC_PAGE, 83 + ((_i) * 2))) 1407d9119bdSJack F Vogel 1417d9119bdSJack F Vogel #define BM_SHRAL_LOWER(_i) (BM_PHY_REG(BM_WUC_PAGE, 44 + ((_i) * 4))) 1427d9119bdSJack F Vogel #define BM_SHRAL_UPPER(_i) (BM_PHY_REG(BM_WUC_PAGE, 45 + ((_i) * 4))) 1437d9119bdSJack F Vogel #define BM_SHRAH_LOWER(_i) (BM_PHY_REG(BM_WUC_PAGE, 46 + ((_i) * 4))) 1447d9119bdSJack F Vogel #define BM_SHRAH_UPPER(_i) (BM_PHY_REG(BM_WUC_PAGE, 47 + ((_i) * 4))) 145d035aa2dSJack F Vogel 146d035aa2dSJack F Vogel #define BM_RCTL_UPE 0x0001 /* Unicast Promiscuous Mode */ 147d035aa2dSJack F Vogel #define BM_RCTL_MPE 0x0002 /* Multicast Promiscuous Mode */ 148d035aa2dSJack F Vogel #define BM_RCTL_MO_SHIFT 3 /* Multicast Offset Shift */ 149d035aa2dSJack F Vogel #define BM_RCTL_MO_MASK (3 << 3) /* Multicast Offset Mask */ 150d035aa2dSJack F Vogel #define BM_RCTL_BAM 0x0020 /* Broadcast Accept Mode */ 151d035aa2dSJack F Vogel #define BM_RCTL_PMCF 0x0040 /* Pass MAC Control Frames */ 152d035aa2dSJack F Vogel #define BM_RCTL_RFCE 0x0080 /* Rx Flow Control Enable */ 153d035aa2dSJack F Vogel 1549d81738fSJack F Vogel #define HV_LED_CONFIG PHY_REG(768, 30) /* LED Configuration */ 1559d81738fSJack F Vogel #define HV_MUX_DATA_CTRL PHY_REG(776, 16) 1569d81738fSJack F Vogel #define HV_MUX_DATA_CTRL_GEN_TO_MAC 0x0400 1579d81738fSJack F Vogel #define HV_MUX_DATA_CTRL_FORCE_SPEED 0x0004 1589d81738fSJack F Vogel #define HV_SCC_UPPER PHY_REG(778, 16) /* Single Collision Count */ 1599d81738fSJack F Vogel #define HV_SCC_LOWER PHY_REG(778, 17) 1609d81738fSJack F Vogel #define HV_ECOL_UPPER PHY_REG(778, 18) /* Excessive Collision Count */ 1619d81738fSJack F Vogel #define HV_ECOL_LOWER PHY_REG(778, 19) 1629d81738fSJack F Vogel #define HV_MCC_UPPER PHY_REG(778, 20) /* Multiple Collision Count */ 1639d81738fSJack F Vogel #define HV_MCC_LOWER PHY_REG(778, 21) 1649d81738fSJack F Vogel #define HV_LATECOL_UPPER PHY_REG(778, 23) /* Late Collision Count */ 1659d81738fSJack F Vogel #define HV_LATECOL_LOWER PHY_REG(778, 24) 1669d81738fSJack F Vogel #define HV_COLC_UPPER PHY_REG(778, 25) /* Collision Count */ 1679d81738fSJack F Vogel #define HV_COLC_LOWER PHY_REG(778, 26) 1689d81738fSJack F Vogel #define HV_DC_UPPER PHY_REG(778, 27) /* Defer Count */ 1699d81738fSJack F Vogel #define HV_DC_LOWER PHY_REG(778, 28) 1709d81738fSJack F Vogel #define HV_TNCRS_UPPER PHY_REG(778, 29) /* Transmit with no CRS */ 1719d81738fSJack F Vogel #define HV_TNCRS_LOWER PHY_REG(778, 30) 1729d81738fSJack F Vogel 1734edd8523SJack F Vogel #define E1000_FCRTV_PCH 0x05F40 /* PCH Flow Control Refresh Timer Value */ 1744edd8523SJack F Vogel 1754edd8523SJack F Vogel #define E1000_NVM_K1_CONFIG 0x1B /* NVM K1 Config Word */ 1764edd8523SJack F Vogel #define E1000_NVM_K1_ENABLE 0x1 /* NVM Enable K1 bit */ 1774edd8523SJack F Vogel 1784edd8523SJack F Vogel /* SMBus Address Phy Register */ 1794edd8523SJack F Vogel #define HV_SMB_ADDR PHY_REG(768, 26) 1807d9119bdSJack F Vogel #define HV_SMB_ADDR_MASK 0x007F 1814edd8523SJack F Vogel #define HV_SMB_ADDR_PEC_EN 0x0200 1824edd8523SJack F Vogel #define HV_SMB_ADDR_VALID 0x0080 1834edd8523SJack F Vogel 1844edd8523SJack F Vogel /* Strapping Option Register - RO */ 1854edd8523SJack F Vogel #define E1000_STRAP 0x0000C 1864edd8523SJack F Vogel #define E1000_STRAP_SMBUS_ADDRESS_MASK 0x00FE0000 1874edd8523SJack F Vogel #define E1000_STRAP_SMBUS_ADDRESS_SHIFT 17 1884edd8523SJack F Vogel 1894edd8523SJack F Vogel /* OEM Bits Phy Register */ 1904edd8523SJack F Vogel #define HV_OEM_BITS PHY_REG(768, 25) 1914edd8523SJack F Vogel #define HV_OEM_BITS_LPLU 0x0004 /* Low Power Link Up */ 1924edd8523SJack F Vogel #define HV_OEM_BITS_GBE_DIS 0x0040 /* Gigabit Disable */ 1934edd8523SJack F Vogel #define HV_OEM_BITS_RESTART_AN 0x0400 /* Restart Auto-negotiation */ 1944edd8523SJack F Vogel 1954edd8523SJack F Vogel #define LCD_CFG_PHY_ADDR_BIT 0x0020 /* Phy address bit from LCD Config word */ 1964edd8523SJack F Vogel 197a69ed8dfSJack F Vogel /* KMRN Mode Control */ 198a69ed8dfSJack F Vogel #define HV_KMRN_MODE_CTRL PHY_REG(769, 16) 199a69ed8dfSJack F Vogel #define HV_KMRN_MDIO_SLOW 0x0400 200a69ed8dfSJack F Vogel 2018ec87fc5SJack F Vogel /* PHY Power Management Control */ 2028ec87fc5SJack F Vogel #define HV_PM_CTRL PHY_REG(770, 17) 2038ec87fc5SJack F Vogel 2044edd8523SJack F Vogel #define SW_FLAG_TIMEOUT 1000 /* SW Semaphore flag timeout in milliseconds */ 2054edd8523SJack F Vogel 2067d9119bdSJack F Vogel /* PHY Low Power Idle Control */ 2077d9119bdSJack F Vogel #define I82579_LPI_CTRL PHY_REG(772, 20) 2087d9119bdSJack F Vogel #define I82579_LPI_CTRL_ENABLE_MASK 0x6000 2097d9119bdSJack F Vogel 2108cfa0ad2SJack F Vogel /* 2118cfa0ad2SJack F Vogel * Additional interrupts need to be handled for ICH family: 2128cfa0ad2SJack F Vogel * DSW = The FW changed the status of the DISSW bit in FWSM 2138cfa0ad2SJack F Vogel * PHYINT = The LAN connected device generates an interrupt 2148cfa0ad2SJack F Vogel * EPRST = Manageability reset event 2158cfa0ad2SJack F Vogel */ 2168cfa0ad2SJack F Vogel #define IMS_ICH_ENABLE_MASK (\ 2178cfa0ad2SJack F Vogel E1000_IMS_DSW | \ 2188cfa0ad2SJack F Vogel E1000_IMS_PHYINT | \ 2198cfa0ad2SJack F Vogel E1000_IMS_EPRST) 2208cfa0ad2SJack F Vogel 2218cfa0ad2SJack F Vogel /* Additional interrupt register bit definitions */ 2228cfa0ad2SJack F Vogel #define E1000_ICR_LSECPNC 0x00004000 /* PN threshold - client */ 2238cfa0ad2SJack F Vogel #define E1000_IMS_LSECPNC E1000_ICR_LSECPNC /* PN threshold - client */ 2248cfa0ad2SJack F Vogel #define E1000_ICS_LSECPNC E1000_ICR_LSECPNC /* PN threshold - client */ 2258cfa0ad2SJack F Vogel 2268cfa0ad2SJack F Vogel /* Security Processing bit Indication */ 2278cfa0ad2SJack F Vogel #define E1000_RXDEXT_LINKSEC_STATUS_LSECH 0x01000000 2288cfa0ad2SJack F Vogel #define E1000_RXDEXT_LINKSEC_ERROR_BIT_MASK 0x60000000 2298cfa0ad2SJack F Vogel #define E1000_RXDEXT_LINKSEC_ERROR_NO_SA_MATCH 0x20000000 2308cfa0ad2SJack F Vogel #define E1000_RXDEXT_LINKSEC_ERROR_REPLAY_ERROR 0x40000000 2318cfa0ad2SJack F Vogel #define E1000_RXDEXT_LINKSEC_ERROR_BAD_SIG 0x60000000 2328cfa0ad2SJack F Vogel 2337d9119bdSJack F Vogel /* Receive Address Initial CRC Calculation */ 2347d9119bdSJack F Vogel #define E1000_PCH_RAICC(_n) (0x05F50 + ((_n) * 4)) 2357d9119bdSJack F Vogel 2368cfa0ad2SJack F Vogel void e1000_set_kmrn_lock_loss_workaround_ich8lan(struct e1000_hw *hw, 2378cfa0ad2SJack F Vogel bool state); 2388cfa0ad2SJack F Vogel void e1000_igp3_phy_powerdown_workaround_ich8lan(struct e1000_hw *hw); 2398cfa0ad2SJack F Vogel void e1000_gig_downshift_workaround_ich8lan(struct e1000_hw *hw); 2408cfa0ad2SJack F Vogel void e1000_disable_gig_wol_ich8lan(struct e1000_hw *hw); 2414edd8523SJack F Vogel s32 e1000_configure_k1_ich8lan(struct e1000_hw *hw, bool k1_enable); 2424edd8523SJack F Vogel s32 e1000_oem_bits_config_ich8lan(struct e1000_hw *hw, bool d0_config); 243d035aa2dSJack F Vogel s32 e1000_hv_phy_powerdown_workaround_ich8lan(struct e1000_hw *hw); 2447d9119bdSJack F Vogel void e1000_copy_rx_addrs_to_phy_ich8lan(struct e1000_hw *hw); 2457d9119bdSJack F Vogel s32 e1000_lv_jumbo_workaround_ich8lan(struct e1000_hw *hw, bool enable); 2468cfa0ad2SJack F Vogel #endif 247