|
|
1.1 ! root 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 Public License, incorporated herein by reference. ! 8: ! 9: The author may be reached as [email protected] 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 */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.