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