1 /*************************************************************************** 2 * 3 * Copyright (C) 2007-2008 SMSC 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU General Public License 7 * as published by the Free Software Foundation; either version 2 8 * of the License, or (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 * 19 *****************************************************************************/ 20 21 #include <linux/module.h> 22 #include <linux/kmod.h> 23 #include <linux/init.h> 24 #include <linux/netdevice.h> 25 #include <linux/etherdevice.h> 26 #include <linux/ethtool.h> 27 #include <linux/mii.h> 28 #include <linux/usb.h> 29 #include <linux/bitrev.h> 30 #include <linux/crc16.h> 31 #include <linux/crc32.h> 32 #include <linux/usb/usbnet.h> 33 #include <linux/slab.h> 34 #include "smsc95xx.h" 35 36 #define SMSC_CHIPNAME "smsc95xx" 37 #define SMSC_DRIVER_VERSION "1.0.4" 38 #define HS_USB_PKT_SIZE (512) 39 #define FS_USB_PKT_SIZE (64) 40 #define DEFAULT_HS_BURST_CAP_SIZE (16 * 1024 + 5 * HS_USB_PKT_SIZE) 41 #define DEFAULT_FS_BURST_CAP_SIZE (6 * 1024 + 33 * FS_USB_PKT_SIZE) 42 #define DEFAULT_BULK_IN_DELAY (0x00002000) 43 #define MAX_SINGLE_PACKET_SIZE (2048) 44 #define LAN95XX_EEPROM_MAGIC (0x9500) 45 #define EEPROM_MAC_OFFSET (0x01) 46 #define DEFAULT_TX_CSUM_ENABLE (true) 47 #define DEFAULT_RX_CSUM_ENABLE (true) 48 #define SMSC95XX_INTERNAL_PHY_ID (1) 49 #define SMSC95XX_TX_OVERHEAD (8) 50 #define SMSC95XX_TX_OVERHEAD_CSUM (12) 51 #define SUPPORTED_WAKE (WAKE_PHY | WAKE_UCAST | WAKE_BCAST | \ 52 WAKE_MCAST | WAKE_ARP | WAKE_MAGIC) 53 54 #define FEATURE_8_WAKEUP_FILTERS (0x01) 55 #define FEATURE_PHY_NLP_CROSSOVER (0x02) 56 #define FEATURE_AUTOSUSPEND (0x04) 57 58 struct smsc95xx_priv { 59 u32 mac_cr; 60 u32 hash_hi; 61 u32 hash_lo; 62 u32 wolopts; 63 spinlock_t mac_cr_lock; 64 u8 features; 65 }; 66 67 static bool turbo_mode = true; 68 module_param(turbo_mode, bool, 0644); 69 MODULE_PARM_DESC(turbo_mode, "Enable multiple frames per Rx transaction"); 70 71 static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index, 72 u32 *data, int in_pm) 73 { 74 u32 buf; 75 int ret; 76 int (*fn)(struct usbnet *, u8, u8, u16, u16, void *, u16); 77 78 BUG_ON(!dev); 79 80 if (!in_pm) 81 fn = usbnet_read_cmd; 82 else 83 fn = usbnet_read_cmd_nopm; 84 85 ret = fn(dev, USB_VENDOR_REQUEST_READ_REGISTER, USB_DIR_IN 86 | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 87 0, index, &buf, 4); 88 if (unlikely(ret < 0)) 89 netdev_warn(dev->net, "Failed to read reg index 0x%08x: %d\n", 90 index, ret); 91 92 le32_to_cpus(&buf); 93 *data = buf; 94 95 return ret; 96 } 97 98 static int __must_check __smsc95xx_write_reg(struct usbnet *dev, u32 index, 99 u32 data, int in_pm) 100 { 101 u32 buf; 102 int ret; 103 int (*fn)(struct usbnet *, u8, u8, u16, u16, const void *, u16); 104 105 BUG_ON(!dev); 106 107 if (!in_pm) 108 fn = usbnet_write_cmd; 109 else 110 fn = usbnet_write_cmd_nopm; 111 112 buf = data; 113 cpu_to_le32s(&buf); 114 115 ret = fn(dev, USB_VENDOR_REQUEST_WRITE_REGISTER, USB_DIR_OUT 116 | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 117 0, index, &buf, 4); 118 if (unlikely(ret < 0)) 119 netdev_warn(dev->net, "Failed to write reg index 0x%08x: %d\n", 120 index, ret); 121 122 return ret; 123 } 124 125 static int __must_check smsc95xx_read_reg_nopm(struct usbnet *dev, u32 index, 126 u32 *data) 127 { 128 return __smsc95xx_read_reg(dev, index, data, 1); 129 } 130 131 static int __must_check smsc95xx_write_reg_nopm(struct usbnet *dev, u32 index, 132 u32 data) 133 { 134 return __smsc95xx_write_reg(dev, index, data, 1); 135 } 136 137 static int __must_check smsc95xx_read_reg(struct usbnet *dev, u32 index, 138 u32 *data) 139 { 140 return __smsc95xx_read_reg(dev, index, data, 0); 141 } 142 143 static int __must_check smsc95xx_write_reg(struct usbnet *dev, u32 index, 144 u32 data) 145 { 146 return __smsc95xx_write_reg(dev, index, data, 0); 147 } 148 149 /* Loop until the read is completed with timeout 150 * called with phy_mutex held */ 151 static int __must_check __smsc95xx_phy_wait_not_busy(struct usbnet *dev, 152 int in_pm) 153 { 154 unsigned long start_time = jiffies; 155 u32 val; 156 int ret; 157 158 do { 159 ret = __smsc95xx_read_reg(dev, MII_ADDR, &val, in_pm); 160 if (ret < 0) { 161 netdev_warn(dev->net, "Error reading MII_ACCESS\n"); 162 return ret; 163 } 164 165 if (!(val & MII_BUSY_)) 166 return 0; 167 } while (!time_after(jiffies, start_time + HZ)); 168 169 return -EIO; 170 } 171 172 static int __smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx, 173 int in_pm) 174 { 175 struct usbnet *dev = netdev_priv(netdev); 176 u32 val, addr; 177 int ret; 178 179 mutex_lock(&dev->phy_mutex); 180 181 /* confirm MII not busy */ 182 ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); 183 if (ret < 0) { 184 netdev_warn(dev->net, "MII is busy in smsc95xx_mdio_read\n"); 185 goto done; 186 } 187 188 /* set the address, index & direction (read from PHY) */ 189 phy_id &= dev->mii.phy_id_mask; 190 idx &= dev->mii.reg_num_mask; 191 addr = (phy_id << 11) | (idx << 6) | MII_READ_ | MII_BUSY_; 192 ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm); 193 if (ret < 0) { 194 netdev_warn(dev->net, "Error writing MII_ADDR\n"); 195 goto done; 196 } 197 198 ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); 199 if (ret < 0) { 200 netdev_warn(dev->net, "Timed out reading MII reg %02X\n", idx); 201 goto done; 202 } 203 204 ret = __smsc95xx_read_reg(dev, MII_DATA, &val, in_pm); 205 if (ret < 0) { 206 netdev_warn(dev->net, "Error reading MII_DATA\n"); 207 goto done; 208 } 209 210 ret = (u16)(val & 0xFFFF); 211 212 done: 213 mutex_unlock(&dev->phy_mutex); 214 return ret; 215 } 216 217 static void __smsc95xx_mdio_write(struct net_device *netdev, int phy_id, 218 int idx, int regval, int in_pm) 219 { 220 struct usbnet *dev = netdev_priv(netdev); 221 u32 val, addr; 222 int ret; 223 224 mutex_lock(&dev->phy_mutex); 225 226 /* confirm MII not busy */ 227 ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); 228 if (ret < 0) { 229 netdev_warn(dev->net, "MII is busy in smsc95xx_mdio_write\n"); 230 goto done; 231 } 232 233 val = regval; 234 ret = __smsc95xx_write_reg(dev, MII_DATA, val, in_pm); 235 if (ret < 0) { 236 netdev_warn(dev->net, "Error writing MII_DATA\n"); 237 goto done; 238 } 239 240 /* set the address, index & direction (write to PHY) */ 241 phy_id &= dev->mii.phy_id_mask; 242 idx &= dev->mii.reg_num_mask; 243 addr = (phy_id << 11) | (idx << 6) | MII_WRITE_ | MII_BUSY_; 244 ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm); 245 if (ret < 0) { 246 netdev_warn(dev->net, "Error writing MII_ADDR\n"); 247 goto done; 248 } 249 250 ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); 251 if (ret < 0) { 252 netdev_warn(dev->net, "Timed out writing MII reg %02X\n", idx); 253 goto done; 254 } 255 256 done: 257 mutex_unlock(&dev->phy_mutex); 258 } 259 260 static int smsc95xx_mdio_read_nopm(struct net_device *netdev, int phy_id, 261 int idx) 262 { 263 return __smsc95xx_mdio_read(netdev, phy_id, idx, 1); 264 } 265 266 static void smsc95xx_mdio_write_nopm(struct net_device *netdev, int phy_id, 267 int idx, int regval) 268 { 269 __smsc95xx_mdio_write(netdev, phy_id, idx, regval, 1); 270 } 271 272 static int smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx) 273 { 274 return __smsc95xx_mdio_read(netdev, phy_id, idx, 0); 275 } 276 277 static void smsc95xx_mdio_write(struct net_device *netdev, int phy_id, int idx, 278 int regval) 279 { 280 __smsc95xx_mdio_write(netdev, phy_id, idx, regval, 0); 281 } 282 283 static int __must_check smsc95xx_wait_eeprom(struct usbnet *dev) 284 { 285 unsigned long start_time = jiffies; 286 u32 val; 287 int ret; 288 289 do { 290 ret = smsc95xx_read_reg(dev, E2P_CMD, &val); 291 if (ret < 0) { 292 netdev_warn(dev->net, "Error reading E2P_CMD\n"); 293 return ret; 294 } 295 296 if (!(val & E2P_CMD_BUSY_) || (val & E2P_CMD_TIMEOUT_)) 297 break; 298 udelay(40); 299 } while (!time_after(jiffies, start_time + HZ)); 300 301 if (val & (E2P_CMD_TIMEOUT_ | E2P_CMD_BUSY_)) { 302 netdev_warn(dev->net, "EEPROM read operation timeout\n"); 303 return -EIO; 304 } 305 306 return 0; 307 } 308 309 static int __must_check smsc95xx_eeprom_confirm_not_busy(struct usbnet *dev) 310 { 311 unsigned long start_time = jiffies; 312 u32 val; 313 int ret; 314 315 do { 316 ret = smsc95xx_read_reg(dev, E2P_CMD, &val); 317 if (ret < 0) { 318 netdev_warn(dev->net, "Error reading E2P_CMD\n"); 319 return ret; 320 } 321 322 if (!(val & E2P_CMD_BUSY_)) 323 return 0; 324 325 udelay(40); 326 } while (!time_after(jiffies, start_time + HZ)); 327 328 netdev_warn(dev->net, "EEPROM is busy\n"); 329 return -EIO; 330 } 331 332 static int smsc95xx_read_eeprom(struct usbnet *dev, u32 offset, u32 length, 333 u8 *data) 334 { 335 u32 val; 336 int i, ret; 337 338 BUG_ON(!dev); 339 BUG_ON(!data); 340 341 ret = smsc95xx_eeprom_confirm_not_busy(dev); 342 if (ret) 343 return ret; 344 345 for (i = 0; i < length; i++) { 346 val = E2P_CMD_BUSY_ | E2P_CMD_READ_ | (offset & E2P_CMD_ADDR_); 347 ret = smsc95xx_write_reg(dev, E2P_CMD, val); 348 if (ret < 0) { 349 netdev_warn(dev->net, "Error writing E2P_CMD\n"); 350 return ret; 351 } 352 353 ret = smsc95xx_wait_eeprom(dev); 354 if (ret < 0) 355 return ret; 356 357 ret = smsc95xx_read_reg(dev, E2P_DATA, &val); 358 if (ret < 0) { 359 netdev_warn(dev->net, "Error reading E2P_DATA\n"); 360 return ret; 361 } 362 363 data[i] = val & 0xFF; 364 offset++; 365 } 366 367 return 0; 368 } 369 370 static int smsc95xx_write_eeprom(struct usbnet *dev, u32 offset, u32 length, 371 u8 *data) 372 { 373 u32 val; 374 int i, ret; 375 376 BUG_ON(!dev); 377 BUG_ON(!data); 378 379 ret = smsc95xx_eeprom_confirm_not_busy(dev); 380 if (ret) 381 return ret; 382 383 /* Issue write/erase enable command */ 384 val = E2P_CMD_BUSY_ | E2P_CMD_EWEN_; 385 ret = smsc95xx_write_reg(dev, E2P_CMD, val); 386 if (ret < 0) { 387 netdev_warn(dev->net, "Error writing E2P_DATA\n"); 388 return ret; 389 } 390 391 ret = smsc95xx_wait_eeprom(dev); 392 if (ret < 0) 393 return ret; 394 395 for (i = 0; i < length; i++) { 396 397 /* Fill data register */ 398 val = data[i]; 399 ret = smsc95xx_write_reg(dev, E2P_DATA, val); 400 if (ret < 0) { 401 netdev_warn(dev->net, "Error writing E2P_DATA\n"); 402 return ret; 403 } 404 405 /* Send "write" command */ 406 val = E2P_CMD_BUSY_ | E2P_CMD_WRITE_ | (offset & E2P_CMD_ADDR_); 407 ret = smsc95xx_write_reg(dev, E2P_CMD, val); 408 if (ret < 0) { 409 netdev_warn(dev->net, "Error writing E2P_CMD\n"); 410 return ret; 411 } 412 413 ret = smsc95xx_wait_eeprom(dev); 414 if (ret < 0) 415 return ret; 416 417 offset++; 418 } 419 420 return 0; 421 } 422 423 static int __must_check smsc95xx_write_reg_async(struct usbnet *dev, u16 index, 424 u32 data) 425 { 426 const u16 size = 4; 427 u32 buf; 428 int ret; 429 430 buf = data; 431 cpu_to_le32s(&buf); 432 433 ret = usbnet_write_cmd_async(dev, USB_VENDOR_REQUEST_WRITE_REGISTER, 434 USB_DIR_OUT | USB_TYPE_VENDOR | 435 USB_RECIP_DEVICE, 436 0, index, &buf, size); 437 if (ret < 0) 438 netdev_warn(dev->net, "Error write async cmd, sts=%d\n", 439 ret); 440 return ret; 441 } 442 443 /* returns hash bit number for given MAC address 444 * example: 445 * 01 00 5E 00 00 01 -> returns bit number 31 */ 446 static unsigned int smsc95xx_hash(char addr[ETH_ALEN]) 447 { 448 return (ether_crc(ETH_ALEN, addr) >> 26) & 0x3f; 449 } 450 451 static void smsc95xx_set_multicast(struct net_device *netdev) 452 { 453 struct usbnet *dev = netdev_priv(netdev); 454 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); 455 unsigned long flags; 456 int ret; 457 458 pdata->hash_hi = 0; 459 pdata->hash_lo = 0; 460 461 spin_lock_irqsave(&pdata->mac_cr_lock, flags); 462 463 if (dev->net->flags & IFF_PROMISC) { 464 netif_dbg(dev, drv, dev->net, "promiscuous mode enabled\n"); 465 pdata->mac_cr |= MAC_CR_PRMS_; 466 pdata->mac_cr &= ~(MAC_CR_MCPAS_ | MAC_CR_HPFILT_); 467 } else if (dev->net->flags & IFF_ALLMULTI) { 468 netif_dbg(dev, drv, dev->net, "receive all multicast enabled\n"); 469 pdata->mac_cr |= MAC_CR_MCPAS_; 470 pdata->mac_cr &= ~(MAC_CR_PRMS_ | MAC_CR_HPFILT_); 471 } else if (!netdev_mc_empty(dev->net)) { 472 struct netdev_hw_addr *ha; 473 474 pdata->mac_cr |= MAC_CR_HPFILT_; 475 pdata->mac_cr &= ~(MAC_CR_PRMS_ | MAC_CR_MCPAS_); 476 477 netdev_for_each_mc_addr(ha, netdev) { 478 u32 bitnum = smsc95xx_hash(ha->addr); 479 u32 mask = 0x01 << (bitnum & 0x1F); 480 if (bitnum & 0x20) 481 pdata->hash_hi |= mask; 482 else 483 pdata->hash_lo |= mask; 484 } 485 486 netif_dbg(dev, drv, dev->net, "HASHH=0x%08X, HASHL=0x%08X\n", 487 pdata->hash_hi, pdata->hash_lo); 488 } else { 489 netif_dbg(dev, drv, dev->net, "receive own packets only\n"); 490 pdata->mac_cr &= 491 ~(MAC_CR_PRMS_ | MAC_CR_MCPAS_ | MAC_CR_HPFILT_); 492 } 493 494 spin_unlock_irqrestore(&pdata->mac_cr_lock, flags); 495 496 /* Initiate async writes, as we can't wait for completion here */ 497 ret = smsc95xx_write_reg_async(dev, HASHH, pdata->hash_hi); 498 if (ret < 0) 499 netdev_warn(dev->net, "failed to initiate async write to HASHH\n"); 500 501 ret = smsc95xx_write_reg_async(dev, HASHL, pdata->hash_lo); 502 if (ret < 0) 503 netdev_warn(dev->net, "failed to initiate async write to HASHL\n"); 504 505 ret = smsc95xx_write_reg_async(dev, MAC_CR, pdata->mac_cr); 506 if (ret < 0) 507 netdev_warn(dev->net, "failed to initiate async write to MAC_CR\n"); 508 } 509 510 static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex, 511 u16 lcladv, u16 rmtadv) 512 { 513 u32 flow, afc_cfg = 0; 514 515 int ret = smsc95xx_read_reg(dev, AFC_CFG, &afc_cfg); 516 if (ret < 0) { 517 netdev_warn(dev->net, "Error reading AFC_CFG\n"); 518 return ret; 519 } 520 521 if (duplex == DUPLEX_FULL) { 522 u8 cap = mii_resolve_flowctrl_fdx(lcladv, rmtadv); 523 524 if (cap & FLOW_CTRL_RX) 525 flow = 0xFFFF0002; 526 else 527 flow = 0; 528 529 if (cap & FLOW_CTRL_TX) 530 afc_cfg |= 0xF; 531 else 532 afc_cfg &= ~0xF; 533 534 netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s\n", 535 cap & FLOW_CTRL_RX ? "enabled" : "disabled", 536 cap & FLOW_CTRL_TX ? "enabled" : "disabled"); 537 } else { 538 netif_dbg(dev, link, dev->net, "half duplex\n"); 539 flow = 0; 540 afc_cfg |= 0xF; 541 } 542 543 ret = smsc95xx_write_reg(dev, FLOW, flow); 544 if (ret < 0) { 545 netdev_warn(dev->net, "Error writing FLOW\n"); 546 return ret; 547 } 548 549 ret = smsc95xx_write_reg(dev, AFC_CFG, afc_cfg); 550 if (ret < 0) 551 netdev_warn(dev->net, "Error writing AFC_CFG\n"); 552 553 return ret; 554 } 555 556 static int smsc95xx_link_reset(struct usbnet *dev) 557 { 558 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); 559 struct mii_if_info *mii = &dev->mii; 560 struct ethtool_cmd ecmd = { .cmd = ETHTOOL_GSET }; 561 unsigned long flags; 562 u16 lcladv, rmtadv; 563 int ret; 564 565 /* clear interrupt status */ 566 ret = smsc95xx_mdio_read(dev->net, mii->phy_id, PHY_INT_SRC); 567 if (ret < 0) { 568 netdev_warn(dev->net, "Error reading PHY_INT_SRC\n"); 569 return ret; 570 } 571 572 ret = smsc95xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_); 573 if (ret < 0) { 574 netdev_warn(dev->net, "Error writing INT_STS\n"); 575 return ret; 576 } 577 578 mii_check_media(mii, 1, 1); 579 mii_ethtool_gset(&dev->mii, &ecmd); 580 lcladv = smsc95xx_mdio_read(dev->net, mii->phy_id, MII_ADVERTISE); 581 rmtadv = smsc95xx_mdio_read(dev->net, mii->phy_id, MII_LPA); 582 583 netif_dbg(dev, link, dev->net, 584 "speed: %u duplex: %d lcladv: %04x rmtadv: %04x\n", 585 ethtool_cmd_speed(&ecmd), ecmd.duplex, lcladv, rmtadv); 586 587 spin_lock_irqsave(&pdata->mac_cr_lock, flags); 588 if (ecmd.duplex != DUPLEX_FULL) { 589 pdata->mac_cr &= ~MAC_CR_FDPX_; 590 pdata->mac_cr |= MAC_CR_RCVOWN_; 591 } else { 592 pdata->mac_cr &= ~MAC_CR_RCVOWN_; 593 pdata->mac_cr |= MAC_CR_FDPX_; 594 } 595 spin_unlock_irqrestore(&pdata->mac_cr_lock, flags); 596 597 ret = smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr); 598 if (ret < 0) { 599 netdev_warn(dev->net, "Error writing MAC_CR\n"); 600 return ret; 601 } 602 603 ret = smsc95xx_phy_update_flowcontrol(dev, ecmd.duplex, lcladv, rmtadv); 604 if (ret < 0) 605 netdev_warn(dev->net, "Error updating PHY flow control\n"); 606 607 return ret; 608 } 609 610 static void smsc95xx_status(struct usbnet *dev, struct urb *urb) 611 { 612 u32 intdata; 613 614 if (urb->actual_length != 4) { 615 netdev_warn(dev->net, "unexpected urb length %d\n", 616 urb->actual_length); 617 return; 618 } 619 620 memcpy(&intdata, urb->transfer_buffer, 4); 621 le32_to_cpus(&intdata); 622 623 netif_dbg(dev, link, dev->net, "intdata: 0x%08X\n", intdata); 624 625 if (intdata & INT_ENP_PHY_INT_) 626 usbnet_defer_kevent(dev, EVENT_LINK_RESET); 627 else 628 netdev_warn(dev->net, "unexpected interrupt, intdata=0x%08X\n", 629 intdata); 630 } 631 632 /* Enable or disable Tx & Rx checksum offload engines */ 633 static int smsc95xx_set_features(struct net_device *netdev, 634 netdev_features_t features) 635 { 636 struct usbnet *dev = netdev_priv(netdev); 637 u32 read_buf; 638 int ret; 639 640 ret = smsc95xx_read_reg(dev, COE_CR, &read_buf); 641 if (ret < 0) { 642 netdev_warn(dev->net, "Failed to read COE_CR: %d\n", ret); 643 return ret; 644 } 645 646 if (features & NETIF_F_HW_CSUM) 647 read_buf |= Tx_COE_EN_; 648 else 649 read_buf &= ~Tx_COE_EN_; 650 651 if (features & NETIF_F_RXCSUM) 652 read_buf |= Rx_COE_EN_; 653 else 654 read_buf &= ~Rx_COE_EN_; 655 656 ret = smsc95xx_write_reg(dev, COE_CR, read_buf); 657 if (ret < 0) { 658 netdev_warn(dev->net, "Failed to write COE_CR: %d\n", ret); 659 return ret; 660 } 661 662 netif_dbg(dev, hw, dev->net, "COE_CR = 0x%08x\n", read_buf); 663 return 0; 664 } 665 666 static int smsc95xx_ethtool_get_eeprom_len(struct net_device *net) 667 { 668 return MAX_EEPROM_SIZE; 669 } 670 671 static int smsc95xx_ethtool_get_eeprom(struct net_device *netdev, 672 struct ethtool_eeprom *ee, u8 *data) 673 { 674 struct usbnet *dev = netdev_priv(netdev); 675 676 ee->magic = LAN95XX_EEPROM_MAGIC; 677 678 return smsc95xx_read_eeprom(dev, ee->offset, ee->len, data); 679 } 680 681 static int smsc95xx_ethtool_set_eeprom(struct net_device *netdev, 682 struct ethtool_eeprom *ee, u8 *data) 683 { 684 struct usbnet *dev = netdev_priv(netdev); 685 686 if (ee->magic != LAN95XX_EEPROM_MAGIC) { 687 netdev_warn(dev->net, "EEPROM: magic value mismatch, magic = 0x%x\n", 688 ee->magic); 689 return -EINVAL; 690 } 691 692 return smsc95xx_write_eeprom(dev, ee->offset, ee->len, data); 693 } 694 695 static int smsc95xx_ethtool_getregslen(struct net_device *netdev) 696 { 697 /* all smsc95xx registers */ 698 return COE_CR - ID_REV + sizeof(u32); 699 } 700 701 static void 702 smsc95xx_ethtool_getregs(struct net_device *netdev, struct ethtool_regs *regs, 703 void *buf) 704 { 705 struct usbnet *dev = netdev_priv(netdev); 706 unsigned int i, j; 707 int retval; 708 u32 *data = buf; 709 710 retval = smsc95xx_read_reg(dev, ID_REV, ®s->version); 711 if (retval < 0) { 712 netdev_warn(netdev, "REGS: cannot read ID_REV\n"); 713 return; 714 } 715 716 for (i = ID_REV, j = 0; i <= COE_CR; i += (sizeof(u32)), j++) { 717 retval = smsc95xx_read_reg(dev, i, &data[j]); 718 if (retval < 0) { 719 netdev_warn(netdev, "REGS: cannot read reg[%x]\n", i); 720 return; 721 } 722 } 723 } 724 725 static void smsc95xx_ethtool_get_wol(struct net_device *net, 726 struct ethtool_wolinfo *wolinfo) 727 { 728 struct usbnet *dev = netdev_priv(net); 729 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); 730 731 wolinfo->supported = SUPPORTED_WAKE; 732 wolinfo->wolopts = pdata->wolopts; 733 } 734 735 static int smsc95xx_ethtool_set_wol(struct net_device *net, 736 struct ethtool_wolinfo *wolinfo) 737 { 738 struct usbnet *dev = netdev_priv(net); 739 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); 740 int ret; 741 742 pdata->wolopts = wolinfo->wolopts & SUPPORTED_WAKE; 743 744 ret = device_set_wakeup_enable(&dev->udev->dev, pdata->wolopts); 745 if (ret < 0) 746 netdev_warn(dev->net, "device_set_wakeup_enable error %d\n", ret); 747 748 return ret; 749 } 750 751 static const struct ethtool_ops smsc95xx_ethtool_ops = { 752 .get_link = usbnet_get_link, 753 .nway_reset = usbnet_nway_reset, 754 .get_drvinfo = usbnet_get_drvinfo, 755 .get_msglevel = usbnet_get_msglevel, 756 .set_msglevel = usbnet_set_msglevel, 757 .get_settings = usbnet_get_settings, 758 .set_settings = usbnet_set_settings, 759 .get_eeprom_len = smsc95xx_ethtool_get_eeprom_len, 760 .get_eeprom = smsc95xx_ethtool_get_eeprom, 761 .set_eeprom = smsc95xx_ethtool_set_eeprom, 762 .get_regs_len = smsc95xx_ethtool_getregslen, 763 .get_regs = smsc95xx_ethtool_getregs, 764 .get_wol = smsc95xx_ethtool_get_wol, 765 .set_wol = smsc95xx_ethtool_set_wol, 766 }; 767 768 static int smsc95xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd) 769 { 770 struct usbnet *dev = netdev_priv(netdev); 771 772 if (!netif_running(netdev)) 773 return -EINVAL; 774 775 return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL); 776 } 777 778 static void smsc95xx_init_mac_address(struct usbnet *dev) 779 { 780 /* try reading mac address from EEPROM */ 781 if (smsc95xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN, 782 dev->net->dev_addr) == 0) { 783 if (is_valid_ether_addr(dev->net->dev_addr)) { 784 /* eeprom values are valid so use them */ 785 netif_dbg(dev, ifup, dev->net, "MAC address read from EEPROM\n"); 786 return; 787 } 788 } 789 790 /* no eeprom, or eeprom values are invalid. generate random MAC */ 791 eth_hw_addr_random(dev->net); 792 netif_dbg(dev, ifup, dev->net, "MAC address set to eth_random_addr\n"); 793 } 794 795 static int smsc95xx_set_mac_address(struct usbnet *dev) 796 { 797 u32 addr_lo = dev->net->dev_addr[0] | dev->net->dev_addr[1] << 8 | 798 dev->net->dev_addr[2] << 16 | dev->net->dev_addr[3] << 24; 799 u32 addr_hi = dev->net->dev_addr[4] | dev->net->dev_addr[5] << 8; 800 int ret; 801 802 ret = smsc95xx_write_reg(dev, ADDRL, addr_lo); 803 if (ret < 0) { 804 netdev_warn(dev->net, "Failed to write ADDRL: %d\n", ret); 805 return ret; 806 } 807 808 ret = smsc95xx_write_reg(dev, ADDRH, addr_hi); 809 if (ret < 0) 810 netdev_warn(dev->net, "Failed to write ADDRH: %d\n", ret); 811 812 return ret; 813 } 814 815 /* starts the TX path */ 816 static int smsc95xx_start_tx_path(struct usbnet *dev) 817 { 818 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); 819 unsigned long flags; 820 int ret; 821 822 /* Enable Tx at MAC */ 823 spin_lock_irqsave(&pdata->mac_cr_lock, flags); 824 pdata->mac_cr |= MAC_CR_TXEN_; 825 spin_unlock_irqrestore(&pdata->mac_cr_lock, flags); 826 827 ret = smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr); 828 if (ret < 0) { 829 netdev_warn(dev->net, "Failed to write MAC_CR: %d\n", ret); 830 return ret; 831 } 832 833 /* Enable Tx at SCSRs */ 834 ret = smsc95xx_write_reg(dev, TX_CFG, TX_CFG_ON_); 835 if (ret < 0) 836 netdev_warn(dev->net, "Failed to write TX_CFG: %d\n", ret); 837 838 return ret; 839 } 840 841 /* Starts the Receive path */ 842 static int smsc95xx_start_rx_path(struct usbnet *dev, int in_pm) 843 { 844 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); 845 unsigned long flags; 846 int ret; 847 848 spin_lock_irqsave(&pdata->mac_cr_lock, flags); 849 pdata->mac_cr |= MAC_CR_RXEN_; 850 spin_unlock_irqrestore(&pdata->mac_cr_lock, flags); 851 852 ret = __smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr, in_pm); 853 if (ret < 0) 854 netdev_warn(dev->net, "Failed to write MAC_CR: %d\n", ret); 855 856 return ret; 857 } 858 859 static int smsc95xx_phy_initialize(struct usbnet *dev) 860 { 861 int bmcr, ret, timeout = 0; 862 863 /* Initialize MII structure */ 864 dev->mii.dev = dev->net; 865 dev->mii.mdio_read = smsc95xx_mdio_read; 866 dev->mii.mdio_write = smsc95xx_mdio_write; 867 dev->mii.phy_id_mask = 0x1f; 868 dev->mii.reg_num_mask = 0x1f; 869 dev->mii.phy_id = SMSC95XX_INTERNAL_PHY_ID; 870 871 /* reset phy and wait for reset to complete */ 872 smsc95xx_mdio_write(dev->net, dev->mii.phy_id, MII_BMCR, BMCR_RESET); 873 874 do { 875 msleep(10); 876 bmcr = smsc95xx_mdio_read(dev->net, dev->mii.phy_id, MII_BMCR); 877 timeout++; 878 } while ((bmcr & BMCR_RESET) && (timeout < 100)); 879 880 if (timeout >= 100) { 881 netdev_warn(dev->net, "timeout on PHY Reset"); 882 return -EIO; 883 } 884 885 smsc95xx_mdio_write(dev->net, dev->mii.phy_id, MII_ADVERTISE, 886 ADVERTISE_ALL | ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP | 887 ADVERTISE_PAUSE_ASYM); 888 889 /* read to clear */ 890 ret = smsc95xx_mdio_read(dev->net, dev->mii.phy_id, PHY_INT_SRC); 891 if (ret < 0) { 892 netdev_warn(dev->net, "Failed to read PHY_INT_SRC during init\n"); 893 return ret; 894 } 895 896 smsc95xx_mdio_write(dev->net, dev->mii.phy_id, PHY_INT_MASK, 897 PHY_INT_MASK_DEFAULT_); 898 mii_nway_restart(&dev->mii); 899 900 netif_dbg(dev, ifup, dev->net, "phy initialised successfully\n"); 901 return 0; 902 } 903 904 static int smsc95xx_reset(struct usbnet *dev) 905 { 906 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); 907 u32 read_buf, write_buf, burst_cap; 908 int ret = 0, timeout; 909 910 netif_dbg(dev, ifup, dev->net, "entering smsc95xx_reset\n"); 911 912 ret = smsc95xx_write_reg(dev, HW_CFG, HW_CFG_LRST_); 913 if (ret < 0) { 914 netdev_warn(dev->net, "Failed to write HW_CFG_LRST_ bit in HW_CFG\n"); 915 return ret; 916 } 917 918 timeout = 0; 919 do { 920 msleep(10); 921 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); 922 if (ret < 0) { 923 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); 924 return ret; 925 } 926 timeout++; 927 } while ((read_buf & HW_CFG_LRST_) && (timeout < 100)); 928 929 if (timeout >= 100) { 930 netdev_warn(dev->net, "timeout waiting for completion of Lite Reset\n"); 931 return ret; 932 } 933 934 ret = smsc95xx_write_reg(dev, PM_CTRL, PM_CTL_PHY_RST_); 935 if (ret < 0) { 936 netdev_warn(dev->net, "Failed to write PM_CTRL: %d\n", ret); 937 return ret; 938 } 939 940 timeout = 0; 941 do { 942 msleep(10); 943 ret = smsc95xx_read_reg(dev, PM_CTRL, &read_buf); 944 if (ret < 0) { 945 netdev_warn(dev->net, "Failed to read PM_CTRL: %d\n", ret); 946 return ret; 947 } 948 timeout++; 949 } while ((read_buf & PM_CTL_PHY_RST_) && (timeout < 100)); 950 951 if (timeout >= 100) { 952 netdev_warn(dev->net, "timeout waiting for PHY Reset\n"); 953 return ret; 954 } 955 956 ret = smsc95xx_set_mac_address(dev); 957 if (ret < 0) 958 return ret; 959 960 netif_dbg(dev, ifup, dev->net, "MAC Address: %pM\n", 961 dev->net->dev_addr); 962 963 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); 964 if (ret < 0) { 965 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); 966 return ret; 967 } 968 969 netif_dbg(dev, ifup, dev->net, "Read Value from HW_CFG : 0x%08x\n", 970 read_buf); 971 972 read_buf |= HW_CFG_BIR_; 973 974 ret = smsc95xx_write_reg(dev, HW_CFG, read_buf); 975 if (ret < 0) { 976 netdev_warn(dev->net, "Failed to write HW_CFG_BIR_ bit in HW_CFG\n"); 977 return ret; 978 } 979 980 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); 981 if (ret < 0) { 982 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); 983 return ret; 984 } 985 986 netif_dbg(dev, ifup, dev->net, 987 "Read Value from HW_CFG after writing HW_CFG_BIR_: 0x%08x\n", 988 read_buf); 989 990 if (!turbo_mode) { 991 burst_cap = 0; 992 dev->rx_urb_size = MAX_SINGLE_PACKET_SIZE; 993 } else if (dev->udev->speed == USB_SPEED_HIGH) { 994 burst_cap = DEFAULT_HS_BURST_CAP_SIZE / HS_USB_PKT_SIZE; 995 dev->rx_urb_size = DEFAULT_HS_BURST_CAP_SIZE; 996 } else { 997 burst_cap = DEFAULT_FS_BURST_CAP_SIZE / FS_USB_PKT_SIZE; 998 dev->rx_urb_size = DEFAULT_FS_BURST_CAP_SIZE; 999 } 1000 1001 netif_dbg(dev, ifup, dev->net, "rx_urb_size=%ld\n", 1002 (ulong)dev->rx_urb_size); 1003 1004 ret = smsc95xx_write_reg(dev, BURST_CAP, burst_cap); 1005 if (ret < 0) { 1006 netdev_warn(dev->net, "Failed to write BURST_CAP: %d\n", ret); 1007 return ret; 1008 } 1009 1010 ret = smsc95xx_read_reg(dev, BURST_CAP, &read_buf); 1011 if (ret < 0) { 1012 netdev_warn(dev->net, "Failed to read BURST_CAP: %d\n", ret); 1013 return ret; 1014 } 1015 1016 netif_dbg(dev, ifup, dev->net, 1017 "Read Value from BURST_CAP after writing: 0x%08x\n", 1018 read_buf); 1019 1020 ret = smsc95xx_write_reg(dev, BULK_IN_DLY, DEFAULT_BULK_IN_DELAY); 1021 if (ret < 0) { 1022 netdev_warn(dev->net, "Failed to write BULK_IN_DLY: %d\n", ret); 1023 return ret; 1024 } 1025 1026 ret = smsc95xx_read_reg(dev, BULK_IN_DLY, &read_buf); 1027 if (ret < 0) { 1028 netdev_warn(dev->net, "Failed to read BULK_IN_DLY: %d\n", ret); 1029 return ret; 1030 } 1031 1032 netif_dbg(dev, ifup, dev->net, 1033 "Read Value from BULK_IN_DLY after writing: 0x%08x\n", 1034 read_buf); 1035 1036 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); 1037 if (ret < 0) { 1038 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); 1039 return ret; 1040 } 1041 1042 netif_dbg(dev, ifup, dev->net, "Read Value from HW_CFG: 0x%08x\n", 1043 read_buf); 1044 1045 if (turbo_mode) 1046 read_buf |= (HW_CFG_MEF_ | HW_CFG_BCE_); 1047 1048 read_buf &= ~HW_CFG_RXDOFF_; 1049 1050 /* set Rx data offset=2, Make IP header aligns on word boundary. */ 1051 read_buf |= NET_IP_ALIGN << 9; 1052 1053 ret = smsc95xx_write_reg(dev, HW_CFG, read_buf); 1054 if (ret < 0) { 1055 netdev_warn(dev->net, "Failed to write HW_CFG: %d\n", ret); 1056 return ret; 1057 } 1058 1059 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); 1060 if (ret < 0) { 1061 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); 1062 return ret; 1063 } 1064 1065 netif_dbg(dev, ifup, dev->net, 1066 "Read Value from HW_CFG after writing: 0x%08x\n", read_buf); 1067 1068 ret = smsc95xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_); 1069 if (ret < 0) { 1070 netdev_warn(dev->net, "Failed to write INT_STS: %d\n", ret); 1071 return ret; 1072 } 1073 1074 ret = smsc95xx_read_reg(dev, ID_REV, &read_buf); 1075 if (ret < 0) { 1076 netdev_warn(dev->net, "Failed to read ID_REV: %d\n", ret); 1077 return ret; 1078 } 1079 netif_dbg(dev, ifup, dev->net, "ID_REV = 0x%08x\n", read_buf); 1080 1081 /* Configure GPIO pins as LED outputs */ 1082 write_buf = LED_GPIO_CFG_SPD_LED | LED_GPIO_CFG_LNK_LED | 1083 LED_GPIO_CFG_FDX_LED; 1084 ret = smsc95xx_write_reg(dev, LED_GPIO_CFG, write_buf); 1085 if (ret < 0) { 1086 netdev_warn(dev->net, "Failed to write LED_GPIO_CFG: %d\n", ret); 1087 return ret; 1088 } 1089 1090 /* Init Tx */ 1091 ret = smsc95xx_write_reg(dev, FLOW, 0); 1092 if (ret < 0) { 1093 netdev_warn(dev->net, "Failed to write FLOW: %d\n", ret); 1094 return ret; 1095 } 1096 1097 ret = smsc95xx_write_reg(dev, AFC_CFG, AFC_CFG_DEFAULT); 1098 if (ret < 0) { 1099 netdev_warn(dev->net, "Failed to write AFC_CFG: %d\n", ret); 1100 return ret; 1101 } 1102 1103 /* Don't need mac_cr_lock during initialisation */ 1104 ret = smsc95xx_read_reg(dev, MAC_CR, &pdata->mac_cr); 1105 if (ret < 0) { 1106 netdev_warn(dev->net, "Failed to read MAC_CR: %d\n", ret); 1107 return ret; 1108 } 1109 1110 /* Init Rx */ 1111 /* Set Vlan */ 1112 ret = smsc95xx_write_reg(dev, VLAN1, (u32)ETH_P_8021Q); 1113 if (ret < 0) { 1114 netdev_warn(dev->net, "Failed to write VLAN1: %d\n", ret); 1115 return ret; 1116 } 1117 1118 /* Enable or disable checksum offload engines */ 1119 ret = smsc95xx_set_features(dev->net, dev->net->features); 1120 if (ret < 0) { 1121 netdev_warn(dev->net, "Failed to set checksum offload features\n"); 1122 return ret; 1123 } 1124 1125 smsc95xx_set_multicast(dev->net); 1126 1127 ret = smsc95xx_phy_initialize(dev); 1128 if (ret < 0) { 1129 netdev_warn(dev->net, "Failed to init PHY\n"); 1130 return ret; 1131 } 1132 1133 ret = smsc95xx_read_reg(dev, INT_EP_CTL, &read_buf); 1134 if (ret < 0) { 1135 netdev_warn(dev->net, "Failed to read INT_EP_CTL: %d\n", ret); 1136 return ret; 1137 } 1138 1139 /* enable PHY interrupts */ 1140 read_buf |= INT_EP_CTL_PHY_INT_; 1141 1142 ret = smsc95xx_write_reg(dev, INT_EP_CTL, read_buf); 1143 if (ret < 0) { 1144 netdev_warn(dev->net, "Failed to write INT_EP_CTL: %d\n", ret); 1145 return ret; 1146 } 1147 1148 ret = smsc95xx_start_tx_path(dev); 1149 if (ret < 0) { 1150 netdev_warn(dev->net, "Failed to start TX path\n"); 1151 return ret; 1152 } 1153 1154 ret = smsc95xx_start_rx_path(dev, 0); 1155 if (ret < 0) { 1156 netdev_warn(dev->net, "Failed to start RX path\n"); 1157 return ret; 1158 } 1159 1160 netif_dbg(dev, ifup, dev->net, "smsc95xx_reset, return 0\n"); 1161 return 0; 1162 } 1163 1164 static const struct net_device_ops smsc95xx_netdev_ops = { 1165 .ndo_open = usbnet_open, 1166 .ndo_stop = usbnet_stop, 1167 .ndo_start_xmit = usbnet_start_xmit, 1168 .ndo_tx_timeout = usbnet_tx_timeout, 1169 .ndo_change_mtu = usbnet_change_mtu, 1170 .ndo_set_mac_address = eth_mac_addr, 1171 .ndo_validate_addr = eth_validate_addr, 1172 .ndo_do_ioctl = smsc95xx_ioctl, 1173 .ndo_set_rx_mode = smsc95xx_set_multicast, 1174 .ndo_set_features = smsc95xx_set_features, 1175 }; 1176 1177 static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf) 1178 { 1179 struct smsc95xx_priv *pdata = NULL; 1180 u32 val; 1181 int ret; 1182 1183 printk(KERN_INFO SMSC_CHIPNAME " v" SMSC_DRIVER_VERSION "\n"); 1184 1185 ret = usbnet_get_endpoints(dev, intf); 1186 if (ret < 0) { 1187 netdev_warn(dev->net, "usbnet_get_endpoints failed: %d\n", ret); 1188 return ret; 1189 } 1190 1191 dev->data[0] = (unsigned long)kzalloc(sizeof(struct smsc95xx_priv), 1192 GFP_KERNEL); 1193 1194 pdata = (struct smsc95xx_priv *)(dev->data[0]); 1195 if (!pdata) { 1196 netdev_warn(dev->net, "Unable to allocate struct smsc95xx_priv\n"); 1197 return -ENOMEM; 1198 } 1199 1200 spin_lock_init(&pdata->mac_cr_lock); 1201 1202 if (DEFAULT_TX_CSUM_ENABLE) 1203 dev->net->features |= NETIF_F_HW_CSUM; 1204 if (DEFAULT_RX_CSUM_ENABLE) 1205 dev->net->features |= NETIF_F_RXCSUM; 1206 1207 dev->net->hw_features = NETIF_F_HW_CSUM | NETIF_F_RXCSUM; 1208 1209 smsc95xx_init_mac_address(dev); 1210 1211 /* Init all registers */ 1212 ret = smsc95xx_reset(dev); 1213 1214 /* detect device revision as different features may be available */ 1215 ret = smsc95xx_read_reg(dev, ID_REV, &val); 1216 if (ret < 0) { 1217 netdev_warn(dev->net, "Failed to read ID_REV: %d\n", ret); 1218 return ret; 1219 } 1220 val >>= 16; 1221 1222 if ((val == ID_REV_CHIP_ID_9500A_) || (val == ID_REV_CHIP_ID_9530_) || 1223 (val == ID_REV_CHIP_ID_89530_) || (val == ID_REV_CHIP_ID_9730_)) 1224 pdata->features = (FEATURE_8_WAKEUP_FILTERS | 1225 FEATURE_PHY_NLP_CROSSOVER | 1226 FEATURE_AUTOSUSPEND); 1227 else if (val == ID_REV_CHIP_ID_9512_) 1228 pdata->features = FEATURE_8_WAKEUP_FILTERS; 1229 1230 dev->net->netdev_ops = &smsc95xx_netdev_ops; 1231 dev->net->ethtool_ops = &smsc95xx_ethtool_ops; 1232 dev->net->flags |= IFF_MULTICAST; 1233 dev->net->hard_header_len += SMSC95XX_TX_OVERHEAD_CSUM; 1234 dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len; 1235 return 0; 1236 } 1237 1238 static void smsc95xx_unbind(struct usbnet *dev, struct usb_interface *intf) 1239 { 1240 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); 1241 if (pdata) { 1242 netif_dbg(dev, ifdown, dev->net, "free pdata\n"); 1243 kfree(pdata); 1244 pdata = NULL; 1245 dev->data[0] = 0; 1246 } 1247 } 1248 1249 static u32 smsc_crc(const u8 *buffer, size_t len, int filter) 1250 { 1251 u32 crc = bitrev16(crc16(0xFFFF, buffer, len)); 1252 return crc << ((filter % 2) * 16); 1253 } 1254 1255 static int smsc95xx_enable_phy_wakeup_interrupts(struct usbnet *dev, u16 mask) 1256 { 1257 struct mii_if_info *mii = &dev->mii; 1258 int ret; 1259 1260 netdev_dbg(dev->net, "enabling PHY wakeup interrupts\n"); 1261 1262 /* read to clear */ 1263 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_INT_SRC); 1264 if (ret < 0) { 1265 netdev_warn(dev->net, "Error reading PHY_INT_SRC\n"); 1266 return ret; 1267 } 1268 1269 /* enable interrupt source */ 1270 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_INT_MASK); 1271 if (ret < 0) { 1272 netdev_warn(dev->net, "Error reading PHY_INT_MASK\n"); 1273 return ret; 1274 } 1275 1276 ret |= mask; 1277 1278 smsc95xx_mdio_write_nopm(dev->net, mii->phy_id, PHY_INT_MASK, ret); 1279 1280 return 0; 1281 } 1282 1283 static int smsc95xx_link_ok_nopm(struct usbnet *dev) 1284 { 1285 struct mii_if_info *mii = &dev->mii; 1286 int ret; 1287 1288 /* first, a dummy read, needed to latch some MII phys */ 1289 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, MII_BMSR); 1290 if (ret < 0) { 1291 netdev_warn(dev->net, "Error reading MII_BMSR\n"); 1292 return ret; 1293 } 1294 1295 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, MII_BMSR); 1296 if (ret < 0) { 1297 netdev_warn(dev->net, "Error reading MII_BMSR\n"); 1298 return ret; 1299 } 1300 1301 return !!(ret & BMSR_LSTATUS); 1302 } 1303 1304 static int smsc95xx_enter_suspend0(struct usbnet *dev) 1305 { 1306 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); 1307 u32 val; 1308 int ret; 1309 1310 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); 1311 if (ret < 0) { 1312 netdev_warn(dev->net, "Error reading PM_CTRL\n"); 1313 return ret; 1314 } 1315 1316 val &= (~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_)); 1317 val |= PM_CTL_SUS_MODE_0; 1318 1319 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); 1320 if (ret < 0) { 1321 netdev_warn(dev->net, "Error writing PM_CTRL\n"); 1322 return ret; 1323 } 1324 1325 /* clear wol status */ 1326 val &= ~PM_CTL_WUPS_; 1327 val |= PM_CTL_WUPS_WOL_; 1328 1329 /* enable energy detection */ 1330 if (pdata->wolopts & WAKE_PHY) 1331 val |= PM_CTL_WUPS_ED_; 1332 1333 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); 1334 if (ret < 0) { 1335 netdev_warn(dev->net, "Error writing PM_CTRL\n"); 1336 return ret; 1337 } 1338 1339 /* read back PM_CTRL */ 1340 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); 1341 if (ret < 0) 1342 netdev_warn(dev->net, "Error reading PM_CTRL\n"); 1343 1344 return ret; 1345 } 1346 1347 static int smsc95xx_enter_suspend1(struct usbnet *dev) 1348 { 1349 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); 1350 struct mii_if_info *mii = &dev->mii; 1351 u32 val; 1352 int ret; 1353 1354 /* reconfigure link pulse detection timing for 1355 * compatibility with non-standard link partners 1356 */ 1357 if (pdata->features & FEATURE_PHY_NLP_CROSSOVER) 1358 smsc95xx_mdio_write_nopm(dev->net, mii->phy_id, PHY_EDPD_CONFIG, 1359 PHY_EDPD_CONFIG_DEFAULT); 1360 1361 /* enable energy detect power-down mode */ 1362 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_MODE_CTRL_STS); 1363 if (ret < 0) { 1364 netdev_warn(dev->net, "Error reading PHY_MODE_CTRL_STS\n"); 1365 return ret; 1366 } 1367 1368 ret |= MODE_CTRL_STS_EDPWRDOWN_; 1369 1370 smsc95xx_mdio_write_nopm(dev->net, mii->phy_id, PHY_MODE_CTRL_STS, ret); 1371 1372 /* enter SUSPEND1 mode */ 1373 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); 1374 if (ret < 0) { 1375 netdev_warn(dev->net, "Error reading PM_CTRL\n"); 1376 return ret; 1377 } 1378 1379 val &= ~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_); 1380 val |= PM_CTL_SUS_MODE_1; 1381 1382 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); 1383 if (ret < 0) { 1384 netdev_warn(dev->net, "Error writing PM_CTRL\n"); 1385 return ret; 1386 } 1387 1388 /* clear wol status, enable energy detection */ 1389 val &= ~PM_CTL_WUPS_; 1390 val |= (PM_CTL_WUPS_ED_ | PM_CTL_ED_EN_); 1391 1392 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); 1393 if (ret < 0) 1394 netdev_warn(dev->net, "Error writing PM_CTRL\n"); 1395 1396 return ret; 1397 } 1398 1399 static int smsc95xx_enter_suspend2(struct usbnet *dev) 1400 { 1401 u32 val; 1402 int ret; 1403 1404 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); 1405 if (ret < 0) { 1406 netdev_warn(dev->net, "Error reading PM_CTRL\n"); 1407 return ret; 1408 } 1409 1410 val &= ~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_); 1411 val |= PM_CTL_SUS_MODE_2; 1412 1413 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); 1414 if (ret < 0) 1415 netdev_warn(dev->net, "Error writing PM_CTRL\n"); 1416 1417 return ret; 1418 } 1419 1420 static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message) 1421 { 1422 struct usbnet *dev = usb_get_intfdata(intf); 1423 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); 1424 u32 val, link_up; 1425 int ret; 1426 1427 ret = usbnet_suspend(intf, message); 1428 if (ret < 0) { 1429 netdev_warn(dev->net, "usbnet_suspend error\n"); 1430 return ret; 1431 } 1432 1433 /* determine if link is up using only _nopm functions */ 1434 link_up = smsc95xx_link_ok_nopm(dev); 1435 1436 /* if no wol options set, or if link is down and we're not waking on 1437 * PHY activity, enter lowest power SUSPEND2 mode 1438 */ 1439 if (!(pdata->wolopts & SUPPORTED_WAKE) || 1440 !(link_up || (pdata->wolopts & WAKE_PHY))) { 1441 netdev_info(dev->net, "entering SUSPEND2 mode\n"); 1442 1443 /* disable energy detect (link up) & wake up events */ 1444 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); 1445 if (ret < 0) { 1446 netdev_warn(dev->net, "Error reading WUCSR\n"); 1447 goto done; 1448 } 1449 1450 val &= ~(WUCSR_MPEN_ | WUCSR_WAKE_EN_); 1451 1452 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); 1453 if (ret < 0) { 1454 netdev_warn(dev->net, "Error writing WUCSR\n"); 1455 goto done; 1456 } 1457 1458 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); 1459 if (ret < 0) { 1460 netdev_warn(dev->net, "Error reading PM_CTRL\n"); 1461 goto done; 1462 } 1463 1464 val &= ~(PM_CTL_ED_EN_ | PM_CTL_WOL_EN_); 1465 1466 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); 1467 if (ret < 0) { 1468 netdev_warn(dev->net, "Error writing PM_CTRL\n"); 1469 goto done; 1470 } 1471 1472 ret = smsc95xx_enter_suspend2(dev); 1473 goto done; 1474 } 1475 1476 if (pdata->wolopts & WAKE_PHY) { 1477 ret = smsc95xx_enable_phy_wakeup_interrupts(dev, 1478 (PHY_INT_MASK_ANEG_COMP_ | PHY_INT_MASK_LINK_DOWN_)); 1479 if (ret < 0) { 1480 netdev_warn(dev->net, "error enabling PHY wakeup ints\n"); 1481 goto done; 1482 } 1483 1484 /* if link is down then configure EDPD and enter SUSPEND1, 1485 * otherwise enter SUSPEND0 below 1486 */ 1487 if (!link_up) { 1488 netdev_info(dev->net, "entering SUSPEND1 mode\n"); 1489 ret = smsc95xx_enter_suspend1(dev); 1490 goto done; 1491 } 1492 } 1493 1494 if (pdata->wolopts & (WAKE_BCAST | WAKE_MCAST | WAKE_ARP | WAKE_UCAST)) { 1495 u32 *filter_mask = kzalloc(sizeof(u32) * 32, GFP_KERNEL); 1496 u32 command[2]; 1497 u32 offset[2]; 1498 u32 crc[4]; 1499 int wuff_filter_count = 1500 (pdata->features & FEATURE_8_WAKEUP_FILTERS) ? 1501 LAN9500A_WUFF_NUM : LAN9500_WUFF_NUM; 1502 int i, filter = 0; 1503 1504 if (!filter_mask) { 1505 netdev_warn(dev->net, "Unable to allocate filter_mask\n"); 1506 ret = -ENOMEM; 1507 goto done; 1508 } 1509 1510 memset(command, 0, sizeof(command)); 1511 memset(offset, 0, sizeof(offset)); 1512 memset(crc, 0, sizeof(crc)); 1513 1514 if (pdata->wolopts & WAKE_BCAST) { 1515 const u8 bcast[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; 1516 netdev_info(dev->net, "enabling broadcast detection\n"); 1517 filter_mask[filter * 4] = 0x003F; 1518 filter_mask[filter * 4 + 1] = 0x00; 1519 filter_mask[filter * 4 + 2] = 0x00; 1520 filter_mask[filter * 4 + 3] = 0x00; 1521 command[filter/4] |= 0x05UL << ((filter % 4) * 8); 1522 offset[filter/4] |= 0x00 << ((filter % 4) * 8); 1523 crc[filter/2] |= smsc_crc(bcast, 6, filter); 1524 filter++; 1525 } 1526 1527 if (pdata->wolopts & WAKE_MCAST) { 1528 const u8 mcast[] = {0x01, 0x00, 0x5E}; 1529 netdev_info(dev->net, "enabling multicast detection\n"); 1530 filter_mask[filter * 4] = 0x0007; 1531 filter_mask[filter * 4 + 1] = 0x00; 1532 filter_mask[filter * 4 + 2] = 0x00; 1533 filter_mask[filter * 4 + 3] = 0x00; 1534 command[filter/4] |= 0x09UL << ((filter % 4) * 8); 1535 offset[filter/4] |= 0x00 << ((filter % 4) * 8); 1536 crc[filter/2] |= smsc_crc(mcast, 3, filter); 1537 filter++; 1538 } 1539 1540 if (pdata->wolopts & WAKE_ARP) { 1541 const u8 arp[] = {0x08, 0x06}; 1542 netdev_info(dev->net, "enabling ARP detection\n"); 1543 filter_mask[filter * 4] = 0x0003; 1544 filter_mask[filter * 4 + 1] = 0x00; 1545 filter_mask[filter * 4 + 2] = 0x00; 1546 filter_mask[filter * 4 + 3] = 0x00; 1547 command[filter/4] |= 0x05UL << ((filter % 4) * 8); 1548 offset[filter/4] |= 0x0C << ((filter % 4) * 8); 1549 crc[filter/2] |= smsc_crc(arp, 2, filter); 1550 filter++; 1551 } 1552 1553 if (pdata->wolopts & WAKE_UCAST) { 1554 netdev_info(dev->net, "enabling unicast detection\n"); 1555 filter_mask[filter * 4] = 0x003F; 1556 filter_mask[filter * 4 + 1] = 0x00; 1557 filter_mask[filter * 4 + 2] = 0x00; 1558 filter_mask[filter * 4 + 3] = 0x00; 1559 command[filter/4] |= 0x01UL << ((filter % 4) * 8); 1560 offset[filter/4] |= 0x00 << ((filter % 4) * 8); 1561 crc[filter/2] |= smsc_crc(dev->net->dev_addr, ETH_ALEN, filter); 1562 filter++; 1563 } 1564 1565 for (i = 0; i < (wuff_filter_count * 4); i++) { 1566 ret = smsc95xx_write_reg_nopm(dev, WUFF, filter_mask[i]); 1567 if (ret < 0) { 1568 netdev_warn(dev->net, "Error writing WUFF\n"); 1569 kfree(filter_mask); 1570 goto done; 1571 } 1572 } 1573 kfree(filter_mask); 1574 1575 for (i = 0; i < (wuff_filter_count / 4); i++) { 1576 ret = smsc95xx_write_reg_nopm(dev, WUFF, command[i]); 1577 if (ret < 0) { 1578 netdev_warn(dev->net, "Error writing WUFF\n"); 1579 goto done; 1580 } 1581 } 1582 1583 for (i = 0; i < (wuff_filter_count / 4); i++) { 1584 ret = smsc95xx_write_reg_nopm(dev, WUFF, offset[i]); 1585 if (ret < 0) { 1586 netdev_warn(dev->net, "Error writing WUFF\n"); 1587 goto done; 1588 } 1589 } 1590 1591 for (i = 0; i < (wuff_filter_count / 2); i++) { 1592 ret = smsc95xx_write_reg_nopm(dev, WUFF, crc[i]); 1593 if (ret < 0) { 1594 netdev_warn(dev->net, "Error writing WUFF\n"); 1595 goto done; 1596 } 1597 } 1598 1599 /* clear any pending pattern match packet status */ 1600 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); 1601 if (ret < 0) { 1602 netdev_warn(dev->net, "Error reading WUCSR\n"); 1603 goto done; 1604 } 1605 1606 val |= WUCSR_WUFR_; 1607 1608 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); 1609 if (ret < 0) { 1610 netdev_warn(dev->net, "Error writing WUCSR\n"); 1611 goto done; 1612 } 1613 } 1614 1615 if (pdata->wolopts & WAKE_MAGIC) { 1616 /* clear any pending magic packet status */ 1617 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); 1618 if (ret < 0) { 1619 netdev_warn(dev->net, "Error reading WUCSR\n"); 1620 goto done; 1621 } 1622 1623 val |= WUCSR_MPR_; 1624 1625 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); 1626 if (ret < 0) { 1627 netdev_warn(dev->net, "Error writing WUCSR\n"); 1628 goto done; 1629 } 1630 } 1631 1632 /* enable/disable wakeup sources */ 1633 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); 1634 if (ret < 0) { 1635 netdev_warn(dev->net, "Error reading WUCSR\n"); 1636 goto done; 1637 } 1638 1639 if (pdata->wolopts & (WAKE_BCAST | WAKE_MCAST | WAKE_ARP | WAKE_UCAST)) { 1640 netdev_info(dev->net, "enabling pattern match wakeup\n"); 1641 val |= WUCSR_WAKE_EN_; 1642 } else { 1643 netdev_info(dev->net, "disabling pattern match wakeup\n"); 1644 val &= ~WUCSR_WAKE_EN_; 1645 } 1646 1647 if (pdata->wolopts & WAKE_MAGIC) { 1648 netdev_info(dev->net, "enabling magic packet wakeup\n"); 1649 val |= WUCSR_MPEN_; 1650 } else { 1651 netdev_info(dev->net, "disabling magic packet wakeup\n"); 1652 val &= ~WUCSR_MPEN_; 1653 } 1654 1655 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); 1656 if (ret < 0) { 1657 netdev_warn(dev->net, "Error writing WUCSR\n"); 1658 goto done; 1659 } 1660 1661 /* enable wol wakeup source */ 1662 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); 1663 if (ret < 0) { 1664 netdev_warn(dev->net, "Error reading PM_CTRL\n"); 1665 goto done; 1666 } 1667 1668 val |= PM_CTL_WOL_EN_; 1669 1670 /* phy energy detect wakeup source */ 1671 if (pdata->wolopts & WAKE_PHY) 1672 val |= PM_CTL_ED_EN_; 1673 1674 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); 1675 if (ret < 0) { 1676 netdev_warn(dev->net, "Error writing PM_CTRL\n"); 1677 goto done; 1678 } 1679 1680 /* enable receiver to enable frame reception */ 1681 smsc95xx_start_rx_path(dev, 1); 1682 1683 /* some wol options are enabled, so enter SUSPEND0 */ 1684 netdev_info(dev->net, "entering SUSPEND0 mode\n"); 1685 ret = smsc95xx_enter_suspend0(dev); 1686 1687 done: 1688 if (ret) 1689 usbnet_resume(intf); 1690 return ret; 1691 } 1692 1693 static int smsc95xx_resume(struct usb_interface *intf) 1694 { 1695 struct usbnet *dev = usb_get_intfdata(intf); 1696 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); 1697 int ret; 1698 u32 val; 1699 1700 BUG_ON(!dev); 1701 1702 if (pdata->wolopts) { 1703 /* clear wake-up sources */ 1704 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); 1705 if (ret < 0) { 1706 netdev_warn(dev->net, "Error reading WUCSR\n"); 1707 return ret; 1708 } 1709 1710 val &= ~(WUCSR_WAKE_EN_ | WUCSR_MPEN_); 1711 1712 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); 1713 if (ret < 0) { 1714 netdev_warn(dev->net, "Error writing WUCSR\n"); 1715 return ret; 1716 } 1717 1718 /* clear wake-up status */ 1719 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); 1720 if (ret < 0) { 1721 netdev_warn(dev->net, "Error reading PM_CTRL\n"); 1722 return ret; 1723 } 1724 1725 val &= ~PM_CTL_WOL_EN_; 1726 val |= PM_CTL_WUPS_; 1727 1728 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); 1729 if (ret < 0) { 1730 netdev_warn(dev->net, "Error writing PM_CTRL\n"); 1731 return ret; 1732 } 1733 } 1734 1735 ret = usbnet_resume(intf); 1736 if (ret < 0) 1737 netdev_warn(dev->net, "usbnet_resume error\n"); 1738 1739 return ret; 1740 } 1741 1742 static void smsc95xx_rx_csum_offload(struct sk_buff *skb) 1743 { 1744 skb->csum = *(u16 *)(skb_tail_pointer(skb) - 2); 1745 skb->ip_summed = CHECKSUM_COMPLETE; 1746 skb_trim(skb, skb->len - 2); 1747 } 1748 1749 static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb) 1750 { 1751 while (skb->len > 0) { 1752 u32 header, align_count; 1753 struct sk_buff *ax_skb; 1754 unsigned char *packet; 1755 u16 size; 1756 1757 memcpy(&header, skb->data, sizeof(header)); 1758 le32_to_cpus(&header); 1759 skb_pull(skb, 4 + NET_IP_ALIGN); 1760 packet = skb->data; 1761 1762 /* get the packet length */ 1763 size = (u16)((header & RX_STS_FL_) >> 16); 1764 align_count = (4 - ((size + NET_IP_ALIGN) % 4)) % 4; 1765 1766 if (unlikely(header & RX_STS_ES_)) { 1767 netif_dbg(dev, rx_err, dev->net, 1768 "Error header=0x%08x\n", header); 1769 dev->net->stats.rx_errors++; 1770 dev->net->stats.rx_dropped++; 1771 1772 if (header & RX_STS_CRC_) { 1773 dev->net->stats.rx_crc_errors++; 1774 } else { 1775 if (header & (RX_STS_TL_ | RX_STS_RF_)) 1776 dev->net->stats.rx_frame_errors++; 1777 1778 if ((header & RX_STS_LE_) && 1779 (!(header & RX_STS_FT_))) 1780 dev->net->stats.rx_length_errors++; 1781 } 1782 } else { 1783 /* ETH_FRAME_LEN + 4(CRC) + 2(COE) + 4(Vlan) */ 1784 if (unlikely(size > (ETH_FRAME_LEN + 12))) { 1785 netif_dbg(dev, rx_err, dev->net, 1786 "size err header=0x%08x\n", header); 1787 return 0; 1788 } 1789 1790 /* last frame in this batch */ 1791 if (skb->len == size) { 1792 if (dev->net->features & NETIF_F_RXCSUM) 1793 smsc95xx_rx_csum_offload(skb); 1794 skb_trim(skb, skb->len - 4); /* remove fcs */ 1795 skb->truesize = size + sizeof(struct sk_buff); 1796 1797 return 1; 1798 } 1799 1800 ax_skb = skb_clone(skb, GFP_ATOMIC); 1801 if (unlikely(!ax_skb)) { 1802 netdev_warn(dev->net, "Error allocating skb\n"); 1803 return 0; 1804 } 1805 1806 ax_skb->len = size; 1807 ax_skb->data = packet; 1808 skb_set_tail_pointer(ax_skb, size); 1809 1810 if (dev->net->features & NETIF_F_RXCSUM) 1811 smsc95xx_rx_csum_offload(ax_skb); 1812 skb_trim(ax_skb, ax_skb->len - 4); /* remove fcs */ 1813 ax_skb->truesize = size + sizeof(struct sk_buff); 1814 1815 usbnet_skb_return(dev, ax_skb); 1816 } 1817 1818 skb_pull(skb, size); 1819 1820 /* padding bytes before the next frame starts */ 1821 if (skb->len) 1822 skb_pull(skb, align_count); 1823 } 1824 1825 if (unlikely(skb->len < 0)) { 1826 netdev_warn(dev->net, "invalid rx length<0 %d\n", skb->len); 1827 return 0; 1828 } 1829 1830 return 1; 1831 } 1832 1833 static u32 smsc95xx_calc_csum_preamble(struct sk_buff *skb) 1834 { 1835 u16 low_16 = (u16)skb_checksum_start_offset(skb); 1836 u16 high_16 = low_16 + skb->csum_offset; 1837 return (high_16 << 16) | low_16; 1838 } 1839 1840 static struct sk_buff *smsc95xx_tx_fixup(struct usbnet *dev, 1841 struct sk_buff *skb, gfp_t flags) 1842 { 1843 bool csum = skb->ip_summed == CHECKSUM_PARTIAL; 1844 int overhead = csum ? SMSC95XX_TX_OVERHEAD_CSUM : SMSC95XX_TX_OVERHEAD; 1845 u32 tx_cmd_a, tx_cmd_b; 1846 1847 /* We do not advertise SG, so skbs should be already linearized */ 1848 BUG_ON(skb_shinfo(skb)->nr_frags); 1849 1850 if (skb_headroom(skb) < overhead) { 1851 struct sk_buff *skb2 = skb_copy_expand(skb, 1852 overhead, 0, flags); 1853 dev_kfree_skb_any(skb); 1854 skb = skb2; 1855 if (!skb) 1856 return NULL; 1857 } 1858 1859 if (csum) { 1860 if (skb->len <= 45) { 1861 /* workaround - hardware tx checksum does not work 1862 * properly with extremely small packets */ 1863 long csstart = skb_checksum_start_offset(skb); 1864 __wsum calc = csum_partial(skb->data + csstart, 1865 skb->len - csstart, 0); 1866 *((__sum16 *)(skb->data + csstart 1867 + skb->csum_offset)) = csum_fold(calc); 1868 1869 csum = false; 1870 } else { 1871 u32 csum_preamble = smsc95xx_calc_csum_preamble(skb); 1872 skb_push(skb, 4); 1873 cpu_to_le32s(&csum_preamble); 1874 memcpy(skb->data, &csum_preamble, 4); 1875 } 1876 } 1877 1878 skb_push(skb, 4); 1879 tx_cmd_b = (u32)(skb->len - 4); 1880 if (csum) 1881 tx_cmd_b |= TX_CMD_B_CSUM_ENABLE; 1882 cpu_to_le32s(&tx_cmd_b); 1883 memcpy(skb->data, &tx_cmd_b, 4); 1884 1885 skb_push(skb, 4); 1886 tx_cmd_a = (u32)(skb->len - 8) | TX_CMD_A_FIRST_SEG_ | 1887 TX_CMD_A_LAST_SEG_; 1888 cpu_to_le32s(&tx_cmd_a); 1889 memcpy(skb->data, &tx_cmd_a, 4); 1890 1891 return skb; 1892 } 1893 1894 static const struct driver_info smsc95xx_info = { 1895 .description = "smsc95xx USB 2.0 Ethernet", 1896 .bind = smsc95xx_bind, 1897 .unbind = smsc95xx_unbind, 1898 .link_reset = smsc95xx_link_reset, 1899 .reset = smsc95xx_reset, 1900 .rx_fixup = smsc95xx_rx_fixup, 1901 .tx_fixup = smsc95xx_tx_fixup, 1902 .status = smsc95xx_status, 1903 .flags = FLAG_ETHER | FLAG_SEND_ZLP | FLAG_LINK_INTR, 1904 }; 1905 1906 static const struct usb_device_id products[] = { 1907 { 1908 /* SMSC9500 USB Ethernet Device */ 1909 USB_DEVICE(0x0424, 0x9500), 1910 .driver_info = (unsigned long) &smsc95xx_info, 1911 }, 1912 { 1913 /* SMSC9505 USB Ethernet Device */ 1914 USB_DEVICE(0x0424, 0x9505), 1915 .driver_info = (unsigned long) &smsc95xx_info, 1916 }, 1917 { 1918 /* SMSC9500A USB Ethernet Device */ 1919 USB_DEVICE(0x0424, 0x9E00), 1920 .driver_info = (unsigned long) &smsc95xx_info, 1921 }, 1922 { 1923 /* SMSC9505A USB Ethernet Device */ 1924 USB_DEVICE(0x0424, 0x9E01), 1925 .driver_info = (unsigned long) &smsc95xx_info, 1926 }, 1927 { 1928 /* SMSC9512/9514 USB Hub & Ethernet Device */ 1929 USB_DEVICE(0x0424, 0xec00), 1930 .driver_info = (unsigned long) &smsc95xx_info, 1931 }, 1932 { 1933 /* SMSC9500 USB Ethernet Device (SAL10) */ 1934 USB_DEVICE(0x0424, 0x9900), 1935 .driver_info = (unsigned long) &smsc95xx_info, 1936 }, 1937 { 1938 /* SMSC9505 USB Ethernet Device (SAL10) */ 1939 USB_DEVICE(0x0424, 0x9901), 1940 .driver_info = (unsigned long) &smsc95xx_info, 1941 }, 1942 { 1943 /* SMSC9500A USB Ethernet Device (SAL10) */ 1944 USB_DEVICE(0x0424, 0x9902), 1945 .driver_info = (unsigned long) &smsc95xx_info, 1946 }, 1947 { 1948 /* SMSC9505A USB Ethernet Device (SAL10) */ 1949 USB_DEVICE(0x0424, 0x9903), 1950 .driver_info = (unsigned long) &smsc95xx_info, 1951 }, 1952 { 1953 /* SMSC9512/9514 USB Hub & Ethernet Device (SAL10) */ 1954 USB_DEVICE(0x0424, 0x9904), 1955 .driver_info = (unsigned long) &smsc95xx_info, 1956 }, 1957 { 1958 /* SMSC9500A USB Ethernet Device (HAL) */ 1959 USB_DEVICE(0x0424, 0x9905), 1960 .driver_info = (unsigned long) &smsc95xx_info, 1961 }, 1962 { 1963 /* SMSC9505A USB Ethernet Device (HAL) */ 1964 USB_DEVICE(0x0424, 0x9906), 1965 .driver_info = (unsigned long) &smsc95xx_info, 1966 }, 1967 { 1968 /* SMSC9500 USB Ethernet Device (Alternate ID) */ 1969 USB_DEVICE(0x0424, 0x9907), 1970 .driver_info = (unsigned long) &smsc95xx_info, 1971 }, 1972 { 1973 /* SMSC9500A USB Ethernet Device (Alternate ID) */ 1974 USB_DEVICE(0x0424, 0x9908), 1975 .driver_info = (unsigned long) &smsc95xx_info, 1976 }, 1977 { 1978 /* SMSC9512/9514 USB Hub & Ethernet Device (Alternate ID) */ 1979 USB_DEVICE(0x0424, 0x9909), 1980 .driver_info = (unsigned long) &smsc95xx_info, 1981 }, 1982 { 1983 /* SMSC LAN9530 USB Ethernet Device */ 1984 USB_DEVICE(0x0424, 0x9530), 1985 .driver_info = (unsigned long) &smsc95xx_info, 1986 }, 1987 { 1988 /* SMSC LAN9730 USB Ethernet Device */ 1989 USB_DEVICE(0x0424, 0x9730), 1990 .driver_info = (unsigned long) &smsc95xx_info, 1991 }, 1992 { 1993 /* SMSC LAN89530 USB Ethernet Device */ 1994 USB_DEVICE(0x0424, 0x9E08), 1995 .driver_info = (unsigned long) &smsc95xx_info, 1996 }, 1997 { }, /* END */ 1998 }; 1999 MODULE_DEVICE_TABLE(usb, products); 2000 2001 static struct usb_driver smsc95xx_driver = { 2002 .name = "smsc95xx", 2003 .id_table = products, 2004 .probe = usbnet_probe, 2005 .suspend = smsc95xx_suspend, 2006 .resume = smsc95xx_resume, 2007 .reset_resume = smsc95xx_resume, 2008 .disconnect = usbnet_disconnect, 2009 .disable_hub_initiated_lpm = 1, 2010 }; 2011 2012 module_usb_driver(smsc95xx_driver); 2013 2014 MODULE_AUTHOR("Nancy Lin"); 2015 MODULE_AUTHOR("Steve Glendinning <steve.glendinning@shawell.net>"); 2016 MODULE_DESCRIPTION("SMSC95XX USB 2.0 Ethernet Devices"); 2017 MODULE_LICENSE("GPL"); 2018