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