diff options
| -rw-r--r-- | drivers/net/8139cp.c | 7 | ||||
| -rw-r--r-- | drivers/net/dm9000.c | 52 | ||||
| -rw-r--r-- | drivers/net/ioc3-eth.c | 8 |
3 files changed, 37 insertions, 30 deletions
diff --git a/drivers/net/8139cp.c b/drivers/net/8139cp.c index 7b293f01c9ed..34b80de34fae 100644 --- a/drivers/net/8139cp.c +++ b/drivers/net/8139cp.c | |||
| @@ -1897,6 +1897,7 @@ static int cp_resume (struct pci_dev *pdev) | |||
| 1897 | { | 1897 | { |
| 1898 | struct net_device *dev; | 1898 | struct net_device *dev; |
| 1899 | struct cp_private *cp; | 1899 | struct cp_private *cp; |
| 1900 | unsigned long flags; | ||
| 1900 | 1901 | ||
| 1901 | dev = pci_get_drvdata (pdev); | 1902 | dev = pci_get_drvdata (pdev); |
| 1902 | cp = netdev_priv(dev); | 1903 | cp = netdev_priv(dev); |
| @@ -1910,6 +1911,12 @@ static int cp_resume (struct pci_dev *pdev) | |||
| 1910 | 1911 | ||
| 1911 | cp_init_hw (cp); | 1912 | cp_init_hw (cp); |
| 1912 | netif_start_queue (dev); | 1913 | netif_start_queue (dev); |
| 1914 | |||
| 1915 | spin_lock_irqsave (&cp->lock, flags); | ||
| 1916 | |||
| 1917 | mii_check_media(&cp->mii_if, netif_msg_link(cp), FALSE); | ||
| 1918 | |||
| 1919 | spin_unlock_irqrestore (&cp->lock, flags); | ||
| 1913 | 1920 | ||
| 1914 | return 0; | 1921 | return 0; |
| 1915 | } | 1922 | } |
diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c index 5fddc0ff8878..6440a892bb81 100644 --- a/drivers/net/dm9000.c +++ b/drivers/net/dm9000.c | |||
| @@ -48,6 +48,10 @@ | |||
| 48 | * net_device_stats | 48 | * net_device_stats |
| 49 | * * introduced tx_timeout function | 49 | * * introduced tx_timeout function |
| 50 | * * reworked locking | 50 | * * reworked locking |
| 51 | * | ||
| 52 | * 01-Jul-2005 Ben Dooks <ben@simtec.co.uk> | ||
| 53 | * * fixed spinlock call without pointer | ||
| 54 | * * ensure spinlock is initialised | ||
| 51 | */ | 55 | */ |
| 52 | 56 | ||
| 53 | #include <linux/module.h> | 57 | #include <linux/module.h> |
| @@ -148,7 +152,6 @@ static int dm9000_probe(struct device *); | |||
| 148 | static int dm9000_open(struct net_device *); | 152 | static int dm9000_open(struct net_device *); |
| 149 | static int dm9000_start_xmit(struct sk_buff *, struct net_device *); | 153 | static int dm9000_start_xmit(struct sk_buff *, struct net_device *); |
| 150 | static int dm9000_stop(struct net_device *); | 154 | static int dm9000_stop(struct net_device *); |
| 151 | static int dm9000_do_ioctl(struct net_device *, struct ifreq *, int); | ||
| 152 | 155 | ||
| 153 | 156 | ||
| 154 | static void dm9000_timer(unsigned long); | 157 | static void dm9000_timer(unsigned long); |
| @@ -322,7 +325,7 @@ static void dm9000_timeout(struct net_device *dev) | |||
| 322 | 325 | ||
| 323 | /* Save previous register address */ | 326 | /* Save previous register address */ |
| 324 | reg_save = readb(db->io_addr); | 327 | reg_save = readb(db->io_addr); |
| 325 | spin_lock_irqsave(db->lock,flags); | 328 | spin_lock_irqsave(&db->lock,flags); |
| 326 | 329 | ||
| 327 | netif_stop_queue(dev); | 330 | netif_stop_queue(dev); |
| 328 | dm9000_reset(db); | 331 | dm9000_reset(db); |
| @@ -333,7 +336,7 @@ static void dm9000_timeout(struct net_device *dev) | |||
| 333 | 336 | ||
| 334 | /* Restore previous register address */ | 337 | /* Restore previous register address */ |
| 335 | writeb(reg_save, db->io_addr); | 338 | writeb(reg_save, db->io_addr); |
| 336 | spin_unlock_irqrestore(db->lock,flags); | 339 | spin_unlock_irqrestore(&db->lock,flags); |
| 337 | } | 340 | } |
| 338 | 341 | ||
| 339 | 342 | ||
| @@ -387,8 +390,6 @@ dm9000_probe(struct device *dev) | |||
| 387 | int i; | 390 | int i; |
| 388 | u32 id_val; | 391 | u32 id_val; |
| 389 | 392 | ||
| 390 | printk(KERN_INFO "%s Ethernet Driver\n", CARDNAME); | ||
| 391 | |||
| 392 | /* Init network device */ | 393 | /* Init network device */ |
| 393 | ndev = alloc_etherdev(sizeof (struct board_info)); | 394 | ndev = alloc_etherdev(sizeof (struct board_info)); |
| 394 | if (!ndev) { | 395 | if (!ndev) { |
| @@ -405,6 +406,8 @@ dm9000_probe(struct device *dev) | |||
| 405 | db = (struct board_info *) ndev->priv; | 406 | db = (struct board_info *) ndev->priv; |
| 406 | memset(db, 0, sizeof (*db)); | 407 | memset(db, 0, sizeof (*db)); |
| 407 | 408 | ||
| 409 | spin_lock_init(&db->lock); | ||
| 410 | |||
| 408 | if (pdev->num_resources < 2) { | 411 | if (pdev->num_resources < 2) { |
| 409 | ret = -ENODEV; | 412 | ret = -ENODEV; |
| 410 | goto out; | 413 | goto out; |
| @@ -541,7 +544,6 @@ dm9000_probe(struct device *dev) | |||
| 541 | ndev->stop = &dm9000_stop; | 544 | ndev->stop = &dm9000_stop; |
| 542 | ndev->get_stats = &dm9000_get_stats; | 545 | ndev->get_stats = &dm9000_get_stats; |
| 543 | ndev->set_multicast_list = &dm9000_hash_table; | 546 | ndev->set_multicast_list = &dm9000_hash_table; |
| 544 | ndev->do_ioctl = &dm9000_do_ioctl; | ||
| 545 | 547 | ||
| 546 | #ifdef DM9000_PROGRAM_EEPROM | 548 | #ifdef DM9000_PROGRAM_EEPROM |
| 547 | program_eeprom(db); | 549 | program_eeprom(db); |
| @@ -612,7 +614,7 @@ dm9000_open(struct net_device *dev) | |||
| 612 | 614 | ||
| 613 | /* set and active a timer process */ | 615 | /* set and active a timer process */ |
| 614 | init_timer(&db->timer); | 616 | init_timer(&db->timer); |
| 615 | db->timer.expires = DM9000_TIMER_WUT * 2; | 617 | db->timer.expires = DM9000_TIMER_WUT; |
| 616 | db->timer.data = (unsigned long) dev; | 618 | db->timer.data = (unsigned long) dev; |
| 617 | db->timer.function = &dm9000_timer; | 619 | db->timer.function = &dm9000_timer; |
| 618 | add_timer(&db->timer); | 620 | add_timer(&db->timer); |
| @@ -845,15 +847,6 @@ dm9000_get_stats(struct net_device *dev) | |||
| 845 | return &db->stats; | 847 | return &db->stats; |
| 846 | } | 848 | } |
| 847 | 849 | ||
| 848 | /* | ||
| 849 | * Process the upper socket ioctl command | ||
| 850 | */ | ||
| 851 | static int | ||
| 852 | dm9000_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) | ||
| 853 | { | ||
| 854 | PRINTK1("entering %s\n",__FUNCTION__); | ||
| 855 | return 0; | ||
| 856 | } | ||
| 857 | 850 | ||
| 858 | /* | 851 | /* |
| 859 | * A periodic timer routine | 852 | * A periodic timer routine |
| @@ -864,21 +857,11 @@ dm9000_timer(unsigned long data) | |||
| 864 | { | 857 | { |
| 865 | struct net_device *dev = (struct net_device *) data; | 858 | struct net_device *dev = (struct net_device *) data; |
| 866 | board_info_t *db = (board_info_t *) dev->priv; | 859 | board_info_t *db = (board_info_t *) dev->priv; |
| 867 | u8 reg_save; | ||
| 868 | unsigned long flags; | ||
| 869 | 860 | ||
| 870 | PRINTK3("dm9000_timer()\n"); | 861 | PRINTK3("dm9000_timer()\n"); |
| 871 | 862 | ||
| 872 | spin_lock_irqsave(db->lock,flags); | ||
| 873 | /* Save previous register address */ | ||
| 874 | reg_save = readb(db->io_addr); | ||
| 875 | |||
| 876 | mii_check_media(&db->mii, netif_msg_link(db), 0); | 863 | mii_check_media(&db->mii, netif_msg_link(db), 0); |
| 877 | 864 | ||
| 878 | /* Restore previous register address */ | ||
| 879 | writeb(reg_save, db->io_addr); | ||
| 880 | spin_unlock_irqrestore(db->lock,flags); | ||
| 881 | |||
| 882 | /* Set timer again */ | 865 | /* Set timer again */ |
| 883 | db->timer.expires = DM9000_TIMER_WUT; | 866 | db->timer.expires = DM9000_TIMER_WUT; |
| 884 | add_timer(&db->timer); | 867 | add_timer(&db->timer); |
| @@ -1098,9 +1081,14 @@ dm9000_phy_read(struct net_device *dev, int phy_reg_unused, int reg) | |||
| 1098 | { | 1081 | { |
| 1099 | board_info_t *db = (board_info_t *) dev->priv; | 1082 | board_info_t *db = (board_info_t *) dev->priv; |
| 1100 | unsigned long flags; | 1083 | unsigned long flags; |
| 1084 | unsigned int reg_save; | ||
| 1101 | int ret; | 1085 | int ret; |
| 1102 | 1086 | ||
| 1103 | spin_lock_irqsave(&db->lock,flags); | 1087 | spin_lock_irqsave(&db->lock,flags); |
| 1088 | |||
| 1089 | /* Save previous register address */ | ||
| 1090 | reg_save = readb(db->io_addr); | ||
| 1091 | |||
| 1104 | /* Fill the phyxcer register into REG_0C */ | 1092 | /* Fill the phyxcer register into REG_0C */ |
| 1105 | iow(db, DM9000_EPAR, DM9000_PHY | reg); | 1093 | iow(db, DM9000_EPAR, DM9000_PHY | reg); |
| 1106 | 1094 | ||
| @@ -1111,6 +1099,9 @@ dm9000_phy_read(struct net_device *dev, int phy_reg_unused, int reg) | |||
| 1111 | /* The read data keeps on REG_0D & REG_0E */ | 1099 | /* The read data keeps on REG_0D & REG_0E */ |
| 1112 | ret = (ior(db, DM9000_EPDRH) << 8) | ior(db, DM9000_EPDRL); | 1100 | ret = (ior(db, DM9000_EPDRH) << 8) | ior(db, DM9000_EPDRL); |
| 1113 | 1101 | ||
| 1102 | /* restore the previous address */ | ||
| 1103 | writeb(reg_save, db->io_addr); | ||
| 1104 | |||
| 1114 | spin_unlock_irqrestore(&db->lock,flags); | 1105 | spin_unlock_irqrestore(&db->lock,flags); |
| 1115 | 1106 | ||
| 1116 | return ret; | 1107 | return ret; |
| @@ -1124,9 +1115,13 @@ dm9000_phy_write(struct net_device *dev, int phyaddr_unused, int reg, int value) | |||
| 1124 | { | 1115 | { |
| 1125 | board_info_t *db = (board_info_t *) dev->priv; | 1116 | board_info_t *db = (board_info_t *) dev->priv; |
| 1126 | unsigned long flags; | 1117 | unsigned long flags; |
| 1118 | unsigned long reg_save; | ||
| 1127 | 1119 | ||
