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