xref: /openbmc/qemu/hw/net/e1000_regs.h (revision b55e4b9c0525560577384adfc6d30eb0daa8d7be)
147b43a1fSPaolo Bonzini /*******************************************************************************
247b43a1fSPaolo Bonzini 
347b43a1fSPaolo Bonzini   Intel PRO/1000 Linux driver
447b43a1fSPaolo Bonzini   Copyright(c) 1999 - 2006 Intel Corporation.
547b43a1fSPaolo Bonzini 
647b43a1fSPaolo Bonzini   This program is free software; you can redistribute it and/or modify it
747b43a1fSPaolo Bonzini   under the terms and conditions of the GNU General Public License,
847b43a1fSPaolo Bonzini   version 2, as published by the Free Software Foundation.
947b43a1fSPaolo Bonzini 
1047b43a1fSPaolo Bonzini   This program is distributed in the hope it will be useful, but WITHOUT
1147b43a1fSPaolo Bonzini   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1247b43a1fSPaolo Bonzini   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
1347b43a1fSPaolo Bonzini   more details.
1447b43a1fSPaolo Bonzini 
1547b43a1fSPaolo Bonzini   You should have received a copy of the GNU General Public License along with
1647b43a1fSPaolo Bonzini   this program; if not, see <http://www.gnu.org/licenses/>.
1747b43a1fSPaolo Bonzini 
1847b43a1fSPaolo Bonzini   The full GNU General Public License is included in this distribution in
1947b43a1fSPaolo Bonzini   the file called "COPYING".
2047b43a1fSPaolo Bonzini 
2147b43a1fSPaolo Bonzini   Contact Information:
2247b43a1fSPaolo Bonzini   Linux NICS <linux.nics@intel.com>
2347b43a1fSPaolo Bonzini   e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
2447b43a1fSPaolo Bonzini   Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
2547b43a1fSPaolo Bonzini 
2647b43a1fSPaolo Bonzini *******************************************************************************/
2747b43a1fSPaolo Bonzini 
2847b43a1fSPaolo Bonzini /* e1000_hw.h
2947b43a1fSPaolo Bonzini  * Structures, enums, and macros for the MAC
3047b43a1fSPaolo Bonzini  */
3147b43a1fSPaolo Bonzini 
32121d0712SMarkus Armbruster #ifndef HW_E1000_REGS_H
33121d0712SMarkus Armbruster #define HW_E1000_REGS_H
3447b43a1fSPaolo Bonzini 
35c9653b77SAkihiko Odaki #include "e1000x_regs.h"
3647b43a1fSPaolo Bonzini 
3747b43a1fSPaolo Bonzini #define E1000_ITR      0x000C4  /* Interrupt Throttling Rate - RW */
3806e7fa0aSDmitry Fleytman #define E1000_EIAC     0x000DC  /* Ext. Interrupt Auto Clear - RW */
3906e7fa0aSDmitry Fleytman #define E1000_IVAR     0x000E4  /* Interrupt Vector Allocation Register - RW */
4006e7fa0aSDmitry Fleytman #define E1000_EITR     0x000E8  /* Extended Interrupt Throttling Rate - RW */
4147b43a1fSPaolo Bonzini #define E1000_RDBAL1   0x02900  /* RX Descriptor Base Address Low (1) - RW */
4247b43a1fSPaolo Bonzini #define E1000_RDBAH1   0x02904  /* RX Descriptor Base Address High (1) - RW */
4347b43a1fSPaolo Bonzini #define E1000_RDLEN1   0x02908  /* RX Descriptor Length (1) - RW */
4447b43a1fSPaolo Bonzini #define E1000_RDH1     0x02910  /* RX Descriptor Head (1) - RW */
4547b43a1fSPaolo Bonzini #define E1000_RDT1     0x02918  /* RX Descriptor Tail (1) - RW */
4606e7fa0aSDmitry Fleytman #define E1000_FCRTV    0x05F40  /* Flow Control Refresh Timer Value - RW */
4747b43a1fSPaolo Bonzini #define E1000_TXCW     0x00178  /* TX Configuration Word - RW */
4847b43a1fSPaolo Bonzini #define E1000_RXCW     0x00180  /* RX Configuration Word - RO */
4947b43a1fSPaolo Bonzini #define E1000_TBT      0x00448  /* TX Burst Timer - RW */
5047b43a1fSPaolo Bonzini #define E1000_AIT      0x00458  /* Adaptive Interframe Spacing Throttle - RW */
5147b43a1fSPaolo Bonzini #define E1000_EXTCNF_CTRL  0x00F00  /* Extended Configuration Control */
5247b43a1fSPaolo Bonzini #define E1000_EXTCNF_SIZE  0x00F08  /* Extended Configuration Size */
5347b43a1fSPaolo Bonzini #define E1000_PHY_CTRL     0x00F10  /* PHY Control Register in CSR */
5447b43a1fSPaolo Bonzini #define E1000_PBA      0x01000  /* Packet Buffer Allocation - RW */
5572ea771cSLeonid Bloch #define E1000_PBM      0x10000  /* Packet Buffer Memory - RW */
5620f3e863SLeonid Bloch #define E1000_PBS      0x01008  /* Packet Buffer Size - RW */
5747b43a1fSPaolo Bonzini #define E1000_FLASHT   0x01028  /* FLASH Timer Register */
5847b43a1fSPaolo Bonzini #define E1000_EEWR     0x0102C  /* EEPROM Write Register - RW */
5947b43a1fSPaolo Bonzini #define E1000_FLSWCTL  0x01030  /* FLASH control register */
6047b43a1fSPaolo Bonzini #define E1000_FLSWDATA 0x01034  /* FLASH data register */
6147b43a1fSPaolo Bonzini #define E1000_FLSWCNT  0x01038  /* FLASH Access Counter */
6206e7fa0aSDmitry Fleytman #define E1000_FLOL     0x01050  /* FEEP Auto Load */
6347b43a1fSPaolo Bonzini #define E1000_ERT      0x02008  /* Early Rx Threshold - RW */
6406e7fa0aSDmitry Fleytman #define E1000_FCRTH_A  0x00160  /* Alias to FCRTH */
6547b43a1fSPaolo Bonzini #define E1000_PSRCTL   0x02170  /* Packet Split Receive Control - RW */
6647b43a1fSPaolo Bonzini #define E1000_RDBAL    0x02800  /* RX Descriptor Base Address Low - RW */
6747b43a1fSPaolo Bonzini #define E1000_RDBAH    0x02804  /* RX Descriptor Base Address High - RW */
6847b43a1fSPaolo Bonzini #define E1000_RDLEN    0x02808  /* RX Descriptor Length - RW */
6947b43a1fSPaolo Bonzini #define E1000_RDH      0x02810  /* RX Descriptor Head - RW */
7047b43a1fSPaolo Bonzini #define E1000_RDT      0x02818  /* RX Descriptor Tail - RW */
7147b43a1fSPaolo Bonzini #define E1000_RDTR     0x02820  /* RX Delay Timer - RW */
7206e7fa0aSDmitry Fleytman #define E1000_RDTR_A   0x00108  /* Alias to RDTR */
7347b43a1fSPaolo Bonzini #define E1000_RDBAL0   E1000_RDBAL /* RX Desc Base Address Low (0) - RW */
7406e7fa0aSDmitry Fleytman #define E1000_RDBAL0_A 0x00110     /* Alias to RDBAL0 */
7547b43a1fSPaolo Bonzini #define E1000_RDBAH0   E1000_RDBAH /* RX Desc Base Address High (0) - RW */
7606e7fa0aSDmitry Fleytman #define E1000_RDBAH0_A 0x00114     /* Alias to RDBAH0 */
7747b43a1fSPaolo Bonzini #define E1000_RDLEN0   E1000_RDLEN /* RX Desc Length (0) - RW */
7806e7fa0aSDmitry Fleytman #define E1000_RDLEN0_A 0x00118     /* Alias to RDLEN0 */
7947b43a1fSPaolo Bonzini #define E1000_RDH0     E1000_RDH   /* RX Desc Head (0) - RW */
8006e7fa0aSDmitry Fleytman #define E1000_RDH0_A   0x00120     /* Alias to RDH0 */
8147b43a1fSPaolo Bonzini #define E1000_RDT0     E1000_RDT   /* RX Desc Tail (0) - RW */
8206e7fa0aSDmitry Fleytman #define E1000_RDT0_A   0x00128     /* Alias to RDT0 */
8347b43a1fSPaolo Bonzini #define E1000_RDTR0    E1000_RDTR  /* RX Delay Timer (0) - RW */
8447b43a1fSPaolo Bonzini #define E1000_RXDCTL   0x02828  /* RX Descriptor Control queue 0 - RW */
8547b43a1fSPaolo Bonzini #define E1000_RXDCTL1  0x02928  /* RX Descriptor Control queue 1 - RW */
8647b43a1fSPaolo Bonzini #define E1000_RADV     0x0282C  /* RX Interrupt Absolute Delay Timer - RW */
8747b43a1fSPaolo Bonzini #define E1000_RSRPD    0x02C00  /* RX Small Packet Detect - RW */
8847b43a1fSPaolo Bonzini #define E1000_RAID     0x02C08  /* Receive Ack Interrupt Delay - RW */
8906e7fa0aSDmitry Fleytman #define E1000_POEMB    0x00F10  /* PHY OEM Bits Register - RW */
9047b43a1fSPaolo Bonzini #define E1000_TDBAL    0x03800  /* TX Descriptor Base Address Low - RW */
9106e7fa0aSDmitry Fleytman #define E1000_TDBAL_A  0x00420  /* Alias to TDBAL */
9247b43a1fSPaolo Bonzini #define E1000_TDBAH    0x03804  /* TX Descriptor Base Address High - RW */
9306e7fa0aSDmitry Fleytman #define E1000_TDBAH_A  0x00424  /* Alias to TDBAH */
9447b43a1fSPaolo Bonzini #define E1000_TDLEN    0x03808  /* TX Descriptor Length - RW */
9506e7fa0aSDmitry Fleytman #define E1000_TDLEN_A  0x00428  /* Alias to TDLEN */
9647b43a1fSPaolo Bonzini #define E1000_TDH      0x03810  /* TX Descriptor Head - RW */
9706e7fa0aSDmitry Fleytman #define E1000_TDH_A    0x00430  /* Alias to TDH */
9847b43a1fSPaolo Bonzini #define E1000_TDT      0x03818  /* TX Descripotr Tail - RW */
9906e7fa0aSDmitry Fleytman #define E1000_TDT_A    0x00438  /* Alias to TDT */
10047b43a1fSPaolo Bonzini #define E1000_TIDV     0x03820  /* TX Interrupt Delay Value - RW */
10106e7fa0aSDmitry Fleytman #define E1000_TIDV_A   0x00440  /* Alias to TIDV */
10247b43a1fSPaolo Bonzini #define E1000_TXDCTL   0x03828  /* TX Descriptor Control - RW */
10347b43a1fSPaolo Bonzini #define E1000_TADV     0x0382C  /* TX Interrupt Absolute Delay Val - RW */
10447b43a1fSPaolo Bonzini #define E1000_TSPMT    0x03830  /* TCP Segmentation PAD & Min Threshold - RW */
10547b43a1fSPaolo Bonzini #define E1000_TARC0    0x03840  /* TX Arbitration Count (0) */
10647b43a1fSPaolo Bonzini #define E1000_TDBAL1   0x03900  /* TX Desc Base Address Low (1) - RW */
10747b43a1fSPaolo Bonzini #define E1000_TDBAH1   0x03904  /* TX Desc Base Address High (1) - RW */
10847b43a1fSPaolo Bonzini #define E1000_TDLEN1   0x03908  /* TX Desc Length (1) - RW */
10947b43a1fSPaolo Bonzini #define E1000_TDH1     0x03910  /* TX Desc Head (1) - RW */
11047b43a1fSPaolo Bonzini #define E1000_TDT1     0x03918  /* TX Desc Tail (1) - RW */
11147b43a1fSPaolo Bonzini #define E1000_TXDCTL1  0x03928  /* TX Descriptor Control (1) - RW */
11247b43a1fSPaolo Bonzini #define E1000_TARC1    0x03940  /* TX Arbitration Count (1) */
113757704f1SKamil Rytarowski #define E1000_SEQEC    0x04038  /* Sequence Error Count - R/clr */
11447b43a1fSPaolo Bonzini #define E1000_CEXTERR  0x0403C  /* Carrier Extension Error Count - R/clr */
11547b43a1fSPaolo Bonzini #define E1000_TSCTFC   0x040FC  /* TCP Segmentation Context TX Fail - R/clr */
11647b43a1fSPaolo Bonzini #define E1000_ICRXATC  0x04108  /* Interrupt Cause Rx Absolute Timer Expire Count */
11747b43a1fSPaolo Bonzini #define E1000_ICTXPTC  0x0410C  /* Interrupt Cause Tx Packet Timer Expire Count */
11847b43a1fSPaolo Bonzini #define E1000_ICTXATC  0x04110  /* Interrupt Cause Tx Absolute Timer Expire Count */
11947b43a1fSPaolo Bonzini #define E1000_ICTXQEC  0x04118  /* Interrupt Cause Tx Queue Empty Count */
12047b43a1fSPaolo Bonzini #define E1000_ICTXQMTC 0x0411C  /* Interrupt Cause Tx Queue Minimum Threshold Count */
12147b43a1fSPaolo Bonzini #define E1000_ICRXOC   0x04124  /* Interrupt Cause Receiver Overrun Count */
12206e7fa0aSDmitry Fleytman #define E1000_MFUTP01  0x05828  /* Management Flex UDP/TCP Ports 0/1 - RW */
12306e7fa0aSDmitry Fleytman #define E1000_MFUTP23  0x05830  /* Management Flex UDP/TCP Ports 2/3 - RW */
12447b43a1fSPaolo Bonzini #define E1000_FFLT     0x05F00  /* Flexible Filter Length Table - RW Array */
12547b43a1fSPaolo Bonzini #define E1000_HOST_IF  0x08800  /* Host Interface */
12647b43a1fSPaolo Bonzini #define E1000_FFVT     0x09800  /* Flexible Filter Value Table - RW Array */
12747b43a1fSPaolo Bonzini 
12847b43a1fSPaolo Bonzini #define E1000_KUMCTRLSTA 0x00034 /* MAC-PHY interface - RW */
12947b43a1fSPaolo Bonzini #define E1000_MDPHYA     0x0003C /* PHY address - RW */
13047b43a1fSPaolo Bonzini 
13106e7fa0aSDmitry Fleytman #define E1000_GCR2      0x05B64 /* 3GIO Control Register 2 */
13247b43a1fSPaolo Bonzini #define E1000_FFLT_DBG  0x05F04 /* Debug Register */
133*2431f4f1SMichael Tokarev #define E1000_HICR      0x08F00 /* Host Interface Control */
13447b43a1fSPaolo Bonzini 
13506e7fa0aSDmitry Fleytman #define E1000_RXMTRL     0x0B634 /* Time sync Rx EtherType and Msg Type - RW */
13606e7fa0aSDmitry Fleytman #define E1000_RXUDP      0x0B638 /* Time Sync Rx UDP Port - RW */
13706e7fa0aSDmitry Fleytman #define E1000_RXCFGL     0x0B634 /* RX Ethertype and Message Type - RW*/
13806e7fa0aSDmitry Fleytman 
13906e7fa0aSDmitry Fleytman #define E1000_MRQC_ENABLED(mrqc) (((mrqc) & (BIT(0) | BIT(1))) == BIT(0))
14006e7fa0aSDmitry Fleytman 
141c9653b77SAkihiko Odaki #define E1000_CPUVEC    0x02C10 /* CPU Vector Register - RW */
142c9653b77SAkihiko Odaki #define E1000_RSSIM     0x05864 /* RSS Interrupt Mask */
143c9653b77SAkihiko Odaki #define E1000_RSSIR     0x05868 /* RSS Interrupt Request */
144c9653b77SAkihiko Odaki 
14506e7fa0aSDmitry Fleytman #define E1000_RSS_QUEUE(reta, hash) ((E1000_RETA_VAL(reta, hash) & BIT(7)) >> 7)
14606e7fa0aSDmitry Fleytman 
1476f3fbe4eSDmitry Fleytman /* [TR]DBAL and [TR]DLEN masks */
1486f3fbe4eSDmitry Fleytman #define E1000_XDBAL_MASK            (~(BIT(4) - 1))
1496f3fbe4eSDmitry Fleytman #define E1000_XDLEN_MASK            ((BIT(20) - 1) & (~(BIT(7) - 1)))
1506f3fbe4eSDmitry Fleytman 
15106e7fa0aSDmitry Fleytman /* IVAR register parsing helpers */
15206e7fa0aSDmitry Fleytman #define E1000_IVAR_INT_ALLOC_VALID  (0x8)
15306e7fa0aSDmitry Fleytman 
15406e7fa0aSDmitry Fleytman #define E1000_IVAR_RXQ0_SHIFT       (0)
15506e7fa0aSDmitry Fleytman #define E1000_IVAR_RXQ1_SHIFT       (4)
15606e7fa0aSDmitry Fleytman #define E1000_IVAR_TXQ0_SHIFT       (8)
15706e7fa0aSDmitry Fleytman #define E1000_IVAR_TXQ1_SHIFT       (12)
15806e7fa0aSDmitry Fleytman #define E1000_IVAR_OTHER_SHIFT      (16)
15906e7fa0aSDmitry Fleytman 
16006e7fa0aSDmitry Fleytman #define E1000_IVAR_ENTRY_MASK       (0xF)
16106e7fa0aSDmitry Fleytman #define E1000_IVAR_ENTRY_VALID_MASK E1000_IVAR_INT_ALLOC_VALID
16206e7fa0aSDmitry Fleytman #define E1000_IVAR_ENTRY_VEC_MASK   (0x7)
16306e7fa0aSDmitry Fleytman 
16406e7fa0aSDmitry Fleytman #define E1000_IVAR_RXQ0(x)          ((x) >> E1000_IVAR_RXQ0_SHIFT)
16506e7fa0aSDmitry Fleytman #define E1000_IVAR_RXQ1(x)          ((x) >> E1000_IVAR_RXQ1_SHIFT)
16606e7fa0aSDmitry Fleytman #define E1000_IVAR_TXQ0(x)          ((x) >> E1000_IVAR_TXQ0_SHIFT)
16706e7fa0aSDmitry Fleytman #define E1000_IVAR_TXQ1(x)          ((x) >> E1000_IVAR_TXQ1_SHIFT)
16806e7fa0aSDmitry Fleytman #define E1000_IVAR_OTHER(x)         ((x) >> E1000_IVAR_OTHER_SHIFT)
16906e7fa0aSDmitry Fleytman 
17006e7fa0aSDmitry Fleytman #define E1000_IVAR_ENTRY_VALID(x)   ((x) & E1000_IVAR_ENTRY_VALID_MASK)
17106e7fa0aSDmitry Fleytman #define E1000_IVAR_ENTRY_VEC(x)     ((x) & E1000_IVAR_ENTRY_VEC_MASK)
17206e7fa0aSDmitry Fleytman 
17306e7fa0aSDmitry Fleytman #define E1000_IVAR_TX_INT_EVERY_WB  BIT(31)
17406e7fa0aSDmitry Fleytman 
17506e7fa0aSDmitry Fleytman #define E1000_RFCTL_ACK_DIS             0x00001000
17606e7fa0aSDmitry Fleytman #define E1000_RFCTL_ACK_DATA_DIS        0x00002000
17706e7fa0aSDmitry Fleytman 
17806e7fa0aSDmitry Fleytman /* PSRCTL parsing */
17906e7fa0aSDmitry Fleytman #define E1000_PSRCTL_BSIZE0_MASK   0x0000007F
18006e7fa0aSDmitry Fleytman #define E1000_PSRCTL_BSIZE1_MASK   0x00003F00
18106e7fa0aSDmitry Fleytman #define E1000_PSRCTL_BSIZE2_MASK   0x003F0000
18206e7fa0aSDmitry Fleytman #define E1000_PSRCTL_BSIZE3_MASK   0x3F000000
18306e7fa0aSDmitry Fleytman 
18406e7fa0aSDmitry Fleytman #define E1000_PSRCTL_BSIZE0_SHIFT  0
18506e7fa0aSDmitry Fleytman #define E1000_PSRCTL_BSIZE1_SHIFT  8
18606e7fa0aSDmitry Fleytman #define E1000_PSRCTL_BSIZE2_SHIFT  16
18706e7fa0aSDmitry Fleytman #define E1000_PSRCTL_BSIZE3_SHIFT  24
18806e7fa0aSDmitry Fleytman 
18906e7fa0aSDmitry Fleytman #define E1000_PSRCTL_BUFFS_PER_DESC 4
19006e7fa0aSDmitry Fleytman 
19147b43a1fSPaolo Bonzini /* PHY 1000 MII Register/Bit Definitions */
19206e7fa0aSDmitry Fleytman /* 82574-specific registers */
19306e7fa0aSDmitry Fleytman #define PHY_COPPER_CTRL1      0x10 /* Copper Specific Control Register 1 */
19406e7fa0aSDmitry Fleytman #define PHY_COPPER_STAT1      0x11 /* Copper Specific Status Register 1 */
19506e7fa0aSDmitry Fleytman #define PHY_COPPER_INT_ENABLE 0x12  /* Interrupt Enable Register */
19606e7fa0aSDmitry Fleytman #define PHY_COPPER_STAT2      0x13 /* Copper Specific Status Register 2 */
19706e7fa0aSDmitry Fleytman #define PHY_COPPER_CTRL3      0x14 /* Copper Specific Control Register 3 */
19806e7fa0aSDmitry Fleytman #define PHY_COPPER_CTRL2      0x1A /* Copper Specific Control Register 2 */
19906e7fa0aSDmitry Fleytman #define PHY_RX_ERR_CNTR       0x15  /* Receive Error Counter */
20006e7fa0aSDmitry Fleytman #define PHY_PAGE              0x16 /* Page Address (Any page) */
20106e7fa0aSDmitry Fleytman #define PHY_OEM_BITS          0x19 /* OEM Bits (Page 0) */
20206e7fa0aSDmitry Fleytman #define PHY_BIAS_1            0x1d /* Bias Setting Register */
20306e7fa0aSDmitry Fleytman #define PHY_BIAS_2            0x1e /* Bias Setting Register */
20406e7fa0aSDmitry Fleytman 
20506e7fa0aSDmitry Fleytman /* 82574-specific registers - page 2 */
20606e7fa0aSDmitry Fleytman #define PHY_MAC_CTRL1         0x10 /* MAC Specific Control Register 1 */
20706e7fa0aSDmitry Fleytman #define PHY_MAC_INT_ENABLE    0x12 /* MAC Interrupt Enable Register */
20806e7fa0aSDmitry Fleytman #define PHY_MAC_STAT          0x13 /* MAC Specific Status Register */
20906e7fa0aSDmitry Fleytman #define PHY_MAC_CTRL2         0x15 /* MAC Specific Control Register 2 */
21006e7fa0aSDmitry Fleytman 
21106e7fa0aSDmitry Fleytman /* 82574-specific registers - page 3 */
21206e7fa0aSDmitry Fleytman #define PHY_LED_03_FUNC_CTRL1 0x10 /* LED[3:0] Function Control */
21306e7fa0aSDmitry Fleytman #define PHY_LED_03_POL_CTRL   0x11 /* LED[3:0] Polarity Control */
21406e7fa0aSDmitry Fleytman #define PHY_LED_TIMER_CTRL    0x12 /* LED Timer Control */
21506e7fa0aSDmitry Fleytman #define PHY_LED_45_CTRL       0x13 /* LED[5:4] Function Control and Polarity */
21606e7fa0aSDmitry Fleytman 
21706e7fa0aSDmitry Fleytman /* 82574-specific registers - page 5 */
21806e7fa0aSDmitry Fleytman #define PHY_1000T_SKEW        0x14 /* 1000 BASE - T Pair Skew Register */
21906e7fa0aSDmitry Fleytman #define PHY_1000T_SWAP        0x15 /* 1000 BASE - T Pair Swap and Polarity */
22006e7fa0aSDmitry Fleytman 
22106e7fa0aSDmitry Fleytman /* 82574-specific registers - page 6 */
22206e7fa0aSDmitry Fleytman #define PHY_CRC_COUNTERS      0x11 /* CRC Counters */
22306e7fa0aSDmitry Fleytman 
22406e7fa0aSDmitry Fleytman #define PHY_PAGE_RW_MASK 0x7F /* R/W part of page address register */
22506e7fa0aSDmitry Fleytman 
22647b43a1fSPaolo Bonzini #define MAX_PHY_REG_ADDRESS        0x1F  /* 5 bit address bus (0-0x1F) */
22747b43a1fSPaolo Bonzini #define MAX_PHY_MULTI_PAGE_REG     0xF   /* Registers equal on all pages */
22847b43a1fSPaolo Bonzini 
22947b43a1fSPaolo Bonzini /* M88E1000 Specific Registers */
23047b43a1fSPaolo Bonzini #define M88E1000_PHY_SPEC_CTRL     0x10  /* PHY Specific Control Register */
23147b43a1fSPaolo Bonzini #define M88E1000_PHY_SPEC_STATUS   0x11  /* PHY Specific Status Register */
23247b43a1fSPaolo Bonzini #define M88E1000_INT_ENABLE        0x12  /* Interrupt Enable Register */
23347b43a1fSPaolo Bonzini #define M88E1000_INT_STATUS        0x13  /* Interrupt Status Register */
23447b43a1fSPaolo Bonzini #define M88E1000_EXT_PHY_SPEC_CTRL 0x14  /* Extended PHY Specific Control */
23547b43a1fSPaolo Bonzini #define M88E1000_RX_ERR_CNTR       0x15  /* Receive Error Counter */
23647b43a1fSPaolo Bonzini 
23747b43a1fSPaolo Bonzini #define M88E1000_PHY_EXT_CTRL      0x1A  /* PHY extend control register */
23847b43a1fSPaolo Bonzini #define M88E1000_PHY_PAGE_SELECT   0x1D  /* Reg 29 for page number setting */
23947b43a1fSPaolo Bonzini #define M88E1000_PHY_GEN_CONTROL   0x1E  /* Its meaning depends on reg 29 */
24047b43a1fSPaolo Bonzini #define M88E1000_PHY_VCO_REG_BIT8  0x100 /* Bits 8 & 11 are adjusted for */
24147b43a1fSPaolo Bonzini #define M88E1000_PHY_VCO_REG_BIT11 0x800    /* improved BER performance */
24247b43a1fSPaolo Bonzini 
24347b43a1fSPaolo Bonzini #define E1000_STATUS_FUNC_MASK  0x0000000C      /* PCI Function Mask */
24447b43a1fSPaolo Bonzini #define E1000_STATUS_FUNC_SHIFT 2
24547b43a1fSPaolo Bonzini #define E1000_STATUS_FUNC_0     0x00000000      /* Function 0 */
24647b43a1fSPaolo Bonzini #define E1000_STATUS_FUNC_1     0x00000004      /* Function 1 */
24747b43a1fSPaolo Bonzini #define E1000_STATUS_TXOFF      0x00000010      /* transmission paused */
24847b43a1fSPaolo Bonzini #define E1000_STATUS_TBIMODE    0x00000020      /* TBI mode */
24947b43a1fSPaolo Bonzini #define E1000_STATUS_SPEED_MASK 0x000000C0
25047b43a1fSPaolo Bonzini #define E1000_STATUS_LAN_INIT_DONE 0x00000200   /* Lan Init Completion
25147b43a1fSPaolo Bonzini                                                    by EEPROM/Flash */
25247b43a1fSPaolo Bonzini #define E1000_STATUS_ASDV       0x00000300      /* Auto speed detect value */
25306e7fa0aSDmitry Fleytman #define E1000_STATUS_ASDV_10    0x00000000      /* ASDV 10Mb */
25406e7fa0aSDmitry Fleytman #define E1000_STATUS_ASDV_100   0x00000100      /* ASDV 100Mb */
25506e7fa0aSDmitry Fleytman #define E1000_STATUS_ASDV_1000  0x00000200      /* ASDV 1Gb */
25647b43a1fSPaolo Bonzini #define E1000_STATUS_DOCK_CI    0x00000800      /* Change in Dock/Undock state. Clear on write '0'. */
25747b43a1fSPaolo Bonzini #define E1000_STATUS_MTXCKOK    0x00000400      /* MTX clock running OK */
25847b43a1fSPaolo Bonzini #define E1000_STATUS_PCI66      0x00000800      /* In 66Mhz slot */
25947b43a1fSPaolo Bonzini #define E1000_STATUS_BUS64      0x00001000      /* In 64 bit slot */
26047b43a1fSPaolo Bonzini #define E1000_STATUS_PCIX_MODE  0x00002000      /* PCI-X mode */
26147b43a1fSPaolo Bonzini #define E1000_STATUS_PCIX_SPEED 0x0000C000      /* PCI-X bus speed */
26247b43a1fSPaolo Bonzini #define E1000_STATUS_BMC_SKU_0  0x00100000 /* BMC USB redirect disabled */
26347b43a1fSPaolo Bonzini #define E1000_STATUS_BMC_SKU_1  0x00200000 /* BMC SRAM disabled */
26447b43a1fSPaolo Bonzini #define E1000_STATUS_BMC_SKU_2  0x00400000 /* BMC SDRAM disabled */
26547b43a1fSPaolo Bonzini #define E1000_STATUS_BMC_CRYPTO 0x00800000 /* BMC crypto disabled */
26647b43a1fSPaolo Bonzini #define E1000_STATUS_BMC_LITE   0x01000000 /* BMC external code execution disabled */
26747b43a1fSPaolo Bonzini #define E1000_STATUS_RGMII_ENABLE 0x02000000 /* RGMII disabled */
26847b43a1fSPaolo Bonzini #define E1000_STATUS_FUSE_8       0x04000000
26947b43a1fSPaolo Bonzini #define E1000_STATUS_FUSE_9       0x08000000
27047b43a1fSPaolo Bonzini #define E1000_STATUS_SERDES0_DIS  0x10000000 /* SERDES disabled on port 0 */
27147b43a1fSPaolo Bonzini #define E1000_STATUS_SERDES1_DIS  0x20000000 /* SERDES disabled on port 1 */
27206e7fa0aSDmitry Fleytman #define E1000_STATUS_SPEED_SHIFT  6
27306e7fa0aSDmitry Fleytman #define E1000_STATUS_ASDV_SHIFT   8
27447b43a1fSPaolo Bonzini 
27547b43a1fSPaolo Bonzini /* Transmit Descriptor */
27647b43a1fSPaolo Bonzini struct e1000_tx_desc {
27747b43a1fSPaolo Bonzini     uint64_t buffer_addr;       /* Address of the descriptor's data buffer */
27847b43a1fSPaolo Bonzini     union {
27947b43a1fSPaolo Bonzini         uint32_t data;
28047b43a1fSPaolo Bonzini         struct {
28147b43a1fSPaolo Bonzini             uint16_t length;    /* Data buffer length */
28247b43a1fSPaolo Bonzini             uint8_t cso;        /* Checksum offset */
28347b43a1fSPaolo Bonzini             uint8_t cmd;        /* Descriptor control */
28447b43a1fSPaolo Bonzini         } flags;
28547b43a1fSPaolo Bonzini     } lower;
28647b43a1fSPaolo Bonzini     union {
28747b43a1fSPaolo Bonzini         uint32_t data;
28847b43a1fSPaolo Bonzini         struct {
28947b43a1fSPaolo Bonzini             uint8_t status;     /* Descriptor status */
29047b43a1fSPaolo Bonzini             uint8_t css;        /* Checksum start */
29147b43a1fSPaolo Bonzini             uint16_t special;
29247b43a1fSPaolo Bonzini         } fields;
29347b43a1fSPaolo Bonzini     } upper;
29447b43a1fSPaolo Bonzini };
29547b43a1fSPaolo Bonzini 
29647b43a1fSPaolo Bonzini #define E1000_TXD_POPTS_IXSM 0x01       /* Insert IP checksum */
29747b43a1fSPaolo Bonzini #define E1000_TXD_POPTS_TXSM 0x02       /* Insert TCP/UDP checksum */
2982fe63579SAkihiko Odaki 
299121d0712SMarkus Armbruster #endif /* HW_E1000_REGS_H */
300