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