Merge branch 'x86/nuke386' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
[linux-drm-fsl-dcu.git] / drivers / net / usb / smsc95xx.c
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, &regs->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");