Import 2.3.18pre1
[davej-history.git] / drivers / net / 8390.c
blob4b4cc6466ef6e0450c77aa39b028485f13f99b7d
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 Public License, incorporated herein by reference.
11 The author may be reached as becker@CESDIS.gsfc.nasa.gov, or C/O
12 Center of Excellence in Space Data and Information Sciences
13 Code 930.5, Goddard Space Flight Center, Greenbelt MD 20771
15 This is the chip-specific code for many 8390-based ethernet adaptors.
16 This is not a complete driver, it must be combined with board-specific
17 code such as ne.c, wd.c, 3c503.c, etc.
19 Seeing how at least eight drivers use this code, (not counting the
20 PCMCIA ones either) it is easy to break some card by what seems like
21 a simple innocent change. Please contact me or Donald if you think
22 you have found something that needs changing. -- PG
25 Changelog:
27 Paul Gortmaker : remove set_bit lock, other cleanups.
28 Paul Gortmaker : add ei_get_8390_hdr() so we can pass skb's to
29 ei_block_input() for eth_io_copy_and_sum().
30 Paul Gortmaker : exchange static int ei_pingpong for a #define,
31 also add better Tx error handling.
32 Paul Gortmaker : rewrite Rx overrun handling as per NS specs.
33 Alexey Kuznetsov : use the 8390's six bit hash multicast filter.
34 Paul Gortmaker : tweak ANK's above multicast changes a bit.
35 Paul Gortmaker : update packet statistics for v2.1.x
36 Alan Cox : support arbitary stupid port mappings on the
37 68K Macintosh. Support >16bit I/O spaces
38 Paul Gortmaker : add kmod support for auto-loading of the 8390
39 module by all drivers that require it.
40 Alan Cox : Spinlocking work, added 'BUG_83C690'
42 Sources:
43 The National Semiconductor LAN Databook, and the 3Com 3c503 databook.
47 static const char *version =
48 "8390.c:v1.10cvs 9/23/94 Donald Becker (becker@cesdis.gsfc.nasa.gov)\n";
50 #include <linux/module.h>
51 #include <linux/kernel.h>
52 #include <linux/sched.h>
53 #include <linux/fs.h>
54 #include <linux/types.h>
55 #include <linux/ptrace.h>
56 #include <linux/string.h>
57 #include <asm/system.h>
58 #include <asm/uaccess.h>
59 #include <asm/bitops.h>
60 #include <asm/io.h>
61 #include <asm/irq.h>
62 #include <linux/delay.h>
63 #include <linux/errno.h>
64 #include <linux/fcntl.h>
65 #include <linux/in.h>
66 #include <linux/interrupt.h>
67 #include <linux/init.h>
69 #include <linux/netdevice.h>
70 #include <linux/etherdevice.h>
72 #define NS8390_CORE
73 #include "8390.h"
75 #define BUG_83C690
77 /* These are the operational function interfaces to board-specific
78 routines.
79 void reset_8390(struct net_device *dev)
80 Resets the board associated with DEV, including a hardware reset of
81 the 8390. This is only called when there is a transmit timeout, and
82 it is always followed by 8390_init().
83 void block_output(struct net_device *dev, int count, const unsigned char *buf,
84 int start_page)
85 Write the COUNT bytes of BUF to the packet buffer at START_PAGE. The
86 "page" value uses the 8390's 256-byte pages.
87 void get_8390_hdr(struct net_device *dev, struct e8390_hdr *hdr, int ring_page)
88 Read the 4 byte, page aligned 8390 header. *If* there is a
89 subsequent read, it will be of the rest of the packet.
90 void block_input(struct net_device *dev, int count, struct sk_buff *skb, int ring_offset)
91 Read COUNT bytes from the packet buffer into the skb data area. Start
92 reading from RING_OFFSET, the address as the 8390 sees it. This will always
93 follow the read of the 8390 header.
95 #define ei_reset_8390 (ei_local->reset_8390)
96 #define ei_block_output (ei_local->block_output)
97 #define ei_block_input (ei_local->block_input)
98 #define ei_get_8390_hdr (ei_local->get_8390_hdr)
100 /* use 0 for production, 1 for verification, >2 for debug */
101 #ifndef ei_debug
102 int ei_debug = 1;
103 #endif
105 /* Index to functions. */
106 static void ei_tx_intr(struct net_device *dev);
107 static void ei_tx_err(struct net_device *dev);
108 static void ei_receive(struct net_device *dev);
109 static void ei_rx_overrun(struct net_device *dev);
111 /* Routines generic to NS8390-based boards. */
112 static void NS8390_trigger_send(struct net_device *dev, unsigned int length,
113 int start_page);
114 static void set_multicast_list(struct net_device *dev);
115 static void do_set_multicast_list(struct net_device *dev);
118 * SMP and the 8390 setup.
120 * The 8390 isnt exactly designed to be multithreaded on RX/TX. There is
121 * a page register that controls bank and packet buffer access. We guard
122 * this with ei_local->page_lock. Nobody should assume or set the page other
123 * than zero when the lock is not held. Lock holders must restore page 0
124 * before unlocking. Even pure readers must take the lock to protect in
125 * page 0.
127 * To make life difficult the chip can also be very slow. We therefore can't
128 * just use spinlocks. For the longer lockups we disable the irq the device
129 * sits on and hold the lock. We must hold the lock because there is a dual
130 * processor case other than interrupts (get stats/set multicast list in
131 * parallel with each other and transmit).
133 * Note: in theory we can just disable the irq on the card _but_ there is
134 * a latency on SMP irq delivery. So we can easily go "disable irq" "sync irqs"
135 * enter lock, take the queued irq. So we waddle instead of flying.
137 * Finally by special arrangement for the purpose of being generally
138 * annoying the transmit function is called bh atomic. That places
139 * restrictions on the user context callers as disable_irq won't save
140 * them.
145 /* Open/initialize the board. This routine goes all-out, setting everything
146 up anew at each open, even though many of these registers should only
147 need to be set once at boot.
149 int ei_open(struct net_device *dev)
151 unsigned long flags;
152 struct ei_device *ei_local = (struct ei_device *) dev->priv;
154 /* This can't happen unless somebody forgot to call ethdev_init(). */
155 if (ei_local == NULL)
157 printk(KERN_EMERG "%s: ei_open passed a non-existent device!\n", dev->name);
158 return -ENXIO;
162 * Grab the page lock so we own the register set, then call
163 * the init function.
166 spin_lock_irqsave(&ei_local->page_lock, flags);
167 NS8390_init(dev, 1);
168 /* Set the flag before we drop the lock, That way the IRQ arrives
169 after its set and we get no silly warnings */
170 dev->start = 1;
171 spin_unlock_irqrestore(&ei_local->page_lock, flags);
172 ei_local->irqlock = 0;
173 return 0;
176 /* Opposite of above. Only used when "ifconfig <devname> down" is done. */
177 int ei_close(struct net_device *dev)
179 struct ei_device *ei_local = (struct ei_device *) dev->priv;
180 unsigned long flags;
183 * Hold the page lock during close
186 spin_lock_irqsave(&ei_local->page_lock, flags);
187 NS8390_init(dev, 0);
188 spin_unlock_irqrestore(&ei_local->page_lock, flags);
189 dev->start = 0;
190 return 0;
193 static int ei_start_xmit(struct sk_buff *skb, struct net_device *dev)
195 long e8390_base = dev->base_addr;
196 struct ei_device *ei_local = (struct ei_device *) dev->priv;
197 int length, send_length, output_page;
198 unsigned long flags;
201 * We normally shouldn't be called if dev->tbusy is set, but the
202 * existing code does anyway. If it has been too long since the
203 * last Tx, we assume the board has died and kick it. We are
204 * bh_atomic here.
207 if (dev->tbusy)
208 { /* Do timeouts, just like the 8003 driver. */
209 int txsr;
210 int isr;
211 int tickssofar = jiffies - dev->trans_start;
214 * Need the page lock. Now see what went wrong. This bit is
215 * fast.
218 spin_lock_irqsave(&ei_local->page_lock, flags);
219 txsr = inb(e8390_base+EN0_TSR);
220 if (tickssofar < TX_TIMEOUT || (tickssofar < (TX_TIMEOUT+5) && ! (txsr & ENTSR_PTX)))
222 spin_unlock_irqrestore(&ei_local->page_lock, flags);
223 return 1;
226 ei_local->stat.tx_errors++;
227 isr = inb(e8390_base+EN0_ISR);
228 if (dev->start == 0)
230 spin_unlock_irqrestore(&ei_local->page_lock, flags);
231 printk(KERN_WARNING "%s: xmit on stopped card\n", dev->name);
232 return 1;
236 * Note that if the Tx posted a TX_ERR interrupt, then the
237 * error will have been handled from the interrupt handler
238 * and not here. Error statistics are handled there as well.
241 printk(KERN_DEBUG "%s: Tx timed out, %s TSR=%#2x, ISR=%#2x, t=%d.\n",
242 dev->name, (txsr & ENTSR_ABT) ? "excess collisions." :
243 (isr) ? "lost interrupt?" : "cable problem?", txsr, isr, tickssofar);
245 if (!isr && !ei_local->stat.tx_packets)
247 /* The 8390 probably hasn't gotten on the cable yet. */
248 ei_local->interface_num ^= 1; /* Try a different xcvr. */
252 * Play shuffle the locks, a reset on some chips takes a few
253 * mS. We very rarely hit this point.
256 spin_unlock_irqrestore(&ei_local->page_lock, flags);
258 /* Ugly but a reset can be slow, yet must be protected */
260 disable_irq_nosync(dev->irq);
261 spin_lock(&ei_local->page_lock);
263 /* Try to restart the card. Perhaps the user has fixed something. */
264 ei_reset_8390(dev);
265 NS8390_init(dev, 1);
267 spin_unlock(&ei_local->page_lock);
268 enable_irq(dev->irq);
269 dev->trans_start = jiffies;
272 length = skb->len;
274 /* Mask interrupts from the ethercard.
275 SMP: We have to grab the lock here otherwise the IRQ handler
276 on another CPU can flip window and race the IRQ mask set. We end
277 up trashing the mcast filter not disabling irqs if we dont lock */
279 spin_lock_irqsave(&ei_local->page_lock, flags);
280 outb_p(0x00, e8390_base + EN0_IMR);
281 spin_unlock_irqrestore(&ei_local->page_lock, flags);
285 * Slow phase with lock held.
288 disable_irq_nosync(dev->irq);
290 spin_lock(&ei_local->page_lock);
292 if (dev->interrupt)
294 printk(KERN_WARNING "%s: Tx request while isr active.\n",dev->name);
295 outb_p(ENISR_ALL, e8390_base + EN0_IMR);
296 spin_unlock(&ei_local->page_lock);
297 enable_irq(dev->irq);
298 ei_local->stat.tx_errors++;
299 dev_kfree_skb(skb);
300 return 0;
302 ei_local->irqlock = 1;
304 send_length = ETH_ZLEN < length ? length : ETH_ZLEN;
306 #ifdef EI_PINGPONG
309 * We have two Tx slots available for use. Find the first free
310 * slot, and then perform some sanity checks. With two Tx bufs,
311 * you get very close to transmitting back-to-back packets. With
312 * only one Tx buf, the transmitter sits idle while you reload the
313 * card, leaving a substantial gap between each transmitted packet.
316 if (ei_local->tx1 == 0)
318 output_page = ei_local->tx_start_page;
319 ei_local->tx1 = send_length;
320 if (ei_debug && ei_local->tx2 > 0)
321 printk(KERN_DEBUG "%s: idle transmitter tx2=%d, lasttx=%d, txing=%d.\n",
322 dev->name, ei_local->tx2, ei_local->lasttx, ei_local->txing);
324 else if (ei_local->tx2 == 0)
326 output_page = ei_local->tx_start_page + TX_1X_PAGES;
327 ei_local->tx2 = send_length;
328 if (ei_debug && ei_local->tx1 > 0)
329 printk(KERN_DEBUG "%s: idle transmitter, tx1=%d, lasttx=%d, txing=%d.\n",
330 dev->name, ei_local->tx1, ei_local->lasttx, ei_local->txing);
332 else
333 { /* We should never get here. */
334 if (ei_debug)
335 printk(KERN_DEBUG "%s: No Tx buffers free! irq=%ld tx1=%d tx2=%d last=%d\n",
336 dev->name, dev->interrupt, ei_local->tx1, ei_local->tx2, ei_local->lasttx);
337 ei_local->irqlock = 0;
338 dev->tbusy = 1;
339 outb_p(ENISR_ALL, e8390_base + EN0_IMR);
340 spin_unlock(&ei_local->page_lock);
341 enable_irq(dev->irq);
342 ei_local->stat.tx_errors++;
343 return 1;
347 * Okay, now upload the packet and trigger a send if the transmitter
348 * isn't already sending. If it is busy, the interrupt handler will
349 * trigger the send later, upon receiving a Tx done interrupt.
352 ei_block_output(dev, length, skb->data, output_page);
353 if (! ei_local->txing)
355 ei_local->txing = 1;
356 NS8390_trigger_send(dev, send_length, output_page);
357 dev->trans_start = jiffies;
358 if (output_page == ei_local->tx_start_page)
360 ei_local->tx1 = -1;
361 ei_local->lasttx = -1;
363 else
365 ei_local->tx2 = -1;
366 ei_local->lasttx = -2;
369 else ei_local->txqueue++;
371 dev->tbusy = (ei_local->tx1 && ei_local->tx2);
373 #else /* EI_PINGPONG */
376 * Only one Tx buffer in use. You need two Tx bufs to come close to
377 * back-to-back transmits. Expect a 20 -> 25% performance hit on
378 * reasonable hardware if you only use one Tx buffer.
381 ei_block_output(dev, length, skb->data, ei_local->tx_start_page);
382 ei_local->txing = 1;
383 NS8390_trigger_send(dev, send_length, ei_local->tx_start_page);
384 dev->trans_start = jiffies;
385 dev->tbusy = 1;
387 #endif /* EI_PINGPONG */
389 /* Turn 8390 interrupts back on. */
390 ei_local->irqlock = 0;
391 outb_p(ENISR_ALL, e8390_base + EN0_IMR);
393 spin_unlock(&ei_local->page_lock);
394 enable_irq(dev->irq);
396 dev_kfree_skb (skb);
397 ei_local->stat.tx_bytes += send_length;
399 return 0;
402 /* The typical workload of the driver:
403 Handle the ether interface interrupts. */
405 void ei_interrupt(int irq, void *dev_id, struct pt_regs * regs)
407 struct net_device *dev = dev_id;
408 long e8390_base;
409 int interrupts, nr_serviced = 0;
410 struct ei_device *ei_local;
412 if (dev == NULL)
414 printk ("net_interrupt(): irq %d for unknown device.\n", irq);
415 return;
418 e8390_base = dev->base_addr;
419 ei_local = (struct ei_device *) dev->priv;
422 * Protect the irq test too.
425 spin_lock(&ei_local->page_lock);
427 if (dev->interrupt || ei_local->irqlock)
429 #if 1 /* This might just be an interrupt for a PCI device sharing this line */
430 /* The "irqlock" check is only for testing. */
431 printk(ei_local->irqlock
432 ? "%s: Interrupted while interrupts are masked! isr=%#2x imr=%#2x.\n"
433 : "%s: Reentering the interrupt handler! isr=%#2x imr=%#2x.\n",
434 dev->name, inb_p(e8390_base + EN0_ISR),
435 inb_p(e8390_base + EN0_IMR));
436 #endif
437 spin_unlock(&ei_local->page_lock);
438 return;
442 dev->interrupt = 1;
444 /* Change to page 0 and read the intr status reg. */
445 outb_p(E8390_NODMA+E8390_PAGE0, e8390_base + E8390_CMD);
446 if (ei_debug > 3)
447 printk(KERN_DEBUG "%s: interrupt(isr=%#2.2x).\n", dev->name,
448 inb_p(e8390_base + EN0_ISR));
450 /* !!Assumption!! -- we stay in page 0. Don't break this. */
451 while ((interrupts = inb_p(e8390_base + EN0_ISR)) != 0
452 && ++nr_serviced < MAX_SERVICE)
454 if (dev->start == 0)
456 printk(KERN_WARNING "%s: interrupt from stopped card\n", dev->name);
457 interrupts = 0;
458 break;
460 if (interrupts & ENISR_OVER)
461 ei_rx_overrun(dev);
462 else if (interrupts & (ENISR_RX+ENISR_RX_ERR))
464 /* Got a good (?) packet. */
465 ei_receive(dev);
467 /* Push the next to-transmit packet through. */
468 if (interrupts & ENISR_TX)
469 ei_tx_intr(dev);
470 else if (interrupts & ENISR_TX_ERR)
471 ei_tx_err(dev);
473 if (interrupts & ENISR_COUNTERS)
475 ei_local->stat.rx_frame_errors += inb_p(e8390_base + EN0_COUNTER0);
476 ei_local->stat.rx_crc_errors += inb_p(e8390_base + EN0_COUNTER1);
477 ei_local->stat.rx_missed_errors+= inb_p(e8390_base + EN0_COUNTER2);
478 outb_p(ENISR_COUNTERS, e8390_base + EN0_ISR); /* Ack intr. */
481 /* Ignore any RDC interrupts that make it back to here. */
482 if (interrupts & ENISR_RDC)
484 outb_p(ENISR_RDC, e8390_base + EN0_ISR);
487 outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base + E8390_CMD);
490 if (interrupts && ei_debug)
492 outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base + E8390_CMD);
493 if (nr_serviced >= MAX_SERVICE)
495 printk(KERN_WARNING "%s: Too much work at interrupt, status %#2.2x\n",
496 dev->name, interrupts);
497 outb_p(ENISR_ALL, e8390_base + EN0_ISR); /* Ack. most intrs. */
498 } else {
499 printk(KERN_WARNING "%s: unknown interrupt %#2x\n", dev->name, interrupts);
500 outb_p(0xff, e8390_base + EN0_ISR); /* Ack. all intrs. */
503 dev->interrupt = 0;
504 spin_unlock(&ei_local->page_lock);
505 return;
509 * A transmitter error has happened. Most likely excess collisions (which
510 * is a fairly normal condition). If the error is one where the Tx will
511 * have been aborted, we try and send another one right away, instead of
512 * letting the failed packet sit and collect dust in the Tx buffer. This
513 * is a much better solution as it avoids kernel based Tx timeouts, and
514 * an unnecessary card reset.
516 * Called with lock held
519 static void ei_tx_err(struct net_device *dev)
521 long e8390_base = dev->base_addr;
522 struct ei_device *ei_local = (struct ei_device *) dev->priv;
523 unsigned char txsr = inb_p(e8390_base+EN0_TSR);
524 unsigned char tx_was_aborted = txsr & (ENTSR_ABT+ENTSR_FU);
526 #ifdef VERBOSE_ERROR_DUMP
527 printk(KERN_DEBUG "%s: transmitter error (%#2x): ", dev->name, txsr);
528 if (txsr & ENTSR_ABT)
529 printk("excess-collisions ");
530 if (txsr & ENTSR_ND)
531 printk("non-deferral ");
532 if (txsr & ENTSR_CRS)
533 printk("lost-carrier ");
534 if (txsr & ENTSR_FU)
535 printk("FIFO-underrun ");
536 if (txsr & ENTSR_CDH)
537 printk("lost-heartbeat ");
538 printk("\n");
539 #endif
541 outb_p(ENISR_TX_ERR, e8390_base + EN0_ISR); /* Ack intr. */
543 if (tx_was_aborted)
544 ei_tx_intr(dev);
545 else
547 ei_local->stat.tx_errors++;
548 if (txsr & ENTSR_CRS) ei_local->stat.tx_carrier_errors++;
549 if (txsr & ENTSR_CDH) ei_local->stat.tx_heartbeat_errors++;
550 if (txsr & ENTSR_OWC) ei_local->stat.tx_window_errors++;
554 /* We have finished a transmit: check for errors and then trigger the next
555 packet to be sent. Called with lock held */
557 static void ei_tx_intr(struct net_device *dev)
559 long e8390_base = dev->base_addr;
560 struct ei_device *ei_local = (struct ei_device *) dev->priv;
561 int status = inb(e8390_base + EN0_TSR);
563 outb_p(ENISR_TX, e8390_base + EN0_ISR); /* Ack intr. */
565 #ifdef EI_PINGPONG
568 * There are two Tx buffers, see which one finished, and trigger
569 * the send of another one if it exists.
571 ei_local->txqueue--;
573 if (ei_local->tx1 < 0)
575 if (ei_local->lasttx != 1 && ei_local->lasttx != -1)
576 printk(KERN_ERR "%s: bogus last_tx_buffer %d, tx1=%d.\n",
577 ei_local->name, ei_local->lasttx, ei_local->tx1);
578 ei_local->tx1 = 0;
579 dev->tbusy = 0;
580 if (ei_local->tx2 > 0)
582 ei_local->txing = 1;
583 NS8390_trigger_send(dev, ei_local->tx2, ei_local->tx_start_page + 6);
584 dev->trans_start = jiffies;
585 ei_local->tx2 = -1,
586 ei_local->lasttx = 2;
588 else ei_local->lasttx = 20, ei_local->txing = 0;
590 else if (ei_local->tx2 < 0)
592 if (ei_local->lasttx != 2 && ei_local->lasttx != -2)
593 printk("%s: bogus last_tx_buffer %d, tx2=%d.\n",
594 ei_local->name, ei_local->lasttx, ei_local->tx2);
595 ei_local->tx2 = 0;
596 dev->tbusy = 0;
597 if (ei_local->tx1 > 0)
599 ei_local->txing = 1;
600 NS8390_trigger_send(dev, ei_local->tx1, ei_local->tx_start_page);
601 dev->trans_start = jiffies;
602 ei_local->tx1 = -1;
603 ei_local->lasttx = 1;
605 else
606 ei_local->lasttx = 10, ei_local->txing = 0;
608 else printk(KERN_WARNING "%s: unexpected TX-done interrupt, lasttx=%d.\n",
609 dev->name, ei_local->lasttx);
611 #else /* EI_PINGPONG */
613 * Single Tx buffer: mark it free so another packet can be loaded.
615 ei_local->txing = 0;
616 dev->tbusy = 0;
617 #endif
619 /* Minimize Tx latency: update the statistics after we restart TXing. */
620 if (status & ENTSR_COL)
621 ei_local->stat.collisions++;
622 if (status & ENTSR_PTX)
623 ei_local->stat.tx_packets++;
624 else
626 ei_local->stat.tx_errors++;
627 if (status & ENTSR_ABT)
629 ei_local->stat.tx_aborted_errors++;
630 ei_local->stat.collisions += 16;
632 if (status & ENTSR_CRS)
633 ei_local->stat.tx_carrier_errors++;
634 if (status & ENTSR_FU)
635 ei_local->stat.tx_fifo_errors++;
636 if (status & ENTSR_CDH)
637 ei_local->stat.tx_heartbeat_errors++;
638 if (status & ENTSR_OWC)
639 ei_local->stat.tx_window_errors++;
641 mark_bh (NET_BH);
644 /* We have a good packet(s), get it/them out of the buffers.
645 Called with lock held */
647 static void ei_receive(struct net_device *dev)
649 long e8390_base = dev->base_addr;
650 struct ei_device *ei_local = (struct ei_device *) dev->priv;
651 unsigned char rxing_page, this_frame, next_frame;
652 unsigned short current_offset;
653 int rx_pkt_count = 0;
654 struct e8390_pkt_hdr rx_frame;
655 int num_rx_pages = ei_local->stop_page-ei_local->rx_start_page;
657 while (++rx_pkt_count < 10)
659 int pkt_len, pkt_stat;
661 /* Get the rx page (incoming packet pointer). */
662 outb_p(E8390_NODMA+E8390_PAGE1, e8390_base + E8390_CMD);
663 rxing_page = inb_p(e8390_base + EN1_CURPAG);
664 outb_p(E8390_NODMA+E8390_PAGE0, e8390_base + E8390_CMD);
666 /* Remove one frame from the ring. Boundary is always a page behind. */
667 this_frame = inb_p(e8390_base + EN0_BOUNDARY) + 1;
668 if (this_frame >= ei_local->stop_page)
669 this_frame = ei_local->rx_start_page;
671 /* Someday we'll omit the previous, iff we never get this message.
672 (There is at least one clone claimed to have a problem.) */
673 if (ei_debug > 0 && this_frame != ei_local->current_page)
674 printk(KERN_ERR "%s: mismatched read page pointers %2x vs %2x.\n",
675 dev->name, this_frame, ei_local->current_page);
677 if (this_frame == rxing_page) /* Read all the frames? */
678 break; /* Done for now */
680 current_offset = this_frame << 8;
681 ei_get_8390_hdr(dev, &rx_frame, this_frame);
683 pkt_len = rx_frame.count - sizeof(struct e8390_pkt_hdr);
684 pkt_stat = rx_frame.status;
686 next_frame = this_frame + 1 + ((pkt_len+4)>>8);
688 /* Check for bogosity warned by 3c503 book: the status byte is never
689 written. This happened a lot during testing! This code should be
690 cleaned up someday. */
691 if (rx_frame.next != next_frame
692 && rx_frame.next != next_frame + 1
693 && rx_frame.next != next_frame - num_rx_pages
694 && rx_frame.next != next_frame + 1 - num_rx_pages) {
695 ei_local->current_page = rxing_page;
696 outb(ei_local->current_page-1, e8390_base+EN0_BOUNDARY);
697 ei_local->stat.rx_errors++;
698 continue;
701 if (pkt_len < 60 || pkt_len > 1518)
703 if (ei_debug)
704 printk(KERN_DEBUG "%s: bogus packet size: %d, status=%#2x nxpg=%#2x.\n",
705 dev->name, rx_frame.count, rx_frame.status,
706 rx_frame.next);
707 ei_local->stat.rx_errors++;
708 ei_local->stat.rx_length_errors++;
710 else if ((pkt_stat & 0x0F) == ENRSR_RXOK)
712 struct sk_buff *skb;
714 skb = dev_alloc_skb(pkt_len+2);
715 if (skb == NULL)
717 if (ei_debug > 1)
718 printk(KERN_DEBUG "%s: Couldn't allocate a sk_buff of size %d.\n",
719 dev->name, pkt_len);
720 ei_local->stat.rx_dropped++;
721 break;
723 else
725 skb_reserve(skb,2); /* IP headers on 16 byte boundaries */
726 skb->dev = dev;
727 skb_put(skb, pkt_len); /* Make room */
728 ei_block_input(dev, pkt_len, skb, current_offset + sizeof(rx_frame));
729 skb->protocol=eth_type_trans(skb,dev);
730 netif_rx(skb);
731 ei_local->stat.rx_packets++;
732 ei_local->stat.rx_bytes += pkt_len;
733 if (pkt_stat & ENRSR_PHY)
734 ei_local->stat.multicast++;
737 else
739 if (ei_debug)
740 printk(KERN_DEBUG "%s: bogus packet: status=%#2x nxpg=%#2x size=%d\n",
741 dev->name, rx_frame.status, rx_frame.next,
742 rx_frame.count);
743 ei_local->stat.rx_errors++;
744 /* NB: The NIC counts CRC, frame and missed errors. */
745 if (pkt_stat & ENRSR_FO)
746 ei_local->stat.rx_fifo_errors++;
748 next_frame = rx_frame.next;
750 /* This _should_ never happen: it's here for avoiding bad clones. */
751 if (next_frame >= ei_local->stop_page) {
752 printk("%s: next frame inconsistency, %#2x\n", dev->name,
753 next_frame);
754 next_frame = ei_local->rx_start_page;
756 ei_local->current_page = next_frame;
757 outb_p(next_frame-1, e8390_base+EN0_BOUNDARY);
760 /* We used to also ack ENISR_OVER here, but that would sometimes mask
761 a real overrun, leaving the 8390 in a stopped state with rec'vr off. */
762 outb_p(ENISR_RX+ENISR_RX_ERR, e8390_base+EN0_ISR);
763 return;
767 * We have a receiver overrun: we have to kick the 8390 to get it started
768 * again. Problem is that you have to kick it exactly as NS prescribes in
769 * the updated datasheets, or "the NIC may act in an unpredictable manner."
770 * This includes causing "the NIC to defer indefinitely when it is stopped
771 * on a busy network." Ugh.
772 * Called with lock held. Don't call this with the interrupts off or your
773 * computer will hate you - it takes 10mS or so.
776 static void ei_rx_overrun(struct net_device *dev)
778 long e8390_base = dev->base_addr;
779 unsigned char was_txing, must_resend = 0;
780 struct ei_device *ei_local = (struct ei_device *) dev->priv;
783 * Record whether a Tx was in progress and then issue the
784 * stop command.
786 was_txing = inb_p(e8390_base+E8390_CMD) & E8390_TRANS;
787 outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD);
789 if (ei_debug > 1)
790 printk(KERN_DEBUG "%s: Receiver overrun.\n", dev->name);
791 ei_local->stat.rx_over_errors++;
794 * Wait a full Tx time (1.2ms) + some guard time, NS says 1.6ms total.
795 * Early datasheets said to poll the reset bit, but now they say that
796 * it "is not a reliable indicator and subsequently should be ignored."
797 * We wait at least 10ms.
800 udelay(10*1000);
803 * Reset RBCR[01] back to zero as per magic incantation.
805 outb_p(0x00, e8390_base+EN0_RCNTLO);
806 outb_p(0x00, e8390_base+EN0_RCNTHI);
809 * See if any Tx was interrupted or not. According to NS, this
810 * step is vital, and skipping it will cause no end of havoc.
813 if (was_txing)
815 unsigned char tx_completed = inb_p(e8390_base+EN0_ISR) & (ENISR_TX+ENISR_TX_ERR);
816 if (!tx_completed)
817 must_resend = 1;
821 * Have to enter loopback mode and then restart the NIC before
822 * you are allowed to slurp packets up off the ring.
824 outb_p(E8390_TXOFF, e8390_base + EN0_TXCR);
825 outb_p(E8390_NODMA + E8390_PAGE0 + E8390_START, e8390_base + E8390_CMD);
828 * Clear the Rx ring of all the debris, and ack the interrupt.
830 ei_receive(dev);
831 outb_p(ENISR_OVER, e8390_base+EN0_ISR);
834 * Leave loopback mode, and resend any packet that got stopped.
836 outb_p(E8390_TXCONFIG, e8390_base + EN0_TXCR);
837 if (must_resend)
838 outb_p(E8390_NODMA + E8390_PAGE0 + E8390_START + E8390_TRANS, e8390_base + E8390_CMD);
842 * Collect the stats. This is called unlocked and from several contexts.
845 static struct net_device_stats *get_stats(struct net_device *dev)
847 long ioaddr = dev->base_addr;
848 struct ei_device *ei_local = (struct ei_device *) dev->priv;
849 unsigned long flags;
851 /* If the card is stopped, just return the present stats. */
852 if (dev->start == 0)
853 return &ei_local->stat;
855 spin_lock_irqsave(&ei_local->page_lock,flags);
856 /* Read the counter registers, assuming we are in page 0. */
857 ei_local->stat.rx_frame_errors += inb_p(ioaddr + EN0_COUNTER0);
858 ei_local->stat.rx_crc_errors += inb_p(ioaddr + EN0_COUNTER1);
859 ei_local->stat.rx_missed_errors+= inb_p(ioaddr + EN0_COUNTER2);
860 spin_unlock_irqrestore(&ei_local->page_lock, flags);
862 return &ei_local->stat;
866 * Update the given Autodin II CRC value with another data byte.
869 static inline u32 update_crc(u8 byte, u32 current_crc)
871 int bit;
872 u8 ah = 0;
873 for (bit=0; bit<8; bit++)
875 u8 carry = (current_crc>>31);
876 current_crc <<= 1;
877 ah = ((ah<<1) | carry) ^ byte;
878 if (ah&1)
879 current_crc ^= 0x04C11DB7; /* CRC polynomial */
880 ah >>= 1;
881 byte >>= 1;
883 return current_crc;
887 * Form the 64 bit 8390 multicast table from the linked list of addresses
888 * associated with this dev structure.
891 static inline void make_mc_bits(u8 *bits, struct net_device *dev)
893 struct dev_mc_list *dmi;
895 for (dmi=dev->mc_list; dmi; dmi=dmi->next)
897 int i;
898 u32 crc;
899 if (dmi->dmi_addrlen != ETH_ALEN)
901 printk(KERN_INFO "%s: invalid multicast address length given.\n", dev->name);
902 continue;
904 crc = 0xffffffff; /* initial CRC value */
905 for (i=0; i<ETH_ALEN; i++)
906 crc = update_crc(dmi->dmi_addr[i], crc);
908 * The 8390 uses the 6 most significant bits of the
909 * CRC to index the multicast table.
911 bits[crc>>29] |= (1<<((crc>>26)&7));
916 * Set or clear the multicast filter for this adaptor. May be called
917 * from a BH in 2.1.x. Must be called with lock held.
920 static void do_set_multicast_list(struct net_device *dev)
922 long e8390_base = dev->base_addr;
923 int i;
924 struct ei_device *ei_local = (struct ei_device*)dev->priv;
926 if (!(dev->flags&(IFF_PROMISC|IFF_ALLMULTI)))
928 memset(ei_local->mcfilter, 0, 8);
929 if (dev->mc_list)
930 make_mc_bits(ei_local->mcfilter, dev);
932 else
933 memset(ei_local->mcfilter, 0xFF, 8); /* mcast set to accept-all */
936 * DP8390 manuals don't specify any magic sequence for altering
937 * the multicast regs on an already running card. To be safe, we
938 * ensure multicast mode is off prior to loading up the new hash
939 * table. If this proves to be not enough, we can always resort
940 * to stopping the NIC, loading the table and then restarting.
942 * Bug Alert! The MC regs on the SMC 83C690 (SMC Elite and SMC
943 * Elite16) appear to be write-only. The NS 8390 data sheet lists
944 * them as r/w so this is a bug. The SMC 83C790 (SMC Ultra and
945 * Ultra32 EISA) appears to have this bug fixed.
948 if (dev->start)
949 outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR);
950 outb_p(E8390_NODMA + E8390_PAGE1, e8390_base + E8390_CMD);
951 for(i = 0; i < 8; i++)
953 outb_p(ei_local->mcfilter[i], e8390_base + EN1_MULT_SHIFT(i));
954 #ifndef BUG_83C690
955 if(inb_p(e8390_base + EN1_MULT_SHIFT(i))!=ei_local->mcfilter[i])
956 printk(KERN_ERR "Multicast filter read/write mismap %d\n",i);
957 #endif
959 outb_p(E8390_NODMA + E8390_PAGE0, e8390_base + E8390_CMD);
961 if(dev->flags&IFF_PROMISC)
962 outb_p(E8390_RXCONFIG | 0x18, e8390_base + EN0_RXCR);
963 else if(dev->flags&IFF_ALLMULTI || dev->mc_list)
964 outb_p(E8390_RXCONFIG | 0x08, e8390_base + EN0_RXCR);
965 else
966 outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR);
970 * Called without lock held. This is invoked from user context and may
971 * be parallel to just about everything else. Its also fairly quick and
972 * not called too often. Must protect against both bh and irq users
975 static void set_multicast_list(struct net_device *dev)
977 unsigned long flags;
978 struct ei_device *ei_local = (struct ei_device*)dev->priv;
980 spin_lock_irqsave(&ei_local->page_lock, flags);
981 do_set_multicast_list(dev);
982 spin_unlock_irqrestore(&ei_local->page_lock, flags);
986 * Initialize the rest of the 8390 device structure. Do NOT __init
987 * this, as it is used by 8390 based modular drivers too.
990 int ethdev_init(struct net_device *dev)
992 if (ei_debug > 1)
993 printk(version);
995 if (dev->priv == NULL)
997 struct ei_device *ei_local;
999 dev->priv = kmalloc(sizeof(struct ei_device), GFP_KERNEL);
1000 if (dev->priv == NULL)
1001 return -ENOMEM;
1002 memset(dev->priv, 0, sizeof(struct ei_device));
1003 ei_local = (struct ei_device *)dev->priv;
1004 spin_lock_init(&ei_local->page_lock);
1007 dev->hard_start_xmit = &ei_start_xmit;
1008 dev->get_stats = get_stats;
1009 dev->set_multicast_list = &set_multicast_list;
1011 ether_setup(dev);
1013 return 0;
1018 /* This page of functions should be 8390 generic */
1019 /* Follow National Semi's recommendations for initializing the "NIC". */
1022 * Must be called with lock held.
1025 void NS8390_init(struct net_device *dev, int startp)
1027 long e8390_base = dev->base_addr;
1028 struct ei_device *ei_local = (struct ei_device *) dev->priv;
1029 int i;
1030 int endcfg = ei_local->word16 ? (0x48 | ENDCFG_WTS) : 0x48;
1032 if(sizeof(struct e8390_pkt_hdr)!=4)
1033 panic("8390.c: header struct mispacked\n");
1034 /* Follow National Semi's recommendations for initing the DP83902. */
1035 outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD); /* 0x21 */
1036 outb_p(endcfg, e8390_base + EN0_DCFG); /* 0x48 or 0x49 */
1037 /* Clear the remote byte count registers. */
1038 outb_p(0x00, e8390_base + EN0_RCNTLO);
1039 outb_p(0x00, e8390_base + EN0_RCNTHI);
1040 /* Set to monitor and loopback mode -- this is vital!. */
1041 outb_p(E8390_RXOFF, e8390_base + EN0_RXCR); /* 0x20 */
1042 outb_p(E8390_TXOFF, e8390_base + EN0_TXCR); /* 0x02 */
1043 /* Set the transmit page and receive ring. */
1044 outb_p(ei_local->tx_start_page, e8390_base + EN0_TPSR);
1045 ei_local->tx1 = ei_local->tx2 = 0;
1046 outb_p(ei_local->rx_start_page, e8390_base + EN0_STARTPG);
1047 outb_p(ei_local->stop_page-1, e8390_base + EN0_BOUNDARY); /* 3c503 says 0x3f,NS0x26*/
1048 ei_local->current_page = ei_local->rx_start_page; /* assert boundary+1 */
1049 outb_p(ei_local->stop_page, e8390_base + EN0_STOPPG);
1050 /* Clear the pending interrupts and mask. */
1051 outb_p(0xFF, e8390_base + EN0_ISR);
1052 outb_p(0x00, e8390_base + EN0_IMR);
1054 /* Copy the station address into the DS8390 registers. */
1056 outb_p(E8390_NODMA + E8390_PAGE1 + E8390_STOP, e8390_base+E8390_CMD); /* 0x61 */
1057 for(i = 0; i < 6; i++)
1059 outb_p(dev->dev_addr[i], e8390_base + EN1_PHYS_SHIFT(i));
1060 if(inb_p(e8390_base + EN1_PHYS_SHIFT(i))!=dev->dev_addr[i])
1061 printk(KERN_ERR "Hw. address read/write mismap %d\n",i);
1064 outb_p(ei_local->rx_start_page, e8390_base + EN1_CURPAG);
1065 outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD);
1067 dev->tbusy = 0;
1068 dev->interrupt = 0;
1069 ei_local->tx1 = ei_local->tx2 = 0;
1070 ei_local->txing = 0;
1072 if (startp)
1074 outb_p(0xff, e8390_base + EN0_ISR);
1075 outb_p(ENISR_ALL, e8390_base + EN0_IMR);
1076 outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base+E8390_CMD);
1077 outb_p(E8390_TXCONFIG, e8390_base + EN0_TXCR); /* xmit on. */
1078 /* 3c503 TechMan says rxconfig only after the NIC is started. */
1079 outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR); /* rx on, */
1080 do_set_multicast_list(dev); /* (re)load the mcast table */
1082 return;
1085 /* Trigger a transmit start, assuming the length is valid.
1086 Always called with the page lock held */
1088 static void NS8390_trigger_send(struct net_device *dev, unsigned int length,
1089 int start_page)
1091 long e8390_base = dev->base_addr;
1092 struct ei_device *ei_local = (struct ei_device *) dev->priv;
1094 outb_p(E8390_NODMA+E8390_PAGE0, e8390_base+E8390_CMD);
1096 if (inb_p(e8390_base) & E8390_TRANS)
1098 printk(KERN_WARNING "%s: trigger_send() called with the transmitter busy.\n",
1099 dev->name);
1100 return;
1102 outb_p(length & 0xff, e8390_base + EN0_TCNTLO);
1103 outb_p(length >> 8, e8390_base + EN0_TCNTHI);
1104 outb_p(start_page, e8390_base + EN0_TPSR);
1105 outb_p(E8390_NODMA+E8390_TRANS+E8390_START, e8390_base+E8390_CMD);
1108 #ifdef MODULE
1110 EXPORT_SYMBOL(ei_open);
1111 EXPORT_SYMBOL(ei_close);
1112 EXPORT_SYMBOL(ei_interrupt);
1113 EXPORT_SYMBOL(ethdev_init);
1114 EXPORT_SYMBOL(NS8390_init);
1116 struct module *NS8390_module = NULL;
1118 int init_module(void)
1120 NS8390_module = &__this_module;
1121 return 0;
1124 void cleanup_module(void)
1126 NS8390_module = NULL;
1129 #endif /* MODULE */
1132 * Local variables:
1133 * compile-command: "gcc -D__KERNEL__ -I/usr/src/linux/net/inet -Wall -Wstrict-prototypes -O6 -m486 -c 8390.c"
1134 * version-control: t
1135 * kept-new-versions: 5
1136 * c-indent-level: 4
1137 * tab-width: 4
1138 * End: