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