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