MOXA linux-2.6.x / linux-2.6.19-uc1 from UC-7110-LX-BOOTLOADER-1.9_VERSION-4.2.tgz
[linux-2.6.19-moxart.git] / drivers / net / 8390.c
blob6a172a3ea65f08620e04d408fcedd320744b5c6d
1 /* 8390.c: A general NS8390 ethernet driver core for linux. */
2 /*
3 Written 1992-94 by Donald Becker.
5 Copyright 1993 United States Government as represented by the
6 Director, National Security Agency.
8 This software may be used and distributed according to the terms
9 of the GNU General Public License, incorporated herein by reference.
11 The author may be reached as becker@scyld.com, or C/O
12 Scyld Computing Corporation
13 410 Severn Ave., Suite 210
14 Annapolis MD 21403
17 This is the chip-specific code for many 8390-based ethernet adaptors.
18 This is not a complete driver, it must be combined with board-specific
19 code such as ne.c, wd.c, 3c503.c, etc.
21 Seeing how at least eight drivers use this code, (not counting the
22 PCMCIA ones either) it is easy to break some card by what seems like
23 a simple innocent change. Please contact me or Donald if you think
24 you have found something that needs changing. -- PG
27 Changelog:
29 Paul Gortmaker : remove set_bit lock, other cleanups.
30 Paul Gortmaker : add ei_get_8390_hdr() so we can pass skb's to
31 ei_block_input() for eth_io_copy_and_sum().
32 Paul Gortmaker : exchange static int ei_pingpong for a #define,
33 also add better Tx error handling.
34 Paul Gortmaker : rewrite Rx overrun handling as per NS specs.
35 Alexey Kuznetsov : use the 8390's six bit hash multicast filter.
36 Paul Gortmaker : tweak ANK's above multicast changes a bit.
37 Paul Gortmaker : update packet statistics for v2.1.x
38 Alan Cox : support arbitary stupid port mappings on the
39 68K Macintosh. Support >16bit I/O spaces
40 Paul Gortmaker : add kmod support for auto-loading of the 8390
41 module by all drivers that require it.
42 Alan Cox : Spinlocking work, added 'BUG_83C690'
43 Paul Gortmaker : Separate out Tx timeout code from Tx path.
44 Greg Ungerer : added some coldfire addressing code.
45 Paul Gortmaker : Remove old unused single Tx buffer code.
46 Hayato Fujiwara : Add m32r support.
47 Paul Gortmaker : use skb_padto() instead of stack scratch area
49 Sources:
50 The National Semiconductor LAN Databook, and the 3Com 3c503 databook.
54 static const char version[] =
55 "8390.c:v1.10cvs 9/23/94 Donald Becker (becker@cesdis.gsfc.nasa.gov)\n";
57 #include <linux/module.h>
58 #include <linux/kernel.h>
59 #include <linux/jiffies.h>
60 #include <linux/fs.h>
61 #include <linux/types.h>
62 #include <linux/string.h>
63 #include <linux/bitops.h>
64 #include <asm/system.h>
65 #include <asm/uaccess.h>
66 #include <asm/io.h>
67 #include <asm/irq.h>
68 #include <linux/delay.h>
69 #include <linux/errno.h>
70 #include <linux/fcntl.h>
71 #include <linux/in.h>
72 #include <linux/interrupt.h>
73 #include <linux/init.h>
74 #include <linux/crc32.h>
76 #include <linux/netdevice.h>
77 #include <linux/etherdevice.h>
79 #define NS8390_CORE
80 #include "8390.h"
82 #ifdef CONFIG_COLDFIRE
83 #ifdef CONFIG_NE2K_PCI
84 #include <asm/mcfpci.h>
85 #else
86 #include <asm/mcfne.h>
87 #endif /* CONFIG_NE2K_PCI */
88 #endif /* CONFIG_COLDFIRE */
90 #ifdef CONFIG_LEDMAN
91 #include <linux/ledman.h>
92 #endif
94 #define BUG_83C690
96 /* These are the operational function interfaces to board-specific
97 routines.
98 void reset_8390(struct net_device *dev)
99 Resets the board associated with DEV, including a hardware reset of
100 the 8390. This is only called when there is a transmit timeout, and
101 it is always followed by 8390_init().
102 void block_output(struct net_device *dev, int count, const unsigned char *buf,
103 int start_page)
104 Write the COUNT bytes of BUF to the packet buffer at START_PAGE. The
105 "page" value uses the 8390's 256-byte pages.
106 void get_8390_hdr(struct net_device *dev, struct e8390_hdr *hdr, int ring_page)
107 Read the 4 byte, page aligned 8390 header. *If* there is a
108 subsequent read, it will be of the rest of the packet.
109 void block_input(struct net_device *dev, int count, struct sk_buff *skb, int ring_offset)
110 Read COUNT bytes from the packet buffer into the skb data area. Start
111 reading from RING_OFFSET, the address as the 8390 sees it. This will always
112 follow the read of the 8390 header.
114 #define ei_reset_8390 (ei_local->reset_8390)
115 #define ei_block_output (ei_local->block_output)
116 #define ei_block_input (ei_local->block_input)
117 #define ei_get_8390_hdr (ei_local->get_8390_hdr)
119 /* use 0 for production, 1 for verification, >2 for debug */
120 #ifndef ei_debug
121 int ei_debug = 1;
122 #endif
124 /* Index to functions. */
125 static void ei_tx_intr(struct net_device *dev);
126 static void ei_tx_err(struct net_device *dev);
127 static void ei_tx_timeout(struct net_device *dev);
128 static void ei_receive(struct net_device *dev);
129 static void ei_rx_overrun(struct net_device *dev);
131 /* Routines generic to NS8390-based boards. */
132 static void NS8390_trigger_send(struct net_device *dev, unsigned int length,
133 int start_page);
134 static void set_multicast_list(struct net_device *dev);
135 static void do_set_multicast_list(struct net_device *dev);
138 * SMP and the 8390 setup.
140 * The 8390 isnt exactly designed to be multithreaded on RX/TX. There is
141 * a page register that controls bank and packet buffer access. We guard
142 * this with ei_local->page_lock. Nobody should assume or set the page other
143 * than zero when the lock is not held. Lock holders must restore page 0
144 * before unlocking. Even pure readers must take the lock to protect in
145 * page 0.
147 * To make life difficult the chip can also be very slow. We therefore can't
148 * just use spinlocks. For the longer lockups we disable the irq the device
149 * sits on and hold the lock. We must hold the lock because there is a dual
150 * processor case other than interrupts (get stats/set multicast list in
151 * parallel with each other and transmit).
153 * Note: in theory we can just disable the irq on the card _but_ there is
154 * a latency on SMP irq delivery. So we can easily go "disable irq" "sync irqs"
155 * enter lock, take the queued irq. So we waddle instead of flying.
157 * Finally by special arrangement for the purpose of being generally
158 * annoying the transmit function is called bh atomic. That places
159 * restrictions on the user context callers as disable_irq won't save
160 * them.
166 * ei_open - Open/initialize the board.
167 * @dev: network device to initialize
169 * This routine goes all-out, setting everything
170 * up anew at each open, even though many of these registers should only
171 * need to be set once at boot.
173 int ei_open(struct net_device *dev)
175 unsigned long flags;
176 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
178 /* The card I/O part of the driver (e.g. 3c503) can hook a Tx timeout
179 wrapper that does e.g. media check & then calls ei_tx_timeout. */
180 if (dev->tx_timeout == NULL)
181 dev->tx_timeout = ei_tx_timeout;
182 if (dev->watchdog_timeo <= 0)
183 dev->watchdog_timeo = TX_TIMEOUT;
186 * Grab the page lock so we own the register set, then call
187 * the init function.
190 spin_lock_irqsave(&ei_local->page_lock, flags);
191 NS8390_init(dev, 1);
192 /* Set the flag before we drop the lock, That way the IRQ arrives
193 after its set and we get no silly warnings */
194 netif_start_queue(dev);
195 spin_unlock_irqrestore(&ei_local->page_lock, flags);
196 ei_local->irqlock = 0;
197 return 0;
201 * ei_close - shut down network device
202 * @dev: network device to close
204 * Opposite of ei_open(). Only used when "ifconfig <devname> down" is done.
206 int ei_close(struct net_device *dev)
208 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
209 unsigned long flags;
212 * Hold the page lock during close
215 spin_lock_irqsave(&ei_local->page_lock, flags);
216 NS8390_init(dev, 0);
217 spin_unlock_irqrestore(&ei_local->page_lock, flags);
218 netif_stop_queue(dev);
219 return 0;
223 * ei_tx_timeout - handle transmit time out condition
224 * @dev: network device which has apparently fallen asleep
226 * Called by kernel when device never acknowledges a transmit has
227 * completed (or failed) - i.e. never posted a Tx related interrupt.
230 void ei_tx_timeout(struct net_device *dev)
232 long e8390_base = dev->base_addr;
233 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
234 int txsr, isr, tickssofar = jiffies - dev->trans_start;
235 unsigned long flags;
237 #if defined(CONFIG_M32R) && defined(CONFIG_SMP)
238 unsigned long icucr;
240 local_irq_save(flags);
241 icucr = inl(M32R_ICU_CR1_PORTL);
242 icucr |= M32R_ICUCR_ISMOD11;
243 outl(icucr, M32R_ICU_CR1_PORTL);
244 local_irq_restore(flags);
245 #endif
246 ei_local->stat.tx_errors++;
248 spin_lock_irqsave(&ei_local->page_lock, flags);
249 txsr = inb(e8390_base+EN0_TSR);
250 isr = inb(e8390_base+EN0_ISR);
251 spin_unlock_irqrestore(&ei_local->page_lock, flags);
253 printk(KERN_DEBUG "%s: Tx timed out, %s TSR=%#2x, ISR=%#2x, t=%d.\n",
254 dev->name, (txsr & ENTSR_ABT) ? "excess collisions." :
255 (isr) ? "lost interrupt?" : "cable problem?", txsr, isr, tickssofar);
257 if (!isr && !ei_local->stat.tx_packets)
259 /* The 8390 probably hasn't gotten on the cable yet. */
260 ei_local->interface_num ^= 1; /* Try a different xcvr. */
263 /* Ugly but a reset can be slow, yet must be protected */
265 disable_irq_nosync_lockdep(dev->irq);
266 spin_lock(&ei_local->page_lock);
268 /* Try to restart the card. Perhaps the user has fixed something. */
269 ei_reset_8390(dev);
270 NS8390_init(dev, 1);
272 spin_unlock(&ei_local->page_lock);
273 enable_irq_lockdep(dev->irq);
274 netif_wake_queue(dev);
278 * ei_start_xmit - begin packet transmission
279 * @skb: packet to be sent
280 * @dev: network device to which packet is sent
282 * Sends a packet to an 8390 network device.
285 static int ei_start_xmit(struct sk_buff *skb, struct net_device *dev)
287 long e8390_base = dev->base_addr;
288 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
289 int send_length = skb->len, output_page;
290 unsigned long flags;
291 char buf[ETH_ZLEN];
292 char *data = skb->data;
294 if (skb->len < ETH_ZLEN) {
295 memset(buf, 0, ETH_ZLEN); /* more efficient than doing just the needed bits */
296 memcpy(buf, data, skb->len);
297 send_length = ETH_ZLEN;
298 data = buf;
301 /* Mask interrupts from the ethercard.
302 SMP: We have to grab the lock here otherwise the IRQ handler
303 on another CPU can flip window and race the IRQ mask set. We end
304 up trashing the mcast filter not disabling irqs if we don't lock */
306 spin_lock_irqsave(&ei_local->page_lock, flags);
307 outb_p(0x00, e8390_base + EN0_IMR);
308 spin_unlock_irqrestore(&ei_local->page_lock, flags);
312 * Slow phase with lock held.
315 disable_irq_nosync_lockdep_irqsave(dev->irq, &flags);
317 spin_lock(&ei_local->page_lock);
319 ei_local->irqlock = 1;
322 * We have two Tx slots available for use. Find the first free
323 * slot, and then perform some sanity checks. With two Tx bufs,
324 * you get very close to transmitting back-to-back packets. With
325 * only one Tx buf, the transmitter sits idle while you reload the
326 * card, leaving a substantial gap between each transmitted packet.
329 if (ei_local->tx1 == 0)
331 output_page = ei_local->tx_start_page;
332 ei_local->tx1 = send_length;
333 if (ei_debug && ei_local->tx2 > 0)
334 printk(KERN_DEBUG "%s: idle transmitter tx2=%d, lasttx=%d, txing=%d.\n",
335 dev->name, ei_local->tx2, ei_local->lasttx, ei_local->txing);
337 else if (ei_local->tx2 == 0)
339 output_page = ei_local->tx_start_page + TX_PAGES/2;
340 ei_local->tx2 = send_length;
341 if (ei_debug && ei_local->tx1 > 0)
342 printk(KERN_DEBUG "%s: idle transmitter, tx1=%d, lasttx=%d, txing=%d.\n",
343 dev->name, ei_local->tx1, ei_local->lasttx, ei_local->txing);
345 else
346 { /* We should never get here. */
347 if (ei_debug)
348 printk(KERN_DEBUG "%s: No Tx buffers free! tx1=%d tx2=%d last=%d\n",
349 dev->name, ei_local->tx1, ei_local->tx2, ei_local->lasttx);
350 ei_local->irqlock = 0;
351 netif_stop_queue(dev);
352 outb_p(ENISR_ALL, e8390_base + EN0_IMR);
353 spin_unlock(&ei_local->page_lock);
354 enable_irq_lockdep_irqrestore(dev->irq, &flags);
355 ei_local->stat.tx_errors++;
356 return 1;
360 * Okay, now upload the packet and trigger a send if the transmitter
361 * isn't already sending. If it is busy, the interrupt handler will
362 * trigger the send later, upon receiving a Tx done interrupt.
365 ei_block_output(dev, send_length, data, output_page);
367 if (! ei_local->txing)
369 ei_local->txing = 1;
370 NS8390_trigger_send(dev, send_length, output_page);
371 dev->trans_start = jiffies;
372 if (output_page == ei_local->tx_start_page)
374 ei_local->tx1 = -1;
375 ei_local->lasttx = -1;
377 else
379 ei_local->tx2 = -1;
380 ei_local->lasttx = -2;
383 else ei_local->txqueue++;
385 if (ei_local->tx1 && ei_local->tx2)
386 netif_stop_queue(dev);
387 else
388 netif_start_queue(dev);
390 /* Turn 8390 interrupts back on. */
391 ei_local->irqlock = 0;
392 outb_p(ENISR_ALL, e8390_base + EN0_IMR);
394 spin_unlock(&ei_local->page_lock);
395 enable_irq_lockdep_irqrestore(dev->irq, &flags);
397 dev_kfree_skb (skb);
398 ei_local->stat.tx_bytes += send_length;
400 return 0;
404 * ei_interrupt - handle the interrupts from an 8390
405 * @irq: interrupt number
406 * @dev_id: a pointer to the net_device
408 * Handle the ether interface interrupts. We pull packets from
409 * the 8390 via the card specific functions and fire them at the networking
410 * stack. We also handle transmit completions and wake the transmit path if
411 * necessary. We also update the counters and do other housekeeping as
412 * needed.
415 irqreturn_t ei_interrupt(int irq, void *dev_id)
417 struct net_device *dev = dev_id;
418 long e8390_base;
419 int interrupts, nr_serviced = 0;
420 struct ei_device *ei_local;
422 #ifdef CONFIG_M5272
423 ne2000_irqack(irq);
424 #endif
426 e8390_base = dev->base_addr;
427 ei_local = netdev_priv(dev);
430 * Protect the irq test too.
433 spin_lock(&ei_local->page_lock);
435 if (ei_local->irqlock)
437 #if 1 /* This might just be an interrupt for a PCI device sharing this line */
438 /* The "irqlock" check is only for testing. */
439 printk(ei_local->irqlock
440 ? "%s: Interrupted while interrupts are masked! isr=%#2x imr=%#2x.\n"
441 : "%s: Reentering the interrupt handler! isr=%#2x imr=%#2x.\n",
442 dev->name, inb_p(e8390_base + EN0_ISR),
443 inb_p(e8390_base + EN0_IMR));
444 #endif
445 spin_unlock(&ei_local->page_lock);
446 return IRQ_NONE;
449 /* Change to page 0 and read the intr status reg. */
450 outb_p(E8390_NODMA+E8390_PAGE0, e8390_base + E8390_CMD);
451 if (ei_debug > 3)
452 printk(KERN_DEBUG "%s: interrupt(isr=%#2.2x).\n", dev->name,
453 inb_p(e8390_base + EN0_ISR));
455 /* !!Assumption!! -- we stay in page 0. Don't break this. */
456 while ((interrupts = inb_p(e8390_base + EN0_ISR)) != 0
457 && ++nr_serviced < MAX_SERVICE)
459 if (!netif_running(dev)) {
460 printk(KERN_WARNING "%s: interrupt from stopped card\n", dev->name);
461 /* rmk - acknowledge the interrupts */
462 outb_p(interrupts, e8390_base + EN0_ISR);
463 interrupts = 0;
464 break;
466 #ifdef CONFIG_LEDMAN
467 if (interrupts & (ENISR_TX|ENISR_TX_ERR)) {
468 ledman_cmd(LEDMAN_CMD_SET,
469 strcmp(dev->name, "eth0") == 0 ?
470 LEDMAN_LAN1_TX :
471 LEDMAN_LAN2_TX);
472 } else {
473 ledman_cmd(LEDMAN_CMD_SET,
474 strcmp(dev->name, "eth0") == 0 ?
475 LEDMAN_LAN1_RX :
476 LEDMAN_LAN2_RX);
478 #endif
479 if (interrupts & ENISR_OVER)
480 ei_rx_overrun(dev);
481 else if (interrupts & (ENISR_RX+ENISR_RX_ERR))
483 /* Got a good (?) packet. */
484 ei_receive(dev);
486 /* Push the next to-transmit packet through. */
487 if (interrupts & ENISR_TX)
488 ei_tx_intr(dev);
489 else if (interrupts & ENISR_TX_ERR)
490 ei_tx_err(dev);
492 if (interrupts & ENISR_COUNTERS)
494 ei_local->stat.rx_frame_errors += inb_p(e8390_base + EN0_COUNTER0);
495 ei_local->stat.rx_crc_errors += inb_p(e8390_base + EN0_COUNTER1);
496 ei_local->stat.rx_missed_errors+= inb_p(e8390_base + EN0_COUNTER2);
497 outb_p(ENISR_COUNTERS, e8390_base + EN0_ISR); /* Ack intr. */
500 /* Ignore any RDC interrupts that make it back to here. */
501 if (interrupts & ENISR_RDC)
503 outb_p(ENISR_RDC, e8390_base + EN0_ISR);
506 outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base + E8390_CMD);
509 if (interrupts && ei_debug)
511 outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base + E8390_CMD);
512 if (nr_serviced >= MAX_SERVICE)
514 /* 0xFF is valid for a card removal */
515 if(interrupts!=0xFF)
516 printk(KERN_WARNING "%s: Too much work at interrupt, status %#2.2x\n",
517 dev->name, interrupts);
518 outb_p(ENISR_ALL, e8390_base + EN0_ISR); /* Ack. most intrs. */
519 } else {
520 printk(KERN_WARNING "%s: unknown interrupt %#2x\n", dev->name, interrupts);
521 outb_p(0xff, e8390_base + EN0_ISR); /* Ack. all intrs. */
524 spin_unlock(&ei_local->page_lock);
525 return IRQ_RETVAL(nr_serviced > 0);
528 #ifdef CONFIG_NET_POLL_CONTROLLER
529 void ei_poll(struct net_device *dev)
531 disable_irq_lockdep(dev->irq);
532 ei_interrupt(dev->irq, dev);
533 enable_irq_lockdep(dev->irq);
535 #endif
538 * ei_tx_err - handle transmitter error
539 * @dev: network device which threw the exception
541 * A transmitter error has happened. Most likely excess collisions (which
542 * is a fairly normal condition). If the error is one where the Tx will
543 * have been aborted, we try and send another one right away, instead of
544 * letting the failed packet sit and collect dust in the Tx buffer. This
545 * is a much better solution as it avoids kernel based Tx timeouts, and
546 * an unnecessary card reset.
548 * Called with lock held.
551 static void ei_tx_err(struct net_device *dev)
553 long e8390_base = dev->base_addr;
554 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
555 unsigned char txsr = inb_p(e8390_base+EN0_TSR);
556 unsigned char tx_was_aborted = txsr & (ENTSR_ABT+ENTSR_FU);
558 #ifdef VERBOSE_ERROR_DUMP
559 printk(KERN_DEBUG "%s: transmitter error (%#2x): ", dev->name, txsr);
560 if (txsr & ENTSR_ABT)
561 printk("excess-collisions ");
562 if (txsr & ENTSR_ND)
563 printk("non-deferral ");
564 if (txsr & ENTSR_CRS)
565 printk("lost-carrier ");
566 if (txsr & ENTSR_FU)
567 printk("FIFO-underrun ");
568 if (txsr & ENTSR_CDH)
569 printk("lost-heartbeat ");
570 printk("\n");
571 #endif
573 outb_p(ENISR_TX_ERR, e8390_base + EN0_ISR); /* Ack intr. */
575 if (tx_was_aborted)
576 ei_tx_intr(dev);
577 else
579 ei_local->stat.tx_errors++;
580 if (txsr & ENTSR_CRS) ei_local->stat.tx_carrier_errors++;
581 if (txsr & ENTSR_CDH) ei_local->stat.tx_heartbeat_errors++;
582 if (txsr & ENTSR_OWC) ei_local->stat.tx_window_errors++;
587 * ei_tx_intr - transmit interrupt handler
588 * @dev: network device for which tx intr is handled
590 * We have finished a transmit: check for errors and then trigger the next
591 * packet to be sent. Called with lock held.
594 static void ei_tx_intr(struct net_device *dev)
596 long e8390_base = dev->base_addr;
597 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
598 int status = inb(e8390_base + EN0_TSR);
600 outb_p(ENISR_TX, e8390_base + EN0_ISR); /* Ack intr. */
603 * There are two Tx buffers, see which one finished, and trigger
604 * the send of another one if it exists.
606 ei_local->txqueue--;
608 if (ei_local->tx1 < 0)
610 if (ei_local->lasttx != 1 && ei_local->lasttx != -1)
611 printk(KERN_ERR "%s: bogus last_tx_buffer %d, tx1=%d.\n",
612 ei_local->name, ei_local->lasttx, ei_local->tx1);
613 ei_local->tx1 = 0;
614 if (ei_local->tx2 > 0)
616 ei_local->txing = 1;
617 NS8390_trigger_send(dev, ei_local->tx2, ei_local->tx_start_page + 6);
618 dev->trans_start = jiffies;
619 ei_local->tx2 = -1,
620 ei_local->lasttx = 2;
622 else ei_local->lasttx = 20, ei_local->txing = 0;
624 else if (ei_local->tx2 < 0)
626 if (ei_local->lasttx != 2 && ei_local->lasttx != -2)
627 printk("%s: bogus last_tx_buffer %d, tx2=%d.\n",
628 ei_local->name, ei_local->lasttx, ei_local->tx2);
629 ei_local->tx2 = 0;
630 if (ei_local->tx1 > 0)
632 ei_local->txing = 1;
633 NS8390_trigger_send(dev, ei_local->tx1, ei_local->tx_start_page);
634 dev->trans_start = jiffies;
635 ei_local->tx1 = -1;
636 ei_local->lasttx = 1;
638 else
639 ei_local->lasttx = 10, ei_local->txing = 0;
641 // else printk(KERN_WARNING "%s: unexpected TX-done interrupt, lasttx=%d.\n",
642 // dev->name, ei_local->lasttx);
644 /* Minimize Tx latency: update the statistics after we restart TXing. */
645 if (status & ENTSR_COL)
646 ei_local->stat.collisions++;
647 if (status & ENTSR_PTX)
648 ei_local->stat.tx_packets++;
649 else
651 ei_local->stat.tx_errors++;
652 if (status & ENTSR_ABT)
654 ei_local->stat.tx_aborted_errors++;
655 ei_local->stat.collisions += 16;
657 if (status & ENTSR_CRS)
658 ei_local->stat.tx_carrier_errors++;
659 if (status & ENTSR_FU)
660 ei_local->stat.tx_fifo_errors++;
661 if (status & ENTSR_CDH)
662 ei_local->stat.tx_heartbeat_errors++;
663 if (status & ENTSR_OWC)
664 ei_local->stat.tx_window_errors++;
666 netif_wake_queue(dev);
670 * ei_receive - receive some packets
671 * @dev: network device with which receive will be run
673 * We have a good packet(s), get it/them out of the buffers.
674 * Called with lock held.
677 static void ei_receive(struct net_device *dev)
679 long e8390_base = dev->base_addr;
680 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
681 unsigned char rxing_page, this_frame, next_frame;
682 unsigned short current_offset;
683 int rx_pkt_count = 0;
684 struct e8390_pkt_hdr rx_frame;
685 int num_rx_pages = ei_local->stop_page-ei_local->rx_start_page;
687 while (++rx_pkt_count < 10)
689 int pkt_len, pkt_stat;
691 /* Get the rx page (incoming packet pointer). */
692 outb_p(E8390_NODMA+E8390_PAGE1, e8390_base + E8390_CMD);
693 rxing_page = inb_p(e8390_base + EN1_CURPAG);
694 outb_p(E8390_NODMA+E8390_PAGE0, e8390_base + E8390_CMD);
696 /* Remove one frame from the ring. Boundary is always a page behind. */
697 this_frame = inb_p(e8390_base + EN0_BOUNDARY) + 1;
698 if (this_frame >= ei_local->stop_page)
699 this_frame = ei_local->rx_start_page;
701 /* Someday we'll omit the previous, iff we never get this message.
702 (There is at least one clone claimed to have a problem.)
704 Keep quiet if it looks like a card removal. One problem here
705 is that some clones crash in roughly the same way.
707 if (ei_debug > 0 && this_frame != ei_local->current_page && (this_frame!=0x0 || rxing_page!=0xFF))
708 printk(KERN_ERR "%s: mismatched read page pointers %2x vs %2x.\n",
709 dev->name, this_frame, ei_local->current_page);
711 if (this_frame == rxing_page) /* Read all the frames? */
712 break; /* Done for now */
714 current_offset = this_frame << 8;
715 ei_get_8390_hdr(dev, &rx_frame, this_frame);
717 pkt_len = rx_frame.count - sizeof(struct e8390_pkt_hdr);
718 pkt_stat = rx_frame.status;
720 next_frame = this_frame + 1 + ((pkt_len+4)>>8);
722 /* Check for bogosity warned by 3c503 book: the status byte is never
723 written. This happened a lot during testing! This code should be
724 cleaned up someday. */
725 if (rx_frame.next != next_frame
726 && rx_frame.next != next_frame + 1
727 && rx_frame.next != next_frame - num_rx_pages
728 && rx_frame.next != next_frame + 1 - num_rx_pages) {
729 ei_local->current_page = rxing_page;
730 outb(ei_local->current_page-1, e8390_base+EN0_BOUNDARY);
731 ei_local->stat.rx_errors++;
732 continue;
735 if (pkt_len < 60 || pkt_len > 1518)
737 if (ei_debug)
738 printk(KERN_DEBUG "%s: bogus packet size: %d, status=%#2x nxpg=%#2x.\n",
739 dev->name, rx_frame.count, rx_frame.status,
740 rx_frame.next);
741 ei_local->stat.rx_errors++;
742 ei_local->stat.rx_length_errors++;
744 else if ((pkt_stat & 0x0F) == ENRSR_RXOK)
746 struct sk_buff *skb;
748 skb = dev_alloc_skb(pkt_len+2);
749 if (skb == NULL)
751 if (ei_debug > 1)
752 printk(KERN_DEBUG "%s: Couldn't allocate a sk_buff of size %d.\n",
753 dev->name, pkt_len);
754 ei_local->stat.rx_dropped++;
755 break;
757 else
759 skb_reserve(skb,2); /* IP headers on 16 byte boundaries */
760 skb->dev = dev;
761 skb_put(skb, pkt_len); /* Make room */
762 ei_block_input(dev, pkt_len, skb, current_offset + sizeof(rx_frame));
763 skb->protocol=eth_type_trans(skb,dev);
764 netif_rx(skb);
765 dev->last_rx = jiffies;
766 ei_local->stat.rx_packets++;
767 ei_local->stat.rx_bytes += pkt_len;
768 if (pkt_stat & ENRSR_PHY)
769 ei_local->stat.multicast++;
772 else
774 if (ei_debug)
775 printk(KERN_DEBUG "%s: bogus packet: status=%#2x nxpg=%#2x size=%d\n",
776 dev->name, rx_frame.status, rx_frame.next,
777 rx_frame.count);
778 ei_local->stat.rx_errors++;
779 /* NB: The NIC counts CRC, frame and missed errors. */
780 if (pkt_stat & ENRSR_FO)
781 ei_local->stat.rx_fifo_errors++;
783 next_frame = rx_frame.next;
785 /* This _should_ never happen: it's here for avoiding bad clones. */
786 if (next_frame >= ei_local->stop_page) {
787 printk("%s: next frame inconsistency, %#2x\n", dev->name,
788 next_frame);
789 next_frame = ei_local->rx_start_page;
791 ei_local->current_page = next_frame;
792 outb_p(next_frame-1, e8390_base+EN0_BOUNDARY);
795 /* We used to also ack ENISR_OVER here, but that would sometimes mask
796 a real overrun, leaving the 8390 in a stopped state with rec'vr off. */
797 outb_p(ENISR_RX+ENISR_RX_ERR, e8390_base+EN0_ISR);
798 return;
802 * ei_rx_overrun - handle receiver overrun
803 * @dev: network device which threw exception
805 * We have a receiver overrun: we have to kick the 8390 to get it started
806 * again. Problem is that you have to kick it exactly as NS prescribes in
807 * the updated datasheets, or "the NIC may act in an unpredictable manner."
808 * This includes causing "the NIC to defer indefinitely when it is stopped
809 * on a busy network." Ugh.
810 * Called with lock held. Don't call this with the interrupts off or your
811 * computer will hate you - it takes 10ms or so.
814 static void ei_rx_overrun(struct net_device *dev)
816 long e8390_base = dev->base_addr;
817 unsigned char was_txing, must_resend = 0;
818 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
821 * Record whether a Tx was in progress and then issue the
822 * stop command.
824 was_txing = inb_p(e8390_base+E8390_CMD) & E8390_TRANS;
825 outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD);
827 if (ei_debug > 1)
828 printk(KERN_DEBUG "%s: Receiver overrun.\n", dev->name);
829 ei_local->stat.rx_over_errors++;
832 * Wait a full Tx time (1.2ms) + some guard time, NS says 1.6ms total.
833 * Early datasheets said to poll the reset bit, but now they say that
834 * it "is not a reliable indicator and subsequently should be ignored."
835 * We wait at least 10ms.
838 mdelay(10);
841 * Reset RBCR[01] back to zero as per magic incantation.
843 outb_p(0x00, e8390_base+EN0_RCNTLO);
844 outb_p(0x00, e8390_base+EN0_RCNTHI);
847 * See if any Tx was interrupted or not. According to NS, this
848 * step is vital, and skipping it will cause no end of havoc.
851 if (was_txing)
853 unsigned char tx_completed = inb_p(e8390_base+EN0_ISR) & (ENISR_TX+ENISR_TX_ERR);
854 if (!tx_completed)
855 must_resend = 1;
859 * Have to enter loopback mode and then restart the NIC before
860 * you are allowed to slurp packets up off the ring.
862 outb_p(E8390_TXOFF, e8390_base + EN0_TXCR);
863 outb_p(E8390_NODMA + E8390_PAGE0 + E8390_START, e8390_base + E8390_CMD);
866 * Clear the Rx ring of all the debris, and ack the interrupt.
868 ei_receive(dev);
869 outb_p(ENISR_OVER, e8390_base+EN0_ISR);
872 * Leave loopback mode, and resend any packet that got stopped.
874 outb_p(E8390_TXCONFIG, e8390_base + EN0_TXCR);
875 if (must_resend)
876 outb_p(E8390_NODMA + E8390_PAGE0 + E8390_START + E8390_TRANS, e8390_base + E8390_CMD);
880 * Collect the stats. This is called unlocked and from several contexts.
883 static struct net_device_stats *get_stats(struct net_device *dev)
885 long ioaddr = dev->base_addr;
886 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
887 unsigned long flags;
889 /* If the card is stopped, just return the present stats. */
890 if (!netif_running(dev))
891 return &ei_local->stat;
893 spin_lock_irqsave(&ei_local->page_lock,flags);
894 /* Read the counter registers, assuming we are in page 0. */
895 ei_local->stat.rx_frame_errors += inb_p(ioaddr + EN0_COUNTER0);
896 ei_local->stat.rx_crc_errors += inb_p(ioaddr + EN0_COUNTER1);
897 ei_local->stat.rx_missed_errors+= inb_p(ioaddr + EN0_COUNTER2);
898 spin_unlock_irqrestore(&ei_local->page_lock, flags);
900 return &ei_local->stat;
904 * Form the 64 bit 8390 multicast table from the linked list of addresses
905 * associated with this dev structure.
908 static inline void make_mc_bits(u8 *bits, struct net_device *dev)
910 struct dev_mc_list *dmi;
912 for (dmi=dev->mc_list; dmi; dmi=dmi->next)
914 u32 crc;
915 if (dmi->dmi_addrlen != ETH_ALEN)
917 printk(KERN_INFO "%s: invalid multicast address length given.\n", dev->name);
918 continue;
920 crc = ether_crc(ETH_ALEN, dmi->dmi_addr);
922 * The 8390 uses the 6 most significant bits of the
923 * CRC to index the multicast table.
925 bits[crc>>29] |= (1<<((crc>>26)&7));
930 * do_set_multicast_list - set/clear multicast filter
931 * @dev: net device for which multicast filter is adjusted
933 * Set or clear the multicast filter for this adaptor. May be called
934 * from a BH in 2.1.x. Must be called with lock held.
937 static void do_set_multicast_list(struct net_device *dev)
939 long e8390_base = dev->base_addr;
940 int i;
941 struct ei_device *ei_local = (struct ei_device*)netdev_priv(dev);
943 if (!(dev->flags&(IFF_PROMISC|IFF_ALLMULTI)))
945 memset(ei_local->mcfilter, 0, 8);
946 if (dev->mc_list)
947 make_mc_bits(ei_local->mcfilter, dev);
949 else
950 memset(ei_local->mcfilter, 0xFF, 8); /* mcast set to accept-all */
953 * DP8390 manuals don't specify any magic sequence for altering
954 * the multicast regs on an already running card. To be safe, we
955 * ensure multicast mode is off prior to loading up the new hash
956 * table. If this proves to be not enough, we can always resort
957 * to stopping the NIC, loading the table and then restarting.
959 * Bug Alert! The MC regs on the SMC 83C690 (SMC Elite and SMC
960 * Elite16) appear to be write-only. The NS 8390 data sheet lists
961 * them as r/w so this is a bug. The SMC 83C790 (SMC Ultra and
962 * Ultra32 EISA) appears to have this bug fixed.
965 if (netif_running(dev))
966 outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR);
967 outb_p(E8390_NODMA + E8390_PAGE1, e8390_base + E8390_CMD);
968 for(i = 0; i < 8; i++)
970 outb_p(ei_local->mcfilter[i], e8390_base + EN1_MULT_SHIFT(i));
971 #ifndef BUG_83C690
972 if(inb_p(e8390_base + EN1_MULT_SHIFT(i))!=ei_local->mcfilter[i])
973 printk(KERN_ERR "Multicast filter read/write mismap %d\n",i);
974 #endif
976 outb_p(E8390_NODMA + E8390_PAGE0, e8390_base + E8390_CMD);
978 if(dev->flags&IFF_PROMISC)
979 outb_p(E8390_RXCONFIG | 0x18, e8390_base + EN0_RXCR);
980 else if(dev->flags&IFF_ALLMULTI || dev->mc_list)
981 outb_p(E8390_RXCONFIG | 0x08, e8390_base + EN0_RXCR);
982 else
983 outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR);
987 * Called without lock held. This is invoked from user context and may
988 * be parallel to just about everything else. Its also fairly quick and
989 * not called too often. Must protect against both bh and irq users
992 static void set_multicast_list(struct net_device *dev)
994 unsigned long flags;
995 struct ei_device *ei_local = (struct ei_device*)netdev_priv(dev);
997 spin_lock_irqsave(&ei_local->page_lock, flags);
998 do_set_multicast_list(dev);
999 spin_unlock_irqrestore(&ei_local->page_lock, flags);
1003 * ethdev_setup - init rest of 8390 device struct
1004 * @dev: network device structure to init
1006 * Initialize the rest of the 8390 device structure. Do NOT __init
1007 * this, as it is used by 8390 based modular drivers too.
1010 static void ethdev_setup(struct net_device *dev)
1012 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1013 if (ei_debug > 1)
1014 printk(version);
1016 dev->hard_start_xmit = &ei_start_xmit;
1017 dev->get_stats = get_stats;
1018 dev->set_multicast_list = &set_multicast_list;
1020 ether_setup(dev);
1022 spin_lock_init(&ei_local->page_lock);
1026 * alloc_ei_netdev - alloc_etherdev counterpart for 8390
1027 * @size: extra bytes to allocate
1029 * Allocate 8390-specific net_device.
1031 struct net_device *__alloc_ei_netdev(int size)
1033 return alloc_netdev(sizeof(struct ei_device) + size, "eth%d",
1034 ethdev_setup);
1040 /* This page of functions should be 8390 generic */
1041 /* Follow National Semi's recommendations for initializing the "NIC". */
1044 * NS8390_init - initialize 8390 hardware
1045 * @dev: network device to initialize
1046 * @startp: boolean. non-zero value to initiate chip processing
1048 * Must be called with lock held.
1051 void NS8390_init(struct net_device *dev, int startp)
1053 long e8390_base = dev->base_addr;
1054 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1055 int i;
1056 int endcfg = ei_local->word16
1057 ? (0x48 | ENDCFG_WTS | (ei_local->bigendian ? ENDCFG_BOS : 0))
1058 : 0x48;
1060 if(sizeof(struct e8390_pkt_hdr)!=4)
1061 panic("8390.c: header struct mispacked\n");
1062 /* Follow National Semi's recommendations for initing the DP83902. */
1063 outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD); /* 0x21 */
1064 outb_p(endcfg, e8390_base + EN0_DCFG); /* 0x48 or 0x49 */
1065 /* Clear the remote byte count registers. */
1066 outb_p(0x00, e8390_base + EN0_RCNTLO);
1067 outb_p(0x00, e8390_base + EN0_RCNTHI);
1068 /* Set to monitor and loopback mode -- this is vital!. */
1069 outb_p(E8390_RXOFF, e8390_base + EN0_RXCR); /* 0x20 */
1070 outb_p(E8390_TXOFF, e8390_base + EN0_TXCR); /* 0x02 */
1071 /* Set the transmit page and receive ring. */
1072 outb_p(ei_local->tx_start_page, e8390_base + EN0_TPSR);
1073 ei_local->tx1 = ei_local->tx2 = 0;
1074 outb_p(ei_local->rx_start_page, e8390_base + EN0_STARTPG);
1075 outb_p(ei_local->stop_page-1, e8390_base + EN0_BOUNDARY); /* 3c503 says 0x3f,NS0x26*/
1076 ei_local->current_page = ei_local->rx_start_page; /* assert boundary+1 */
1077 outb_p(ei_local->stop_page, e8390_base + EN0_STOPPG);
1078 /* Clear the pending interrupts and mask. */
1079 outb_p(0xFF, e8390_base + EN0_ISR);
1080 outb_p(0x00, e8390_base + EN0_IMR);
1082 /* Copy the station address into the DS8390 registers. */
1084 outb_p(E8390_NODMA + E8390_PAGE1 + E8390_STOP, e8390_base+E8390_CMD); /* 0x61 */
1085 for(i = 0; i < 6; i++)
1087 outb_p(dev->dev_addr[i], e8390_base + EN1_PHYS_SHIFT(i));
1088 if (ei_debug > 1 && inb_p(e8390_base + EN1_PHYS_SHIFT(i))!=dev->dev_addr[i])
1089 printk(KERN_ERR "Hw. address read/write mismap %d\n",i);
1092 outb_p(ei_local->rx_start_page, e8390_base + EN1_CURPAG);
1093 outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD);
1095 netif_start_queue(dev);
1096 ei_local->tx1 = ei_local->tx2 = 0;
1097 ei_local->txing = 0;
1099 if (startp)
1101 outb_p(0xff, e8390_base + EN0_ISR);
1102 outb_p(ENISR_ALL, e8390_base + EN0_IMR);
1103 outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base+E8390_CMD);
1104 outb_p(E8390_TXCONFIG, e8390_base + EN0_TXCR); /* xmit on. */
1105 /* 3c503 TechMan says rxconfig only after the NIC is started. */
1106 outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR); /* rx on, */
1107 do_set_multicast_list(dev); /* (re)load the mcast table */
1111 /* Trigger a transmit start, assuming the length is valid.
1112 Always called with the page lock held */
1114 static void NS8390_trigger_send(struct net_device *dev, unsigned int length,
1115 int start_page)
1117 long e8390_base = dev->base_addr;
1118 struct ei_device *ei_local __attribute((unused)) = (struct ei_device *) netdev_priv(dev);
1120 outb_p(E8390_NODMA+E8390_PAGE0, e8390_base+E8390_CMD);
1122 if (inb_p(e8390_base + E8390_CMD) & E8390_TRANS)
1124 printk(KERN_WARNING "%s: trigger_send() called with the transmitter busy.\n",
1125 dev->name);
1126 return;
1128 outb_p(length & 0xff, e8390_base + EN0_TCNTLO);
1129 outb_p(length >> 8, e8390_base + EN0_TCNTHI);
1130 outb_p(start_page, e8390_base + EN0_TPSR);
1131 outb_p(E8390_NODMA+E8390_TRANS+E8390_START, e8390_base+E8390_CMD);
1134 EXPORT_SYMBOL(ei_open);
1135 EXPORT_SYMBOL(ei_close);
1136 EXPORT_SYMBOL(ei_interrupt);
1137 #ifdef CONFIG_NET_POLL_CONTROLLER
1138 EXPORT_SYMBOL(ei_poll);
1139 #endif
1140 EXPORT_SYMBOL(NS8390_init);
1141 EXPORT_SYMBOL(__alloc_ei_netdev);
1143 #if defined(MODULE)
1145 int init_module(void)
1147 return 0;
1150 void cleanup_module(void)
1154 #endif /* MODULE */
1155 MODULE_LICENSE("GPL");