diff options
Diffstat (limited to 'drivers/net/tulip/winbond-840.c')
-rw-r--r-- | drivers/net/tulip/winbond-840.c | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/drivers/net/tulip/winbond-840.c b/drivers/net/tulip/winbond-840.c index 136a70c4d5e4..8fea2aa455d4 100644 --- a/drivers/net/tulip/winbond-840.c +++ b/drivers/net/tulip/winbond-840.c | |||
@@ -38,12 +38,12 @@ | |||
38 | Copyright (C) 2001 Manfred Spraul | 38 | Copyright (C) 2001 Manfred Spraul |
39 | * ethtool support (jgarzik) | 39 | * ethtool support (jgarzik) |
40 | * Replace some MII-related magic numbers with constants (jgarzik) | 40 | * Replace some MII-related magic numbers with constants (jgarzik) |
41 | 41 | ||
42 | TODO: | 42 | TODO: |
43 | * enable pci_power_off | 43 | * enable pci_power_off |
44 | * Wake-On-LAN | 44 | * Wake-On-LAN |
45 | */ | 45 | */ |
46 | 46 | ||
47 | #define DRV_NAME "winbond-840" | 47 | #define DRV_NAME "winbond-840" |
48 | #define DRV_VERSION "1.01-d" | 48 | #define DRV_VERSION "1.01-d" |
49 | #define DRV_RELDATE "Nov-17-2001" | 49 | #define DRV_RELDATE "Nov-17-2001" |
@@ -57,7 +57,7 @@ c-help-name: Winbond W89c840 PCI Ethernet support | |||
57 | c-help-symbol: CONFIG_WINBOND_840 | 57 | c-help-symbol: CONFIG_WINBOND_840 |
58 | c-help: This driver is for the Winbond W89c840 chip. It also works with | 58 | c-help: This driver is for the Winbond W89c840 chip. It also works with |
59 | c-help: the TX9882 chip on the Compex RL100-ATX board. | 59 | c-help: the TX9882 chip on the Compex RL100-ATX board. |
60 | c-help: More specific information and updates are available from | 60 | c-help: More specific information and updates are available from |
61 | c-help: http://www.scyld.com/network/drivers.html | 61 | c-help: http://www.scyld.com/network/drivers.html |
62 | */ | 62 | */ |
63 | 63 | ||
@@ -207,7 +207,7 @@ Test with 'ping -s 10000' on a fast computer. | |||
207 | 207 | ||
208 | */ | 208 | */ |
209 | 209 | ||
210 | 210 | ||
211 | 211 | ||
212 | /* | 212 | /* |
213 | PCI probe table. | 213 | PCI probe table. |
@@ -374,7 +374,7 @@ static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); | |||
374 | static struct ethtool_ops netdev_ethtool_ops; | 374 | static struct ethtool_ops netdev_ethtool_ops; |
375 | static int netdev_close(struct net_device *dev); | 375 | static int netdev_close(struct net_device *dev); |
376 | 376 | ||
377 | 377 | ||
378 | 378 | ||
379 | static int __devinit w840_probe1 (struct pci_dev *pdev, | 379 | static int __devinit w840_probe1 (struct pci_dev *pdev, |
380 | const struct pci_device_id *ent) | 380 | const struct pci_device_id *ent) |
@@ -434,7 +434,7 @@ static int __devinit w840_probe1 (struct pci_dev *pdev, | |||
434 | np->mii_if.mdio_read = mdio_read; | 434 | np->mii_if.mdio_read = mdio_read; |
435 | np->mii_if.mdio_write = mdio_write; | 435 | np->mii_if.mdio_write = mdio_write; |
436 | np->base_addr = ioaddr; | 436 | np->base_addr = ioaddr; |
437 | 437 | ||
438 | pci_set_drvdata(pdev, dev); | 438 | pci_set_drvdata(pdev, dev); |
439 | 439 | ||
440 | if (dev->mem_start) | 440 | if (dev->mem_start) |
@@ -510,7 +510,7 @@ err_out_netdev: | |||
510 | return -ENODEV; | 510 | return -ENODEV; |
511 | } | 511 | } |
512 | 512 | ||
513 | 513 | ||
514 | /* Read the EEPROM and MII Management Data I/O (MDIO) interfaces. These are | 514 | /* Read the EEPROM and MII Management Data I/O (MDIO) interfaces. These are |
515 | often serial bit streams generated by the host processor. | 515 | often serial bit streams generated by the host processor. |
516 | The example below is for the common 93c46 EEPROM, 64 16 bit words. */ | 516 | The example below is for the common 93c46 EEPROM, 64 16 bit words. */ |
@@ -660,7 +660,7 @@ static void mdio_write(struct net_device *dev, int phy_id, int location, int val | |||
660 | return; | 660 | return; |
661 | } | 661 | } |
662 | 662 | ||
663 | 663 | ||
664 | static int netdev_open(struct net_device *dev) | 664 | static int netdev_open(struct net_device *dev) |
665 | { | 665 | { |
666 | struct netdev_private *np = netdev_priv(dev); | 666 | struct netdev_private *np = netdev_priv(dev); |
@@ -731,7 +731,7 @@ static int update_link(struct net_device *dev) | |||
731 | dev->name, np->phys[0]); | 731 | dev->name, np->phys[0]); |
732 | netif_carrier_on(dev); | 732 | netif_carrier_on(dev); |
733 | } | 733 | } |
734 | 734 | ||
735 | if ((np->mii & ~0xf) == MII_DAVICOM_DM9101) { | 735 | if ((np->mii & ~0xf) == MII_DAVICOM_DM9101) { |
736 | /* If the link partner doesn't support autonegotiation | 736 | /* If the link partner doesn't support autonegotiation |
737 | * the MII detects it's abilities with the "parallel detection". | 737 | * the MII detects it's abilities with the "parallel detection". |
@@ -761,7 +761,7 @@ static int update_link(struct net_device *dev) | |||
761 | result |= 0x20000000; | 761 | result |= 0x20000000; |
762 | if (result != np->csr6 && debug) | 762 | if (result != np->csr6 && debug) |
763 | printk(KERN_INFO "%s: Setting %dMBit-%s-duplex based on MII#%d\n", | 763 | printk(KERN_INFO "%s: Setting %dMBit-%s-duplex based on MII#%d\n", |
764 | dev->name, fasteth ? 100 : 10, | 764 | dev->name, fasteth ? 100 : 10, |
765 | duplex ? "full" : "half", np->phys[0]); | 765 | duplex ? "full" : "half", np->phys[0]); |
766 | return result; | 766 | return result; |
767 | } | 767 | } |
@@ -947,7 +947,7 @@ static void init_registers(struct net_device *dev) | |||
947 | iowrite32(i, ioaddr + PCIBusCfg); | 947 | iowrite32(i, ioaddr + PCIBusCfg); |
948 | 948 | ||
949 | np->csr6 = 0; | 949 | np->csr6 = 0; |
950 | /* 128 byte Tx threshold; | 950 | /* 128 byte Tx threshold; |
951 | Transmit on; Receive on; */ | 951 | Transmit on; Receive on; */ |
952 | update_csr6(dev, 0x00022002 | update_link(dev) | __set_rx_mode(dev)); | 952 | update_csr6(dev, 0x00022002 | update_link(dev) | __set_rx_mode(dev)); |
953 | 953 | ||
@@ -1584,7 +1584,7 @@ static int netdev_close(struct net_device *dev) | |||
1584 | static void __devexit w840_remove1 (struct pci_dev *pdev) | 1584 | static void __devexit w840_remove1 (struct pci_dev *pdev) |
1585 | { | 1585 | { |
1586 | struct net_device *dev = pci_get_drvdata(pdev); | 1586 | struct net_device *dev = pci_get_drvdata(pdev); |
1587 | 1587 | ||
1588 | if (dev) { | 1588 | if (dev) { |
1589 | struct netdev_private *np = netdev_priv(dev); | 1589 | struct netdev_private *np = netdev_priv(dev); |
1590 | unregister_netdev(dev); | 1590 | unregister_netdev(dev); |
@@ -1605,11 +1605,11 @@ static void __devexit w840_remove1 (struct pci_dev *pdev) | |||
1605 | * - get_stats: | 1605 | * - get_stats: |
1606 | * spin_lock_irq(np->lock), doesn't touch hw if not present | 1606 | * spin_lock_irq(np->lock), doesn't touch hw if not present |
1607 | * - hard_start_xmit: | 1607 | * - hard_start_xmit: |
1608 | * netif_stop_queue + spin_unlock_wait(&dev->xmit_lock); | 1608 | * synchronize_irq + netif_tx_disable; |
1609 | * - tx_timeout: | 1609 | * - tx_timeout: |
1610 | * netif_device_detach + spin_unlock_wait(&dev->xmit_lock); | 1610 | * netif_device_detach + netif_tx_disable; |
1611 | * - set_multicast_list | 1611 | * - set_multicast_list |
1612 | * netif_device_detach + spin_unlock_wait(&dev->xmit_lock); | 1612 | * netif_device_detach + netif_tx_disable; |
1613 | * - interrupt handler | 1613 | * - interrupt handler |
1614 | * doesn't touch hw if not present, synchronize_irq waits for | 1614 | * doesn't touch hw if not present, synchronize_irq waits for |
1615 | * running instances of the interrupt handler. | 1615 | * running instances of the interrupt handler. |
@@ -1635,11 +1635,10 @@ static int w840_suspend (struct pci_dev *pdev, pm_message_t state) | |||
1635 | netif_device_detach(dev); | 1635 | netif_device_detach(dev); |
1636 | update_csr6(dev, 0); | 1636 | update_csr6(dev, 0); |
1637 | iowrite32(0, ioaddr + IntrEnable); | 1637 | iowrite32(0, ioaddr + IntrEnable); |
1638 | netif_stop_queue(dev); | ||
1639 | spin_unlock_irq(&np->lock); | 1638 | spin_unlock_irq(&np->lock); |
1640 | 1639 | ||
1641 | spin_unlock_wait(&dev->xmit_lock); | ||
1642 | synchronize_irq(dev->irq); | 1640 | synchronize_irq(dev->irq); |
1641 | netif_tx_disable(dev); | ||
1643 | 1642 | ||
1644 | np->stats.rx_missed_errors += ioread32(ioaddr + RxMissed) & 0xffff; | 1643 | np->stats.rx_missed_errors += ioread32(ioaddr + RxMissed) & 0xffff; |
1645 | 1644 | ||