1 1.22 andvar /* $NetBSD: if_sipreg.h,v 1.22 2024/02/02 22:39:10 andvar Exp $ */ 2 1.6 thorpej 3 1.6 thorpej /*- 4 1.6 thorpej * Copyright (c) 2001 The NetBSD Foundation, Inc. 5 1.6 thorpej * All rights reserved. 6 1.6 thorpej * 7 1.6 thorpej * This code is derived from software contributed to The NetBSD Foundation 8 1.6 thorpej * by Jason R. Thorpe. 9 1.6 thorpej * 10 1.6 thorpej * Redistribution and use in source and binary forms, with or without 11 1.6 thorpej * modification, are permitted provided that the following conditions 12 1.6 thorpej * are met: 13 1.6 thorpej * 1. Redistributions of source code must retain the above copyright 14 1.6 thorpej * notice, this list of conditions and the following disclaimer. 15 1.6 thorpej * 2. Redistributions in binary form must reproduce the above copyright 16 1.6 thorpej * notice, this list of conditions and the following disclaimer in the 17 1.6 thorpej * documentation and/or other materials provided with the distribution. 18 1.6 thorpej * 19 1.6 thorpej * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 1.6 thorpej * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 1.6 thorpej * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 1.6 thorpej * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 1.6 thorpej * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 1.6 thorpej * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 1.6 thorpej * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 1.6 thorpej * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 1.6 thorpej * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 1.6 thorpej * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 1.6 thorpej * POSSIBILITY OF SUCH DAMAGE. 30 1.6 thorpej */ 31 1.1 thorpej 32 1.1 thorpej /*- 33 1.1 thorpej * Copyright (c) 1999 Network Computer, Inc. 34 1.1 thorpej * All rights reserved. 35 1.1 thorpej * 36 1.1 thorpej * Redistribution and use in source and binary forms, with or without 37 1.1 thorpej * modification, are permitted provided that the following conditions 38 1.1 thorpej * are met: 39 1.1 thorpej * 1. Redistributions of source code must retain the above copyright 40 1.1 thorpej * notice, this list of conditions and the following disclaimer. 41 1.1 thorpej * 2. Redistributions in binary form must reproduce the above copyright 42 1.1 thorpej * notice, this list of conditions and the following disclaimer in the 43 1.1 thorpej * documentation and/or other materials provided with the distribution. 44 1.1 thorpej * 3. Neither the name of Network Computer, Inc. nor the names of its 45 1.1 thorpej * contributors may be used to endorse or promote products derived 46 1.1 thorpej * from this software without specific prior written permission. 47 1.1 thorpej * 48 1.1 thorpej * THIS SOFTWARE IS PROVIDED BY NETWORK COMPUTER, INC. AND CONTRIBUTORS 49 1.1 thorpej * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 50 1.1 thorpej * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 51 1.1 thorpej * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 52 1.1 thorpej * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 53 1.1 thorpej * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 54 1.1 thorpej * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 55 1.1 thorpej * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 56 1.1 thorpej * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 57 1.1 thorpej * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 58 1.1 thorpej * POSSIBILITY OF SUCH DAMAGE. 59 1.1 thorpej */ 60 1.1 thorpej 61 1.1 thorpej #ifndef _DEV_PCI_IF_SIPREG_H_ 62 1.1 thorpej #define _DEV_PCI_IF_SIPREG_H_ 63 1.1 thorpej 64 1.1 thorpej /* 65 1.3 thorpej * Register description for the Silicon Integrated Systems SiS 900, 66 1.6 thorpej * SiS 7016, National Semiconductor DP83815 10/100, and National 67 1.6 thorpej * Semiconduction DP83820 10/100/1000 PCI Ethernet controller. 68 1.1 thorpej * 69 1.1 thorpej * Written by Jason R. Thorpe for Network Computer, Inc. 70 1.1 thorpej */ 71 1.1 thorpej 72 1.1 thorpej /* 73 1.1 thorpej * Transmit FIFO size. Used to compute the transmit drain threshold. 74 1.1 thorpej * 75 1.14 thorpej * On the SiS 900, the transmit FIFO is arranged as a 512 32-bit memory 76 1.14 thorpej * array. 77 1.14 thorpej * 78 1.14 thorpej * On the DP83820, we have an 8KB transmit FIFO. 79 1.1 thorpej */ 80 1.18 dyoung #define DP83820_SIP_TXFIFO_SIZE 8192 81 1.18 dyoung #define OTHER_SIP_TXFIFO_SIZE (512 * 4) 82 1.1 thorpej 83 1.1 thorpej /* 84 1.1 thorpej * The SiS900 uses a single descriptor format for both transmit 85 1.1 thorpej * and receive descriptor chains. 86 1.6 thorpej * 87 1.6 thorpej * Note the DP83820 can use 64-bit DMA addresses for link and bufptr. 88 1.21 thorpej * Note also that the buffer pointer and command/status words are in 89 1.21 thorpej * the opposite order on the DP83820 to facilitate 64-bit DMA addresses. 90 1.6 thorpej * 91 1.6 thorpej * For transmit, buffers need not be aligned. For receive, buffers 92 1.6 thorpej * must be aligned to 4-byte (8-byte on DP83820) boundaries. 93 1.1 thorpej */ 94 1.21 thorpej #define SIP_DESC_LINK 0 /* link to next descriptor */ 95 1.21 thorpej #define SIP_DESC_CMDSTS 1 /* ccommand/status */ 96 1.21 thorpej #define SIP_DESC_BUFPTR 2 /* pointer to DMA segment */ 97 1.21 thorpej 98 1.21 thorpej #define GSIP_DESC_LINK 0 99 1.21 thorpej #define GSIP_DESC_BUFPTR 1 100 1.21 thorpej #define GSIP_DESC_CMDSTS 2 101 1.21 thorpej #define GSIP_DESC_EXTSTS 3 /* extended status */ 102 1.21 thorpej 103 1.21 thorpej #define GSIP64_DESC_LINK_LO 0 104 1.21 thorpej #define GSIP64_DESC_LINK_HI 1 105 1.21 thorpej #define GSIP64_DESC_BUFPTR_LO 2 106 1.21 thorpej #define GSIP64_DESC_BUFPTR_HI 3 107 1.21 thorpej #define GSIP64_DESC_CMDSTS 4 108 1.21 thorpej #define GSIP64_DESC_EXTSTS 5 109 1.21 thorpej 110 1.21 thorpej #define SIP_NDESC_WORDS 6 111 1.21 thorpej 112 1.1 thorpej struct sip_desc { 113 1.21 thorpej uint32_t sipd_words[SIP_NDESC_WORDS]; 114 1.1 thorpej }; 115 1.1 thorpej 116 1.1 thorpej /* 117 1.1 thorpej * CMDSTS bits common to transmit and receive. 118 1.1 thorpej */ 119 1.1 thorpej #define CMDSTS_OWN 0x80000000 /* owned by consumer */ 120 1.1 thorpej #define CMDSTS_MORE 0x40000000 /* more descriptors */ 121 1.1 thorpej #define CMDSTS_INTR 0x20000000 /* interrupt when ownership changes */ 122 1.1 thorpej #define CMDSTS_SUPCRC 0x10000000 /* suppress CRC */ 123 1.1 thorpej #define CMDSTS_OK 0x08000000 /* packet ok */ 124 1.18 dyoung #define DP83820_CMDSTS_SIZE_MASK 0x0000ffff /* packet size */ 125 1.18 dyoung #define OTHER_CMDSTS_SIZE_MASK 0x000007ff /* packet size */ 126 1.1 thorpej 127 1.18 dyoung #define CMDSTS_SIZE(sc, x) ((x) & sc->sc_bits.b_cmdsts_size_mask) 128 1.1 thorpej 129 1.1 thorpej /* 130 1.1 thorpej * CMDSTS bits for transmit. 131 1.1 thorpej */ 132 1.1 thorpej #define CMDSTS_Tx_TXA 0x04000000 /* transmit abort */ 133 1.1 thorpej #define CMDSTS_Tx_TFU 0x02000000 /* transmit FIFO underrun */ 134 1.1 thorpej #define CMDSTS_Tx_CRS 0x01000000 /* carrier sense lost */ 135 1.1 thorpej #define CMDSTS_Tx_TD 0x00800000 /* transmit deferred */ 136 1.1 thorpej #define CMDSTS_Tx_ED 0x00400000 /* excessive deferral */ 137 1.1 thorpej #define CMDSTS_Tx_OWC 0x00200000 /* out of window collision */ 138 1.1 thorpej #define CMDSTS_Tx_EC 0x00100000 /* excessive collisions */ 139 1.1 thorpej #define CMDSTS_Tx_CCNT 0x000f0000 /* collision count */ 140 1.1 thorpej 141 1.1 thorpej #define CMDSTS_COLLISIONS(x) (((x) & CMDSTS_Tx_CCNT) >> 16) 142 1.1 thorpej 143 1.1 thorpej /* 144 1.1 thorpej * CMDSTS bits for receive. 145 1.1 thorpej */ 146 1.1 thorpej #define CMDSTS_Rx_RXA 0x04000000 /* receive abort */ 147 1.1 thorpej #define CMDSTS_Rx_RXO 0x02000000 /* receive overrun */ 148 1.1 thorpej #define CMDSTS_Rx_DEST 0x01800000 /* destination class */ 149 1.1 thorpej #define CMDSTS_Rx_LONG 0x00400000 /* packet too long */ 150 1.1 thorpej #define CMDSTS_Rx_RUNT 0x00200000 /* runt packet */ 151 1.1 thorpej #define CMDSTS_Rx_ISE 0x00100000 /* invalid symbol error */ 152 1.1 thorpej #define CMDSTS_Rx_CRCE 0x00080000 /* CRC error */ 153 1.1 thorpej #define CMDSTS_Rx_FAE 0x00040000 /* frame alignment error */ 154 1.1 thorpej #define CMDSTS_Rx_LBP 0x00020000 /* loopback packet */ 155 1.18 dyoung /* #ifdef DP83820 */ 156 1.6 thorpej #define CMDSTS_Rx_IRL 0x00010000 /* in-range length error */ 157 1.18 dyoung /* #else */ 158 1.1 thorpej #define CMDSTS_Rx_COL 0x00010000 /* collision activity */ 159 1.18 dyoung /* #endif DP83820 */ 160 1.1 thorpej 161 1.1 thorpej #define CMDSTS_Rx_DEST_REJ 0x00000000 /* packet rejected */ 162 1.1 thorpej #define CMDSTS_Rx_DEST_STA 0x00800000 /* matched station address */ 163 1.1 thorpej #define CMDSTS_Rx_DEST_MUL 0x01000000 /* multicast address */ 164 1.1 thorpej #define CMDSTS_Rx_DEST_BRD 0x01800000 /* broadcast address */ 165 1.1 thorpej 166 1.6 thorpej /* 167 1.6 thorpej * EXTSTS bits. 168 1.6 thorpej */ 169 1.6 thorpej #define EXTSTS_Rx_UDPERR 0x00400000 /* UDP checksum error */ 170 1.6 thorpej #define EXTSTS_UDPPKT 0x00200000 /* perform UDP checksum */ 171 1.6 thorpej #define EXTSTS_Rx_TCPERR 0x00100000 /* TCP checksum error */ 172 1.6 thorpej #define EXTSTS_TCPPKT 0x00080000 /* perform TCP checksum */ 173 1.6 thorpej #define EXTSTS_Rx_IPERR 0x00040000 /* IP header checksum error */ 174 1.6 thorpej #define EXTSTS_IPPKT 0x00020000 /* perform IP header checksum */ 175 1.6 thorpej #define EXTSTS_VPKT 0x00010000 /* insert VLAN tag */ 176 1.6 thorpej #define EXTSTS_VTCI 0x0000ffff /* VLAN tag control information */ 177 1.6 thorpej 178 1.1 thorpej /* 179 1.1 thorpej * PCI Configuration space registers. 180 1.1 thorpej */ 181 1.1 thorpej #define SIP_PCI_CFGIOA (PCI_MAPREG_START + 0x00) 182 1.1 thorpej 183 1.1 thorpej #define SIP_PCI_CFGMA (PCI_MAPREG_START + 0x04) 184 1.1 thorpej 185 1.18 dyoung /* DP83820 only */ 186 1.6 thorpej #define SIP_PCI_CFGMA1 (PCI_MAPREG_START + 0x08) 187 1.6 thorpej 188 1.1 thorpej #define SIP_PCI_CFGEROMA 0x30 /* expansion ROM address */ 189 1.1 thorpej 190 1.1 thorpej #define SIP_PCI_CFGPMC 0x40 /* power management cap. */ 191 1.1 thorpej 192 1.1 thorpej #define SIP_PCI_CFGPMCSR 0x44 /* power management ctl. */ 193 1.1 thorpej 194 1.1 thorpej /* 195 1.1 thorpej * MAC Operation Registers 196 1.1 thorpej */ 197 1.1 thorpej #define SIP_CR 0x00 /* command register */ 198 1.18 dyoung 199 1.18 dyoung /* DP83820 only */ 200 1.6 thorpej #define CR_RXPRI3 0x00010000 /* Rx priority queue select */ 201 1.6 thorpej #define CR_RXPRI2 0x00008000 /* Rx priority queue select */ 202 1.6 thorpej #define CR_RXPRI1 0x00004000 /* Rx priority queue select */ 203 1.6 thorpej #define CR_RXPRI0 0x00002000 /* Rx priority queue select */ 204 1.6 thorpej #define CR_TXPRI3 0x00001000 /* Tx priority queue select */ 205 1.6 thorpej #define CR_TXPRI2 0x00000800 /* Tx priority queue select */ 206 1.6 thorpej #define CR_TXPRI1 0x00000400 /* Tx priority queue select */ 207 1.6 thorpej #define CR_TXPRI0 0x00000200 /* Tx priority queue select */ 208 1.18 dyoung 209 1.8 thorpej #define CR_RLD 0x00000400 /* reload from NVRAM */ 210 1.1 thorpej #define CR_RST 0x00000100 /* software reset */ 211 1.1 thorpej #define CR_SWI 0x00000080 /* software interrupt */ 212 1.1 thorpej #define CR_RXR 0x00000020 /* receiver reset */ 213 1.1 thorpej #define CR_TXR 0x00000010 /* transmit reset */ 214 1.1 thorpej #define CR_RXD 0x00000008 /* receiver disable */ 215 1.1 thorpej #define CR_RXE 0x00000004 /* receiver enable */ 216 1.1 thorpej #define CR_TXD 0x00000002 /* transmit disable */ 217 1.1 thorpej #define CR_TXE 0x00000001 /* transmit enable */ 218 1.1 thorpej 219 1.1 thorpej #define SIP_CFG 0x04 /* configuration register */ 220 1.3 thorpej #define CFG_LNKSTS 0x80000000 /* link status (83815) */ 221 1.16 dyoung /* #ifdef DP83820 */ 222 1.6 thorpej #define CFG_SPEED1000 0x40000000 /* 1000Mb/s input pin */ 223 1.16 dyoung #define CFG83820_SPEED100 0x20000000 /* 100Mb/s input pin */ 224 1.6 thorpej #define CFG_DUPSTS 0x10000000 /* full-duplex status */ 225 1.6 thorpej #define CFG_TBI_EN 0x01000000 /* ten-bit interface enable */ 226 1.6 thorpej #define CFG_MODE_1000 0x00400000 /* 1000Mb/s mode enable */ 227 1.6 thorpej #define CFG_PINT_DUP 0x00100000 /* interrupt on PHY DUP change */ 228 1.6 thorpej #define CFG_PINT_LNK 0x00080000 /* interrupt on PHY LNK change */ 229 1.6 thorpej #define CFG_PINT_SPD 0x00040000 /* interrupt on PHY SPD change */ 230 1.6 thorpej #define CFG_TMRTEST 0x00020000 /* timer test mode */ 231 1.6 thorpej #define CFG_MRM_DIS 0x00010000 /* MRM disable */ 232 1.6 thorpej #define CFG_MWI_DIS 0x00008000 /* MWI disable */ 233 1.6 thorpej #define CFG_T64ADDR 0x00004000 /* target 64-bit addressing enable */ 234 1.6 thorpej #define CFG_PCI64_DET 0x00002000 /* 64-bit PCI bus detected */ 235 1.6 thorpej #define CFG_DATA64_EN 0x00001000 /* 64-bit data enable */ 236 1.6 thorpej #define CFG_M64ADDR 0x00000800 /* master 64-bit addressing enable */ 237 1.16 dyoung /* #else */ 238 1.16 dyoung #define CFG83815_SPEED100 0x40000000 /* 100Mb/s (83815) */ 239 1.3 thorpej #define CFG_FDUP 0x20000000 /* full duplex (83815) */ 240 1.3 thorpej #define CFG_POL 0x10000000 /* 10Mb/s polarity (83815) */ 241 1.3 thorpej #define CFG_ANEG_DN 0x08000000 /* autonegotiation done (83815) */ 242 1.3 thorpej #define CFG_PHY_CFG 0x00fc0000 /* PHY configuration (83815) */ 243 1.3 thorpej #define CFG_PINT_ACEN 0x00020000 /* PHY interrupt auto clear (83815) */ 244 1.3 thorpej #define CFG_PAUSE_ADV 0x00010000 /* pause advertise (83815) */ 245 1.3 thorpej #define CFG_ANEG_SEL 0x0000e000 /* autonegotiation select (83815) */ 246 1.16 dyoung /* #endif DP83820 */ 247 1.3 thorpej #define CFG_PHY_RST 0x00000400 /* PHY reset (83815) */ 248 1.3 thorpej #define CFG_PHY_DIS 0x00000200 /* PHY disable (83815) */ 249 1.16 dyoung /* #ifdef DP83820 */ 250 1.6 thorpej #define CFG_EXTSTS_EN 0x00000100 /* extended status enable */ 251 1.16 dyoung /* #else */ 252 1.3 thorpej #define CFG_EUPHCOMP 0x00000100 /* 83810 descriptor compat (83815) */ 253 1.16 dyoung /* #endif DP83820 */ 254 1.9 thorpej #define CFG_EDBMASTEN 0x00002000 /* 635,900B ?? from linux driver */ 255 1.9 thorpej #define CFG_RNDCNT 0x00000400 /* 635,900B ?? from linux driver */ 256 1.9 thorpej #define CFG_FAIRBO 0x00000200 /* 635,900B ?? from linux driver */ 257 1.1 thorpej #define CFG_REQALG 0x00000080 /* PCI bus request alg. */ 258 1.1 thorpej #define CFG_SB 0x00000040 /* single backoff */ 259 1.1 thorpej #define CFG_POW 0x00000020 /* program out of window timer */ 260 1.1 thorpej #define CFG_EXD 0x00000010 /* excessive defferal timer disable */ 261 1.1 thorpej #define CFG_PESEL 0x00000008 /* parity error detection action */ 262 1.16 dyoung /* #ifdef DP83820 */ 263 1.6 thorpej #define CFG_BROM_DIS 0x00000004 /* boot ROM disable */ 264 1.6 thorpej #define CFG_EXT_125 0x00000002 /* external 125MHz reference select */ 265 1.16 dyoung /* #endif DP83820 */ 266 1.1 thorpej #define CFG_BEM 0x00000001 /* big-endian mode */ 267 1.1 thorpej 268 1.1 thorpej #define SIP_EROMAR 0x08 /* EEPROM access register */ 269 1.13 cube #define EROMAR_REQ 0x00000400 /* SiS 96x specific */ 270 1.13 cube #define EROMAR_DONE 0x00000200 /* SiS 96x specific */ 271 1.13 cube #define EROMAR_GNT 0x00000100 /* SiS 96x specific */ 272 1.6 thorpej #define EROMAR_MDC 0x00000040 /* MII clock */ 273 1.7 thorpej #define EROMAR_MDDIR 0x00000020 /* MII direction (1 == MAC->PHY) */ 274 1.6 thorpej #define EROMAR_MDIO 0x00000010 /* MII data */ 275 1.1 thorpej #define EROMAR_EECS 0x00000008 /* chip select */ 276 1.1 thorpej #define EROMAR_EESK 0x00000004 /* clock */ 277 1.1 thorpej #define EROMAR_EEDO 0x00000002 /* data out */ 278 1.1 thorpej #define EROMAR_EEDI 0x00000001 /* data in */ 279 1.1 thorpej 280 1.1 thorpej #define SIP_PTSCR 0x0c /* PCI test control register */ 281 1.6 thorpej #define PTSCR_RBIST_RST 0x00002000 /* SRAM BIST reset */ 282 1.6 thorpej #define PTSCR_RBIST_EN 0x00000400 /* SRAM BIST enable */ 283 1.6 thorpej #define PTSCR_RBIST_DONE 0x00000200 /* SRAM BIST done */ 284 1.6 thorpej #define PTSCR_RBIST_RX1FAIL 0x00000100 /* Rx status FIFO BIST fail */ 285 1.6 thorpej #define PTSCR_RBIST_RX0FAIL 0x00000080 /* Rx data FIFO BIST fail */ 286 1.6 thorpej #define PTSCR_RBIST_TX0FAIL 0x00000020 /* Tx data FIFO BIST fail */ 287 1.6 thorpej #define PTSCR_RBIST_HFFAIL 0x00000010 /* hash filter BIST fail */ 288 1.6 thorpej #define PTSCR_RBIST_RXFAIL 0x00000008 /* Rx filter BIST failed */ 289 1.6 thorpej #define PTSCR_EELOAD_EN 0x00000004 /* EEPROM load initiate */ 290 1.6 thorpej #define PTSCR_EEBIST_EN 0x00000002 /* EEPROM BIST enable */ 291 1.6 thorpej #define PTSCR_EEBIST_FAIL 0x00000001 /* EEPROM BIST failed */ 292 1.1 thorpej #define PTSCR_DIS_TEST 0x40000000 /* discard timer test mode */ 293 1.1 thorpej #define PTSCR_EROM_TACC 0x0f000000 /* boot rom access time */ 294 1.1 thorpej #define PTSCR_TRRAMADR 0x001ff000 /* TX/RX RAM address */ 295 1.1 thorpej #define PTSCR_BMTEN 0x00000200 /* bus master test enable */ 296 1.1 thorpej #define PTSCR_RRTMEN 0x00000080 /* receive RAM test mode enable */ 297 1.1 thorpej #define PTSCR_TRTMEN 0x00000040 /* transmit RAM test mode enable */ 298 1.1 thorpej #define PTSCR_SRTMEN 0x00000020 /* status RAM test mode enable */ 299 1.1 thorpej #define PTSCR_SRAMADR 0x0000001f /* status RAM address */ 300 1.1 thorpej 301 1.1 thorpej #define SIP_ISR 0x10 /* interrupt status register */ 302 1.18 dyoung /* DP83820 only */ 303 1.6 thorpej #define ISR_TXDESC3 0x40000000 /* Tx queue 3 */ 304 1.6 thorpej #define ISR_TXDESC2 0x20000000 /* Tx queue 2 */ 305 1.6 thorpej #define ISR_TXDESC1 0x10000000 /* Tx queue 1 */ 306 1.6 thorpej #define ISR_TXDESC0 0x08000000 /* Tx queue 0 */ 307 1.6 thorpej #define ISR_RXDESC3 0x04000000 /* Rx queue 3 */ 308 1.6 thorpej #define ISR_RXDESC2 0x02000000 /* Rx queue 2 */ 309 1.6 thorpej #define ISR_RXDESC1 0x01000000 /* Rx queue 1 */ 310 1.6 thorpej #define ISR_RXDESC0 0x00800000 /* Rx queue 0 */ 311 1.18 dyoung 312 1.18 dyoung /* non-DP83820 only */ 313 1.18 dyoung #define ISR_WAKEEVT 0x10000000 /* wake up event */ 314 1.18 dyoung 315 1.18 dyoung #if 0 316 1.18 dyoung #ifdef DP83820 317 1.6 thorpej #define ISR_TXRCMP 0x00400000 /* transmit reset complete */ 318 1.6 thorpej #define ISR_RXRCMP 0x00200000 /* receive reset complete */ 319 1.6 thorpej #define ISR_DPERR 0x00100000 /* detected parity error */ 320 1.6 thorpej #define ISR_SSERR 0x00080000 /* signalled system error */ 321 1.6 thorpej #define ISR_RMABT 0x00040000 /* received master abort */ 322 1.6 thorpej #define ISR_RTABT 0x00020000 /* received target abort */ 323 1.6 thorpej #else 324 1.1 thorpej #define ISR_TXRCMP 0x02000000 /* transmit reset complete */ 325 1.1 thorpej #define ISR_RXRCMP 0x01000000 /* receive reset complete */ 326 1.1 thorpej #define ISR_DPERR 0x00800000 /* detected parity error */ 327 1.1 thorpej #define ISR_SSERR 0x00400000 /* signalled system error */ 328 1.1 thorpej #define ISR_RMABT 0x00200000 /* received master abort */ 329 1.1 thorpej #define ISR_RTABT 0x00100000 /* received target abort */ 330 1.6 thorpej #endif /* DP83820 */ 331 1.18 dyoung #endif /* 0 */ 332 1.16 dyoung 333 1.16 dyoung /* SiS 900 only */ 334 1.16 dyoung #define ISR_PAUSE_END 0x08000000 /* end of transmission pause */ 335 1.16 dyoung #define ISR_PAUSE_ST 0x04000000 /* start of transmission pause */ 336 1.16 dyoung 337 1.1 thorpej #define ISR_RXSOVR 0x00010000 /* Rx status FIFO overrun */ 338 1.1 thorpej #define ISR_HIBERR 0x00008000 /* high bits error set */ 339 1.18 dyoung 340 1.18 dyoung /* DP83820 only */ 341 1.6 thorpej #define ISR_PHY 0x00004000 /* PHY interrupt */ 342 1.6 thorpej #define ISR_PME 0x00002000 /* power management event */ 343 1.18 dyoung 344 1.1 thorpej #define ISR_SWI 0x00001000 /* software interrupt */ 345 1.18 dyoung 346 1.18 dyoung /* DP83820 only */ 347 1.6 thorpej #define ISR_MIB 0x00000800 /* MIB service */ 348 1.18 dyoung 349 1.1 thorpej #define ISR_TXURN 0x00000400 /* Tx underrun */ 350 1.1 thorpej #define ISR_TXIDLE 0x00000200 /* Tx idle */ 351 1.1 thorpej #define ISR_TXERR 0x00000100 /* Tx error */ 352 1.1 thorpej #define ISR_TXDESC 0x00000080 /* Tx descriptor interrupt */ 353 1.1 thorpej #define ISR_TXOK 0x00000040 /* Tx okay */ 354 1.1 thorpej #define ISR_RXORN 0x00000020 /* Rx overrun */ 355 1.1 thorpej #define ISR_RXIDLE 0x00000010 /* Rx idle */ 356 1.1 thorpej #define ISR_RXEARLY 0x00000008 /* Rx early */ 357 1.1 thorpej #define ISR_RXERR 0x00000004 /* Rx error */ 358 1.1 thorpej #define ISR_RXDESC 0x00000002 /* Rx descriptor interrupt */ 359 1.1 thorpej #define ISR_RXOK 0x00000001 /* Rx okay */ 360 1.1 thorpej 361 1.1 thorpej #define SIP_IMR 0x14 /* interrupt mask register */ 362 1.1 thorpej /* See bits in SIP_ISR */ 363 1.1 thorpej 364 1.1 thorpej #define SIP_IER 0x18 /* interrupt enable register */ 365 1.1 thorpej #define IER_IE 0x00000001 /* master interrupt enable */ 366 1.1 thorpej 367 1.16 dyoung /* #ifdef DP83820 */ 368 1.6 thorpej #define SIP_IHR 0x1c /* interrupt hold-off register */ 369 1.6 thorpej #define IHR_IHCTL 0x00000100 /* interrupt hold-off control */ 370 1.6 thorpej #define IHR_IH 0x000000ff /* interrupt hold-off timer (100us) */ 371 1.16 dyoung /* #else */ 372 1.1 thorpej #define SIP_ENPHY 0x1c /* enhanced PHY access register */ 373 1.1 thorpej #define ENPHY_PHYDATA 0xffff0000 /* PHY data */ 374 1.1 thorpej #define ENPHY_DATA_SHIFT 16 375 1.2 thorpej #define ENPHY_PHYADDR 0x0000f800 /* PHY number (7016 only) */ 376 1.2 thorpej #define ENPHY_PHYADDR_SHIFT 11 377 1.1 thorpej #define ENPHY_REGADDR 0x000007c0 /* PHY register */ 378 1.1 thorpej #define ENPHY_REGADDR_SHIFT 6 379 1.1 thorpej #define ENPHY_RWCMD 0x00000020 /* 1 == read, 0 == write */ 380 1.1 thorpej #define ENPHY_ACCESS 0x00000010 /* PHY access enable */ 381 1.16 dyoung /* #endif DP83820 */ 382 1.1 thorpej 383 1.1 thorpej #define SIP_TXDP 0x20 /* transmit descriptor pointer reg */ 384 1.1 thorpej 385 1.17 dyoung /* DP83820 only */ 386 1.6 thorpej #define SIP_TXDP_HI 0x24 /* transmit descriptor pointer (high) reg */ 387 1.6 thorpej 388 1.18 dyoung #define DP83820_SIP_TXCFG 0x28 /* transmit configuration register */ 389 1.18 dyoung #define OTHER_SIP_TXCFG 0x24 /* transmit configuration register */ 390 1.18 dyoung 391 1.1 thorpej #define TXCFG_CSI 0x80000000 /* carrier sense ignore */ 392 1.1 thorpej #define TXCFG_HBI 0x40000000 /* heartbeat ignore */ 393 1.1 thorpej #define TXCFG_MLB 0x20000000 /* MAC loopback */ 394 1.1 thorpej #define TXCFG_ATP 0x10000000 /* automatic transmit padding */ 395 1.18 dyoung #define TXCFG_MXDMA 0x00700000 /* max DMA burst size */ 396 1.18 dyoung 397 1.18 dyoung /* DP83820 only */ 398 1.6 thorpej #define TXCFG_ECRETRY 0x008000000 /* excessive collision retry enable */ 399 1.18 dyoung #define TXCFG_BRST_DIS 0x00080000 /* 1000Mb/s burst disable */ 400 1.18 dyoung 401 1.18 dyoung /* DP83820 only */ 402 1.6 thorpej #define TXCFG_MXDMA_1024 0x00000000 /* 1024 bytes */ 403 1.18 dyoung #if 0 404 1.18 dyoung #ifdef DP83820 405 1.6 thorpej #define TXCFG_MXDMA_8 0x00100000 /* 8 bytes */ 406 1.6 thorpej #define TXCFG_MXDMA_16 0x00200000 /* 16 bytes */ 407 1.6 thorpej #define TXCFG_MXDMA_32 0x00300000 /* 32 bytes */ 408 1.6 thorpej #define TXCFG_MXDMA_64 0x00400000 /* 64 bytes */ 409 1.6 thorpej #define TXCFG_MXDMA_128 0x00500000 /* 128 bytes */ 410 1.6 thorpej #define TXCFG_MXDMA_256 0x00600000 /* 256 bytes */ 411 1.6 thorpej #define TXCFG_MXDMA_512 0x00700000 /* 512 bytes */ 412 1.18 dyoung #define TXCFG_FLTH_MASK 0x0000ff00 /* Fx fill threshold */ 413 1.18 dyoung #define TXCFG_DRTH_MASK 0x000000ff /* Tx drain threshold */ 414 1.6 thorpej #else 415 1.1 thorpej #define TXCFG_MXDMA_512 0x00000000 /* 512 bytes */ 416 1.1 thorpej #define TXCFG_MXDMA_8 0x00200000 /* 8 bytes */ 417 1.1 thorpej #define TXCFG_MXDMA_16 0x00300000 /* 16 bytes */ 418 1.1 thorpej #define TXCFG_MXDMA_32 0x00400000 /* 32 bytes */ 419 1.1 thorpej #define TXCFG_MXDMA_64 0x00500000 /* 64 bytes */ 420 1.1 thorpej #define TXCFG_MXDMA_128 0x00600000 /* 128 bytes */ 421 1.1 thorpej #define TXCFG_MXDMA_256 0x00700000 /* 256 bytes */ 422 1.18 dyoung #define TXCFG_FLTH_MASK 0x00003f00 /* Tx fill threshold */ 423 1.18 dyoung #define TXCFG_DRTH_MASK 0x0000003f /* Tx drain threshold */ 424 1.6 thorpej #endif /* DP83820 */ 425 1.18 dyoung #endif /* 0 */ 426 1.18 dyoung 427 1.18 dyoung /* non-DP83820 only */ 428 1.18 dyoung #define TXCFG_MXDMA_4 0x00100000 /* 4 bytes */ 429 1.1 thorpej 430 1.6 thorpej #define SIP_GPIOR 0x2c /* general purpose i/o register */ 431 1.6 thorpej #define GPIOR_GP5_IN 0x00004000 /* GP 5 in */ 432 1.6 thorpej #define GPIOR_GP4_IN 0x00002000 /* GP 4 in */ 433 1.6 thorpej #define GPIOR_GP3_IN 0x00001000 /* GP 3 in */ 434 1.6 thorpej #define GPIOR_GP2_IN 0x00000800 /* GP 2 in */ 435 1.6 thorpej #define GPIOR_GP1_IN 0x00000400 /* GP 1 in */ 436 1.6 thorpej #define GPIOR_GP5_OE 0x00000200 /* GP 5 out enable */ 437 1.6 thorpej #define GPIOR_GP4_OE 0x00000100 /* GP 4 out enable */ 438 1.6 thorpej #define GPIOR_GP3_OE 0x00000080 /* GP 3 out enable */ 439 1.6 thorpej #define GPIOR_GP2_OE 0x00000040 /* GP 2 out enable */ 440 1.6 thorpej #define GPIOR_GP1_OE 0x00000020 /* GP 1 out enable */ 441 1.6 thorpej #define GPIOR_GP5_OUT 0x00000010 /* GP 5 out */ 442 1.6 thorpej #define GPIOR_GP4_OUT 0x00000008 /* GP 4 out */ 443 1.6 thorpej #define GPIOR_GP3_OUT 0x00000004 /* GP 3 out */ 444 1.6 thorpej #define GPIOR_GP2_OUT 0x00000002 /* GP 2 out */ 445 1.6 thorpej #define GPIOR_GP1_OUT 0x00000001 /* GP 1 out */ 446 1.6 thorpej 447 1.6 thorpej #define SIP_RXDP 0x30 /* receive descriptor pointer reg */ 448 1.6 thorpej 449 1.17 dyoung /* DP83820 only */ 450 1.6 thorpej #define SIP_RXDP_HI 0x34 /* receive descriptor pointer (high) reg */ 451 1.6 thorpej 452 1.18 dyoung #define DP83820_SIP_RXCFG 0x38 /* receive configuration register */ 453 1.18 dyoung #define OTHER_SIP_RXCFG 0x34 /* receive configuration register */ 454 1.1 thorpej #define RXCFG_AEP 0x80000000 /* accept error packets */ 455 1.1 thorpej #define RXCFG_ARP 0x40000000 /* accept runt packets */ 456 1.17 dyoung /* DP83820 only */ 457 1.6 thorpej #define RXCFG_STRIPCRC 0x20000000 /* strip CRC */ 458 1.17 dyoung 459 1.7 thorpej #define RXCFG_ATX 0x10000000 /* accept transmit packets */ 460 1.12 itojun #define RXCFG_ALP 0x08000000 /* accept long packets */ 461 1.18 dyoung 462 1.18 dyoung /* DP83820 only */ 463 1.6 thorpej #define RXCFG_AIRL 0x04000000 /* accept in-range length err packets */ 464 1.18 dyoung 465 1.6 thorpej #define RXCFG_MXDMA 0x00700000 /* max DMA burst size */ 466 1.18 dyoung 467 1.18 dyoung /* DP83820 only */ 468 1.6 thorpej #define RXCFG_MXDMA_1024 0x00000000 /* 1024 bytes */ 469 1.18 dyoung 470 1.18 dyoung #if 0 471 1.18 dyoung #ifdef DP83820 472 1.6 thorpej #define RXCFG_MXDMA_8 0x00100000 /* 8 bytes */ 473 1.6 thorpej #define RXCFG_MXDMA_16 0x00200000 /* 16 bytes */ 474 1.6 thorpej #define RXCFG_MXDMA_32 0x00300000 /* 32 bytes */ 475 1.6 thorpej #define RXCFG_MXDMA_64 0x00400000 /* 64 bytes */ 476 1.6 thorpej #define RXCFG_MXDMA_128 0x00500000 /* 128 bytes */ 477 1.6 thorpej #define RXCFG_MXDMA_256 0x00600000 /* 256 bytes */ 478 1.6 thorpej #define RXCFG_MXDMA_512 0x00700000 /* 512 bytes */ 479 1.6 thorpej #else 480 1.1 thorpej #define RXCFG_MXDMA_512 0x00000000 /* 512 bytes */ 481 1.1 thorpej #define RXCFG_MXDMA_8 0x00200000 /* 8 bytes */ 482 1.1 thorpej #define RXCFG_MXDMA_16 0x00300000 /* 16 bytes */ 483 1.1 thorpej #define RXCFG_MXDMA_32 0x00400000 /* 32 bytes */ 484 1.1 thorpej #define RXCFG_MXDMA_64 0x00500000 /* 64 bytes */ 485 1.1 thorpej #define RXCFG_MXDMA_128 0x00600000 /* 128 bytes */ 486 1.1 thorpej #define RXCFG_MXDMA_256 0x00700000 /* 256 bytes */ 487 1.6 thorpej #endif /* DP83820 */ 488 1.18 dyoung #endif /* 0 */ 489 1.1 thorpej 490 1.18 dyoung /* non-DP83820 only */ 491 1.18 dyoung #define RXCFG_MXDMA_4 0x00100000 /* 4 bytes */ 492 1.18 dyoung #define RXCFG_DRTH_MASK 0x0000003e 493 1.18 dyoung 494 1.18 dyoung /* DP83820 only */ 495 1.6 thorpej #define SIP_PQCR 0x3c /* priority queueing control register */ 496 1.6 thorpej #define PQCR_RXPQ_4 0x0000000c /* 4 Rx queues */ 497 1.6 thorpej #define PQCR_RXPQ_3 0x00000008 /* 3 Rx queues */ 498 1.6 thorpej #define PQCR_RXPQ_2 0x00000004 /* 2 Rx queues */ 499 1.6 thorpej #define PQCR_TXFAIR 0x00000002 /* Tx fairness enable */ 500 1.6 thorpej #define PQCR_TXPQEN 0x00000001 /* Tx priority queueing enable */ 501 1.1 thorpej 502 1.18 dyoung /* DP83815 only */ 503 1.16 dyoung #define SIP83815_NS_CCSR 0x3c /* CLKRUN control/status register (83815) */ 504 1.3 thorpej #define CCSR_PMESTS 0x00008000 /* PME status */ 505 1.3 thorpej #define CCSR_PMEEN 0x00000100 /* PME enable */ 506 1.3 thorpej #define CCSR_CLKRUN_EN 0x00000001 /* clkrun enable */ 507 1.3 thorpej 508 1.16 dyoung /* SiS 900 only */ 509 1.16 dyoung #define SIP_FLOWCTL 0x38 /* flow control register */ 510 1.16 dyoung #define FLOWCTL_PAUSE 0x00000002 /* PAUSE flag */ 511 1.16 dyoung #define FLOWCTL_FLOWEN 0x00000001 /* enable flow control */ 512 1.16 dyoung 513 1.14 thorpej #define SIP_NS_WCSR 0x40 /* WoL control/status register (83815/83820) */ 514 1.3 thorpej 515 1.14 thorpej #define SIP_NS_PCR 0x44 /* pause control/status reg (83815/83820) */ 516 1.14 thorpej #define PCR_PSEN 0x80000000 /* pause enable */ 517 1.14 thorpej #define PCR_PS_MCAST 0x40000000 /* pause on multicast */ 518 1.14 thorpej #define PCR_PS_DA 0x20000000 /* pause on DA */ 519 1.14 thorpej #define PCR_PS_ACT 0x10000000 /* pause active */ 520 1.20 dholland #define PCR_PS_RCVD 0x08000000 /* pause packet received */ 521 1.16 dyoung /* #ifdef DP83820 */ 522 1.14 thorpej #define PCR_PS_STHI_8 0x03000000 /* Status FIFO Hi Threshold (8packets) */ 523 1.14 thorpej #define PCR_PS_STHI_4 0x02000000 /* Status FIFO Hi Threshold (4packets) */ 524 1.14 thorpej #define PCR_PS_STHI_2 0x01000000 /* Status FIFO Hi Threshold (2packets) */ 525 1.14 thorpej #define PCR_PS_STHI_0 0x00000000 /* Status FIFO Hi Threshold (disable) */ 526 1.14 thorpej #define PCR_PS_STLO_8 0x00c00000 /* Status FIFO Lo Threshold (8packets) */ 527 1.14 thorpej #define PCR_PS_STLO_4 0x00800000 /* Status FIFO Lo Threshold (4packets) */ 528 1.14 thorpej #define PCR_PS_STLO_2 0x00400000 /* Status FIFO Lo Threshold (2packets) */ 529 1.14 thorpej #define PCR_PS_STLO_0 0x00000000 /* Status FIFO Lo Threshold (disable) */ 530 1.14 thorpej #define PCR_PS_FFHI_8 0x00300000 /* Data FIFO Hi Threshold (8Kbyte) */ 531 1.14 thorpej #define PCR_PS_FFHI_4 0x00200000 /* Data FIFO Hi Threshold (4Kbyte) */ 532 1.14 thorpej #define PCR_PS_FFHI_2 0x00100000 /* Data FIFO Hi Threshold (2Kbyte) */ 533 1.14 thorpej #define PCR_PS_FFHI_0 0x00000000 /* Data FIFO Hi Threshold (disable) */ 534 1.14 thorpej #define PCR_PS_FFLO_8 0x000c0000 /* Data FIFO Lo Threshold (8Kbyte) */ 535 1.14 thorpej #define PCR_PS_FFLO_4 0x00080000 /* Data FIFO Lo Threshold (4Kbyte) */ 536 1.14 thorpej #define PCR_PS_FFLO_2 0x00040000 /* Data FIFO Lo Threshold (2Kbyte) */ 537 1.14 thorpej #define PCR_PS_FFLO_0 0x00000000 /* Data FIFO Lo Threshold (disable) */ 538 1.14 thorpej #define PCR_PS_TX 0x00020000 /* Transmit PAUSE frame manually */ 539 1.16 dyoung /* #else */ 540 1.14 thorpej #define PCR_PSNEG 0x00200000 /* Pause Negoticated (83815) */ 541 1.14 thorpej #define PCR_MLD_EN 0x00010000 /* Manual Load Enable (83815) */ 542 1.16 dyoung /* #endif DP83820 */ 543 1.14 thorpej #define PCR_PAUSE_CNT_MASK 0x0000ffff /* pause count mask */ 544 1.14 thorpej #define PCR_PAUSE_CNT 65535 /* pause count (512bit-time) */ 545 1.3 thorpej 546 1.1 thorpej #define SIP_RFCR 0x48 /* receive filter control register */ 547 1.1 thorpej #define RFCR_RFEN 0x80000000 /* Rx filter enable */ 548 1.1 thorpej #define RFCR_AAB 0x40000000 /* accept all broadcast */ 549 1.1 thorpej #define RFCR_AAM 0x20000000 /* accept all multicast */ 550 1.1 thorpej #define RFCR_AAP 0x10000000 /* accept all physical */ 551 1.3 thorpej #define RFCR_APM 0x08000000 /* accept perfect match (83815) */ 552 1.3 thorpej #define RFCR_APAT 0x07800000 /* accept pattern match (83815) */ 553 1.3 thorpej #define RFCR_AARP 0x00400000 /* accept ARP (83815) */ 554 1.3 thorpej #define RFCR_MHEN 0x00200000 /* multicast hash enable (83815) */ 555 1.3 thorpej #define RFCR_UHEN 0x00100000 /* unicast hash enable (83815) */ 556 1.3 thorpej #define RFCR_ULM 0x00080000 /* U/L bit mask (83815) */ 557 1.3 thorpej #define RFCR_NS_RFADDR 0x000003ff /* Rx filter ext reg address (83815) */ 558 1.1 thorpej #define RFCR_RFADDR 0x000f0000 /* Rx filter address */ 559 1.1 thorpej #define RFCR_RFADDR_NODE0 0x00000000 /* node address 1, 0 */ 560 1.1 thorpej #define RFCR_RFADDR_NODE2 0x00010000 /* node address 3, 2 */ 561 1.1 thorpej #define RFCR_RFADDR_NODE4 0x00020000 /* node address 5, 4 */ 562 1.1 thorpej #define RFCR_RFADDR_MC0 0x00040000 /* multicast hash word 0 */ 563 1.1 thorpej #define RFCR_RFADDR_MC1 0x00050000 /* multicast hash word 1 */ 564 1.1 thorpej #define RFCR_RFADDR_MC2 0x00060000 /* multicast hash word 2 */ 565 1.1 thorpej #define RFCR_RFADDR_MC3 0x00070000 /* multicast hash word 3 */ 566 1.1 thorpej #define RFCR_RFADDR_MC4 0x00080000 /* multicast hash word 4 */ 567 1.1 thorpej #define RFCR_RFADDR_MC5 0x00090000 /* multicast hash word 5 */ 568 1.1 thorpej #define RFCR_RFADDR_MC6 0x000a0000 /* multicast hash word 6 */ 569 1.1 thorpej #define RFCR_RFADDR_MC7 0x000b0000 /* multicast hash word 7 */ 570 1.9 thorpej /* For SiS900B and 635/735 only */ 571 1.9 thorpej #define RFCR_RFADDR_MC8 0x000c0000 /* multicast hash word 8 */ 572 1.9 thorpej #define RFCR_RFADDR_MC9 0x000d0000 /* multicast hash word 9 */ 573 1.9 thorpej #define RFCR_RFADDR_MC10 0x000e0000 /* multicast hash word 10 */ 574 1.9 thorpej #define RFCR_RFADDR_MC11 0x000f0000 /* multicast hash word 11 */ 575 1.9 thorpej #define RFCR_RFADDR_MC12 0x00100000 /* multicast hash word 12 */ 576 1.9 thorpej #define RFCR_RFADDR_MC13 0x00110000 /* multicast hash word 13 */ 577 1.9 thorpej #define RFCR_RFADDR_MC14 0x00120000 /* multicast hash word 14 */ 578 1.9 thorpej #define RFCR_RFADDR_MC15 0x00130000 /* multicast hash word 15 */ 579 1.4 thorpej 580 1.5 briggs #define RFCR_NS_RFADDR_PMATCH0 0x0000 /* perfect match octets 1-0 */ 581 1.5 briggs #define RFCR_NS_RFADDR_PMATCH2 0x0002 /* perfect match octets 3-2 */ 582 1.5 briggs #define RFCR_NS_RFADDR_PMATCH4 0x0004 /* perfect match octets 5-4 */ 583 1.4 thorpej #define RFCR_NS_RFADDR_PCOUNT 0x0006 /* pattern count */ 584 1.18 dyoung 585 1.18 dyoung /* DP83820 only */ 586 1.6 thorpej #define RFCR_NS_RFADDR_PCOUNT2 0x0008 /* pattern count 2, 3 */ 587 1.6 thorpej #define RFCR_NS_RFADDR_SOPAS0 0x000a /* SecureOn 0, 1 */ 588 1.6 thorpej #define RFCR_NS_RFADDR_SOPAS2 0x000c /* SecureOn 2, 3 */ 589 1.6 thorpej #define RFCR_NS_RFADDR_SOPAS4 0x000e /* SecureOn 4, 5 */ 590 1.7 thorpej #define RFCR_NS_RFADDR_PATMEM 0x0200 /* pattern memory */ 591 1.18 dyoung 592 1.18 dyoung #define DP83820_RFCR_NS_RFADDR_FILTMEM 0x0100 /* hash memory */ 593 1.18 dyoung #define OTHER_RFCR_NS_RFADDR_FILTMEM 0x0200 /* filter memory (hash/pattern) */ 594 1.1 thorpej 595 1.1 thorpej #define SIP_RFDR 0x4c /* receive filter data register */ 596 1.3 thorpej #define RFDR_BMASK 0x00030000 /* byte mask (83815) */ 597 1.1 thorpej #define RFDR_DATA 0x0000ffff /* data bits */ 598 1.3 thorpej 599 1.3 thorpej #define SIP_NS_BRAR 0x50 /* boot rom address (83815) */ 600 1.3 thorpej #define BRAR_AUTOINC 0x80000000 /* autoincrement */ 601 1.3 thorpej #define BRAR_ADDR 0x0000ffff /* address */ 602 1.3 thorpej 603 1.3 thorpej #define SIP_NS_BRDR 0x54 /* boot rom data (83815) */ 604 1.3 thorpej 605 1.3 thorpej #define SIP_NS_SRR 0x58 /* silicon revision register (83815) */ 606 1.18 dyoung /* #ifdef DP83820 */ 607 1.6 thorpej #define SRR_REV_B 0x00000103 608 1.18 dyoung /* #else */ 609 1.3 thorpej #define SRR_REV_A 0x00000101 610 1.3 thorpej #define SRR_REV_B_1 0x00000200 611 1.3 thorpej #define SRR_REV_B_2 0x00000201 612 1.3 thorpej #define SRR_REV_B_3 0x00000203 613 1.3 thorpej #define SRR_REV_C_1 0x00000300 614 1.3 thorpej #define SRR_REV_C_2 0x00000302 615 1.18 dyoung /* #endif DP83820 */ 616 1.3 thorpej 617 1.3 thorpej #define SIP_NS_MIBC 0x5c /* mib control register (83815) */ 618 1.3 thorpej #define MIBC_MIBS 0x00000008 /* mib counter strobe */ 619 1.3 thorpej #define MIBC_ACLR 0x00000004 /* clear all counters */ 620 1.3 thorpej #define MIBC_FRZ 0x00000002 /* freeze all counters */ 621 1.3 thorpej #define MIBC_WRN 0x00000001 /* warning test indicator */ 622 1.3 thorpej 623 1.3 thorpej #define SIP_NS_MIB(mibreg) /* mib data registers (83815) */ \ 624 1.3 thorpej (0x60 + (mibreg)) 625 1.3 thorpej #define MIB_RXErroredPkts 0x00 626 1.3 thorpej #define MIB_RXFCSErrors 0x04 627 1.3 thorpej #define MIB_RXMsdPktErrors 0x08 628 1.3 thorpej #define MIB_RXFAErrors 0x0c 629 1.3 thorpej #define MIB_RXSymbolErrors 0x10 630 1.3 thorpej #define MIB_RXFrameTooLong 0x14 631 1.18 dyoung /* #ifdef DP83820 */ 632 1.6 thorpej #define MIB_RXIRLErrors 0x18 633 1.6 thorpej #define MIB_RXBadOpcodes 0x1c 634 1.6 thorpej #define MIB_RXPauseFrames 0x20 635 1.6 thorpej #define MIB_TXPauseFrames 0x24 636 1.6 thorpej #define MIB_TXSQEErrors 0x28 637 1.18 dyoung /* #else */ 638 1.3 thorpej #define MIB_RXTXSQEErrors 0x18 639 1.18 dyoung /* #endif DP83820 */ 640 1.3 thorpej 641 1.16 dyoung /* 83815 only */ 642 1.3 thorpej #define SIP_NS_PHY(miireg) /* PHY registers (83815) */ \ 643 1.3 thorpej (0x80 + ((miireg) << 2)) 644 1.6 thorpej 645 1.16 dyoung /* #ifdef DP83820 */ 646 1.6 thorpej #define SIP_TXDP1 0xa0 /* transmit descriptor pointer (pri 1) */ 647 1.6 thorpej 648 1.6 thorpej #define SIP_TXDP2 0xa4 /* transmit descriptor pointer (pri 2) */ 649 1.6 thorpej 650 1.6 thorpej #define SIP_TXDP3 0xa8 /* transmit descriptor pointer (pri 3) */ 651 1.1 thorpej 652 1.6 thorpej #define SIP_RXDP1 0xb0 /* receive descriptor pointer (pri 1) */ 653 1.6 thorpej 654 1.6 thorpej #define SIP_RXDP2 0xb4 /* receive descriptor pointer (pri 2) */ 655 1.6 thorpej 656 1.6 thorpej #define SIP_RXDP3 0xb8 /* receive descriptor pointer (pri 3) */ 657 1.6 thorpej 658 1.6 thorpej #define SIP_VRCR 0xbc /* VLAN/IP receive control register */ 659 1.6 thorpej #define VRCR_RUDPE 0x00000080 /* reject UDP checksum errors */ 660 1.6 thorpej #define VRCR_RTCPE 0x00000040 /* reject TCP checksum errors */ 661 1.6 thorpej #define VRCR_RIPE 0x00000020 /* reject IP checksum errors */ 662 1.6 thorpej #define VRCR_IPEN 0x00000010 /* IP checksum enable */ 663 1.6 thorpej #define VRCR_DUTF 0x00000008 /* discard untagged frames */ 664 1.6 thorpej #define VRCR_DVTF 0x00000004 /* discard VLAN tagged frames */ 665 1.6 thorpej #define VRCR_VTREN 0x00000002 /* VLAN tag removal enable */ 666 1.6 thorpej #define VRCR_VTDEN 0x00000001 /* VLAN tag detection enable */ 667 1.6 thorpej 668 1.6 thorpej #define SIP_VTCR 0xc0 /* VLAN/IP transmit control register */ 669 1.6 thorpej #define VTCR_PPCHK 0x00000008 /* per-packet checksum generation */ 670 1.6 thorpej #define VTCR_GCHK 0x00000004 /* global checksum generation */ 671 1.6 thorpej #define VTCR_VPPTI 0x00000002 /* VLAN per-packet tag insertion */ 672 1.6 thorpej #define VTCR_VGTI 0x00000001 /* VLAN global tag insertion */ 673 1.6 thorpej 674 1.6 thorpej #define SIP_VDR 0xc4 /* VLAN data register */ 675 1.6 thorpej #define VDR_VTCI 0xffff0000 /* VLAN tag control information */ 676 1.6 thorpej #define VDR_VTYPE 0x0000ffff /* VLAN type field */ 677 1.6 thorpej 678 1.16 dyoung #define SIP83820_NS_CCSR 0xcc /* CLKRUN control/status register (83820) */ 679 1.16 dyoung #if 0 680 1.6 thorpej #define CCSR_PMESTS 0x00008000 /* PME status */ 681 1.6 thorpej #define CCSR_PMEEN 0x00000100 /* PME enable */ 682 1.6 thorpej #define CCSR_CLKRUN_EN 0x00000001 /* clkrun enable */ 683 1.16 dyoung #endif 684 1.6 thorpej 685 1.6 thorpej #define SIP_TBICR 0xe0 /* TBI control register */ 686 1.6 thorpej #define TBICR_MR_LOOPBACK 0x00004000 /* TBI PCS loopback enable */ 687 1.6 thorpej #define TBICR_MR_AN_ENABLE 0x00001000 /* TBI autonegotiation enable */ 688 1.22 andvar #define TBICR_MR_RESTART_AN 0x00000200 /* restart TBI autonegotiation */ 689 1.6 thorpej 690 1.6 thorpej #define SIP_TBISR 0xe4 /* TBI status register */ 691 1.6 thorpej #define TBISR_MR_LINK_STATUS 0x00000020 /* TBI link status */ 692 1.6 thorpej #define TBISR_MR_AN_COMPLETE 0x00000004 /* TBI autonegotiation complete */ 693 1.6 thorpej 694 1.6 thorpej #define SIP_TANAR 0xe8 /* TBI autoneg adv. register */ 695 1.6 thorpej #define TANAR_NP 0x00008000 /* next page exchange required */ 696 1.6 thorpej #define TANAR_RF2 0x00002000 /* remote fault 2 */ 697 1.6 thorpej #define TANAR_RF1 0x00001000 /* remote fault 1 */ 698 1.6 thorpej #define TANAR_PS2 0x00000100 /* pause encoding 2 */ 699 1.6 thorpej #define TANAR_PS1 0x00000080 /* pause encoding 1 */ 700 1.6 thorpej #define TANAR_HALF_DUP 0x00000040 /* adv. half duplex */ 701 1.6 thorpej #define TANAR_FULL_DUP 0x00000020 /* adv. full duplex */ 702 1.6 thorpej 703 1.6 thorpej #define SIP_TANLPAR 0xec /* TBI autoneg link partner ability register */ 704 1.6 thorpej /* See TANAR bits */ 705 1.6 thorpej 706 1.6 thorpej #define SIP_TANER 0xf0 /* TBI autoneg expansion register */ 707 1.6 thorpej #define TANER_NPA 0x00000004 /* we support next page function */ 708 1.6 thorpej #define TANER_PR 0x00000002 /* page received from link partner */ 709 1.6 thorpej 710 1.6 thorpej #define SIP_TESR 0xf4 /* TBI extended status register */ 711 1.6 thorpej #define TESR_1000FDX 0x00008000 /* we support 1000base FDX */ 712 1.6 thorpej #define TESR_1000HDX 0x00004000 /* we support 1000base HDX */ 713 1.16 dyoung /* #else */ 714 1.1 thorpej #define SIP_PMCTL 0xb0 /* power management control register */ 715 1.1 thorpej #define PMCTL_GATECLK 0x80000000 /* gate dual clock enable */ 716 1.1 thorpej #define PMCTL_WAKEALL 0x40000000 /* wake on all Rx OK */ 717 1.1 thorpej #define PMCTL_FRM3ACS 0x04000000 /* 3rd wake-up frame access */ 718 1.1 thorpej #define PMCTL_FRM2ACS 0x02000000 /* 2nd wake-up frame access */ 719 1.1 thorpej #define PMCTL_FRM1ACS 0x01000000 /* 1st wake-up frame access */ 720 1.1 thorpej #define PMCTL_FRM3EN 0x00400000 /* 3rd wake-up frame match enable */ 721 1.1 thorpej #define PMCTL_FRM2EN 0x00200000 /* 2nd wake-up frame match enable */ 722 1.1 thorpej #define PMCTL_FRM1EN 0x00100000 /* 1st wake-up frame match enable */ 723 1.1 thorpej #define PMCTL_ALGORITHM 0x00000800 /* Magic Packet match algorithm */ 724 1.1 thorpej #define PMCTL_MAGICPKT 0x00000400 /* Magic Packet match enable */ 725 1.1 thorpej #define PMCTL_LINKON 0x00000002 /* link on monitor enable */ 726 1.1 thorpej #define PMCTL_LINKLOSS 0x00000001 /* link loss monitor enable */ 727 1.1 thorpej 728 1.1 thorpej #define SIP_PMEVT 0xb4 /* power management wake-up evnt reg */ 729 1.1 thorpej #define PMEVT_ALLFRMMAT 0x40000000 /* receive packet ok */ 730 1.1 thorpej #define PMEVT_FRM3MAT 0x04000000 /* match 3rd wake-up frame */ 731 1.1 thorpej #define PMEVT_FRM2MAT 0x02000000 /* match 2nd wake-up frame */ 732 1.1 thorpej #define PMEVT_FRM1MAT 0x01000000 /* match 1st wake-up frame */ 733 1.1 thorpej #define PMEVT_MAGICPKT 0x00000400 /* Magic Packet */ 734 1.1 thorpej #define PMEVT_ONEVT 0x00000002 /* link on event */ 735 1.1 thorpej #define PMEVT_LOSSEVT 0x00000001 /* link loss event */ 736 1.1 thorpej 737 1.1 thorpej #define SIP_WAKECRC 0xbc /* wake-up frame CRC register */ 738 1.1 thorpej 739 1.1 thorpej #define SIP_WAKEMASK0 0xc0 /* wake-up frame mask registers */ 740 1.1 thorpej #define SIP_WAKEMASK1 0xc4 741 1.1 thorpej #define SIP_WAKEMASK2 0xc8 742 1.1 thorpej #define SIP_WAKEMASK3 0xcc 743 1.1 thorpej #define SIP_WAKEMASK4 0xe0 744 1.5 briggs #define SIP_WAKEMASK5 0xe4 745 1.1 thorpej #define SIP_WAKEMASK6 0xe8 746 1.1 thorpej #define SIP_WAKEMASK7 0xec 747 1.16 dyoung /* #endif DP83820 */ 748 1.8 thorpej 749 1.8 thorpej /* 750 1.8 thorpej * Revision codes for the SiS 630 chipset built-in Ethernet. 751 1.8 thorpej */ 752 1.9 thorpej #define SIS_REV_900B 0x03 753 1.8 thorpej #define SIS_REV_630E 0x81 754 1.8 thorpej #define SIS_REV_630S 0x82 755 1.8 thorpej #define SIS_REV_630EA1 0x83 756 1.10 briggs #define SIS_REV_630ET 0x84 757 1.9 thorpej #define SIS_REV_635 0x90 /* same for 735 (745?) */ 758 1.13 cube #define SIS_REV_960 0x91 759 1.13 cube 760 1.13 cube /* 761 1.13 cube * MII operations for recent SiS chipsets 762 1.13 cube */ 763 1.13 cube #define SIS_MII_STARTDELIM 0x01 764 1.13 cube #define SIS_MII_READOP 0x02 765 1.13 cube #define SIS_MII_WRITEOP 0x01 766 1.13 cube #define SIS_MII_TURNAROUND 0x02 767 1.1 thorpej 768 1.1 thorpej /* 769 1.1 thorpej * Serial EEPROM opcodes, including the start bit. 770 1.1 thorpej */ 771 1.1 thorpej #define SIP_EEPROM_OPC_ERASE 0x04 772 1.1 thorpej #define SIP_EEPROM_OPC_WRITE 0x05 773 1.1 thorpej #define SIP_EEPROM_OPC_READ 0x06 774 1.1 thorpej 775 1.1 thorpej /* 776 1.5 briggs * Serial EEPROM address map (byte address) for the SiS900. 777 1.1 thorpej */ 778 1.1 thorpej #define SIP_EEPROM_SIGNATURE 0x00 /* SiS 900 signature */ 779 1.1 thorpej #define SIP_EEPROM_MASK 0x02 /* `enable' mask */ 780 1.1 thorpej #define SIP_EEPROM_VENDOR_ID 0x04 /* PCI vendor ID */ 781 1.1 thorpej #define SIP_EEPROM_DEVICE_ID 0x06 /* PCI device ID */ 782 1.1 thorpej #define SIP_EEPROM_SUBVENDOR_ID 0x08 /* PCI subvendor ID */ 783 1.1 thorpej #define SIP_EEPROM_SUBSYSTEM_ID 0x0a /* PCI subsystem ID */ 784 1.1 thorpej #define SIP_EEPROM_PMC 0x0c /* PCI power management capabilities */ 785 1.1 thorpej #define SIP_EEPROM_reserved 0x0e /* reserved */ 786 1.1 thorpej #define SIP_EEPROM_ETHERNET_ID0 0x10 /* Ethernet address 0, 1 */ 787 1.1 thorpej #define SIP_EEPROM_ETHERNET_ID1 0x12 /* Ethernet address 2, 3 */ 788 1.1 thorpej #define SIP_EEPROM_ETHERNET_ID2 0x14 /* Ethernet address 4, 5 */ 789 1.1 thorpej #define SIP_EEPROM_CHECKSUM 0x16 /* checksum */ 790 1.5 briggs 791 1.5 briggs /* 792 1.5 briggs * Serial EEPROM data (byte addresses) for the DP83815. 793 1.5 briggs */ 794 1.5 briggs #define SIP_DP83815_EEPROM_CHECKSUM 0x16 /* checksum */ 795 1.5 briggs #define SIP_DP83815_EEPROM_LENGTH 0x18 /* length of EEPROM data */ 796 1.6 thorpej 797 1.6 thorpej /* 798 1.6 thorpej * Serial EEPROM data (byte addresses) for the DP83820. 799 1.6 thorpej */ 800 1.7 thorpej #define SIP_DP83820_EEPROM_SUBSYSTEM_ID 0x00 /* PCI subsystem ID */ 801 1.7 thorpej #define SIP_DP83820_EEPROM_SUBVENDOR_ID 0x02 /* PCI subvendor ID */ 802 1.7 thorpej #define SIP_DP83820_EEPROM_CFGINT 0x04 /* PCI INT [31:16] */ 803 1.11 thorpej #define SIP_DP83820_EEPROM_CONFIG0 0x06 /* configuration word 0 */ 804 1.11 thorpej #define SIP_DP83820_EEPROM_CONFIG1 0x08 /* configuration word 1 */ 805 1.11 thorpej #define SIP_DP83820_EEPROM_CONFIG2 0x0a /* configuration word 2 */ 806 1.11 thorpej #define SIP_DP83820_EEPROM_CONFIG3 0x0c /* configuration word 3 */ 807 1.7 thorpej #define SIP_DP83820_EEPROM_SOPAS0 0x0e /* SecureOn [47:32] */ 808 1.7 thorpej #define SIP_DP83820_EEPROM_SOPAS1 0x10 /* SecureOn [31:16] */ 809 1.7 thorpej #define SIP_DP83820_EEPROM_SOPAS2 0x12 /* SecureOn [15:0] */ 810 1.7 thorpej #define SIP_DP83820_EEPROM_PMATCH0 0x14 /* MAC [47:32] */ 811 1.7 thorpej #define SIP_DP83820_EEPROM_PMATCH1 0x16 /* MAC [31:16] */ 812 1.7 thorpej #define SIP_DP83820_EEPROM_PMATCH2 0x18 /* MAC [15:0] */ 813 1.7 thorpej #define SIP_DP83820_EEPROM_CHECKSUM 0x1a /* checksum */ 814 1.7 thorpej #define SIP_DP83820_EEPROM_LENGTH 0x1c /* length of EEPROM data */ 815 1.11 thorpej 816 1.11 thorpej #define DP83820_CONFIG2_CFG_EXT_125 (1U << 0) 817 1.11 thorpej #define DP83820_CONFIG2_CFG_M64ADDR (1U << 1) 818 1.11 thorpej #define DP83820_CONFIG2_CFG_DATA64_EN (1U << 2) 819 1.11 thorpej #define DP83820_CONFIG2_CFG_T64ADDR (1U << 3) 820 1.11 thorpej #define DP83820_CONFIG2_CFG_MWI_DIS (1U << 4) 821 1.11 thorpej #define DP83820_CONFIG2_CFG_MRM_DIS (1U << 5) 822 1.11 thorpej #define DP83820_CONFIG2_CFG_MODE_1000 (1U << 7) 823 1.11 thorpej #define DP83820_CONFIG2_CFG_TBI_EN (1U << 9) 824 1.1 thorpej 825 1.1 thorpej #endif /* _DEV_PCI_IF_SIPREG_H_ */ 826