1 /* 2 Written 1994 by David C. Davies. 3 4 Copyright 1994 Digital Equipment Corporation. 5 6 This software may be used and distributed according to the terms of the 7 GNU General Public License, incorporated herein by reference. 8 9 The author may be reached as davies@wanton.lkg.dec.com or Digital 10 Equipment Corporation, 550 King Street, Littleton MA 01460. 11 12 ========================================================================= 13 */ 14 15 /* 16 ** I/O Address Register Map 17 */ 18 #define EWRK3_CSR iobase+0x00 /* Control and Status Register */ 19 #define EWRK3_CR iobase+0x01 /* Control Register */ 20 #define EWRK3_ICR iobase+0x02 /* Interrupt Control Register */ 21 #define EWRK3_TSR iobase+0x03 /* Transmit Status Register */ 22 #define EWRK3_RSVD1 iobase+0x04 /* RESERVED */ 23 #define EWRK3_RSVD2 iobase+0x05 /* RESERVED */ 24 #define EWRK3_FMQ iobase+0x06 /* Free Memory Queue */ 25 #define EWRK3_FMQC iobase+0x07 /* Free Memory Queue Counter */ 26 #define EWRK3_RQ iobase+0x08 /* Receive Queue */ 27 #define EWRK3_RQC iobase+0x09 /* Receive Queue Counter */ 28 #define EWRK3_TQ iobase+0x0a /* Transmit Queue */ 29 #define EWRK3_TQC iobase+0x0b /* Transmit Queue Counter */ 30 #define EWRK3_TDQ iobase+0x0c /* Transmit Done Queue */ 31 #define EWRK3_TDQC iobase+0x0d /* Transmit Done Queue Counter */ 32 #define EWRK3_PIR1 iobase+0x0e /* Page Index Register 1 */ 33 #define EWRK3_PIR2 iobase+0x0f /* Page Index Register 2 */ 34 #define EWRK3_DATA iobase+0x10 /* Data Register */ 35 #define EWRK3_IOPR iobase+0x11 /* I/O Page Register */ 36 #define EWRK3_IOBR iobase+0x12 /* I/O Base Register */ 37 #define EWRK3_MPR iobase+0x13 /* Memory Page Register */ 38 #define EWRK3_MBR iobase+0x14 /* Memory Base Register */ 39 #define EWRK3_APROM iobase+0x15 /* Address PROM */ 40 #define EWRK3_EPROM1 iobase+0x16 /* EEPROM Data Register 1 */ 41 #define EWRK3_EPROM2 iobase+0x17 /* EEPROM Data Register 2 */ 42 #define EWRK3_PAR0 iobase+0x18 /* Physical Address Register 0 */ 43 #define EWRK3_PAR1 iobase+0x19 /* Physical Address Register 1 */ 44 #define EWRK3_PAR2 iobase+0x1a /* Physical Address Register 2 */ 45 #define EWRK3_PAR3 iobase+0x1b /* Physical Address Register 3 */ 46 #define EWRK3_PAR4 iobase+0x1c /* Physical Address Register 4 */ 47 #define EWRK3_PAR5 iobase+0x1d /* Physical Address Register 5 */ 48 #define EWRK3_CMR iobase+0x1e /* Configuration/Management Register */ 49 50 /* 51 ** Control Page Map 52 */ 53 #define PAGE0_FMQ 0x000 /* Free Memory Queue */ 54 #define PAGE0_RQ 0x080 /* Receive Queue */ 55 #define PAGE0_TQ 0x100 /* Transmit Queue */ 56 #define PAGE0_TDQ 0x180 /* Transmit Done Queue */ 57 #define PAGE0_HTE 0x200 /* Hash Table Entries */ 58 #define PAGE0_RSVD 0x240 /* RESERVED */ 59 #define PAGE0_USRD 0x600 /* User Data */ 60 61 /* 62 ** Control and Status Register bit definitions (EWRK3_CSR) 63 */ 64 #define CSR_RA 0x80 /* Runt Accept */ 65 #define CSR_PME 0x40 /* Promiscuous Mode Enable */ 66 #define CSR_MCE 0x20 /* Multicast Enable */ 67 #define CSR_TNE 0x08 /* TX Done Queue Not Empty */ 68 #define CSR_RNE 0x04 /* RX Queue Not Empty */ 69 #define CSR_TXD 0x02 /* TX Disable */ 70 #define CSR_RXD 0x01 /* RX Disable */ 71 72 /* 73 ** Control Register bit definitions (EWRK3_CR) 74 */ 75 #define CR_APD 0x80 /* Auto Port Disable */ 76 #define CR_PSEL 0x40 /* Port Select (0->TP port) */ 77 #define CR_LBCK 0x20 /* LoopBaCK enable */ 78 #define CR_FDUP 0x10 /* Full DUPlex enable */ 79 #define CR_FBUS 0x08 /* Fast BUS enable (ISA clk > 8.33MHz) */ 80 #define CR_EN_16 0x04 /* ENable 16 bit memory accesses */ 81 #define CR_LED 0x02 /* LED (1-> turn on) */ 82 83 /* 84 ** Interrupt Control Register bit definitions (EWRK3_ICR) 85 */ 86 #define ICR_IE 0x80 /* Interrupt Enable */ 87 #define ICR_IS 0x60 /* Interrupt Selected */ 88 #define ICR_TNEM 0x08 /* TNE Mask (0->mask) */ 89 #define ICR_RNEM 0x04 /* RNE Mask (0->mask) */ 90 #define ICR_TXDM 0x02 /* TXD Mask (0->mask) */ 91 #define ICR_RXDM 0x01 /* RXD Mask (0->mask) */ 92 93 /* 94 ** Transmit Status Register bit definitions (EWRK3_TSR) 95 */ 96 #define TSR_NCL 0x80 /* No Carrier Loopback */ 97 #define TSR_ID 0x40 /* Initially Deferred */ 98 #define TSR_LCL 0x20 /* Late CoLlision */ 99 #define TSR_ECL 0x10 /* Excessive CoLlisions */ 100 #define TSR_RCNTR 0x0f /* Retries CouNTeR */ 101 102 /* 103 ** I/O Page Register bit definitions (EWRK3_IOPR) 104 */ 105 #define EEPROM_INIT 0xc0 /* EEPROM INIT command */ 106 #define EEPROM_WR_EN 0xc8 /* EEPROM WRITE ENABLE command */ 107 #define EEPROM_WR 0xd0 /* EEPROM WRITE command */ 108 #define EEPROM_WR_DIS 0xd8 /* EEPROM WRITE DISABLE command */ 109 #define EEPROM_RD 0xe0 /* EEPROM READ command */ 110 111 /* 112 ** I/O Base Register bit definitions (EWRK3_IOBR) 113 */ 114 #define EISA_REGS_EN 0x20 /* Enable EISA ID and Control Registers */ 115 #define EISA_IOB 0x1f /* Compare bits for I/O Base Address */ 116 117 /* 118 ** I/O Configuration/Management Register bit definitions (EWRK3_CMR) 119 */ 120 #define CMR_RA 0x80 /* Read Ahead */ 121 #define CMR_WB 0x40 /* Write Behind */ 122 #define CMR_LINK 0x20 /* 0->TP */ 123 #define CMR_POLARITY 0x10 /* Informational */ 124 #define CMR_NO_EEPROM 0x0c /* NO_EEPROM<1:0> pin status */ 125 #define CMR_HS 0x08 /* Hard Strapped pin status (LeMAC2) */ 126 #define CMR_PNP 0x04 /* Plug 'n Play */ 127 #define CMR_DRAM 0x02 /* 0-> 1DRAM, 1-> 2 DRAM on board */ 128 #define CMR_0WS 0x01 /* Zero Wait State */ 129 130 /* 131 ** MAC Receive Status Register bit definitions 132 */ 133 134 #define R_ROK 0x80 /* Receive OK summary */ 135 #define R_IAM 0x10 /* Individual Address Match */ 136 #define R_MCM 0x08 /* MultiCast Match */ 137 #define R_DBE 0x04 /* Dribble Bit Error */ 138 #define R_CRC 0x02 /* CRC error */ 139 #define R_PLL 0x01 /* Phase Lock Lost */ 140 141 /* 142 ** MAC Transmit Control Register bit definitions 143 */ 144 145 #define TCR_SQEE 0x40 /* SQE Enable - look for heartbeat */ 146 #define TCR_SED 0x20 /* Stop when Error Detected */ 147 #define TCR_QMODE 0x10 /* Q_MODE */ 148 #define TCR_LAB 0x08 /* Less Aggressive Backoff */ 149 #define TCR_PAD 0x04 /* PAD Runt Packets */ 150 #define TCR_IFC 0x02 /* Insert Frame Check */ 151 #define TCR_ISA 0x01 /* Insert Source Address */ 152 153 /* 154 ** MAC Transmit Status Register bit definitions 155 */ 156 157 #define T_VSTS 0x80 /* Valid STatuS */ 158 #define T_CTU 0x40 /* Cut Through Used */ 159 #define T_SQE 0x20 /* Signal Quality Error */ 160 #define T_NCL 0x10 /* No Carrier Loopback */ 161 #define T_LCL 0x08 /* Late Collision */ 162 #define T_ID 0x04 /* Initially Deferred */ 163 #define T_COLL 0x03 /* COLLision status */ 164 #define T_XCOLL 0x03 /* Excessive Collisions */ 165 #define T_MCOLL 0x02 /* Multiple Collisions */ 166 #define T_OCOLL 0x01 /* One Collision */ 167 #define T_NOCOLL 0x00 /* No Collisions */ 168 #define T_XUR 0x03 /* Excessive Underruns */ 169 #define T_TXE 0x7f /* TX Errors */ 170 171 /* 172 ** EISA Configuration Register bit definitions 173 */ 174 175 #define EISA_ID iobase + 0x0c80 /* EISA ID Registers */ 176 #define EISA_ID0 iobase + 0x0c80 /* EISA ID Register 0 */ 177 #define EISA_ID1 iobase + 0x0c81 /* EISA ID Register 1 */ 178 #define EISA_ID2 iobase + 0x0c82 /* EISA ID Register 2 */ 179 #define EISA_ID3 iobase + 0x0c83 /* EISA ID Register 3 */ 180 #define EISA_CR iobase + 0x0c84 /* EISA Control Register */ 181 182 /* 183 ** EEPROM BYTES 184 */ 185 #define EEPROM_MEMB 0x00 186 #define EEPROM_IOB 0x01 187 #define EEPROM_EISA_ID0 0x02 188 #define EEPROM_EISA_ID1 0x03 189 #define EEPROM_EISA_ID2 0x04 190 #define EEPROM_EISA_ID3 0x05 191 #define EEPROM_MISC0 0x06 192 #define EEPROM_MISC1 0x07 193 #define EEPROM_PNAME7 0x08 194 #define EEPROM_PNAME6 0x09 195 #define EEPROM_PNAME5 0x0a 196 #define EEPROM_PNAME4 0x0b 197 #define EEPROM_PNAME3 0x0c 198 #define EEPROM_PNAME2 0x0d 199 #define EEPROM_PNAME1 0x0e 200 #define EEPROM_PNAME0 0x0f 201 #define EEPROM_SWFLAGS 0x10 202 #define EEPROM_HWCAT 0x11 203 #define EEPROM_NETMAN2 0x12 204 #define EEPROM_REVLVL 0x13 205 #define EEPROM_NETMAN0 0x14 206 #define EEPROM_NETMAN1 0x15 207 #define EEPROM_CHIPVER 0x16 208 #define EEPROM_SETUP 0x17 209 #define EEPROM_PADDR0 0x18 210 #define EEPROM_PADDR1 0x19 211 #define EEPROM_PADDR2 0x1a 212 #define EEPROM_PADDR3 0x1b 213 #define EEPROM_PADDR4 0x1c 214 #define EEPROM_PADDR5 0x1d 215 #define EEPROM_PA_CRC 0x1e 216 #define EEPROM_CHKSUM 0x1f 217 218 /* 219 ** EEPROM bytes for checksumming 220 */ 221 #define EEPROM_MAX 32 /* bytes */ 222 223 /* 224 ** EEPROM MISCELLANEOUS FLAGS 225 */ 226 #define RBE_SHADOW 0x0100 /* Remote Boot Enable Shadow */ 227 #define READ_AHEAD 0x0080 /* Read Ahead feature */ 228 #define IRQ_SEL2 0x0070 /* IRQ line selection (LeMAC2) */ 229 #define IRQ_SEL 0x0060 /* IRQ line selection */ 230 #define FAST_BUS 0x0008 /* ISA Bus speeds > 8.33MHz */ 231 #define ENA_16 0x0004 /* Enables 16 bit memory transfers */ 232 #define WRITE_BEHIND 0x0002 /* Write Behind feature */ 233 #define _0WS_ENA 0x0001 /* Zero Wait State Enable */ 234 235 /* 236 ** EEPROM NETWORK MANAGEMENT FLAGS 237 */ 238 #define NETMAN_POL 0x04 /* Polarity defeat */ 239 #define NETMAN_LINK 0x02 /* Link defeat */ 240 #define NETMAN_CCE 0x01 /* Custom Counters Enable */ 241 242 /* 243 ** EEPROM SW FLAGS 244 */ 245 #define SW_SQE 0x10 /* Signal Quality Error */ 246 #define SW_LAB 0x08 /* Less Aggressive Backoff */ 247 #define SW_INIT 0x04 /* Initialized */ 248 #define SW_TIMEOUT 0x02 /* 0:2.5 mins, 1: 30 secs */ 249 #define SW_REMOTE 0x01 /* Remote Boot Enable -> 1 */ 250 251 /* 252 ** EEPROM SETUP FLAGS 253 */ 254 #define SETUP_APD 0x80 /* AutoPort Disable */ 255 #define SETUP_PS 0x40 /* Port Select */ 256 #define SETUP_MP 0x20 /* MultiPort */ 257 #define SETUP_1TP 0x10 /* 1 port, TP */ 258 #define SETUP_1COAX 0x00 /* 1 port, Coax */ 259 #define SETUP_DRAM 0x02 /* Number of DRAMS on board */ 260 261 /* 262 ** EEPROM MANAGEMENT FLAGS 263 */ 264 #define MGMT_CCE 0x01 /* Custom Counters Enable */ 265 266 /* 267 ** EEPROM VERSIONS 268 */ 269 #define LeMAC 0x11 270 #define LeMAC2 0x12 271 272 /* 273 ** Miscellaneous 274 */ 275 276 #define EEPROM_WAIT_TIME 1000 /* Number of microseconds */ 277 #define EISA_EN 0x0001 /* Enable EISA bus buffers */ 278 279 #define HASH_TABLE_LEN 512 /* Bits */ 280 281 #define XCT 0x80 /* Transmit Cut Through */ 282 #define PRELOAD 16 /* 4 long words */ 283 284 #define MASK_INTERRUPTS 1 285 #define UNMASK_INTERRUPTS 0 286 287 #define EEPROM_OFFSET(a) ((u_short)((u_long)(a))) 288 289 /* 290 ** Include the IOCTL stuff 291 */ 292 #include <linux/sockios.h> 293 294 #define EWRK3IOCTL SIOCDEVPRIVATE 295 296 struct ewrk3_ioctl { 297 unsigned short cmd; /* Command to run */ 298 unsigned short len; /* Length of the data buffer */ 299 unsigned char *data; /* Pointer to the data buffer */ 300 }; 301 302 /* 303 ** Recognised commands for the driver 304 */ 305 #define EWRK3_GET_HWADDR 0x01 /* Get the hardware address */ 306 #define EWRK3_SET_HWADDR 0x02 /* Get the hardware address */ 307 #define EWRK3_SET_PROM 0x03 /* Set Promiscuous Mode */ 308 #define EWRK3_CLR_PROM 0x04 /* Clear Promiscuous Mode */ 309 #define EWRK3_SAY_BOO 0x05 /* Say "Boo!" to the kernel log file */ 310 #define EWRK3_GET_MCA 0x06 /* Get a multicast address */ 311 #define EWRK3_SET_MCA 0x07 /* Set a multicast address */ 312 #define EWRK3_CLR_MCA 0x08 /* Clear a multicast address */ 313 #define EWRK3_MCA_EN 0x09 /* Enable a multicast address group */ 314 #define EWRK3_GET_STATS 0x0a /* Get the driver statistics */ 315 #define EWRK3_CLR_STATS 0x0b /* Zero out the driver statistics */ 316 #define EWRK3_GET_CSR 0x0c /* Get the CSR Register contents */ 317 #define EWRK3_SET_CSR 0x0d /* Set the CSR Register contents */ 318 #define EWRK3_GET_EEPROM 0x0e /* Get the EEPROM contents */ 319 #define EWRK3_SET_EEPROM 0x0f /* Set the EEPROM contents */ 320 #define EWRK3_GET_CMR 0x10 /* Get the CMR Register contents */ 321 #define EWRK3_CLR_TX_CUT_THRU 0x11 /* Clear the TX cut through mode */ 322 #define EWRK3_SET_TX_CUT_THRU 0x12 /* Set the TX cut through mode */ 323