xref: /openbmc/qemu/hw/net/e1000_regs.h (revision d2dfe0b5)
1 /*******************************************************************************
2 
3   Intel PRO/1000 Linux driver
4   Copyright(c) 1999 - 2006 Intel Corporation.
5 
6   This program is free software; you can redistribute it and/or modify it
7   under the terms and conditions of the GNU General Public License,
8   version 2, as published by the Free Software Foundation.
9 
10   This program is distributed in the hope it will be useful, but WITHOUT
11   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13   more details.
14 
15   You should have received a copy of the GNU General Public License along with
16   this program; if not, see <http://www.gnu.org/licenses/>.
17 
18   The full GNU General Public License is included in this distribution in
19   the file called "COPYING".
20 
21   Contact Information:
22   Linux NICS <linux.nics@intel.com>
23   e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
24   Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
25 
26 *******************************************************************************/
27 
28 /* e1000_hw.h
29  * Structures, enums, and macros for the MAC
30  */
31 
32 #ifndef HW_E1000_REGS_H
33 #define HW_E1000_REGS_H
34 
35 #include "e1000x_regs.h"
36 
37 #define E1000_ITR      0x000C4  /* Interrupt Throttling Rate - RW */
38 #define E1000_EIAC     0x000DC  /* Ext. Interrupt Auto Clear - RW */
39 #define E1000_IVAR     0x000E4  /* Interrupt Vector Allocation Register - RW */
40 #define E1000_EITR     0x000E8  /* Extended Interrupt Throttling Rate - RW */
41 #define E1000_RDBAL1   0x02900  /* RX Descriptor Base Address Low (1) - RW */
42 #define E1000_RDBAH1   0x02904  /* RX Descriptor Base Address High (1) - RW */
43 #define E1000_RDLEN1   0x02908  /* RX Descriptor Length (1) - RW */
44 #define E1000_RDH1     0x02910  /* RX Descriptor Head (1) - RW */
45 #define E1000_RDT1     0x02918  /* RX Descriptor Tail (1) - RW */
46 #define E1000_FCRTV    0x05F40  /* Flow Control Refresh Timer Value - RW */
47 #define E1000_TXCW     0x00178  /* TX Configuration Word - RW */
48 #define E1000_RXCW     0x00180  /* RX Configuration Word - RO */
49 #define E1000_TBT      0x00448  /* TX Burst Timer - RW */
50 #define E1000_AIT      0x00458  /* Adaptive Interframe Spacing Throttle - RW */
51 #define E1000_EXTCNF_CTRL  0x00F00  /* Extended Configuration Control */
52 #define E1000_EXTCNF_SIZE  0x00F08  /* Extended Configuration Size */
53 #define E1000_PHY_CTRL     0x00F10  /* PHY Control Register in CSR */
54 #define E1000_PBA      0x01000  /* Packet Buffer Allocation - RW */
55 #define E1000_PBM      0x10000  /* Packet Buffer Memory - RW */
56 #define E1000_PBS      0x01008  /* Packet Buffer Size - RW */
57 #define E1000_FLASHT   0x01028  /* FLASH Timer Register */
58 #define E1000_EEWR     0x0102C  /* EEPROM Write Register - RW */
59 #define E1000_FLSWCTL  0x01030  /* FLASH control register */
60 #define E1000_FLSWDATA 0x01034  /* FLASH data register */
61 #define E1000_FLSWCNT  0x01038  /* FLASH Access Counter */
62 #define E1000_FLOL     0x01050  /* FEEP Auto Load */
63 #define E1000_ERT      0x02008  /* Early Rx Threshold - RW */
64 #define E1000_FCRTH_A  0x00160  /* Alias to FCRTH */
65 #define E1000_PSRCTL   0x02170  /* Packet Split Receive Control - RW */
66 #define E1000_RDBAL    0x02800  /* RX Descriptor Base Address Low - RW */
67 #define E1000_RDBAH    0x02804  /* RX Descriptor Base Address High - RW */
68 #define E1000_RDLEN    0x02808  /* RX Descriptor Length - RW */
69 #define E1000_RDH      0x02810  /* RX Descriptor Head - RW */
70 #define E1000_RDT      0x02818  /* RX Descriptor Tail - RW */
71 #define E1000_RDTR     0x02820  /* RX Delay Timer - RW */
72 #define E1000_RDTR_A   0x00108  /* Alias to RDTR */
73 #define E1000_RDBAL0   E1000_RDBAL /* RX Desc Base Address Low (0) - RW */
74 #define E1000_RDBAL0_A 0x00110     /* Alias to RDBAL0 */
75 #define E1000_RDBAH0   E1000_RDBAH /* RX Desc Base Address High (0) - RW */
76 #define E1000_RDBAH0_A 0x00114     /* Alias to RDBAH0 */
77 #define E1000_RDLEN0   E1000_RDLEN /* RX Desc Length (0) - RW */
78 #define E1000_RDLEN0_A 0x00118     /* Alias to RDLEN0 */
79 #define E1000_RDH0     E1000_RDH   /* RX Desc Head (0) - RW */
80 #define E1000_RDH0_A   0x00120     /* Alias to RDH0 */
81 #define E1000_RDT0     E1000_RDT   /* RX Desc Tail (0) - RW */
82 #define E1000_RDT0_A   0x00128     /* Alias to RDT0 */
83 #define E1000_RDTR0    E1000_RDTR  /* RX Delay Timer (0) - RW */
84 #define E1000_RXDCTL   0x02828  /* RX Descriptor Control queue 0 - RW */
85 #define E1000_RXDCTL1  0x02928  /* RX Descriptor Control queue 1 - RW */
86 #define E1000_RADV     0x0282C  /* RX Interrupt Absolute Delay Timer - RW */
87 #define E1000_RSRPD    0x02C00  /* RX Small Packet Detect - RW */
88 #define E1000_RAID     0x02C08  /* Receive Ack Interrupt Delay - RW */
89 #define E1000_POEMB    0x00F10  /* PHY OEM Bits Register - RW */
90 #define E1000_TDBAL    0x03800  /* TX Descriptor Base Address Low - RW */
91 #define E1000_TDBAL_A  0x00420  /* Alias to TDBAL */
92 #define E1000_TDBAH    0x03804  /* TX Descriptor Base Address High - RW */
93 #define E1000_TDBAH_A  0x00424  /* Alias to TDBAH */
94 #define E1000_TDLEN    0x03808  /* TX Descriptor Length - RW */
95 #define E1000_TDLEN_A  0x00428  /* Alias to TDLEN */
96 #define E1000_TDH      0x03810  /* TX Descriptor Head - RW */
97 #define E1000_TDH_A    0x00430  /* Alias to TDH */
98 #define E1000_TDT      0x03818  /* TX Descripotr Tail - RW */
99 #define E1000_TDT_A    0x00438  /* Alias to TDT */
100 #define E1000_TIDV     0x03820  /* TX Interrupt Delay Value - RW */
101 #define E1000_TIDV_A   0x00440  /* Alias to TIDV */
102 #define E1000_TXDCTL   0x03828  /* TX Descriptor Control - RW */
103 #define E1000_TADV     0x0382C  /* TX Interrupt Absolute Delay Val - RW */
104 #define E1000_TSPMT    0x03830  /* TCP Segmentation PAD & Min Threshold - RW */
105 #define E1000_TARC0    0x03840  /* TX Arbitration Count (0) */
106 #define E1000_TDBAL1   0x03900  /* TX Desc Base Address Low (1) - RW */
107 #define E1000_TDBAH1   0x03904  /* TX Desc Base Address High (1) - RW */
108 #define E1000_TDLEN1   0x03908  /* TX Desc Length (1) - RW */
109 #define E1000_TDH1     0x03910  /* TX Desc Head (1) - RW */
110 #define E1000_TDT1     0x03918  /* TX Desc Tail (1) - RW */
111 #define E1000_TXDCTL1  0x03928  /* TX Descriptor Control (1) - RW */
112 #define E1000_TARC1    0x03940  /* TX Arbitration Count (1) */
113 #define E1000_SEQEC    0x04038  /* Sequence Error Count - R/clr */
114 #define E1000_CEXTERR  0x0403C  /* Carrier Extension Error Count - R/clr */
115 #define E1000_TSCTFC   0x040FC  /* TCP Segmentation Context TX Fail - R/clr */
116 #define E1000_ICRXATC  0x04108  /* Interrupt Cause Rx Absolute Timer Expire Count */
117 #define E1000_ICTXPTC  0x0410C  /* Interrupt Cause Tx Packet Timer Expire Count */
118 #define E1000_ICTXATC  0x04110  /* Interrupt Cause Tx Absolute Timer Expire Count */
119 #define E1000_ICTXQEC  0x04118  /* Interrupt Cause Tx Queue Empty Count */
120 #define E1000_ICTXQMTC 0x0411C  /* Interrupt Cause Tx Queue Minimum Threshold Count */
121 #define E1000_ICRXOC   0x04124  /* Interrupt Cause Receiver Overrun Count */
122 #define E1000_MFUTP01  0x05828  /* Management Flex UDP/TCP Ports 0/1 - RW */
123 #define E1000_MFUTP23  0x05830  /* Management Flex UDP/TCP Ports 2/3 - RW */
124 #define E1000_FFLT     0x05F00  /* Flexible Filter Length Table - RW Array */
125 #define E1000_HOST_IF  0x08800  /* Host Interface */
126 #define E1000_FFVT     0x09800  /* Flexible Filter Value Table - RW Array */
127 
128 #define E1000_KUMCTRLSTA 0x00034 /* MAC-PHY interface - RW */
129 #define E1000_MDPHYA     0x0003C /* PHY address - RW */
130 
131 #define E1000_GCR2      0x05B64 /* 3GIO Control Register 2 */
132 #define E1000_FFLT_DBG  0x05F04 /* Debug Register */
133 #define E1000_HICR      0x08F00 /* Host Inteface Control */
134 
135 #define E1000_RXMTRL     0x0B634 /* Time sync Rx EtherType and Msg Type - RW */
136 #define E1000_RXUDP      0x0B638 /* Time Sync Rx UDP Port - RW */
137 #define E1000_RXCFGL     0x0B634 /* RX Ethertype and Message Type - RW*/
138 
139 #define E1000_MRQC_ENABLED(mrqc) (((mrqc) & (BIT(0) | BIT(1))) == BIT(0))
140 
141 #define E1000_CPUVEC    0x02C10 /* CPU Vector Register - RW */
142 #define E1000_RSSIM     0x05864 /* RSS Interrupt Mask */
143 #define E1000_RSSIR     0x05868 /* RSS Interrupt Request */
144 
145 #define E1000_RSS_QUEUE(reta, hash) ((E1000_RETA_VAL(reta, hash) & BIT(7)) >> 7)
146 
147 /* [TR]DBAL and [TR]DLEN masks */
148 #define E1000_XDBAL_MASK            (~(BIT(4) - 1))
149 #define E1000_XDLEN_MASK            ((BIT(20) - 1) & (~(BIT(7) - 1)))
150 
151 /* IVAR register parsing helpers */
152 #define E1000_IVAR_INT_ALLOC_VALID  (0x8)
153 
154 #define E1000_IVAR_RXQ0_SHIFT       (0)
155 #define E1000_IVAR_RXQ1_SHIFT       (4)
156 #define E1000_IVAR_TXQ0_SHIFT       (8)
157 #define E1000_IVAR_TXQ1_SHIFT       (12)
158 #define E1000_IVAR_OTHER_SHIFT      (16)
159 
160 #define E1000_IVAR_ENTRY_MASK       (0xF)
161 #define E1000_IVAR_ENTRY_VALID_MASK E1000_IVAR_INT_ALLOC_VALID
162 #define E1000_IVAR_ENTRY_VEC_MASK   (0x7)
163 
164 #define E1000_IVAR_RXQ0(x)          ((x) >> E1000_IVAR_RXQ0_SHIFT)
165 #define E1000_IVAR_RXQ1(x)          ((x) >> E1000_IVAR_RXQ1_SHIFT)
166 #define E1000_IVAR_TXQ0(x)          ((x) >> E1000_IVAR_TXQ0_SHIFT)
167 #define E1000_IVAR_TXQ1(x)          ((x) >> E1000_IVAR_TXQ1_SHIFT)
168 #define E1000_IVAR_OTHER(x)         ((x) >> E1000_IVAR_OTHER_SHIFT)
169 
170 #define E1000_IVAR_ENTRY_VALID(x)   ((x) & E1000_IVAR_ENTRY_VALID_MASK)
171 #define E1000_IVAR_ENTRY_VEC(x)     ((x) & E1000_IVAR_ENTRY_VEC_MASK)
172 
173 #define E1000_IVAR_TX_INT_EVERY_WB  BIT(31)
174 
175 #define E1000_RFCTL_ACK_DIS             0x00001000
176 #define E1000_RFCTL_ACK_DATA_DIS        0x00002000
177 
178 /* PSRCTL parsing */
179 #define E1000_PSRCTL_BSIZE0_MASK   0x0000007F
180 #define E1000_PSRCTL_BSIZE1_MASK   0x00003F00
181 #define E1000_PSRCTL_BSIZE2_MASK   0x003F0000
182 #define E1000_PSRCTL_BSIZE3_MASK   0x3F000000
183 
184 #define E1000_PSRCTL_BSIZE0_SHIFT  0
185 #define E1000_PSRCTL_BSIZE1_SHIFT  8
186 #define E1000_PSRCTL_BSIZE2_SHIFT  16
187 #define E1000_PSRCTL_BSIZE3_SHIFT  24
188 
189 #define E1000_PSRCTL_BUFFS_PER_DESC 4
190 
191 /* PHY 1000 MII Register/Bit Definitions */
192 /* 82574-specific registers */
193 #define PHY_COPPER_CTRL1      0x10 /* Copper Specific Control Register 1 */
194 #define PHY_COPPER_STAT1      0x11 /* Copper Specific Status Register 1 */
195 #define PHY_COPPER_INT_ENABLE 0x12  /* Interrupt Enable Register */
196 #define PHY_COPPER_STAT2      0x13 /* Copper Specific Status Register 2 */
197 #define PHY_COPPER_CTRL3      0x14 /* Copper Specific Control Register 3 */
198 #define PHY_COPPER_CTRL2      0x1A /* Copper Specific Control Register 2 */
199 #define PHY_RX_ERR_CNTR       0x15  /* Receive Error Counter */
200 #define PHY_PAGE              0x16 /* Page Address (Any page) */
201 #define PHY_OEM_BITS          0x19 /* OEM Bits (Page 0) */
202 #define PHY_BIAS_1            0x1d /* Bias Setting Register */
203 #define PHY_BIAS_2            0x1e /* Bias Setting Register */
204 
205 /* 82574-specific registers - page 2 */
206 #define PHY_MAC_CTRL1         0x10 /* MAC Specific Control Register 1 */
207 #define PHY_MAC_INT_ENABLE    0x12 /* MAC Interrupt Enable Register */
208 #define PHY_MAC_STAT          0x13 /* MAC Specific Status Register */
209 #define PHY_MAC_CTRL2         0x15 /* MAC Specific Control Register 2 */
210 
211 /* 82574-specific registers - page 3 */
212 #define PHY_LED_03_FUNC_CTRL1 0x10 /* LED[3:0] Function Control */
213 #define PHY_LED_03_POL_CTRL   0x11 /* LED[3:0] Polarity Control */
214 #define PHY_LED_TIMER_CTRL    0x12 /* LED Timer Control */
215 #define PHY_LED_45_CTRL       0x13 /* LED[5:4] Function Control and Polarity */
216 
217 /* 82574-specific registers - page 5 */
218 #define PHY_1000T_SKEW        0x14 /* 1000 BASE - T Pair Skew Register */
219 #define PHY_1000T_SWAP        0x15 /* 1000 BASE - T Pair Swap and Polarity */
220 
221 /* 82574-specific registers - page 6 */
222 #define PHY_CRC_COUNTERS      0x11 /* CRC Counters */
223 
224 #define PHY_PAGE_RW_MASK 0x7F /* R/W part of page address register */
225 
226 #define MAX_PHY_REG_ADDRESS        0x1F  /* 5 bit address bus (0-0x1F) */
227 #define MAX_PHY_MULTI_PAGE_REG     0xF   /* Registers equal on all pages */
228 
229 /* M88E1000 Specific Registers */
230 #define M88E1000_PHY_SPEC_CTRL     0x10  /* PHY Specific Control Register */
231 #define M88E1000_PHY_SPEC_STATUS   0x11  /* PHY Specific Status Register */
232 #define M88E1000_INT_ENABLE        0x12  /* Interrupt Enable Register */
233 #define M88E1000_INT_STATUS        0x13  /* Interrupt Status Register */
234 #define M88E1000_EXT_PHY_SPEC_CTRL 0x14  /* Extended PHY Specific Control */
235 #define M88E1000_RX_ERR_CNTR       0x15  /* Receive Error Counter */
236 
237 #define M88E1000_PHY_EXT_CTRL      0x1A  /* PHY extend control register */
238 #define M88E1000_PHY_PAGE_SELECT   0x1D  /* Reg 29 for page number setting */
239 #define M88E1000_PHY_GEN_CONTROL   0x1E  /* Its meaning depends on reg 29 */
240 #define M88E1000_PHY_VCO_REG_BIT8  0x100 /* Bits 8 & 11 are adjusted for */
241 #define M88E1000_PHY_VCO_REG_BIT11 0x800    /* improved BER performance */
242 
243 #define E1000_STATUS_FUNC_MASK  0x0000000C      /* PCI Function Mask */
244 #define E1000_STATUS_FUNC_SHIFT 2
245 #define E1000_STATUS_FUNC_0     0x00000000      /* Function 0 */
246 #define E1000_STATUS_FUNC_1     0x00000004      /* Function 1 */
247 #define E1000_STATUS_TXOFF      0x00000010      /* transmission paused */
248 #define E1000_STATUS_TBIMODE    0x00000020      /* TBI mode */
249 #define E1000_STATUS_SPEED_MASK 0x000000C0
250 #define E1000_STATUS_LAN_INIT_DONE 0x00000200   /* Lan Init Completion
251                                                    by EEPROM/Flash */
252 #define E1000_STATUS_ASDV       0x00000300      /* Auto speed detect value */
253 #define E1000_STATUS_ASDV_10    0x00000000      /* ASDV 10Mb */
254 #define E1000_STATUS_ASDV_100   0x00000100      /* ASDV 100Mb */
255 #define E1000_STATUS_ASDV_1000  0x00000200      /* ASDV 1Gb */
256 #define E1000_STATUS_DOCK_CI    0x00000800      /* Change in Dock/Undock state. Clear on write '0'. */
257 #define E1000_STATUS_MTXCKOK    0x00000400      /* MTX clock running OK */
258 #define E1000_STATUS_PCI66      0x00000800      /* In 66Mhz slot */
259 #define E1000_STATUS_BUS64      0x00001000      /* In 64 bit slot */
260 #define E1000_STATUS_PCIX_MODE  0x00002000      /* PCI-X mode */
261 #define E1000_STATUS_PCIX_SPEED 0x0000C000      /* PCI-X bus speed */
262 #define E1000_STATUS_BMC_SKU_0  0x00100000 /* BMC USB redirect disabled */
263 #define E1000_STATUS_BMC_SKU_1  0x00200000 /* BMC SRAM disabled */
264 #define E1000_STATUS_BMC_SKU_2  0x00400000 /* BMC SDRAM disabled */
265 #define E1000_STATUS_BMC_CRYPTO 0x00800000 /* BMC crypto disabled */
266 #define E1000_STATUS_BMC_LITE   0x01000000 /* BMC external code execution disabled */
267 #define E1000_STATUS_RGMII_ENABLE 0x02000000 /* RGMII disabled */
268 #define E1000_STATUS_FUSE_8       0x04000000
269 #define E1000_STATUS_FUSE_9       0x08000000
270 #define E1000_STATUS_SERDES0_DIS  0x10000000 /* SERDES disabled on port 0 */
271 #define E1000_STATUS_SERDES1_DIS  0x20000000 /* SERDES disabled on port 1 */
272 #define E1000_STATUS_SPEED_SHIFT  6
273 #define E1000_STATUS_ASDV_SHIFT   8
274 
275 /* Transmit Descriptor */
276 struct e1000_tx_desc {
277     uint64_t buffer_addr;       /* Address of the descriptor's data buffer */
278     union {
279         uint32_t data;
280         struct {
281             uint16_t length;    /* Data buffer length */
282             uint8_t cso;        /* Checksum offset */
283             uint8_t cmd;        /* Descriptor control */
284         } flags;
285     } lower;
286     union {
287         uint32_t data;
288         struct {
289             uint8_t status;     /* Descriptor status */
290             uint8_t css;        /* Checksum start */
291             uint16_t special;
292         } fields;
293     } upper;
294 };
295 
296 #define E1000_TXD_POPTS_IXSM 0x01       /* Insert IP checksum */
297 #define E1000_TXD_POPTS_TXSM 0x02       /* Insert TCP/UDP checksum */
298 
299 #endif /* HW_E1000_REGS_H */
300