diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2005-08-18 17:58:21 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-08-18 17:58:21 -0400 |
commit | 5fdf193b15a08f6c32ca4eb5913fa9be788e790e (patch) | |
tree | 0747ab5547556b7955de7bf8fcfd0fab542e790d /drivers | |
parent | f3ed8b444781158c9c10f48a8eba6795ecec7023 (diff) | |
parent | 2ae2d77cfa424587014cb34a89eed0ff2149fd5c (diff) |
Merge head 'upstream-fixes' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6
Diffstat (limited to 'drivers')
-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 | ||
1128 | spin_lock_irqsave(&db->lock,flags); | 1120 | spin_lock_irqsave(&db->lock,flags); |
1129 | 1121 | ||
1122 | /* Save previous register address */ | ||
1123 | reg_save = readb(db->io_addr); | ||
1124 | |||
1130 | /* Fill the phyxcer register into REG_0C */ | 1125 | /* Fill the phyxcer register into REG_0C */ |
1131 | iow(db, DM9000_EPAR, DM9000_PHY | reg); | 1126 | iow(db, DM9000_EPAR, DM9000_PHY | reg); |
1132 | 1127 | ||
@@ -1138,6 +1133,9 @@ dm9000_phy_write(struct net_device *dev, int phyaddr_unused, int reg, int value) | |||
1138 | udelay(500); /* Wait write complete */ | 1133 | udelay(500); /* Wait write complete */ |
1139 | iow(db, DM9000_EPCR, 0x0); /* Clear phyxcer write command */ | 1134 | iow(db, DM9000_EPCR, 0x0); /* Clear phyxcer write command */ |
1140 | 1135 | ||
1136 | /* restore the previous address */ | ||
1137 | writeb(reg_save, db->io_addr); | ||
1138 | |||
1141 | spin_unlock_irqrestore(&db->lock,flags); | 1139 | spin_unlock_irqrestore(&db->lock,flags); |
1142 | } | 1140 | } |
1143 | 1141 | ||
@@ -1202,6 +1200,8 @@ static struct device_driver dm9000_driver = { | |||
1202 | static int __init | 1200 | static int __init |
1203 | dm9000_init(void) | 1201 | dm9000_init(void) |
1204 | { | 1202 | { |
1203 | printk(KERN_INFO "%s Ethernet Driver\n", CARDNAME); | ||
1204 | |||
1205 | return driver_register(&dm9000_driver); /* search board and register */ | 1205 | return driver_register(&dm9000_driver); /* search board and register */ |
1206 | } | 1206 | } |
1207 | 1207 | ||
diff --git a/drivers/net/ioc3-eth.c b/drivers/net/ioc3-eth.c index d520b5920d6c..49e5467bdd73 100644 --- a/drivers/net/ioc3-eth.c +++ b/drivers/net/ioc3-eth.c | |||
@@ -499,7 +499,7 @@ static int ioc3_mdio_read(struct net_device *dev, int phy, int reg) | |||
499 | ioc3_w_micr((phy << MICR_PHYADDR_SHIFT) | reg | MICR_READTRIG); | 499 | ioc3_w_micr((phy << MICR_PHYADDR_SHIFT) | reg | MICR_READTRIG); |
500 | while (ioc3_r_micr() & MICR_BUSY); | 500 | while (ioc3_r_micr() & MICR_BUSY); |
501 | 501 | ||
502 | return ioc3_r_micr() & MIDR_DATA_MASK; | 502 | return ioc3_r_midr_r() & MIDR_DATA_MASK; |
503 | } | 503 | } |
504 | 504 | ||
505 | static void ioc3_mdio_write(struct net_device *dev, int phy, int reg, int data) | 505 | static void ioc3_mdio_write(struct net_device *dev, int phy, int reg, int data) |
@@ -1291,7 +1291,6 @@ static int ioc3_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
1291 | dev->features = NETIF_F_IP_CSUM; | 1291 | dev->features = NETIF_F_IP_CSUM; |
1292 | #endif | 1292 | #endif |
1293 | 1293 | ||
1294 | ioc3_setup_duplex(ip); | ||
1295 | sw_physid1 = ioc3_mdio_read(dev, ip->mii.phy_id, MII_PHYSID1); | 1294 | sw_physid1 = ioc3_mdio_read(dev, ip->mii.phy_id, MII_PHYSID1); |
1296 | sw_physid2 = ioc3_mdio_read(dev, ip->mii.phy_id, MII_PHYSID2); | 1295 | sw_physid2 = ioc3_mdio_read(dev, ip->mii.phy_id, MII_PHYSID2); |
1297 | 1296 | ||
@@ -1300,6 +1299,7 @@ static int ioc3_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
1300 | goto out_stop; | 1299 | goto out_stop; |
1301 | 1300 | ||
1302 | mii_check_media(&ip->mii, 1, 1); | 1301 | mii_check_media(&ip->mii, 1, 1); |
1302 | ioc3_setup_duplex(ip); | ||
1303 | 1303 | ||
1304 | vendor = (sw_physid1 << 12) | (sw_physid2 >> 4); | 1304 | vendor = (sw_physid1 << 12) | (sw_physid2 >> 4); |
1305 | model = (sw_physid2 >> 4) & 0x3f; | 1305 | model = (sw_physid2 >> 4) & 0x3f; |
@@ -1524,7 +1524,7 @@ static void ioc3_get_drvinfo (struct net_device *dev, | |||
1524 | struct ethtool_drvinfo *info) | 1524 | struct ethtool_drvinfo *info) |
1525 | { | 1525 | { |
1526 | struct ioc3_private *ip = netdev_priv(dev); | 1526 | struct ioc3_private *ip = netdev_priv(dev); |
1527 | 1527 | ||
1528 | strcpy (info->driver, IOC3_NAME); | 1528 | strcpy (info->driver, IOC3_NAME); |
1529 | strcpy (info->version, IOC3_VERSION); | 1529 | strcpy (info->version, IOC3_VERSION); |
1530 | strcpy (info->bus_info, pci_name(ip->pdev)); | 1530 | strcpy (info->bus_info, pci_name(ip->pdev)); |
@@ -1550,7 +1550,7 @@ static int ioc3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) | |||
1550 | spin_lock_irq(&ip->ioc3_lock); | 1550 | spin_lock_irq(&ip->ioc3_lock); |
1551 | rc = mii_ethtool_sset(&ip->mii, cmd); | 1551 | rc = mii_ethtool_sset(&ip->mii, cmd); |
1552 | spin_unlock_irq(&ip->ioc3_lock); | 1552 | spin_unlock_irq(&ip->ioc3_lock); |
1553 | 1553 | ||
1554 | return rc; | 1554 | return rc; |
1555 | } | 1555 | } |
1556 | 1556 | ||