aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/usb
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/usb')
-rw-r--r--drivers/net/usb/catc.c2
-rw-r--r--drivers/net/usb/mcs7830.c4
-rw-r--r--drivers/net/usb/pegasus.c41
-rw-r--r--drivers/net/usb/smsc95xx.c4
-rw-r--r--drivers/net/usb/usbnet.c5
5 files changed, 33 insertions, 23 deletions
diff --git a/drivers/net/usb/catc.c b/drivers/net/usb/catc.c
index 466a89e24444..d7621239059a 100644
--- a/drivers/net/usb/catc.c
+++ b/drivers/net/usb/catc.c
@@ -271,8 +271,6 @@ static void catc_rx_done(struct urb *urb)
271 271
272 } while (pkt_start - (u8 *) urb->transfer_buffer < urb->actual_length); 272 } while (pkt_start - (u8 *) urb->transfer_buffer < urb->actual_length);
273 273
274 catc->netdev->last_rx = jiffies;
275
276 if (catc->is_f5u011) { 274 if (catc->is_f5u011) {
277 if (atomic_read(&catc->recq_sz)) { 275 if (atomic_read(&catc->recq_sz)) {
278 int status; 276 int status;
diff --git a/drivers/net/usb/mcs7830.c b/drivers/net/usb/mcs7830.c
index b5143509e8be..bbcc76ae3c9c 100644
--- a/drivers/net/usb/mcs7830.c
+++ b/drivers/net/usb/mcs7830.c
@@ -344,14 +344,14 @@ out:
344static int mcs7830_mdio_read(struct net_device *netdev, int phy_id, 344static int mcs7830_mdio_read(struct net_device *netdev, int phy_id,
345 int location) 345 int location)
346{ 346{
347 struct usbnet *dev = netdev->priv; 347 struct usbnet *dev = netdev_priv(netdev);
348 return mcs7830_read_phy(dev, location); 348 return mcs7830_read_phy(dev, location);
349} 349}
350 350
351static void mcs7830_mdio_write(struct net_device *netdev, int phy_id, 351static void mcs7830_mdio_write(struct net_device *netdev, int phy_id,
352 int location, int val) 352 int location, int val)
353{ 353{
354 struct usbnet *dev = netdev->priv; 354 struct usbnet *dev = netdev_priv(netdev);
355 mcs7830_write_phy(dev, location, val); 355 mcs7830_write_phy(dev, location, val);
356} 356}
357 357
diff --git a/drivers/net/usb/pegasus.c b/drivers/net/usb/pegasus.c
index 7914867110ed..075e8e94225e 100644
--- a/drivers/net/usb/pegasus.c
+++ b/drivers/net/usb/pegasus.c
@@ -1213,7 +1213,7 @@ static void pegasus_set_multicast(struct net_device *net)
1213 pegasus->eth_regs[EthCtrl0] |= RX_MULTICAST; 1213 pegasus->eth_regs[EthCtrl0] |= RX_MULTICAST;
1214 pegasus->eth_regs[EthCtrl2] &= ~RX_PROMISCUOUS; 1214 pegasus->eth_regs[EthCtrl2] &= ~RX_PROMISCUOUS;
1215 if (netif_msg_link(pegasus)) 1215 if (netif_msg_link(pegasus))
1216 pr_info("%s: set allmulti\n", net->name); 1216 pr_debug("%s: set allmulti\n", net->name);
1217 } else { 1217 } else {
1218 pegasus->eth_regs[EthCtrl0] &= ~RX_MULTICAST; 1218 pegasus->eth_regs[EthCtrl0] &= ~RX_MULTICAST;
1219 pegasus->eth_regs[EthCtrl2] &= ~RX_PROMISCUOUS; 1219 pegasus->eth_regs[EthCtrl2] &= ~RX_PROMISCUOUS;
@@ -1273,6 +1273,7 @@ static inline void setup_pegasus_II(pegasus_t * pegasus)
1273} 1273}
1274 1274
1275 1275
1276static int pegasus_count;
1276static struct workqueue_struct *pegasus_workqueue = NULL; 1277static struct workqueue_struct *pegasus_workqueue = NULL;
1277#define CARRIER_CHECK_DELAY (2 * HZ) 1278#define CARRIER_CHECK_DELAY (2 * HZ)
1278 1279
@@ -1301,6 +1302,18 @@ static int pegasus_blacklisted(struct usb_device *udev)
1301 return 0; 1302 return 0;
1302} 1303}
1303 1304
1305/* we rely on probe() and remove() being serialized so we
1306 * don't need extra locking on pegasus_count.
1307 */
1308static void pegasus_dec_workqueue(void)
1309{
1310 pegasus_count--;
1311 if (pegasus_count == 0) {
1312 destroy_workqueue(pegasus_workqueue);
1313 pegasus_workqueue = NULL;
1314 }
1315}
1316
1304static int pegasus_probe(struct usb_interface *intf, 1317static int pegasus_probe(struct usb_interface *intf,
1305 const struct usb_device_id *id) 1318 const struct usb_device_id *id)
1306{ 1319{
@@ -1309,14 +1322,18 @@ static int pegasus_probe(struct usb_interface *intf,
1309 pegasus_t *pegasus; 1322 pegasus_t *pegasus;
1310 int dev_index = id - pegasus_ids; 1323 int dev_index = id - pegasus_ids;
1311 int res = -ENOMEM; 1324 int res = -ENOMEM;
1312 DECLARE_MAC_BUF(mac);
1313 1325
1314 usb_get_dev(dev); 1326 if (pegasus_blacklisted(dev))
1327 return -ENODEV;
1315 1328
1316 if (pegasus_blacklisted(dev)) { 1329 if (pegasus_count == 0) {
1317 res = -ENODEV; 1330 pegasus_workqueue = create_singlethread_workqueue("pegasus");
1318 goto out; 1331 if (!pegasus_workqueue)
1332 return -ENOMEM;
1319 } 1333 }
1334 pegasus_count++;
1335
1336 usb_get_dev(dev);
1320 1337
1321 net = alloc_etherdev(sizeof(struct pegasus)); 1338 net = alloc_etherdev(sizeof(struct pegasus));
1322 if (!net) { 1339 if (!net) {
@@ -1386,10 +1403,10 @@ static int pegasus_probe(struct usb_interface *intf,
1386 queue_delayed_work(pegasus_workqueue, &pegasus->carrier_check, 1403 queue_delayed_work(pegasus_workqueue, &pegasus->carrier_check,
1387 CARRIER_CHECK_DELAY); 1404 CARRIER_CHECK_DELAY);
1388 1405
1389 dev_info(&intf->dev, "%s, %s, %s\n", 1406 dev_info(&intf->dev, "%s, %s, %pM\n",
1390 net->name, 1407 net->name,
1391 usb_dev_id[dev_index].name, 1408 usb_dev_id[dev_index].name,
1392 print_mac(mac, net->dev_addr)); 1409 net->dev_addr);
1393 return 0; 1410 return 0;
1394 1411
1395out3: 1412out3:
@@ -1401,6 +1418,7 @@ out1:
1401 free_netdev(net); 1418 free_netdev(net);
1402out: 1419out:
1403 usb_put_dev(dev); 1420 usb_put_dev(dev);
1421 pegasus_dec_workqueue();
1404 return res; 1422 return res;
1405} 1423}
1406 1424
@@ -1426,6 +1444,7 @@ static void pegasus_disconnect(struct usb_interface *intf)
1426 pegasus->rx_skb = NULL; 1444 pegasus->rx_skb = NULL;
1427 } 1445 }
1428 free_netdev(pegasus->net); 1446 free_netdev(pegasus->net);
1447 pegasus_dec_workqueue();
1429} 1448}
1430 1449
1431static int pegasus_suspend (struct usb_interface *intf, pm_message_t message) 1450static int pegasus_suspend (struct usb_interface *intf, pm_message_t message)
@@ -1469,7 +1488,7 @@ static struct usb_driver pegasus_driver = {
1469 .resume = pegasus_resume, 1488 .resume = pegasus_resume,
1470}; 1489};
1471 1490
1472static void parse_id(char *id) 1491static void __init parse_id(char *id)
1473{ 1492{
1474 unsigned int vendor_id=0, device_id=0, flags=0, i=0; 1493 unsigned int vendor_id=0, device_id=0, flags=0, i=0;
1475 char *token, *name=NULL; 1494 char *token, *name=NULL;
@@ -1505,15 +1524,11 @@ static int __init pegasus_init(void)
1505 pr_info("%s: %s, " DRIVER_DESC "\n", driver_name, DRIVER_VERSION); 1524 pr_info("%s: %s, " DRIVER_DESC "\n", driver_name, DRIVER_VERSION);
1506 if (devid) 1525 if (devid)
1507 parse_id(devid); 1526 parse_id(devid);
1508 pegasus_workqueue = create_singlethread_workqueue("pegasus");
1509 if (!pegasus_workqueue)
1510 return -ENOMEM;
1511 return usb_register(&pegasus_driver); 1527 return usb_register(&pegasus_driver);
1512} 1528}
1513 1529
1514static void __exit pegasus_exit(void) 1530static void __exit pegasus_exit(void)
1515{ 1531{
1516 destroy_workqueue(pegasus_workqueue);
1517 usb_deregister(&pegasus_driver); 1532 usb_deregister(&pegasus_driver);
1518} 1533}
1519 1534
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
index 51e2f5d7d14e..e0d349f74642 100644
--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
@@ -759,7 +759,6 @@ static int smsc95xx_reset(struct usbnet *dev)
759 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); 759 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
760 u32 read_buf, write_buf, burst_cap; 760 u32 read_buf, write_buf, burst_cap;
761 int ret = 0, timeout; 761 int ret = 0, timeout;
762 DECLARE_MAC_BUF(mac);
763 762
764 if (netif_msg_ifup(dev)) 763 if (netif_msg_ifup(dev))
765 devdbg(dev, "entering smsc95xx_reset"); 764 devdbg(dev, "entering smsc95xx_reset");
@@ -818,8 +817,7 @@ static int smsc95xx_reset(struct usbnet *dev)
818 return ret; 817 return ret;
819 818
820 if (netif_msg_ifup(dev)) 819 if (netif_msg_ifup(dev))
821 devdbg(dev, "MAC Address: %s", 820 devdbg(dev, "MAC Address: %pM", dev->net->dev_addr);
822 print_mac(mac, dev->net->dev_addr));
823 821
824 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); 822 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
825 if (ret < 0) { 823 if (ret < 0) {
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
index 02d25c743994..aa3149078888 100644
--- a/drivers/net/usb/usbnet.c
+++ b/drivers/net/usb/usbnet.c
@@ -1125,7 +1125,6 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
1125 struct usb_device *xdev; 1125 struct usb_device *xdev;
1126 int status; 1126 int status;
1127 const char *name; 1127 const char *name;
1128 DECLARE_MAC_BUF(mac);
1129 1128
1130 name = udev->dev.driver->name; 1129 name = udev->dev.driver->name;
1131 info = (struct driver_info *) prod->driver_info; 1130 info = (struct driver_info *) prod->driver_info;
@@ -1236,11 +1235,11 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
1236 if (status) 1235 if (status)
1237 goto out3; 1236 goto out3;
1238 if (netif_msg_probe (dev)) 1237 if (netif_msg_probe (dev))
1239 devinfo (dev, "register '%s' at usb-%s-%s, %s, %s", 1238 devinfo (dev, "register '%s' at usb-%s-%s, %s, %pM",
1240 udev->dev.driver->name, 1239 udev->dev.driver->name,
1241 xdev->bus->bus_name, xdev->devpath, 1240 xdev->bus->bus_name, xdev->devpath,
1242 dev->driver_info->description, 1241 dev->driver_info->description,
1243 print_mac(mac, net->dev_addr)); 1242 net->dev_addr);
1244 1243
1245 // ok, it's ready to go. 1244 // ok, it's ready to go.
1246 usb_set_intfdata (udev, dev); 1245 usb_set_intfdata (udev, dev);