xref: /onnv-gate/usr/src/uts/common/io/e1000g/e1000_ich8lan.h (revision 11020:e0feef27b61a)
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