e1000_ich8lan.h revision 194865
1221234Skargl/******************************************************************************
22116Sjkh
32116Sjkh  Copyright (c) 2001-2009, Intel Corporation
42116Sjkh  All rights reserved.
5221234Skargl
62116Sjkh  Redistribution and use in source and binary forms, with or without
7141296Sdas  modification, are permitted provided that the following conditions are met:
82116Sjkh
9141296Sdas   1. Redistributions of source code must retain the above copyright notice,
102116Sjkh      this list of conditions and the following disclaimer.
112116Sjkh
12141296Sdas   2. Redistributions in binary form must reproduce the above copyright
13176476Sbde      notice, this list of conditions and the following disclaimer in the
142116Sjkh      documentation and/or other materials provided with the distribution.
152116Sjkh
16176385Sbde   3. Neither the name of the Intel Corporation nor the names of its
17176385Sbde      contributors may be used to endorse or promote products derived from
182116Sjkh      this software without specific prior written permission.
19221234Skargl
20141296Sdas  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21141296Sdas  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
222116Sjkh  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
232116Sjkh  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
242116Sjkh  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25176465Sbde  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26176465Sbde  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
272116Sjkh  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
282116Sjkh  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29221234Skargl  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
302116Sjkh  POSSIBILITY OF SUCH DAMAGE.
31221234Skargl
32221234Skargl******************************************************************************/
332116Sjkh/*$FreeBSD: head/sys/dev/e1000/e1000_ich8lan.h 194865 2009-06-24 17:41:29Z jfv $*/
34221234Skargl
35221234Skargl#ifndef _E1000_ICH8LAN_H_
36221234Skargl#define _E1000_ICH8LAN_H_
37221234Skargl
38221234Skargl#define ICH_FLASH_GFPREG                 0x0000
39221234Skargl#define ICH_FLASH_HSFSTS                 0x0004
40221234Skargl#define ICH_FLASH_HSFCTL                 0x0006
412116Sjkh#define ICH_FLASH_FADDR                  0x0008
42221234Skargl#define ICH_FLASH_FDATA0                 0x0010
432116Sjkh
44221234Skargl/* Requires up to 10 seconds when MNG might be accessing part. */
452116Sjkh#define ICH_FLASH_READ_COMMAND_TIMEOUT   10000000
462116Sjkh#define ICH_FLASH_WRITE_COMMAND_TIMEOUT  10000000
472116Sjkh#define ICH_FLASH_ERASE_COMMAND_TIMEOUT  10000000
488870Srgrimes#define ICH_FLASH_LINEAR_ADDR_MASK       0x00FFFFFF
492116Sjkh#define ICH_FLASH_CYCLE_REPEAT_COUNT     10
50221234Skargl
512116Sjkh#define ICH_CYCLE_READ                   0
52221234Skargl#define ICH_CYCLE_WRITE                  2
53221234Skargl#define ICH_CYCLE_ERASE                  3
54221234Skargl
55221234Skargl#define FLASH_GFPREG_BASE_MASK           0x1FFF
56221234Skargl#define FLASH_SECTOR_ADDR_SHIFT          12
57221234Skargl
58221234Skargl#define ICH_FLASH_SEG_SIZE_256           256
59221234Skargl#define ICH_FLASH_SEG_SIZE_4K            4096
60221234Skargl#define ICH_FLASH_SEG_SIZE_8K            8192
61221234Skargl#define ICH_FLASH_SEG_SIZE_64K           65536
62221234Skargl#define ICH_FLASH_SECTOR_SIZE            4096
63176385Sbde
64221234Skargl#define ICH_FLASH_REG_MAPSIZE            0x00A0
65221234Skargl
662116Sjkh#define E1000_ICH_FWSM_RSPCIPHY          0x00000040 /* Reset PHY on PCI Reset */
67221234Skargl#define E1000_ICH_FWSM_DISSW             0x10000000 /* FW Disables SW Writes */
68221234Skargl/* FW established a valid mode */
69221234Skargl#define E1000_ICH_FWSM_FW_VALID          0x00008000
70221234Skargl
71221234Skargl#define E1000_ICH_MNG_IAMT_MODE          0x2
72221234Skargl
732116Sjkh#define ID_LED_DEFAULT_ICH8LAN  ((ID_LED_DEF1_DEF2 << 12) | \
74221234Skargl                                 (ID_LED_OFF1_OFF2 <<  8) | \
75221234Skargl                                 (ID_LED_OFF1_ON2  <<  4) | \
76221234Skargl                                 (ID_LED_DEF1_DEF2))
77221234Skargl
78221234Skargl#define E1000_ICH_NVM_SIG_WORD           0x13
79221234Skargl#define E1000_ICH_NVM_SIG_MASK           0xC000
80176465Sbde#define E1000_ICH_NVM_VALID_SIG_MASK     0xC0
81221234Skargl#define E1000_ICH_NVM_SIG_VALUE          0x80
82221234Skargl
83221234Skargl#define E1000_ICH8_LAN_INIT_TIMEOUT      1500
84221234Skargl
85176465Sbde#define E1000_FEXTNVM_SW_CONFIG        1
86221234Skargl#define E1000_FEXTNVM_SW_CONFIG_ICH8M (1 << 27) /* Bit redefined for ICH8M */
87176465Sbde
88176476Sbde#define PCIE_ICH8_SNOOP_ALL   PCIE_NO_SNOOP_ALL
89221234Skargl
90176466Sbde#define E1000_ICH_RAR_ENTRIES            7
91221234Skargl
92221234Skargl#define PHY_PAGE_SHIFT 5
93221234Skargl#define PHY_REG(page, reg) (((page) << PHY_PAGE_SHIFT) | \
94141296Sdas                           ((reg) & MAX_PHY_REG_ADDRESS))
95221234Skargl#define IGP3_KMRN_DIAG  PHY_REG(770, 19) /* KMRN Diagnostic */
96221234Skargl#define IGP3_VR_CTRL    PHY_REG(776, 18) /* Voltage Regulator Control */
97221234Skargl#define IGP3_CAPABILITY PHY_REG(776, 19) /* Capability */
98221234Skargl#define IGP3_PM_CTRL    PHY_REG(769, 20) /* Power Management Control */
992116Sjkh
100141296Sdas#define IGP3_KMRN_DIAG_PCS_LOCK_LOSS         0x0002
1012116Sjkh#define IGP3_VR_CTRL_DEV_POWERDOWN_MODE_MASK 0x0300
102141296Sdas#define IGP3_VR_CTRL_MODE_SHUTDOWN           0x0200
1032116Sjkh#define IGP3_PM_CTRL_FORCE_PWR_DOWN          0x0020
104221234Skargl
105221234Skargl/* PHY Wakeup Registers and defines */
106221234Skargl#define BM_RCTL         PHY_REG(BM_WUC_PAGE, 0)
107221234Skargl#define BM_WUC          PHY_REG(BM_WUC_PAGE, 1)
1082116Sjkh#define BM_WUFC         PHY_REG(BM_WUC_PAGE, 2)
109141296Sdas#define BM_WUS          PHY_REG(BM_WUC_PAGE, 3)
1102116Sjkh#define BM_RAR_L(_i)    (BM_PHY_REG(BM_WUC_PAGE, 16 + ((_i) << 2)))
111141296Sdas#define BM_RAR_M(_i)    (BM_PHY_REG(BM_WUC_PAGE, 17 + ((_i) << 2)))
1122116Sjkh#define BM_RAR_H(_i)    (BM_PHY_REG(BM_WUC_PAGE, 18 + ((_i) << 2)))
1132116Sjkh#define BM_RAR_CTRL(_i) (BM_PHY_REG(BM_WUC_PAGE, 19 + ((_i) << 2)))
1142116Sjkh#define BM_MTA(_i)      (BM_PHY_REG(BM_WUC_PAGE, 128 + ((_i) << 1)))
1152116Sjkh
1162116Sjkh#define BM_RCTL_UPE           0x0001          /* Unicast Promiscuous Mode */
117176476Sbde#define BM_RCTL_MPE           0x0002          /* Multicast Promiscuous Mode */
1182116Sjkh#define BM_RCTL_MO_SHIFT      3               /* Multicast Offset Shift */
119141296Sdas#define BM_RCTL_MO_MASK       (3 << 3)        /* Multicast Offset Mask */
1202116Sjkh#define BM_RCTL_BAM           0x0020          /* Broadcast Accept Mode */
1212116Sjkh#define BM_RCTL_PMCF          0x0040          /* Pass MAC Control Frames */
122221234Skargl#define BM_RCTL_RFCE          0x0080          /* Rx Flow Control Enable */
1232116Sjkh
1242116Sjkh#define HV_LED_CONFIG		PHY_REG(768, 30) /* LED Configuration */
1252116Sjkh#define HV_MUX_DATA_CTRL               PHY_REG(776, 16)
126221234Skargl#define HV_MUX_DATA_CTRL_GEN_TO_MAC    0x0400
127221234Skargl#define HV_MUX_DATA_CTRL_FORCE_SPEED   0x0004
128221234Skargl#define HV_SCC_UPPER		PHY_REG(778, 16) /* Single Collision Count */
129221234Skargl#define HV_SCC_LOWER		PHY_REG(778, 17)
130221234Skargl#define HV_ECOL_UPPER		PHY_REG(778, 18) /* Excessive Collision Count */
1312116Sjkh#define HV_ECOL_LOWER		PHY_REG(778, 19)
1322116Sjkh#define HV_MCC_UPPER		PHY_REG(778, 20) /* Multiple Collision Count */
1332116Sjkh#define HV_MCC_LOWER		PHY_REG(778, 21)
134221234Skargl#define HV_LATECOL_UPPER	PHY_REG(778, 23) /* Late Collision Count */
135221234Skargl#define HV_LATECOL_LOWER	PHY_REG(778, 24)
1362116Sjkh#define HV_COLC_UPPER		PHY_REG(778, 25) /* Collision Count */
137221234Skargl#define HV_COLC_LOWER		PHY_REG(778, 26)
138221234Skargl#define HV_DC_UPPER		PHY_REG(778, 27) /* Defer Count */
139221234Skargl#define HV_DC_LOWER		PHY_REG(778, 28)
140221234Skargl#define HV_TNCRS_UPPER		PHY_REG(778, 29) /* Transmit with no CRS */
141221234Skargl#define HV_TNCRS_LOWER		PHY_REG(778, 30)
142221234Skargl
1432116Sjkh/*
144 * Additional interrupts need to be handled for ICH family:
145 *  DSW = The FW changed the status of the DISSW bit in FWSM
146 *  PHYINT = The LAN connected device generates an interrupt
147 *  EPRST = Manageability reset event
148 */
149#define IMS_ICH_ENABLE_MASK (\
150    E1000_IMS_DSW   | \
151    E1000_IMS_PHYINT | \
152    E1000_IMS_EPRST)
153
154/* Additional interrupt register bit definitions */
155#define E1000_ICR_LSECPNC       0x00004000          /* PN threshold - client */
156#define E1000_IMS_LSECPNC       E1000_ICR_LSECPNC   /* PN threshold - client */
157#define E1000_ICS_LSECPNC       E1000_ICR_LSECPNC   /* PN threshold - client */
158
159/* Security Processing bit Indication */
160#define E1000_RXDEXT_LINKSEC_STATUS_LSECH       0x01000000
161#define E1000_RXDEXT_LINKSEC_ERROR_BIT_MASK     0x60000000
162#define E1000_RXDEXT_LINKSEC_ERROR_NO_SA_MATCH  0x20000000
163#define E1000_RXDEXT_LINKSEC_ERROR_REPLAY_ERROR 0x40000000
164#define E1000_RXDEXT_LINKSEC_ERROR_BAD_SIG      0x60000000
165
166
167void e1000_set_kmrn_lock_loss_workaround_ich8lan(struct e1000_hw *hw,
168                                                 bool state);
169void e1000_igp3_phy_powerdown_workaround_ich8lan(struct e1000_hw *hw);
170void e1000_gig_downshift_workaround_ich8lan(struct e1000_hw *hw);
171void e1000_disable_gig_wol_ich8lan(struct e1000_hw *hw);
172s32 e1000_hv_phy_powerdown_workaround_ich8lan(struct e1000_hw *hw);
173
174#endif
175