pcmcia: remove obsolete and wrong comments
[pandora-kernel.git] / drivers / net / pcmcia / axnet_cs.c
1 /*======================================================================
2
3     A PCMCIA ethernet driver for Asix AX88190-based cards
4
5     The Asix AX88190 is a NS8390-derived chipset with a few nasty
6     idiosyncracies that make it very inconvenient to support with a
7     standard 8390 driver.  This driver is based on pcnet_cs, with the
8     tweaked 8390 code grafted on the end.  Much of what I did was to
9     clean up and update a similar driver supplied by Asix, which was
10     adapted by William Lee, william@asix.com.tw.
11
12     Copyright (C) 2001 David A. Hinds -- dahinds@users.sourceforge.net
13
14     axnet_cs.c 1.28 2002/06/29 06:27:37
15
16     The network driver code is based on Donald Becker's NE2000 code:
17
18     Written 1992,1993 by Donald Becker.
19     Copyright 1993 United States Government as represented by the
20     Director, National Security Agency.  This software may be used and
21     distributed according to the terms of the GNU General Public License,
22     incorporated herein by reference.
23     Donald Becker may be reached at becker@scyld.com
24
25 ======================================================================*/
26
27 #include <linux/kernel.h>
28 #include <linux/module.h>
29 #include <linux/init.h>
30 #include <linux/ptrace.h>
31 #include <linux/string.h>
32 #include <linux/timer.h>
33 #include <linux/delay.h>
34 #include <linux/spinlock.h>
35 #include <linux/ethtool.h>
36 #include <linux/netdevice.h>
37 #include <linux/etherdevice.h>
38 #include <linux/crc32.h>
39 #include <linux/mii.h>
40 #include "../8390.h"
41
42 #include <pcmcia/cistpl.h>
43 #include <pcmcia/ciscode.h>
44 #include <pcmcia/ds.h>
45 #include <pcmcia/cisreg.h>
46
47 #include <asm/io.h>
48 #include <asm/system.h>
49 #include <asm/byteorder.h>
50 #include <asm/uaccess.h>
51
52 #define AXNET_CMD       0x00
53 #define AXNET_DATAPORT  0x10    /* NatSemi-defined port window offset. */
54 #define AXNET_RESET     0x1f    /* Issue a read to reset, a write to clear. */
55 #define AXNET_MII_EEP   0x14    /* Offset of MII access port */
56 #define AXNET_TEST      0x15    /* Offset of TEST Register port */
57 #define AXNET_GPIO      0x17    /* Offset of General Purpose Register Port */
58
59 #define AXNET_START_PG  0x40    /* First page of TX buffer */
60 #define AXNET_STOP_PG   0x80    /* Last page +1 of RX ring */
61
62 #define AXNET_RDC_TIMEOUT 0x02  /* Max wait in jiffies for Tx RDC */
63
64 #define IS_AX88190      0x0001
65 #define IS_AX88790      0x0002
66
67 /*====================================================================*/
68
69 /* Module parameters */
70
71 MODULE_AUTHOR("David Hinds <dahinds@users.sourceforge.net>");
72 MODULE_DESCRIPTION("Asix AX88190 PCMCIA ethernet driver");
73 MODULE_LICENSE("GPL");
74
75
76 /*====================================================================*/
77
78 static int axnet_config(struct pcmcia_device *link);
79 static void axnet_release(struct pcmcia_device *link);
80 static int axnet_open(struct net_device *dev);
81 static int axnet_close(struct net_device *dev);
82 static int axnet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
83 static netdev_tx_t axnet_start_xmit(struct sk_buff *skb,
84                                           struct net_device *dev);
85 static struct net_device_stats *get_stats(struct net_device *dev);
86 static void set_multicast_list(struct net_device *dev);
87 static void axnet_tx_timeout(struct net_device *dev);
88 static const struct ethtool_ops netdev_ethtool_ops;
89 static irqreturn_t ei_irq_wrapper(int irq, void *dev_id);
90 static void ei_watchdog(u_long arg);
91 static void axnet_reset_8390(struct net_device *dev);
92
93 static int mdio_read(unsigned int addr, int phy_id, int loc);
94 static void mdio_write(unsigned int addr, int phy_id, int loc, int value);
95
96 static void get_8390_hdr(struct net_device *,
97                          struct e8390_pkt_hdr *, int);
98 static void block_input(struct net_device *dev, int count,
99                         struct sk_buff *skb, int ring_offset);
100 static void block_output(struct net_device *dev, int count,
101                          const u_char *buf, const int start_page);
102
103 static void axnet_detach(struct pcmcia_device *p_dev);
104
105 static void AX88190_init(struct net_device *dev, int startp);
106 static int ax_open(struct net_device *dev);
107 static int ax_close(struct net_device *dev);
108 static irqreturn_t ax_interrupt(int irq, void *dev_id);
109
110 /*====================================================================*/
111
112 typedef struct axnet_dev_t {
113         struct pcmcia_device    *p_dev;
114     caddr_t             base;
115     struct timer_list   watchdog;
116     int                 stale, fast_poll;
117     u_short             link_status;
118     u_char              duplex_flag;
119     int                 phy_id;
120     int                 flags;
121 } axnet_dev_t;
122
123 static inline axnet_dev_t *PRIV(struct net_device *dev)
124 {
125         void *p = (char *)netdev_priv(dev) + sizeof(struct ei_device);
126         return p;
127 }
128
129 static const struct net_device_ops axnet_netdev_ops = {
130         .ndo_open               = axnet_open,
131         .ndo_stop               = axnet_close,
132         .ndo_do_ioctl           = axnet_ioctl,
133         .ndo_start_xmit         = axnet_start_xmit,
134         .ndo_tx_timeout         = axnet_tx_timeout,
135         .ndo_get_stats          = get_stats,
136         .ndo_set_multicast_list = set_multicast_list,
137         .ndo_change_mtu         = eth_change_mtu,
138         .ndo_set_mac_address    = eth_mac_addr,
139         .ndo_validate_addr      = eth_validate_addr,
140 };
141
142 static int axnet_probe(struct pcmcia_device *link)
143 {
144     axnet_dev_t *info;
145     struct net_device *dev;
146     struct ei_device *ei_local;
147
148     dev_dbg(&link->dev, "axnet_attach()\n");
149
150     dev = alloc_etherdev(sizeof(struct ei_device) + sizeof(axnet_dev_t));
151     if (!dev)
152         return -ENOMEM;
153
154     ei_local = netdev_priv(dev);
155     spin_lock_init(&ei_local->page_lock);
156
157     info = PRIV(dev);
158     info->p_dev = link;
159     link->priv = dev;
160     link->config_flags |= CONF_ENABLE_IRQ;
161
162     dev->netdev_ops = &axnet_netdev_ops;
163
164     SET_ETHTOOL_OPS(dev, &netdev_ethtool_ops);
165     dev->watchdog_timeo = TX_TIMEOUT;
166
167     return axnet_config(link);
168 } /* axnet_attach */
169
170 static void axnet_detach(struct pcmcia_device *link)
171 {
172     struct net_device *dev = link->priv;
173
174     dev_dbg(&link->dev, "axnet_detach(0x%p)\n", link);
175
176     unregister_netdev(dev);
177
178     axnet_release(link);
179
180     free_netdev(dev);
181 } /* axnet_detach */
182
183 /*======================================================================
184
185     This probes for a card's hardware address by reading the PROM.
186
187 ======================================================================*/
188
189 static int get_prom(struct pcmcia_device *link)
190 {
191     struct net_device *dev = link->priv;
192     unsigned int ioaddr = dev->base_addr;
193     int i, j;
194
195     /* This is based on drivers/net/ne.c */
196     struct {
197         u_char value, offset;
198     } program_seq[] = {
199         {E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/
200         {0x01,  EN0_DCFG},      /* Set word-wide access. */
201         {0x00,  EN0_RCNTLO},    /* Clear the count regs. */
202         {0x00,  EN0_RCNTHI},
203         {0x00,  EN0_IMR},       /* Mask completion irq. */
204         {0xFF,  EN0_ISR},
205         {E8390_RXOFF|0x40, EN0_RXCR},   /* 0x60  Set to monitor */
206         {E8390_TXOFF, EN0_TXCR},        /* 0x02  and loopback mode. */
207         {0x10,  EN0_RCNTLO},
208         {0x00,  EN0_RCNTHI},
209         {0x00,  EN0_RSARLO},    /* DMA starting at 0x0400. */
210         {0x04,  EN0_RSARHI},
211         {E8390_RREAD+E8390_START, E8390_CMD},
212     };
213
214     /* Not much of a test, but the alternatives are messy */
215     if (link->config_base != 0x03c0)
216         return 0;
217
218     axnet_reset_8390(dev);
219     mdelay(10);
220
221     for (i = 0; i < ARRAY_SIZE(program_seq); i++)
222         outb_p(program_seq[i].value, ioaddr + program_seq[i].offset);
223
224     for (i = 0; i < 6; i += 2) {
225         j = inw(ioaddr + AXNET_DATAPORT);
226         dev->dev_addr[i] = j & 0xff;
227         dev->dev_addr[i+1] = j >> 8;
228     }
229     return 1;
230 } /* get_prom */
231
232 static int try_io_port(struct pcmcia_device *link)
233 {
234     int j, ret;
235     link->resource[0]->flags &= ~IO_DATA_PATH_WIDTH;
236     link->resource[1]->flags &= ~IO_DATA_PATH_WIDTH;
237     if (link->resource[0]->end == 32) {
238         link->resource[0]->flags |= IO_DATA_PATH_WIDTH_AUTO;
239         /* for master/slave multifunction cards */
240         if (link->resource[1]->end > 0)
241             link->resource[1]->flags |= IO_DATA_PATH_WIDTH_8;
242     } else {
243         /* This should be two 16-port windows */
244         link->resource[0]->flags |= IO_DATA_PATH_WIDTH_8;
245         link->resource[1]->flags |= IO_DATA_PATH_WIDTH_16;
246     }
247     if (link->resource[0]->start == 0) {
248         for (j = 0; j < 0x400; j += 0x20) {
249             link->resource[0]->start = j ^ 0x300;
250             link->resource[1]->start = (j ^ 0x300) + 0x10;
251             link->io_lines = 16;
252             ret = pcmcia_request_io(link);
253             if (ret == 0)
254                     return ret;
255         }
256         return ret;
257     } else {
258         return pcmcia_request_io(link);
259     }
260 }
261
262 static int axnet_configcheck(struct pcmcia_device *p_dev, void *priv_data)
263 {
264         if (p_dev->config_index == 0)
265                 return -EINVAL;
266
267         p_dev->config_index = 0x05;
268         if (p_dev->resource[0]->end + p_dev->resource[1]->end < 32)
269                 return -ENODEV;
270
271         return try_io_port(p_dev);
272 }
273
274 static int axnet_config(struct pcmcia_device *link)
275 {
276     struct net_device *dev = link->priv;
277     axnet_dev_t *info = PRIV(dev);
278     int i, j, j2, ret;
279
280     dev_dbg(&link->dev, "axnet_config(0x%p)\n", link);
281
282     /* don't trust the CIS on this; Linksys got it wrong */
283     link->config_regs = 0x63;
284     link->config_flags |= CONF_ENABLE_IRQ | CONF_AUTO_SET_IO;
285     ret = pcmcia_loop_config(link, axnet_configcheck, NULL);
286     if (ret != 0)
287         goto failed;
288
289     if (!link->irq)
290             goto failed;
291
292     if (resource_size(link->resource[1]) == 8)
293         link->config_flags |= CONF_ENABLE_SPKR;
294     
295     ret = pcmcia_enable_device(link);
296     if (ret)
297             goto failed;
298
299     dev->irq = link->irq;
300     dev->base_addr = link->resource[0]->start;
301
302     if (!get_prom(link)) {
303         printk(KERN_NOTICE "axnet_cs: this is not an AX88190 card!\n");
304         printk(KERN_NOTICE "axnet_cs: use pcnet_cs instead.\n");
305         goto failed;
306     }
307
308     ei_status.name = "AX88190";
309     ei_status.word16 = 1;
310     ei_status.tx_start_page = AXNET_START_PG;
311     ei_status.rx_start_page = AXNET_START_PG + TX_PAGES;
312     ei_status.stop_page = AXNET_STOP_PG;
313     ei_status.reset_8390 = &axnet_reset_8390;
314     ei_status.get_8390_hdr = &get_8390_hdr;
315     ei_status.block_input = &block_input;
316     ei_status.block_output = &block_output;
317
318     if (inb(dev->base_addr + AXNET_TEST) != 0)
319         info->flags |= IS_AX88790;
320     else
321         info->flags |= IS_AX88190;
322
323     if (info->flags & IS_AX88790)
324         outb(0x10, dev->base_addr + AXNET_GPIO);  /* select Internal PHY */
325
326     for (i = 0; i < 32; i++) {
327         j = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 1);
328         j2 = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 2);
329         if (j == j2) continue;
330         if ((j != 0) && (j != 0xffff)) break;
331     }
332
333     /* Maybe PHY is in power down mode. (PPD_SET = 1) 
334        Bit 2 of CCSR is active low. */ 
335     if (i == 32) {
336         pcmcia_write_config_byte(link, CISREG_CCSR, 0x04);
337         for (i = 0; i < 32; i++) {
338             j = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 1);
339             j2 = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 2);
340             if (j == j2) continue;
341             if ((j != 0) && (j != 0xffff)) break;
342         }
343     }
344
345     info->phy_id = (i < 32) ? i : -1;
346     SET_NETDEV_DEV(dev, &link->dev);
347
348     if (register_netdev(dev) != 0) {
349         printk(KERN_NOTICE "axnet_cs: register_netdev() failed\n");
350         goto failed;
351     }
352
353     printk(KERN_INFO "%s: Asix AX88%d90: io %#3lx, irq %d, "
354            "hw_addr %pM\n",
355            dev->name, ((info->flags & IS_AX88790) ? 7 : 1),
356            dev->base_addr, dev->irq,
357            dev->dev_addr);
358     if (info->phy_id != -1) {
359         dev_dbg(&link->dev, "  MII transceiver at index %d, status %x.\n", info->phy_id, j);
360     } else {
361         printk(KERN_NOTICE "  No MII transceivers found!\n");
362     }
363     return 0;
364
365 failed:
366     axnet_release(link);
367     return -ENODEV;
368 } /* axnet_config */
369
370 static void axnet_release(struct pcmcia_device *link)
371 {
372         pcmcia_disable_device(link);
373 }
374
375 static int axnet_suspend(struct pcmcia_device *link)
376 {
377         struct net_device *dev = link->priv;
378
379         if (link->open)
380                 netif_device_detach(dev);
381
382         return 0;
383 }
384
385 static int axnet_resume(struct pcmcia_device *link)
386 {
387         struct net_device *dev = link->priv;
388
389         if (link->open) {
390                 axnet_reset_8390(dev);
391                 AX88190_init(dev, 1);
392                 netif_device_attach(dev);
393         }
394
395         return 0;
396 }
397
398
399 /*======================================================================
400
401     MII interface support
402
403 ======================================================================*/
404
405 #define MDIO_SHIFT_CLK          0x01
406 #define MDIO_DATA_WRITE0        0x00
407 #define MDIO_DATA_WRITE1        0x08
408 #define MDIO_DATA_READ          0x04
409 #define MDIO_MASK               0x0f
410 #define MDIO_ENB_IN             0x02
411
412 static void mdio_sync(unsigned int addr)
413 {
414     int bits;
415     for (bits = 0; bits < 32; bits++) {
416         outb_p(MDIO_DATA_WRITE1, addr);
417         outb_p(MDIO_DATA_WRITE1 | MDIO_SHIFT_CLK, addr);
418     }
419 }
420
421 static int mdio_read(unsigned int addr, int phy_id, int loc)
422 {
423     u_int cmd = (0xf6<<10)|(phy_id<<5)|loc;
424     int i, retval = 0;
425
426     mdio_sync(addr);
427     for (i = 14; i >= 0; i--) {
428         int dat = (cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0;
429         outb_p(dat, addr);
430         outb_p(dat | MDIO_SHIFT_CLK, addr);
431     }
432     for (i = 19; i > 0; i--) {
433         outb_p(MDIO_ENB_IN, addr);
434         retval = (retval << 1) | ((inb_p(addr) & MDIO_DATA_READ) != 0);
435         outb_p(MDIO_ENB_IN | MDIO_SHIFT_CLK, addr);
436     }
437     return (retval>>1) & 0xffff;
438 }
439
440 static void mdio_write(unsigned int addr, int phy_id, int loc, int value)
441 {
442     u_int cmd = (0x05<<28)|(phy_id<<23)|(loc<<18)|(1<<17)|value;
443     int i;
444
445     mdio_sync(addr);
446     for (i = 31; i >= 0; i--) {
447         int dat = (cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0;
448         outb_p(dat, addr);
449         outb_p(dat | MDIO_SHIFT_CLK, addr);
450     }
451     for (i = 1; i >= 0; i--) {
452         outb_p(MDIO_ENB_IN, addr);
453         outb_p(MDIO_ENB_IN | MDIO_SHIFT_CLK, addr);
454     }
455 }
456
457 /*====================================================================*/
458
459 static int axnet_open(struct net_device *dev)
460 {
461     int ret;
462     axnet_dev_t *info = PRIV(dev);
463     struct pcmcia_device *link = info->p_dev;
464     unsigned int nic_base = dev->base_addr;
465     
466     dev_dbg(&link->dev, "axnet_open('%s')\n", dev->name);
467
468     if (!pcmcia_dev_present(link))
469         return -ENODEV;
470
471     outb_p(0xFF, nic_base + EN0_ISR); /* Clear bogus intr. */
472     ret = request_irq(dev->irq, ei_irq_wrapper, IRQF_SHARED, "axnet_cs", dev);
473     if (ret)
474             return ret;
475
476     link->open++;
477
478     info->link_status = 0x00;
479     init_timer(&info->watchdog);
480     info->watchdog.function = &ei_watchdog;
481     info->watchdog.data = (u_long)dev;
482     info->watchdog.expires = jiffies + HZ;
483     add_timer(&info->watchdog);
484
485     return ax_open(dev);
486 } /* axnet_open */
487
488 /*====================================================================*/
489
490 static int axnet_close(struct net_device *dev)
491 {
492     axnet_dev_t *info = PRIV(dev);
493     struct pcmcia_device *link = info->p_dev;
494
495     dev_dbg(&link->dev, "axnet_close('%s')\n", dev->name);
496
497     ax_close(dev);
498     free_irq(dev->irq, dev);
499     
500     link->open--;
501     netif_stop_queue(dev);
502     del_timer_sync(&info->watchdog);
503
504     return 0;
505 } /* axnet_close */
506
507 /*======================================================================
508
509     Hard reset the card.  This used to pause for the same period that
510     a 8390 reset command required, but that shouldn't be necessary.
511
512 ======================================================================*/
513
514 static void axnet_reset_8390(struct net_device *dev)
515 {
516     unsigned int nic_base = dev->base_addr;
517     int i;
518
519     ei_status.txing = ei_status.dmaing = 0;
520
521     outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, nic_base + E8390_CMD);
522
523     outb(inb(nic_base + AXNET_RESET), nic_base + AXNET_RESET);
524
525     for (i = 0; i < 100; i++) {
526         if ((inb_p(nic_base+EN0_ISR) & ENISR_RESET) != 0)
527             break;
528         udelay(100);
529     }
530     outb_p(ENISR_RESET, nic_base + EN0_ISR); /* Ack intr. */
531     
532     if (i == 100)
533         printk(KERN_ERR "%s: axnet_reset_8390() did not complete.\n",
534                dev->name);
535     
536 } /* axnet_reset_8390 */
537
538 /*====================================================================*/
539
540 static irqreturn_t ei_irq_wrapper(int irq, void *dev_id)
541 {
542     struct net_device *dev = dev_id;
543     PRIV(dev)->stale = 0;
544     return ax_interrupt(irq, dev_id);
545 }
546
547 static void ei_watchdog(u_long arg)
548 {
549     struct net_device *dev = (struct net_device *)(arg);
550     axnet_dev_t *info = PRIV(dev);
551     unsigned int nic_base = dev->base_addr;
552     unsigned int mii_addr = nic_base + AXNET_MII_EEP;
553     u_short link;
554
555     if (!netif_device_present(dev)) goto reschedule;
556
557     /* Check for pending interrupt with expired latency timer: with
558        this, we can limp along even if the interrupt is blocked */
559     if (info->stale++ && (inb_p(nic_base + EN0_ISR) & ENISR_ALL)) {
560         if (!info->fast_poll)
561             printk(KERN_INFO "%s: interrupt(s) dropped!\n", dev->name);
562         ei_irq_wrapper(dev->irq, dev);
563         info->fast_poll = HZ;
564     }
565     if (info->fast_poll) {
566         info->fast_poll--;
567         info->watchdog.expires = jiffies + 1;
568         add_timer(&info->watchdog);
569         return;
570     }
571
572     if (info->phy_id < 0)
573         goto reschedule;
574     link = mdio_read(mii_addr, info->phy_id, 1);
575     if (!link || (link == 0xffff)) {
576         printk(KERN_INFO "%s: MII is missing!\n", dev->name);
577         info->phy_id = -1;
578         goto reschedule;
579     }
580
581     link &= 0x0004;
582     if (link != info->link_status) {
583         u_short p = mdio_read(mii_addr, info->phy_id, 5);
584         printk(KERN_INFO "%s: %s link beat\n", dev->name,
585                (link) ? "found" : "lost");
586         if (link) {
587             info->duplex_flag = (p & 0x0140) ? 0x80 : 0x00;
588             if (p)
589                 printk(KERN_INFO "%s: autonegotiation complete: "
590                        "%sbaseT-%cD selected\n", dev->name,
591                        ((p & 0x0180) ? "100" : "10"),
592                        ((p & 0x0140) ? 'F' : 'H'));
593             else
594                 printk(KERN_INFO "%s: link partner did not autonegotiate\n",
595                        dev->name);
596             AX88190_init(dev, 1);
597         }
598         info->link_status = link;
599     }
600
601 reschedule:
602     info->watchdog.expires = jiffies + HZ;
603     add_timer(&info->watchdog);
604 }
605
606 static void netdev_get_drvinfo(struct net_device *dev,
607                                struct ethtool_drvinfo *info)
608 {
609         strcpy(info->driver, "axnet_cs");
610 }
611
612 static const struct ethtool_ops netdev_ethtool_ops = {
613         .get_drvinfo            = netdev_get_drvinfo,
614 };
615
616 /*====================================================================*/
617
618 static int axnet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
619 {
620     axnet_dev_t *info = PRIV(dev);
621     struct mii_ioctl_data *data = if_mii(rq);
622     unsigned int mii_addr = dev->base_addr + AXNET_MII_EEP;
623     switch (cmd) {
624     case SIOCGMIIPHY:
625         data->phy_id = info->phy_id;
626     case SIOCGMIIREG:           /* Read MII PHY register. */
627         data->val_out = mdio_read(mii_addr, data->phy_id, data->reg_num & 0x1f);
628         return 0;
629     case SIOCSMIIREG:           /* Write MII PHY register. */
630         mdio_write(mii_addr, data->phy_id, data->reg_num & 0x1f, data->val_in);
631         return 0;
632     }
633     return -EOPNOTSUPP;
634 }
635
636 /*====================================================================*/
637
638 static void get_8390_hdr(struct net_device *dev,
639                          struct e8390_pkt_hdr *hdr,
640                          int ring_page)
641 {
642     unsigned int nic_base = dev->base_addr;
643
644     outb_p(0, nic_base + EN0_RSARLO);           /* On page boundary */
645     outb_p(ring_page, nic_base + EN0_RSARHI);
646     outb_p(E8390_RREAD+E8390_START, nic_base + AXNET_CMD);
647
648     insw(nic_base + AXNET_DATAPORT, hdr,
649             sizeof(struct e8390_pkt_hdr)>>1);
650     /* Fix for big endian systems */
651     hdr->count = le16_to_cpu(hdr->count);
652
653 }
654
655 /*====================================================================*/
656
657 static void block_input(struct net_device *dev, int count,
658                         struct sk_buff *skb, int ring_offset)
659 {
660     unsigned int nic_base = dev->base_addr;
661     int xfer_count = count;
662     char *buf = skb->data;
663
664     if ((ei_debug > 4) && (count != 4))
665             pr_debug("%s: [bi=%d]\n", dev->name, count+4);
666     outb_p(ring_offset & 0xff, nic_base + EN0_RSARLO);
667     outb_p(ring_offset >> 8, nic_base + EN0_RSARHI);
668     outb_p(E8390_RREAD+E8390_START, nic_base + AXNET_CMD);
669
670     insw(nic_base + AXNET_DATAPORT,buf,count>>1);
671     if (count & 0x01)
672         buf[count-1] = inb(nic_base + AXNET_DATAPORT), xfer_count++;
673
674 }
675
676 /*====================================================================*/
677
678 static void block_output(struct net_device *dev, int count,
679                          const u_char *buf, const int start_page)
680 {
681     unsigned int nic_base = dev->base_addr;
682
683     pr_debug("%s: [bo=%d]\n", dev->name, count);
684
685     /* Round the count up for word writes.  Do we need to do this?
686        What effect will an odd byte count have on the 8390?
687        I should check someday. */
688     if (count & 0x01)
689         count++;
690
691     outb_p(0x00, nic_base + EN0_RSARLO);
692     outb_p(start_page, nic_base + EN0_RSARHI);
693     outb_p(E8390_RWRITE+E8390_START, nic_base + AXNET_CMD);
694     outsw(nic_base + AXNET_DATAPORT, buf, count>>1);
695 }
696
697 static struct pcmcia_device_id axnet_ids[] = {
698         PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x016c, 0x0081),
699         PCMCIA_DEVICE_MANF_CARD(0x018a, 0x0301),
700         PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0301),
701         PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0303),
702         PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0309),
703         PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1106),
704         PCMCIA_DEVICE_MANF_CARD(0x8a01, 0xc1ab),
705         PCMCIA_DEVICE_MANF_CARD(0x021b, 0x0202), 
706         PCMCIA_DEVICE_MANF_CARD(0xffff, 0x1090),
707         PCMCIA_DEVICE_PROD_ID12("AmbiCom,Inc.", "Fast Ethernet PC Card(AMB8110)", 0x49b020a7, 0x119cc9fc),
708         PCMCIA_DEVICE_PROD_ID124("Fast Ethernet", "16-bit PC Card", "AX88190", 0xb4be14e3, 0x9a12eb6a, 0xab9be5ef),
709         PCMCIA_DEVICE_PROD_ID12("ASIX", "AX88190", 0x0959823b, 0xab9be5ef),
710         PCMCIA_DEVICE_PROD_ID12("Billionton", "LNA-100B", 0x552ab682, 0xbc3b87e1),
711         PCMCIA_DEVICE_PROD_ID12("CHEETAH ETHERCARD", "EN2228", 0x00fa7bc8, 0x00e990cc),
712         PCMCIA_DEVICE_PROD_ID12("CNet", "CNF301", 0xbc477dde, 0x78c5f40b),
713         PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega FEther PCC-TXD", 0x5261440f, 0x436768c5),
714         PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega FEtherII PCC-TXD", 0x5261440f, 0x730df72e),
715         PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega FEther PCC-TXM", 0x5261440f, 0x3abbd061),
716         PCMCIA_DEVICE_PROD_ID12("Dynalink", "L100C16", 0x55632fd5, 0x66bc2a90),
717         PCMCIA_DEVICE_PROD_ID12("IO DATA", "ETXPCM", 0x547e66dc, 0x233adac2),
718         PCMCIA_DEVICE_PROD_ID12("Linksys", "EtherFast 10/100 PC Card (PCMPC100 V3)", 0x0733cc81, 0x232019a8),
719         PCMCIA_DEVICE_PROD_ID12("MELCO", "LPC3-TX", 0x481e0094, 0xf91af609),
720         PCMCIA_DEVICE_PROD_ID12("NETGEAR", "FA411", 0x9aa79dc3, 0x40fad875),
721         PCMCIA_DEVICE_PROD_ID12("PCMCIA", "100BASE", 0x281f1c5d, 0x7c2add04),
722         PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FastEtherCard", 0x281f1c5d, 0x7ef26116),
723         PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FEP501", 0x281f1c5d, 0x2e272058),
724         PCMCIA_DEVICE_PROD_ID14("Network Everywhere", "AX88190", 0x820a67b6,  0xab9be5ef),
725         PCMCIA_DEVICE_NULL,
726 };
727 MODULE_DEVICE_TABLE(pcmcia, axnet_ids);
728
729 static struct pcmcia_driver axnet_cs_driver = {
730         .owner          = THIS_MODULE,
731         .name           = "axnet_cs",
732         .probe          = axnet_probe,
733         .remove         = axnet_detach,
734         .id_table       = axnet_ids,
735         .suspend        = axnet_suspend,
736         .resume         = axnet_resume,
737 };
738
739 static int __init init_axnet_cs(void)
740 {
741         return pcmcia_register_driver(&axnet_cs_driver);
742 }
743
744 static void __exit exit_axnet_cs(void)
745 {
746         pcmcia_unregister_driver(&axnet_cs_driver);
747 }
748
749 module_init(init_axnet_cs);
750 module_exit(exit_axnet_cs);
751
752 /*====================================================================*/
753
754 /* 8390.c: A general NS8390 ethernet driver core for linux. */
755 /*
756         Written 1992-94 by Donald Becker.
757   
758         Copyright 1993 United States Government as represented by the
759         Director, National Security Agency.
760
761         This software may be used and distributed according to the terms
762         of the GNU General Public License, incorporated herein by reference.
763
764         The author may be reached as becker@scyld.com, or C/O
765         Scyld Computing Corporation
766         410 Severn Ave., Suite 210
767         Annapolis MD 21403
768
769   This is the chip-specific code for many 8390-based ethernet adaptors.
770   This is not a complete driver, it must be combined with board-specific
771   code such as ne.c, wd.c, 3c503.c, etc.
772
773   Seeing how at least eight drivers use this code, (not counting the
774   PCMCIA ones either) it is easy to break some card by what seems like
775   a simple innocent change. Please contact me or Donald if you think
776   you have found something that needs changing. -- PG
777
778   Changelog:
779
780   Paul Gortmaker        : remove set_bit lock, other cleanups.
781   Paul Gortmaker        : add ei_get_8390_hdr() so we can pass skb's to 
782                           ei_block_input() for eth_io_copy_and_sum().
783   Paul Gortmaker        : exchange static int ei_pingpong for a #define,
784                           also add better Tx error handling.
785   Paul Gortmaker        : rewrite Rx overrun handling as per NS specs.
786   Alexey Kuznetsov      : use the 8390's six bit hash multicast filter.
787   Paul Gortmaker        : tweak ANK's above multicast changes a bit.
788   Paul Gortmaker        : update packet statistics for v2.1.x
789   Alan Cox              : support arbitary stupid port mappings on the
790                           68K Macintosh. Support >16bit I/O spaces
791   Paul Gortmaker        : add kmod support for auto-loading of the 8390
792                           module by all drivers that require it.
793   Alan Cox              : Spinlocking work, added 'BUG_83C690'
794   Paul Gortmaker        : Separate out Tx timeout code from Tx path.
795
796   Sources:
797   The National Semiconductor LAN Databook, and the 3Com 3c503 databook.
798
799   */
800
801 static const char version_8390[] = KERN_INFO \
802     "8390.c:v1.10cvs 9/23/94 Donald Becker (becker@scyld.com)\n";
803
804 #include <linux/bitops.h>
805 #include <asm/irq.h>
806 #include <linux/fcntl.h>
807 #include <linux/in.h>
808 #include <linux/interrupt.h>
809
810 #define BUG_83C690
811
812 /* These are the operational function interfaces to board-specific
813    routines.
814         void reset_8390(struct net_device *dev)
815                 Resets the board associated with DEV, including a hardware reset of
816                 the 8390.  This is only called when there is a transmit timeout, and
817                 it is always followed by 8390_init().
818         void block_output(struct net_device *dev, int count, const unsigned char *buf,
819                                           int start_page)
820                 Write the COUNT bytes of BUF to the packet buffer at START_PAGE.  The
821                 "page" value uses the 8390's 256-byte pages.
822         void get_8390_hdr(struct net_device *dev, struct e8390_hdr *hdr, int ring_page)
823                 Read the 4 byte, page aligned 8390 header. *If* there is a
824                 subsequent read, it will be of the rest of the packet.
825         void block_input(struct net_device *dev, int count, struct sk_buff *skb, int ring_offset)
826                 Read COUNT bytes from the packet buffer into the skb data area. Start 
827                 reading from RING_OFFSET, the address as the 8390 sees it.  This will always
828                 follow the read of the 8390 header. 
829 */
830 #define ei_reset_8390 (ei_local->reset_8390)
831 #define ei_block_output (ei_local->block_output)
832 #define ei_block_input (ei_local->block_input)
833 #define ei_get_8390_hdr (ei_local->get_8390_hdr)
834
835 /* use 0 for production, 1 for verification, >2 for debug */
836 #ifndef ei_debug
837 int ei_debug = 1;
838 #endif
839
840 /* Index to functions. */
841 static void ei_tx_intr(struct net_device *dev);
842 static void ei_tx_err(struct net_device *dev);
843 static void ei_receive(struct net_device *dev);
844 static void ei_rx_overrun(struct net_device *dev);
845
846 /* Routines generic to NS8390-based boards. */
847 static void NS8390_trigger_send(struct net_device *dev, unsigned int length,
848                                                                 int start_page);
849 static void do_set_multicast_list(struct net_device *dev);
850
851 /*
852  *      SMP and the 8390 setup.
853  *
854  *      The 8390 isnt exactly designed to be multithreaded on RX/TX. There is
855  *      a page register that controls bank and packet buffer access. We guard
856  *      this with ei_local->page_lock. Nobody should assume or set the page other
857  *      than zero when the lock is not held. Lock holders must restore page 0
858  *      before unlocking. Even pure readers must take the lock to protect in 
859  *      page 0.
860  *
861  *      To make life difficult the chip can also be very slow. We therefore can't
862  *      just use spinlocks. For the longer lockups we disable the irq the device
863  *      sits on and hold the lock. We must hold the lock because there is a dual
864  *      processor case other than interrupts (get stats/set multicast list in
865  *      parallel with each other and transmit).
866  *
867  *      Note: in theory we can just disable the irq on the card _but_ there is
868  *      a latency on SMP irq delivery. So we can easily go "disable irq" "sync irqs"
869  *      enter lock, take the queued irq. So we waddle instead of flying.
870  *
871  *      Finally by special arrangement for the purpose of being generally 
872  *      annoying the transmit function is called bh atomic. That places
873  *      restrictions on the user context callers as disable_irq won't save
874  *      them.
875  */
876  
877 /**
878  * ax_open - Open/initialize the board.
879  * @dev: network device to initialize
880  *
881  * This routine goes all-out, setting everything
882  * up anew at each open, even though many of these registers should only
883  * need to be set once at boot.
884  */
885 static int ax_open(struct net_device *dev)
886 {
887         unsigned long flags;
888         struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
889
890         /*
891          *      Grab the page lock so we own the register set, then call
892          *      the init function.
893          */
894       
895         spin_lock_irqsave(&ei_local->page_lock, flags);
896         AX88190_init(dev, 1);
897         /* Set the flag before we drop the lock, That way the IRQ arrives
898            after its set and we get no silly warnings */
899         netif_start_queue(dev);
900         spin_unlock_irqrestore(&ei_local->page_lock, flags);
901         ei_local->irqlock = 0;
902         return 0;
903 }
904
905 #define dev_lock(dev) (((struct ei_device *)netdev_priv(dev))->page_lock)
906
907 /**
908  * ax_close - shut down network device
909  * @dev: network device to close
910  *
911  * Opposite of ax_open(). Only used when "ifconfig <devname> down" is done.
912  */
913 static int ax_close(struct net_device *dev)
914 {
915         unsigned long flags;
916
917         /*
918          *      Hold the page lock during close
919          */
920
921         spin_lock_irqsave(&dev_lock(dev), flags);
922         AX88190_init(dev, 0);
923         spin_unlock_irqrestore(&dev_lock(dev), flags);
924         netif_stop_queue(dev);
925         return 0;
926 }
927
928 /**
929  * axnet_tx_timeout - handle transmit time out condition
930  * @dev: network device which has apparently fallen asleep
931  *
932  * Called by kernel when device never acknowledges a transmit has
933  * completed (or failed) - i.e. never posted a Tx related interrupt.
934  */
935
936 static void axnet_tx_timeout(struct net_device *dev)
937 {
938         long e8390_base = dev->base_addr;
939         struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
940         int txsr, isr, tickssofar = jiffies - dev_trans_start(dev);
941         unsigned long flags;
942
943         dev->stats.tx_errors++;
944
945         spin_lock_irqsave(&ei_local->page_lock, flags);
946         txsr = inb(e8390_base+EN0_TSR);
947         isr = inb(e8390_base+EN0_ISR);
948         spin_unlock_irqrestore(&ei_local->page_lock, flags);
949
950         printk(KERN_DEBUG "%s: Tx timed out, %s TSR=%#2x, ISR=%#2x, t=%d.\n",
951                 dev->name, (txsr & ENTSR_ABT) ? "excess collisions." :
952                 (isr) ? "lost interrupt?" : "cable problem?", txsr, isr, tickssofar);
953
954         if (!isr && !dev->stats.tx_packets) 
955         {
956                 /* The 8390 probably hasn't gotten on the cable yet. */
957                 ei_local->interface_num ^= 1;   /* Try a different xcvr.  */
958         }
959
960         /* Ugly but a reset can be slow, yet must be protected */
961                 
962         spin_lock_irqsave(&ei_local->page_lock, flags);
963                 
964         /* Try to restart the card.  Perhaps the user has fixed something. */
965         ei_reset_8390(dev);
966         AX88190_init(dev, 1);
967                 
968         spin_unlock_irqrestore(&ei_local->page_lock, flags);
969         netif_wake_queue(dev);
970 }
971     
972 /**
973  * axnet_start_xmit - begin packet transmission
974  * @skb: packet to be sent
975  * @dev: network device to which packet is sent
976  *
977  * Sends a packet to an 8390 network device.
978  */
979  
980 static netdev_tx_t axnet_start_xmit(struct sk_buff *skb,
981                                           struct net_device *dev)
982 {
983         long e8390_base = dev->base_addr;
984         struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
985         int length, send_length, output_page;
986         unsigned long flags;
987         u8 packet[ETH_ZLEN];
988         
989         netif_stop_queue(dev);
990
991         length = skb->len;
992
993         /* Mask interrupts from the ethercard. 
994            SMP: We have to grab the lock here otherwise the IRQ handler
995            on another CPU can flip window and race the IRQ mask set. We end
996            up trashing the mcast filter not disabling irqs if we don't lock */
997            
998         spin_lock_irqsave(&ei_local->page_lock, flags);
999         outb_p(0x00, e8390_base + EN0_IMR);
1000         
1001         /*
1002          *      Slow phase with lock held.
1003          */
1004          
1005         ei_local->irqlock = 1;
1006
1007         send_length = max(length, ETH_ZLEN);
1008
1009         /*
1010          * We have two Tx slots available for use. Find the first free
1011          * slot, and then perform some sanity checks. With two Tx bufs,
1012          * you get very close to transmitting back-to-back packets. With
1013          * only one Tx buf, the transmitter sits idle while you reload the
1014          * card, leaving a substantial gap between each transmitted packet.
1015          */
1016
1017         if (ei_local->tx1 == 0) 
1018         {
1019                 output_page = ei_local->tx_start_page;
1020                 ei_local->tx1 = send_length;
1021                 if (ei_debug  &&  ei_local->tx2 > 0)
1022                         printk(KERN_DEBUG "%s: idle transmitter tx2=%d, lasttx=%d, txing=%d.\n",
1023                                 dev->name, ei_local->tx2, ei_local->lasttx, ei_local->txing);
1024         }
1025         else if (ei_local->tx2 == 0) 
1026         {
1027                 output_page = ei_local->tx_start_page + TX_PAGES/2;
1028                 ei_local->tx2 = send_length;
1029                 if (ei_debug  &&  ei_local->tx1 > 0)
1030                         printk(KERN_DEBUG "%s: idle transmitter, tx1=%d, lasttx=%d, txing=%d.\n",
1031                                 dev->name, ei_local->tx1, ei_local->lasttx, ei_local->txing);
1032         }
1033         else
1034         {       /* We should never get here. */
1035                 if (ei_debug)
1036                         printk(KERN_DEBUG "%s: No Tx buffers free! tx1=%d tx2=%d last=%d\n",
1037                                 dev->name, ei_local->tx1, ei_local->tx2, ei_local->lasttx);
1038                 ei_local->irqlock = 0;
1039                 netif_stop_queue(dev);
1040                 outb_p(ENISR_ALL, e8390_base + EN0_IMR);
1041                 spin_unlock_irqrestore(&ei_local->page_lock, flags);
1042                 dev->stats.tx_errors++;
1043                 return NETDEV_TX_BUSY;
1044         }
1045
1046         /*
1047          * Okay, now upload the packet and trigger a send if the transmitter
1048          * isn't already sending. If it is busy, the interrupt handler will
1049          * trigger the send later, upon receiving a Tx done interrupt.
1050          */
1051
1052         if (length == skb->len)
1053                 ei_block_output(dev, length, skb->data, output_page);
1054         else {
1055                 memset(packet, 0, ETH_ZLEN);
1056                 skb_copy_from_linear_data(skb, packet, skb->len);
1057                 ei_block_output(dev, length, packet, output_page);
1058         }
1059         
1060         if (! ei_local->txing) 
1061         {
1062                 ei_local->txing = 1;
1063                 NS8390_trigger_send(dev, send_length, output_page);
1064                 dev->trans_start = jiffies;
1065                 if (output_page == ei_local->tx_start_page) 
1066                 {
1067                         ei_local->tx1 = -1;
1068                         ei_local->lasttx = -1;
1069                 }
1070                 else 
1071                 {
1072                         ei_local->tx2 = -1;
1073                         ei_local->lasttx = -2;
1074                 }
1075         }
1076         else ei_local->txqueue++;
1077
1078         if (ei_local->tx1  &&  ei_local->tx2)
1079                 netif_stop_queue(dev);
1080         else
1081                 netif_start_queue(dev);
1082
1083         /* Turn 8390 interrupts back on. */
1084         ei_local->irqlock = 0;
1085         outb_p(ENISR_ALL, e8390_base + EN0_IMR);
1086         
1087         spin_unlock_irqrestore(&ei_local->page_lock, flags);
1088
1089         dev_kfree_skb (skb);
1090         dev->stats.tx_bytes += send_length;
1091     
1092         return NETDEV_TX_OK;
1093 }
1094
1095 /**
1096  * ax_interrupt - handle the interrupts from an 8390
1097  * @irq: interrupt number
1098  * @dev_id: a pointer to the net_device
1099  *
1100  * Handle the ether interface interrupts. We pull packets from
1101  * the 8390 via the card specific functions and fire them at the networking
1102  * stack. We also handle transmit completions and wake the transmit path if
1103  * necessary. We also update the counters and do other housekeeping as
1104  * needed.
1105  */
1106
1107 static irqreturn_t ax_interrupt(int irq, void *dev_id)
1108 {
1109         struct net_device *dev = dev_id;
1110         long e8390_base;
1111         int interrupts, nr_serviced = 0, i;
1112         struct ei_device *ei_local;
1113         int handled = 0;
1114         unsigned long flags;
1115
1116         e8390_base = dev->base_addr;
1117         ei_local = netdev_priv(dev);
1118
1119         /*
1120          *      Protect the irq test too.
1121          */
1122          
1123         spin_lock_irqsave(&ei_local->page_lock, flags);
1124
1125         if (ei_local->irqlock) 
1126         {
1127 #if 1 /* This might just be an interrupt for a PCI device sharing this line */
1128                 /* The "irqlock" check is only for testing. */
1129                 printk(ei_local->irqlock
1130                            ? "%s: Interrupted while interrupts are masked! isr=%#2x imr=%#2x.\n"
1131                            : "%s: Reentering the interrupt handler! isr=%#2x imr=%#2x.\n",
1132                            dev->name, inb_p(e8390_base + EN0_ISR),
1133                            inb_p(e8390_base + EN0_IMR));
1134 #endif
1135                 spin_unlock_irqrestore(&ei_local->page_lock, flags);
1136                 return IRQ_NONE;
1137         }
1138     
1139         if (ei_debug > 3)
1140                 printk(KERN_DEBUG "%s: interrupt(isr=%#2.2x).\n", dev->name,
1141                            inb_p(e8390_base + EN0_ISR));
1142
1143         outb_p(0x00, e8390_base + EN0_ISR);
1144         ei_local->irqlock = 1;
1145    
1146         /* !!Assumption!! -- we stay in page 0.  Don't break this. */
1147         while ((interrupts = inb_p(e8390_base + EN0_ISR)) != 0 &&
1148                ++nr_serviced < MAX_SERVICE)
1149         {
1150                 if (!netif_running(dev) || (interrupts == 0xff)) {
1151                         if (ei_debug > 1)
1152                                 printk(KERN_WARNING "%s: interrupt from stopped card\n", dev->name);
1153                         outb_p(interrupts, e8390_base + EN0_ISR);
1154                         interrupts = 0;
1155                         break;
1156                 }
1157                 handled = 1;
1158
1159                 /* AX88190 bug fix. */
1160                 outb_p(interrupts, e8390_base + EN0_ISR);
1161                 for (i = 0; i < 10; i++) {
1162                         if (!(inb(e8390_base + EN0_ISR) & interrupts))
1163                                 break;
1164                         outb_p(0, e8390_base + EN0_ISR);
1165                         outb_p(interrupts, e8390_base + EN0_ISR);
1166                 }
1167                 if (interrupts & ENISR_OVER) 
1168                         ei_rx_overrun(dev);
1169                 else if (interrupts & (ENISR_RX+ENISR_RX_ERR)) 
1170                 {
1171                         /* Got a good (?) packet. */
1172                         ei_receive(dev);
1173                 }
1174                 /* Push the next to-transmit packet through. */
1175                 if (interrupts & ENISR_TX)
1176                         ei_tx_intr(dev);
1177                 else if (interrupts & ENISR_TX_ERR)
1178                         ei_tx_err(dev);
1179
1180                 if (interrupts & ENISR_COUNTERS) 
1181                 {
1182                         dev->stats.rx_frame_errors += inb_p(e8390_base + EN0_COUNTER0);
1183                         dev->stats.rx_crc_errors   += inb_p(e8390_base + EN0_COUNTER1);
1184                         dev->stats.rx_missed_errors+= inb_p(e8390_base + EN0_COUNTER2);
1185                 }
1186         }
1187     
1188         if (interrupts && ei_debug > 3) 
1189         {
1190                 handled = 1;
1191                 if (nr_serviced >= MAX_SERVICE) 
1192                 {
1193                         /* 0xFF is valid for a card removal */
1194                         if(interrupts!=0xFF)
1195                                 printk(KERN_WARNING "%s: Too much work at interrupt, status %#2.2x\n",
1196                                    dev->name, interrupts);
1197                         outb_p(ENISR_ALL, e8390_base + EN0_ISR); /* Ack. most intrs. */
1198                 } else {
1199                         printk(KERN_WARNING "%s: unknown interrupt %#2x\n", dev->name, interrupts);
1200                         outb_p(0xff, e8390_base + EN0_ISR); /* Ack. all intrs. */
1201                 }
1202         }
1203
1204         /* Turn 8390 interrupts back on. */
1205         ei_local->irqlock = 0;
1206         outb_p(ENISR_ALL, e8390_base + EN0_IMR);
1207
1208         spin_unlock_irqrestore(&ei_local->page_lock, flags);
1209         return IRQ_RETVAL(handled);
1210 }
1211
1212 /**
1213  * ei_tx_err - handle transmitter error
1214  * @dev: network device which threw the exception
1215  *
1216  * A transmitter error has happened. Most likely excess collisions (which
1217  * is a fairly normal condition). If the error is one where the Tx will
1218  * have been aborted, we try and send another one right away, instead of
1219  * letting the failed packet sit and collect dust in the Tx buffer. This
1220  * is a much better solution as it avoids kernel based Tx timeouts, and
1221  * an unnecessary card reset.
1222  *
1223  * Called with lock held.
1224  */
1225
1226 static void ei_tx_err(struct net_device *dev)
1227 {
1228         long e8390_base = dev->base_addr;
1229         unsigned char txsr = inb_p(e8390_base+EN0_TSR);
1230         unsigned char tx_was_aborted = txsr & (ENTSR_ABT+ENTSR_FU);
1231
1232 #ifdef VERBOSE_ERROR_DUMP
1233         printk(KERN_DEBUG "%s: transmitter error (%#2x): ", dev->name, txsr);
1234         if (txsr & ENTSR_ABT)
1235                 printk("excess-collisions ");
1236         if (txsr & ENTSR_ND)
1237                 printk("non-deferral ");
1238         if (txsr & ENTSR_CRS)
1239                 printk("lost-carrier ");
1240         if (txsr & ENTSR_FU)
1241                 printk("FIFO-underrun ");
1242         if (txsr & ENTSR_CDH)
1243                 printk("lost-heartbeat ");
1244         printk("\n");
1245 #endif
1246
1247         if (tx_was_aborted)
1248                 ei_tx_intr(dev);
1249         else 
1250         {
1251                 dev->stats.tx_errors++;
1252                 if (txsr & ENTSR_CRS) dev->stats.tx_carrier_errors++;
1253                 if (txsr & ENTSR_CDH) dev->stats.tx_heartbeat_errors++;
1254                 if (txsr & ENTSR_OWC) dev->stats.tx_window_errors++;
1255         }
1256 }
1257
1258 /**
1259  * ei_tx_intr - transmit interrupt handler
1260  * @dev: network device for which tx intr is handled
1261  *
1262  * We have finished a transmit: check for errors and then trigger the next
1263  * packet to be sent. Called with lock held.
1264  */
1265
1266 static void ei_tx_intr(struct net_device *dev)
1267 {
1268         long e8390_base = dev->base_addr;
1269         struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1270         int status = inb(e8390_base + EN0_TSR);
1271     
1272         /*
1273          * There are two Tx buffers, see which one finished, and trigger
1274          * the send of another one if it exists.
1275          */
1276         ei_local->txqueue--;
1277
1278         if (ei_local->tx1 < 0) 
1279         {
1280                 if (ei_local->lasttx != 1 && ei_local->lasttx != -1)
1281                         printk(KERN_ERR "%s: bogus last_tx_buffer %d, tx1=%d.\n",
1282                                 ei_local->name, ei_local->lasttx, ei_local->tx1);
1283                 ei_local->tx1 = 0;
1284                 if (ei_local->tx2 > 0) 
1285                 {
1286                         ei_local->txing = 1;
1287                         NS8390_trigger_send(dev, ei_local->tx2, ei_local->tx_start_page + 6);
1288                         dev->trans_start = jiffies;
1289                         ei_local->tx2 = -1,
1290                         ei_local->lasttx = 2;
1291                 }
1292                 else ei_local->lasttx = 20, ei_local->txing = 0;        
1293         }
1294         else if (ei_local->tx2 < 0) 
1295         {
1296                 if (ei_local->lasttx != 2  &&  ei_local->lasttx != -2)
1297                         printk("%s: bogus last_tx_buffer %d, tx2=%d.\n",
1298                                 ei_local->name, ei_local->lasttx, ei_local->tx2);
1299                 ei_local->tx2 = 0;
1300                 if (ei_local->tx1 > 0) 
1301                 {
1302                         ei_local->txing = 1;
1303                         NS8390_trigger_send(dev, ei_local->tx1, ei_local->tx_start_page);
1304                         dev->trans_start = jiffies;
1305                         ei_local->tx1 = -1;
1306                         ei_local->lasttx = 1;
1307                 }
1308                 else
1309                         ei_local->lasttx = 10, ei_local->txing = 0;
1310         }
1311 //      else printk(KERN_WARNING "%s: unexpected TX-done interrupt, lasttx=%d.\n",
1312 //                      dev->name, ei_local->lasttx);
1313
1314         /* Minimize Tx latency: update the statistics after we restart TXing. */
1315         if (status & ENTSR_COL)
1316                 dev->stats.collisions++;
1317         if (status & ENTSR_PTX)
1318                 dev->stats.tx_packets++;
1319         else 
1320         {
1321                 dev->stats.tx_errors++;
1322                 if (status & ENTSR_ABT) 
1323                 {
1324                         dev->stats.tx_aborted_errors++;
1325                         dev->stats.collisions += 16;
1326                 }
1327                 if (status & ENTSR_CRS) 
1328                         dev->stats.tx_carrier_errors++;
1329                 if (status & ENTSR_FU) 
1330                         dev->stats.tx_fifo_errors++;
1331                 if (status & ENTSR_CDH)
1332                         dev->stats.tx_heartbeat_errors++;
1333                 if (status & ENTSR_OWC)
1334                         dev->stats.tx_window_errors++;
1335         }
1336         netif_wake_queue(dev);
1337 }
1338
1339 /**
1340  * ei_receive - receive some packets
1341  * @dev: network device with which receive will be run
1342  *
1343  * We have a good packet(s), get it/them out of the buffers. 
1344  * Called with lock held.
1345  */
1346
1347 static void ei_receive(struct net_device *dev)
1348 {
1349         long e8390_base = dev->base_addr;
1350         struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1351         unsigned char rxing_page, this_frame, next_frame;
1352         unsigned short current_offset;
1353         int rx_pkt_count = 0;
1354         struct e8390_pkt_hdr rx_frame;
1355     
1356         while (++rx_pkt_count < 10) 
1357         {
1358                 int pkt_len, pkt_stat;
1359                 
1360                 /* Get the rx page (incoming packet pointer). */
1361                 rxing_page = inb_p(e8390_base + EN1_CURPAG -1);
1362                 
1363                 /* Remove one frame from the ring.  Boundary is always a page behind. */
1364                 this_frame = inb_p(e8390_base + EN0_BOUNDARY) + 1;
1365                 if (this_frame >= ei_local->stop_page)
1366                         this_frame = ei_local->rx_start_page;
1367                 
1368                 /* Someday we'll omit the previous, iff we never get this message.
1369                    (There is at least one clone claimed to have a problem.)  
1370                    
1371                    Keep quiet if it looks like a card removal. One problem here
1372                    is that some clones crash in roughly the same way.
1373                  */
1374                 if (ei_debug > 0  &&  this_frame != ei_local->current_page && (this_frame!=0x0 || rxing_page!=0xFF))
1375                         printk(KERN_ERR "%s: mismatched read page pointers %2x vs %2x.\n",
1376                                    dev->name, this_frame, ei_local->current_page);
1377                 
1378                 if (this_frame == rxing_page)   /* Read all the frames? */
1379                         break;                          /* Done for now */
1380                 
1381                 current_offset = this_frame << 8;
1382                 ei_get_8390_hdr(dev, &rx_frame, this_frame);
1383                 
1384                 pkt_len = rx_frame.count - sizeof(struct e8390_pkt_hdr);
1385                 pkt_stat = rx_frame.status;
1386                 
1387                 next_frame = this_frame + 1 + ((pkt_len+4)>>8);
1388                 
1389                 if (pkt_len < 60  ||  pkt_len > 1518) 
1390                 {
1391                         if (ei_debug)
1392                                 printk(KERN_DEBUG "%s: bogus packet size: %d, status=%#2x nxpg=%#2x.\n",
1393                                            dev->name, rx_frame.count, rx_frame.status,
1394                                            rx_frame.next);
1395                         dev->stats.rx_errors++;
1396                         dev->stats.rx_length_errors++;
1397                 }
1398                  else if ((pkt_stat & 0x0F) == ENRSR_RXOK) 
1399                 {
1400                         struct sk_buff *skb;
1401                         
1402                         skb = dev_alloc_skb(pkt_len+2);
1403                         if (skb == NULL) 
1404                         {
1405                                 if (ei_debug > 1)
1406                                         printk(KERN_DEBUG "%s: Couldn't allocate a sk_buff of size %d.\n",
1407                                                    dev->name, pkt_len);
1408                                 dev->stats.rx_dropped++;
1409                                 break;
1410                         }
1411                         else
1412                         {
1413                                 skb_reserve(skb,2);     /* IP headers on 16 byte boundaries */
1414                                 skb_put(skb, pkt_len);  /* Make room */
1415                                 ei_block_input(dev, pkt_len, skb, current_offset + sizeof(rx_frame));
1416                                 skb->protocol=eth_type_trans(skb,dev);
1417                                 netif_rx(skb);
1418                                 dev->stats.rx_packets++;
1419                                 dev->stats.rx_bytes += pkt_len;
1420                                 if (pkt_stat & ENRSR_PHY)
1421                                         dev->stats.multicast++;
1422                         }
1423                 } 
1424                 else 
1425                 {
1426                         if (ei_debug)
1427                                 printk(KERN_DEBUG "%s: bogus packet: status=%#2x nxpg=%#2x size=%d\n",
1428                                            dev->name, rx_frame.status, rx_frame.next,
1429                                            rx_frame.count);
1430                         dev->stats.rx_errors++;
1431                         /* NB: The NIC counts CRC, frame and missed errors. */
1432                         if (pkt_stat & ENRSR_FO)
1433                                 dev->stats.rx_fifo_errors++;
1434                 }
1435                 next_frame = rx_frame.next;
1436                 
1437                 /* This _should_ never happen: it's here for avoiding bad clones. */
1438                 if (next_frame >= ei_local->stop_page) {
1439                         printk("%s: next frame inconsistency, %#2x\n", dev->name,
1440                                    next_frame);
1441                         next_frame = ei_local->rx_start_page;
1442                 }
1443                 ei_local->current_page = next_frame;
1444                 outb_p(next_frame-1, e8390_base+EN0_BOUNDARY);
1445         }
1446 }
1447
1448 /**
1449  * ei_rx_overrun - handle receiver overrun
1450  * @dev: network device which threw exception
1451  *
1452  * We have a receiver overrun: we have to kick the 8390 to get it started
1453  * again. Problem is that you have to kick it exactly as NS prescribes in
1454  * the updated datasheets, or "the NIC may act in an unpredictable manner."
1455  * This includes causing "the NIC to defer indefinitely when it is stopped
1456  * on a busy network."  Ugh.
1457  * Called with lock held. Don't call this with the interrupts off or your
1458  * computer will hate you - it takes 10ms or so. 
1459  */
1460
1461 static void ei_rx_overrun(struct net_device *dev)
1462 {
1463         axnet_dev_t *info = PRIV(dev);
1464         long e8390_base = dev->base_addr;
1465         unsigned char was_txing, must_resend = 0;
1466     
1467         /*
1468          * Record whether a Tx was in progress and then issue the
1469          * stop command.
1470          */
1471         was_txing = inb_p(e8390_base+E8390_CMD) & E8390_TRANS;
1472         outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD);
1473     
1474         if (ei_debug > 1)
1475                 printk(KERN_DEBUG "%s: Receiver overrun.\n", dev->name);
1476         dev->stats.rx_over_errors++;
1477     
1478         /* 
1479          * Wait a full Tx time (1.2ms) + some guard time, NS says 1.6ms total.
1480          * Early datasheets said to poll the reset bit, but now they say that
1481          * it "is not a reliable indicator and subsequently should be ignored."
1482          * We wait at least 10ms.
1483          */
1484
1485         mdelay(10);
1486
1487         /*
1488          * Reset RBCR[01] back to zero as per magic incantation.
1489          */
1490         outb_p(0x00, e8390_base+EN0_RCNTLO);
1491         outb_p(0x00, e8390_base+EN0_RCNTHI);
1492
1493         /*
1494          * See if any Tx was interrupted or not. According to NS, this
1495          * step is vital, and skipping it will cause no end of havoc.
1496          */
1497
1498         if (was_txing)
1499         { 
1500                 unsigned char tx_completed = inb_p(e8390_base+EN0_ISR) & (ENISR_TX+ENISR_TX_ERR);
1501                 if (!tx_completed)
1502                         must_resend = 1;
1503         }
1504
1505         /*
1506          * Have to enter loopback mode and then restart the NIC before
1507          * you are allowed to slurp packets up off the ring.
1508          */
1509         outb_p(E8390_TXOFF, e8390_base + EN0_TXCR);
1510         outb_p(E8390_NODMA + E8390_PAGE0 + E8390_START, e8390_base + E8390_CMD);
1511
1512         /*
1513          * Clear the Rx ring of all the debris, and ack the interrupt.
1514          */
1515         ei_receive(dev);
1516
1517         /*
1518          * Leave loopback mode, and resend any packet that got stopped.
1519          */
1520         outb_p(E8390_TXCONFIG | info->duplex_flag, e8390_base + EN0_TXCR); 
1521         if (must_resend)
1522                 outb_p(E8390_NODMA + E8390_PAGE0 + E8390_START + E8390_TRANS, e8390_base + E8390_CMD);
1523 }
1524
1525 /*
1526  *      Collect the stats. This is called unlocked and from several contexts.
1527  */
1528  
1529 static struct net_device_stats *get_stats(struct net_device *dev)
1530 {
1531         long ioaddr = dev->base_addr;
1532         struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1533         unsigned long flags;
1534     
1535         /* If the card is stopped, just return the present stats. */
1536         if (!netif_running(dev))
1537                 return &dev->stats;
1538
1539         spin_lock_irqsave(&ei_local->page_lock,flags);
1540         /* Read the counter registers, assuming we are in page 0. */
1541         dev->stats.rx_frame_errors += inb_p(ioaddr + EN0_COUNTER0);
1542         dev->stats.rx_crc_errors   += inb_p(ioaddr + EN0_COUNTER1);
1543         dev->stats.rx_missed_errors+= inb_p(ioaddr + EN0_COUNTER2);
1544         spin_unlock_irqrestore(&ei_local->page_lock, flags);
1545     
1546         return &dev->stats;
1547 }
1548
1549 /*
1550  * Form the 64 bit 8390 multicast table from the linked list of addresses
1551  * associated with this dev structure.
1552  */
1553  
1554 static inline void make_mc_bits(u8 *bits, struct net_device *dev)
1555 {
1556         struct netdev_hw_addr *ha;
1557         u32 crc;
1558
1559         netdev_for_each_mc_addr(ha, dev) {
1560                 crc = ether_crc(ETH_ALEN, ha->addr);
1561                 /* 
1562                  * The 8390 uses the 6 most significant bits of the
1563                  * CRC to index the multicast table.
1564                  */
1565                 bits[crc>>29] |= (1<<((crc>>26)&7));
1566         }
1567 }
1568
1569 /**
1570  * do_set_multicast_list - set/clear multicast filter
1571  * @dev: net device for which multicast filter is adjusted
1572  *
1573  *      Set or clear the multicast filter for this adaptor.
1574  *      Must be called with lock held. 
1575  */
1576  
1577 static void do_set_multicast_list(struct net_device *dev)
1578 {
1579         long e8390_base = dev->base_addr;
1580         int i;
1581         struct ei_device *ei_local = (struct ei_device*)netdev_priv(dev);
1582
1583         if (!(dev->flags&(IFF_PROMISC|IFF_ALLMULTI))) {
1584                 memset(ei_local->mcfilter, 0, 8);
1585                 if (!netdev_mc_empty(dev))
1586                         make_mc_bits(ei_local->mcfilter, dev);
1587         } else {
1588                 /* set to accept-all */
1589                 memset(ei_local->mcfilter, 0xFF, 8);
1590         }
1591
1592         outb_p(E8390_NODMA + E8390_PAGE1, e8390_base + E8390_CMD);
1593         for(i = 0; i < 8; i++) 
1594         {
1595                 outb_p(ei_local->mcfilter[i], e8390_base + EN1_MULT_SHIFT(i));
1596         }
1597         outb_p(E8390_NODMA + E8390_PAGE0, e8390_base + E8390_CMD);
1598
1599         if(dev->flags&IFF_PROMISC)
1600                 outb_p(E8390_RXCONFIG | 0x58, e8390_base + EN0_RXCR);
1601         else if (dev->flags & IFF_ALLMULTI || !netdev_mc_empty(dev))
1602                 outb_p(E8390_RXCONFIG | 0x48, e8390_base + EN0_RXCR);
1603         else
1604                 outb_p(E8390_RXCONFIG | 0x40, e8390_base + EN0_RXCR);
1605
1606         outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base+E8390_CMD);
1607 }
1608
1609 /*
1610  *      Called without lock held. This is invoked from user context and may
1611  *      be parallel to just about everything else. Its also fairly quick and
1612  *      not called too often. Must protect against both bh and irq users
1613  */
1614
1615 static void set_multicast_list(struct net_device *dev)
1616 {
1617         unsigned long flags;
1618
1619         spin_lock_irqsave(&dev_lock(dev), flags);
1620         do_set_multicast_list(dev);
1621         spin_unlock_irqrestore(&dev_lock(dev), flags);
1622 }       
1623
1624 /* This page of functions should be 8390 generic */
1625 /* Follow National Semi's recommendations for initializing the "NIC". */
1626
1627 /**
1628  * AX88190_init - initialize 8390 hardware
1629  * @dev: network device to initialize
1630  * @startp: boolean.  non-zero value to initiate chip processing
1631  *
1632  *      Must be called with lock held.
1633  */
1634
1635 static void AX88190_init(struct net_device *dev, int startp)
1636 {
1637         axnet_dev_t *info = PRIV(dev);
1638         long e8390_base = dev->base_addr;
1639         struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1640         int i;
1641         int endcfg = ei_local->word16 ? (0x48 | ENDCFG_WTS) : 0x48;
1642     
1643         if(sizeof(struct e8390_pkt_hdr)!=4)
1644                 panic("8390.c: header struct mispacked\n");    
1645         /* Follow National Semi's recommendations for initing the DP83902. */
1646         outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD); /* 0x21 */
1647         outb_p(endcfg, e8390_base + EN0_DCFG);  /* 0x48 or 0x49 */
1648         /* Clear the remote byte count registers. */
1649         outb_p(0x00,  e8390_base + EN0_RCNTLO);
1650         outb_p(0x00,  e8390_base + EN0_RCNTHI);
1651         /* Set to monitor and loopback mode -- this is vital!. */
1652         outb_p(E8390_RXOFF|0x40, e8390_base + EN0_RXCR); /* 0x60 */
1653         outb_p(E8390_TXOFF, e8390_base + EN0_TXCR); /* 0x02 */
1654         /* Set the transmit page and receive ring. */
1655         outb_p(ei_local->tx_start_page, e8390_base + EN0_TPSR);
1656         ei_local->tx1 = ei_local->tx2 = 0;
1657         outb_p(ei_local->rx_start_page, e8390_base + EN0_STARTPG);
1658         outb_p(ei_local->stop_page-1, e8390_base + EN0_BOUNDARY);       /* 3c503 says 0x3f,NS0x26*/
1659         ei_local->current_page = ei_local->rx_start_page;               /* assert boundary+1 */
1660         outb_p(ei_local->stop_page, e8390_base + EN0_STOPPG);
1661         /* Clear the pending interrupts and mask. */
1662         outb_p(0xFF, e8390_base + EN0_ISR);
1663         outb_p(0x00,  e8390_base + EN0_IMR);
1664     
1665         /* Copy the station address into the DS8390 registers. */
1666
1667         outb_p(E8390_NODMA + E8390_PAGE1 + E8390_STOP, e8390_base+E8390_CMD); /* 0x61 */
1668         for(i = 0; i < 6; i++) 
1669         {
1670                 outb_p(dev->dev_addr[i], e8390_base + EN1_PHYS_SHIFT(i));
1671                 if(inb_p(e8390_base + EN1_PHYS_SHIFT(i))!=dev->dev_addr[i])
1672                         printk(KERN_ERR "Hw. address read/write mismap %d\n",i);
1673         }
1674
1675         outb_p(ei_local->rx_start_page, e8390_base + EN1_CURPAG);
1676         outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD);
1677
1678         netif_start_queue(dev);
1679         ei_local->tx1 = ei_local->tx2 = 0;
1680         ei_local->txing = 0;
1681
1682         if (info->flags & IS_AX88790)   /* select Internal PHY */
1683                 outb(0x10, e8390_base + AXNET_GPIO);
1684
1685         if (startp) 
1686         {
1687                 outb_p(0xff,  e8390_base + EN0_ISR);
1688                 outb_p(ENISR_ALL,  e8390_base + EN0_IMR);
1689                 outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base+E8390_CMD);
1690                 outb_p(E8390_TXCONFIG | info->duplex_flag,
1691                        e8390_base + EN0_TXCR); /* xmit on. */
1692                 /* 3c503 TechMan says rxconfig only after the NIC is started. */
1693                 outb_p(E8390_RXCONFIG | 0x40, e8390_base + EN0_RXCR); /* rx on, */
1694                 do_set_multicast_list(dev);     /* (re)load the mcast table */
1695         }
1696 }
1697
1698 /* Trigger a transmit start, assuming the length is valid. 
1699    Always called with the page lock held */
1700    
1701 static void NS8390_trigger_send(struct net_device *dev, unsigned int length,
1702                                                                 int start_page)
1703 {
1704         long e8390_base = dev->base_addr;
1705         struct ei_device *ei_local __attribute((unused)) = (struct ei_device *) netdev_priv(dev);
1706     
1707         if (inb_p(e8390_base) & E8390_TRANS) 
1708         {
1709                 printk(KERN_WARNING "%s: trigger_send() called with the transmitter busy.\n",
1710                         dev->name);
1711                 return;
1712         }
1713         outb_p(length & 0xff, e8390_base + EN0_TCNTLO);
1714         outb_p(length >> 8, e8390_base + EN0_TCNTHI);
1715         outb_p(start_page, e8390_base + EN0_TPSR);
1716         outb_p(E8390_NODMA+E8390_TRANS+E8390_START, e8390_base+E8390_CMD);
1717 }