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