iwlwifi: use rmb/wmb to protect indirect mmio operation
[linux/fpc-iii.git] / drivers / net / ewrk3.c
blobb852303c9362a8a3f5c1888624a7d23edd4d2cb5
1 /* ewrk3.c: A DIGITAL EtherWORKS 3 ethernet driver for Linux.
3 Written 1994 by David C. Davies.
5 Copyright 1994 Digital Equipment Corporation.
7 This software may be used and distributed according to the terms of
8 the GNU General Public License, incorporated herein by reference.
10 This driver is written for the Digital Equipment Corporation series
11 of EtherWORKS ethernet cards:
13 DE203 Turbo (BNC)
14 DE204 Turbo (TP)
15 DE205 Turbo (TP BNC)
17 The driver has been tested on a relatively busy network using the DE205
18 card and benchmarked with 'ttcp': it transferred 16M of data at 975kB/s
19 (7.8Mb/s) to a DECstation 5000/200.
21 The author may be reached at davies@maniac.ultranet.com.
23 =========================================================================
24 This driver has been written substantially from scratch, although its
25 inheritance of style and stack interface from 'depca.c' and in turn from
26 Donald Becker's 'lance.c' should be obvious.
28 The DE203/4/5 boards all use a new proprietary chip in place of the
29 LANCE chip used in prior cards (DEPCA, DE100, DE200/1/2, DE210, DE422).
30 Use the depca.c driver in the standard distribution for the LANCE based
31 cards from DIGITAL; this driver will not work with them.
33 The DE203/4/5 cards have 2 main modes: shared memory and I/O only. I/O
34 only makes all the card accesses through I/O transactions and no high
35 (shared) memory is used. This mode provides a >48% performance penalty
36 and is deprecated in this driver, although allowed to provide initial
37 setup when hardstrapped.
39 The shared memory mode comes in 3 flavours: 2kB, 32kB and 64kB. There is
40 no point in using any mode other than the 2kB mode - their performances
41 are virtually identical, although the driver has been tested in the 2kB
42 and 32kB modes. I would suggest you uncomment the line:
44 FORCE_2K_MODE;
46 to allow the driver to configure the card as a 2kB card at your current
47 base address, thus leaving more room to clutter your system box with
48 other memory hungry boards.
50 As many ISA and EISA cards can be supported under this driver as you
51 wish, limited primarily by the available IRQ lines, rather than by the
52 available I/O addresses (24 ISA, 16 EISA). I have checked different
53 configurations of multiple depca cards and ewrk3 cards and have not
54 found a problem yet (provided you have at least depca.c v0.38) ...
56 The board IRQ setting must be at an unused IRQ which is auto-probed
57 using Donald Becker's autoprobe routines. All these cards are at
58 {5,10,11,15}.
60 No 16MB memory limitation should exist with this driver as DMA is not
61 used and the common memory area is in low memory on the network card (my
62 current system has 20MB and I've not had problems yet).
64 The ability to load this driver as a loadable module has been included
65 and used extensively during the driver development (to save those long
66 reboot sequences). To utilise this ability, you have to do 8 things:
68 0) have a copy of the loadable modules code installed on your system.
69 1) copy ewrk3.c from the /linux/drivers/net directory to your favourite
70 temporary directory.
71 2) edit the source code near line 1898 to reflect the I/O address and
72 IRQ you're using.
73 3) compile ewrk3.c, but include -DMODULE in the command line to ensure
74 that the correct bits are compiled (see end of source code).
75 4) if you are wanting to add a new card, goto 5. Otherwise, recompile a
76 kernel with the ewrk3 configuration turned off and reboot.
77 5) insmod ewrk3.o
78 [Alan Cox: Changed this so you can insmod ewrk3.o irq=x io=y]
79 [Adam Kropelin: now accepts irq=x1,x2 io=y1,y2 for multiple cards]
80 6) run the net startup bits for your new eth?? interface manually
81 (usually /etc/rc.inet[12] at boot time).
82 7) enjoy!
84 Note that autoprobing is not allowed in loadable modules - the system is
85 already up and running and you're messing with interrupts.
87 To unload a module, turn off the associated interface
88 'ifconfig eth?? down' then 'rmmod ewrk3'.
90 Promiscuous mode has been turned off in this driver, but all the
91 multicast address bits have been turned on. This improved the send
92 performance on a busy network by about 13%.
94 Ioctl's have now been provided (primarily because I wanted to grab some
95 packet size statistics). They are patterned after 'plipconfig.c' from a
96 suggestion by Alan Cox. Using these ioctls, you can enable promiscuous
97 mode, add/delete multicast addresses, change the hardware address, get
98 packet size distribution statistics and muck around with the control and
99 status register. I'll add others if and when the need arises.
101 TO DO:
102 ------
105 Revision History
106 ----------------
108 Version Date Description
110 0.1 26-aug-94 Initial writing. ALPHA code release.
111 0.11 31-aug-94 Fixed: 2k mode memory base calc.,
112 LeMAC version calc.,
113 IRQ vector assignments during autoprobe.
114 0.12 31-aug-94 Tested working on LeMAC2 (DE20[345]-AC) card.
115 Fixed up MCA hash table algorithm.
116 0.20 4-sep-94 Added IOCTL functionality.
117 0.21 14-sep-94 Added I/O mode.
118 0.21axp 15-sep-94 Special version for ALPHA AXP Linux V1.0.
119 0.22 16-sep-94 Added more IOCTLs & tidied up.
120 0.23 21-sep-94 Added transmit cut through.
121 0.24 31-oct-94 Added uid checks in some ioctls.
122 0.30 1-nov-94 BETA code release.
123 0.31 5-dec-94 Added check/allocate region code.
124 0.32 16-jan-95 Broadcast packet fix.
125 0.33 10-Feb-95 Fix recognition bug reported by <bkm@star.rl.ac.uk>.
126 0.40 27-Dec-95 Rationalise MODULE and autoprobe code.
127 Rewrite for portability & updated.
128 ALPHA support from <jestabro@amt.tay1.dec.com>
129 Added verify_area() calls in ewrk3_ioctl() from
130 suggestion by <heiko@colossus.escape.de>.
131 Add new multicasting code.
132 0.41 20-Jan-96 Fix IRQ set up problem reported by
133 <kenneth@bbs.sas.ntu.ac.sg>.
134 0.42 22-Apr-96 Fix alloc_device() bug <jari@markkus2.fimr.fi>
135 0.43 16-Aug-96 Update alloc_device() to conform to de4x5.c
136 0.44 08-Nov-01 use library crc32 functions <Matt_Domsch@dell.com>
137 0.45 19-Jul-02 fix unaligned access on alpha <martin@bruli.net>
138 0.46 10-Oct-02 Multiple NIC support when module <akropel1@rochester.rr.com>
139 0.47 18-Oct-02 ethtool support <akropel1@rochester.rr.com>
140 0.48 18-Oct-02 cli/sti removal for 2.5 <vda@port.imtp.ilyichevsk.odessa.ua>
141 ioctl locking, signature search cleanup <akropel1@rochester.rr.com>
143 =========================================================================
146 #include <linux/module.h>
147 #include <linux/kernel.h>
148 #include <linux/string.h>
149 #include <linux/errno.h>
150 #include <linux/ioport.h>
151 #include <linux/slab.h>
152 #include <linux/interrupt.h>
153 #include <linux/delay.h>
154 #include <linux/init.h>
155 #include <linux/crc32.h>
156 #include <linux/netdevice.h>
157 #include <linux/etherdevice.h>
158 #include <linux/skbuff.h>
159 #include <linux/ethtool.h>
160 #include <linux/time.h>
161 #include <linux/types.h>
162 #include <linux/unistd.h>
163 #include <linux/ctype.h>
164 #include <linux/bitops.h>
166 #include <asm/io.h>
167 #include <asm/dma.h>
168 #include <asm/uaccess.h>
170 #include "ewrk3.h"
172 #define DRV_NAME "ewrk3"
173 #define DRV_VERSION "0.48"
175 static char version[] __initdata =
176 DRV_NAME ":v" DRV_VERSION " 2002/10/18 davies@maniac.ultranet.com\n";
178 #ifdef EWRK3_DEBUG
179 static int ewrk3_debug = EWRK3_DEBUG;
180 #else
181 static int ewrk3_debug = 1;
182 #endif
184 #define EWRK3_NDA 0xffe0 /* No Device Address */
186 #define PROBE_LENGTH 32
187 #define ETH_PROM_SIG 0xAA5500FFUL
189 #ifndef EWRK3_SIGNATURE
190 #define EWRK3_SIGNATURE {"DE203","DE204","DE205",""}
191 #define EWRK3_STRLEN 8
192 #endif
194 #ifndef EWRK3_RAM_BASE_ADDRESSES
195 #define EWRK3_RAM_BASE_ADDRESSES {0xc0000,0xd0000,0x00000}
196 #endif
199 ** Sets up the I/O area for the autoprobe.
201 #define EWRK3_IO_BASE 0x100 /* Start address for probe search */
202 #define EWRK3_IOP_INC 0x20 /* I/O address increment */
203 #define EWRK3_TOTAL_SIZE 0x20 /* required I/O address length */
205 #ifndef MAX_NUM_EWRK3S
206 #define MAX_NUM_EWRK3S 21
207 #endif
209 #ifndef EWRK3_EISA_IO_PORTS
210 #define EWRK3_EISA_IO_PORTS 0x0c00 /* I/O port base address, slot 0 */
211 #endif
213 #ifndef MAX_EISA_SLOTS
214 #define MAX_EISA_SLOTS 16
215 #define EISA_SLOT_INC 0x1000
216 #endif
218 #define QUEUE_PKT_TIMEOUT (1*HZ) /* Jiffies */
221 ** EtherWORKS 3 shared memory window sizes
223 #define IO_ONLY 0x00
224 #define SHMEM_2K 0x800
225 #define SHMEM_32K 0x8000
226 #define SHMEM_64K 0x10000
229 ** EtherWORKS 3 IRQ ENABLE/DISABLE
231 #define ENABLE_IRQs { \
232 icr |= lp->irq_mask;\
233 outb(icr, EWRK3_ICR); /* Enable the IRQs */\
236 #define DISABLE_IRQs { \
237 icr = inb(EWRK3_ICR);\
238 icr &= ~lp->irq_mask;\
239 outb(icr, EWRK3_ICR); /* Disable the IRQs */\
243 ** EtherWORKS 3 START/STOP
245 #define START_EWRK3 { \
246 csr = inb(EWRK3_CSR);\
247 csr &= ~(CSR_TXD|CSR_RXD);\
248 outb(csr, EWRK3_CSR); /* Enable the TX and/or RX */\
251 #define STOP_EWRK3 { \
252 csr = (CSR_TXD|CSR_RXD);\
253 outb(csr, EWRK3_CSR); /* Disable the TX and/or RX */\
257 ** The EtherWORKS 3 private structure
259 #define EWRK3_PKT_STAT_SZ 16
260 #define EWRK3_PKT_BIN_SZ 128 /* Should be >=100 unless you
261 increase EWRK3_PKT_STAT_SZ */
263 struct ewrk3_stats {
264 u32 bins[EWRK3_PKT_STAT_SZ];
265 u32 unicast;
266 u32 multicast;
267 u32 broadcast;
268 u32 excessive_collisions;
269 u32 tx_underruns;
270 u32 excessive_underruns;
273 struct ewrk3_private {
274 char adapter_name[80]; /* Name exported to /proc/ioports */
275 u_long shmem_base; /* Shared memory start address */
276 void __iomem *shmem;
277 u_long shmem_length; /* Shared memory window length */
278 struct ewrk3_stats pktStats; /* Private stats counters */
279 u_char irq_mask; /* Adapter IRQ mask bits */
280 u_char mPage; /* Maximum 2kB Page number */
281 u_char lemac; /* Chip rev. level */
282 u_char hard_strapped; /* Don't allow a full open */
283 u_char txc; /* Transmit cut through */
284 void __iomem *mctbl; /* Pointer to the multicast table */
285 u_char led_mask; /* Used to reserve LED access for ethtool */
286 spinlock_t hw_lock;
290 ** Force the EtherWORKS 3 card to be in 2kB MODE
292 #define FORCE_2K_MODE { \
293 shmem_length = SHMEM_2K;\
294 outb(((mem_start - 0x80000) >> 11), EWRK3_MBR);\
298 ** Public Functions
300 static int ewrk3_open(struct net_device *dev);
301 static int ewrk3_queue_pkt(struct sk_buff *skb, struct net_device *dev);
302 static irqreturn_t ewrk3_interrupt(int irq, void *dev_id);
303 static int ewrk3_close(struct net_device *dev);
304 static void set_multicast_list(struct net_device *dev);
305 static int ewrk3_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
306 static const struct ethtool_ops ethtool_ops_203;
307 static const struct ethtool_ops ethtool_ops;
310 ** Private functions
312 static int ewrk3_hw_init(struct net_device *dev, u_long iobase);
313 static void ewrk3_init(struct net_device *dev);
314 static int ewrk3_rx(struct net_device *dev);
315 static int ewrk3_tx(struct net_device *dev);
316 static void ewrk3_timeout(struct net_device *dev);
318 static void EthwrkSignature(char *name, char *eeprom_image);
319 static int DevicePresent(u_long iobase);
320 static void SetMulticastFilter(struct net_device *dev);
321 static int EISA_signature(char *name, s32 eisa_id);
323 static int Read_EEPROM(u_long iobase, u_char eaddr);
324 static int Write_EEPROM(short data, u_long iobase, u_char eaddr);
325 static u_char get_hw_addr(struct net_device *dev, u_char * eeprom_image, char chipType);
327 static int ewrk3_probe1(struct net_device *dev, u_long iobase, int irq);
328 static int isa_probe(struct net_device *dev, u_long iobase);
329 static int eisa_probe(struct net_device *dev, u_long iobase);
331 static u_char irq[MAX_NUM_EWRK3S+1] = {5, 0, 10, 3, 11, 9, 15, 12};
333 static char name[EWRK3_STRLEN + 1];
334 static int num_ewrks3s;
337 ** Miscellaneous defines...
339 #define INIT_EWRK3 {\
340 outb(EEPROM_INIT, EWRK3_IOPR);\
341 mdelay(1);\
344 #ifndef MODULE
345 struct net_device * __init ewrk3_probe(int unit)
347 struct net_device *dev = alloc_etherdev(sizeof(struct ewrk3_private));
348 int err;
350 if (!dev)
351 return ERR_PTR(-ENOMEM);
353 if (unit >= 0) {
354 sprintf(dev->name, "eth%d", unit);
355 netdev_boot_setup_check(dev);
358 err = ewrk3_probe1(dev, dev->base_addr, dev->irq);
359 if (err)
360 goto out;
361 return dev;
362 out:
363 free_netdev(dev);
364 return ERR_PTR(err);
367 #endif
369 static int __init ewrk3_probe1(struct net_device *dev, u_long iobase, int irq)
371 int err;
373 dev->base_addr = iobase;
374 dev->irq = irq;
376 /* Address PROM pattern */
377 err = isa_probe(dev, iobase);
378 if (err != 0)
379 err = eisa_probe(dev, iobase);
381 if (err)
382 return err;
384 err = register_netdev(dev);
385 if (err)
386 release_region(dev->base_addr, EWRK3_TOTAL_SIZE);
388 return err;
391 static int __init
392 ewrk3_hw_init(struct net_device *dev, u_long iobase)
394 struct ewrk3_private *lp;
395 int i, status = 0;
396 u_long mem_start, shmem_length;
397 u_char cr, cmr, icr, nicsr, lemac, hard_strapped = 0;
398 u_char eeprom_image[EEPROM_MAX], chksum, eisa_cr = 0;
401 ** Stop the EWRK3. Enable the DBR ROM. Disable interrupts and remote boot.
402 ** This also disables the EISA_ENABLE bit in the EISA Control Register.
404 if (iobase > 0x400)
405 eisa_cr = inb(EISA_CR);
406 INIT_EWRK3;
408 nicsr = inb(EWRK3_CSR);
410 icr = inb(EWRK3_ICR);
411 icr &= 0x70;
412 outb(icr, EWRK3_ICR); /* Disable all the IRQs */
414 if (nicsr != (CSR_TXD | CSR_RXD))
415 return -ENXIO;
417 /* Check that the EEPROM is alive and well and not living on Pluto... */
418 for (chksum = 0, i = 0; i < EEPROM_MAX; i += 2) {
419 union {
420 short val;
421 char c[2];
422 } tmp;
424 tmp.val = (short) Read_EEPROM(iobase, (i >> 1));
425 eeprom_image[i] = tmp.c[0];
426 eeprom_image[i + 1] = tmp.c[1];
427 chksum += eeprom_image[i] + eeprom_image[i + 1];
430 if (chksum != 0) { /* Bad EEPROM Data! */
431 printk("%s: Device has a bad on-board EEPROM.\n", dev->name);
432 return -ENXIO;
435 EthwrkSignature(name, eeprom_image);
436 if (*name == '\0')
437 return -ENXIO;
439 dev->base_addr = iobase;
441 if (iobase > 0x400) {
442 outb(eisa_cr, EISA_CR); /* Rewrite the EISA CR */
444 lemac = eeprom_image[EEPROM_CHIPVER];
445 cmr = inb(EWRK3_CMR);
447 if (((lemac == LeMAC) && ((cmr & CMR_NO_EEPROM) != CMR_NO_EEPROM)) ||
448 ((lemac == LeMAC2) && !(cmr & CMR_HS))) {
449 printk("%s: %s at %#4lx", dev->name, name, iobase);
450 hard_strapped = 1;
451 } else if ((iobase & 0x0fff) == EWRK3_EISA_IO_PORTS) {
452 /* EISA slot address */
453 printk("%s: %s at %#4lx (EISA slot %ld)",
454 dev->name, name, iobase, ((iobase >> 12) & 0x0f));
455 } else { /* ISA port address */
456 printk("%s: %s at %#4lx", dev->name, name, iobase);
459 printk(", h/w address ");
460 if (lemac != LeMAC2)
461 DevicePresent(iobase); /* need after EWRK3_INIT */
462 status = get_hw_addr(dev, eeprom_image, lemac);
463 printk("%pM\n", dev->dev_addr);
465 if (status) {
466 printk(" which has an EEPROM CRC error.\n");
467 return -ENXIO;
470 if (lemac == LeMAC2) { /* Special LeMAC2 CMR things */
471 cmr &= ~(CMR_RA | CMR_WB | CMR_LINK | CMR_POLARITY | CMR_0WS);
472 if (eeprom_image[EEPROM_MISC0] & READ_AHEAD)
473 cmr |= CMR_RA;
474 if (eeprom_image[EEPROM_MISC0] & WRITE_BEHIND)
475 cmr |= CMR_WB;
476 if (eeprom_image[EEPROM_NETMAN0] & NETMAN_POL)
477 cmr |= CMR_POLARITY;
478 if (eeprom_image[EEPROM_NETMAN0] & NETMAN_LINK)
479 cmr |= CMR_LINK;
480 if (eeprom_image[EEPROM_MISC0] & _0WS_ENA)
481 cmr |= CMR_0WS;
483 if (eeprom_image[EEPROM_SETUP] & SETUP_DRAM)
484 cmr |= CMR_DRAM;
485 outb(cmr, EWRK3_CMR);
487 cr = inb(EWRK3_CR); /* Set up the Control Register */
488 cr |= eeprom_image[EEPROM_SETUP] & SETUP_APD;
489 if (cr & SETUP_APD)
490 cr |= eeprom_image[EEPROM_SETUP] & SETUP_PS;
491 cr |= eeprom_image[EEPROM_MISC0] & FAST_BUS;
492 cr |= eeprom_image[EEPROM_MISC0] & ENA_16;
493 outb(cr, EWRK3_CR);
496 ** Determine the base address and window length for the EWRK3
497 ** RAM from the memory base register.
499 mem_start = inb(EWRK3_MBR);
500 shmem_length = 0;
501 if (mem_start != 0) {
502 if ((mem_start >= 0x0a) && (mem_start <= 0x0f)) {
503 mem_start *= SHMEM_64K;
504 shmem_length = SHMEM_64K;
505 } else if ((mem_start >= 0x14) && (mem_start <= 0x1f)) {
506 mem_start *= SHMEM_32K;
507 shmem_length = SHMEM_32K;
508 } else if ((mem_start >= 0x40) && (mem_start <= 0xff)) {
509 mem_start = mem_start * SHMEM_2K + 0x80000;
510 shmem_length = SHMEM_2K;
511 } else {
512 return -ENXIO;
516 ** See the top of this source code for comments about
517 ** uncommenting this line.
519 /* FORCE_2K_MODE; */
521 if (hard_strapped) {
522 printk(" is hard strapped.\n");
523 } else if (mem_start) {
524 printk(" has a %dk RAM window", (int) (shmem_length >> 10));
525 printk(" at 0x%.5lx", mem_start);
526 } else {
527 printk(" is in I/O only mode");
530 lp = netdev_priv(dev);
531 lp->shmem_base = mem_start;
532 lp->shmem = ioremap(mem_start, shmem_length);
533 if (!lp->shmem)
534 return -ENOMEM;
535 lp->shmem_length = shmem_length;
536 lp->lemac = lemac;
537 lp->hard_strapped = hard_strapped;
538 lp->led_mask = CR_LED;
539 spin_lock_init(&lp->hw_lock);
541 lp->mPage = 64;
542 if (cmr & CMR_DRAM)
543 lp->mPage <<= 1; /* 2 DRAMS on module */
545 sprintf(lp->adapter_name, "%s (%s)", name, dev->name);
547 lp->irq_mask = ICR_TNEM | ICR_TXDM | ICR_RNEM | ICR_RXDM;
549 if (!hard_strapped) {
551 ** Enable EWRK3 board interrupts for autoprobing
553 icr |= ICR_IE; /* Enable interrupts */
554 outb(icr, EWRK3_ICR);
556 /* The DMA channel may be passed in on this parameter. */
557 dev->dma = 0;
559 /* To auto-IRQ we enable the initialization-done and DMA err,
560 interrupts. For now we will always get a DMA error. */
561 if (dev->irq < 2) {
562 #ifndef MODULE
563 u_char irqnum;
564 unsigned long irq_mask;
567 irq_mask = probe_irq_on();
570 ** Trigger a TNE interrupt.
572 icr |= ICR_TNEM;
573 outb(1, EWRK3_TDQ); /* Write to the TX done queue */
574 outb(icr, EWRK3_ICR); /* Unmask the TXD interrupt */
576 irqnum = irq[((icr & IRQ_SEL) >> 4)];
578 mdelay(20);
579 dev->irq = probe_irq_off(irq_mask);
580 if ((dev->irq) && (irqnum == dev->irq)) {
581 printk(" and uses IRQ%d.\n", dev->irq);
582 } else {
583 if (!dev->irq) {
584 printk(" and failed to detect IRQ line.\n");
585 } else if ((irqnum == 1) && (lemac == LeMAC2)) {
586 printk(" and an illegal IRQ line detected.\n");
587 } else {
588 printk(", but incorrect IRQ line detected.\n");
590 iounmap(lp->shmem);
591 return -ENXIO;
594 DISABLE_IRQs; /* Mask all interrupts */
596 #endif /* MODULE */
597 } else {
598 printk(" and requires IRQ%d.\n", dev->irq);
602 if (ewrk3_debug > 1) {
603 printk(version);
605 /* The EWRK3-specific entries in the device structure. */
606 dev->open = ewrk3_open;
607 dev->hard_start_xmit = ewrk3_queue_pkt;
608 dev->stop = ewrk3_close;
609 dev->set_multicast_list = set_multicast_list;
610 dev->do_ioctl = ewrk3_ioctl;
611 if (lp->adapter_name[4] == '3')
612 SET_ETHTOOL_OPS(dev, &ethtool_ops_203);
613 else
614 SET_ETHTOOL_OPS(dev, &ethtool_ops);
615 dev->tx_timeout = ewrk3_timeout;
616 dev->watchdog_timeo = QUEUE_PKT_TIMEOUT;
618 dev->mem_start = 0;
620 return 0;
624 static int ewrk3_open(struct net_device *dev)
626 struct ewrk3_private *lp = netdev_priv(dev);
627 u_long iobase = dev->base_addr;
628 int status = 0;
629 u_char icr, csr;
632 ** Stop the TX and RX...
634 STOP_EWRK3;
636 if (!lp->hard_strapped) {
637 if (request_irq(dev->irq, (void *) ewrk3_interrupt, 0, "ewrk3", dev)) {
638 printk("ewrk3_open(): Requested IRQ%d is busy\n", dev->irq);
639 status = -EAGAIN;
640 } else {
643 ** Re-initialize the EWRK3...
645 ewrk3_init(dev);
647 if (ewrk3_debug > 1) {
648 printk("%s: ewrk3 open with irq %d\n", dev->name, dev->irq);
649 printk(" physical address: %pM\n", dev->dev_addr);
650 if (lp->shmem_length == 0) {
651 printk(" no shared memory, I/O only mode\n");
652 } else {
653 printk(" start of shared memory: 0x%08lx\n", lp->shmem_base);
654 printk(" window length: 0x%04lx\n", lp->shmem_length);
656 printk(" # of DRAMS: %d\n", ((inb(EWRK3_CMR) & 0x02) ? 2 : 1));
657 printk(" csr: 0x%02x\n", inb(EWRK3_CSR));
658 printk(" cr: 0x%02x\n", inb(EWRK3_CR));
659 printk(" icr: 0x%02x\n", inb(EWRK3_ICR));
660 printk(" cmr: 0x%02x\n", inb(EWRK3_CMR));
661 printk(" fmqc: 0x%02x\n", inb(EWRK3_FMQC));
663 netif_start_queue(dev);
665 ** Unmask EWRK3 board interrupts
667 icr = inb(EWRK3_ICR);
668 ENABLE_IRQs;
671 } else {
672 printk(KERN_ERR "%s: ewrk3 available for hard strapped set up only.\n", dev->name);
673 printk(KERN_ERR " Run the 'ewrk3setup' utility or remove the hard straps.\n");
674 return -EINVAL;
677 return status;
681 ** Initialize the EtherWORKS 3 operating conditions
683 static void ewrk3_init(struct net_device *dev)
685 struct ewrk3_private *lp = netdev_priv(dev);
686 u_char csr, page;
687 u_long iobase = dev->base_addr;
688 int i;
691 ** Enable any multicasts
693 set_multicast_list(dev);
696 ** Set hardware MAC address. Address is initialized from the EEPROM
697 ** during startup but may have since been changed by the user.
699 for (i=0; i<ETH_ALEN; i++)
700 outb(dev->dev_addr[i], EWRK3_PAR0 + i);
703 ** Clean out any remaining entries in all the queues here
705 while (inb(EWRK3_TQ));
706 while (inb(EWRK3_TDQ));
707 while (inb(EWRK3_RQ));
708 while (inb(EWRK3_FMQ));
711 ** Write a clean free memory queue
713 for (page = 1; page < lp->mPage; page++) { /* Write the free page numbers */
714 outb(page, EWRK3_FMQ); /* to the Free Memory Queue */
717 START_EWRK3; /* Enable the TX and/or RX */
721 * Transmit timeout
724 static void ewrk3_timeout(struct net_device *dev)
726 struct ewrk3_private *lp = netdev_priv(dev);
727 u_char icr, csr;
728 u_long iobase = dev->base_addr;
730 if (!lp->hard_strapped)
732 printk(KERN_WARNING"%s: transmit timed/locked out, status %04x, resetting.\n",
733 dev->name, inb(EWRK3_CSR));
736 ** Mask all board interrupts
738 DISABLE_IRQs;
741 ** Stop the TX and RX...
743 STOP_EWRK3;
745 ewrk3_init(dev);
748 ** Unmask EWRK3 board interrupts
750 ENABLE_IRQs;
752 dev->trans_start = jiffies;
753 netif_wake_queue(dev);
758 ** Writes a socket buffer to the free page queue
760 static int ewrk3_queue_pkt (struct sk_buff *skb, struct net_device *dev)
762 struct ewrk3_private *lp = netdev_priv(dev);
763 u_long iobase = dev->base_addr;
764 void __iomem *buf = NULL;
765 u_char icr;
766 u_char page;
768 spin_lock_irq (&lp->hw_lock);
769 DISABLE_IRQs;
771 /* if no resources available, exit, request packet be queued */
772 if (inb (EWRK3_FMQC) == 0) {
773 printk (KERN_WARNING "%s: ewrk3_queue_pkt(): No free resources...\n",
774 dev->name);
775 printk (KERN_WARNING "%s: ewrk3_queue_pkt(): CSR: %02x ICR: %02x FMQC: %02x\n",
776 dev->name, inb (EWRK3_CSR), inb (EWRK3_ICR),
777 inb (EWRK3_FMQC));
778 goto err_out;
782 ** Get a free page from the FMQ
784 if ((page = inb (EWRK3_FMQ)) >= lp->mPage) {
785 printk ("ewrk3_queue_pkt(): Invalid free memory page (%d).\n",
786 (u_char) page);
787 goto err_out;
792 ** Set up shared memory window and pointer into the window
794 if (lp->shmem_length == IO_ONLY) {
795 outb (page, EWRK3_IOPR);
796 } else if (lp->shmem_length == SHMEM_2K) {
797 buf = lp->shmem;
798 outb (page, EWRK3_MPR);
799 } else if (lp->shmem_length == SHMEM_32K) {
800 buf = (((short) page << 11) & 0x7800) + lp->shmem;
801 outb ((page >> 4), EWRK3_MPR);
802 } else if (lp->shmem_length == SHMEM_64K) {
803 buf = (((short) page << 11) & 0xf800) + lp->shmem;
804 outb ((page >> 5), EWRK3_MPR);
805 } else {
806 printk (KERN_ERR "%s: Oops - your private data area is hosed!\n",
807 dev->name);
808 BUG ();
812 ** Set up the buffer control structures and copy the data from
813 ** the socket buffer to the shared memory .
815 if (lp->shmem_length == IO_ONLY) {
816 int i;
817 u_char *p = skb->data;
818 outb ((char) (TCR_QMODE | TCR_PAD | TCR_IFC), EWRK3_DATA);
819 outb ((char) (skb->len & 0xff), EWRK3_DATA);
820 outb ((char) ((skb->len >> 8) & 0xff), EWRK3_DATA);
821 outb ((char) 0x04, EWRK3_DATA);
822 for (i = 0; i < skb->len; i++) {
823 outb (*p++, EWRK3_DATA);
825 outb (page, EWRK3_TQ); /* Start sending pkt */
826 } else {
827 writeb ((char) (TCR_QMODE | TCR_PAD | TCR_IFC), buf); /* ctrl byte */
828 buf += 1;
829 writeb ((char) (skb->len & 0xff), buf); /* length (16 bit xfer) */
830 buf += 1;
831 if (lp->txc) {
832 writeb(((skb->len >> 8) & 0xff) | XCT, buf);
833 buf += 1;
834 writeb (0x04, buf); /* index byte */
835 buf += 1;
836 writeb (0x00, (buf + skb->len)); /* Write the XCT flag */
837 memcpy_toio (buf, skb->data, PRELOAD); /* Write PRELOAD bytes */
838 outb (page, EWRK3_TQ); /* Start sending pkt */
839 memcpy_toio (buf + PRELOAD,
840 skb->data + PRELOAD,
841 skb->len - PRELOAD);
842 writeb (0xff, (buf + skb->len)); /* Write the XCT flag */
843 } else {
844 writeb ((skb->len >> 8) & 0xff, buf);
845 buf += 1;
846 writeb (0x04, buf); /* index byte */
847 buf += 1;
848 memcpy_toio (buf, skb->data, skb->len); /* Write data bytes */
849 outb (page, EWRK3_TQ); /* Start sending pkt */
853 ENABLE_IRQs;
854 spin_unlock_irq (&lp->hw_lock);
856 dev->stats.tx_bytes += skb->len;
857 dev->trans_start = jiffies;
858 dev_kfree_skb (skb);
860 /* Check for free resources: stop Tx queue if there are none */
861 if (inb (EWRK3_FMQC) == 0)
862 netif_stop_queue (dev);
864 return 0;
866 err_out:
867 ENABLE_IRQs;
868 spin_unlock_irq (&lp->hw_lock);
869 return 1;
873 ** The EWRK3 interrupt handler.
875 static irqreturn_t ewrk3_interrupt(int irq, void *dev_id)
877 struct net_device *dev = dev_id;
878 struct ewrk3_private *lp;
879 u_long iobase;
880 u_char icr, cr, csr;
882 lp = netdev_priv(dev);
883 iobase = dev->base_addr;
885 /* get the interrupt information */
886 csr = inb(EWRK3_CSR);
889 ** Mask the EWRK3 board interrupts and turn on the LED
891 spin_lock(&lp->hw_lock);
892 DISABLE_IRQs;
894 cr = inb(EWRK3_CR);
895 cr |= lp->led_mask;
896 outb(cr, EWRK3_CR);
898 if (csr & CSR_RNE) /* Rx interrupt (packet[s] arrived) */
899 ewrk3_rx(dev);
901 if (csr & CSR_TNE) /* Tx interrupt (packet sent) */
902 ewrk3_tx(dev);
905 ** Now deal with the TX/RX disable flags. These are set when there
906 ** are no more resources. If resources free up then enable these
907 ** interrupts, otherwise mask them - failure to do this will result
908 ** in the system hanging in an interrupt loop.
910 if (inb(EWRK3_FMQC)) { /* any resources available? */
911 lp->irq_mask |= ICR_TXDM | ICR_RXDM; /* enable the interrupt source */
912 csr &= ~(CSR_TXD | CSR_RXD); /* ensure restart of a stalled TX or RX */
913 outb(csr, EWRK3_CSR);
914 netif_wake_queue(dev);
915 } else {
916 lp->irq_mask &= ~(ICR_TXDM | ICR_RXDM); /* disable the interrupt source */
919 /* Unmask the EWRK3 board interrupts and turn off the LED */
920 cr &= ~(lp->led_mask);
921 outb(cr, EWRK3_CR);
922 ENABLE_IRQs;
923 spin_unlock(&lp->hw_lock);
924 return IRQ_HANDLED;
927 /* Called with lp->hw_lock held */
928 static int ewrk3_rx(struct net_device *dev)
930 struct ewrk3_private *lp = netdev_priv(dev);
931 u_long iobase = dev->base_addr;
932 int i, status = 0;
933 u_char page;
934 void __iomem *buf = NULL;
936 while (inb(EWRK3_RQC) && !status) { /* Whilst there's incoming data */
937 if ((page = inb(EWRK3_RQ)) < lp->mPage) { /* Get next entry's buffer page */
939 ** Set up shared memory window and pointer into the window
941 if (lp->shmem_length == IO_ONLY) {
942 outb(page, EWRK3_IOPR);
943 } else if (lp->shmem_length == SHMEM_2K) {
944 buf = lp->shmem;
945 outb(page, EWRK3_MPR);
946 } else if (lp->shmem_length == SHMEM_32K) {
947 buf = (((short) page << 11) & 0x7800) + lp->shmem;
948 outb((page >> 4), EWRK3_MPR);
949 } else if (lp->shmem_length == SHMEM_64K) {
950 buf = (((short) page << 11) & 0xf800) + lp->shmem;
951 outb((page >> 5), EWRK3_MPR);
952 } else {
953 status = -1;
954 printk("%s: Oops - your private data area is hosed!\n", dev->name);
957 if (!status) {
958 char rx_status;
959 int pkt_len;
961 if (lp->shmem_length == IO_ONLY) {
962 rx_status = inb(EWRK3_DATA);
963 pkt_len = inb(EWRK3_DATA);
964 pkt_len |= ((u_short) inb(EWRK3_DATA) << 8);
965 } else {
966 rx_status = readb(buf);
967 buf += 1;
968 pkt_len = readw(buf);
969 buf += 3;
972 if (!(rx_status & R_ROK)) { /* There was an error. */
973 dev->stats.rx_errors++; /* Update the error stats. */
974 if (rx_status & R_DBE)
975 dev->stats.rx_frame_errors++;
976 if (rx_status & R_CRC)
977 dev->stats.rx_crc_errors++;
978 if (rx_status & R_PLL)
979 dev->stats.rx_fifo_errors++;
980 } else {
981 struct sk_buff *skb;
983 if ((skb = dev_alloc_skb(pkt_len + 2)) != NULL) {
984 unsigned char *p;
985 skb_reserve(skb, 2); /* Align to 16 bytes */
986 p = skb_put(skb, pkt_len);
988 if (lp->shmem_length == IO_ONLY) {
989 *p = inb(EWRK3_DATA); /* dummy read */
990 for (i = 0; i < pkt_len; i++) {
991 *p++ = inb(EWRK3_DATA);
993 } else {
994 memcpy_fromio(p, buf, pkt_len);
997 for (i = 1; i < EWRK3_PKT_STAT_SZ - 1; i++) {
998 if (pkt_len < i * EWRK3_PKT_BIN_SZ) {
999 lp->pktStats.bins[i]++;
1000 i = EWRK3_PKT_STAT_SZ;
1003 p = skb->data; /* Look at the dest addr */
1004 if (p[0] & 0x01) { /* Multicast/Broadcast */
1005 if ((*(s16 *) & p[0] == -1) && (*(s16 *) & p[2] == -1) && (*(s16 *) & p[4] == -1)) {
1006 lp->pktStats.broadcast++;
1007 } else {
1008 lp->pktStats.multicast++;
1010 } else if ((*(s16 *) & p[0] == *(s16 *) & dev->dev_addr[0]) &&
1011 (*(s16 *) & p[2] == *(s16 *) & dev->dev_addr[2]) &&
1012 (*(s16 *) & p[4] == *(s16 *) & dev->dev_addr[4])) {
1013 lp->pktStats.unicast++;
1015 lp->pktStats.bins[0]++; /* Duplicates stats.rx_packets */
1016 if (lp->pktStats.bins[0] == 0) { /* Reset counters */
1017 memset(&lp->pktStats, 0, sizeof(lp->pktStats));
1020 ** Notify the upper protocol layers that there is another
1021 ** packet to handle
1023 skb->protocol = eth_type_trans(skb, dev);
1024 netif_rx(skb);
1027 ** Update stats
1029 dev->stats.rx_packets++;
1030 dev->stats.rx_bytes += pkt_len;
1031 } else {
1032 printk("%s: Insufficient memory; nuking packet.\n", dev->name);
1033 dev->stats.rx_dropped++; /* Really, deferred. */
1034 break;
1039 ** Return the received buffer to the free memory queue
1041 outb(page, EWRK3_FMQ);
1042 } else {
1043 printk("ewrk3_rx(): Illegal page number, page %d\n", page);
1044 printk("ewrk3_rx(): CSR: %02x ICR: %02x FMQC: %02x\n", inb(EWRK3_CSR), inb(EWRK3_ICR), inb(EWRK3_FMQC));
1047 return status;
1051 ** Buffer sent - check for TX buffer errors.
1052 ** Called with lp->hw_lock held
1054 static int ewrk3_tx(struct net_device *dev)
1056 struct ewrk3_private *lp = netdev_priv(dev);
1057 u_long iobase = dev->base_addr;
1058 u_char tx_status;
1060 while ((tx_status = inb(EWRK3_TDQ)) > 0) { /* Whilst there's old buffers */
1061 if (tx_status & T_VSTS) { /* The status is valid */
1062 if (tx_status & T_TXE) {
1063 dev->stats.tx_errors++;
1064 if (tx_status & T_NCL)
1065 dev->stats.tx_carrier_errors++;
1066 if (tx_status & T_LCL)
1067 dev->stats.tx_window_errors++;
1068 if (tx_status & T_CTU) {
1069 if ((tx_status & T_COLL) ^ T_XUR) {
1070 lp->pktStats.tx_underruns++;
1071 } else {
1072 lp->pktStats.excessive_underruns++;
1074 } else if (tx_status & T_COLL) {
1075 if ((tx_status & T_COLL) ^ T_XCOLL) {
1076 dev->stats.collisions++;
1077 } else {
1078 lp->pktStats.excessive_collisions++;
1081 } else {
1082 dev->stats.tx_packets++;
1087 return 0;
1090 static int ewrk3_close(struct net_device *dev)
1092 struct ewrk3_private *lp = netdev_priv(dev);
1093 u_long iobase = dev->base_addr;
1094 u_char icr, csr;
1096 netif_stop_queue(dev);
1098 if (ewrk3_debug > 1) {
1099 printk("%s: Shutting down ethercard, status was %2.2x.\n",
1100 dev->name, inb(EWRK3_CSR));
1103 ** We stop the EWRK3 here... mask interrupts and stop TX & RX
1105 DISABLE_IRQs;
1107 STOP_EWRK3;
1110 ** Clean out the TX and RX queues here (note that one entry
1111 ** may get added to either the TXD or RX queues if the TX or RX
1112 ** just starts processing a packet before the STOP_EWRK3 command
1113 ** is received. This will be flushed in the ewrk3_open() call).
1115 while (inb(EWRK3_TQ));
1116 while (inb(EWRK3_TDQ));
1117 while (inb(EWRK3_RQ));
1119 if (!lp->hard_strapped) {
1120 free_irq(dev->irq, dev);
1122 return 0;
1126 ** Set or clear the multicast filter for this adapter.
1128 static void set_multicast_list(struct net_device *dev)
1130 struct ewrk3_private *lp = netdev_priv(dev);
1131 u_long iobase = dev->base_addr;
1132 u_char csr;
1134 csr = inb(EWRK3_CSR);
1136 if (lp->shmem_length == IO_ONLY) {
1137 lp->mctbl = NULL;
1138 } else {
1139 lp->mctbl = lp->shmem + PAGE0_HTE;
1142 csr &= ~(CSR_PME | CSR_MCE);
1143 if (dev->flags & IFF_PROMISC) { /* set promiscuous mode */
1144 csr |= CSR_PME;
1145 outb(csr, EWRK3_CSR);
1146 } else {
1147 SetMulticastFilter(dev);
1148 csr |= CSR_MCE;
1149 outb(csr, EWRK3_CSR);
1154 ** Calculate the hash code and update the logical address filter
1155 ** from a list of ethernet multicast addresses.
1156 ** Little endian crc one liner from Matt Thomas, DEC.
1158 ** Note that when clearing the table, the broadcast bit must remain asserted
1159 ** to receive broadcast messages.
1161 static void SetMulticastFilter(struct net_device *dev)
1163 struct ewrk3_private *lp = netdev_priv(dev);
1164 struct dev_mc_list *dmi = dev->mc_list;
1165 u_long iobase = dev->base_addr;
1166 int i;
1167 char *addrs, bit, byte;
1168 short __iomem *p = lp->mctbl;
1169 u16 hashcode;
1170 u32 crc;
1172 spin_lock_irq(&lp->hw_lock);
1174 if (lp->shmem_length == IO_ONLY) {
1175 outb(0, EWRK3_IOPR);
1176 outw(PAGE0_HTE, EWRK3_PIR1);
1177 } else {
1178 outb(0, EWRK3_MPR);
1181 if (dev->flags & IFF_ALLMULTI) {
1182 for (i = 0; i < (HASH_TABLE_LEN >> 3); i++) {
1183 if (lp->shmem_length == IO_ONLY) {
1184 outb(0xff, EWRK3_DATA);
1185 } else { /* memset didn't work here */
1186 writew(0xffff, p);
1187 p++;
1188 i++;
1191 } else {
1192 /* Clear table except for broadcast bit */
1193 if (lp->shmem_length == IO_ONLY) {
1194 for (i = 0; i < (HASH_TABLE_LEN >> 4) - 1; i++) {
1195 outb(0x00, EWRK3_DATA);
1197 outb(0x80, EWRK3_DATA);
1198 i++; /* insert the broadcast bit */
1199 for (; i < (HASH_TABLE_LEN >> 3); i++) {
1200 outb(0x00, EWRK3_DATA);
1202 } else {
1203 memset_io(lp->mctbl, 0, HASH_TABLE_LEN >> 3);
1204 writeb(0x80, lp->mctbl + (HASH_TABLE_LEN >> 4) - 1);
1207 /* Update table */
1208 for (i = 0; i < dev->mc_count; i++) { /* for each address in the list */
1209 addrs = dmi->dmi_addr;
1210 dmi = dmi->next;
1211 if ((*addrs & 0x01) == 1) { /* multicast address? */
1212 crc = ether_crc_le(ETH_ALEN, addrs);
1213 hashcode = crc & ((1 << 9) - 1); /* hashcode is 9 LSb of CRC */
1215 byte = hashcode >> 3; /* bit[3-8] -> byte in filter */
1216 bit = 1 << (hashcode & 0x07); /* bit[0-2] -> bit in byte */
1218 if (lp->shmem_length == IO_ONLY) {
1219 u_char tmp;
1221 outw(PAGE0_HTE + byte, EWRK3_PIR1);
1222 tmp = inb(EWRK3_DATA);
1223 tmp |= bit;
1224 outw(PAGE0_HTE + byte, EWRK3_PIR1);
1225 outb(tmp, EWRK3_DATA);
1226 } else {
1227 writeb(readb(lp->mctbl + byte) | bit, lp->mctbl + byte);
1233 spin_unlock_irq(&lp->hw_lock);
1237 ** ISA bus I/O device probe
1239 static int __init isa_probe(struct net_device *dev, u_long ioaddr)
1241 int i = num_ewrks3s, maxSlots;
1242 int ret = -ENODEV;
1244 u_long iobase;
1246 if (ioaddr >= 0x400)
1247 goto out;
1249 if (ioaddr == 0) { /* Autoprobing */
1250 iobase = EWRK3_IO_BASE; /* Get the first slot address */
1251 maxSlots = 24;
1252 } else { /* Probe a specific location */
1253 iobase = ioaddr;
1254 maxSlots = i + 1;
1257 for (; (i < maxSlots) && (dev != NULL);
1258 iobase += EWRK3_IOP_INC, i++)
1260 if (request_region(iobase, EWRK3_TOTAL_SIZE, DRV_NAME)) {
1261 if (DevicePresent(iobase) == 0) {
1262 int irq = dev->irq;
1263 ret = ewrk3_hw_init(dev, iobase);
1264 if (!ret)
1265 break;
1266 dev->irq = irq;
1268 release_region(iobase, EWRK3_TOTAL_SIZE);
1271 out:
1273 return ret;
1277 ** EISA bus I/O device probe. Probe from slot 1 since slot 0 is usually
1278 ** the motherboard.
1280 static int __init eisa_probe(struct net_device *dev, u_long ioaddr)
1282 int i, maxSlots;
1283 u_long iobase;
1284 int ret = -ENODEV;
1286 if (ioaddr < 0x1000)
1287 goto out;
1289 iobase = ioaddr;
1290 i = (ioaddr >> 12);
1291 maxSlots = i + 1;
1293 for (i = 1; (i < maxSlots) && (dev != NULL); i++, iobase += EISA_SLOT_INC) {
1294 if (EISA_signature(name, EISA_ID) == 0) {
1295 if (request_region(iobase, EWRK3_TOTAL_SIZE, DRV_NAME) &&
1296 DevicePresent(iobase) == 0) {
1297 int irq = dev->irq;
1298 ret = ewrk3_hw_init(dev, iobase);
1299 if (!ret)
1300 break;
1301 dev->irq = irq;
1303 release_region(iobase, EWRK3_TOTAL_SIZE);
1307 out:
1308 return ret;
1313 ** Read the EWRK3 EEPROM using this routine
1315 static int Read_EEPROM(u_long iobase, u_char eaddr)
1317 int i;
1319 outb((eaddr & 0x3f), EWRK3_PIR1); /* set up 6 bits of address info */
1320 outb(EEPROM_RD, EWRK3_IOPR); /* issue read command */
1321 for (i = 0; i < 5000; i++)
1322 inb(EWRK3_CSR); /* wait 1msec */
1324 return inw(EWRK3_EPROM1); /* 16 bits data return */
1328 ** Write the EWRK3 EEPROM using this routine
1330 static int Write_EEPROM(short data, u_long iobase, u_char eaddr)
1332 int i;
1334 outb(EEPROM_WR_EN, EWRK3_IOPR); /* issue write enable command */
1335 for (i = 0; i < 5000; i++)
1336 inb(EWRK3_CSR); /* wait 1msec */
1337 outw(data, EWRK3_EPROM1); /* write data to register */
1338 outb((eaddr & 0x3f), EWRK3_PIR1); /* set up 6 bits of address info */
1339 outb(EEPROM_WR, EWRK3_IOPR); /* issue write command */
1340 for (i = 0; i < 75000; i++)
1341 inb(EWRK3_CSR); /* wait 15msec */
1342 outb(EEPROM_WR_DIS, EWRK3_IOPR); /* issue write disable command */
1343 for (i = 0; i < 5000; i++)
1344 inb(EWRK3_CSR); /* wait 1msec */
1346 return 0;
1350 ** Look for a particular board name in the on-board EEPROM.
1352 static void __init EthwrkSignature(char *name, char *eeprom_image)
1354 int i;
1355 char *signatures[] = EWRK3_SIGNATURE;
1357 for (i=0; *signatures[i] != '\0'; i++)
1358 if( !strncmp(eeprom_image+EEPROM_PNAME7, signatures[i], strlen(signatures[i])) )
1359 break;
1361 if (*signatures[i] != '\0') {
1362 memcpy(name, eeprom_image+EEPROM_PNAME7, EWRK3_STRLEN);
1363 name[EWRK3_STRLEN] = '\0';
1364 } else
1365 name[0] = '\0';
1367 return;
1371 ** Look for a special sequence in the Ethernet station address PROM that
1372 ** is common across all EWRK3 products.
1374 ** Search the Ethernet address ROM for the signature. Since the ROM address
1375 ** counter can start at an arbitrary point, the search must include the entire
1376 ** probe sequence length plus the (length_of_the_signature - 1).
1377 ** Stop the search IMMEDIATELY after the signature is found so that the
1378 ** PROM address counter is correctly positioned at the start of the
1379 ** ethernet address for later read out.
1382 static int __init DevicePresent(u_long iobase)
1384 union {
1385 struct {
1386 u32 a;
1387 u32 b;
1388 } llsig;
1389 char Sig[sizeof(u32) << 1];
1391 dev;
1392 short sigLength;
1393 char data;
1394 int i, j, status = 0;
1396 dev.llsig.a = ETH_PROM_SIG;
1397 dev.llsig.b = ETH_PROM_SIG;
1398 sigLength = sizeof(u32) << 1;
1400 for (i = 0, j = 0; j < sigLength && i < PROBE_LENGTH + sigLength - 1; i++) {
1401 data = inb(EWRK3_APROM);
1402 if (dev.Sig[j] == data) { /* track signature */
1403 j++;
1404 } else { /* lost signature; begin search again */
1405 if (data == dev.Sig[0]) {
1406 j = 1;
1407 } else {
1408 j = 0;
1413 if (j != sigLength) {
1414 status = -ENODEV; /* search failed */
1416 return status;
1419 static u_char __init get_hw_addr(struct net_device *dev, u_char * eeprom_image, char chipType)
1421 int i, j, k;
1422 u_short chksum;
1423 u_char crc, lfsr, sd, status = 0;
1424 u_long iobase = dev->base_addr;
1425 u16 tmp;
1427 if (chipType == LeMAC2) {
1428 for (crc = 0x6a, j = 0; j < ETH_ALEN; j++) {
1429 sd = dev->dev_addr[j] = eeprom_image[EEPROM_PADDR0 + j];
1430 outb(dev->dev_addr[j], EWRK3_PAR0 + j);
1431 for (k = 0; k < 8; k++, sd >>= 1) {
1432 lfsr = ((((crc & 0x02) >> 1) ^ (crc & 0x01)) ^ (sd & 0x01)) << 7;
1433 crc = (crc >> 1) + lfsr;
1436 if (crc != eeprom_image[EEPROM_PA_CRC])
1437 status = -1;
1438 } else {
1439 for (i = 0, k = 0; i < ETH_ALEN;) {
1440 k <<= 1;
1441 if (k > 0xffff)
1442 k -= 0xffff;
1444 k += (u_char) (tmp = inb(EWRK3_APROM));
1445 dev->dev_addr[i] = (u_char) tmp;
1446 outb(dev->dev_addr[i], EWRK3_PAR0 + i);
1447 i++;
1448 k += (u_short) ((tmp = inb(EWRK3_APROM)) << 8);
1449 dev->dev_addr[i] = (u_char) tmp;
1450 outb(dev->dev_addr[i], EWRK3_PAR0 + i);
1451 i++;
1453 if (k > 0xffff)
1454 k -= 0xffff;
1456 if (k == 0xffff)
1457 k = 0;
1458 chksum = inb(EWRK3_APROM);
1459 chksum |= (inb(EWRK3_APROM) << 8);
1460 if (k != chksum)
1461 status = -1;
1464 return status;
1468 ** Look for a particular board name in the EISA configuration space
1470 static int __init EISA_signature(char *name, s32 eisa_id)
1472 u_long i;
1473 char *signatures[] = EWRK3_SIGNATURE;
1474 char ManCode[EWRK3_STRLEN];
1475 union {
1476 s32 ID;
1477 char Id[4];
1478 } Eisa;
1479 int status = 0;
1481 *name = '\0';
1482 for (i = 0; i < 4; i++) {
1483 Eisa.Id[i] = inb(eisa_id + i);
1486 ManCode[0] = (((Eisa.Id[0] >> 2) & 0x1f) + 0x40);
1487 ManCode[1] = (((Eisa.Id[1] & 0xe0) >> 5) + ((Eisa.Id[0] & 0x03) << 3) + 0x40);
1488 ManCode[2] = (((Eisa.Id[2] >> 4) & 0x0f) + 0x30);
1489 ManCode[3] = ((Eisa.Id[2] & 0x0f) + 0x30);
1490 ManCode[4] = (((Eisa.Id[3] >> 4) & 0x0f) + 0x30);
1491 ManCode[5] = '\0';
1493 for (i = 0; (*signatures[i] != '\0') && (*name == '\0'); i++) {
1494 if (strstr(ManCode, signatures[i]) != NULL) {
1495 strcpy(name, ManCode);
1496 status = 1;
1500 return status; /* return the device name string */
1503 static void ewrk3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
1505 int fwrev = Read_EEPROM(dev->base_addr, EEPROM_REVLVL);
1507 strcpy(info->driver, DRV_NAME);
1508 strcpy(info->version, DRV_VERSION);
1509 sprintf(info->fw_version, "%d", fwrev);
1510 strcpy(info->bus_info, "N/A");
1511 info->eedump_len = EEPROM_MAX;
1514 static int ewrk3_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1516 struct ewrk3_private *lp = netdev_priv(dev);
1517 unsigned long iobase = dev->base_addr;
1518 u8 cr = inb(EWRK3_CR);
1520 switch (lp->adapter_name[4]) {
1521 case '3': /* DE203 */
1522 ecmd->supported = SUPPORTED_BNC;
1523 ecmd->port = PORT_BNC;
1524 break;
1526 case '4': /* DE204 */
1527 ecmd->supported = SUPPORTED_TP;
1528 ecmd->port = PORT_TP;
1529 break;
1531 case '5': /* DE205 */
1532 ecmd->supported = SUPPORTED_TP | SUPPORTED_BNC | SUPPORTED_AUI;
1533 ecmd->autoneg = !(cr & CR_APD);
1535 ** Port is only valid if autoneg is disabled
1536 ** and even then we don't know if AUI is jumpered.
1538 if (!ecmd->autoneg)
1539 ecmd->port = (cr & CR_PSEL) ? PORT_BNC : PORT_TP;
1540 break;
1543 ecmd->supported |= SUPPORTED_10baseT_Half;
1544 ecmd->speed = SPEED_10;
1545 ecmd->duplex = DUPLEX_HALF;
1546 return 0;
1549 static int ewrk3_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1551 struct ewrk3_private *lp = netdev_priv(dev);
1552 unsigned long iobase = dev->base_addr;
1553 unsigned long flags;
1554 u8 cr;
1556 /* DE205 is the only card with anything to set */
1557 if (lp->adapter_name[4] != '5')
1558 return -EOPNOTSUPP;
1560 /* Sanity-check parameters */
1561 if (ecmd->speed != SPEED_10)
1562 return -EINVAL;
1563 if (ecmd->port != PORT_TP && ecmd->port != PORT_BNC)
1564 return -EINVAL; /* AUI is not software-selectable */
1565 if (ecmd->transceiver != XCVR_INTERNAL)
1566 return -EINVAL;
1567 if (ecmd->duplex != DUPLEX_HALF)
1568 return -EINVAL;
1569 if (ecmd->phy_address != 0)
1570 return -EINVAL;
1572 spin_lock_irqsave(&lp->hw_lock, flags);
1573 cr = inb(EWRK3_CR);
1575 /* If Autoneg is set, change to Auto Port mode */
1576 /* Otherwise, disable Auto Port and set port explicitly */
1577 if (ecmd->autoneg) {
1578 cr &= ~CR_APD;
1579 } else {
1580 cr |= CR_APD;
1581 if (ecmd->port == PORT_TP)
1582 cr &= ~CR_PSEL; /* Force TP */
1583 else
1584 cr |= CR_PSEL; /* Force BNC */
1587 /* Commit the changes */
1588 outb(cr, EWRK3_CR);
1589 spin_unlock_irqrestore(&lp->hw_lock, flags);
1590 return 0;
1593 static u32 ewrk3_get_link(struct net_device *dev)
1595 unsigned long iobase = dev->base_addr;
1596 u8 cmr = inb(EWRK3_CMR);
1597 /* DE203 has BNC only and link status does not apply */
1598 /* On DE204 this is always valid since TP is the only port. */
1599 /* On DE205 this reflects TP status even if BNC or AUI is selected. */
1600 return !(cmr & CMR_LINK);
1603 static int ewrk3_phys_id(struct net_device *dev, u32 data)
1605 struct ewrk3_private *lp = netdev_priv(dev);
1606 unsigned long iobase = dev->base_addr;
1607 unsigned long flags;
1608 u8 cr;
1609 int count;
1611 /* Toggle LED 4x per second */
1612 count = data << 2;
1614 spin_lock_irqsave(&lp->hw_lock, flags);
1616 /* Bail if a PHYS_ID is already in progress */
1617 if (lp->led_mask == 0) {
1618 spin_unlock_irqrestore(&lp->hw_lock, flags);
1619 return -EBUSY;
1622 /* Prevent ISR from twiddling the LED */
1623 lp->led_mask = 0;
1625 while (count--) {
1626 /* Toggle the LED */
1627 cr = inb(EWRK3_CR);
1628 outb(cr ^ CR_LED, EWRK3_CR);
1630 /* Wait a little while */
1631 spin_unlock_irqrestore(&lp->hw_lock, flags);
1632 msleep(250);
1633 spin_lock_irqsave(&lp->hw_lock, flags);
1635 /* Exit if we got a signal */
1636 if (signal_pending(current))
1637 break;
1640 lp->led_mask = CR_LED;
1641 cr = inb(EWRK3_CR);
1642 outb(cr & ~CR_LED, EWRK3_CR);
1643 spin_unlock_irqrestore(&lp->hw_lock, flags);
1644 return signal_pending(current) ? -ERESTARTSYS : 0;
1647 static const struct ethtool_ops ethtool_ops_203 = {
1648 .get_drvinfo = ewrk3_get_drvinfo,
1649 .get_settings = ewrk3_get_settings,
1650 .set_settings = ewrk3_set_settings,
1651 .phys_id = ewrk3_phys_id,
1654 static const struct ethtool_ops ethtool_ops = {
1655 .get_drvinfo = ewrk3_get_drvinfo,
1656 .get_settings = ewrk3_get_settings,
1657 .set_settings = ewrk3_set_settings,
1658 .get_link = ewrk3_get_link,
1659 .phys_id = ewrk3_phys_id,
1663 ** Perform IOCTL call functions here. Some are privileged operations and the
1664 ** effective uid is checked in those cases.
1666 static int ewrk3_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
1668 struct ewrk3_private *lp = netdev_priv(dev);
1669 struct ewrk3_ioctl *ioc = (struct ewrk3_ioctl *) &rq->ifr_ifru;
1670 u_long iobase = dev->base_addr;
1671 int i, j, status = 0;
1672 u_char csr;
1673 unsigned long flags;
1674 union ewrk3_addr {
1675 u_char addr[HASH_TABLE_LEN * ETH_ALEN];
1676 u_short val[(HASH_TABLE_LEN * ETH_ALEN) >> 1];
1679 union ewrk3_addr *tmp;
1681 /* All we handle are private IOCTLs */
1682 if (cmd != EWRK3IOCTL)
1683 return -EOPNOTSUPP;
1685 tmp = kmalloc(sizeof(union ewrk3_addr), GFP_KERNEL);
1686 if(tmp==NULL)
1687 return -ENOMEM;
1689 switch (ioc->cmd) {
1690 case EWRK3_GET_HWADDR: /* Get the hardware address */
1691 for (i = 0; i < ETH_ALEN; i++) {
1692 tmp->addr[i] = dev->dev_addr[i];
1694 ioc->len = ETH_ALEN;
1695 if (copy_to_user(ioc->data, tmp->addr, ioc->len))
1696 status = -EFAULT;
1697 break;
1699 case EWRK3_SET_HWADDR: /* Set the hardware address */
1700 if (capable(CAP_NET_ADMIN)) {
1701 spin_lock_irqsave(&lp->hw_lock, flags);
1702 csr = inb(EWRK3_CSR);
1703 csr |= (CSR_TXD | CSR_RXD);
1704 outb(csr, EWRK3_CSR); /* Disable the TX and RX */
1705 spin_unlock_irqrestore(&lp->hw_lock, flags);
1707 if (copy_from_user(tmp->addr, ioc->data, ETH_ALEN)) {
1708 status = -EFAULT;
1709 break;
1711 spin_lock_irqsave(&lp->hw_lock, flags);
1712 for (i = 0; i < ETH_ALEN; i++) {
1713 dev->dev_addr[i] = tmp->addr[i];
1714 outb(tmp->addr[i], EWRK3_PAR0 + i);
1717 csr = inb(EWRK3_CSR);
1718 csr &= ~(CSR_TXD | CSR_RXD); /* Enable the TX and RX */
1719 outb(csr, EWRK3_CSR);
1720 spin_unlock_irqrestore(&lp->hw_lock, flags);
1721 } else {
1722 status = -EPERM;
1725 break;
1726 case EWRK3_SET_PROM: /* Set Promiscuous Mode */
1727 if (capable(CAP_NET_ADMIN)) {
1728 spin_lock_irqsave(&lp->hw_lock, flags);
1729 csr = inb(EWRK3_CSR);
1730 csr |= CSR_PME;
1731 csr &= ~CSR_MCE;
1732 outb(csr, EWRK3_CSR);
1733 spin_unlock_irqrestore(&lp->hw_lock, flags);
1734 } else {
1735 status = -EPERM;
1738 break;
1739 case EWRK3_CLR_PROM: /* Clear Promiscuous Mode */
1740 if (capable(CAP_NET_ADMIN)) {
1741 spin_lock_irqsave(&lp->hw_lock, flags);
1742 csr = inb(EWRK3_CSR);
1743 csr &= ~CSR_PME;
1744 outb(csr, EWRK3_CSR);
1745 spin_unlock_irqrestore(&lp->hw_lock, flags);
1746 } else {
1747 status = -EPERM;
1750 break;
1751 case EWRK3_GET_MCA: /* Get the multicast address table */
1752 spin_lock_irqsave(&lp->hw_lock, flags);
1753 if (lp->shmem_length == IO_ONLY) {
1754 outb(0, EWRK3_IOPR);
1755 outw(PAGE0_HTE, EWRK3_PIR1);
1756 for (i = 0; i < (HASH_TABLE_LEN >> 3); i++) {
1757 tmp->addr[i] = inb(EWRK3_DATA);
1759 } else {
1760 outb(0, EWRK3_MPR);
1761 memcpy_fromio(tmp->addr, lp->shmem + PAGE0_HTE, (HASH_TABLE_LEN >> 3));
1763 spin_unlock_irqrestore(&lp->hw_lock, flags);
1765 ioc->len = (HASH_TABLE_LEN >> 3);
1766 if (copy_to_user(ioc->data, tmp->addr, ioc->len))
1767 status = -EFAULT;
1769 break;
1770 case EWRK3_SET_MCA: /* Set a multicast address */
1771 if (capable(CAP_NET_ADMIN)) {
1772 if (ioc->len > 1024)
1774 status = -EINVAL;
1775 break;
1777 if (copy_from_user(tmp->addr, ioc->data, ETH_ALEN * ioc->len)) {
1778 status = -EFAULT;
1779 break;
1781 set_multicast_list(dev);
1782 } else {
1783 status = -EPERM;
1786 break;
1787 case EWRK3_CLR_MCA: /* Clear all multicast addresses */
1788 if (capable(CAP_NET_ADMIN)) {
1789 set_multicast_list(dev);
1790 } else {
1791 status = -EPERM;
1794 break;
1795 case EWRK3_MCA_EN: /* Enable multicast addressing */
1796 if (capable(CAP_NET_ADMIN)) {
1797 spin_lock_irqsave(&lp->hw_lock, flags);
1798 csr = inb(EWRK3_CSR);
1799 csr |= CSR_MCE;
1800 csr &= ~CSR_PME;
1801 outb(csr, EWRK3_CSR);
1802 spin_unlock_irqrestore(&lp->hw_lock, flags);
1803 } else {
1804 status = -EPERM;
1807 break;
1808 case EWRK3_GET_STATS: { /* Get the driver statistics */
1809 struct ewrk3_stats *tmp_stats =
1810 kmalloc(sizeof(lp->pktStats), GFP_KERNEL);
1811 if (!tmp_stats) {
1812 status = -ENOMEM;
1813 break;
1816 spin_lock_irqsave(&lp->hw_lock, flags);
1817 memcpy(tmp_stats, &lp->pktStats, sizeof(lp->pktStats));
1818 spin_unlock_irqrestore(&lp->hw_lock, flags);
1820 ioc->len = sizeof(lp->pktStats);
1821 if (copy_to_user(ioc->data, tmp_stats, sizeof(lp->pktStats)))
1822 status = -EFAULT;
1823 kfree(tmp_stats);
1824 break;
1826 case EWRK3_CLR_STATS: /* Zero out the driver statistics */
1827 if (capable(CAP_NET_ADMIN)) {
1828 spin_lock_irqsave(&lp->hw_lock, flags);
1829 memset(&lp->pktStats, 0, sizeof(lp->pktStats));
1830 spin_unlock_irqrestore(&lp->hw_lock,flags);
1831 } else {
1832 status = -EPERM;
1835 break;
1836 case EWRK3_GET_CSR: /* Get the CSR Register contents */
1837 tmp->addr[0] = inb(EWRK3_CSR);
1838 ioc->len = 1;
1839 if (copy_to_user(ioc->data, tmp->addr, ioc->len))
1840 status = -EFAULT;
1841 break;
1842 case EWRK3_SET_CSR: /* Set the CSR Register contents */
1843 if (capable(CAP_NET_ADMIN)) {
1844 if (copy_from_user(tmp->addr, ioc->data, 1)) {
1845 status = -EFAULT;
1846 break;
1848 outb(tmp->addr[0], EWRK3_CSR);
1849 } else {
1850 status = -EPERM;
1853 break;
1854 case EWRK3_GET_EEPROM: /* Get the EEPROM contents */
1855 if (capable(CAP_NET_ADMIN)) {
1856 for (i = 0; i < (EEPROM_MAX >> 1); i++) {
1857 tmp->val[i] = (short) Read_EEPROM(iobase, i);
1859 i = EEPROM_MAX;
1860 tmp->addr[i++] = inb(EWRK3_CMR); /* Config/Management Reg. */
1861 for (j = 0; j < ETH_ALEN; j++) {
1862 tmp->addr[i++] = inb(EWRK3_PAR0 + j);
1864 ioc->len = EEPROM_MAX + 1 + ETH_ALEN;
1865 if (copy_to_user(ioc->data, tmp->addr, ioc->len))
1866 status = -EFAULT;
1867 } else {
1868 status = -EPERM;
1871 break;
1872 case EWRK3_SET_EEPROM: /* Set the EEPROM contents */
1873 if (capable(CAP_NET_ADMIN)) {
1874 if (copy_from_user(tmp->addr, ioc->data, EEPROM_MAX)) {
1875 status = -EFAULT;
1876 break;
1878 for (i = 0; i < (EEPROM_MAX >> 1); i++) {
1879 Write_EEPROM(tmp->val[i], iobase, i);
1881 } else {
1882 status = -EPERM;
1885 break;
1886 case EWRK3_GET_CMR: /* Get the CMR Register contents */
1887 tmp->addr[0] = inb(EWRK3_CMR);
1888 ioc->len = 1;
1889 if (copy_to_user(ioc->data, tmp->addr, ioc->len))
1890 status = -EFAULT;
1891 break;
1892 case EWRK3_SET_TX_CUT_THRU: /* Set TX cut through mode */
1893 if (capable(CAP_NET_ADMIN)) {
1894 lp->txc = 1;
1895 } else {
1896 status = -EPERM;
1899 break;
1900 case EWRK3_CLR_TX_CUT_THRU: /* Clear TX cut through mode */
1901 if (capable(CAP_NET_ADMIN)) {
1902 lp->txc = 0;
1903 } else {
1904 status = -EPERM;
1907 break;
1908 default:
1909 status = -EOPNOTSUPP;
1911 kfree(tmp);
1912 return status;
1915 #ifdef MODULE
1916 static struct net_device *ewrk3_devs[MAX_NUM_EWRK3S];
1917 static int ndevs;
1918 static int io[MAX_NUM_EWRK3S+1] = { 0x300, 0, };
1920 /* '21' below should really be 'MAX_NUM_EWRK3S' */
1921 module_param_array(io, int, NULL, 0);
1922 module_param_array(irq, int, NULL, 0);
1923 MODULE_PARM_DESC(io, "EtherWORKS 3 I/O base address(es)");
1924 MODULE_PARM_DESC(irq, "EtherWORKS 3 IRQ number(s)");
1926 static __exit void ewrk3_exit_module(void)
1928 int i;
1930 for( i=0; i<ndevs; i++ ) {
1931 struct net_device *dev = ewrk3_devs[i];
1932 struct ewrk3_private *lp = netdev_priv(dev);
1933 ewrk3_devs[i] = NULL;
1934 unregister_netdev(dev);
1935 release_region(dev->base_addr, EWRK3_TOTAL_SIZE);
1936 iounmap(lp->shmem);
1937 free_netdev(dev);
1941 static __init int ewrk3_init_module(void)
1943 int i=0;
1945 while( io[i] && irq[i] ) {
1946 struct net_device *dev
1947 = alloc_etherdev(sizeof(struct ewrk3_private));
1949 if (!dev)
1950 break;
1952 if (ewrk3_probe1(dev, io[i], irq[i]) != 0) {
1953 free_netdev(dev);
1954 break;
1957 ewrk3_devs[ndevs++] = dev;
1958 i++;
1961 return ndevs ? 0 : -EIO;
1965 /* Hack for breakage in new module stuff */
1966 module_exit(ewrk3_exit_module);
1967 module_init(ewrk3_init_module);
1968 #endif /* MODULE */
1969 MODULE_LICENSE("GPL");