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