[NET]: Nuke SET_MODULE_OWNER macro.
[deliverable/linux.git] / drivers / net / 3c509.c
1 /* 3c509.c: A 3c509 EtherLink3 ethernet driver for linux. */
2 /*
3 Written 1993-2000 by Donald Becker.
4
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.
10
11 This driver is for the 3Com EtherLinkIII series.
12
13 The author may be reached as becker@scyld.com, or C/O
14 Scyld Computing Corporation
15 410 Severn Ave., Suite 210
16 Annapolis MD 21403
17
18 Known limitations:
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.
21
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.
26
27
28 FIXES:
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)
34 delays
35 v1.10 4/21/97 Fixed module code so that multiple cards may be detected,
36 other cleanups. -djb
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 <andrewm@uow.edu.au>
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>
47 - ethtool support
48 v1.18b 1Mar2002 Zwane Mwaikambo <zwane@commfireservices.com>
49 - Power Management support
50 v1.18c 1Mar2002 David Ruggiero <jdr@farfalle.com>
51 - Full duplex support
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 */
59
60 #define DRV_NAME "3c509"
61 #define DRV_VERSION "1.19b"
62 #define DRV_RELDATE "08Nov2002"
63
64 /* A few values that may be tweaked. */
65
66 /* Time in jiffies before concluding the transmitter is hung. */
67 #define TX_TIMEOUT (400*HZ/1000)
68 /* Maximum events (Rx packets, etc.) to handle at each interrupt. */
69 static int max_interrupt_work = 10;
70
71 #include <linux/module.h>
72 #ifdef CONFIG_MCA
73 #include <linux/mca.h>
74 #endif
75 #include <linux/isapnp.h>
76 #include <linux/string.h>
77 #include <linux/interrupt.h>
78 #include <linux/errno.h>
79 #include <linux/in.h>
80 #include <linux/slab.h>
81 #include <linux/ioport.h>
82 #include <linux/init.h>
83 #include <linux/netdevice.h>
84 #include <linux/etherdevice.h>
85 #include <linux/pm.h>
86 #include <linux/skbuff.h>
87 #include <linux/delay.h> /* for udelay() */
88 #include <linux/spinlock.h>
89 #include <linux/ethtool.h>
90 #include <linux/device.h>
91 #include <linux/eisa.h>
92 #include <linux/bitops.h>
93
94 #include <asm/uaccess.h>
95 #include <asm/io.h>
96 #include <asm/irq.h>
97
98 static char version[] __initdata = DRV_NAME ".c:" DRV_VERSION " " DRV_RELDATE " becker@scyld.com\n";
99
100 #if defined(CONFIG_PM) && (defined(CONFIG_MCA) || defined(CONFIG_EISA))
101 #define EL3_SUSPEND
102 #endif
103
104 #ifdef EL3_DEBUG
105 static int el3_debug = EL3_DEBUG;
106 #else
107 static int el3_debug = 2;
108 #endif
109
110 /* Used to do a global count of all the cards in the system. Must be
111 * a global variable so that the mca/eisa probe routines can increment
112 * it */
113 static int el3_cards = 0;
114
115 /* To minimize the size of the driver source I only define operating
116 constants if they are used several times. You'll need the manual
117 anyway if you want to understand driver details. */
118 /* Offsets from base I/O address. */
119 #define EL3_DATA 0x00
120 #define EL3_CMD 0x0e
121 #define EL3_STATUS 0x0e
122 #define EEPROM_READ 0x80
123
124 #define EL3_IO_EXTENT 16
125
126 #define EL3WINDOW(win_num) outw(SelectWindow + (win_num), ioaddr + EL3_CMD)
127
128
129 /* The top five bits written to EL3_CMD are a command, the lower
130 11 bits are the parameter, if applicable. */
131 enum c509cmd {
132 TotalReset = 0<<11, SelectWindow = 1<<11, StartCoax = 2<<11,
133 RxDisable = 3<<11, RxEnable = 4<<11, RxReset = 5<<11, RxDiscard = 8<<11,
134 TxEnable = 9<<11, TxDisable = 10<<11, TxReset = 11<<11,
135 FakeIntr = 12<<11, AckIntr = 13<<11, SetIntrEnb = 14<<11,
136 SetStatusEnb = 15<<11, SetRxFilter = 16<<11, SetRxThreshold = 17<<11,
137 SetTxThreshold = 18<<11, SetTxStart = 19<<11, StatsEnable = 21<<11,
138 StatsDisable = 22<<11, StopCoax = 23<<11, PowerUp = 27<<11,
139 PowerDown = 28<<11, PowerAuto = 29<<11};
140
141 enum c509status {
142 IntLatch = 0x0001, AdapterFailure = 0x0002, TxComplete = 0x0004,
143 TxAvailable = 0x0008, RxComplete = 0x0010, RxEarly = 0x0020,
144 IntReq = 0x0040, StatsFull = 0x0080, CmdBusy = 0x1000, };
145
146 /* The SetRxFilter command accepts the following classes: */
147 enum RxFilter {
148 RxStation = 1, RxMulticast = 2, RxBroadcast = 4, RxProm = 8 };
149
150 /* Register window 1 offsets, the window used in normal operation. */
151 #define TX_FIFO 0x00
152 #define RX_FIFO 0x00
153 #define RX_STATUS 0x08
154 #define TX_STATUS 0x0B
155 #define TX_FREE 0x0C /* Remaining free bytes in Tx buffer. */
156
157 #define WN0_CONF_CTRL 0x04 /* Window 0: Configuration control register */
158 #define WN0_ADDR_CONF 0x06 /* Window 0: Address configuration register */
159 #define WN0_IRQ 0x08 /* Window 0: Set IRQ line in bits 12-15. */
160 #define WN4_MEDIA 0x0A /* Window 4: Various transcvr/media bits. */
161 #define MEDIA_TP 0x00C0 /* Enable link beat and jabber for 10baseT. */
162 #define WN4_NETDIAG 0x06 /* Window 4: Net diagnostic */
163 #define FD_ENABLE 0x8000 /* Enable full-duplex ("external loopback") */
164
165 /*
166 * Must be a power of two (we use a binary and in the
167 * circular queue)
168 */
169 #define SKB_QUEUE_SIZE 64
170
171 struct el3_private {
172 struct net_device_stats stats;
173 struct net_device *next_dev;
174 spinlock_t lock;
175 /* skb send-queue */
176 int head, size;
177 struct sk_buff *queue[SKB_QUEUE_SIZE];
178 enum {
179 EL3_MCA,
180 EL3_PNP,
181 EL3_EISA,
182 } type; /* type of device */
183 struct device *dev;
184 };
185 static int id_port __initdata = 0x110; /* Start with 0x110 to avoid new sound cards.*/
186 static struct net_device *el3_root_dev;
187
188 static ushort id_read_eeprom(int index);
189 static ushort read_eeprom(int ioaddr, int index);
190 static int el3_open(struct net_device *dev);
191 static int el3_start_xmit(struct sk_buff *skb, struct net_device *dev);
192 static irqreturn_t el3_interrupt(int irq, void *dev_id);
193 static void update_stats(struct net_device *dev);
194 static struct net_device_stats *el3_get_stats(struct net_device *dev);
195 static int el3_rx(struct net_device *dev);
196 static int el3_close(struct net_device *dev);
197 static void set_multicast_list(struct net_device *dev);
198 static void el3_tx_timeout (struct net_device *dev);
199 static void el3_down(struct net_device *dev);
200 static void el3_up(struct net_device *dev);
201 static const struct ethtool_ops ethtool_ops;
202 #ifdef EL3_SUSPEND
203 static int el3_suspend(struct device *, pm_message_t);
204 static int el3_resume(struct device *);
205 #else
206 #define el3_suspend NULL
207 #define el3_resume NULL
208 #endif
209
210
211 /* generic device remove for all device types */
212 #if defined(CONFIG_EISA) || defined(CONFIG_MCA)
213 static int el3_device_remove (struct device *device);
214 #endif
215 #ifdef CONFIG_NET_POLL_CONTROLLER
216 static void el3_poll_controller(struct net_device *dev);
217 #endif
218
219 #ifdef CONFIG_EISA
220 static struct eisa_device_id el3_eisa_ids[] = {
221 { "TCM5092" },
222 { "TCM5093" },
223 { "TCM5095" },
224 { "" }
225 };
226 MODULE_DEVICE_TABLE(eisa, el3_eisa_ids);
227
228 static int el3_eisa_probe (struct device *device);
229
230 static struct eisa_driver el3_eisa_driver = {
231 .id_table = el3_eisa_ids,
232 .driver = {
233 .name = "3c509",
234 .probe = el3_eisa_probe,
235 .remove = __devexit_p (el3_device_remove),
236 .suspend = el3_suspend,
237 .resume = el3_resume,
238 }
239 };
240 #endif
241
242 #ifdef CONFIG_MCA
243 static int el3_mca_probe(struct device *dev);
244
245 static short el3_mca_adapter_ids[] __initdata = {
246 0x627c,
247 0x627d,
248 0x62db,
249 0x62f6,
250 0x62f7,
251 0x0000
252 };
253
254 static char *el3_mca_adapter_names[] __initdata = {
255 "3Com 3c529 EtherLink III (10base2)",
256 "3Com 3c529 EtherLink III (10baseT)",
257 "3Com 3c529 EtherLink III (test mode)",
258 "3Com 3c529 EtherLink III (TP or coax)",
259 "3Com 3c529 EtherLink III (TP)",
260 NULL
261 };
262
263 static struct mca_driver el3_mca_driver = {
264 .id_table = el3_mca_adapter_ids,
265 .driver = {
266 .name = "3c529",
267 .bus = &mca_bus_type,
268 .probe = el3_mca_probe,
269 .remove = __devexit_p(el3_device_remove),
270 .suspend = el3_suspend,
271 .resume = el3_resume,
272 },
273 };
274 #endif /* CONFIG_MCA */
275
276 #if defined(__ISAPNP__)
277 static struct isapnp_device_id el3_isapnp_adapters[] __initdata = {
278 { ISAPNP_ANY_ID, ISAPNP_ANY_ID,
279 ISAPNP_VENDOR('T', 'C', 'M'), ISAPNP_FUNCTION(0x5090),
280 (long) "3Com Etherlink III (TP)" },
281 { ISAPNP_ANY_ID, ISAPNP_ANY_ID,
282 ISAPNP_VENDOR('T', 'C', 'M'), ISAPNP_FUNCTION(0x5091),
283 (long) "3Com Etherlink III" },
284 { ISAPNP_ANY_ID, ISAPNP_ANY_ID,
285 ISAPNP_VENDOR('T', 'C', 'M'), ISAPNP_FUNCTION(0x5094),
286 (long) "3Com Etherlink III (combo)" },
287 { ISAPNP_ANY_ID, ISAPNP_ANY_ID,
288 ISAPNP_VENDOR('T', 'C', 'M'), ISAPNP_FUNCTION(0x5095),
289 (long) "3Com Etherlink III (TPO)" },
290 { ISAPNP_ANY_ID, ISAPNP_ANY_ID,
291 ISAPNP_VENDOR('T', 'C', 'M'), ISAPNP_FUNCTION(0x5098),
292 (long) "3Com Etherlink III (TPC)" },
293 { ISAPNP_ANY_ID, ISAPNP_ANY_ID,
294 ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_FUNCTION(0x80f7),
295 (long) "3Com Etherlink III compatible" },
296 { ISAPNP_ANY_ID, ISAPNP_ANY_ID,
297 ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_FUNCTION(0x80f8),
298 (long) "3Com Etherlink III compatible" },
299 { } /* terminate list */
300 };
301
302 static u16 el3_isapnp_phys_addr[8][3];
303 static int nopnp;
304 #endif /* __ISAPNP__ */
305
306 /* With the driver model introduction for EISA devices, both init
307 * and cleanup have been split :
308 * - EISA devices probe/remove starts in el3_eisa_probe/el3_device_remove
309 * - MCA/ISA still use el3_probe
310 *
311 * Both call el3_common_init/el3_common_remove. */
312
313 static int __init el3_common_init(struct net_device *dev)
314 {
315 struct el3_private *lp = netdev_priv(dev);
316 short i;
317 int err;
318
319 spin_lock_init(&lp->lock);
320
321 if (dev->mem_start & 0x05) { /* xcvr codes 1/3/4/12 */
322 dev->if_port = (dev->mem_start & 0x0f);
323 } else { /* xcvr codes 0/8 */
324 /* use eeprom value, but save user's full-duplex selection */
325 dev->if_port |= (dev->mem_start & 0x08);
326 }
327
328 /* The EL3-specific entries in the device structure. */
329 dev->open = &el3_open;
330 dev->hard_start_xmit = &el3_start_xmit;
331 dev->stop = &el3_close;
332 dev->get_stats = &el3_get_stats;
333 dev->set_multicast_list = &set_multicast_list;
334 dev->tx_timeout = el3_tx_timeout;
335 dev->watchdog_timeo = TX_TIMEOUT;
336 #ifdef CONFIG_NET_POLL_CONTROLLER
337 dev->poll_controller = el3_poll_controller;
338 #endif
339 SET_ETHTOOL_OPS(dev, &ethtool_ops);
340
341 err = register_netdev(dev);
342 if (err) {
343 printk(KERN_ERR "Failed to register 3c5x9 at %#3.3lx, IRQ %d.\n",
344 dev->base_addr, dev->irq);
345 release_region(dev->base_addr, EL3_IO_EXTENT);
346 return err;
347 }
348
349 {
350 const char *if_names[] = {"10baseT", "AUI", "undefined", "BNC"};
351 printk("%s: 3c5x9 found at %#3.3lx, %s port, address ",
352 dev->name, dev->base_addr,
353 if_names[(dev->if_port & 0x03)]);
354 }
355
356 /* Read in the station address. */
357 for (i = 0; i < 6; i++)
358 printk(" %2.2x", dev->dev_addr[i]);
359 printk(", IRQ %d.\n", dev->irq);
360
361 if (el3_debug > 0)
362 printk(KERN_INFO "%s", version);
363 return 0;
364
365 }
366
367 static void el3_common_remove (struct net_device *dev)
368 {
369 struct el3_private *lp = netdev_priv(dev);
370
371 (void) lp; /* Keep gcc quiet... */
372 #if defined(__ISAPNP__)
373 if (lp->type == EL3_PNP)
374 pnp_device_detach(to_pnp_dev(lp->dev));
375 #endif
376
377 unregister_netdev (dev);
378 release_region(dev->base_addr, EL3_IO_EXTENT);
379 free_netdev (dev);
380 }
381
382 static int __init el3_probe(int card_idx)
383 {
384 struct net_device *dev;
385 struct el3_private *lp;
386 short lrs_state = 0xff, i;
387 int ioaddr, irq, if_port;
388 u16 phys_addr[3];
389 static int current_tag;
390 int err = -ENODEV;
391 #if defined(__ISAPNP__)
392 static int pnp_cards;
393 struct pnp_dev *idev = NULL;
394
395 if (nopnp == 1)
396 goto no_pnp;
397
398 for (i=0; el3_isapnp_adapters[i].vendor != 0; i++) {
399 int j;
400 while ((idev = pnp_find_dev(NULL,
401 el3_isapnp_adapters[i].vendor,
402 el3_isapnp_adapters[i].function,
403 idev))) {
404 if (pnp_device_attach(idev) < 0)
405 continue;
406 if (pnp_activate_dev(idev) < 0) {
407 __again:
408 pnp_device_detach(idev);
409 continue;
410 }
411 if (!pnp_port_valid(idev, 0) || !pnp_irq_valid(idev, 0))
412 goto __again;
413 ioaddr = pnp_port_start(idev, 0);
414 if (!request_region(ioaddr, EL3_IO_EXTENT, "3c509 PnP")) {
415 pnp_device_detach(idev);
416 return -EBUSY;
417 }
418 irq = pnp_irq(idev, 0);
419 if (el3_debug > 3)
420 printk ("ISAPnP reports %s at i/o 0x%x, irq %d\n",
421 (char*) el3_isapnp_adapters[i].driver_data, ioaddr, irq);
422 EL3WINDOW(0);
423 for (j = 0; j < 3; j++)
424 el3_isapnp_phys_addr[pnp_cards][j] =
425 phys_addr[j] =
426 htons(read_eeprom(ioaddr, j));
427 if_port = read_eeprom(ioaddr, 8) >> 14;
428 dev = alloc_etherdev(sizeof (struct el3_private));
429 if (!dev) {
430 release_region(ioaddr, EL3_IO_EXTENT);
431 pnp_device_detach(idev);
432 return -ENOMEM;
433 }
434
435 SET_NETDEV_DEV(dev, &idev->dev);
436 pnp_cards++;
437
438 netdev_boot_setup_check(dev);
439 goto found;
440 }
441 }
442 no_pnp:
443 #endif /* __ISAPNP__ */
444
445 /* Select an open I/O location at 0x1*0 to do contention select. */
446 for ( ; id_port < 0x200; id_port += 0x10) {
447 if (!request_region(id_port, 1, "3c509"))
448 continue;
449 outb(0x00, id_port);
450 outb(0xff, id_port);
451 if (inb(id_port) & 0x01){
452 release_region(id_port, 1);
453 break;
454 } else
455 release_region(id_port, 1);
456 }
457 if (id_port >= 0x200) {
458 /* Rare -- do we really need a warning? */
459 printk(" WARNING: No I/O port available for 3c509 activation.\n");
460 return -ENODEV;
461 }
462
463 /* Next check for all ISA bus boards by sending the ID sequence to the
464 ID_PORT. We find cards past the first by setting the 'current_tag'
465 on cards as they are found. Cards with their tag set will not
466 respond to subsequent ID sequences. */
467
468 outb(0x00, id_port);
469 outb(0x00, id_port);
470 for(i = 0; i < 255; i++) {
471 outb(lrs_state, id_port);
472 lrs_state <<= 1;
473 lrs_state = lrs_state & 0x100 ? lrs_state ^ 0xcf : lrs_state;
474 }
475
476 /* For the first probe, clear all board's tag registers. */
477 if (current_tag == 0)
478 outb(0xd0, id_port);
479 else /* Otherwise kill off already-found boards. */
480 outb(0xd8, id_port);
481
482 if (id_read_eeprom(7) != 0x6d50) {
483 return -ENODEV;
484 }
485
486 /* Read in EEPROM data, which does contention-select.
487 Only the lowest address board will stay "on-line".
488 3Com got the byte order backwards. */
489 for (i = 0; i < 3; i++) {
490 phys_addr[i] = htons(id_read_eeprom(i));
491 }
492
493 #if defined(__ISAPNP__)
494 if (nopnp == 0) {
495 /* The ISA PnP 3c509 cards respond to the ID sequence.
496 This check is needed in order not to register them twice. */
497 for (i = 0; i < pnp_cards; i++) {
498 if (phys_addr[0] == el3_isapnp_phys_addr[i][0] &&
499 phys_addr[1] == el3_isapnp_phys_addr[i][1] &&
500 phys_addr[2] == el3_isapnp_phys_addr[i][2])
501 {
502 if (el3_debug > 3)
503 printk("3c509 with address %02x %02x %02x %02x %02x %02x was found by ISAPnP\n",
504 phys_addr[0] & 0xff, phys_addr[0] >> 8,
505 phys_addr[1] & 0xff, phys_addr[1] >> 8,
506 phys_addr[2] & 0xff, phys_addr[2] >> 8);
507 /* Set the adaptor tag so that the next card can be found. */
508 outb(0xd0 + ++current_tag, id_port);
509 goto no_pnp;
510 }
511 }
512 }
513 #endif /* __ISAPNP__ */
514
515 {
516 unsigned int iobase = id_read_eeprom(8);
517 if_port = iobase >> 14;
518 ioaddr = 0x200 + ((iobase & 0x1f) << 4);
519 }
520 irq = id_read_eeprom(9) >> 12;
521
522 dev = alloc_etherdev(sizeof (struct el3_private));
523 if (!dev)
524 return -ENOMEM;
525
526 netdev_boot_setup_check(dev);
527
528 /* Set passed-in IRQ or I/O Addr. */
529 if (dev->irq > 1 && dev->irq < 16)
530 irq = dev->irq;
531
532 if (dev->base_addr) {
533 if (dev->mem_end == 0x3c509 /* Magic key */
534 && dev->base_addr >= 0x200 && dev->base_addr <= 0x3e0)
535 ioaddr = dev->base_addr & 0x3f0;
536 else if (dev->base_addr != ioaddr)
537 goto out;
538 }
539
540 if (!request_region(ioaddr, EL3_IO_EXTENT, "3c509")) {
541 err = -EBUSY;
542 goto out;
543 }
544
545 /* Set the adaptor tag so that the next card can be found. */
546 outb(0xd0 + ++current_tag, id_port);
547
548 /* Activate the adaptor at the EEPROM location. */
549 outb((ioaddr >> 4) | 0xe0, id_port);
550
551 EL3WINDOW(0);
552 if (inw(ioaddr) != 0x6d50)
553 goto out1;
554
555 /* Free the interrupt so that some other card can use it. */
556 outw(0x0f00, ioaddr + WN0_IRQ);
557
558 #if defined(__ISAPNP__)
559 found: /* PNP jumps here... */
560 #endif /* __ISAPNP__ */
561
562 memcpy(dev->dev_addr, phys_addr, sizeof(phys_addr));
563 dev->base_addr = ioaddr;
564 dev->irq = irq;
565 dev->if_port = if_port;
566 lp = netdev_priv(dev);
567 #if defined(__ISAPNP__)
568 lp->dev = &idev->dev;
569 #endif
570 err = el3_common_init(dev);
571
572 if (err)
573 goto out1;
574
575 el3_cards++;
576 lp->next_dev = el3_root_dev;
577 el3_root_dev = dev;
578 return 0;
579
580 out1:
581 #if defined(__ISAPNP__)
582 if (idev)
583 pnp_device_detach(idev);
584 #endif
585 out:
586 free_netdev(dev);
587 return err;
588 }
589
590 #ifdef CONFIG_MCA
591 static int __init el3_mca_probe(struct device *device)
592 {
593 /* Based on Erik Nygren's (nygren@mit.edu) 3c529 patch,
594 * heavily modified by Chris Beauregard
595 * (cpbeaure@csclub.uwaterloo.ca) to support standard MCA
596 * probing.
597 *
598 * redone for multi-card detection by ZP Gu (zpg@castle.net)
599 * now works as a module */
600
601 struct el3_private *lp;
602 short i;
603 int ioaddr, irq, if_port;
604 u16 phys_addr[3];
605 struct net_device *dev = NULL;
606 u_char pos4, pos5;
607 struct mca_device *mdev = to_mca_device(device);
608 int slot = mdev->slot;
609 int err;
610
611 pos4 = mca_device_read_stored_pos(mdev, 4);
612 pos5 = mca_device_read_stored_pos(mdev, 5);
613
614 ioaddr = ((short)((pos4&0xfc)|0x02)) << 8;
615 irq = pos5 & 0x0f;
616
617
618 printk("3c529: found %s at slot %d\n",
619 el3_mca_adapter_names[mdev->index], slot + 1);
620
621 /* claim the slot */
622 strncpy(mdev->name, el3_mca_adapter_names[mdev->index],
623 sizeof(mdev->name));
624 mca_device_set_claim(mdev, 1);
625
626 if_port = pos4 & 0x03;
627
628 irq = mca_device_transform_irq(mdev, irq);
629 ioaddr = mca_device_transform_ioport(mdev, ioaddr);
630 if (el3_debug > 2) {
631 printk("3c529: irq %d ioaddr 0x%x ifport %d\n", irq, ioaddr, if_port);
632 }
633 EL3WINDOW(0);
634 for (i = 0; i < 3; i++) {
635 phys_addr[i] = htons(read_eeprom(ioaddr, i));
636 }
637
638 dev = alloc_etherdev(sizeof (struct el3_private));
639 if (dev == NULL) {
640 release_region(ioaddr, EL3_IO_EXTENT);
641 return -ENOMEM;
642 }
643
644 netdev_boot_setup_check(dev);
645
646 memcpy(dev->dev_addr, phys_addr, sizeof(phys_addr));
647 dev->base_addr = ioaddr;
648 dev->irq = irq;
649 dev->if_port = if_port;
650 lp = netdev_priv(dev);
651 lp->dev = device;
652 lp->type = EL3_MCA;
653 device->driver_data = dev;
654 err = el3_common_init(dev);
655
656 if (err) {
657 device->driver_data = NULL;
658 free_netdev(dev);
659 return -ENOMEM;
660 }
661
662 el3_cards++;
663 return 0;
664 }
665
666 #endif /* CONFIG_MCA */
667
668 #ifdef CONFIG_EISA
669 static int __init el3_eisa_probe (struct device *device)
670 {
671 struct el3_private *lp;
672 short i;
673 int ioaddr, irq, if_port;
674 u16 phys_addr[3];
675 struct net_device *dev = NULL;
676 struct eisa_device *edev;
677 int err;
678
679 /* Yeepee, The driver framework is calling us ! */
680 edev = to_eisa_device (device);
681 ioaddr = edev->base_addr;
682
683 if (!request_region(ioaddr, EL3_IO_EXTENT, "3c509"))
684 return -EBUSY;
685
686 /* Change the register set to the configuration window 0. */
687 outw(SelectWindow | 0, ioaddr + 0xC80 + EL3_CMD);
688
689 irq = inw(ioaddr + WN0_IRQ) >> 12;
690 if_port = inw(ioaddr + 6)>>14;
691 for (i = 0; i < 3; i++)
692 phys_addr[i] = htons(read_eeprom(ioaddr, i));
693
694 /* Restore the "Product ID" to the EEPROM read register. */
695 read_eeprom(ioaddr, 3);
696
697 dev = alloc_etherdev(sizeof (struct el3_private));
698 if (dev == NULL) {
699 release_region(ioaddr, EL3_IO_EXTENT);
700 return -ENOMEM;
701 }
702
703 netdev_boot_setup_check(dev);
704
705 memcpy(dev->dev_addr, phys_addr, sizeof(phys_addr));
706 dev->base_addr = ioaddr;
707 dev->irq = irq;
708 dev->if_port = if_port;
709 lp = netdev_priv(dev);
710 lp->dev = device;
711 lp->type = EL3_EISA;
712 eisa_set_drvdata (edev, dev);
713 err = el3_common_init(dev);
714
715 if (err) {
716 eisa_set_drvdata (edev, NULL);
717 free_netdev(dev);
718 return err;
719 }
720
721 el3_cards++;
722 return 0;
723 }
724 #endif
725
726 #if defined(CONFIG_EISA) || defined(CONFIG_MCA)
727 /* This remove works for all device types.
728 *
729 * The net dev must be stored in the driver_data field */
730 static int __devexit el3_device_remove (struct device *device)
731 {
732 struct net_device *dev;
733
734 dev = device->driver_data;
735
736 el3_common_remove (dev);
737 return 0;
738 }
739 #endif
740
741 /* Read a word from the EEPROM using the regular EEPROM access register.
742 Assume that we are in register window zero.
743 */
744 static ushort read_eeprom(int ioaddr, int index)
745 {
746 outw(EEPROM_READ + index, ioaddr + 10);
747 /* Pause for at least 162 us. for the read to take place.
748 Some chips seem to require much longer */
749 mdelay(2);
750 return inw(ioaddr + 12);
751 }
752
753 /* Read a word from the EEPROM when in the ISA ID probe state. */
754 static ushort __init id_read_eeprom(int index)
755 {
756 int bit, word = 0;
757
758 /* Issue read command, and pause for at least 162 us. for it to complete.
759 Assume extra-fast 16Mhz bus. */
760 outb(EEPROM_READ + index, id_port);
761
762 /* Pause for at least 162 us. for the read to take place. */
763 /* Some chips seem to require much longer */
764 mdelay(4);
765
766 for (bit = 15; bit >= 0; bit--)
767 word = (word << 1) + (inb(id_port) & 0x01);
768
769 if (el3_debug > 3)
770 printk(" 3c509 EEPROM word %d %#4.4x.\n", index, word);
771
772 return word;
773 }
774
775
776 static int
777 el3_open(struct net_device *dev)
778 {
779 int ioaddr = dev->base_addr;
780 int i;
781
782 outw(TxReset, ioaddr + EL3_CMD);
783 outw(RxReset, ioaddr + EL3_CMD);
784 outw(SetStatusEnb | 0x00, ioaddr + EL3_CMD);
785
786 i = request_irq(dev->irq, &el3_interrupt, 0, dev->name, dev);
787 if (i)
788 return i;
789
790 EL3WINDOW(0);
791 if (el3_debug > 3)
792 printk("%s: Opening, IRQ %d status@%x %4.4x.\n", dev->name,
793 dev->irq, ioaddr + EL3_STATUS, inw(ioaddr + EL3_STATUS));
794
795 el3_up(dev);
796
797 if (el3_debug > 3)
798 printk("%s: Opened 3c509 IRQ %d status %4.4x.\n",
799 dev->name, dev->irq, inw(ioaddr + EL3_STATUS));
800
801 return 0;
802 }
803
804 static void
805 el3_tx_timeout (struct net_device *dev)
806 {
807 struct el3_private *lp = netdev_priv(dev);
808 int ioaddr = dev->base_addr;
809
810 /* Transmitter timeout, serious problems. */
811 printk("%s: transmit timed out, Tx_status %2.2x status %4.4x "
812 "Tx FIFO room %d.\n",
813 dev->name, inb(ioaddr + TX_STATUS), inw(ioaddr + EL3_STATUS),
814 inw(ioaddr + TX_FREE));
815 lp->stats.tx_errors++;
816 dev->trans_start = jiffies;
817 /* Issue TX_RESET and TX_START commands. */
818 outw(TxReset, ioaddr + EL3_CMD);
819 outw(TxEnable, ioaddr + EL3_CMD);
820 netif_wake_queue(dev);
821 }
822
823
824 static int
825 el3_start_xmit(struct sk_buff *skb, struct net_device *dev)
826 {
827 struct el3_private *lp = netdev_priv(dev);
828 int ioaddr = dev->base_addr;
829 unsigned long flags;
830
831 netif_stop_queue (dev);
832
833 lp->stats.tx_bytes += skb->len;
834
835 if (el3_debug > 4) {
836 printk("%s: el3_start_xmit(length = %u) called, status %4.4x.\n",
837 dev->name, skb->len, inw(ioaddr + EL3_STATUS));
838 }
839 #if 0
840 #ifndef final_version
841 { /* Error-checking code, delete someday. */
842 ushort status = inw(ioaddr + EL3_STATUS);
843 if (status & 0x0001 /* IRQ line active, missed one. */
844 && inw(ioaddr + EL3_STATUS) & 1) { /* Make sure. */
845 printk("%s: Missed interrupt, status then %04x now %04x"
846 " Tx %2.2x Rx %4.4x.\n", dev->name, status,
847 inw(ioaddr + EL3_STATUS), inb(ioaddr + TX_STATUS),
848 inw(ioaddr + RX_STATUS));
849 /* Fake interrupt trigger by masking, acknowledge interrupts. */
850 outw(SetStatusEnb | 0x00, ioaddr + EL3_CMD);
851 outw(AckIntr | IntLatch | TxAvailable | RxEarly | IntReq,
852 ioaddr + EL3_CMD);
853 outw(SetStatusEnb | 0xff, ioaddr + EL3_CMD);
854 }
855 }
856 #endif
857 #endif
858 /*
859 * We lock the driver against other processors. Note
860 * we don't need to lock versus the IRQ as we suspended
861 * that. This means that we lose the ability to take
862 * an RX during a TX upload. That sucks a bit with SMP
863 * on an original 3c509 (2K buffer)
864 *
865 * Using disable_irq stops us crapping on other
866 * time sensitive devices.
867 */
868
869 spin_lock_irqsave(&lp->lock, flags);
870
871 /* Put out the doubleword header... */
872 outw(skb->len, ioaddr + TX_FIFO);
873 outw(0x00, ioaddr + TX_FIFO);
874 /* ... and the packet rounded to a doubleword. */
875 outsl(ioaddr + TX_FIFO, skb->data, (skb->len + 3) >> 2);
876
877 dev->trans_start = jiffies;
878 if (inw(ioaddr + TX_FREE) > 1536)
879 netif_start_queue(dev);
880 else
881 /* Interrupt us when the FIFO has room for max-sized packet. */
882 outw(SetTxThreshold + 1536, ioaddr + EL3_CMD);
883
884 spin_unlock_irqrestore(&lp->lock, flags);
885
886 dev_kfree_skb (skb);
887
888 /* Clear the Tx status stack. */
889 {
890 short tx_status;
891 int i = 4;
892
893 while (--i > 0 && (tx_status = inb(ioaddr + TX_STATUS)) > 0) {
894 if (tx_status & 0x38) lp->stats.tx_aborted_errors++;
895 if (tx_status & 0x30) outw(TxReset, ioaddr + EL3_CMD);
896 if (tx_status & 0x3C) outw(TxEnable, ioaddr + EL3_CMD);
897 outb(0x00, ioaddr + TX_STATUS); /* Pop the status stack. */
898 }
899 }
900 return 0;
901 }
902
903 /* The EL3 interrupt handler. */
904 static irqreturn_t
905 el3_interrupt(int irq, void *dev_id)
906 {
907 struct net_device *dev = dev_id;
908 struct el3_private *lp;
909 int ioaddr, status;
910 int i = max_interrupt_work;
911
912 lp = netdev_priv(dev);
913 spin_lock(&lp->lock);
914
915 ioaddr = dev->base_addr;
916
917 if (el3_debug > 4) {
918 status = inw(ioaddr + EL3_STATUS);
919 printk("%s: interrupt, status %4.4x.\n", dev->name, status);
920 }
921
922 while ((status = inw(ioaddr + EL3_STATUS)) &
923 (IntLatch | RxComplete | StatsFull)) {
924
925 if (status & RxComplete)
926 el3_rx(dev);
927
928 if (status & TxAvailable) {
929 if (el3_debug > 5)
930 printk(" TX room bit was handled.\n");
931 /* There's room in the FIFO for a full-sized packet. */
932 outw(AckIntr | TxAvailable, ioaddr + EL3_CMD);
933 netif_wake_queue (dev);
934 }
935 if (status & (AdapterFailure | RxEarly | StatsFull | TxComplete)) {
936 /* Handle all uncommon interrupts. */
937 if (status & StatsFull) /* Empty statistics. */
938 update_stats(dev);
939 if (status & RxEarly) { /* Rx early is unused. */
940 el3_rx(dev);
941 outw(AckIntr | RxEarly, ioaddr + EL3_CMD);
942 }
943 if (status & TxComplete) { /* Really Tx error. */
944 struct el3_private *lp = netdev_priv(dev);
945 short tx_status;
946 int i = 4;
947
948 while (--i>0 && (tx_status = inb(ioaddr + TX_STATUS)) > 0) {
949 if (tx_status & 0x38) lp->stats.tx_aborted_errors++;
950 if (tx_status & 0x30) outw(TxReset, ioaddr + EL3_CMD);
951 if (tx_status & 0x3C) outw(TxEnable, ioaddr + EL3_CMD);
952 outb(0x00, ioaddr + TX_STATUS); /* Pop the status stack. */
953 }
954 }
955 if (status & AdapterFailure) {
956 /* Adapter failure requires Rx reset and reinit. */
957 outw(RxReset, ioaddr + EL3_CMD);
958 /* Set the Rx filter to the current state. */
959 outw(SetRxFilter | RxStation | RxBroadcast
960 | (dev->flags & IFF_ALLMULTI ? RxMulticast : 0)
961 | (dev->flags & IFF_PROMISC ? RxProm : 0),
962 ioaddr + EL3_CMD);
963 outw(RxEnable, ioaddr + EL3_CMD); /* Re-enable the receiver. */
964 outw(AckIntr | AdapterFailure, ioaddr + EL3_CMD);
965 }
966 }
967
968 if (--i < 0) {
969 printk("%s: Infinite loop in interrupt, status %4.4x.\n",
970 dev->name, status);
971 /* Clear all interrupts. */
972 outw(AckIntr | 0xFF, ioaddr + EL3_CMD);
973 break;
974 }
975 /* Acknowledge the IRQ. */
976 outw(AckIntr | IntReq | IntLatch, ioaddr + EL3_CMD); /* Ack IRQ */
977 }
978
979 if (el3_debug > 4) {
980 printk("%s: exiting interrupt, status %4.4x.\n", dev->name,
981 inw(ioaddr + EL3_STATUS));
982 }
983 spin_unlock(&lp->lock);
984 return IRQ_HANDLED;
985 }
986
987
988 #ifdef CONFIG_NET_POLL_CONTROLLER
989 /*
990 * Polling receive - used by netconsole and other diagnostic tools
991 * to allow network i/o with interrupts disabled.
992 */
993 static void el3_poll_controller(struct net_device *dev)
994 {
995 disable_irq(dev->irq);
996 el3_interrupt(dev->irq, dev);
997 enable_irq(dev->irq);
998 }
999 #endif
1000
1001 static struct net_device_stats *
1002 el3_get_stats(struct net_device *dev)
1003 {
1004 struct el3_private *lp = netdev_priv(dev);
1005 unsigned long flags;
1006
1007 /*
1008 * This is fast enough not to bother with disable IRQ
1009 * stuff.
1010 */
1011
1012 spin_lock_irqsave(&lp->lock, flags);
1013 update_stats(dev);
1014 spin_unlock_irqrestore(&lp->lock, flags);
1015 return &lp->stats;
1016 }
1017
1018 /* Update statistics. We change to register window 6, so this should be run
1019 single-threaded if the device is active. This is expected to be a rare
1020 operation, and it's simpler for the rest of the driver to assume that
1021 window 1 is always valid rather than use a special window-state variable.
1022 */
1023 static void update_stats(struct net_device *dev)
1024 {
1025 struct el3_private *lp = netdev_priv(dev);
1026 int ioaddr = dev->base_addr;
1027
1028 if (el3_debug > 5)
1029 printk(" Updating the statistics.\n");
1030 /* Turn off statistics updates while reading. */
1031 outw(StatsDisable, ioaddr + EL3_CMD);
1032 /* Switch to the stats window, and read everything. */
1033 EL3WINDOW(6);
1034 lp->stats.tx_carrier_errors += inb(ioaddr + 0);
1035 lp->stats.tx_heartbeat_errors += inb(ioaddr + 1);
1036 /* Multiple collisions. */ inb(ioaddr + 2);
1037 lp->stats.collisions += inb(ioaddr + 3);
1038 lp->stats.tx_window_errors += inb(ioaddr + 4);
1039 lp->stats.rx_fifo_errors += inb(ioaddr + 5);
1040 lp->stats.tx_packets += inb(ioaddr + 6);
1041 /* Rx packets */ inb(ioaddr + 7);
1042 /* Tx deferrals */ inb(ioaddr + 8);
1043 inw(ioaddr + 10); /* Total Rx and Tx octets. */
1044 inw(ioaddr + 12);
1045
1046 /* Back to window 1, and turn statistics back on. */
1047 EL3WINDOW(1);
1048 outw(StatsEnable, ioaddr + EL3_CMD);
1049 return;
1050 }
1051
1052 static int
1053 el3_rx(struct net_device *dev)
1054 {
1055 struct el3_private *lp = netdev_priv(dev);
1056 int ioaddr = dev->base_addr;
1057 short rx_status;
1058
1059 if (el3_debug > 5)
1060 printk(" In rx_packet(), status %4.4x, rx_status %4.4x.\n",
1061 inw(ioaddr+EL3_STATUS), inw(ioaddr+RX_STATUS));
1062 while ((rx_status = inw(ioaddr + RX_STATUS)) > 0) {
1063 if (rx_status & 0x4000) { /* Error, update stats. */
1064 short error = rx_status & 0x3800;
1065
1066 outw(RxDiscard, ioaddr + EL3_CMD);
1067 lp->stats.rx_errors++;
1068 switch (error) {
1069 case 0x0000: lp->stats.rx_over_errors++; break;
1070 case 0x0800: lp->stats.rx_length_errors++; break;
1071 case 0x1000: lp->stats.rx_frame_errors++; break;
1072 case 0x1800: lp->stats.rx_length_errors++; break;
1073 case 0x2000: lp->stats.rx_frame_errors++; break;
1074 case 0x2800: lp->stats.rx_crc_errors++; break;
1075 }
1076 } else {
1077 short pkt_len = rx_status & 0x7ff;
1078 struct sk_buff *skb;
1079
1080 skb = dev_alloc_skb(pkt_len+5);
1081 lp->stats.rx_bytes += pkt_len;
1082 if (el3_debug > 4)
1083 printk("Receiving packet size %d status %4.4x.\n",
1084 pkt_len, rx_status);
1085 if (skb != NULL) {
1086 skb_reserve(skb, 2); /* Align IP on 16 byte */
1087
1088 /* 'skb->data' points to the start of sk_buff data area. */
1089 insl(ioaddr + RX_FIFO, skb_put(skb,pkt_len),
1090 (pkt_len + 3) >> 2);
1091
1092 outw(RxDiscard, ioaddr + EL3_CMD); /* Pop top Rx packet. */
1093 skb->protocol = eth_type_trans(skb,dev);
1094 netif_rx(skb);
1095 dev->last_rx = jiffies;
1096 lp->stats.rx_packets++;
1097 continue;
1098 }
1099 outw(RxDiscard, ioaddr + EL3_CMD);
1100 lp->stats.rx_dropped++;
1101 if (el3_debug)
1102 printk("%s: Couldn't allocate a sk_buff of size %d.\n",
1103 dev->name, pkt_len);
1104 }
1105 inw(ioaddr + EL3_STATUS); /* Delay. */
1106 while (inw(ioaddr + EL3_STATUS) & 0x1000)
1107 printk(KERN_DEBUG " Waiting for 3c509 to discard packet, status %x.\n",
1108 inw(ioaddr + EL3_STATUS) );
1109 }
1110
1111 return 0;
1112 }
1113
1114 /*
1115 * Set or clear the multicast filter for this adaptor.
1116 */
1117 static void
1118 set_multicast_list(struct net_device *dev)
1119 {
1120 unsigned long flags;
1121 struct el3_private *lp = netdev_priv(dev);
1122 int ioaddr = dev->base_addr;
1123
1124 if (el3_debug > 1) {
1125 static int old;
1126 if (old != dev->mc_count) {
1127 old = dev->mc_count;
1128 printk("%s: Setting Rx mode to %d addresses.\n", dev->name, dev->mc_count);
1129 }
1130 }
1131 spin_lock_irqsave(&lp->lock, flags);
1132 if (dev->flags&IFF_PROMISC) {
1133 outw(SetRxFilter | RxStation | RxMulticast | RxBroadcast | RxProm,
1134 ioaddr + EL3_CMD);
1135 }
1136 else if (dev->mc_count || (dev->flags&IFF_ALLMULTI)) {
1137 outw(SetRxFilter | RxStation | RxMulticast | RxBroadcast, ioaddr + EL3_CMD);
1138 }
1139 else
1140 outw(SetRxFilter | RxStation | RxBroadcast, ioaddr + EL3_CMD);
1141 spin_unlock_irqrestore(&lp->lock, flags);
1142 }
1143
1144 static int
1145 el3_close(struct net_device *dev)
1146 {
1147 int ioaddr = dev->base_addr;
1148 struct el3_private *lp = netdev_priv(dev);
1149
1150 if (el3_debug > 2)
1151 printk("%s: Shutting down ethercard.\n", dev->name);
1152
1153 el3_down(dev);
1154
1155 free_irq(dev->irq, dev);
1156 /* Switching back to window 0 disables the IRQ. */
1157 EL3WINDOW(0);
1158 if (lp->type != EL3_EISA) {
1159 /* But we explicitly zero the IRQ line select anyway. Don't do
1160 * it on EISA cards, it prevents the module from getting an
1161 * IRQ after unload+reload... */
1162 outw(0x0f00, ioaddr + WN0_IRQ);
1163 }
1164
1165 return 0;
1166 }
1167
1168 static int
1169 el3_link_ok(struct net_device *dev)
1170 {
1171 int ioaddr = dev->base_addr;
1172 u16 tmp;
1173
1174 EL3WINDOW(4);
1175 tmp = inw(ioaddr + WN4_MEDIA);
1176 EL3WINDOW(1);
1177 return tmp & (1<<11);
1178 }
1179
1180 static int
1181 el3_netdev_get_ecmd(struct net_device *dev, struct ethtool_cmd *ecmd)
1182 {
1183 u16 tmp;
1184 int ioaddr = dev->base_addr;
1185
1186 EL3WINDOW(0);
1187 /* obtain current transceiver via WN4_MEDIA? */
1188 tmp = inw(ioaddr + WN0_ADDR_CONF);
1189 ecmd->transceiver = XCVR_INTERNAL;
1190 switch (tmp >> 14) {
1191 case 0:
1192 ecmd->port = PORT_TP;
1193 break;
1194 case 1:
1195 ecmd->port = PORT_AUI;
1196 ecmd->transceiver = XCVR_EXTERNAL;
1197 break;
1198 case 3:
1199 ecmd->port = PORT_BNC;
1200 default:
1201 break;
1202 }
1203
1204 ecmd->duplex = DUPLEX_HALF;
1205 ecmd->supported = 0;
1206 tmp = inw(ioaddr + WN0_CONF_CTRL);
1207 if (tmp & (1<<13))
1208 ecmd->supported |= SUPPORTED_AUI;
1209 if (tmp & (1<<12))
1210 ecmd->supported |= SUPPORTED_BNC;
1211 if (tmp & (1<<9)) {
1212 ecmd->supported |= SUPPORTED_TP | SUPPORTED_10baseT_Half |
1213 SUPPORTED_10baseT_Full; /* hmm... */
1214 EL3WINDOW(4);
1215 tmp = inw(ioaddr + WN4_NETDIAG);
1216 if (tmp & FD_ENABLE)
1217 ecmd->duplex = DUPLEX_FULL;
1218 }
1219
1220 ecmd->speed = SPEED_10;
1221 EL3WINDOW(1);
1222 return 0;
1223 }
1224
1225 static int
1226 el3_netdev_set_ecmd(struct net_device *dev, struct ethtool_cmd *ecmd)
1227 {
1228 u16 tmp;
1229 int ioaddr = dev->base_addr;
1230
1231 if (ecmd->speed != SPEED_10)
1232 return -EINVAL;
1233 if ((ecmd->duplex != DUPLEX_HALF) && (ecmd->duplex != DUPLEX_FULL))
1234 return -EINVAL;
1235 if ((ecmd->transceiver != XCVR_INTERNAL) && (ecmd->transceiver != XCVR_EXTERNAL))
1236 return -EINVAL;
1237
1238 /* change XCVR type */
1239 EL3WINDOW(0);
1240 tmp = inw(ioaddr + WN0_ADDR_CONF);
1241 switch (ecmd->port) {
1242 case PORT_TP:
1243 tmp &= ~(3<<14);
1244 dev->if_port = 0;
1245 break;
1246 case PORT_AUI:
1247 tmp |= (1<<14);
1248 dev->if_port = 1;
1249 break;
1250 case PORT_BNC:
1251 tmp |= (3<<14);
1252 dev->if_port = 3;
1253 break;
1254 default:
1255 return -EINVAL;
1256 }
1257
1258 outw(tmp, ioaddr + WN0_ADDR_CONF);
1259 if (dev->if_port == 3) {
1260 /* fire up the DC-DC convertor if BNC gets enabled */
1261 tmp = inw(ioaddr + WN0_ADDR_CONF);
1262 if (tmp & (3 << 14)) {
1263 outw(StartCoax, ioaddr + EL3_CMD);
1264 udelay(800);
1265 } else
1266 return -EIO;
1267 }
1268
1269 EL3WINDOW(4);
1270 tmp = inw(ioaddr + WN4_NETDIAG);
1271 if (ecmd->duplex == DUPLEX_FULL)
1272 tmp |= FD_ENABLE;
1273 else
1274 tmp &= ~FD_ENABLE;
1275 outw(tmp, ioaddr + WN4_NETDIAG);
1276 EL3WINDOW(1);
1277
1278 return 0;
1279 }
1280
1281 static void el3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
1282 {
1283 strcpy(info->driver, DRV_NAME);
1284 strcpy(info->version, DRV_VERSION);
1285 }
1286
1287 static int el3_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1288 {
1289 struct el3_private *lp = netdev_priv(dev);
1290 int ret;
1291
1292 spin_lock_irq(&lp->lock);
1293 ret = el3_netdev_get_ecmd(dev, ecmd);
1294 spin_unlock_irq(&lp->lock);
1295 return ret;
1296 }
1297
1298 static int el3_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1299 {
1300 struct el3_private *lp = netdev_priv(dev);
1301 int ret;
1302
1303 spin_lock_irq(&lp->lock);
1304 ret = el3_netdev_set_ecmd(dev, ecmd);
1305 spin_unlock_irq(&lp->lock);
1306 return ret;
1307 }
1308
1309 static u32 el3_get_link(struct net_device *dev)
1310 {
1311 struct el3_private *lp = netdev_priv(dev);
1312 u32 ret;
1313
1314 spin_lock_irq(&lp->lock);
1315 ret = el3_link_ok(dev);
1316 spin_unlock_irq(&lp->lock);
1317 return ret;
1318 }
1319
1320 static u32 el3_get_msglevel(struct net_device *dev)
1321 {
1322 return el3_debug;
1323 }
1324
1325 static void el3_set_msglevel(struct net_device *dev, u32 v)
1326 {
1327 el3_debug = v;
1328 }
1329
1330 static const struct ethtool_ops ethtool_ops = {
1331 .get_drvinfo = el3_get_drvinfo,
1332 .get_settings = el3_get_settings,
1333 .set_settings = el3_set_settings,
1334 .get_link = el3_get_link,
1335 .get_msglevel = el3_get_msglevel,
1336 .set_msglevel = el3_set_msglevel,
1337 };
1338
1339 static void
1340 el3_down(struct net_device *dev)
1341 {
1342 int ioaddr = dev->base_addr;
1343
1344 netif_stop_queue(dev);
1345
1346 /* Turn off statistics ASAP. We update lp->stats below. */
1347 outw(StatsDisable, ioaddr + EL3_CMD);
1348
1349 /* Disable the receiver and transmitter. */
1350 outw(RxDisable, ioaddr + EL3_CMD);
1351 outw(TxDisable, ioaddr + EL3_CMD);
1352
1353 if (dev->if_port == 3)
1354 /* Turn off thinnet power. Green! */
1355 outw(StopCoax, ioaddr + EL3_CMD);
1356 else if (dev->if_port == 0) {
1357 /* Disable link beat and jabber, if_port may change here next open(). */
1358 EL3WINDOW(4);
1359 outw(inw(ioaddr + WN4_MEDIA) & ~MEDIA_TP, ioaddr + WN4_MEDIA);
1360 }
1361
1362 outw(SetIntrEnb | 0x0000, ioaddr + EL3_CMD);
1363
1364 update_stats(dev);
1365 }
1366
1367 static void
1368 el3_up(struct net_device *dev)
1369 {
1370 int i, sw_info, net_diag;
1371 int ioaddr = dev->base_addr;
1372
1373 /* Activating the board required and does no harm otherwise */
1374 outw(0x0001, ioaddr + 4);
1375
1376 /* Set the IRQ line. */
1377 outw((dev->irq << 12) | 0x0f00, ioaddr + WN0_IRQ);
1378
1379 /* Set the station address in window 2 each time opened. */
1380 EL3WINDOW(2);
1381
1382 for (i = 0; i < 6; i++)
1383 outb(dev->dev_addr[i], ioaddr + i);
1384
1385 if ((dev->if_port & 0x03) == 3) /* BNC interface */
1386 /* Start the thinnet transceiver. We should really wait 50ms...*/
1387 outw(StartCoax, ioaddr + EL3_CMD);
1388 else if ((dev->if_port & 0x03) == 0) { /* 10baseT interface */
1389 /* Combine secondary sw_info word (the adapter level) and primary
1390 sw_info word (duplex setting plus other useless bits) */
1391 EL3WINDOW(0);
1392 sw_info = (read_eeprom(ioaddr, 0x14) & 0x400f) |
1393 (read_eeprom(ioaddr, 0x0d) & 0xBff0);
1394
1395 EL3WINDOW(4);
1396 net_diag = inw(ioaddr + WN4_NETDIAG);
1397 net_diag = (net_diag | FD_ENABLE); /* temporarily assume full-duplex will be set */
1398 printk("%s: ", dev->name);
1399 switch (dev->if_port & 0x0c) {
1400 case 12:
1401 /* force full-duplex mode if 3c5x9b */
1402 if (sw_info & 0x000f) {
1403 printk("Forcing 3c5x9b full-duplex mode");
1404 break;
1405 }
1406 case 8:
1407 /* set full-duplex mode based on eeprom config setting */
1408 if ((sw_info & 0x000f) && (sw_info & 0x8000)) {
1409 printk("Setting 3c5x9b full-duplex mode (from EEPROM configuration bit)");
1410 break;
1411 }
1412 default:
1413 /* xcvr=(0 || 4) OR user has an old 3c5x9 non "B" model */
1414 printk("Setting 3c5x9/3c5x9B half-duplex mode");
1415 net_diag = (net_diag & ~FD_ENABLE); /* disable full duplex */
1416 }
1417
1418 outw(net_diag, ioaddr + WN4_NETDIAG);
1419 printk(" if_port: %d, sw_info: %4.4x\n", dev->if_port, sw_info);
1420 if (el3_debug > 3)
1421 printk("%s: 3c5x9 net diag word is now: %4.4x.\n", dev->name, net_diag);
1422 /* Enable link beat and jabber check. */
1423 outw(inw(ioaddr + WN4_MEDIA) | MEDIA_TP, ioaddr + WN4_MEDIA);
1424 }
1425
1426 /* Switch to the stats window, and clear all stats by reading. */
1427 outw(StatsDisable, ioaddr + EL3_CMD);
1428 EL3WINDOW(6);
1429 for (i = 0; i < 9; i++)
1430 inb(ioaddr + i);
1431 inw(ioaddr + 10);
1432 inw(ioaddr + 12);
1433
1434 /* Switch to register set 1 for normal use. */
1435 EL3WINDOW(1);
1436
1437 /* Accept b-case and phys addr only. */
1438 outw(SetRxFilter | RxStation | RxBroadcast, ioaddr + EL3_CMD);
1439 outw(StatsEnable, ioaddr + EL3_CMD); /* Turn on statistics. */
1440
1441 outw(RxEnable, ioaddr + EL3_CMD); /* Enable the receiver. */
1442 outw(TxEnable, ioaddr + EL3_CMD); /* Enable transmitter. */
1443 /* Allow status bits to be seen. */
1444 outw(SetStatusEnb | 0xff, ioaddr + EL3_CMD);
1445 /* Ack all pending events, and set active indicator mask. */
1446 outw(AckIntr | IntLatch | TxAvailable | RxEarly | IntReq,
1447 ioaddr + EL3_CMD);
1448 outw(SetIntrEnb | IntLatch|TxAvailable|TxComplete|RxComplete|StatsFull,
1449 ioaddr + EL3_CMD);
1450
1451 netif_start_queue(dev);
1452 }
1453
1454 /* Power Management support functions */
1455 #ifdef EL3_SUSPEND
1456
1457 static int
1458 el3_suspend(struct device *pdev, pm_message_t state)
1459 {
1460 unsigned long flags;
1461 struct net_device *dev;
1462 struct el3_private *lp;
1463 int ioaddr;
1464
1465 dev = pdev->driver_data;
1466 lp = netdev_priv(dev);
1467 ioaddr = dev->base_addr;
1468
1469 spin_lock_irqsave(&lp->lock, flags);
1470
1471 if (netif_running(dev))
1472 netif_device_detach(dev);
1473
1474 el3_down(dev);
1475 outw(PowerDown, ioaddr + EL3_CMD);
1476
1477 spin_unlock_irqrestore(&lp->lock, flags);
1478 return 0;
1479 }
1480
1481 static int
1482 el3_resume(struct device *pdev)
1483 {
1484 unsigned long flags;
1485 struct net_device *dev;
1486 struct el3_private *lp;
1487 int ioaddr;
1488
1489 dev = pdev->driver_data;
1490 lp = netdev_priv(dev);
1491 ioaddr = dev->base_addr;
1492
1493 spin_lock_irqsave(&lp->lock, flags);
1494
1495 outw(PowerUp, ioaddr + EL3_CMD);
1496 el3_up(dev);
1497
1498 if (netif_running(dev))
1499 netif_device_attach(dev);
1500
1501 spin_unlock_irqrestore(&lp->lock, flags);
1502 return 0;
1503 }
1504
1505 #endif /* EL3_SUSPEND */
1506
1507 /* Parameters that may be passed into the module. */
1508 static int debug = -1;
1509 static int irq[] = {-1, -1, -1, -1, -1, -1, -1, -1};
1510 static int xcvr[] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
1511
1512 module_param(debug,int, 0);
1513 module_param_array(irq, int, NULL, 0);
1514 module_param_array(xcvr, int, NULL, 0);
1515 module_param(max_interrupt_work, int, 0);
1516 MODULE_PARM_DESC(debug, "debug level (0-6)");
1517 MODULE_PARM_DESC(irq, "IRQ number(s) (assigned)");
1518 MODULE_PARM_DESC(xcvr,"transceiver(s) (0=internal, 1=external)");
1519 MODULE_PARM_DESC(max_interrupt_work, "maximum events handled per interrupt");
1520 #if defined(__ISAPNP__)
1521 module_param(nopnp, int, 0);
1522 MODULE_PARM_DESC(nopnp, "disable ISA PnP support (0-1)");
1523 MODULE_DEVICE_TABLE(isapnp, el3_isapnp_adapters);
1524 #endif /* __ISAPNP__ */
1525 MODULE_DESCRIPTION("3Com Etherlink III (3c509, 3c509B) ISA/PnP ethernet driver");
1526 MODULE_LICENSE("GPL");
1527
1528 static int __init el3_init_module(void)
1529 {
1530 int ret = 0;
1531 el3_cards = 0;
1532
1533 if (debug >= 0)
1534 el3_debug = debug;
1535
1536 el3_root_dev = NULL;
1537 while (el3_probe(el3_cards) == 0) {
1538 if (irq[el3_cards] > 1)
1539 el3_root_dev->irq = irq[el3_cards];
1540 if (xcvr[el3_cards] >= 0)
1541 el3_root_dev->if_port = xcvr[el3_cards];
1542 el3_cards++;
1543 }
1544
1545 #ifdef CONFIG_EISA
1546 ret = eisa_driver_register(&el3_eisa_driver);
1547 #endif
1548 #ifdef CONFIG_MCA
1549 {
1550 int err = mca_register_driver(&el3_mca_driver);
1551 if (ret == 0)
1552 ret = err;
1553 }
1554 #endif
1555 return ret;
1556 }
1557
1558 static void __exit el3_cleanup_module(void)
1559 {
1560 struct net_device *next_dev;
1561
1562 while (el3_root_dev) {
1563 struct el3_private *lp = netdev_priv(el3_root_dev);
1564
1565 next_dev = lp->next_dev;
1566 el3_common_remove (el3_root_dev);
1567 el3_root_dev = next_dev;
1568 }
1569
1570 #ifdef CONFIG_EISA
1571 eisa_driver_unregister (&el3_eisa_driver);
1572 #endif
1573 #ifdef CONFIG_MCA
1574 mca_unregister_driver(&el3_mca_driver);
1575 #endif
1576 }
1577
1578 module_init (el3_init_module);
1579 module_exit (el3_cleanup_module);
1580
This page took 0.08387 seconds and 6 git commands to generate.