diff options
Diffstat (limited to 'drivers/net/usb/smsc95xx.c')
-rw-r--r-- | drivers/net/usb/smsc95xx.c | 279 |
1 files changed, 142 insertions, 137 deletions
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c index c6c922247d05..3135af63d378 100644 --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/usb.h> | 28 | #include <linux/usb.h> |
29 | #include <linux/crc32.h> | 29 | #include <linux/crc32.h> |
30 | #include <linux/usb/usbnet.h> | 30 | #include <linux/usb/usbnet.h> |
31 | #include <linux/slab.h> | ||
31 | #include "smsc95xx.h" | 32 | #include "smsc95xx.h" |
32 | 33 | ||
33 | #define SMSC_CHIPNAME "smsc95xx" | 34 | #define SMSC_CHIPNAME "smsc95xx" |
@@ -78,7 +79,7 @@ static int smsc95xx_read_reg(struct usbnet *dev, u32 index, u32 *data) | |||
78 | 00, index, buf, 4, USB_CTRL_GET_TIMEOUT); | 79 | 00, index, buf, 4, USB_CTRL_GET_TIMEOUT); |
79 | 80 | ||
80 | if (unlikely(ret < 0)) | 81 | if (unlikely(ret < 0)) |
81 | devwarn(dev, "Failed to read register index 0x%08x", index); | 82 | netdev_warn(dev->net, "Failed to read register index 0x%08x\n", index); |
82 | 83 | ||
83 | le32_to_cpus(buf); | 84 | le32_to_cpus(buf); |
84 | *data = *buf; | 85 | *data = *buf; |
@@ -106,7 +107,7 @@ static int smsc95xx_write_reg(struct usbnet *dev, u32 index, u32 data) | |||
106 | 00, index, buf, 4, USB_CTRL_SET_TIMEOUT); | 107 | 00, index, buf, 4, USB_CTRL_SET_TIMEOUT); |
107 | 108 | ||
108 | if (unlikely(ret < 0)) | 109 | if (unlikely(ret < 0)) |
109 | devwarn(dev, "Failed to write register index 0x%08x", index); | 110 | netdev_warn(dev->net, "Failed to write register index 0x%08x\n", index); |
110 | 111 | ||
111 | kfree(buf); | 112 | kfree(buf); |
112 | 113 | ||
@@ -138,7 +139,7 @@ static int smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx) | |||
138 | 139 | ||
139 | /* confirm MII not busy */ | 140 | /* confirm MII not busy */ |
140 | if (smsc95xx_phy_wait_not_busy(dev)) { | 141 | if (smsc95xx_phy_wait_not_busy(dev)) { |
141 | devwarn(dev, "MII is busy in smsc95xx_mdio_read"); | 142 | netdev_warn(dev->net, "MII is busy in smsc95xx_mdio_read\n"); |
142 | mutex_unlock(&dev->phy_mutex); | 143 | mutex_unlock(&dev->phy_mutex); |
143 | return -EIO; | 144 | return -EIO; |
144 | } | 145 | } |
@@ -150,7 +151,7 @@ static int smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx) | |||
150 | smsc95xx_write_reg(dev, MII_ADDR, addr); | 151 | smsc95xx_write_reg(dev, MII_ADDR, addr); |
151 | 152 | ||
152 | if (smsc95xx_phy_wait_not_busy(dev)) { | 153 | if (smsc95xx_phy_wait_not_busy(dev)) { |
153 | devwarn(dev, "Timed out reading MII reg %02X", idx); | 154 | netdev_warn(dev->net, "Timed out reading MII reg %02X\n", idx); |
154 | mutex_unlock(&dev->phy_mutex); | 155 | mutex_unlock(&dev->phy_mutex); |
155 | return -EIO; | 156 | return -EIO; |
156 | } | 157 | } |
@@ -172,7 +173,7 @@ static void smsc95xx_mdio_write(struct net_device *netdev, int phy_id, int idx, | |||
172 | 173 | ||
173 | /* confirm MII not busy */ | 174 | /* confirm MII not busy */ |
174 | if (smsc95xx_phy_wait_not_busy(dev)) { | 175 | if (smsc95xx_phy_wait_not_busy(dev)) { |
175 | devwarn(dev, "MII is busy in smsc95xx_mdio_write"); | 176 | netdev_warn(dev->net, "MII is busy in smsc95xx_mdio_write\n"); |
176 | mutex_unlock(&dev->phy_mutex); | 177 | mutex_unlock(&dev->phy_mutex); |
177 | return; | 178 | return; |
178 | } | 179 | } |
@@ -187,7 +188,7 @@ static void smsc95xx_mdio_write(struct net_device *netdev, int phy_id, int idx, | |||
187 | smsc95xx_write_reg(dev, MII_ADDR, addr); | 188 | smsc95xx_write_reg(dev, MII_ADDR, addr); |
188 | 189 | ||
189 | if (smsc95xx_phy_wait_not_busy(dev)) | 190 | if (smsc95xx_phy_wait_not_busy(dev)) |
190 | devwarn(dev, "Timed out writing MII reg %02X", idx); | 191 | netdev_warn(dev->net, "Timed out writing MII reg %02X\n", idx); |
191 | 192 | ||
192 | mutex_unlock(&dev->phy_mutex); | 193 | mutex_unlock(&dev->phy_mutex); |
193 | } | 194 | } |
@@ -205,7 +206,7 @@ static int smsc95xx_wait_eeprom(struct usbnet *dev) | |||
205 | } while (!time_after(jiffies, start_time + HZ)); | 206 | } while (!time_after(jiffies, start_time + HZ)); |
206 | 207 | ||
207 | if (val & (E2P_CMD_TIMEOUT_ | E2P_CMD_BUSY_)) { | 208 | if (val & (E2P_CMD_TIMEOUT_ | E2P_CMD_BUSY_)) { |
208 | devwarn(dev, "EEPROM read operation timeout"); | 209 | netdev_warn(dev->net, "EEPROM read operation timeout\n"); |
209 | return -EIO; | 210 | return -EIO; |
210 | } | 211 | } |
211 | 212 | ||
@@ -226,7 +227,7 @@ static int smsc95xx_eeprom_confirm_not_busy(struct usbnet *dev) | |||
226 | udelay(40); | 227 | udelay(40); |
227 | } while (!time_after(jiffies, start_time + HZ)); | 228 | } while (!time_after(jiffies, start_time + HZ)); |
228 | 229 | ||
229 | devwarn(dev, "EEPROM is busy"); | 230 | netdev_warn(dev->net, "EEPROM is busy\n"); |
230 | return -EIO; | 231 | return -EIO; |
231 | } | 232 | } |
232 | 233 | ||
@@ -308,7 +309,7 @@ static void smsc95xx_async_cmd_callback(struct urb *urb) | |||
308 | int status = urb->status; | 309 | int status = urb->status; |
309 | 310 | ||
310 | if (status < 0) | 311 | if (status < 0) |
311 | devwarn(dev, "async callback failed with %d", status); | 312 | netdev_warn(dev->net, "async callback failed with %d\n", status); |
312 | 313 | ||
313 | kfree(usb_context); | 314 | kfree(usb_context); |
314 | usb_free_urb(urb); | 315 | usb_free_urb(urb); |
@@ -323,13 +324,13 @@ static int smsc95xx_write_reg_async(struct usbnet *dev, u16 index, u32 *data) | |||
323 | 324 | ||
324 | urb = usb_alloc_urb(0, GFP_ATOMIC); | 325 | urb = usb_alloc_urb(0, GFP_ATOMIC); |
325 | if (!urb) { | 326 | if (!urb) { |
326 | devwarn(dev, "Error allocating URB"); | 327 | netdev_warn(dev->net, "Error allocating URB\n"); |
327 | return -ENOMEM; | 328 | return -ENOMEM; |
328 | } | 329 | } |
329 | 330 | ||
330 | usb_context = kmalloc(sizeof(struct usb_context), GFP_ATOMIC); | 331 | usb_context = kmalloc(sizeof(struct usb_context), GFP_ATOMIC); |
331 | if (usb_context == NULL) { | 332 | if (usb_context == NULL) { |
332 | devwarn(dev, "Error allocating control msg"); | 333 | netdev_warn(dev->net, "Error allocating control msg\n"); |
333 | usb_free_urb(urb); | 334 | usb_free_urb(urb); |
334 | return -ENOMEM; | 335 | return -ENOMEM; |
335 | } | 336 | } |
@@ -348,7 +349,8 @@ static int smsc95xx_write_reg_async(struct usbnet *dev, u16 index, u32 *data) | |||
348 | 349 | ||
349 | status = usb_submit_urb(urb, GFP_ATOMIC); | 350 | status = usb_submit_urb(urb, GFP_ATOMIC); |
350 | if (status < 0) { | 351 | if (status < 0) { |
351 | devwarn(dev, "Error submitting control msg, sts=%d", status); | 352 | netdev_warn(dev->net, "Error submitting control msg, sts=%d\n", |
353 | status); | ||
352 | kfree(usb_context); | 354 | kfree(usb_context); |
353 | usb_free_urb(urb); | 355 | usb_free_urb(urb); |
354 | } | 356 | } |
@@ -375,46 +377,32 @@ static void smsc95xx_set_multicast(struct net_device *netdev) | |||
375 | spin_lock_irqsave(&pdata->mac_cr_lock, flags); | 377 | spin_lock_irqsave(&pdata->mac_cr_lock, flags); |
376 | 378 | ||
377 | if (dev->net->flags & IFF_PROMISC) { | 379 | if (dev->net->flags & IFF_PROMISC) { |
378 | if (netif_msg_drv(dev)) | 380 | netif_dbg(dev, drv, dev->net, "promiscuous mode enabled\n"); |
379 | devdbg(dev, "promiscuous mode enabled"); | ||
380 | pdata->mac_cr |= MAC_CR_PRMS_; | 381 | pdata->mac_cr |= MAC_CR_PRMS_; |
381 | pdata->mac_cr &= ~(MAC_CR_MCPAS_ | MAC_CR_HPFILT_); | 382 | pdata->mac_cr &= ~(MAC_CR_MCPAS_ | MAC_CR_HPFILT_); |
382 | } else if (dev->net->flags & IFF_ALLMULTI) { | 383 | } else if (dev->net->flags & IFF_ALLMULTI) { |
383 | if (netif_msg_drv(dev)) | 384 | netif_dbg(dev, drv, dev->net, "receive all multicast enabled\n"); |
384 | devdbg(dev, "receive all multicast enabled"); | ||
385 | pdata->mac_cr |= MAC_CR_MCPAS_; | 385 | pdata->mac_cr |= MAC_CR_MCPAS_; |
386 | pdata->mac_cr &= ~(MAC_CR_PRMS_ | MAC_CR_HPFILT_); | 386 | pdata->mac_cr &= ~(MAC_CR_PRMS_ | MAC_CR_HPFILT_); |
387 | } else if (dev->net->mc_count > 0) { | 387 | } else if (!netdev_mc_empty(dev->net)) { |
388 | struct dev_mc_list *mc_list = dev->net->mc_list; | 388 | struct dev_mc_list *mc_list; |
389 | int count = 0; | ||
390 | 389 | ||
391 | pdata->mac_cr |= MAC_CR_HPFILT_; | 390 | pdata->mac_cr |= MAC_CR_HPFILT_; |
392 | pdata->mac_cr &= ~(MAC_CR_PRMS_ | MAC_CR_MCPAS_); | 391 | pdata->mac_cr &= ~(MAC_CR_PRMS_ | MAC_CR_MCPAS_); |
393 | 392 | ||
394 | while (mc_list) { | 393 | netdev_for_each_mc_addr(mc_list, netdev) { |
395 | count++; | 394 | u32 bitnum = smsc95xx_hash(mc_list->dmi_addr); |
396 | if (mc_list->dmi_addrlen == ETH_ALEN) { | 395 | u32 mask = 0x01 << (bitnum & 0x1F); |
397 | u32 bitnum = smsc95xx_hash(mc_list->dmi_addr); | 396 | if (bitnum & 0x20) |
398 | u32 mask = 0x01 << (bitnum & 0x1F); | 397 | hash_hi |= mask; |
399 | if (bitnum & 0x20) | 398 | else |
400 | hash_hi |= mask; | 399 | hash_lo |= mask; |
401 | else | ||
402 | hash_lo |= mask; | ||
403 | } else { | ||
404 | devwarn(dev, "dmi_addrlen != 6"); | ||
405 | } | ||
406 | mc_list = mc_list->next; | ||
407 | } | 400 | } |
408 | 401 | ||
409 | if (count != ((u32)dev->net->mc_count)) | 402 | netif_dbg(dev, drv, dev->net, "HASHH=0x%08X, HASHL=0x%08X\n", |
410 | devwarn(dev, "mc_count != dev->mc_count"); | 403 | hash_hi, hash_lo); |
411 | |||
412 | if (netif_msg_drv(dev)) | ||
413 | devdbg(dev, "HASHH=0x%08X, HASHL=0x%08X", hash_hi, | ||
414 | hash_lo); | ||
415 | } else { | 404 | } else { |
416 | if (netif_msg_drv(dev)) | 405 | netif_dbg(dev, drv, dev->net, "receive own packets only\n"); |
417 | devdbg(dev, "receive own packets only"); | ||
418 | pdata->mac_cr &= | 406 | pdata->mac_cr &= |
419 | ~(MAC_CR_PRMS_ | MAC_CR_MCPAS_ | MAC_CR_HPFILT_); | 407 | ~(MAC_CR_PRMS_ | MAC_CR_MCPAS_ | MAC_CR_HPFILT_); |
420 | } | 408 | } |
@@ -434,7 +422,7 @@ static void smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex, | |||
434 | 422 | ||
435 | int ret = smsc95xx_read_reg(dev, AFC_CFG, &afc_cfg); | 423 | int ret = smsc95xx_read_reg(dev, AFC_CFG, &afc_cfg); |
436 | if (ret < 0) { | 424 | if (ret < 0) { |
437 | devwarn(dev, "error reading AFC_CFG"); | 425 | netdev_warn(dev->net, "error reading AFC_CFG\n"); |
438 | return; | 426 | return; |
439 | } | 427 | } |
440 | 428 | ||
@@ -451,13 +439,11 @@ static void smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex, | |||
451 | else | 439 | else |
452 | afc_cfg &= ~0xF; | 440 | afc_cfg &= ~0xF; |
453 | 441 | ||
454 | if (netif_msg_link(dev)) | 442 | netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s\n", |
455 | devdbg(dev, "rx pause %s, tx pause %s", | 443 | cap & FLOW_CTRL_RX ? "enabled" : "disabled", |
456 | (cap & FLOW_CTRL_RX ? "enabled" : "disabled"), | 444 | cap & FLOW_CTRL_TX ? "enabled" : "disabled"); |
457 | (cap & FLOW_CTRL_TX ? "enabled" : "disabled")); | ||
458 | } else { | 445 | } else { |
459 | if (netif_msg_link(dev)) | 446 | netif_dbg(dev, link, dev->net, "half duplex\n"); |
460 | devdbg(dev, "half duplex"); | ||
461 | flow = 0; | 447 | flow = 0; |
462 | afc_cfg |= 0xF; | 448 | afc_cfg |= 0xF; |
463 | } | 449 | } |
@@ -485,9 +471,8 @@ static int smsc95xx_link_reset(struct usbnet *dev) | |||
485 | lcladv = smsc95xx_mdio_read(dev->net, mii->phy_id, MII_ADVERTISE); | 471 | lcladv = smsc95xx_mdio_read(dev->net, mii->phy_id, MII_ADVERTISE); |
486 | rmtadv = smsc95xx_mdio_read(dev->net, mii->phy_id, MII_LPA); | 472 | rmtadv = smsc95xx_mdio_read(dev->net, mii->phy_id, MII_LPA); |
487 | 473 | ||
488 | if (netif_msg_link(dev)) | 474 | netif_dbg(dev, link, dev->net, "speed: %d duplex: %d lcladv: %04x rmtadv: %04x\n", |
489 | devdbg(dev, "speed: %d duplex: %d lcladv: %04x rmtadv: %04x", | 475 | ecmd.speed, ecmd.duplex, lcladv, rmtadv); |
490 | ecmd.speed, ecmd.duplex, lcladv, rmtadv); | ||
491 | 476 | ||
492 | spin_lock_irqsave(&pdata->mac_cr_lock, flags); | 477 | spin_lock_irqsave(&pdata->mac_cr_lock, flags); |
493 | if (ecmd.duplex != DUPLEX_FULL) { | 478 | if (ecmd.duplex != DUPLEX_FULL) { |
@@ -511,20 +496,21 @@ static void smsc95xx_status(struct usbnet *dev, struct urb *urb) | |||
511 | u32 intdata; | 496 | u32 intdata; |
512 | 497 | ||
513 | if (urb->actual_length != 4) { | 498 | if (urb->actual_length != 4) { |
514 | devwarn(dev, "unexpected urb length %d", urb->actual_length); | 499 | netdev_warn(dev->net, "unexpected urb length %d\n", |
500 | urb->actual_length); | ||
515 | return; | 501 | return; |
516 | } | 502 | } |
517 | 503 | ||
518 | memcpy(&intdata, urb->transfer_buffer, 4); | 504 | memcpy(&intdata, urb->transfer_buffer, 4); |
519 | le32_to_cpus(&intdata); | 505 | le32_to_cpus(&intdata); |
520 | 506 | ||
521 | if (netif_msg_link(dev)) | 507 | netif_dbg(dev, link, dev->net, "intdata: 0x%08X\n", intdata); |
522 | devdbg(dev, "intdata: 0x%08X", intdata); | ||
523 | 508 | ||
524 | if (intdata & INT_ENP_PHY_INT_) | 509 | if (intdata & INT_ENP_PHY_INT_) |
525 | usbnet_defer_kevent(dev, EVENT_LINK_RESET); | 510 | usbnet_defer_kevent(dev, EVENT_LINK_RESET); |
526 | else | 511 | else |
527 | devwarn(dev, "unexpected interrupt, intdata=0x%08X", intdata); | 512 | netdev_warn(dev->net, "unexpected interrupt, intdata=0x%08X\n", |
513 | intdata); | ||
528 | } | 514 | } |
529 | 515 | ||
530 | /* Enable or disable Tx & Rx checksum offload engines */ | 516 | /* Enable or disable Tx & Rx checksum offload engines */ |
@@ -534,7 +520,7 @@ static int smsc95xx_set_csums(struct usbnet *dev) | |||
534 | u32 read_buf; | 520 | u32 read_buf; |
535 | int ret = smsc95xx_read_reg(dev, COE_CR, &read_buf); | 521 | int ret = smsc95xx_read_reg(dev, COE_CR, &read_buf); |
536 | if (ret < 0) { | 522 | if (ret < 0) { |
537 | devwarn(dev, "Failed to read COE_CR: %d", ret); | 523 | netdev_warn(dev->net, "Failed to read COE_CR: %d\n", ret); |
538 | return ret; | 524 | return ret; |
539 | } | 525 | } |
540 | 526 | ||
@@ -550,12 +536,11 @@ static int smsc95xx_set_csums(struct usbnet *dev) | |||
550 | 536 | ||
551 | ret = smsc95xx_write_reg(dev, COE_CR, read_buf); | 537 | ret = smsc95xx_write_reg(dev, COE_CR, read_buf); |
552 | if (ret < 0) { | 538 | if (ret < 0) { |
553 | devwarn(dev, "Failed to write COE_CR: %d", ret); | 539 | netdev_warn(dev->net, "Failed to write COE_CR: %d\n", ret); |
554 | return ret; | 540 | return ret; |
555 | } | 541 | } |
556 | 542 | ||
557 | if (netif_msg_hw(dev)) | 543 | netif_dbg(dev, hw, dev->net, "COE_CR = 0x%08x\n", read_buf); |
558 | devdbg(dev, "COE_CR = 0x%08x", read_buf); | ||
559 | return 0; | 544 | return 0; |
560 | } | 545 | } |
561 | 546 | ||
@@ -580,8 +565,8 @@ static int smsc95xx_ethtool_set_eeprom(struct net_device *netdev, | |||
580 | struct usbnet *dev = netdev_priv(netdev); | 565 | struct usbnet *dev = netdev_priv(netdev); |
581 | 566 | ||
582 | if (ee->magic != LAN95XX_EEPROM_MAGIC) { | 567 | if (ee->magic != LAN95XX_EEPROM_MAGIC) { |
583 | devwarn(dev, "EEPROM: magic value mismatch, magic = 0x%x", | 568 | netdev_warn(dev->net, "EEPROM: magic value mismatch, magic = 0x%x\n", |
584 | ee->magic); | 569 | ee->magic); |
585 | return -EINVAL; | 570 | return -EINVAL; |
586 | } | 571 | } |
587 | 572 | ||
@@ -659,16 +644,14 @@ static void smsc95xx_init_mac_address(struct usbnet *dev) | |||
659 | dev->net->dev_addr) == 0) { | 644 | dev->net->dev_addr) == 0) { |
660 | if (is_valid_ether_addr(dev->net->dev_addr)) { | 645 | if (is_valid_ether_addr(dev->net->dev_addr)) { |
661 | /* eeprom values are valid so use them */ | 646 | /* eeprom values are valid so use them */ |
662 | if (netif_msg_ifup(dev)) | 647 | netif_dbg(dev, ifup, dev->net, "MAC address read from EEPROM\n"); |
663 | devdbg(dev, "MAC address read from EEPROM"); | ||
664 | return; | 648 | return; |
665 | } | 649 | } |
666 | } | 650 | } |
667 | 651 | ||
668 | /* no eeprom, or eeprom values are invalid. generate random MAC */ | 652 | /* no eeprom, or eeprom values are invalid. generate random MAC */ |
669 | random_ether_addr(dev->net->dev_addr); | 653 | random_ether_addr(dev->net->dev_addr); |
670 | if (netif_msg_ifup(dev)) | 654 | netif_dbg(dev, ifup, dev->net, "MAC address set to random_ether_addr\n"); |
671 | devdbg(dev, "MAC address set to random_ether_addr"); | ||
672 | } | 655 | } |
673 | 656 | ||
674 | static int smsc95xx_set_mac_address(struct usbnet *dev) | 657 | static int smsc95xx_set_mac_address(struct usbnet *dev) |
@@ -680,13 +663,13 @@ static int smsc95xx_set_mac_address(struct usbnet *dev) | |||
680 | 663 | ||
681 | ret = smsc95xx_write_reg(dev, ADDRL, addr_lo); | 664 | ret = smsc95xx_write_reg(dev, ADDRL, addr_lo); |
682 | if (ret < 0) { | 665 | if (ret < 0) { |
683 | devwarn(dev, "Failed to write ADDRL: %d", ret); | 666 | netdev_warn(dev->net, "Failed to write ADDRL: %d\n", ret); |
684 | return ret; | 667 | return ret; |
685 | } | 668 | } |
686 | 669 | ||
687 | ret = smsc95xx_write_reg(dev, ADDRH, addr_hi); | 670 | ret = smsc95xx_write_reg(dev, ADDRH, addr_hi); |
688 | if (ret < 0) { | 671 | if (ret < 0) { |
689 | devwarn(dev, "Failed to write ADDRH: %d", ret); | 672 | netdev_warn(dev->net, "Failed to write ADDRH: %d\n", ret); |
690 | return ret; | 673 | return ret; |
691 | } | 674 | } |
692 | 675 | ||
@@ -727,6 +710,8 @@ static void smsc95xx_start_rx_path(struct usbnet *dev) | |||
727 | 710 | ||
728 | static int smsc95xx_phy_initialize(struct usbnet *dev) | 711 | static int smsc95xx_phy_initialize(struct usbnet *dev) |
729 | { | 712 | { |
713 | int bmcr, timeout = 0; | ||
714 | |||
730 | /* Initialize MII structure */ | 715 | /* Initialize MII structure */ |
731 | dev->mii.dev = dev->net; | 716 | dev->mii.dev = dev->net; |
732 | dev->mii.mdio_read = smsc95xx_mdio_read; | 717 | dev->mii.mdio_read = smsc95xx_mdio_read; |
@@ -735,7 +720,20 @@ static int smsc95xx_phy_initialize(struct usbnet *dev) | |||
735 | dev->mii.reg_num_mask = 0x1f; | 720 | dev->mii.reg_num_mask = 0x1f; |
736 | dev->mii.phy_id = SMSC95XX_INTERNAL_PHY_ID; | 721 | dev->mii.phy_id = SMSC95XX_INTERNAL_PHY_ID; |
737 | 722 | ||
723 | /* reset phy and wait for reset to complete */ | ||
738 | smsc95xx_mdio_write(dev->net, dev->mii.phy_id, MII_BMCR, BMCR_RESET); | 724 | smsc95xx_mdio_write(dev->net, dev->mii.phy_id, MII_BMCR, BMCR_RESET); |
725 | |||
726 | do { | ||
727 | msleep(10); | ||
728 | bmcr = smsc95xx_mdio_read(dev->net, dev->mii.phy_id, MII_BMCR); | ||
729 | timeout++; | ||
730 | } while ((bmcr & MII_BMCR) && (timeout < 100)); | ||
731 | |||
732 | if (timeout >= 100) { | ||
733 | netdev_warn(dev->net, "timeout on PHY Reset"); | ||
734 | return -EIO; | ||
735 | } | ||
736 | |||
739 | smsc95xx_mdio_write(dev->net, dev->mii.phy_id, MII_ADVERTISE, | 737 | smsc95xx_mdio_write(dev->net, dev->mii.phy_id, MII_ADVERTISE, |
740 | ADVERTISE_ALL | ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP | | 738 | ADVERTISE_ALL | ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP | |
741 | ADVERTISE_PAUSE_ASYM); | 739 | ADVERTISE_PAUSE_ASYM); |
@@ -747,8 +745,7 @@ static int smsc95xx_phy_initialize(struct usbnet *dev) | |||
747 | PHY_INT_MASK_DEFAULT_); | 745 | PHY_INT_MASK_DEFAULT_); |
748 | mii_nway_restart(&dev->mii); | 746 | mii_nway_restart(&dev->mii); |
749 | 747 | ||
750 | if (netif_msg_ifup(dev)) | 748 | netif_dbg(dev, ifup, dev->net, "phy initialised successfully\n"); |
751 | devdbg(dev, "phy initialised succesfully"); | ||
752 | return 0; | 749 | return 0; |
753 | } | 750 | } |
754 | 751 | ||
@@ -759,14 +756,13 @@ static int smsc95xx_reset(struct usbnet *dev) | |||
759 | u32 read_buf, write_buf, burst_cap; | 756 | u32 read_buf, write_buf, burst_cap; |
760 | int ret = 0, timeout; | 757 | int ret = 0, timeout; |
761 | 758 | ||
762 | if (netif_msg_ifup(dev)) | 759 | netif_dbg(dev, ifup, dev->net, "entering smsc95xx_reset\n"); |
763 | devdbg(dev, "entering smsc95xx_reset"); | ||
764 | 760 | ||
765 | write_buf = HW_CFG_LRST_; | 761 | write_buf = HW_CFG_LRST_; |
766 | ret = smsc95xx_write_reg(dev, HW_CFG, write_buf); | 762 | ret = smsc95xx_write_reg(dev, HW_CFG, write_buf); |
767 | if (ret < 0) { | 763 | if (ret < 0) { |
768 | devwarn(dev, "Failed to write HW_CFG_LRST_ bit in HW_CFG " | 764 | netdev_warn(dev->net, "Failed to write HW_CFG_LRST_ bit in HW_CFG register, ret = %d\n", |
769 | "register, ret = %d", ret); | 765 | ret); |
770 | return ret; | 766 | return ret; |
771 | } | 767 | } |
772 | 768 | ||
@@ -774,7 +770,7 @@ static int smsc95xx_reset(struct usbnet *dev) | |||
774 | do { | 770 | do { |
775 | ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); | 771 | ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); |
776 | if (ret < 0) { | 772 | if (ret < 0) { |
777 | devwarn(dev, "Failed to read HW_CFG: %d", ret); | 773 | netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); |
778 | return ret; | 774 | return ret; |
779 | } | 775 | } |
780 | msleep(10); | 776 | msleep(10); |
@@ -782,14 +778,14 @@ static int smsc95xx_reset(struct usbnet *dev) | |||
782 | } while ((read_buf & HW_CFG_LRST_) && (timeout < 100)); | 778 | } while ((read_buf & HW_CFG_LRST_) && (timeout < 100)); |
783 | 779 | ||
784 | if (timeout >= 100) { | 780 | if (timeout >= 100) { |
785 | devwarn(dev, "timeout waiting for completion of Lite Reset"); | 781 | netdev_warn(dev->net, "timeout waiting for completion of Lite Reset\n"); |
786 | return ret; | 782 | return ret; |
787 | } | 783 | } |
788 | 784 | ||
789 | write_buf = PM_CTL_PHY_RST_; | 785 | write_buf = PM_CTL_PHY_RST_; |
790 | ret = smsc95xx_write_reg(dev, PM_CTRL, write_buf); | 786 | ret = smsc95xx_write_reg(dev, PM_CTRL, write_buf); |
791 | if (ret < 0) { | 787 | if (ret < 0) { |
792 | devwarn(dev, "Failed to write PM_CTRL: %d", ret); | 788 | netdev_warn(dev->net, "Failed to write PM_CTRL: %d\n", ret); |
793 | return ret; | 789 | return ret; |
794 | } | 790 | } |
795 | 791 | ||
@@ -797,7 +793,7 @@ static int smsc95xx_reset(struct usbnet *dev) | |||
797 | do { | 793 | do { |
798 | ret = smsc95xx_read_reg(dev, PM_CTRL, &read_buf); | 794 | ret = smsc95xx_read_reg(dev, PM_CTRL, &read_buf); |
799 | if (ret < 0) { | 795 | if (ret < 0) { |
800 | devwarn(dev, "Failed to read PM_CTRL: %d", ret); | 796 | netdev_warn(dev->net, "Failed to read PM_CTRL: %d\n", ret); |
801 | return ret; | 797 | return ret; |
802 | } | 798 | } |
803 | msleep(10); | 799 | msleep(10); |
@@ -805,7 +801,7 @@ static int smsc95xx_reset(struct usbnet *dev) | |||
805 | } while ((read_buf & PM_CTL_PHY_RST_) && (timeout < 100)); | 801 | } while ((read_buf & PM_CTL_PHY_RST_) && (timeout < 100)); |
806 | 802 | ||
807 | if (timeout >= 100) { | 803 | if (timeout >= 100) { |
808 | devwarn(dev, "timeout waiting for PHY Reset"); | 804 | netdev_warn(dev->net, "timeout waiting for PHY Reset\n"); |
809 | return ret; | 805 | return ret; |
810 | } | 806 | } |
811 | 807 | ||
@@ -815,35 +811,35 @@ static int smsc95xx_reset(struct usbnet *dev) | |||
815 | if (ret < 0) | 811 | if (ret < 0) |
816 | return ret; | 812 | return ret; |
817 | 813 | ||
818 | if (netif_msg_ifup(dev)) | 814 | netif_dbg(dev, ifup, dev->net, |
819 | devdbg(dev, "MAC Address: %pM", dev->net->dev_addr); | 815 | "MAC Address: %pM\n", dev->net->dev_addr); |
820 | 816 | ||
821 | ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); | 817 | ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); |
822 | if (ret < 0) { | 818 | if (ret < 0) { |
823 | devwarn(dev, "Failed to read HW_CFG: %d", ret); | 819 | netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); |
824 | return ret; | 820 | return ret; |
825 | } | 821 | } |
826 | 822 | ||
827 | if (netif_msg_ifup(dev)) | 823 | netif_dbg(dev, ifup, dev->net, |
828 | devdbg(dev, "Read Value from HW_CFG : 0x%08x", read_buf); | 824 | "Read Value from HW_CFG : 0x%08x\n", read_buf); |
829 | 825 | ||
830 | read_buf |= HW_CFG_BIR_; | 826 | read_buf |= HW_CFG_BIR_; |
831 | 827 | ||
832 | ret = smsc95xx_write_reg(dev, HW_CFG, read_buf); | 828 | ret = smsc95xx_write_reg(dev, HW_CFG, read_buf); |
833 | if (ret < 0) { | 829 | if (ret < 0) { |
834 | devwarn(dev, "Failed to write HW_CFG_BIR_ bit in HW_CFG " | 830 | netdev_warn(dev->net, "Failed to write HW_CFG_BIR_ bit in HW_CFG register, ret = %d\n", |
835 | "register, ret = %d", ret); | 831 | ret); |
836 | return ret; | 832 | return ret; |
837 | } | 833 | } |
838 | 834 | ||
839 | ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); | 835 | ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); |
840 | if (ret < 0) { | 836 | if (ret < 0) { |
841 | devwarn(dev, "Failed to read HW_CFG: %d", ret); | 837 | netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); |
842 | return ret; | 838 | return ret; |
843 | } | 839 | } |
844 | if (netif_msg_ifup(dev)) | 840 | netif_dbg(dev, ifup, dev->net, |
845 | devdbg(dev, "Read Value from HW_CFG after writing " | 841 | "Read Value from HW_CFG after writing HW_CFG_BIR_: 0x%08x\n", |
846 | "HW_CFG_BIR_: 0x%08x", read_buf); | 842 | read_buf); |
847 | 843 | ||
848 | if (!turbo_mode) { | 844 | if (!turbo_mode) { |
849 | burst_cap = 0; | 845 | burst_cap = 0; |
@@ -856,47 +852,47 @@ static int smsc95xx_reset(struct usbnet *dev) | |||
856 | dev->rx_urb_size = DEFAULT_FS_BURST_CAP_SIZE; | 852 | dev->rx_urb_size = DEFAULT_FS_BURST_CAP_SIZE; |
857 | } | 853 | } |
858 | 854 | ||
859 | if (netif_msg_ifup(dev)) | 855 | netif_dbg(dev, ifup, dev->net, |
860 | devdbg(dev, "rx_urb_size=%ld", (ulong)dev->rx_urb_size); | 856 | "rx_urb_size=%ld\n", (ulong)dev->rx_urb_size); |
861 | 857 | ||
862 | ret = smsc95xx_write_reg(dev, BURST_CAP, burst_cap); | 858 | ret = smsc95xx_write_reg(dev, BURST_CAP, burst_cap); |
863 | if (ret < 0) { | 859 | if (ret < 0) { |
864 | devwarn(dev, "Failed to write BURST_CAP: %d", ret); | 860 | netdev_warn(dev->net, "Failed to write BURST_CAP: %d\n", ret); |
865 | return ret; | 861 | return ret; |
866 | } | 862 | } |
867 | 863 | ||
868 | ret = smsc95xx_read_reg(dev, BURST_CAP, &read_buf); | 864 | ret = smsc95xx_read_reg(dev, BURST_CAP, &read_buf); |
869 | if (ret < 0) { | 865 | if (ret < 0) { |
870 | devwarn(dev, "Failed to read BURST_CAP: %d", ret); | 866 | netdev_warn(dev->net, "Failed to read BURST_CAP: %d\n", ret); |
871 | return ret; | 867 | return ret; |
872 | } | 868 | } |
873 | if (netif_msg_ifup(dev)) | 869 | netif_dbg(dev, ifup, dev->net, |
874 | devdbg(dev, "Read Value from BURST_CAP after writing: 0x%08x", | 870 | "Read Value from BURST_CAP after writing: 0x%08x\n", |
875 | read_buf); | 871 | read_buf); |
876 | 872 | ||
877 | read_buf = DEFAULT_BULK_IN_DELAY; | 873 | read_buf = DEFAULT_BULK_IN_DELAY; |
878 | ret = smsc95xx_write_reg(dev, BULK_IN_DLY, read_buf); | 874 | ret = smsc95xx_write_reg(dev, BULK_IN_DLY, read_buf); |
879 | if (ret < 0) { | 875 | if (ret < 0) { |
880 | devwarn(dev, "ret = %d", ret); | 876 | netdev_warn(dev->net, "ret = %d\n", ret); |
881 | return ret; | 877 | return ret; |
882 | } | 878 | } |
883 | 879 | ||
884 | ret = smsc95xx_read_reg(dev, BULK_IN_DLY, &read_buf); | 880 | ret = smsc95xx_read_reg(dev, BULK_IN_DLY, &read_buf); |
885 | if (ret < 0) { | 881 | if (ret < 0) { |
886 | devwarn(dev, "Failed to read BULK_IN_DLY: %d", ret); | 882 | netdev_warn(dev->net, "Failed to read BULK_IN_DLY: %d\n", ret); |
887 | return ret; | 883 | return ret; |
888 | } | 884 | } |
889 | if (netif_msg_ifup(dev)) | 885 | netif_dbg(dev, ifup, dev->net, |
890 | devdbg(dev, "Read Value from BULK_IN_DLY after writing: " | 886 | "Read Value from BULK_IN_DLY after writing: 0x%08x\n", |
891 | "0x%08x", read_buf); | 887 | read_buf); |
892 | 888 | ||
893 | ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); | 889 | ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); |
894 | if (ret < 0) { | 890 | if (ret < 0) { |
895 | devwarn(dev, "Failed to read HW_CFG: %d", ret); | 891 | netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); |
896 | return ret; | 892 | return ret; |
897 | } | 893 | } |
898 | if (netif_msg_ifup(dev)) | 894 | netif_dbg(dev, ifup, dev->net, |
899 | devdbg(dev, "Read Value from HW_CFG: 0x%08x", read_buf); | 895 | "Read Value from HW_CFG: 0x%08x\n", read_buf); |
900 | 896 | ||
901 | if (turbo_mode) | 897 | if (turbo_mode) |
902 | read_buf |= (HW_CFG_MEF_ | HW_CFG_BCE_); | 898 | read_buf |= (HW_CFG_MEF_ | HW_CFG_BCE_); |
@@ -908,41 +904,41 @@ static int smsc95xx_reset(struct usbnet *dev) | |||
908 | 904 | ||
909 | ret = smsc95xx_write_reg(dev, HW_CFG, read_buf); | 905 | ret = smsc95xx_write_reg(dev, HW_CFG, read_buf); |
910 | if (ret < 0) { | 906 | if (ret < 0) { |
911 | devwarn(dev, "Failed to write HW_CFG register, ret=%d", ret); | 907 | netdev_warn(dev->net, "Failed to write HW_CFG register, ret=%d\n", |
908 | ret); | ||
912 | return ret; | 909 | return ret; |
913 | } | 910 | } |
914 | 911 | ||
915 | ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); | 912 | ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); |
916 | if (ret < 0) { | 913 | if (ret < 0) { |
917 | devwarn(dev, "Failed to read HW_CFG: %d", ret); | 914 | netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); |
918 | return ret; | 915 | return ret; |
919 | } | 916 | } |
920 | if (netif_msg_ifup(dev)) | 917 | netif_dbg(dev, ifup, dev->net, |
921 | devdbg(dev, "Read Value from HW_CFG after writing: 0x%08x", | 918 | "Read Value from HW_CFG after writing: 0x%08x\n", read_buf); |
922 | read_buf); | ||
923 | 919 | ||
924 | write_buf = 0xFFFFFFFF; | 920 | write_buf = 0xFFFFFFFF; |
925 | ret = smsc95xx_write_reg(dev, INT_STS, write_buf); | 921 | ret = smsc95xx_write_reg(dev, INT_STS, write_buf); |
926 | if (ret < 0) { | 922 | if (ret < 0) { |
927 | devwarn(dev, "Failed to write INT_STS register, ret=%d", ret); | 923 | netdev_warn(dev->net, "Failed to write INT_STS register, ret=%d\n", |
924 | ret); | ||
928 | return ret; | 925 | return ret; |
929 | } | 926 | } |
930 | 927 | ||
931 | ret = smsc95xx_read_reg(dev, ID_REV, &read_buf); | 928 | ret = smsc95xx_read_reg(dev, ID_REV, &read_buf); |
932 | if (ret < 0) { | 929 | if (ret < 0) { |
933 | devwarn(dev, "Failed to read ID_REV: %d", ret); | 930 | netdev_warn(dev->net, "Failed to read ID_REV: %d\n", ret); |
934 | return ret; | 931 | return ret; |
935 | } | 932 | } |
936 | if (netif_msg_ifup(dev)) | 933 | netif_dbg(dev, ifup, dev->net, "ID_REV = 0x%08x\n", read_buf); |
937 | devdbg(dev, "ID_REV = 0x%08x", read_buf); | ||
938 | 934 | ||
939 | /* Configure GPIO pins as LED outputs */ | 935 | /* Configure GPIO pins as LED outputs */ |
940 | write_buf = LED_GPIO_CFG_SPD_LED | LED_GPIO_CFG_LNK_LED | | 936 | write_buf = LED_GPIO_CFG_SPD_LED | LED_GPIO_CFG_LNK_LED | |
941 | LED_GPIO_CFG_FDX_LED; | 937 | LED_GPIO_CFG_FDX_LED; |
942 | ret = smsc95xx_write_reg(dev, LED_GPIO_CFG, write_buf); | 938 | ret = smsc95xx_write_reg(dev, LED_GPIO_CFG, write_buf); |
943 | if (ret < 0) { | 939 | if (ret < 0) { |
944 | devwarn(dev, "Failed to write LED_GPIO_CFG register, ret=%d", | 940 | netdev_warn(dev->net, "Failed to write LED_GPIO_CFG register, ret=%d\n", |
945 | ret); | 941 | ret); |
946 | return ret; | 942 | return ret; |
947 | } | 943 | } |
948 | 944 | ||
@@ -950,21 +946,21 @@ static int smsc95xx_reset(struct usbnet *dev) | |||
950 | write_buf = 0; | 946 | write_buf = 0; |
951 | ret = smsc95xx_write_reg(dev, FLOW, write_buf); | 947 | ret = smsc95xx_write_reg(dev, FLOW, write_buf); |
952 | if (ret < 0) { | 948 | if (ret < 0) { |
953 | devwarn(dev, "Failed to write FLOW: %d", ret); | 949 | netdev_warn(dev->net, "Failed to write FLOW: %d\n", ret); |
954 | return ret; | 950 | return ret; |
955 | } | 951 | } |
956 | 952 | ||
957 | read_buf = AFC_CFG_DEFAULT; | 953 | read_buf = AFC_CFG_DEFAULT; |
958 | ret = smsc95xx_write_reg(dev, AFC_CFG, read_buf); | 954 | ret = smsc95xx_write_reg(dev, AFC_CFG, read_buf); |
959 | if (ret < 0) { | 955 | if (ret < 0) { |
960 | devwarn(dev, "Failed to write AFC_CFG: %d", ret); | 956 | netdev_warn(dev->net, "Failed to write AFC_CFG: %d\n", ret); |
961 | return ret; | 957 | return ret; |
962 | } | 958 | } |
963 | 959 | ||
964 | /* Don't need mac_cr_lock during initialisation */ | 960 | /* Don't need mac_cr_lock during initialisation */ |
965 | ret = smsc95xx_read_reg(dev, MAC_CR, &pdata->mac_cr); | 961 | ret = smsc95xx_read_reg(dev, MAC_CR, &pdata->mac_cr); |
966 | if (ret < 0) { | 962 | if (ret < 0) { |
967 | devwarn(dev, "Failed to read MAC_CR: %d", ret); | 963 | netdev_warn(dev->net, "Failed to read MAC_CR: %d\n", ret); |
968 | return ret; | 964 | return ret; |
969 | } | 965 | } |
970 | 966 | ||
@@ -973,7 +969,7 @@ static int smsc95xx_reset(struct usbnet *dev) | |||
973 | write_buf = (u32)ETH_P_8021Q; | 969 | write_buf = (u32)ETH_P_8021Q; |
974 | ret = smsc95xx_write_reg(dev, VLAN1, write_buf); | 970 | ret = smsc95xx_write_reg(dev, VLAN1, write_buf); |
975 | if (ret < 0) { | 971 | if (ret < 0) { |
976 | devwarn(dev, "Failed to write VAN1: %d", ret); | 972 | netdev_warn(dev->net, "Failed to write VAN1: %d\n", ret); |
977 | return ret; | 973 | return ret; |
978 | } | 974 | } |
979 | 975 | ||
@@ -981,7 +977,7 @@ static int smsc95xx_reset(struct usbnet *dev) | |||
981 | ethtool_op_set_tx_hw_csum(netdev, pdata->use_tx_csum); | 977 | ethtool_op_set_tx_hw_csum(netdev, pdata->use_tx_csum); |
982 | ret = smsc95xx_set_csums(dev); | 978 | ret = smsc95xx_set_csums(dev); |
983 | if (ret < 0) { | 979 | if (ret < 0) { |
984 | devwarn(dev, "Failed to set csum offload: %d", ret); | 980 | netdev_warn(dev->net, "Failed to set csum offload: %d\n", ret); |
985 | return ret; | 981 | return ret; |
986 | } | 982 | } |
987 | 983 | ||
@@ -992,7 +988,7 @@ static int smsc95xx_reset(struct usbnet *dev) | |||
992 | 988 | ||
993 | ret = smsc95xx_read_reg(dev, INT_EP_CTL, &read_buf); | 989 | ret = smsc95xx_read_reg(dev, INT_EP_CTL, &read_buf); |
994 | if (ret < 0) { | 990 | if (ret < 0) { |
995 | devwarn(dev, "Failed to read INT_EP_CTL: %d", ret); | 991 | netdev_warn(dev->net, "Failed to read INT_EP_CTL: %d\n", ret); |
996 | return ret; | 992 | return ret; |
997 | } | 993 | } |
998 | 994 | ||
@@ -1001,15 +997,14 @@ static int smsc95xx_reset(struct usbnet *dev) | |||
1001 | 997 | ||
1002 | ret = smsc95xx_write_reg(dev, INT_EP_CTL, read_buf); | 998 | ret = smsc95xx_write_reg(dev, INT_EP_CTL, read_buf); |
1003 | if (ret < 0) { | 999 | if (ret < 0) { |
1004 | devwarn(dev, "Failed to write INT_EP_CTL: %d", ret); | 1000 | netdev_warn(dev->net, "Failed to write INT_EP_CTL: %d\n", ret); |
1005 | return ret; | 1001 | return ret; |
1006 | } | 1002 | } |
1007 | 1003 | ||
1008 | smsc95xx_start_tx_path(dev); | 1004 | smsc95xx_start_tx_path(dev); |
1009 | smsc95xx_start_rx_path(dev); | 1005 | smsc95xx_start_rx_path(dev); |
1010 | 1006 | ||
1011 | if (netif_msg_ifup(dev)) | 1007 | netif_dbg(dev, ifup, dev->net, "smsc95xx_reset, return 0\n"); |
1012 | devdbg(dev, "smsc95xx_reset, return 0"); | ||
1013 | return 0; | 1008 | return 0; |
1014 | } | 1009 | } |
1015 | 1010 | ||
@@ -1034,7 +1029,7 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf) | |||
1034 | 1029 | ||
1035 | ret = usbnet_get_endpoints(dev, intf); | 1030 | ret = usbnet_get_endpoints(dev, intf); |
1036 | if (ret < 0) { | 1031 | if (ret < 0) { |
1037 | devwarn(dev, "usbnet_get_endpoints failed: %d", ret); | 1032 | netdev_warn(dev->net, "usbnet_get_endpoints failed: %d\n", ret); |
1038 | return ret; | 1033 | return ret; |
1039 | } | 1034 | } |
1040 | 1035 | ||
@@ -1043,7 +1038,7 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf) | |||
1043 | 1038 | ||
1044 | pdata = (struct smsc95xx_priv *)(dev->data[0]); | 1039 | pdata = (struct smsc95xx_priv *)(dev->data[0]); |
1045 | if (!pdata) { | 1040 | if (!pdata) { |
1046 | devwarn(dev, "Unable to allocate struct smsc95xx_priv"); | 1041 | netdev_warn(dev->net, "Unable to allocate struct smsc95xx_priv\n"); |
1047 | return -ENOMEM; | 1042 | return -ENOMEM; |
1048 | } | 1043 | } |
1049 | 1044 | ||
@@ -1066,8 +1061,7 @@ static void smsc95xx_unbind(struct usbnet *dev, struct usb_interface *intf) | |||
1066 | { | 1061 | { |
1067 | struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); | 1062 | struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); |
1068 | if (pdata) { | 1063 | if (pdata) { |
1069 | if (netif_msg_ifdown(dev)) | 1064 | netif_dbg(dev, ifdown, dev->net, "free pdata\n"); |
1070 | devdbg(dev, "free pdata"); | ||
1071 | kfree(pdata); | 1065 | kfree(pdata); |
1072 | pdata = NULL; | 1066 | pdata = NULL; |
1073 | dev->data[0] = 0; | 1067 | dev->data[0] = 0; |
@@ -1101,8 +1095,8 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb) | |||
1101 | align_count = (4 - ((size + NET_IP_ALIGN) % 4)) % 4; | 1095 | align_count = (4 - ((size + NET_IP_ALIGN) % 4)) % 4; |
1102 | 1096 | ||
1103 | if (unlikely(header & RX_STS_ES_)) { | 1097 | if (unlikely(header & RX_STS_ES_)) { |
1104 | if (netif_msg_rx_err(dev)) | 1098 | netif_dbg(dev, rx_err, dev->net, |
1105 | devdbg(dev, "Error header=0x%08x", header); | 1099 | "Error header=0x%08x\n", header); |
1106 | dev->net->stats.rx_errors++; | 1100 | dev->net->stats.rx_errors++; |
1107 | dev->net->stats.rx_dropped++; | 1101 | dev->net->stats.rx_dropped++; |
1108 | 1102 | ||
@@ -1119,9 +1113,8 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb) | |||
1119 | } else { | 1113 | } else { |
1120 | /* ETH_FRAME_LEN + 4(CRC) + 2(COE) + 4(Vlan) */ | 1114 | /* ETH_FRAME_LEN + 4(CRC) + 2(COE) + 4(Vlan) */ |
1121 | if (unlikely(size > (ETH_FRAME_LEN + 12))) { | 1115 | if (unlikely(size > (ETH_FRAME_LEN + 12))) { |
1122 | if (netif_msg_rx_err(dev)) | 1116 | netif_dbg(dev, rx_err, dev->net, |
1123 | devdbg(dev, "size err header=0x%08x", | 1117 | "size err header=0x%08x\n", header); |
1124 | header); | ||
1125 | return 0; | 1118 | return 0; |
1126 | } | 1119 | } |
1127 | 1120 | ||
@@ -1137,7 +1130,7 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb) | |||
1137 | 1130 | ||
1138 | ax_skb = skb_clone(skb, GFP_ATOMIC); | 1131 | ax_skb = skb_clone(skb, GFP_ATOMIC); |
1139 | if (unlikely(!ax_skb)) { | 1132 | if (unlikely(!ax_skb)) { |
1140 | devwarn(dev, "Error allocating skb"); | 1133 | netdev_warn(dev->net, "Error allocating skb\n"); |
1141 | return 0; | 1134 | return 0; |
1142 | } | 1135 | } |
1143 | 1136 | ||
@@ -1161,7 +1154,7 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb) | |||
1161 | } | 1154 | } |
1162 | 1155 | ||
1163 | if (unlikely(skb->len < 0)) { | 1156 | if (unlikely(skb->len < 0)) { |
1164 | devwarn(dev, "invalid rx length<0 %d", skb->len); | 1157 | netdev_warn(dev->net, "invalid rx length<0 %d\n", skb->len); |
1165 | return 0; | 1158 | return 0; |
1166 | } | 1159 | } |
1167 | 1160 | ||
@@ -1197,9 +1190,21 @@ static struct sk_buff *smsc95xx_tx_fixup(struct usbnet *dev, | |||
1197 | } | 1190 | } |
1198 | 1191 | ||
1199 | if (csum) { | 1192 | if (csum) { |
1200 | u32 csum_preamble = smsc95xx_calc_csum_preamble(skb); | 1193 | if (skb->len <= 45) { |
1201 | skb_push(skb, 4); | 1194 | /* workaround - hardware tx checksum does not work |
1202 | memcpy(skb->data, &csum_preamble, 4); | 1195 | * properly with extremely small packets */ |
1196 | long csstart = skb->csum_start - skb_headroom(skb); | ||
1197 | __wsum calc = csum_partial(skb->data + csstart, | ||
1198 | skb->len - csstart, 0); | ||
1199 | *((__sum16 *)(skb->data + csstart | ||
1200 | + skb->csum_offset)) = csum_fold(calc); | ||
1201 | |||
1202 | csum = false; | ||
1203 | } else { | ||
1204 | u32 csum_preamble = smsc95xx_calc_csum_preamble(skb); | ||
1205 | skb_push(skb, 4); | ||
1206 | memcpy(skb->data, &csum_preamble, 4); | ||
1207 | } | ||
1203 | } | 1208 | } |
1204 | 1209 | ||
1205 | skb_push(skb, 4); | 1210 | skb_push(skb, 4); |