1 /*======================================================================
3 A PCMCIA ethernet driver for Asix AX88190-based cards
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.
12 Copyright (C) 2001 David A. Hinds -- dahinds@users.sourceforge.net
14 axnet_cs.c 1.28 2002/06/29 06:27:37
16 The network driver code is based on Donald Becker's NE2000 code:
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
25 ======================================================================*/
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>
40 #include <pcmcia/cs_types.h>
41 #include <pcmcia/cs.h>
42 #include <pcmcia/cistpl.h>
43 #include <pcmcia/ciscode.h>
44 #include <pcmcia/ds.h>
45 #include <pcmcia/cisreg.h>
48 #include <asm/system.h>
49 #include <asm/byteorder.h>
50 #include <asm/uaccess.h>
52 #define AXNET_CMD 0x00
53 #define AXNET_DATAPORT 0x10 /* NatSemi-defined port window offset. */
54 #define AXNET_RESET 0x1f /* Issue a read to reset, a write to clear. */
55 #define AXNET_MII_EEP 0x14 /* Offset of MII access port */
56 #define AXNET_TEST 0x15 /* Offset of TEST Register port */
57 #define AXNET_GPIO 0x17 /* Offset of General Purpose Register Port */
59 #define AXNET_START_PG 0x40 /* First page of TX buffer */
60 #define AXNET_STOP_PG 0x80 /* Last page +1 of RX ring */
62 #define AXNET_RDC_TIMEOUT 0x02 /* Max wait in jiffies for Tx RDC */
64 #define IS_AX88190 0x0001
65 #define IS_AX88790 0x0002
67 /*====================================================================*/
69 /* Module parameters */
71 MODULE_AUTHOR("David Hinds <dahinds@users.sourceforge.net>");
72 MODULE_DESCRIPTION("Asix AX88190 PCMCIA ethernet driver");
73 MODULE_LICENSE("GPL");
76 #define INT_MODULE_PARM(n, v) static int n = v; module_param(n, int, 0)
78 INT_MODULE_PARM(pc_debug, PCMCIA_DEBUG);
79 #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
80 static char *version =
81 "axnet_cs.c 1.28 2002/06/29 06:27:37 (David Hinds)";
83 #define DEBUG(n, args...)
86 /*====================================================================*/
88 static void axnet_config(dev_link_t *link);
89 static void axnet_release(dev_link_t *link);
90 static int axnet_open(struct net_device *dev);
91 static int axnet_close(struct net_device *dev);
92 static int axnet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
93 static struct ethtool_ops netdev_ethtool_ops;
94 static irqreturn_t ei_irq_wrapper(int irq, void *dev_id, struct pt_regs *regs);
95 static void ei_watchdog(u_long arg);
96 static void axnet_reset_8390(struct net_device *dev);
98 static int mdio_read(kio_addr_t addr, int phy_id, int loc);
99 static void mdio_write(kio_addr_t addr, int phy_id, int loc, int value);
101 static void get_8390_hdr(struct net_device *,
102 struct e8390_pkt_hdr *, int);
103 static void block_input(struct net_device *dev, int count,
104 struct sk_buff *skb, int ring_offset);
105 static void block_output(struct net_device *dev, int count,
106 const u_char *buf, const int start_page);
108 static void axnet_detach(struct pcmcia_device *p_dev);
110 static void axdev_setup(struct net_device *dev);
111 static void AX88190_init(struct net_device *dev, int startp);
112 static int ax_open(struct net_device *dev);
113 static int ax_close(struct net_device *dev);
114 static irqreturn_t ax_interrupt(int irq, void *dev_id, struct pt_regs *regs);
116 /*====================================================================*/
118 typedef struct axnet_dev_t {
122 struct timer_list watchdog;
123 int stale, fast_poll;
130 static inline axnet_dev_t *PRIV(struct net_device *dev)
132 void *p = (char *)netdev_priv(dev) + sizeof(struct ei_device);
136 /*======================================================================
138 axnet_attach() creates an "instance" of the driver, allocating
139 local data structures for one device. The device is registered
142 ======================================================================*/
144 static int axnet_attach(struct pcmcia_device *p_dev)
148 struct net_device *dev;
150 DEBUG(0, "axnet_attach()\n");
152 dev = alloc_netdev(sizeof(struct ei_device) + sizeof(axnet_dev_t),
153 "eth%d", axdev_setup);
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;
166 dev->open = &axnet_open;
167 dev->stop = &axnet_close;
168 dev->do_ioctl = &axnet_ioctl;
169 SET_ETHTOOL_OPS(dev, &netdev_ethtool_ops);
171 link->handle = p_dev;
172 p_dev->instance = link;
174 link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
180 /*======================================================================
182 This deletes a driver "instance". The device is de-registered
183 with Card Services. If it has been released, all local data
184 structures are freed. Otherwise, the structures will be freed
185 when the device is released.
187 ======================================================================*/
189 static void axnet_detach(struct pcmcia_device *p_dev)
191 dev_link_t *link = dev_to_instance(p_dev);
192 struct net_device *dev = link->priv;
194 DEBUG(0, "axnet_detach(0x%p)\n", link);
197 unregister_netdev(dev);
199 if (link->state & DEV_CONFIG)
205 /*======================================================================
207 This probes for a card's hardware address by reading the PROM.
209 ======================================================================*/
211 static int get_prom(dev_link_t *link)
213 struct net_device *dev = link->priv;
214 kio_addr_t ioaddr = dev->base_addr;
217 /* This is based on drivers/net/ne.c */
219 u_char value, offset;
221 {E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/
222 {0x01, EN0_DCFG}, /* Set word-wide access. */
223 {0x00, EN0_RCNTLO}, /* Clear the count regs. */
225 {0x00, EN0_IMR}, /* Mask completion irq. */
227 {E8390_RXOFF|0x40, EN0_RXCR}, /* 0x60 Set to monitor */
228 {E8390_TXOFF, EN0_TXCR}, /* 0x02 and loopback mode. */
231 {0x00, EN0_RSARLO}, /* DMA starting at 0x0400. */
233 {E8390_RREAD+E8390_START, E8390_CMD},
236 /* Not much of a test, but the alternatives are messy */
237 if (link->conf.ConfigBase != 0x03c0)
240 axnet_reset_8390(dev);
243 for (i = 0; i < sizeof(program_seq)/sizeof(program_seq[0]); i++)
244 outb_p(program_seq[i].value, ioaddr + program_seq[i].offset);
246 for (i = 0; i < 6; i += 2) {
247 j = inw(ioaddr + AXNET_DATAPORT);
248 dev->dev_addr[i] = j & 0xff;
249 dev->dev_addr[i+1] = j >> 8;
254 /*======================================================================
256 axnet_config() is scheduled to run after a CARD_INSERTION event
257 is received, to configure the PCMCIA socket, and to make the
258 ethernet device available to the system.
260 ======================================================================*/
262 #define CS_CHECK(fn, ret) \
263 do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
265 static int try_io_port(dev_link_t *link)
268 if (link->io.NumPorts1 == 32) {
269 link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
270 if (link->io.NumPorts2 > 0) {
271 /* for master/slave multifunction cards */
272 link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
273 link->irq.Attributes =
274 IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED;
277 /* This should be two 16-port windows */
278 link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
279 link->io.Attributes2 = IO_DATA_PATH_WIDTH_16;
281 if (link->io.BasePort1 == 0) {
282 link->io.IOAddrLines = 16;
283 for (j = 0; j < 0x400; j += 0x20) {
284 link->io.BasePort1 = j ^ 0x300;
285 link->io.BasePort2 = (j ^ 0x300) + 0x10;
286 ret = pcmcia_request_io(link->handle, &link->io);
287 if (ret == CS_SUCCESS) return ret;
291 return pcmcia_request_io(link->handle, &link->io);
295 static void axnet_config(dev_link_t *link)
297 client_handle_t handle = link->handle;
298 struct net_device *dev = link->priv;
299 axnet_dev_t *info = PRIV(dev);
302 int i, j, last_ret, last_fn;
306 DEBUG(0, "axnet_config(0x%p)\n", link);
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;
321 link->state |= DEV_CONFIG;
323 /* Look up current Vcc */
324 CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(handle, &conf));
325 link->conf.Vcc = conf.Vcc;
327 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
328 tuple.Attributes = 0;
329 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
330 while (last_ret == CS_SUCCESS) {
331 cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
332 cistpl_io_t *io = &(parse.cftable_entry.io);
334 if (pcmcia_get_tuple_data(handle, &tuple) != 0 ||
335 pcmcia_parse_tuple(handle, &tuple, &parse) != 0 ||
336 cfg->index == 0 || cfg->io.nwin == 0)
339 link->conf.ConfigIndex = 0x05;
340 /* For multifunction cards, by convention, we configure the
341 network function with window 0, and serial with window 1 */
343 i = (io->win[1].len > io->win[0].len);
344 link->io.BasePort2 = io->win[1-i].base;
345 link->io.NumPorts2 = io->win[1-i].len;
347 i = link->io.NumPorts2 = 0;
349 link->io.BasePort1 = io->win[i].base;
350 link->io.NumPorts1 = io->win[i].len;
351 link->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
352 if (link->io.NumPorts1 + link->io.NumPorts2 >= 32) {
353 last_ret = try_io_port(link);
354 if (last_ret == CS_SUCCESS) break;
357 last_ret = pcmcia_get_next_tuple(handle, &tuple);
359 if (last_ret != CS_SUCCESS) {
360 cs_error(handle, RequestIO, last_ret);
364 CS_CHECK(RequestIRQ, pcmcia_request_irq(handle, &link->irq));
366 if (link->io.NumPorts2 == 8) {
367 link->conf.Attributes |= CONF_ENABLE_SPKR;
368 link->conf.Status = CCSR_AUDIO_ENA;
371 CS_CHECK(RequestConfiguration, pcmcia_request_configuration(handle, &link->conf));
372 dev->irq = link->irq.AssignedIRQ;
373 dev->base_addr = link->io.BasePort1;
375 if (!get_prom(link)) {
376 printk(KERN_NOTICE "axnet_cs: this is not an AX88190 card!\n");
377 printk(KERN_NOTICE "axnet_cs: use pcnet_cs instead.\n");
381 ei_status.name = "AX88190";
382 ei_status.word16 = 1;
383 ei_status.tx_start_page = AXNET_START_PG;
384 ei_status.rx_start_page = AXNET_START_PG + TX_PAGES;
385 ei_status.stop_page = AXNET_STOP_PG;
386 ei_status.reset_8390 = &axnet_reset_8390;
387 ei_status.get_8390_hdr = &get_8390_hdr;
388 ei_status.block_input = &block_input;
389 ei_status.block_output = &block_output;
391 if (inb(dev->base_addr + AXNET_TEST) != 0)
392 info->flags |= IS_AX88790;
394 info->flags |= IS_AX88190;
396 if (info->flags & IS_AX88790)
397 outb(0x10, dev->base_addr + AXNET_GPIO); /* select Internal PHY */
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;
404 /* Maybe PHY is in power down mode. (PPD_SET = 1)
405 Bit 2 of CCSR is active low. */
407 conf_reg_t reg = { 0, CS_WRITE, CISREG_CCSR, 0x04 };
408 pcmcia_access_configuration_register(link->handle, ®);
409 for (i = 0; i < 32; i++) {
410 j = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 1);
411 if ((j != 0) && (j != 0xffff)) break;
415 info->phy_id = (i < 32) ? i : -1;
416 link->dev = &info->node;
417 link->state &= ~DEV_CONFIG_PENDING;
418 SET_NETDEV_DEV(dev, &handle_to_dev(handle));
420 if (register_netdev(dev) != 0) {
421 printk(KERN_NOTICE "axnet_cs: register_netdev() failed\n");
426 strcpy(info->node.dev_name, dev->name);
428 printk(KERN_INFO "%s: Asix AX88%d90: io %#3lx, irq %d, hw_addr ",
429 dev->name, ((info->flags & IS_AX88790) ? 7 : 1),
430 dev->base_addr, dev->irq);
431 for (i = 0; i < 6; i++)
432 printk("%02X%s", dev->dev_addr[i], ((i<5) ? ":" : "\n"));
433 if (info->phy_id != -1) {
434 DEBUG(0, " MII transceiver at index %d, status %x.\n", info->phy_id, j);
436 printk(KERN_NOTICE " No MII transceivers found!\n");
441 cs_error(link->handle, last_fn, last_ret);
444 link->state &= ~DEV_CONFIG_PENDING;
448 /*======================================================================
450 After a card is removed, axnet_release() will unregister the net
451 device, and release the PCMCIA configuration. If the device is
452 still open, this will be postponed until it is closed.
454 ======================================================================*/
456 static void axnet_release(dev_link_t *link)
458 DEBUG(0, "axnet_release(0x%p)\n", link);
460 pcmcia_release_configuration(link->handle);
461 pcmcia_release_io(link->handle, &link->io);
462 pcmcia_release_irq(link->handle, &link->irq);
464 link->state &= ~DEV_CONFIG;
467 static int axnet_suspend(struct pcmcia_device *p_dev)
469 dev_link_t *link = dev_to_instance(p_dev);
470 struct net_device *dev = link->priv;
472 link->state |= DEV_SUSPEND;
473 if (link->state & DEV_CONFIG) {
475 netif_device_detach(dev);
476 pcmcia_release_configuration(link->handle);
482 static int axnet_resume(struct pcmcia_device *p_dev)
484 dev_link_t *link = dev_to_instance(p_dev);
485 struct net_device *dev = link->priv;
487 link->state &= ~DEV_SUSPEND;
488 if (link->state & DEV_CONFIG) {
489 pcmcia_request_configuration(link->handle, &link->conf);
491 axnet_reset_8390(dev);
492 AX88190_init(dev, 1);
493 netif_device_attach(dev);
501 /*======================================================================
503 MII interface support
505 ======================================================================*/
507 #define MDIO_SHIFT_CLK 0x01
508 #define MDIO_DATA_WRITE0 0x00
509 #define MDIO_DATA_WRITE1 0x08
510 #define MDIO_DATA_READ 0x04
511 #define MDIO_MASK 0x0f
512 #define MDIO_ENB_IN 0x02
514 static void mdio_sync(kio_addr_t addr)
517 for (bits = 0; bits < 32; bits++) {
518 outb_p(MDIO_DATA_WRITE1, addr);
519 outb_p(MDIO_DATA_WRITE1 | MDIO_SHIFT_CLK, addr);
523 static int mdio_read(kio_addr_t addr, int phy_id, int loc)
525 u_int cmd = (0xf6<<10)|(phy_id<<5)|loc;
529 for (i = 14; i >= 0; i--) {
530 int dat = (cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0;
532 outb_p(dat | MDIO_SHIFT_CLK, addr);
534 for (i = 19; i > 0; i--) {
535 outb_p(MDIO_ENB_IN, addr);
536 retval = (retval << 1) | ((inb_p(addr) & MDIO_DATA_READ) != 0);
537 outb_p(MDIO_ENB_IN | MDIO_SHIFT_CLK, addr);
539 return (retval>>1) & 0xffff;
542 static void mdio_write(kio_addr_t addr, int phy_id, int loc, int value)
544 u_int cmd = (0x05<<28)|(phy_id<<23)|(loc<<18)|(1<<17)|value;
548 for (i = 31; i >= 0; i--) {
549 int dat = (cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0;
551 outb_p(dat | MDIO_SHIFT_CLK, addr);
553 for (i = 1; i >= 0; i--) {
554 outb_p(MDIO_ENB_IN, addr);
555 outb_p(MDIO_ENB_IN | MDIO_SHIFT_CLK, addr);
559 /*====================================================================*/
561 static int axnet_open(struct net_device *dev)
563 axnet_dev_t *info = PRIV(dev);
564 dev_link_t *link = &info->link;
566 DEBUG(2, "axnet_open('%s')\n", dev->name);
573 request_irq(dev->irq, ei_irq_wrapper, SA_SHIRQ, "axnet_cs", dev);
575 info->link_status = 0x00;
576 init_timer(&info->watchdog);
577 info->watchdog.function = &ei_watchdog;
578 info->watchdog.data = (u_long)dev;
579 info->watchdog.expires = jiffies + HZ;
580 add_timer(&info->watchdog);
585 /*====================================================================*/
587 static int axnet_close(struct net_device *dev)
589 axnet_dev_t *info = PRIV(dev);
590 dev_link_t *link = &info->link;
592 DEBUG(2, "axnet_close('%s')\n", dev->name);
595 free_irq(dev->irq, dev);
598 netif_stop_queue(dev);
599 del_timer_sync(&info->watchdog);
604 /*======================================================================
606 Hard reset the card. This used to pause for the same period that
607 a 8390 reset command required, but that shouldn't be necessary.
609 ======================================================================*/
611 static void axnet_reset_8390(struct net_device *dev)
613 kio_addr_t nic_base = dev->base_addr;
616 ei_status.txing = ei_status.dmaing = 0;
618 outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, nic_base + E8390_CMD);
620 outb(inb(nic_base + AXNET_RESET), nic_base + AXNET_RESET);
622 for (i = 0; i < 100; i++) {
623 if ((inb_p(nic_base+EN0_ISR) & ENISR_RESET) != 0)
627 outb_p(ENISR_RESET, nic_base + EN0_ISR); /* Ack intr. */
630 printk(KERN_ERR "%s: axnet_reset_8390() did not complete.\n",
633 } /* axnet_reset_8390 */
635 /*====================================================================*/
637 static irqreturn_t ei_irq_wrapper(int irq, void *dev_id, struct pt_regs *regs)
639 struct net_device *dev = dev_id;
640 PRIV(dev)->stale = 0;
641 return ax_interrupt(irq, dev_id, regs);
644 static void ei_watchdog(u_long arg)
646 struct net_device *dev = (struct net_device *)(arg);
647 axnet_dev_t *info = PRIV(dev);
648 kio_addr_t nic_base = dev->base_addr;
649 kio_addr_t mii_addr = nic_base + AXNET_MII_EEP;
652 if (!netif_device_present(dev)) goto reschedule;
654 /* Check for pending interrupt with expired latency timer: with
655 this, we can limp along even if the interrupt is blocked */
656 if (info->stale++ && (inb_p(nic_base + EN0_ISR) & ENISR_ALL)) {
657 if (!info->fast_poll)
658 printk(KERN_INFO "%s: interrupt(s) dropped!\n", dev->name);
659 ei_irq_wrapper(dev->irq, dev, NULL);
660 info->fast_poll = HZ;
662 if (info->fast_poll) {
664 info->watchdog.expires = jiffies + 1;
665 add_timer(&info->watchdog);
669 if (info->phy_id < 0)
671 link = mdio_read(mii_addr, info->phy_id, 1);
672 if (!link || (link == 0xffff)) {
673 printk(KERN_INFO "%s: MII is missing!\n", dev->name);
679 if (link != info->link_status) {
680 u_short p = mdio_read(mii_addr, info->phy_id, 5);
681 printk(KERN_INFO "%s: %s link beat\n", dev->name,
682 (link) ? "found" : "lost");
684 info->duplex_flag = (p & 0x0140) ? 0x80 : 0x00;
686 printk(KERN_INFO "%s: autonegotiation complete: "
687 "%sbaseT-%cD selected\n", dev->name,
688 ((p & 0x0180) ? "100" : "10"),
689 ((p & 0x0140) ? 'F' : 'H'));
691 printk(KERN_INFO "%s: link partner did not autonegotiate\n",
693 AX88190_init(dev, 1);
695 info->link_status = link;
699 info->watchdog.expires = jiffies + HZ;
700 add_timer(&info->watchdog);
703 static void netdev_get_drvinfo(struct net_device *dev,
704 struct ethtool_drvinfo *info)
706 strcpy(info->driver, "axnet_cs");
709 static struct ethtool_ops netdev_ethtool_ops = {
710 .get_drvinfo = netdev_get_drvinfo,
713 /*====================================================================*/
715 static int axnet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
717 axnet_dev_t *info = PRIV(dev);
718 u16 *data = (u16 *)&rq->ifr_ifru;
719 kio_addr_t mii_addr = dev->base_addr + AXNET_MII_EEP;
722 data[0] = info->phy_id;
723 case SIOCGMIIREG: /* Read MII PHY register. */
724 data[3] = mdio_read(mii_addr, data[0], data[1] & 0x1f);
726 case SIOCSMIIREG: /* Write MII PHY register. */
727 if (!capable(CAP_NET_ADMIN))
729 mdio_write(mii_addr, data[0], data[1] & 0x1f, data[2]);
735 /*====================================================================*/
737 static void get_8390_hdr(struct net_device *dev,
738 struct e8390_pkt_hdr *hdr,
741 kio_addr_t nic_base = dev->base_addr;
743 outb_p(0, nic_base + EN0_RSARLO); /* On page boundary */
744 outb_p(ring_page, nic_base + EN0_RSARHI);
745 outb_p(E8390_RREAD+E8390_START, nic_base + AXNET_CMD);
747 insw(nic_base + AXNET_DATAPORT, hdr,
748 sizeof(struct e8390_pkt_hdr)>>1);
749 /* Fix for big endian systems */
750 hdr->count = le16_to_cpu(hdr->count);
754 /*====================================================================*/
756 static void block_input(struct net_device *dev, int count,
757 struct sk_buff *skb, int ring_offset)
759 kio_addr_t nic_base = dev->base_addr;
760 int xfer_count = count;
761 char *buf = skb->data;
764 if ((ei_debug > 4) && (count != 4))
765 printk(KERN_DEBUG "%s: [bi=%d]\n", dev->name, count+4);
767 outb_p(ring_offset & 0xff, nic_base + EN0_RSARLO);
768 outb_p(ring_offset >> 8, nic_base + EN0_RSARHI);
769 outb_p(E8390_RREAD+E8390_START, nic_base + AXNET_CMD);
771 insw(nic_base + AXNET_DATAPORT,buf,count>>1);
773 buf[count-1] = inb(nic_base + AXNET_DATAPORT), xfer_count++;
777 /*====================================================================*/
779 static void block_output(struct net_device *dev, int count,
780 const u_char *buf, const int start_page)
782 kio_addr_t nic_base = dev->base_addr;
786 printk(KERN_DEBUG "%s: [bo=%d]\n", dev->name, count);
789 /* Round the count up for word writes. Do we need to do this?
790 What effect will an odd byte count have on the 8390?
791 I should check someday. */
795 outb_p(0x00, nic_base + EN0_RSARLO);
796 outb_p(start_page, nic_base + EN0_RSARHI);
797 outb_p(E8390_RWRITE+E8390_START, nic_base + AXNET_CMD);
798 outsw(nic_base + AXNET_DATAPORT, buf, count>>1);
801 static struct pcmcia_device_id axnet_ids[] = {
802 PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x016c, 0x0081),
803 PCMCIA_DEVICE_MANF_CARD(0x018a, 0x0301),
804 PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0301),
805 PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0303),
806 PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0309),
807 PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1106),
808 PCMCIA_DEVICE_MANF_CARD(0x8a01, 0xc1ab),
809 PCMCIA_DEVICE_PROD_ID124("Fast Ethernet", "16-bit PC Card", "AX88190", 0xb4be14e3, 0x9a12eb6a, 0xab9be5ef),
810 PCMCIA_DEVICE_PROD_ID12("ASIX", "AX88190", 0x0959823b, 0xab9be5ef),
811 PCMCIA_DEVICE_PROD_ID12("Billionton", "LNA-100B", 0x552ab682, 0xbc3b87e1),
812 PCMCIA_DEVICE_PROD_ID12("CHEETAH ETHERCARD", "EN2228", 0x00fa7bc8, 0x00e990cc),
813 PCMCIA_DEVICE_PROD_ID12("CNet", "CNF301", 0xbc477dde, 0x78c5f40b),
814 PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega FEther PCC-TXD", 0x5261440f, 0x436768c5),
815 PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega FEtherII PCC-TXD", 0x5261440f, 0x730df72e),
816 PCMCIA_DEVICE_PROD_ID12("Dynalink", "L100C16", 0x55632fd5, 0x66bc2a90),
817 PCMCIA_DEVICE_PROD_ID12("Linksys", "EtherFast 10/100 PC Card (PCMPC100 V3)", 0x0733cc81, 0x232019a8),
818 PCMCIA_DEVICE_PROD_ID12("MELCO", "LPC3-TX", 0x481e0094, 0xf91af609),
819 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "100BASE", 0x281f1c5d, 0x7c2add04),
820 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FastEtherCard", 0x281f1c5d, 0x7ef26116),
821 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FEP501", 0x281f1c5d, 0x2e272058),
822 PCMCIA_DEVICE_PROD_ID14("Network Everywhere", "AX88190", 0x820a67b6, 0xab9be5ef),
823 /* this is not specific enough */
824 /* PCMCIA_DEVICE_MANF_CARD(0x021b, 0x0202), */
827 MODULE_DEVICE_TABLE(pcmcia, axnet_ids);
829 static struct pcmcia_driver axnet_cs_driver = {
830 .owner = THIS_MODULE,
834 .probe = axnet_attach,
835 .remove = axnet_detach,
836 .id_table = axnet_ids,
837 .suspend = axnet_suspend,
838 .resume = axnet_resume,
841 static int __init init_axnet_cs(void)
843 return pcmcia_register_driver(&axnet_cs_driver);
846 static void __exit exit_axnet_cs(void)
848 pcmcia_unregister_driver(&axnet_cs_driver);
851 module_init(init_axnet_cs);
852 module_exit(exit_axnet_cs);
854 /*====================================================================*/
856 /* 8390.c: A general NS8390 ethernet driver core for linux. */
858 Written 1992-94 by Donald Becker.
860 Copyright 1993 United States Government as represented by the
861 Director, National Security Agency.
863 This software may be used and distributed according to the terms
864 of the GNU General Public License, incorporated herein by reference.
866 The author may be reached as becker@scyld.com, or C/O
867 Scyld Computing Corporation
868 410 Severn Ave., Suite 210
871 This is the chip-specific code for many 8390-based ethernet adaptors.
872 This is not a complete driver, it must be combined with board-specific
873 code such as ne.c, wd.c, 3c503.c, etc.
875 Seeing how at least eight drivers use this code, (not counting the
876 PCMCIA ones either) it is easy to break some card by what seems like
877 a simple innocent change. Please contact me or Donald if you think
878 you have found something that needs changing. -- PG
882 Paul Gortmaker : remove set_bit lock, other cleanups.
883 Paul Gortmaker : add ei_get_8390_hdr() so we can pass skb's to
884 ei_block_input() for eth_io_copy_and_sum().
885 Paul Gortmaker : exchange static int ei_pingpong for a #define,
886 also add better Tx error handling.
887 Paul Gortmaker : rewrite Rx overrun handling as per NS specs.
888 Alexey Kuznetsov : use the 8390's six bit hash multicast filter.
889 Paul Gortmaker : tweak ANK's above multicast changes a bit.
890 Paul Gortmaker : update packet statistics for v2.1.x
891 Alan Cox : support arbitary stupid port mappings on the
892 68K Macintosh. Support >16bit I/O spaces
893 Paul Gortmaker : add kmod support for auto-loading of the 8390
894 module by all drivers that require it.
895 Alan Cox : Spinlocking work, added 'BUG_83C690'
896 Paul Gortmaker : Separate out Tx timeout code from Tx path.
899 The National Semiconductor LAN Databook, and the 3Com 3c503 databook.
903 static const char *version_8390 =
904 "8390.c:v1.10cvs 9/23/94 Donald Becker (becker@scyld.com)\n";
906 #include <linux/bitops.h>
908 #include <linux/fcntl.h>
909 #include <linux/in.h>
910 #include <linux/interrupt.h>
912 #include <linux/etherdevice.h>
916 /* These are the operational function interfaces to board-specific
918 void reset_8390(struct net_device *dev)
919 Resets the board associated with DEV, including a hardware reset of
920 the 8390. This is only called when there is a transmit timeout, and
921 it is always followed by 8390_init().
922 void block_output(struct net_device *dev, int count, const unsigned char *buf,
924 Write the COUNT bytes of BUF to the packet buffer at START_PAGE. The
925 "page" value uses the 8390's 256-byte pages.
926 void get_8390_hdr(struct net_device *dev, struct e8390_hdr *hdr, int ring_page)
927 Read the 4 byte, page aligned 8390 header. *If* there is a
928 subsequent read, it will be of the rest of the packet.
929 void block_input(struct net_device *dev, int count, struct sk_buff *skb, int ring_offset)
930 Read COUNT bytes from the packet buffer into the skb data area. Start
931 reading from RING_OFFSET, the address as the 8390 sees it. This will always
932 follow the read of the 8390 header.
934 #define ei_reset_8390 (ei_local->reset_8390)
935 #define ei_block_output (ei_local->block_output)
936 #define ei_block_input (ei_local->block_input)
937 #define ei_get_8390_hdr (ei_local->get_8390_hdr)
939 /* use 0 for production, 1 for verification, >2 for debug */
944 /* Index to functions. */
945 static void ei_tx_intr(struct net_device *dev);
946 static void ei_tx_err(struct net_device *dev);
947 static void ei_tx_timeout(struct net_device *dev);
948 static void ei_receive(struct net_device *dev);
949 static void ei_rx_overrun(struct net_device *dev);
951 /* Routines generic to NS8390-based boards. */
952 static void NS8390_trigger_send(struct net_device *dev, unsigned int length,
954 static void set_multicast_list(struct net_device *dev);
955 static void do_set_multicast_list(struct net_device *dev);
958 * SMP and the 8390 setup.
960 * The 8390 isnt exactly designed to be multithreaded on RX/TX. There is
961 * a page register that controls bank and packet buffer access. We guard
962 * this with ei_local->page_lock. Nobody should assume or set the page other
963 * than zero when the lock is not held. Lock holders must restore page 0
964 * before unlocking. Even pure readers must take the lock to protect in
967 * To make life difficult the chip can also be very slow. We therefore can't
968 * just use spinlocks. For the longer lockups we disable the irq the device
969 * sits on and hold the lock. We must hold the lock because there is a dual
970 * processor case other than interrupts (get stats/set multicast list in
971 * parallel with each other and transmit).
973 * Note: in theory we can just disable the irq on the card _but_ there is
974 * a latency on SMP irq delivery. So we can easily go "disable irq" "sync irqs"
975 * enter lock, take the queued irq. So we waddle instead of flying.
977 * Finally by special arrangement for the purpose of being generally
978 * annoying the transmit function is called bh atomic. That places
979 * restrictions on the user context callers as disable_irq won't save
984 * ax_open - Open/initialize the board.
985 * @dev: network device to initialize
987 * This routine goes all-out, setting everything
988 * up anew at each open, even though many of these registers should only
989 * need to be set once at boot.
991 static int ax_open(struct net_device *dev)
994 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
996 #ifdef HAVE_TX_TIMEOUT
997 /* The card I/O part of the driver (e.g. 3c503) can hook a Tx timeout
998 wrapper that does e.g. media check & then calls ei_tx_timeout. */
999 if (dev->tx_timeout == NULL)
1000 dev->tx_timeout = ei_tx_timeout;
1001 if (dev->watchdog_timeo <= 0)
1002 dev->watchdog_timeo = TX_TIMEOUT;
1006 * Grab the page lock so we own the register set, then call
1007 * the init function.
1010 spin_lock_irqsave(&ei_local->page_lock, flags);
1011 AX88190_init(dev, 1);
1012 /* Set the flag before we drop the lock, That way the IRQ arrives
1013 after its set and we get no silly warnings */
1014 netif_start_queue(dev);
1015 spin_unlock_irqrestore(&ei_local->page_lock, flags);
1016 ei_local->irqlock = 0;
1020 #define dev_lock(dev) (((struct ei_device *)netdev_priv(dev))->page_lock)
1023 * ax_close - shut down network device
1024 * @dev: network device to close
1026 * Opposite of ax_open(). Only used when "ifconfig <devname> down" is done.
1028 int ax_close(struct net_device *dev)
1030 unsigned long flags;
1033 * Hold the page lock during close
1036 spin_lock_irqsave(&dev_lock(dev), flags);
1037 AX88190_init(dev, 0);
1038 spin_unlock_irqrestore(&dev_lock(dev), flags);
1039 netif_stop_queue(dev);
1044 * ei_tx_timeout - handle transmit time out condition
1045 * @dev: network device which has apparently fallen asleep
1047 * Called by kernel when device never acknowledges a transmit has
1048 * completed (or failed) - i.e. never posted a Tx related interrupt.
1051 void ei_tx_timeout(struct net_device *dev)
1053 long e8390_base = dev->base_addr;
1054 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1055 int txsr, isr, tickssofar = jiffies - dev->trans_start;
1056 unsigned long flags;
1058 ei_local->stat.tx_errors++;
1060 spin_lock_irqsave(&ei_local->page_lock, flags);
1061 txsr = inb(e8390_base+EN0_TSR);
1062 isr = inb(e8390_base+EN0_ISR);
1063 spin_unlock_irqrestore(&ei_local->page_lock, flags);
1065 printk(KERN_DEBUG "%s: Tx timed out, %s TSR=%#2x, ISR=%#2x, t=%d.\n",
1066 dev->name, (txsr & ENTSR_ABT) ? "excess collisions." :
1067 (isr) ? "lost interrupt?" : "cable problem?", txsr, isr, tickssofar);
1069 if (!isr && !ei_local->stat.tx_packets)
1071 /* The 8390 probably hasn't gotten on the cable yet. */
1072 ei_local->interface_num ^= 1; /* Try a different xcvr. */
1075 /* Ugly but a reset can be slow, yet must be protected */
1077 disable_irq_nosync(dev->irq);
1078 spin_lock(&ei_local->page_lock);
1080 /* Try to restart the card. Perhaps the user has fixed something. */
1082 AX88190_init(dev, 1);
1084 spin_unlock(&ei_local->page_lock);
1085 enable_irq(dev->irq);
1086 netif_wake_queue(dev);
1090 * ei_start_xmit - begin packet transmission
1091 * @skb: packet to be sent
1092 * @dev: network device to which packet is sent
1094 * Sends a packet to an 8390 network device.
1097 static int ei_start_xmit(struct sk_buff *skb, struct net_device *dev)
1099 long e8390_base = dev->base_addr;
1100 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1101 int length, send_length, output_page;
1102 unsigned long flags;
1103 u8 packet[ETH_ZLEN];
1105 netif_stop_queue(dev);
1109 /* Mask interrupts from the ethercard.
1110 SMP: We have to grab the lock here otherwise the IRQ handler
1111 on another CPU can flip window and race the IRQ mask set. We end
1112 up trashing the mcast filter not disabling irqs if we don't lock */
1114 spin_lock_irqsave(&ei_local->page_lock, flags);
1115 outb_p(0x00, e8390_base + EN0_IMR);
1116 spin_unlock_irqrestore(&ei_local->page_lock, flags);
1119 * Slow phase with lock held.
1122 disable_irq_nosync(dev->irq);
1124 spin_lock(&ei_local->page_lock);
1126 ei_local->irqlock = 1;
1128 send_length = ETH_ZLEN < length ? length : ETH_ZLEN;
1131 * We have two Tx slots available for use. Find the first free
1132 * slot, and then perform some sanity checks. With two Tx bufs,
1133 * you get very close to transmitting back-to-back packets. With
1134 * only one Tx buf, the transmitter sits idle while you reload the
1135 * card, leaving a substantial gap between each transmitted packet.
1138 if (ei_local->tx1 == 0)
1140 output_page = ei_local->tx_start_page;
1141 ei_local->tx1 = send_length;
1142 if (ei_debug && ei_local->tx2 > 0)
1143 printk(KERN_DEBUG "%s: idle transmitter tx2=%d, lasttx=%d, txing=%d.\n",
1144 dev->name, ei_local->tx2, ei_local->lasttx, ei_local->txing);
1146 else if (ei_local->tx2 == 0)
1148 output_page = ei_local->tx_start_page + TX_PAGES/2;
1149 ei_local->tx2 = send_length;
1150 if (ei_debug && ei_local->tx1 > 0)
1151 printk(KERN_DEBUG "%s: idle transmitter, tx1=%d, lasttx=%d, txing=%d.\n",
1152 dev->name, ei_local->tx1, ei_local->lasttx, ei_local->txing);
1155 { /* We should never get here. */
1157 printk(KERN_DEBUG "%s: No Tx buffers free! tx1=%d tx2=%d last=%d\n",
1158 dev->name, ei_local->tx1, ei_local->tx2, ei_local->lasttx);
1159 ei_local->irqlock = 0;
1160 netif_stop_queue(dev);
1161 outb_p(ENISR_ALL, e8390_base + EN0_IMR);
1162 spin_unlock(&ei_local->page_lock);
1163 enable_irq(dev->irq);
1164 ei_local->stat.tx_errors++;
1169 * Okay, now upload the packet and trigger a send if the transmitter
1170 * isn't already sending. If it is busy, the interrupt handler will
1171 * trigger the send later, upon receiving a Tx done interrupt.
1174 if (length == skb->len)
1175 ei_block_output(dev, length, skb->data, output_page);
1177 memset(packet, 0, ETH_ZLEN);
1178 memcpy(packet, skb->data, skb->len);
1179 ei_block_output(dev, length, packet, output_page);
1182 if (! ei_local->txing)
1184 ei_local->txing = 1;
1185 NS8390_trigger_send(dev, send_length, output_page);
1186 dev->trans_start = jiffies;
1187 if (output_page == ei_local->tx_start_page)
1190 ei_local->lasttx = -1;
1195 ei_local->lasttx = -2;
1198 else ei_local->txqueue++;
1200 if (ei_local->tx1 && ei_local->tx2)
1201 netif_stop_queue(dev);
1203 netif_start_queue(dev);
1205 /* Turn 8390 interrupts back on. */
1206 ei_local->irqlock = 0;
1207 outb_p(ENISR_ALL, e8390_base + EN0_IMR);
1209 spin_unlock(&ei_local->page_lock);
1210 enable_irq(dev->irq);
1212 dev_kfree_skb (skb);
1213 ei_local->stat.tx_bytes += send_length;
1219 * ax_interrupt - handle the interrupts from an 8390
1220 * @irq: interrupt number
1221 * @dev_id: a pointer to the net_device
1224 * Handle the ether interface interrupts. We pull packets from
1225 * the 8390 via the card specific functions and fire them at the networking
1226 * stack. We also handle transmit completions and wake the transmit path if
1227 * necessary. We also update the counters and do other housekeeping as
1231 static irqreturn_t ax_interrupt(int irq, void *dev_id, struct pt_regs * regs)
1233 struct net_device *dev = dev_id;
1235 int interrupts, nr_serviced = 0, i;
1236 struct ei_device *ei_local;
1241 printk ("net_interrupt(): irq %d for unknown device.\n", irq);
1245 e8390_base = dev->base_addr;
1246 ei_local = (struct ei_device *) netdev_priv(dev);
1249 * Protect the irq test too.
1252 spin_lock(&ei_local->page_lock);
1254 if (ei_local->irqlock)
1256 #if 1 /* This might just be an interrupt for a PCI device sharing this line */
1257 /* The "irqlock" check is only for testing. */
1258 printk(ei_local->irqlock
1259 ? "%s: Interrupted while interrupts are masked! isr=%#2x imr=%#2x.\n"
1260 : "%s: Reentering the interrupt handler! isr=%#2x imr=%#2x.\n",
1261 dev->name, inb_p(e8390_base + EN0_ISR),
1262 inb_p(e8390_base + EN0_IMR));
1264 spin_unlock(&ei_local->page_lock);
1269 printk(KERN_DEBUG "%s: interrupt(isr=%#2.2x).\n", dev->name,
1270 inb_p(e8390_base + EN0_ISR));
1272 outb_p(0x00, e8390_base + EN0_ISR);
1273 ei_local->irqlock = 1;
1275 /* !!Assumption!! -- we stay in page 0. Don't break this. */
1276 while ((interrupts = inb_p(e8390_base + EN0_ISR)) != 0
1277 && ++nr_serviced < MAX_SERVICE)
1279 if (!netif_running(dev) || (interrupts == 0xff)) {
1281 printk(KERN_WARNING "%s: interrupt from stopped card\n", dev->name);
1282 outb_p(interrupts, e8390_base + EN0_ISR);
1288 /* AX88190 bug fix. */
1289 outb_p(interrupts, e8390_base + EN0_ISR);
1290 for (i = 0; i < 10; i++) {
1291 if (!(inb(e8390_base + EN0_ISR) & interrupts))
1293 outb_p(0, e8390_base + EN0_ISR);
1294 outb_p(interrupts, e8390_base + EN0_ISR);
1296 if (interrupts & ENISR_OVER)
1298 else if (interrupts & (ENISR_RX+ENISR_RX_ERR))
1300 /* Got a good (?) packet. */
1303 /* Push the next to-transmit packet through. */
1304 if (interrupts & ENISR_TX)
1306 else if (interrupts & ENISR_TX_ERR)
1309 if (interrupts & ENISR_COUNTERS)
1311 ei_local->stat.rx_frame_errors += inb_p(e8390_base + EN0_COUNTER0);
1312 ei_local->stat.rx_crc_errors += inb_p(e8390_base + EN0_COUNTER1);
1313 ei_local->stat.rx_missed_errors+= inb_p(e8390_base + EN0_COUNTER2);
1317 if (interrupts && ei_debug)
1320 if (nr_serviced >= MAX_SERVICE)
1322 /* 0xFF is valid for a card removal */
1323 if(interrupts!=0xFF)
1324 printk(KERN_WARNING "%s: Too much work at interrupt, status %#2.2x\n",
1325 dev->name, interrupts);
1326 outb_p(ENISR_ALL, e8390_base + EN0_ISR); /* Ack. most intrs. */
1328 printk(KERN_WARNING "%s: unknown interrupt %#2x\n", dev->name, interrupts);
1329 outb_p(0xff, e8390_base + EN0_ISR); /* Ack. all intrs. */
1333 /* Turn 8390 interrupts back on. */
1334 ei_local->irqlock = 0;
1335 outb_p(ENISR_ALL, e8390_base + EN0_IMR);
1337 spin_unlock(&ei_local->page_lock);
1338 return IRQ_RETVAL(handled);
1342 * ei_tx_err - handle transmitter error
1343 * @dev: network device which threw the exception
1345 * A transmitter error has happened. Most likely excess collisions (which
1346 * is a fairly normal condition). If the error is one where the Tx will
1347 * have been aborted, we try and send another one right away, instead of
1348 * letting the failed packet sit and collect dust in the Tx buffer. This
1349 * is a much better solution as it avoids kernel based Tx timeouts, and
1350 * an unnecessary card reset.
1352 * Called with lock held.
1355 static void ei_tx_err(struct net_device *dev)
1357 long e8390_base = dev->base_addr;
1358 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1359 unsigned char txsr = inb_p(e8390_base+EN0_TSR);
1360 unsigned char tx_was_aborted = txsr & (ENTSR_ABT+ENTSR_FU);
1362 #ifdef VERBOSE_ERROR_DUMP
1363 printk(KERN_DEBUG "%s: transmitter error (%#2x): ", dev->name, txsr);
1364 if (txsr & ENTSR_ABT)
1365 printk("excess-collisions ");
1366 if (txsr & ENTSR_ND)
1367 printk("non-deferral ");
1368 if (txsr & ENTSR_CRS)
1369 printk("lost-carrier ");
1370 if (txsr & ENTSR_FU)
1371 printk("FIFO-underrun ");
1372 if (txsr & ENTSR_CDH)
1373 printk("lost-heartbeat ");
1381 ei_local->stat.tx_errors++;
1382 if (txsr & ENTSR_CRS) ei_local->stat.tx_carrier_errors++;
1383 if (txsr & ENTSR_CDH) ei_local->stat.tx_heartbeat_errors++;
1384 if (txsr & ENTSR_OWC) ei_local->stat.tx_window_errors++;
1389 * ei_tx_intr - transmit interrupt handler
1390 * @dev: network device for which tx intr is handled
1392 * We have finished a transmit: check for errors and then trigger the next
1393 * packet to be sent. Called with lock held.
1396 static void ei_tx_intr(struct net_device *dev)
1398 long e8390_base = dev->base_addr;
1399 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1400 int status = inb(e8390_base + EN0_TSR);
1403 * There are two Tx buffers, see which one finished, and trigger
1404 * the send of another one if it exists.
1406 ei_local->txqueue--;
1408 if (ei_local->tx1 < 0)
1410 if (ei_local->lasttx != 1 && ei_local->lasttx != -1)
1411 printk(KERN_ERR "%s: bogus last_tx_buffer %d, tx1=%d.\n",
1412 ei_local->name, ei_local->lasttx, ei_local->tx1);
1414 if (ei_local->tx2 > 0)
1416 ei_local->txing = 1;
1417 NS8390_trigger_send(dev, ei_local->tx2, ei_local->tx_start_page + 6);
1418 dev->trans_start = jiffies;
1420 ei_local->lasttx = 2;
1422 else ei_local->lasttx = 20, ei_local->txing = 0;
1424 else if (ei_local->tx2 < 0)
1426 if (ei_local->lasttx != 2 && ei_local->lasttx != -2)
1427 printk("%s: bogus last_tx_buffer %d, tx2=%d.\n",
1428 ei_local->name, ei_local->lasttx, ei_local->tx2);
1430 if (ei_local->tx1 > 0)
1432 ei_local->txing = 1;
1433 NS8390_trigger_send(dev, ei_local->tx1, ei_local->tx_start_page);
1434 dev->trans_start = jiffies;
1436 ei_local->lasttx = 1;
1439 ei_local->lasttx = 10, ei_local->txing = 0;
1441 // else printk(KERN_WARNING "%s: unexpected TX-done interrupt, lasttx=%d.\n",
1442 // dev->name, ei_local->lasttx);
1444 /* Minimize Tx latency: update the statistics after we restart TXing. */
1445 if (status & ENTSR_COL)
1446 ei_local->stat.collisions++;
1447 if (status & ENTSR_PTX)
1448 ei_local->stat.tx_packets++;
1451 ei_local->stat.tx_errors++;
1452 if (status & ENTSR_ABT)
1454 ei_local->stat.tx_aborted_errors++;
1455 ei_local->stat.collisions += 16;
1457 if (status & ENTSR_CRS)
1458 ei_local->stat.tx_carrier_errors++;
1459 if (status & ENTSR_FU)
1460 ei_local->stat.tx_fifo_errors++;
1461 if (status & ENTSR_CDH)
1462 ei_local->stat.tx_heartbeat_errors++;
1463 if (status & ENTSR_OWC)
1464 ei_local->stat.tx_window_errors++;
1466 netif_wake_queue(dev);
1470 * ei_receive - receive some packets
1471 * @dev: network device with which receive will be run
1473 * We have a good packet(s), get it/them out of the buffers.
1474 * Called with lock held.
1477 static void ei_receive(struct net_device *dev)
1479 long e8390_base = dev->base_addr;
1480 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1481 unsigned char rxing_page, this_frame, next_frame;
1482 unsigned short current_offset;
1483 int rx_pkt_count = 0;
1484 struct e8390_pkt_hdr rx_frame;
1486 while (++rx_pkt_count < 10)
1488 int pkt_len, pkt_stat;
1490 /* Get the rx page (incoming packet pointer). */
1491 rxing_page = inb_p(e8390_base + EN1_CURPAG -1);
1493 /* Remove one frame from the ring. Boundary is always a page behind. */
1494 this_frame = inb_p(e8390_base + EN0_BOUNDARY) + 1;
1495 if (this_frame >= ei_local->stop_page)
1496 this_frame = ei_local->rx_start_page;
1498 /* Someday we'll omit the previous, iff we never get this message.
1499 (There is at least one clone claimed to have a problem.)
1501 Keep quiet if it looks like a card removal. One problem here
1502 is that some clones crash in roughly the same way.
1504 if (ei_debug > 0 && this_frame != ei_local->current_page && (this_frame!=0x0 || rxing_page!=0xFF))
1505 printk(KERN_ERR "%s: mismatched read page pointers %2x vs %2x.\n",
1506 dev->name, this_frame, ei_local->current_page);
1508 if (this_frame == rxing_page) /* Read all the frames? */
1509 break; /* Done for now */
1511 current_offset = this_frame << 8;
1512 ei_get_8390_hdr(dev, &rx_frame, this_frame);
1514 pkt_len = rx_frame.count - sizeof(struct e8390_pkt_hdr);
1515 pkt_stat = rx_frame.status;
1517 next_frame = this_frame + 1 + ((pkt_len+4)>>8);
1519 if (pkt_len < 60 || pkt_len > 1518)
1522 printk(KERN_DEBUG "%s: bogus packet size: %d, status=%#2x nxpg=%#2x.\n",
1523 dev->name, rx_frame.count, rx_frame.status,
1525 ei_local->stat.rx_errors++;
1526 ei_local->stat.rx_length_errors++;
1528 else if ((pkt_stat & 0x0F) == ENRSR_RXOK)
1530 struct sk_buff *skb;
1532 skb = dev_alloc_skb(pkt_len+2);
1536 printk(KERN_DEBUG "%s: Couldn't allocate a sk_buff of size %d.\n",
1537 dev->name, pkt_len);
1538 ei_local->stat.rx_dropped++;
1543 skb_reserve(skb,2); /* IP headers on 16 byte boundaries */
1545 skb_put(skb, pkt_len); /* Make room */
1546 ei_block_input(dev, pkt_len, skb, current_offset + sizeof(rx_frame));
1547 skb->protocol=eth_type_trans(skb,dev);
1549 dev->last_rx = jiffies;
1550 ei_local->stat.rx_packets++;
1551 ei_local->stat.rx_bytes += pkt_len;
1552 if (pkt_stat & ENRSR_PHY)
1553 ei_local->stat.multicast++;
1559 printk(KERN_DEBUG "%s: bogus packet: status=%#2x nxpg=%#2x size=%d\n",
1560 dev->name, rx_frame.status, rx_frame.next,
1562 ei_local->stat.rx_errors++;
1563 /* NB: The NIC counts CRC, frame and missed errors. */
1564 if (pkt_stat & ENRSR_FO)
1565 ei_local->stat.rx_fifo_errors++;
1567 next_frame = rx_frame.next;
1569 /* This _should_ never happen: it's here for avoiding bad clones. */
1570 if (next_frame >= ei_local->stop_page) {
1571 printk("%s: next frame inconsistency, %#2x\n", dev->name,
1573 next_frame = ei_local->rx_start_page;
1575 ei_local->current_page = next_frame;
1576 outb_p(next_frame-1, e8390_base+EN0_BOUNDARY);
1583 * ei_rx_overrun - handle receiver overrun
1584 * @dev: network device which threw exception
1586 * We have a receiver overrun: we have to kick the 8390 to get it started
1587 * again. Problem is that you have to kick it exactly as NS prescribes in
1588 * the updated datasheets, or "the NIC may act in an unpredictable manner."
1589 * This includes causing "the NIC to defer indefinitely when it is stopped
1590 * on a busy network." Ugh.
1591 * Called with lock held. Don't call this with the interrupts off or your
1592 * computer will hate you - it takes 10ms or so.
1595 static void ei_rx_overrun(struct net_device *dev)
1597 axnet_dev_t *info = (axnet_dev_t *)dev;
1598 long e8390_base = dev->base_addr;
1599 unsigned char was_txing, must_resend = 0;
1600 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1603 * Record whether a Tx was in progress and then issue the
1606 was_txing = inb_p(e8390_base+E8390_CMD) & E8390_TRANS;
1607 outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD);
1610 printk(KERN_DEBUG "%s: Receiver overrun.\n", dev->name);
1611 ei_local->stat.rx_over_errors++;
1614 * Wait a full Tx time (1.2ms) + some guard time, NS says 1.6ms total.
1615 * Early datasheets said to poll the reset bit, but now they say that
1616 * it "is not a reliable indicator and subsequently should be ignored."
1617 * We wait at least 10ms.
1623 * Reset RBCR[01] back to zero as per magic incantation.
1625 outb_p(0x00, e8390_base+EN0_RCNTLO);
1626 outb_p(0x00, e8390_base+EN0_RCNTHI);
1629 * See if any Tx was interrupted or not. According to NS, this
1630 * step is vital, and skipping it will cause no end of havoc.
1635 unsigned char tx_completed = inb_p(e8390_base+EN0_ISR) & (ENISR_TX+ENISR_TX_ERR);
1641 * Have to enter loopback mode and then restart the NIC before
1642 * you are allowed to slurp packets up off the ring.
1644 outb_p(E8390_TXOFF, e8390_base + EN0_TXCR);
1645 outb_p(E8390_NODMA + E8390_PAGE0 + E8390_START, e8390_base + E8390_CMD);
1648 * Clear the Rx ring of all the debris, and ack the interrupt.
1653 * Leave loopback mode, and resend any packet that got stopped.
1655 outb_p(E8390_TXCONFIG | info->duplex_flag, e8390_base + EN0_TXCR);
1657 outb_p(E8390_NODMA + E8390_PAGE0 + E8390_START + E8390_TRANS, e8390_base + E8390_CMD);
1661 * Collect the stats. This is called unlocked and from several contexts.
1664 static struct net_device_stats *get_stats(struct net_device *dev)
1666 long ioaddr = dev->base_addr;
1667 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1668 unsigned long flags;
1670 /* If the card is stopped, just return the present stats. */
1671 if (!netif_running(dev))
1672 return &ei_local->stat;
1674 spin_lock_irqsave(&ei_local->page_lock,flags);
1675 /* Read the counter registers, assuming we are in page 0. */
1676 ei_local->stat.rx_frame_errors += inb_p(ioaddr + EN0_COUNTER0);
1677 ei_local->stat.rx_crc_errors += inb_p(ioaddr + EN0_COUNTER1);
1678 ei_local->stat.rx_missed_errors+= inb_p(ioaddr + EN0_COUNTER2);
1679 spin_unlock_irqrestore(&ei_local->page_lock, flags);
1681 return &ei_local->stat;
1685 * do_set_multicast_list - set/clear multicast filter
1686 * @dev: net device for which multicast filter is adjusted
1688 * Set or clear the multicast filter for this adaptor. May be called
1689 * from a BH in 2.1.x. Must be called with lock held.
1692 static void do_set_multicast_list(struct net_device *dev)
1694 long e8390_base = dev->base_addr;
1696 if(dev->flags&IFF_PROMISC)
1697 outb_p(E8390_RXCONFIG | 0x58, e8390_base + EN0_RXCR);
1698 else if(dev->flags&IFF_ALLMULTI || dev->mc_list)
1699 outb_p(E8390_RXCONFIG | 0x48, e8390_base + EN0_RXCR);
1701 outb_p(E8390_RXCONFIG | 0x40, e8390_base + EN0_RXCR);
1705 * Called without lock held. This is invoked from user context and may
1706 * be parallel to just about everything else. Its also fairly quick and
1707 * not called too often. Must protect against both bh and irq users
1710 static void set_multicast_list(struct net_device *dev)
1712 unsigned long flags;
1714 spin_lock_irqsave(&dev_lock(dev), flags);
1715 do_set_multicast_list(dev);
1716 spin_unlock_irqrestore(&dev_lock(dev), flags);
1720 * axdev_setup - init rest of 8390 device struct
1721 * @dev: network device structure to init
1723 * Initialize the rest of the 8390 device structure. Do NOT __init
1724 * this, as it is used by 8390 based modular drivers too.
1727 static void axdev_setup(struct net_device *dev)
1729 struct ei_device *ei_local;
1731 printk(version_8390);
1733 SET_MODULE_OWNER(dev);
1736 ei_local = (struct ei_device *)netdev_priv(dev);
1737 spin_lock_init(&ei_local->page_lock);
1739 dev->hard_start_xmit = &ei_start_xmit;
1740 dev->get_stats = get_stats;
1741 dev->set_multicast_list = &set_multicast_list;
1746 /* This page of functions should be 8390 generic */
1747 /* Follow National Semi's recommendations for initializing the "NIC". */
1750 * AX88190_init - initialize 8390 hardware
1751 * @dev: network device to initialize
1752 * @startp: boolean. non-zero value to initiate chip processing
1754 * Must be called with lock held.
1757 static void AX88190_init(struct net_device *dev, int startp)
1759 axnet_dev_t *info = PRIV(dev);
1760 long e8390_base = dev->base_addr;
1761 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1763 int endcfg = ei_local->word16 ? (0x48 | ENDCFG_WTS) : 0x48;
1765 if(sizeof(struct e8390_pkt_hdr)!=4)
1766 panic("8390.c: header struct mispacked\n");
1767 /* Follow National Semi's recommendations for initing the DP83902. */
1768 outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD); /* 0x21 */
1769 outb_p(endcfg, e8390_base + EN0_DCFG); /* 0x48 or 0x49 */
1770 /* Clear the remote byte count registers. */
1771 outb_p(0x00, e8390_base + EN0_RCNTLO);
1772 outb_p(0x00, e8390_base + EN0_RCNTHI);
1773 /* Set to monitor and loopback mode -- this is vital!. */
1774 outb_p(E8390_RXOFF|0x40, e8390_base + EN0_RXCR); /* 0x60 */
1775 outb_p(E8390_TXOFF, e8390_base + EN0_TXCR); /* 0x02 */
1776 /* Set the transmit page and receive ring. */
1777 outb_p(ei_local->tx_start_page, e8390_base + EN0_TPSR);
1778 ei_local->tx1 = ei_local->tx2 = 0;
1779 outb_p(ei_local->rx_start_page, e8390_base + EN0_STARTPG);
1780 outb_p(ei_local->stop_page-1, e8390_base + EN0_BOUNDARY); /* 3c503 says 0x3f,NS0x26*/
1781 ei_local->current_page = ei_local->rx_start_page; /* assert boundary+1 */
1782 outb_p(ei_local->stop_page, e8390_base + EN0_STOPPG);
1783 /* Clear the pending interrupts and mask. */
1784 outb_p(0xFF, e8390_base + EN0_ISR);
1785 outb_p(0x00, e8390_base + EN0_IMR);
1787 /* Copy the station address into the DS8390 registers. */
1789 outb_p(E8390_NODMA + E8390_PAGE1 + E8390_STOP, e8390_base+E8390_CMD); /* 0x61 */
1790 for(i = 0; i < 6; i++)
1792 outb_p(dev->dev_addr[i], e8390_base + EN1_PHYS_SHIFT(i));
1793 if(inb_p(e8390_base + EN1_PHYS_SHIFT(i))!=dev->dev_addr[i])
1794 printk(KERN_ERR "Hw. address read/write mismap %d\n",i);
1797 * Initialize the multicast list to accept-all. If we enable multicast
1798 * the higher levels can do the filtering.
1800 for (i = 0; i < 8; i++)
1801 outb_p(0xff, e8390_base + EN1_MULT + i);
1803 outb_p(ei_local->rx_start_page, e8390_base + EN1_CURPAG);
1804 outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD);
1806 netif_start_queue(dev);
1807 ei_local->tx1 = ei_local->tx2 = 0;
1808 ei_local->txing = 0;
1812 outb_p(0xff, e8390_base + EN0_ISR);
1813 outb_p(ENISR_ALL, e8390_base + EN0_IMR);
1814 outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base+E8390_CMD);
1815 outb_p(E8390_TXCONFIG | info->duplex_flag,
1816 e8390_base + EN0_TXCR); /* xmit on. */
1817 /* 3c503 TechMan says rxconfig only after the NIC is started. */
1818 outb_p(E8390_RXCONFIG | 0x40, e8390_base + EN0_RXCR); /* rx on, */
1819 do_set_multicast_list(dev); /* (re)load the mcast table */
1823 /* Trigger a transmit start, assuming the length is valid.
1824 Always called with the page lock held */
1826 static void NS8390_trigger_send(struct net_device *dev, unsigned int length,
1829 long e8390_base = dev->base_addr;
1830 struct ei_device *ei_local __attribute((unused)) = (struct ei_device *) netdev_priv(dev);
1832 if (inb_p(e8390_base) & E8390_TRANS)
1834 printk(KERN_WARNING "%s: trigger_send() called with the transmitter busy.\n",
1838 outb_p(length & 0xff, e8390_base + EN0_TCNTLO);
1839 outb_p(length >> 8, e8390_base + EN0_TCNTHI);
1840 outb_p(start_page, e8390_base + EN0_TPSR);
1841 outb_p(E8390_NODMA+E8390_TRANS+E8390_START, e8390_base+E8390_CMD);