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