14919Sxy150489 /* 24919Sxy150489 * This file is provided under a CDDLv1 license. When using or 34919Sxy150489 * redistributing this file, you may do so under this license. 44919Sxy150489 * In redistributing this file this license must be included 54919Sxy150489 * and no other modification of this header file is permitted. 64919Sxy150489 * 74919Sxy150489 * CDDL LICENSE SUMMARY 84919Sxy150489 * 98479SChenlu.Chen@Sun.COM * Copyright(c) 1999 - 2009 Intel Corporation. All rights reserved. 104919Sxy150489 * 114919Sxy150489 * The contents of this file are subject to the terms of Version 124919Sxy150489 * 1.0 of the Common Development and Distribution License (the "License"). 134919Sxy150489 * 144919Sxy150489 * You should have received a copy of the License with this software. 154919Sxy150489 * You can obtain a copy of the License at 164919Sxy150489 * http://www.opensolaris.org/os/licensing. 174919Sxy150489 * See the License for the specific language governing permissions 184919Sxy150489 * and limitations under the License. 194919Sxy150489 */ 204919Sxy150489 214919Sxy150489 /* 228479SChenlu.Chen@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 234919Sxy150489 * Use is subject to license terms of the CDDLv1. 244919Sxy150489 */ 254919Sxy150489 264919Sxy150489 /* 27*11020SMin.Xu@Sun.COM * IntelVersion: 1.41 v3-1-10-1_2009-9-18_Release14-6 284919Sxy150489 */ 294919Sxy150489 #ifndef _E1000_ICH8LAN_H_ 304919Sxy150489 #define _E1000_ICH8LAN_H_ 314919Sxy150489 324919Sxy150489 #ifdef __cplusplus 334919Sxy150489 extern "C" { 344919Sxy150489 #endif 354919Sxy150489 364919Sxy150489 #define ICH_FLASH_GFPREG 0x0000 374919Sxy150489 #define ICH_FLASH_HSFSTS 0x0004 384919Sxy150489 #define ICH_FLASH_HSFCTL 0x0006 394919Sxy150489 #define ICH_FLASH_FADDR 0x0008 404919Sxy150489 #define ICH_FLASH_FDATA0 0x0010 414919Sxy150489 4210680SMin.Xu@Sun.COM /* Requires up to 10 seconds when MNG might be accessing part. */ 4310680SMin.Xu@Sun.COM #define ICH_FLASH_READ_COMMAND_TIMEOUT 10000000 4410680SMin.Xu@Sun.COM #define ICH_FLASH_WRITE_COMMAND_TIMEOUT 10000000 4510680SMin.Xu@Sun.COM #define ICH_FLASH_ERASE_COMMAND_TIMEOUT 10000000 464919Sxy150489 #define ICH_FLASH_LINEAR_ADDR_MASK 0x00FFFFFF 474919Sxy150489 #define ICH_FLASH_CYCLE_REPEAT_COUNT 10 484919Sxy150489 494919Sxy150489 #define ICH_CYCLE_READ 0 504919Sxy150489 #define ICH_CYCLE_WRITE 2 514919Sxy150489 #define ICH_CYCLE_ERASE 3 524919Sxy150489 534919Sxy150489 #define FLASH_GFPREG_BASE_MASK 0x1FFF 544919Sxy150489 #define FLASH_SECTOR_ADDR_SHIFT 12 554919Sxy150489 564919Sxy150489 #define ICH_FLASH_SEG_SIZE_256 256 574919Sxy150489 #define ICH_FLASH_SEG_SIZE_4K 4096 584919Sxy150489 #define ICH_FLASH_SEG_SIZE_8K 8192 594919Sxy150489 #define ICH_FLASH_SEG_SIZE_64K 65536 604919Sxy150489 #define ICH_FLASH_SECTOR_SIZE 4096 614919Sxy150489 624919Sxy150489 #define ICH_FLASH_REG_MAPSIZE 0x00A0 634919Sxy150489 644919Sxy150489 #define E1000_ICH_FWSM_RSPCIPHY 0x00000040 /* Reset PHY on PCI Reset */ 654919Sxy150489 #define E1000_ICH_FWSM_DISSW 0x10000000 /* FW Disables SW Writes */ 664919Sxy150489 /* FW established a valid mode */ 674919Sxy150489 #define E1000_ICH_FWSM_FW_VALID 0x00008000 684919Sxy150489 694919Sxy150489 #define E1000_ICH_MNG_IAMT_MODE 0x2 704919Sxy150489 714919Sxy150489 #define ID_LED_DEFAULT_ICH8LAN ((ID_LED_DEF1_DEF2 << 12) | \ 7210680SMin.Xu@Sun.COM (ID_LED_OFF1_OFF2 << 8) | \ 7310680SMin.Xu@Sun.COM (ID_LED_OFF1_ON2 << 4) | \ 744919Sxy150489 (ID_LED_DEF1_DEF2)) 754919Sxy150489 764919Sxy150489 #define E1000_ICH_NVM_SIG_WORD 0x13 774919Sxy150489 #define E1000_ICH_NVM_SIG_MASK 0xC000 7810680SMin.Xu@Sun.COM #define E1000_ICH_NVM_VALID_SIG_MASK 0xC0 7910680SMin.Xu@Sun.COM #define E1000_ICH_NVM_SIG_VALUE 0x80 804919Sxy150489 814919Sxy150489 #define E1000_ICH8_LAN_INIT_TIMEOUT 1500 824919Sxy150489 834919Sxy150489 #define E1000_FEXTNVM_SW_CONFIG 1 844919Sxy150489 #define E1000_FEXTNVM_SW_CONFIG_ICH8M (1 << 27) /* Bit redefined for ICH8M */ 854919Sxy150489 864919Sxy150489 #define PCIE_ICH8_SNOOP_ALL PCIE_NO_SNOOP_ALL 874919Sxy150489 884919Sxy150489 #define E1000_ICH_RAR_ENTRIES 7 894919Sxy150489 904919Sxy150489 #define PHY_PAGE_SHIFT 5 914919Sxy150489 #define PHY_REG(page, reg) (((page) << PHY_PAGE_SHIFT) | \ 924919Sxy150489 ((reg) & MAX_PHY_REG_ADDRESS)) 934919Sxy150489 #define IGP3_KMRN_DIAG PHY_REG(770, 19) /* KMRN Diagnostic */ 944919Sxy150489 #define IGP3_VR_CTRL PHY_REG(776, 18) /* Voltage Regulator Control */ 954919Sxy150489 #define IGP3_CAPABILITY PHY_REG(776, 19) /* Capability */ 964919Sxy150489 #define IGP3_PM_CTRL PHY_REG(769, 20) /* Power Management Control */ 974919Sxy150489 984919Sxy150489 #define IGP3_KMRN_DIAG_PCS_LOCK_LOSS 0x0002 994919Sxy150489 #define IGP3_VR_CTRL_DEV_POWERDOWN_MODE_MASK 0x0300 1004919Sxy150489 #define IGP3_VR_CTRL_MODE_SHUTDOWN 0x0200 1014919Sxy150489 #define IGP3_PM_CTRL_FORCE_PWR_DOWN 0x0020 1024919Sxy150489 10310680SMin.Xu@Sun.COM /* PHY Wakeup Registers and defines */ 10410680SMin.Xu@Sun.COM #define BM_RCTL PHY_REG(BM_WUC_PAGE, 0) 10510680SMin.Xu@Sun.COM #define BM_WUC PHY_REG(BM_WUC_PAGE, 1) 10610680SMin.Xu@Sun.COM #define BM_WUFC PHY_REG(BM_WUC_PAGE, 2) 10710680SMin.Xu@Sun.COM #define BM_WUS PHY_REG(BM_WUC_PAGE, 3) 10810680SMin.Xu@Sun.COM #define BM_RAR_L(_i) (BM_PHY_REG(BM_WUC_PAGE, 16 + ((_i) << 2))) 10910680SMin.Xu@Sun.COM #define BM_RAR_M(_i) (BM_PHY_REG(BM_WUC_PAGE, 17 + ((_i) << 2))) 11010680SMin.Xu@Sun.COM #define BM_RAR_H(_i) (BM_PHY_REG(BM_WUC_PAGE, 18 + ((_i) << 2))) 11110680SMin.Xu@Sun.COM #define BM_RAR_CTRL(_i) (BM_PHY_REG(BM_WUC_PAGE, 19 + ((_i) << 2))) 11210680SMin.Xu@Sun.COM #define BM_MTA(_i) (BM_PHY_REG(BM_WUC_PAGE, 128 + ((_i) << 1))) 11310680SMin.Xu@Sun.COM 11410680SMin.Xu@Sun.COM #define BM_RCTL_UPE 0x0001 /* Unicast Promiscuous Mode */ 11510680SMin.Xu@Sun.COM #define BM_RCTL_MPE 0x0002 /* Multicast Promiscuous Mode */ 11610680SMin.Xu@Sun.COM #define BM_RCTL_MO_SHIFT 3 /* Multicast Offset Shift */ 11710680SMin.Xu@Sun.COM #define BM_RCTL_MO_MASK (3 << 3) /* Multicast Offset Mask */ 11810680SMin.Xu@Sun.COM #define BM_RCTL_BAM 0x0020 /* Broadcast Accept Mode */ 11910680SMin.Xu@Sun.COM #define BM_RCTL_PMCF 0x0040 /* Pass MAC Control Frames */ 12010680SMin.Xu@Sun.COM #define BM_RCTL_RFCE 0x0080 /* Rx Flow Control Enable */ 12110680SMin.Xu@Sun.COM 12210680SMin.Xu@Sun.COM #define HV_LED_CONFIG PHY_REG(768, 30) /* LED Configuration */ 12310680SMin.Xu@Sun.COM #define HV_MUX_DATA_CTRL PHY_REG(776, 16) 12410680SMin.Xu@Sun.COM #define HV_MUX_DATA_CTRL_GEN_TO_MAC 0x0400 12510680SMin.Xu@Sun.COM #define HV_MUX_DATA_CTRL_FORCE_SPEED 0x0004 12610680SMin.Xu@Sun.COM #define HV_SCC_UPPER PHY_REG(778, 16) /* Single Collision Count */ 12710680SMin.Xu@Sun.COM #define HV_SCC_LOWER PHY_REG(778, 17) 12810680SMin.Xu@Sun.COM #define HV_ECOL_UPPER PHY_REG(778, 18) /* Excessive Collision Count */ 12910680SMin.Xu@Sun.COM #define HV_ECOL_LOWER PHY_REG(778, 19) 13010680SMin.Xu@Sun.COM #define HV_MCC_UPPER PHY_REG(778, 20) /* Multiple Collision Count */ 13110680SMin.Xu@Sun.COM #define HV_MCC_LOWER PHY_REG(778, 21) 13210680SMin.Xu@Sun.COM #define HV_LATECOL_UPPER PHY_REG(778, 23) /* Late Collision Count */ 13310680SMin.Xu@Sun.COM #define HV_LATECOL_LOWER PHY_REG(778, 24) 13410680SMin.Xu@Sun.COM #define HV_COLC_UPPER PHY_REG(778, 25) /* Collision Count */ 13510680SMin.Xu@Sun.COM #define HV_COLC_LOWER PHY_REG(778, 26) 13610680SMin.Xu@Sun.COM #define HV_DC_UPPER PHY_REG(778, 27) /* Defer Count */ 13710680SMin.Xu@Sun.COM #define HV_DC_LOWER PHY_REG(778, 28) 13810680SMin.Xu@Sun.COM #define HV_TNCRS_UPPER PHY_REG(778, 29) /* Transmit with no CRS */ 13910680SMin.Xu@Sun.COM #define HV_TNCRS_LOWER PHY_REG(778, 30) 14010680SMin.Xu@Sun.COM 14110680SMin.Xu@Sun.COM /* PCH Flow Control Refresh Timer Value */ 14210680SMin.Xu@Sun.COM #define E1000_FCRTV_PCH 0x05F40 143*11020SMin.Xu@Sun.COM 144*11020SMin.Xu@Sun.COM #define E1000_NVM_K1_CONFIG 0x1B /* NVM K1 Config Word */ 145*11020SMin.Xu@Sun.COM #define E1000_NVM_K1_ENABLE 0x1 /* NVM Enable K1 bit */ 146*11020SMin.Xu@Sun.COM 147*11020SMin.Xu@Sun.COM /* SMBus Address Phy Register */ 148*11020SMin.Xu@Sun.COM #define HV_SMB_ADDR PHY_REG(768, 26) 149*11020SMin.Xu@Sun.COM #define HV_SMB_ADDR_PEC_EN 0x0200 150*11020SMin.Xu@Sun.COM #define HV_SMB_ADDR_VALID 0x0080 151*11020SMin.Xu@Sun.COM 152*11020SMin.Xu@Sun.COM /* Strapping Option Register - RO */ 153*11020SMin.Xu@Sun.COM #define E1000_STRAP 0x0000C 154*11020SMin.Xu@Sun.COM #define E1000_STRAP_SMBUS_ADDRESS_MASK 0x00FE0000 155*11020SMin.Xu@Sun.COM #define E1000_STRAP_SMBUS_ADDRESS_SHIFT 17 156*11020SMin.Xu@Sun.COM 157*11020SMin.Xu@Sun.COM /* OEM Bits Phy Register */ 158*11020SMin.Xu@Sun.COM #define HV_OEM_BITS PHY_REG(768, 25) 159*11020SMin.Xu@Sun.COM #define HV_OEM_BITS_LPLU 0x0004 /* Low Power Link Up */ 160*11020SMin.Xu@Sun.COM #define HV_OEM_BITS_GBE_DIS 0x0040 /* Gigabit Disable */ 161*11020SMin.Xu@Sun.COM #define HV_OEM_BITS_RESTART_AN 0x0400 /* Restart Auto-negotiation */ 162*11020SMin.Xu@Sun.COM /* Phy address bit from LCD Config word */ 163*11020SMin.Xu@Sun.COM #define LCD_CFG_PHY_ADDR_BIT 0x0020 164*11020SMin.Xu@Sun.COM 16510680SMin.Xu@Sun.COM /* SW Semaphore flag timeout in milliseconds */ 16610680SMin.Xu@Sun.COM #define SW_FLAG_TIMEOUT 400 16710680SMin.Xu@Sun.COM 1684919Sxy150489 /* 1694919Sxy150489 * Additional interrupts need to be handled for ICH family: 1704919Sxy150489 * DSW = The FW changed the status of the DISSW bit in FWSM 1714919Sxy150489 * PHYINT = The LAN connected device generates an interrupt 1724919Sxy150489 * EPRST = Manageability reset event 1734919Sxy150489 */ 1744919Sxy150489 #define IMS_ICH_ENABLE_MASK (\ 1754919Sxy150489 E1000_IMS_DSW | \ 1764919Sxy150489 E1000_IMS_PHYINT | \ 1774919Sxy150489 E1000_IMS_EPRST) 1784919Sxy150489 1797607STed.You@Sun.COM /* Additional interrupt register bit definitions */ 1807607STed.You@Sun.COM #define E1000_ICR_LSECPNC 0x00004000 /* PN threshold - client */ 1817607STed.You@Sun.COM #define E1000_IMS_LSECPNC E1000_ICR_LSECPNC /* PN threshold - client */ 1827607STed.You@Sun.COM #define E1000_ICS_LSECPNC E1000_ICR_LSECPNC /* PN threshold - client */ 1837607STed.You@Sun.COM 1847607STed.You@Sun.COM /* Security Processing bit Indication */ 1857607STed.You@Sun.COM #define E1000_RXDEXT_LINKSEC_STATUS_LSECH 0x01000000 1867607STed.You@Sun.COM #define E1000_RXDEXT_LINKSEC_ERROR_BIT_MASK 0x60000000 1877607STed.You@Sun.COM #define E1000_RXDEXT_LINKSEC_ERROR_NO_SA_MATCH 0x20000000 1887607STed.You@Sun.COM #define E1000_RXDEXT_LINKSEC_ERROR_REPLAY_ERROR 0x40000000 1897607STed.You@Sun.COM #define E1000_RXDEXT_LINKSEC_ERROR_BAD_SIG 0x60000000 1907607STed.You@Sun.COM 1917607STed.You@Sun.COM 1927607STed.You@Sun.COM void e1000_set_kmrn_lock_loss_workaround_ich8lan(struct e1000_hw *hw, 1937607STed.You@Sun.COM bool state); 1947607STed.You@Sun.COM void e1000_igp3_phy_powerdown_workaround_ich8lan(struct e1000_hw *hw); 1957607STed.You@Sun.COM void e1000_gig_downshift_workaround_ich8lan(struct e1000_hw *hw); 1967607STed.You@Sun.COM void e1000_disable_gig_wol_ich8lan(struct e1000_hw *hw); 197*11020SMin.Xu@Sun.COM s32 e1000_configure_k1_ich8lan(struct e1000_hw *hw, bool k1_enable); 198*11020SMin.Xu@Sun.COM s32 e1000_oem_bits_config_ich8lan(struct e1000_hw *hw, bool d0_config); 1997607STed.You@Sun.COM 2004919Sxy150489 #ifdef __cplusplus 2014919Sxy150489 } 2024919Sxy150489 #endif 2034919Sxy150489 2044919Sxy150489 #endif /* _E1000_ICH8LAN_H_ */ 205