1 /* 3c509.c: A 3c509 EtherLink3 ethernet driver for linux. */
3 Written 1993-2000 by Donald Becker.
5 Copyright 1994-2000 by Donald Becker.
6 Copyright 1993 United States Government as represented by the
7 Director, National Security Agency. This software may be used and
8 distributed according to the terms of the GNU General Public License,
9 incorporated herein by reference.
11 This driver is for the 3Com EtherLinkIII series.
13 The author may be reached as becker@scyld.com, or C/O
14 Scyld Computing Corporation
15 410 Severn Ave., Suite 210
19 Because of the way 3c509 ISA detection works it's difficult to predict
20 a priori which of several ISA-mode cards will be detected first.
22 This driver does not use predictive interrupt mode, resulting in higher
23 packet latency but lower overhead. If interrupts are disabled for an
24 unusually long time it could also result in missed packets, but in
25 practice this rarely happens.
29 Alan Cox: Removed the 'Unexpected interrupt' bug.
30 Michael Meskes: Upgraded to Donald Becker's version 1.07.
31 Alan Cox: Increased the eeprom delay. Regardless of
32 what the docs say some people definitely
33 get problems with lower (but in card spec)
35 v1.10 4/21/97 Fixed module code so that multiple cards may be detected,
37 Andrea Arcangeli: Upgraded to Donald Becker's version 1.12.
38 Rick Payne: Fixed SMP race condition
39 v1.13 9/8/97 Made 'max_interrupt_work' an insmod-settable variable -djb
40 v1.14 10/15/97 Avoided waiting..discard message for fast machines -djb
41 v1.15 1/31/98 Faster recovery for Tx errors. -djb
42 v1.16 2/3/98 Different ID port handling to avoid sound cards. -djb
43 v1.18 12Mar2001 Andrew Morton
44 - Avoid bogus detect of 3c590's (Andrzej Krzysztofowicz)
45 - Reviewed against 1.18 from scyld.com
46 v1.18a 17Nov2001 Jeff Garzik <jgarzik@pobox.com>
48 v1.18b 1Mar2002 Zwane Mwaikambo <zwane@commfireservices.com>
49 - Power Management support
50 v1.18c 1Mar2002 David Ruggiero <jdr@farfalle.com>
52 v1.19 16Oct2002 Zwane Mwaikambo <zwane@linuxpower.ca>
53 - Additional ethtool features
54 v1.19a 28Oct2002 Davud Ruggiero <jdr@farfalle.com>
55 - Increase *read_eeprom udelay to workaround oops with 2 cards.
56 v1.19b 08Nov2002 Marc Zyngier <maz@wild-wind.fr.eu.org>
57 - Introduce driver model for EISA cards.
58 v1.20 04Feb2008 Ondrej Zary <linux@rainbow-software.org>
59 - convert to isa_driver and pnp_driver and some cleanups
62 #define DRV_NAME "3c509"
63 #define DRV_VERSION "1.20"
64 #define DRV_RELDATE "04Feb2008"
66 /* A few values that may be tweaked. */
68 /* Time in jiffies before concluding the transmitter is hung. */
69 #define TX_TIMEOUT (400*HZ/1000)
71 #include <linux/module.h>
72 #include <linux/isa.h>
73 #include <linux/pnp.h>
74 #include <linux/string.h>
75 #include <linux/interrupt.h>
76 #include <linux/errno.h>
78 #include <linux/ioport.h>
79 #include <linux/init.h>
80 #include <linux/netdevice.h>
81 #include <linux/etherdevice.h>
83 #include <linux/skbuff.h>
84 #include <linux/delay.h> /* for udelay() */
85 #include <linux/spinlock.h>
86 #include <linux/ethtool.h>
87 #include <linux/device.h>
88 #include <linux/eisa.h>
89 #include <linux/bitops.h>
91 #include <asm/uaccess.h>
95 static char version
[] = DRV_NAME
".c:" DRV_VERSION
" " DRV_RELDATE
" becker@scyld.com\n";
98 static int el3_debug
= EL3_DEBUG
;
100 static int el3_debug
= 2;
103 /* Used to do a global count of all the cards in the system. Must be
104 * a global variable so that the eisa probe routines can increment
106 static int el3_cards
= 0;
107 #define EL3_MAX_CARDS 8
109 /* To minimize the size of the driver source I only define operating
110 constants if they are used several times. You'll need the manual
111 anyway if you want to understand driver details. */
112 /* Offsets from base I/O address. */
113 #define EL3_DATA 0x00
115 #define EL3_STATUS 0x0e
116 #define EEPROM_READ 0x80
118 #define EL3_IO_EXTENT 16
120 #define EL3WINDOW(win_num) outw(SelectWindow + (win_num), ioaddr + EL3_CMD)
123 /* The top five bits written to EL3_CMD are a command, the lower
124 11 bits are the parameter, if applicable. */
126 TotalReset
= 0<<11, SelectWindow
= 1<<11, StartCoax
= 2<<11,
127 RxDisable
= 3<<11, RxEnable
= 4<<11, RxReset
= 5<<11, RxDiscard
= 8<<11,
128 TxEnable
= 9<<11, TxDisable
= 10<<11, TxReset
= 11<<11,
129 FakeIntr
= 12<<11, AckIntr
= 13<<11, SetIntrEnb
= 14<<11,
130 SetStatusEnb
= 15<<11, SetRxFilter
= 16<<11, SetRxThreshold
= 17<<11,
131 SetTxThreshold
= 18<<11, SetTxStart
= 19<<11, StatsEnable
= 21<<11,
132 StatsDisable
= 22<<11, StopCoax
= 23<<11, PowerUp
= 27<<11,
133 PowerDown
= 28<<11, PowerAuto
= 29<<11};
136 IntLatch
= 0x0001, AdapterFailure
= 0x0002, TxComplete
= 0x0004,
137 TxAvailable
= 0x0008, RxComplete
= 0x0010, RxEarly
= 0x0020,
138 IntReq
= 0x0040, StatsFull
= 0x0080, CmdBusy
= 0x1000, };
140 /* The SetRxFilter command accepts the following classes: */
142 RxStation
= 1, RxMulticast
= 2, RxBroadcast
= 4, RxProm
= 8 };
144 /* Register window 1 offsets, the window used in normal operation. */
147 #define RX_STATUS 0x08
148 #define TX_STATUS 0x0B
149 #define TX_FREE 0x0C /* Remaining free bytes in Tx buffer. */
151 #define WN0_CONF_CTRL 0x04 /* Window 0: Configuration control register */
152 #define WN0_ADDR_CONF 0x06 /* Window 0: Address configuration register */
153 #define WN0_IRQ 0x08 /* Window 0: Set IRQ line in bits 12-15. */
154 #define WN4_MEDIA 0x0A /* Window 4: Various transcvr/media bits. */
155 #define MEDIA_TP 0x00C0 /* Enable link beat and jabber for 10baseT. */
156 #define WN4_NETDIAG 0x06 /* Window 4: Net diagnostic */
157 #define FD_ENABLE 0x8000 /* Enable full-duplex ("external loopback") */
160 * Must be a power of two (we use a binary and in the
163 #define SKB_QUEUE_SIZE 64
165 enum el3_cardtype
{ EL3_ISA
, EL3_PNP
, EL3_EISA
};
171 struct sk_buff
*queue
[SKB_QUEUE_SIZE
];
172 enum el3_cardtype type
;
175 static int current_tag
;
176 static struct net_device
*el3_devs
[EL3_MAX_CARDS
];
178 /* Parameters that may be passed into the module. */
179 static int debug
= -1;
180 static int irq
[] = {-1, -1, -1, -1, -1, -1, -1, -1};
181 /* Maximum events (Rx packets, etc.) to handle at each interrupt. */
182 static int max_interrupt_work
= 10;
187 static int el3_common_init(struct net_device
*dev
);
188 static void el3_common_remove(struct net_device
*dev
);
189 static ushort
id_read_eeprom(int index
);
190 static ushort
read_eeprom(int ioaddr
, int index
);
191 static int el3_open(struct net_device
*dev
);
192 static netdev_tx_t
el3_start_xmit(struct sk_buff
*skb
, struct net_device
*dev
);
193 static irqreturn_t
el3_interrupt(int irq
, void *dev_id
);
194 static void update_stats(struct net_device
*dev
);
195 static struct net_device_stats
*el3_get_stats(struct net_device
*dev
);
196 static int el3_rx(struct net_device
*dev
);
197 static int el3_close(struct net_device
*dev
);
198 static void set_multicast_list(struct net_device
*dev
);
199 static void el3_tx_timeout (struct net_device
*dev
);
200 static void el3_down(struct net_device
*dev
);
201 static void el3_up(struct net_device
*dev
);
202 static const struct ethtool_ops ethtool_ops
;
204 static int el3_suspend(struct device
*, pm_message_t
);
205 static int el3_resume(struct device
*);
207 #define el3_suspend NULL
208 #define el3_resume NULL
212 /* generic device remove for all device types */
213 static int el3_device_remove (struct device
*device
);
214 #ifdef CONFIG_NET_POLL_CONTROLLER
215 static void el3_poll_controller(struct net_device
*dev
);
218 /* Return 0 on success, 1 on error, 2 when found already detected PnP card */
219 static int el3_isa_id_sequence(__be16
*phys_addr
)
221 short lrs_state
= 0xff;
224 /* ISA boards are detected by sending the ID sequence to the
225 ID_PORT. We find cards past the first by setting the 'current_tag'
226 on cards as they are found. Cards with their tag set will not
227 respond to subsequent ID sequences. */
231 for (i
= 0; i
< 255; i
++) {
232 outb(lrs_state
, id_port
);
234 lrs_state
= lrs_state
& 0x100 ? lrs_state
^ 0xcf : lrs_state
;
236 /* For the first probe, clear all board's tag registers. */
237 if (current_tag
== 0)
239 else /* Otherwise kill off already-found boards. */
241 if (id_read_eeprom(7) != 0x6d50)
243 /* Read in EEPROM data, which does contention-select.
244 Only the lowest address board will stay "on-line".
245 3Com got the byte order backwards. */
246 for (i
= 0; i
< 3; i
++)
247 phys_addr
[i
] = htons(id_read_eeprom(i
));
250 /* The ISA PnP 3c509 cards respond to the ID sequence too.
251 This check is needed in order not to register them twice. */
252 for (i
= 0; i
< el3_cards
; i
++) {
253 struct el3_private
*lp
= netdev_priv(el3_devs
[i
]);
254 if (lp
->type
== EL3_PNP
&&
255 !memcmp(phys_addr
, el3_devs
[i
]->dev_addr
,
258 pr_debug("3c509 with address %02x %02x %02x %02x %02x %02x was found by ISAPnP\n",
259 phys_addr
[0] & 0xff, phys_addr
[0] >> 8,
260 phys_addr
[1] & 0xff, phys_addr
[1] >> 8,
261 phys_addr
[2] & 0xff, phys_addr
[2] >> 8);
262 /* Set the adaptor tag so that the next card can be found. */
263 outb(0xd0 + ++current_tag
, id_port
);
268 #endif /* CONFIG_PNP */
273 static void el3_dev_fill(struct net_device
*dev
, __be16
*phys_addr
, int ioaddr
,
274 int irq
, int if_port
, enum el3_cardtype type
)
276 struct el3_private
*lp
= netdev_priv(dev
);
278 memcpy(dev
->dev_addr
, phys_addr
, ETH_ALEN
);
279 dev
->base_addr
= ioaddr
;
281 dev
->if_port
= if_port
;
285 static int el3_isa_match(struct device
*pdev
, unsigned int ndev
)
287 struct net_device
*dev
;
288 int ioaddr
, isa_irq
, if_port
, err
;
292 while ((err
= el3_isa_id_sequence(phys_addr
)) == 2)
293 ; /* Skip to next card when PnP card found */
297 iobase
= id_read_eeprom(8);
298 if_port
= iobase
>> 14;
299 ioaddr
= 0x200 + ((iobase
& 0x1f) << 4);
300 if (irq
[el3_cards
] > 1 && irq
[el3_cards
] < 16)
301 isa_irq
= irq
[el3_cards
];
303 isa_irq
= id_read_eeprom(9) >> 12;
305 dev
= alloc_etherdev(sizeof(struct el3_private
));
309 SET_NETDEV_DEV(dev
, pdev
);
310 netdev_boot_setup_check(dev
);
312 if (!request_region(ioaddr
, EL3_IO_EXTENT
, "3c509-isa")) {
317 /* Set the adaptor tag so that the next card can be found. */
318 outb(0xd0 + ++current_tag
, id_port
);
320 /* Activate the adaptor at the EEPROM location. */
321 outb((ioaddr
>> 4) | 0xe0, id_port
);
324 if (inw(ioaddr
) != 0x6d50) {
329 /* Free the interrupt so that some other card can use it. */
330 outw(0x0f00, ioaddr
+ WN0_IRQ
);
332 el3_dev_fill(dev
, phys_addr
, ioaddr
, isa_irq
, if_port
, EL3_ISA
);
333 dev_set_drvdata(pdev
, dev
);
334 if (el3_common_init(dev
)) {
339 el3_devs
[el3_cards
++] = dev
;
343 static int el3_isa_remove(struct device
*pdev
,
346 el3_device_remove(pdev
);
347 dev_set_drvdata(pdev
, NULL
);
352 static int el3_isa_suspend(struct device
*dev
, unsigned int n
,
356 return el3_suspend(dev
, state
);
359 static int el3_isa_resume(struct device
*dev
, unsigned int n
)
361 struct net_device
*ndev
= dev_get_drvdata(dev
);
362 int ioaddr
= ndev
->base_addr
, err
;
365 while ((err
= el3_isa_id_sequence(phys_addr
)) == 2)
366 ; /* Skip to next card when PnP card found */
369 /* Set the adaptor tag so that the next card can be found. */
370 outb(0xd0 + ++current_tag
, id_port
);
371 /* Enable the card */
372 outb((ioaddr
>> 4) | 0xe0, id_port
);
374 if (inw(ioaddr
) != 0x6d50)
376 /* Free the interrupt so that some other card can use it. */
377 outw(0x0f00, ioaddr
+ WN0_IRQ
);
378 return el3_resume(dev
);
382 static struct isa_driver el3_isa_driver
= {
383 .match
= el3_isa_match
,
384 .remove
= el3_isa_remove
,
386 .suspend
= el3_isa_suspend
,
387 .resume
= el3_isa_resume
,
393 static int isa_registered
;
396 static struct pnp_device_id el3_pnp_ids
[] = {
397 { .id
= "TCM5090" }, /* 3Com Etherlink III (TP) */
398 { .id
= "TCM5091" }, /* 3Com Etherlink III */
399 { .id
= "TCM5094" }, /* 3Com Etherlink III (combo) */
400 { .id
= "TCM5095" }, /* 3Com Etherlink III (TPO) */
401 { .id
= "TCM5098" }, /* 3Com Etherlink III (TPC) */
402 { .id
= "PNP80f7" }, /* 3Com Etherlink III compatible */
403 { .id
= "PNP80f8" }, /* 3Com Etherlink III compatible */
406 MODULE_DEVICE_TABLE(pnp
, el3_pnp_ids
);
408 static int el3_pnp_probe(struct pnp_dev
*pdev
, const struct pnp_device_id
*id
)
411 int ioaddr
, irq
, if_port
;
413 struct net_device
*dev
= NULL
;
416 ioaddr
= pnp_port_start(pdev
, 0);
417 if (!request_region(ioaddr
, EL3_IO_EXTENT
, "3c509-pnp"))
419 irq
= pnp_irq(pdev
, 0);
421 for (i
= 0; i
< 3; i
++)
422 phys_addr
[i
] = htons(read_eeprom(ioaddr
, i
));
423 if_port
= read_eeprom(ioaddr
, 8) >> 14;
424 dev
= alloc_etherdev(sizeof(struct el3_private
));
426 release_region(ioaddr
, EL3_IO_EXTENT
);
429 SET_NETDEV_DEV(dev
, &pdev
->dev
);
430 netdev_boot_setup_check(dev
);
432 el3_dev_fill(dev
, phys_addr
, ioaddr
, irq
, if_port
, EL3_PNP
);
433 pnp_set_drvdata(pdev
, dev
);
434 err
= el3_common_init(dev
);
437 pnp_set_drvdata(pdev
, NULL
);
442 el3_devs
[el3_cards
++] = dev
;
446 static void el3_pnp_remove(struct pnp_dev
*pdev
)
448 el3_common_remove(pnp_get_drvdata(pdev
));
449 pnp_set_drvdata(pdev
, NULL
);
453 static int el3_pnp_suspend(struct pnp_dev
*pdev
, pm_message_t state
)
455 return el3_suspend(&pdev
->dev
, state
);
458 static int el3_pnp_resume(struct pnp_dev
*pdev
)
460 return el3_resume(&pdev
->dev
);
464 static struct pnp_driver el3_pnp_driver
= {
466 .id_table
= el3_pnp_ids
,
467 .probe
= el3_pnp_probe
,
468 .remove
= el3_pnp_remove
,
470 .suspend
= el3_pnp_suspend
,
471 .resume
= el3_pnp_resume
,
474 static int pnp_registered
;
475 #endif /* CONFIG_PNP */
478 static struct eisa_device_id el3_eisa_ids
[] = {
488 MODULE_DEVICE_TABLE(eisa
, el3_eisa_ids
);
490 static int el3_eisa_probe (struct device
*device
);
492 static struct eisa_driver el3_eisa_driver
= {
493 .id_table
= el3_eisa_ids
,
496 .probe
= el3_eisa_probe
,
497 .remove
= el3_device_remove
,
498 .suspend
= el3_suspend
,
499 .resume
= el3_resume
,
502 static int eisa_registered
;
505 static const struct net_device_ops netdev_ops
= {
506 .ndo_open
= el3_open
,
507 .ndo_stop
= el3_close
,
508 .ndo_start_xmit
= el3_start_xmit
,
509 .ndo_get_stats
= el3_get_stats
,
510 .ndo_set_rx_mode
= set_multicast_list
,
511 .ndo_tx_timeout
= el3_tx_timeout
,
512 .ndo_change_mtu
= eth_change_mtu
,
513 .ndo_set_mac_address
= eth_mac_addr
,
514 .ndo_validate_addr
= eth_validate_addr
,
515 #ifdef CONFIG_NET_POLL_CONTROLLER
516 .ndo_poll_controller
= el3_poll_controller
,
520 static int el3_common_init(struct net_device
*dev
)
522 struct el3_private
*lp
= netdev_priv(dev
);
524 const char *if_names
[] = {"10baseT", "AUI", "undefined", "BNC"};
526 spin_lock_init(&lp
->lock
);
528 if (dev
->mem_start
& 0x05) { /* xcvr codes 1/3/4/12 */
529 dev
->if_port
= (dev
->mem_start
& 0x0f);
530 } else { /* xcvr codes 0/8 */
531 /* use eeprom value, but save user's full-duplex selection */
532 dev
->if_port
|= (dev
->mem_start
& 0x08);
535 /* The EL3-specific entries in the device structure. */
536 dev
->netdev_ops
= &netdev_ops
;
537 dev
->watchdog_timeo
= TX_TIMEOUT
;
538 SET_ETHTOOL_OPS(dev
, ðtool_ops
);
540 err
= register_netdev(dev
);
542 pr_err("Failed to register 3c5x9 at %#3.3lx, IRQ %d.\n",
543 dev
->base_addr
, dev
->irq
);
544 release_region(dev
->base_addr
, EL3_IO_EXTENT
);
548 pr_info("%s: 3c5x9 found at %#3.3lx, %s port, address %pM, IRQ %d.\n",
549 dev
->name
, dev
->base_addr
, if_names
[(dev
->if_port
& 0x03)],
550 dev
->dev_addr
, dev
->irq
);
553 pr_info("%s", version
);
558 static void el3_common_remove (struct net_device
*dev
)
560 unregister_netdev (dev
);
561 release_region(dev
->base_addr
, EL3_IO_EXTENT
);
566 static int __init
el3_eisa_probe (struct device
*device
)
569 int ioaddr
, irq
, if_port
;
571 struct net_device
*dev
= NULL
;
572 struct eisa_device
*edev
;
575 /* Yeepee, The driver framework is calling us ! */
576 edev
= to_eisa_device (device
);
577 ioaddr
= edev
->base_addr
;
579 if (!request_region(ioaddr
, EL3_IO_EXTENT
, "3c579-eisa"))
582 /* Change the register set to the configuration window 0. */
583 outw(SelectWindow
| 0, ioaddr
+ 0xC80 + EL3_CMD
);
585 irq
= inw(ioaddr
+ WN0_IRQ
) >> 12;
586 if_port
= inw(ioaddr
+ 6)>>14;
587 for (i
= 0; i
< 3; i
++)
588 phys_addr
[i
] = htons(read_eeprom(ioaddr
, i
));
590 /* Restore the "Product ID" to the EEPROM read register. */
591 read_eeprom(ioaddr
, 3);
593 dev
= alloc_etherdev(sizeof (struct el3_private
));
595 release_region(ioaddr
, EL3_IO_EXTENT
);
599 SET_NETDEV_DEV(dev
, device
);
600 netdev_boot_setup_check(dev
);
602 el3_dev_fill(dev
, phys_addr
, ioaddr
, irq
, if_port
, EL3_EISA
);
603 eisa_set_drvdata (edev
, dev
);
604 err
= el3_common_init(dev
);
607 eisa_set_drvdata (edev
, NULL
);
612 el3_devs
[el3_cards
++] = dev
;
617 /* This remove works for all device types.
619 * The net dev must be stored in the driver data field */
620 static int el3_device_remove(struct device
*device
)
622 struct net_device
*dev
;
624 dev
= dev_get_drvdata(device
);
626 el3_common_remove (dev
);
630 /* Read a word from the EEPROM using the regular EEPROM access register.
631 Assume that we are in register window zero.
633 static ushort
read_eeprom(int ioaddr
, int index
)
635 outw(EEPROM_READ
+ index
, ioaddr
+ 10);
636 /* Pause for at least 162 us. for the read to take place.
637 Some chips seem to require much longer */
639 return inw(ioaddr
+ 12);
642 /* Read a word from the EEPROM when in the ISA ID probe state. */
643 static ushort
id_read_eeprom(int index
)
647 /* Issue read command, and pause for at least 162 us. for it to complete.
648 Assume extra-fast 16Mhz bus. */
649 outb(EEPROM_READ
+ index
, id_port
);
651 /* Pause for at least 162 us. for the read to take place. */
652 /* Some chips seem to require much longer */
655 for (bit
= 15; bit
>= 0; bit
--)
656 word
= (word
<< 1) + (inb(id_port
) & 0x01);
659 pr_debug(" 3c509 EEPROM word %d %#4.4x.\n", index
, word
);
666 el3_open(struct net_device
*dev
)
668 int ioaddr
= dev
->base_addr
;
671 outw(TxReset
, ioaddr
+ EL3_CMD
);
672 outw(RxReset
, ioaddr
+ EL3_CMD
);
673 outw(SetStatusEnb
| 0x00, ioaddr
+ EL3_CMD
);
675 i
= request_irq(dev
->irq
, el3_interrupt
, 0, dev
->name
, dev
);
681 pr_debug("%s: Opening, IRQ %d status@%x %4.4x.\n", dev
->name
,
682 dev
->irq
, ioaddr
+ EL3_STATUS
, inw(ioaddr
+ EL3_STATUS
));
687 pr_debug("%s: Opened 3c509 IRQ %d status %4.4x.\n",
688 dev
->name
, dev
->irq
, inw(ioaddr
+ EL3_STATUS
));
694 el3_tx_timeout (struct net_device
*dev
)
696 int ioaddr
= dev
->base_addr
;
698 /* Transmitter timeout, serious problems. */
699 pr_warning("%s: transmit timed out, Tx_status %2.2x status %4.4x Tx FIFO room %d.\n",
700 dev
->name
, inb(ioaddr
+ TX_STATUS
), inw(ioaddr
+ EL3_STATUS
),
701 inw(ioaddr
+ TX_FREE
));
702 dev
->stats
.tx_errors
++;
703 dev
->trans_start
= jiffies
; /* prevent tx timeout */
704 /* Issue TX_RESET and TX_START commands. */
705 outw(TxReset
, ioaddr
+ EL3_CMD
);
706 outw(TxEnable
, ioaddr
+ EL3_CMD
);
707 netif_wake_queue(dev
);
712 el3_start_xmit(struct sk_buff
*skb
, struct net_device
*dev
)
714 struct el3_private
*lp
= netdev_priv(dev
);
715 int ioaddr
= dev
->base_addr
;
718 netif_stop_queue (dev
);
720 dev
->stats
.tx_bytes
+= skb
->len
;
723 pr_debug("%s: el3_start_xmit(length = %u) called, status %4.4x.\n",
724 dev
->name
, skb
->len
, inw(ioaddr
+ EL3_STATUS
));
727 * We lock the driver against other processors. Note
728 * we don't need to lock versus the IRQ as we suspended
729 * that. This means that we lose the ability to take
730 * an RX during a TX upload. That sucks a bit with SMP
731 * on an original 3c509 (2K buffer)
733 * Using disable_irq stops us crapping on other
734 * time sensitive devices.
737 spin_lock_irqsave(&lp
->lock
, flags
);
739 /* Put out the doubleword header... */
740 outw(skb
->len
, ioaddr
+ TX_FIFO
);
741 outw(0x00, ioaddr
+ TX_FIFO
);
742 /* ... and the packet rounded to a doubleword. */
743 outsl(ioaddr
+ TX_FIFO
, skb
->data
, (skb
->len
+ 3) >> 2);
745 if (inw(ioaddr
+ TX_FREE
) > 1536)
746 netif_start_queue(dev
);
748 /* Interrupt us when the FIFO has room for max-sized packet. */
749 outw(SetTxThreshold
+ 1536, ioaddr
+ EL3_CMD
);
751 spin_unlock_irqrestore(&lp
->lock
, flags
);
755 /* Clear the Tx status stack. */
760 while (--i
> 0 && (tx_status
= inb(ioaddr
+ TX_STATUS
)) > 0) {
761 if (tx_status
& 0x38) dev
->stats
.tx_aborted_errors
++;
762 if (tx_status
& 0x30) outw(TxReset
, ioaddr
+ EL3_CMD
);
763 if (tx_status
& 0x3C) outw(TxEnable
, ioaddr
+ EL3_CMD
);
764 outb(0x00, ioaddr
+ TX_STATUS
); /* Pop the status stack. */
770 /* The EL3 interrupt handler. */
772 el3_interrupt(int irq
, void *dev_id
)
774 struct net_device
*dev
= dev_id
;
775 struct el3_private
*lp
;
777 int i
= max_interrupt_work
;
779 lp
= netdev_priv(dev
);
780 spin_lock(&lp
->lock
);
782 ioaddr
= dev
->base_addr
;
785 status
= inw(ioaddr
+ EL3_STATUS
);
786 pr_debug("%s: interrupt, status %4.4x.\n", dev
->name
, status
);
789 while ((status
= inw(ioaddr
+ EL3_STATUS
)) &
790 (IntLatch
| RxComplete
| StatsFull
)) {
792 if (status
& RxComplete
)
795 if (status
& TxAvailable
) {
797 pr_debug(" TX room bit was handled.\n");
798 /* There's room in the FIFO for a full-sized packet. */
799 outw(AckIntr
| TxAvailable
, ioaddr
+ EL3_CMD
);
800 netif_wake_queue (dev
);
802 if (status
& (AdapterFailure
| RxEarly
| StatsFull
| TxComplete
)) {
803 /* Handle all uncommon interrupts. */
804 if (status
& StatsFull
) /* Empty statistics. */
806 if (status
& RxEarly
) { /* Rx early is unused. */
808 outw(AckIntr
| RxEarly
, ioaddr
+ EL3_CMD
);
810 if (status
& TxComplete
) { /* Really Tx error. */
814 while (--i
>0 && (tx_status
= inb(ioaddr
+ TX_STATUS
)) > 0) {
815 if (tx_status
& 0x38) dev
->stats
.tx_aborted_errors
++;
816 if (tx_status
& 0x30) outw(TxReset
, ioaddr
+ EL3_CMD
);
817 if (tx_status
& 0x3C) outw(TxEnable
, ioaddr
+ EL3_CMD
);
818 outb(0x00, ioaddr
+ TX_STATUS
); /* Pop the status stack. */
821 if (status
& AdapterFailure
) {
822 /* Adapter failure requires Rx reset and reinit. */
823 outw(RxReset
, ioaddr
+ EL3_CMD
);
824 /* Set the Rx filter to the current state. */
825 outw(SetRxFilter
| RxStation
| RxBroadcast
826 | (dev
->flags
& IFF_ALLMULTI
? RxMulticast
: 0)
827 | (dev
->flags
& IFF_PROMISC
? RxProm
: 0),
829 outw(RxEnable
, ioaddr
+ EL3_CMD
); /* Re-enable the receiver. */
830 outw(AckIntr
| AdapterFailure
, ioaddr
+ EL3_CMD
);
835 pr_err("%s: Infinite loop in interrupt, status %4.4x.\n",
837 /* Clear all interrupts. */
838 outw(AckIntr
| 0xFF, ioaddr
+ EL3_CMD
);
841 /* Acknowledge the IRQ. */
842 outw(AckIntr
| IntReq
| IntLatch
, ioaddr
+ EL3_CMD
); /* Ack IRQ */
846 pr_debug("%s: exiting interrupt, status %4.4x.\n", dev
->name
,
847 inw(ioaddr
+ EL3_STATUS
));
849 spin_unlock(&lp
->lock
);
854 #ifdef CONFIG_NET_POLL_CONTROLLER
856 * Polling receive - used by netconsole and other diagnostic tools
857 * to allow network i/o with interrupts disabled.
859 static void el3_poll_controller(struct net_device
*dev
)
861 disable_irq(dev
->irq
);
862 el3_interrupt(dev
->irq
, dev
);
863 enable_irq(dev
->irq
);
867 static struct net_device_stats
*
868 el3_get_stats(struct net_device
*dev
)
870 struct el3_private
*lp
= netdev_priv(dev
);
874 * This is fast enough not to bother with disable IRQ
878 spin_lock_irqsave(&lp
->lock
, flags
);
880 spin_unlock_irqrestore(&lp
->lock
, flags
);
884 /* Update statistics. We change to register window 6, so this should be run
885 single-threaded if the device is active. This is expected to be a rare
886 operation, and it's simpler for the rest of the driver to assume that
887 window 1 is always valid rather than use a special window-state variable.
889 static void update_stats(struct net_device
*dev
)
891 int ioaddr
= dev
->base_addr
;
894 pr_debug(" Updating the statistics.\n");
895 /* Turn off statistics updates while reading. */
896 outw(StatsDisable
, ioaddr
+ EL3_CMD
);
897 /* Switch to the stats window, and read everything. */
899 dev
->stats
.tx_carrier_errors
+= inb(ioaddr
+ 0);
900 dev
->stats
.tx_heartbeat_errors
+= inb(ioaddr
+ 1);
901 /* Multiple collisions. */ inb(ioaddr
+ 2);
902 dev
->stats
.collisions
+= inb(ioaddr
+ 3);
903 dev
->stats
.tx_window_errors
+= inb(ioaddr
+ 4);
904 dev
->stats
.rx_fifo_errors
+= inb(ioaddr
+ 5);
905 dev
->stats
.tx_packets
+= inb(ioaddr
+ 6);
906 /* Rx packets */ inb(ioaddr
+ 7);
907 /* Tx deferrals */ inb(ioaddr
+ 8);
908 inw(ioaddr
+ 10); /* Total Rx and Tx octets. */
911 /* Back to window 1, and turn statistics back on. */
913 outw(StatsEnable
, ioaddr
+ EL3_CMD
);
917 el3_rx(struct net_device
*dev
)
919 int ioaddr
= dev
->base_addr
;
923 pr_debug(" In rx_packet(), status %4.4x, rx_status %4.4x.\n",
924 inw(ioaddr
+EL3_STATUS
), inw(ioaddr
+RX_STATUS
));
925 while ((rx_status
= inw(ioaddr
+ RX_STATUS
)) > 0) {
926 if (rx_status
& 0x4000) { /* Error, update stats. */
927 short error
= rx_status
& 0x3800;
929 outw(RxDiscard
, ioaddr
+ EL3_CMD
);
930 dev
->stats
.rx_errors
++;
932 case 0x0000: dev
->stats
.rx_over_errors
++; break;
933 case 0x0800: dev
->stats
.rx_length_errors
++; break;
934 case 0x1000: dev
->stats
.rx_frame_errors
++; break;
935 case 0x1800: dev
->stats
.rx_length_errors
++; break;
936 case 0x2000: dev
->stats
.rx_frame_errors
++; break;
937 case 0x2800: dev
->stats
.rx_crc_errors
++; break;
940 short pkt_len
= rx_status
& 0x7ff;
943 skb
= netdev_alloc_skb(dev
, pkt_len
+ 5);
945 pr_debug("Receiving packet size %d status %4.4x.\n",
948 skb_reserve(skb
, 2); /* Align IP on 16 byte */
950 /* 'skb->data' points to the start of sk_buff data area. */
951 insl(ioaddr
+ RX_FIFO
, skb_put(skb
,pkt_len
),
954 outw(RxDiscard
, ioaddr
+ EL3_CMD
); /* Pop top Rx packet. */
955 skb
->protocol
= eth_type_trans(skb
,dev
);
957 dev
->stats
.rx_bytes
+= pkt_len
;
958 dev
->stats
.rx_packets
++;
961 outw(RxDiscard
, ioaddr
+ EL3_CMD
);
962 dev
->stats
.rx_dropped
++;
964 pr_debug("%s: Couldn't allocate a sk_buff of size %d.\n",
967 inw(ioaddr
+ EL3_STATUS
); /* Delay. */
968 while (inw(ioaddr
+ EL3_STATUS
) & 0x1000)
969 pr_debug(" Waiting for 3c509 to discard packet, status %x.\n",
970 inw(ioaddr
+ EL3_STATUS
) );
977 * Set or clear the multicast filter for this adaptor.
980 set_multicast_list(struct net_device
*dev
)
983 struct el3_private
*lp
= netdev_priv(dev
);
984 int ioaddr
= dev
->base_addr
;
985 int mc_count
= netdev_mc_count(dev
);
989 if (old
!= mc_count
) {
991 pr_debug("%s: Setting Rx mode to %d addresses.\n",
992 dev
->name
, mc_count
);
995 spin_lock_irqsave(&lp
->lock
, flags
);
996 if (dev
->flags
&IFF_PROMISC
) {
997 outw(SetRxFilter
| RxStation
| RxMulticast
| RxBroadcast
| RxProm
,
1000 else if (mc_count
|| (dev
->flags
&IFF_ALLMULTI
)) {
1001 outw(SetRxFilter
| RxStation
| RxMulticast
| RxBroadcast
, ioaddr
+ EL3_CMD
);
1004 outw(SetRxFilter
| RxStation
| RxBroadcast
, ioaddr
+ EL3_CMD
);
1005 spin_unlock_irqrestore(&lp
->lock
, flags
);
1009 el3_close(struct net_device
*dev
)
1011 int ioaddr
= dev
->base_addr
;
1012 struct el3_private
*lp
= netdev_priv(dev
);
1015 pr_debug("%s: Shutting down ethercard.\n", dev
->name
);
1019 free_irq(dev
->irq
, dev
);
1020 /* Switching back to window 0 disables the IRQ. */
1022 if (lp
->type
!= EL3_EISA
) {
1023 /* But we explicitly zero the IRQ line select anyway. Don't do
1024 * it on EISA cards, it prevents the module from getting an
1025 * IRQ after unload+reload... */
1026 outw(0x0f00, ioaddr
+ WN0_IRQ
);
1033 el3_link_ok(struct net_device
*dev
)
1035 int ioaddr
= dev
->base_addr
;
1039 tmp
= inw(ioaddr
+ WN4_MEDIA
);
1041 return tmp
& (1<<11);
1045 el3_netdev_get_ecmd(struct net_device
*dev
, struct ethtool_cmd
*ecmd
)
1048 int ioaddr
= dev
->base_addr
;
1051 /* obtain current transceiver via WN4_MEDIA? */
1052 tmp
= inw(ioaddr
+ WN0_ADDR_CONF
);
1053 ecmd
->transceiver
= XCVR_INTERNAL
;
1054 switch (tmp
>> 14) {
1056 ecmd
->port
= PORT_TP
;
1059 ecmd
->port
= PORT_AUI
;
1060 ecmd
->transceiver
= XCVR_EXTERNAL
;
1063 ecmd
->port
= PORT_BNC
;
1068 ecmd
->duplex
= DUPLEX_HALF
;
1069 ecmd
->supported
= 0;
1070 tmp
= inw(ioaddr
+ WN0_CONF_CTRL
);
1072 ecmd
->supported
|= SUPPORTED_AUI
;
1074 ecmd
->supported
|= SUPPORTED_BNC
;
1076 ecmd
->supported
|= SUPPORTED_TP
| SUPPORTED_10baseT_Half
|
1077 SUPPORTED_10baseT_Full
; /* hmm... */
1079 tmp
= inw(ioaddr
+ WN4_NETDIAG
);
1080 if (tmp
& FD_ENABLE
)
1081 ecmd
->duplex
= DUPLEX_FULL
;
1084 ethtool_cmd_speed_set(ecmd
, SPEED_10
);
1090 el3_netdev_set_ecmd(struct net_device
*dev
, struct ethtool_cmd
*ecmd
)
1093 int ioaddr
= dev
->base_addr
;
1095 if (ecmd
->speed
!= SPEED_10
)
1097 if ((ecmd
->duplex
!= DUPLEX_HALF
) && (ecmd
->duplex
!= DUPLEX_FULL
))
1099 if ((ecmd
->transceiver
!= XCVR_INTERNAL
) && (ecmd
->transceiver
!= XCVR_EXTERNAL
))
1102 /* change XCVR type */
1104 tmp
= inw(ioaddr
+ WN0_ADDR_CONF
);
1105 switch (ecmd
->port
) {
1122 outw(tmp
, ioaddr
+ WN0_ADDR_CONF
);
1123 if (dev
->if_port
== 3) {
1124 /* fire up the DC-DC convertor if BNC gets enabled */
1125 tmp
= inw(ioaddr
+ WN0_ADDR_CONF
);
1126 if (tmp
& (3 << 14)) {
1127 outw(StartCoax
, ioaddr
+ EL3_CMD
);
1134 tmp
= inw(ioaddr
+ WN4_NETDIAG
);
1135 if (ecmd
->duplex
== DUPLEX_FULL
)
1139 outw(tmp
, ioaddr
+ WN4_NETDIAG
);
1145 static void el3_get_drvinfo(struct net_device
*dev
, struct ethtool_drvinfo
*info
)
1147 strlcpy(info
->driver
, DRV_NAME
, sizeof(info
->driver
));
1148 strlcpy(info
->version
, DRV_VERSION
, sizeof(info
->version
));
1151 static int el3_get_settings(struct net_device
*dev
, struct ethtool_cmd
*ecmd
)
1153 struct el3_private
*lp
= netdev_priv(dev
);
1156 spin_lock_irq(&lp
->lock
);
1157 ret
= el3_netdev_get_ecmd(dev
, ecmd
);
1158 spin_unlock_irq(&lp
->lock
);
1162 static int el3_set_settings(struct net_device
*dev
, struct ethtool_cmd
*ecmd
)
1164 struct el3_private
*lp
= netdev_priv(dev
);
1167 spin_lock_irq(&lp
->lock
);
1168 ret
= el3_netdev_set_ecmd(dev
, ecmd
);
1169 spin_unlock_irq(&lp
->lock
);
1173 static u32
el3_get_link(struct net_device
*dev
)
1175 struct el3_private
*lp
= netdev_priv(dev
);
1178 spin_lock_irq(&lp
->lock
);
1179 ret
= el3_link_ok(dev
);
1180 spin_unlock_irq(&lp
->lock
);
1184 static u32
el3_get_msglevel(struct net_device
*dev
)
1189 static void el3_set_msglevel(struct net_device
*dev
, u32 v
)
1194 static const struct ethtool_ops ethtool_ops
= {
1195 .get_drvinfo
= el3_get_drvinfo
,
1196 .get_settings
= el3_get_settings
,
1197 .set_settings
= el3_set_settings
,
1198 .get_link
= el3_get_link
,
1199 .get_msglevel
= el3_get_msglevel
,
1200 .set_msglevel
= el3_set_msglevel
,
1204 el3_down(struct net_device
*dev
)
1206 int ioaddr
= dev
->base_addr
;
1208 netif_stop_queue(dev
);
1210 /* Turn off statistics ASAP. We update lp->stats below. */
1211 outw(StatsDisable
, ioaddr
+ EL3_CMD
);
1213 /* Disable the receiver and transmitter. */
1214 outw(RxDisable
, ioaddr
+ EL3_CMD
);
1215 outw(TxDisable
, ioaddr
+ EL3_CMD
);
1217 if (dev
->if_port
== 3)
1218 /* Turn off thinnet power. Green! */
1219 outw(StopCoax
, ioaddr
+ EL3_CMD
);
1220 else if (dev
->if_port
== 0) {
1221 /* Disable link beat and jabber, if_port may change here next open(). */
1223 outw(inw(ioaddr
+ WN4_MEDIA
) & ~MEDIA_TP
, ioaddr
+ WN4_MEDIA
);
1226 outw(SetIntrEnb
| 0x0000, ioaddr
+ EL3_CMD
);
1232 el3_up(struct net_device
*dev
)
1234 int i
, sw_info
, net_diag
;
1235 int ioaddr
= dev
->base_addr
;
1237 /* Activating the board required and does no harm otherwise */
1238 outw(0x0001, ioaddr
+ 4);
1240 /* Set the IRQ line. */
1241 outw((dev
->irq
<< 12) | 0x0f00, ioaddr
+ WN0_IRQ
);
1243 /* Set the station address in window 2 each time opened. */
1246 for (i
= 0; i
< 6; i
++)
1247 outb(dev
->dev_addr
[i
], ioaddr
+ i
);
1249 if ((dev
->if_port
& 0x03) == 3) /* BNC interface */
1250 /* Start the thinnet transceiver. We should really wait 50ms...*/
1251 outw(StartCoax
, ioaddr
+ EL3_CMD
);
1252 else if ((dev
->if_port
& 0x03) == 0) { /* 10baseT interface */
1253 /* Combine secondary sw_info word (the adapter level) and primary
1254 sw_info word (duplex setting plus other useless bits) */
1256 sw_info
= (read_eeprom(ioaddr
, 0x14) & 0x400f) |
1257 (read_eeprom(ioaddr
, 0x0d) & 0xBff0);
1260 net_diag
= inw(ioaddr
+ WN4_NETDIAG
);
1261 net_diag
= (net_diag
| FD_ENABLE
); /* temporarily assume full-duplex will be set */
1262 pr_info("%s: ", dev
->name
);
1263 switch (dev
->if_port
& 0x0c) {
1265 /* force full-duplex mode if 3c5x9b */
1266 if (sw_info
& 0x000f) {
1267 pr_cont("Forcing 3c5x9b full-duplex mode");
1271 /* set full-duplex mode based on eeprom config setting */
1272 if ((sw_info
& 0x000f) && (sw_info
& 0x8000)) {
1273 pr_cont("Setting 3c5x9b full-duplex mode (from EEPROM configuration bit)");
1277 /* xcvr=(0 || 4) OR user has an old 3c5x9 non "B" model */
1278 pr_cont("Setting 3c5x9/3c5x9B half-duplex mode");
1279 net_diag
= (net_diag
& ~FD_ENABLE
); /* disable full duplex */
1282 outw(net_diag
, ioaddr
+ WN4_NETDIAG
);
1283 pr_cont(" if_port: %d, sw_info: %4.4x\n", dev
->if_port
, sw_info
);
1285 pr_debug("%s: 3c5x9 net diag word is now: %4.4x.\n", dev
->name
, net_diag
);
1286 /* Enable link beat and jabber check. */
1287 outw(inw(ioaddr
+ WN4_MEDIA
) | MEDIA_TP
, ioaddr
+ WN4_MEDIA
);
1290 /* Switch to the stats window, and clear all stats by reading. */
1291 outw(StatsDisable
, ioaddr
+ EL3_CMD
);
1293 for (i
= 0; i
< 9; i
++)
1298 /* Switch to register set 1 for normal use. */
1301 /* Accept b-case and phys addr only. */
1302 outw(SetRxFilter
| RxStation
| RxBroadcast
, ioaddr
+ EL3_CMD
);
1303 outw(StatsEnable
, ioaddr
+ EL3_CMD
); /* Turn on statistics. */
1305 outw(RxEnable
, ioaddr
+ EL3_CMD
); /* Enable the receiver. */
1306 outw(TxEnable
, ioaddr
+ EL3_CMD
); /* Enable transmitter. */
1307 /* Allow status bits to be seen. */
1308 outw(SetStatusEnb
| 0xff, ioaddr
+ EL3_CMD
);
1309 /* Ack all pending events, and set active indicator mask. */
1310 outw(AckIntr
| IntLatch
| TxAvailable
| RxEarly
| IntReq
,
1312 outw(SetIntrEnb
| IntLatch
|TxAvailable
|TxComplete
|RxComplete
|StatsFull
,
1315 netif_start_queue(dev
);
1318 /* Power Management support functions */
1322 el3_suspend(struct device
*pdev
, pm_message_t state
)
1324 unsigned long flags
;
1325 struct net_device
*dev
;
1326 struct el3_private
*lp
;
1329 dev
= dev_get_drvdata(pdev
);
1330 lp
= netdev_priv(dev
);
1331 ioaddr
= dev
->base_addr
;
1333 spin_lock_irqsave(&lp
->lock
, flags
);
1335 if (netif_running(dev
))
1336 netif_device_detach(dev
);
1339 outw(PowerDown
, ioaddr
+ EL3_CMD
);
1341 spin_unlock_irqrestore(&lp
->lock
, flags
);
1346 el3_resume(struct device
*pdev
)
1348 unsigned long flags
;
1349 struct net_device
*dev
;
1350 struct el3_private
*lp
;
1353 dev
= dev_get_drvdata(pdev
);
1354 lp
= netdev_priv(dev
);
1355 ioaddr
= dev
->base_addr
;
1357 spin_lock_irqsave(&lp
->lock
, flags
);
1359 outw(PowerUp
, ioaddr
+ EL3_CMD
);
1363 if (netif_running(dev
))
1364 netif_device_attach(dev
);
1366 spin_unlock_irqrestore(&lp
->lock
, flags
);
1370 #endif /* CONFIG_PM */
1372 module_param(debug
,int, 0);
1373 module_param_array(irq
, int, NULL
, 0);
1374 module_param(max_interrupt_work
, int, 0);
1375 MODULE_PARM_DESC(debug
, "debug level (0-6)");
1376 MODULE_PARM_DESC(irq
, "IRQ number(s) (assigned)");
1377 MODULE_PARM_DESC(max_interrupt_work
, "maximum events handled per interrupt");
1379 module_param(nopnp
, int, 0);
1380 MODULE_PARM_DESC(nopnp
, "disable ISA PnP support (0-1)");
1381 #endif /* CONFIG_PNP */
1382 MODULE_DESCRIPTION("3Com Etherlink III (3c509, 3c509B, 3c529, 3c579) ethernet driver");
1383 MODULE_LICENSE("GPL");
1385 static int __init
el3_init_module(void)
1394 ret
= pnp_register_driver(&el3_pnp_driver
);
1399 /* Select an open I/O location at 0x1*0 to do ISA contention select. */
1400 /* Start with 0x110 to avoid some sound cards.*/
1401 for (id_port
= 0x110 ; id_port
< 0x200; id_port
+= 0x10) {
1402 if (!request_region(id_port
, 1, "3c509-control"))
1404 outb(0x00, id_port
);
1405 outb(0xff, id_port
);
1406 if (inb(id_port
) & 0x01)
1409 release_region(id_port
, 1);
1411 if (id_port
>= 0x200) {
1413 pr_err("No I/O port available for 3c509 activation.\n");
1415 ret
= isa_register_driver(&el3_isa_driver
, EL3_MAX_CARDS
);
1420 ret
= eisa_driver_register(&el3_eisa_driver
);
1422 eisa_registered
= 1;
1432 if (eisa_registered
)
1438 static void __exit
el3_cleanup_module(void)
1442 pnp_unregister_driver(&el3_pnp_driver
);
1445 isa_unregister_driver(&el3_isa_driver
);
1447 release_region(id_port
, 1);
1449 if (eisa_registered
)
1450 eisa_driver_unregister(&el3_eisa_driver
);
1454 module_init (el3_init_module
);
1455 module_exit (el3_cleanup_module
);