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