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