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