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:
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:
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
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
71 2) edit the source code near line 1898 to reflect the I/O address and
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.
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).
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.
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.,
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>
168 #include <asm/uaccess.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";
179 static int ewrk3_debug = EWRK3_DEBUG;
181 static int ewrk3_debug = 1;
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
194 #ifndef EWRK3_RAM_BASE_ADDRESSES
195 #define EWRK3_RAM_BASE_ADDRESSES {0xc0000,0xd0000,0x00000}
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
209 #ifndef EWRK3_EISA_IO_PORTS
210 #define EWRK3_EISA_IO_PORTS 0x0c00 /* I/O port base address, slot 0 */
213 #ifndef MAX_EISA_SLOTS
214 #define MAX_EISA_SLOTS 16
215 #define EISA_SLOT_INC 0x1000
218 #define QUEUE_PKT_TIMEOUT (1*HZ) /* Jiffies */
221 ** EtherWORKS 3 shared memory window sizes
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 */
264 u32 bins[EWRK3_PKT_STAT_SZ];
268 u32 excessive_collisions;
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 u_long shmem_length; /* Shared memory window length */
277 struct net_device_stats stats; /* Public stats */
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 u_char *mctbl; /* Pointer to the multicast table */
285 u_char led_mask; /* Used to reserve LED access for ethtool */
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);\
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, struct pt_regs *regs);
303 static int ewrk3_close(struct net_device *dev);
304 static struct net_device_stats *ewrk3_get_stats(struct net_device *dev);
305 static void set_multicast_list(struct net_device *dev);
306 static int ewrk3_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
307 static struct ethtool_ops ethtool_ops_203;
308 static struct ethtool_ops ethtool_ops;
313 static int ewrk3_hw_init(struct net_device *dev, u_long iobase);
314 static void ewrk3_init(struct net_device *dev);
315 static int ewrk3_rx(struct net_device *dev);
316 static int ewrk3_tx(struct net_device *dev);
317 static void ewrk3_timeout(struct net_device *dev);
319 static void EthwrkSignature(char *name, char *eeprom_image);
320 static int DevicePresent(u_long iobase);
321 static void SetMulticastFilter(struct net_device *dev);
322 static int EISA_signature(char *name, s32 eisa_id);
324 static int Read_EEPROM(u_long iobase, u_char eaddr);
325 static int Write_EEPROM(short data, u_long iobase, u_char eaddr);
326 static u_char get_hw_addr(struct net_device *dev, u_char * eeprom_image, char chipType);
328 static int ewrk3_probe1(struct net_device *dev, u_long iobase, int irq);
329 static int isa_probe(struct net_device *dev, u_long iobase);
330 static int eisa_probe(struct net_device *dev, u_long iobase);
332 static u_char irq[MAX_NUM_EWRK3S+1] = {5, 0, 10, 3, 11, 9, 15, 12};
334 static char name[EWRK3_STRLEN + 1];
335 static int num_ewrks3s;
338 ** Miscellaneous defines...
340 #define INIT_EWRK3 {\
341 outb(EEPROM_INIT, EWRK3_IOPR);\
346 struct net_device * __init ewrk3_probe(int unit)
348 struct net_device *dev = alloc_etherdev(sizeof(struct ewrk3_private));
352 return ERR_PTR(-ENOMEM);
355 sprintf(dev->name, "eth%d", unit);
356 netdev_boot_setup_check(dev);
358 SET_MODULE_OWNER(dev);
360 err = ewrk3_probe1(dev, dev->base_addr, dev->irq);
371 static int __init ewrk3_probe1(struct net_device *dev, u_long iobase, int irq)
375 dev->base_addr = iobase;
378 /* Address PROM pattern */
379 err = isa_probe(dev, iobase);
381 err = eisa_probe(dev, iobase);
386 err = register_netdev(dev);
388 release_region(dev->base_addr, EWRK3_TOTAL_SIZE);
394 ewrk3_hw_init(struct net_device *dev, u_long iobase)
396 struct ewrk3_private *lp;
398 u_long mem_start, shmem_length;
399 u_char cr, cmr, icr, nicsr, lemac, hard_strapped = 0;
400 u_char eeprom_image[EEPROM_MAX], chksum, eisa_cr = 0;
403 ** Stop the EWRK3. Enable the DBR ROM. Disable interrupts and remote boot.
404 ** This also disables the EISA_ENABLE bit in the EISA Control Register.
407 eisa_cr = inb(EISA_CR);
410 nicsr = inb(EWRK3_CSR);
412 icr = inb(EWRK3_ICR);
414 outb(icr, EWRK3_ICR); /* Disable all the IRQs */
416 if (nicsr == (CSR_TXD | CSR_RXD))
420 /* Check that the EEPROM is alive and well and not living on Pluto... */
421 for (chksum = 0, i = 0; i < EEPROM_MAX; i += 2) {
427 tmp.val = (short) Read_EEPROM(iobase, (i >> 1));
428 eeprom_image[i] = tmp.c[0];
429 eeprom_image[i + 1] = tmp.c[1];
430 chksum += eeprom_image[i] + eeprom_image[i + 1];
433 if (chksum != 0) { /* Bad EEPROM Data! */
434 printk("%s: Device has a bad on-board EEPROM.\n", dev->name);
438 EthwrkSignature(name, eeprom_image);
442 dev->base_addr = iobase;
444 if (iobase > 0x400) {
445 outb(eisa_cr, EISA_CR); /* Rewrite the EISA CR */
447 lemac = eeprom_image[EEPROM_CHIPVER];
448 cmr = inb(EWRK3_CMR);
450 if (((lemac == LeMAC) && ((cmr & CMR_NO_EEPROM) != CMR_NO_EEPROM)) ||
451 ((lemac == LeMAC2) && !(cmr & CMR_HS))) {
452 printk("%s: %s at %#4lx", dev->name, name, iobase);
454 } else if ((iobase & 0x0fff) == EWRK3_EISA_IO_PORTS) {
455 /* EISA slot address */
456 printk("%s: %s at %#4lx (EISA slot %ld)",
457 dev->name, name, iobase, ((iobase >> 12) & 0x0f));
458 } else { /* ISA port address */
459 printk("%s: %s at %#4lx", dev->name, name, iobase);
462 printk(", h/w address ");
464 DevicePresent(iobase); /* need after EWRK3_INIT */
465 status = get_hw_addr(dev, eeprom_image, lemac);
466 for (i = 0; i < ETH_ALEN - 1; i++) { /* get the ethernet addr. */
467 printk("%2.2x:", dev->dev_addr[i]);
469 printk("%2.2x,\n", dev->dev_addr[i]);
472 printk(" which has an EEPROM CRC error.\n");
476 if (lemac == LeMAC2) { /* Special LeMAC2 CMR things */
477 cmr &= ~(CMR_RA | CMR_WB | CMR_LINK | CMR_POLARITY | CMR_0WS);
478 if (eeprom_image[EEPROM_MISC0] & READ_AHEAD)
480 if (eeprom_image[EEPROM_MISC0] & WRITE_BEHIND)
482 if (eeprom_image[EEPROM_NETMAN0] & NETMAN_POL)
484 if (eeprom_image[EEPROM_NETMAN0] & NETMAN_LINK)
486 if (eeprom_image[EEPROM_MISC0] & _0WS_ENA)
489 if (eeprom_image[EEPROM_SETUP] & SETUP_DRAM)
491 outb(cmr, EWRK3_CMR);
493 cr = inb(EWRK3_CR); /* Set up the Control Register */
494 cr |= eeprom_image[EEPROM_SETUP] & SETUP_APD;
496 cr |= eeprom_image[EEPROM_SETUP] & SETUP_PS;
497 cr |= eeprom_image[EEPROM_MISC0] & FAST_BUS;
498 cr |= eeprom_image[EEPROM_MISC0] & ENA_16;
502 ** Determine the base address and window length for the EWRK3
503 ** RAM from the memory base register.
505 mem_start = inb(EWRK3_MBR);
507 if (mem_start != 0) {
508 if ((mem_start >= 0x0a) && (mem_start <= 0x0f)) {
509 mem_start *= SHMEM_64K;
510 shmem_length = SHMEM_64K;
511 } else if ((mem_start >= 0x14) && (mem_start <= 0x1f)) {
512 mem_start *= SHMEM_32K;
513 shmem_length = SHMEM_32K;
514 } else if ((mem_start >= 0x40) && (mem_start <= 0xff)) {
515 mem_start = mem_start * SHMEM_2K + 0x80000;
516 shmem_length = SHMEM_2K;
522 ** See the top of this source code for comments about
523 ** uncommenting this line.
528 printk(" is hard strapped.\n");
529 } else if (mem_start) {
530 printk(" has a %dk RAM window", (int) (shmem_length >> 10));
531 printk(" at 0x%.5lx", mem_start);
533 printk(" is in I/O only mode");
536 lp = netdev_priv(dev);
537 lp->shmem_base = mem_start;
538 lp->shmem_length = shmem_length;
540 lp->hard_strapped = hard_strapped;
541 lp->led_mask = CR_LED;
542 spin_lock_init(&lp->hw_lock);
546 lp->mPage <<= 1; /* 2 DRAMS on module */
548 sprintf(lp->adapter_name, "%s (%s)", name, dev->name);
550 lp->irq_mask = ICR_TNEM | ICR_TXDM | ICR_RNEM | ICR_RXDM;
552 if (!hard_strapped) {
554 ** Enable EWRK3 board interrupts for autoprobing
556 icr |= ICR_IE; /* Enable interrupts */
557 outb(icr, EWRK3_ICR);
559 /* The DMA channel may be passed in on this parameter. */
562 /* To auto-IRQ we enable the initialization-done and DMA err,
563 interrupts. For now we will always get a DMA error. */
567 unsigned long irq_mask;
570 irq_mask = probe_irq_on();
573 ** Trigger a TNE interrupt.
576 outb(1, EWRK3_TDQ); /* Write to the TX done queue */
577 outb(icr, EWRK3_ICR); /* Unmask the TXD interrupt */
579 irqnum = irq[((icr & IRQ_SEL) >> 4)];
582 dev->irq = probe_irq_off(irq_mask);
583 if ((dev->irq) && (irqnum == dev->irq)) {
584 printk(" and uses IRQ%d.\n", dev->irq);
587 printk(" and failed to detect IRQ line.\n");
588 } else if ((irqnum == 1) && (lemac == LeMAC2)) {
589 printk(" and an illegal IRQ line detected.\n");
591 printk(", but incorrect IRQ line detected.\n");
596 DISABLE_IRQs; /* Mask all interrupts */
600 printk(" and requires IRQ%d.\n", dev->irq);
604 if (ewrk3_debug > 1) {
607 /* The EWRK3-specific entries in the device structure. */
608 dev->open = ewrk3_open;
609 dev->hard_start_xmit = ewrk3_queue_pkt;
610 dev->stop = ewrk3_close;
611 dev->get_stats = ewrk3_get_stats;
612 dev->set_multicast_list = set_multicast_list;
613 dev->do_ioctl = ewrk3_ioctl;
614 if (lp->adapter_name[4] == '3')
615 SET_ETHTOOL_OPS(dev, ðtool_ops_203);
617 SET_ETHTOOL_OPS(dev, ðtool_ops);
618 dev->tx_timeout = ewrk3_timeout;
619 dev->watchdog_timeo = QUEUE_PKT_TIMEOUT;
627 static int ewrk3_open(struct net_device *dev)
629 struct ewrk3_private *lp = netdev_priv(dev);
630 u_long iobase = dev->base_addr;
635 ** Stop the TX and RX...
639 if (!lp->hard_strapped) {
640 if (request_irq(dev->irq, (void *) ewrk3_interrupt, 0, "ewrk3", dev)) {
641 printk("ewrk3_open(): Requested IRQ%d is busy\n", dev->irq);
646 ** Re-initialize the EWRK3...
650 if (ewrk3_debug > 1) {
651 printk("%s: ewrk3 open with irq %d\n", dev->name, dev->irq);
652 printk(" physical address: ");
653 for (i = 0; i < 5; i++) {
654 printk("%2.2x:", (u_char) dev->dev_addr[i]);
656 printk("%2.2x\n", (u_char) dev->dev_addr[i]);
657 if (lp->shmem_length == 0) {
658 printk(" no shared memory, I/O only mode\n");
660 printk(" start of shared memory: 0x%08lx\n", lp->shmem_base);
661 printk(" window length: 0x%04lx\n", lp->shmem_length);
663 printk(" # of DRAMS: %d\n", ((inb(EWRK3_CMR) & 0x02) ? 2 : 1));
664 printk(" csr: 0x%02x\n", inb(EWRK3_CSR));
665 printk(" cr: 0x%02x\n", inb(EWRK3_CR));
666 printk(" icr: 0x%02x\n", inb(EWRK3_ICR));
667 printk(" cmr: 0x%02x\n", inb(EWRK3_CMR));
668 printk(" fmqc: 0x%02x\n", inb(EWRK3_FMQC));
670 netif_start_queue(dev);
672 ** Unmask EWRK3 board interrupts
674 icr = inb(EWRK3_ICR);
679 printk(KERN_ERR "%s: ewrk3 available for hard strapped set up only.\n", dev->name);
680 printk(KERN_ERR " Run the 'ewrk3setup' utility or remove the hard straps.\n");
688 ** Initialize the EtherWORKS 3 operating conditions
690 static void ewrk3_init(struct net_device *dev)
692 struct ewrk3_private *lp = netdev_priv(dev);
694 u_long iobase = dev->base_addr;
698 ** Enable any multicasts
700 set_multicast_list(dev);
703 ** Set hardware MAC address. Address is initialized from the EEPROM
704 ** during startup but may have since been changed by the user.
706 for (i=0; i<ETH_ALEN; i++)
707 outb(dev->dev_addr[i], EWRK3_PAR0 + i);
710 ** Clean out any remaining entries in all the queues here
712 while (inb(EWRK3_TQ));
713 while (inb(EWRK3_TDQ));
714 while (inb(EWRK3_RQ));
715 while (inb(EWRK3_FMQ));
718 ** Write a clean free memory queue
720 for (page = 1; page < lp->mPage; page++) { /* Write the free page numbers */
721 outb(page, EWRK3_FMQ); /* to the Free Memory Queue */
724 START_EWRK3; /* Enable the TX and/or RX */
731 static void ewrk3_timeout(struct net_device *dev)
733 struct ewrk3_private *lp = netdev_priv(dev);
735 u_long iobase = dev->base_addr;
737 if (!lp->hard_strapped)
739 printk(KERN_WARNING"%s: transmit timed/locked out, status %04x, resetting.\n",
740 dev->name, inb(EWRK3_CSR));
743 ** Mask all board interrupts
748 ** Stop the TX and RX...
755 ** Unmask EWRK3 board interrupts
759 dev->trans_start = jiffies;
760 netif_wake_queue(dev);
765 ** Writes a socket buffer to the free page queue
767 static int ewrk3_queue_pkt (struct sk_buff *skb, struct net_device *dev)
769 struct ewrk3_private *lp = netdev_priv(dev);
770 u_long iobase = dev->base_addr;
775 spin_lock_irq (&lp->hw_lock);
778 /* if no resources available, exit, request packet be queued */
779 if (inb (EWRK3_FMQC) == 0) {
780 printk (KERN_WARNING "%s: ewrk3_queue_pkt(): No free resources...\n",
782 printk (KERN_WARNING "%s: ewrk3_queue_pkt(): CSR: %02x ICR: %02x FMQC: %02x\n",
783 dev->name, inb (EWRK3_CSR), inb (EWRK3_ICR),
789 ** Get a free page from the FMQ
791 if ((page = inb (EWRK3_FMQ)) >= lp->mPage) {
792 printk ("ewrk3_queue_pkt(): Invalid free memory page (%d).\n",
799 ** Set up shared memory window and pointer into the window
801 if (lp->shmem_length == IO_ONLY) {
802 outb (page, EWRK3_IOPR);
803 } else if (lp->shmem_length == SHMEM_2K) {
804 buf = lp->shmem_base;
805 outb (page, EWRK3_MPR);
806 } else if (lp->shmem_length == SHMEM_32K) {
807 buf = ((((short) page << 11) & 0x7800) + lp->shmem_base);
808 outb ((page >> 4), EWRK3_MPR);
809 } else if (lp->shmem_length == SHMEM_64K) {
810 buf = ((((short) page << 11) & 0xf800) + lp->shmem_base);
811 outb ((page >> 5), EWRK3_MPR);
813 printk (KERN_ERR "%s: Oops - your private data area is hosed!\n",
819 ** Set up the buffer control structures and copy the data from
820 ** the socket buffer to the shared memory .
822 if (lp->shmem_length == IO_ONLY) {
824 u_char *p = skb->data;
825 outb ((char) (TCR_QMODE | TCR_PAD | TCR_IFC), EWRK3_DATA);
826 outb ((char) (skb->len & 0xff), EWRK3_DATA);
827 outb ((char) ((skb->len >> 8) & 0xff), EWRK3_DATA);
828 outb ((char) 0x04, EWRK3_DATA);
829 for (i = 0; i < skb->len; i++) {
830 outb (*p++, EWRK3_DATA);
832 outb (page, EWRK3_TQ); /* Start sending pkt */
834 isa_writeb ((char) (TCR_QMODE | TCR_PAD | TCR_IFC), buf); /* ctrl byte */
836 isa_writeb ((char) (skb->len & 0xff), buf); /* length (16 bit xfer) */
840 (((skb->len >> 8) & 0xff) | XCT), buf);
842 isa_writeb (0x04, buf); /* index byte */
844 isa_writeb (0x00, (buf + skb->len)); /* Write the XCT flag */
845 isa_memcpy_toio (buf, skb->data, PRELOAD); /* Write PRELOAD bytes */
846 outb (page, EWRK3_TQ); /* Start sending pkt */
847 isa_memcpy_toio (buf + PRELOAD,
850 isa_writeb (0xff, (buf + skb->len)); /* Write the XCT flag */
853 ((skb->len >> 8) & 0xff), buf);
855 isa_writeb (0x04, buf); /* index byte */
857 isa_memcpy_toio (buf, skb->data, skb->len); /* Write data bytes */
858 outb (page, EWRK3_TQ); /* Start sending pkt */
863 spin_unlock_irq (&lp->hw_lock);
865 lp->stats.tx_bytes += skb->len;
866 dev->trans_start = jiffies;
869 /* Check for free resources: stop Tx queue if there are none */
870 if (inb (EWRK3_FMQC) == 0)
871 netif_stop_queue (dev);
877 spin_unlock_irq (&lp->hw_lock);
882 ** The EWRK3 interrupt handler.
884 static irqreturn_t ewrk3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
886 struct net_device *dev = dev_id;
887 struct ewrk3_private *lp;
891 lp = netdev_priv(dev);
892 iobase = dev->base_addr;
894 /* get the interrupt information */
895 csr = inb(EWRK3_CSR);
898 ** Mask the EWRK3 board interrupts and turn on the LED
900 spin_lock(&lp->hw_lock);
907 if (csr & CSR_RNE) /* Rx interrupt (packet[s] arrived) */
910 if (csr & CSR_TNE) /* Tx interrupt (packet sent) */
914 ** Now deal with the TX/RX disable flags. These are set when there
915 ** are no more resources. If resources free up then enable these
916 ** interrupts, otherwise mask them - failure to do this will result
917 ** in the system hanging in an interrupt loop.
919 if (inb(EWRK3_FMQC)) { /* any resources available? */
920 lp->irq_mask |= ICR_TXDM | ICR_RXDM; /* enable the interrupt source */
921 csr &= ~(CSR_TXD | CSR_RXD); /* ensure restart of a stalled TX or RX */
922 outb(csr, EWRK3_CSR);
923 netif_wake_queue(dev);
925 lp->irq_mask &= ~(ICR_TXDM | ICR_RXDM); /* disable the interrupt source */
928 /* Unmask the EWRK3 board interrupts and turn off the LED */
929 cr &= ~(lp->led_mask);
932 spin_unlock(&lp->hw_lock);
936 /* Called with lp->hw_lock held */
937 static int ewrk3_rx(struct net_device *dev)
939 struct ewrk3_private *lp = netdev_priv(dev);
940 u_long iobase = dev->base_addr;
945 while (inb(EWRK3_RQC) && !status) { /* Whilst there's incoming data */
946 if ((page = inb(EWRK3_RQ)) < lp->mPage) { /* Get next entry's buffer page */
948 ** Set up shared memory window and pointer into the window
950 if (lp->shmem_length == IO_ONLY) {
951 outb(page, EWRK3_IOPR);
952 } else if (lp->shmem_length == SHMEM_2K) {
953 buf = lp->shmem_base;
954 outb(page, EWRK3_MPR);
955 } else if (lp->shmem_length == SHMEM_32K) {
956 buf = ((((short) page << 11) & 0x7800) + lp->shmem_base);
957 outb((page >> 4), EWRK3_MPR);
958 } else if (lp->shmem_length == SHMEM_64K) {
959 buf = ((((short) page << 11) & 0xf800) + lp->shmem_base);
960 outb((page >> 5), EWRK3_MPR);
963 printk("%s: Oops - your private data area is hosed!\n", dev->name);
970 if (lp->shmem_length == IO_ONLY) {
971 rx_status = inb(EWRK3_DATA);
972 pkt_len = inb(EWRK3_DATA);
973 pkt_len |= ((u_short) inb(EWRK3_DATA) << 8);
975 rx_status = isa_readb(buf);
977 pkt_len = isa_readw(buf);
981 if (!(rx_status & R_ROK)) { /* There was an error. */
982 lp->stats.rx_errors++; /* Update the error stats. */
983 if (rx_status & R_DBE)
984 lp->stats.rx_frame_errors++;
985 if (rx_status & R_CRC)
986 lp->stats.rx_crc_errors++;
987 if (rx_status & R_PLL)
988 lp->stats.rx_fifo_errors++;
992 if ((skb = dev_alloc_skb(pkt_len + 2)) != NULL) {
995 skb_reserve(skb, 2); /* Align to 16 bytes */
996 p = skb_put(skb, pkt_len);
998 if (lp->shmem_length == IO_ONLY) {
999 *p = inb(EWRK3_DATA); /* dummy read */
1000 for (i = 0; i < pkt_len; i++) {
1001 *p++ = inb(EWRK3_DATA);
1004 isa_memcpy_fromio(p, buf, pkt_len);
1007 for (i = 1; i < EWRK3_PKT_STAT_SZ - 1; i++) {
1008 if (pkt_len < i * EWRK3_PKT_BIN_SZ) {
1009 lp->pktStats.bins[i]++;
1010 i = EWRK3_PKT_STAT_SZ;
1013 p = skb->data; /* Look at the dest addr */
1014 if (p[0] & 0x01) { /* Multicast/Broadcast */
1015 if ((*(s16 *) & p[0] == -1) && (*(s16 *) & p[2] == -1) && (*(s16 *) & p[4] == -1)) {
1016 lp->pktStats.broadcast++;
1018 lp->pktStats.multicast++;
1020 } else if ((*(s16 *) & p[0] == *(s16 *) & dev->dev_addr[0]) &&
1021 (*(s16 *) & p[2] == *(s16 *) & dev->dev_addr[2]) &&
1022 (*(s16 *) & p[4] == *(s16 *) & dev->dev_addr[4])) {
1023 lp->pktStats.unicast++;
1025 lp->pktStats.bins[0]++; /* Duplicates stats.rx_packets */
1026 if (lp->pktStats.bins[0] == 0) { /* Reset counters */
1027 memset(&lp->pktStats, 0, sizeof(lp->pktStats));
1030 ** Notify the upper protocol layers that there is another
1033 skb->protocol = eth_type_trans(skb, dev);
1039 dev->last_rx = jiffies;
1040 lp->stats.rx_packets++;
1041 lp->stats.rx_bytes += pkt_len;
1043 printk("%s: Insufficient memory; nuking packet.\n", dev->name);
1044 lp->stats.rx_dropped++; /* Really, deferred. */
1050 ** Return the received buffer to the free memory queue
1052 outb(page, EWRK3_FMQ);
1054 printk("ewrk3_rx(): Illegal page number, page %d\n", page);
1055 printk("ewrk3_rx(): CSR: %02x ICR: %02x FMQC: %02x\n", inb(EWRK3_CSR), inb(EWRK3_ICR), inb(EWRK3_FMQC));
1062 ** Buffer sent - check for TX buffer errors.
1063 ** Called with lp->hw_lock held
1065 static int ewrk3_tx(struct net_device *dev)
1067 struct ewrk3_private *lp = netdev_priv(dev);
1068 u_long iobase = dev->base_addr;
1071 while ((tx_status = inb(EWRK3_TDQ)) > 0) { /* Whilst there's old buffers */
1072 if (tx_status & T_VSTS) { /* The status is valid */
1073 if (tx_status & T_TXE) {
1074 lp->stats.tx_errors++;
1075 if (tx_status & T_NCL)
1076 lp->stats.tx_carrier_errors++;
1077 if (tx_status & T_LCL)
1078 lp->stats.tx_window_errors++;
1079 if (tx_status & T_CTU) {
1080 if ((tx_status & T_COLL) ^ T_XUR) {
1081 lp->pktStats.tx_underruns++;
1083 lp->pktStats.excessive_underruns++;
1085 } else if (tx_status & T_COLL) {
1086 if ((tx_status & T_COLL) ^ T_XCOLL) {
1087 lp->stats.collisions++;
1089 lp->pktStats.excessive_collisions++;
1093 lp->stats.tx_packets++;
1101 static int ewrk3_close(struct net_device *dev)
1103 struct ewrk3_private *lp = netdev_priv(dev);
1104 u_long iobase = dev->base_addr;
1107 netif_stop_queue(dev);
1109 if (ewrk3_debug > 1) {
1110 printk("%s: Shutting down ethercard, status was %2.2x.\n",
1111 dev->name, inb(EWRK3_CSR));
1114 ** We stop the EWRK3 here... mask interrupts and stop TX & RX
1121 ** Clean out the TX and RX queues here (note that one entry
1122 ** may get added to either the TXD or RX queues if the TX or RX
1123 ** just starts processing a packet before the STOP_EWRK3 command
1124 ** is received. This will be flushed in the ewrk3_open() call).
1126 while (inb(EWRK3_TQ));
1127 while (inb(EWRK3_TDQ));
1128 while (inb(EWRK3_RQ));
1130 if (!lp->hard_strapped) {
1131 free_irq(dev->irq, dev);
1136 static struct net_device_stats *ewrk3_get_stats(struct net_device *dev)
1138 struct ewrk3_private *lp = netdev_priv(dev);
1140 /* Null body since there is no framing error counter */
1145 ** Set or clear the multicast filter for this adapter.
1147 static void set_multicast_list(struct net_device *dev)
1149 struct ewrk3_private *lp = netdev_priv(dev);
1150 u_long iobase = dev->base_addr;
1153 csr = inb(EWRK3_CSR);
1155 if (lp->shmem_length == IO_ONLY) {
1156 lp->mctbl = (char *) PAGE0_HTE;
1158 lp->mctbl = (char *) (lp->shmem_base + PAGE0_HTE);
1161 csr &= ~(CSR_PME | CSR_MCE);
1162 if (dev->flags & IFF_PROMISC) { /* set promiscuous mode */
1164 outb(csr, EWRK3_CSR);
1166 SetMulticastFilter(dev);
1168 outb(csr, EWRK3_CSR);
1173 ** Calculate the hash code and update the logical address filter
1174 ** from a list of ethernet multicast addresses.
1175 ** Little endian crc one liner from Matt Thomas, DEC.
1177 ** Note that when clearing the table, the broadcast bit must remain asserted
1178 ** to receive broadcast messages.
1180 static void SetMulticastFilter(struct net_device *dev)
1182 struct ewrk3_private *lp = netdev_priv(dev);
1183 struct dev_mc_list *dmi = dev->mc_list;
1184 u_long iobase = dev->base_addr;
1186 char *addrs, bit, byte;
1187 short *p = (short *) lp->mctbl;
1191 spin_lock_irq(&lp->hw_lock);
1193 if (lp->shmem_length == IO_ONLY) {
1194 outb(0, EWRK3_IOPR);
1195 outw(EEPROM_OFFSET(lp->mctbl), EWRK3_PIR1);
1200 if (dev->flags & IFF_ALLMULTI) {
1201 for (i = 0; i < (HASH_TABLE_LEN >> 3); i++) {
1202 if (lp->shmem_length == IO_ONLY) {
1203 outb(0xff, EWRK3_DATA);
1204 } else { /* memset didn't work here */
1205 isa_writew(0xffff, (int) p);
1211 /* Clear table except for broadcast bit */
1212 if (lp->shmem_length == IO_ONLY) {
1213 for (i = 0; i < (HASH_TABLE_LEN >> 4) - 1; i++) {
1214 outb(0x00, EWRK3_DATA);
1216 outb(0x80, EWRK3_DATA);
1217 i++; /* insert the broadcast bit */
1218 for (; i < (HASH_TABLE_LEN >> 3); i++) {
1219 outb(0x00, EWRK3_DATA);
1222 isa_memset_io((int) lp->mctbl, 0, (HASH_TABLE_LEN >> 3));
1223 isa_writeb(0x80, (int) (lp->mctbl + (HASH_TABLE_LEN >> 4) - 1));
1227 for (i = 0; i < dev->mc_count; i++) { /* for each address in the list */
1228 addrs = dmi->dmi_addr;
1230 if ((*addrs & 0x01) == 1) { /* multicast address? */
1231 crc = ether_crc_le(ETH_ALEN, addrs);
1232 hashcode = crc & ((1 << 9) - 1); /* hashcode is 9 LSb of CRC */
1234 byte = hashcode >> 3; /* bit[3-8] -> byte in filter */
1235 bit = 1 << (hashcode & 0x07); /* bit[0-2] -> bit in byte */
1237 if (lp->shmem_length == IO_ONLY) {
1240 outw((short) ((long) lp->mctbl) + byte, EWRK3_PIR1);
1241 tmp = inb(EWRK3_DATA);
1243 outw((short) ((long) lp->mctbl) + byte, EWRK3_PIR1);
1244 outb(tmp, EWRK3_DATA);
1246 isa_writeb(isa_readb((int)(lp->mctbl + byte)) | bit, (int)(lp->mctbl + byte));
1252 spin_unlock_irq(&lp->hw_lock);
1256 ** ISA bus I/O device probe
1258 static int __init isa_probe(struct net_device *dev, u_long ioaddr)
1260 int i = num_ewrks3s, maxSlots;
1265 if (ioaddr >= 0x400)
1268 if (ioaddr == 0) { /* Autoprobing */
1269 iobase = EWRK3_IO_BASE; /* Get the first slot address */
1271 } else { /* Probe a specific location */
1276 for (; (i < maxSlots) && (dev != NULL);
1277 iobase += EWRK3_IOP_INC, i++)
1279 if (request_region(iobase, EWRK3_TOTAL_SIZE, DRV_NAME)) {
1280 if (DevicePresent(iobase) == 0) {
1282 ret = ewrk3_hw_init(dev, iobase);
1287 release_region(iobase, EWRK3_TOTAL_SIZE);
1296 ** EISA bus I/O device probe. Probe from slot 1 since slot 0 is usually
1299 static int __init eisa_probe(struct net_device *dev, u_long ioaddr)
1305 if (ioaddr < 0x1000)
1308 if (ioaddr == 0) { /* Autoprobing */
1309 iobase = EISA_SLOT_INC; /* Get the first slot address */
1311 maxSlots = MAX_EISA_SLOTS;
1312 } else { /* Probe a specific location */
1318 for (i = 1; (i < maxSlots) && (dev != NULL); i++, iobase += EISA_SLOT_INC) {
1319 if (EISA_signature(name, EISA_ID) == 0) {
1320 if (request_region(iobase, EWRK3_TOTAL_SIZE, DRV_NAME) &&
1321 DevicePresent(iobase) == 0) {
1323 ret = ewrk3_hw_init(dev, iobase);
1328 release_region(iobase, EWRK3_TOTAL_SIZE);
1338 ** Read the EWRK3 EEPROM using this routine
1340 static int Read_EEPROM(u_long iobase, u_char eaddr)
1344 outb((eaddr & 0x3f), EWRK3_PIR1); /* set up 6 bits of address info */
1345 outb(EEPROM_RD, EWRK3_IOPR); /* issue read command */
1346 for (i = 0; i < 5000; i++)
1347 inb(EWRK3_CSR); /* wait 1msec */
1349 return inw(EWRK3_EPROM1); /* 16 bits data return */
1353 ** Write the EWRK3 EEPROM using this routine
1355 static int Write_EEPROM(short data, u_long iobase, u_char eaddr)
1359 outb(EEPROM_WR_EN, EWRK3_IOPR); /* issue write enable command */
1360 for (i = 0; i < 5000; i++)
1361 inb(EWRK3_CSR); /* wait 1msec */
1362 outw(data, EWRK3_EPROM1); /* write data to register */
1363 outb((eaddr & 0x3f), EWRK3_PIR1); /* set up 6 bits of address info */
1364 outb(EEPROM_WR, EWRK3_IOPR); /* issue write command */
1365 for (i = 0; i < 75000; i++)
1366 inb(EWRK3_CSR); /* wait 15msec */
1367 outb(EEPROM_WR_DIS, EWRK3_IOPR); /* issue write disable command */
1368 for (i = 0; i < 5000; i++)
1369 inb(EWRK3_CSR); /* wait 1msec */
1375 ** Look for a particular board name in the on-board EEPROM.
1377 static void __init EthwrkSignature(char *name, char *eeprom_image)
1380 char *signatures[] = EWRK3_SIGNATURE;
1382 for (i=0; *signatures[i] != '\0'; i++)
1383 if( !strncmp(eeprom_image+EEPROM_PNAME7, signatures[i], strlen(signatures[i])) )
1386 if (*signatures[i] != '\0') {
1387 memcpy(name, eeprom_image+EEPROM_PNAME7, EWRK3_STRLEN);
1388 name[EWRK3_STRLEN] = '\0';
1396 ** Look for a special sequence in the Ethernet station address PROM that
1397 ** is common across all EWRK3 products.
1399 ** Search the Ethernet address ROM for the signature. Since the ROM address
1400 ** counter can start at an arbitrary point, the search must include the entire
1401 ** probe sequence length plus the (length_of_the_signature - 1).
1402 ** Stop the search IMMEDIATELY after the signature is found so that the
1403 ** PROM address counter is correctly positioned at the start of the
1404 ** ethernet address for later read out.
1407 static int __init DevicePresent(u_long iobase)
1414 char Sig[sizeof(u32) << 1];
1419 int i, j, status = 0;
1421 dev.llsig.a = ETH_PROM_SIG;
1422 dev.llsig.b = ETH_PROM_SIG;
1423 sigLength = sizeof(u32) << 1;
1425 for (i = 0, j = 0; j < sigLength && i < PROBE_LENGTH + sigLength - 1; i++) {
1426 data = inb(EWRK3_APROM);
1427 if (dev.Sig[j] == data) { /* track signature */
1429 } else { /* lost signature; begin search again */
1430 if (data == dev.Sig[0]) {
1438 if (j != sigLength) {
1439 status = -ENODEV; /* search failed */
1444 static u_char __init get_hw_addr(struct net_device *dev, u_char * eeprom_image, char chipType)
1448 u_char crc, lfsr, sd, status = 0;
1449 u_long iobase = dev->base_addr;
1452 if (chipType == LeMAC2) {
1453 for (crc = 0x6a, j = 0; j < ETH_ALEN; j++) {
1454 sd = dev->dev_addr[j] = eeprom_image[EEPROM_PADDR0 + j];
1455 outb(dev->dev_addr[j], EWRK3_PAR0 + j);
1456 for (k = 0; k < 8; k++, sd >>= 1) {
1457 lfsr = ((((crc & 0x02) >> 1) ^ (crc & 0x01)) ^ (sd & 0x01)) << 7;
1458 crc = (crc >> 1) + lfsr;
1461 if (crc != eeprom_image[EEPROM_PA_CRC])
1464 for (i = 0, k = 0; i < ETH_ALEN;) {
1469 k += (u_char) (tmp = inb(EWRK3_APROM));
1470 dev->dev_addr[i] = (u_char) tmp;
1471 outb(dev->dev_addr[i], EWRK3_PAR0 + i);
1473 k += (u_short) ((tmp = inb(EWRK3_APROM)) << 8);
1474 dev->dev_addr[i] = (u_char) tmp;
1475 outb(dev->dev_addr[i], EWRK3_PAR0 + i);
1483 chksum = inb(EWRK3_APROM);
1484 chksum |= (inb(EWRK3_APROM) << 8);
1493 ** Look for a particular board name in the EISA configuration space
1495 static int __init EISA_signature(char *name, s32 eisa_id)
1498 char *signatures[] = EWRK3_SIGNATURE;
1499 char ManCode[EWRK3_STRLEN];
1507 for (i = 0; i < 4; i++) {
1508 Eisa.Id[i] = inb(eisa_id + i);
1511 ManCode[0] = (((Eisa.Id[0] >> 2) & 0x1f) + 0x40);
1512 ManCode[1] = (((Eisa.Id[1] & 0xe0) >> 5) + ((Eisa.Id[0] & 0x03) << 3) + 0x40);
1513 ManCode[2] = (((Eisa.Id[2] >> 4) & 0x0f) + 0x30);
1514 ManCode[3] = ((Eisa.Id[2] & 0x0f) + 0x30);
1515 ManCode[4] = (((Eisa.Id[3] >> 4) & 0x0f) + 0x30);
1518 for (i = 0; (*signatures[i] != '\0') && (*name == '\0'); i++) {
1519 if (strstr(ManCode, signatures[i]) != NULL) {
1520 strcpy(name, ManCode);
1525 return status; /* return the device name string */
1528 static void ewrk3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
1530 int fwrev = Read_EEPROM(dev->base_addr, EEPROM_REVLVL);
1532 strcpy(info->driver, DRV_NAME);
1533 strcpy(info->version, DRV_VERSION);
1534 sprintf(info->fw_version, "%d", fwrev);
1535 strcpy(info->bus_info, "N/A");
1536 info->eedump_len = EEPROM_MAX;
1539 static int ewrk3_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1541 struct ewrk3_private *lp = netdev_priv(dev);
1542 unsigned long iobase = dev->base_addr;
1543 u8 cr = inb(EWRK3_CR);
1545 switch (lp->adapter_name[4]) {
1546 case '3': /* DE203 */
1547 ecmd->supported = SUPPORTED_BNC;
1548 ecmd->port = PORT_BNC;
1551 case '4': /* DE204 */
1552 ecmd->supported = SUPPORTED_TP;
1553 ecmd->port = PORT_TP;
1556 case '5': /* DE205 */
1557 ecmd->supported = SUPPORTED_TP | SUPPORTED_BNC | SUPPORTED_AUI;
1558 ecmd->autoneg = !(cr & CR_APD);
1560 ** Port is only valid if autoneg is disabled
1561 ** and even then we don't know if AUI is jumpered.
1564 ecmd->port = (cr & CR_PSEL) ? PORT_BNC : PORT_TP;
1568 ecmd->supported |= SUPPORTED_10baseT_Half;
1569 ecmd->speed = SPEED_10;
1570 ecmd->duplex = DUPLEX_HALF;
1574 static int ewrk3_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1576 struct ewrk3_private *lp = netdev_priv(dev);
1577 unsigned long iobase = dev->base_addr;
1578 unsigned long flags;
1581 /* DE205 is the only card with anything to set */
1582 if (lp->adapter_name[4] != '5')
1585 /* Sanity-check parameters */
1586 if (ecmd->speed != SPEED_10)
1588 if (ecmd->port != PORT_TP && ecmd->port != PORT_BNC)
1589 return -EINVAL; /* AUI is not software-selectable */
1590 if (ecmd->transceiver != XCVR_INTERNAL)
1592 if (ecmd->duplex != DUPLEX_HALF)
1594 if (ecmd->phy_address != 0)
1597 spin_lock_irqsave(&lp->hw_lock, flags);
1600 /* If Autoneg is set, change to Auto Port mode */
1601 /* Otherwise, disable Auto Port and set port explicitly */
1602 if (ecmd->autoneg) {
1606 if (ecmd->port == PORT_TP)
1607 cr &= ~CR_PSEL; /* Force TP */
1609 cr |= CR_PSEL; /* Force BNC */
1612 /* Commit the changes */
1614 spin_unlock_irqrestore(&lp->hw_lock, flags);
1618 static u32 ewrk3_get_link(struct net_device *dev)
1620 unsigned long iobase = dev->base_addr;
1621 u8 cmr = inb(EWRK3_CMR);
1622 /* DE203 has BNC only and link status does not apply */
1623 /* On DE204 this is always valid since TP is the only port. */
1624 /* On DE205 this reflects TP status even if BNC or AUI is selected. */
1625 return !(cmr & CMR_LINK);
1628 static int ewrk3_phys_id(struct net_device *dev, u32 data)
1630 struct ewrk3_private *lp = netdev_priv(dev);
1631 unsigned long iobase = dev->base_addr;
1632 unsigned long flags;
1636 /* Toggle LED 4x per second */
1639 spin_lock_irqsave(&lp->hw_lock, flags);
1641 /* Bail if a PHYS_ID is already in progress */
1642 if (lp->led_mask == 0) {
1643 spin_unlock_irqrestore(&lp->hw_lock, flags);
1647 /* Prevent ISR from twiddling the LED */
1651 /* Toggle the LED */
1653 outb(cr ^ CR_LED, EWRK3_CR);
1655 /* Wait a little while */
1656 spin_unlock_irqrestore(&lp->hw_lock, flags);
1657 set_current_state(TASK_UNINTERRUPTIBLE);
1658 schedule_timeout(HZ>>2);
1659 spin_lock_irqsave(&lp->hw_lock, flags);
1661 /* Exit if we got a signal */
1662 if (signal_pending(current))
1666 lp->led_mask = CR_LED;
1668 outb(cr & ~CR_LED, EWRK3_CR);
1669 spin_unlock_irqrestore(&lp->hw_lock, flags);
1670 return signal_pending(current) ? -ERESTARTSYS : 0;
1673 static struct ethtool_ops ethtool_ops_203 = {
1674 .get_drvinfo = ewrk3_get_drvinfo,
1675 .get_settings = ewrk3_get_settings,
1676 .set_settings = ewrk3_set_settings,
1677 .phys_id = ewrk3_phys_id,
1680 static struct ethtool_ops ethtool_ops = {
1681 .get_drvinfo = ewrk3_get_drvinfo,
1682 .get_settings = ewrk3_get_settings,
1683 .set_settings = ewrk3_set_settings,
1684 .get_link = ewrk3_get_link,
1685 .phys_id = ewrk3_phys_id,
1689 ** Perform IOCTL call functions here. Some are privileged operations and the
1690 ** effective uid is checked in those cases.
1692 static int ewrk3_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
1694 struct ewrk3_private *lp = netdev_priv(dev);
1695 struct ewrk3_ioctl *ioc = (struct ewrk3_ioctl *) &rq->ifr_ifru;
1696 u_long iobase = dev->base_addr;
1697 int i, j, status = 0;
1699 unsigned long flags;
1701 u_char addr[HASH_TABLE_LEN * ETH_ALEN];
1702 u_short val[(HASH_TABLE_LEN * ETH_ALEN) >> 1];
1705 union ewrk3_addr *tmp;
1707 /* All we handle are private IOCTLs */
1708 if (cmd != EWRK3IOCTL)
1711 tmp = kmalloc(sizeof(union ewrk3_addr), GFP_KERNEL);
1716 case EWRK3_GET_HWADDR: /* Get the hardware address */
1717 for (i = 0; i < ETH_ALEN; i++) {
1718 tmp->addr[i] = dev->dev_addr[i];
1720 ioc->len = ETH_ALEN;
1721 if (copy_to_user(ioc->data, tmp->addr, ioc->len))
1725 case EWRK3_SET_HWADDR: /* Set the hardware address */
1726 if (capable(CAP_NET_ADMIN)) {
1727 spin_lock_irqsave(&lp->hw_lock, flags);
1728 csr = inb(EWRK3_CSR);
1729 csr |= (CSR_TXD | CSR_RXD);
1730 outb(csr, EWRK3_CSR); /* Disable the TX and RX */
1731 spin_unlock_irqrestore(&lp->hw_lock, flags);
1733 if (copy_from_user(tmp->addr, ioc->data, ETH_ALEN)) {
1737 spin_lock_irqsave(&lp->hw_lock, flags);
1738 for (i = 0; i < ETH_ALEN; i++) {
1739 dev->dev_addr[i] = tmp->addr[i];
1740 outb(tmp->addr[i], EWRK3_PAR0 + i);
1743 csr = inb(EWRK3_CSR);
1744 csr &= ~(CSR_TXD | CSR_RXD); /* Enable the TX and RX */
1745 outb(csr, EWRK3_CSR);
1746 spin_unlock_irqrestore(&lp->hw_lock, flags);
1752 case EWRK3_SET_PROM: /* Set Promiscuous Mode */
1753 if (capable(CAP_NET_ADMIN)) {
1754 spin_lock_irqsave(&lp->hw_lock, flags);
1755 csr = inb(EWRK3_CSR);
1758 outb(csr, EWRK3_CSR);
1759 spin_unlock_irqrestore(&lp->hw_lock, flags);
1765 case EWRK3_CLR_PROM: /* Clear Promiscuous Mode */
1766 if (capable(CAP_NET_ADMIN)) {
1767 spin_lock_irqsave(&lp->hw_lock, flags);
1768 csr = inb(EWRK3_CSR);
1770 outb(csr, EWRK3_CSR);
1771 spin_unlock_irqrestore(&lp->hw_lock, flags);
1777 case EWRK3_GET_MCA: /* Get the multicast address table */
1778 spin_lock_irqsave(&lp->hw_lock, flags);
1779 if (lp->shmem_length == IO_ONLY) {
1780 outb(0, EWRK3_IOPR);
1781 outw(PAGE0_HTE, EWRK3_PIR1);
1782 for (i = 0; i < (HASH_TABLE_LEN >> 3); i++) {
1783 tmp->addr[i] = inb(EWRK3_DATA);
1787 isa_memcpy_fromio(tmp->addr, lp->shmem_base + PAGE0_HTE, (HASH_TABLE_LEN >> 3));
1789 spin_unlock_irqrestore(&lp->hw_lock, flags);
1791 ioc->len = (HASH_TABLE_LEN >> 3);
1792 if (copy_to_user(ioc->data, tmp->addr, ioc->len))
1796 case EWRK3_SET_MCA: /* Set a multicast address */
1797 if (capable(CAP_NET_ADMIN)) {
1798 if (ioc->len > 1024)
1803 if (copy_from_user(tmp->addr, ioc->data, ETH_ALEN * ioc->len)) {
1807 set_multicast_list(dev);
1813 case EWRK3_CLR_MCA: /* Clear all multicast addresses */
1814 if (capable(CAP_NET_ADMIN)) {
1815 set_multicast_list(dev);
1821 case EWRK3_MCA_EN: /* Enable multicast addressing */
1822 if (capable(CAP_NET_ADMIN)) {
1823 spin_lock_irqsave(&lp->hw_lock, flags);
1824 csr = inb(EWRK3_CSR);
1827 outb(csr, EWRK3_CSR);
1828 spin_unlock_irqrestore(&lp->hw_lock, flags);
1834 case EWRK3_GET_STATS: { /* Get the driver statistics */
1835 struct ewrk3_stats *tmp_stats =
1836 kmalloc(sizeof(lp->pktStats), GFP_KERNEL);
1842 spin_lock_irqsave(&lp->hw_lock, flags);
1843 memcpy(tmp_stats, &lp->pktStats, sizeof(lp->pktStats));
1844 spin_unlock_irqrestore(&lp->hw_lock, flags);
1846 ioc->len = sizeof(lp->pktStats);
1847 if (copy_to_user(ioc->data, tmp_stats, sizeof(lp->pktStats)))
1852 case EWRK3_CLR_STATS: /* Zero out the driver statistics */
1853 if (capable(CAP_NET_ADMIN)) {
1854 spin_lock_irqsave(&lp->hw_lock, flags);
1855 memset(&lp->pktStats, 0, sizeof(lp->pktStats));
1856 spin_unlock_irqrestore(&lp->hw_lock,flags);
1862 case EWRK3_GET_CSR: /* Get the CSR Register contents */
1863 tmp->addr[0] = inb(EWRK3_CSR);
1865 if (copy_to_user(ioc->data, tmp->addr, ioc->len))
1868 case EWRK3_SET_CSR: /* Set the CSR Register contents */
1869 if (capable(CAP_NET_ADMIN)) {
1870 if (copy_from_user(tmp->addr, ioc->data, 1)) {
1874 outb(tmp->addr[0], EWRK3_CSR);
1880 case EWRK3_GET_EEPROM: /* Get the EEPROM contents */
1881 if (capable(CAP_NET_ADMIN)) {
1882 for (i = 0; i < (EEPROM_MAX >> 1); i++) {
1883 tmp->val[i] = (short) Read_EEPROM(iobase, i);
1886 tmp->addr[i++] = inb(EWRK3_CMR); /* Config/Management Reg. */
1887 for (j = 0; j < ETH_ALEN; j++) {
1888 tmp->addr[i++] = inb(EWRK3_PAR0 + j);
1890 ioc->len = EEPROM_MAX + 1 + ETH_ALEN;
1891 if (copy_to_user(ioc->data, tmp->addr, ioc->len))
1898 case EWRK3_SET_EEPROM: /* Set the EEPROM contents */
1899 if (capable(CAP_NET_ADMIN)) {
1900 if (copy_from_user(tmp->addr, ioc->data, EEPROM_MAX)) {
1904 for (i = 0; i < (EEPROM_MAX >> 1); i++) {
1905 Write_EEPROM(tmp->val[i], iobase, i);
1912 case EWRK3_GET_CMR: /* Get the CMR Register contents */
1913 tmp->addr[0] = inb(EWRK3_CMR);
1915 if (copy_to_user(ioc->data, tmp->addr, ioc->len))
1918 case EWRK3_SET_TX_CUT_THRU: /* Set TX cut through mode */
1919 if (capable(CAP_NET_ADMIN)) {
1926 case EWRK3_CLR_TX_CUT_THRU: /* Clear TX cut through mode */
1927 if (capable(CAP_NET_ADMIN)) {
1935 status = -EOPNOTSUPP;
1942 static struct net_device *ewrk3_devs[MAX_NUM_EWRK3S];
1944 static int io[MAX_NUM_EWRK3S+1] = { 0x300, 0, };
1946 /* '21' below should really be 'MAX_NUM_EWRK3S' */
1947 module_param_array(io, int, NULL, 0);
1948 module_param_array(irq, int, NULL, 0);
1949 MODULE_PARM_DESC(io, "EtherWORKS 3 I/O base address(es)");
1950 MODULE_PARM_DESC(irq, "EtherWORKS 3 IRQ number(s)");
1952 static __exit void ewrk3_exit_module(void)
1956 for( i=0; i<ndevs; i++ ) {
1957 unregister_netdev(ewrk3_devs[i]);
1958 release_region(ewrk3_devs[i]->base_addr, EWRK3_TOTAL_SIZE);
1959 free_netdev(ewrk3_devs[i]);
1960 ewrk3_devs[i] = NULL;
1964 static __init int ewrk3_init_module(void)
1968 while( io[i] && irq[i] ) {
1969 struct net_device *dev
1970 = alloc_etherdev(sizeof(struct ewrk3_private));
1975 if (ewrk3_probe1(dev, io[i], irq[i]) != 0) {
1980 ewrk3_devs[ndevs++] = dev;
1984 return ndevs ? 0 : -EIO;
1988 /* Hack for breakage in new module stuff */
1989 module_exit(ewrk3_exit_module);
1990 module_init(ewrk3_init_module);
1992 MODULE_LICENSE("GPL");
1998 * compile-command: "gcc -D__KERNEL__ -I/linux/include -Wall -Wstrict-prototypes -fomit-frame-pointer -fno-strength-reduce -malign-loops=2 -malign-jumps=2 -malign-functions=2 -O2 -m486 -c ewrk3.c"
2000 * compile-command: "gcc -D__KERNEL__ -DMODULE -I/linux/include -Wall -Wstrict-prototypes -fomit-frame-pointer -fno-strength-reduce -malign-loops=2 -malign-jumps=2 -malign-functions=2 -O2 -m486 -c ewrk3.c"