Merge tag 'wireless-drivers-next-for-davem-2016-09-15' of git://git.kernel.org/pub...
[cascardo/linux.git] / drivers / net / usb / lan78xx.c
1 /*
2  * Copyright (C) 2015 Microchip Technology
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, see <http://www.gnu.org/licenses/>.
16  */
17 #include <linux/version.h>
18 #include <linux/module.h>
19 #include <linux/netdevice.h>
20 #include <linux/etherdevice.h>
21 #include <linux/ethtool.h>
22 #include <linux/usb.h>
23 #include <linux/crc32.h>
24 #include <linux/signal.h>
25 #include <linux/slab.h>
26 #include <linux/if_vlan.h>
27 #include <linux/uaccess.h>
28 #include <linux/list.h>
29 #include <linux/ip.h>
30 #include <linux/ipv6.h>
31 #include <linux/mdio.h>
32 #include <net/ip6_checksum.h>
33 #include <linux/microchipphy.h>
34 #include "lan78xx.h"
35
36 #define DRIVER_AUTHOR   "WOOJUNG HUH <woojung.huh@microchip.com>"
37 #define DRIVER_DESC     "LAN78XX USB 3.0 Gigabit Ethernet Devices"
38 #define DRIVER_NAME     "lan78xx"
39 #define DRIVER_VERSION  "1.0.4"
40
41 #define TX_TIMEOUT_JIFFIES              (5 * HZ)
42 #define THROTTLE_JIFFIES                (HZ / 8)
43 #define UNLINK_TIMEOUT_MS               3
44
45 #define RX_MAX_QUEUE_MEMORY             (60 * 1518)
46
47 #define SS_USB_PKT_SIZE                 (1024)
48 #define HS_USB_PKT_SIZE                 (512)
49 #define FS_USB_PKT_SIZE                 (64)
50
51 #define MAX_RX_FIFO_SIZE                (12 * 1024)
52 #define MAX_TX_FIFO_SIZE                (12 * 1024)
53 #define DEFAULT_BURST_CAP_SIZE          (MAX_TX_FIFO_SIZE)
54 #define DEFAULT_BULK_IN_DELAY           (0x0800)
55 #define MAX_SINGLE_PACKET_SIZE          (9000)
56 #define DEFAULT_TX_CSUM_ENABLE          (true)
57 #define DEFAULT_RX_CSUM_ENABLE          (true)
58 #define DEFAULT_TSO_CSUM_ENABLE         (true)
59 #define DEFAULT_VLAN_FILTER_ENABLE      (true)
60 #define TX_OVERHEAD                     (8)
61 #define RXW_PADDING                     2
62
63 #define LAN78XX_USB_VENDOR_ID           (0x0424)
64 #define LAN7800_USB_PRODUCT_ID          (0x7800)
65 #define LAN7850_USB_PRODUCT_ID          (0x7850)
66 #define LAN78XX_EEPROM_MAGIC            (0x78A5)
67 #define LAN78XX_OTP_MAGIC               (0x78F3)
68
69 #define MII_READ                        1
70 #define MII_WRITE                       0
71
72 #define EEPROM_INDICATOR                (0xA5)
73 #define EEPROM_MAC_OFFSET               (0x01)
74 #define MAX_EEPROM_SIZE                 512
75 #define OTP_INDICATOR_1                 (0xF3)
76 #define OTP_INDICATOR_2                 (0xF7)
77
78 #define WAKE_ALL                        (WAKE_PHY | WAKE_UCAST | \
79                                          WAKE_MCAST | WAKE_BCAST | \
80                                          WAKE_ARP | WAKE_MAGIC)
81
82 /* USB related defines */
83 #define BULK_IN_PIPE                    1
84 #define BULK_OUT_PIPE                   2
85
86 /* default autosuspend delay (mSec)*/
87 #define DEFAULT_AUTOSUSPEND_DELAY       (10 * 1000)
88
89 /* statistic update interval (mSec) */
90 #define STAT_UPDATE_TIMER               (1 * 1000)
91
92 static const char lan78xx_gstrings[][ETH_GSTRING_LEN] = {
93         "RX FCS Errors",
94         "RX Alignment Errors",
95         "Rx Fragment Errors",
96         "RX Jabber Errors",
97         "RX Undersize Frame Errors",
98         "RX Oversize Frame Errors",
99         "RX Dropped Frames",
100         "RX Unicast Byte Count",
101         "RX Broadcast Byte Count",
102         "RX Multicast Byte Count",
103         "RX Unicast Frames",
104         "RX Broadcast Frames",
105         "RX Multicast Frames",
106         "RX Pause Frames",
107         "RX 64 Byte Frames",
108         "RX 65 - 127 Byte Frames",
109         "RX 128 - 255 Byte Frames",
110         "RX 256 - 511 Bytes Frames",
111         "RX 512 - 1023 Byte Frames",
112         "RX 1024 - 1518 Byte Frames",
113         "RX Greater 1518 Byte Frames",
114         "EEE RX LPI Transitions",
115         "EEE RX LPI Time",
116         "TX FCS Errors",
117         "TX Excess Deferral Errors",
118         "TX Carrier Errors",
119         "TX Bad Byte Count",
120         "TX Single Collisions",
121         "TX Multiple Collisions",
122         "TX Excessive Collision",
123         "TX Late Collisions",
124         "TX Unicast Byte Count",
125         "TX Broadcast Byte Count",
126         "TX Multicast Byte Count",
127         "TX Unicast Frames",
128         "TX Broadcast Frames",
129         "TX Multicast Frames",
130         "TX Pause Frames",
131         "TX 64 Byte Frames",
132         "TX 65 - 127 Byte Frames",
133         "TX 128 - 255 Byte Frames",
134         "TX 256 - 511 Bytes Frames",
135         "TX 512 - 1023 Byte Frames",
136         "TX 1024 - 1518 Byte Frames",
137         "TX Greater 1518 Byte Frames",
138         "EEE TX LPI Transitions",
139         "EEE TX LPI Time",
140 };
141
142 struct lan78xx_statstage {
143         u32 rx_fcs_errors;
144         u32 rx_alignment_errors;
145         u32 rx_fragment_errors;
146         u32 rx_jabber_errors;
147         u32 rx_undersize_frame_errors;
148         u32 rx_oversize_frame_errors;
149         u32 rx_dropped_frames;
150         u32 rx_unicast_byte_count;
151         u32 rx_broadcast_byte_count;
152         u32 rx_multicast_byte_count;
153         u32 rx_unicast_frames;
154         u32 rx_broadcast_frames;
155         u32 rx_multicast_frames;
156         u32 rx_pause_frames;
157         u32 rx_64_byte_frames;
158         u32 rx_65_127_byte_frames;
159         u32 rx_128_255_byte_frames;
160         u32 rx_256_511_bytes_frames;
161         u32 rx_512_1023_byte_frames;
162         u32 rx_1024_1518_byte_frames;
163         u32 rx_greater_1518_byte_frames;
164         u32 eee_rx_lpi_transitions;
165         u32 eee_rx_lpi_time;
166         u32 tx_fcs_errors;
167         u32 tx_excess_deferral_errors;
168         u32 tx_carrier_errors;
169         u32 tx_bad_byte_count;
170         u32 tx_single_collisions;
171         u32 tx_multiple_collisions;
172         u32 tx_excessive_collision;
173         u32 tx_late_collisions;
174         u32 tx_unicast_byte_count;
175         u32 tx_broadcast_byte_count;
176         u32 tx_multicast_byte_count;
177         u32 tx_unicast_frames;
178         u32 tx_broadcast_frames;
179         u32 tx_multicast_frames;
180         u32 tx_pause_frames;
181         u32 tx_64_byte_frames;
182         u32 tx_65_127_byte_frames;
183         u32 tx_128_255_byte_frames;
184         u32 tx_256_511_bytes_frames;
185         u32 tx_512_1023_byte_frames;
186         u32 tx_1024_1518_byte_frames;
187         u32 tx_greater_1518_byte_frames;
188         u32 eee_tx_lpi_transitions;
189         u32 eee_tx_lpi_time;
190 };
191
192 struct lan78xx_statstage64 {
193         u64 rx_fcs_errors;
194         u64 rx_alignment_errors;
195         u64 rx_fragment_errors;
196         u64 rx_jabber_errors;
197         u64 rx_undersize_frame_errors;
198         u64 rx_oversize_frame_errors;
199         u64 rx_dropped_frames;
200         u64 rx_unicast_byte_count;
201         u64 rx_broadcast_byte_count;
202         u64 rx_multicast_byte_count;
203         u64 rx_unicast_frames;
204         u64 rx_broadcast_frames;
205         u64 rx_multicast_frames;
206         u64 rx_pause_frames;
207         u64 rx_64_byte_frames;
208         u64 rx_65_127_byte_frames;
209         u64 rx_128_255_byte_frames;
210         u64 rx_256_511_bytes_frames;
211         u64 rx_512_1023_byte_frames;
212         u64 rx_1024_1518_byte_frames;
213         u64 rx_greater_1518_byte_frames;
214         u64 eee_rx_lpi_transitions;
215         u64 eee_rx_lpi_time;
216         u64 tx_fcs_errors;
217         u64 tx_excess_deferral_errors;
218         u64 tx_carrier_errors;
219         u64 tx_bad_byte_count;
220         u64 tx_single_collisions;
221         u64 tx_multiple_collisions;
222         u64 tx_excessive_collision;
223         u64 tx_late_collisions;
224         u64 tx_unicast_byte_count;
225         u64 tx_broadcast_byte_count;
226         u64 tx_multicast_byte_count;
227         u64 tx_unicast_frames;
228         u64 tx_broadcast_frames;
229         u64 tx_multicast_frames;
230         u64 tx_pause_frames;
231         u64 tx_64_byte_frames;
232         u64 tx_65_127_byte_frames;
233         u64 tx_128_255_byte_frames;
234         u64 tx_256_511_bytes_frames;
235         u64 tx_512_1023_byte_frames;
236         u64 tx_1024_1518_byte_frames;
237         u64 tx_greater_1518_byte_frames;
238         u64 eee_tx_lpi_transitions;
239         u64 eee_tx_lpi_time;
240 };
241
242 struct lan78xx_net;
243
244 struct lan78xx_priv {
245         struct lan78xx_net *dev;
246         u32 rfe_ctl;
247         u32 mchash_table[DP_SEL_VHF_HASH_LEN]; /* multicat hash table */
248         u32 pfilter_table[NUM_OF_MAF][2]; /* perfect filter table */
249         u32 vlan_table[DP_SEL_VHF_VLAN_LEN];
250         struct mutex dataport_mutex; /* for dataport access */
251         spinlock_t rfe_ctl_lock; /* for rfe register access */
252         struct work_struct set_multicast;
253         struct work_struct set_vlan;
254         u32 wol;
255 };
256
257 enum skb_state {
258         illegal = 0,
259         tx_start,
260         tx_done,
261         rx_start,
262         rx_done,
263         rx_cleanup,
264         unlink_start
265 };
266
267 struct skb_data {               /* skb->cb is one of these */
268         struct urb *urb;
269         struct lan78xx_net *dev;
270         enum skb_state state;
271         size_t length;
272         int num_of_packet;
273 };
274
275 struct usb_context {
276         struct usb_ctrlrequest req;
277         struct lan78xx_net *dev;
278 };
279
280 #define EVENT_TX_HALT                   0
281 #define EVENT_RX_HALT                   1
282 #define EVENT_RX_MEMORY                 2
283 #define EVENT_STS_SPLIT                 3
284 #define EVENT_LINK_RESET                4
285 #define EVENT_RX_PAUSED                 5
286 #define EVENT_DEV_WAKING                6
287 #define EVENT_DEV_ASLEEP                7
288 #define EVENT_DEV_OPEN                  8
289 #define EVENT_STAT_UPDATE               9
290
291 struct statstage {
292         struct mutex                    access_lock;    /* for stats access */
293         struct lan78xx_statstage        saved;
294         struct lan78xx_statstage        rollover_count;
295         struct lan78xx_statstage        rollover_max;
296         struct lan78xx_statstage64      curr_stat;
297 };
298
299 struct lan78xx_net {
300         struct net_device       *net;
301         struct usb_device       *udev;
302         struct usb_interface    *intf;
303         void                    *driver_priv;
304
305         int                     rx_qlen;
306         int                     tx_qlen;
307         struct sk_buff_head     rxq;
308         struct sk_buff_head     txq;
309         struct sk_buff_head     done;
310         struct sk_buff_head     rxq_pause;
311         struct sk_buff_head     txq_pend;
312
313         struct tasklet_struct   bh;
314         struct delayed_work     wq;
315
316         struct usb_host_endpoint *ep_blkin;
317         struct usb_host_endpoint *ep_blkout;
318         struct usb_host_endpoint *ep_intr;
319
320         int                     msg_enable;
321
322         struct urb              *urb_intr;
323         struct usb_anchor       deferred;
324
325         struct mutex            phy_mutex; /* for phy access */
326         unsigned                pipe_in, pipe_out, pipe_intr;
327
328         u32                     hard_mtu;       /* count any extra framing */
329         size_t                  rx_urb_size;    /* size for rx urbs */
330
331         unsigned long           flags;
332
333         wait_queue_head_t       *wait;
334         unsigned char           suspend_count;
335
336         unsigned                maxpacket;
337         struct timer_list       delay;
338         struct timer_list       stat_monitor;
339
340         unsigned long           data[5];
341
342         int                     link_on;
343         u8                      mdix_ctrl;
344
345         u32                     chipid;
346         u32                     chiprev;
347         struct mii_bus          *mdiobus;
348
349         int                     fc_autoneg;
350         u8                      fc_request_control;
351
352         int                     delta;
353         struct statstage        stats;
354 };
355
356 /* use ethtool to change the level for any given device */
357 static int msg_level = -1;
358 module_param(msg_level, int, 0);
359 MODULE_PARM_DESC(msg_level, "Override default message level");
360
361 static int lan78xx_read_reg(struct lan78xx_net *dev, u32 index, u32 *data)
362 {
363         u32 *buf = kmalloc(sizeof(u32), GFP_KERNEL);
364         int ret;
365
366         if (!buf)
367                 return -ENOMEM;
368
369         ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0),
370                               USB_VENDOR_REQUEST_READ_REGISTER,
371                               USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
372                               0, index, buf, 4, USB_CTRL_GET_TIMEOUT);
373         if (likely(ret >= 0)) {
374                 le32_to_cpus(buf);
375                 *data = *buf;
376         } else {
377                 netdev_warn(dev->net,
378                             "Failed to read register index 0x%08x. ret = %d",
379                             index, ret);
380         }
381
382         kfree(buf);
383
384         return ret;
385 }
386
387 static int lan78xx_write_reg(struct lan78xx_net *dev, u32 index, u32 data)
388 {
389         u32 *buf = kmalloc(sizeof(u32), GFP_KERNEL);
390         int ret;
391
392         if (!buf)
393                 return -ENOMEM;
394
395         *buf = data;
396         cpu_to_le32s(buf);
397
398         ret = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0),
399                               USB_VENDOR_REQUEST_WRITE_REGISTER,
400                               USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
401                               0, index, buf, 4, USB_CTRL_SET_TIMEOUT);
402         if (unlikely(ret < 0)) {
403                 netdev_warn(dev->net,
404                             "Failed to write register index 0x%08x. ret = %d",
405                             index, ret);
406         }
407
408         kfree(buf);
409
410         return ret;
411 }
412
413 static int lan78xx_read_stats(struct lan78xx_net *dev,
414                               struct lan78xx_statstage *data)
415 {
416         int ret = 0;
417         int i;
418         struct lan78xx_statstage *stats;
419         u32 *src;
420         u32 *dst;
421
422         stats = kmalloc(sizeof(*stats), GFP_KERNEL);
423         if (!stats)
424                 return -ENOMEM;
425
426         ret = usb_control_msg(dev->udev,
427                               usb_rcvctrlpipe(dev->udev, 0),
428                               USB_VENDOR_REQUEST_GET_STATS,
429                               USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
430                               0,
431                               0,
432                               (void *)stats,
433                               sizeof(*stats),
434                               USB_CTRL_SET_TIMEOUT);
435         if (likely(ret >= 0)) {
436                 src = (u32 *)stats;
437                 dst = (u32 *)data;
438                 for (i = 0; i < sizeof(*stats)/sizeof(u32); i++) {
439                         le32_to_cpus(&src[i]);
440                         dst[i] = src[i];
441                 }
442         } else {
443                 netdev_warn(dev->net,
444                             "Failed to read stat ret = 0x%x", ret);
445         }
446
447         kfree(stats);
448
449         return ret;
450 }
451
452 #define check_counter_rollover(struct1, dev_stats, member) {    \
453         if (struct1->member < dev_stats.saved.member)           \
454                 dev_stats.rollover_count.member++;              \
455         }
456
457 static void lan78xx_check_stat_rollover(struct lan78xx_net *dev,
458                                         struct lan78xx_statstage *stats)
459 {
460         check_counter_rollover(stats, dev->stats, rx_fcs_errors);
461         check_counter_rollover(stats, dev->stats, rx_alignment_errors);
462         check_counter_rollover(stats, dev->stats, rx_fragment_errors);
463         check_counter_rollover(stats, dev->stats, rx_jabber_errors);
464         check_counter_rollover(stats, dev->stats, rx_undersize_frame_errors);
465         check_counter_rollover(stats, dev->stats, rx_oversize_frame_errors);
466         check_counter_rollover(stats, dev->stats, rx_dropped_frames);
467         check_counter_rollover(stats, dev->stats, rx_unicast_byte_count);
468         check_counter_rollover(stats, dev->stats, rx_broadcast_byte_count);
469         check_counter_rollover(stats, dev->stats, rx_multicast_byte_count);
470         check_counter_rollover(stats, dev->stats, rx_unicast_frames);
471         check_counter_rollover(stats, dev->stats, rx_broadcast_frames);
472         check_counter_rollover(stats, dev->stats, rx_multicast_frames);
473         check_counter_rollover(stats, dev->stats, rx_pause_frames);
474         check_counter_rollover(stats, dev->stats, rx_64_byte_frames);
475         check_counter_rollover(stats, dev->stats, rx_65_127_byte_frames);
476         check_counter_rollover(stats, dev->stats, rx_128_255_byte_frames);
477         check_counter_rollover(stats, dev->stats, rx_256_511_bytes_frames);
478         check_counter_rollover(stats, dev->stats, rx_512_1023_byte_frames);
479         check_counter_rollover(stats, dev->stats, rx_1024_1518_byte_frames);
480         check_counter_rollover(stats, dev->stats, rx_greater_1518_byte_frames);
481         check_counter_rollover(stats, dev->stats, eee_rx_lpi_transitions);
482         check_counter_rollover(stats, dev->stats, eee_rx_lpi_time);
483         check_counter_rollover(stats, dev->stats, tx_fcs_errors);
484         check_counter_rollover(stats, dev->stats, tx_excess_deferral_errors);
485         check_counter_rollover(stats, dev->stats, tx_carrier_errors);
486         check_counter_rollover(stats, dev->stats, tx_bad_byte_count);
487         check_counter_rollover(stats, dev->stats, tx_single_collisions);
488         check_counter_rollover(stats, dev->stats, tx_multiple_collisions);
489         check_counter_rollover(stats, dev->stats, tx_excessive_collision);
490         check_counter_rollover(stats, dev->stats, tx_late_collisions);
491         check_counter_rollover(stats, dev->stats, tx_unicast_byte_count);
492         check_counter_rollover(stats, dev->stats, tx_broadcast_byte_count);
493         check_counter_rollover(stats, dev->stats, tx_multicast_byte_count);
494         check_counter_rollover(stats, dev->stats, tx_unicast_frames);
495         check_counter_rollover(stats, dev->stats, tx_broadcast_frames);
496         check_counter_rollover(stats, dev->stats, tx_multicast_frames);
497         check_counter_rollover(stats, dev->stats, tx_pause_frames);
498         check_counter_rollover(stats, dev->stats, tx_64_byte_frames);
499         check_counter_rollover(stats, dev->stats, tx_65_127_byte_frames);
500         check_counter_rollover(stats, dev->stats, tx_128_255_byte_frames);
501         check_counter_rollover(stats, dev->stats, tx_256_511_bytes_frames);
502         check_counter_rollover(stats, dev->stats, tx_512_1023_byte_frames);
503         check_counter_rollover(stats, dev->stats, tx_1024_1518_byte_frames);
504         check_counter_rollover(stats, dev->stats, tx_greater_1518_byte_frames);
505         check_counter_rollover(stats, dev->stats, eee_tx_lpi_transitions);
506         check_counter_rollover(stats, dev->stats, eee_tx_lpi_time);
507
508         memcpy(&dev->stats.saved, stats, sizeof(struct lan78xx_statstage));
509 }
510
511 static void lan78xx_update_stats(struct lan78xx_net *dev)
512 {
513         u32 *p, *count, *max;
514         u64 *data;
515         int i;
516         struct lan78xx_statstage lan78xx_stats;
517
518         if (usb_autopm_get_interface(dev->intf) < 0)
519                 return;
520
521         p = (u32 *)&lan78xx_stats;
522         count = (u32 *)&dev->stats.rollover_count;
523         max = (u32 *)&dev->stats.rollover_max;
524         data = (u64 *)&dev->stats.curr_stat;
525
526         mutex_lock(&dev->stats.access_lock);
527
528         if (lan78xx_read_stats(dev, &lan78xx_stats) > 0)
529                 lan78xx_check_stat_rollover(dev, &lan78xx_stats);
530
531         for (i = 0; i < (sizeof(lan78xx_stats) / (sizeof(u32))); i++)
532                 data[i] = (u64)p[i] + ((u64)count[i] * ((u64)max[i] + 1));
533
534         mutex_unlock(&dev->stats.access_lock);
535
536         usb_autopm_put_interface(dev->intf);
537 }
538
539 /* Loop until the read is completed with timeout called with phy_mutex held */
540 static int lan78xx_phy_wait_not_busy(struct lan78xx_net *dev)
541 {
542         unsigned long start_time = jiffies;
543         u32 val;
544         int ret;
545
546         do {
547                 ret = lan78xx_read_reg(dev, MII_ACC, &val);
548                 if (unlikely(ret < 0))
549                         return -EIO;
550
551                 if (!(val & MII_ACC_MII_BUSY_))
552                         return 0;
553         } while (!time_after(jiffies, start_time + HZ));
554
555         return -EIO;
556 }
557
558 static inline u32 mii_access(int id, int index, int read)
559 {
560         u32 ret;
561
562         ret = ((u32)id << MII_ACC_PHY_ADDR_SHIFT_) & MII_ACC_PHY_ADDR_MASK_;
563         ret |= ((u32)index << MII_ACC_MIIRINDA_SHIFT_) & MII_ACC_MIIRINDA_MASK_;
564         if (read)
565                 ret |= MII_ACC_MII_READ_;
566         else
567                 ret |= MII_ACC_MII_WRITE_;
568         ret |= MII_ACC_MII_BUSY_;
569
570         return ret;
571 }
572
573 static int lan78xx_wait_eeprom(struct lan78xx_net *dev)
574 {
575         unsigned long start_time = jiffies;
576         u32 val;
577         int ret;
578
579         do {
580                 ret = lan78xx_read_reg(dev, E2P_CMD, &val);
581                 if (unlikely(ret < 0))
582                         return -EIO;
583
584                 if (!(val & E2P_CMD_EPC_BUSY_) ||
585                     (val & E2P_CMD_EPC_TIMEOUT_))
586                         break;
587                 usleep_range(40, 100);
588         } while (!time_after(jiffies, start_time + HZ));
589
590         if (val & (E2P_CMD_EPC_TIMEOUT_ | E2P_CMD_EPC_BUSY_)) {
591                 netdev_warn(dev->net, "EEPROM read operation timeout");
592                 return -EIO;
593         }
594
595         return 0;
596 }
597
598 static int lan78xx_eeprom_confirm_not_busy(struct lan78xx_net *dev)
599 {
600         unsigned long start_time = jiffies;
601         u32 val;
602         int ret;
603
604         do {
605                 ret = lan78xx_read_reg(dev, E2P_CMD, &val);
606                 if (unlikely(ret < 0))
607                         return -EIO;
608
609                 if (!(val & E2P_CMD_EPC_BUSY_))
610                         return 0;
611
612                 usleep_range(40, 100);
613         } while (!time_after(jiffies, start_time + HZ));
614
615         netdev_warn(dev->net, "EEPROM is busy");
616         return -EIO;
617 }
618
619 static int lan78xx_read_raw_eeprom(struct lan78xx_net *dev, u32 offset,
620                                    u32 length, u8 *data)
621 {
622         u32 val;
623         u32 saved;
624         int i, ret;
625         int retval;
626
627         /* depends on chip, some EEPROM pins are muxed with LED function.
628          * disable & restore LED function to access EEPROM.
629          */
630         ret = lan78xx_read_reg(dev, HW_CFG, &val);
631         saved = val;
632         if (dev->chipid == ID_REV_CHIP_ID_7800_) {
633                 val &= ~(HW_CFG_LED1_EN_ | HW_CFG_LED0_EN_);
634                 ret = lan78xx_write_reg(dev, HW_CFG, val);
635         }
636
637         retval = lan78xx_eeprom_confirm_not_busy(dev);
638         if (retval)
639                 return retval;
640
641         for (i = 0; i < length; i++) {
642                 val = E2P_CMD_EPC_BUSY_ | E2P_CMD_EPC_CMD_READ_;
643                 val |= (offset & E2P_CMD_EPC_ADDR_MASK_);
644                 ret = lan78xx_write_reg(dev, E2P_CMD, val);
645                 if (unlikely(ret < 0)) {
646                         retval = -EIO;
647                         goto exit;
648                 }
649
650                 retval = lan78xx_wait_eeprom(dev);
651                 if (retval < 0)
652                         goto exit;
653
654                 ret = lan78xx_read_reg(dev, E2P_DATA, &val);
655                 if (unlikely(ret < 0)) {
656                         retval = -EIO;
657                         goto exit;
658                 }
659
660                 data[i] = val & 0xFF;
661                 offset++;
662         }
663
664         retval = 0;
665 exit:
666         if (dev->chipid == ID_REV_CHIP_ID_7800_)
667                 ret = lan78xx_write_reg(dev, HW_CFG, saved);
668
669         return retval;
670 }
671
672 static int lan78xx_read_eeprom(struct lan78xx_net *dev, u32 offset,
673                                u32 length, u8 *data)
674 {
675         u8 sig;
676         int ret;
677
678         ret = lan78xx_read_raw_eeprom(dev, 0, 1, &sig);
679         if ((ret == 0) && (sig == EEPROM_INDICATOR))
680                 ret = lan78xx_read_raw_eeprom(dev, offset, length, data);
681         else
682                 ret = -EINVAL;
683
684         return ret;
685 }
686
687 static int lan78xx_write_raw_eeprom(struct lan78xx_net *dev, u32 offset,
688                                     u32 length, u8 *data)
689 {
690         u32 val;
691         u32 saved;
692         int i, ret;
693         int retval;
694
695         /* depends on chip, some EEPROM pins are muxed with LED function.
696          * disable & restore LED function to access EEPROM.
697          */
698         ret = lan78xx_read_reg(dev, HW_CFG, &val);
699         saved = val;
700         if (dev->chipid == ID_REV_CHIP_ID_7800_) {
701                 val &= ~(HW_CFG_LED1_EN_ | HW_CFG_LED0_EN_);
702                 ret = lan78xx_write_reg(dev, HW_CFG, val);
703         }
704
705         retval = lan78xx_eeprom_confirm_not_busy(dev);
706         if (retval)
707                 goto exit;
708
709         /* Issue write/erase enable command */
710         val = E2P_CMD_EPC_BUSY_ | E2P_CMD_EPC_CMD_EWEN_;
711         ret = lan78xx_write_reg(dev, E2P_CMD, val);
712         if (unlikely(ret < 0)) {
713                 retval = -EIO;
714                 goto exit;
715         }
716
717         retval = lan78xx_wait_eeprom(dev);
718         if (retval < 0)
719                 goto exit;
720
721         for (i = 0; i < length; i++) {
722                 /* Fill data register */
723                 val = data[i];
724                 ret = lan78xx_write_reg(dev, E2P_DATA, val);
725                 if (ret < 0) {
726                         retval = -EIO;
727                         goto exit;
728                 }
729
730                 /* Send "write" command */
731                 val = E2P_CMD_EPC_BUSY_ | E2P_CMD_EPC_CMD_WRITE_;
732                 val |= (offset & E2P_CMD_EPC_ADDR_MASK_);
733                 ret = lan78xx_write_reg(dev, E2P_CMD, val);
734                 if (ret < 0) {
735                         retval = -EIO;
736                         goto exit;
737                 }
738
739                 retval = lan78xx_wait_eeprom(dev);
740                 if (retval < 0)
741                         goto exit;
742
743                 offset++;
744         }
745
746         retval = 0;
747 exit:
748         if (dev->chipid == ID_REV_CHIP_ID_7800_)
749                 ret = lan78xx_write_reg(dev, HW_CFG, saved);
750
751         return retval;
752 }
753
754 static int lan78xx_read_raw_otp(struct lan78xx_net *dev, u32 offset,
755                                 u32 length, u8 *data)
756 {
757         int i;
758         int ret;
759         u32 buf;
760         unsigned long timeout;
761
762         ret = lan78xx_read_reg(dev, OTP_PWR_DN, &buf);
763
764         if (buf & OTP_PWR_DN_PWRDN_N_) {
765                 /* clear it and wait to be cleared */
766                 ret = lan78xx_write_reg(dev, OTP_PWR_DN, 0);
767
768                 timeout = jiffies + HZ;
769                 do {
770                         usleep_range(1, 10);
771                         ret = lan78xx_read_reg(dev, OTP_PWR_DN, &buf);
772                         if (time_after(jiffies, timeout)) {
773                                 netdev_warn(dev->net,
774                                             "timeout on OTP_PWR_DN");
775                                 return -EIO;
776                         }
777                 } while (buf & OTP_PWR_DN_PWRDN_N_);
778         }
779
780         for (i = 0; i < length; i++) {
781                 ret = lan78xx_write_reg(dev, OTP_ADDR1,
782                                         ((offset + i) >> 8) & OTP_ADDR1_15_11);
783                 ret = lan78xx_write_reg(dev, OTP_ADDR2,
784                                         ((offset + i) & OTP_ADDR2_10_3));
785
786                 ret = lan78xx_write_reg(dev, OTP_FUNC_CMD, OTP_FUNC_CMD_READ_);
787                 ret = lan78xx_write_reg(dev, OTP_CMD_GO, OTP_CMD_GO_GO_);
788
789                 timeout = jiffies + HZ;
790                 do {
791                         udelay(1);
792                         ret = lan78xx_read_reg(dev, OTP_STATUS, &buf);
793                         if (time_after(jiffies, timeout)) {
794                                 netdev_warn(dev->net,
795                                             "timeout on OTP_STATUS");
796                                 return -EIO;
797                         }
798                 } while (buf & OTP_STATUS_BUSY_);
799
800                 ret = lan78xx_read_reg(dev, OTP_RD_DATA, &buf);
801
802                 data[i] = (u8)(buf & 0xFF);
803         }
804
805         return 0;
806 }
807
808 static int lan78xx_write_raw_otp(struct lan78xx_net *dev, u32 offset,
809                                  u32 length, u8 *data)
810 {
811         int i;
812         int ret;
813         u32 buf;
814         unsigned long timeout;
815
816         ret = lan78xx_read_reg(dev, OTP_PWR_DN, &buf);
817
818         if (buf & OTP_PWR_DN_PWRDN_N_) {
819                 /* clear it and wait to be cleared */
820                 ret = lan78xx_write_reg(dev, OTP_PWR_DN, 0);
821
822                 timeout = jiffies + HZ;
823                 do {
824                         udelay(1);
825                         ret = lan78xx_read_reg(dev, OTP_PWR_DN, &buf);
826                         if (time_after(jiffies, timeout)) {
827                                 netdev_warn(dev->net,
828                                             "timeout on OTP_PWR_DN completion");
829                                 return -EIO;
830                         }
831                 } while (buf & OTP_PWR_DN_PWRDN_N_);
832         }
833
834         /* set to BYTE program mode */
835         ret = lan78xx_write_reg(dev, OTP_PRGM_MODE, OTP_PRGM_MODE_BYTE_);
836
837         for (i = 0; i < length; i++) {
838                 ret = lan78xx_write_reg(dev, OTP_ADDR1,
839                                         ((offset + i) >> 8) & OTP_ADDR1_15_11);
840                 ret = lan78xx_write_reg(dev, OTP_ADDR2,
841                                         ((offset + i) & OTP_ADDR2_10_3));
842                 ret = lan78xx_write_reg(dev, OTP_PRGM_DATA, data[i]);
843                 ret = lan78xx_write_reg(dev, OTP_TST_CMD, OTP_TST_CMD_PRGVRFY_);
844                 ret = lan78xx_write_reg(dev, OTP_CMD_GO, OTP_CMD_GO_GO_);
845
846                 timeout = jiffies + HZ;
847                 do {
848                         udelay(1);
849                         ret = lan78xx_read_reg(dev, OTP_STATUS, &buf);
850                         if (time_after(jiffies, timeout)) {
851                                 netdev_warn(dev->net,
852                                             "Timeout on OTP_STATUS completion");
853                                 return -EIO;
854                         }
855                 } while (buf & OTP_STATUS_BUSY_);
856         }
857
858         return 0;
859 }
860
861 static int lan78xx_read_otp(struct lan78xx_net *dev, u32 offset,
862                             u32 length, u8 *data)
863 {
864         u8 sig;
865         int ret;
866
867         ret = lan78xx_read_raw_otp(dev, 0, 1, &sig);
868
869         if (ret == 0) {
870                 if (sig == OTP_INDICATOR_1)
871                         offset = offset;
872                 else if (sig == OTP_INDICATOR_2)
873                         offset += 0x100;
874                 else
875                         ret = -EINVAL;
876                 ret = lan78xx_read_raw_otp(dev, offset, length, data);
877         }
878
879         return ret;
880 }
881
882 static int lan78xx_dataport_wait_not_busy(struct lan78xx_net *dev)
883 {
884         int i, ret;
885
886         for (i = 0; i < 100; i++) {
887                 u32 dp_sel;
888
889                 ret = lan78xx_read_reg(dev, DP_SEL, &dp_sel);
890                 if (unlikely(ret < 0))
891                         return -EIO;
892
893                 if (dp_sel & DP_SEL_DPRDY_)
894                         return 0;
895
896                 usleep_range(40, 100);
897         }
898
899         netdev_warn(dev->net, "lan78xx_dataport_wait_not_busy timed out");
900
901         return -EIO;
902 }
903
904 static int lan78xx_dataport_write(struct lan78xx_net *dev, u32 ram_select,
905                                   u32 addr, u32 length, u32 *buf)
906 {
907         struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
908         u32 dp_sel;
909         int i, ret;
910
911         if (usb_autopm_get_interface(dev->intf) < 0)
912                         return 0;
913
914         mutex_lock(&pdata->dataport_mutex);
915
916         ret = lan78xx_dataport_wait_not_busy(dev);
917         if (ret < 0)
918                 goto done;
919
920         ret = lan78xx_read_reg(dev, DP_SEL, &dp_sel);
921
922         dp_sel &= ~DP_SEL_RSEL_MASK_;
923         dp_sel |= ram_select;
924         ret = lan78xx_write_reg(dev, DP_SEL, dp_sel);
925
926         for (i = 0; i < length; i++) {
927                 ret = lan78xx_write_reg(dev, DP_ADDR, addr + i);
928
929                 ret = lan78xx_write_reg(dev, DP_DATA, buf[i]);
930
931                 ret = lan78xx_write_reg(dev, DP_CMD, DP_CMD_WRITE_);
932
933                 ret = lan78xx_dataport_wait_not_busy(dev);
934                 if (ret < 0)
935                         goto done;
936         }
937
938 done:
939         mutex_unlock(&pdata->dataport_mutex);
940         usb_autopm_put_interface(dev->intf);
941
942         return ret;
943 }
944
945 static void lan78xx_set_addr_filter(struct lan78xx_priv *pdata,
946                                     int index, u8 addr[ETH_ALEN])
947 {
948         u32     temp;
949
950         if ((pdata) && (index > 0) && (index < NUM_OF_MAF)) {
951                 temp = addr[3];
952                 temp = addr[2] | (temp << 8);
953                 temp = addr[1] | (temp << 8);
954                 temp = addr[0] | (temp << 8);
955                 pdata->pfilter_table[index][1] = temp;
956                 temp = addr[5];
957                 temp = addr[4] | (temp << 8);
958                 temp |= MAF_HI_VALID_ | MAF_HI_TYPE_DST_;
959                 pdata->pfilter_table[index][0] = temp;
960         }
961 }
962
963 /* returns hash bit number for given MAC address */
964 static inline u32 lan78xx_hash(char addr[ETH_ALEN])
965 {
966         return (ether_crc(ETH_ALEN, addr) >> 23) & 0x1ff;
967 }
968
969 static void lan78xx_deferred_multicast_write(struct work_struct *param)
970 {
971         struct lan78xx_priv *pdata =
972                         container_of(param, struct lan78xx_priv, set_multicast);
973         struct lan78xx_net *dev = pdata->dev;
974         int i;
975         int ret;
976
977         netif_dbg(dev, drv, dev->net, "deferred multicast write 0x%08x\n",
978                   pdata->rfe_ctl);
979
980         lan78xx_dataport_write(dev, DP_SEL_RSEL_VLAN_DA_, DP_SEL_VHF_VLAN_LEN,
981                                DP_SEL_VHF_HASH_LEN, pdata->mchash_table);
982
983         for (i = 1; i < NUM_OF_MAF; i++) {
984                 ret = lan78xx_write_reg(dev, MAF_HI(i), 0);
985                 ret = lan78xx_write_reg(dev, MAF_LO(i),
986                                         pdata->pfilter_table[i][1]);
987                 ret = lan78xx_write_reg(dev, MAF_HI(i),
988                                         pdata->pfilter_table[i][0]);
989         }
990
991         ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl);
992 }
993
994 static void lan78xx_set_multicast(struct net_device *netdev)
995 {
996         struct lan78xx_net *dev = netdev_priv(netdev);
997         struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
998         unsigned long flags;
999         int i;
1000
1001         spin_lock_irqsave(&pdata->rfe_ctl_lock, flags);
1002
1003         pdata->rfe_ctl &= ~(RFE_CTL_UCAST_EN_ | RFE_CTL_MCAST_EN_ |
1004                             RFE_CTL_DA_PERFECT_ | RFE_CTL_MCAST_HASH_);
1005
1006         for (i = 0; i < DP_SEL_VHF_HASH_LEN; i++)
1007                         pdata->mchash_table[i] = 0;
1008         /* pfilter_table[0] has own HW address */
1009         for (i = 1; i < NUM_OF_MAF; i++) {
1010                         pdata->pfilter_table[i][0] =
1011                         pdata->pfilter_table[i][1] = 0;
1012         }
1013
1014         pdata->rfe_ctl |= RFE_CTL_BCAST_EN_;
1015
1016         if (dev->net->flags & IFF_PROMISC) {
1017                 netif_dbg(dev, drv, dev->net, "promiscuous mode enabled");
1018                 pdata->rfe_ctl |= RFE_CTL_MCAST_EN_ | RFE_CTL_UCAST_EN_;
1019         } else {
1020                 if (dev->net->flags & IFF_ALLMULTI) {
1021                         netif_dbg(dev, drv, dev->net,
1022                                   "receive all multicast enabled");
1023                         pdata->rfe_ctl |= RFE_CTL_MCAST_EN_;
1024                 }
1025         }
1026
1027         if (netdev_mc_count(dev->net)) {
1028                 struct netdev_hw_addr *ha;
1029                 int i;
1030
1031                 netif_dbg(dev, drv, dev->net, "receive multicast hash filter");
1032
1033                 pdata->rfe_ctl |= RFE_CTL_DA_PERFECT_;
1034
1035                 i = 1;
1036                 netdev_for_each_mc_addr(ha, netdev) {
1037                         /* set first 32 into Perfect Filter */
1038                         if (i < 33) {
1039                                 lan78xx_set_addr_filter(pdata, i, ha->addr);
1040                         } else {
1041                                 u32 bitnum = lan78xx_hash(ha->addr);
1042
1043                                 pdata->mchash_table[bitnum / 32] |=
1044                                                         (1 << (bitnum % 32));
1045                                 pdata->rfe_ctl |= RFE_CTL_MCAST_HASH_;
1046                         }
1047                         i++;
1048                 }
1049         }
1050
1051         spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags);
1052
1053         /* defer register writes to a sleepable context */
1054         schedule_work(&pdata->set_multicast);
1055 }
1056
1057 static int lan78xx_update_flowcontrol(struct lan78xx_net *dev, u8 duplex,
1058                                       u16 lcladv, u16 rmtadv)
1059 {
1060         u32 flow = 0, fct_flow = 0;
1061         int ret;
1062         u8 cap;
1063
1064         if (dev->fc_autoneg)
1065                 cap = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
1066         else
1067                 cap = dev->fc_request_control;
1068
1069         if (cap & FLOW_CTRL_TX)
1070                 flow |= (FLOW_CR_TX_FCEN_ | 0xFFFF);
1071
1072         if (cap & FLOW_CTRL_RX)
1073                 flow |= FLOW_CR_RX_FCEN_;
1074
1075         if (dev->udev->speed == USB_SPEED_SUPER)
1076                 fct_flow = 0x817;
1077         else if (dev->udev->speed == USB_SPEED_HIGH)
1078                 fct_flow = 0x211;
1079
1080         netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s",
1081                   (cap & FLOW_CTRL_RX ? "enabled" : "disabled"),
1082                   (cap & FLOW_CTRL_TX ? "enabled" : "disabled"));
1083
1084         ret = lan78xx_write_reg(dev, FCT_FLOW, fct_flow);
1085
1086         /* threshold value should be set before enabling flow */
1087         ret = lan78xx_write_reg(dev, FLOW, flow);
1088
1089         return 0;
1090 }
1091
1092 static int lan78xx_link_reset(struct lan78xx_net *dev)
1093 {
1094         struct phy_device *phydev = dev->net->phydev;
1095         struct ethtool_cmd ecmd = { .cmd = ETHTOOL_GSET };
1096         int ladv, radv, ret;
1097         u32 buf;
1098
1099         /* clear PHY interrupt status */
1100         ret = phy_read(phydev, LAN88XX_INT_STS);
1101         if (unlikely(ret < 0))
1102                 return -EIO;
1103
1104         /* clear LAN78xx interrupt status */
1105         ret = lan78xx_write_reg(dev, INT_STS, INT_STS_PHY_INT_);
1106         if (unlikely(ret < 0))
1107                 return -EIO;
1108
1109         phy_read_status(phydev);
1110
1111         if (!phydev->link && dev->link_on) {
1112                 dev->link_on = false;
1113
1114                 /* reset MAC */
1115                 ret = lan78xx_read_reg(dev, MAC_CR, &buf);
1116                 if (unlikely(ret < 0))
1117                         return -EIO;
1118                 buf |= MAC_CR_RST_;
1119                 ret = lan78xx_write_reg(dev, MAC_CR, buf);
1120                 if (unlikely(ret < 0))
1121                         return -EIO;
1122
1123                 phy_mac_interrupt(phydev, 0);
1124
1125                 del_timer(&dev->stat_monitor);
1126         } else if (phydev->link && !dev->link_on) {
1127                 dev->link_on = true;
1128
1129                 phy_ethtool_gset(phydev, &ecmd);
1130
1131                 ret = phy_read(phydev, LAN88XX_INT_STS);
1132
1133                 if (dev->udev->speed == USB_SPEED_SUPER) {
1134                         if (ethtool_cmd_speed(&ecmd) == 1000) {
1135                                 /* disable U2 */
1136                                 ret = lan78xx_read_reg(dev, USB_CFG1, &buf);
1137                                 buf &= ~USB_CFG1_DEV_U2_INIT_EN_;
1138                                 ret = lan78xx_write_reg(dev, USB_CFG1, buf);
1139                                 /* enable U1 */
1140                                 ret = lan78xx_read_reg(dev, USB_CFG1, &buf);
1141                                 buf |= USB_CFG1_DEV_U1_INIT_EN_;
1142                                 ret = lan78xx_write_reg(dev, USB_CFG1, buf);
1143                         } else {
1144                                 /* enable U1 & U2 */
1145                                 ret = lan78xx_read_reg(dev, USB_CFG1, &buf);
1146                                 buf |= USB_CFG1_DEV_U2_INIT_EN_;
1147                                 buf |= USB_CFG1_DEV_U1_INIT_EN_;
1148                                 ret = lan78xx_write_reg(dev, USB_CFG1, buf);
1149                         }
1150                 }
1151
1152                 ladv = phy_read(phydev, MII_ADVERTISE);
1153                 if (ladv < 0)
1154                         return ladv;
1155
1156                 radv = phy_read(phydev, MII_LPA);
1157                 if (radv < 0)
1158                         return radv;
1159
1160                 netif_dbg(dev, link, dev->net,
1161                           "speed: %u duplex: %d anadv: 0x%04x anlpa: 0x%04x",
1162                           ethtool_cmd_speed(&ecmd), ecmd.duplex, ladv, radv);
1163
1164                 ret = lan78xx_update_flowcontrol(dev, ecmd.duplex, ladv, radv);
1165                 phy_mac_interrupt(phydev, 1);
1166
1167                 if (!timer_pending(&dev->stat_monitor)) {
1168                         dev->delta = 1;
1169                         mod_timer(&dev->stat_monitor,
1170                                   jiffies + STAT_UPDATE_TIMER);
1171                 }
1172         }
1173
1174         return ret;
1175 }
1176
1177 /* some work can't be done in tasklets, so we use keventd
1178  *
1179  * NOTE:  annoying asymmetry:  if it's active, schedule_work() fails,
1180  * but tasklet_schedule() doesn't.      hope the failure is rare.
1181  */
1182 static void lan78xx_defer_kevent(struct lan78xx_net *dev, int work)
1183 {
1184         set_bit(work, &dev->flags);
1185         if (!schedule_delayed_work(&dev->wq, 0))
1186                 netdev_err(dev->net, "kevent %d may have been dropped\n", work);
1187 }
1188
1189 static void lan78xx_status(struct lan78xx_net *dev, struct urb *urb)
1190 {
1191         u32 intdata;
1192
1193         if (urb->actual_length != 4) {
1194                 netdev_warn(dev->net,
1195                             "unexpected urb length %d", urb->actual_length);
1196                 return;
1197         }
1198
1199         memcpy(&intdata, urb->transfer_buffer, 4);
1200         le32_to_cpus(&intdata);
1201
1202         if (intdata & INT_ENP_PHY_INT) {
1203                 netif_dbg(dev, link, dev->net, "PHY INTR: 0x%08x\n", intdata);
1204                           lan78xx_defer_kevent(dev, EVENT_LINK_RESET);
1205         } else
1206                 netdev_warn(dev->net,
1207                             "unexpected interrupt: 0x%08x\n", intdata);
1208 }
1209
1210 static int lan78xx_ethtool_get_eeprom_len(struct net_device *netdev)
1211 {
1212         return MAX_EEPROM_SIZE;
1213 }
1214
1215 static int lan78xx_ethtool_get_eeprom(struct net_device *netdev,
1216                                       struct ethtool_eeprom *ee, u8 *data)
1217 {
1218         struct lan78xx_net *dev = netdev_priv(netdev);
1219
1220         ee->magic = LAN78XX_EEPROM_MAGIC;
1221
1222         return lan78xx_read_raw_eeprom(dev, ee->offset, ee->len, data);
1223 }
1224
1225 static int lan78xx_ethtool_set_eeprom(struct net_device *netdev,
1226                                       struct ethtool_eeprom *ee, u8 *data)
1227 {
1228         struct lan78xx_net *dev = netdev_priv(netdev);
1229
1230         /* Allow entire eeprom update only */
1231         if ((ee->magic == LAN78XX_EEPROM_MAGIC) &&
1232             (ee->offset == 0) &&
1233             (ee->len == 512) &&
1234             (data[0] == EEPROM_INDICATOR))
1235                 return lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data);
1236         else if ((ee->magic == LAN78XX_OTP_MAGIC) &&
1237                  (ee->offset == 0) &&
1238                  (ee->len == 512) &&
1239                  (data[0] == OTP_INDICATOR_1))
1240                 return lan78xx_write_raw_otp(dev, ee->offset, ee->len, data);
1241
1242         return -EINVAL;
1243 }
1244
1245 static void lan78xx_get_strings(struct net_device *netdev, u32 stringset,
1246                                 u8 *data)
1247 {
1248         if (stringset == ETH_SS_STATS)
1249                 memcpy(data, lan78xx_gstrings, sizeof(lan78xx_gstrings));
1250 }
1251
1252 static int lan78xx_get_sset_count(struct net_device *netdev, int sset)
1253 {
1254         if (sset == ETH_SS_STATS)
1255                 return ARRAY_SIZE(lan78xx_gstrings);
1256         else
1257                 return -EOPNOTSUPP;
1258 }
1259
1260 static void lan78xx_get_stats(struct net_device *netdev,
1261                               struct ethtool_stats *stats, u64 *data)
1262 {
1263         struct lan78xx_net *dev = netdev_priv(netdev);
1264
1265         lan78xx_update_stats(dev);
1266
1267         mutex_lock(&dev->stats.access_lock);
1268         memcpy(data, &dev->stats.curr_stat, sizeof(dev->stats.curr_stat));
1269         mutex_unlock(&dev->stats.access_lock);
1270 }
1271
1272 static void lan78xx_get_wol(struct net_device *netdev,
1273                             struct ethtool_wolinfo *wol)
1274 {
1275         struct lan78xx_net *dev = netdev_priv(netdev);
1276         int ret;
1277         u32 buf;
1278         struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
1279
1280         if (usb_autopm_get_interface(dev->intf) < 0)
1281                         return;
1282
1283         ret = lan78xx_read_reg(dev, USB_CFG0, &buf);
1284         if (unlikely(ret < 0)) {
1285                 wol->supported = 0;
1286                 wol->wolopts = 0;
1287         } else {
1288                 if (buf & USB_CFG_RMT_WKP_) {
1289                         wol->supported = WAKE_ALL;
1290                         wol->wolopts = pdata->wol;
1291                 } else {
1292                         wol->supported = 0;
1293                         wol->wolopts = 0;
1294                 }
1295         }
1296
1297         usb_autopm_put_interface(dev->intf);
1298 }
1299
1300 static int lan78xx_set_wol(struct net_device *netdev,
1301                            struct ethtool_wolinfo *wol)
1302 {
1303         struct lan78xx_net *dev = netdev_priv(netdev);
1304         struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
1305         int ret;
1306
1307         ret = usb_autopm_get_interface(dev->intf);
1308         if (ret < 0)
1309                 return ret;
1310
1311         pdata->wol = 0;
1312         if (wol->wolopts & WAKE_UCAST)
1313                 pdata->wol |= WAKE_UCAST;
1314         if (wol->wolopts & WAKE_MCAST)
1315                 pdata->wol |= WAKE_MCAST;
1316         if (wol->wolopts & WAKE_BCAST)
1317                 pdata->wol |= WAKE_BCAST;
1318         if (wol->wolopts & WAKE_MAGIC)
1319                 pdata->wol |= WAKE_MAGIC;
1320         if (wol->wolopts & WAKE_PHY)
1321                 pdata->wol |= WAKE_PHY;
1322         if (wol->wolopts & WAKE_ARP)
1323                 pdata->wol |= WAKE_ARP;
1324
1325         device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts);
1326
1327         phy_ethtool_set_wol(netdev->phydev, wol);
1328
1329         usb_autopm_put_interface(dev->intf);
1330
1331         return ret;
1332 }
1333
1334 static int lan78xx_get_eee(struct net_device *net, struct ethtool_eee *edata)
1335 {
1336         struct lan78xx_net *dev = netdev_priv(net);
1337         struct phy_device *phydev = net->phydev;
1338         int ret;
1339         u32 buf;
1340
1341         ret = usb_autopm_get_interface(dev->intf);
1342         if (ret < 0)
1343                 return ret;
1344
1345         ret = phy_ethtool_get_eee(phydev, edata);
1346         if (ret < 0)
1347                 goto exit;
1348
1349         ret = lan78xx_read_reg(dev, MAC_CR, &buf);
1350         if (buf & MAC_CR_EEE_EN_) {
1351                 edata->eee_enabled = true;
1352                 edata->eee_active = !!(edata->advertised &
1353                                        edata->lp_advertised);
1354                 edata->tx_lpi_enabled = true;
1355                 /* EEE_TX_LPI_REQ_DLY & tx_lpi_timer are same uSec unit */
1356                 ret = lan78xx_read_reg(dev, EEE_TX_LPI_REQ_DLY, &buf);
1357                 edata->tx_lpi_timer = buf;
1358         } else {
1359                 edata->eee_enabled = false;
1360                 edata->eee_active = false;
1361                 edata->tx_lpi_enabled = false;
1362                 edata->tx_lpi_timer = 0;
1363         }
1364
1365         ret = 0;
1366 exit:
1367         usb_autopm_put_interface(dev->intf);
1368
1369         return ret;
1370 }
1371
1372 static int lan78xx_set_eee(struct net_device *net, struct ethtool_eee *edata)
1373 {
1374         struct lan78xx_net *dev = netdev_priv(net);
1375         int ret;
1376         u32 buf;
1377
1378         ret = usb_autopm_get_interface(dev->intf);
1379         if (ret < 0)
1380                 return ret;
1381
1382         if (edata->eee_enabled) {
1383                 ret = lan78xx_read_reg(dev, MAC_CR, &buf);
1384                 buf |= MAC_CR_EEE_EN_;
1385                 ret = lan78xx_write_reg(dev, MAC_CR, buf);
1386
1387                 phy_ethtool_set_eee(net->phydev, edata);
1388
1389                 buf = (u32)edata->tx_lpi_timer;
1390                 ret = lan78xx_write_reg(dev, EEE_TX_LPI_REQ_DLY, buf);
1391         } else {
1392                 ret = lan78xx_read_reg(dev, MAC_CR, &buf);
1393                 buf &= ~MAC_CR_EEE_EN_;
1394                 ret = lan78xx_write_reg(dev, MAC_CR, buf);
1395         }
1396
1397         usb_autopm_put_interface(dev->intf);
1398
1399         return 0;
1400 }
1401
1402 static u32 lan78xx_get_link(struct net_device *net)
1403 {
1404         phy_read_status(net->phydev);
1405
1406         return net->phydev->link;
1407 }
1408
1409 static int lan78xx_nway_reset(struct net_device *net)
1410 {
1411         return phy_start_aneg(net->phydev);
1412 }
1413
1414 static void lan78xx_get_drvinfo(struct net_device *net,
1415                                 struct ethtool_drvinfo *info)
1416 {
1417         struct lan78xx_net *dev = netdev_priv(net);
1418
1419         strncpy(info->driver, DRIVER_NAME, sizeof(info->driver));
1420         strncpy(info->version, DRIVER_VERSION, sizeof(info->version));
1421         usb_make_path(dev->udev, info->bus_info, sizeof(info->bus_info));
1422 }
1423
1424 static u32 lan78xx_get_msglevel(struct net_device *net)
1425 {
1426         struct lan78xx_net *dev = netdev_priv(net);
1427
1428         return dev->msg_enable;
1429 }
1430
1431 static void lan78xx_set_msglevel(struct net_device *net, u32 level)
1432 {
1433         struct lan78xx_net *dev = netdev_priv(net);
1434
1435         dev->msg_enable = level;
1436 }
1437
1438 static int lan78xx_get_mdix_status(struct net_device *net)
1439 {
1440         struct phy_device *phydev = net->phydev;
1441         int buf;
1442
1443         phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS, LAN88XX_EXT_PAGE_SPACE_1);
1444         buf = phy_read(phydev, LAN88XX_EXT_MODE_CTRL);
1445         phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS, LAN88XX_EXT_PAGE_SPACE_0);
1446
1447         return buf;
1448 }
1449
1450 static void lan78xx_set_mdix_status(struct net_device *net, __u8 mdix_ctrl)
1451 {
1452         struct lan78xx_net *dev = netdev_priv(net);
1453         struct phy_device *phydev = net->phydev;
1454         int buf;
1455
1456         if (mdix_ctrl == ETH_TP_MDI) {
1457                 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
1458                           LAN88XX_EXT_PAGE_SPACE_1);
1459                 buf = phy_read(phydev, LAN88XX_EXT_MODE_CTRL);
1460                 buf &= ~LAN88XX_EXT_MODE_CTRL_MDIX_MASK_;
1461                 phy_write(phydev, LAN88XX_EXT_MODE_CTRL,
1462                           buf | LAN88XX_EXT_MODE_CTRL_MDI_);
1463                 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
1464                           LAN88XX_EXT_PAGE_SPACE_0);
1465         } else if (mdix_ctrl == ETH_TP_MDI_X) {
1466                 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
1467                           LAN88XX_EXT_PAGE_SPACE_1);
1468                 buf = phy_read(phydev, LAN88XX_EXT_MODE_CTRL);
1469                 buf &= ~LAN88XX_EXT_MODE_CTRL_MDIX_MASK_;
1470                 phy_write(phydev, LAN88XX_EXT_MODE_CTRL,
1471                           buf | LAN88XX_EXT_MODE_CTRL_MDI_X_);
1472                 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
1473                           LAN88XX_EXT_PAGE_SPACE_0);
1474         } else if (mdix_ctrl == ETH_TP_MDI_AUTO) {
1475                 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
1476                           LAN88XX_EXT_PAGE_SPACE_1);
1477                 buf = phy_read(phydev, LAN88XX_EXT_MODE_CTRL);
1478                 buf &= ~LAN88XX_EXT_MODE_CTRL_MDIX_MASK_;
1479                 phy_write(phydev, LAN88XX_EXT_MODE_CTRL,
1480                           buf | LAN88XX_EXT_MODE_CTRL_AUTO_MDIX_);
1481                 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
1482                           LAN88XX_EXT_PAGE_SPACE_0);
1483         }
1484         dev->mdix_ctrl = mdix_ctrl;
1485 }
1486
1487 static int lan78xx_get_settings(struct net_device *net, struct ethtool_cmd *cmd)
1488 {
1489         struct lan78xx_net *dev = netdev_priv(net);
1490         struct phy_device *phydev = net->phydev;
1491         int ret;
1492         int buf;
1493
1494         ret = usb_autopm_get_interface(dev->intf);
1495         if (ret < 0)
1496                 return ret;
1497
1498         ret = phy_ethtool_gset(phydev, cmd);
1499
1500         buf = lan78xx_get_mdix_status(net);
1501
1502         buf &= LAN88XX_EXT_MODE_CTRL_MDIX_MASK_;
1503         if (buf == LAN88XX_EXT_MODE_CTRL_AUTO_MDIX_) {
1504                 cmd->eth_tp_mdix = ETH_TP_MDI_AUTO;
1505                 cmd->eth_tp_mdix_ctrl = ETH_TP_MDI_AUTO;
1506         } else if (buf == LAN88XX_EXT_MODE_CTRL_MDI_) {
1507                 cmd->eth_tp_mdix = ETH_TP_MDI;
1508                 cmd->eth_tp_mdix_ctrl = ETH_TP_MDI;
1509         } else if (buf == LAN88XX_EXT_MODE_CTRL_MDI_X_) {
1510                 cmd->eth_tp_mdix = ETH_TP_MDI_X;
1511                 cmd->eth_tp_mdix_ctrl = ETH_TP_MDI_X;
1512         }
1513
1514         usb_autopm_put_interface(dev->intf);
1515
1516         return ret;
1517 }
1518
1519 static int lan78xx_set_settings(struct net_device *net, struct ethtool_cmd *cmd)
1520 {
1521         struct lan78xx_net *dev = netdev_priv(net);
1522         struct phy_device *phydev = net->phydev;
1523         int ret = 0;
1524         int temp;
1525
1526         ret = usb_autopm_get_interface(dev->intf);
1527         if (ret < 0)
1528                 return ret;
1529
1530         if (dev->mdix_ctrl != cmd->eth_tp_mdix_ctrl) {
1531                 lan78xx_set_mdix_status(net, cmd->eth_tp_mdix_ctrl);
1532         }
1533
1534         /* change speed & duplex */
1535         ret = phy_ethtool_sset(phydev, cmd);
1536
1537         if (!cmd->autoneg) {
1538                 /* force link down */
1539                 temp = phy_read(phydev, MII_BMCR);
1540                 phy_write(phydev, MII_BMCR, temp | BMCR_LOOPBACK);
1541                 mdelay(1);
1542                 phy_write(phydev, MII_BMCR, temp);
1543         }
1544
1545         usb_autopm_put_interface(dev->intf);
1546
1547         return ret;
1548 }
1549
1550 static void lan78xx_get_pause(struct net_device *net,
1551                               struct ethtool_pauseparam *pause)
1552 {
1553         struct lan78xx_net *dev = netdev_priv(net);
1554         struct phy_device *phydev = net->phydev;
1555         struct ethtool_cmd ecmd = { .cmd = ETHTOOL_GSET };
1556
1557         phy_ethtool_gset(phydev, &ecmd);
1558
1559         pause->autoneg = dev->fc_autoneg;
1560
1561         if (dev->fc_request_control & FLOW_CTRL_TX)
1562                 pause->tx_pause = 1;
1563
1564         if (dev->fc_request_control & FLOW_CTRL_RX)
1565                 pause->rx_pause = 1;
1566 }
1567
1568 static int lan78xx_set_pause(struct net_device *net,
1569                              struct ethtool_pauseparam *pause)
1570 {
1571         struct lan78xx_net *dev = netdev_priv(net);
1572         struct phy_device *phydev = net->phydev;
1573         struct ethtool_cmd ecmd = { .cmd = ETHTOOL_GSET };
1574         int ret;
1575
1576         phy_ethtool_gset(phydev, &ecmd);
1577
1578         if (pause->autoneg && !ecmd.autoneg) {
1579                 ret = -EINVAL;
1580                 goto exit;
1581         }
1582
1583         dev->fc_request_control = 0;
1584         if (pause->rx_pause)
1585                 dev->fc_request_control |= FLOW_CTRL_RX;
1586
1587         if (pause->tx_pause)
1588                 dev->fc_request_control |= FLOW_CTRL_TX;
1589
1590         if (ecmd.autoneg) {
1591                 u32 mii_adv;
1592
1593                 ecmd.advertising &= ~(ADVERTISED_Pause | ADVERTISED_Asym_Pause);
1594                 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control);
1595                 ecmd.advertising |= mii_adv_to_ethtool_adv_t(mii_adv);
1596                 phy_ethtool_sset(phydev, &ecmd);
1597         }
1598
1599         dev->fc_autoneg = pause->autoneg;
1600
1601         ret = 0;
1602 exit:
1603         return ret;
1604 }
1605
1606 static const struct ethtool_ops lan78xx_ethtool_ops = {
1607         .get_link       = lan78xx_get_link,
1608         .nway_reset     = lan78xx_nway_reset,
1609         .get_drvinfo    = lan78xx_get_drvinfo,
1610         .get_msglevel   = lan78xx_get_msglevel,
1611         .set_msglevel   = lan78xx_set_msglevel,
1612         .get_settings   = lan78xx_get_settings,
1613         .set_settings   = lan78xx_set_settings,
1614         .get_eeprom_len = lan78xx_ethtool_get_eeprom_len,
1615         .get_eeprom     = lan78xx_ethtool_get_eeprom,
1616         .set_eeprom     = lan78xx_ethtool_set_eeprom,
1617         .get_ethtool_stats = lan78xx_get_stats,
1618         .get_sset_count = lan78xx_get_sset_count,
1619         .get_strings    = lan78xx_get_strings,
1620         .get_wol        = lan78xx_get_wol,
1621         .set_wol        = lan78xx_set_wol,
1622         .get_eee        = lan78xx_get_eee,
1623         .set_eee        = lan78xx_set_eee,
1624         .get_pauseparam = lan78xx_get_pause,
1625         .set_pauseparam = lan78xx_set_pause,
1626 };
1627
1628 static int lan78xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd)
1629 {
1630         if (!netif_running(netdev))
1631                 return -EINVAL;
1632
1633         return phy_mii_ioctl(netdev->phydev, rq, cmd);
1634 }
1635
1636 static void lan78xx_init_mac_address(struct lan78xx_net *dev)
1637 {
1638         u32 addr_lo, addr_hi;
1639         int ret;
1640         u8 addr[6];
1641
1642         ret = lan78xx_read_reg(dev, RX_ADDRL, &addr_lo);
1643         ret = lan78xx_read_reg(dev, RX_ADDRH, &addr_hi);
1644
1645         addr[0] = addr_lo & 0xFF;
1646         addr[1] = (addr_lo >> 8) & 0xFF;
1647         addr[2] = (addr_lo >> 16) & 0xFF;
1648         addr[3] = (addr_lo >> 24) & 0xFF;
1649         addr[4] = addr_hi & 0xFF;
1650         addr[5] = (addr_hi >> 8) & 0xFF;
1651
1652         if (!is_valid_ether_addr(addr)) {
1653                 /* reading mac address from EEPROM or OTP */
1654                 if ((lan78xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN,
1655                                          addr) == 0) ||
1656                     (lan78xx_read_otp(dev, EEPROM_MAC_OFFSET, ETH_ALEN,
1657                                       addr) == 0)) {
1658                         if (is_valid_ether_addr(addr)) {
1659                                 /* eeprom values are valid so use them */
1660                                 netif_dbg(dev, ifup, dev->net,
1661                                           "MAC address read from EEPROM");
1662                         } else {
1663                                 /* generate random MAC */
1664                                 random_ether_addr(addr);
1665                                 netif_dbg(dev, ifup, dev->net,
1666                                           "MAC address set to random addr");
1667                         }
1668
1669                         addr_lo = addr[0] | (addr[1] << 8) |
1670                                   (addr[2] << 16) | (addr[3] << 24);
1671                         addr_hi = addr[4] | (addr[5] << 8);
1672
1673                         ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo);
1674                         ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi);
1675                 } else {
1676                         /* generate random MAC */
1677                         random_ether_addr(addr);
1678                         netif_dbg(dev, ifup, dev->net,
1679                                   "MAC address set to random addr");
1680                 }
1681         }
1682
1683         ret = lan78xx_write_reg(dev, MAF_LO(0), addr_lo);
1684         ret = lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_);
1685
1686         ether_addr_copy(dev->net->dev_addr, addr);
1687 }
1688
1689 /* MDIO read and write wrappers for phylib */
1690 static int lan78xx_mdiobus_read(struct mii_bus *bus, int phy_id, int idx)
1691 {
1692         struct lan78xx_net *dev = bus->priv;
1693         u32 val, addr;
1694         int ret;
1695
1696         ret = usb_autopm_get_interface(dev->intf);
1697         if (ret < 0)
1698                 return ret;
1699
1700         mutex_lock(&dev->phy_mutex);
1701
1702         /* confirm MII not busy */
1703         ret = lan78xx_phy_wait_not_busy(dev);
1704         if (ret < 0)
1705                 goto done;
1706
1707         /* set the address, index & direction (read from PHY) */
1708         addr = mii_access(phy_id, idx, MII_READ);
1709         ret = lan78xx_write_reg(dev, MII_ACC, addr);
1710
1711         ret = lan78xx_phy_wait_not_busy(dev);
1712         if (ret < 0)
1713                 goto done;
1714
1715         ret = lan78xx_read_reg(dev, MII_DATA, &val);
1716
1717         ret = (int)(val & 0xFFFF);
1718
1719 done:
1720         mutex_unlock(&dev->phy_mutex);
1721         usb_autopm_put_interface(dev->intf);
1722         return ret;
1723 }
1724
1725 static int lan78xx_mdiobus_write(struct mii_bus *bus, int phy_id, int idx,
1726                                  u16 regval)
1727 {
1728         struct lan78xx_net *dev = bus->priv;
1729         u32 val, addr;
1730         int ret;
1731
1732         ret = usb_autopm_get_interface(dev->intf);
1733         if (ret < 0)
1734                 return ret;
1735
1736         mutex_lock(&dev->phy_mutex);
1737
1738         /* confirm MII not busy */
1739         ret = lan78xx_phy_wait_not_busy(dev);
1740         if (ret < 0)
1741                 goto done;
1742
1743         val = (u32)regval;
1744         ret = lan78xx_write_reg(dev, MII_DATA, val);
1745
1746         /* set the address, index & direction (write to PHY) */
1747         addr = mii_access(phy_id, idx, MII_WRITE);
1748         ret = lan78xx_write_reg(dev, MII_ACC, addr);
1749
1750         ret = lan78xx_phy_wait_not_busy(dev);
1751         if (ret < 0)
1752                 goto done;
1753
1754 done:
1755         mutex_unlock(&dev->phy_mutex);
1756         usb_autopm_put_interface(dev->intf);
1757         return 0;
1758 }
1759
1760 static int lan78xx_mdio_init(struct lan78xx_net *dev)
1761 {
1762         int ret;
1763
1764         dev->mdiobus = mdiobus_alloc();
1765         if (!dev->mdiobus) {
1766                 netdev_err(dev->net, "can't allocate MDIO bus\n");
1767                 return -ENOMEM;
1768         }
1769
1770         dev->mdiobus->priv = (void *)dev;
1771         dev->mdiobus->read = lan78xx_mdiobus_read;
1772         dev->mdiobus->write = lan78xx_mdiobus_write;
1773         dev->mdiobus->name = "lan78xx-mdiobus";
1774
1775         snprintf(dev->mdiobus->id, MII_BUS_ID_SIZE, "usb-%03d:%03d",
1776                  dev->udev->bus->busnum, dev->udev->devnum);
1777
1778         switch (dev->chipid) {
1779         case ID_REV_CHIP_ID_7800_:
1780         case ID_REV_CHIP_ID_7850_:
1781                 /* set to internal PHY id */
1782                 dev->mdiobus->phy_mask = ~(1 << 1);
1783                 break;
1784         }
1785
1786         ret = mdiobus_register(dev->mdiobus);
1787         if (ret) {
1788                 netdev_err(dev->net, "can't register MDIO bus\n");
1789                 goto exit1;
1790         }
1791
1792         netdev_dbg(dev->net, "registered mdiobus bus %s\n", dev->mdiobus->id);
1793         return 0;
1794 exit1:
1795         mdiobus_free(dev->mdiobus);
1796         return ret;
1797 }
1798
1799 static void lan78xx_remove_mdio(struct lan78xx_net *dev)
1800 {
1801         mdiobus_unregister(dev->mdiobus);
1802         mdiobus_free(dev->mdiobus);
1803 }
1804
1805 static void lan78xx_link_status_change(struct net_device *net)
1806 {
1807         struct phy_device *phydev = net->phydev;
1808         int ret, temp;
1809
1810         /* At forced 100 F/H mode, chip may fail to set mode correctly
1811          * when cable is switched between long(~50+m) and short one.
1812          * As workaround, set to 10 before setting to 100
1813          * at forced 100 F/H mode.
1814          */
1815         if (!phydev->autoneg && (phydev->speed == 100)) {
1816                 /* disable phy interrupt */
1817                 temp = phy_read(phydev, LAN88XX_INT_MASK);
1818                 temp &= ~LAN88XX_INT_MASK_MDINTPIN_EN_;
1819                 ret = phy_write(phydev, LAN88XX_INT_MASK, temp);
1820
1821                 temp = phy_read(phydev, MII_BMCR);
1822                 temp &= ~(BMCR_SPEED100 | BMCR_SPEED1000);
1823                 phy_write(phydev, MII_BMCR, temp); /* set to 10 first */
1824                 temp |= BMCR_SPEED100;
1825                 phy_write(phydev, MII_BMCR, temp); /* set to 100 later */
1826
1827                 /* clear pending interrupt generated while workaround */
1828                 temp = phy_read(phydev, LAN88XX_INT_STS);
1829
1830                 /* enable phy interrupt back */
1831                 temp = phy_read(phydev, LAN88XX_INT_MASK);
1832                 temp |= LAN88XX_INT_MASK_MDINTPIN_EN_;
1833                 ret = phy_write(phydev, LAN88XX_INT_MASK, temp);
1834         }
1835 }
1836
1837 static int lan78xx_phy_init(struct lan78xx_net *dev)
1838 {
1839         int ret;
1840         u32 mii_adv;
1841         struct phy_device *phydev = dev->net->phydev;
1842
1843         phydev = phy_find_first(dev->mdiobus);
1844         if (!phydev) {
1845                 netdev_err(dev->net, "no PHY found\n");
1846                 return -EIO;
1847         }
1848
1849         /* Enable PHY interrupts.
1850          * We handle our own interrupt
1851          */
1852         ret = phy_read(phydev, LAN88XX_INT_STS);
1853         ret = phy_write(phydev, LAN88XX_INT_MASK,
1854                         LAN88XX_INT_MASK_MDINTPIN_EN_ |
1855                         LAN88XX_INT_MASK_LINK_CHANGE_);
1856
1857         phydev->irq = PHY_IGNORE_INTERRUPT;
1858
1859         ret = phy_connect_direct(dev->net, phydev,
1860                                  lan78xx_link_status_change,
1861                                  PHY_INTERFACE_MODE_GMII);
1862         if (ret) {
1863                 netdev_err(dev->net, "can't attach PHY to %s\n",
1864                            dev->mdiobus->id);
1865                 return -EIO;
1866         }
1867
1868         /* set to AUTOMDIX */
1869         lan78xx_set_mdix_status(dev->net, ETH_TP_MDI_AUTO);
1870
1871         /* MAC doesn't support 1000T Half */
1872         phydev->supported &= ~SUPPORTED_1000baseT_Half;
1873
1874         /* support both flow controls */
1875         dev->fc_request_control = (FLOW_CTRL_RX | FLOW_CTRL_TX);
1876         phydev->advertising &= ~(ADVERTISED_Pause | ADVERTISED_Asym_Pause);
1877         mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control);
1878         phydev->advertising |= mii_adv_to_ethtool_adv_t(mii_adv);
1879
1880         genphy_config_aneg(phydev);
1881
1882         dev->fc_autoneg = phydev->autoneg;
1883
1884         phy_start(phydev);
1885
1886         netif_dbg(dev, ifup, dev->net, "phy initialised successfully");
1887
1888         return 0;
1889 }
1890
1891 static int lan78xx_set_rx_max_frame_length(struct lan78xx_net *dev, int size)
1892 {
1893         int ret = 0;
1894         u32 buf;
1895         bool rxenabled;
1896
1897         ret = lan78xx_read_reg(dev, MAC_RX, &buf);
1898
1899         rxenabled = ((buf & MAC_RX_RXEN_) != 0);
1900
1901         if (rxenabled) {
1902                 buf &= ~MAC_RX_RXEN_;
1903                 ret = lan78xx_write_reg(dev, MAC_RX, buf);
1904         }
1905
1906         /* add 4 to size for FCS */
1907         buf &= ~MAC_RX_MAX_SIZE_MASK_;
1908         buf |= (((size + 4) << MAC_RX_MAX_SIZE_SHIFT_) & MAC_RX_MAX_SIZE_MASK_);
1909
1910         ret = lan78xx_write_reg(dev, MAC_RX, buf);
1911
1912         if (rxenabled) {
1913                 buf |= MAC_RX_RXEN_;
1914                 ret = lan78xx_write_reg(dev, MAC_RX, buf);
1915         }
1916
1917         return 0;
1918 }
1919
1920 static int unlink_urbs(struct lan78xx_net *dev, struct sk_buff_head *q)
1921 {
1922         struct sk_buff *skb;
1923         unsigned long flags;
1924         int count = 0;
1925
1926         spin_lock_irqsave(&q->lock, flags);
1927         while (!skb_queue_empty(q)) {
1928                 struct skb_data *entry;
1929                 struct urb *urb;
1930                 int ret;
1931
1932                 skb_queue_walk(q, skb) {
1933                         entry = (struct skb_data *)skb->cb;
1934                         if (entry->state != unlink_start)
1935                                 goto found;
1936                 }
1937                 break;
1938 found:
1939                 entry->state = unlink_start;
1940                 urb = entry->urb;
1941
1942                 /* Get reference count of the URB to avoid it to be
1943                  * freed during usb_unlink_urb, which may trigger
1944                  * use-after-free problem inside usb_unlink_urb since
1945                  * usb_unlink_urb is always racing with .complete
1946                  * handler(include defer_bh).
1947                  */
1948                 usb_get_urb(urb);
1949                 spin_unlock_irqrestore(&q->lock, flags);
1950                 /* during some PM-driven resume scenarios,
1951                  * these (async) unlinks complete immediately
1952                  */
1953                 ret = usb_unlink_urb(urb);
1954                 if (ret != -EINPROGRESS && ret != 0)
1955                         netdev_dbg(dev->net, "unlink urb err, %d\n", ret);
1956                 else
1957                         count++;
1958                 usb_put_urb(urb);
1959                 spin_lock_irqsave(&q->lock, flags);
1960         }
1961         spin_unlock_irqrestore(&q->lock, flags);
1962         return count;
1963 }
1964
1965 static int lan78xx_change_mtu(struct net_device *netdev, int new_mtu)
1966 {
1967         struct lan78xx_net *dev = netdev_priv(netdev);
1968         int ll_mtu = new_mtu + netdev->hard_header_len;
1969         int old_hard_mtu = dev->hard_mtu;
1970         int old_rx_urb_size = dev->rx_urb_size;
1971         int ret;
1972
1973         if (new_mtu > MAX_SINGLE_PACKET_SIZE)
1974                 return -EINVAL;
1975
1976         if (new_mtu <= 0)
1977                 return -EINVAL;
1978         /* no second zero-length packet read wanted after mtu-sized packets */
1979         if ((ll_mtu % dev->maxpacket) == 0)
1980                 return -EDOM;
1981
1982         ret = lan78xx_set_rx_max_frame_length(dev, new_mtu + ETH_HLEN);
1983
1984         netdev->mtu = new_mtu;
1985
1986         dev->hard_mtu = netdev->mtu + netdev->hard_header_len;
1987         if (dev->rx_urb_size == old_hard_mtu) {
1988                 dev->rx_urb_size = dev->hard_mtu;
1989                 if (dev->rx_urb_size > old_rx_urb_size) {
1990                         if (netif_running(dev->net)) {
1991                                 unlink_urbs(dev, &dev->rxq);
1992                                 tasklet_schedule(&dev->bh);
1993                         }
1994                 }
1995         }
1996
1997         return 0;
1998 }
1999
2000 static int lan78xx_set_mac_addr(struct net_device *netdev, void *p)
2001 {
2002         struct lan78xx_net *dev = netdev_priv(netdev);
2003         struct sockaddr *addr = p;
2004         u32 addr_lo, addr_hi;
2005         int ret;
2006
2007         if (netif_running(netdev))
2008                 return -EBUSY;
2009
2010         if (!is_valid_ether_addr(addr->sa_data))
2011                 return -EADDRNOTAVAIL;
2012
2013         ether_addr_copy(netdev->dev_addr, addr->sa_data);
2014
2015         addr_lo = netdev->dev_addr[0] |
2016                   netdev->dev_addr[1] << 8 |
2017                   netdev->dev_addr[2] << 16 |
2018                   netdev->dev_addr[3] << 24;
2019         addr_hi = netdev->dev_addr[4] |
2020                   netdev->dev_addr[5] << 8;
2021
2022         ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo);
2023         ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi);
2024
2025         return 0;
2026 }
2027
2028 /* Enable or disable Rx checksum offload engine */
2029 static int lan78xx_set_features(struct net_device *netdev,
2030                                 netdev_features_t features)
2031 {
2032         struct lan78xx_net *dev = netdev_priv(netdev);
2033         struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
2034         unsigned long flags;
2035         int ret;
2036
2037         spin_lock_irqsave(&pdata->rfe_ctl_lock, flags);
2038
2039         if (features & NETIF_F_RXCSUM) {
2040                 pdata->rfe_ctl |= RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_;
2041                 pdata->rfe_ctl |= RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_;
2042         } else {
2043                 pdata->rfe_ctl &= ~(RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_);
2044                 pdata->rfe_ctl &= ~(RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_);
2045         }
2046
2047         if (features & NETIF_F_HW_VLAN_CTAG_RX)
2048                 pdata->rfe_ctl |= RFE_CTL_VLAN_FILTER_;
2049         else
2050                 pdata->rfe_ctl &= ~RFE_CTL_VLAN_FILTER_;
2051
2052         spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags);
2053
2054         ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl);
2055
2056         return 0;
2057 }
2058
2059 static void lan78xx_deferred_vlan_write(struct work_struct *param)
2060 {
2061         struct lan78xx_priv *pdata =
2062                         container_of(param, struct lan78xx_priv, set_vlan);
2063         struct lan78xx_net *dev = pdata->dev;
2064
2065         lan78xx_dataport_write(dev, DP_SEL_RSEL_VLAN_DA_, 0,
2066                                DP_SEL_VHF_VLAN_LEN, pdata->vlan_table);
2067 }
2068
2069 static int lan78xx_vlan_rx_add_vid(struct net_device *netdev,
2070                                    __be16 proto, u16 vid)
2071 {
2072         struct lan78xx_net *dev = netdev_priv(netdev);
2073         struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
2074         u16 vid_bit_index;
2075         u16 vid_dword_index;
2076
2077         vid_dword_index = (vid >> 5) & 0x7F;
2078         vid_bit_index = vid & 0x1F;
2079
2080         pdata->vlan_table[vid_dword_index] |= (1 << vid_bit_index);
2081
2082         /* defer register writes to a sleepable context */
2083         schedule_work(&pdata->set_vlan);
2084
2085         return 0;
2086 }
2087
2088 static int lan78xx_vlan_rx_kill_vid(struct net_device *netdev,
2089                                     __be16 proto, u16 vid)
2090 {
2091         struct lan78xx_net *dev = netdev_priv(netdev);
2092         struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
2093         u16 vid_bit_index;
2094         u16 vid_dword_index;
2095
2096         vid_dword_index = (vid >> 5) & 0x7F;
2097         vid_bit_index = vid & 0x1F;
2098
2099         pdata->vlan_table[vid_dword_index] &= ~(1 << vid_bit_index);
2100
2101         /* defer register writes to a sleepable context */
2102         schedule_work(&pdata->set_vlan);
2103
2104         return 0;
2105 }
2106
2107 static void lan78xx_init_ltm(struct lan78xx_net *dev)
2108 {
2109         int ret;
2110         u32 buf;
2111         u32 regs[6] = { 0 };
2112
2113         ret = lan78xx_read_reg(dev, USB_CFG1, &buf);
2114         if (buf & USB_CFG1_LTM_ENABLE_) {
2115                 u8 temp[2];
2116                 /* Get values from EEPROM first */
2117                 if (lan78xx_read_eeprom(dev, 0x3F, 2, temp) == 0) {
2118                         if (temp[0] == 24) {
2119                                 ret = lan78xx_read_raw_eeprom(dev,
2120                                                               temp[1] * 2,
2121                                                               24,
2122                                                               (u8 *)regs);
2123                                 if (ret < 0)
2124                                         return;
2125                         }
2126                 } else if (lan78xx_read_otp(dev, 0x3F, 2, temp) == 0) {
2127                         if (temp[0] == 24) {
2128                                 ret = lan78xx_read_raw_otp(dev,
2129                                                            temp[1] * 2,
2130                                                            24,
2131                                                            (u8 *)regs);
2132                                 if (ret < 0)
2133                                         return;
2134                         }
2135                 }
2136         }
2137
2138         lan78xx_write_reg(dev, LTM_BELT_IDLE0, regs[0]);
2139         lan78xx_write_reg(dev, LTM_BELT_IDLE1, regs[1]);
2140         lan78xx_write_reg(dev, LTM_BELT_ACT0, regs[2]);
2141         lan78xx_write_reg(dev, LTM_BELT_ACT1, regs[3]);
2142         lan78xx_write_reg(dev, LTM_INACTIVE0, regs[4]);
2143         lan78xx_write_reg(dev, LTM_INACTIVE1, regs[5]);
2144 }
2145
2146 static int lan78xx_reset(struct lan78xx_net *dev)
2147 {
2148         struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
2149         u32 buf;
2150         int ret = 0;
2151         unsigned long timeout;
2152
2153         ret = lan78xx_read_reg(dev, HW_CFG, &buf);
2154         buf |= HW_CFG_LRST_;
2155         ret = lan78xx_write_reg(dev, HW_CFG, buf);
2156
2157         timeout = jiffies + HZ;
2158         do {
2159                 mdelay(1);
2160                 ret = lan78xx_read_reg(dev, HW_CFG, &buf);
2161                 if (time_after(jiffies, timeout)) {
2162                         netdev_warn(dev->net,
2163                                     "timeout on completion of LiteReset");
2164                         return -EIO;
2165                 }
2166         } while (buf & HW_CFG_LRST_);
2167
2168         lan78xx_init_mac_address(dev);
2169
2170         /* save DEVID for later usage */
2171         ret = lan78xx_read_reg(dev, ID_REV, &buf);
2172         dev->chipid = (buf & ID_REV_CHIP_ID_MASK_) >> 16;
2173         dev->chiprev = buf & ID_REV_CHIP_REV_MASK_;
2174
2175         /* Respond to the IN token with a NAK */
2176         ret = lan78xx_read_reg(dev, USB_CFG0, &buf);
2177         buf |= USB_CFG_BIR_;
2178         ret = lan78xx_write_reg(dev, USB_CFG0, buf);
2179
2180         /* Init LTM */
2181         lan78xx_init_ltm(dev);
2182
2183         dev->net->hard_header_len += TX_OVERHEAD;
2184         dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len;
2185
2186         if (dev->udev->speed == USB_SPEED_SUPER) {
2187                 buf = DEFAULT_BURST_CAP_SIZE / SS_USB_PKT_SIZE;
2188                 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE;
2189                 dev->rx_qlen = 4;
2190                 dev->tx_qlen = 4;
2191         } else if (dev->udev->speed == USB_SPEED_HIGH) {
2192                 buf = DEFAULT_BURST_CAP_SIZE / HS_USB_PKT_SIZE;
2193                 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE;
2194                 dev->rx_qlen = RX_MAX_QUEUE_MEMORY / dev->rx_urb_size;
2195                 dev->tx_qlen = RX_MAX_QUEUE_MEMORY / dev->hard_mtu;
2196         } else {
2197                 buf = DEFAULT_BURST_CAP_SIZE / FS_USB_PKT_SIZE;
2198                 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE;
2199                 dev->rx_qlen = 4;
2200         }
2201
2202         ret = lan78xx_write_reg(dev, BURST_CAP, buf);
2203         ret = lan78xx_write_reg(dev, BULK_IN_DLY, DEFAULT_BULK_IN_DELAY);
2204
2205         ret = lan78xx_read_reg(dev, HW_CFG, &buf);
2206         buf |= HW_CFG_MEF_;
2207         ret = lan78xx_write_reg(dev, HW_CFG, buf);
2208
2209         ret = lan78xx_read_reg(dev, USB_CFG0, &buf);
2210         buf |= USB_CFG_BCE_;
2211         ret = lan78xx_write_reg(dev, USB_CFG0, buf);
2212
2213         /* set FIFO sizes */
2214         buf = (MAX_RX_FIFO_SIZE - 512) / 512;
2215         ret = lan78xx_write_reg(dev, FCT_RX_FIFO_END, buf);
2216
2217         buf = (MAX_TX_FIFO_SIZE - 512) / 512;
2218         ret = lan78xx_write_reg(dev, FCT_TX_FIFO_END, buf);
2219
2220         ret = lan78xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_);
2221         ret = lan78xx_write_reg(dev, FLOW, 0);
2222         ret = lan78xx_write_reg(dev, FCT_FLOW, 0);
2223
2224         /* Don't need rfe_ctl_lock during initialisation */
2225         ret = lan78xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl);
2226         pdata->rfe_ctl |= RFE_CTL_BCAST_EN_ | RFE_CTL_DA_PERFECT_;
2227         ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl);
2228
2229         /* Enable or disable checksum offload engines */
2230         lan78xx_set_features(dev->net, dev->net->features);
2231
2232         lan78xx_set_multicast(dev->net);
2233
2234         /* reset PHY */
2235         ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
2236         buf |= PMT_CTL_PHY_RST_;
2237         ret = lan78xx_write_reg(dev, PMT_CTL, buf);
2238
2239         timeout = jiffies + HZ;
2240         do {
2241                 mdelay(1);
2242                 ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
2243                 if (time_after(jiffies, timeout)) {
2244                         netdev_warn(dev->net, "timeout waiting for PHY Reset");
2245                         return -EIO;
2246                 }
2247         } while ((buf & PMT_CTL_PHY_RST_) || !(buf & PMT_CTL_READY_));
2248
2249         ret = lan78xx_read_reg(dev, MAC_CR, &buf);
2250         buf |= MAC_CR_AUTO_DUPLEX_ | MAC_CR_AUTO_SPEED_;
2251         ret = lan78xx_write_reg(dev, MAC_CR, buf);
2252
2253         /* enable PHY interrupts */
2254         ret = lan78xx_read_reg(dev, INT_EP_CTL, &buf);
2255         buf |= INT_ENP_PHY_INT;
2256         ret = lan78xx_write_reg(dev, INT_EP_CTL, buf);
2257
2258         ret = lan78xx_read_reg(dev, MAC_TX, &buf);
2259         buf |= MAC_TX_TXEN_;
2260         ret = lan78xx_write_reg(dev, MAC_TX, buf);
2261
2262         ret = lan78xx_read_reg(dev, FCT_TX_CTL, &buf);
2263         buf |= FCT_TX_CTL_EN_;
2264         ret = lan78xx_write_reg(dev, FCT_TX_CTL, buf);
2265
2266         ret = lan78xx_set_rx_max_frame_length(dev, dev->net->mtu + ETH_HLEN);
2267
2268         ret = lan78xx_read_reg(dev, MAC_RX, &buf);
2269         buf |= MAC_RX_RXEN_;
2270         ret = lan78xx_write_reg(dev, MAC_RX, buf);
2271
2272         ret = lan78xx_read_reg(dev, FCT_RX_CTL, &buf);
2273         buf |= FCT_RX_CTL_EN_;
2274         ret = lan78xx_write_reg(dev, FCT_RX_CTL, buf);
2275
2276         return 0;
2277 }
2278
2279 static void lan78xx_init_stats(struct lan78xx_net *dev)
2280 {
2281         u32 *p;
2282         int i;
2283
2284         /* initialize for stats update
2285          * some counters are 20bits and some are 32bits
2286          */
2287         p = (u32 *)&dev->stats.rollover_max;
2288         for (i = 0; i < (sizeof(dev->stats.rollover_max) / (sizeof(u32))); i++)
2289                 p[i] = 0xFFFFF;
2290
2291         dev->stats.rollover_max.rx_unicast_byte_count = 0xFFFFFFFF;
2292         dev->stats.rollover_max.rx_broadcast_byte_count = 0xFFFFFFFF;
2293         dev->stats.rollover_max.rx_multicast_byte_count = 0xFFFFFFFF;
2294         dev->stats.rollover_max.eee_rx_lpi_transitions = 0xFFFFFFFF;
2295         dev->stats.rollover_max.eee_rx_lpi_time = 0xFFFFFFFF;
2296         dev->stats.rollover_max.tx_unicast_byte_count = 0xFFFFFFFF;
2297         dev->stats.rollover_max.tx_broadcast_byte_count = 0xFFFFFFFF;
2298         dev->stats.rollover_max.tx_multicast_byte_count = 0xFFFFFFFF;
2299         dev->stats.rollover_max.eee_tx_lpi_transitions = 0xFFFFFFFF;
2300         dev->stats.rollover_max.eee_tx_lpi_time = 0xFFFFFFFF;
2301
2302         lan78xx_defer_kevent(dev, EVENT_STAT_UPDATE);
2303 }
2304
2305 static int lan78xx_open(struct net_device *net)
2306 {
2307         struct lan78xx_net *dev = netdev_priv(net);
2308         int ret;
2309
2310         ret = usb_autopm_get_interface(dev->intf);
2311         if (ret < 0)
2312                 goto out;
2313
2314         ret = lan78xx_reset(dev);
2315         if (ret < 0)
2316                 goto done;
2317
2318         ret = lan78xx_phy_init(dev);
2319         if (ret < 0)
2320                 goto done;
2321
2322         /* for Link Check */
2323         if (dev->urb_intr) {
2324                 ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL);
2325                 if (ret < 0) {
2326                         netif_err(dev, ifup, dev->net,
2327                                   "intr submit %d\n", ret);
2328                         goto done;
2329                 }
2330         }
2331
2332         lan78xx_init_stats(dev);
2333
2334         set_bit(EVENT_DEV_OPEN, &dev->flags);
2335
2336         netif_start_queue(net);
2337
2338         dev->link_on = false;
2339
2340         lan78xx_defer_kevent(dev, EVENT_LINK_RESET);
2341 done:
2342         usb_autopm_put_interface(dev->intf);
2343
2344 out:
2345         return ret;
2346 }
2347
2348 static void lan78xx_terminate_urbs(struct lan78xx_net *dev)
2349 {
2350         DECLARE_WAIT_QUEUE_HEAD_ONSTACK(unlink_wakeup);
2351         DECLARE_WAITQUEUE(wait, current);
2352         int temp;
2353
2354         /* ensure there are no more active urbs */
2355         add_wait_queue(&unlink_wakeup, &wait);
2356         set_current_state(TASK_UNINTERRUPTIBLE);
2357         dev->wait = &unlink_wakeup;
2358         temp = unlink_urbs(dev, &dev->txq) + unlink_urbs(dev, &dev->rxq);
2359
2360         /* maybe wait for deletions to finish. */
2361         while (!skb_queue_empty(&dev->rxq) &&
2362                !skb_queue_empty(&dev->txq) &&
2363                !skb_queue_empty(&dev->done)) {
2364                 schedule_timeout(msecs_to_jiffies(UNLINK_TIMEOUT_MS));
2365                 set_current_state(TASK_UNINTERRUPTIBLE);
2366                 netif_dbg(dev, ifdown, dev->net,
2367                           "waited for %d urb completions\n", temp);
2368         }
2369         set_current_state(TASK_RUNNING);
2370         dev->wait = NULL;
2371         remove_wait_queue(&unlink_wakeup, &wait);
2372 }
2373
2374 static int lan78xx_stop(struct net_device *net)
2375 {
2376         struct lan78xx_net              *dev = netdev_priv(net);
2377
2378         if (timer_pending(&dev->stat_monitor))
2379                 del_timer_sync(&dev->stat_monitor);
2380
2381         phy_stop(net->phydev);
2382         phy_disconnect(net->phydev);
2383         net->phydev = NULL;
2384
2385         clear_bit(EVENT_DEV_OPEN, &dev->flags);
2386         netif_stop_queue(net);
2387
2388         netif_info(dev, ifdown, dev->net,
2389                    "stop stats: rx/tx %lu/%lu, errs %lu/%lu\n",
2390                    net->stats.rx_packets, net->stats.tx_packets,
2391                    net->stats.rx_errors, net->stats.tx_errors);
2392
2393         lan78xx_terminate_urbs(dev);
2394
2395         usb_kill_urb(dev->urb_intr);
2396
2397         skb_queue_purge(&dev->rxq_pause);
2398
2399         /* deferred work (task, timer, softirq) must also stop.
2400          * can't flush_scheduled_work() until we drop rtnl (later),
2401          * else workers could deadlock; so make workers a NOP.
2402          */
2403         dev->flags = 0;
2404         cancel_delayed_work_sync(&dev->wq);
2405         tasklet_kill(&dev->bh);
2406
2407         usb_autopm_put_interface(dev->intf);
2408
2409         return 0;
2410 }
2411
2412 static int lan78xx_linearize(struct sk_buff *skb)
2413 {
2414         return skb_linearize(skb);
2415 }
2416
2417 static struct sk_buff *lan78xx_tx_prep(struct lan78xx_net *dev,
2418                                        struct sk_buff *skb, gfp_t flags)
2419 {
2420         u32 tx_cmd_a, tx_cmd_b;
2421
2422         if (skb_headroom(skb) < TX_OVERHEAD) {
2423                 struct sk_buff *skb2;
2424
2425                 skb2 = skb_copy_expand(skb, TX_OVERHEAD, 0, flags);
2426                 dev_kfree_skb_any(skb);
2427                 skb = skb2;
2428                 if (!skb)
2429                         return NULL;
2430         }
2431
2432         if (lan78xx_linearize(skb) < 0)
2433                 return NULL;
2434
2435         tx_cmd_a = (u32)(skb->len & TX_CMD_A_LEN_MASK_) | TX_CMD_A_FCS_;
2436
2437         if (skb->ip_summed == CHECKSUM_PARTIAL)
2438                 tx_cmd_a |= TX_CMD_A_IPE_ | TX_CMD_A_TPE_;
2439
2440         tx_cmd_b = 0;
2441         if (skb_is_gso(skb)) {
2442                 u16 mss = max(skb_shinfo(skb)->gso_size, TX_CMD_B_MSS_MIN_);
2443
2444                 tx_cmd_b = (mss << TX_CMD_B_MSS_SHIFT_) & TX_CMD_B_MSS_MASK_;
2445
2446                 tx_cmd_a |= TX_CMD_A_LSO_;
2447         }
2448
2449         if (skb_vlan_tag_present(skb)) {
2450                 tx_cmd_a |= TX_CMD_A_IVTG_;
2451                 tx_cmd_b |= skb_vlan_tag_get(skb) & TX_CMD_B_VTAG_MASK_;
2452         }
2453
2454         skb_push(skb, 4);
2455         cpu_to_le32s(&tx_cmd_b);
2456         memcpy(skb->data, &tx_cmd_b, 4);
2457
2458         skb_push(skb, 4);
2459         cpu_to_le32s(&tx_cmd_a);
2460         memcpy(skb->data, &tx_cmd_a, 4);
2461
2462         return skb;
2463 }
2464
2465 static enum skb_state defer_bh(struct lan78xx_net *dev, struct sk_buff *skb,
2466                                struct sk_buff_head *list, enum skb_state state)
2467 {
2468         unsigned long flags;
2469         enum skb_state old_state;
2470         struct skb_data *entry = (struct skb_data *)skb->cb;
2471
2472         spin_lock_irqsave(&list->lock, flags);
2473         old_state = entry->state;
2474         entry->state = state;
2475
2476         __skb_unlink(skb, list);
2477         spin_unlock(&list->lock);
2478         spin_lock(&dev->done.lock);
2479
2480         __skb_queue_tail(&dev->done, skb);
2481         if (skb_queue_len(&dev->done) == 1)
2482                 tasklet_schedule(&dev->bh);
2483         spin_unlock_irqrestore(&dev->done.lock, flags);
2484
2485         return old_state;
2486 }
2487
2488 static void tx_complete(struct urb *urb)
2489 {
2490         struct sk_buff *skb = (struct sk_buff *)urb->context;
2491         struct skb_data *entry = (struct skb_data *)skb->cb;
2492         struct lan78xx_net *dev = entry->dev;
2493
2494         if (urb->status == 0) {
2495                 dev->net->stats.tx_packets += entry->num_of_packet;
2496                 dev->net->stats.tx_bytes += entry->length;
2497         } else {
2498                 dev->net->stats.tx_errors++;
2499
2500                 switch (urb->status) {
2501                 case -EPIPE:
2502                         lan78xx_defer_kevent(dev, EVENT_TX_HALT);
2503                         break;
2504
2505                 /* software-driven interface shutdown */
2506                 case -ECONNRESET:
2507                 case -ESHUTDOWN:
2508                         break;
2509
2510                 case -EPROTO:
2511                 case -ETIME:
2512                 case -EILSEQ:
2513                         netif_stop_queue(dev->net);
2514                         break;
2515                 default:
2516                         netif_dbg(dev, tx_err, dev->net,
2517                                   "tx err %d\n", entry->urb->status);
2518                         break;
2519                 }
2520         }
2521
2522         usb_autopm_put_interface_async(dev->intf);
2523
2524         defer_bh(dev, skb, &dev->txq, tx_done);
2525 }
2526
2527 static void lan78xx_queue_skb(struct sk_buff_head *list,
2528                               struct sk_buff *newsk, enum skb_state state)
2529 {
2530         struct skb_data *entry = (struct skb_data *)newsk->cb;
2531
2532         __skb_queue_tail(list, newsk);
2533         entry->state = state;
2534 }
2535
2536 static netdev_tx_t
2537 lan78xx_start_xmit(struct sk_buff *skb, struct net_device *net)
2538 {
2539         struct lan78xx_net *dev = netdev_priv(net);
2540         struct sk_buff *skb2 = NULL;
2541
2542         if (skb) {
2543                 skb_tx_timestamp(skb);
2544                 skb2 = lan78xx_tx_prep(dev, skb, GFP_ATOMIC);
2545         }
2546
2547         if (skb2) {
2548                 skb_queue_tail(&dev->txq_pend, skb2);
2549
2550                 /* throttle TX patch at slower than SUPER SPEED USB */
2551                 if ((dev->udev->speed < USB_SPEED_SUPER) &&
2552                     (skb_queue_len(&dev->txq_pend) > 10))
2553                         netif_stop_queue(net);
2554         } else {
2555                 netif_dbg(dev, tx_err, dev->net,
2556                           "lan78xx_tx_prep return NULL\n");
2557                 dev->net->stats.tx_errors++;
2558                 dev->net->stats.tx_dropped++;
2559         }
2560
2561         tasklet_schedule(&dev->bh);
2562
2563         return NETDEV_TX_OK;
2564 }
2565
2566 static int
2567 lan78xx_get_endpoints(struct lan78xx_net *dev, struct usb_interface *intf)
2568 {
2569         int tmp;
2570         struct usb_host_interface *alt = NULL;
2571         struct usb_host_endpoint *in = NULL, *out = NULL;
2572         struct usb_host_endpoint *status = NULL;
2573
2574         for (tmp = 0; tmp < intf->num_altsetting; tmp++) {
2575                 unsigned ep;
2576
2577                 in = NULL;
2578                 out = NULL;
2579                 status = NULL;
2580                 alt = intf->altsetting + tmp;
2581
2582                 for (ep = 0; ep < alt->desc.bNumEndpoints; ep++) {
2583                         struct usb_host_endpoint *e;
2584                         int intr = 0;
2585
2586                         e = alt->endpoint + ep;
2587                         switch (e->desc.bmAttributes) {
2588                         case USB_ENDPOINT_XFER_INT:
2589                                 if (!usb_endpoint_dir_in(&e->desc))
2590                                         continue;
2591                                 intr = 1;
2592                                 /* FALLTHROUGH */
2593                         case USB_ENDPOINT_XFER_BULK:
2594                                 break;
2595                         default:
2596                                 continue;
2597                         }
2598                         if (usb_endpoint_dir_in(&e->desc)) {
2599                                 if (!intr && !in)
2600                                         in = e;
2601                                 else if (intr && !status)
2602                                         status = e;
2603                         } else {
2604                                 if (!out)
2605                                         out = e;
2606                         }
2607                 }
2608                 if (in && out)
2609                         break;
2610         }
2611         if (!alt || !in || !out)
2612                 return -EINVAL;
2613
2614         dev->pipe_in = usb_rcvbulkpipe(dev->udev,
2615                                        in->desc.bEndpointAddress &
2616                                        USB_ENDPOINT_NUMBER_MASK);
2617         dev->pipe_out = usb_sndbulkpipe(dev->udev,
2618                                         out->desc.bEndpointAddress &
2619                                         USB_ENDPOINT_NUMBER_MASK);
2620         dev->ep_intr = status;
2621
2622         return 0;
2623 }
2624
2625 static int lan78xx_bind(struct lan78xx_net *dev, struct usb_interface *intf)
2626 {
2627         struct lan78xx_priv *pdata = NULL;
2628         int ret;
2629         int i;
2630
2631         ret = lan78xx_get_endpoints(dev, intf);
2632
2633         dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL);
2634
2635         pdata = (struct lan78xx_priv *)(dev->data[0]);
2636         if (!pdata) {
2637                 netdev_warn(dev->net, "Unable to allocate lan78xx_priv");
2638                 return -ENOMEM;
2639         }
2640
2641         pdata->dev = dev;
2642
2643         spin_lock_init(&pdata->rfe_ctl_lock);
2644         mutex_init(&pdata->dataport_mutex);
2645
2646         INIT_WORK(&pdata->set_multicast, lan78xx_deferred_multicast_write);
2647
2648         for (i = 0; i < DP_SEL_VHF_VLAN_LEN; i++)
2649                 pdata->vlan_table[i] = 0;
2650
2651         INIT_WORK(&pdata->set_vlan, lan78xx_deferred_vlan_write);
2652
2653         dev->net->features = 0;
2654
2655         if (DEFAULT_TX_CSUM_ENABLE)
2656                 dev->net->features |= NETIF_F_HW_CSUM;
2657
2658         if (DEFAULT_RX_CSUM_ENABLE)
2659                 dev->net->features |= NETIF_F_RXCSUM;
2660
2661         if (DEFAULT_TSO_CSUM_ENABLE)
2662                 dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG;
2663
2664         dev->net->hw_features = dev->net->features;
2665
2666         /* Init all registers */
2667         ret = lan78xx_reset(dev);
2668
2669         lan78xx_mdio_init(dev);
2670
2671         dev->net->flags |= IFF_MULTICAST;
2672
2673         pdata->wol = WAKE_MAGIC;
2674
2675         return 0;
2676 }
2677
2678 static void lan78xx_unbind(struct lan78xx_net *dev, struct usb_interface *intf)
2679 {
2680         struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
2681
2682         lan78xx_remove_mdio(dev);
2683
2684         if (pdata) {
2685                 netif_dbg(dev, ifdown, dev->net, "free pdata");
2686                 kfree(pdata);
2687                 pdata = NULL;
2688                 dev->data[0] = 0;
2689         }
2690 }
2691
2692 static void lan78xx_rx_csum_offload(struct lan78xx_net *dev,
2693                                     struct sk_buff *skb,
2694                                     u32 rx_cmd_a, u32 rx_cmd_b)
2695 {
2696         if (!(dev->net->features & NETIF_F_RXCSUM) ||
2697             unlikely(rx_cmd_a & RX_CMD_A_ICSM_)) {
2698                 skb->ip_summed = CHECKSUM_NONE;
2699         } else {
2700                 skb->csum = ntohs((u16)(rx_cmd_b >> RX_CMD_B_CSUM_SHIFT_));
2701                 skb->ip_summed = CHECKSUM_COMPLETE;
2702         }
2703 }
2704
2705 static void lan78xx_skb_return(struct lan78xx_net *dev, struct sk_buff *skb)
2706 {
2707         int             status;
2708
2709         if (test_bit(EVENT_RX_PAUSED, &dev->flags)) {
2710                 skb_queue_tail(&dev->rxq_pause, skb);
2711                 return;
2712         }
2713
2714         dev->net->stats.rx_packets++;
2715         dev->net->stats.rx_bytes += skb->len;
2716
2717         skb->protocol = eth_type_trans(skb, dev->net);
2718
2719         netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n",
2720                   skb->len + sizeof(struct ethhdr), skb->protocol);
2721         memset(skb->cb, 0, sizeof(struct skb_data));
2722
2723         if (skb_defer_rx_timestamp(skb))
2724                 return;
2725
2726         status = netif_rx(skb);
2727         if (status != NET_RX_SUCCESS)
2728                 netif_dbg(dev, rx_err, dev->net,
2729                           "netif_rx status %d\n", status);
2730 }
2731
2732 static int lan78xx_rx(struct lan78xx_net *dev, struct sk_buff *skb)
2733 {
2734         if (skb->len < dev->net->hard_header_len)
2735                 return 0;
2736
2737         while (skb->len > 0) {
2738                 u32 rx_cmd_a, rx_cmd_b, align_count, size;
2739                 u16 rx_cmd_c;
2740                 struct sk_buff *skb2;
2741                 unsigned char *packet;
2742
2743                 memcpy(&rx_cmd_a, skb->data, sizeof(rx_cmd_a));
2744                 le32_to_cpus(&rx_cmd_a);
2745                 skb_pull(skb, sizeof(rx_cmd_a));
2746
2747                 memcpy(&rx_cmd_b, skb->data, sizeof(rx_cmd_b));
2748                 le32_to_cpus(&rx_cmd_b);
2749                 skb_pull(skb, sizeof(rx_cmd_b));
2750
2751                 memcpy(&rx_cmd_c, skb->data, sizeof(rx_cmd_c));
2752                 le16_to_cpus(&rx_cmd_c);
2753                 skb_pull(skb, sizeof(rx_cmd_c));
2754
2755                 packet = skb->data;
2756
2757                 /* get the packet length */
2758                 size = (rx_cmd_a & RX_CMD_A_LEN_MASK_);
2759                 align_count = (4 - ((size + RXW_PADDING) % 4)) % 4;
2760
2761                 if (unlikely(rx_cmd_a & RX_CMD_A_RED_)) {
2762                         netif_dbg(dev, rx_err, dev->net,
2763                                   "Error rx_cmd_a=0x%08x", rx_cmd_a);
2764                 } else {
2765                         /* last frame in this batch */
2766                         if (skb->len == size) {
2767                                 lan78xx_rx_csum_offload(dev, skb,
2768                                                         rx_cmd_a, rx_cmd_b);
2769
2770                                 skb_trim(skb, skb->len - 4); /* remove fcs */
2771                                 skb->truesize = size + sizeof(struct sk_buff);
2772
2773                                 return 1;
2774                         }
2775
2776                         skb2 = skb_clone(skb, GFP_ATOMIC);
2777                         if (unlikely(!skb2)) {
2778                                 netdev_warn(dev->net, "Error allocating skb");
2779                                 return 0;
2780                         }
2781
2782                         skb2->len = size;
2783                         skb2->data = packet;
2784                         skb_set_tail_pointer(skb2, size);
2785
2786                         lan78xx_rx_csum_offload(dev, skb2, rx_cmd_a, rx_cmd_b);
2787
2788                         skb_trim(skb2, skb2->len - 4); /* remove fcs */
2789                         skb2->truesize = size + sizeof(struct sk_buff);
2790
2791                         lan78xx_skb_return(dev, skb2);
2792                 }
2793
2794                 skb_pull(skb, size);
2795
2796                 /* padding bytes before the next frame starts */
2797                 if (skb->len)
2798                         skb_pull(skb, align_count);
2799         }
2800
2801         return 1;
2802 }
2803
2804 static inline void rx_process(struct lan78xx_net *dev, struct sk_buff *skb)
2805 {
2806         if (!lan78xx_rx(dev, skb)) {
2807                 dev->net->stats.rx_errors++;
2808                 goto done;
2809         }
2810
2811         if (skb->len) {
2812                 lan78xx_skb_return(dev, skb);
2813                 return;
2814         }
2815
2816         netif_dbg(dev, rx_err, dev->net, "drop\n");
2817         dev->net->stats.rx_errors++;
2818 done:
2819         skb_queue_tail(&dev->done, skb);
2820 }
2821
2822 static void rx_complete(struct urb *urb);
2823
2824 static int rx_submit(struct lan78xx_net *dev, struct urb *urb, gfp_t flags)
2825 {
2826         struct sk_buff *skb;
2827         struct skb_data *entry;
2828         unsigned long lockflags;
2829         size_t size = dev->rx_urb_size;
2830         int ret = 0;
2831
2832         skb = netdev_alloc_skb_ip_align(dev->net, size);
2833         if (!skb) {
2834                 usb_free_urb(urb);
2835                 return -ENOMEM;
2836         }
2837
2838         entry = (struct skb_data *)skb->cb;
2839         entry->urb = urb;
2840         entry->dev = dev;
2841         entry->length = 0;
2842
2843         usb_fill_bulk_urb(urb, dev->udev, dev->pipe_in,
2844                           skb->data, size, rx_complete, skb);
2845
2846         spin_lock_irqsave(&dev->rxq.lock, lockflags);
2847
2848         if (netif_device_present(dev->net) &&
2849             netif_running(dev->net) &&
2850             !test_bit(EVENT_RX_HALT, &dev->flags) &&
2851             !test_bit(EVENT_DEV_ASLEEP, &dev->flags)) {
2852                 ret = usb_submit_urb(urb, GFP_ATOMIC);
2853                 switch (ret) {
2854                 case 0:
2855                         lan78xx_queue_skb(&dev->rxq, skb, rx_start);
2856                         break;
2857                 case -EPIPE:
2858                         lan78xx_defer_kevent(dev, EVENT_RX_HALT);
2859                         break;
2860                 case -ENODEV:
2861                         netif_dbg(dev, ifdown, dev->net, "device gone\n");
2862                         netif_device_detach(dev->net);
2863                         break;
2864                 case -EHOSTUNREACH:
2865                         ret = -ENOLINK;
2866                         break;
2867                 default:
2868                         netif_dbg(dev, rx_err, dev->net,
2869                                   "rx submit, %d\n", ret);
2870                         tasklet_schedule(&dev->bh);
2871                 }
2872         } else {
2873                 netif_dbg(dev, ifdown, dev->net, "rx: stopped\n");
2874                 ret = -ENOLINK;
2875         }
2876         spin_unlock_irqrestore(&dev->rxq.lock, lockflags);
2877         if (ret) {
2878                 dev_kfree_skb_any(skb);
2879                 usb_free_urb(urb);
2880         }
2881         return ret;
2882 }
2883
2884 static void rx_complete(struct urb *urb)
2885 {
2886         struct sk_buff  *skb = (struct sk_buff *)urb->context;
2887         struct skb_data *entry = (struct skb_data *)skb->cb;
2888         struct lan78xx_net *dev = entry->dev;
2889         int urb_status = urb->status;
2890         enum skb_state state;
2891
2892         skb_put(skb, urb->actual_length);
2893         state = rx_done;
2894         entry->urb = NULL;
2895
2896         switch (urb_status) {
2897         case 0:
2898                 if (skb->len < dev->net->hard_header_len) {
2899                         state = rx_cleanup;
2900                         dev->net->stats.rx_errors++;
2901                         dev->net->stats.rx_length_errors++;
2902                         netif_dbg(dev, rx_err, dev->net,
2903                                   "rx length %d\n", skb->len);
2904                 }
2905                 usb_mark_last_busy(dev->udev);
2906                 break;
2907         case -EPIPE:
2908                 dev->net->stats.rx_errors++;
2909                 lan78xx_defer_kevent(dev, EVENT_RX_HALT);
2910                 /* FALLTHROUGH */
2911         case -ECONNRESET:                               /* async unlink */
2912         case -ESHUTDOWN:                                /* hardware gone */
2913                 netif_dbg(dev, ifdown, dev->net,
2914                           "rx shutdown, code %d\n", urb_status);
2915                 state = rx_cleanup;
2916                 entry->urb = urb;
2917                 urb = NULL;
2918                 break;
2919         case -EPROTO:
2920         case -ETIME:
2921         case -EILSEQ:
2922                 dev->net->stats.rx_errors++;
2923                 state = rx_cleanup;
2924                 entry->urb = urb;
2925                 urb = NULL;
2926                 break;
2927
2928         /* data overrun ... flush fifo? */
2929         case -EOVERFLOW:
2930                 dev->net->stats.rx_over_errors++;
2931                 /* FALLTHROUGH */
2932
2933         default:
2934                 state = rx_cleanup;
2935                 dev->net->stats.rx_errors++;
2936                 netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status);
2937                 break;
2938         }
2939
2940         state = defer_bh(dev, skb, &dev->rxq, state);
2941
2942         if (urb) {
2943                 if (netif_running(dev->net) &&
2944                     !test_bit(EVENT_RX_HALT, &dev->flags) &&
2945                     state != unlink_start) {
2946                         rx_submit(dev, urb, GFP_ATOMIC);
2947                         return;
2948                 }
2949                 usb_free_urb(urb);
2950         }
2951         netif_dbg(dev, rx_err, dev->net, "no read resubmitted\n");
2952 }
2953
2954 static void lan78xx_tx_bh(struct lan78xx_net *dev)
2955 {
2956         int length;
2957         struct urb *urb = NULL;
2958         struct skb_data *entry;
2959         unsigned long flags;
2960         struct sk_buff_head *tqp = &dev->txq_pend;
2961         struct sk_buff *skb, *skb2;
2962         int ret;
2963         int count, pos;
2964         int skb_totallen, pkt_cnt;
2965
2966         skb_totallen = 0;
2967         pkt_cnt = 0;
2968         count = 0;
2969         length = 0;
2970         for (skb = tqp->next; pkt_cnt < tqp->qlen; skb = skb->next) {
2971                 if (skb_is_gso(skb)) {
2972                         if (pkt_cnt) {
2973                                 /* handle previous packets first */
2974                                 break;
2975                         }
2976                         count = 1;
2977                         length = skb->len - TX_OVERHEAD;
2978                         skb2 = skb_dequeue(tqp);
2979                         goto gso_skb;
2980                 }
2981
2982                 if ((skb_totallen + skb->len) > MAX_SINGLE_PACKET_SIZE)
2983                         break;
2984                 skb_totallen = skb->len + roundup(skb_totallen, sizeof(u32));
2985                 pkt_cnt++;
2986         }
2987
2988         /* copy to a single skb */
2989         skb = alloc_skb(skb_totallen, GFP_ATOMIC);
2990         if (!skb)
2991                 goto drop;
2992
2993         skb_put(skb, skb_totallen);
2994
2995         for (count = pos = 0; count < pkt_cnt; count++) {
2996                 skb2 = skb_dequeue(tqp);
2997                 if (skb2) {
2998                         length += (skb2->len - TX_OVERHEAD);
2999                         memcpy(skb->data + pos, skb2->data, skb2->len);
3000                         pos += roundup(skb2->len, sizeof(u32));
3001                         dev_kfree_skb(skb2);
3002                 }
3003         }
3004
3005 gso_skb:
3006         urb = usb_alloc_urb(0, GFP_ATOMIC);
3007         if (!urb)
3008                 goto drop;
3009
3010         entry = (struct skb_data *)skb->cb;
3011         entry->urb = urb;
3012         entry->dev = dev;
3013         entry->length = length;
3014         entry->num_of_packet = count;
3015
3016         spin_lock_irqsave(&dev->txq.lock, flags);
3017         ret = usb_autopm_get_interface_async(dev->intf);
3018         if (ret < 0) {
3019                 spin_unlock_irqrestore(&dev->txq.lock, flags);
3020                 goto drop;
3021         }
3022
3023         usb_fill_bulk_urb(urb, dev->udev, dev->pipe_out,
3024                           skb->data, skb->len, tx_complete, skb);
3025
3026         if (length % dev->maxpacket == 0) {
3027                 /* send USB_ZERO_PACKET */
3028                 urb->transfer_flags |= URB_ZERO_PACKET;
3029         }
3030
3031 #ifdef CONFIG_PM
3032         /* if this triggers the device is still a sleep */
3033         if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) {
3034                 /* transmission will be done in resume */
3035                 usb_anchor_urb(urb, &dev->deferred);
3036                 /* no use to process more packets */
3037                 netif_stop_queue(dev->net);
3038                 usb_put_urb(urb);
3039                 spin_unlock_irqrestore(&dev->txq.lock, flags);
3040                 netdev_dbg(dev->net, "Delaying transmission for resumption\n");
3041                 return;
3042         }
3043 #endif
3044
3045         ret = usb_submit_urb(urb, GFP_ATOMIC);
3046         switch (ret) {
3047         case 0:
3048                 netif_trans_update(dev->net);
3049                 lan78xx_queue_skb(&dev->txq, skb, tx_start);
3050                 if (skb_queue_len(&dev->txq) >= dev->tx_qlen)
3051                         netif_stop_queue(dev->net);
3052                 break;
3053         case -EPIPE:
3054                 netif_stop_queue(dev->net);
3055                 lan78xx_defer_kevent(dev, EVENT_TX_HALT);
3056                 usb_autopm_put_interface_async(dev->intf);
3057                 break;
3058         default:
3059                 usb_autopm_put_interface_async(dev->intf);
3060                 netif_dbg(dev, tx_err, dev->net,
3061                           "tx: submit urb err %d\n", ret);
3062                 break;
3063         }
3064
3065         spin_unlock_irqrestore(&dev->txq.lock, flags);
3066
3067         if (ret) {
3068                 netif_dbg(dev, tx_err, dev->net, "drop, code %d\n", ret);
3069 drop:
3070                 dev->net->stats.tx_dropped++;
3071                 if (skb)
3072                         dev_kfree_skb_any(skb);
3073                 usb_free_urb(urb);
3074         } else
3075                 netif_dbg(dev, tx_queued, dev->net,
3076                           "> tx, len %d, type 0x%x\n", length, skb->protocol);
3077 }
3078
3079 static void lan78xx_rx_bh(struct lan78xx_net *dev)
3080 {
3081         struct urb *urb;
3082         int i;
3083
3084         if (skb_queue_len(&dev->rxq) < dev->rx_qlen) {
3085                 for (i = 0; i < 10; i++) {
3086                         if (skb_queue_len(&dev->rxq) >= dev->rx_qlen)
3087                                 break;
3088                         urb = usb_alloc_urb(0, GFP_ATOMIC);
3089                         if (urb)
3090                                 if (rx_submit(dev, urb, GFP_ATOMIC) == -ENOLINK)
3091                                         return;
3092                 }
3093
3094                 if (skb_queue_len(&dev->rxq) < dev->rx_qlen)
3095                         tasklet_schedule(&dev->bh);
3096         }
3097         if (skb_queue_len(&dev->txq) < dev->tx_qlen)
3098                 netif_wake_queue(dev->net);
3099 }
3100
3101 static void lan78xx_bh(unsigned long param)
3102 {
3103         struct lan78xx_net *dev = (struct lan78xx_net *)param;
3104         struct sk_buff *skb;
3105         struct skb_data *entry;
3106
3107         while ((skb = skb_dequeue(&dev->done))) {
3108                 entry = (struct skb_data *)(skb->cb);
3109                 switch (entry->state) {
3110                 case rx_done:
3111                         entry->state = rx_cleanup;
3112                         rx_process(dev, skb);
3113                         continue;
3114                 case tx_done:
3115                         usb_free_urb(entry->urb);
3116                         dev_kfree_skb(skb);
3117                         continue;
3118                 case rx_cleanup:
3119                         usb_free_urb(entry->urb);
3120                         dev_kfree_skb(skb);
3121                         continue;
3122                 default:
3123                         netdev_dbg(dev->net, "skb state %d\n", entry->state);
3124                         return;
3125                 }
3126         }
3127
3128         if (netif_device_present(dev->net) && netif_running(dev->net)) {
3129                 /* reset update timer delta */
3130                 if (timer_pending(&dev->stat_monitor) && (dev->delta != 1)) {
3131                         dev->delta = 1;
3132                         mod_timer(&dev->stat_monitor,
3133                                   jiffies + STAT_UPDATE_TIMER);
3134                 }
3135
3136                 if (!skb_queue_empty(&dev->txq_pend))
3137                         lan78xx_tx_bh(dev);
3138
3139                 if (!timer_pending(&dev->delay) &&
3140                     !test_bit(EVENT_RX_HALT, &dev->flags))
3141                         lan78xx_rx_bh(dev);
3142         }
3143 }
3144
3145 static void lan78xx_delayedwork(struct work_struct *work)
3146 {
3147         int status;
3148         struct lan78xx_net *dev;
3149
3150         dev = container_of(work, struct lan78xx_net, wq.work);
3151
3152         if (test_bit(EVENT_TX_HALT, &dev->flags)) {
3153                 unlink_urbs(dev, &dev->txq);
3154                 status = usb_autopm_get_interface(dev->intf);
3155                 if (status < 0)
3156                         goto fail_pipe;
3157                 status = usb_clear_halt(dev->udev, dev->pipe_out);
3158                 usb_autopm_put_interface(dev->intf);
3159                 if (status < 0 &&
3160                     status != -EPIPE &&
3161                     status != -ESHUTDOWN) {
3162                         if (netif_msg_tx_err(dev))
3163 fail_pipe:
3164                                 netdev_err(dev->net,
3165                                            "can't clear tx halt, status %d\n",
3166                                            status);
3167                 } else {
3168                         clear_bit(EVENT_TX_HALT, &dev->flags);
3169                         if (status != -ESHUTDOWN)
3170                                 netif_wake_queue(dev->net);
3171                 }
3172         }
3173         if (test_bit(EVENT_RX_HALT, &dev->flags)) {
3174                 unlink_urbs(dev, &dev->rxq);
3175                 status = usb_autopm_get_interface(dev->intf);
3176                 if (status < 0)
3177                                 goto fail_halt;
3178                 status = usb_clear_halt(dev->udev, dev->pipe_in);
3179                 usb_autopm_put_interface(dev->intf);
3180                 if (status < 0 &&
3181                     status != -EPIPE &&
3182                     status != -ESHUTDOWN) {
3183                         if (netif_msg_rx_err(dev))
3184 fail_halt:
3185                                 netdev_err(dev->net,
3186                                            "can't clear rx halt, status %d\n",
3187                                            status);
3188                 } else {
3189                         clear_bit(EVENT_RX_HALT, &dev->flags);
3190                         tasklet_schedule(&dev->bh);
3191                 }
3192         }
3193
3194         if (test_bit(EVENT_LINK_RESET, &dev->flags)) {
3195                 int ret = 0;
3196
3197                 clear_bit(EVENT_LINK_RESET, &dev->flags);
3198                 status = usb_autopm_get_interface(dev->intf);
3199                 if (status < 0)
3200                         goto skip_reset;
3201                 if (lan78xx_link_reset(dev) < 0) {
3202                         usb_autopm_put_interface(dev->intf);
3203 skip_reset:
3204                         netdev_info(dev->net, "link reset failed (%d)\n",
3205                                     ret);
3206                 } else {
3207                         usb_autopm_put_interface(dev->intf);
3208                 }
3209         }
3210
3211         if (test_bit(EVENT_STAT_UPDATE, &dev->flags)) {
3212                 lan78xx_update_stats(dev);
3213
3214                 clear_bit(EVENT_STAT_UPDATE, &dev->flags);
3215
3216                 mod_timer(&dev->stat_monitor,
3217                           jiffies + (STAT_UPDATE_TIMER * dev->delta));
3218
3219                 dev->delta = min((dev->delta * 2), 50);
3220         }
3221 }
3222
3223 static void intr_complete(struct urb *urb)
3224 {
3225         struct lan78xx_net *dev = urb->context;
3226         int status = urb->status;
3227
3228         switch (status) {
3229         /* success */
3230         case 0:
3231                 lan78xx_status(dev, urb);
3232                 break;
3233
3234         /* software-driven interface shutdown */
3235         case -ENOENT:                   /* urb killed */
3236         case -ESHUTDOWN:                /* hardware gone */
3237                 netif_dbg(dev, ifdown, dev->net,
3238                           "intr shutdown, code %d\n", status);
3239                 return;
3240
3241         /* NOTE:  not throttling like RX/TX, since this endpoint
3242          * already polls infrequently
3243          */
3244         default:
3245                 netdev_dbg(dev->net, "intr status %d\n", status);
3246                 break;
3247         }
3248
3249         if (!netif_running(dev->net))
3250                 return;
3251
3252         memset(urb->transfer_buffer, 0, urb->transfer_buffer_length);
3253         status = usb_submit_urb(urb, GFP_ATOMIC);
3254         if (status != 0)
3255                 netif_err(dev, timer, dev->net,
3256                           "intr resubmit --> %d\n", status);
3257 }
3258
3259 static void lan78xx_disconnect(struct usb_interface *intf)
3260 {
3261         struct lan78xx_net              *dev;
3262         struct usb_device               *udev;
3263         struct net_device               *net;
3264
3265         dev = usb_get_intfdata(intf);
3266         usb_set_intfdata(intf, NULL);
3267         if (!dev)
3268                 return;
3269
3270         udev = interface_to_usbdev(intf);
3271
3272         net = dev->net;
3273         unregister_netdev(net);
3274
3275         cancel_delayed_work_sync(&dev->wq);
3276
3277         usb_scuttle_anchored_urbs(&dev->deferred);
3278
3279         lan78xx_unbind(dev, intf);
3280
3281         usb_kill_urb(dev->urb_intr);
3282         usb_free_urb(dev->urb_intr);
3283
3284         free_netdev(net);
3285         usb_put_dev(udev);
3286 }
3287
3288 static void lan78xx_tx_timeout(struct net_device *net)
3289 {
3290         struct lan78xx_net *dev = netdev_priv(net);
3291
3292         unlink_urbs(dev, &dev->txq);
3293         tasklet_schedule(&dev->bh);
3294 }
3295
3296 static const struct net_device_ops lan78xx_netdev_ops = {
3297         .ndo_open               = lan78xx_open,
3298         .ndo_stop               = lan78xx_stop,
3299         .ndo_start_xmit         = lan78xx_start_xmit,
3300         .ndo_tx_timeout         = lan78xx_tx_timeout,
3301         .ndo_change_mtu         = lan78xx_change_mtu,
3302         .ndo_set_mac_address    = lan78xx_set_mac_addr,
3303         .ndo_validate_addr      = eth_validate_addr,
3304         .ndo_do_ioctl           = lan78xx_ioctl,
3305         .ndo_set_rx_mode        = lan78xx_set_multicast,
3306         .ndo_set_features       = lan78xx_set_features,
3307         .ndo_vlan_rx_add_vid    = lan78xx_vlan_rx_add_vid,
3308         .ndo_vlan_rx_kill_vid   = lan78xx_vlan_rx_kill_vid,
3309 };
3310
3311 static void lan78xx_stat_monitor(unsigned long param)
3312 {
3313         struct lan78xx_net *dev;
3314
3315         dev = (struct lan78xx_net *)param;
3316
3317         lan78xx_defer_kevent(dev, EVENT_STAT_UPDATE);
3318 }
3319
3320 static int lan78xx_probe(struct usb_interface *intf,
3321                          const struct usb_device_id *id)
3322 {
3323         struct lan78xx_net *dev;
3324         struct net_device *netdev;
3325         struct usb_device *udev;
3326         int ret;
3327         unsigned maxp;
3328         unsigned period;
3329         u8 *buf = NULL;
3330
3331         udev = interface_to_usbdev(intf);
3332         udev = usb_get_dev(udev);
3333
3334         ret = -ENOMEM;
3335         netdev = alloc_etherdev(sizeof(struct lan78xx_net));
3336         if (!netdev) {
3337                         dev_err(&intf->dev, "Error: OOM\n");
3338                         goto out1;
3339         }
3340
3341         /* netdev_printk() needs this */
3342         SET_NETDEV_DEV(netdev, &intf->dev);
3343
3344         dev = netdev_priv(netdev);
3345         dev->udev = udev;
3346         dev->intf = intf;
3347         dev->net = netdev;
3348         dev->msg_enable = netif_msg_init(msg_level, NETIF_MSG_DRV
3349                                         | NETIF_MSG_PROBE | NETIF_MSG_LINK);
3350
3351         skb_queue_head_init(&dev->rxq);
3352         skb_queue_head_init(&dev->txq);
3353         skb_queue_head_init(&dev->done);
3354         skb_queue_head_init(&dev->rxq_pause);
3355         skb_queue_head_init(&dev->txq_pend);
3356         mutex_init(&dev->phy_mutex);
3357
3358         tasklet_init(&dev->bh, lan78xx_bh, (unsigned long)dev);
3359         INIT_DELAYED_WORK(&dev->wq, lan78xx_delayedwork);
3360         init_usb_anchor(&dev->deferred);
3361
3362         netdev->netdev_ops = &lan78xx_netdev_ops;
3363         netdev->watchdog_timeo = TX_TIMEOUT_JIFFIES;
3364         netdev->ethtool_ops = &lan78xx_ethtool_ops;
3365
3366         dev->stat_monitor.function = lan78xx_stat_monitor;
3367         dev->stat_monitor.data = (unsigned long)dev;
3368         dev->delta = 1;
3369         init_timer(&dev->stat_monitor);
3370
3371         mutex_init(&dev->stats.access_lock);
3372
3373         ret = lan78xx_bind(dev, intf);
3374         if (ret < 0)
3375                 goto out2;
3376         strcpy(netdev->name, "eth%d");
3377
3378         if (netdev->mtu > (dev->hard_mtu - netdev->hard_header_len))
3379                 netdev->mtu = dev->hard_mtu - netdev->hard_header_len;
3380
3381         dev->ep_blkin = (intf->cur_altsetting)->endpoint + 0;
3382         dev->ep_blkout = (intf->cur_altsetting)->endpoint + 1;
3383         dev->ep_intr = (intf->cur_altsetting)->endpoint + 2;
3384
3385         dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE);
3386         dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE);
3387
3388         dev->pipe_intr = usb_rcvintpipe(dev->udev,
3389                                         dev->ep_intr->desc.bEndpointAddress &
3390                                         USB_ENDPOINT_NUMBER_MASK);
3391         period = dev->ep_intr->desc.bInterval;
3392
3393         maxp = usb_maxpacket(dev->udev, dev->pipe_intr, 0);
3394         buf = kmalloc(maxp, GFP_KERNEL);
3395         if (buf) {
3396                 dev->urb_intr = usb_alloc_urb(0, GFP_KERNEL);
3397                 if (!dev->urb_intr) {
3398                         kfree(buf);
3399                         goto out3;
3400                 } else {
3401                         usb_fill_int_urb(dev->urb_intr, dev->udev,
3402                                          dev->pipe_intr, buf, maxp,
3403                                          intr_complete, dev, period);
3404                 }
3405         }
3406
3407         dev->maxpacket = usb_maxpacket(dev->udev, dev->pipe_out, 1);
3408
3409         /* driver requires remote-wakeup capability during autosuspend. */
3410         intf->needs_remote_wakeup = 1;
3411
3412         ret = register_netdev(netdev);
3413         if (ret != 0) {
3414                 netif_err(dev, probe, netdev, "couldn't register the device\n");
3415                 goto out2;
3416         }
3417
3418         usb_set_intfdata(intf, dev);
3419
3420         ret = device_set_wakeup_enable(&udev->dev, true);
3421
3422          /* Default delay of 2sec has more overhead than advantage.
3423           * Set to 10sec as default.
3424           */
3425         pm_runtime_set_autosuspend_delay(&udev->dev,
3426                                          DEFAULT_AUTOSUSPEND_DELAY);
3427
3428         return 0;
3429
3430 out3:
3431         lan78xx_unbind(dev, intf);
3432 out2:
3433         free_netdev(netdev);
3434 out1:
3435         usb_put_dev(udev);
3436
3437         return ret;
3438 }
3439
3440 static u16 lan78xx_wakeframe_crc16(const u8 *buf, int len)
3441 {
3442         const u16 crc16poly = 0x8005;
3443         int i;
3444         u16 bit, crc, msb;
3445         u8 data;
3446
3447         crc = 0xFFFF;
3448         for (i = 0; i < len; i++) {
3449                 data = *buf++;
3450                 for (bit = 0; bit < 8; bit++) {
3451                         msb = crc >> 15;
3452                         crc <<= 1;
3453
3454                         if (msb ^ (u16)(data & 1)) {
3455                                 crc ^= crc16poly;
3456                                 crc |= (u16)0x0001U;
3457                         }
3458                         data >>= 1;
3459                 }
3460         }
3461
3462         return crc;
3463 }
3464
3465 static int lan78xx_set_suspend(struct lan78xx_net *dev, u32 wol)
3466 {
3467         u32 buf;
3468         int ret;
3469         int mask_index;
3470         u16 crc;
3471         u32 temp_wucsr;
3472         u32 temp_pmt_ctl;
3473         const u8 ipv4_multicast[3] = { 0x01, 0x00, 0x5E };
3474         const u8 ipv6_multicast[3] = { 0x33, 0x33 };
3475         const u8 arp_type[2] = { 0x08, 0x06 };
3476
3477         ret = lan78xx_read_reg(dev, MAC_TX, &buf);
3478         buf &= ~MAC_TX_TXEN_;
3479         ret = lan78xx_write_reg(dev, MAC_TX, buf);
3480         ret = lan78xx_read_reg(dev, MAC_RX, &buf);
3481         buf &= ~MAC_RX_RXEN_;
3482         ret = lan78xx_write_reg(dev, MAC_RX, buf);
3483
3484         ret = lan78xx_write_reg(dev, WUCSR, 0);
3485         ret = lan78xx_write_reg(dev, WUCSR2, 0);
3486         ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL);
3487
3488         temp_wucsr = 0;
3489
3490         temp_pmt_ctl = 0;
3491         ret = lan78xx_read_reg(dev, PMT_CTL, &temp_pmt_ctl);
3492         temp_pmt_ctl &= ~PMT_CTL_RES_CLR_WKP_EN_;
3493         temp_pmt_ctl |= PMT_CTL_RES_CLR_WKP_STS_;
3494
3495         for (mask_index = 0; mask_index < NUM_OF_WUF_CFG; mask_index++)
3496                 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), 0);
3497
3498         mask_index = 0;
3499         if (wol & WAKE_PHY) {
3500                 temp_pmt_ctl |= PMT_CTL_PHY_WAKE_EN_;
3501
3502                 temp_pmt_ctl |= PMT_CTL_WOL_EN_;
3503                 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
3504                 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
3505         }
3506         if (wol & WAKE_MAGIC) {
3507                 temp_wucsr |= WUCSR_MPEN_;
3508
3509                 temp_pmt_ctl |= PMT_CTL_WOL_EN_;
3510                 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
3511                 temp_pmt_ctl |= PMT_CTL_SUS_MODE_3_;
3512         }
3513         if (wol & WAKE_BCAST) {
3514                 temp_wucsr |= WUCSR_BCST_EN_;
3515
3516                 temp_pmt_ctl |= PMT_CTL_WOL_EN_;
3517                 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
3518                 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
3519         }
3520         if (wol & WAKE_MCAST) {
3521                 temp_wucsr |= WUCSR_WAKE_EN_;
3522
3523                 /* set WUF_CFG & WUF_MASK for IPv4 Multicast */
3524                 crc = lan78xx_wakeframe_crc16(ipv4_multicast, 3);
3525                 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index),
3526                                         WUF_CFGX_EN_ |
3527                                         WUF_CFGX_TYPE_MCAST_ |
3528                                         (0 << WUF_CFGX_OFFSET_SHIFT_) |
3529                                         (crc & WUF_CFGX_CRC16_MASK_));
3530
3531                 ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 7);
3532                 ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0);
3533                 ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0);
3534                 ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0);
3535                 mask_index++;
3536
3537                 /* for IPv6 Multicast */
3538                 crc = lan78xx_wakeframe_crc16(ipv6_multicast, 2);
3539                 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index),
3540                                         WUF_CFGX_EN_ |
3541                                         WUF_CFGX_TYPE_MCAST_ |
3542                                         (0 << WUF_CFGX_OFFSET_SHIFT_) |
3543                                         (crc & WUF_CFGX_CRC16_MASK_));
3544
3545                 ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 3);
3546                 ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0);
3547                 ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0);
3548                 ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0);
3549                 mask_index++;
3550
3551                 temp_pmt_ctl |= PMT_CTL_WOL_EN_;
3552                 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
3553                 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
3554         }
3555         if (wol & WAKE_UCAST) {
3556                 temp_wucsr |= WUCSR_PFDA_EN_;
3557
3558                 temp_pmt_ctl |= PMT_CTL_WOL_EN_;
3559                 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
3560                 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
3561         }
3562         if (wol & WAKE_ARP) {
3563                 temp_wucsr |= WUCSR_WAKE_EN_;
3564
3565                 /* set WUF_CFG & WUF_MASK
3566                  * for packettype (offset 12,13) = ARP (0x0806)
3567                  */
3568                 crc = lan78xx_wakeframe_crc16(arp_type, 2);
3569                 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index),
3570                                         WUF_CFGX_EN_ |
3571                                         WUF_CFGX_TYPE_ALL_ |
3572                                         (0 << WUF_CFGX_OFFSET_SHIFT_) |
3573                                         (crc & WUF_CFGX_CRC16_MASK_));
3574
3575                 ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 0x3000);
3576                 ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0);
3577                 ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0);
3578                 ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0);
3579                 mask_index++;
3580
3581                 temp_pmt_ctl |= PMT_CTL_WOL_EN_;
3582                 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
3583                 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
3584         }
3585
3586         ret = lan78xx_write_reg(dev, WUCSR, temp_wucsr);
3587
3588         /* when multiple WOL bits are set */
3589         if (hweight_long((unsigned long)wol) > 1) {
3590                 temp_pmt_ctl |= PMT_CTL_WOL_EN_;
3591                 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
3592                 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
3593         }
3594         ret = lan78xx_write_reg(dev, PMT_CTL, temp_pmt_ctl);
3595
3596         /* clear WUPS */
3597         ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
3598         buf |= PMT_CTL_WUPS_MASK_;
3599         ret = lan78xx_write_reg(dev, PMT_CTL, buf);
3600
3601         ret = lan78xx_read_reg(dev, MAC_RX, &buf);
3602         buf |= MAC_RX_RXEN_;
3603         ret = lan78xx_write_reg(dev, MAC_RX, buf);
3604
3605         return 0;
3606 }
3607
3608 static int lan78xx_suspend(struct usb_interface *intf, pm_message_t message)
3609 {
3610         struct lan78xx_net *dev = usb_get_intfdata(intf);
3611         struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
3612         u32 buf;
3613         int ret;
3614         int event;
3615
3616         event = message.event;
3617
3618         if (!dev->suspend_count++) {
3619                 spin_lock_irq(&dev->txq.lock);
3620                 /* don't autosuspend while transmitting */
3621                 if ((skb_queue_len(&dev->txq) ||
3622                      skb_queue_len(&dev->txq_pend)) &&
3623                         PMSG_IS_AUTO(message)) {
3624                         spin_unlock_irq(&dev->txq.lock);
3625                         ret = -EBUSY;
3626                         goto out;
3627                 } else {
3628                         set_bit(EVENT_DEV_ASLEEP, &dev->flags);
3629                         spin_unlock_irq(&dev->txq.lock);
3630                 }
3631
3632                 /* stop TX & RX */
3633                 ret = lan78xx_read_reg(dev, MAC_TX, &buf);
3634                 buf &= ~MAC_TX_TXEN_;
3635                 ret = lan78xx_write_reg(dev, MAC_TX, buf);
3636                 ret = lan78xx_read_reg(dev, MAC_RX, &buf);
3637                 buf &= ~MAC_RX_RXEN_;
3638                 ret = lan78xx_write_reg(dev, MAC_RX, buf);
3639
3640                 /* empty out the rx and queues */
3641                 netif_device_detach(dev->net);
3642                 lan78xx_terminate_urbs(dev);
3643                 usb_kill_urb(dev->urb_intr);
3644
3645                 /* reattach */
3646                 netif_device_attach(dev->net);
3647         }
3648
3649         if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) {
3650                 del_timer(&dev->stat_monitor);
3651
3652                 if (PMSG_IS_AUTO(message)) {
3653                         /* auto suspend (selective suspend) */
3654                         ret = lan78xx_read_reg(dev, MAC_TX, &buf);
3655                         buf &= ~MAC_TX_TXEN_;
3656                         ret = lan78xx_write_reg(dev, MAC_TX, buf);
3657                         ret = lan78xx_read_reg(dev, MAC_RX, &buf);
3658                         buf &= ~MAC_RX_RXEN_;
3659                         ret = lan78xx_write_reg(dev, MAC_RX, buf);
3660
3661                         ret = lan78xx_write_reg(dev, WUCSR, 0);
3662                         ret = lan78xx_write_reg(dev, WUCSR2, 0);
3663                         ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL);
3664
3665                         /* set goodframe wakeup */
3666                         ret = lan78xx_read_reg(dev, WUCSR, &buf);
3667
3668                         buf |= WUCSR_RFE_WAKE_EN_;
3669                         buf |= WUCSR_STORE_WAKE_;
3670
3671                         ret = lan78xx_write_reg(dev, WUCSR, buf);
3672
3673                         ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
3674
3675                         buf &= ~PMT_CTL_RES_CLR_WKP_EN_;
3676                         buf |= PMT_CTL_RES_CLR_WKP_STS_;
3677
3678                         buf |= PMT_CTL_PHY_WAKE_EN_;
3679                         buf |= PMT_CTL_WOL_EN_;
3680                         buf &= ~PMT_CTL_SUS_MODE_MASK_;
3681                         buf |= PMT_CTL_SUS_MODE_3_;
3682
3683                         ret = lan78xx_write_reg(dev, PMT_CTL, buf);
3684
3685                         ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
3686
3687                         buf |= PMT_CTL_WUPS_MASK_;
3688
3689                         ret = lan78xx_write_reg(dev, PMT_CTL, buf);
3690
3691                         ret = lan78xx_read_reg(dev, MAC_RX, &buf);
3692                         buf |= MAC_RX_RXEN_;
3693                         ret = lan78xx_write_reg(dev, MAC_RX, buf);
3694                 } else {
3695                         lan78xx_set_suspend(dev, pdata->wol);
3696                 }
3697         }
3698
3699         ret = 0;
3700 out:
3701         return ret;
3702 }
3703
3704 static int lan78xx_resume(struct usb_interface *intf)
3705 {
3706         struct lan78xx_net *dev = usb_get_intfdata(intf);
3707         struct sk_buff *skb;
3708         struct urb *res;
3709         int ret;
3710         u32 buf;
3711
3712         if (!timer_pending(&dev->stat_monitor)) {
3713                 dev->delta = 1;
3714                 mod_timer(&dev->stat_monitor,
3715                           jiffies + STAT_UPDATE_TIMER);
3716         }
3717
3718         if (!--dev->suspend_count) {
3719                 /* resume interrupt URBs */
3720                 if (dev->urb_intr && test_bit(EVENT_DEV_OPEN, &dev->flags))
3721                                 usb_submit_urb(dev->urb_intr, GFP_NOIO);
3722
3723                 spin_lock_irq(&dev->txq.lock);
3724                 while ((res = usb_get_from_anchor(&dev->deferred))) {
3725                         skb = (struct sk_buff *)res->context;
3726                         ret = usb_submit_urb(res, GFP_ATOMIC);
3727                         if (ret < 0) {
3728                                 dev_kfree_skb_any(skb);
3729                                 usb_free_urb(res);
3730                                 usb_autopm_put_interface_async(dev->intf);
3731                         } else {
3732                                 netif_trans_update(dev->net);
3733                                 lan78xx_queue_skb(&dev->txq, skb, tx_start);
3734                         }
3735                 }
3736
3737                 clear_bit(EVENT_DEV_ASLEEP, &dev->flags);
3738                 spin_unlock_irq(&dev->txq.lock);
3739
3740                 if (test_bit(EVENT_DEV_OPEN, &dev->flags)) {
3741                         if (!(skb_queue_len(&dev->txq) >= dev->tx_qlen))
3742                                 netif_start_queue(dev->net);
3743                         tasklet_schedule(&dev->bh);
3744                 }
3745         }
3746
3747         ret = lan78xx_write_reg(dev, WUCSR2, 0);
3748         ret = lan78xx_write_reg(dev, WUCSR, 0);
3749         ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL);
3750
3751         ret = lan78xx_write_reg(dev, WUCSR2, WUCSR2_NS_RCD_ |
3752                                              WUCSR2_ARP_RCD_ |
3753                                              WUCSR2_IPV6_TCPSYN_RCD_ |
3754                                              WUCSR2_IPV4_TCPSYN_RCD_);
3755
3756         ret = lan78xx_write_reg(dev, WUCSR, WUCSR_EEE_TX_WAKE_ |
3757                                             WUCSR_EEE_RX_WAKE_ |
3758                                             WUCSR_PFDA_FR_ |
3759                                             WUCSR_RFE_WAKE_FR_ |
3760                                             WUCSR_WUFR_ |
3761                                             WUCSR_MPR_ |
3762                                             WUCSR_BCST_FR_);
3763
3764         ret = lan78xx_read_reg(dev, MAC_TX, &buf);
3765         buf |= MAC_TX_TXEN_;
3766         ret = lan78xx_write_reg(dev, MAC_TX, buf);
3767
3768         return 0;
3769 }
3770
3771 static int lan78xx_reset_resume(struct usb_interface *intf)
3772 {
3773         struct lan78xx_net *dev = usb_get_intfdata(intf);
3774
3775         lan78xx_reset(dev);
3776
3777         lan78xx_phy_init(dev);
3778
3779         return lan78xx_resume(intf);
3780 }
3781
3782 static const struct usb_device_id products[] = {
3783         {
3784         /* LAN7800 USB Gigabit Ethernet Device */
3785         USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7800_USB_PRODUCT_ID),
3786         },
3787         {
3788         /* LAN7850 USB Gigabit Ethernet Device */
3789         USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7850_USB_PRODUCT_ID),
3790         },
3791         {},
3792 };
3793 MODULE_DEVICE_TABLE(usb, products);
3794
3795 static struct usb_driver lan78xx_driver = {
3796         .name                   = DRIVER_NAME,
3797         .id_table               = products,
3798         .probe                  = lan78xx_probe,
3799         .disconnect             = lan78xx_disconnect,
3800         .suspend                = lan78xx_suspend,
3801         .resume                 = lan78xx_resume,
3802         .reset_resume           = lan78xx_reset_resume,
3803         .supports_autosuspend   = 1,
3804         .disable_hub_initiated_lpm = 1,
3805 };
3806
3807 module_usb_driver(lan78xx_driver);
3808
3809 MODULE_AUTHOR(DRIVER_AUTHOR);
3810 MODULE_DESCRIPTION(DRIVER_DESC);
3811 MODULE_LICENSE("GPL");