1 1.44 andvar /* $NetBSD: tulipreg.h,v 1.44 2024/02/05 22:08:05 andvar Exp $ */ 2 1.1 thorpej 3 1.1 thorpej /*- 4 1.20 thorpej * Copyright (c) 1999, 2000 The NetBSD Foundation, Inc. 5 1.1 thorpej * All rights reserved. 6 1.1 thorpej * 7 1.1 thorpej * This code is derived from software contributed to The NetBSD Foundation 8 1.1 thorpej * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, 9 1.1 thorpej * NASA Ames Research Center. 10 1.1 thorpej * 11 1.1 thorpej * Redistribution and use in source and binary forms, with or without 12 1.1 thorpej * modification, are permitted provided that the following conditions 13 1.1 thorpej * are met: 14 1.1 thorpej * 1. Redistributions of source code must retain the above copyright 15 1.1 thorpej * notice, this list of conditions and the following disclaimer. 16 1.1 thorpej * 2. Redistributions in binary form must reproduce the above copyright 17 1.1 thorpej * notice, this list of conditions and the following disclaimer in the 18 1.1 thorpej * documentation and/or other materials provided with the distribution. 19 1.1 thorpej * 20 1.1 thorpej * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 21 1.1 thorpej * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 22 1.1 thorpej * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23 1.1 thorpej * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 24 1.1 thorpej * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 1.1 thorpej * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 1.1 thorpej * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 1.1 thorpej * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 1.1 thorpej * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 1.1 thorpej * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 1.1 thorpej * POSSIBILITY OF SUCH DAMAGE. 31 1.1 thorpej */ 32 1.1 thorpej 33 1.1 thorpej #ifndef _DEV_IC_TULIPREG_H_ 34 1.1 thorpej #define _DEV_IC_TULIPREG_H_ 35 1.1 thorpej 36 1.1 thorpej /* 37 1.1 thorpej * Register description for the Digital Semiconductor ``Tulip'' (21x4x) 38 1.1 thorpej * Ethernet controller family, and a variety of clone chips, including: 39 1.1 thorpej * 40 1.1 thorpej * - Macronix 98713, 98713A, 98715, 98715A, 98725 (PMAC): 41 1.1 thorpej * 42 1.1 thorpej * These chips are fairly straight-forward Tulip clones. 43 1.11 thorpej * The 98713 is a very close 21140A clone. It has GPR 44 1.11 thorpej * and MII media, and a GPIO facility, and uses the ISV 45 1.11 thorpej * SROM format (or, at least, should, because of the GPIO 46 1.11 thorpej * facility). The 98713A has MII, no GPIO facility, and 47 1.11 thorpej * an internal NWay block. The 98715, 98715A, and 98725 48 1.11 thorpej * have only GPR media and the NWay block. The 98715, 49 1.11 thorpej * 98715A, and 98725 support power management. 50 1.11 thorpej * 51 1.21 castor * The 98715AEC adds 802.3x flow Frame based Flow Control to the 52 1.21 castor * 98715A. 53 1.21 castor * 54 1.11 thorpej * - Lite-On 82C115 (PNIC II): 55 1.11 thorpej * 56 1.11 thorpej * A clone of the Macronix MX98725, with the following differences: 57 1.11 thorpej * 58 1.11 thorpej * - Wake-On-LAN support 59 1.11 thorpej * - 128-bit multicast hash table rather than the 60 1.11 thorpej * standard 512-bit hash table 61 1.11 thorpej * - 802.3x flow control 62 1.30 perry * 63 1.1 thorpej * - Lite-On 82C168, 82C169 (PNIC): 64 1.1 thorpej * 65 1.11 thorpej * Pretty close, with only a few minor differences: 66 1.11 thorpej * 67 1.11 thorpej * - EEPROM is accessed completely differently. 68 1.11 thorpej * - MII is accessed completely differently. 69 1.11 thorpej * - No SIO facility (due to the above two differences). 70 1.11 thorpej * - GPIO interface is different than the 21140's. 71 1.11 thorpej * - Boards that lack PHYs use the internal NWay block 72 1.24 wiz * and transceiver. 73 1.1 thorpej * 74 1.1 thorpej * - Winbond 89C840F 75 1.1 thorpej * 76 1.11 thorpej * Less similar, but still roughly compatible (enough so 77 1.11 thorpej * that the driver can be adapted, at least): 78 1.11 thorpej * 79 1.11 thorpej * - Registers lack the pad word between them. 80 1.11 thorpej * - Instead of a setup frame, there are two station 81 1.11 thorpej * address registers and two multicast hash table 82 1.11 thorpej * registers (64-bit multicast hash table). 83 1.11 thorpej * - Only supported media interface is MII-over-SIO. 84 1.11 thorpej * - Different OPMODE register bits for various things 85 1.11 thorpej * (mostly media related). 86 1.1 thorpej * 87 1.10 thorpej * - ADMtek AL981 88 1.10 thorpej * 89 1.11 thorpej * Another pretty-close clone: 90 1.11 thorpej * 91 1.11 thorpej * - Wake-On-LAN support 92 1.11 thorpej * - Instead of a setup frame, there are two station 93 1.11 thorpej * address registers and two multicast hash table 94 1.11 thorpej * registers (64-bit multicast hash table). 95 1.11 thorpej * - 802.3x flow control 96 1.11 thorpej * - Only supported media interface is built-in PHY 97 1.11 thorpej * which is accessed through a set of special registers. 98 1.11 thorpej * - Not all registers have the pad word between them, 99 1.11 thorpej * but luckily, there are all AL981-specific registers, 100 1.11 thorpej * so this is easy to deal with. 101 1.10 thorpej * 102 1.23 thorpej * - ADMtek AN983 and AN985 103 1.23 thorpej * 104 1.23 thorpej * Similar to the ADMtek AL981, but with a few differences. 105 1.23 thorpej * 106 1.18 thorpej * - Xircom X3201-3 107 1.18 thorpej * 108 1.18 thorpej * CardBus 21143 clone, with a few differences: 109 1.18 thorpej * 110 1.18 thorpej * - No MicroWire SROM; Ethernet address must come 111 1.18 thorpej * from CIS. 112 1.18 thorpej * - Transmit buffers must also be 32-bit aligned. 113 1.18 thorpej * - The BUSMODE_SWR bit is not self-clearing. 114 1.19 thorpej * - Must include FS|LS in setup packet descriptor. 115 1.18 thorpej * - SIA is not 21143-like, and all media attachments 116 1.18 thorpej * are MII-on-SIO. 117 1.18 thorpej * 118 1.20 thorpej * - Davicom DM9102 and DM9102A 119 1.20 thorpej * 120 1.20 thorpej * Pretty similar to the 21140A, with a few differences: 121 1.20 thorpej * 122 1.20 thorpej * - Wake-On-LAN support 123 1.20 thorpej * - DM9102 has built-in 10/100 PHY on MII interface. 124 1.20 thorpej * - DM9102A has built-in 10/100 PHY on MII interface, 125 1.20 thorpej * as well as a HomePNA 1 PHY on an alternate MII 126 1.20 thorpej * interface (selected by clearing OPMODE_PS). 127 1.20 thorpej * - The chip has a bug in the transmit DMA logic, 128 1.20 thorpej * requiring that the packet be comprised of only 129 1.20 thorpej * one DMA segment. 130 1.20 thorpej * - The bus interface is buggy, and the BUSMODE register 131 1.20 thorpej * must be initialized to 0. 132 1.20 thorpej * - There seems to be an interrupt logic bug, requiring 133 1.20 thorpej * that interrupts be disabled on the chip during the 134 1.20 thorpej * interrupt handler. 135 1.31 rpaulo * 136 1.31 rpaulo * - ASIX AX88140 137 1.31 rpaulo * 138 1.38 thorpej * 21143 clone with a few differences: 139 1.31 rpaulo * 140 1.31 rpaulo * - Specific broadcast bit in the OPMODE register. 141 1.31 rpaulo * - Transmit buffer must be 32-bit aligned. 142 1.31 rpaulo * - The BUSMODE_SWR bit is not self-clearing. 143 1.31 rpaulo * - External 10BaseT PHY or 10/100 MII. 144 1.20 thorpej * 145 1.1 thorpej * Some of the clone chips have different registers, and some have 146 1.1 thorpej * different bits in the same registers. These will be denoted by 147 1.31 rpaulo * PMAC, PNICII, PNIC, DM, WINB, ADM and AX in the register/bit names. 148 1.1 thorpej */ 149 1.1 thorpej 150 1.1 thorpej /* 151 1.1 thorpej * Tulip buffer descriptor. Must be 4-byte aligned. 152 1.1 thorpej * 153 1.1 thorpej * Note for receive descriptors, the byte count fields must 154 1.1 thorpej * be a multiple of 4. 155 1.1 thorpej */ 156 1.1 thorpej struct tulip_desc { 157 1.36 dyoung volatile uint32_t td_status; /* Status */ 158 1.36 dyoung volatile uint32_t td_ctl; /* Control and Byte Counts */ 159 1.36 dyoung volatile uint32_t td_bufaddr1; /* Buffer Address 1 */ 160 1.36 dyoung volatile uint32_t td_bufaddr2; /* Buffer Address 2 */ 161 1.35 dyoung } __packed __aligned(4); 162 1.1 thorpej 163 1.1 thorpej /* 164 1.1 thorpej * Descriptor Status bits common to transmit and receive. 165 1.1 thorpej */ 166 1.1 thorpej #define TDSTAT_OWN 0x80000000 /* Tulip owns descriptor */ 167 1.1 thorpej #define TDSTAT_ES 0x00008000 /* Error Summary */ 168 1.1 thorpej 169 1.1 thorpej /* 170 1.1 thorpej * Descriptor Status bits for Receive Descriptor. 171 1.1 thorpej */ 172 1.1 thorpej #define TDSTAT_Rx_FF 0x40000000 /* Filtering Fail */ 173 1.2 thorpej #define TDSTAT_WINB_Rx_RCMP 0x40000000 /* Receive Complete */ 174 1.1 thorpej #define TDSTAT_Rx_FL 0x3fff0000 /* Frame Length including CRC */ 175 1.1 thorpej #define TDSTAT_Rx_DE 0x00004000 /* Descriptor Error */ 176 1.1 thorpej #define TDSTAT_Rx_DT 0x00003000 /* Data Type */ 177 1.1 thorpej #define TDSTAT_Rx_RF 0x00000800 /* Runt Frame */ 178 1.1 thorpej #define TDSTAT_Rx_MF 0x00000400 /* Multicast Frame */ 179 1.1 thorpej #define TDSTAT_Rx_FS 0x00000200 /* First Descriptor */ 180 1.1 thorpej #define TDSTAT_Rx_LS 0x00000100 /* Last Descriptor */ 181 1.1 thorpej #define TDSTAT_Rx_TL 0x00000080 /* Frame Too Long */ 182 1.1 thorpej #define TDSTAT_Rx_CS 0x00000040 /* Collision Seen */ 183 1.1 thorpej #define TDSTAT_Rx_RT 0x00000020 /* Frame Type */ 184 1.1 thorpej #define TDSTAT_Rx_RW 0x00000010 /* Receive Watchdog */ 185 1.1 thorpej #define TDSTAT_Rx_RE 0x00000008 /* Report on MII Error */ 186 1.1 thorpej #define TDSTAT_Rx_DB 0x00000004 /* Dribbling Bit */ 187 1.1 thorpej #define TDSTAT_Rx_CE 0x00000002 /* CRC Error */ 188 1.1 thorpej #define TDSTAT_Rx_ZER 0x00000001 /* Zero (always 0) */ 189 1.1 thorpej 190 1.1 thorpej #define TDSTAT_Rx_LENGTH(x) (((x) & TDSTAT_Rx_FL) >> 16) 191 1.1 thorpej 192 1.1 thorpej #define TDSTAT_Rx_DT_SR 0x00000000 /* Serial Received Frame */ 193 1.1 thorpej #define TDSTAT_Rx_DT_IL 0x00001000 /* Internal Loopback Frame */ 194 1.1 thorpej #define TDSTAT_Rx_DT_EL 0x00002000 /* External Loopback Frame */ 195 1.1 thorpej #define TDSTAT_Rx_DT_r 0x00003000 /* Reserved */ 196 1.1 thorpej 197 1.1 thorpej /* 198 1.1 thorpej * Descriptor Status bits for Transmit Descriptor. 199 1.1 thorpej */ 200 1.2 thorpej #define TDSTAT_WINB_Tx_TE 0x00008000 /* Transmit Error */ 201 1.1 thorpej #define TDSTAT_Tx_TO 0x00004000 /* Transmit Jabber Timeout */ 202 1.1 thorpej #define TDSTAT_Tx_LO 0x00000800 /* Loss of Carrier */ 203 1.1 thorpej #define TDSTAT_Tx_NC 0x00000400 /* No Carrier */ 204 1.1 thorpej #define TDSTAT_Tx_LC 0x00000200 /* Late Collision */ 205 1.1 thorpej #define TDSTAT_Tx_EC 0x00000100 /* Excessive Collisions */ 206 1.1 thorpej #define TDSTAT_Tx_HF 0x00000080 /* Heartbeat Fail */ 207 1.1 thorpej #define TDSTAT_Tx_CC 0x00000078 /* Collision Count */ 208 1.1 thorpej #define TDSTAT_Tx_LF 0x00000004 /* Link Fail */ 209 1.1 thorpej #define TDSTAT_Tx_UF 0x00000002 /* Underflow Error */ 210 1.1 thorpej #define TDSTAT_Tx_DE 0x00000001 /* Deferred */ 211 1.1 thorpej 212 1.1 thorpej #define TDSTAT_Tx_COLLISIONS(x) (((x) & TDSTAT_Tx_CC) >> 3) 213 1.1 thorpej 214 1.1 thorpej /* 215 1.1 thorpej * Descriptor Control bits common to transmit and receive. 216 1.1 thorpej */ 217 1.1 thorpej #define TDCTL_SIZE1 0x000007ff /* Size of buffer 1 */ 218 1.1 thorpej #define TDCTL_SIZE1_SHIFT 0 219 1.1 thorpej 220 1.1 thorpej #define TDCTL_SIZE2 0x003ff800 /* Size of buffer 2 */ 221 1.1 thorpej #define TDCTL_SIZE2_SHIFT 11 222 1.1 thorpej 223 1.1 thorpej #define TDCTL_ER 0x02000000 /* End of Ring */ 224 1.1 thorpej #define TDCTL_CH 0x01000000 /* Second Address Chained */ 225 1.1 thorpej 226 1.1 thorpej /* 227 1.1 thorpej * Descriptor Control bits for Transmit Descriptor. 228 1.1 thorpej */ 229 1.1 thorpej #define TDCTL_Tx_IC 0x80000000 /* Interrupt on Completion */ 230 1.1 thorpej #define TDCTL_Tx_LS 0x40000000 /* Last Segment */ 231 1.1 thorpej #define TDCTL_Tx_FS 0x20000000 /* First Segment */ 232 1.1 thorpej #define TDCTL_Tx_FT1 0x10000000 /* Filtering Type 1 */ 233 1.1 thorpej #define TDCTL_Tx_SET 0x08000000 /* Setup Packet */ 234 1.1 thorpej #define TDCTL_Tx_AC 0x04000000 /* Add CRC Disable */ 235 1.1 thorpej #define TDCTL_Tx_DPD 0x00800000 /* Disabled Padding */ 236 1.1 thorpej #define TDCTL_Tx_FT0 0x00400000 /* Filtering Type 0 */ 237 1.1 thorpej 238 1.1 thorpej /* 239 1.1 thorpej * The Tulip filter is programmed by "transmitting" a Setup Packet 240 1.1 thorpej * (indicated by TDCTL_Tx_SET). The filtering type is indicated 241 1.1 thorpej * as follows: 242 1.1 thorpej * 243 1.1 thorpej * FT1 FT0 Description 244 1.1 thorpej * --- --- ----------- 245 1.1 thorpej * 0 0 Perfect Filtering: The Tulip interprets the 246 1.1 thorpej * descriptor buffer as a table of 16 MAC addresses 247 1.1 thorpej * that the Tulip should receive. 248 1.1 thorpej * 249 1.1 thorpej * 0 1 Hash Filtering: The Tulip interprets the 250 1.1 thorpej * descriptor buffer as a 512-bit hash table 251 1.1 thorpej * plus one perfect address. If the incoming 252 1.1 thorpej * address is Multicast, the hash table filters 253 1.1 thorpej * the address, else the address is filtered by 254 1.1 thorpej * the perfect address. 255 1.1 thorpej * 256 1.1 thorpej * 1 0 Inverse Filtering: Like Perfect Filtering, except 257 1.1 thorpej * the table is addresses that the Tulip does NOT 258 1.1 thorpej * receive. 259 1.1 thorpej * 260 1.1 thorpej * 1 1 Hash-only Filtering: Like Hash Filtering, but 261 1.1 thorpej * physical addresses are matched by the hash table 262 1.1 thorpej * as well, and not by matching a single perfect 263 1.1 thorpej * address. 264 1.1 thorpej * 265 1.1 thorpej * A Setup Packet must always be 192 bytes long. The Tulip can store 266 1.1 thorpej * 16 MAC addresses. If not all 16 are specified in Perfect Filtering 267 1.1 thorpej * or Inverse Filtering mode, then unused entries should duplicate 268 1.1 thorpej * one of the valid entries. 269 1.1 thorpej */ 270 1.1 thorpej #define TDCTL_Tx_FT_PERFECT 0 271 1.1 thorpej #define TDCTL_Tx_FT_HASH TDCTL_Tx_FT0 272 1.1 thorpej #define TDCTL_Tx_FT_INVERSE TDCTL_Tx_FT1 273 1.1 thorpej #define TDCTL_Tx_FT_HASHONLY (TDCTL_Tx_FT1|TDCTL_Tx_FT0) 274 1.1 thorpej 275 1.1 thorpej #define TULIP_SETUP_PACKET_LEN 192 276 1.1 thorpej #define TULIP_MAXADDRS 16 277 1.1 thorpej #define TULIP_MCHASHSIZE 512 278 1.11 thorpej #define TULIP_PNICII_HASHSIZE 128 279 1.1 thorpej 280 1.1 thorpej /* 281 1.1 thorpej * Maximum size of a Tulip Ethernet Address ROM or SROM. 282 1.1 thorpej */ 283 1.13 thorpej #define TULIP_ROM_SIZE(bits) (2 << (bits)) 284 1.13 thorpej #define TULIP_MAX_ROM_SIZE 512 285 1.1 thorpej 286 1.1 thorpej /* 287 1.4 thorpej * Format of the standard Tulip SROM information: 288 1.4 thorpej * 289 1.4 thorpej * Byte offset Size Usage 290 1.4 thorpej * 0 18 reserved 291 1.4 thorpej * 18 1 SROM Format Version 292 1.4 thorpej * 19 1 Chip Count 293 1.4 thorpej * 20 6 IEEE Network Address 294 1.4 thorpej * 26 1 Chip 0 Device Number 295 1.4 thorpej * 27 2 Chip 0 Info Leaf Offset 296 1.4 thorpej * 29 1 Chip 1 Device Number 297 1.4 thorpej * 30 2 Chip 1 Info Leaf Offset 298 1.4 thorpej * 32 1 Chip 2 Device Number 299 1.4 thorpej * 33 2 Chip 2 Info Leaf Offset 300 1.4 thorpej * ... 1 Chip n Device Number 301 1.4 thorpej * ... 2 Chip n Info Leaf Offset 302 1.4 thorpej * ... ... ... 303 1.4 thorpej * Chip Info Leaf Information 304 1.4 thorpej * ... 305 1.4 thorpej * ... 306 1.4 thorpej * ... 307 1.4 thorpej * 126 2 CRC32 checksum 308 1.4 thorpej */ 309 1.4 thorpej #define TULIP_ROM_SROM_FORMAT_VERION 18 /* B */ 310 1.4 thorpej #define TULIP_ROM_CHIP_COUNT 19 /* B */ 311 1.4 thorpej #define TULIP_ROM_IEEE_NETWORK_ADDRESS 20 312 1.6 thorpej #define TULIP_ROM_CHIPn_DEVICE_NUMBER(n) (26 + ((n) * 3))/* B */ 313 1.4 thorpej #define TULIP_ROM_CHIPn_INFO_LEAF_OFFSET(n) (27 + ((n) * 3))/* W */ 314 1.4 thorpej #define TULIP_ROM_CRC32_CHECKSUM 126 /* W */ 315 1.14 thorpej #define TULIP_ROM_CRC32_CHECKSUM1 94 /* W */ 316 1.4 thorpej 317 1.4 thorpej #define TULIP_ROM_IL_SELECT_CONN_TYPE 0 /* W */ 318 1.4 thorpej #define TULIP_ROM_IL_MEDIA_COUNT 2 /* B */ 319 1.4 thorpej #define TULIP_ROM_IL_MEDIAn_BLOCK_BASE 3 320 1.4 thorpej 321 1.4 thorpej #define SELECT_CONN_TYPE_TP 0x0000 322 1.8 thorpej #define SELECT_CONN_TYPE_BNC 0x0001 323 1.8 thorpej #define SELECT_CONN_TYPE_AUI 0x0002 324 1.8 thorpej #define SELECT_CONN_TYPE_100TX 0x0003 325 1.8 thorpej #define SELECT_CONN_TYPE_100T4 0x0006 326 1.8 thorpej #define SELECT_CONN_TYPE_100FX 0x0007 327 1.8 thorpej #define SELECT_CONN_TYPE MII_10T 0x0009 328 1.8 thorpej #define SELECT_CONN_TYPE_MII_100TX 0x000d 329 1.8 thorpej #define SELECT_CONN_TYPE_MII_100T4 0x000f 330 1.8 thorpej #define SELECT_CONN_TYPE_MII_100FX 0x0010 331 1.4 thorpej #define SELECT_CONN_TYPE_TP_AUTONEG 0x0100 332 1.4 thorpej #define SELECT_CONN_TYPE_TP_FDX 0x0204 333 1.8 thorpej #define SELECT_CONN_TYPE_MII_10T_FDX 0x020a 334 1.8 thorpej #define SELECT_CONN_TYPE_100TX_FDX 0x020e 335 1.8 thorpej #define SELECT_CONN_TYPE_MII_100TX_FDX 0x0211 336 1.4 thorpej #define SELECT_CONN_TYPE_TP_NOLINKPASS 0x0400 337 1.4 thorpej #define SELECT_CONN_TYPE_ASENSE 0x0800 338 1.8 thorpej #define SELECT_CONN_TYPE_ASENSE_POWERUP 0x8800 339 1.4 thorpej #define SELECT_CONN_TYPE_ASENSE_AUTONEG 0x0900 340 1.4 thorpej 341 1.4 thorpej #define TULIP_ROM_MB_MEDIA_CODE 0x3f 342 1.4 thorpej #define TULIP_ROM_MB_MEDIA_TP 0x00 343 1.4 thorpej #define TULIP_ROM_MB_MEDIA_BNC 0x01 344 1.4 thorpej #define TULIP_ROM_MB_MEDIA_AUI 0x02 345 1.8 thorpej #define TULIP_ROM_MB_MEDIA_100TX 0x03 346 1.4 thorpej #define TULIP_ROM_MB_MEDIA_TP_FDX 0x04 347 1.8 thorpej #define TULIP_ROM_MB_MEDIA_100TX_FDX 0x05 348 1.8 thorpej #define TULIP_ROM_MB_MEDIA_100T4 0x06 349 1.8 thorpej #define TULIP_ROM_MB_MEDIA_100FX 0x07 350 1.8 thorpej #define TULIP_ROM_MB_MEDIA_100FX_FDX 0x08 351 1.4 thorpej 352 1.4 thorpej #define TULIP_ROM_MB_EXT 0x40 353 1.4 thorpej 354 1.4 thorpej #define TULIP_ROM_MB_CSR13 1 /* W */ 355 1.4 thorpej #define TULIP_ROM_MB_CSR14 3 /* W */ 356 1.4 thorpej #define TULIP_ROM_MB_CSR15 5 /* W */ 357 1.4 thorpej 358 1.4 thorpej #define TULIP_ROM_MB_SIZE(mc) (((mc) & TULIP_ROM_MB_EXT) ? 7 : 1) 359 1.7 thorpej 360 1.8 thorpej #define TULIP_ROM_MB_NOINDICATOR 0x8000 361 1.8 thorpej #define TULIP_ROM_MB_DEFAULT 0x4000 362 1.8 thorpej #define TULIP_ROM_MB_POLARITY 0x0080 363 1.8 thorpej #define TULIP_ROM_MB_OPMODE(x) (((x) & 0x71) << 18) 364 1.8 thorpej #define TULIP_ROM_MB_BITPOS(x) (1 << (((x) & 0x0e) >> 1)) 365 1.8 thorpej 366 1.7 thorpej #define TULIP_ROM_MB_21140_GPR 0 /* 21140[A] GPR block */ 367 1.7 thorpej #define TULIP_ROM_MB_21140_MII 1 /* 21140[A] MII block */ 368 1.7 thorpej #define TULIP_ROM_MB_21142_SIA 2 /* 2114[23] SIA block */ 369 1.7 thorpej #define TULIP_ROM_MB_21142_MII 3 /* 2114[23] MII block */ 370 1.7 thorpej #define TULIP_ROM_MB_21143_SYM 4 /* 21143 SYM block */ 371 1.7 thorpej #define TULIP_ROM_MB_21143_RESET 5 /* 21143 reset block */ 372 1.4 thorpej 373 1.29 thorpej #define TULIP_ROM_GETW(data, off) ((uint32_t)(data)[(off)] | \ 374 1.29 thorpej (uint32_t)((data)[(off) + 1]) << 8) 375 1.4 thorpej 376 1.4 thorpej /* 377 1.1 thorpej * Tulip control registers. 378 1.1 thorpej */ 379 1.1 thorpej 380 1.1 thorpej #define TULIP_CSR0 0x00 381 1.1 thorpej #define TULIP_CSR1 0x08 382 1.1 thorpej #define TULIP_CSR2 0x10 383 1.1 thorpej #define TULIP_CSR3 0x18 384 1.1 thorpej #define TULIP_CSR4 0x20 385 1.1 thorpej #define TULIP_CSR5 0x28 386 1.1 thorpej #define TULIP_CSR6 0x30 387 1.1 thorpej #define TULIP_CSR7 0x38 388 1.1 thorpej #define TULIP_CSR8 0x40 389 1.1 thorpej #define TULIP_CSR9 0x48 390 1.1 thorpej #define TULIP_CSR10 0x50 391 1.1 thorpej #define TULIP_CSR11 0x58 392 1.1 thorpej #define TULIP_CSR12 0x60 393 1.1 thorpej #define TULIP_CSR13 0x68 394 1.1 thorpej #define TULIP_CSR14 0x70 395 1.1 thorpej #define TULIP_CSR15 0x78 396 1.1 thorpej #define TULIP_CSR16 0x80 397 1.1 thorpej #define TULIP_CSR17 0x88 398 1.1 thorpej #define TULIP_CSR18 0x90 399 1.1 thorpej #define TULIP_CSR19 0x98 400 1.1 thorpej #define TULIP_CSR20 0xa0 401 1.11 thorpej #define TULIP_CSR21 0xa8 402 1.11 thorpej #define TULIP_CSR22 0xb0 403 1.11 thorpej #define TULIP_CSR23 0xb8 404 1.11 thorpej #define TULIP_CSR24 0xc0 405 1.11 thorpej #define TULIP_CSR25 0xc8 406 1.11 thorpej #define TULIP_CSR26 0xd0 407 1.11 thorpej #define TULIP_CSR27 0xd8 408 1.11 thorpej #define TULIP_CSR28 0xe0 409 1.11 thorpej #define TULIP_CSR29 0xe8 410 1.11 thorpej #define TULIP_CSR30 0xf0 411 1.11 thorpej #define TULIP_CSR31 0xf8 412 1.5 thorpej 413 1.5 thorpej #define TULIP_CSR_INDEX(csr) ((csr) >> 3) 414 1.1 thorpej 415 1.1 thorpej /* CSR0 - Bus Mode */ 416 1.1 thorpej #define CSR_BUSMODE TULIP_CSR0 417 1.1 thorpej #define BUSMODE_SWR 0x00000001 /* software reset */ 418 1.1 thorpej #define BUSMODE_BAR 0x00000002 /* bus arbitration */ 419 1.1 thorpej #define BUSMODE_DSL 0x0000007c /* descriptor skip length */ 420 1.1 thorpej #define BUSMODE_BLE 0x00000080 /* big endian */ 421 1.1 thorpej /* programmable burst length */ 422 1.1 thorpej #define BUSMODE_PBL_DEFAULT 0x00000000 /* default value */ 423 1.1 thorpej #define BUSMODE_PBL_1LW 0x00000100 /* 1 longword */ 424 1.1 thorpej #define BUSMODE_PBL_2LW 0x00000200 /* 2 longwords */ 425 1.1 thorpej #define BUSMODE_PBL_4LW 0x00000400 /* 4 longwords */ 426 1.1 thorpej #define BUSMODE_PBL_8LW 0x00000800 /* 8 longwords */ 427 1.1 thorpej #define BUSMODE_PBL_16LW 0x00001000 /* 16 longwords */ 428 1.1 thorpej #define BUSMODE_PBL_32LW 0x00002000 /* 32 longwords */ 429 1.1 thorpej /* cache alignment */ 430 1.1 thorpej #define BUSMODE_CAL_NONE 0x00000000 /* no alignment */ 431 1.1 thorpej #define BUSMODE_CAL_8LW 0x00004000 /* 8 longwords */ 432 1.1 thorpej #define BUSMODE_CAL_16LW 0x00008000 /* 16 longwords */ 433 1.1 thorpej #define BUSMODE_CAL_32LW 0x0000c000 /* 32 longwords */ 434 1.1 thorpej #define BUSMODE_DAS 0x00010000 /* diagnostic address space */ 435 1.1 thorpej /* must be zero on most */ 436 1.1 thorpej /* transmit auto-poll */ 437 1.2 thorpej /* 438 1.2 thorpej * Transmit auto-polling not supported on: 439 1.2 thorpej * Winbond 89C040F 440 1.18 thorpej * Xircom X3201-3 441 1.20 thorpej * Davicom DM9102 (buggy BUSMODE register) 442 1.31 rpaulo * ASIX AX88140 443 1.2 thorpej */ 444 1.1 thorpej #define BUSMODE_TAP_NONE 0x00000000 /* no auto-polling */ 445 1.1 thorpej #define BUSMODE_TAP_200us 0x00020000 /* 200 uS */ 446 1.1 thorpej #define BUSMODE_TAP_800us 0x00040000 /* 400 uS */ 447 1.1 thorpej #define BUSMODE_TAP_1_6ms 0x00060000 /* 1.6 mS */ 448 1.1 thorpej #define BUSMODE_TAP_12_8us 0x00080000 /* 12.8 uS (21041+) */ 449 1.1 thorpej #define BUSMODE_TAP_25_6us 0x000a0000 /* 25.6 uS (21041+) */ 450 1.1 thorpej #define BUSMODE_TAP_51_2us 0x000c0000 /* 51.2 uS (21041+) */ 451 1.1 thorpej #define BUSMODE_TAP_102_4us 0x000e0000 /* 102.4 uS (21041+) */ 452 1.1 thorpej #define BUSMODE_DBO 0x00100000 /* desc-only b/e (21041+) */ 453 1.1 thorpej #define BUSMODE_RME 0x00200000 /* rd/mult enab (21140+) */ 454 1.2 thorpej #define BUSMODE_WINB_WAIT 0x00200000 /* wait state insertion */ 455 1.1 thorpej #define BUSMODE_RLE 0x00800000 /* rd/line enab (21140+) */ 456 1.1 thorpej #define BUSMODE_WLE 0x01000000 /* wt/line enab (21140+) */ 457 1.1 thorpej #define BUSMODE_PNIC_MBO 0x04000000 /* magic `must be one' bit */ 458 1.1 thorpej /* on Lite-On PNIC */ 459 1.1 thorpej 460 1.1 thorpej 461 1.1 thorpej /* CSR1 - Transmit Poll Demand */ 462 1.1 thorpej #define CSR_TXPOLL TULIP_CSR1 463 1.1 thorpej #define TXPOLL_TPD 0x00000001 /* transmit poll demand */ 464 1.1 thorpej 465 1.1 thorpej 466 1.1 thorpej /* CSR2 - Receive Poll Demand */ 467 1.1 thorpej #define CSR_RXPOLL TULIP_CSR2 468 1.1 thorpej #define RXPOLL_RPD 0x00000001 /* receive poll demand */ 469 1.1 thorpej 470 1.1 thorpej 471 1.1 thorpej /* CSR3 - Receive List Base Address */ 472 1.1 thorpej #define CSR_RXLIST TULIP_CSR3 473 1.1 thorpej 474 1.1 thorpej /* CSR4 - Transmit List Base Address */ 475 1.1 thorpej #define CSR_TXLIST TULIP_CSR4 476 1.1 thorpej 477 1.1 thorpej /* CSR5 - Status */ 478 1.1 thorpej #define CSR_STATUS TULIP_CSR5 479 1.1 thorpej #define STATUS_TI 0x00000001 /* transmit interrupt */ 480 1.1 thorpej #define STATUS_TPS 0x00000002 /* transmit process stopped */ 481 1.1 thorpej #define STATUS_TU 0x00000004 /* transmit buffer unavail */ 482 1.1 thorpej #define STATUS_TJT 0x00000008 /* transmit jabber timeout */ 483 1.2 thorpej #define STATUS_WINB_REI 0x00000008 /* receive early interrupt */ 484 1.1 thorpej #define STATUS_LNPANC 0x00000010 /* link pass (21041) */ 485 1.2 thorpej #define STATUS_WINB_RERR 0x00000010 /* receive error */ 486 1.1 thorpej #define STATUS_UNF 0x00000020 /* transmit underflow */ 487 1.1 thorpej #define STATUS_RI 0x00000040 /* receive interrupt */ 488 1.1 thorpej #define STATUS_RU 0x00000080 /* receive buffer unavail */ 489 1.1 thorpej #define STATUS_RPS 0x00000100 /* receive process stopped */ 490 1.1 thorpej #define STATUS_RWT 0x00000200 /* receive watchdog timeout */ 491 1.1 thorpej #define STATUS_AT 0x00000400 /* SIA AUI/TP pin changed 492 1.1 thorpej (21040) */ 493 1.12 thorpej #define STATUS_ETI 0x00000400 /* early transmit interrupt 494 1.12 thorpej (21142/PMAC/Winbond) */ 495 1.1 thorpej #define STATUS_FD 0x00000800 /* full duplex short frame 496 1.1 thorpej received (21040) */ 497 1.1 thorpej #define STATUS_TM 0x00000800 /* timer expired (21041) */ 498 1.1 thorpej #define STATUS_LNF 0x00001000 /* link fail (21040) */ 499 1.1 thorpej #define STATUS_SE 0x00002000 /* system error */ 500 1.1 thorpej #define STATUS_ER 0x00004000 /* early receive (21041) */ 501 1.1 thorpej #define STATUS_AIS 0x00008000 /* abnormal interrupt summary */ 502 1.1 thorpej #define STATUS_NIS 0x00010000 /* normal interrupt summary */ 503 1.1 thorpej #define STATUS_RS 0x000e0000 /* receive process state */ 504 1.1 thorpej #define STATUS_RS_STOPPED 0x00000000 /* Stopped */ 505 1.1 thorpej #define STATUS_RS_FETCH 0x00020000 /* Running - fetch receive 506 1.1 thorpej descriptor */ 507 1.1 thorpej #define STATUS_RS_CHECK 0x00040000 /* Running - check for end 508 1.1 thorpej of receive */ 509 1.1 thorpej #define STATUS_RS_WAIT 0x00060000 /* Running - wait for packet */ 510 1.1 thorpej #define STATUS_RS_SUSPENDED 0x00080000 /* Suspended */ 511 1.1 thorpej #define STATUS_RS_CLOSE 0x000a0000 /* Running - close receive 512 1.1 thorpej descriptor */ 513 1.1 thorpej #define STATUS_RS_FLUSH 0x000c0000 /* Running - flush current 514 1.1 thorpej frame from FIFO */ 515 1.1 thorpej #define STATUS_RS_QUEUE 0x000e0000 /* Running - queue current 516 1.1 thorpej frame from FIFO into 517 1.1 thorpej buffer */ 518 1.20 thorpej #define STATUS_DM_RS_STOPPED 0x00000000 /* Stopped */ 519 1.20 thorpej #define STATUS_DM_RS_FETCH 0x00020000 /* Running - fetch receive 520 1.20 thorpej descriptor */ 521 1.20 thorpej #define STATUS_DM_RS_WAIT 0x00040000 /* Running - wait for packet */ 522 1.20 thorpej #define STATUS_DM_RS_QUEUE 0x00060000 /* Running - queue current 523 1.20 thorpej frame from FIFO into 524 1.20 thorpej buffer */ 525 1.20 thorpej #define STATUS_DM_RS_CLOSE_OWN 0x00080000 /* Running - close receive 526 1.20 thorpej descriptor, clear own */ 527 1.20 thorpej #define STATUS_DM_RS_CLOSE_ST 0x000a0000 /* Running - close receive 528 1.20 thorpej descriptor, write status */ 529 1.20 thorpej #define STATUS_DM_RS_SUSPENDED 0x000c0000 /* Suspended */ 530 1.20 thorpej #define STATUS_DM_RS_FLUSH 0x000e0000 /* Running - flush current 531 1.20 thorpej frame from FIFO */ 532 1.1 thorpej #define STATUS_TS 0x00700000 /* transmit process state */ 533 1.1 thorpej #define STATUS_TS_STOPPED 0x00000000 /* Stopped */ 534 1.1 thorpej #define STATUS_TS_FETCH 0x00100000 /* Running - fetch transmit 535 1.1 thorpej descriptor */ 536 1.1 thorpej #define STATUS_TS_WAIT 0x00200000 /* Running - wait for end 537 1.1 thorpej of transmission */ 538 1.1 thorpej #define STATUS_TS_READING 0x00300000 /* Running - read buffer from 539 1.1 thorpej memory and queue into 540 1.1 thorpej FIFO */ 541 1.1 thorpej #define STATUS_TS_RESERVED 0x00400000 /* RESERVED */ 542 1.1 thorpej #define STATUS_TS_SETUP 0x00500000 /* Running - Setup packet */ 543 1.1 thorpej #define STATUS_TS_SUSPENDED 0x00600000 /* Suspended */ 544 1.1 thorpej #define STATUS_TS_CLOSE 0x00700000 /* Running - close transmit 545 1.1 thorpej descriptor */ 546 1.20 thorpej #define STATUS_DM_TS_STOPPED 0x00000000 /* Stopped */ 547 1.20 thorpej #define STATUS_DM_TS_FETCH 0x00100000 /* Running - fetch transmit 548 1.20 thorpej descriptor */ 549 1.20 thorpej #define STATUS_DM_TS_SETUP 0x00200000 /* Running - Setup packet */ 550 1.20 thorpej #define STATUS_DM_TS_READING 0x00300000 /* Running - read buffer from 551 1.20 thorpej memory and queue into 552 1.20 thorpej FIFO */ 553 1.20 thorpej #define STATUS_DM_TS_CLOSE_OWN 0x00400000 /* Running - close transmit 554 1.20 thorpej descriptor, clear own */ 555 1.20 thorpej #define STATUS_DM_TS_WAIT 0x00500000 /* Running - wait for end 556 1.20 thorpej of transmission */ 557 1.20 thorpej #define STATUS_DM_TS_CLOSE_ST 0x00600000 /* Running - close transmit 558 1.20 thorpej descriptor, write status */ 559 1.20 thorpej #define STATUS_DM_TS_SUSPENDED 0x00700000 /* Suspended */ 560 1.1 thorpej #define STATUS_EB 0x03800000 /* error bits */ 561 1.44 andvar #define STATUS_EB_PARITY 0x00000000 /* parity error */ 562 1.1 thorpej #define STATUS_EB_MABT 0x00800000 /* master abort */ 563 1.1 thorpej #define STATUS_EB_TABT 0x01000000 /* target abort */ 564 1.12 thorpej #define STATUS_GPPI 0x04000000 /* GPIO interrupt (21142) */ 565 1.3 thorpej #define STATUS_PNIC_TXABORT 0x04000000 /* transmit aborted */ 566 1.12 thorpej #define STATUS_LC 0x08000000 /* 100baseTX link change 567 1.12 thorpej (21142/PMAC) */ 568 1.11 thorpej #define STATUS_PMAC_WKUPI 0x10000000 /* wake up event */ 569 1.18 thorpej #define STATUS_X3201_PMEIS 0x10000000 /* power management event 570 1.18 thorpej interrupt summary */ 571 1.18 thorpej #define STATUS_X3201_SFIS 0x80000000 /* second function (Modem) 572 1.18 thorpej interrupt status */ 573 1.1 thorpej 574 1.1 thorpej 575 1.1 thorpej /* CSR6 - Operation Mode */ 576 1.1 thorpej #define CSR_OPMODE TULIP_CSR6 577 1.1 thorpej #define OPMODE_HP 0x00000001 /* hash/perfect mode (ro) */ 578 1.1 thorpej #define OPMODE_SR 0x00000002 /* start receive */ 579 1.1 thorpej #define OPMODE_HO 0x00000004 /* hash only mode (ro) */ 580 1.1 thorpej #define OPMODE_PB 0x00000008 /* pass bad frames */ 581 1.41 andvar #define OPMODE_WINB_APP 0x00000008 /* accept all physical 582 1.41 andvar packets */ 583 1.1 thorpej #define OPMODE_IF 0x00000010 /* inverse filter mode (ro) */ 584 1.2 thorpej #define OPMODE_WINB_AMP 0x00000010 /* accept multicast packet */ 585 1.1 thorpej #define OPMODE_SB 0x00000020 /* start backoff counter */ 586 1.2 thorpej #define OPMODE_WINB_ABP 0x00000020 /* accept broadcast packet */ 587 1.1 thorpej #define OPMODE_PR 0x00000040 /* promiscuous mode */ 588 1.2 thorpej #define OPMODE_WINB_ARP 0x00000040 /* accept runt packet */ 589 1.1 thorpej #define OPMODE_PM 0x00000080 /* pass all multicast */ 590 1.2 thorpej #define OPMODE_WINB_AEP 0x00000080 /* accept error packet */ 591 1.1 thorpej #define OPMODE_FKD 0x00000100 /* flaky oscillator disable */ 592 1.39 msaitoh #define OPMODE_AX_RB 0x00000100 /* receive broadcast packets */ 593 1.1 thorpej #define OPMODE_FD 0x00000200 /* full-duplex mode */ 594 1.1 thorpej #define OPMODE_OM 0x00000c00 /* operating mode */ 595 1.1 thorpej #define OPMODE_OM_NORMAL 0x00000000 /* normal mode */ 596 1.1 thorpej #define OPMODE_OM_INTLOOP 0x00000400 /* internal loopback */ 597 1.1 thorpej #define OPMODE_OM_EXTLOOP 0x00000800 /* external loopback */ 598 1.1 thorpej #define OPMODE_FC 0x00001000 /* force collision */ 599 1.1 thorpej #define OPMODE_ST 0x00002000 /* start transmitter */ 600 1.1 thorpej #define OPMODE_TR 0x0000c000 /* threshold control */ 601 1.1 thorpej #define OPMODE_TR_72 0x00000000 /* 72 bytes */ 602 1.1 thorpej #define OPMODE_TR_96 0x00004000 /* 96 bytes */ 603 1.1 thorpej #define OPMODE_TR_128 0x00008000 /* 128 bytes */ 604 1.1 thorpej #define OPMODE_TR_160 0x0000c000 /* 160 bytes */ 605 1.2 thorpej #define OPMODE_WINB_TTH 0x001fc000 /* transmit threshold */ 606 1.2 thorpej #define OPMODE_WINB_TTH_SHIFT 14 607 1.1 thorpej #define OPMODE_BP 0x00010000 /* backpressure enable */ 608 1.1 thorpej #define OPMODE_CA 0x00020000 /* capture effect enable */ 609 1.4 thorpej #define OPMODE_PNIC_TBEN 0x00020000 /* Tx backoff offset enable */ 610 1.16 thorpej /* 611 1.16 thorpej * On Davicom DM9102, OPMODE_PS and OPMODE_HBD must 612 1.16 thorpej * always be set. 613 1.16 thorpej */ 614 1.1 thorpej #define OPMODE_PS 0x00040000 /* port select: 615 1.1 thorpej 1 = MII/SYM, 0 = SRL 616 1.1 thorpej (21140) */ 617 1.1 thorpej #define OPMODE_HBD 0x00080000 /* heartbeat disable: 618 1.1 thorpej set in MII/SYM 100mbps, 619 1.1 thorpej set according to PHY 620 1.1 thorpej in MII 10mbps mode 621 1.1 thorpej (21140) */ 622 1.3 thorpej #define OPMODE_PNIC_IT 0x00100000 /* immediate transmit */ 623 1.1 thorpej #define OPMODE_SF 0x00200000 /* store and forward mode 624 1.1 thorpej (21140) */ 625 1.2 thorpej #define OPMODE_WINB_REIT 0x1fe00000 /* receive eartly intr thresh */ 626 1.2 thorpej #define OPMODE_WINB_REIT_SHIFT 21 627 1.1 thorpej #define OPMODE_TTM 0x00400000 /* Transmit Threshold Mode: 628 1.1 thorpej 1 = 10mbps, 0 = 100mbps 629 1.1 thorpej (21140) */ 630 1.1 thorpej #define OPMODE_PCS 0x00800000 /* PCS function (21140) */ 631 1.1 thorpej #define OPMODE_SCR 0x01000000 /* scrambler mode (21140) */ 632 1.16 thorpej #define OPMODE_MBO 0x02000000 /* must be one (21140, 633 1.16 thorpej DM9102) */ 634 1.12 thorpej #define OPMODE_IDAMSB 0x04000000 /* ignore dest addr MSB 635 1.12 thorpej (21142) */ 636 1.3 thorpej #define OPMODE_PNIC_DRC 0x20000000 /* don't include CRC in Rx 637 1.1 thorpej frames (PNIC) */ 638 1.2 thorpej #define OPMODE_WINB_FES 0x20000000 /* fast ethernet select */ 639 1.1 thorpej #define OPMODE_RA 0x40000000 /* receive all (21140) */ 640 1.3 thorpej #define OPMODE_PNIC_EED 0x40000000 /* 1 == ext, 0 == int ENDEC 641 1.1 thorpej (PNIC) */ 642 1.2 thorpej #define OPMODE_WINB_TEIO 0x40000000 /* transmit early intr on */ 643 1.1 thorpej #define OPMODE_SC 0x80000000 /* special capture effect 644 1.1 thorpej enable (21041+) */ 645 1.2 thorpej #define OPMODE_WINB_REIO 0x80000000 /* receive early intr on */ 646 1.8 thorpej 647 1.8 thorpej /* Shorthand for media-related OPMODE bits */ 648 1.28 mycroft #define OPMODE_MEDIA_BITS (OPMODE_FD|OPMODE_PS|OPMODE_TTM|OPMODE_PCS|OPMODE_SCR) 649 1.1 thorpej 650 1.1 thorpej /* CSR7 - Interrupt Enable */ 651 1.1 thorpej #define CSR_INTEN TULIP_CSR7 652 1.1 thorpej /* See bits for CSR5 -- Status */ 653 1.1 thorpej 654 1.1 thorpej 655 1.1 thorpej /* CSR8 - Missed Frames */ 656 1.1 thorpej #define CSR_MISSED TULIP_CSR8 657 1.1 thorpej #define MISSED_MFC 0x0000ffff /* missed packet count */ 658 1.1 thorpej #define MISSED_MFO 0x00010000 /* missed packet count 659 1.1 thorpej overflowed */ 660 1.1 thorpej #define MISSED_FOC 0x0ffe0000 /* fifo overflow counter 661 1.1 thorpej (21140) */ 662 1.1 thorpej #define MISSED_OCO 0x10000000 /* overflow counter overflowed 663 1.1 thorpej (21140) */ 664 1.1 thorpej 665 1.1 thorpej #define MISSED_GETMFC(x) ((x) & MISSED_MFC) 666 1.1 thorpej #define MISSED_GETFOC(x) (((x) & MISSED_FOC) >> 17) 667 1.1 thorpej 668 1.1 thorpej 669 1.1 thorpej /* CSR9 - MII, SROM, Boot ROM, Ethernet Address ROM register. */ 670 1.1 thorpej #define CSR_MIIROM TULIP_CSR9 671 1.1 thorpej #define MIIROM_DATA 0x000000ff /* byte of data from 672 1.1 thorpej Ethernet Address ROM 673 1.1 thorpej (21040), byte of data 674 1.1 thorpej to/from Boot ROM (21041+) */ 675 1.1 thorpej #define MIIROM_SROMCS 0x00000001 /* SROM chip select */ 676 1.1 thorpej #define MIIROM_SROMSK 0x00000002 /* SROM clock */ 677 1.1 thorpej #define MIIROM_SROMDI 0x00000004 /* SROM data in (to) */ 678 1.1 thorpej #define MIIROM_SROMDO 0x00000008 /* SROM data out (from) */ 679 1.1 thorpej #define MIIROM_REG 0x00000400 /* external register select */ 680 1.1 thorpej #define MIIROM_SR 0x00000800 /* SROM select */ 681 1.1 thorpej #define MIIROM_BR 0x00001000 /* boot ROM select */ 682 1.1 thorpej #define MIIROM_WR 0x00002000 /* write to boot ROM */ 683 1.1 thorpej #define MIIROM_RD 0x00004000 /* read from boot ROM */ 684 1.1 thorpej #define MIIROM_MOD 0x00008000 /* mode select (ro) (21041) */ 685 1.1 thorpej #define MIIROM_MDC 0x00010000 /* MII clock */ 686 1.1 thorpej #define MIIROM_MDO 0x00020000 /* MII data out */ 687 1.1 thorpej #define MIIROM_MIIDIR 0x00040000 /* MII direction mode 688 1.1 thorpej 1 = PHY in read, 689 1.1 thorpej 0 = PHY in write */ 690 1.1 thorpej #define MIIROM_MDI 0x00080000 /* MII data in */ 691 1.1 thorpej #define MIIROM_DN 0x80000000 /* data not valid (21040) */ 692 1.1 thorpej 693 1.11 thorpej #define MIIROM_PMAC_LED0SEL 0x10000000 /* 0 == LED0 activity (def) 694 1.11 thorpej 1 == LED0 speed */ 695 1.11 thorpej #define MIIROM_PMAC_LED1SEL 0x20000000 /* 0 == LED1 link (def) 696 1.11 thorpej 1 == LED1 link/act */ 697 1.11 thorpej #define MIIROM_PMAC_LED2SEL 0x40000000 /* 0 == LED2 speed (def) 698 1.11 thorpej 1 == LED2 collision */ 699 1.11 thorpej #define MIIROM_PMAC_LED3SEL 0x80000000 /* 0 == LED3 receive (def) 700 1.11 thorpej 1 == LED3 full duplex */ 701 1.11 thorpej 702 1.1 thorpej /* SROM opcodes */ 703 1.1 thorpej #define TULIP_SROM_OPC_ERASE 0x04 704 1.1 thorpej #define TULIP_SROM_OPC_WRITE 0x05 705 1.1 thorpej #define TULIP_SROM_OPC_READ 0x06 706 1.1 thorpej 707 1.1 thorpej /* The Lite-On PNIC does this completely differently */ 708 1.1 thorpej #define PNIC_MIIROM_DATA 0x0000ffff /* mask of data bits ??? */ 709 1.1 thorpej #define PNIC_MIIROM_BUSY 0x80000000 /* EEPROM is busy */ 710 1.1 thorpej 711 1.1 thorpej 712 1.1 thorpej /* CSR10 - Boot ROM address register (21041+). */ 713 1.1 thorpej #define CSR_ROMADDR TULIP_CSR10 714 1.1 thorpej #define ROMADDR_MASK 0x000003ff /* boot rom address */ 715 1.1 thorpej 716 1.1 thorpej 717 1.1 thorpej /* CSR11 - General Purpose Timer (21041+). */ 718 1.1 thorpej #define CSR_GPT TULIP_CSR11 719 1.1 thorpej #define GPT_VALUE 0x0000ffff /* timer value */ 720 1.1 thorpej #define GPT_CON 0x00010000 /* continuous mode */ 721 1.12 thorpej /* 21143-PD and 21143-TD Interrupt Mitigation bits */ 722 1.12 thorpej #define GPT_NRX 0x000e0000 /* number of Rx packets */ 723 1.12 thorpej #define GPT_RXT 0x00f00000 /* Rx timer */ 724 1.12 thorpej #define GPT_NTX 0x07000000 /* number of Tx packets */ 725 1.12 thorpej #define GPT_TXT 0x78000000 /* Tx timer */ 726 1.12 thorpej #define GPT_CYCLE 0x80000000 /* cycle size */ 727 1.1 thorpej 728 1.1 thorpej 729 1.12 thorpej /* CSR12 - SIA Status Register. */ 730 1.1 thorpej #define CSR_SIASTAT TULIP_CSR12 731 1.30 perry #define SIASTAT_PAUI 0x00000001 /* pin AUI/TP indication 732 1.1 thorpej (21040) */ 733 1.12 thorpej #define SIASTAT_MRA 0x00000001 /* MII receive activity 734 1.12 thorpej (21142) */ 735 1.1 thorpej #define SIASTAT_NCR 0x00000002 /* network connection error */ 736 1.12 thorpej #define SIASTAT_LS100 0x00000002 /* 100baseT link status 737 1.12 thorpej 0 == pass (21142) */ 738 1.1 thorpej #define SIASTAT_LKF 0x00000004 /* link fail status */ 739 1.12 thorpej #define SIASTAT_LS10 0x00000004 /* 10baseT link status 740 1.12 thorpej 0 == pass (21142) */ 741 1.1 thorpej #define SIASTAT_APS 0x00000008 /* auto polarity status */ 742 1.1 thorpej #define SIASTAT_DSD 0x00000010 /* PLL self test done */ 743 1.1 thorpej #define SIASTAT_DSP 0x00000020 /* PLL self test pass */ 744 1.1 thorpej #define SIASTAT_DAZ 0x00000040 /* PLL all zero */ 745 1.1 thorpej #define SIASTAT_DAO 0x00000080 /* PLL all one */ 746 1.1 thorpej #define SIASTAT_SRA 0x00000100 /* selected port receive 747 1.1 thorpej activity (21041) */ 748 1.12 thorpej #define SIASTAT_ARA 0x00000100 /* AUI receive activity 749 1.12 thorpej (21142) */ 750 1.1 thorpej #define SIASTAT_NRA 0x00000200 /* non-selected port 751 1.1 thorpej receive activity (21041) */ 752 1.12 thorpej #define SIASTAT_TRA 0x00000200 /* 10base-T receive activity 753 1.12 thorpej (21142) */ 754 1.1 thorpej #define SIASTAT_NSN 0x00000400 /* non-stable NLPs detected 755 1.1 thorpej (21041) */ 756 1.1 thorpej #define SIASTAT_TRF 0x00000800 /* transmit remote fault 757 1.1 thorpej (21041) */ 758 1.1 thorpej #define SIASTAT_ANS 0x00007000 /* autonegotiation state 759 1.1 thorpej (21041) */ 760 1.1 thorpej #define SIASTAT_ANS_DIS 0x00000000 /* disabled */ 761 1.1 thorpej #define SIASTAT_ANS_TXDIS 0x00001000 /* transmit disabled */ 762 1.21 castor #define SIASTAT_ANS_START 0x00001000 /* (MX98715AEC) */ 763 1.1 thorpej #define SIASTAT_ANS_ABD 0x00002000 /* ability detect */ 764 1.1 thorpej #define SIASTAT_ANS_ACKD 0x00003000 /* acknowledge detect */ 765 1.1 thorpej #define SIASTAT_ANS_ACKC 0x00004000 /* complete acknowledge */ 766 1.12 thorpej #define SIASTAT_ANS_FLPGOOD 0x00005000 /* FLP link good */ 767 1.1 thorpej #define SIASTAT_ANS_LINKCHECK 0x00006000 /* link check */ 768 1.1 thorpej #define SIASTAT_LPN 0x00008000 /* link partner negotiable 769 1.1 thorpej (21041) */ 770 1.1 thorpej #define SIASTAT_LPC 0xffff0000 /* link partner code word */ 771 1.1 thorpej 772 1.1 thorpej #define SIASTAT_GETLPC(x) (((x) & SIASTAT_LPC) >> 16) 773 1.1 thorpej 774 1.1 thorpej 775 1.12 thorpej /* CSR13 - SIA Connectivity Register. */ 776 1.1 thorpej #define CSR_SIACONN TULIP_CSR13 777 1.12 thorpej #define SIACONN_SRL 0x00000001 /* SIA reset 778 1.12 thorpej (0 == reset) */ 779 1.1 thorpej #define SIACONN_PS 0x00000002 /* pin AUI/TP selection 780 1.1 thorpej (21040) */ 781 1.1 thorpej #define SIACONN_CAC 0x00000004 /* CSR autoconfiguration */ 782 1.1 thorpej #define SIACONN_AUI 0x00000008 /* select AUI (0 = TP) */ 783 1.1 thorpej #define SIACONN_EDP 0x00000010 /* SIA PLL external input 784 1.1 thorpej enable (21040) */ 785 1.1 thorpej #define SIACONN_ENI 0x00000020 /* encoder input multiplexer 786 1.1 thorpej (21040) */ 787 1.1 thorpej #define SIACONN_SIM 0x00000040 /* serial interface input 788 1.1 thorpej multiplexer (21040) */ 789 1.1 thorpej #define SIACONN_ASE 0x00000080 /* APLL start enable 790 1.1 thorpej (21040) */ 791 1.1 thorpej #define SIACONN_SEL 0x00000f00 /* external port output 792 1.1 thorpej multiplexer select 793 1.1 thorpej (21040) */ 794 1.1 thorpej #define SIACONN_IE 0x00001000 /* input enable (21040) */ 795 1.1 thorpej #define SIACONN_OE1_3 0x00002000 /* output enable 1, 3 796 1.1 thorpej (21040) */ 797 1.1 thorpej #define SIACONN_OE2_4 0x00004000 /* output enable 2, 4 798 1.1 thorpej (21040) */ 799 1.1 thorpej #define SIACONN_OE5_6_7 0x00008000 /* output enable 5, 6, 7 800 1.1 thorpej (21040) */ 801 1.1 thorpej #define SIACONN_SDM 0x0000ef00 /* SIA diagnostic mode; 802 1.1 thorpej always set to this value 803 1.1 thorpej for normal operation 804 1.1 thorpej (21041) */ 805 1.1 thorpej 806 1.1 thorpej 807 1.12 thorpej /* CSR14 - SIA Transmit Receive Register. */ 808 1.1 thorpej #define CSR_SIATXRX TULIP_CSR14 809 1.1 thorpej #define SIATXRX_ECEN 0x00000001 /* encoder enable */ 810 1.1 thorpej #define SIATXRX_LBK 0x00000002 /* loopback enable */ 811 1.1 thorpej #define SIATXRX_DREN 0x00000004 /* driver enable */ 812 1.1 thorpej #define SIATXRX_LSE 0x00000008 /* link pulse send enable */ 813 1.1 thorpej #define SIATXRX_CPEN 0x00000030 /* compensation enable */ 814 1.1 thorpej #define SIATXRX_CPEN_DIS0 0x00000000 /* disabled */ 815 1.1 thorpej #define SIATXRX_CPEN_DIS1 0x00000010 /* disabled */ 816 1.1 thorpej #define SIATXRX_CPEN_HIGHPWR 0x00000020 /* high power */ 817 1.1 thorpej #define SIATXRX_CPEN_NORMAL 0x00000030 /* normal */ 818 1.1 thorpej #define SIATXRX_MBO 0x00000040 /* must be one (21041 pass 2) */ 819 1.12 thorpej #define SIATXRX_TH 0x00000040 /* 10baseT HDX enable (21142) */ 820 1.1 thorpej #define SIATXRX_ANE 0x00000080 /* autonegotiation enable 821 1.12 thorpej (21041/21142) */ 822 1.1 thorpej #define SIATXRX_RSQ 0x00000100 /* receive squelch enable */ 823 1.1 thorpej #define SIATXRX_CSQ 0x00000200 /* collision squelch enable */ 824 1.1 thorpej #define SIATXRX_CLD 0x00000400 /* collision detect enable */ 825 1.1 thorpej #define SIATXRX_SQE 0x00000800 /* signal quality generation 826 1.1 thorpej enable */ 827 1.1 thorpej #define SIATXRX_LTE 0x00001000 /* link test enable */ 828 1.1 thorpej #define SIATXRX_APE 0x00002000 /* auto-polarity enable */ 829 1.22 jeffs #define SIATXRX_SPP 0x00004000 /* set polarity plus */ 830 1.1 thorpej #define SIATXRX_TAS 0x00008000 /* 10base-T/AUI autosensing 831 1.12 thorpej enable (21041/21142) */ 832 1.12 thorpej #define SIATXRX_THX 0x00010000 /* 100baseTX-HDX (21142) */ 833 1.12 thorpej #define SIATXRX_TXF 0x00020000 /* 100baseTX-FDX (21142) */ 834 1.12 thorpej #define SIATXRX_T4 0x00040000 /* 100baseT4 (21142) */ 835 1.1 thorpej 836 1.1 thorpej 837 1.12 thorpej /* CSR15 - SIA General Register. */ 838 1.1 thorpej #define CSR_SIAGEN TULIP_CSR15 839 1.1 thorpej #define SIAGEN_JBD 0x00000001 /* jabber disable */ 840 1.1 thorpej #define SIAGEN_HUJ 0x00000002 /* host unjab */ 841 1.1 thorpej #define SIAGEN_JCK 0x00000004 /* jabber clock */ 842 1.1 thorpej #define SIAGEN_ABM 0x00000008 /* BNC select (21041) */ 843 1.1 thorpej #define SIAGEN_RWD 0x00000010 /* receive watchdog disable */ 844 1.1 thorpej #define SIAGEN_RWR 0x00000020 /* receive watchdog release */ 845 1.1 thorpej #define SIAGEN_LE1 0x00000040 /* LED 1 enable (21041) */ 846 1.1 thorpej #define SIAGEN_LV1 0x00000080 /* LED 1 value (21041) */ 847 1.1 thorpej #define SIAGEN_TSCK 0x00000100 /* test clock */ 848 1.1 thorpej #define SIAGEN_FUSQ 0x00000200 /* force unsquelch */ 849 1.1 thorpej #define SIAGEN_FLF 0x00000400 /* force link fail */ 850 1.1 thorpej #define SIAGEN_LSD 0x00000800 /* LED stretch disable 851 1.1 thorpej (21041) */ 852 1.12 thorpej #define SIAGEN_LEE 0x00000800 /* Link extend enable (21142) */ 853 1.1 thorpej #define SIAGEN_DPST 0x00001000 /* PLL self-test start */ 854 1.1 thorpej #define SIAGEN_FRL 0x00002000 /* force receiver low */ 855 1.1 thorpej #define SIAGEN_LE2 0x00004000 /* LED 2 enable (21041) */ 856 1.12 thorpej #define SIAGEN_RMP 0x00004000 /* received magic packet 857 1.12 thorpej (21143) */ 858 1.1 thorpej #define SIAGEN_LV2 0x00008000 /* LED 2 value (21041) */ 859 1.12 thorpej #define SIAGEN_HCKR 0x00008000 /* hacker (21143) */ 860 1.12 thorpej #define SIAGEN_MD 0x000f0000 /* general purpose mode/data */ 861 1.17 soren #define SIAGEN_LGS0 0x00100000 /* LED/GEP 0 select */ 862 1.17 soren #define SIAGEN_LGS1 0x00200000 /* LED/GEP 1 select */ 863 1.17 soren #define SIAGEN_LGS2 0x00400000 /* LED/GEP 2 select */ 864 1.17 soren #define SIAGEN_LGS3 0x00800000 /* LED/GEP 3 select */ 865 1.12 thorpej #define SIAGEN_GEI0 0x01000000 /* GEP pin 0 intr enable */ 866 1.12 thorpej #define SIAGEN_GEI1 0x02000000 /* GEP pin 1 intr enable */ 867 1.12 thorpej #define SIAGEN_RME 0x04000000 /* receive match enable */ 868 1.12 thorpej #define SIAGEN_CWE 0x08000000 /* control write enable */ 869 1.12 thorpej #define SIAGEN_GI0 0x10000000 /* GEP pin 0 interrupt */ 870 1.12 thorpej #define SIAGEN_GI1 0x20000000 /* GEP pin 1 interrupt */ 871 1.12 thorpej #define SIAGEN_RMI 0x40000000 /* receive match interrupt */ 872 1.1 thorpej 873 1.1 thorpej 874 1.1 thorpej /* CSR12 - General Purpose Port (21140+). */ 875 1.1 thorpej #define CSR_GPP TULIP_CSR12 876 1.1 thorpej #define GPP_MD 0x000000ff /* general purpose mode/data */ 877 1.1 thorpej #define GPP_GPC 0x00000100 /* general purpose control */ 878 1.3 thorpej #define GPP_PNIC_GPD 0x0000000f /* general purpose data */ 879 1.3 thorpej #define GPP_PNIC_GPC 0x000000f0 /* general purpose control */ 880 1.3 thorpej 881 1.3 thorpej #define GPP_PNIC_IN(x) (1 << (x)) 882 1.4 thorpej #define GPP_PNIC_OUT(x, on) (((on) << (x)) | (1 << ((x) + 4))) 883 1.3 thorpej 884 1.3 thorpej /* 885 1.3 thorpej * The Lite-On PNIC manual recommends the following for the General Purpose 886 1.3 thorpej * I/O pins: 887 1.3 thorpej * 888 1.3 thorpej * 0 Speed Relay 1 == 100mbps 889 1.3 thorpej * 1 100mbps loopback 1 == loopback 890 1.3 thorpej * 2 BNC DC-DC converter 1 == select BNC 891 1.3 thorpej * 3 Link 100 1 == 100baseTX link status 892 1.3 thorpej */ 893 1.3 thorpej #define GPP_PNIC_PIN_SPEED_RLY 0 894 1.3 thorpej #define GPP_PNIC_PIN_100M_LPKB 1 895 1.3 thorpej #define GPP_PNIC_PIN_BNC_XMER 2 896 1.3 thorpej #define GPP_PNIC_PIN_LNK100X 3 897 1.26 chs 898 1.26 chs /* 899 1.27 chs * Definitions used for the SMC 9332DST (21140) board. 900 1.26 chs */ 901 1.26 chs #define GPP_SMC9332DST_PINS 0x3f /* General Purpose Pin directions */ 902 1.26 chs #define GPP_SMC9332DST_OK10 0x80 /* 10 Mb/sec Signal Detect gep<7> */ 903 1.26 chs #define GPP_SMC9332DST_OK100 0x40 /* 100 Mb/sec Signal Detect gep<6> */ 904 1.26 chs #define GPP_SMC9332DST_INIT 0x09 /* No loopback --- point-to-point */ 905 1.27 chs 906 1.27 chs /* 907 1.27 chs * Definitions used for the Cogent EM1x0 (21140) board. 908 1.27 chs */ 909 1.27 chs #define GPP_COGENT_EM1x0_PINS 0x3f /* General Purpose Pin directions */ 910 1.27 chs #define GPP_COGENT_EM1x0_INIT 0x09 /* No loopback --- point-to-point */ 911 1.3 thorpej 912 1.37 jakllsch /* 913 1.37 jakllsch * Digital EB140 21140 reference design. 914 1.37 jakllsch * MC68832 + ML6671 for 100Mb/s. LXT901 for 10Mb/s. 915 1.37 jakllsch * 916 1.37 jakllsch * (From document EC-QD2SA-TE, figure 1-3.) 917 1.37 jakllsch */ 918 1.37 jakllsch #define GPP_EB140_OUTPUTS 0x1f /* these GPP pins are driven */ 919 1.37 jakllsch #define GPP_EB140_MC68832_LB 0x01 /* 100Mb/s loopback disable 1 */ 920 1.37 jakllsch #define GPP_EB140_ML6671_LB 0x02 /* 100Mb/s loopback disable 2 */ 921 1.37 jakllsch #define GPP_EB140_LXT901_ILB 0x04 /* 10Mb/s internal LB enable */ 922 1.37 jakllsch #define GPP_EB140_LXT901_ELB 0x08 /* 10Mb/s external LB disable */ 923 1.37 jakllsch #define GPP_EB140_RESERVED 0x10 /* media switch relay on other boards */ 924 1.37 jakllsch #define GPP_EB140_MC68836_SYNC 0x20 /* synced to 100Mb/s PHY */ 925 1.37 jakllsch #define GPP_EB140_MC68836_LINK 0x40 /* 100Mb/s signal detect */ 926 1.37 jakllsch #define GPP_EB140_LXT901_LINK 0x80 /* 10Mb/s link pass */ 927 1.37 jakllsch 928 1.37 jakllsch #define GPP_EB140_INIT (GPP_EB140_LXT901_ELB|GPP_EB140_ML6671_LB|GPP_EB140_MC68832_LB) 929 1.1 thorpej 930 1.1 thorpej /* 931 1.1 thorpej * Digital Semiconductor 21040 registers. 932 1.1 thorpej */ 933 1.1 thorpej 934 1.1 thorpej /* CSR11 - Full Duplex Register */ 935 1.1 thorpej #define CSR_21040_FDX TULIP_CSR11 936 1.1 thorpej #define FDX21040_FDXACV 0x0000ffff /* full duplex 937 1.1 thorpej autoconfiguration value */ 938 1.1 thorpej 939 1.1 thorpej 940 1.1 thorpej /* SIA configuration for 10base-T (from the 21040 manual) */ 941 1.43 mlelstv #define SIACONN_21040_10BASET 0x0000ef01 942 1.1 thorpej #define SIATXRX_21040_10BASET 0x0000ffff 943 1.1 thorpej #define SIAGEN_21040_10BASET 0x00000000 944 1.1 thorpej 945 1.1 thorpej 946 1.1 thorpej /* SIA configuration for 10base-T full-duplex (from the 21040 manual) */ 947 1.43 mlelstv #define SIACONN_21040_10BASET_FDX 0x0000ef01 948 1.1 thorpej #define SIATXRX_21040_10BASET_FDX 0x0000fffd 949 1.1 thorpej #define SIAGEN_21040_10BASET_FDX 0x00000000 950 1.1 thorpej 951 1.1 thorpej 952 1.1 thorpej /* SIA configuration for 10base-5 (from the 21040 manual) */ 953 1.43 mlelstv #define SIACONN_21040_AUI 0x0000ef09 954 1.1 thorpej #define SIATXRX_21040_AUI 0x00000705 955 1.1 thorpej #define SIAGEN_21040_AUI 0x00000006 956 1.1 thorpej 957 1.1 thorpej 958 1.1 thorpej /* SIA configuration for External SIA (from the 21040 manual) */ 959 1.1 thorpej #define SIACONN_21040_EXTSIA 0x00003041 960 1.1 thorpej #define SIATXRX_21040_EXTSIA 0x00000000 961 1.1 thorpej #define SIAGEN_21040_EXTSIA 0x00000006 962 1.1 thorpej 963 1.1 thorpej 964 1.1 thorpej /* 965 1.1 thorpej * Digital Semiconductor 21041 registers. 966 1.1 thorpej */ 967 1.1 thorpej 968 1.1 thorpej /* SIA configuration for 10base-T (from the 21041 manual) */ 969 1.1 thorpej #define SIACONN_21041_10BASET 0x0000ef01 970 1.1 thorpej #define SIATXRX_21041_10BASET 0x0000ff3f 971 1.1 thorpej #define SIAGEN_21041_10BASET 0x00000000 972 1.1 thorpej 973 1.1 thorpej #define SIACONN_21041P2_10BASET SIACONN_21041_10BASET 974 1.1 thorpej #define SIATXRX_21041P2_10BASET 0x0000ffff 975 1.1 thorpej #define SIAGEN_21041P2_10BASET SIAGEN_21041_10BASET 976 1.1 thorpej 977 1.1 thorpej 978 1.1 thorpej /* SIA configuration for 10base-T full-duplex (from the 21041 manual) */ 979 1.1 thorpej #define SIACONN_21041_10BASET_FDX 0x0000ef01 980 1.1 thorpej #define SIATXRX_21041_10BASET_FDX 0x0000ff3d 981 1.1 thorpej #define SIAGEN_21041_10BASET_FDX 0x00000000 982 1.1 thorpej 983 1.1 thorpej #define SIACONN_21041P2_10BASET_FDX SIACONN_21041_10BASET_FDX 984 1.1 thorpej #define SIATXRX_21041P2_10BASET_FDX 0x0000ffff 985 1.1 thorpej #define SIAGEN_21041P2_10BASET_FDX SIAGEN_21041_10BASET_FDX 986 1.1 thorpej 987 1.1 thorpej 988 1.1 thorpej /* SIA configuration for 10base-5 (from the 21041 manual) */ 989 1.1 thorpej #define SIACONN_21041_AUI 0x0000ef09 990 1.1 thorpej #define SIATXRX_21041_AUI 0x0000f73d 991 1.1 thorpej #define SIAGEN_21041_AUI 0x0000000e 992 1.1 thorpej 993 1.1 thorpej #define SIACONN_21041P2_AUI SIACONN_21041_AUI 994 1.1 thorpej #define SIATXRX_21041P2_AUI 0x0000f7fd 995 1.1 thorpej #define SIAGEN_21041P2_AUI SIAGEN_21041_AUI 996 1.1 thorpej 997 1.1 thorpej 998 1.1 thorpej /* SIA configuration for 10base-2 (from the 21041 manual) */ 999 1.1 thorpej #define SIACONN_21041_BNC 0x0000ef09 1000 1.1 thorpej #define SIATXRX_21041_BNC 0x0000f73d 1001 1.1 thorpej #define SIAGEN_21041_BNC 0x00000006 1002 1.1 thorpej 1003 1.1 thorpej #define SIACONN_21041P2_BNC SIACONN_21041_BNC 1004 1.1 thorpej #define SIATXRX_21041P2_BNC 0x0000f7fd 1005 1.1 thorpej #define SIAGEN_21041P2_BNC SIAGEN_21041_BNC 1006 1.1 thorpej 1007 1.1 thorpej 1008 1.1 thorpej /* 1009 1.1 thorpej * Digital Semiconductor 21142/21143 registers. 1010 1.1 thorpej */ 1011 1.1 thorpej 1012 1.12 thorpej /* SIA configuration for 10baseT (from the 21143 manual) */ 1013 1.12 thorpej #define SIACONN_21142_10BASET 0x00000001 1014 1.12 thorpej #define SIATXRX_21142_10BASET 0x00007f3f 1015 1.12 thorpej #define SIAGEN_21142_10BASET 0x00000008 1016 1.12 thorpej 1017 1.12 thorpej 1018 1.12 thorpej /* SIA configuration for 10baseT full-duplex (from the 21143 manual) */ 1019 1.12 thorpej #define SIACONN_21142_10BASET_FDX 0x00000001 1020 1.12 thorpej #define SIATXRX_21142_10BASET_FDX 0x00007f3d 1021 1.12 thorpej #define SIAGEN_21142_10BASET_FDX 0x00000008 1022 1.12 thorpej 1023 1.12 thorpej 1024 1.12 thorpej /* SIA configuration for 10base5 (from the 21143 manual) */ 1025 1.12 thorpej #define SIACONN_21142_AUI 0x00000009 1026 1.12 thorpej #define SIATXRX_21142_AUI 0x00004705 1027 1.12 thorpej #define SIAGEN_21142_AUI 0x0000000e 1028 1.12 thorpej 1029 1.12 thorpej 1030 1.12 thorpej /* SIA configuration for 10base2 (from the 21143 manual) */ 1031 1.12 thorpej #define SIACONN_21142_BNC 0x00000009 1032 1.12 thorpej #define SIATXRX_21142_BNC 0x00004705 1033 1.12 thorpej #define SIAGEN_21142_BNC 0x00000006 1034 1.12 thorpej 1035 1.1 thorpej 1036 1.1 thorpej /* 1037 1.1 thorpej * Lite-On 82C168/82C169 registers. 1038 1.1 thorpej */ 1039 1.1 thorpej 1040 1.1 thorpej /* ENDEC General Register */ 1041 1.1 thorpej #define CSR_PNIC_ENDEC 0x78 1042 1.3 thorpej #define PNIC_ENDEC_JDIS 0x00000001 /* jabber disable */ 1043 1.1 thorpej 1044 1.1 thorpej /* SROM Power Register */ 1045 1.1 thorpej #define CSR_PNIC_SROMPWR 0x90 1046 1.3 thorpej #define PNIC_SROMPWR_MRLE 0x00000001 /* Memory-Read-Line enable */ 1047 1.3 thorpej #define PNIC_SROMPWR_CB 0x00000002 /* cache boundary alignment 1048 1.3 thorpej burst type; 1 == burst to 1049 1.3 thorpej boundary, 0 == single-cycle 1050 1.3 thorpej to boundary */ 1051 1.1 thorpej 1052 1.1 thorpej /* SROM Control Register */ 1053 1.1 thorpej #define CSR_PNIC_SROMCTL 0x98 1054 1.3 thorpej #define PNIC_SROMCTL_addr 0x0000003f /* mask of address bits */ 1055 1.3 thorpej /* XXX THESE ARE WRONG ACCORDING TO THE MANUAL! */ 1056 1.1 thorpej #define PNIC_SROMCTL_READ 0x00000600 /* read command */ 1057 1.1 thorpej 1058 1.1 thorpej /* MII Access Register */ 1059 1.1 thorpej #define CSR_PNIC_MII 0xa0 1060 1.1 thorpej #define PNIC_MII_DATA 0x0000ffff /* mask of data bits */ 1061 1.1 thorpej #define PNIC_MII_REG 0x007c0000 /* register mask */ 1062 1.1 thorpej #define PNIC_MII_REGSHIFT 18 1063 1.1 thorpej #define PNIC_MII_PHY 0x0f800000 /* phy mask */ 1064 1.1 thorpej #define PNIC_MII_PHYSHIFT 23 1065 1.1 thorpej #define PNIC_MII_OPCODE 0x30000000 /* opcode mask */ 1066 1.3 thorpej #define PNIC_MII_RESERVED 0x00020000 /* must be one/must be zero; 1067 1.3 thorpej 2 bits are described here */ 1068 1.3 thorpej #define PNIC_MII_MBO 0x40000000 /* must be one */ 1069 1.1 thorpej #define PNIC_MII_BUSY 0x80000000 /* MII is busy */ 1070 1.1 thorpej 1071 1.3 thorpej #define PNIC_MII_WRITE 0x10000000 /* write PHY command */ 1072 1.3 thorpej #define PNIC_MII_READ 0x20000000 /* read PHY command */ 1073 1.1 thorpej 1074 1.1 thorpej /* NWAY Register */ 1075 1.1 thorpej #define CSR_PNIC_NWAY 0xb8 1076 1.3 thorpej #define PNIC_NWAY_RS 0x00000001 /* reset NWay block */ 1077 1.3 thorpej #define PNIC_NWAY_PD 0x00000002 /* power down NWay block */ 1078 1.24 wiz #define PNIC_NWAY_BX 0x00000004 /* bypass transceiver */ 1079 1.3 thorpej #define PNIC_NWAY_LC 0x00000008 /* AUI low current mode */ 1080 1.3 thorpej #define PNIC_NWAY_UV 0x00000010 /* low squelch voltage */ 1081 1.3 thorpej #define PNIC_NWAY_DX 0x00000020 /* disable TP pol. correction */ 1082 1.3 thorpej #define PNIC_NWAY_TW 0x00000040 /* select TP (0 == AUI) */ 1083 1.3 thorpej #define PNIC_NWAY_AF 0x00000080 /* AUI full/half step input 1084 1.3 thorpej voltage */ 1085 1.3 thorpej #define PNIC_NWAY_FD 0x00000100 /* full duplex mode */ 1086 1.3 thorpej #define PNIC_NWAY_DL 0x00000200 /* disable link integrity 1087 1.3 thorpej test */ 1088 1.3 thorpej #define PNIC_NWAY_DM 0x00000400 /* disable AUI/TP autodetect */ 1089 1.3 thorpej #define PNIC_NWAY_100 0x00000800 /* 1 == 100mbps, 0 == 10mbps */ 1090 1.3 thorpej #define PNIC_NWAY_NW 0x00001000 /* enable NWay block */ 1091 1.1 thorpej #define PNIC_NWAY_CAP10T 0x00002000 /* adv. 10baseT */ 1092 1.1 thorpej #define PNIC_NWAY_CAP10TFDX 0x00004000 /* adv. 10baseT-FDX */ 1093 1.1 thorpej #define PNIC_NWAY_CAP100TXFDX 0x00008000 /* adv. 100baseTX-FDX */ 1094 1.1 thorpej #define PNIC_NWAY_CAP100TX 0x00010000 /* adv. 100baseTX */ 1095 1.1 thorpej #define PNIC_NWAY_CAP100T4 0x00020000 /* adv. 100base-T4 */ 1096 1.3 thorpej #define PNIC_NWAY_RN 0x02000000 /* re-negotiate enable */ 1097 1.3 thorpej #define PNIC_NWAY_RF 0x04000000 /* remote fault detected */ 1098 1.1 thorpej #define PNIC_NWAY_LPAR10T 0x08000000 /* link part. 10baseT */ 1099 1.1 thorpej #define PNIC_NWAY_LPAR10TFDX 0x10000000 /* link part. 10baseT-FDX */ 1100 1.1 thorpej #define PNIC_NWAY_LPAR100TXFDX 0x20000000 /* link part. 100baseTX-FDX */ 1101 1.1 thorpej #define PNIC_NWAY_LPAR100TX 0x40000000 /* link part. 100baseTX */ 1102 1.1 thorpej #define PNIC_NWAY_LPAR100T4 0x80000000 /* link part. 100base-T4 */ 1103 1.3 thorpej #define PNIC_NWAY_LPAR_MASK 0xf8000000 1104 1.1 thorpej 1105 1.1 thorpej 1106 1.1 thorpej /* 1107 1.21 castor * Macronix 98713, 98713A, 98715, 98715A, 98715AEC, 98725 and 1108 1.11 thorpej * Lite-On 82C115 registers. 1109 1.1 thorpej */ 1110 1.1 thorpej 1111 1.10 thorpej /* 1112 1.10 thorpej * Note, the MX98713 is very Tulip-like: 1113 1.10 thorpej * 1114 1.10 thorpej * CSR12 General Purpose Port (like 21140) 1115 1.10 thorpej * CSR13 reserved 1116 1.10 thorpej * CSR14 reserved 1117 1.10 thorpej * CSR15 Watchdog Timer (like 21140) 1118 1.10 thorpej * 1119 1.10 thorpej * The Macronix CSR12, CSR13, CSR14, and CSR15 exist only 1120 1.10 thorpej * on the MX98713A and higher. 1121 1.10 thorpej */ 1122 1.10 thorpej 1123 1.1 thorpej /* CSR12 - 10base-T Status Port (similar to SIASTAT) */ 1124 1.12 thorpej /* See SIASTAT 21142/21143 bits */ 1125 1.1 thorpej #define CSR_PMAC_10TSTAT TULIP_CSR12 1126 1.12 thorpej #define PMAC_SIASTAT_MASK (SIASTAT_LS100|SIASTAT_LS10| \ 1127 1.12 thorpej SIASTAT_APS|SIASTAT_TRF|SIASTAT_ANS| \ 1128 1.12 thorpej SIASTAT_LPN|SIASTAT_LPC) 1129 1.1 thorpej 1130 1.1 thorpej 1131 1.1 thorpej /* CSR13 - NWAY Reset Register */ 1132 1.1 thorpej #define CSR_PMAC_NWAYRESET TULIP_CSR13 1133 1.12 thorpej /* See SIACONN 21142/21143 bits */ 1134 1.12 thorpej #define PMAC_SIACONN_MASK (SIACONN_SRL) 1135 1.11 thorpej #define PMAC_NWAYRESET_100TXRESET 0x00000002 /* 100base PMD reset */ 1136 1.1 thorpej 1137 1.1 thorpej 1138 1.1 thorpej /* CSR14 - 10base-T Control Port */ 1139 1.1 thorpej #define CSR_PMAC_10TCTL TULIP_CSR14 1140 1.12 thorpej /* See SIATXRX 21142/21143 bits */ 1141 1.12 thorpej #define PMAC_SIATXRX_MASK (SIATXRX_LBK|SIATXRX_DREN|SIATXRX_TH| \ 1142 1.12 thorpej SIATXRX_ANE|SIATXRX_RSQ|SIATXRX_LTE| \ 1143 1.12 thorpej SIATXRX_THX|SIATXRX_TXF|SIATXRX_T4) 1144 1.1 thorpej 1145 1.1 thorpej 1146 1.11 thorpej /* CSR15 - Watchdog Timer Register */ 1147 1.12 thorpej /* MX98713: see 21140 CSR15 */ 1148 1.12 thorpej /* others: see SIAGEN 21142/21143 bits */ 1149 1.12 thorpej #define PMAC_SIAGEN_MASK (SIAGEN_JBD|SIAGEN_HUJ|SIAGEN_JCK| \ 1150 1.12 thorpej SIAGEN_RWD|SIAGEN_RWR) 1151 1.11 thorpej 1152 1.11 thorpej 1153 1.1 thorpej /* CSR16 - Test Operation Register (a.k.a. Magic Packet Register) */ 1154 1.1 thorpej #define CSR_PMAC_TOR TULIP_CSR16 1155 1.1 thorpej #define PMAC_TOR_98713 0x0F370000 1156 1.1 thorpej #define PMAC_TOR_98715 0x0B3C0000 1157 1.1 thorpej 1158 1.1 thorpej 1159 1.1 thorpej /* CSR20 - NWAY Status */ 1160 1.1 thorpej #define CSR_PMAC_NWAYSTAT TULIP_CSR20 1161 1.11 thorpej /* 1162 1.11 thorpej * Note: the MX98715A manual claims that EQTEST and PCITEST 1163 1.11 thorpej * must be set to 1 by software for normal operation, but 1164 1.11 thorpej * this does not appear to be necessary. This is probably 1165 1.11 thorpej * one of the things that frobbing the Test Operation Register 1166 1.11 thorpej * does. 1167 1.21 castor * 1168 1.21 castor * MX98715AEC uses this register for Auto Compensation. 1169 1.21 castor * CSR20<14> and CSR20<9> are called DS130 and DS120 1170 1.11 thorpej */ 1171 1.21 castor #define PMAC_NWAYSTAT_DS120 0x00000200 /* Auto-compensation circ */ 1172 1.21 castor #define PMAC_NWAYSTAT_DS130 0x00004000 /* Auto-compensation circ */ 1173 1.11 thorpej #define PMAC_NWAYSTAT_EQTEST 0x00001000 /* EQ test */ 1174 1.11 thorpej #define PMAC_NWAYSTAT_PCITEST 0x00010000 /* PCI test */ 1175 1.1 thorpej #define PMAC_NWAYSTAT_10TXH 0x08000000 /* 10t accepted */ 1176 1.1 thorpej #define PMAC_NWAYSTAT_10TXF 0x10000000 /* 10t-fdx accepted */ 1177 1.1 thorpej #define PMAC_NWAYSTAT_100TXH 0x20000000 /* 100tx accepted */ 1178 1.1 thorpej #define PMAC_NWAYSTAT_100TXF 0x40000000 /* 100tx-fdx accepted */ 1179 1.1 thorpej #define PMAC_NWAYSTAT_T4 0x80000000 /* 100t4 accepted */ 1180 1.1 thorpej 1181 1.1 thorpej 1182 1.11 thorpej /* CSR21 - Flow Control Register */ 1183 1.11 thorpej #define CSR_PNICII_FLOWCTL TULIP_CSR21 1184 1.11 thorpej #define PNICII_FLOWCTL_WKFCATEN 0x00000010 /* enable wake-up frame 1185 1.11 thorpej catenation feature */ 1186 1.11 thorpej #define PNICII_FLOWCTL_NFCE 0x00000020 /* accept flow control result 1187 1.11 thorpej from NWay */ 1188 1.11 thorpej #define PNICII_FLOWCTL_FCTH0 0x00000040 /* rx flow control thresh 0 */ 1189 1.11 thorpej #define PNICII_FLOWCTL_FCTH1 0x00000080 /* rx flow control thresh 1 */ 1190 1.11 thorpej #define PNICII_FLOWCTL_REJECTFC 0x00000100 /* abort rx flow control */ 1191 1.11 thorpej #define PNICII_FLOWCTL_STOPTX 0x00000200 /* tx flow stopped */ 1192 1.11 thorpej #define PNICII_FLOWCTL_RUFCEN 0x00000400 /* send flow control when 1193 1.11 thorpej RU interrupt occurs */ 1194 1.11 thorpej #define PNICII_FLOWCTL_RXFCEN 0x00000800 /* rx flow control enable */ 1195 1.11 thorpej #define PNICII_FLOWCTL_TXFCEN 0x00001000 /* tx flow control enable */ 1196 1.11 thorpej #define PNICII_FLOWCTL_RESTOP 0x00002000 /* restop mode */ 1197 1.11 thorpej #define PNICII_FLOWCTL_RESTART 0x00004000 /* restart mode */ 1198 1.11 thorpej #define PNICII_FLOWCTL_TEST 0x00008000 /* test flow control timer */ 1199 1.11 thorpej #define PNICII_FLOWCTL_TMVAL 0xffff0000 /* timer value in flow 1200 1.11 thorpej control frame */ 1201 1.11 thorpej 1202 1.11 thorpej #define PNICII_FLOWCTL_TH_512 (PNICII_FLOWCTL_FCTH0|PNICII_FLOWCTL_FCTH1) 1203 1.11 thorpej #define PNICII_FLOWCTL_TH_256 (PNICII_FLOWCTL_FCTH1) 1204 1.11 thorpej #define PNICII_FLOWCTL_TH_128 (PNICII_FLOWCTL_FCTH0) 1205 1.11 thorpej #define PNICII_FLOWCTL_TH_OVFLW (0) 1206 1.11 thorpej 1207 1.11 thorpej 1208 1.11 thorpej /* CSR22 - MAC ID Byte 3-0 Register */ 1209 1.11 thorpej #define CSR_PNICII_MACID0 TULIP_CSR22 1210 1.11 thorpej #define PNICII_MACID_1 0 /* shift */ 1211 1.11 thorpej #define PNICII_MACID_0 8 /* shift */ 1212 1.11 thorpej #define PNICII_MACID_3 16 /* shift */ 1213 1.11 thorpej #define PNICII_MACID_2 24 /* shift */ 1214 1.11 thorpej 1215 1.11 thorpej 1216 1.11 thorpej /* CSR23 - Magic ID Byte 5,4/MACID Byte 5,4 Register */ 1217 1.11 thorpej #define PNICII_MACID_5 0 /* shift */ 1218 1.11 thorpej #define PNICII_MACID_4 8 /* shift */ 1219 1.11 thorpej #define PNICII_MAGID_5 16 /* shift */ 1220 1.11 thorpej #define PNICII_MAGIC_4 24 /* shift */ 1221 1.11 thorpej 1222 1.11 thorpej 1223 1.11 thorpej /* CSR24 - Magic ID Byte 3-0 Register */ 1224 1.11 thorpej #define PNICII_MAGID_1 0 /* shift */ 1225 1.11 thorpej #define PNICII_MAGID_0 8 /* shift */ 1226 1.11 thorpej #define PNICII_MAGID_3 16 /* shift */ 1227 1.11 thorpej #define PNICII_MAGID_2 24 /* shift */ 1228 1.11 thorpej 1229 1.11 thorpej 1230 1.11 thorpej /* CSR25 - CSR28 - Filter Byte Mask Registers */ 1231 1.11 thorpej #define CSR_PNICII_MASK0 TULIP_CSR25 1232 1.11 thorpej 1233 1.11 thorpej #define CSR_PNICII_MASK1 TULIP_CSR26 1234 1.11 thorpej 1235 1.11 thorpej #define CSR_PNICII_MASK2 TULIP_CSR27 1236 1.11 thorpej 1237 1.11 thorpej #define CSR_PNICII_MASK3 TULIP_CSR28 1238 1.11 thorpej 1239 1.11 thorpej 1240 1.11 thorpej /* CSR29 - Filter Offset Register */ 1241 1.11 thorpej #define CSR_PNICII_FILOFF TULIP_CSR29 1242 1.11 thorpej #define PNICII_FILOFF_PAT0 0x0000007f /* pattern 0 offset */ 1243 1.11 thorpej #define PNICII_FILOFF_EN0 0x00000080 /* enable pattern 0 */ 1244 1.11 thorpej #define PNICII_FILOFF_PAT1 0x00007f00 /* pattern 1 offset */ 1245 1.11 thorpej #define PNICII_FILOFF_EN1 0x00008000 /* enable pattern 1 */ 1246 1.11 thorpej #define PNICII_FILOFF_PAT2 0x007f0000 /* pattern 2 offset */ 1247 1.11 thorpej #define PNICII_FILOFF_EN2 0x00800000 /* enable pattern 2 */ 1248 1.11 thorpej #define PNICII_FILOFF_PAT3 0x7f000000 /* pattern 3 offset */ 1249 1.11 thorpej #define PNICII_FILOFF_EN3 0x80000000 /* enable pattern 3 */ 1250 1.11 thorpej 1251 1.11 thorpej 1252 1.11 thorpej /* CSR30 - Filter 1 and 0 CRC-16 Register */ 1253 1.11 thorpej #define CSR_PNICII_FIL01 TULIP_CSR30 1254 1.11 thorpej #define PNICII_FIL01_CRC0 0x0000ffff /* CRC-16 of pattern 0 */ 1255 1.11 thorpej #define PNICII_FIL01_CRC1 0xffff0000 /* CRC-16 of pattern 1 */ 1256 1.11 thorpej 1257 1.11 thorpej 1258 1.11 thorpej /* CSR31 = Filter 3 and 2 CRC-16 Register */ 1259 1.11 thorpej #define CSR_PNICII_FIL23 TULIP_CSR31 1260 1.11 thorpej #define PNICII_FIL23_CRC2 0x0000ffff /* CRC-16 of pattern 2 */ 1261 1.11 thorpej #define PNICII_FIL23_CRC3 0xffff0000 /* CRC-16 of pattern 3 */ 1262 1.11 thorpej 1263 1.11 thorpej 1264 1.1 thorpej /* 1265 1.1 thorpej * Winbond 89C840F registers. 1266 1.1 thorpej */ 1267 1.1 thorpej 1268 1.1 thorpej /* CSR12 - Current Receive Descriptor Register */ 1269 1.2 thorpej #define CSR_WINB_CRDAR TULIP_CSR12 1270 1.1 thorpej 1271 1.1 thorpej 1272 1.1 thorpej /* CSR13 - Current Receive Buffer Register */ 1273 1.2 thorpej #define CSR_WINB_CCRBAR TULIP_CSR13 1274 1.1 thorpej 1275 1.1 thorpej 1276 1.1 thorpej /* CSR14 - Multicast Address Register 0 */ 1277 1.2 thorpej #define CSR_WINB_CMA0 TULIP_CSR14 1278 1.1 thorpej 1279 1.1 thorpej 1280 1.1 thorpej /* CSR15 - Multicast Address Register 1 */ 1281 1.2 thorpej #define CSR_WINB_CMA1 TULIP_CSR15 1282 1.1 thorpej 1283 1.1 thorpej 1284 1.2 thorpej /* CSR16 - Physical Address Register 0 */ 1285 1.2 thorpej #define CSR_WINB_CPA0 TULIP_CSR16 1286 1.1 thorpej 1287 1.1 thorpej 1288 1.2 thorpej /* CSR17 - Physical Address Register 1 */ 1289 1.2 thorpej #define CSR_WINB_CPA1 TULIP_CSR17 1290 1.1 thorpej 1291 1.1 thorpej 1292 1.1 thorpej /* CSR18 - Boot ROM Size Register */ 1293 1.2 thorpej #define CSR_WINB_CBRCR TULIP_CSR18 1294 1.2 thorpej #define WINB_CBRCR_NONE 0x00000000 /* no boot rom */ 1295 1.2 thorpej /* 0x00000001 also no boot rom */ 1296 1.2 thorpej #define WINB_CBRCR_8K 0x00000002 /* 8k */ 1297 1.2 thorpej #define WINB_CBRCR_16K 0x00000003 /* 16k */ 1298 1.2 thorpej #define WINB_CBRCR_32K 0x00000004 /* 32k */ 1299 1.2 thorpej #define WINB_CBRCR_64K 0x00000005 /* 64k */ 1300 1.2 thorpej #define WINB_CBRCR_128K 0x00000006 /* 128k */ 1301 1.2 thorpej #define WINB_CBRCR_256K 0x00000007 1302 1.1 thorpej 1303 1.1 thorpej 1304 1.1 thorpej /* CSR19 - Current Transmit Descriptor Register */ 1305 1.2 thorpej #define CSR_WINB_CTDAR TULIP_CSR19 1306 1.1 thorpej 1307 1.1 thorpej 1308 1.1 thorpej /* CSR20 - Current Transmit Buffer Register */ 1309 1.2 thorpej #define CSR_WINB_CTBAR TULIP_CSR20 1310 1.10 thorpej 1311 1.10 thorpej 1312 1.10 thorpej /* 1313 1.10 thorpej * ADMtek AL981 registers 1314 1.10 thorpej * 1315 1.10 thorpej * We define these as strict byte offsets into PCI space, since 1316 1.10 thorpej * not all of them have consistent access rules. 1317 1.10 thorpej */ 1318 1.10 thorpej 1319 1.10 thorpej /* CSR13 - Wake-up Control/Status Register */ 1320 1.10 thorpej #define CSR_ADM_WCSR 0x68 1321 1.10 thorpej #define ADM_WCSR_LSC 0x00000001 /* link status changed */ 1322 1.10 thorpej #define ADM_WCSR_MPR 0x00000002 /* magic packet received */ 1323 1.10 thorpej #define ADM_WCSR_WFR 0x00000004 /* wake up frame received */ 1324 1.10 thorpej #define ADM_WCSR_LSCE 0x00000100 /* link status changed en. */ 1325 1.10 thorpej #define ADM_WCSR_MPRE 0x00000200 /* magic packet receive en. */ 1326 1.10 thorpej #define ADM_WCSR_WFRE 0x00000400 /* wake up frame receive en. */ 1327 1.10 thorpej #define ADM_WCSR_LINKON 0x00010000 /* link-on detect en. */ 1328 1.10 thorpej #define ADM_WCSR_LINKOFF 0x00020000 /* link-off detect en. */ 1329 1.10 thorpej #define ADM_WCSR_WP5E 0x02000000 /* wake up pat. 5 en. */ 1330 1.10 thorpej #define ADM_WCSR_WP4E 0x04000000 /* wake up pat. 4 en. */ 1331 1.10 thorpej #define ADM_WCSR_WP3E 0x08000000 /* wake up pat. 3 en. */ 1332 1.10 thorpej #define ADM_WCSR_WP2E 0x10000000 /* wake up pat. 2 en. */ 1333 1.10 thorpej #define ADM_WCSR_WP1E 0x20000000 /* wake up pat. 1 en. */ 1334 1.10 thorpej #define ADM_WCSR_CRCT 0x40000000 /* CRC-16 type: 1335 1.10 thorpej 0 == 0000 initial 1336 1.10 thorpej 1 == ffff initial */ 1337 1.10 thorpej 1338 1.10 thorpej 1339 1.10 thorpej /* CSR14 - Wake-up Pattern Data Register */ 1340 1.10 thorpej #define CSR_ADM_WPDR 0x70 1341 1.10 thorpej 1342 1.10 thorpej /* 1343 1.10 thorpej * 25 consecutive longword writes are issued to WPDR to 1344 1.10 thorpej * program the wake-up pattern filter. The data written 1345 1.10 thorpej * is as follows: 1346 1.10 thorpej * 1347 1.10 thorpej * XXX 1348 1.10 thorpej */ 1349 1.10 thorpej 1350 1.10 thorpej 1351 1.10 thorpej /* CSR15 - see 21140 CSR15 (Watchdog Timer) */ 1352 1.10 thorpej 1353 1.10 thorpej 1354 1.10 thorpej /* CSR16 - Assistant CSR5 (Status Register 2) */ 1355 1.10 thorpej #define CSR_ADM_ASR 0x80 1356 1.10 thorpej /* 0 - 14: same as CSR5 */ 1357 1.10 thorpej #define ADM_ASR_AAISS 0x00080000 /* added abnormal int. sum. */ 1358 1.10 thorpej #define ADM_ASR_ANISS 0x00010000 /* added normal int. sum. */ 1359 1.10 thorpej /* XXX Receive state */ 1360 1.10 thorpej /* XXX Transmit state */ 1361 1.10 thorpej #define ADM_ASR_BET 0x03800000 /* bus error type */ 1362 1.10 thorpej #define ADM_ASR_BET_PERR 0x00000000 /* parity error */ 1363 1.10 thorpej #define ADM_ASR_BET_MABT 0x00800000 /* master abort */ 1364 1.10 thorpej #define ADM_ASR_BET_TABT 0x01000000 /* target abort */ 1365 1.10 thorpej #define ADM_ASR_PFR 0x04000000 /* PAUSE frame received */ 1366 1.10 thorpej #define ADM_ASR_TDIS 0x10000000 /* transmit def. int. status */ 1367 1.10 thorpej #define ADM_ASR_XIS 0x20000000 /* xcvr int. status */ 1368 1.10 thorpej #define ADM_ASR_REIS 0x40000000 /* receive early int. status */ 1369 1.10 thorpej #define ADM_ASR_TEIS 0x80000000 /* transmit early int. status */ 1370 1.10 thorpej 1371 1.10 thorpej 1372 1.10 thorpej /* CSR17 - Assistant CSR7 (Interrupt Enable Register 2) */ 1373 1.10 thorpej #define CSR_ADM_AIE 0x84 1374 1.10 thorpej /* See CSR16 for valid bits */ 1375 1.10 thorpej 1376 1.10 thorpej 1377 1.10 thorpej /* CSR18 - Command Register */ 1378 1.10 thorpej #define CSR_ADM_CR 0x88 1379 1.10 thorpej #define ADM_CR_ATUR 0x00000001 /* auto. tx underrun recover */ 1380 1.10 thorpej #define ADM_CR_SINT 0x00000002 /* software interrupt */ 1381 1.25 wiz #define ADM_CR_DRT 0x0000000c /* drain receive threshold */ 1382 1.10 thorpej #define ADM_CR_DRT_8LW 0x00000000 /* 8 longwords */ 1383 1.10 thorpej #define ADM_CR_DRT_16LW 0x00000004 /* 16 longwords */ 1384 1.10 thorpej #define ADM_CR_DRT_SF 0x00000008 /* store-and-forward */ 1385 1.10 thorpej #define ADM_CR_RTE 0x00000010 /* receive threshold enable */ 1386 1.10 thorpej #define ADM_CR_PAUSE 0x00000020 /* enable PAUSE function */ 1387 1.10 thorpej #define ADM_CR_RWP 0x00000040 /* reset wake-up pattern 1388 1.10 thorpej data register pointer */ 1389 1.10 thorpej /* 16 - 31 are automatically recalled from the EEPROM */ 1390 1.10 thorpej #define ADM_CR_WOL 0x00040000 /* wake-on-lan enable */ 1391 1.10 thorpej #define ADM_CR_PM 0x00080000 /* power management enable */ 1392 1.10 thorpej #define ADM_CR_RFS 0x00600000 /* Receive FIFO size */ 1393 1.10 thorpej #define ADM_CR_RFS_1K 0x00600000 /* 1K FIFO */ 1394 1.10 thorpej #define ADM_CR_RFS_2K 0x00400000 /* 2K FIFO */ 1395 1.10 thorpej #define ADM_CR_LEDMODE 0x00800000 /* LED mode */ 1396 1.10 thorpej #define ADM_CR_AUXCL 0x30000000 /* aux current load */ 1397 1.10 thorpej #define ADM_CR_D3CS 0x80000000 /* D3 cold wake up enable */ 1398 1.10 thorpej 1399 1.10 thorpej 1400 1.10 thorpej /* CSR19 - PCI bus performance counter */ 1401 1.10 thorpej #define CSR_ADM_PCIC 0x8c 1402 1.10 thorpej #define ADM_PCIC_DWCNT 0x000000ff /* double-word count of 1403 1.10 thorpej last bus-master 1404 1.10 thorpej transaction */ 1405 1.10 thorpej #define ADM_PCIC_CLKCNT 0xffff0000 /* number of PCI clocks 1406 1.10 thorpej between read request 1407 1.10 thorpej and access completed */ 1408 1.10 thorpej 1409 1.10 thorpej /* CSR20 - Power Management Control/Status Register */ 1410 1.10 thorpej #define CSR_ADM_PMCSR 0x90 1411 1.10 thorpej /* 1412 1.10 thorpej * This register is also mapped into the PCI configuration 1413 1.10 thorpej * space as the PMCSR. 1414 1.10 thorpej */ 1415 1.10 thorpej 1416 1.10 thorpej 1417 1.10 thorpej /* CSR23 - Transmit Burst Count/Time Out Register */ 1418 1.10 thorpej #define CSR_ADM_TXBR 0x9c 1419 1.11 thorpej #define ADM_TXBR_TTO 0x00000fff /* transmit timeout */ 1420 1.11 thorpej #define ADM_TXBR_TBCNT 0x001f0000 /* transmit burst count */ 1421 1.10 thorpej 1422 1.10 thorpej 1423 1.10 thorpej /* CSR24 - Flash ROM Port Register */ 1424 1.10 thorpej #define CSR_ADM_FROM 0xa0 1425 1.11 thorpej #define ADM_FROM_DATA 0x000000ff /* data to/from Flash */ 1426 1.11 thorpej #define ADM_FROM_ADDR 0x01ffff00 /* Flash address */ 1427 1.11 thorpej #define ADM_FROM_ADDR_SHIFT 8 1428 1.11 thorpej #define ADM_FROM_WEN 0x04000000 /* write enable */ 1429 1.11 thorpej #define ADM_FROM_REN 0x08000000 /* read enable */ 1430 1.11 thorpej #define ADM_FROM_bra16on 0x80000000 /* pin 87 is brA16, else 1431 1.11 thorpej pin 87 is fd/col LED pin */ 1432 1.10 thorpej 1433 1.10 thorpej 1434 1.10 thorpej /* CSR25 - Physical Address Register 0 */ 1435 1.10 thorpej #define CSR_ADM_PAR0 0xa4 1436 1.10 thorpej 1437 1.10 thorpej 1438 1.10 thorpej /* CSR26 - Physical Address Register 1 */ 1439 1.10 thorpej #define CSR_ADM_PAR1 0xa8 1440 1.10 thorpej 1441 1.10 thorpej 1442 1.10 thorpej /* CSR27 - Multicast Address Register 0 */ 1443 1.10 thorpej #define CSR_ADM_MAR0 0xac 1444 1.10 thorpej 1445 1.10 thorpej 1446 1.10 thorpej /* CSR28 - Multicast Address Register 1 */ 1447 1.10 thorpej #define CSR_ADM_MAR1 0xb0 1448 1.10 thorpej 1449 1.10 thorpej 1450 1.10 thorpej /* Internal PHY registers are mapped here (lower 16 bits valid) */ 1451 1.10 thorpej 1452 1.10 thorpej #define CSR_ADM_BMCR 0xb4 1453 1.10 thorpej #define CSR_ADM_BMSR 0xb8 1454 1.10 thorpej #define CSR_ADM_PHYIDR1 0xbc 1455 1.10 thorpej #define CSR_ADM_PHYIDR2 0xc0 1456 1.10 thorpej #define CSR_ADM_ANAR 0xc4 1457 1.10 thorpej #define CSR_ADM_ANLPAR 0xc8 1458 1.10 thorpej #define CSR_ADM_ANER 0xcc 1459 1.10 thorpej 1460 1.10 thorpej /* XCVR Mode Control Register */ 1461 1.10 thorpej #define CSR_ADM_XMC 0xd0 1462 1.11 thorpej #define ADM_XMC_LD 0x00000800 /* long distance mode 1463 1.11 thorpej (low squelch enable) */ 1464 1.11 thorpej 1465 1.10 thorpej 1466 1.10 thorpej /* XCVR Configuration Information and Interrupt Status Register */ 1467 1.10 thorpej #define CSR_ADM_XCIIS 0xd4 1468 1.11 thorpej #define ADM_XCIIS_REF 0x0001 /* 64 error packets received */ 1469 1.11 thorpej #define ADM_XCIIS_ANPR 0x0002 /* autoneg page received */ 1470 1.11 thorpej #define ADM_XCIIS_PDF 0x0004 /* parallel detection fault */ 1471 1.11 thorpej #define ADM_XCIIS_ANAR 0x0008 /* autoneg ACK */ 1472 1.11 thorpej #define ADM_XCIIS_LS 0x0010 /* link status (1 == fail) */ 1473 1.11 thorpej #define ADM_XCIIS_RFD 0x0020 /* remote fault */ 1474 1.11 thorpej #define ADM_XCIIS_ANC 0x0040 /* autoneg completed */ 1475 1.11 thorpej #define ADM_XCIIS_PAUSE 0x0080 /* PAUSE enabled */ 1476 1.11 thorpej #define ADM_XCIIS_DUPLEX 0x0100 /* full duplex */ 1477 1.11 thorpej #define ADM_XCIIS_SPEED 0x0200 /* 100Mb/s */ 1478 1.11 thorpej 1479 1.10 thorpej 1480 1.10 thorpej /* XCVR Interrupt Enable Register */ 1481 1.10 thorpej #define CSR_ADM_XIE 0xd8 1482 1.11 thorpej /* Bits are as for XCIIS */ 1483 1.11 thorpej 1484 1.10 thorpej 1485 1.10 thorpej /* XCVR 100baseTX PHY Control/Status Register */ 1486 1.10 thorpej #define CSR_ADM_100CTR 0xdc 1487 1.11 thorpej #define ADM_100CTR_DISCRM 0x0001 /* disable scrambler */ 1488 1.11 thorpej #define ADM_100CTR_DISMLT 0x0002 /* disable MLT3 ENDEC */ 1489 1.11 thorpej #define ADM_100CTR_CMODE 0x001c /* current operating mode */ 1490 1.11 thorpej #define ADM_100CTR_CMODE_AUTO 0x0000 /* in autoneg */ 1491 1.11 thorpej #define ADM_100CTR_CMODE_10 0x0004 /* 10baseT */ 1492 1.11 thorpej #define ADM_100CTR_CMODE_100 0x0008 /* 100baseTX */ 1493 1.11 thorpej /* 0x000c reserved */ 1494 1.11 thorpej /* 0x0010 reserved */ 1495 1.11 thorpej #define ADM_100CTR_CMODE_10FD 0x0014 /* 10baseT-FDX */ 1496 1.11 thorpej #define ADM_100CTR_CMODE_100FD 0x0018 /* 100baseTX-FDX */ 1497 1.11 thorpej #define ADM_100CTR_CMODE_ISO 0x001c /* isolated */ 1498 1.11 thorpej #define ADM_100CTR_ISOTX 0x0020 /* transmit isolation */ 1499 1.11 thorpej #define ADM_100CTR_ENRZI 0x0080 /* enable NRZ <> NRZI conv. */ 1500 1.11 thorpej #define ADM_100CTR_ENDCR 0x0100 /* enable DC restoration */ 1501 1.11 thorpej #define ADM_100CTR_ENRLB 0x0200 /* enable remote loopback */ 1502 1.11 thorpej #define ADM_100CTR_RXVPP 0x0800 /* peak Rx voltage: 1503 1.11 thorpej 0 == 1.0 VPP 1504 1.11 thorpej 1 == 1.4 VPP */ 1505 1.11 thorpej #define ADM_100CTR_ANC 0x1000 /* autoneg completed */ 1506 1.11 thorpej #define ADM_100CTR_DISRER 0x2000 /* disable Rx error counter */ 1507 1.23 thorpej 1508 1.23 thorpej /* Operation Mode Register (AN983) */ 1509 1.23 thorpej #define CSR_ADM983_OPMODE 0xfc 1510 1.23 thorpej #define ADM983_OPMODE_SPEED 0x80000000 /* 1 == 100, 0 == 10 */ 1511 1.23 thorpej #define ADM983_OPMODE_FD 0x40000000 /* 1 == fd, 0 == hd */ 1512 1.23 thorpej #define ADM983_OPMODE_LINK 0x20000000 /* 1 == link, 0 == no link */ 1513 1.23 thorpej #define ADM983_OPMODE_EERLOD 0x04000000 /* reload from EEPROM */ 1514 1.23 thorpej #define ADM983_OPMODE_SingleChip 0x00000007 /* single-chip mode */ 1515 1.23 thorpej #define ADM983_OPMODE_MacOnly 0x00000004 /* MAC-only mode */ 1516 1.18 thorpej 1517 1.18 thorpej /* 1518 1.18 thorpej * Xircom X3201-3 registers 1519 1.18 thorpej */ 1520 1.18 thorpej 1521 1.18 thorpej /* Power Management Register */ 1522 1.18 thorpej #define CSR_X3201_PMR TULIP_CSR16 1523 1.18 thorpej #define X3201_PMR_EDINT 0x0000000f /* energy detect interval */ 1524 1.18 thorpej #define X3201_PMR_EDEN 0x00000100 /* energy detect enable */ 1525 1.18 thorpej #define X3201_PMR_MPEN 0x00000200 /* magic packet enable */ 1526 1.18 thorpej #define X3201_PMR_WOLEN 0x00000400 /* Wake On Lan enable */ 1527 1.18 thorpej #define X3201_PMR_PMGP0EN 0x00001000 /* GP0 change enable */ 1528 1.18 thorpej #define X3201_PMR_PMLCEN 0x00002000 /* link change enable */ 1529 1.18 thorpej #define X3201_PMR_WOLTMEN 0x00008000 /* WOL template mem enable */ 1530 1.18 thorpej #define X3201_PMR_EP 0x00010000 /* energy present */ 1531 1.18 thorpej #define X3201_PMR_LP 0x00200000 /* link present */ 1532 1.18 thorpej #define X3201_PMR_EDES 0x01000000 /* ED event status */ 1533 1.18 thorpej #define X3201_PMR_MPES 0x02000000 /* MP event status */ 1534 1.18 thorpej #define X3201_PMR_WOLES 0x04000000 /* WOL event status */ 1535 1.18 thorpej #define X3201_PMR_WOLPS 0x08000000 /* WOL process status */ 1536 1.18 thorpej #define X3201_PMR_GP0ES 0x10000000 /* GP0 event status */ 1537 1.18 thorpej #define X3201_PMR_LCES 0x20000000 /* LC event status */ 1538 1.20 thorpej 1539 1.20 thorpej /* 1540 1.20 thorpej * Davicom DM9102 registers. 1541 1.20 thorpej */ 1542 1.20 thorpej 1543 1.20 thorpej /* PHY Status Register */ 1544 1.20 thorpej #define CSR_DM_PHYSTAT TULIP_CSR12 1545 1.20 thorpej #define DM_PHYSTAT_10 0x00000001 /* 10Mb/s */ 1546 1.20 thorpej #define DM_PHYSTAT_100 0x00000002 /* 100Mb/s */ 1547 1.20 thorpej #define DM_PHYSTAT_FDX 0x00000004 /* full-duplex */ 1548 1.20 thorpej #define DM_PHYSTAT_LINK 0x00000008 /* link up */ 1549 1.20 thorpej #define DM_PHYSTAT_RXLOCK 0x00000010 /* RX-lock */ 1550 1.20 thorpej #define DM_PHYSTAT_SIGNAL 0x00000020 /* signal detection */ 1551 1.20 thorpej #define DM_PHYSTAT_UTPSIG 0x00000040 /* UTP SIG */ 1552 1.20 thorpej #define DM_PHYSTAT_GPED 0x00000080 /* general PHY reset control */ 1553 1.20 thorpej #define DM_PHYSTAT_GEPC 0x00000100 /* GPED bits control */ 1554 1.20 thorpej 1555 1.20 thorpej 1556 1.20 thorpej /* Sample Frame Access Register */ 1557 1.20 thorpej #define CSR_DM_SFAR TULIP_CSR13 1558 1.20 thorpej 1559 1.20 thorpej 1560 1.20 thorpej /* Sample Frame Data Register */ 1561 1.20 thorpej #define CSR_DM_SFDR TULIP_CSR14 1562 1.20 thorpej /* See 21143 SIAGEN register */ 1563 1.1 thorpej 1564 1.31 rpaulo /* 1565 1.31 rpaulo * ASIX AX88140A and AX88141 registers. 1566 1.31 rpaulo */ 1567 1.31 rpaulo 1568 1.31 rpaulo /* CSR13 - Filtering Index */ 1569 1.31 rpaulo #define CSR_AX_FILTIDX TULIP_CSR13 1570 1.31 rpaulo 1571 1.31 rpaulo /* CSR14 - Filtering data */ 1572 1.31 rpaulo #define CSR_AX_FILTDATA TULIP_CSR14 1573 1.31 rpaulo 1574 1.31 rpaulo /* Filtering Index values */ 1575 1.31 rpaulo #define AX_FILTIDX_PAR0 0x00000000 1576 1.31 rpaulo #define AX_FILTIDX_PAR1 0x00000001 1577 1.31 rpaulo #define AX_FILTIDX_MAR0 0x00000002 1578 1.31 rpaulo #define AX_FILTIDX_MAR1 0x00000003 1579 1.31 rpaulo 1580 1.1 thorpej #endif /* _DEV_IC_TULIPREG_H_ */ 1581