diff options
Diffstat (limited to 'drivers/net/tlan.c')
-rw-r--r-- | drivers/net/tlan.c | 344 |
1 files changed, 172 insertions, 172 deletions
diff --git a/drivers/net/tlan.c b/drivers/net/tlan.c index 23c0017f25a9..8d807bf603a0 100644 --- a/drivers/net/tlan.c +++ b/drivers/net/tlan.c | |||
@@ -33,33 +33,33 @@ | |||
33 | * new PCI BIOS interface. | 33 | * new PCI BIOS interface. |
34 | * Alan Cox <alan@redhat.com>: Fixed the out of memory | 34 | * Alan Cox <alan@redhat.com>: Fixed the out of memory |
35 | * handling. | 35 | * handling. |
36 | * | 36 | * |
37 | * Torben Mathiasen <torben.mathiasen@compaq.com> New Maintainer! | 37 | * Torben Mathiasen <torben.mathiasen@compaq.com> New Maintainer! |
38 | * | 38 | * |
39 | * v1.1 Dec 20, 1999 - Removed linux version checking | 39 | * v1.1 Dec 20, 1999 - Removed linux version checking |
40 | * Patch from Tigran Aivazian. | 40 | * Patch from Tigran Aivazian. |
41 | * - v1.1 includes Alan's SMP updates. | 41 | * - v1.1 includes Alan's SMP updates. |
42 | * - We still have problems on SMP though, | 42 | * - We still have problems on SMP though, |
43 | * but I'm looking into that. | 43 | * but I'm looking into that. |
44 | * | 44 | * |
45 | * v1.2 Jan 02, 2000 - Hopefully fixed the SMP deadlock. | 45 | * v1.2 Jan 02, 2000 - Hopefully fixed the SMP deadlock. |
46 | * - Removed dependency of HZ being 100. | 46 | * - Removed dependency of HZ being 100. |
47 | * - We now allow higher priority timers to | 47 | * - We now allow higher priority timers to |
48 | * overwrite timers like TLAN_TIMER_ACTIVITY | 48 | * overwrite timers like TLAN_TIMER_ACTIVITY |
49 | * Patch from John Cagle <john.cagle@compaq.com>. | 49 | * Patch from John Cagle <john.cagle@compaq.com>. |
50 | * - Fixed a few compiler warnings. | 50 | * - Fixed a few compiler warnings. |
51 | * | 51 | * |
52 | * v1.3 Feb 04, 2000 - Fixed the remaining HZ issues. | 52 | * v1.3 Feb 04, 2000 - Fixed the remaining HZ issues. |
53 | * - Removed call to pci_present(). | 53 | * - Removed call to pci_present(). |
54 | * - Removed SA_INTERRUPT flag from irq handler. | 54 | * - Removed SA_INTERRUPT flag from irq handler. |
55 | * - Added __init and __initdata to reduce resisdent | 55 | * - Added __init and __initdata to reduce resisdent |
56 | * code size. | 56 | * code size. |
57 | * - Driver now uses module_init/module_exit. | 57 | * - Driver now uses module_init/module_exit. |
58 | * - Rewrote init_module and tlan_probe to | 58 | * - Rewrote init_module and tlan_probe to |
59 | * share a lot more code. We now use tlan_probe | 59 | * share a lot more code. We now use tlan_probe |
60 | * with builtin and module driver. | 60 | * with builtin and module driver. |
61 | * - Driver ported to new net API. | 61 | * - Driver ported to new net API. |
62 | * - tlan.txt has been reworked to reflect current | 62 | * - tlan.txt has been reworked to reflect current |
63 | * driver (almost) | 63 | * driver (almost) |
64 | * - Other minor stuff | 64 | * - Other minor stuff |
65 | * | 65 | * |
@@ -74,11 +74,11 @@ | |||
74 | * Auto-Neg fallback. | 74 | * Auto-Neg fallback. |
75 | * | 75 | * |
76 | * v1.6 April 04, 2000 - Fixed driver support for kernel-parameters. Haven't | 76 | * v1.6 April 04, 2000 - Fixed driver support for kernel-parameters. Haven't |
77 | * tested it though, as the kernel support is currently | 77 | * tested it though, as the kernel support is currently |
78 | * broken (2.3.99p4p3). | 78 | * broken (2.3.99p4p3). |
79 | * - Updated tlan.txt accordingly. | 79 | * - Updated tlan.txt accordingly. |
80 | * - Adjusted minimum/maximum frame length. | 80 | * - Adjusted minimum/maximum frame length. |
81 | * - There is now a TLAN website up at | 81 | * - There is now a TLAN website up at |
82 | * http://tlan.kernel.dk | 82 | * http://tlan.kernel.dk |
83 | * | 83 | * |
84 | * v1.7 April 07, 2000 - Started to implement custom ioctls. Driver now | 84 | * v1.7 April 07, 2000 - Started to implement custom ioctls. Driver now |
@@ -92,10 +92,10 @@ | |||
92 | * link partner abilities. When forced link is used, | 92 | * link partner abilities. When forced link is used, |
93 | * the driver will report status of the established | 93 | * the driver will report status of the established |
94 | * link. | 94 | * link. |
95 | * Please read tlan.txt for additional information. | 95 | * Please read tlan.txt for additional information. |
96 | * - Removed call to check_region(), and used | 96 | * - Removed call to check_region(), and used |
97 | * return value of request_region() instead. | 97 | * return value of request_region() instead. |
98 | * | 98 | * |
99 | * v1.8a May 28, 2000 - Minor updates. | 99 | * v1.8a May 28, 2000 - Minor updates. |
100 | * | 100 | * |
101 | * v1.9 July 25, 2000 - Fixed a few remaining Full-Duplex issues. | 101 | * v1.9 July 25, 2000 - Fixed a few remaining Full-Duplex issues. |
@@ -104,25 +104,25 @@ | |||
104 | * - Added routine to monitor PHY status. | 104 | * - Added routine to monitor PHY status. |
105 | * - Added activity led support for Proliant devices. | 105 | * - Added activity led support for Proliant devices. |
106 | * | 106 | * |
107 | * v1.10 Aug 30, 2000 - Added support for EISA based tlan controllers | 107 | * v1.10 Aug 30, 2000 - Added support for EISA based tlan controllers |
108 | * like the Compaq NetFlex3/E. | 108 | * like the Compaq NetFlex3/E. |
109 | * - Rewrote tlan_probe to better handle multiple | 109 | * - Rewrote tlan_probe to better handle multiple |
110 | * bus probes. Probing and device setup is now | 110 | * bus probes. Probing and device setup is now |
111 | * done through TLan_Probe and TLan_init_one. Actual | 111 | * done through TLan_Probe and TLan_init_one. Actual |
112 | * hardware probe is done with kernel API and | 112 | * hardware probe is done with kernel API and |
113 | * TLan_EisaProbe. | 113 | * TLan_EisaProbe. |
114 | * - Adjusted debug information for probing. | 114 | * - Adjusted debug information for probing. |
115 | * - Fixed bug that would cause general debug information | 115 | * - Fixed bug that would cause general debug information |
116 | * to be printed after driver removal. | 116 | * to be printed after driver removal. |
117 | * - Added transmit timeout handling. | 117 | * - Added transmit timeout handling. |
118 | * - Fixed OOM return values in tlan_probe. | 118 | * - Fixed OOM return values in tlan_probe. |
119 | * - Fixed possible mem leak in tlan_exit | 119 | * - Fixed possible mem leak in tlan_exit |
120 | * (now tlan_remove_one). | 120 | * (now tlan_remove_one). |
121 | * - Fixed timer bug in TLan_phyMonitor. | 121 | * - Fixed timer bug in TLan_phyMonitor. |
122 | * - This driver version is alpha quality, please | 122 | * - This driver version is alpha quality, please |
123 | * send me any bug issues you may encounter. | 123 | * send me any bug issues you may encounter. |
124 | * | 124 | * |
125 | * v1.11 Aug 31, 2000 - Do not try to register irq 0 if no irq line was | 125 | * v1.11 Aug 31, 2000 - Do not try to register irq 0 if no irq line was |
126 | * set for EISA cards. | 126 | * set for EISA cards. |
127 | * - Added support for NetFlex3/E with nibble-rate | 127 | * - Added support for NetFlex3/E with nibble-rate |
128 | * 10Base-T PHY. This is untestet as I haven't got | 128 | * 10Base-T PHY. This is untestet as I haven't got |
@@ -142,7 +142,7 @@ | |||
142 | * - Added the bbuf option as a kernel parameter. | 142 | * - Added the bbuf option as a kernel parameter. |
143 | * - Fixed ioaddr probe bug. | 143 | * - Fixed ioaddr probe bug. |
144 | * - Fixed stupid deadlock with MII interrupts. | 144 | * - Fixed stupid deadlock with MII interrupts. |
145 | * - Added support for speed/duplex selection with | 145 | * - Added support for speed/duplex selection with |
146 | * multiple nics. | 146 | * multiple nics. |
147 | * - Added partly fix for TX Channel lockup with | 147 | * - Added partly fix for TX Channel lockup with |
148 | * TLAN v1.0 silicon. This needs to be investigated | 148 | * TLAN v1.0 silicon. This needs to be investigated |
@@ -226,7 +226,7 @@ static int tlan_have_pci; | |||
226 | static int tlan_have_eisa; | 226 | static int tlan_have_eisa; |
227 | 227 | ||
228 | static const char *media[] = { | 228 | static const char *media[] = { |
229 | "10BaseT-HD ", "10BaseT-FD ","100baseTx-HD ", | 229 | "10BaseT-HD ", "10BaseT-FD ","100baseTx-HD ", |
230 | "100baseTx-FD", "100baseT4", NULL | 230 | "100baseTx-FD", "100baseT4", NULL |
231 | }; | 231 | }; |
232 | 232 | ||
@@ -249,7 +249,7 @@ static struct board { | |||
249 | { "Compaq Netelligent 10/100 TX UTP", TLAN_ADAPTER_ACTIVITY_LED, 0x83 }, | 249 | { "Compaq Netelligent 10/100 TX UTP", TLAN_ADAPTER_ACTIVITY_LED, 0x83 }, |
250 | { "Compaq Netelligent 10 T/2 PCI UTP/Coax", TLAN_ADAPTER_NONE, 0x83 }, | 250 | { "Compaq Netelligent 10 T/2 PCI UTP/Coax", TLAN_ADAPTER_NONE, 0x83 }, |
251 | { "Compaq NetFlex-3/E", TLAN_ADAPTER_ACTIVITY_LED | /* EISA card */ | 251 | { "Compaq NetFlex-3/E", TLAN_ADAPTER_ACTIVITY_LED | /* EISA card */ |
252 | TLAN_ADAPTER_UNMANAGED_PHY | TLAN_ADAPTER_BIT_RATE_PHY, 0x83 }, | 252 | TLAN_ADAPTER_UNMANAGED_PHY | TLAN_ADAPTER_BIT_RATE_PHY, 0x83 }, |
253 | { "Compaq NetFlex-3/E", TLAN_ADAPTER_ACTIVITY_LED, 0x83 }, /* EISA card */ | 253 | { "Compaq NetFlex-3/E", TLAN_ADAPTER_ACTIVITY_LED, 0x83 }, /* EISA card */ |
254 | }; | 254 | }; |
255 | 255 | ||
@@ -282,7 +282,7 @@ static struct pci_device_id tlan_pci_tbl[] = { | |||
282 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 12 }, | 282 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 12 }, |
283 | { 0,} | 283 | { 0,} |
284 | }; | 284 | }; |
285 | MODULE_DEVICE_TABLE(pci, tlan_pci_tbl); | 285 | MODULE_DEVICE_TABLE(pci, tlan_pci_tbl); |
286 | 286 | ||
287 | static void TLan_EisaProbe( void ); | 287 | static void TLan_EisaProbe( void ); |
288 | static void TLan_Eisa_Cleanup( void ); | 288 | static void TLan_Eisa_Cleanup( void ); |
@@ -347,7 +347,7 @@ static void TLan_EeReceiveByte( u16, u8 *, int ); | |||
347 | static int TLan_EeReadByte( struct net_device *, u8, u8 * ); | 347 | static int TLan_EeReadByte( struct net_device *, u8, u8 * ); |
348 | 348 | ||
349 | 349 | ||
350 | static void | 350 | static void |
351 | TLan_StoreSKB( struct tlan_list_tag *tag, struct sk_buff *skb) | 351 | TLan_StoreSKB( struct tlan_list_tag *tag, struct sk_buff *skb) |
352 | { | 352 | { |
353 | unsigned long addr = (unsigned long)skb; | 353 | unsigned long addr = (unsigned long)skb; |
@@ -384,11 +384,11 @@ TLan_SetTimer( struct net_device *dev, u32 ticks, u32 type ) | |||
384 | { | 384 | { |
385 | TLanPrivateInfo *priv = netdev_priv(dev); | 385 | TLanPrivateInfo *priv = netdev_priv(dev); |
386 | unsigned long flags = 0; | 386 | unsigned long flags = 0; |
387 | 387 | ||
388 | if (!in_irq()) | 388 | if (!in_irq()) |
389 | spin_lock_irqsave(&priv->lock, flags); | 389 | spin_lock_irqsave(&priv->lock, flags); |
390 | if ( priv->timer.function != NULL && | 390 | if ( priv->timer.function != NULL && |
391 | priv->timerType != TLAN_TIMER_ACTIVITY ) { | 391 | priv->timerType != TLAN_TIMER_ACTIVITY ) { |
392 | if (!in_irq()) | 392 | if (!in_irq()) |
393 | spin_unlock_irqrestore(&priv->lock, flags); | 393 | spin_unlock_irqrestore(&priv->lock, flags); |
394 | return; | 394 | return; |
@@ -401,7 +401,7 @@ TLan_SetTimer( struct net_device *dev, u32 ticks, u32 type ) | |||
401 | priv->timerSetAt = jiffies; | 401 | priv->timerSetAt = jiffies; |
402 | priv->timerType = type; | 402 | priv->timerType = type; |
403 | mod_timer(&priv->timer, jiffies + ticks); | 403 | mod_timer(&priv->timer, jiffies + ticks); |
404 | 404 | ||
405 | } /* TLan_SetTimer */ | 405 | } /* TLan_SetTimer */ |
406 | 406 | ||
407 | 407 | ||
@@ -439,7 +439,7 @@ static void __devexit tlan_remove_one( struct pci_dev *pdev) | |||
439 | { | 439 | { |
440 | struct net_device *dev = pci_get_drvdata( pdev ); | 440 | struct net_device *dev = pci_get_drvdata( pdev ); |
441 | TLanPrivateInfo *priv = netdev_priv(dev); | 441 | TLanPrivateInfo *priv = netdev_priv(dev); |
442 | 442 | ||
443 | unregister_netdev( dev ); | 443 | unregister_netdev( dev ); |
444 | 444 | ||
445 | if ( priv->dmaStorage ) { | 445 | if ( priv->dmaStorage ) { |
@@ -449,25 +449,25 @@ static void __devexit tlan_remove_one( struct pci_dev *pdev) | |||
449 | #ifdef CONFIG_PCI | 449 | #ifdef CONFIG_PCI |
450 | pci_release_regions(pdev); | 450 | pci_release_regions(pdev); |
451 | #endif | 451 | #endif |
452 | 452 | ||
453 | free_netdev( dev ); | 453 | free_netdev( dev ); |
454 | 454 | ||
455 | pci_set_drvdata( pdev, NULL ); | 455 | pci_set_drvdata( pdev, NULL ); |
456 | } | 456 | } |
457 | 457 | ||
458 | static struct pci_driver tlan_driver = { | 458 | static struct pci_driver tlan_driver = { |
459 | .name = "tlan", | 459 | .name = "tlan", |
460 | .id_table = tlan_pci_tbl, | 460 | .id_table = tlan_pci_tbl, |
461 | .probe = tlan_init_one, | 461 | .probe = tlan_init_one, |
462 | .remove = __devexit_p(tlan_remove_one), | 462 | .remove = __devexit_p(tlan_remove_one), |
463 | }; | 463 | }; |
464 | 464 | ||
465 | static int __init tlan_probe(void) | 465 | static int __init tlan_probe(void) |
466 | { | 466 | { |
467 | static int pad_allocated; | 467 | static int pad_allocated; |
468 | 468 | ||
469 | printk(KERN_INFO "%s", tlan_banner); | 469 | printk(KERN_INFO "%s", tlan_banner); |
470 | 470 | ||
471 | TLanPadBuffer = (u8 *) pci_alloc_consistent(NULL, TLAN_MIN_FRAME_SIZE, &TLanPadBufferDMA); | 471 | TLanPadBuffer = (u8 *) pci_alloc_consistent(NULL, TLAN_MIN_FRAME_SIZE, &TLanPadBufferDMA); |
472 | 472 | ||
473 | if (TLanPadBuffer == NULL) { | 473 | if (TLanPadBuffer == NULL) { |
@@ -479,15 +479,15 @@ static int __init tlan_probe(void) | |||
479 | pad_allocated = 1; | 479 | pad_allocated = 1; |
480 | 480 | ||
481 | TLAN_DBG(TLAN_DEBUG_PROBE, "Starting PCI Probe....\n"); | 481 | TLAN_DBG(TLAN_DEBUG_PROBE, "Starting PCI Probe....\n"); |
482 | 482 | ||
483 | /* Use new style PCI probing. Now the kernel will | 483 | /* Use new style PCI probing. Now the kernel will |
484 | do most of this for us */ | 484 | do most of this for us */ |
485 | pci_register_driver(&tlan_driver); | 485 | pci_register_driver(&tlan_driver); |
486 | 486 | ||
487 | TLAN_DBG(TLAN_DEBUG_PROBE, "Starting EISA Probe....\n"); | 487 | TLAN_DBG(TLAN_DEBUG_PROBE, "Starting EISA Probe....\n"); |
488 | TLan_EisaProbe(); | 488 | TLan_EisaProbe(); |
489 | 489 | ||
490 | printk(KERN_INFO "TLAN: %d device%s installed, PCI: %d EISA: %d\n", | 490 | printk(KERN_INFO "TLAN: %d device%s installed, PCI: %d EISA: %d\n", |
491 | TLanDevicesInstalled, TLanDevicesInstalled == 1 ? "" : "s", | 491 | TLanDevicesInstalled, TLanDevicesInstalled == 1 ? "" : "s", |
492 | tlan_have_pci, tlan_have_eisa); | 492 | tlan_have_pci, tlan_have_eisa); |
493 | 493 | ||
@@ -498,7 +498,7 @@ static int __init tlan_probe(void) | |||
498 | } | 498 | } |
499 | return 0; | 499 | return 0; |
500 | } | 500 | } |
501 | 501 | ||
502 | 502 | ||
503 | static int __devinit tlan_init_one( struct pci_dev *pdev, | 503 | static int __devinit tlan_init_one( struct pci_dev *pdev, |
504 | const struct pci_device_id *ent) | 504 | const struct pci_device_id *ent) |
@@ -513,11 +513,11 @@ static int __devinit tlan_init_one( struct pci_dev *pdev, | |||
513 | * | 513 | * |
514 | * Returns: | 514 | * Returns: |
515 | * 0 on success, error code on error | 515 | * 0 on success, error code on error |
516 | * Parms: | 516 | * Parms: |
517 | * none | 517 | * none |
518 | * | 518 | * |
519 | * The name is lower case to fit in with all the rest of | 519 | * The name is lower case to fit in with all the rest of |
520 | * the netcard_probe names. This function looks for | 520 | * the netcard_probe names. This function looks for |
521 | * another TLan based adapter, setting it up with the | 521 | * another TLan based adapter, setting it up with the |
522 | * allocated device struct if one is found. | 522 | * allocated device struct if one is found. |
523 | * tlan_probe has been ported to the new net API and | 523 | * tlan_probe has been ported to the new net API and |
@@ -526,7 +526,7 @@ static int __devinit tlan_init_one( struct pci_dev *pdev, | |||
526 | * | 526 | * |
527 | **************************************************************/ | 527 | **************************************************************/ |
528 | 528 | ||
529 | static int __devinit TLan_probe1(struct pci_dev *pdev, | 529 | static int __devinit TLan_probe1(struct pci_dev *pdev, |
530 | long ioaddr, int irq, int rev, const struct pci_device_id *ent ) | 530 | long ioaddr, int irq, int rev, const struct pci_device_id *ent ) |
531 | { | 531 | { |
532 | 532 | ||
@@ -558,11 +558,11 @@ static int __devinit TLan_probe1(struct pci_dev *pdev, | |||
558 | } | 558 | } |
559 | SET_MODULE_OWNER(dev); | 559 | SET_MODULE_OWNER(dev); |
560 | SET_NETDEV_DEV(dev, &pdev->dev); | 560 | SET_NETDEV_DEV(dev, &pdev->dev); |
561 | 561 | ||
562 | priv = netdev_priv(dev); | 562 | priv = netdev_priv(dev); |
563 | 563 | ||
564 | priv->pciDev = pdev; | 564 | priv->pciDev = pdev; |
565 | 565 | ||
566 | /* Is this a PCI device? */ | 566 | /* Is this a PCI device? */ |
567 | if (pdev) { | 567 | if (pdev) { |
568 | u32 pci_io_base = 0; | 568 | u32 pci_io_base = 0; |
@@ -590,10 +590,10 @@ static int __devinit TLan_probe1(struct pci_dev *pdev, | |||
590 | rc = -EIO; | 590 | rc = -EIO; |
591 | goto err_out_free_dev; | 591 | goto err_out_free_dev; |
592 | } | 592 | } |
593 | 593 | ||
594 | dev->base_addr = pci_io_base; | 594 | dev->base_addr = pci_io_base; |
595 | dev->irq = pdev->irq; | 595 | dev->irq = pdev->irq; |
596 | priv->adapterRev = pci_rev; | 596 | priv->adapterRev = pci_rev; |
597 | pci_set_master(pdev); | 597 | pci_set_master(pdev); |
598 | pci_set_drvdata(pdev, dev); | 598 | pci_set_drvdata(pdev, dev); |
599 | 599 | ||
@@ -618,7 +618,7 @@ static int __devinit TLan_probe1(struct pci_dev *pdev, | |||
618 | priv->aui = dev->mem_start & 0x01; | 618 | priv->aui = dev->mem_start & 0x01; |
619 | priv->duplex = ((dev->mem_start & 0x06) == 0x06) ? 0 : (dev->mem_start & 0x06) >> 1; | 619 | priv->duplex = ((dev->mem_start & 0x06) == 0x06) ? 0 : (dev->mem_start & 0x06) >> 1; |
620 | priv->speed = ((dev->mem_start & 0x18) == 0x18) ? 0 : (dev->mem_start & 0x18) >> 3; | 620 | priv->speed = ((dev->mem_start & 0x18) == 0x18) ? 0 : (dev->mem_start & 0x18) >> 3; |
621 | 621 | ||
622 | if (priv->speed == 0x1) { | 622 | if (priv->speed == 0x1) { |
623 | priv->speed = TLAN_SPEED_10; | 623 | priv->speed = TLAN_SPEED_10; |
624 | } else if (priv->speed == 0x2) { | 624 | } else if (priv->speed == 0x2) { |
@@ -631,13 +631,13 @@ static int __devinit TLan_probe1(struct pci_dev *pdev, | |||
631 | priv->duplex = duplex[boards_found]; | 631 | priv->duplex = duplex[boards_found]; |
632 | priv->debug = debug; | 632 | priv->debug = debug; |
633 | } | 633 | } |
634 | 634 | ||
635 | /* This will be used when we get an adapter error from | 635 | /* This will be used when we get an adapter error from |
636 | * within our irq handler */ | 636 | * within our irq handler */ |
637 | INIT_WORK(&priv->tlan_tqueue, (void *)(void*)TLan_tx_timeout, dev); | 637 | INIT_WORK(&priv->tlan_tqueue, (void *)(void*)TLan_tx_timeout, dev); |
638 | 638 | ||
639 | spin_lock_init(&priv->lock); | 639 | spin_lock_init(&priv->lock); |
640 | 640 | ||
641 | rc = TLan_Init(dev); | 641 | rc = TLan_Init(dev); |
642 | if (rc) { | 642 | if (rc) { |
643 | printk(KERN_ERR "TLAN: Could not set up device.\n"); | 643 | printk(KERN_ERR "TLAN: Could not set up device.\n"); |
@@ -650,10 +650,10 @@ static int __devinit TLan_probe1(struct pci_dev *pdev, | |||
650 | goto err_out_uninit; | 650 | goto err_out_uninit; |
651 | } | 651 | } |
652 | 652 | ||
653 | 653 | ||
654 | TLanDevicesInstalled++; | 654 | TLanDevicesInstalled++; |
655 | boards_found++; | 655 | boards_found++; |
656 | 656 | ||
657 | /* pdev is NULL if this is an EISA device */ | 657 | /* pdev is NULL if this is an EISA device */ |
658 | if (pdev) | 658 | if (pdev) |
659 | tlan_have_pci++; | 659 | tlan_have_pci++; |
@@ -662,7 +662,7 @@ static int __devinit TLan_probe1(struct pci_dev *pdev, | |||
662 | TLan_Eisa_Devices = dev; | 662 | TLan_Eisa_Devices = dev; |
663 | tlan_have_eisa++; | 663 | tlan_have_eisa++; |
664 | } | 664 | } |
665 | 665 | ||
666 | printk(KERN_INFO "TLAN: %s irq=%2d, io=%04x, %s, Rev. %d\n", | 666 | printk(KERN_INFO "TLAN: %s irq=%2d, io=%04x, %s, Rev. %d\n", |
667 | dev->name, | 667 | dev->name, |
668 | (int) dev->irq, | 668 | (int) dev->irq, |
@@ -692,7 +692,7 @@ static void TLan_Eisa_Cleanup(void) | |||
692 | { | 692 | { |
693 | struct net_device *dev; | 693 | struct net_device *dev; |
694 | TLanPrivateInfo *priv; | 694 | TLanPrivateInfo *priv; |
695 | 695 | ||
696 | while( tlan_have_eisa ) { | 696 | while( tlan_have_eisa ) { |
697 | dev = TLan_Eisa_Devices; | 697 | dev = TLan_Eisa_Devices; |
698 | priv = netdev_priv(dev); | 698 | priv = netdev_priv(dev); |
@@ -706,8 +706,8 @@ static void TLan_Eisa_Cleanup(void) | |||
706 | tlan_have_eisa--; | 706 | tlan_have_eisa--; |
707 | } | 707 | } |
708 | } | 708 | } |
709 | 709 | ||
710 | 710 | ||
711 | static void __exit tlan_exit(void) | 711 | static void __exit tlan_exit(void) |
712 | { | 712 | { |
713 | pci_unregister_driver(&tlan_driver); | 713 | pci_unregister_driver(&tlan_driver); |
@@ -734,52 +734,52 @@ module_exit(tlan_exit); | |||
734 | * Parms: None | 734 | * Parms: None |
735 | * | 735 | * |
736 | * | 736 | * |
737 | * This functions probes for EISA devices and calls | 737 | * This functions probes for EISA devices and calls |
738 | * TLan_probe1 when one is found. | 738 | * TLan_probe1 when one is found. |
739 | * | 739 | * |
740 | *************************************************************/ | 740 | *************************************************************/ |
741 | 741 | ||
742 | static void __init TLan_EisaProbe (void) | 742 | static void __init TLan_EisaProbe (void) |
743 | { | 743 | { |
744 | long ioaddr; | 744 | long ioaddr; |
745 | int rc = -ENODEV; | 745 | int rc = -ENODEV; |
746 | int irq; | 746 | int irq; |
747 | u16 device_id; | 747 | u16 device_id; |
748 | 748 | ||
749 | if (!EISA_bus) { | 749 | if (!EISA_bus) { |
750 | TLAN_DBG(TLAN_DEBUG_PROBE, "No EISA bus present\n"); | 750 | TLAN_DBG(TLAN_DEBUG_PROBE, "No EISA bus present\n"); |
751 | return; | 751 | return; |
752 | } | 752 | } |
753 | 753 | ||
754 | /* Loop through all slots of the EISA bus */ | 754 | /* Loop through all slots of the EISA bus */ |
755 | for (ioaddr = 0x1000; ioaddr < 0x9000; ioaddr += 0x1000) { | 755 | for (ioaddr = 0x1000; ioaddr < 0x9000; ioaddr += 0x1000) { |
756 | 756 | ||
757 | TLAN_DBG(TLAN_DEBUG_PROBE,"EISA_ID 0x%4x: 0x%4x\n", (int) ioaddr + 0xC80, inw(ioaddr + EISA_ID)); | 757 | TLAN_DBG(TLAN_DEBUG_PROBE,"EISA_ID 0x%4x: 0x%4x\n", (int) ioaddr + 0xC80, inw(ioaddr + EISA_ID)); |
758 | TLAN_DBG(TLAN_DEBUG_PROBE,"EISA_ID 0x%4x: 0x%4x\n", (int) ioaddr + 0xC82, inw(ioaddr + EISA_ID2)); | 758 | TLAN_DBG(TLAN_DEBUG_PROBE,"EISA_ID 0x%4x: 0x%4x\n", (int) ioaddr + 0xC82, inw(ioaddr + EISA_ID2)); |
759 | 759 | ||
760 | 760 | ||
761 | TLAN_DBG(TLAN_DEBUG_PROBE, "Probing for EISA adapter at IO: 0x%4x : ", | 761 | TLAN_DBG(TLAN_DEBUG_PROBE, "Probing for EISA adapter at IO: 0x%4x : ", |
762 | (int) ioaddr); | 762 | (int) ioaddr); |
763 | if (request_region(ioaddr, 0x10, TLanSignature) == NULL) | 763 | if (request_region(ioaddr, 0x10, TLanSignature) == NULL) |
764 | goto out; | 764 | goto out; |
765 | 765 | ||
766 | if (inw(ioaddr + EISA_ID) != 0x110E) { | 766 | if (inw(ioaddr + EISA_ID) != 0x110E) { |
767 | release_region(ioaddr, 0x10); | 767 | release_region(ioaddr, 0x10); |
768 | goto out; | 768 | goto out; |
769 | } | 769 | } |
770 | 770 | ||
771 | device_id = inw(ioaddr + EISA_ID2); | 771 | device_id = inw(ioaddr + EISA_ID2); |
772 | if (device_id != 0x20F1 && device_id != 0x40F1) { | 772 | if (device_id != 0x20F1 && device_id != 0x40F1) { |
773 | release_region (ioaddr, 0x10); | 773 | release_region (ioaddr, 0x10); |
774 | goto out; | 774 | goto out; |
775 | } | 775 | } |
776 | 776 | ||
777 | if (inb(ioaddr + EISA_CR) != 0x1) { /* Check if adapter is enabled */ | 777 | if (inb(ioaddr + EISA_CR) != 0x1) { /* Check if adapter is enabled */ |
778 | release_region (ioaddr, 0x10); | 778 | release_region (ioaddr, 0x10); |
779 | goto out2; | 779 | goto out2; |
780 | } | 780 | } |
781 | 781 | ||
782 | if (debug == 0x10) | 782 | if (debug == 0x10) |
783 | printk("Found one\n"); | 783 | printk("Found one\n"); |
784 | 784 | ||
785 | 785 | ||
@@ -799,14 +799,14 @@ static void __init TLan_EisaProbe (void) | |||
799 | break; | 799 | break; |
800 | default: | 800 | default: |
801 | goto out; | 801 | goto out; |
802 | } | 802 | } |
803 | 803 | ||
804 | 804 | ||
805 | /* Setup the newly found eisa adapter */ | 805 | /* Setup the newly found eisa adapter */ |
806 | rc = TLan_probe1( NULL, ioaddr, irq, | 806 | rc = TLan_probe1( NULL, ioaddr, irq, |
807 | 12, NULL); | 807 | 12, NULL); |
808 | continue; | 808 | continue; |
809 | 809 | ||
810 | out: | 810 | out: |
811 | if (debug == 0x10) | 811 | if (debug == 0x10) |
812 | printk("None found\n"); | 812 | printk("None found\n"); |
@@ -815,7 +815,7 @@ static void __init TLan_EisaProbe (void) | |||
815 | out2: if (debug == 0x10) | 815 | out2: if (debug == 0x10) |
816 | printk("Card found but it is not enabled, skipping\n"); | 816 | printk("Card found but it is not enabled, skipping\n"); |
817 | continue; | 817 | continue; |
818 | 818 | ||
819 | } | 819 | } |
820 | 820 | ||
821 | } /* TLan_EisaProbe */ | 821 | } /* TLan_EisaProbe */ |
@@ -829,7 +829,7 @@ static void TLan_Poll(struct net_device *dev) | |||
829 | } | 829 | } |
830 | #endif | 830 | #endif |
831 | 831 | ||
832 | 832 | ||
833 | 833 | ||
834 | 834 | ||
835 | /*************************************************************** | 835 | /*************************************************************** |
@@ -846,7 +846,7 @@ static void TLan_Poll(struct net_device *dev) | |||
846 | * addresses, allocates memory for the lists and bounce | 846 | * addresses, allocates memory for the lists and bounce |
847 | * buffers, retrieves the MAC address from the eeprom | 847 | * buffers, retrieves the MAC address from the eeprom |
848 | * and assignes the device's methods. | 848 | * and assignes the device's methods. |
849 | * | 849 | * |
850 | **************************************************************/ | 850 | **************************************************************/ |
851 | 851 | ||
852 | static int TLan_Init( struct net_device *dev ) | 852 | static int TLan_Init( struct net_device *dev ) |
@@ -857,7 +857,7 @@ static int TLan_Init( struct net_device *dev ) | |||
857 | TLanPrivateInfo *priv; | 857 | TLanPrivateInfo *priv; |
858 | 858 | ||
859 | priv = netdev_priv(dev); | 859 | priv = netdev_priv(dev); |
860 | 860 | ||
861 | if ( bbuf ) { | 861 | if ( bbuf ) { |
862 | dma_size = ( TLAN_NUM_RX_LISTS + TLAN_NUM_TX_LISTS ) | 862 | dma_size = ( TLAN_NUM_RX_LISTS + TLAN_NUM_TX_LISTS ) |
863 | * ( sizeof(TLanList) + TLAN_MAX_FRAME_SIZE ); | 863 | * ( sizeof(TLanList) + TLAN_MAX_FRAME_SIZE ); |
@@ -867,14 +867,14 @@ static int TLan_Init( struct net_device *dev ) | |||
867 | } | 867 | } |
868 | priv->dmaStorage = pci_alloc_consistent(priv->pciDev, dma_size, &priv->dmaStorageDMA); | 868 | priv->dmaStorage = pci_alloc_consistent(priv->pciDev, dma_size, &priv->dmaStorageDMA); |
869 | priv->dmaSize = dma_size; | 869 | priv->dmaSize = dma_size; |
870 | 870 | ||
871 | if ( priv->dmaStorage == NULL ) { | 871 | if ( priv->dmaStorage == NULL ) { |
872 | printk(KERN_ERR "TLAN: Could not allocate lists and buffers for %s.\n", | 872 | printk(KERN_ERR "TLAN: Could not allocate lists and buffers for %s.\n", |
873 | dev->name ); | 873 | dev->name ); |
874 | return -ENOMEM; | 874 | return -ENOMEM; |
875 | } | 875 | } |
876 | memset( priv->dmaStorage, 0, dma_size ); | 876 | memset( priv->dmaStorage, 0, dma_size ); |
877 | priv->rxList = (TLanList *) | 877 | priv->rxList = (TLanList *) |
878 | ( ( ( (u32) priv->dmaStorage ) + 7 ) & 0xFFFFFFF8 ); | 878 | ( ( ( (u32) priv->dmaStorage ) + 7 ) & 0xFFFFFFF8 ); |
879 | priv->rxListDMA = ( ( ( (u32) priv->dmaStorageDMA ) + 7 ) & 0xFFFFFFF8 ); | 879 | priv->rxListDMA = ( ( ( (u32) priv->dmaStorageDMA ) + 7 ) & 0xFFFFFFF8 ); |
880 | priv->txList = priv->rxList + TLAN_NUM_RX_LISTS; | 880 | priv->txList = priv->rxList + TLAN_NUM_RX_LISTS; |
@@ -941,18 +941,18 @@ static int TLan_Open( struct net_device *dev ) | |||
941 | { | 941 | { |
942 | TLanPrivateInfo *priv = netdev_priv(dev); | 942 | TLanPrivateInfo *priv = netdev_priv(dev); |
943 | int err; | 943 | int err; |
944 | 944 | ||
945 | priv->tlanRev = TLan_DioRead8( dev->base_addr, TLAN_DEF_REVISION ); | 945 | priv->tlanRev = TLan_DioRead8( dev->base_addr, TLAN_DEF_REVISION ); |
946 | err = request_irq( dev->irq, TLan_HandleInterrupt, IRQF_SHARED, TLanSignature, dev ); | 946 | err = request_irq( dev->irq, TLan_HandleInterrupt, IRQF_SHARED, TLanSignature, dev ); |
947 | 947 | ||
948 | if ( err ) { | 948 | if ( err ) { |
949 | printk(KERN_ERR "TLAN: Cannot open %s because IRQ %d is already in use.\n", dev->name, dev->irq ); | 949 | printk(KERN_ERR "TLAN: Cannot open %s because IRQ %d is already in use.\n", dev->name, dev->irq ); |
950 | return err; | 950 | return err; |
951 | } | 951 | } |
952 | 952 | ||
953 | init_timer(&priv->timer); | 953 | init_timer(&priv->timer); |
954 | netif_start_queue(dev); | 954 | netif_start_queue(dev); |
955 | 955 | ||
956 | /* NOTE: It might not be necessary to read the stats before a | 956 | /* NOTE: It might not be necessary to read the stats before a |
957 | reset if you don't care what the values are. | 957 | reset if you don't care what the values are. |
958 | */ | 958 | */ |
@@ -970,12 +970,12 @@ static int TLan_Open( struct net_device *dev ) | |||
970 | 970 | ||
971 | /************************************************************** | 971 | /************************************************************** |
972 | * TLan_ioctl | 972 | * TLan_ioctl |
973 | * | 973 | * |
974 | * Returns: | 974 | * Returns: |
975 | * 0 on success, error code otherwise | 975 | * 0 on success, error code otherwise |
976 | * Params: | 976 | * Params: |
977 | * dev structure of device to receive ioctl. | 977 | * dev structure of device to receive ioctl. |
978 | * | 978 | * |
979 | * rq ifreq structure to hold userspace data. | 979 | * rq ifreq structure to hold userspace data. |
980 | * | 980 | * |
981 | * cmd ioctl command. | 981 | * cmd ioctl command. |
@@ -988,7 +988,7 @@ static int TLan_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) | |||
988 | TLanPrivateInfo *priv = netdev_priv(dev); | 988 | TLanPrivateInfo *priv = netdev_priv(dev); |
989 | struct mii_ioctl_data *data = if_mii(rq); | 989 | struct mii_ioctl_data *data = if_mii(rq); |
990 | u32 phy = priv->phy[priv->phyNum]; | 990 | u32 phy = priv->phy[priv->phyNum]; |
991 | 991 | ||
992 | if (!priv->phyOnline) | 992 | if (!priv->phyOnline) |
993 | return -EAGAIN; | 993 | return -EAGAIN; |
994 | 994 | ||
@@ -1000,7 +1000,7 @@ static int TLan_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) | |||
1000 | case SIOCGMIIREG: /* Read MII PHY register. */ | 1000 | case SIOCGMIIREG: /* Read MII PHY register. */ |
1001 | TLan_MiiReadReg(dev, data->phy_id & 0x1f, data->reg_num & 0x1f, &data->val_out); | 1001 | TLan_MiiReadReg(dev, data->phy_id & 0x1f, data->reg_num & 0x1f, &data->val_out); |
1002 | return 0; | 1002 | return 0; |
1003 | 1003 | ||
1004 | 1004 | ||
1005 | case SIOCSMIIREG: /* Write MII PHY register. */ | 1005 | case SIOCSMIIREG: /* Write MII PHY register. */ |
1006 | if (!capable(CAP_NET_ADMIN)) | 1006 | if (!capable(CAP_NET_ADMIN)) |
@@ -1019,31 +1019,31 @@ static int TLan_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) | |||
1019 | * Returns: nothing | 1019 | * Returns: nothing |
1020 | * | 1020 | * |
1021 | * Params: | 1021 | * Params: |
1022 | * dev structure of device which timed out | 1022 | * dev structure of device which timed out |
1023 | * during transmit. | 1023 | * during transmit. |
1024 | * | 1024 | * |
1025 | **************************************************************/ | 1025 | **************************************************************/ |
1026 | 1026 | ||
1027 | static void TLan_tx_timeout(struct net_device *dev) | 1027 | static void TLan_tx_timeout(struct net_device *dev) |
1028 | { | 1028 | { |
1029 | 1029 | ||
1030 | TLAN_DBG( TLAN_DEBUG_GNRL, "%s: Transmit timed out.\n", dev->name); | 1030 | TLAN_DBG( TLAN_DEBUG_GNRL, "%s: Transmit timed out.\n", dev->name); |
1031 | 1031 | ||
1032 | /* Ok so we timed out, lets see what we can do about it...*/ | 1032 | /* Ok so we timed out, lets see what we can do about it...*/ |
1033 | TLan_FreeLists( dev ); | 1033 | TLan_FreeLists( dev ); |
1034 | TLan_ResetLists( dev ); | 1034 | TLan_ResetLists( dev ); |
1035 | TLan_ReadAndClearStats( dev, TLAN_IGNORE ); | 1035 | TLan_ReadAndClearStats( dev, TLAN_IGNORE ); |
1036 | TLan_ResetAdapter( dev ); | 1036 | TLan_ResetAdapter( dev ); |
1037 | dev->trans_start = jiffies; | 1037 | dev->trans_start = jiffies; |
1038 | netif_wake_queue( dev ); | 1038 | netif_wake_queue( dev ); |
1039 | 1039 | ||
1040 | } | 1040 | } |
1041 | 1041 | ||
1042 | 1042 | ||
1043 | 1043 | ||
1044 | /*************************************************************** | 1044 | /*************************************************************** |
1045 | * TLan_StartTx | 1045 | * TLan_StartTx |
1046 | * | 1046 | * |
1047 | * Returns: | 1047 | * Returns: |
1048 | * 0 on success, non-zero on failure. | 1048 | * 0 on success, non-zero on failure. |
1049 | * Parms: | 1049 | * Parms: |
@@ -1079,7 +1079,7 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev ) | |||
1079 | 1079 | ||
1080 | tail_list = priv->txList + priv->txTail; | 1080 | tail_list = priv->txList + priv->txTail; |
1081 | tail_list_phys = priv->txListDMA + sizeof(TLanList) * priv->txTail; | 1081 | tail_list_phys = priv->txListDMA + sizeof(TLanList) * priv->txTail; |
1082 | 1082 | ||
1083 | if ( tail_list->cStat != TLAN_CSTAT_UNUSED ) { | 1083 | if ( tail_list->cStat != TLAN_CSTAT_UNUSED ) { |
1084 | TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: %s is busy (Head=%d Tail=%d)\n", dev->name, priv->txHead, priv->txTail ); | 1084 | TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: %s is busy (Head=%d Tail=%d)\n", dev->name, priv->txHead, priv->txTail ); |
1085 | netif_stop_queue(dev); | 1085 | netif_stop_queue(dev); |
@@ -1132,7 +1132,7 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev ) | |||
1132 | 1132 | ||
1133 | if ( bbuf ) | 1133 | if ( bbuf ) |
1134 | dev_kfree_skb_any(skb); | 1134 | dev_kfree_skb_any(skb); |
1135 | 1135 | ||
1136 | dev->trans_start = jiffies; | 1136 | dev->trans_start = jiffies; |
1137 | return 0; | 1137 | return 0; |
1138 | 1138 | ||
@@ -1143,8 +1143,8 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev ) | |||
1143 | 1143 | ||
1144 | /*************************************************************** | 1144 | /*************************************************************** |
1145 | * TLan_HandleInterrupt | 1145 | * TLan_HandleInterrupt |
1146 | * | 1146 | * |
1147 | * Returns: | 1147 | * Returns: |
1148 | * Nothing | 1148 | * Nothing |
1149 | * Parms: | 1149 | * Parms: |
1150 | * irq The line on which the interrupt | 1150 | * irq The line on which the interrupt |
@@ -1198,7 +1198,7 @@ static irqreturn_t TLan_HandleInterrupt(int irq, void *dev_id, struct pt_regs *r | |||
1198 | 1198 | ||
1199 | /*************************************************************** | 1199 | /*************************************************************** |
1200 | * TLan_Close | 1200 | * TLan_Close |
1201 | * | 1201 | * |
1202 | * Returns: | 1202 | * Returns: |
1203 | * An error code. | 1203 | * An error code. |
1204 | * Parms: | 1204 | * Parms: |
@@ -1224,7 +1224,7 @@ static int TLan_Close(struct net_device *dev) | |||
1224 | del_timer_sync( &priv->timer ); | 1224 | del_timer_sync( &priv->timer ); |
1225 | priv->timer.function = NULL; | 1225 | priv->timer.function = NULL; |
1226 | } | 1226 | } |
1227 | 1227 | ||
1228 | free_irq( dev->irq, dev ); | 1228 | free_irq( dev->irq, dev ); |
1229 | TLan_FreeLists( dev ); | 1229 | TLan_FreeLists( dev ); |
1230 | TLAN_DBG( TLAN_DEBUG_GNRL, "Device %s closed.\n", dev->name ); | 1230 | TLAN_DBG( TLAN_DEBUG_GNRL, "Device %s closed.\n", dev->name ); |
@@ -1238,7 +1238,7 @@ static int TLan_Close(struct net_device *dev) | |||
1238 | 1238 | ||
1239 | /*************************************************************** | 1239 | /*************************************************************** |
1240 | * TLan_GetStats | 1240 | * TLan_GetStats |
1241 | * | 1241 | * |
1242 | * Returns: | 1242 | * Returns: |
1243 | * A pointer to the device's statistics structure. | 1243 | * A pointer to the device's statistics structure. |
1244 | * Parms: | 1244 | * Parms: |
@@ -1263,7 +1263,7 @@ static struct net_device_stats *TLan_GetStats( struct net_device *dev ) | |||
1263 | TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: %s Busy count = %d\n", dev->name, priv->txBusyCount ); | 1263 | TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: %s Busy count = %d\n", dev->name, priv->txBusyCount ); |
1264 | if ( debug & TLAN_DEBUG_GNRL ) { | 1264 | if ( debug & TLAN_DEBUG_GNRL ) { |
1265 | TLan_PrintDio( dev->base_addr ); | 1265 | TLan_PrintDio( dev->base_addr ); |
1266 | TLan_PhyPrint( dev ); | 1266 | TLan_PhyPrint( dev ); |
1267 | } | 1267 | } |
1268 | if ( debug & TLAN_DEBUG_LIST ) { | 1268 | if ( debug & TLAN_DEBUG_LIST ) { |
1269 | for ( i = 0; i < TLAN_NUM_RX_LISTS; i++ ) | 1269 | for ( i = 0; i < TLAN_NUM_RX_LISTS; i++ ) |
@@ -1271,7 +1271,7 @@ static struct net_device_stats *TLan_GetStats( struct net_device *dev ) | |||
1271 | for ( i = 0; i < TLAN_NUM_TX_LISTS; i++ ) | 1271 | for ( i = 0; i < TLAN_NUM_TX_LISTS; i++ ) |
1272 | TLan_PrintList( priv->txList + i, "TX", i ); | 1272 | TLan_PrintList( priv->txList + i, "TX", i ); |
1273 | } | 1273 | } |
1274 | 1274 | ||
1275 | return ( &( (TLanPrivateInfo *) netdev_priv(dev) )->stats ); | 1275 | return ( &( (TLanPrivateInfo *) netdev_priv(dev) )->stats ); |
1276 | 1276 | ||
1277 | } /* TLan_GetStats */ | 1277 | } /* TLan_GetStats */ |
@@ -1281,7 +1281,7 @@ static struct net_device_stats *TLan_GetStats( struct net_device *dev ) | |||
1281 | 1281 | ||
1282 | /*************************************************************** | 1282 | /*************************************************************** |
1283 | * TLan_SetMulticastList | 1283 | * TLan_SetMulticastList |
1284 | * | 1284 | * |
1285 | * Returns: | 1285 | * Returns: |
1286 | * Nothing | 1286 | * Nothing |
1287 | * Parms: | 1287 | * Parms: |
@@ -1300,7 +1300,7 @@ static struct net_device_stats *TLan_GetStats( struct net_device *dev ) | |||
1300 | **************************************************************/ | 1300 | **************************************************************/ |
1301 | 1301 | ||
1302 | static void TLan_SetMulticastList( struct net_device *dev ) | 1302 | static void TLan_SetMulticastList( struct net_device *dev ) |
1303 | { | 1303 | { |
1304 | struct dev_mc_list *dmi = dev->mc_list; | 1304 | struct dev_mc_list *dmi = dev->mc_list; |
1305 | u32 hash1 = 0; | 1305 | u32 hash1 = 0; |
1306 | u32 hash2 = 0; | 1306 | u32 hash2 = 0; |
@@ -1315,7 +1315,7 @@ static void TLan_SetMulticastList( struct net_device *dev ) | |||
1315 | tmp = TLan_DioRead8( dev->base_addr, TLAN_NET_CMD ); | 1315 | tmp = TLan_DioRead8( dev->base_addr, TLAN_NET_CMD ); |
1316 | TLan_DioWrite8( dev->base_addr, TLAN_NET_CMD, tmp & ~TLAN_NET_CMD_CAF ); | 1316 | TLan_DioWrite8( dev->base_addr, TLAN_NET_CMD, tmp & ~TLAN_NET_CMD_CAF ); |
1317 | if ( dev->flags & IFF_ALLMULTI ) { | 1317 | if ( dev->flags & IFF_ALLMULTI ) { |
1318 | for ( i = 0; i < 3; i++ ) | 1318 | for ( i = 0; i < 3; i++ ) |
1319 | TLan_SetMac( dev, i + 1, NULL ); | 1319 | TLan_SetMac( dev, i + 1, NULL ); |
1320 | TLan_DioWrite32( dev->base_addr, TLAN_HASH_1, 0xFFFFFFFF ); | 1320 | TLan_DioWrite32( dev->base_addr, TLAN_HASH_1, 0xFFFFFFFF ); |
1321 | TLan_DioWrite32( dev->base_addr, TLAN_HASH_2, 0xFFFFFFFF ); | 1321 | TLan_DioWrite32( dev->base_addr, TLAN_HASH_2, 0xFFFFFFFF ); |
@@ -1325,14 +1325,14 @@ static void TLan_SetMulticastList( struct net_device *dev ) | |||
1325 | TLan_SetMac( dev, i + 1, (char *) &dmi->dmi_addr ); | 1325 | TLan_SetMac( dev, i + 1, (char *) &dmi->dmi_addr ); |
1326 | } else { | 1326 | } else { |
1327 | offset = TLan_HashFunc( (u8 *) &dmi->dmi_addr ); | 1327 | offset = TLan_HashFunc( (u8 *) &dmi->dmi_addr ); |
1328 | if ( offset < 32 ) | 1328 | if ( offset < 32 ) |
1329 | hash1 |= ( 1 << offset ); | 1329 | hash1 |= ( 1 << offset ); |
1330 | else | 1330 | else |
1331 | hash2 |= ( 1 << ( offset - 32 ) ); | 1331 | hash2 |= ( 1 << ( offset - 32 ) ); |
1332 | } | 1332 | } |
1333 | dmi = dmi->next; | 1333 | dmi = dmi->next; |
1334 | } | 1334 | } |
1335 | for ( ; i < 3; i++ ) | 1335 | for ( ; i < 3; i++ ) |
1336 | TLan_SetMac( dev, i + 1, NULL ); | 1336 | TLan_SetMac( dev, i + 1, NULL ); |
1337 | TLan_DioWrite32( dev->base_addr, TLAN_HASH_1, hash1 ); | 1337 | TLan_DioWrite32( dev->base_addr, TLAN_HASH_1, hash1 ); |
1338 | TLan_DioWrite32( dev->base_addr, TLAN_HASH_2, hash2 ); | 1338 | TLan_DioWrite32( dev->base_addr, TLAN_HASH_2, hash2 ); |
@@ -1350,7 +1350,7 @@ static void TLan_SetMulticastList( struct net_device *dev ) | |||
1350 | 1350 | ||
1351 | Please see Chap. 4, "Interrupt Handling" of the "ThunderLAN | 1351 | Please see Chap. 4, "Interrupt Handling" of the "ThunderLAN |
1352 | Programmer's Guide" for more informations on handling interrupts | 1352 | Programmer's Guide" for more informations on handling interrupts |
1353 | generated by TLAN based adapters. | 1353 | generated by TLAN based adapters. |
1354 | 1354 | ||
1355 | ****************************************************************************** | 1355 | ****************************************************************************** |
1356 | *****************************************************************************/ | 1356 | *****************************************************************************/ |
@@ -1413,7 +1413,7 @@ u32 TLan_HandleTxEOF( struct net_device *dev, u16 host_int ) | |||
1413 | dma_addr_t head_list_phys; | 1413 | dma_addr_t head_list_phys; |
1414 | u32 ack = 0; | 1414 | u32 ack = 0; |
1415 | u16 tmpCStat; | 1415 | u16 tmpCStat; |
1416 | 1416 | ||
1417 | TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: Handling TX EOF (Head=%d Tail=%d)\n", priv->txHead, priv->txTail ); | 1417 | TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: Handling TX EOF (Head=%d Tail=%d)\n", priv->txHead, priv->txTail ); |
1418 | head_list = priv->txList + priv->txHead; | 1418 | head_list = priv->txList + priv->txHead; |
1419 | 1419 | ||
@@ -1426,21 +1426,21 @@ u32 TLan_HandleTxEOF( struct net_device *dev, u16 host_int ) | |||
1426 | head_list->buffer[8].address = 0; | 1426 | head_list->buffer[8].address = 0; |
1427 | head_list->buffer[9].address = 0; | 1427 | head_list->buffer[9].address = 0; |
1428 | } | 1428 | } |
1429 | 1429 | ||
1430 | if ( tmpCStat & TLAN_CSTAT_EOC ) | 1430 | if ( tmpCStat & TLAN_CSTAT_EOC ) |
1431 | eoc = 1; | 1431 | eoc = 1; |
1432 | 1432 | ||
1433 | priv->stats.tx_bytes += head_list->frameSize; | 1433 | priv->stats.tx_bytes += head_list->frameSize; |
1434 | 1434 | ||
1435 | head_list->cStat = TLAN_CSTAT_UNUSED; | 1435 | head_list->cStat = TLAN_CSTAT_UNUSED; |
1436 | netif_start_queue(dev); | 1436 | netif_start_queue(dev); |
1437 | CIRC_INC( priv->txHead, TLAN_NUM_TX_LISTS ); | 1437 | CIRC_INC( priv->txHead, TLAN_NUM_TX_LISTS ); |
1438 | head_list = priv->txList + priv->txHead; | 1438 | head_list = priv->txList + priv->txHead; |
1439 | } | 1439 | } |
1440 | 1440 | ||
1441 | if (!ack) | 1441 | if (!ack) |
1442 | printk(KERN_INFO "TLAN: Received interrupt for uncompleted TX frame.\n"); | 1442 | printk(KERN_INFO "TLAN: Received interrupt for uncompleted TX frame.\n"); |
1443 | 1443 | ||
1444 | if ( eoc ) { | 1444 | if ( eoc ) { |
1445 | TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: Handling TX EOC (Head=%d Tail=%d)\n", priv->txHead, priv->txTail ); | 1445 | TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: Handling TX EOC (Head=%d Tail=%d)\n", priv->txHead, priv->txTail ); |
1446 | head_list = priv->txList + priv->txHead; | 1446 | head_list = priv->txList + priv->txHead; |
@@ -1452,7 +1452,7 @@ u32 TLan_HandleTxEOF( struct net_device *dev, u16 host_int ) | |||
1452 | priv->txInProgress = 0; | 1452 | priv->txInProgress = 0; |
1453 | } | 1453 | } |
1454 | } | 1454 | } |
1455 | 1455 | ||
1456 | if ( priv->adapter->flags & TLAN_ADAPTER_ACTIVITY_LED ) { | 1456 | if ( priv->adapter->flags & TLAN_ADAPTER_ACTIVITY_LED ) { |
1457 | TLan_DioWrite8( dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK | TLAN_LED_ACT ); | 1457 | TLan_DioWrite8( dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK | TLAN_LED_ACT ); |
1458 | if ( priv->timer.function == NULL ) { | 1458 | if ( priv->timer.function == NULL ) { |
@@ -1544,13 +1544,13 @@ u32 TLan_HandleRxEOF( struct net_device *dev, u16 host_int ) | |||
1544 | TLAN_DBG( TLAN_DEBUG_RX, "RECEIVE: Handling RX EOF (Head=%d Tail=%d)\n", priv->rxHead, priv->rxTail ); | 1544 | TLAN_DBG( TLAN_DEBUG_RX, "RECEIVE: Handling RX EOF (Head=%d Tail=%d)\n", priv->rxHead, priv->rxTail ); |
1545 | head_list = priv->rxList + priv->rxHead; | 1545 | head_list = priv->rxList + priv->rxHead; |
1546 | head_list_phys = priv->rxListDMA + sizeof(TLanList) * priv->rxHead; | 1546 | head_list_phys = priv->rxListDMA + sizeof(TLanList) * priv->rxHead; |
1547 | 1547 | ||
1548 | while (((tmpCStat = head_list->cStat) & TLAN_CSTAT_FRM_CMP) && (ack < 255)) { | 1548 | while (((tmpCStat = head_list->cStat) & TLAN_CSTAT_FRM_CMP) && (ack < 255)) { |
1549 | frameSize = head_list->frameSize; | 1549 | frameSize = head_list->frameSize; |
1550 | ack++; | 1550 | ack++; |
1551 | if (tmpCStat & TLAN_CSTAT_EOC) | 1551 | if (tmpCStat & TLAN_CSTAT_EOC) |
1552 | eoc = 1; | 1552 | eoc = 1; |
1553 | 1553 | ||
1554 | if (bbuf) { | 1554 | if (bbuf) { |
1555 | skb = dev_alloc_skb(frameSize + 7); | 1555 | skb = dev_alloc_skb(frameSize + 7); |
1556 | if (skb == NULL) | 1556 | if (skb == NULL) |
@@ -1560,7 +1560,7 @@ u32 TLan_HandleRxEOF( struct net_device *dev, u16 host_int ) | |||
1560 | skb->dev = dev; | 1560 | skb->dev = dev; |
1561 | skb_reserve(skb, 2); | 1561 | skb_reserve(skb, 2); |
1562 | t = (void *) skb_put(skb, frameSize); | 1562 | t = (void *) skb_put(skb, frameSize); |
1563 | 1563 | ||
1564 | priv->stats.rx_bytes += head_list->frameSize; | 1564 | priv->stats.rx_bytes += head_list->frameSize; |
1565 | 1565 | ||
1566 | memcpy( t, head_buffer, frameSize ); | 1566 | memcpy( t, head_buffer, frameSize ); |
@@ -1569,15 +1569,15 @@ u32 TLan_HandleRxEOF( struct net_device *dev, u16 host_int ) | |||
1569 | } | 1569 | } |
1570 | } else { | 1570 | } else { |
1571 | struct sk_buff *new_skb; | 1571 | struct sk_buff *new_skb; |
1572 | 1572 | ||
1573 | /* | 1573 | /* |
1574 | * I changed the algorithm here. What we now do | 1574 | * I changed the algorithm here. What we now do |
1575 | * is allocate the new frame. If this fails we | 1575 | * is allocate the new frame. If this fails we |
1576 | * simply recycle the frame. | 1576 | * simply recycle the frame. |
1577 | */ | 1577 | */ |
1578 | 1578 | ||
1579 | new_skb = dev_alloc_skb( TLAN_MAX_FRAME_SIZE + 7 ); | 1579 | new_skb = dev_alloc_skb( TLAN_MAX_FRAME_SIZE + 7 ); |
1580 | 1580 | ||
1581 | if ( new_skb != NULL ) { | 1581 | if ( new_skb != NULL ) { |
1582 | skb = TLan_GetSKB(head_list); | 1582 | skb = TLan_GetSKB(head_list); |
1583 | pci_unmap_single(priv->pciDev, head_list->buffer[0].address, TLAN_MAX_FRAME_SIZE, PCI_DMA_FROMDEVICE); | 1583 | pci_unmap_single(priv->pciDev, head_list->buffer[0].address, TLAN_MAX_FRAME_SIZE, PCI_DMA_FROMDEVICE); |
@@ -1587,14 +1587,14 @@ u32 TLan_HandleRxEOF( struct net_device *dev, u16 host_int ) | |||
1587 | 1587 | ||
1588 | skb->protocol = eth_type_trans( skb, dev ); | 1588 | skb->protocol = eth_type_trans( skb, dev ); |
1589 | netif_rx( skb ); | 1589 | netif_rx( skb ); |
1590 | 1590 | ||
1591 | new_skb->dev = dev; | 1591 | new_skb->dev = dev; |
1592 | skb_reserve( new_skb, 2 ); | 1592 | skb_reserve( new_skb, 2 ); |
1593 | t = (void *) skb_put( new_skb, TLAN_MAX_FRAME_SIZE ); | 1593 | t = (void *) skb_put( new_skb, TLAN_MAX_FRAME_SIZE ); |
1594 | head_list->buffer[0].address = pci_map_single(priv->pciDev, new_skb->data, TLAN_MAX_FRAME_SIZE, PCI_DMA_FROMDEVICE); | 1594 | head_list->buffer[0].address = pci_map_single(priv->pciDev, new_skb->data, TLAN_MAX_FRAME_SIZE, PCI_DMA_FROMDEVICE); |
1595 | head_list->buffer[8].address = (u32) t; | 1595 | head_list->buffer[8].address = (u32) t; |
1596 | TLan_StoreSKB(head_list, new_skb); | 1596 | TLan_StoreSKB(head_list, new_skb); |
1597 | } else | 1597 | } else |
1598 | printk(KERN_WARNING "TLAN: Couldn't allocate memory for received data.\n" ); | 1598 | printk(KERN_WARNING "TLAN: Couldn't allocate memory for received data.\n" ); |
1599 | } | 1599 | } |
1600 | 1600 | ||
@@ -1611,11 +1611,11 @@ u32 TLan_HandleRxEOF( struct net_device *dev, u16 host_int ) | |||
1611 | 1611 | ||
1612 | if (!ack) | 1612 | if (!ack) |
1613 | printk(KERN_INFO "TLAN: Received interrupt for uncompleted RX frame.\n"); | 1613 | printk(KERN_INFO "TLAN: Received interrupt for uncompleted RX frame.\n"); |
1614 | |||
1615 | 1614 | ||
1616 | 1615 | ||
1617 | 1616 | ||
1618 | if ( eoc ) { | 1617 | |
1618 | if ( eoc ) { | ||
1619 | TLAN_DBG( TLAN_DEBUG_RX, "RECEIVE: Handling RX EOC (Head=%d Tail=%d)\n", priv->rxHead, priv->rxTail ); | 1619 | TLAN_DBG( TLAN_DEBUG_RX, "RECEIVE: Handling RX EOC (Head=%d Tail=%d)\n", priv->rxHead, priv->rxTail ); |
1620 | head_list = priv->rxList + priv->rxHead; | 1620 | head_list = priv->rxList + priv->rxHead; |
1621 | head_list_phys = priv->rxListDMA + sizeof(TLanList) * priv->rxHead; | 1621 | head_list_phys = priv->rxListDMA + sizeof(TLanList) * priv->rxHead; |
@@ -1639,7 +1639,7 @@ u32 TLan_HandleRxEOF( struct net_device *dev, u16 host_int ) | |||
1639 | } | 1639 | } |
1640 | 1640 | ||
1641 | dev->last_rx = jiffies; | 1641 | dev->last_rx = jiffies; |
1642 | 1642 | ||
1643 | return ack; | 1643 | return ack; |
1644 | 1644 | ||
1645 | } /* TLan_HandleRxEOF */ | 1645 | } /* TLan_HandleRxEOF */ |
@@ -1700,7 +1700,7 @@ u32 TLan_HandleTxEOC( struct net_device *dev, u16 host_int ) | |||
1700 | TLanList *head_list; | 1700 | TLanList *head_list; |
1701 | dma_addr_t head_list_phys; | 1701 | dma_addr_t head_list_phys; |
1702 | u32 ack = 1; | 1702 | u32 ack = 1; |
1703 | 1703 | ||
1704 | host_int = 0; | 1704 | host_int = 0; |
1705 | if ( priv->tlanRev < 0x30 ) { | 1705 | if ( priv->tlanRev < 0x30 ) { |
1706 | TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: Handling TX EOC (Head=%d Tail=%d) -- IRQ\n", priv->txHead, priv->txTail ); | 1706 | TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: Handling TX EOC (Head=%d Tail=%d) -- IRQ\n", priv->txHead, priv->txTail ); |
@@ -1743,7 +1743,7 @@ u32 TLan_HandleTxEOC( struct net_device *dev, u16 host_int ) | |||
1743 | **************************************************************/ | 1743 | **************************************************************/ |
1744 | 1744 | ||
1745 | u32 TLan_HandleStatusCheck( struct net_device *dev, u16 host_int ) | 1745 | u32 TLan_HandleStatusCheck( struct net_device *dev, u16 host_int ) |
1746 | { | 1746 | { |
1747 | TLanPrivateInfo *priv = netdev_priv(dev); | 1747 | TLanPrivateInfo *priv = netdev_priv(dev); |
1748 | u32 ack; | 1748 | u32 ack; |
1749 | u32 error; | 1749 | u32 error; |
@@ -1751,7 +1751,7 @@ u32 TLan_HandleStatusCheck( struct net_device *dev, u16 host_int ) | |||
1751 | u32 phy; | 1751 | u32 phy; |
1752 | u16 tlphy_ctl; | 1752 | u16 tlphy_ctl; |
1753 | u16 tlphy_sts; | 1753 | u16 tlphy_sts; |
1754 | 1754 | ||
1755 | ack = 1; | 1755 | ack = 1; |
1756 | if ( host_int & TLAN_HI_IV_MASK ) { | 1756 | if ( host_int & TLAN_HI_IV_MASK ) { |
1757 | netif_stop_queue( dev ); | 1757 | netif_stop_queue( dev ); |
@@ -1785,7 +1785,7 @@ u32 TLan_HandleStatusCheck( struct net_device *dev, u16 host_int ) | |||
1785 | } | 1785 | } |
1786 | 1786 | ||
1787 | if (debug) { | 1787 | if (debug) { |
1788 | TLan_PhyPrint( dev ); | 1788 | TLan_PhyPrint( dev ); |
1789 | } | 1789 | } |
1790 | } | 1790 | } |
1791 | } | 1791 | } |
@@ -1887,7 +1887,7 @@ void TLan_Timer( unsigned long data ) | |||
1887 | priv->timer.function = NULL; | 1887 | priv->timer.function = NULL; |
1888 | 1888 | ||
1889 | switch ( priv->timerType ) { | 1889 | switch ( priv->timerType ) { |
1890 | #ifdef MONITOR | 1890 | #ifdef MONITOR |
1891 | case TLAN_TIMER_LINK_BEAT: | 1891 | case TLAN_TIMER_LINK_BEAT: |
1892 | TLan_PhyMonitor( dev ); | 1892 | TLan_PhyMonitor( dev ); |
1893 | break; | 1893 | break; |
@@ -1946,7 +1946,7 @@ void TLan_Timer( unsigned long data ) | |||
1946 | 1946 | ||
1947 | /*************************************************************** | 1947 | /*************************************************************** |
1948 | * TLan_ResetLists | 1948 | * TLan_ResetLists |
1949 | * | 1949 | * |
1950 | * Returns: | 1950 | * Returns: |
1951 | * Nothing | 1951 | * Nothing |
1952 | * Parms: | 1952 | * Parms: |
@@ -2055,7 +2055,7 @@ void TLan_FreeLists( struct net_device *dev ) | |||
2055 | 2055 | ||
2056 | /*************************************************************** | 2056 | /*************************************************************** |
2057 | * TLan_PrintDio | 2057 | * TLan_PrintDio |
2058 | * | 2058 | * |
2059 | * Returns: | 2059 | * Returns: |
2060 | * Nothing | 2060 | * Nothing |
2061 | * Parms: | 2061 | * Parms: |
@@ -2087,7 +2087,7 @@ void TLan_PrintDio( u16 io_base ) | |||
2087 | 2087 | ||
2088 | /*************************************************************** | 2088 | /*************************************************************** |
2089 | * TLan_PrintList | 2089 | * TLan_PrintList |
2090 | * | 2090 | * |
2091 | * Returns: | 2091 | * Returns: |
2092 | * Nothing | 2092 | * Nothing |
2093 | * Parms: | 2093 | * Parms: |
@@ -2128,7 +2128,7 @@ void TLan_PrintList( TLanList *list, char *type, int num) | |||
2128 | * Parms: | 2128 | * Parms: |
2129 | * dev Pointer to device structure of adapter | 2129 | * dev Pointer to device structure of adapter |
2130 | * to which to read stats. | 2130 | * to which to read stats. |
2131 | * record Flag indicating whether to add | 2131 | * record Flag indicating whether to add |
2132 | * | 2132 | * |
2133 | * This functions reads all the internal status registers | 2133 | * This functions reads all the internal status registers |
2134 | * of the TLAN chip, which clears them as a side effect. | 2134 | * of the TLAN chip, which clears them as a side effect. |
@@ -2158,13 +2158,13 @@ void TLan_ReadAndClearStats( struct net_device *dev, int record ) | |||
2158 | rx_good += inb( dev->base_addr + TLAN_DIO_DATA + 1 ) << 8; | 2158 | rx_good += inb( dev->base_addr + TLAN_DIO_DATA + 1 ) << 8; |
2159 | rx_good += inb( dev->base_addr + TLAN_DIO_DATA + 2 ) << 16; | 2159 | rx_good += inb( dev->base_addr + TLAN_DIO_DATA + 2 ) << 16; |
2160 | rx_over = inb( dev->base_addr + TLAN_DIO_DATA + 3 ); | 2160 | rx_over = inb( dev->base_addr + TLAN_DIO_DATA + 3 ); |
2161 | 2161 | ||
2162 | outw( TLAN_DEFERRED_TX, dev->base_addr + TLAN_DIO_ADR ); | 2162 | outw( TLAN_DEFERRED_TX, dev->base_addr + TLAN_DIO_ADR ); |
2163 | def_tx = inb( dev->base_addr + TLAN_DIO_DATA ); | 2163 | def_tx = inb( dev->base_addr + TLAN_DIO_DATA ); |
2164 | def_tx += inb( dev->base_addr + TLAN_DIO_DATA + 1 ) << 8; | 2164 | def_tx += inb( dev->base_addr + TLAN_DIO_DATA + 1 ) << 8; |
2165 | crc = inb( dev->base_addr + TLAN_DIO_DATA + 2 ); | 2165 | crc = inb( dev->base_addr + TLAN_DIO_DATA + 2 ); |
2166 | code = inb( dev->base_addr + TLAN_DIO_DATA + 3 ); | 2166 | code = inb( dev->base_addr + TLAN_DIO_DATA + 3 ); |
2167 | 2167 | ||
2168 | outw( TLAN_MULTICOL_FRMS, dev->base_addr + TLAN_DIO_ADR ); | 2168 | outw( TLAN_MULTICOL_FRMS, dev->base_addr + TLAN_DIO_ADR ); |
2169 | multi_col = inb( dev->base_addr + TLAN_DIO_DATA ); | 2169 | multi_col = inb( dev->base_addr + TLAN_DIO_DATA ); |
2170 | multi_col += inb( dev->base_addr + TLAN_DIO_DATA + 1 ) << 8; | 2170 | multi_col += inb( dev->base_addr + TLAN_DIO_DATA + 1 ) << 8; |
@@ -2190,7 +2190,7 @@ void TLan_ReadAndClearStats( struct net_device *dev, int record ) | |||
2190 | priv->stats.tx_aborted_errors += tx_under; | 2190 | priv->stats.tx_aborted_errors += tx_under; |
2191 | priv->stats.tx_carrier_errors += loss; | 2191 | priv->stats.tx_carrier_errors += loss; |
2192 | } | 2192 | } |
2193 | 2193 | ||
2194 | } /* TLan_ReadAndClearStats */ | 2194 | } /* TLan_ReadAndClearStats */ |
2195 | 2195 | ||
2196 | 2196 | ||
@@ -2231,7 +2231,7 @@ TLan_ResetAdapter( struct net_device *dev ) | |||
2231 | data = inl(dev->base_addr + TLAN_HOST_CMD); | 2231 | data = inl(dev->base_addr + TLAN_HOST_CMD); |
2232 | data |= TLAN_HC_AD_RST; | 2232 | data |= TLAN_HC_AD_RST; |
2233 | outl(data, dev->base_addr + TLAN_HOST_CMD); | 2233 | outl(data, dev->base_addr + TLAN_HOST_CMD); |
2234 | 2234 | ||
2235 | udelay(1000); | 2235 | udelay(1000); |
2236 | 2236 | ||
2237 | /* 2. Turn off interrupts. ( Probably isn't necessary ) */ | 2237 | /* 2. Turn off interrupts. ( Probably isn't necessary ) */ |
@@ -2270,7 +2270,7 @@ TLan_ResetAdapter( struct net_device *dev ) | |||
2270 | } | 2270 | } |
2271 | TLan_PhyDetect( dev ); | 2271 | TLan_PhyDetect( dev ); |
2272 | data = TLAN_NET_CFG_1FRAG | TLAN_NET_CFG_1CHAN; | 2272 | data = TLAN_NET_CFG_1FRAG | TLAN_NET_CFG_1CHAN; |
2273 | 2273 | ||
2274 | if ( priv->adapter->flags & TLAN_ADAPTER_BIT_RATE_PHY ) { | 2274 | if ( priv->adapter->flags & TLAN_ADAPTER_BIT_RATE_PHY ) { |
2275 | data |= TLAN_NET_CFG_BIT; | 2275 | data |= TLAN_NET_CFG_BIT; |
2276 | if ( priv->aui == 1 ) { | 2276 | if ( priv->aui == 1 ) { |
@@ -2320,15 +2320,15 @@ TLan_FinishReset( struct net_device *dev ) | |||
2320 | data |= TLAN_NET_CMD_DUPLEX; | 2320 | data |= TLAN_NET_CMD_DUPLEX; |
2321 | } | 2321 | } |
2322 | TLan_DioWrite8( dev->base_addr, TLAN_NET_CMD, data ); | 2322 | TLan_DioWrite8( dev->base_addr, TLAN_NET_CMD, data ); |
2323 | data = TLAN_NET_MASK_MASK4 | TLAN_NET_MASK_MASK5; | 2323 | data = TLAN_NET_MASK_MASK4 | TLAN_NET_MASK_MASK5; |
2324 | if ( priv->phyNum == 0 ) { | 2324 | if ( priv->phyNum == 0 ) { |
2325 | data |= TLAN_NET_MASK_MASK7; | 2325 | data |= TLAN_NET_MASK_MASK7; |
2326 | } | 2326 | } |
2327 | TLan_DioWrite8( dev->base_addr, TLAN_NET_MASK, data ); | 2327 | TLan_DioWrite8( dev->base_addr, TLAN_NET_MASK, data ); |
2328 | TLan_DioWrite16( dev->base_addr, TLAN_MAX_RX, ((1536)+7)&~7 ); | 2328 | TLan_DioWrite16( dev->base_addr, TLAN_MAX_RX, ((1536)+7)&~7 ); |
2329 | TLan_MiiReadReg( dev, phy, MII_GEN_ID_HI, &tlphy_id1 ); | 2329 | TLan_MiiReadReg( dev, phy, MII_GEN_ID_HI, &tlphy_id1 ); |
2330 | TLan_MiiReadReg( dev, phy, MII_GEN_ID_LO, &tlphy_id2 ); | 2330 | TLan_MiiReadReg( dev, phy, MII_GEN_ID_LO, &tlphy_id2 ); |
2331 | 2331 | ||
2332 | if ( ( priv->adapter->flags & TLAN_ADAPTER_UNMANAGED_PHY ) || ( priv->aui ) ) { | 2332 | if ( ( priv->adapter->flags & TLAN_ADAPTER_UNMANAGED_PHY ) || ( priv->aui ) ) { |
2333 | status = MII_GS_LINK; | 2333 | status = MII_GS_LINK; |
2334 | printk( "TLAN: %s: Link forced.\n", dev->name ); | 2334 | printk( "TLAN: %s: Link forced.\n", dev->name ); |
@@ -2336,15 +2336,15 @@ TLan_FinishReset( struct net_device *dev ) | |||
2336 | TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status ); | 2336 | TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status ); |
2337 | udelay( 1000 ); | 2337 | udelay( 1000 ); |
2338 | TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status ); | 2338 | TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status ); |
2339 | if ( (status & MII_GS_LINK) && /* We only support link info on Nat.Sem. PHY's */ | 2339 | if ( (status & MII_GS_LINK) && /* We only support link info on Nat.Sem. PHY's */ |
2340 | (tlphy_id1 == NAT_SEM_ID1) && | 2340 | (tlphy_id1 == NAT_SEM_ID1) && |
2341 | (tlphy_id2 == NAT_SEM_ID2) ) { | 2341 | (tlphy_id2 == NAT_SEM_ID2) ) { |
2342 | TLan_MiiReadReg( dev, phy, MII_AN_LPA, &partner ); | 2342 | TLan_MiiReadReg( dev, phy, MII_AN_LPA, &partner ); |
2343 | TLan_MiiReadReg( dev, phy, TLAN_TLPHY_PAR, &tlphy_par ); | 2343 | TLan_MiiReadReg( dev, phy, TLAN_TLPHY_PAR, &tlphy_par ); |
2344 | 2344 | ||
2345 | printk( "TLAN: %s: Link active with ", dev->name ); | 2345 | printk( "TLAN: %s: Link active with ", dev->name ); |
2346 | if (!(tlphy_par & TLAN_PHY_AN_EN_STAT)) { | 2346 | if (!(tlphy_par & TLAN_PHY_AN_EN_STAT)) { |
2347 | printk( "forced 10%sMbps %s-Duplex\n", | 2347 | printk( "forced 10%sMbps %s-Duplex\n", |
2348 | tlphy_par & TLAN_PHY_SPEED_100 ? "" : "0", | 2348 | tlphy_par & TLAN_PHY_SPEED_100 ? "" : "0", |
2349 | tlphy_par & TLAN_PHY_DUPLEX_FULL ? "Full" : "Half"); | 2349 | tlphy_par & TLAN_PHY_DUPLEX_FULL ? "Full" : "Half"); |
2350 | } else { | 2350 | } else { |
@@ -2359,12 +2359,12 @@ TLan_FinishReset( struct net_device *dev ) | |||
2359 | } | 2359 | } |
2360 | 2360 | ||
2361 | TLan_DioWrite8( dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK ); | 2361 | TLan_DioWrite8( dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK ); |
2362 | #ifdef MONITOR | 2362 | #ifdef MONITOR |
2363 | /* We have link beat..for now anyway */ | 2363 | /* We have link beat..for now anyway */ |
2364 | priv->link = 1; | 2364 | priv->link = 1; |
2365 | /*Enabling link beat monitoring */ | 2365 | /*Enabling link beat monitoring */ |
2366 | TLan_SetTimer( dev, (10*HZ), TLAN_TIMER_LINK_BEAT ); | 2366 | TLan_SetTimer( dev, (10*HZ), TLAN_TIMER_LINK_BEAT ); |
2367 | #endif | 2367 | #endif |
2368 | } else if (status & MII_GS_LINK) { | 2368 | } else if (status & MII_GS_LINK) { |
2369 | printk( "TLAN: %s: Link active\n", dev->name ); | 2369 | printk( "TLAN: %s: Link active\n", dev->name ); |
2370 | TLan_DioWrite8( dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK ); | 2370 | TLan_DioWrite8( dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK ); |
@@ -2426,7 +2426,7 @@ TLan_FinishReset( struct net_device *dev ) | |||
2426 | void TLan_SetMac( struct net_device *dev, int areg, char *mac ) | 2426 | void TLan_SetMac( struct net_device *dev, int areg, char *mac ) |
2427 | { | 2427 | { |
2428 | int i; | 2428 | int i; |
2429 | 2429 | ||
2430 | areg *= 6; | 2430 | areg *= 6; |
2431 | 2431 | ||
2432 | if ( mac != NULL ) { | 2432 | if ( mac != NULL ) { |
@@ -2460,7 +2460,7 @@ void TLan_SetMac( struct net_device *dev, int areg, char *mac ) | |||
2460 | * Parms: | 2460 | * Parms: |
2461 | * dev A pointer to the device structure of the | 2461 | * dev A pointer to the device structure of the |
2462 | * TLAN device having the PHYs to be detailed. | 2462 | * TLAN device having the PHYs to be detailed. |
2463 | * | 2463 | * |
2464 | * This function prints the registers a PHY (aka transceiver). | 2464 | * This function prints the registers a PHY (aka transceiver). |
2465 | * | 2465 | * |
2466 | ********************************************************************/ | 2466 | ********************************************************************/ |
@@ -2528,7 +2528,7 @@ void TLan_PhyDetect( struct net_device *dev ) | |||
2528 | } | 2528 | } |
2529 | 2529 | ||
2530 | TLan_MiiReadReg( dev, TLAN_PHY_MAX_ADDR, MII_GEN_ID_HI, &hi ); | 2530 | TLan_MiiReadReg( dev, TLAN_PHY_MAX_ADDR, MII_GEN_ID_HI, &hi ); |
2531 | 2531 | ||
2532 | if ( hi != 0xFFFF ) { | 2532 | if ( hi != 0xFFFF ) { |
2533 | priv->phy[0] = TLAN_PHY_MAX_ADDR; | 2533 | priv->phy[0] = TLAN_PHY_MAX_ADDR; |
2534 | } else { | 2534 | } else { |
@@ -2650,10 +2650,10 @@ void TLan_PhyStartLink( struct net_device *dev ) | |||
2650 | TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status ); | 2650 | TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status ); |
2651 | TLan_MiiReadReg( dev, phy, MII_GEN_STS, &ability ); | 2651 | TLan_MiiReadReg( dev, phy, MII_GEN_STS, &ability ); |
2652 | 2652 | ||
2653 | if ( ( status & MII_GS_AUTONEG ) && | 2653 | if ( ( status & MII_GS_AUTONEG ) && |
2654 | ( ! priv->aui ) ) { | 2654 | ( ! priv->aui ) ) { |
2655 | ability = status >> 11; | 2655 | ability = status >> 11; |
2656 | if ( priv->speed == TLAN_SPEED_10 && | 2656 | if ( priv->speed == TLAN_SPEED_10 && |
2657 | priv->duplex == TLAN_DUPLEX_HALF) { | 2657 | priv->duplex == TLAN_DUPLEX_HALF) { |
2658 | TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x0000); | 2658 | TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x0000); |
2659 | } else if ( priv->speed == TLAN_SPEED_10 && | 2659 | } else if ( priv->speed == TLAN_SPEED_10 && |
@@ -2668,7 +2668,7 @@ void TLan_PhyStartLink( struct net_device *dev ) | |||
2668 | priv->tlanFullDuplex = TRUE; | 2668 | priv->tlanFullDuplex = TRUE; |
2669 | TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x2100); | 2669 | TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x2100); |
2670 | } else { | 2670 | } else { |
2671 | 2671 | ||
2672 | /* Set Auto-Neg advertisement */ | 2672 | /* Set Auto-Neg advertisement */ |
2673 | TLan_MiiWriteReg( dev, phy, MII_AN_ADV, (ability << 5) | 1); | 2673 | TLan_MiiWriteReg( dev, phy, MII_AN_ADV, (ability << 5) | 1); |
2674 | /* Enablee Auto-Neg */ | 2674 | /* Enablee Auto-Neg */ |
@@ -2684,9 +2684,9 @@ void TLan_PhyStartLink( struct net_device *dev ) | |||
2684 | TLan_SetTimer( dev, (2*HZ), TLAN_TIMER_PHY_FINISH_AN ); | 2684 | TLan_SetTimer( dev, (2*HZ), TLAN_TIMER_PHY_FINISH_AN ); |
2685 | return; | 2685 | return; |
2686 | } | 2686 | } |
2687 | 2687 | ||
2688 | } | 2688 | } |
2689 | 2689 | ||
2690 | if ( ( priv->aui ) && ( priv->phyNum != 0 ) ) { | 2690 | if ( ( priv->aui ) && ( priv->phyNum != 0 ) ) { |
2691 | priv->phyNum = 0; | 2691 | priv->phyNum = 0; |
2692 | data = TLAN_NET_CFG_1FRAG | TLAN_NET_CFG_1CHAN | TLAN_NET_CFG_PHY_EN; | 2692 | data = TLAN_NET_CFG_1FRAG | TLAN_NET_CFG_1CHAN | TLAN_NET_CFG_PHY_EN; |
@@ -2698,7 +2698,7 @@ void TLan_PhyStartLink( struct net_device *dev ) | |||
2698 | TLan_MiiReadReg( dev, phy, TLAN_TLPHY_CTL, &tctl ); | 2698 | TLan_MiiReadReg( dev, phy, TLAN_TLPHY_CTL, &tctl ); |
2699 | if ( priv->aui ) { | 2699 | if ( priv->aui ) { |
2700 | tctl |= TLAN_TC_AUISEL; | 2700 | tctl |= TLAN_TC_AUISEL; |
2701 | } else { | 2701 | } else { |
2702 | tctl &= ~TLAN_TC_AUISEL; | 2702 | tctl &= ~TLAN_TC_AUISEL; |
2703 | if ( priv->duplex == TLAN_DUPLEX_FULL ) { | 2703 | if ( priv->duplex == TLAN_DUPLEX_FULL ) { |
2704 | control |= MII_GC_DUPLEX; | 2704 | control |= MII_GC_DUPLEX; |
@@ -2731,7 +2731,7 @@ void TLan_PhyFinishAutoNeg( struct net_device *dev ) | |||
2731 | u16 mode; | 2731 | u16 mode; |
2732 | u16 phy; | 2732 | u16 phy; |
2733 | u16 status; | 2733 | u16 status; |
2734 | 2734 | ||
2735 | phy = priv->phy[priv->phyNum]; | 2735 | phy = priv->phy[priv->phyNum]; |
2736 | 2736 | ||
2737 | TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status ); | 2737 | TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status ); |
@@ -2783,7 +2783,7 @@ void TLan_PhyFinishAutoNeg( struct net_device *dev ) | |||
2783 | /* Wait for 100 ms. No reason in partiticular. | 2783 | /* Wait for 100 ms. No reason in partiticular. |
2784 | */ | 2784 | */ |
2785 | TLan_SetTimer( dev, (HZ/10), TLAN_TIMER_FINISH_RESET ); | 2785 | TLan_SetTimer( dev, (HZ/10), TLAN_TIMER_FINISH_RESET ); |
2786 | 2786 | ||
2787 | } /* TLan_PhyFinishAutoNeg */ | 2787 | } /* TLan_PhyFinishAutoNeg */ |
2788 | 2788 | ||
2789 | #ifdef MONITOR | 2789 | #ifdef MONITOR |
@@ -2792,13 +2792,13 @@ void TLan_PhyFinishAutoNeg( struct net_device *dev ) | |||
2792 | * | 2792 | * |
2793 | * TLan_phyMonitor | 2793 | * TLan_phyMonitor |
2794 | * | 2794 | * |
2795 | * Returns: | 2795 | * Returns: |
2796 | * None | 2796 | * None |
2797 | * | 2797 | * |
2798 | * Params: | 2798 | * Params: |
2799 | * dev The device structure of this device. | 2799 | * dev The device structure of this device. |
2800 | * | 2800 | * |
2801 | * | 2801 | * |
2802 | * This function monitors PHY condition by reading the status | 2802 | * This function monitors PHY condition by reading the status |
2803 | * register via the MII bus. This can be used to give info | 2803 | * register via the MII bus. This can be used to give info |
2804 | * about link changes (up/down), and possible switch to alternate | 2804 | * about link changes (up/down), and possible switch to alternate |
@@ -2818,7 +2818,7 @@ void TLan_PhyMonitor( struct net_device *dev ) | |||
2818 | TLan_MiiReadReg( dev, phy, MII_GEN_STS, &phy_status ); | 2818 | TLan_MiiReadReg( dev, phy, MII_GEN_STS, &phy_status ); |
2819 | 2819 | ||
2820 | /* Check if link has been lost */ | 2820 | /* Check if link has been lost */ |
2821 | if (!(phy_status & MII_GS_LINK)) { | 2821 | if (!(phy_status & MII_GS_LINK)) { |
2822 | if (priv->link) { | 2822 | if (priv->link) { |
2823 | priv->link = 0; | 2823 | priv->link = 0; |
2824 | printk(KERN_DEBUG "TLAN: %s has lost link\n", dev->name); | 2824 | printk(KERN_DEBUG "TLAN: %s has lost link\n", dev->name); |
@@ -2837,7 +2837,7 @@ void TLan_PhyMonitor( struct net_device *dev ) | |||
2837 | 2837 | ||
2838 | /* Setup a new monitor */ | 2838 | /* Setup a new monitor */ |
2839 | TLan_SetTimer( dev, (2*HZ), TLAN_TIMER_LINK_BEAT ); | 2839 | TLan_SetTimer( dev, (2*HZ), TLAN_TIMER_LINK_BEAT ); |
2840 | } | 2840 | } |
2841 | 2841 | ||
2842 | #endif /* MONITOR */ | 2842 | #endif /* MONITOR */ |
2843 | 2843 | ||
@@ -2891,7 +2891,7 @@ int TLan_MiiReadReg( struct net_device *dev, u16 phy, u16 reg, u16 *val ) | |||
2891 | err = FALSE; | 2891 | err = FALSE; |
2892 | outw(TLAN_NET_SIO, dev->base_addr + TLAN_DIO_ADR); | 2892 | outw(TLAN_NET_SIO, dev->base_addr + TLAN_DIO_ADR); |
2893 | sio = dev->base_addr + TLAN_DIO_DATA + TLAN_NET_SIO; | 2893 | sio = dev->base_addr + TLAN_DIO_DATA + TLAN_NET_SIO; |
2894 | 2894 | ||
2895 | if (!in_irq()) | 2895 | if (!in_irq()) |
2896 | spin_lock_irqsave(&priv->lock, flags); | 2896 | spin_lock_irqsave(&priv->lock, flags); |
2897 | 2897 | ||
@@ -2939,7 +2939,7 @@ int TLan_MiiReadReg( struct net_device *dev, u16 phy, u16 reg, u16 *val ) | |||
2939 | TLan_SetBit(TLAN_NET_SIO_MINTEN, sio); | 2939 | TLan_SetBit(TLAN_NET_SIO_MINTEN, sio); |
2940 | 2940 | ||
2941 | *val = tmp; | 2941 | *val = tmp; |
2942 | 2942 | ||
2943 | if (!in_irq()) | 2943 | if (!in_irq()) |
2944 | spin_unlock_irqrestore(&priv->lock, flags); | 2944 | spin_unlock_irqrestore(&priv->lock, flags); |
2945 | 2945 | ||
@@ -3058,7 +3058,7 @@ void TLan_MiiWriteReg( struct net_device *dev, u16 phy, u16 reg, u16 val ) | |||
3058 | 3058 | ||
3059 | outw(TLAN_NET_SIO, dev->base_addr + TLAN_DIO_ADR); | 3059 | outw(TLAN_NET_SIO, dev->base_addr + TLAN_DIO_ADR); |
3060 | sio = dev->base_addr + TLAN_DIO_DATA + TLAN_NET_SIO; | 3060 | sio = dev->base_addr + TLAN_DIO_DATA + TLAN_NET_SIO; |
3061 | 3061 | ||
3062 | if (!in_irq()) | 3062 | if (!in_irq()) |
3063 | spin_lock_irqsave(&priv->lock, flags); | 3063 | spin_lock_irqsave(&priv->lock, flags); |
3064 | 3064 | ||
@@ -3081,7 +3081,7 @@ void TLan_MiiWriteReg( struct net_device *dev, u16 phy, u16 reg, u16 val ) | |||
3081 | 3081 | ||
3082 | if ( minten ) | 3082 | if ( minten ) |
3083 | TLan_SetBit( TLAN_NET_SIO_MINTEN, sio ); | 3083 | TLan_SetBit( TLAN_NET_SIO_MINTEN, sio ); |
3084 | 3084 | ||
3085 | if (!in_irq()) | 3085 | if (!in_irq()) |
3086 | spin_unlock_irqrestore(&priv->lock, flags); | 3086 | spin_unlock_irqrestore(&priv->lock, flags); |
3087 | 3087 | ||
@@ -3109,7 +3109,7 @@ void TLan_MiiWriteReg( struct net_device *dev, u16 phy, u16 reg, u16 val ) | |||
3109 | * | 3109 | * |
3110 | * Returns: | 3110 | * Returns: |
3111 | * Nothing | 3111 | * Nothing |
3112 | * Parms: | 3112 | * Parms: |
3113 | * io_base The IO port base address for the | 3113 | * io_base The IO port base address for the |
3114 | * TLAN device with the EEPROM to | 3114 | * TLAN device with the EEPROM to |
3115 | * use. | 3115 | * use. |