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