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