1 1.31 itohy /* $NetBSD: elink3reg.h,v 1.31 2006/11/05 05:57:53 itohy Exp $ */ 2 1.1 thorpej 3 1.1 thorpej /* 4 1.3 thorpej * Copyright (c) 1995 Herb Peyerl <hpeyerl (at) beer.org> 5 1.1 thorpej * All rights reserved. 6 1.1 thorpej * 7 1.1 thorpej * Redistribution and use in source and binary forms, with or without 8 1.1 thorpej * modification, are permitted provided that the following conditions 9 1.1 thorpej * are met: 10 1.1 thorpej * 1. Redistributions of source code must retain the above copyright 11 1.1 thorpej * notice, this list of conditions and the following disclaimer. 12 1.1 thorpej * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 thorpej * notice, this list of conditions and the following disclaimer in the 14 1.1 thorpej * documentation and/or other materials provided with the distribution. 15 1.1 thorpej * 3. All advertising materials mentioning features or use of this software 16 1.1 thorpej * must display the following acknowledgement: 17 1.1 thorpej * This product includes software developed by Herb Peyerl. 18 1.1 thorpej * 4. The name of Herb Peyerl may not be used to endorse or promote products 19 1.1 thorpej * derived from this software without specific prior written permission. 20 1.1 thorpej * 21 1.1 thorpej * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 22 1.1 thorpej * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 23 1.1 thorpej * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 24 1.1 thorpej * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 25 1.1 thorpej * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 26 1.1 thorpej * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 1.1 thorpej * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 1.1 thorpej * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 1.1 thorpej * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 30 1.1 thorpej * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 1.1 thorpej * 32 1.1 thorpej */ 33 1.1 thorpej 34 1.1 thorpej /* 35 1.1 thorpej * These define the EEPROM data structure. They are used in the probe 36 1.26 wiz * function to verify the existence of the adapter after having sent 37 1.1 thorpej * the ID_Sequence. 38 1.1 thorpej */ 39 1.1 thorpej #define EEPROM_NODE_ADDR_0 0x0 /* Word */ 40 1.1 thorpej #define EEPROM_NODE_ADDR_1 0x1 /* Word */ 41 1.1 thorpej #define EEPROM_NODE_ADDR_2 0x2 /* Word */ 42 1.1 thorpej #define EEPROM_PROD_ID 0x3 /* 0x9[0-f]50 */ 43 1.19 fvdl #define EEPROM_MFG_DATE 0x4 /* Manufacturing date */ 44 1.19 fvdl #define EEPROM_MFG_DIVSION 0x5 /* Manufacturing division */ 45 1.19 fvdl #define EEPROM_MFG_PRODUCT 0x6 /* Product code */ 46 1.1 thorpej #define EEPROM_MFG_ID 0x7 /* 0x6d50 */ 47 1.1 thorpej #define EEPROM_ADDR_CFG 0x8 /* Base addr */ 48 1.1 thorpej #define EEPROM_RESOURCE_CFG 0x9 /* IRQ. Bits 12-15 */ 49 1.19 fvdl #define EEPROM_OEM_ADDR0 0xa 50 1.19 fvdl #define EEPROM_OEM_ADDR1 0xb 51 1.19 fvdl #define EEPROM_OEM_ADDR2 0xc 52 1.19 fvdl #define EEPROM_SOFTINFO 0xd 53 1.19 fvdl #define EEPROM_COMPAT 0xe 54 1.19 fvdl #define EEPROM_SOFTINFO2 0xf 55 1.19 fvdl #define EEPROM_CAP 0x10 56 1.19 fvdl #define EEPROM_CONFIG_LOW 0x12 57 1.19 fvdl #define EEPROM_CONFIG_HIGH 0x13 58 1.20 jonathan #define EEPROM_SSI 0x14 59 1.19 fvdl #define EEPROM_CHECKSUM_EL3 0x17 60 1.1 thorpej 61 1.1 thorpej /* 62 1.1 thorpej * These are the registers for the 3Com 3c509 and their bit patterns when 63 1.22 soren * applicable. They have been taken out of the "EtherLink III Parallel 64 1.1 thorpej * Tasking EISA and ISA Technical Reference" "Beta Draft 10/30/92" manual 65 1.1 thorpej * from 3com. 66 1.1 thorpej */ 67 1.19 fvdl #define ELINK_COMMAND 0x0e /* Write. BASE+0x0e is always a command reg. */ 68 1.19 fvdl #define ELINK_STATUS 0x0e /* Read. BASE+0x0e is always status reg. */ 69 1.19 fvdl #define ELINK_WINDOW 0x0f /* Read. BASE+0x0f is always window reg. */ 70 1.1 thorpej 71 1.1 thorpej /* 72 1.23 thorpej * Corkscrew ISA Bridge ASIC registers. 73 1.23 thorpej */ 74 1.23 thorpej #define CORK_ASIC_DCR 0x2000 75 1.23 thorpej #define CORK_ASIC_RCR 0x2002 76 1.23 thorpej #define CORK_ASIC_ROM_PAGE 0x2004 /* 8-bit */ 77 1.23 thorpej #define CORK_ASIC_MCR 0x2006 /* 8-bit */ 78 1.23 thorpej #define CORK_ASIC_DEBUG 0x2008 /* 8-bit */ 79 1.23 thorpej #define CORK_ASIC_EEPROM_COMMAND 0x200a 80 1.23 thorpej #define CORK_ASIC_EEPROM_DATA 0x200c 81 1.23 thorpej 82 1.23 thorpej /* 83 1.23 thorpej * Corkscrew DMA Control Register. 84 1.23 thorpej */ 85 1.23 thorpej #define DCR_CHRDYWAIT_40ns (0 << 13) 86 1.23 thorpej #define DCR_CHRDYWAIT_80ns (1 << 13) 87 1.23 thorpej #define DCR_CHRDYWAIT_120ns (2 << 13) 88 1.23 thorpej #define DCR_CHRDYWAIT_160ns (3 << 13) 89 1.23 thorpej #define DCR_RECOVWAIT_80ns (0 << 11) 90 1.23 thorpej #define DCR_RECOVWAIT_120ns (1 << 11) 91 1.23 thorpej #define DCR_RECOVWAIT_160ns (2 << 11) 92 1.23 thorpej #define DCR_RECOVWAIT_200ns (3 << 11) 93 1.23 thorpej #define DCR_CMDWIDTH(x) ((x) << 8) /* base 40ns, 40ns increments */ 94 1.23 thorpej #define DCR_BURSTLEN(x) ((x) << 3) 95 1.23 thorpej #define DCR_DRQSELECT(x) ((x) << 0) /* 3, 5, 6, 7 valid */ 96 1.23 thorpej 97 1.23 thorpej /* 98 1.23 thorpej * Corkscrew Debug register. 99 1.23 thorpej */ 100 1.23 thorpej #define DEBUG_PCIBUSFAULT (1U << 0) 101 1.23 thorpej #define DEBUG_ISABUSFAULT (1U << 1) 102 1.23 thorpej 103 1.23 thorpej /* 104 1.23 thorpej * Corkscrew EEPROM Command register. 105 1.23 thorpej */ 106 1.23 thorpej #define CORK_EEPROM_BUSY (1U << 9) 107 1.23 thorpej #define CORK_EEPROM_CMD_READ (1U << 7) /* Same as 3c509 */ 108 1.23 thorpej 109 1.23 thorpej /* 110 1.23 thorpej * Corkscrew Master Control register. 111 1.23 thorpej */ 112 1.23 thorpej #define MCR_PCI_CONFIG (1U << 0) 113 1.23 thorpej #define MCR_WRITE_BUFFER (1U << 1) 114 1.23 thorpej #define MCR_READ_PREFETCH (1U << 2) 115 1.23 thorpej 116 1.23 thorpej /* 117 1.1 thorpej * Window 0 registers. Setup. 118 1.1 thorpej */ 119 1.1 thorpej /* Write */ 120 1.19 fvdl #define ELINK_W0_EEPROM_DATA 0x0c 121 1.19 fvdl #define ELINK_W0_EEPROM_COMMAND 0x0a 122 1.19 fvdl #define ELINK_W0_RESOURCE_CFG 0x08 123 1.19 fvdl #define ELINK_W0_ADDRESS_CFG 0x06 124 1.19 fvdl #define ELINK_W0_CONFIG_CTRL 0x04 125 1.1 thorpej /* Read */ 126 1.19 fvdl #define ELINK_W0_PRODUCT_ID 0x02 127 1.19 fvdl #define ELINK_W0_MFG_ID 0x00 128 1.1 thorpej 129 1.1 thorpej /* 130 1.1 thorpej * Window 1 registers. Operating Set. 131 1.1 thorpej */ 132 1.1 thorpej /* Write */ 133 1.19 fvdl #define ELINK_W1_TX_PIO_WR_2 0x02 134 1.19 fvdl #define ELINK_W1_TX_PIO_WR_1 0x00 135 1.1 thorpej /* Read */ 136 1.23 thorpej #define ELINK_W1_FREE_TX 0x0c 137 1.27 mycroft #define ELINK_W1_TX_STATUS 0x0a 138 1.23 thorpej #define ELINK_W1_RX_STATUS 0x08 139 1.23 thorpej #define ELINK_W1_RX_ERRORS 0x04 140 1.19 fvdl #define ELINK_W1_RX_PIO_RD_2 0x02 141 1.19 fvdl #define ELINK_W1_RX_PIO_RD_1 0x00 142 1.15 thorpej /* 143 1.15 thorpej * Special registers used by the RoadRunner. These are used to program 144 1.15 thorpej * a FIFO buffer to reduce the PCMCIA->PCI bridge latency during PIO. 145 1.15 thorpej */ 146 1.19 fvdl #define ELINK_W1_RUNNER_RDCTL 0x16 147 1.19 fvdl #define ELINK_W1_RUNNER_WRCTL 0x1c 148 1.1 thorpej 149 1.1 thorpej /* 150 1.1 thorpej * Window 2 registers. Station Address Setup/Read 151 1.1 thorpej */ 152 1.1 thorpej /* Read/Write */ 153 1.19 fvdl #define ELINK_W2_RECVMASK_0 0x06 154 1.19 fvdl #define ELINK_W2_ADDR_5 0x05 155 1.19 fvdl #define ELINK_W2_ADDR_4 0x04 156 1.19 fvdl #define ELINK_W2_ADDR_3 0x03 157 1.19 fvdl #define ELINK_W2_ADDR_2 0x02 158 1.19 fvdl #define ELINK_W2_ADDR_1 0x01 159 1.19 fvdl #define ELINK_W2_ADDR_0 0x00 160 1.1 thorpej 161 1.28 perry /* 162 1.9 jonathan * Window 3 registers. Configuration and FIFO Management. 163 1.1 thorpej */ 164 1.1 thorpej /* Read */ 165 1.19 fvdl #define ELINK_W3_FREE_TX 0x0c 166 1.19 fvdl #define ELINK_W3_FREE_RX 0x0a 167 1.9 jonathan /* Read/Write, at least on busmastering cards. */ 168 1.19 fvdl #define ELINK_W3_INTERNAL_CONFIG 0x00 /* 32 bits */ 169 1.19 fvdl #define ELINK_W3_OTHER_INT 0x04 /* 8 bits */ 170 1.19 fvdl #define ELINK_W3_PIO_RESERVED 0x05 /* 8 bits */ 171 1.19 fvdl #define ELINK_W3_MAC_CONTROL 0x06 /* 16 bits */ 172 1.19 fvdl #define ELINK_W3_RESET_OPTIONS 0x08 /* 16 bits */ 173 1.1 thorpej 174 1.1 thorpej /* 175 1.1 thorpej * Window 4 registers. Diagnostics. 176 1.1 thorpej */ 177 1.1 thorpej /* Read/Write */ 178 1.23 thorpej #define ELINK_W4_MEDIA_TYPE 0x0a 179 1.23 thorpej #define ELINK_W4_CTRLR_STATUS 0x08 180 1.19 fvdl #define ELINK_W4_NET_DIAG 0x06 181 1.19 fvdl #define ELINK_W4_FIFO_DIAG 0x04 182 1.19 fvdl #define ELINK_W4_HOST_DIAG 0x02 183 1.19 fvdl #define ELINK_W4_TX_DIAG 0x00 184 1.1 thorpej 185 1.1 thorpej /* 186 1.14 thorpej * Window 4 offset 8 is the PHY Management register on the 187 1.14 thorpej * 3c90x. 188 1.14 thorpej */ 189 1.19 fvdl #define ELINK_W4_BOOM_PHYSMGMT 0x08 190 1.14 thorpej #define PHYSMGMT_CLK 0x0001 191 1.14 thorpej #define PHYSMGMT_DATA 0x0002 192 1.14 thorpej #define PHYSMGMT_DIR 0x0004 193 1.14 thorpej 194 1.19 fvdl 195 1.14 thorpej /* 196 1.1 thorpej * Window 5 Registers. Results and Internal status. 197 1.1 thorpej */ 198 1.1 thorpej /* Read */ 199 1.19 fvdl #define ELINK_W5_READ_0_MASK 0x0c 200 1.19 fvdl #define ELINK_W5_INTR_MASK 0x0a 201 1.19 fvdl #define ELINK_W5_RX_FILTER 0x08 202 1.19 fvdl #define ELINK_W5_RX_EARLY_THRESH 0x06 203 1.19 fvdl #define ELINK_W5_TX_AVAIL_THRESH 0x02 204 1.19 fvdl #define ELINK_W5_TX_START_THRESH 0x00 205 1.1 thorpej 206 1.1 thorpej /* 207 1.1 thorpej * Window 6 registers. Statistics. 208 1.1 thorpej */ 209 1.1 thorpej /* Read/Write */ 210 1.1 thorpej #define TX_TOTAL_OK 0x0c 211 1.1 thorpej #define RX_TOTAL_OK 0x0a 212 1.19 fvdl #define UPPER_FRAMES_OK 0x09 213 1.1 thorpej #define TX_DEFERRALS 0x08 214 1.1 thorpej #define RX_FRAMES_OK 0x07 215 1.1 thorpej #define TX_FRAMES_OK 0x06 216 1.1 thorpej #define RX_OVERRUNS 0x05 217 1.1 thorpej #define TX_COLLISIONS 0x04 218 1.1 thorpej #define TX_AFTER_1_COLLISION 0x03 219 1.1 thorpej #define TX_AFTER_X_COLLISIONS 0x02 220 1.1 thorpej #define TX_NO_SQE 0x01 221 1.1 thorpej #define TX_CD_LOST 0x00 222 1.4 christos 223 1.4 christos /* 224 1.28 perry * Window 7 registers. 225 1.4 christos * Address and length for a single bus-master DMA transfer. 226 1.19 fvdl * Unused for elink3 cards. 227 1.28 perry */ 228 1.30 wiz #define ELINK_W7_MASTER_ADDRES 0x00 229 1.19 fvdl #define ELINK_W7_RX_ERROR 0x04 230 1.28 perry #define ELINK_W7_MASTER_LEN 0x06 231 1.19 fvdl #define ELINK_W7_RX_STATUS 0x08 232 1.28 perry #define ELINK_W7_MASTER_STATUS 0x0c 233 1.1 thorpej 234 1.1 thorpej /* 235 1.1 thorpej * Register definitions. 236 1.1 thorpej */ 237 1.1 thorpej 238 1.1 thorpej /* 239 1.1 thorpej * Command register. All windows. 240 1.1 thorpej * 241 1.1 thorpej * 16 bit register. 242 1.1 thorpej * 15-11: 5-bit code for command to be executed. 243 1.1 thorpej * 10-0: 11-bit arg if any. For commands with no args; 244 1.1 thorpej * this can be set to anything. 245 1.1 thorpej */ 246 1.25 christos /* Wait at least 1ms after issuing */ 247 1.25 christos #define GLOBAL_RESET (u_int16_t) 0x0000 248 1.25 christos #define WINDOW_SELECT (u_int16_t) (0x01<<11) 249 1.25 christos /* 250 1.25 christos * Read ADDR_CFG reg to determine whether this is needed. If so; wait 800 251 1.25 christos * uSec before using transceiver. 252 1.25 christos */ 253 1.25 christos #define START_TRANSCEIVER (u_int16_t) (0x02<<11) 254 1.25 christos /* state disabled on power-up */ 255 1.25 christos #define RX_DISABLE (u_int16_t) (0x03<<11) 256 1.25 christos #define RX_ENABLE (u_int16_t) (0x04<<11) 257 1.25 christos #define RX_RESET (u_int16_t) (0x05<<11) 258 1.25 christos #define RX_DISCARD_TOP_PACK (u_int16_t) (0x08<<11) 259 1.25 christos #define TX_ENABLE (u_int16_t) (0x09<<11) 260 1.25 christos #define TX_DISABLE (u_int16_t) (0x0a<<11) 261 1.25 christos #define TX_RESET (u_int16_t) (0x0b<<11) 262 1.25 christos #define REQ_INTR (u_int16_t) (0x0c<<11) 263 1.25 christos #define ACK_INTR (u_int16_t) (0x0d<<11) 264 1.19 fvdl #define SET_INTR_MASK (u_int16_t) (0x0e<<11) 265 1.12 jonathan /* busmastering-cards only? */ 266 1.25 christos #define STATUS_ENABLE (u_int16_t) (0x0f<<11) 267 1.19 fvdl #define SET_RD_0_MASK (u_int16_t) (0x0f<<11) 268 1.12 jonathan 269 1.19 fvdl #define SET_RX_FILTER (u_int16_t) (0x10<<11) 270 1.19 fvdl # define FIL_INDIVIDUAL (u_int16_t) (0x01) 271 1.19 fvdl # define FIL_MULTICAST (u_int16_t) (0x02) 272 1.19 fvdl # define FIL_BRDCST (u_int16_t) (0x04) 273 1.19 fvdl # define FIL_PROMISC (u_int16_t) (0x08) 274 1.19 fvdl 275 1.19 fvdl #define SET_RX_EARLY_THRESH (u_int16_t) (0x11<<11) 276 1.19 fvdl #define SET_TX_AVAIL_THRESH (u_int16_t) (0x12<<11) 277 1.19 fvdl #define SET_TX_START_THRESH (u_int16_t) (0x13<<11) 278 1.19 fvdl #define START_DMA (u_int16_t) (0x14<<11) /* busmaster-only */ 279 1.12 jonathan # define START_DMA_TX (START_DMA | 0x0)) /* busmaster-only */ 280 1.12 jonathan # define START_DMA_RX (START_DMA | 0x1) /* busmaster-only */ 281 1.19 fvdl #define STATS_ENABLE (u_int16_t) (0x15<<11) 282 1.19 fvdl #define STATS_DISABLE (u_int16_t) (0x16<<11) 283 1.19 fvdl #define STOP_TRANSCEIVER (u_int16_t) (0x17<<11) 284 1.6 jonathan 285 1.10 jonathan /* Only on adapters that support power management: */ 286 1.19 fvdl #define POWERUP (u_int16_t) (0x1b<<11) 287 1.19 fvdl #define POWERDOWN (u_int16_t) (0x1c<<11) 288 1.19 fvdl #define POWERAUTO (u_int16_t) (0x1d<<11) 289 1.10 jonathan 290 1.10 jonathan 291 1.10 jonathan 292 1.6 jonathan /* 293 1.6 jonathan * Command parameter that disables threshold interrupts 294 1.6 jonathan * PIO (3c509) cards use 2044. The fifo word-oriented and 2044--2047 work. 295 1.6 jonathan * "busmastering" cards need 8188. 296 1.6 jonathan * The implicit two-bit upshift done by busmastering cards means 297 1.6 jonathan * a value of 2047 disables threshold interrupts on both. 298 1.6 jonathan */ 299 1.19 fvdl #define ELINK_THRESH_DISABLE 2047 300 1.6 jonathan 301 1.1 thorpej 302 1.1 thorpej /* 303 1.1 thorpej * Status register. All windows. 304 1.1 thorpej * 305 1.1 thorpej * 15-13: Window number(0-7). 306 1.1 thorpej * 12: Command_in_progress. 307 1.9 jonathan * 11: reserved / DMA in progress on busmaster cards. 308 1.1 thorpej * 10: reserved. 309 1.1 thorpej * 9: reserved. 310 1.9 jonathan * 8: reserved / DMA done on busmaster cards. 311 1.1 thorpej * 7: Update Statistics. 312 1.1 thorpej * 6: Interrupt Requested. 313 1.1 thorpej * 5: RX Early. 314 1.1 thorpej * 4: RX Complete. 315 1.1 thorpej * 3: TX Available. 316 1.1 thorpej * 2: TX Complete. 317 1.1 thorpej * 1: Adapter Failure. 318 1.1 thorpej * 0: Interrupt Latch. 319 1.1 thorpej */ 320 1.25 christos #define INTR_LATCH (u_int16_t) (0x0001) 321 1.25 christos #define CARD_FAILURE (u_int16_t) (0x0002) 322 1.25 christos #define TX_COMPLETE (u_int16_t) (0x0004) 323 1.25 christos #define TX_AVAIL (u_int16_t) (0x0008) 324 1.25 christos #define RX_COMPLETE (u_int16_t) (0x0010) 325 1.25 christos #define RX_EARLY (u_int16_t) (0x0020) 326 1.25 christos #define INT_RQD (u_int16_t) (0x0040) 327 1.25 christos #define UPD_STATS (u_int16_t) (0x0080) 328 1.25 christos #define DMA_DONE (u_int16_t) (0x0100) /* DMA cards only */ 329 1.25 christos #define DMA_IN_PROGRESS (u_int16_t) (0x0800) /* DMA cards only */ 330 1.25 christos #define COMMAND_IN_PROGRESS (u_int16_t) (0x1000) 331 1.25 christos 332 1.25 christos #define ALL_INTERRUPTS (CARD_FAILURE | TX_COMPLETE | TX_AVAIL | RX_COMPLETE | \ 333 1.25 christos RX_EARLY | INT_RQD | UPD_STATS) 334 1.25 christos 335 1.25 christos #define WATCHED_INTERRUPTS (CARD_FAILURE | TX_COMPLETE | RX_COMPLETE | TX_AVAIL) 336 1.1 thorpej 337 1.1 thorpej /* 338 1.1 thorpej * FIFO Registers. RX Status. 339 1.1 thorpej * 340 1.1 thorpej * 15: Incomplete or FIFO empty. 341 1.1 thorpej * 14: 1: Error in RX Packet 0: Incomplete or no error. 342 1.1 thorpej * 14-11: Type of error. [14-11] 343 1.1 thorpej * 1000 = Overrun. 344 1.1 thorpej * 1011 = Run Packet Error. 345 1.1 thorpej * 1100 = Alignment Error. 346 1.1 thorpej * 1101 = CRC Error. 347 1.1 thorpej * 1001 = Oversize Packet Error (>1514 bytes) 348 1.1 thorpej * 0010 = Dribble Bits. 349 1.1 thorpej * (all other error codes, no errors.) 350 1.1 thorpej * 351 1.1 thorpej * 10-0: RX Bytes (0-1514) 352 1.1 thorpej */ 353 1.19 fvdl #define ERR_INCOMPLETE (u_int16_t) (0x8000) 354 1.19 fvdl #define ERR_RX (u_int16_t) (0x4000) 355 1.19 fvdl #define ERR_MASK (u_int16_t) (0x7800) 356 1.19 fvdl #define ERR_OVERRUN (u_int16_t) (0x4000) 357 1.19 fvdl #define ERR_RUNT (u_int16_t) (0x5800) 358 1.19 fvdl #define ERR_ALIGNMENT (u_int16_t) (0x6000) 359 1.19 fvdl #define ERR_CRC (u_int16_t) (0x6800) 360 1.19 fvdl #define ERR_OVERSIZE (u_int16_t) (0x4800) 361 1.19 fvdl #define ERR_DRIBBLE (u_int16_t) (0x1000) 362 1.1 thorpej 363 1.1 thorpej /* 364 1.1 thorpej * TX Status 365 1.1 thorpej * 366 1.1 thorpej * Reports the transmit status of a completed transmission. Writing this 367 1.1 thorpej * register pops the transmit completion stack. 368 1.1 thorpej * 369 1.1 thorpej * Window 1/Port 0x0b. 370 1.1 thorpej * 371 1.1 thorpej * 7: Complete 372 1.1 thorpej * 6: Interrupt on successful transmission requested. 373 1.1 thorpej * 5: Jabber Error (TP Only, TX Reset required. ) 374 1.1 thorpej * 4: Underrun (TX Reset required. ) 375 1.1 thorpej * 3: Maximum Collisions. 376 1.1 thorpej * 2: TX Status Overflow. 377 1.1 thorpej * 1-0: Undefined. 378 1.1 thorpej * 379 1.1 thorpej */ 380 1.27 mycroft #define TXS_COMPLETE 0x8000 381 1.27 mycroft #define TXS_INTR_REQ 0x4000 382 1.27 mycroft #define TXS_JABBER 0x2000 383 1.27 mycroft #define TXS_UNDERRUN 0x1000 384 1.27 mycroft #define TXS_MAX_COLLISION 0x0800 385 1.27 mycroft #define TXS_STATUS_OVERFLOW 0x0400 386 1.31 itohy #define TXS_RECLAIM 0x0200 387 1.27 mycroft #define TXS_TIMER 0x00ff 388 1.9 jonathan 389 1.9 jonathan /* 390 1.12 jonathan * RX status 391 1.12 jonathan * Window 1/Port 0x08. 392 1.12 jonathan */ 393 1.19 fvdl #define RX_BYTES_MASK (u_int16_t) (0x07ff) 394 1.12 jonathan 395 1.12 jonathan /* 396 1.9 jonathan * Internal Config and MAC control (Window 3) 397 1.9 jonathan * Window 3 / Port 0: 32-bit internal config register: 398 1.9 jonathan * bits 0-2: fifo buffer ram size 399 1.9 jonathan * 3: ram width (word/byte) (ro) 400 1.9 jonathan * 4-5: ram speed 401 1.9 jonathan * 6-7: rom size 402 1.9 jonathan * 8-15: reserved 403 1.28 perry * 404 1.9 jonathan * 16-17: ram split (5:3, 3:1, or 1:1). 405 1.9 jonathan * 18-19: reserved 406 1.9 jonathan * 20-22: selected media type 407 1.9 jonathan * 21: unused 408 1.9 jonathan * 24: (nonvolatile) driver should autoselect media 409 1.26 wiz * 25-31: reserved 410 1.9 jonathan * 411 1.9 jonathan * The low-order 16 bits should generally not be changed by software. 412 1.9 jonathan * Offsets defined for two 16-bit words, to help out 16-bit busses. 413 1.9 jonathan */ 414 1.19 fvdl #define CONFIG_RAMSIZE (u_int16_t) 0x0007 415 1.19 fvdl #define CONFIG_RAMSIZE_SHIFT 0 416 1.9 jonathan 417 1.19 fvdl #define CONFIG_RAMWIDTH (u_int16_t) 0x0008 418 1.19 fvdl #define CONFIG_RAMWIDTH_SHIFT 3 419 1.9 jonathan 420 1.19 fvdl #define CONFIG_RAMSPEED (u_int16_t) 0x0030 421 1.19 fvdl #define CONFIG_RAMSPEED_SHIFT 4 422 1.19 fvdl #define CONFIG_ROMSIZE (u_int16_t) 0x00c0 423 1.19 fvdl #define CONFIG_ROMSIZE_SHIFT 6 424 1.9 jonathan 425 1.9 jonathan /* Window 3/port 2 */ 426 1.19 fvdl #define CONFIG_RAMSPLIT (u_int16_t) 0x0003 427 1.19 fvdl #define CONFIG_RAMSPLIT_SHIFT 0 428 1.19 fvdl #define CONFIG_MEDIAMASK (u_int16_t) 0x0070 429 1.19 fvdl #define CONFIG_MEDIAMASK_SHIFT 4 430 1.9 jonathan 431 1.19 fvdl #define CONFIG_AUTOSELECT (u_int16_t) 0x0100 432 1.19 fvdl #define CONFIG_AUTOSELECT_SHIFT 8 433 1.18 thorpej 434 1.18 thorpej /* 435 1.18 thorpej * MAC_CONTROL (Window 3) 436 1.18 thorpej */ 437 1.19 fvdl #define MAC_CONTROL_FDX 0x20 /* full-duplex mode */ 438 1.19 fvdl 439 1.19 fvdl 440 1.19 fvdl /* Active media in INTERNAL_CONFIG media bits */ 441 1.19 fvdl 442 1.19 fvdl #define ELINKMEDIA_10BASE_T (u_int16_t) 0x00 443 1.19 fvdl #define ELINKMEDIA_AUI (u_int16_t) 0x01 444 1.19 fvdl #define ELINKMEDIA_RESV1 (u_int16_t) 0x02 445 1.19 fvdl #define ELINKMEDIA_10BASE_2 (u_int16_t) 0x03 446 1.19 fvdl #define ELINKMEDIA_100BASE_TX (u_int16_t) 0x04 447 1.19 fvdl #define ELINKMEDIA_100BASE_FX (u_int16_t) 0x05 448 1.19 fvdl #define ELINKMEDIA_MII (u_int16_t) 0x06 449 1.19 fvdl #define ELINKMEDIA_100BASE_T4 (u_int16_t) 0x07 450 1.19 fvdl 451 1.1 thorpej 452 1.1 thorpej /* 453 1.26 wiz * RESET_OPTIONS (Window 3, on Demon/Vortex/Boomerang only) 454 1.12 jonathan * also mapped to PCI configuration space on PCI adaptors. 455 1.12 jonathan * 456 1.19 fvdl * (same register as Vortex ELINK_W3_RESET_OPTIONS, mapped to pci-config space) 457 1.12 jonathan */ 458 1.19 fvdl #define ELINK_PCI_100BASE_T4 (1<<0) 459 1.19 fvdl #define ELINK_PCI_100BASE_TX (1<<1) 460 1.19 fvdl #define ELINK_PCI_100BASE_FX (1<<2) 461 1.19 fvdl #define ELINK_PCI_10BASE_T (1<<3) 462 1.19 fvdl #define ELINK_PCI_BNC (1<<4) 463 1.19 fvdl #define ELINK_PCI_AUI (1<<5) 464 1.19 fvdl #define ELINK_PCI_100BASE_MII (1<<6) 465 1.19 fvdl #define ELINK_PCI_INTERNAL_VCO (1<<8) 466 1.19 fvdl 467 1.19 fvdl #define ELINK_PCI_MEDIAMASK (ELINK_PCI_100BASE_T4|ELINK_PCI_100BASE_TX| \ 468 1.19 fvdl ELINK_PCI_100BASE_FX|ELINK_PCI_10BASE_T| \ 469 1.19 fvdl ELINK_PCI_BNC|ELINK_PCI_AUI| \ 470 1.19 fvdl ELINK_PCI_100BASE_MII) 471 1.17 thorpej 472 1.21 thorpej #define ELINK_RUNNER_MII_RESET 0x4000 473 1.19 fvdl #define ELINK_RUNNER_ENABLE_MII 0x8000 474 1.14 thorpej 475 1.12 jonathan /* 476 1.1 thorpej * FIFO Status (Window 4) 477 1.1 thorpej * 478 1.1 thorpej * Supports FIFO diagnostics 479 1.1 thorpej * 480 1.1 thorpej * Window 4/Port 0x04.1 481 1.1 thorpej * 482 1.1 thorpej * 15: 1=RX receiving (RO). Set when a packet is being received 483 1.1 thorpej * into the RX FIFO. 484 1.1 thorpej * 14: Reserved 485 1.1 thorpej * 13: 1=RX underrun (RO). Generates Adapter Failure interrupt. 486 1.1 thorpej * Requires RX Reset or Global Reset command to recover. 487 1.1 thorpej * It is generated when you read past the end of a packet - 488 1.1 thorpej * reading past what has been received so far will give bad 489 1.1 thorpej * data. 490 1.1 thorpej * 12: 1=RX status overrun (RO). Set when there are already 8 491 1.1 thorpej * packets in the RX FIFO. While this bit is set, no additional 492 1.1 thorpej * packets are received. Requires no action on the part of 493 1.1 thorpej * the host. The condition is cleared once a packet has been 494 1.1 thorpej * read out of the RX FIFO. 495 1.1 thorpej * 11: 1=RX overrun (RO). Set when the RX FIFO is full (there 496 1.1 thorpej * may not be an overrun packet yet). While this bit is set, 497 1.1 thorpej * no additional packets will be received (some additional 498 1.1 thorpej * bytes can still be pending between the wire and the RX 499 1.1 thorpej * FIFO). Requires no action on the part of the host. The 500 1.1 thorpej * condition is cleared once a few bytes have been read out 501 1.1 thorpej * from the RX FIFO. 502 1.1 thorpej * 10: 1=TX overrun (RO). Generates adapter failure interrupt. 503 1.1 thorpej * Requires TX Reset or Global Reset command to recover. 504 1.1 thorpej * Disables Transmitter. 505 1.1 thorpej * 9-8: Unassigned. 506 1.1 thorpej * 7-0: Built in self test bits for the RX and TX FIFO's. 507 1.1 thorpej */ 508 1.19 fvdl #define FIFOS_RX_RECEIVING (u_int16_t) 0x8000 509 1.19 fvdl #define FIFOS_RX_UNDERRUN (u_int16_t) 0x2000 510 1.19 fvdl #define FIFOS_RX_STATUS_OVERRUN (u_int16_t) 0x1000 511 1.19 fvdl #define FIFOS_RX_OVERRUN (u_int16_t) 0x0800 512 1.19 fvdl #define FIFOS_TX_OVERRUN (u_int16_t) 0x0400 513 1.1 thorpej 514 1.1 thorpej /* 515 1.10 jonathan * ISA/eisa CONFIG_CNTRL media-present bits. 516 1.10 jonathan */ 517 1.19 fvdl #define ELINK_W0_CC_AUI (1<<13) 518 1.19 fvdl #define ELINK_W0_CC_BNC (1<<12) 519 1.19 fvdl #define ELINK_W0_CC_UTP (1<<9) 520 1.19 fvdl #define ELINK_W0_CC_MEDIAMASK (ELINK_W0_CC_AUI|ELINK_W0_CC_BNC| \ 521 1.19 fvdl ELINK_W0_CC_UTP) 522 1.10 jonathan 523 1.10 jonathan /* EEPROM state flags/commands */ 524 1.1 thorpej #define EEPROM_BUSY (1<<15) 525 1.1 thorpej #define EEPROM_TST_MODE (1<<14) 526 1.21 thorpej 527 1.1 thorpej #define READ_EEPROM (1<<7) 528 1.21 thorpej 529 1.21 thorpej /* For the RoadRunner chips... */ 530 1.21 thorpej #define WRITE_EEPROM_RR 0x100 531 1.21 thorpej #define READ_EEPROM_RR 0x200 532 1.21 thorpej #define ERASE_EEPROM_RR 0x300 533 1.10 jonathan 534 1.12 jonathan /* window 4, MEDIA_STATUS bits */ 535 1.12 jonathan #define SQE_ENABLE 0x08 /* Enables SQE on AUI ports */ 536 1.12 jonathan #define JABBER_GUARD_ENABLE 0x40 537 1.12 jonathan #define LINKBEAT_ENABLE 0x80 538 1.1 thorpej #define DISABLE_UTP 0x0 539 1.12 jonathan #define LINKBEAT_DETECT 0x800 540 1.1 thorpej 541 1.10 jonathan /* 542 1.12 jonathan * Misc defines for various things. 543 1.10 jonathan */ 544 1.12 jonathan #define TAG_ADAPTER 0xd0 545 1.12 jonathan #define ACTIVATE_ADAPTER_TO_CONFIG 0xff 546 1.12 jonathan #define ENABLE_DRQ_IRQ 0x0001 547 1.12 jonathan #define MFG_ID 0x506d /* `TCM' */ 548 1.13 veego #define PROD_ID_3C509 0x5090 /* 509[0-f] */ 549 1.12 jonathan #define GO_WINDOW(x) bus_space_write_2(sc->sc_iot, \ 550 1.19 fvdl sc->sc_ioh, ELINK_COMMAND, WINDOW_SELECT|x) 551 1.12 jonathan 552 1.7 jonathan 553 1.10 jonathan /* Used to probe for large-packet support. */ 554 1.19 fvdl #define ELINK_LARGEWIN_PROBE ELINK_THRESH_DISABLE 555 1.19 fvdl #define ELINK_LARGEWIN_MASK 0xffc 556