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