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