1 |
1626 |
jcastillo |
/*
|
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 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 */
|