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