vserver 1.9.3
[linux-2.6.git] / drivers / net / 8390.c
1 /* 8390.c: A general NS8390 ethernet driver core for linux. */
2 /*
3         Written 1992-94 by Donald Becker.
4   
5         Copyright 1993 United States Government as represented by the
6         Director, National Security Agency.
7
8         This software may be used and distributed according to the terms
9         of the GNU General Public License, incorporated herein by reference.
10
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
15
16   
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.
20
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
25
26
27   Changelog:
28
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   Paul Gortmaker        : Remove old unused single Tx buffer code.
45   Hayato Fujiwara       : Add m32r support.
46
47   Sources:
48   The National Semiconductor LAN Databook, and the 3Com 3c503 databook.
49
50   */
51
52 static const char version[] =
53     "8390.c:v1.10cvs 9/23/94 Donald Becker (becker@cesdis.gsfc.nasa.gov)\n";
54
55 #include <linux/module.h>
56 #include <linux/kernel.h>
57 #include <linux/jiffies.h>
58 #include <linux/fs.h>
59 #include <linux/types.h>
60 #include <linux/string.h>
61 #include <asm/system.h>
62 #include <asm/uaccess.h>
63 #include <asm/bitops.h>
64 #include <asm/io.h>
65 #include <asm/irq.h>
66 #include <linux/delay.h>
67 #include <linux/errno.h>
68 #include <linux/fcntl.h>
69 #include <linux/in.h>
70 #include <linux/interrupt.h>
71 #include <linux/init.h>
72 #include <linux/crc32.h>
73
74 #include <linux/netdevice.h>
75 #include <linux/etherdevice.h>
76
77 #define NS8390_CORE
78 #include "8390.h"
79
80 #define BUG_83C690
81
82 /* These are the operational function interfaces to board-specific
83    routines.
84         void reset_8390(struct net_device *dev)
85                 Resets the board associated with DEV, including a hardware reset of
86                 the 8390.  This is only called when there is a transmit timeout, and
87                 it is always followed by 8390_init().
88         void block_output(struct net_device *dev, int count, const unsigned char *buf,
89                                           int start_page)
90                 Write the COUNT bytes of BUF to the packet buffer at START_PAGE.  The
91                 "page" value uses the 8390's 256-byte pages.
92         void get_8390_hdr(struct net_device *dev, struct e8390_hdr *hdr, int ring_page)
93                 Read the 4 byte, page aligned 8390 header. *If* there is a
94                 subsequent read, it will be of the rest of the packet.
95         void block_input(struct net_device *dev, int count, struct sk_buff *skb, int ring_offset)
96                 Read COUNT bytes from the packet buffer into the skb data area. Start 
97                 reading from RING_OFFSET, the address as the 8390 sees it.  This will always
98                 follow the read of the 8390 header. 
99 */
100 #define ei_reset_8390 (ei_local->reset_8390)
101 #define ei_block_output (ei_local->block_output)
102 #define ei_block_input (ei_local->block_input)
103 #define ei_get_8390_hdr (ei_local->get_8390_hdr)
104
105 /* use 0 for production, 1 for verification, >2 for debug */
106 #ifndef ei_debug
107 int ei_debug = 1;
108 #endif
109
110 /* Index to functions. */
111 static void ei_tx_intr(struct net_device *dev);
112 static void ei_tx_err(struct net_device *dev);
113 static void ei_tx_timeout(struct net_device *dev);
114 static void ei_receive(struct net_device *dev);
115 static void ei_rx_overrun(struct net_device *dev);
116
117 /* Routines generic to NS8390-based boards. */
118 static void NS8390_trigger_send(struct net_device *dev, unsigned int length,
119                                                                 int start_page);
120 static void set_multicast_list(struct net_device *dev);
121 static void do_set_multicast_list(struct net_device *dev);
122
123 /*
124  *      SMP and the 8390 setup.
125  *
126  *      The 8390 isnt exactly designed to be multithreaded on RX/TX. There is
127  *      a page register that controls bank and packet buffer access. We guard
128  *      this with ei_local->page_lock. Nobody should assume or set the page other
129  *      than zero when the lock is not held. Lock holders must restore page 0
130  *      before unlocking. Even pure readers must take the lock to protect in 
131  *      page 0.
132  *
133  *      To make life difficult the chip can also be very slow. We therefore can't
134  *      just use spinlocks. For the longer lockups we disable the irq the device
135  *      sits on and hold the lock. We must hold the lock because there is a dual
136  *      processor case other than interrupts (get stats/set multicast list in
137  *      parallel with each other and transmit).
138  *
139  *      Note: in theory we can just disable the irq on the card _but_ there is
140  *      a latency on SMP irq delivery. So we can easily go "disable irq" "sync irqs"
141  *      enter lock, take the queued irq. So we waddle instead of flying.
142  *
143  *      Finally by special arrangement for the purpose of being generally 
144  *      annoying the transmit function is called bh atomic. That places
145  *      restrictions on the user context callers as disable_irq won't save
146  *      them.
147  */
148  
149
150 \f
151 /**
152  * ei_open - Open/initialize the board.
153  * @dev: network device to initialize
154  *
155  * This routine goes all-out, setting everything
156  * up anew at each open, even though many of these registers should only
157  * need to be set once at boot.
158  */
159 int ei_open(struct net_device *dev)
160 {
161         unsigned long flags;
162         struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
163
164         /* The card I/O part of the driver (e.g. 3c503) can hook a Tx timeout
165             wrapper that does e.g. media check & then calls ei_tx_timeout. */
166         if (dev->tx_timeout == NULL)
167                  dev->tx_timeout = ei_tx_timeout;
168         if (dev->watchdog_timeo <= 0)
169                  dev->watchdog_timeo = TX_TIMEOUT;
170     
171         /*
172          *      Grab the page lock so we own the register set, then call
173          *      the init function.
174          */
175       
176         spin_lock_irqsave(&ei_local->page_lock, flags);
177         NS8390_init(dev, 1);
178         /* Set the flag before we drop the lock, That way the IRQ arrives
179            after its set and we get no silly warnings */
180         netif_start_queue(dev);
181         spin_unlock_irqrestore(&ei_local->page_lock, flags);
182         ei_local->irqlock = 0;
183         return 0;
184 }
185
186 /**
187  * ei_close - shut down network device
188  * @dev: network device to close
189  *
190  * Opposite of ei_open(). Only used when "ifconfig <devname> down" is done.
191  */
192 int ei_close(struct net_device *dev)
193 {
194         struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
195         unsigned long flags;
196
197         /*
198          *      Hold the page lock during close
199          */
200                 
201         spin_lock_irqsave(&ei_local->page_lock, flags);
202         NS8390_init(dev, 0);
203         spin_unlock_irqrestore(&ei_local->page_lock, flags);
204         netif_stop_queue(dev);
205         return 0;
206 }
207
208 /**
209  * ei_tx_timeout - handle transmit time out condition
210  * @dev: network device which has apparently fallen asleep
211  *
212  * Called by kernel when device never acknowledges a transmit has
213  * completed (or failed) - i.e. never posted a Tx related interrupt.
214  */
215
216 void ei_tx_timeout(struct net_device *dev)
217 {
218         long e8390_base = dev->base_addr;
219         struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
220         int txsr, isr, tickssofar = jiffies - dev->trans_start;
221         unsigned long flags;
222
223 #if defined(CONFIG_M32R) && defined(CONFIG_SMP)
224         unsigned long icucr;
225
226         local_irq_save(flags);
227         icucr = inl(ICUCR1);
228         icucr |= M32R_ICUCR_ISMOD11;
229         outl(icucr, ICUCR1);
230         local_irq_restore(flags);
231 #endif
232         ei_local->stat.tx_errors++;
233
234         spin_lock_irqsave(&ei_local->page_lock, flags);
235         txsr = inb(e8390_base+EN0_TSR);
236         isr = inb(e8390_base+EN0_ISR);
237         spin_unlock_irqrestore(&ei_local->page_lock, flags);
238
239         printk(KERN_DEBUG "%s: Tx timed out, %s TSR=%#2x, ISR=%#2x, t=%d.\n",
240                 dev->name, (txsr & ENTSR_ABT) ? "excess collisions." :
241                 (isr) ? "lost interrupt?" : "cable problem?", txsr, isr, tickssofar);
242
243         if (!isr && !ei_local->stat.tx_packets) 
244         {
245                 /* The 8390 probably hasn't gotten on the cable yet. */
246                 ei_local->interface_num ^= 1;   /* Try a different xcvr.  */
247         }
248
249         /* Ugly but a reset can be slow, yet must be protected */
250                 
251         disable_irq_nosync(dev->irq);
252         spin_lock(&ei_local->page_lock);
253                 
254         /* Try to restart the card.  Perhaps the user has fixed something. */
255         ei_reset_8390(dev);
256         NS8390_init(dev, 1);
257                 
258         spin_unlock(&ei_local->page_lock);
259         enable_irq(dev->irq);
260         netif_wake_queue(dev);
261 }
262     
263 /**
264  * ei_start_xmit - begin packet transmission
265  * @skb: packet to be sent
266  * @dev: network device to which packet is sent
267  *
268  * Sends a packet to an 8390 network device.
269  */
270  
271 static int ei_start_xmit(struct sk_buff *skb, struct net_device *dev)
272 {
273         long e8390_base = dev->base_addr;
274         struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
275         int length, send_length, output_page;
276         unsigned long flags;
277         char scratch[ETH_ZLEN];
278
279         length = skb->len;
280
281         /* Mask interrupts from the ethercard. 
282            SMP: We have to grab the lock here otherwise the IRQ handler
283            on another CPU can flip window and race the IRQ mask set. We end
284            up trashing the mcast filter not disabling irqs if we don't lock */
285            
286         spin_lock_irqsave(&ei_local->page_lock, flags);
287         outb_p(0x00, e8390_base + EN0_IMR);
288         spin_unlock_irqrestore(&ei_local->page_lock, flags);
289         
290         
291         /*
292          *      Slow phase with lock held.
293          */
294          
295         disable_irq_nosync(dev->irq);
296         
297         spin_lock(&ei_local->page_lock);
298         
299         ei_local->irqlock = 1;
300
301         send_length = ETH_ZLEN < length ? length : ETH_ZLEN;
302     
303         /*
304          * We have two Tx slots available for use. Find the first free
305          * slot, and then perform some sanity checks. With two Tx bufs,
306          * you get very close to transmitting back-to-back packets. With
307          * only one Tx buf, the transmitter sits idle while you reload the
308          * card, leaving a substantial gap between each transmitted packet.
309          */
310
311         if (ei_local->tx1 == 0) 
312         {
313                 output_page = ei_local->tx_start_page;
314                 ei_local->tx1 = send_length;
315                 if (ei_debug  &&  ei_local->tx2 > 0)
316                         printk(KERN_DEBUG "%s: idle transmitter tx2=%d, lasttx=%d, txing=%d.\n",
317                                 dev->name, ei_local->tx2, ei_local->lasttx, ei_local->txing);
318         }
319         else if (ei_local->tx2 == 0) 
320         {
321                 output_page = ei_local->tx_start_page + TX_PAGES/2;
322                 ei_local->tx2 = send_length;
323                 if (ei_debug  &&  ei_local->tx1 > 0)
324                         printk(KERN_DEBUG "%s: idle transmitter, tx1=%d, lasttx=%d, txing=%d.\n",
325                                 dev->name, ei_local->tx1, ei_local->lasttx, ei_local->txing);
326         }
327         else
328         {       /* We should never get here. */
329                 if (ei_debug)
330                         printk(KERN_DEBUG "%s: No Tx buffers free! tx1=%d tx2=%d last=%d\n",
331                                 dev->name, ei_local->tx1, ei_local->tx2, ei_local->lasttx);
332                 ei_local->irqlock = 0;
333                 netif_stop_queue(dev);
334                 outb_p(ENISR_ALL, e8390_base + EN0_IMR);
335                 spin_unlock(&ei_local->page_lock);
336                 enable_irq(dev->irq);
337                 ei_local->stat.tx_errors++;
338                 return 1;
339         }
340
341         /*
342          * Okay, now upload the packet and trigger a send if the transmitter
343          * isn't already sending. If it is busy, the interrupt handler will
344          * trigger the send later, upon receiving a Tx done interrupt.
345          */
346          
347         if (length == send_length)
348                 ei_block_output(dev, length, skb->data, output_page);
349         else {
350                 memset(scratch, 0, ETH_ZLEN);
351                 memcpy(scratch, skb->data, skb->len);
352                 ei_block_output(dev, ETH_ZLEN, scratch, output_page);
353         }
354                 
355         if (! ei_local->txing) 
356         {
357                 ei_local->txing = 1;
358                 NS8390_trigger_send(dev, send_length, output_page);
359                 dev->trans_start = jiffies;
360                 if (output_page == ei_local->tx_start_page) 
361                 {
362                         ei_local->tx1 = -1;
363                         ei_local->lasttx = -1;
364                 }
365                 else 
366                 {
367                         ei_local->tx2 = -1;
368                         ei_local->lasttx = -2;
369                 }
370         }
371         else ei_local->txqueue++;
372
373         if (ei_local->tx1  &&  ei_local->tx2)
374                 netif_stop_queue(dev);
375         else
376                 netif_start_queue(dev);
377
378         /* Turn 8390 interrupts back on. */
379         ei_local->irqlock = 0;
380         outb_p(ENISR_ALL, e8390_base + EN0_IMR);
381         
382         spin_unlock(&ei_local->page_lock);
383         enable_irq(dev->irq);
384
385         dev_kfree_skb (skb);
386         ei_local->stat.tx_bytes += send_length;
387     
388         return 0;
389 }
390 \f
391 /**
392  * ei_interrupt - handle the interrupts from an 8390
393  * @irq: interrupt number
394  * @dev_id: a pointer to the net_device
395  * @regs: unused
396  *
397  * Handle the ether interface interrupts. We pull packets from
398  * the 8390 via the card specific functions and fire them at the networking
399  * stack. We also handle transmit completions and wake the transmit path if
400  * necessary. We also update the counters and do other housekeeping as
401  * needed.
402  */
403
404 irqreturn_t ei_interrupt(int irq, void *dev_id, struct pt_regs * regs)
405 {
406         struct net_device *dev = dev_id;
407         long e8390_base;
408         int interrupts, nr_serviced = 0;
409         struct ei_device *ei_local;
410     
411         if (dev == NULL) 
412         {
413                 printk ("net_interrupt(): irq %d for unknown device.\n", irq);
414                 return IRQ_NONE;
415         }
416     
417         e8390_base = dev->base_addr;
418         ei_local = (struct ei_device *) netdev_priv(dev);
419
420         /*
421          *      Protect the irq test too.
422          */
423          
424         spin_lock(&ei_local->page_lock);
425
426         if (ei_local->irqlock) 
427         {
428 #if 1 /* This might just be an interrupt for a PCI device sharing this line */
429                 /* The "irqlock" check is only for testing. */
430                 printk(ei_local->irqlock
431                            ? "%s: Interrupted while interrupts are masked! isr=%#2x imr=%#2x.\n"
432                            : "%s: Reentering the interrupt handler! isr=%#2x imr=%#2x.\n",
433                            dev->name, inb_p(e8390_base + EN0_ISR),
434                            inb_p(e8390_base + EN0_IMR));
435 #endif
436                 spin_unlock(&ei_local->page_lock);
437                 return IRQ_NONE;
438         }
439     
440         /* Change to page 0 and read the intr status reg. */
441         outb_p(E8390_NODMA+E8390_PAGE0, e8390_base + E8390_CMD);
442         if (ei_debug > 3)
443                 printk(KERN_DEBUG "%s: interrupt(isr=%#2.2x).\n", dev->name,
444                            inb_p(e8390_base + EN0_ISR));
445     
446         /* !!Assumption!! -- we stay in page 0.  Don't break this. */
447         while ((interrupts = inb_p(e8390_base + EN0_ISR)) != 0
448                    && ++nr_serviced < MAX_SERVICE) 
449         {
450                 if (!netif_running(dev)) {
451                         printk(KERN_WARNING "%s: interrupt from stopped card\n", dev->name);
452                         /* rmk - acknowledge the interrupts */
453                         outb_p(interrupts, e8390_base + EN0_ISR);
454                         interrupts = 0;
455                         break;
456                 }
457                 if (interrupts & ENISR_OVER) 
458                         ei_rx_overrun(dev);
459                 else if (interrupts & (ENISR_RX+ENISR_RX_ERR)) 
460                 {
461                         /* Got a good (?) packet. */
462                         ei_receive(dev);
463                 }
464                 /* Push the next to-transmit packet through. */
465                 if (interrupts & ENISR_TX)
466                         ei_tx_intr(dev);
467                 else if (interrupts & ENISR_TX_ERR)
468                         ei_tx_err(dev);
469
470                 if (interrupts & ENISR_COUNTERS) 
471                 {
472                         ei_local->stat.rx_frame_errors += inb_p(e8390_base + EN0_COUNTER0);
473                         ei_local->stat.rx_crc_errors   += inb_p(e8390_base + EN0_COUNTER1);
474                         ei_local->stat.rx_missed_errors+= inb_p(e8390_base + EN0_COUNTER2);
475                         outb_p(ENISR_COUNTERS, e8390_base + EN0_ISR); /* Ack intr. */
476                 }
477                 
478                 /* Ignore any RDC interrupts that make it back to here. */
479                 if (interrupts & ENISR_RDC) 
480                 {
481                         outb_p(ENISR_RDC, e8390_base + EN0_ISR);
482                 }
483
484                 outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base + E8390_CMD);
485         }
486     
487         if (interrupts && ei_debug) 
488         {
489                 outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base + E8390_CMD);
490                 if (nr_serviced >= MAX_SERVICE) 
491                 {
492                         /* 0xFF is valid for a card removal */
493                         if(interrupts!=0xFF)
494                                 printk(KERN_WARNING "%s: Too much work at interrupt, status %#2.2x\n",
495                                    dev->name, interrupts);
496                         outb_p(ENISR_ALL, e8390_base + EN0_ISR); /* Ack. most intrs. */
497                 } else {
498                         printk(KERN_WARNING "%s: unknown interrupt %#2x\n", dev->name, interrupts);
499                         outb_p(0xff, e8390_base + EN0_ISR); /* Ack. all intrs. */
500                 }
501         }
502         spin_unlock(&ei_local->page_lock);
503         return IRQ_RETVAL(nr_serviced > 0);
504 }
505
506 #ifdef CONFIG_NET_POLL_CONTROLLER
507 void ei_poll(struct net_device *dev)
508 {
509         disable_irq(dev->irq);
510         ei_interrupt(dev->irq, dev, NULL);
511         enable_irq(dev->irq);
512 }
513 #endif
514
515 /**
516  * ei_tx_err - handle transmitter error
517  * @dev: network device which threw the exception
518  *
519  * A transmitter error has happened. Most likely excess collisions (which
520  * is a fairly normal condition). If the error is one where the Tx will
521  * have been aborted, we try and send another one right away, instead of
522  * letting the failed packet sit and collect dust in the Tx buffer. This
523  * is a much better solution as it avoids kernel based Tx timeouts, and
524  * an unnecessary card reset.
525  *
526  * Called with lock held.
527  */
528
529 static void ei_tx_err(struct net_device *dev)
530 {
531         long e8390_base = dev->base_addr;
532         struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
533         unsigned char txsr = inb_p(e8390_base+EN0_TSR);
534         unsigned char tx_was_aborted = txsr & (ENTSR_ABT+ENTSR_FU);
535
536 #ifdef VERBOSE_ERROR_DUMP
537         printk(KERN_DEBUG "%s: transmitter error (%#2x): ", dev->name, txsr);
538         if (txsr & ENTSR_ABT)
539                 printk("excess-collisions ");
540         if (txsr & ENTSR_ND)
541                 printk("non-deferral ");
542         if (txsr & ENTSR_CRS)
543                 printk("lost-carrier ");
544         if (txsr & ENTSR_FU)
545                 printk("FIFO-underrun ");
546         if (txsr & ENTSR_CDH)
547                 printk("lost-heartbeat ");
548         printk("\n");
549 #endif
550
551         outb_p(ENISR_TX_ERR, e8390_base + EN0_ISR); /* Ack intr. */
552
553         if (tx_was_aborted)
554                 ei_tx_intr(dev);
555         else 
556         {
557                 ei_local->stat.tx_errors++;
558                 if (txsr & ENTSR_CRS) ei_local->stat.tx_carrier_errors++;
559                 if (txsr & ENTSR_CDH) ei_local->stat.tx_heartbeat_errors++;
560                 if (txsr & ENTSR_OWC) ei_local->stat.tx_window_errors++;
561         }
562 }
563
564 /**
565  * ei_tx_intr - transmit interrupt handler
566  * @dev: network device for which tx intr is handled
567  *
568  * We have finished a transmit: check for errors and then trigger the next
569  * packet to be sent. Called with lock held.
570  */
571
572 static void ei_tx_intr(struct net_device *dev)
573 {
574         long e8390_base = dev->base_addr;
575         struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
576         int status = inb(e8390_base + EN0_TSR);
577     
578         outb_p(ENISR_TX, e8390_base + EN0_ISR); /* Ack intr. */
579
580         /*
581          * There are two Tx buffers, see which one finished, and trigger
582          * the send of another one if it exists.
583          */
584         ei_local->txqueue--;
585
586         if (ei_local->tx1 < 0) 
587         {
588                 if (ei_local->lasttx != 1 && ei_local->lasttx != -1)
589                         printk(KERN_ERR "%s: bogus last_tx_buffer %d, tx1=%d.\n",
590                                 ei_local->name, ei_local->lasttx, ei_local->tx1);
591                 ei_local->tx1 = 0;
592                 if (ei_local->tx2 > 0) 
593                 {
594                         ei_local->txing = 1;
595                         NS8390_trigger_send(dev, ei_local->tx2, ei_local->tx_start_page + 6);
596                         dev->trans_start = jiffies;
597                         ei_local->tx2 = -1,
598                         ei_local->lasttx = 2;
599                 }
600                 else ei_local->lasttx = 20, ei_local->txing = 0;        
601         }
602         else if (ei_local->tx2 < 0) 
603         {
604                 if (ei_local->lasttx != 2  &&  ei_local->lasttx != -2)
605                         printk("%s: bogus last_tx_buffer %d, tx2=%d.\n",
606                                 ei_local->name, ei_local->lasttx, ei_local->tx2);
607                 ei_local->tx2 = 0;
608                 if (ei_local->tx1 > 0) 
609                 {
610                         ei_local->txing = 1;
611                         NS8390_trigger_send(dev, ei_local->tx1, ei_local->tx_start_page);
612                         dev->trans_start = jiffies;
613                         ei_local->tx1 = -1;
614                         ei_local->lasttx = 1;
615                 }
616                 else
617                         ei_local->lasttx = 10, ei_local->txing = 0;
618         }
619 //      else printk(KERN_WARNING "%s: unexpected TX-done interrupt, lasttx=%d.\n",
620 //                      dev->name, ei_local->lasttx);
621
622         /* Minimize Tx latency: update the statistics after we restart TXing. */
623         if (status & ENTSR_COL)
624                 ei_local->stat.collisions++;
625         if (status & ENTSR_PTX)
626                 ei_local->stat.tx_packets++;
627         else 
628         {
629                 ei_local->stat.tx_errors++;
630                 if (status & ENTSR_ABT) 
631                 {
632                         ei_local->stat.tx_aborted_errors++;
633                         ei_local->stat.collisions += 16;
634                 }
635                 if (status & ENTSR_CRS) 
636                         ei_local->stat.tx_carrier_errors++;
637                 if (status & ENTSR_FU) 
638                         ei_local->stat.tx_fifo_errors++;
639                 if (status & ENTSR_CDH)
640                         ei_local->stat.tx_heartbeat_errors++;
641                 if (status & ENTSR_OWC)
642                         ei_local->stat.tx_window_errors++;
643         }
644         netif_wake_queue(dev);
645 }
646
647 /**
648  * ei_receive - receive some packets
649  * @dev: network device with which receive will be run
650  *
651  * We have a good packet(s), get it/them out of the buffers. 
652  * Called with lock held.
653  */
654
655 static void ei_receive(struct net_device *dev)
656 {
657         long e8390_base = dev->base_addr;
658         struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
659         unsigned char rxing_page, this_frame, next_frame;
660         unsigned short current_offset;
661         int rx_pkt_count = 0;
662         struct e8390_pkt_hdr rx_frame;
663         int num_rx_pages = ei_local->stop_page-ei_local->rx_start_page;
664     
665         while (++rx_pkt_count < 10) 
666         {
667                 int pkt_len, pkt_stat;
668                 
669                 /* Get the rx page (incoming packet pointer). */
670                 outb_p(E8390_NODMA+E8390_PAGE1, e8390_base + E8390_CMD);
671                 rxing_page = inb_p(e8390_base + EN1_CURPAG);
672                 outb_p(E8390_NODMA+E8390_PAGE0, e8390_base + E8390_CMD);
673                 
674                 /* Remove one frame from the ring.  Boundary is always a page behind. */
675                 this_frame = inb_p(e8390_base + EN0_BOUNDARY) + 1;
676                 if (this_frame >= ei_local->stop_page)
677                         this_frame = ei_local->rx_start_page;
678                 
679                 /* Someday we'll omit the previous, iff we never get this message.
680                    (There is at least one clone claimed to have a problem.)  
681                    
682                    Keep quiet if it looks like a card removal. One problem here
683                    is that some clones crash in roughly the same way.
684                  */
685                 if (ei_debug > 0  &&  this_frame != ei_local->current_page && (this_frame!=0x0 || rxing_page!=0xFF))
686                         printk(KERN_ERR "%s: mismatched read page pointers %2x vs %2x.\n",
687                                    dev->name, this_frame, ei_local->current_page);
688                 
689                 if (this_frame == rxing_page)   /* Read all the frames? */
690                         break;                          /* Done for now */
691                 
692                 current_offset = this_frame << 8;
693                 ei_get_8390_hdr(dev, &rx_frame, this_frame);
694                 
695                 pkt_len = rx_frame.count - sizeof(struct e8390_pkt_hdr);
696                 pkt_stat = rx_frame.status;
697                 
698                 next_frame = this_frame + 1 + ((pkt_len+4)>>8);
699                 
700                 /* Check for bogosity warned by 3c503 book: the status byte is never
701                    written.  This happened a lot during testing! This code should be
702                    cleaned up someday. */
703                 if (rx_frame.next != next_frame
704                         && rx_frame.next != next_frame + 1
705                         && rx_frame.next != next_frame - num_rx_pages
706                         && rx_frame.next != next_frame + 1 - num_rx_pages) {
707                         ei_local->current_page = rxing_page;
708                         outb(ei_local->current_page-1, e8390_base+EN0_BOUNDARY);
709                         ei_local->stat.rx_errors++;
710                         continue;
711                 }
712
713                 if (pkt_len < 60  ||  pkt_len > 1518) 
714                 {
715                         if (ei_debug)
716                                 printk(KERN_DEBUG "%s: bogus packet size: %d, status=%#2x nxpg=%#2x.\n",
717                                            dev->name, rx_frame.count, rx_frame.status,
718                                            rx_frame.next);
719                         ei_local->stat.rx_errors++;
720                         ei_local->stat.rx_length_errors++;
721                 }
722                  else if ((pkt_stat & 0x0F) == ENRSR_RXOK) 
723                 {
724                         struct sk_buff *skb;
725                         
726                         skb = dev_alloc_skb(pkt_len+2);
727                         if (skb == NULL) 
728                         {
729                                 if (ei_debug > 1)
730                                         printk(KERN_DEBUG "%s: Couldn't allocate a sk_buff of size %d.\n",
731                                                    dev->name, pkt_len);
732                                 ei_local->stat.rx_dropped++;
733                                 break;
734                         }
735                         else
736                         {
737                                 skb_reserve(skb,2);     /* IP headers on 16 byte boundaries */
738                                 skb->dev = dev;
739                                 skb_put(skb, pkt_len);  /* Make room */
740                                 ei_block_input(dev, pkt_len, skb, current_offset + sizeof(rx_frame));
741                                 skb->protocol=eth_type_trans(skb,dev);
742                                 netif_rx(skb);
743                                 dev->last_rx = jiffies;
744                                 ei_local->stat.rx_packets++;
745                                 ei_local->stat.rx_bytes += pkt_len;
746                                 if (pkt_stat & ENRSR_PHY)
747                                         ei_local->stat.multicast++;
748                         }
749                 } 
750                 else 
751                 {
752                         if (ei_debug)
753                                 printk(KERN_DEBUG "%s: bogus packet: status=%#2x nxpg=%#2x size=%d\n",
754                                            dev->name, rx_frame.status, rx_frame.next,
755                                            rx_frame.count);
756                         ei_local->stat.rx_errors++;
757                         /* NB: The NIC counts CRC, frame and missed errors. */
758                         if (pkt_stat & ENRSR_FO)
759                                 ei_local->stat.rx_fifo_errors++;
760                 }
761                 next_frame = rx_frame.next;
762                 
763                 /* This _should_ never happen: it's here for avoiding bad clones. */
764                 if (next_frame >= ei_local->stop_page) {
765                         printk("%s: next frame inconsistency, %#2x\n", dev->name,
766                                    next_frame);
767                         next_frame = ei_local->rx_start_page;
768                 }
769                 ei_local->current_page = next_frame;
770                 outb_p(next_frame-1, e8390_base+EN0_BOUNDARY);
771         }
772
773         /* We used to also ack ENISR_OVER here, but that would sometimes mask
774            a real overrun, leaving the 8390 in a stopped state with rec'vr off. */
775         outb_p(ENISR_RX+ENISR_RX_ERR, e8390_base+EN0_ISR);
776         return;
777 }
778
779 /**
780  * ei_rx_overrun - handle receiver overrun
781  * @dev: network device which threw exception
782  *
783  * We have a receiver overrun: we have to kick the 8390 to get it started
784  * again. Problem is that you have to kick it exactly as NS prescribes in
785  * the updated datasheets, or "the NIC may act in an unpredictable manner."
786  * This includes causing "the NIC to defer indefinitely when it is stopped
787  * on a busy network."  Ugh.
788  * Called with lock held. Don't call this with the interrupts off or your
789  * computer will hate you - it takes 10ms or so. 
790  */
791
792 static void ei_rx_overrun(struct net_device *dev)
793 {
794         long e8390_base = dev->base_addr;
795         unsigned char was_txing, must_resend = 0;
796         struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
797     
798         /*
799          * Record whether a Tx was in progress and then issue the
800          * stop command.
801          */
802         was_txing = inb_p(e8390_base+E8390_CMD) & E8390_TRANS;
803         outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD);
804     
805         if (ei_debug > 1)
806                 printk(KERN_DEBUG "%s: Receiver overrun.\n", dev->name);
807         ei_local->stat.rx_over_errors++;
808     
809         /* 
810          * Wait a full Tx time (1.2ms) + some guard time, NS says 1.6ms total.
811          * Early datasheets said to poll the reset bit, but now they say that
812          * it "is not a reliable indicator and subsequently should be ignored."
813          * We wait at least 10ms.
814          */
815
816         udelay(10*1000);
817
818         /*
819          * Reset RBCR[01] back to zero as per magic incantation.
820          */
821         outb_p(0x00, e8390_base+EN0_RCNTLO);
822         outb_p(0x00, e8390_base+EN0_RCNTHI);
823
824         /*
825          * See if any Tx was interrupted or not. According to NS, this
826          * step is vital, and skipping it will cause no end of havoc.
827          */
828
829         if (was_txing)
830         { 
831                 unsigned char tx_completed = inb_p(e8390_base+EN0_ISR) & (ENISR_TX+ENISR_TX_ERR);
832                 if (!tx_completed)
833                         must_resend = 1;
834         }
835
836         /*
837          * Have to enter loopback mode and then restart the NIC before
838          * you are allowed to slurp packets up off the ring.
839          */
840         outb_p(E8390_TXOFF, e8390_base + EN0_TXCR);
841         outb_p(E8390_NODMA + E8390_PAGE0 + E8390_START, e8390_base + E8390_CMD);
842
843         /*
844          * Clear the Rx ring of all the debris, and ack the interrupt.
845          */
846         ei_receive(dev);
847         outb_p(ENISR_OVER, e8390_base+EN0_ISR);
848
849         /*
850          * Leave loopback mode, and resend any packet that got stopped.
851          */
852         outb_p(E8390_TXCONFIG, e8390_base + EN0_TXCR); 
853         if (must_resend)
854                 outb_p(E8390_NODMA + E8390_PAGE0 + E8390_START + E8390_TRANS, e8390_base + E8390_CMD);
855 }
856
857 /*
858  *      Collect the stats. This is called unlocked and from several contexts.
859  */
860  
861 static struct net_device_stats *get_stats(struct net_device *dev)
862 {
863         long ioaddr = dev->base_addr;
864         struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
865         unsigned long flags;
866     
867         /* If the card is stopped, just return the present stats. */
868         if (!netif_running(dev))
869                 return &ei_local->stat;
870
871         spin_lock_irqsave(&ei_local->page_lock,flags);
872         /* Read the counter registers, assuming we are in page 0. */
873         ei_local->stat.rx_frame_errors += inb_p(ioaddr + EN0_COUNTER0);
874         ei_local->stat.rx_crc_errors   += inb_p(ioaddr + EN0_COUNTER1);
875         ei_local->stat.rx_missed_errors+= inb_p(ioaddr + EN0_COUNTER2);
876         spin_unlock_irqrestore(&ei_local->page_lock, flags);
877     
878         return &ei_local->stat;
879 }
880
881 /*
882  * Form the 64 bit 8390 multicast table from the linked list of addresses
883  * associated with this dev structure.
884  */
885  
886 static inline void make_mc_bits(u8 *bits, struct net_device *dev)
887 {
888         struct dev_mc_list *dmi;
889
890         for (dmi=dev->mc_list; dmi; dmi=dmi->next) 
891         {
892                 u32 crc;
893                 if (dmi->dmi_addrlen != ETH_ALEN) 
894                 {
895                         printk(KERN_INFO "%s: invalid multicast address length given.\n", dev->name);
896                         continue;
897                 }
898                 crc = ether_crc(ETH_ALEN, dmi->dmi_addr);
899                 /* 
900                  * The 8390 uses the 6 most significant bits of the
901                  * CRC to index the multicast table.
902                  */
903                 bits[crc>>29] |= (1<<((crc>>26)&7));
904         }
905 }
906
907 /**
908  * do_set_multicast_list - set/clear multicast filter
909  * @dev: net device for which multicast filter is adjusted
910  *
911  *      Set or clear the multicast filter for this adaptor. May be called
912  *      from a BH in 2.1.x. Must be called with lock held. 
913  */
914  
915 static void do_set_multicast_list(struct net_device *dev)
916 {
917         long e8390_base = dev->base_addr;
918         int i;
919         struct ei_device *ei_local = (struct ei_device*)netdev_priv(dev);
920
921         if (!(dev->flags&(IFF_PROMISC|IFF_ALLMULTI))) 
922         {
923                 memset(ei_local->mcfilter, 0, 8);
924                 if (dev->mc_list)
925                         make_mc_bits(ei_local->mcfilter, dev);
926         }
927         else
928                 memset(ei_local->mcfilter, 0xFF, 8);    /* mcast set to accept-all */
929
930         /* 
931          * DP8390 manuals don't specify any magic sequence for altering
932          * the multicast regs on an already running card. To be safe, we
933          * ensure multicast mode is off prior to loading up the new hash
934          * table. If this proves to be not enough, we can always resort
935          * to stopping the NIC, loading the table and then restarting.
936          *
937          * Bug Alert!  The MC regs on the SMC 83C690 (SMC Elite and SMC 
938          * Elite16) appear to be write-only. The NS 8390 data sheet lists
939          * them as r/w so this is a bug.  The SMC 83C790 (SMC Ultra and
940          * Ultra32 EISA) appears to have this bug fixed.
941          */
942          
943         if (netif_running(dev))
944                 outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR);
945         outb_p(E8390_NODMA + E8390_PAGE1, e8390_base + E8390_CMD);
946         for(i = 0; i < 8; i++) 
947         {
948                 outb_p(ei_local->mcfilter[i], e8390_base + EN1_MULT_SHIFT(i));
949 #ifndef BUG_83C690
950                 if(inb_p(e8390_base + EN1_MULT_SHIFT(i))!=ei_local->mcfilter[i])
951                         printk(KERN_ERR "Multicast filter read/write mismap %d\n",i);
952 #endif
953         }
954         outb_p(E8390_NODMA + E8390_PAGE0, e8390_base + E8390_CMD);
955
956         if(dev->flags&IFF_PROMISC)
957                 outb_p(E8390_RXCONFIG | 0x18, e8390_base + EN0_RXCR);
958         else if(dev->flags&IFF_ALLMULTI || dev->mc_list)
959                 outb_p(E8390_RXCONFIG | 0x08, e8390_base + EN0_RXCR);
960         else
961                 outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR);
962  }
963
964 /*
965  *      Called without lock held. This is invoked from user context and may
966  *      be parallel to just about everything else. Its also fairly quick and
967  *      not called too often. Must protect against both bh and irq users
968  */
969  
970 static void set_multicast_list(struct net_device *dev)
971 {
972         unsigned long flags;
973         struct ei_device *ei_local = (struct ei_device*)netdev_priv(dev);
974         
975         spin_lock_irqsave(&ei_local->page_lock, flags);
976         do_set_multicast_list(dev);
977         spin_unlock_irqrestore(&ei_local->page_lock, flags);
978 }       
979
980 /**
981  * ethdev_setup - init rest of 8390 device struct
982  * @dev: network device structure to init
983  *
984  * Initialize the rest of the 8390 device structure.  Do NOT __init
985  * this, as it is used by 8390 based modular drivers too.
986  */
987
988 static void ethdev_setup(struct net_device *dev)
989 {
990         struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
991         if (ei_debug > 1)
992                 printk(version);
993     
994         dev->hard_start_xmit = &ei_start_xmit;
995         dev->get_stats  = get_stats;
996         dev->set_multicast_list = &set_multicast_list;
997
998         ether_setup(dev);
999
1000         spin_lock_init(&ei_local->page_lock);
1001 }
1002
1003 /**
1004  * alloc_ei_netdev - alloc_etherdev counterpart for 8390
1005  *
1006  * Allocate 8390-specific net_device.
1007  */
1008 struct net_device *__alloc_ei_netdev(int size)
1009 {
1010         return alloc_netdev(sizeof(struct ei_device) + size, "eth%d",
1011                                 ethdev_setup);
1012 }
1013
1014 \f
1015
1016
1017 /* This page of functions should be 8390 generic */
1018 /* Follow National Semi's recommendations for initializing the "NIC". */
1019
1020 /**
1021  * NS8390_init - initialize 8390 hardware
1022  * @dev: network device to initialize
1023  * @startp: boolean.  non-zero value to initiate chip processing
1024  *
1025  *      Must be called with lock held.
1026  */
1027
1028 void NS8390_init(struct net_device *dev, int startp)
1029 {
1030         long e8390_base = dev->base_addr;
1031         struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1032         int i;
1033         int endcfg = ei_local->word16
1034             ? (0x48 | ENDCFG_WTS | (ei_local->bigendian ? ENDCFG_BOS : 0))
1035             : 0x48;
1036     
1037         if(sizeof(struct e8390_pkt_hdr)!=4)
1038                 panic("8390.c: header struct mispacked\n");    
1039         /* Follow National Semi's recommendations for initing the DP83902. */
1040         outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD); /* 0x21 */
1041         outb_p(endcfg, e8390_base + EN0_DCFG);  /* 0x48 or 0x49 */
1042         /* Clear the remote byte count registers. */
1043         outb_p(0x00,  e8390_base + EN0_RCNTLO);
1044         outb_p(0x00,  e8390_base + EN0_RCNTHI);
1045         /* Set to monitor and loopback mode -- this is vital!. */
1046         outb_p(E8390_RXOFF, e8390_base + EN0_RXCR); /* 0x20 */
1047         outb_p(E8390_TXOFF, e8390_base + EN0_TXCR); /* 0x02 */
1048         /* Set the transmit page and receive ring. */
1049         outb_p(ei_local->tx_start_page, e8390_base + EN0_TPSR);
1050         ei_local->tx1 = ei_local->tx2 = 0;
1051         outb_p(ei_local->rx_start_page, e8390_base + EN0_STARTPG);
1052         outb_p(ei_local->stop_page-1, e8390_base + EN0_BOUNDARY);       /* 3c503 says 0x3f,NS0x26*/
1053         ei_local->current_page = ei_local->rx_start_page;               /* assert boundary+1 */
1054         outb_p(ei_local->stop_page, e8390_base + EN0_STOPPG);
1055         /* Clear the pending interrupts and mask. */
1056         outb_p(0xFF, e8390_base + EN0_ISR);
1057         outb_p(0x00,  e8390_base + EN0_IMR);
1058     
1059         /* Copy the station address into the DS8390 registers. */
1060
1061         outb_p(E8390_NODMA + E8390_PAGE1 + E8390_STOP, e8390_base+E8390_CMD); /* 0x61 */
1062         for(i = 0; i < 6; i++) 
1063         {
1064                 outb_p(dev->dev_addr[i], e8390_base + EN1_PHYS_SHIFT(i));
1065                 if (ei_debug > 1 && inb_p(e8390_base + EN1_PHYS_SHIFT(i))!=dev->dev_addr[i])
1066                         printk(KERN_ERR "Hw. address read/write mismap %d\n",i);
1067         }
1068
1069         outb_p(ei_local->rx_start_page, e8390_base + EN1_CURPAG);
1070         outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD);
1071
1072         netif_start_queue(dev);
1073         ei_local->tx1 = ei_local->tx2 = 0;
1074         ei_local->txing = 0;
1075
1076         if (startp) 
1077         {
1078                 outb_p(0xff,  e8390_base + EN0_ISR);
1079                 outb_p(ENISR_ALL,  e8390_base + EN0_IMR);
1080                 outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base+E8390_CMD);
1081                 outb_p(E8390_TXCONFIG, e8390_base + EN0_TXCR); /* xmit on. */
1082                 /* 3c503 TechMan says rxconfig only after the NIC is started. */
1083                 outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR); /* rx on,  */
1084                 do_set_multicast_list(dev);     /* (re)load the mcast table */
1085         }
1086 }
1087
1088 /* Trigger a transmit start, assuming the length is valid. 
1089    Always called with the page lock held */
1090    
1091 static void NS8390_trigger_send(struct net_device *dev, unsigned int length,
1092                                                                 int start_page)
1093 {
1094         long e8390_base = dev->base_addr;
1095         struct ei_device *ei_local __attribute((unused)) = (struct ei_device *) netdev_priv(dev);
1096    
1097         outb_p(E8390_NODMA+E8390_PAGE0, e8390_base+E8390_CMD);
1098     
1099         if (inb_p(e8390_base) & E8390_TRANS) 
1100         {
1101                 printk(KERN_WARNING "%s: trigger_send() called with the transmitter busy.\n",
1102                         dev->name);
1103                 return;
1104         }
1105         outb_p(length & 0xff, e8390_base + EN0_TCNTLO);
1106         outb_p(length >> 8, e8390_base + EN0_TCNTHI);
1107         outb_p(start_page, e8390_base + EN0_TPSR);
1108         outb_p(E8390_NODMA+E8390_TRANS+E8390_START, e8390_base+E8390_CMD);
1109 }
1110
1111 EXPORT_SYMBOL(ei_open);
1112 EXPORT_SYMBOL(ei_close);
1113 EXPORT_SYMBOL(ei_interrupt);
1114 #ifdef CONFIG_NET_POLL_CONTROLLER
1115 EXPORT_SYMBOL(ei_poll);
1116 #endif
1117 EXPORT_SYMBOL(ei_tx_timeout);
1118 EXPORT_SYMBOL(NS8390_init);
1119 EXPORT_SYMBOL(__alloc_ei_netdev);
1120
1121 #if defined(MODULE)
1122
1123 int init_module(void)
1124 {
1125         return 0;
1126 }
1127
1128 void cleanup_module(void)
1129 {
1130 }
1131
1132 #endif /* MODULE */
1133 MODULE_LICENSE("GPL");