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