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