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