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