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>
38 #include <linux/crc32.h>
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>
49 #include <asm/system.h>
50 #include <asm/byteorder.h>
51 #include <asm/uaccess.h>
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 */
60 #define AXNET_START_PG 0x40 /* First page of TX buffer */
61 #define AXNET_STOP_PG 0x80 /* Last page +1 of RX ring */
63 #define AXNET_RDC_TIMEOUT 0x02 /* Max wait in jiffies for Tx RDC */
65 #define IS_AX88190 0x0001
66 #define IS_AX88790 0x0002
68 /*====================================================================*/
70 /* Module parameters */
72 MODULE_AUTHOR("David Hinds <dahinds@users.sourceforge.net>");
73 MODULE_DESCRIPTION("Asix AX88190 PCMCIA ethernet driver");
74 MODULE_LICENSE("GPL");
77 #define INT_MODULE_PARM(n, v) static int n = v; module_param(n, int, 0)
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)";
84 #define DEBUG(n, args...)
87 /*====================================================================*/
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);
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);
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);
109 static void axnet_detach(struct pcmcia_device *p_dev);
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);
117 /*====================================================================*/
119 typedef struct axnet_dev_t {
120 struct pcmcia_device *p_dev;
123 struct timer_list watchdog;
124 int stale, fast_poll;
131 static inline axnet_dev_t *PRIV(struct net_device *dev)
133 void *p = (char *)netdev_priv(dev) + sizeof(struct ei_device);
137 /*======================================================================
139 axnet_attach() creates an "instance" of the driver, allocating
140 local data structures for one device. The device is registered
143 ======================================================================*/
145 static int axnet_attach(struct pcmcia_device *link)
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->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
177 /*======================================================================
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.
184 ======================================================================*/
186 static void axnet_detach(struct pcmcia_device *link)
188 struct net_device *dev = link->priv;
190 DEBUG(0, "axnet_detach(0x%p)\n", link);
193 unregister_netdev(dev);
195 if (link->state & DEV_CONFIG)
201 /*======================================================================
203 This probes for a card's hardware address by reading the PROM.
205 ======================================================================*/
207 static int get_prom(struct pcmcia_device *link)
209 struct net_device *dev = link->priv;
210 kio_addr_t ioaddr = dev->base_addr;
213 /* This is based on drivers/net/ne.c */
215 u_char value, offset;
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. */
221 {0x00, EN0_IMR}, /* Mask completion irq. */
223 {E8390_RXOFF|0x40, EN0_RXCR}, /* 0x60 Set to monitor */
224 {E8390_TXOFF, EN0_TXCR}, /* 0x02 and loopback mode. */
227 {0x00, EN0_RSARLO}, /* DMA starting at 0x0400. */
229 {E8390_RREAD+E8390_START, E8390_CMD},
232 /* Not much of a test, but the alternatives are messy */
233 if (link->conf.ConfigBase != 0x03c0)
236 axnet_reset_8390(dev);
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);
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;
250 /*======================================================================
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.
256 ======================================================================*/
258 #define CS_CHECK(fn, ret) \
259 do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
261 static int try_io_port(struct pcmcia_device *link)
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;
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;
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;
287 return pcmcia_request_io(link, &link->io);
291 static void axnet_config(struct pcmcia_device *link)
293 struct net_device *dev = link->priv;
294 axnet_dev_t *info = PRIV(dev);
297 int i, j, last_ret, last_fn;
300 DEBUG(0, "axnet_config(0x%p)\n", link);
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;
315 link->state |= DEV_CONFIG;
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);
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)
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 */
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;
337 i = link->io.NumPorts2 = 0;
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;
347 last_ret = pcmcia_get_next_tuple(link, &tuple);
349 if (last_ret != CS_SUCCESS) {
350 cs_error(link, RequestIO, last_ret);
354 CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
356 if (link->io.NumPorts2 == 8) {
357 link->conf.Attributes |= CONF_ENABLE_SPKR;
358 link->conf.Status = CCSR_AUDIO_ENA;
361 CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
362 dev->irq = link->irq.AssignedIRQ;
363 dev->base_addr = link->io.BasePort1;
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");
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;
381 if (inb(dev->base_addr + AXNET_TEST) != 0)
382 info->flags |= IS_AX88790;
384 info->flags |= IS_AX88190;
386 if (info->flags & IS_AX88790)
387 outb(0x10, dev->base_addr + AXNET_GPIO); /* select Internal PHY */
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;
394 /* Maybe PHY is in power down mode. (PPD_SET = 1)
395 Bit 2 of CCSR is active low. */
397 conf_reg_t reg = { 0, CS_WRITE, CISREG_CCSR, 0x04 };
398 pcmcia_access_configuration_register(link, ®);
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;
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));
410 if (register_netdev(dev) != 0) {
411 printk(KERN_NOTICE "axnet_cs: register_netdev() failed\n");
412 link->dev_node = NULL;
416 strcpy(info->node.dev_name, dev->name);
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);
426 printk(KERN_NOTICE " No MII transceivers found!\n");
431 cs_error(link, last_fn, last_ret);
434 link->state &= ~DEV_CONFIG_PENDING;
438 /*======================================================================
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.
444 ======================================================================*/
446 static void axnet_release(struct pcmcia_device *link)
448 pcmcia_disable_device(link);
451 static int axnet_suspend(struct pcmcia_device *link)
453 struct net_device *dev = link->priv;
455 if ((link->state & DEV_CONFIG) && (link->open))
456 netif_device_detach(dev);
461 static int axnet_resume(struct pcmcia_device *link)
463 struct net_device *dev = link->priv;
465 if ((link->state & DEV_CONFIG) && (link->open)) {
466 axnet_reset_8390(dev);
467 AX88190_init(dev, 1);
468 netif_device_attach(dev);
475 /*======================================================================
477 MII interface support
479 ======================================================================*/
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
488 static void mdio_sync(kio_addr_t addr)
491 for (bits = 0; bits < 32; bits++) {
492 outb_p(MDIO_DATA_WRITE1, addr);
493 outb_p(MDIO_DATA_WRITE1 | MDIO_SHIFT_CLK, addr);
497 static int mdio_read(kio_addr_t addr, int phy_id, int loc)
499 u_int cmd = (0xf6<<10)|(phy_id<<5)|loc;
503 for (i = 14; i >= 0; i--) {
504 int dat = (cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0;
506 outb_p(dat | MDIO_SHIFT_CLK, addr);
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);
513 return (retval>>1) & 0xffff;
516 static void mdio_write(kio_addr_t addr, int phy_id, int loc, int value)
518 u_int cmd = (0x05<<28)|(phy_id<<23)|(loc<<18)|(1<<17)|value;
522 for (i = 31; i >= 0; i--) {
523 int dat = (cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0;
525 outb_p(dat | MDIO_SHIFT_CLK, addr);
527 for (i = 1; i >= 0; i--) {
528 outb_p(MDIO_ENB_IN, addr);
529 outb_p(MDIO_ENB_IN | MDIO_SHIFT_CLK, addr);
533 /*====================================================================*/
535 static int axnet_open(struct net_device *dev)
537 axnet_dev_t *info = PRIV(dev);
538 struct pcmcia_device *link = info->p_dev;
540 DEBUG(2, "axnet_open('%s')\n", dev->name);
547 request_irq(dev->irq, ei_irq_wrapper, SA_SHIRQ, "axnet_cs", dev);
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);
559 /*====================================================================*/
561 static int axnet_close(struct net_device *dev)
563 axnet_dev_t *info = PRIV(dev);
564 struct pcmcia_device *link = info->p_dev;
566 DEBUG(2, "axnet_close('%s')\n", dev->name);
569 free_irq(dev->irq, dev);
572 netif_stop_queue(dev);
573 del_timer_sync(&info->watchdog);
578 /*======================================================================
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.
583 ======================================================================*/
585 static void axnet_reset_8390(struct net_device *dev)
587 kio_addr_t nic_base = dev->base_addr;
590 ei_status.txing = ei_status.dmaing = 0;
592 outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, nic_base + E8390_CMD);
594 outb(inb(nic_base + AXNET_RESET), nic_base + AXNET_RESET);
596 for (i = 0; i < 100; i++) {
597 if ((inb_p(nic_base+EN0_ISR) & ENISR_RESET) != 0)
601 outb_p(ENISR_RESET, nic_base + EN0_ISR); /* Ack intr. */
604 printk(KERN_ERR "%s: axnet_reset_8390() did not complete.\n",
607 } /* axnet_reset_8390 */
609 /*====================================================================*/
611 static irqreturn_t ei_irq_wrapper(int irq, void *dev_id, struct pt_regs *regs)
613 struct net_device *dev = dev_id;
614 PRIV(dev)->stale = 0;
615 return ax_interrupt(irq, dev_id, regs);
618 static void ei_watchdog(u_long arg)
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;
626 if (!netif_device_present(dev)) goto reschedule;
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;
636 if (info->fast_poll) {
638 info->watchdog.expires = jiffies + 1;
639 add_timer(&info->watchdog);
643 if (info->phy_id < 0)
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);
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");
658 info->duplex_flag = (p & 0x0140) ? 0x80 : 0x00;
660 printk(KERN_INFO "%s: autonegotiation complete: "
661 "%sbaseT-%cD selected\n", dev->name,
662 ((p & 0x0180) ? "100" : "10"),
663 ((p & 0x0140) ? 'F' : 'H'));
665 printk(KERN_INFO "%s: link partner did not autonegotiate\n",
667 AX88190_init(dev, 1);
669 info->link_status = link;
673 info->watchdog.expires = jiffies + HZ;
674 add_timer(&info->watchdog);
677 static void netdev_get_drvinfo(struct net_device *dev,
678 struct ethtool_drvinfo *info)
680 strcpy(info->driver, "axnet_cs");
683 static struct ethtool_ops netdev_ethtool_ops = {
684 .get_drvinfo = netdev_get_drvinfo,
687 /*====================================================================*/
689 static int axnet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
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;
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);
700 case SIOCSMIIREG: /* Write MII PHY register. */
701 if (!capable(CAP_NET_ADMIN))
703 mdio_write(mii_addr, data[0], data[1] & 0x1f, data[2]);
709 /*====================================================================*/
711 static void get_8390_hdr(struct net_device *dev,
712 struct e8390_pkt_hdr *hdr,
715 kio_addr_t nic_base = dev->base_addr;
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);
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);
728 /*====================================================================*/
730 static void block_input(struct net_device *dev, int count,
731 struct sk_buff *skb, int ring_offset)
733 kio_addr_t nic_base = dev->base_addr;
734 int xfer_count = count;
735 char *buf = skb->data;
738 if ((ei_debug > 4) && (count != 4))
739 printk(KERN_DEBUG "%s: [bi=%d]\n", dev->name, count+4);
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);
745 insw(nic_base + AXNET_DATAPORT,buf,count>>1);
747 buf[count-1] = inb(nic_base + AXNET_DATAPORT), xfer_count++;
751 /*====================================================================*/
753 static void block_output(struct net_device *dev, int count,
754 const u_char *buf, const int start_page)
756 kio_addr_t nic_base = dev->base_addr;
760 printk(KERN_DEBUG "%s: [bo=%d]\n", dev->name, count);
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. */
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);
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), */
802 MODULE_DEVICE_TABLE(pcmcia, axnet_ids);
804 static struct pcmcia_driver axnet_cs_driver = {
805 .owner = THIS_MODULE,
809 .probe = axnet_attach,
810 .remove = axnet_detach,
811 .id_table = axnet_ids,
812 .suspend = axnet_suspend,
813 .resume = axnet_resume,
816 static int __init init_axnet_cs(void)
818 return pcmcia_register_driver(&axnet_cs_driver);
821 static void __exit exit_axnet_cs(void)
823 pcmcia_unregister_driver(&axnet_cs_driver);
826 module_init(init_axnet_cs);
827 module_exit(exit_axnet_cs);
829 /*====================================================================*/
831 /* 8390.c: A general NS8390 ethernet driver core for linux. */
833 Written 1992-94 by Donald Becker.
835 Copyright 1993 United States Government as represented by the
836 Director, National Security Agency.
838 This software may be used and distributed according to the terms
839 of the GNU General Public License, incorporated herein by reference.
841 The author may be reached as becker@scyld.com, or C/O
842 Scyld Computing Corporation
843 410 Severn Ave., Suite 210
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.
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
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.
874 The National Semiconductor LAN Databook, and the 3Com 3c503 databook.
878 static const char *version_8390 =
879 "8390.c:v1.10cvs 9/23/94 Donald Becker (becker@scyld.com)\n";
881 #include <linux/bitops.h>
883 #include <linux/fcntl.h>
884 #include <linux/in.h>
885 #include <linux/interrupt.h>
887 #include <linux/etherdevice.h>
891 /* These are the operational function interfaces to board-specific
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,
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.
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)
914 /* use 0 for production, 1 for verification, >2 for debug */
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);
926 /* Routines generic to NS8390-based boards. */
927 static void NS8390_trigger_send(struct net_device *dev, unsigned int length,
929 static void set_multicast_list(struct net_device *dev);
930 static void do_set_multicast_list(struct net_device *dev);
933 * SMP and the 8390 setup.
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
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).
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.
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
959 * ax_open - Open/initialize the board.
960 * @dev: network device to initialize
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.
966 static int ax_open(struct net_device *dev)
969 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
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;
981 * Grab the page lock so we own the register set, then call
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;
995 #define dev_lock(dev) (((struct ei_device *)netdev_priv(dev))->page_lock)
998 * ax_close - shut down network device
999 * @dev: network device to close
1001 * Opposite of ax_open(). Only used when "ifconfig <devname> down" is done.
1003 int ax_close(struct net_device *dev)
1005 unsigned long flags;
1008 * Hold the page lock during close
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);
1019 * ei_tx_timeout - handle transmit time out condition
1020 * @dev: network device which has apparently fallen asleep
1022 * Called by kernel when device never acknowledges a transmit has
1023 * completed (or failed) - i.e. never posted a Tx related interrupt.
1026 void ei_tx_timeout(struct net_device *dev)
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;
1033 ei_local->stat.tx_errors++;
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);
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);
1044 if (!isr && !ei_local->stat.tx_packets)
1046 /* The 8390 probably hasn't gotten on the cable yet. */
1047 ei_local->interface_num ^= 1; /* Try a different xcvr. */
1050 /* Ugly but a reset can be slow, yet must be protected */
1052 disable_irq_nosync(dev->irq);
1053 spin_lock(&ei_local->page_lock);
1055 /* Try to restart the card. Perhaps the user has fixed something. */
1057 AX88190_init(dev, 1);
1059 spin_unlock(&ei_local->page_lock);
1060 enable_irq(dev->irq);
1061 netif_wake_queue(dev);
1065 * ei_start_xmit - begin packet transmission
1066 * @skb: packet to be sent
1067 * @dev: network device to which packet is sent
1069 * Sends a packet to an 8390 network device.
1072 static int ei_start_xmit(struct sk_buff *skb, struct net_device *dev)
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];
1080 netif_stop_queue(dev);
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 */
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);
1094 * Slow phase with lock held.
1097 disable_irq_nosync(dev->irq);
1099 spin_lock(&ei_local->page_lock);
1101 ei_local->irqlock = 1;
1103 send_length = ETH_ZLEN < length ? length : ETH_ZLEN;
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.
1113 if (ei_local->tx1 == 0)
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);
1121 else if (ei_local->tx2 == 0)
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);
1130 { /* We should never get here. */
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++;
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.
1149 if (length == skb->len)
1150 ei_block_output(dev, length, skb->data, output_page);
1152 memset(packet, 0, ETH_ZLEN);
1153 memcpy(packet, skb->data, skb->len);
1154 ei_block_output(dev, length, packet, output_page);
1157 if (! ei_local->txing)
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)
1165 ei_local->lasttx = -1;
1170 ei_local->lasttx = -2;
1173 else ei_local->txqueue++;
1175 if (ei_local->tx1 && ei_local->tx2)
1176 netif_stop_queue(dev);
1178 netif_start_queue(dev);
1180 /* Turn 8390 interrupts back on. */
1181 ei_local->irqlock = 0;
1182 outb_p(ENISR_ALL, e8390_base + EN0_IMR);
1184 spin_unlock(&ei_local->page_lock);
1185 enable_irq(dev->irq);
1187 dev_kfree_skb (skb);
1188 ei_local->stat.tx_bytes += send_length;
1194 * ax_interrupt - handle the interrupts from an 8390
1195 * @irq: interrupt number
1196 * @dev_id: a pointer to the net_device
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
1206 static irqreturn_t ax_interrupt(int irq, void *dev_id, struct pt_regs * regs)
1208 struct net_device *dev = dev_id;
1210 int interrupts, nr_serviced = 0, i;
1211 struct ei_device *ei_local;
1216 printk ("net_interrupt(): irq %d for unknown device.\n", irq);
1220 e8390_base = dev->base_addr;
1221 ei_local = (struct ei_device *) netdev_priv(dev);
1224 * Protect the irq test too.
1227 spin_lock(&ei_local->page_lock);
1229 if (ei_local->irqlock)
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));
1239 spin_unlock(&ei_local->page_lock);
1244 printk(KERN_DEBUG "%s: interrupt(isr=%#2.2x).\n", dev->name,
1245 inb_p(e8390_base + EN0_ISR));
1247 outb_p(0x00, e8390_base + EN0_ISR);
1248 ei_local->irqlock = 1;
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)
1254 if (!netif_running(dev) || (interrupts == 0xff)) {
1256 printk(KERN_WARNING "%s: interrupt from stopped card\n", dev->name);
1257 outb_p(interrupts, e8390_base + EN0_ISR);
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))
1268 outb_p(0, e8390_base + EN0_ISR);
1269 outb_p(interrupts, e8390_base + EN0_ISR);
1271 if (interrupts & ENISR_OVER)
1273 else if (interrupts & (ENISR_RX+ENISR_RX_ERR))
1275 /* Got a good (?) packet. */
1278 /* Push the next to-transmit packet through. */
1279 if (interrupts & ENISR_TX)
1281 else if (interrupts & ENISR_TX_ERR)
1284 if (interrupts & ENISR_COUNTERS)
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);
1292 if (interrupts && ei_debug)
1295 if (nr_serviced >= MAX_SERVICE)
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. */
1303 printk(KERN_WARNING "%s: unknown interrupt %#2x\n", dev->name, interrupts);
1304 outb_p(0xff, e8390_base + EN0_ISR); /* Ack. all intrs. */
1308 /* Turn 8390 interrupts back on. */
1309 ei_local->irqlock = 0;
1310 outb_p(ENISR_ALL, e8390_base + EN0_IMR);
1312 spin_unlock(&ei_local->page_lock);
1313 return IRQ_RETVAL(handled);
1317 * ei_tx_err - handle transmitter error
1318 * @dev: network device which threw the exception
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.
1327 * Called with lock held.
1330 static void ei_tx_err(struct net_device *dev)
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);
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 ");
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++;
1364 * ei_tx_intr - transmit interrupt handler
1365 * @dev: network device for which tx intr is handled
1367 * We have finished a transmit: check for errors and then trigger the next
1368 * packet to be sent. Called with lock held.
1371 static void ei_tx_intr(struct net_device *dev)
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);
1378 * There are two Tx buffers, see which one finished, and trigger
1379 * the send of another one if it exists.
1381 ei_local->txqueue--;
1383 if (ei_local->tx1 < 0)
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);
1389 if (ei_local->tx2 > 0)
1391 ei_local->txing = 1;
1392 NS8390_trigger_send(dev, ei_local->tx2, ei_local->tx_start_page + 6);
1393 dev->trans_start = jiffies;
1395 ei_local->lasttx = 2;
1397 else ei_local->lasttx = 20, ei_local->txing = 0;
1399 else if (ei_local->tx2 < 0)
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);
1405 if (ei_local->tx1 > 0)
1407 ei_local->txing = 1;
1408 NS8390_trigger_send(dev, ei_local->tx1, ei_local->tx_start_page);
1409 dev->trans_start = jiffies;
1411 ei_local->lasttx = 1;
1414 ei_local->lasttx = 10, ei_local->txing = 0;
1416 // else printk(KERN_WARNING "%s: unexpected TX-done interrupt, lasttx=%d.\n",
1417 // dev->name, ei_local->lasttx);
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++;
1426 ei_local->stat.tx_errors++;
1427 if (status & ENTSR_ABT)
1429 ei_local->stat.tx_aborted_errors++;
1430 ei_local->stat.collisions += 16;
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++;
1441 netif_wake_queue(dev);
1445 * ei_receive - receive some packets
1446 * @dev: network device with which receive will be run
1448 * We have a good packet(s), get it/them out of the buffers.
1449 * Called with lock held.
1452 static void ei_receive(struct net_device *dev)
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;
1461 while (++rx_pkt_count < 10)
1463 int pkt_len, pkt_stat;
1465 /* Get the rx page (incoming packet pointer). */
1466 rxing_page = inb_p(e8390_base + EN1_CURPAG -1);
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;
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.)
1476 Keep quiet if it looks like a card removal. One problem here
1477 is that some clones crash in roughly the same way.
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);
1483 if (this_frame == rxing_page) /* Read all the frames? */
1484 break; /* Done for now */
1486 current_offset = this_frame << 8;
1487 ei_get_8390_hdr(dev, &rx_frame, this_frame);
1489 pkt_len = rx_frame.count - sizeof(struct e8390_pkt_hdr);
1490 pkt_stat = rx_frame.status;
1492 next_frame = this_frame + 1 + ((pkt_len+4)>>8);
1494 if (pkt_len < 60 || pkt_len > 1518)
1497 printk(KERN_DEBUG "%s: bogus packet size: %d, status=%#2x nxpg=%#2x.\n",
1498 dev->name, rx_frame.count, rx_frame.status,
1500 ei_local->stat.rx_errors++;
1501 ei_local->stat.rx_length_errors++;
1503 else if ((pkt_stat & 0x0F) == ENRSR_RXOK)
1505 struct sk_buff *skb;
1507 skb = dev_alloc_skb(pkt_len+2);
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++;
1518 skb_reserve(skb,2); /* IP headers on 16 byte boundaries */
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);
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++;
1534 printk(KERN_DEBUG "%s: bogus packet: status=%#2x nxpg=%#2x size=%d\n",
1535 dev->name, rx_frame.status, rx_frame.next,
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++;
1542 next_frame = rx_frame.next;
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,
1548 next_frame = ei_local->rx_start_page;
1550 ei_local->current_page = next_frame;
1551 outb_p(next_frame-1, e8390_base+EN0_BOUNDARY);
1558 * ei_rx_overrun - handle receiver overrun
1559 * @dev: network device which threw exception
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.
1570 static void ei_rx_overrun(struct net_device *dev)
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);
1578 * Record whether a Tx was in progress and then issue the
1581 was_txing = inb_p(e8390_base+E8390_CMD) & E8390_TRANS;
1582 outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD);
1585 printk(KERN_DEBUG "%s: Receiver overrun.\n", dev->name);
1586 ei_local->stat.rx_over_errors++;
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.
1598 * Reset RBCR[01] back to zero as per magic incantation.
1600 outb_p(0x00, e8390_base+EN0_RCNTLO);
1601 outb_p(0x00, e8390_base+EN0_RCNTHI);
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.
1610 unsigned char tx_completed = inb_p(e8390_base+EN0_ISR) & (ENISR_TX+ENISR_TX_ERR);
1616 * Have to enter loopback mode and then restart the NIC before
1617 * you are allowed to slurp packets up off the ring.
1619 outb_p(E8390_TXOFF, e8390_base + EN0_TXCR);
1620 outb_p(E8390_NODMA + E8390_PAGE0 + E8390_START, e8390_base + E8390_CMD);
1623 * Clear the Rx ring of all the debris, and ack the interrupt.
1628 * Leave loopback mode, and resend any packet that got stopped.
1630 outb_p(E8390_TXCONFIG | info->duplex_flag, e8390_base + EN0_TXCR);
1632 outb_p(E8390_NODMA + E8390_PAGE0 + E8390_START + E8390_TRANS, e8390_base + E8390_CMD);
1636 * Collect the stats. This is called unlocked and from several contexts.
1639 static struct net_device_stats *get_stats(struct net_device *dev)
1641 long ioaddr = dev->base_addr;
1642 struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1643 unsigned long flags;
1645 /* If the card is stopped, just return the present stats. */
1646 if (!netif_running(dev))
1647 return &ei_local->stat;
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);
1656 return &ei_local->stat;
1660 * Form the 64 bit 8390 multicast table from the linked list of addresses
1661 * associated with this dev structure.
1664 static inline void make_mc_bits(u8 *bits, struct net_device *dev)
1666 struct dev_mc_list *dmi;
1669 for (dmi=dev->mc_list; dmi; dmi=dmi->next) {
1671 crc = ether_crc(ETH_ALEN, dmi->dmi_addr);
1673 * The 8390 uses the 6 most significant bits of the
1674 * CRC to index the multicast table.
1676 bits[crc>>29] |= (1<<((crc>>26)&7));
1681 * do_set_multicast_list - set/clear multicast filter
1682 * @dev: net device for which multicast filter is adjusted
1684 * Set or clear the multicast filter for this adaptor.
1685 * Must be called with lock held.
1688 static void do_set_multicast_list(struct net_device *dev)
1690 long e8390_base = dev->base_addr;
1692 struct ei_device *ei_local = (struct ei_device*)netdev_priv(dev);
1694 if (!(dev->flags&(IFF_PROMISC|IFF_ALLMULTI))) {
1695 memset(ei_local->mcfilter, 0, 8);
1697 make_mc_bits(ei_local->mcfilter, dev);
1699 /* set to accept-all */
1700 memset(ei_local->mcfilter, 0xFF, 8);
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.
1711 if (netif_running(dev))
1712 outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR);
1714 outb_p(E8390_NODMA + E8390_PAGE1, e8390_base + E8390_CMD);
1715 for(i = 0; i < 8; i++)
1717 outb_p(ei_local->mcfilter[i], e8390_base + EN1_MULT_SHIFT(i));
1719 outb_p(E8390_NODMA + E8390_PAGE0, e8390_base + E8390_CMD);
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);
1726 outb_p(E8390_RXCONFIG | 0x40, e8390_base + EN0_RXCR);
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
1735 static void set_multicast_list(struct net_device *dev)
1737 unsigned long flags;
1739 spin_lock_irqsave(&dev_lock(dev), flags);
1740 do_set_multicast_list(dev);
1741 spin_unlock_irqrestore(&dev_lock(dev), flags);
1745 * axdev_setup - init rest of 8390 device struct
1746 * @dev: network device structure to init
1748 * Initialize the rest of the 8390 device structure. Do NOT __init
1749 * this, as it is used by 8390 based modular drivers too.
1752 static void axdev_setup(struct net_device *dev)
1754 struct ei_device *ei_local;
1756 printk(version_8390);
1758 SET_MODULE_OWNER(dev);
1761 ei_local = (struct ei_device *)netdev_priv(dev);
1762 spin_lock_init(&ei_local->page_lock);
1764 dev->hard_start_xmit = &ei_start_xmit;
1765 dev->get_stats = get_stats;
1766 dev->set_multicast_list = &set_multicast_list;
1771 /* This page of functions should be 8390 generic */
1772 /* Follow National Semi's recommendations for initializing the "NIC". */
1775 * AX88190_init - initialize 8390 hardware
1776 * @dev: network device to initialize
1777 * @startp: boolean. non-zero value to initiate chip processing
1779 * Must be called with lock held.
1782 static void AX88190_init(struct net_device *dev, int startp)
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);
1788 int endcfg = ei_local->word16 ? (0x48 | ENDCFG_WTS) : 0x48;
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);
1812 /* Copy the station address into the DS8390 registers. */
1814 outb_p(E8390_NODMA + E8390_PAGE1 + E8390_STOP, e8390_base+E8390_CMD); /* 0x61 */
1815 for(i = 0; i < 6; i++)
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);
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);
1825 netif_start_queue(dev);
1826 ei_local->tx1 = ei_local->tx2 = 0;
1827 ei_local->txing = 0;
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 */
1842 /* Trigger a transmit start, assuming the length is valid.
1843 Always called with the page lock held */
1845 static void NS8390_trigger_send(struct net_device *dev, unsigned int length,
1848 long e8390_base = dev->base_addr;
1849 struct ei_device *ei_local __attribute((unused)) = (struct ei_device *) netdev_priv(dev);
1851 if (inb_p(e8390_base) & E8390_TRANS)
1853 printk(KERN_WARNING "%s: trigger_send() called with the transmitter busy.\n",
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);