1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright (C) 2015 Microchip Technology
5 #include <linux/module.h>
6 #include <linux/netdevice.h>
7 #include <linux/etherdevice.h>
8 #include <linux/ethtool.h>
10 #include <linux/crc32.h>
11 #include <linux/signal.h>
12 #include <linux/slab.h>
13 #include <linux/if_vlan.h>
14 #include <linux/uaccess.h>
15 #include <linux/linkmode.h>
16 #include <linux/list.h>
18 #include <linux/ipv6.h>
19 #include <linux/mdio.h>
20 #include <linux/phy.h>
21 #include <net/ip6_checksum.h>
22 #include <net/vxlan.h>
23 #include <linux/interrupt.h>
24 #include <linux/irqdomain.h>
25 #include <linux/irq.h>
26 #include <linux/irqchip/chained_irq.h>
27 #include <linux/microchipphy.h>
28 #include <linux/phy_fixed.h>
29 #include <linux/of_mdio.h>
30 #include <linux/of_net.h>
33 #define DRIVER_AUTHOR "WOOJUNG HUH <woojung.huh@microchip.com>"
34 #define DRIVER_DESC "LAN78XX USB 3.0 Gigabit Ethernet Devices"
35 #define DRIVER_NAME "lan78xx"
37 #define TX_TIMEOUT_JIFFIES (5 * HZ)
38 #define THROTTLE_JIFFIES (HZ / 8)
39 #define UNLINK_TIMEOUT_MS 3
41 #define RX_MAX_QUEUE_MEMORY (60 * 1518)
43 #define SS_USB_PKT_SIZE (1024)
44 #define HS_USB_PKT_SIZE (512)
45 #define FS_USB_PKT_SIZE (64)
47 #define MAX_RX_FIFO_SIZE (12 * 1024)
48 #define MAX_TX_FIFO_SIZE (12 * 1024)
50 #define FLOW_THRESHOLD(n) ((((n) + 511) / 512) & 0x7F)
51 #define FLOW_CTRL_THRESHOLD(on, off) ((FLOW_THRESHOLD(on) << 0) | \
52 (FLOW_THRESHOLD(off) << 8))
54 /* Flow control turned on when Rx FIFO level rises above this level (bytes) */
55 #define FLOW_ON_SS 9216
56 #define FLOW_ON_HS 8704
58 /* Flow control turned off when Rx FIFO level falls below this level (bytes) */
59 #define FLOW_OFF_SS 4096
60 #define FLOW_OFF_HS 1024
62 #define DEFAULT_BURST_CAP_SIZE (MAX_TX_FIFO_SIZE)
63 #define DEFAULT_BULK_IN_DELAY (0x0800)
64 #define MAX_SINGLE_PACKET_SIZE (9000)
65 #define DEFAULT_TX_CSUM_ENABLE (true)
66 #define DEFAULT_RX_CSUM_ENABLE (true)
67 #define DEFAULT_TSO_CSUM_ENABLE (true)
68 #define DEFAULT_VLAN_FILTER_ENABLE (true)
69 #define DEFAULT_VLAN_RX_OFFLOAD (true)
70 #define TX_OVERHEAD (8)
73 #define LAN78XX_USB_VENDOR_ID (0x0424)
74 #define LAN7800_USB_PRODUCT_ID (0x7800)
75 #define LAN7850_USB_PRODUCT_ID (0x7850)
76 #define LAN7801_USB_PRODUCT_ID (0x7801)
77 #define LAN78XX_EEPROM_MAGIC (0x78A5)
78 #define LAN78XX_OTP_MAGIC (0x78F3)
79 #define AT29M2AF_USB_VENDOR_ID (0x07C9)
80 #define AT29M2AF_USB_PRODUCT_ID (0x0012)
85 #define EEPROM_INDICATOR (0xA5)
86 #define EEPROM_MAC_OFFSET (0x01)
87 #define MAX_EEPROM_SIZE 512
88 #define OTP_INDICATOR_1 (0xF3)
89 #define OTP_INDICATOR_2 (0xF7)
91 #define WAKE_ALL (WAKE_PHY | WAKE_UCAST | \
92 WAKE_MCAST | WAKE_BCAST | \
93 WAKE_ARP | WAKE_MAGIC)
95 /* USB related defines */
96 #define BULK_IN_PIPE 1
97 #define BULK_OUT_PIPE 2
99 /* default autosuspend delay (mSec)*/
100 #define DEFAULT_AUTOSUSPEND_DELAY (10 * 1000)
102 /* statistic update interval (mSec) */
103 #define STAT_UPDATE_TIMER (1 * 1000)
105 /* time to wait for MAC or FCT to stop (jiffies) */
106 #define HW_DISABLE_TIMEOUT (HZ / 10)
108 /* time to wait between polling MAC or FCT state (ms) */
109 #define HW_DISABLE_DELAY_MS 1
111 /* defines interrupts from interrupt EP */
112 #define MAX_INT_EP (32)
113 #define INT_EP_INTEP (31)
114 #define INT_EP_OTP_WR_DONE (28)
115 #define INT_EP_EEE_TX_LPI_START (26)
116 #define INT_EP_EEE_TX_LPI_STOP (25)
117 #define INT_EP_EEE_RX_LPI (24)
118 #define INT_EP_MAC_RESET_TIMEOUT (23)
119 #define INT_EP_RDFO (22)
120 #define INT_EP_TXE (21)
121 #define INT_EP_USB_STATUS (20)
122 #define INT_EP_TX_DIS (19)
123 #define INT_EP_RX_DIS (18)
124 #define INT_EP_PHY (17)
125 #define INT_EP_DP (16)
126 #define INT_EP_MAC_ERR (15)
127 #define INT_EP_TDFU (14)
128 #define INT_EP_TDFO (13)
129 #define INT_EP_UTX (12)
130 #define INT_EP_GPIO_11 (11)
131 #define INT_EP_GPIO_10 (10)
132 #define INT_EP_GPIO_9 (9)
133 #define INT_EP_GPIO_8 (8)
134 #define INT_EP_GPIO_7 (7)
135 #define INT_EP_GPIO_6 (6)
136 #define INT_EP_GPIO_5 (5)
137 #define INT_EP_GPIO_4 (4)
138 #define INT_EP_GPIO_3 (3)
139 #define INT_EP_GPIO_2 (2)
140 #define INT_EP_GPIO_1 (1)
141 #define INT_EP_GPIO_0 (0)
143 static const char lan78xx_gstrings
[][ETH_GSTRING_LEN
] = {
145 "RX Alignment Errors",
146 "Rx Fragment Errors",
148 "RX Undersize Frame Errors",
149 "RX Oversize Frame Errors",
151 "RX Unicast Byte Count",
152 "RX Broadcast Byte Count",
153 "RX Multicast Byte Count",
155 "RX Broadcast Frames",
156 "RX Multicast Frames",
159 "RX 65 - 127 Byte Frames",
160 "RX 128 - 255 Byte Frames",
161 "RX 256 - 511 Bytes Frames",
162 "RX 512 - 1023 Byte Frames",
163 "RX 1024 - 1518 Byte Frames",
164 "RX Greater 1518 Byte Frames",
165 "EEE RX LPI Transitions",
168 "TX Excess Deferral Errors",
171 "TX Single Collisions",
172 "TX Multiple Collisions",
173 "TX Excessive Collision",
174 "TX Late Collisions",
175 "TX Unicast Byte Count",
176 "TX Broadcast Byte Count",
177 "TX Multicast Byte Count",
179 "TX Broadcast Frames",
180 "TX Multicast Frames",
183 "TX 65 - 127 Byte Frames",
184 "TX 128 - 255 Byte Frames",
185 "TX 256 - 511 Bytes Frames",
186 "TX 512 - 1023 Byte Frames",
187 "TX 1024 - 1518 Byte Frames",
188 "TX Greater 1518 Byte Frames",
189 "EEE TX LPI Transitions",
193 struct lan78xx_statstage
{
195 u32 rx_alignment_errors
;
196 u32 rx_fragment_errors
;
197 u32 rx_jabber_errors
;
198 u32 rx_undersize_frame_errors
;
199 u32 rx_oversize_frame_errors
;
200 u32 rx_dropped_frames
;
201 u32 rx_unicast_byte_count
;
202 u32 rx_broadcast_byte_count
;
203 u32 rx_multicast_byte_count
;
204 u32 rx_unicast_frames
;
205 u32 rx_broadcast_frames
;
206 u32 rx_multicast_frames
;
208 u32 rx_64_byte_frames
;
209 u32 rx_65_127_byte_frames
;
210 u32 rx_128_255_byte_frames
;
211 u32 rx_256_511_bytes_frames
;
212 u32 rx_512_1023_byte_frames
;
213 u32 rx_1024_1518_byte_frames
;
214 u32 rx_greater_1518_byte_frames
;
215 u32 eee_rx_lpi_transitions
;
218 u32 tx_excess_deferral_errors
;
219 u32 tx_carrier_errors
;
220 u32 tx_bad_byte_count
;
221 u32 tx_single_collisions
;
222 u32 tx_multiple_collisions
;
223 u32 tx_excessive_collision
;
224 u32 tx_late_collisions
;
225 u32 tx_unicast_byte_count
;
226 u32 tx_broadcast_byte_count
;
227 u32 tx_multicast_byte_count
;
228 u32 tx_unicast_frames
;
229 u32 tx_broadcast_frames
;
230 u32 tx_multicast_frames
;
232 u32 tx_64_byte_frames
;
233 u32 tx_65_127_byte_frames
;
234 u32 tx_128_255_byte_frames
;
235 u32 tx_256_511_bytes_frames
;
236 u32 tx_512_1023_byte_frames
;
237 u32 tx_1024_1518_byte_frames
;
238 u32 tx_greater_1518_byte_frames
;
239 u32 eee_tx_lpi_transitions
;
243 struct lan78xx_statstage64
{
245 u64 rx_alignment_errors
;
246 u64 rx_fragment_errors
;
247 u64 rx_jabber_errors
;
248 u64 rx_undersize_frame_errors
;
249 u64 rx_oversize_frame_errors
;
250 u64 rx_dropped_frames
;
251 u64 rx_unicast_byte_count
;
252 u64 rx_broadcast_byte_count
;
253 u64 rx_multicast_byte_count
;
254 u64 rx_unicast_frames
;
255 u64 rx_broadcast_frames
;
256 u64 rx_multicast_frames
;
258 u64 rx_64_byte_frames
;
259 u64 rx_65_127_byte_frames
;
260 u64 rx_128_255_byte_frames
;
261 u64 rx_256_511_bytes_frames
;
262 u64 rx_512_1023_byte_frames
;
263 u64 rx_1024_1518_byte_frames
;
264 u64 rx_greater_1518_byte_frames
;
265 u64 eee_rx_lpi_transitions
;
268 u64 tx_excess_deferral_errors
;
269 u64 tx_carrier_errors
;
270 u64 tx_bad_byte_count
;
271 u64 tx_single_collisions
;
272 u64 tx_multiple_collisions
;
273 u64 tx_excessive_collision
;
274 u64 tx_late_collisions
;
275 u64 tx_unicast_byte_count
;
276 u64 tx_broadcast_byte_count
;
277 u64 tx_multicast_byte_count
;
278 u64 tx_unicast_frames
;
279 u64 tx_broadcast_frames
;
280 u64 tx_multicast_frames
;
282 u64 tx_64_byte_frames
;
283 u64 tx_65_127_byte_frames
;
284 u64 tx_128_255_byte_frames
;
285 u64 tx_256_511_bytes_frames
;
286 u64 tx_512_1023_byte_frames
;
287 u64 tx_1024_1518_byte_frames
;
288 u64 tx_greater_1518_byte_frames
;
289 u64 eee_tx_lpi_transitions
;
293 static u32 lan78xx_regs
[] = {
315 #define PHY_REG_SIZE (32 * sizeof(u32))
319 struct lan78xx_priv
{
320 struct lan78xx_net
*dev
;
322 u32 mchash_table
[DP_SEL_VHF_HASH_LEN
]; /* multicast hash table */
323 u32 pfilter_table
[NUM_OF_MAF
][2]; /* perfect filter table */
324 u32 vlan_table
[DP_SEL_VHF_VLAN_LEN
];
325 struct mutex dataport_mutex
; /* for dataport access */
326 spinlock_t rfe_ctl_lock
; /* for rfe register access */
327 struct work_struct set_multicast
;
328 struct work_struct set_vlan
;
342 struct skb_data
{ /* skb->cb is one of these */
344 struct lan78xx_net
*dev
;
345 enum skb_state state
;
351 struct usb_ctrlrequest req
;
352 struct lan78xx_net
*dev
;
355 #define EVENT_TX_HALT 0
356 #define EVENT_RX_HALT 1
357 #define EVENT_RX_MEMORY 2
358 #define EVENT_STS_SPLIT 3
359 #define EVENT_LINK_RESET 4
360 #define EVENT_RX_PAUSED 5
361 #define EVENT_DEV_WAKING 6
362 #define EVENT_DEV_ASLEEP 7
363 #define EVENT_DEV_OPEN 8
364 #define EVENT_STAT_UPDATE 9
365 #define EVENT_DEV_DISCONNECT 10
368 struct mutex access_lock
; /* for stats access */
369 struct lan78xx_statstage saved
;
370 struct lan78xx_statstage rollover_count
;
371 struct lan78xx_statstage rollover_max
;
372 struct lan78xx_statstage64 curr_stat
;
375 struct irq_domain_data
{
376 struct irq_domain
*irqdomain
;
378 struct irq_chip
*irqchip
;
379 irq_flow_handler_t irq_handler
;
381 struct mutex irq_lock
; /* for irq bus access */
385 struct net_device
*net
;
386 struct usb_device
*udev
;
387 struct usb_interface
*intf
;
392 struct sk_buff_head rxq
;
393 struct sk_buff_head txq
;
394 struct sk_buff_head done
;
395 struct sk_buff_head txq_pend
;
397 struct tasklet_struct bh
;
398 struct delayed_work wq
;
402 struct urb
*urb_intr
;
403 struct usb_anchor deferred
;
405 struct mutex dev_mutex
; /* serialise open/stop wrt suspend/resume */
406 struct mutex phy_mutex
; /* for phy access */
407 unsigned int pipe_in
, pipe_out
, pipe_intr
;
409 u32 hard_mtu
; /* count any extra framing */
410 size_t rx_urb_size
; /* size for rx urbs */
414 wait_queue_head_t
*wait
;
415 unsigned char suspend_count
;
417 unsigned int maxpacket
;
418 struct timer_list stat_monitor
;
420 unsigned long data
[5];
427 struct mii_bus
*mdiobus
;
428 phy_interface_t interface
;
431 u8 fc_request_control
;
434 struct statstage stats
;
436 struct irq_domain_data domain_data
;
439 /* define external phy id */
440 #define PHY_LAN8835 (0x0007C130)
441 #define PHY_KSZ9031RNX (0x00221620)
443 /* use ethtool to change the level for any given device */
444 static int msg_level
= -1;
445 module_param(msg_level
, int, 0);
446 MODULE_PARM_DESC(msg_level
, "Override default message level");
448 static int lan78xx_read_reg(struct lan78xx_net
*dev
, u32 index
, u32
*data
)
453 if (test_bit(EVENT_DEV_DISCONNECT
, &dev
->flags
))
456 buf
= kmalloc(sizeof(u32
), GFP_KERNEL
);
460 ret
= usb_control_msg(dev
->udev
, usb_rcvctrlpipe(dev
->udev
, 0),
461 USB_VENDOR_REQUEST_READ_REGISTER
,
462 USB_DIR_IN
| USB_TYPE_VENDOR
| USB_RECIP_DEVICE
,
463 0, index
, buf
, 4, USB_CTRL_GET_TIMEOUT
);
464 if (likely(ret
>= 0)) {
467 } else if (net_ratelimit()) {
468 netdev_warn(dev
->net
,
469 "Failed to read register index 0x%08x. ret = %d",
478 static int lan78xx_write_reg(struct lan78xx_net
*dev
, u32 index
, u32 data
)
483 if (test_bit(EVENT_DEV_DISCONNECT
, &dev
->flags
))
486 buf
= kmalloc(sizeof(u32
), GFP_KERNEL
);
493 ret
= usb_control_msg(dev
->udev
, usb_sndctrlpipe(dev
->udev
, 0),
494 USB_VENDOR_REQUEST_WRITE_REGISTER
,
495 USB_DIR_OUT
| USB_TYPE_VENDOR
| USB_RECIP_DEVICE
,
496 0, index
, buf
, 4, USB_CTRL_SET_TIMEOUT
);
497 if (unlikely(ret
< 0) &&
499 netdev_warn(dev
->net
,
500 "Failed to write register index 0x%08x. ret = %d",
509 static int lan78xx_update_reg(struct lan78xx_net
*dev
, u32 reg
, u32 mask
,
515 ret
= lan78xx_read_reg(dev
, reg
, &buf
);
520 buf
|= (mask
& data
);
522 ret
= lan78xx_write_reg(dev
, reg
, buf
);
529 static int lan78xx_read_stats(struct lan78xx_net
*dev
,
530 struct lan78xx_statstage
*data
)
534 struct lan78xx_statstage
*stats
;
538 stats
= kmalloc(sizeof(*stats
), GFP_KERNEL
);
542 ret
= usb_control_msg(dev
->udev
,
543 usb_rcvctrlpipe(dev
->udev
, 0),
544 USB_VENDOR_REQUEST_GET_STATS
,
545 USB_DIR_IN
| USB_TYPE_VENDOR
| USB_RECIP_DEVICE
,
550 USB_CTRL_SET_TIMEOUT
);
551 if (likely(ret
>= 0)) {
554 for (i
= 0; i
< sizeof(*stats
) / sizeof(u32
); i
++) {
555 le32_to_cpus(&src
[i
]);
559 netdev_warn(dev
->net
,
560 "Failed to read stat ret = %d", ret
);
568 #define check_counter_rollover(struct1, dev_stats, member) \
570 if ((struct1)->member < (dev_stats).saved.member) \
571 (dev_stats).rollover_count.member++; \
574 static void lan78xx_check_stat_rollover(struct lan78xx_net
*dev
,
575 struct lan78xx_statstage
*stats
)
577 check_counter_rollover(stats
, dev
->stats
, rx_fcs_errors
);
578 check_counter_rollover(stats
, dev
->stats
, rx_alignment_errors
);
579 check_counter_rollover(stats
, dev
->stats
, rx_fragment_errors
);
580 check_counter_rollover(stats
, dev
->stats
, rx_jabber_errors
);
581 check_counter_rollover(stats
, dev
->stats
, rx_undersize_frame_errors
);
582 check_counter_rollover(stats
, dev
->stats
, rx_oversize_frame_errors
);
583 check_counter_rollover(stats
, dev
->stats
, rx_dropped_frames
);
584 check_counter_rollover(stats
, dev
->stats
, rx_unicast_byte_count
);
585 check_counter_rollover(stats
, dev
->stats
, rx_broadcast_byte_count
);
586 check_counter_rollover(stats
, dev
->stats
, rx_multicast_byte_count
);
587 check_counter_rollover(stats
, dev
->stats
, rx_unicast_frames
);
588 check_counter_rollover(stats
, dev
->stats
, rx_broadcast_frames
);
589 check_counter_rollover(stats
, dev
->stats
, rx_multicast_frames
);
590 check_counter_rollover(stats
, dev
->stats
, rx_pause_frames
);
591 check_counter_rollover(stats
, dev
->stats
, rx_64_byte_frames
);
592 check_counter_rollover(stats
, dev
->stats
, rx_65_127_byte_frames
);
593 check_counter_rollover(stats
, dev
->stats
, rx_128_255_byte_frames
);
594 check_counter_rollover(stats
, dev
->stats
, rx_256_511_bytes_frames
);
595 check_counter_rollover(stats
, dev
->stats
, rx_512_1023_byte_frames
);
596 check_counter_rollover(stats
, dev
->stats
, rx_1024_1518_byte_frames
);
597 check_counter_rollover(stats
, dev
->stats
, rx_greater_1518_byte_frames
);
598 check_counter_rollover(stats
, dev
->stats
, eee_rx_lpi_transitions
);
599 check_counter_rollover(stats
, dev
->stats
, eee_rx_lpi_time
);
600 check_counter_rollover(stats
, dev
->stats
, tx_fcs_errors
);
601 check_counter_rollover(stats
, dev
->stats
, tx_excess_deferral_errors
);
602 check_counter_rollover(stats
, dev
->stats
, tx_carrier_errors
);
603 check_counter_rollover(stats
, dev
->stats
, tx_bad_byte_count
);
604 check_counter_rollover(stats
, dev
->stats
, tx_single_collisions
);
605 check_counter_rollover(stats
, dev
->stats
, tx_multiple_collisions
);
606 check_counter_rollover(stats
, dev
->stats
, tx_excessive_collision
);
607 check_counter_rollover(stats
, dev
->stats
, tx_late_collisions
);
608 check_counter_rollover(stats
, dev
->stats
, tx_unicast_byte_count
);
609 check_counter_rollover(stats
, dev
->stats
, tx_broadcast_byte_count
);
610 check_counter_rollover(stats
, dev
->stats
, tx_multicast_byte_count
);
611 check_counter_rollover(stats
, dev
->stats
, tx_unicast_frames
);
612 check_counter_rollover(stats
, dev
->stats
, tx_broadcast_frames
);
613 check_counter_rollover(stats
, dev
->stats
, tx_multicast_frames
);
614 check_counter_rollover(stats
, dev
->stats
, tx_pause_frames
);
615 check_counter_rollover(stats
, dev
->stats
, tx_64_byte_frames
);
616 check_counter_rollover(stats
, dev
->stats
, tx_65_127_byte_frames
);
617 check_counter_rollover(stats
, dev
->stats
, tx_128_255_byte_frames
);
618 check_counter_rollover(stats
, dev
->stats
, tx_256_511_bytes_frames
);
619 check_counter_rollover(stats
, dev
->stats
, tx_512_1023_byte_frames
);
620 check_counter_rollover(stats
, dev
->stats
, tx_1024_1518_byte_frames
);
621 check_counter_rollover(stats
, dev
->stats
, tx_greater_1518_byte_frames
);
622 check_counter_rollover(stats
, dev
->stats
, eee_tx_lpi_transitions
);
623 check_counter_rollover(stats
, dev
->stats
, eee_tx_lpi_time
);
625 memcpy(&dev
->stats
.saved
, stats
, sizeof(struct lan78xx_statstage
));
628 static void lan78xx_update_stats(struct lan78xx_net
*dev
)
630 u32
*p
, *count
, *max
;
633 struct lan78xx_statstage lan78xx_stats
;
635 if (usb_autopm_get_interface(dev
->intf
) < 0)
638 p
= (u32
*)&lan78xx_stats
;
639 count
= (u32
*)&dev
->stats
.rollover_count
;
640 max
= (u32
*)&dev
->stats
.rollover_max
;
641 data
= (u64
*)&dev
->stats
.curr_stat
;
643 mutex_lock(&dev
->stats
.access_lock
);
645 if (lan78xx_read_stats(dev
, &lan78xx_stats
) > 0)
646 lan78xx_check_stat_rollover(dev
, &lan78xx_stats
);
648 for (i
= 0; i
< (sizeof(lan78xx_stats
) / (sizeof(u32
))); i
++)
649 data
[i
] = (u64
)p
[i
] + ((u64
)count
[i
] * ((u64
)max
[i
] + 1));
651 mutex_unlock(&dev
->stats
.access_lock
);
653 usb_autopm_put_interface(dev
->intf
);
656 /* Loop until the read is completed with timeout called with phy_mutex held */
657 static int lan78xx_phy_wait_not_busy(struct lan78xx_net
*dev
)
659 unsigned long start_time
= jiffies
;
664 ret
= lan78xx_read_reg(dev
, MII_ACC
, &val
);
665 if (unlikely(ret
< 0))
668 if (!(val
& MII_ACC_MII_BUSY_
))
670 } while (!time_after(jiffies
, start_time
+ HZ
));
675 static inline u32
mii_access(int id
, int index
, int read
)
679 ret
= ((u32
)id
<< MII_ACC_PHY_ADDR_SHIFT_
) & MII_ACC_PHY_ADDR_MASK_
;
680 ret
|= ((u32
)index
<< MII_ACC_MIIRINDA_SHIFT_
) & MII_ACC_MIIRINDA_MASK_
;
682 ret
|= MII_ACC_MII_READ_
;
684 ret
|= MII_ACC_MII_WRITE_
;
685 ret
|= MII_ACC_MII_BUSY_
;
690 static int lan78xx_wait_eeprom(struct lan78xx_net
*dev
)
692 unsigned long start_time
= jiffies
;
697 ret
= lan78xx_read_reg(dev
, E2P_CMD
, &val
);
698 if (unlikely(ret
< 0))
701 if (!(val
& E2P_CMD_EPC_BUSY_
) ||
702 (val
& E2P_CMD_EPC_TIMEOUT_
))
704 usleep_range(40, 100);
705 } while (!time_after(jiffies
, start_time
+ HZ
));
707 if (val
& (E2P_CMD_EPC_TIMEOUT_
| E2P_CMD_EPC_BUSY_
)) {
708 netdev_warn(dev
->net
, "EEPROM read operation timeout");
715 static int lan78xx_eeprom_confirm_not_busy(struct lan78xx_net
*dev
)
717 unsigned long start_time
= jiffies
;
722 ret
= lan78xx_read_reg(dev
, E2P_CMD
, &val
);
723 if (unlikely(ret
< 0))
726 if (!(val
& E2P_CMD_EPC_BUSY_
))
729 usleep_range(40, 100);
730 } while (!time_after(jiffies
, start_time
+ HZ
));
732 netdev_warn(dev
->net
, "EEPROM is busy");
736 static int lan78xx_read_raw_eeprom(struct lan78xx_net
*dev
, u32 offset
,
737 u32 length
, u8
*data
)
744 /* depends on chip, some EEPROM pins are muxed with LED function.
745 * disable & restore LED function to access EEPROM.
747 ret
= lan78xx_read_reg(dev
, HW_CFG
, &val
);
749 if (dev
->chipid
== ID_REV_CHIP_ID_7800_
) {
750 val
&= ~(HW_CFG_LED1_EN_
| HW_CFG_LED0_EN_
);
751 ret
= lan78xx_write_reg(dev
, HW_CFG
, val
);
754 retval
= lan78xx_eeprom_confirm_not_busy(dev
);
758 for (i
= 0; i
< length
; i
++) {
759 val
= E2P_CMD_EPC_BUSY_
| E2P_CMD_EPC_CMD_READ_
;
760 val
|= (offset
& E2P_CMD_EPC_ADDR_MASK_
);
761 ret
= lan78xx_write_reg(dev
, E2P_CMD
, val
);
762 if (unlikely(ret
< 0)) {
767 retval
= lan78xx_wait_eeprom(dev
);
771 ret
= lan78xx_read_reg(dev
, E2P_DATA
, &val
);
772 if (unlikely(ret
< 0)) {
777 data
[i
] = val
& 0xFF;
783 if (dev
->chipid
== ID_REV_CHIP_ID_7800_
)
784 ret
= lan78xx_write_reg(dev
, HW_CFG
, saved
);
789 static int lan78xx_read_eeprom(struct lan78xx_net
*dev
, u32 offset
,
790 u32 length
, u8
*data
)
795 ret
= lan78xx_read_raw_eeprom(dev
, 0, 1, &sig
);
796 if ((ret
== 0) && (sig
== EEPROM_INDICATOR
))
797 ret
= lan78xx_read_raw_eeprom(dev
, offset
, length
, data
);
804 static int lan78xx_write_raw_eeprom(struct lan78xx_net
*dev
, u32 offset
,
805 u32 length
, u8
*data
)
812 /* depends on chip, some EEPROM pins are muxed with LED function.
813 * disable & restore LED function to access EEPROM.
815 ret
= lan78xx_read_reg(dev
, HW_CFG
, &val
);
817 if (dev
->chipid
== ID_REV_CHIP_ID_7800_
) {
818 val
&= ~(HW_CFG_LED1_EN_
| HW_CFG_LED0_EN_
);
819 ret
= lan78xx_write_reg(dev
, HW_CFG
, val
);
822 retval
= lan78xx_eeprom_confirm_not_busy(dev
);
826 /* Issue write/erase enable command */
827 val
= E2P_CMD_EPC_BUSY_
| E2P_CMD_EPC_CMD_EWEN_
;
828 ret
= lan78xx_write_reg(dev
, E2P_CMD
, val
);
829 if (unlikely(ret
< 0)) {
834 retval
= lan78xx_wait_eeprom(dev
);
838 for (i
= 0; i
< length
; i
++) {
839 /* Fill data register */
841 ret
= lan78xx_write_reg(dev
, E2P_DATA
, val
);
847 /* Send "write" command */
848 val
= E2P_CMD_EPC_BUSY_
| E2P_CMD_EPC_CMD_WRITE_
;
849 val
|= (offset
& E2P_CMD_EPC_ADDR_MASK_
);
850 ret
= lan78xx_write_reg(dev
, E2P_CMD
, val
);
856 retval
= lan78xx_wait_eeprom(dev
);
865 if (dev
->chipid
== ID_REV_CHIP_ID_7800_
)
866 ret
= lan78xx_write_reg(dev
, HW_CFG
, saved
);
871 static int lan78xx_read_raw_otp(struct lan78xx_net
*dev
, u32 offset
,
872 u32 length
, u8
*data
)
876 unsigned long timeout
;
878 lan78xx_read_reg(dev
, OTP_PWR_DN
, &buf
);
880 if (buf
& OTP_PWR_DN_PWRDN_N_
) {
881 /* clear it and wait to be cleared */
882 lan78xx_write_reg(dev
, OTP_PWR_DN
, 0);
884 timeout
= jiffies
+ HZ
;
887 lan78xx_read_reg(dev
, OTP_PWR_DN
, &buf
);
888 if (time_after(jiffies
, timeout
)) {
889 netdev_warn(dev
->net
,
890 "timeout on OTP_PWR_DN");
893 } while (buf
& OTP_PWR_DN_PWRDN_N_
);
896 for (i
= 0; i
< length
; i
++) {
897 lan78xx_write_reg(dev
, OTP_ADDR1
,
898 ((offset
+ i
) >> 8) & OTP_ADDR1_15_11
);
899 lan78xx_write_reg(dev
, OTP_ADDR2
,
900 ((offset
+ i
) & OTP_ADDR2_10_3
));
902 lan78xx_write_reg(dev
, OTP_FUNC_CMD
, OTP_FUNC_CMD_READ_
);
903 lan78xx_write_reg(dev
, OTP_CMD_GO
, OTP_CMD_GO_GO_
);
905 timeout
= jiffies
+ HZ
;
908 lan78xx_read_reg(dev
, OTP_STATUS
, &buf
);
909 if (time_after(jiffies
, timeout
)) {
910 netdev_warn(dev
->net
,
911 "timeout on OTP_STATUS");
914 } while (buf
& OTP_STATUS_BUSY_
);
916 lan78xx_read_reg(dev
, OTP_RD_DATA
, &buf
);
918 data
[i
] = (u8
)(buf
& 0xFF);
924 static int lan78xx_write_raw_otp(struct lan78xx_net
*dev
, u32 offset
,
925 u32 length
, u8
*data
)
929 unsigned long timeout
;
931 lan78xx_read_reg(dev
, OTP_PWR_DN
, &buf
);
933 if (buf
& OTP_PWR_DN_PWRDN_N_
) {
934 /* clear it and wait to be cleared */
935 lan78xx_write_reg(dev
, OTP_PWR_DN
, 0);
937 timeout
= jiffies
+ HZ
;
940 lan78xx_read_reg(dev
, OTP_PWR_DN
, &buf
);
941 if (time_after(jiffies
, timeout
)) {
942 netdev_warn(dev
->net
,
943 "timeout on OTP_PWR_DN completion");
946 } while (buf
& OTP_PWR_DN_PWRDN_N_
);
949 /* set to BYTE program mode */
950 lan78xx_write_reg(dev
, OTP_PRGM_MODE
, OTP_PRGM_MODE_BYTE_
);
952 for (i
= 0; i
< length
; i
++) {
953 lan78xx_write_reg(dev
, OTP_ADDR1
,
954 ((offset
+ i
) >> 8) & OTP_ADDR1_15_11
);
955 lan78xx_write_reg(dev
, OTP_ADDR2
,
956 ((offset
+ i
) & OTP_ADDR2_10_3
));
957 lan78xx_write_reg(dev
, OTP_PRGM_DATA
, data
[i
]);
958 lan78xx_write_reg(dev
, OTP_TST_CMD
, OTP_TST_CMD_PRGVRFY_
);
959 lan78xx_write_reg(dev
, OTP_CMD_GO
, OTP_CMD_GO_GO_
);
961 timeout
= jiffies
+ HZ
;
964 lan78xx_read_reg(dev
, OTP_STATUS
, &buf
);
965 if (time_after(jiffies
, timeout
)) {
966 netdev_warn(dev
->net
,
967 "Timeout on OTP_STATUS completion");
970 } while (buf
& OTP_STATUS_BUSY_
);
976 static int lan78xx_read_otp(struct lan78xx_net
*dev
, u32 offset
,
977 u32 length
, u8
*data
)
982 ret
= lan78xx_read_raw_otp(dev
, 0, 1, &sig
);
985 if (sig
== OTP_INDICATOR_2
)
987 else if (sig
!= OTP_INDICATOR_1
)
990 ret
= lan78xx_read_raw_otp(dev
, offset
, length
, data
);
996 static int lan78xx_dataport_wait_not_busy(struct lan78xx_net
*dev
)
1000 for (i
= 0; i
< 100; i
++) {
1003 ret
= lan78xx_read_reg(dev
, DP_SEL
, &dp_sel
);
1004 if (unlikely(ret
< 0))
1007 if (dp_sel
& DP_SEL_DPRDY_
)
1010 usleep_range(40, 100);
1013 netdev_warn(dev
->net
, "%s timed out", __func__
);
1018 static int lan78xx_dataport_write(struct lan78xx_net
*dev
, u32 ram_select
,
1019 u32 addr
, u32 length
, u32
*buf
)
1021 struct lan78xx_priv
*pdata
= (struct lan78xx_priv
*)(dev
->data
[0]);
1025 if (usb_autopm_get_interface(dev
->intf
) < 0)
1028 mutex_lock(&pdata
->dataport_mutex
);
1030 ret
= lan78xx_dataport_wait_not_busy(dev
);
1034 ret
= lan78xx_read_reg(dev
, DP_SEL
, &dp_sel
);
1036 dp_sel
&= ~DP_SEL_RSEL_MASK_
;
1037 dp_sel
|= ram_select
;
1038 ret
= lan78xx_write_reg(dev
, DP_SEL
, dp_sel
);
1040 for (i
= 0; i
< length
; i
++) {
1041 ret
= lan78xx_write_reg(dev
, DP_ADDR
, addr
+ i
);
1043 ret
= lan78xx_write_reg(dev
, DP_DATA
, buf
[i
]);
1045 ret
= lan78xx_write_reg(dev
, DP_CMD
, DP_CMD_WRITE_
);
1047 ret
= lan78xx_dataport_wait_not_busy(dev
);
1053 mutex_unlock(&pdata
->dataport_mutex
);
1054 usb_autopm_put_interface(dev
->intf
);
1059 static void lan78xx_set_addr_filter(struct lan78xx_priv
*pdata
,
1060 int index
, u8 addr
[ETH_ALEN
])
1064 if ((pdata
) && (index
> 0) && (index
< NUM_OF_MAF
)) {
1066 temp
= addr
[2] | (temp
<< 8);
1067 temp
= addr
[1] | (temp
<< 8);
1068 temp
= addr
[0] | (temp
<< 8);
1069 pdata
->pfilter_table
[index
][1] = temp
;
1071 temp
= addr
[4] | (temp
<< 8);
1072 temp
|= MAF_HI_VALID_
| MAF_HI_TYPE_DST_
;
1073 pdata
->pfilter_table
[index
][0] = temp
;
1077 /* returns hash bit number for given MAC address */
1078 static inline u32
lan78xx_hash(char addr
[ETH_ALEN
])
1080 return (ether_crc(ETH_ALEN
, addr
) >> 23) & 0x1ff;
1083 static void lan78xx_deferred_multicast_write(struct work_struct
*param
)
1085 struct lan78xx_priv
*pdata
=
1086 container_of(param
, struct lan78xx_priv
, set_multicast
);
1087 struct lan78xx_net
*dev
= pdata
->dev
;
1090 netif_dbg(dev
, drv
, dev
->net
, "deferred multicast write 0x%08x\n",
1093 lan78xx_dataport_write(dev
, DP_SEL_RSEL_VLAN_DA_
, DP_SEL_VHF_VLAN_LEN
,
1094 DP_SEL_VHF_HASH_LEN
, pdata
->mchash_table
);
1096 for (i
= 1; i
< NUM_OF_MAF
; i
++) {
1097 lan78xx_write_reg(dev
, MAF_HI(i
), 0);
1098 lan78xx_write_reg(dev
, MAF_LO(i
),
1099 pdata
->pfilter_table
[i
][1]);
1100 lan78xx_write_reg(dev
, MAF_HI(i
),
1101 pdata
->pfilter_table
[i
][0]);
1104 lan78xx_write_reg(dev
, RFE_CTL
, pdata
->rfe_ctl
);
1107 static void lan78xx_set_multicast(struct net_device
*netdev
)
1109 struct lan78xx_net
*dev
= netdev_priv(netdev
);
1110 struct lan78xx_priv
*pdata
= (struct lan78xx_priv
*)(dev
->data
[0]);
1111 unsigned long flags
;
1114 spin_lock_irqsave(&pdata
->rfe_ctl_lock
, flags
);
1116 pdata
->rfe_ctl
&= ~(RFE_CTL_UCAST_EN_
| RFE_CTL_MCAST_EN_
|
1117 RFE_CTL_DA_PERFECT_
| RFE_CTL_MCAST_HASH_
);
1119 for (i
= 0; i
< DP_SEL_VHF_HASH_LEN
; i
++)
1120 pdata
->mchash_table
[i
] = 0;
1122 /* pfilter_table[0] has own HW address */
1123 for (i
= 1; i
< NUM_OF_MAF
; i
++) {
1124 pdata
->pfilter_table
[i
][0] = 0;
1125 pdata
->pfilter_table
[i
][1] = 0;
1128 pdata
->rfe_ctl
|= RFE_CTL_BCAST_EN_
;
1130 if (dev
->net
->flags
& IFF_PROMISC
) {
1131 netif_dbg(dev
, drv
, dev
->net
, "promiscuous mode enabled");
1132 pdata
->rfe_ctl
|= RFE_CTL_MCAST_EN_
| RFE_CTL_UCAST_EN_
;
1134 if (dev
->net
->flags
& IFF_ALLMULTI
) {
1135 netif_dbg(dev
, drv
, dev
->net
,
1136 "receive all multicast enabled");
1137 pdata
->rfe_ctl
|= RFE_CTL_MCAST_EN_
;
1141 if (netdev_mc_count(dev
->net
)) {
1142 struct netdev_hw_addr
*ha
;
1145 netif_dbg(dev
, drv
, dev
->net
, "receive multicast hash filter");
1147 pdata
->rfe_ctl
|= RFE_CTL_DA_PERFECT_
;
1150 netdev_for_each_mc_addr(ha
, netdev
) {
1151 /* set first 32 into Perfect Filter */
1153 lan78xx_set_addr_filter(pdata
, i
, ha
->addr
);
1155 u32 bitnum
= lan78xx_hash(ha
->addr
);
1157 pdata
->mchash_table
[bitnum
/ 32] |=
1158 (1 << (bitnum
% 32));
1159 pdata
->rfe_ctl
|= RFE_CTL_MCAST_HASH_
;
1165 spin_unlock_irqrestore(&pdata
->rfe_ctl_lock
, flags
);
1167 /* defer register writes to a sleepable context */
1168 schedule_work(&pdata
->set_multicast
);
1171 static int lan78xx_update_flowcontrol(struct lan78xx_net
*dev
, u8 duplex
,
1172 u16 lcladv
, u16 rmtadv
)
1174 u32 flow
= 0, fct_flow
= 0;
1177 if (dev
->fc_autoneg
)
1178 cap
= mii_resolve_flowctrl_fdx(lcladv
, rmtadv
);
1180 cap
= dev
->fc_request_control
;
1182 if (cap
& FLOW_CTRL_TX
)
1183 flow
|= (FLOW_CR_TX_FCEN_
| 0xFFFF);
1185 if (cap
& FLOW_CTRL_RX
)
1186 flow
|= FLOW_CR_RX_FCEN_
;
1188 if (dev
->udev
->speed
== USB_SPEED_SUPER
)
1189 fct_flow
= FLOW_CTRL_THRESHOLD(FLOW_ON_SS
, FLOW_OFF_SS
);
1190 else if (dev
->udev
->speed
== USB_SPEED_HIGH
)
1191 fct_flow
= FLOW_CTRL_THRESHOLD(FLOW_ON_HS
, FLOW_OFF_HS
);
1193 netif_dbg(dev
, link
, dev
->net
, "rx pause %s, tx pause %s",
1194 (cap
& FLOW_CTRL_RX
? "enabled" : "disabled"),
1195 (cap
& FLOW_CTRL_TX
? "enabled" : "disabled"));
1197 lan78xx_write_reg(dev
, FCT_FLOW
, fct_flow
);
1199 /* threshold value should be set before enabling flow */
1200 lan78xx_write_reg(dev
, FLOW
, flow
);
1205 static int lan78xx_mac_reset(struct lan78xx_net
*dev
)
1207 unsigned long start_time
= jiffies
;
1211 mutex_lock(&dev
->phy_mutex
);
1213 /* Resetting the device while there is activity on the MDIO
1214 * bus can result in the MAC interface locking up and not
1215 * completing register access transactions.
1217 ret
= lan78xx_phy_wait_not_busy(dev
);
1221 ret
= lan78xx_read_reg(dev
, MAC_CR
, &val
);
1226 ret
= lan78xx_write_reg(dev
, MAC_CR
, val
);
1230 /* Wait for the reset to complete before allowing any further
1231 * MAC register accesses otherwise the MAC may lock up.
1234 ret
= lan78xx_read_reg(dev
, MAC_CR
, &val
);
1238 if (!(val
& MAC_CR_RST_
)) {
1242 } while (!time_after(jiffies
, start_time
+ HZ
));
1246 mutex_unlock(&dev
->phy_mutex
);
1251 static int lan78xx_link_reset(struct lan78xx_net
*dev
)
1253 struct phy_device
*phydev
= dev
->net
->phydev
;
1254 struct ethtool_link_ksettings ecmd
;
1255 int ladv
, radv
, ret
, link
;
1258 /* clear LAN78xx interrupt status */
1259 ret
= lan78xx_write_reg(dev
, INT_STS
, INT_STS_PHY_INT_
);
1260 if (unlikely(ret
< 0))
1263 mutex_lock(&phydev
->lock
);
1264 phy_read_status(phydev
);
1265 link
= phydev
->link
;
1266 mutex_unlock(&phydev
->lock
);
1268 if (!link
&& dev
->link_on
) {
1269 dev
->link_on
= false;
1272 ret
= lan78xx_mac_reset(dev
);
1276 del_timer(&dev
->stat_monitor
);
1277 } else if (link
&& !dev
->link_on
) {
1278 dev
->link_on
= true;
1280 phy_ethtool_ksettings_get(phydev
, &ecmd
);
1282 if (dev
->udev
->speed
== USB_SPEED_SUPER
) {
1283 if (ecmd
.base
.speed
== 1000) {
1285 ret
= lan78xx_read_reg(dev
, USB_CFG1
, &buf
);
1288 buf
&= ~USB_CFG1_DEV_U2_INIT_EN_
;
1289 ret
= lan78xx_write_reg(dev
, USB_CFG1
, buf
);
1293 ret
= lan78xx_read_reg(dev
, USB_CFG1
, &buf
);
1296 buf
|= USB_CFG1_DEV_U1_INIT_EN_
;
1297 ret
= lan78xx_write_reg(dev
, USB_CFG1
, buf
);
1301 /* enable U1 & U2 */
1302 ret
= lan78xx_read_reg(dev
, USB_CFG1
, &buf
);
1305 buf
|= USB_CFG1_DEV_U2_INIT_EN_
;
1306 buf
|= USB_CFG1_DEV_U1_INIT_EN_
;
1307 ret
= lan78xx_write_reg(dev
, USB_CFG1
, buf
);
1313 ladv
= phy_read(phydev
, MII_ADVERTISE
);
1317 radv
= phy_read(phydev
, MII_LPA
);
1321 netif_dbg(dev
, link
, dev
->net
,
1322 "speed: %u duplex: %d anadv: 0x%04x anlpa: 0x%04x",
1323 ecmd
.base
.speed
, ecmd
.base
.duplex
, ladv
, radv
);
1325 ret
= lan78xx_update_flowcontrol(dev
, ecmd
.base
.duplex
, ladv
,
1330 if (!timer_pending(&dev
->stat_monitor
)) {
1332 mod_timer(&dev
->stat_monitor
,
1333 jiffies
+ STAT_UPDATE_TIMER
);
1336 tasklet_schedule(&dev
->bh
);
1342 /* some work can't be done in tasklets, so we use keventd
1344 * NOTE: annoying asymmetry: if it's active, schedule_work() fails,
1345 * but tasklet_schedule() doesn't. hope the failure is rare.
1347 static void lan78xx_defer_kevent(struct lan78xx_net
*dev
, int work
)
1349 set_bit(work
, &dev
->flags
);
1350 if (!schedule_delayed_work(&dev
->wq
, 0))
1351 netdev_err(dev
->net
, "kevent %d may have been dropped\n", work
);
1354 static void lan78xx_status(struct lan78xx_net
*dev
, struct urb
*urb
)
1358 if (urb
->actual_length
!= 4) {
1359 netdev_warn(dev
->net
,
1360 "unexpected urb length %d", urb
->actual_length
);
1364 intdata
= get_unaligned_le32(urb
->transfer_buffer
);
1366 if (intdata
& INT_ENP_PHY_INT
) {
1367 netif_dbg(dev
, link
, dev
->net
, "PHY INTR: 0x%08x\n", intdata
);
1368 lan78xx_defer_kevent(dev
, EVENT_LINK_RESET
);
1370 if (dev
->domain_data
.phyirq
> 0) {
1371 local_irq_disable();
1372 generic_handle_irq(dev
->domain_data
.phyirq
);
1376 netdev_warn(dev
->net
,
1377 "unexpected interrupt: 0x%08x\n", intdata
);
1381 static int lan78xx_ethtool_get_eeprom_len(struct net_device
*netdev
)
1383 return MAX_EEPROM_SIZE
;
1386 static int lan78xx_ethtool_get_eeprom(struct net_device
*netdev
,
1387 struct ethtool_eeprom
*ee
, u8
*data
)
1389 struct lan78xx_net
*dev
= netdev_priv(netdev
);
1392 ret
= usb_autopm_get_interface(dev
->intf
);
1396 ee
->magic
= LAN78XX_EEPROM_MAGIC
;
1398 ret
= lan78xx_read_raw_eeprom(dev
, ee
->offset
, ee
->len
, data
);
1400 usb_autopm_put_interface(dev
->intf
);
1405 static int lan78xx_ethtool_set_eeprom(struct net_device
*netdev
,
1406 struct ethtool_eeprom
*ee
, u8
*data
)
1408 struct lan78xx_net
*dev
= netdev_priv(netdev
);
1411 ret
= usb_autopm_get_interface(dev
->intf
);
1415 /* Invalid EEPROM_INDICATOR at offset zero will result in a failure
1416 * to load data from EEPROM
1418 if (ee
->magic
== LAN78XX_EEPROM_MAGIC
)
1419 ret
= lan78xx_write_raw_eeprom(dev
, ee
->offset
, ee
->len
, data
);
1420 else if ((ee
->magic
== LAN78XX_OTP_MAGIC
) &&
1421 (ee
->offset
== 0) &&
1423 (data
[0] == OTP_INDICATOR_1
))
1424 ret
= lan78xx_write_raw_otp(dev
, ee
->offset
, ee
->len
, data
);
1426 usb_autopm_put_interface(dev
->intf
);
1431 static void lan78xx_get_strings(struct net_device
*netdev
, u32 stringset
,
1434 if (stringset
== ETH_SS_STATS
)
1435 memcpy(data
, lan78xx_gstrings
, sizeof(lan78xx_gstrings
));
1438 static int lan78xx_get_sset_count(struct net_device
*netdev
, int sset
)
1440 if (sset
== ETH_SS_STATS
)
1441 return ARRAY_SIZE(lan78xx_gstrings
);
1446 static void lan78xx_get_stats(struct net_device
*netdev
,
1447 struct ethtool_stats
*stats
, u64
*data
)
1449 struct lan78xx_net
*dev
= netdev_priv(netdev
);
1451 lan78xx_update_stats(dev
);
1453 mutex_lock(&dev
->stats
.access_lock
);
1454 memcpy(data
, &dev
->stats
.curr_stat
, sizeof(dev
->stats
.curr_stat
));
1455 mutex_unlock(&dev
->stats
.access_lock
);
1458 static void lan78xx_get_wol(struct net_device
*netdev
,
1459 struct ethtool_wolinfo
*wol
)
1461 struct lan78xx_net
*dev
= netdev_priv(netdev
);
1464 struct lan78xx_priv
*pdata
= (struct lan78xx_priv
*)(dev
->data
[0]);
1466 if (usb_autopm_get_interface(dev
->intf
) < 0)
1469 ret
= lan78xx_read_reg(dev
, USB_CFG0
, &buf
);
1470 if (unlikely(ret
< 0)) {
1474 if (buf
& USB_CFG_RMT_WKP_
) {
1475 wol
->supported
= WAKE_ALL
;
1476 wol
->wolopts
= pdata
->wol
;
1483 usb_autopm_put_interface(dev
->intf
);
1486 static int lan78xx_set_wol(struct net_device
*netdev
,
1487 struct ethtool_wolinfo
*wol
)
1489 struct lan78xx_net
*dev
= netdev_priv(netdev
);
1490 struct lan78xx_priv
*pdata
= (struct lan78xx_priv
*)(dev
->data
[0]);
1493 ret
= usb_autopm_get_interface(dev
->intf
);
1497 if (wol
->wolopts
& ~WAKE_ALL
)
1500 pdata
->wol
= wol
->wolopts
;
1502 device_set_wakeup_enable(&dev
->udev
->dev
, (bool)wol
->wolopts
);
1504 phy_ethtool_set_wol(netdev
->phydev
, wol
);
1506 usb_autopm_put_interface(dev
->intf
);
1511 static int lan78xx_get_eee(struct net_device
*net
, struct ethtool_eee
*edata
)
1513 struct lan78xx_net
*dev
= netdev_priv(net
);
1514 struct phy_device
*phydev
= net
->phydev
;
1518 ret
= usb_autopm_get_interface(dev
->intf
);
1522 ret
= phy_ethtool_get_eee(phydev
, edata
);
1526 ret
= lan78xx_read_reg(dev
, MAC_CR
, &buf
);
1527 if (buf
& MAC_CR_EEE_EN_
) {
1528 edata
->eee_enabled
= true;
1529 edata
->eee_active
= !!(edata
->advertised
&
1530 edata
->lp_advertised
);
1531 edata
->tx_lpi_enabled
= true;
1532 /* EEE_TX_LPI_REQ_DLY & tx_lpi_timer are same uSec unit */
1533 ret
= lan78xx_read_reg(dev
, EEE_TX_LPI_REQ_DLY
, &buf
);
1534 edata
->tx_lpi_timer
= buf
;
1536 edata
->eee_enabled
= false;
1537 edata
->eee_active
= false;
1538 edata
->tx_lpi_enabled
= false;
1539 edata
->tx_lpi_timer
= 0;
1544 usb_autopm_put_interface(dev
->intf
);
1549 static int lan78xx_set_eee(struct net_device
*net
, struct ethtool_eee
*edata
)
1551 struct lan78xx_net
*dev
= netdev_priv(net
);
1555 ret
= usb_autopm_get_interface(dev
->intf
);
1559 if (edata
->eee_enabled
) {
1560 ret
= lan78xx_read_reg(dev
, MAC_CR
, &buf
);
1561 buf
|= MAC_CR_EEE_EN_
;
1562 ret
= lan78xx_write_reg(dev
, MAC_CR
, buf
);
1564 phy_ethtool_set_eee(net
->phydev
, edata
);
1566 buf
= (u32
)edata
->tx_lpi_timer
;
1567 ret
= lan78xx_write_reg(dev
, EEE_TX_LPI_REQ_DLY
, buf
);
1569 ret
= lan78xx_read_reg(dev
, MAC_CR
, &buf
);
1570 buf
&= ~MAC_CR_EEE_EN_
;
1571 ret
= lan78xx_write_reg(dev
, MAC_CR
, buf
);
1574 usb_autopm_put_interface(dev
->intf
);
1579 static u32
lan78xx_get_link(struct net_device
*net
)
1583 mutex_lock(&net
->phydev
->lock
);
1584 phy_read_status(net
->phydev
);
1585 link
= net
->phydev
->link
;
1586 mutex_unlock(&net
->phydev
->lock
);
1591 static void lan78xx_get_drvinfo(struct net_device
*net
,
1592 struct ethtool_drvinfo
*info
)
1594 struct lan78xx_net
*dev
= netdev_priv(net
);
1596 strncpy(info
->driver
, DRIVER_NAME
, sizeof(info
->driver
));
1597 usb_make_path(dev
->udev
, info
->bus_info
, sizeof(info
->bus_info
));
1600 static u32
lan78xx_get_msglevel(struct net_device
*net
)
1602 struct lan78xx_net
*dev
= netdev_priv(net
);
1604 return dev
->msg_enable
;
1607 static void lan78xx_set_msglevel(struct net_device
*net
, u32 level
)
1609 struct lan78xx_net
*dev
= netdev_priv(net
);
1611 dev
->msg_enable
= level
;
1614 static int lan78xx_get_link_ksettings(struct net_device
*net
,
1615 struct ethtool_link_ksettings
*cmd
)
1617 struct lan78xx_net
*dev
= netdev_priv(net
);
1618 struct phy_device
*phydev
= net
->phydev
;
1621 ret
= usb_autopm_get_interface(dev
->intf
);
1625 phy_ethtool_ksettings_get(phydev
, cmd
);
1627 usb_autopm_put_interface(dev
->intf
);
1632 static int lan78xx_set_link_ksettings(struct net_device
*net
,
1633 const struct ethtool_link_ksettings
*cmd
)
1635 struct lan78xx_net
*dev
= netdev_priv(net
);
1636 struct phy_device
*phydev
= net
->phydev
;
1640 ret
= usb_autopm_get_interface(dev
->intf
);
1644 /* change speed & duplex */
1645 ret
= phy_ethtool_ksettings_set(phydev
, cmd
);
1647 if (!cmd
->base
.autoneg
) {
1648 /* force link down */
1649 temp
= phy_read(phydev
, MII_BMCR
);
1650 phy_write(phydev
, MII_BMCR
, temp
| BMCR_LOOPBACK
);
1652 phy_write(phydev
, MII_BMCR
, temp
);
1655 usb_autopm_put_interface(dev
->intf
);
1660 static void lan78xx_get_pause(struct net_device
*net
,
1661 struct ethtool_pauseparam
*pause
)
1663 struct lan78xx_net
*dev
= netdev_priv(net
);
1664 struct phy_device
*phydev
= net
->phydev
;
1665 struct ethtool_link_ksettings ecmd
;
1667 phy_ethtool_ksettings_get(phydev
, &ecmd
);
1669 pause
->autoneg
= dev
->fc_autoneg
;
1671 if (dev
->fc_request_control
& FLOW_CTRL_TX
)
1672 pause
->tx_pause
= 1;
1674 if (dev
->fc_request_control
& FLOW_CTRL_RX
)
1675 pause
->rx_pause
= 1;
1678 static int lan78xx_set_pause(struct net_device
*net
,
1679 struct ethtool_pauseparam
*pause
)
1681 struct lan78xx_net
*dev
= netdev_priv(net
);
1682 struct phy_device
*phydev
= net
->phydev
;
1683 struct ethtool_link_ksettings ecmd
;
1686 phy_ethtool_ksettings_get(phydev
, &ecmd
);
1688 if (pause
->autoneg
&& !ecmd
.base
.autoneg
) {
1693 dev
->fc_request_control
= 0;
1694 if (pause
->rx_pause
)
1695 dev
->fc_request_control
|= FLOW_CTRL_RX
;
1697 if (pause
->tx_pause
)
1698 dev
->fc_request_control
|= FLOW_CTRL_TX
;
1700 if (ecmd
.base
.autoneg
) {
1701 __ETHTOOL_DECLARE_LINK_MODE_MASK(fc
) = { 0, };
1704 linkmode_clear_bit(ETHTOOL_LINK_MODE_Pause_BIT
,
1705 ecmd
.link_modes
.advertising
);
1706 linkmode_clear_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT
,
1707 ecmd
.link_modes
.advertising
);
1708 mii_adv
= (u32
)mii_advertise_flowctrl(dev
->fc_request_control
);
1709 mii_adv_to_linkmode_adv_t(fc
, mii_adv
);
1710 linkmode_or(ecmd
.link_modes
.advertising
, fc
,
1711 ecmd
.link_modes
.advertising
);
1713 phy_ethtool_ksettings_set(phydev
, &ecmd
);
1716 dev
->fc_autoneg
= pause
->autoneg
;
1723 static int lan78xx_get_regs_len(struct net_device
*netdev
)
1725 if (!netdev
->phydev
)
1726 return (sizeof(lan78xx_regs
));
1728 return (sizeof(lan78xx_regs
) + PHY_REG_SIZE
);
1732 lan78xx_get_regs(struct net_device
*netdev
, struct ethtool_regs
*regs
,
1737 struct lan78xx_net
*dev
= netdev_priv(netdev
);
1739 /* Read Device/MAC registers */
1740 for (i
= 0; i
< ARRAY_SIZE(lan78xx_regs
); i
++)
1741 lan78xx_read_reg(dev
, lan78xx_regs
[i
], &data
[i
]);
1743 if (!netdev
->phydev
)
1746 /* Read PHY registers */
1747 for (j
= 0; j
< 32; i
++, j
++)
1748 data
[i
] = phy_read(netdev
->phydev
, j
);
1751 static const struct ethtool_ops lan78xx_ethtool_ops
= {
1752 .get_link
= lan78xx_get_link
,
1753 .nway_reset
= phy_ethtool_nway_reset
,
1754 .get_drvinfo
= lan78xx_get_drvinfo
,
1755 .get_msglevel
= lan78xx_get_msglevel
,
1756 .set_msglevel
= lan78xx_set_msglevel
,
1757 .get_eeprom_len
= lan78xx_ethtool_get_eeprom_len
,
1758 .get_eeprom
= lan78xx_ethtool_get_eeprom
,
1759 .set_eeprom
= lan78xx_ethtool_set_eeprom
,
1760 .get_ethtool_stats
= lan78xx_get_stats
,
1761 .get_sset_count
= lan78xx_get_sset_count
,
1762 .get_strings
= lan78xx_get_strings
,
1763 .get_wol
= lan78xx_get_wol
,
1764 .set_wol
= lan78xx_set_wol
,
1765 .get_ts_info
= ethtool_op_get_ts_info
,
1766 .get_eee
= lan78xx_get_eee
,
1767 .set_eee
= lan78xx_set_eee
,
1768 .get_pauseparam
= lan78xx_get_pause
,
1769 .set_pauseparam
= lan78xx_set_pause
,
1770 .get_link_ksettings
= lan78xx_get_link_ksettings
,
1771 .set_link_ksettings
= lan78xx_set_link_ksettings
,
1772 .get_regs_len
= lan78xx_get_regs_len
,
1773 .get_regs
= lan78xx_get_regs
,
1776 static void lan78xx_init_mac_address(struct lan78xx_net
*dev
)
1778 u32 addr_lo
, addr_hi
;
1781 lan78xx_read_reg(dev
, RX_ADDRL
, &addr_lo
);
1782 lan78xx_read_reg(dev
, RX_ADDRH
, &addr_hi
);
1784 addr
[0] = addr_lo
& 0xFF;
1785 addr
[1] = (addr_lo
>> 8) & 0xFF;
1786 addr
[2] = (addr_lo
>> 16) & 0xFF;
1787 addr
[3] = (addr_lo
>> 24) & 0xFF;
1788 addr
[4] = addr_hi
& 0xFF;
1789 addr
[5] = (addr_hi
>> 8) & 0xFF;
1791 if (!is_valid_ether_addr(addr
)) {
1792 if (!eth_platform_get_mac_address(&dev
->udev
->dev
, addr
)) {
1793 /* valid address present in Device Tree */
1794 netif_dbg(dev
, ifup
, dev
->net
,
1795 "MAC address read from Device Tree");
1796 } else if (((lan78xx_read_eeprom(dev
, EEPROM_MAC_OFFSET
,
1797 ETH_ALEN
, addr
) == 0) ||
1798 (lan78xx_read_otp(dev
, EEPROM_MAC_OFFSET
,
1799 ETH_ALEN
, addr
) == 0)) &&
1800 is_valid_ether_addr(addr
)) {
1801 /* eeprom values are valid so use them */
1802 netif_dbg(dev
, ifup
, dev
->net
,
1803 "MAC address read from EEPROM");
1805 /* generate random MAC */
1806 eth_random_addr(addr
);
1807 netif_dbg(dev
, ifup
, dev
->net
,
1808 "MAC address set to random addr");
1811 addr_lo
= addr
[0] | (addr
[1] << 8) |
1812 (addr
[2] << 16) | (addr
[3] << 24);
1813 addr_hi
= addr
[4] | (addr
[5] << 8);
1815 lan78xx_write_reg(dev
, RX_ADDRL
, addr_lo
);
1816 lan78xx_write_reg(dev
, RX_ADDRH
, addr_hi
);
1819 lan78xx_write_reg(dev
, MAF_LO(0), addr_lo
);
1820 lan78xx_write_reg(dev
, MAF_HI(0), addr_hi
| MAF_HI_VALID_
);
1822 ether_addr_copy(dev
->net
->dev_addr
, addr
);
1825 /* MDIO read and write wrappers for phylib */
1826 static int lan78xx_mdiobus_read(struct mii_bus
*bus
, int phy_id
, int idx
)
1828 struct lan78xx_net
*dev
= bus
->priv
;
1832 ret
= usb_autopm_get_interface(dev
->intf
);
1836 mutex_lock(&dev
->phy_mutex
);
1838 /* confirm MII not busy */
1839 ret
= lan78xx_phy_wait_not_busy(dev
);
1843 /* set the address, index & direction (read from PHY) */
1844 addr
= mii_access(phy_id
, idx
, MII_READ
);
1845 ret
= lan78xx_write_reg(dev
, MII_ACC
, addr
);
1847 ret
= lan78xx_phy_wait_not_busy(dev
);
1851 ret
= lan78xx_read_reg(dev
, MII_DATA
, &val
);
1853 ret
= (int)(val
& 0xFFFF);
1856 mutex_unlock(&dev
->phy_mutex
);
1857 usb_autopm_put_interface(dev
->intf
);
1862 static int lan78xx_mdiobus_write(struct mii_bus
*bus
, int phy_id
, int idx
,
1865 struct lan78xx_net
*dev
= bus
->priv
;
1869 ret
= usb_autopm_get_interface(dev
->intf
);
1873 mutex_lock(&dev
->phy_mutex
);
1875 /* confirm MII not busy */
1876 ret
= lan78xx_phy_wait_not_busy(dev
);
1881 ret
= lan78xx_write_reg(dev
, MII_DATA
, val
);
1883 /* set the address, index & direction (write to PHY) */
1884 addr
= mii_access(phy_id
, idx
, MII_WRITE
);
1885 ret
= lan78xx_write_reg(dev
, MII_ACC
, addr
);
1887 ret
= lan78xx_phy_wait_not_busy(dev
);
1892 mutex_unlock(&dev
->phy_mutex
);
1893 usb_autopm_put_interface(dev
->intf
);
1897 static int lan78xx_mdio_init(struct lan78xx_net
*dev
)
1899 struct device_node
*node
;
1902 dev
->mdiobus
= mdiobus_alloc();
1903 if (!dev
->mdiobus
) {
1904 netdev_err(dev
->net
, "can't allocate MDIO bus\n");
1908 dev
->mdiobus
->priv
= (void *)dev
;
1909 dev
->mdiobus
->read
= lan78xx_mdiobus_read
;
1910 dev
->mdiobus
->write
= lan78xx_mdiobus_write
;
1911 dev
->mdiobus
->name
= "lan78xx-mdiobus";
1912 dev
->mdiobus
->parent
= &dev
->udev
->dev
;
1914 snprintf(dev
->mdiobus
->id
, MII_BUS_ID_SIZE
, "usb-%03d:%03d",
1915 dev
->udev
->bus
->busnum
, dev
->udev
->devnum
);
1917 switch (dev
->chipid
) {
1918 case ID_REV_CHIP_ID_7800_
:
1919 case ID_REV_CHIP_ID_7850_
:
1920 /* set to internal PHY id */
1921 dev
->mdiobus
->phy_mask
= ~(1 << 1);
1923 case ID_REV_CHIP_ID_7801_
:
1924 /* scan thru PHYAD[2..0] */
1925 dev
->mdiobus
->phy_mask
= ~(0xFF);
1929 node
= of_get_child_by_name(dev
->udev
->dev
.of_node
, "mdio");
1930 ret
= of_mdiobus_register(dev
->mdiobus
, node
);
1933 netdev_err(dev
->net
, "can't register MDIO bus\n");
1937 netdev_dbg(dev
->net
, "registered mdiobus bus %s\n", dev
->mdiobus
->id
);
1940 mdiobus_free(dev
->mdiobus
);
1944 static void lan78xx_remove_mdio(struct lan78xx_net
*dev
)
1946 mdiobus_unregister(dev
->mdiobus
);
1947 mdiobus_free(dev
->mdiobus
);
1950 static void lan78xx_link_status_change(struct net_device
*net
)
1952 struct phy_device
*phydev
= net
->phydev
;
1955 /* At forced 100 F/H mode, chip may fail to set mode correctly
1956 * when cable is switched between long(~50+m) and short one.
1957 * As workaround, set to 10 before setting to 100
1958 * at forced 100 F/H mode.
1960 if (!phydev
->autoneg
&& (phydev
->speed
== 100)) {
1961 /* disable phy interrupt */
1962 temp
= phy_read(phydev
, LAN88XX_INT_MASK
);
1963 temp
&= ~LAN88XX_INT_MASK_MDINTPIN_EN_
;
1964 phy_write(phydev
, LAN88XX_INT_MASK
, temp
);
1966 temp
= phy_read(phydev
, MII_BMCR
);
1967 temp
&= ~(BMCR_SPEED100
| BMCR_SPEED1000
);
1968 phy_write(phydev
, MII_BMCR
, temp
); /* set to 10 first */
1969 temp
|= BMCR_SPEED100
;
1970 phy_write(phydev
, MII_BMCR
, temp
); /* set to 100 later */
1972 /* clear pending interrupt generated while workaround */
1973 temp
= phy_read(phydev
, LAN88XX_INT_STS
);
1975 /* enable phy interrupt back */
1976 temp
= phy_read(phydev
, LAN88XX_INT_MASK
);
1977 temp
|= LAN88XX_INT_MASK_MDINTPIN_EN_
;
1978 phy_write(phydev
, LAN88XX_INT_MASK
, temp
);
1982 static int irq_map(struct irq_domain
*d
, unsigned int irq
,
1983 irq_hw_number_t hwirq
)
1985 struct irq_domain_data
*data
= d
->host_data
;
1987 irq_set_chip_data(irq
, data
);
1988 irq_set_chip_and_handler(irq
, data
->irqchip
, data
->irq_handler
);
1989 irq_set_noprobe(irq
);
1994 static void irq_unmap(struct irq_domain
*d
, unsigned int irq
)
1996 irq_set_chip_and_handler(irq
, NULL
, NULL
);
1997 irq_set_chip_data(irq
, NULL
);
2000 static const struct irq_domain_ops chip_domain_ops
= {
2005 static void lan78xx_irq_mask(struct irq_data
*irqd
)
2007 struct irq_domain_data
*data
= irq_data_get_irq_chip_data(irqd
);
2009 data
->irqenable
&= ~BIT(irqd_to_hwirq(irqd
));
2012 static void lan78xx_irq_unmask(struct irq_data
*irqd
)
2014 struct irq_domain_data
*data
= irq_data_get_irq_chip_data(irqd
);
2016 data
->irqenable
|= BIT(irqd_to_hwirq(irqd
));
2019 static void lan78xx_irq_bus_lock(struct irq_data
*irqd
)
2021 struct irq_domain_data
*data
= irq_data_get_irq_chip_data(irqd
);
2023 mutex_lock(&data
->irq_lock
);
2026 static void lan78xx_irq_bus_sync_unlock(struct irq_data
*irqd
)
2028 struct irq_domain_data
*data
= irq_data_get_irq_chip_data(irqd
);
2029 struct lan78xx_net
*dev
=
2030 container_of(data
, struct lan78xx_net
, domain_data
);
2033 /* call register access here because irq_bus_lock & irq_bus_sync_unlock
2034 * are only two callbacks executed in non-atomic contex.
2036 lan78xx_read_reg(dev
, INT_EP_CTL
, &buf
);
2037 if (buf
!= data
->irqenable
)
2038 lan78xx_write_reg(dev
, INT_EP_CTL
, data
->irqenable
);
2040 mutex_unlock(&data
->irq_lock
);
2043 static struct irq_chip lan78xx_irqchip
= {
2044 .name
= "lan78xx-irqs",
2045 .irq_mask
= lan78xx_irq_mask
,
2046 .irq_unmask
= lan78xx_irq_unmask
,
2047 .irq_bus_lock
= lan78xx_irq_bus_lock
,
2048 .irq_bus_sync_unlock
= lan78xx_irq_bus_sync_unlock
,
2051 static int lan78xx_setup_irq_domain(struct lan78xx_net
*dev
)
2053 struct device_node
*of_node
;
2054 struct irq_domain
*irqdomain
;
2055 unsigned int irqmap
= 0;
2059 of_node
= dev
->udev
->dev
.parent
->of_node
;
2061 mutex_init(&dev
->domain_data
.irq_lock
);
2063 lan78xx_read_reg(dev
, INT_EP_CTL
, &buf
);
2064 dev
->domain_data
.irqenable
= buf
;
2066 dev
->domain_data
.irqchip
= &lan78xx_irqchip
;
2067 dev
->domain_data
.irq_handler
= handle_simple_irq
;
2069 irqdomain
= irq_domain_add_simple(of_node
, MAX_INT_EP
, 0,
2070 &chip_domain_ops
, &dev
->domain_data
);
2072 /* create mapping for PHY interrupt */
2073 irqmap
= irq_create_mapping(irqdomain
, INT_EP_PHY
);
2075 irq_domain_remove(irqdomain
);
2084 dev
->domain_data
.irqdomain
= irqdomain
;
2085 dev
->domain_data
.phyirq
= irqmap
;
2090 static void lan78xx_remove_irq_domain(struct lan78xx_net
*dev
)
2092 if (dev
->domain_data
.phyirq
> 0) {
2093 irq_dispose_mapping(dev
->domain_data
.phyirq
);
2095 if (dev
->domain_data
.irqdomain
)
2096 irq_domain_remove(dev
->domain_data
.irqdomain
);
2098 dev
->domain_data
.phyirq
= 0;
2099 dev
->domain_data
.irqdomain
= NULL
;
2102 static int lan8835_fixup(struct phy_device
*phydev
)
2105 struct lan78xx_net
*dev
= netdev_priv(phydev
->attached_dev
);
2107 /* LED2/PME_N/IRQ_N/RGMII_ID pin to IRQ_N mode */
2108 buf
= phy_read_mmd(phydev
, MDIO_MMD_PCS
, 0x8010);
2111 phy_write_mmd(phydev
, MDIO_MMD_PCS
, 0x8010, buf
);
2113 /* RGMII MAC TXC Delay Enable */
2114 lan78xx_write_reg(dev
, MAC_RGMII_ID
,
2115 MAC_RGMII_ID_TXC_DELAY_EN_
);
2117 /* RGMII TX DLL Tune Adjust */
2118 lan78xx_write_reg(dev
, RGMII_TX_BYP_DLL
, 0x3D00);
2120 dev
->interface
= PHY_INTERFACE_MODE_RGMII_TXID
;
2125 static int ksz9031rnx_fixup(struct phy_device
*phydev
)
2127 struct lan78xx_net
*dev
= netdev_priv(phydev
->attached_dev
);
2129 /* Micrel9301RNX PHY configuration */
2130 /* RGMII Control Signal Pad Skew */
2131 phy_write_mmd(phydev
, MDIO_MMD_WIS
, 4, 0x0077);
2132 /* RGMII RX Data Pad Skew */
2133 phy_write_mmd(phydev
, MDIO_MMD_WIS
, 5, 0x7777);
2134 /* RGMII RX Clock Pad Skew */
2135 phy_write_mmd(phydev
, MDIO_MMD_WIS
, 8, 0x1FF);
2137 dev
->interface
= PHY_INTERFACE_MODE_RGMII_RXID
;
2142 static struct phy_device
*lan7801_phy_init(struct lan78xx_net
*dev
)
2146 struct fixed_phy_status fphy_status
= {
2148 .speed
= SPEED_1000
,
2149 .duplex
= DUPLEX_FULL
,
2151 struct phy_device
*phydev
;
2153 phydev
= phy_find_first(dev
->mdiobus
);
2155 netdev_dbg(dev
->net
, "PHY Not Found!! Registering Fixed PHY\n");
2156 phydev
= fixed_phy_register(PHY_POLL
, &fphy_status
, NULL
);
2157 if (IS_ERR(phydev
)) {
2158 netdev_err(dev
->net
, "No PHY/fixed_PHY found\n");
2161 netdev_dbg(dev
->net
, "Registered FIXED PHY\n");
2162 dev
->interface
= PHY_INTERFACE_MODE_RGMII
;
2163 ret
= lan78xx_write_reg(dev
, MAC_RGMII_ID
,
2164 MAC_RGMII_ID_TXC_DELAY_EN_
);
2165 ret
= lan78xx_write_reg(dev
, RGMII_TX_BYP_DLL
, 0x3D00);
2166 ret
= lan78xx_read_reg(dev
, HW_CFG
, &buf
);
2167 buf
|= HW_CFG_CLK125_EN_
;
2168 buf
|= HW_CFG_REFCLK25_EN_
;
2169 ret
= lan78xx_write_reg(dev
, HW_CFG
, buf
);
2172 netdev_err(dev
->net
, "no PHY driver found\n");
2175 dev
->interface
= PHY_INTERFACE_MODE_RGMII
;
2176 /* external PHY fixup for KSZ9031RNX */
2177 ret
= phy_register_fixup_for_uid(PHY_KSZ9031RNX
, 0xfffffff0,
2180 netdev_err(dev
->net
, "Failed to register fixup for PHY_KSZ9031RNX\n");
2183 /* external PHY fixup for LAN8835 */
2184 ret
= phy_register_fixup_for_uid(PHY_LAN8835
, 0xfffffff0,
2187 netdev_err(dev
->net
, "Failed to register fixup for PHY_LAN8835\n");
2190 /* add more external PHY fixup here if needed */
2192 phydev
->is_internal
= false;
2197 static int lan78xx_phy_init(struct lan78xx_net
*dev
)
2199 __ETHTOOL_DECLARE_LINK_MODE_MASK(fc
) = { 0, };
2202 struct phy_device
*phydev
;
2204 switch (dev
->chipid
) {
2205 case ID_REV_CHIP_ID_7801_
:
2206 phydev
= lan7801_phy_init(dev
);
2208 netdev_err(dev
->net
, "lan7801: PHY Init Failed");
2213 case ID_REV_CHIP_ID_7800_
:
2214 case ID_REV_CHIP_ID_7850_
:
2215 phydev
= phy_find_first(dev
->mdiobus
);
2217 netdev_err(dev
->net
, "no PHY found\n");
2220 phydev
->is_internal
= true;
2221 dev
->interface
= PHY_INTERFACE_MODE_GMII
;
2225 netdev_err(dev
->net
, "Unknown CHIP ID found\n");
2229 /* if phyirq is not set, use polling mode in phylib */
2230 if (dev
->domain_data
.phyirq
> 0)
2231 phydev
->irq
= dev
->domain_data
.phyirq
;
2233 phydev
->irq
= PHY_POLL
;
2234 netdev_dbg(dev
->net
, "phydev->irq = %d\n", phydev
->irq
);
2236 /* set to AUTOMDIX */
2237 phydev
->mdix
= ETH_TP_MDI_AUTO
;
2239 ret
= phy_connect_direct(dev
->net
, phydev
,
2240 lan78xx_link_status_change
,
2243 netdev_err(dev
->net
, "can't attach PHY to %s\n",
2245 if (dev
->chipid
== ID_REV_CHIP_ID_7801_
) {
2246 if (phy_is_pseudo_fixed_link(phydev
)) {
2247 fixed_phy_unregister(phydev
);
2249 phy_unregister_fixup_for_uid(PHY_KSZ9031RNX
,
2251 phy_unregister_fixup_for_uid(PHY_LAN8835
,
2258 /* MAC doesn't support 1000T Half */
2259 phy_remove_link_mode(phydev
, ETHTOOL_LINK_MODE_1000baseT_Half_BIT
);
2261 /* support both flow controls */
2262 dev
->fc_request_control
= (FLOW_CTRL_RX
| FLOW_CTRL_TX
);
2263 linkmode_clear_bit(ETHTOOL_LINK_MODE_Pause_BIT
,
2264 phydev
->advertising
);
2265 linkmode_clear_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT
,
2266 phydev
->advertising
);
2267 mii_adv
= (u32
)mii_advertise_flowctrl(dev
->fc_request_control
);
2268 mii_adv_to_linkmode_adv_t(fc
, mii_adv
);
2269 linkmode_or(phydev
->advertising
, fc
, phydev
->advertising
);
2271 if (phydev
->mdio
.dev
.of_node
) {
2275 len
= of_property_count_elems_of_size(phydev
->mdio
.dev
.of_node
,
2276 "microchip,led-modes",
2279 /* Ensure the appropriate LEDs are enabled */
2280 lan78xx_read_reg(dev
, HW_CFG
, ®
);
2281 reg
&= ~(HW_CFG_LED0_EN_
|
2285 reg
|= (len
> 0) * HW_CFG_LED0_EN_
|
2286 (len
> 1) * HW_CFG_LED1_EN_
|
2287 (len
> 2) * HW_CFG_LED2_EN_
|
2288 (len
> 3) * HW_CFG_LED3_EN_
;
2289 lan78xx_write_reg(dev
, HW_CFG
, reg
);
2293 genphy_config_aneg(phydev
);
2295 dev
->fc_autoneg
= phydev
->autoneg
;
2300 static int lan78xx_set_rx_max_frame_length(struct lan78xx_net
*dev
, int size
)
2305 lan78xx_read_reg(dev
, MAC_RX
, &buf
);
2307 rxenabled
= ((buf
& MAC_RX_RXEN_
) != 0);
2310 buf
&= ~MAC_RX_RXEN_
;
2311 lan78xx_write_reg(dev
, MAC_RX
, buf
);
2314 /* add 4 to size for FCS */
2315 buf
&= ~MAC_RX_MAX_SIZE_MASK_
;
2316 buf
|= (((size
+ 4) << MAC_RX_MAX_SIZE_SHIFT_
) & MAC_RX_MAX_SIZE_MASK_
);
2318 lan78xx_write_reg(dev
, MAC_RX
, buf
);
2321 buf
|= MAC_RX_RXEN_
;
2322 lan78xx_write_reg(dev
, MAC_RX
, buf
);
2328 static int unlink_urbs(struct lan78xx_net
*dev
, struct sk_buff_head
*q
)
2330 struct sk_buff
*skb
;
2331 unsigned long flags
;
2334 spin_lock_irqsave(&q
->lock
, flags
);
2335 while (!skb_queue_empty(q
)) {
2336 struct skb_data
*entry
;
2340 skb_queue_walk(q
, skb
) {
2341 entry
= (struct skb_data
*)skb
->cb
;
2342 if (entry
->state
!= unlink_start
)
2347 entry
->state
= unlink_start
;
2350 /* Get reference count of the URB to avoid it to be
2351 * freed during usb_unlink_urb, which may trigger
2352 * use-after-free problem inside usb_unlink_urb since
2353 * usb_unlink_urb is always racing with .complete
2354 * handler(include defer_bh).
2357 spin_unlock_irqrestore(&q
->lock
, flags
);
2358 /* during some PM-driven resume scenarios,
2359 * these (async) unlinks complete immediately
2361 ret
= usb_unlink_urb(urb
);
2362 if (ret
!= -EINPROGRESS
&& ret
!= 0)
2363 netdev_dbg(dev
->net
, "unlink urb err, %d\n", ret
);
2367 spin_lock_irqsave(&q
->lock
, flags
);
2369 spin_unlock_irqrestore(&q
->lock
, flags
);
2373 static int lan78xx_change_mtu(struct net_device
*netdev
, int new_mtu
)
2375 struct lan78xx_net
*dev
= netdev_priv(netdev
);
2376 int ll_mtu
= new_mtu
+ netdev
->hard_header_len
;
2377 int old_hard_mtu
= dev
->hard_mtu
;
2378 int old_rx_urb_size
= dev
->rx_urb_size
;
2381 /* no second zero-length packet read wanted after mtu-sized packets */
2382 if ((ll_mtu
% dev
->maxpacket
) == 0)
2385 ret
= usb_autopm_get_interface(dev
->intf
);
2389 lan78xx_set_rx_max_frame_length(dev
, new_mtu
+ VLAN_ETH_HLEN
);
2391 netdev
->mtu
= new_mtu
;
2393 dev
->hard_mtu
= netdev
->mtu
+ netdev
->hard_header_len
;
2394 if (dev
->rx_urb_size
== old_hard_mtu
) {
2395 dev
->rx_urb_size
= dev
->hard_mtu
;
2396 if (dev
->rx_urb_size
> old_rx_urb_size
) {
2397 if (netif_running(dev
->net
)) {
2398 unlink_urbs(dev
, &dev
->rxq
);
2399 tasklet_schedule(&dev
->bh
);
2404 usb_autopm_put_interface(dev
->intf
);
2409 static int lan78xx_set_mac_addr(struct net_device
*netdev
, void *p
)
2411 struct lan78xx_net
*dev
= netdev_priv(netdev
);
2412 struct sockaddr
*addr
= p
;
2413 u32 addr_lo
, addr_hi
;
2415 if (netif_running(netdev
))
2418 if (!is_valid_ether_addr(addr
->sa_data
))
2419 return -EADDRNOTAVAIL
;
2421 ether_addr_copy(netdev
->dev_addr
, addr
->sa_data
);
2423 addr_lo
= netdev
->dev_addr
[0] |
2424 netdev
->dev_addr
[1] << 8 |
2425 netdev
->dev_addr
[2] << 16 |
2426 netdev
->dev_addr
[3] << 24;
2427 addr_hi
= netdev
->dev_addr
[4] |
2428 netdev
->dev_addr
[5] << 8;
2430 lan78xx_write_reg(dev
, RX_ADDRL
, addr_lo
);
2431 lan78xx_write_reg(dev
, RX_ADDRH
, addr_hi
);
2433 /* Added to support MAC address changes */
2434 lan78xx_write_reg(dev
, MAF_LO(0), addr_lo
);
2435 lan78xx_write_reg(dev
, MAF_HI(0), addr_hi
| MAF_HI_VALID_
);
2440 /* Enable or disable Rx checksum offload engine */
2441 static int lan78xx_set_features(struct net_device
*netdev
,
2442 netdev_features_t features
)
2444 struct lan78xx_net
*dev
= netdev_priv(netdev
);
2445 struct lan78xx_priv
*pdata
= (struct lan78xx_priv
*)(dev
->data
[0]);
2446 unsigned long flags
;
2448 spin_lock_irqsave(&pdata
->rfe_ctl_lock
, flags
);
2450 if (features
& NETIF_F_RXCSUM
) {
2451 pdata
->rfe_ctl
|= RFE_CTL_TCPUDP_COE_
| RFE_CTL_IP_COE_
;
2452 pdata
->rfe_ctl
|= RFE_CTL_ICMP_COE_
| RFE_CTL_IGMP_COE_
;
2454 pdata
->rfe_ctl
&= ~(RFE_CTL_TCPUDP_COE_
| RFE_CTL_IP_COE_
);
2455 pdata
->rfe_ctl
&= ~(RFE_CTL_ICMP_COE_
| RFE_CTL_IGMP_COE_
);
2458 if (features
& NETIF_F_HW_VLAN_CTAG_RX
)
2459 pdata
->rfe_ctl
|= RFE_CTL_VLAN_STRIP_
;
2461 pdata
->rfe_ctl
&= ~RFE_CTL_VLAN_STRIP_
;
2463 if (features
& NETIF_F_HW_VLAN_CTAG_FILTER
)
2464 pdata
->rfe_ctl
|= RFE_CTL_VLAN_FILTER_
;
2466 pdata
->rfe_ctl
&= ~RFE_CTL_VLAN_FILTER_
;
2468 spin_unlock_irqrestore(&pdata
->rfe_ctl_lock
, flags
);
2470 lan78xx_write_reg(dev
, RFE_CTL
, pdata
->rfe_ctl
);
2475 static void lan78xx_deferred_vlan_write(struct work_struct
*param
)
2477 struct lan78xx_priv
*pdata
=
2478 container_of(param
, struct lan78xx_priv
, set_vlan
);
2479 struct lan78xx_net
*dev
= pdata
->dev
;
2481 lan78xx_dataport_write(dev
, DP_SEL_RSEL_VLAN_DA_
, 0,
2482 DP_SEL_VHF_VLAN_LEN
, pdata
->vlan_table
);
2485 static int lan78xx_vlan_rx_add_vid(struct net_device
*netdev
,
2486 __be16 proto
, u16 vid
)
2488 struct lan78xx_net
*dev
= netdev_priv(netdev
);
2489 struct lan78xx_priv
*pdata
= (struct lan78xx_priv
*)(dev
->data
[0]);
2491 u16 vid_dword_index
;
2493 vid_dword_index
= (vid
>> 5) & 0x7F;
2494 vid_bit_index
= vid
& 0x1F;
2496 pdata
->vlan_table
[vid_dword_index
] |= (1 << vid_bit_index
);
2498 /* defer register writes to a sleepable context */
2499 schedule_work(&pdata
->set_vlan
);
2504 static int lan78xx_vlan_rx_kill_vid(struct net_device
*netdev
,
2505 __be16 proto
, u16 vid
)
2507 struct lan78xx_net
*dev
= netdev_priv(netdev
);
2508 struct lan78xx_priv
*pdata
= (struct lan78xx_priv
*)(dev
->data
[0]);
2510 u16 vid_dword_index
;
2512 vid_dword_index
= (vid
>> 5) & 0x7F;
2513 vid_bit_index
= vid
& 0x1F;
2515 pdata
->vlan_table
[vid_dword_index
] &= ~(1 << vid_bit_index
);
2517 /* defer register writes to a sleepable context */
2518 schedule_work(&pdata
->set_vlan
);
2523 static void lan78xx_init_ltm(struct lan78xx_net
*dev
)
2527 u32 regs
[6] = { 0 };
2529 ret
= lan78xx_read_reg(dev
, USB_CFG1
, &buf
);
2530 if (buf
& USB_CFG1_LTM_ENABLE_
) {
2532 /* Get values from EEPROM first */
2533 if (lan78xx_read_eeprom(dev
, 0x3F, 2, temp
) == 0) {
2534 if (temp
[0] == 24) {
2535 ret
= lan78xx_read_raw_eeprom(dev
,
2542 } else if (lan78xx_read_otp(dev
, 0x3F, 2, temp
) == 0) {
2543 if (temp
[0] == 24) {
2544 ret
= lan78xx_read_raw_otp(dev
,
2554 lan78xx_write_reg(dev
, LTM_BELT_IDLE0
, regs
[0]);
2555 lan78xx_write_reg(dev
, LTM_BELT_IDLE1
, regs
[1]);
2556 lan78xx_write_reg(dev
, LTM_BELT_ACT0
, regs
[2]);
2557 lan78xx_write_reg(dev
, LTM_BELT_ACT1
, regs
[3]);
2558 lan78xx_write_reg(dev
, LTM_INACTIVE0
, regs
[4]);
2559 lan78xx_write_reg(dev
, LTM_INACTIVE1
, regs
[5]);
2562 static int lan78xx_start_hw(struct lan78xx_net
*dev
, u32 reg
, u32 hw_enable
)
2564 return lan78xx_update_reg(dev
, reg
, hw_enable
, hw_enable
);
2567 static int lan78xx_stop_hw(struct lan78xx_net
*dev
, u32 reg
, u32 hw_enabled
,
2570 unsigned long timeout
;
2571 bool stopped
= true;
2575 /* Stop the h/w block (if not already stopped) */
2577 ret
= lan78xx_read_reg(dev
, reg
, &buf
);
2581 if (buf
& hw_enabled
) {
2584 ret
= lan78xx_write_reg(dev
, reg
, buf
);
2589 timeout
= jiffies
+ HW_DISABLE_TIMEOUT
;
2591 ret
= lan78xx_read_reg(dev
, reg
, &buf
);
2595 if (buf
& hw_disabled
)
2598 msleep(HW_DISABLE_DELAY_MS
);
2599 } while (!stopped
&& !time_after(jiffies
, timeout
));
2602 ret
= stopped
? 0 : -ETIME
;
2607 static int lan78xx_flush_fifo(struct lan78xx_net
*dev
, u32 reg
, u32 fifo_flush
)
2609 return lan78xx_update_reg(dev
, reg
, fifo_flush
, fifo_flush
);
2612 static int lan78xx_start_tx_path(struct lan78xx_net
*dev
)
2616 netif_dbg(dev
, drv
, dev
->net
, "start tx path");
2618 /* Start the MAC transmitter */
2620 ret
= lan78xx_start_hw(dev
, MAC_TX
, MAC_TX_TXEN_
);
2624 /* Start the Tx FIFO */
2626 ret
= lan78xx_start_hw(dev
, FCT_TX_CTL
, FCT_TX_CTL_EN_
);
2633 static int lan78xx_stop_tx_path(struct lan78xx_net
*dev
)
2637 netif_dbg(dev
, drv
, dev
->net
, "stop tx path");
2639 /* Stop the Tx FIFO */
2641 ret
= lan78xx_stop_hw(dev
, FCT_TX_CTL
, FCT_TX_CTL_EN_
, FCT_TX_CTL_DIS_
);
2645 /* Stop the MAC transmitter */
2647 ret
= lan78xx_stop_hw(dev
, MAC_TX
, MAC_TX_TXEN_
, MAC_TX_TXD_
);
2654 /* The caller must ensure the Tx path is stopped before calling
2655 * lan78xx_flush_tx_fifo().
2657 static int lan78xx_flush_tx_fifo(struct lan78xx_net
*dev
)
2659 return lan78xx_flush_fifo(dev
, FCT_TX_CTL
, FCT_TX_CTL_RST_
);
2662 static int lan78xx_start_rx_path(struct lan78xx_net
*dev
)
2666 netif_dbg(dev
, drv
, dev
->net
, "start rx path");
2668 /* Start the Rx FIFO */
2670 ret
= lan78xx_start_hw(dev
, FCT_RX_CTL
, FCT_RX_CTL_EN_
);
2674 /* Start the MAC receiver*/
2676 ret
= lan78xx_start_hw(dev
, MAC_RX
, MAC_RX_RXEN_
);
2683 static int lan78xx_stop_rx_path(struct lan78xx_net
*dev
)
2687 netif_dbg(dev
, drv
, dev
->net
, "stop rx path");
2689 /* Stop the MAC receiver */
2691 ret
= lan78xx_stop_hw(dev
, MAC_RX
, MAC_RX_RXEN_
, MAC_RX_RXD_
);
2695 /* Stop the Rx FIFO */
2697 ret
= lan78xx_stop_hw(dev
, FCT_RX_CTL
, FCT_RX_CTL_EN_
, FCT_RX_CTL_DIS_
);
2704 /* The caller must ensure the Rx path is stopped before calling
2705 * lan78xx_flush_rx_fifo().
2707 static int lan78xx_flush_rx_fifo(struct lan78xx_net
*dev
)
2709 return lan78xx_flush_fifo(dev
, FCT_RX_CTL
, FCT_RX_CTL_RST_
);
2712 static int lan78xx_reset(struct lan78xx_net
*dev
)
2714 struct lan78xx_priv
*pdata
= (struct lan78xx_priv
*)(dev
->data
[0]);
2715 unsigned long timeout
;
2720 ret
= lan78xx_read_reg(dev
, HW_CFG
, &buf
);
2724 buf
|= HW_CFG_LRST_
;
2726 ret
= lan78xx_write_reg(dev
, HW_CFG
, buf
);
2730 timeout
= jiffies
+ HZ
;
2733 ret
= lan78xx_read_reg(dev
, HW_CFG
, &buf
);
2737 if (time_after(jiffies
, timeout
)) {
2738 netdev_warn(dev
->net
,
2739 "timeout on completion of LiteReset");
2743 } while (buf
& HW_CFG_LRST_
);
2745 lan78xx_init_mac_address(dev
);
2747 /* save DEVID for later usage */
2748 ret
= lan78xx_read_reg(dev
, ID_REV
, &buf
);
2752 dev
->chipid
= (buf
& ID_REV_CHIP_ID_MASK_
) >> 16;
2753 dev
->chiprev
= buf
& ID_REV_CHIP_REV_MASK_
;
2755 /* Respond to the IN token with a NAK */
2756 ret
= lan78xx_read_reg(dev
, USB_CFG0
, &buf
);
2760 buf
|= USB_CFG_BIR_
;
2762 ret
= lan78xx_write_reg(dev
, USB_CFG0
, buf
);
2767 lan78xx_init_ltm(dev
);
2769 if (dev
->udev
->speed
== USB_SPEED_SUPER
) {
2770 buf
= DEFAULT_BURST_CAP_SIZE
/ SS_USB_PKT_SIZE
;
2771 dev
->rx_urb_size
= DEFAULT_BURST_CAP_SIZE
;
2774 } else if (dev
->udev
->speed
== USB_SPEED_HIGH
) {
2775 buf
= DEFAULT_BURST_CAP_SIZE
/ HS_USB_PKT_SIZE
;
2776 dev
->rx_urb_size
= DEFAULT_BURST_CAP_SIZE
;
2777 dev
->rx_qlen
= RX_MAX_QUEUE_MEMORY
/ dev
->rx_urb_size
;
2778 dev
->tx_qlen
= RX_MAX_QUEUE_MEMORY
/ dev
->hard_mtu
;
2780 buf
= DEFAULT_BURST_CAP_SIZE
/ FS_USB_PKT_SIZE
;
2781 dev
->rx_urb_size
= DEFAULT_BURST_CAP_SIZE
;
2786 ret
= lan78xx_write_reg(dev
, BURST_CAP
, buf
);
2790 ret
= lan78xx_write_reg(dev
, BULK_IN_DLY
, DEFAULT_BULK_IN_DELAY
);
2794 ret
= lan78xx_read_reg(dev
, HW_CFG
, &buf
);
2800 ret
= lan78xx_write_reg(dev
, HW_CFG
, buf
);
2804 ret
= lan78xx_read_reg(dev
, USB_CFG0
, &buf
);
2808 buf
|= USB_CFG_BCE_
;
2810 ret
= lan78xx_write_reg(dev
, USB_CFG0
, buf
);
2814 /* set FIFO sizes */
2815 buf
= (MAX_RX_FIFO_SIZE
- 512) / 512;
2817 ret
= lan78xx_write_reg(dev
, FCT_RX_FIFO_END
, buf
);
2821 buf
= (MAX_TX_FIFO_SIZE
- 512) / 512;
2823 ret
= lan78xx_write_reg(dev
, FCT_TX_FIFO_END
, buf
);
2827 ret
= lan78xx_write_reg(dev
, INT_STS
, INT_STS_CLEAR_ALL_
);
2831 ret
= lan78xx_write_reg(dev
, FLOW
, 0);
2835 ret
= lan78xx_write_reg(dev
, FCT_FLOW
, 0);
2839 /* Don't need rfe_ctl_lock during initialisation */
2840 ret
= lan78xx_read_reg(dev
, RFE_CTL
, &pdata
->rfe_ctl
);
2844 pdata
->rfe_ctl
|= RFE_CTL_BCAST_EN_
| RFE_CTL_DA_PERFECT_
;
2846 ret
= lan78xx_write_reg(dev
, RFE_CTL
, pdata
->rfe_ctl
);
2850 /* Enable or disable checksum offload engines */
2851 ret
= lan78xx_set_features(dev
->net
, dev
->net
->features
);
2855 lan78xx_set_multicast(dev
->net
);
2858 ret
= lan78xx_read_reg(dev
, PMT_CTL
, &buf
);
2862 buf
|= PMT_CTL_PHY_RST_
;
2864 ret
= lan78xx_write_reg(dev
, PMT_CTL
, buf
);
2868 timeout
= jiffies
+ HZ
;
2871 ret
= lan78xx_read_reg(dev
, PMT_CTL
, &buf
);
2875 if (time_after(jiffies
, timeout
)) {
2876 netdev_warn(dev
->net
, "timeout waiting for PHY Reset");
2880 } while ((buf
& PMT_CTL_PHY_RST_
) || !(buf
& PMT_CTL_READY_
));
2882 ret
= lan78xx_read_reg(dev
, MAC_CR
, &buf
);
2886 /* LAN7801 only has RGMII mode */
2887 if (dev
->chipid
== ID_REV_CHIP_ID_7801_
)
2888 buf
&= ~MAC_CR_GMII_EN_
;
2890 if (dev
->chipid
== ID_REV_CHIP_ID_7800_
) {
2891 ret
= lan78xx_read_raw_eeprom(dev
, 0, 1, &sig
);
2892 if (!ret
&& sig
!= EEPROM_INDICATOR
) {
2893 /* Implies there is no external eeprom. Set mac speed */
2894 netdev_info(dev
->net
, "No External EEPROM. Setting MAC Speed\n");
2895 buf
|= MAC_CR_AUTO_DUPLEX_
| MAC_CR_AUTO_SPEED_
;
2898 ret
= lan78xx_write_reg(dev
, MAC_CR
, buf
);
2902 ret
= lan78xx_set_rx_max_frame_length(dev
,
2903 dev
->net
->mtu
+ VLAN_ETH_HLEN
);
2908 static void lan78xx_init_stats(struct lan78xx_net
*dev
)
2913 /* initialize for stats update
2914 * some counters are 20bits and some are 32bits
2916 p
= (u32
*)&dev
->stats
.rollover_max
;
2917 for (i
= 0; i
< (sizeof(dev
->stats
.rollover_max
) / (sizeof(u32
))); i
++)
2920 dev
->stats
.rollover_max
.rx_unicast_byte_count
= 0xFFFFFFFF;
2921 dev
->stats
.rollover_max
.rx_broadcast_byte_count
= 0xFFFFFFFF;
2922 dev
->stats
.rollover_max
.rx_multicast_byte_count
= 0xFFFFFFFF;
2923 dev
->stats
.rollover_max
.eee_rx_lpi_transitions
= 0xFFFFFFFF;
2924 dev
->stats
.rollover_max
.eee_rx_lpi_time
= 0xFFFFFFFF;
2925 dev
->stats
.rollover_max
.tx_unicast_byte_count
= 0xFFFFFFFF;
2926 dev
->stats
.rollover_max
.tx_broadcast_byte_count
= 0xFFFFFFFF;
2927 dev
->stats
.rollover_max
.tx_multicast_byte_count
= 0xFFFFFFFF;
2928 dev
->stats
.rollover_max
.eee_tx_lpi_transitions
= 0xFFFFFFFF;
2929 dev
->stats
.rollover_max
.eee_tx_lpi_time
= 0xFFFFFFFF;
2931 set_bit(EVENT_STAT_UPDATE
, &dev
->flags
);
2934 static int lan78xx_open(struct net_device
*net
)
2936 struct lan78xx_net
*dev
= netdev_priv(net
);
2939 netif_dbg(dev
, ifup
, dev
->net
, "open device");
2941 ret
= usb_autopm_get_interface(dev
->intf
);
2945 mutex_lock(&dev
->dev_mutex
);
2947 phy_start(net
->phydev
);
2949 netif_dbg(dev
, ifup
, dev
->net
, "phy initialised successfully");
2951 /* for Link Check */
2952 if (dev
->urb_intr
) {
2953 ret
= usb_submit_urb(dev
->urb_intr
, GFP_KERNEL
);
2955 netif_err(dev
, ifup
, dev
->net
,
2956 "intr submit %d\n", ret
);
2961 ret
= lan78xx_flush_rx_fifo(dev
);
2964 ret
= lan78xx_flush_tx_fifo(dev
);
2968 ret
= lan78xx_start_tx_path(dev
);
2971 ret
= lan78xx_start_rx_path(dev
);
2975 lan78xx_init_stats(dev
);
2977 set_bit(EVENT_DEV_OPEN
, &dev
->flags
);
2979 netif_start_queue(net
);
2981 dev
->link_on
= false;
2983 lan78xx_defer_kevent(dev
, EVENT_LINK_RESET
);
2985 mutex_unlock(&dev
->dev_mutex
);
2987 usb_autopm_put_interface(dev
->intf
);
2992 static void lan78xx_terminate_urbs(struct lan78xx_net
*dev
)
2994 DECLARE_WAIT_QUEUE_HEAD_ONSTACK(unlink_wakeup
);
2995 DECLARE_WAITQUEUE(wait
, current
);
2998 /* ensure there are no more active urbs */
2999 add_wait_queue(&unlink_wakeup
, &wait
);
3000 set_current_state(TASK_UNINTERRUPTIBLE
);
3001 dev
->wait
= &unlink_wakeup
;
3002 temp
= unlink_urbs(dev
, &dev
->txq
) + unlink_urbs(dev
, &dev
->rxq
);
3004 /* maybe wait for deletions to finish. */
3005 while (!skb_queue_empty(&dev
->rxq
) ||
3006 !skb_queue_empty(&dev
->txq
)) {
3007 schedule_timeout(msecs_to_jiffies(UNLINK_TIMEOUT_MS
));
3008 set_current_state(TASK_UNINTERRUPTIBLE
);
3009 netif_dbg(dev
, ifdown
, dev
->net
,
3010 "waited for %d urb completions", temp
);
3012 set_current_state(TASK_RUNNING
);
3014 remove_wait_queue(&unlink_wakeup
, &wait
);
3016 while (!skb_queue_empty(&dev
->done
)) {
3017 struct skb_data
*entry
;
3018 struct sk_buff
*skb
;
3020 skb
= skb_dequeue(&dev
->done
);
3021 entry
= (struct skb_data
*)(skb
->cb
);
3022 usb_free_urb(entry
->urb
);
3027 static int lan78xx_stop(struct net_device
*net
)
3029 struct lan78xx_net
*dev
= netdev_priv(net
);
3031 netif_dbg(dev
, ifup
, dev
->net
, "stop device");
3033 mutex_lock(&dev
->dev_mutex
);
3035 if (timer_pending(&dev
->stat_monitor
))
3036 del_timer_sync(&dev
->stat_monitor
);
3038 clear_bit(EVENT_DEV_OPEN
, &dev
->flags
);
3039 netif_stop_queue(net
);
3040 tasklet_kill(&dev
->bh
);
3042 lan78xx_terminate_urbs(dev
);
3044 netif_info(dev
, ifdown
, dev
->net
,
3045 "stop stats: rx/tx %lu/%lu, errs %lu/%lu\n",
3046 net
->stats
.rx_packets
, net
->stats
.tx_packets
,
3047 net
->stats
.rx_errors
, net
->stats
.tx_errors
);
3049 /* ignore errors that occur stopping the Tx and Rx data paths */
3050 lan78xx_stop_tx_path(dev
);
3051 lan78xx_stop_rx_path(dev
);
3054 phy_stop(net
->phydev
);
3056 usb_kill_urb(dev
->urb_intr
);
3058 /* deferred work (task, timer, softirq) must also stop.
3059 * can't flush_scheduled_work() until we drop rtnl (later),
3060 * else workers could deadlock; so make workers a NOP.
3062 clear_bit(EVENT_TX_HALT
, &dev
->flags
);
3063 clear_bit(EVENT_RX_HALT
, &dev
->flags
);
3064 clear_bit(EVENT_LINK_RESET
, &dev
->flags
);
3065 clear_bit(EVENT_STAT_UPDATE
, &dev
->flags
);
3067 cancel_delayed_work_sync(&dev
->wq
);
3069 usb_autopm_put_interface(dev
->intf
);
3071 mutex_unlock(&dev
->dev_mutex
);
3076 static struct sk_buff
*lan78xx_tx_prep(struct lan78xx_net
*dev
,
3077 struct sk_buff
*skb
, gfp_t flags
)
3079 u32 tx_cmd_a
, tx_cmd_b
;
3082 if (skb_cow_head(skb
, TX_OVERHEAD
)) {
3083 dev_kfree_skb_any(skb
);
3087 if (skb_linearize(skb
)) {
3088 dev_kfree_skb_any(skb
);
3092 tx_cmd_a
= (u32
)(skb
->len
& TX_CMD_A_LEN_MASK_
) | TX_CMD_A_FCS_
;
3094 if (skb
->ip_summed
== CHECKSUM_PARTIAL
)
3095 tx_cmd_a
|= TX_CMD_A_IPE_
| TX_CMD_A_TPE_
;
3098 if (skb_is_gso(skb
)) {
3099 u16 mss
= max(skb_shinfo(skb
)->gso_size
, TX_CMD_B_MSS_MIN_
);
3101 tx_cmd_b
= (mss
<< TX_CMD_B_MSS_SHIFT_
) & TX_CMD_B_MSS_MASK_
;
3103 tx_cmd_a
|= TX_CMD_A_LSO_
;
3106 if (skb_vlan_tag_present(skb
)) {
3107 tx_cmd_a
|= TX_CMD_A_IVTG_
;
3108 tx_cmd_b
|= skb_vlan_tag_get(skb
) & TX_CMD_B_VTAG_MASK_
;
3111 ptr
= skb_push(skb
, 8);
3112 put_unaligned_le32(tx_cmd_a
, ptr
);
3113 put_unaligned_le32(tx_cmd_b
, ptr
+ 4);
3118 static enum skb_state
defer_bh(struct lan78xx_net
*dev
, struct sk_buff
*skb
,
3119 struct sk_buff_head
*list
, enum skb_state state
)
3121 unsigned long flags
;
3122 enum skb_state old_state
;
3123 struct skb_data
*entry
= (struct skb_data
*)skb
->cb
;
3125 spin_lock_irqsave(&list
->lock
, flags
);
3126 old_state
= entry
->state
;
3127 entry
->state
= state
;
3129 __skb_unlink(skb
, list
);
3130 spin_unlock(&list
->lock
);
3131 spin_lock(&dev
->done
.lock
);
3133 __skb_queue_tail(&dev
->done
, skb
);
3134 if (skb_queue_len(&dev
->done
) == 1)
3135 tasklet_schedule(&dev
->bh
);
3136 spin_unlock_irqrestore(&dev
->done
.lock
, flags
);
3141 static void tx_complete(struct urb
*urb
)
3143 struct sk_buff
*skb
= (struct sk_buff
*)urb
->context
;
3144 struct skb_data
*entry
= (struct skb_data
*)skb
->cb
;
3145 struct lan78xx_net
*dev
= entry
->dev
;
3147 if (urb
->status
== 0) {
3148 dev
->net
->stats
.tx_packets
+= entry
->num_of_packet
;
3149 dev
->net
->stats
.tx_bytes
+= entry
->length
;
3151 dev
->net
->stats
.tx_errors
++;
3153 switch (urb
->status
) {
3155 lan78xx_defer_kevent(dev
, EVENT_TX_HALT
);
3158 /* software-driven interface shutdown */
3161 netif_dbg(dev
, tx_err
, dev
->net
,
3162 "tx err interface gone %d\n",
3163 entry
->urb
->status
);
3169 netif_stop_queue(dev
->net
);
3170 netif_dbg(dev
, tx_err
, dev
->net
,
3171 "tx err queue stopped %d\n",
3172 entry
->urb
->status
);
3175 netif_dbg(dev
, tx_err
, dev
->net
,
3176 "unknown tx err %d\n",
3177 entry
->urb
->status
);
3182 usb_autopm_put_interface_async(dev
->intf
);
3184 defer_bh(dev
, skb
, &dev
->txq
, tx_done
);
3187 static void lan78xx_queue_skb(struct sk_buff_head
*list
,
3188 struct sk_buff
*newsk
, enum skb_state state
)
3190 struct skb_data
*entry
= (struct skb_data
*)newsk
->cb
;
3192 __skb_queue_tail(list
, newsk
);
3193 entry
->state
= state
;
3197 lan78xx_start_xmit(struct sk_buff
*skb
, struct net_device
*net
)
3199 struct lan78xx_net
*dev
= netdev_priv(net
);
3200 struct sk_buff
*skb2
= NULL
;
3202 if (test_bit(EVENT_DEV_ASLEEP
, &dev
->flags
))
3203 schedule_delayed_work(&dev
->wq
, 0);
3206 skb_tx_timestamp(skb
);
3207 skb2
= lan78xx_tx_prep(dev
, skb
, GFP_ATOMIC
);
3211 skb_queue_tail(&dev
->txq_pend
, skb2
);
3213 /* throttle TX patch at slower than SUPER SPEED USB */
3214 if ((dev
->udev
->speed
< USB_SPEED_SUPER
) &&
3215 (skb_queue_len(&dev
->txq_pend
) > 10))
3216 netif_stop_queue(net
);
3218 netif_dbg(dev
, tx_err
, dev
->net
,
3219 "lan78xx_tx_prep return NULL\n");
3220 dev
->net
->stats
.tx_errors
++;
3221 dev
->net
->stats
.tx_dropped
++;
3224 tasklet_schedule(&dev
->bh
);
3226 return NETDEV_TX_OK
;
3229 static int lan78xx_bind(struct lan78xx_net
*dev
, struct usb_interface
*intf
)
3231 struct lan78xx_priv
*pdata
= NULL
;
3235 dev
->data
[0] = (unsigned long)kzalloc(sizeof(*pdata
), GFP_KERNEL
);
3237 pdata
= (struct lan78xx_priv
*)(dev
->data
[0]);
3239 netdev_warn(dev
->net
, "Unable to allocate lan78xx_priv");
3245 spin_lock_init(&pdata
->rfe_ctl_lock
);
3246 mutex_init(&pdata
->dataport_mutex
);
3248 INIT_WORK(&pdata
->set_multicast
, lan78xx_deferred_multicast_write
);
3250 for (i
= 0; i
< DP_SEL_VHF_VLAN_LEN
; i
++)
3251 pdata
->vlan_table
[i
] = 0;
3253 INIT_WORK(&pdata
->set_vlan
, lan78xx_deferred_vlan_write
);
3255 dev
->net
->features
= 0;
3257 if (DEFAULT_TX_CSUM_ENABLE
)
3258 dev
->net
->features
|= NETIF_F_HW_CSUM
;
3260 if (DEFAULT_RX_CSUM_ENABLE
)
3261 dev
->net
->features
|= NETIF_F_RXCSUM
;
3263 if (DEFAULT_TSO_CSUM_ENABLE
)
3264 dev
->net
->features
|= NETIF_F_TSO
| NETIF_F_TSO6
| NETIF_F_SG
;
3266 if (DEFAULT_VLAN_RX_OFFLOAD
)
3267 dev
->net
->features
|= NETIF_F_HW_VLAN_CTAG_RX
;
3269 if (DEFAULT_VLAN_FILTER_ENABLE
)
3270 dev
->net
->features
|= NETIF_F_HW_VLAN_CTAG_FILTER
;
3272 dev
->net
->hw_features
= dev
->net
->features
;
3274 ret
= lan78xx_setup_irq_domain(dev
);
3276 netdev_warn(dev
->net
,
3277 "lan78xx_setup_irq_domain() failed : %d", ret
);
3281 dev
->net
->hard_header_len
+= TX_OVERHEAD
;
3282 dev
->hard_mtu
= dev
->net
->mtu
+ dev
->net
->hard_header_len
;
3284 /* Init all registers */
3285 ret
= lan78xx_reset(dev
);
3287 netdev_warn(dev
->net
, "Registers INIT FAILED....");
3291 ret
= lan78xx_mdio_init(dev
);
3293 netdev_warn(dev
->net
, "MDIO INIT FAILED.....");
3297 dev
->net
->flags
|= IFF_MULTICAST
;
3299 pdata
->wol
= WAKE_MAGIC
;
3304 lan78xx_remove_irq_domain(dev
);
3307 netdev_warn(dev
->net
, "Bind routine FAILED");
3308 cancel_work_sync(&pdata
->set_multicast
);
3309 cancel_work_sync(&pdata
->set_vlan
);
3314 static void lan78xx_unbind(struct lan78xx_net
*dev
, struct usb_interface
*intf
)
3316 struct lan78xx_priv
*pdata
= (struct lan78xx_priv
*)(dev
->data
[0]);
3318 lan78xx_remove_irq_domain(dev
);
3320 lan78xx_remove_mdio(dev
);
3323 cancel_work_sync(&pdata
->set_multicast
);
3324 cancel_work_sync(&pdata
->set_vlan
);
3325 netif_dbg(dev
, ifdown
, dev
->net
, "free pdata");
3332 static void lan78xx_rx_csum_offload(struct lan78xx_net
*dev
,
3333 struct sk_buff
*skb
,
3334 u32 rx_cmd_a
, u32 rx_cmd_b
)
3336 /* HW Checksum offload appears to be flawed if used when not stripping
3337 * VLAN headers. Drop back to S/W checksums under these conditions.
3339 if (!(dev
->net
->features
& NETIF_F_RXCSUM
) ||
3340 unlikely(rx_cmd_a
& RX_CMD_A_ICSM_
) ||
3341 ((rx_cmd_a
& RX_CMD_A_FVTG_
) &&
3342 !(dev
->net
->features
& NETIF_F_HW_VLAN_CTAG_RX
))) {
3343 skb
->ip_summed
= CHECKSUM_NONE
;
3345 skb
->csum
= ntohs((u16
)(rx_cmd_b
>> RX_CMD_B_CSUM_SHIFT_
));
3346 skb
->ip_summed
= CHECKSUM_COMPLETE
;
3350 static void lan78xx_rx_vlan_offload(struct lan78xx_net
*dev
,
3351 struct sk_buff
*skb
,
3352 u32 rx_cmd_a
, u32 rx_cmd_b
)
3354 if ((dev
->net
->features
& NETIF_F_HW_VLAN_CTAG_RX
) &&
3355 (rx_cmd_a
& RX_CMD_A_FVTG_
))
3356 __vlan_hwaccel_put_tag(skb
, htons(ETH_P_8021Q
),
3357 (rx_cmd_b
& 0xffff));
3360 static void lan78xx_skb_return(struct lan78xx_net
*dev
, struct sk_buff
*skb
)
3364 dev
->net
->stats
.rx_packets
++;
3365 dev
->net
->stats
.rx_bytes
+= skb
->len
;
3367 skb
->protocol
= eth_type_trans(skb
, dev
->net
);
3369 netif_dbg(dev
, rx_status
, dev
->net
, "< rx, len %zu, type 0x%x\n",
3370 skb
->len
+ sizeof(struct ethhdr
), skb
->protocol
);
3371 memset(skb
->cb
, 0, sizeof(struct skb_data
));
3373 if (skb_defer_rx_timestamp(skb
))
3376 status
= netif_rx(skb
);
3377 if (status
!= NET_RX_SUCCESS
)
3378 netif_dbg(dev
, rx_err
, dev
->net
,
3379 "netif_rx status %d\n", status
);
3382 static int lan78xx_rx(struct lan78xx_net
*dev
, struct sk_buff
*skb
)
3384 if (skb
->len
< dev
->net
->hard_header_len
)
3387 while (skb
->len
> 0) {
3388 u32 rx_cmd_a
, rx_cmd_b
, align_count
, size
;
3390 struct sk_buff
*skb2
;
3391 unsigned char *packet
;
3393 rx_cmd_a
= get_unaligned_le32(skb
->data
);
3394 skb_pull(skb
, sizeof(rx_cmd_a
));
3396 rx_cmd_b
= get_unaligned_le32(skb
->data
);
3397 skb_pull(skb
, sizeof(rx_cmd_b
));
3399 rx_cmd_c
= get_unaligned_le16(skb
->data
);
3400 skb_pull(skb
, sizeof(rx_cmd_c
));
3404 /* get the packet length */
3405 size
= (rx_cmd_a
& RX_CMD_A_LEN_MASK_
);
3406 align_count
= (4 - ((size
+ RXW_PADDING
) % 4)) % 4;
3408 if (unlikely(rx_cmd_a
& RX_CMD_A_RED_
)) {
3409 netif_dbg(dev
, rx_err
, dev
->net
,
3410 "Error rx_cmd_a=0x%08x", rx_cmd_a
);
3412 /* last frame in this batch */
3413 if (skb
->len
== size
) {
3414 lan78xx_rx_csum_offload(dev
, skb
,
3415 rx_cmd_a
, rx_cmd_b
);
3416 lan78xx_rx_vlan_offload(dev
, skb
,
3417 rx_cmd_a
, rx_cmd_b
);
3419 skb_trim(skb
, skb
->len
- 4); /* remove fcs */
3420 skb
->truesize
= size
+ sizeof(struct sk_buff
);
3425 skb2
= skb_clone(skb
, GFP_ATOMIC
);
3426 if (unlikely(!skb2
)) {
3427 netdev_warn(dev
->net
, "Error allocating skb");
3432 skb2
->data
= packet
;
3433 skb_set_tail_pointer(skb2
, size
);
3435 lan78xx_rx_csum_offload(dev
, skb2
, rx_cmd_a
, rx_cmd_b
);
3436 lan78xx_rx_vlan_offload(dev
, skb2
, rx_cmd_a
, rx_cmd_b
);
3438 skb_trim(skb2
, skb2
->len
- 4); /* remove fcs */
3439 skb2
->truesize
= size
+ sizeof(struct sk_buff
);
3441 lan78xx_skb_return(dev
, skb2
);
3444 skb_pull(skb
, size
);
3446 /* padding bytes before the next frame starts */
3448 skb_pull(skb
, align_count
);
3454 static inline void rx_process(struct lan78xx_net
*dev
, struct sk_buff
*skb
)
3456 if (!lan78xx_rx(dev
, skb
)) {
3457 dev
->net
->stats
.rx_errors
++;
3462 lan78xx_skb_return(dev
, skb
);
3466 netif_dbg(dev
, rx_err
, dev
->net
, "drop\n");
3467 dev
->net
->stats
.rx_errors
++;
3469 skb_queue_tail(&dev
->done
, skb
);
3472 static void rx_complete(struct urb
*urb
);
3474 static int rx_submit(struct lan78xx_net
*dev
, struct urb
*urb
, gfp_t flags
)
3476 struct sk_buff
*skb
;
3477 struct skb_data
*entry
;
3478 unsigned long lockflags
;
3479 size_t size
= dev
->rx_urb_size
;
3482 skb
= netdev_alloc_skb_ip_align(dev
->net
, size
);
3488 entry
= (struct skb_data
*)skb
->cb
;
3493 usb_fill_bulk_urb(urb
, dev
->udev
, dev
->pipe_in
,
3494 skb
->data
, size
, rx_complete
, skb
);
3496 spin_lock_irqsave(&dev
->rxq
.lock
, lockflags
);
3498 if (netif_device_present(dev
->net
) &&
3499 netif_running(dev
->net
) &&
3500 !test_bit(EVENT_RX_HALT
, &dev
->flags
) &&
3501 !test_bit(EVENT_DEV_ASLEEP
, &dev
->flags
)) {
3502 ret
= usb_submit_urb(urb
, GFP_ATOMIC
);
3505 lan78xx_queue_skb(&dev
->rxq
, skb
, rx_start
);
3508 lan78xx_defer_kevent(dev
, EVENT_RX_HALT
);
3512 netif_dbg(dev
, ifdown
, dev
->net
, "device gone\n");
3513 netif_device_detach(dev
->net
);
3519 netif_dbg(dev
, rx_err
, dev
->net
,
3520 "rx submit, %d\n", ret
);
3521 tasklet_schedule(&dev
->bh
);
3524 netif_dbg(dev
, ifdown
, dev
->net
, "rx: stopped\n");
3527 spin_unlock_irqrestore(&dev
->rxq
.lock
, lockflags
);
3529 dev_kfree_skb_any(skb
);
3535 static void rx_complete(struct urb
*urb
)
3537 struct sk_buff
*skb
= (struct sk_buff
*)urb
->context
;
3538 struct skb_data
*entry
= (struct skb_data
*)skb
->cb
;
3539 struct lan78xx_net
*dev
= entry
->dev
;
3540 int urb_status
= urb
->status
;
3541 enum skb_state state
;
3543 skb_put(skb
, urb
->actual_length
);
3547 switch (urb_status
) {
3549 if (skb
->len
< dev
->net
->hard_header_len
) {
3551 dev
->net
->stats
.rx_errors
++;
3552 dev
->net
->stats
.rx_length_errors
++;
3553 netif_dbg(dev
, rx_err
, dev
->net
,
3554 "rx length %d\n", skb
->len
);
3556 usb_mark_last_busy(dev
->udev
);
3559 dev
->net
->stats
.rx_errors
++;
3560 lan78xx_defer_kevent(dev
, EVENT_RX_HALT
);
3562 case -ECONNRESET
: /* async unlink */
3563 case -ESHUTDOWN
: /* hardware gone */
3564 netif_dbg(dev
, ifdown
, dev
->net
,
3565 "rx shutdown, code %d\n", urb_status
);
3573 dev
->net
->stats
.rx_errors
++;
3579 /* data overrun ... flush fifo? */
3581 dev
->net
->stats
.rx_over_errors
++;
3586 dev
->net
->stats
.rx_errors
++;
3587 netif_dbg(dev
, rx_err
, dev
->net
, "rx status %d\n", urb_status
);
3591 state
= defer_bh(dev
, skb
, &dev
->rxq
, state
);
3594 if (netif_running(dev
->net
) &&
3595 !test_bit(EVENT_RX_HALT
, &dev
->flags
) &&
3596 state
!= unlink_start
) {
3597 rx_submit(dev
, urb
, GFP_ATOMIC
);
3602 netif_dbg(dev
, rx_err
, dev
->net
, "no read resubmitted\n");
3605 static void lan78xx_tx_bh(struct lan78xx_net
*dev
)
3608 struct urb
*urb
= NULL
;
3609 struct skb_data
*entry
;
3610 unsigned long flags
;
3611 struct sk_buff_head
*tqp
= &dev
->txq_pend
;
3612 struct sk_buff
*skb
, *skb2
;
3615 int skb_totallen
, pkt_cnt
;
3621 spin_lock_irqsave(&tqp
->lock
, flags
);
3622 skb_queue_walk(tqp
, skb
) {
3623 if (skb_is_gso(skb
)) {
3624 if (!skb_queue_is_first(tqp
, skb
)) {
3625 /* handle previous packets first */
3629 length
= skb
->len
- TX_OVERHEAD
;
3630 __skb_unlink(skb
, tqp
);
3631 spin_unlock_irqrestore(&tqp
->lock
, flags
);
3635 if ((skb_totallen
+ skb
->len
) > MAX_SINGLE_PACKET_SIZE
)
3637 skb_totallen
= skb
->len
+ roundup(skb_totallen
, sizeof(u32
));
3640 spin_unlock_irqrestore(&tqp
->lock
, flags
);
3642 /* copy to a single skb */
3643 skb
= alloc_skb(skb_totallen
, GFP_ATOMIC
);
3647 skb_put(skb
, skb_totallen
);
3649 for (count
= pos
= 0; count
< pkt_cnt
; count
++) {
3650 skb2
= skb_dequeue(tqp
);
3652 length
+= (skb2
->len
- TX_OVERHEAD
);
3653 memcpy(skb
->data
+ pos
, skb2
->data
, skb2
->len
);
3654 pos
+= roundup(skb2
->len
, sizeof(u32
));
3655 dev_kfree_skb(skb2
);
3660 urb
= usb_alloc_urb(0, GFP_ATOMIC
);
3664 entry
= (struct skb_data
*)skb
->cb
;
3667 entry
->length
= length
;
3668 entry
->num_of_packet
= count
;
3670 spin_lock_irqsave(&dev
->txq
.lock
, flags
);
3671 ret
= usb_autopm_get_interface_async(dev
->intf
);
3673 spin_unlock_irqrestore(&dev
->txq
.lock
, flags
);
3677 usb_fill_bulk_urb(urb
, dev
->udev
, dev
->pipe_out
,
3678 skb
->data
, skb
->len
, tx_complete
, skb
);
3680 if (length
% dev
->maxpacket
== 0) {
3681 /* send USB_ZERO_PACKET */
3682 urb
->transfer_flags
|= URB_ZERO_PACKET
;
3686 /* if this triggers the device is still a sleep */
3687 if (test_bit(EVENT_DEV_ASLEEP
, &dev
->flags
)) {
3688 /* transmission will be done in resume */
3689 usb_anchor_urb(urb
, &dev
->deferred
);
3690 /* no use to process more packets */
3691 netif_stop_queue(dev
->net
);
3693 spin_unlock_irqrestore(&dev
->txq
.lock
, flags
);
3694 netdev_dbg(dev
->net
, "Delaying transmission for resumption\n");
3699 ret
= usb_submit_urb(urb
, GFP_ATOMIC
);
3702 netif_trans_update(dev
->net
);
3703 lan78xx_queue_skb(&dev
->txq
, skb
, tx_start
);
3704 if (skb_queue_len(&dev
->txq
) >= dev
->tx_qlen
)
3705 netif_stop_queue(dev
->net
);
3708 netif_stop_queue(dev
->net
);
3709 lan78xx_defer_kevent(dev
, EVENT_TX_HALT
);
3710 usb_autopm_put_interface_async(dev
->intf
);
3714 netif_dbg(dev
, tx_err
, dev
->net
,
3715 "tx: submit urb err %d (disconnected?)", ret
);
3716 netif_device_detach(dev
->net
);
3719 usb_autopm_put_interface_async(dev
->intf
);
3720 netif_dbg(dev
, tx_err
, dev
->net
,
3721 "tx: submit urb err %d\n", ret
);
3725 spin_unlock_irqrestore(&dev
->txq
.lock
, flags
);
3728 netif_dbg(dev
, tx_err
, dev
->net
, "drop, code %d\n", ret
);
3730 dev
->net
->stats
.tx_dropped
++;
3732 dev_kfree_skb_any(skb
);
3735 netif_dbg(dev
, tx_queued
, dev
->net
,
3736 "> tx, len %d, type 0x%x\n", length
, skb
->protocol
);
3740 static void lan78xx_rx_bh(struct lan78xx_net
*dev
)
3745 if (skb_queue_len(&dev
->rxq
) < dev
->rx_qlen
) {
3746 for (i
= 0; i
< 10; i
++) {
3747 if (skb_queue_len(&dev
->rxq
) >= dev
->rx_qlen
)
3749 urb
= usb_alloc_urb(0, GFP_ATOMIC
);
3751 if (rx_submit(dev
, urb
, GFP_ATOMIC
) == -ENOLINK
)
3755 if (skb_queue_len(&dev
->rxq
) < dev
->rx_qlen
)
3756 tasklet_schedule(&dev
->bh
);
3758 if (skb_queue_len(&dev
->txq
) < dev
->tx_qlen
)
3759 netif_wake_queue(dev
->net
);
3762 static void lan78xx_bh(struct tasklet_struct
*t
)
3764 struct lan78xx_net
*dev
= from_tasklet(dev
, t
, bh
);
3765 struct sk_buff
*skb
;
3766 struct skb_data
*entry
;
3768 while ((skb
= skb_dequeue(&dev
->done
))) {
3769 entry
= (struct skb_data
*)(skb
->cb
);
3770 switch (entry
->state
) {
3772 entry
->state
= rx_cleanup
;
3773 rx_process(dev
, skb
);
3776 usb_free_urb(entry
->urb
);
3780 usb_free_urb(entry
->urb
);
3784 netdev_dbg(dev
->net
, "skb state %d\n", entry
->state
);
3789 if (netif_device_present(dev
->net
) && netif_running(dev
->net
)) {
3790 /* reset update timer delta */
3791 if (timer_pending(&dev
->stat_monitor
) && (dev
->delta
!= 1)) {
3793 mod_timer(&dev
->stat_monitor
,
3794 jiffies
+ STAT_UPDATE_TIMER
);
3797 if (!skb_queue_empty(&dev
->txq_pend
))
3800 if (!test_bit(EVENT_RX_HALT
, &dev
->flags
))
3805 static void lan78xx_delayedwork(struct work_struct
*work
)
3808 struct lan78xx_net
*dev
;
3810 dev
= container_of(work
, struct lan78xx_net
, wq
.work
);
3812 if (test_bit(EVENT_DEV_DISCONNECT
, &dev
->flags
))
3815 if (usb_autopm_get_interface(dev
->intf
) < 0)
3818 if (test_bit(EVENT_TX_HALT
, &dev
->flags
)) {
3819 unlink_urbs(dev
, &dev
->txq
);
3821 status
= usb_clear_halt(dev
->udev
, dev
->pipe_out
);
3824 status
!= -ESHUTDOWN
) {
3825 if (netif_msg_tx_err(dev
))
3826 netdev_err(dev
->net
,
3827 "can't clear tx halt, status %d\n",
3830 clear_bit(EVENT_TX_HALT
, &dev
->flags
);
3831 if (status
!= -ESHUTDOWN
)
3832 netif_wake_queue(dev
->net
);
3836 if (test_bit(EVENT_RX_HALT
, &dev
->flags
)) {
3837 unlink_urbs(dev
, &dev
->rxq
);
3838 status
= usb_clear_halt(dev
->udev
, dev
->pipe_in
);
3841 status
!= -ESHUTDOWN
) {
3842 if (netif_msg_rx_err(dev
))
3843 netdev_err(dev
->net
,
3844 "can't clear rx halt, status %d\n",
3847 clear_bit(EVENT_RX_HALT
, &dev
->flags
);
3848 tasklet_schedule(&dev
->bh
);
3852 if (test_bit(EVENT_LINK_RESET
, &dev
->flags
)) {
3855 clear_bit(EVENT_LINK_RESET
, &dev
->flags
);
3856 if (lan78xx_link_reset(dev
) < 0) {
3857 netdev_info(dev
->net
, "link reset failed (%d)\n",
3862 if (test_bit(EVENT_STAT_UPDATE
, &dev
->flags
)) {
3863 lan78xx_update_stats(dev
);
3865 clear_bit(EVENT_STAT_UPDATE
, &dev
->flags
);
3867 mod_timer(&dev
->stat_monitor
,
3868 jiffies
+ (STAT_UPDATE_TIMER
* dev
->delta
));
3870 dev
->delta
= min((dev
->delta
* 2), 50);
3873 usb_autopm_put_interface(dev
->intf
);
3876 static void intr_complete(struct urb
*urb
)
3878 struct lan78xx_net
*dev
= urb
->context
;
3879 int status
= urb
->status
;
3884 lan78xx_status(dev
, urb
);
3887 /* software-driven interface shutdown */
3888 case -ENOENT
: /* urb killed */
3889 case -ENODEV
: /* hardware gone */
3890 case -ESHUTDOWN
: /* hardware gone */
3891 netif_dbg(dev
, ifdown
, dev
->net
,
3892 "intr shutdown, code %d\n", status
);
3895 /* NOTE: not throttling like RX/TX, since this endpoint
3896 * already polls infrequently
3899 netdev_dbg(dev
->net
, "intr status %d\n", status
);
3903 if (!netif_device_present(dev
->net
) ||
3904 !netif_running(dev
->net
)) {
3905 netdev_warn(dev
->net
, "not submitting new status URB");
3909 memset(urb
->transfer_buffer
, 0, urb
->transfer_buffer_length
);
3910 status
= usb_submit_urb(urb
, GFP_ATOMIC
);
3917 netif_dbg(dev
, timer
, dev
->net
,
3918 "intr resubmit %d (disconnect?)", status
);
3919 netif_device_detach(dev
->net
);
3922 netif_err(dev
, timer
, dev
->net
,
3923 "intr resubmit --> %d\n", status
);
3928 static void lan78xx_disconnect(struct usb_interface
*intf
)
3930 struct lan78xx_net
*dev
;
3931 struct usb_device
*udev
;
3932 struct net_device
*net
;
3933 struct phy_device
*phydev
;
3935 dev
= usb_get_intfdata(intf
);
3936 usb_set_intfdata(intf
, NULL
);
3940 set_bit(EVENT_DEV_DISCONNECT
, &dev
->flags
);
3942 udev
= interface_to_usbdev(intf
);
3945 unregister_netdev(net
);
3947 cancel_delayed_work_sync(&dev
->wq
);
3949 phydev
= net
->phydev
;
3951 phy_unregister_fixup_for_uid(PHY_KSZ9031RNX
, 0xfffffff0);
3952 phy_unregister_fixup_for_uid(PHY_LAN8835
, 0xfffffff0);
3954 phy_disconnect(net
->phydev
);
3956 if (phy_is_pseudo_fixed_link(phydev
))
3957 fixed_phy_unregister(phydev
);
3959 usb_scuttle_anchored_urbs(&dev
->deferred
);
3961 if (timer_pending(&dev
->stat_monitor
))
3962 del_timer_sync(&dev
->stat_monitor
);
3964 lan78xx_unbind(dev
, intf
);
3966 usb_kill_urb(dev
->urb_intr
);
3967 usb_free_urb(dev
->urb_intr
);
3973 static void lan78xx_tx_timeout(struct net_device
*net
, unsigned int txqueue
)
3975 struct lan78xx_net
*dev
= netdev_priv(net
);
3977 unlink_urbs(dev
, &dev
->txq
);
3978 tasklet_schedule(&dev
->bh
);
3981 static netdev_features_t
lan78xx_features_check(struct sk_buff
*skb
,
3982 struct net_device
*netdev
,
3983 netdev_features_t features
)
3985 if (skb
->len
+ TX_OVERHEAD
> MAX_SINGLE_PACKET_SIZE
)
3986 features
&= ~NETIF_F_GSO_MASK
;
3988 features
= vlan_features_check(skb
, features
);
3989 features
= vxlan_features_check(skb
, features
);
3994 static const struct net_device_ops lan78xx_netdev_ops
= {
3995 .ndo_open
= lan78xx_open
,
3996 .ndo_stop
= lan78xx_stop
,
3997 .ndo_start_xmit
= lan78xx_start_xmit
,
3998 .ndo_tx_timeout
= lan78xx_tx_timeout
,
3999 .ndo_change_mtu
= lan78xx_change_mtu
,
4000 .ndo_set_mac_address
= lan78xx_set_mac_addr
,
4001 .ndo_validate_addr
= eth_validate_addr
,
4002 .ndo_eth_ioctl
= phy_do_ioctl_running
,
4003 .ndo_set_rx_mode
= lan78xx_set_multicast
,
4004 .ndo_set_features
= lan78xx_set_features
,
4005 .ndo_vlan_rx_add_vid
= lan78xx_vlan_rx_add_vid
,
4006 .ndo_vlan_rx_kill_vid
= lan78xx_vlan_rx_kill_vid
,
4007 .ndo_features_check
= lan78xx_features_check
,
4010 static void lan78xx_stat_monitor(struct timer_list
*t
)
4012 struct lan78xx_net
*dev
= from_timer(dev
, t
, stat_monitor
);
4014 lan78xx_defer_kevent(dev
, EVENT_STAT_UPDATE
);
4017 static int lan78xx_probe(struct usb_interface
*intf
,
4018 const struct usb_device_id
*id
)
4020 struct usb_host_endpoint
*ep_blkin
, *ep_blkout
, *ep_intr
;
4021 struct lan78xx_net
*dev
;
4022 struct net_device
*netdev
;
4023 struct usb_device
*udev
;
4026 unsigned int period
;
4029 udev
= interface_to_usbdev(intf
);
4030 udev
= usb_get_dev(udev
);
4032 netdev
= alloc_etherdev(sizeof(struct lan78xx_net
));
4034 dev_err(&intf
->dev
, "Error: OOM\n");
4039 /* netdev_printk() needs this */
4040 SET_NETDEV_DEV(netdev
, &intf
->dev
);
4042 dev
= netdev_priv(netdev
);
4046 dev
->msg_enable
= netif_msg_init(msg_level
, NETIF_MSG_DRV
4047 | NETIF_MSG_PROBE
| NETIF_MSG_LINK
);
4049 skb_queue_head_init(&dev
->rxq
);
4050 skb_queue_head_init(&dev
->txq
);
4051 skb_queue_head_init(&dev
->done
);
4052 skb_queue_head_init(&dev
->txq_pend
);
4053 mutex_init(&dev
->phy_mutex
);
4054 mutex_init(&dev
->dev_mutex
);
4056 tasklet_setup(&dev
->bh
, lan78xx_bh
);
4057 INIT_DELAYED_WORK(&dev
->wq
, lan78xx_delayedwork
);
4058 init_usb_anchor(&dev
->deferred
);
4060 netdev
->netdev_ops
= &lan78xx_netdev_ops
;
4061 netdev
->watchdog_timeo
= TX_TIMEOUT_JIFFIES
;
4062 netdev
->ethtool_ops
= &lan78xx_ethtool_ops
;
4065 timer_setup(&dev
->stat_monitor
, lan78xx_stat_monitor
, 0);
4067 mutex_init(&dev
->stats
.access_lock
);
4069 if (intf
->cur_altsetting
->desc
.bNumEndpoints
< 3) {
4074 dev
->pipe_in
= usb_rcvbulkpipe(udev
, BULK_IN_PIPE
);
4075 ep_blkin
= usb_pipe_endpoint(udev
, dev
->pipe_in
);
4076 if (!ep_blkin
|| !usb_endpoint_is_bulk_in(&ep_blkin
->desc
)) {
4081 dev
->pipe_out
= usb_sndbulkpipe(udev
, BULK_OUT_PIPE
);
4082 ep_blkout
= usb_pipe_endpoint(udev
, dev
->pipe_out
);
4083 if (!ep_blkout
|| !usb_endpoint_is_bulk_out(&ep_blkout
->desc
)) {
4088 ep_intr
= &intf
->cur_altsetting
->endpoint
[2];
4089 if (!usb_endpoint_is_int_in(&ep_intr
->desc
)) {
4094 dev
->pipe_intr
= usb_rcvintpipe(dev
->udev
,
4095 usb_endpoint_num(&ep_intr
->desc
));
4097 ret
= lan78xx_bind(dev
, intf
);
4101 if (netdev
->mtu
> (dev
->hard_mtu
- netdev
->hard_header_len
))
4102 netdev
->mtu
= dev
->hard_mtu
- netdev
->hard_header_len
;
4104 /* MTU range: 68 - 9000 */
4105 netdev
->max_mtu
= MAX_SINGLE_PACKET_SIZE
;
4106 netif_set_gso_max_size(netdev
, MAX_SINGLE_PACKET_SIZE
- MAX_HEADER
);
4108 period
= ep_intr
->desc
.bInterval
;
4109 maxp
= usb_maxpacket(dev
->udev
, dev
->pipe_intr
, 0);
4110 buf
= kmalloc(maxp
, GFP_KERNEL
);
4112 dev
->urb_intr
= usb_alloc_urb(0, GFP_KERNEL
);
4113 if (!dev
->urb_intr
) {
4118 usb_fill_int_urb(dev
->urb_intr
, dev
->udev
,
4119 dev
->pipe_intr
, buf
, maxp
,
4120 intr_complete
, dev
, period
);
4121 dev
->urb_intr
->transfer_flags
|= URB_FREE_BUFFER
;
4125 dev
->maxpacket
= usb_maxpacket(dev
->udev
, dev
->pipe_out
, 1);
4127 /* Reject broken descriptors. */
4128 if (dev
->maxpacket
== 0) {
4133 /* driver requires remote-wakeup capability during autosuspend. */
4134 intf
->needs_remote_wakeup
= 1;
4136 ret
= lan78xx_phy_init(dev
);
4140 ret
= register_netdev(netdev
);
4142 netif_err(dev
, probe
, netdev
, "couldn't register the device\n");
4146 usb_set_intfdata(intf
, dev
);
4148 ret
= device_set_wakeup_enable(&udev
->dev
, true);
4150 /* Default delay of 2sec has more overhead than advantage.
4151 * Set to 10sec as default.
4153 pm_runtime_set_autosuspend_delay(&udev
->dev
,
4154 DEFAULT_AUTOSUSPEND_DELAY
);
4159 phy_disconnect(netdev
->phydev
);
4161 usb_free_urb(dev
->urb_intr
);
4163 lan78xx_unbind(dev
, intf
);
4165 free_netdev(netdev
);
4172 static u16
lan78xx_wakeframe_crc16(const u8
*buf
, int len
)
4174 const u16 crc16poly
= 0x8005;
4180 for (i
= 0; i
< len
; i
++) {
4182 for (bit
= 0; bit
< 8; bit
++) {
4186 if (msb
^ (u16
)(data
& 1)) {
4188 crc
|= (u16
)0x0001U
;
4197 static int lan78xx_set_auto_suspend(struct lan78xx_net
*dev
)
4202 ret
= lan78xx_stop_tx_path(dev
);
4206 ret
= lan78xx_stop_rx_path(dev
);
4210 /* auto suspend (selective suspend) */
4212 ret
= lan78xx_write_reg(dev
, WUCSR
, 0);
4215 ret
= lan78xx_write_reg(dev
, WUCSR2
, 0);
4218 ret
= lan78xx_write_reg(dev
, WK_SRC
, 0xFFF1FF1FUL
);
4222 /* set goodframe wakeup */
4224 ret
= lan78xx_read_reg(dev
, WUCSR
, &buf
);
4228 buf
|= WUCSR_RFE_WAKE_EN_
;
4229 buf
|= WUCSR_STORE_WAKE_
;
4231 ret
= lan78xx_write_reg(dev
, WUCSR
, buf
);
4235 ret
= lan78xx_read_reg(dev
, PMT_CTL
, &buf
);
4239 buf
&= ~PMT_CTL_RES_CLR_WKP_EN_
;
4240 buf
|= PMT_CTL_RES_CLR_WKP_STS_
;
4241 buf
|= PMT_CTL_PHY_WAKE_EN_
;
4242 buf
|= PMT_CTL_WOL_EN_
;
4243 buf
&= ~PMT_CTL_SUS_MODE_MASK_
;
4244 buf
|= PMT_CTL_SUS_MODE_3_
;
4246 ret
= lan78xx_write_reg(dev
, PMT_CTL
, buf
);
4250 ret
= lan78xx_read_reg(dev
, PMT_CTL
, &buf
);
4254 buf
|= PMT_CTL_WUPS_MASK_
;
4256 ret
= lan78xx_write_reg(dev
, PMT_CTL
, buf
);
4260 ret
= lan78xx_start_rx_path(dev
);
4265 static int lan78xx_set_suspend(struct lan78xx_net
*dev
, u32 wol
)
4267 const u8 ipv4_multicast
[3] = { 0x01, 0x00, 0x5E };
4268 const u8 ipv6_multicast
[3] = { 0x33, 0x33 };
4269 const u8 arp_type
[2] = { 0x08, 0x06 };
4277 ret
= lan78xx_stop_tx_path(dev
);
4280 ret
= lan78xx_stop_rx_path(dev
);
4284 ret
= lan78xx_write_reg(dev
, WUCSR
, 0);
4287 ret
= lan78xx_write_reg(dev
, WUCSR2
, 0);
4290 ret
= lan78xx_write_reg(dev
, WK_SRC
, 0xFFF1FF1FUL
);
4298 ret
= lan78xx_read_reg(dev
, PMT_CTL
, &temp_pmt_ctl
);
4302 temp_pmt_ctl
&= ~PMT_CTL_RES_CLR_WKP_EN_
;
4303 temp_pmt_ctl
|= PMT_CTL_RES_CLR_WKP_STS_
;
4305 for (mask_index
= 0; mask_index
< NUM_OF_WUF_CFG
; mask_index
++) {
4306 ret
= lan78xx_write_reg(dev
, WUF_CFG(mask_index
), 0);
4312 if (wol
& WAKE_PHY
) {
4313 temp_pmt_ctl
|= PMT_CTL_PHY_WAKE_EN_
;
4315 temp_pmt_ctl
|= PMT_CTL_WOL_EN_
;
4316 temp_pmt_ctl
&= ~PMT_CTL_SUS_MODE_MASK_
;
4317 temp_pmt_ctl
|= PMT_CTL_SUS_MODE_0_
;
4319 if (wol
& WAKE_MAGIC
) {
4320 temp_wucsr
|= WUCSR_MPEN_
;
4322 temp_pmt_ctl
|= PMT_CTL_WOL_EN_
;
4323 temp_pmt_ctl
&= ~PMT_CTL_SUS_MODE_MASK_
;
4324 temp_pmt_ctl
|= PMT_CTL_SUS_MODE_3_
;
4326 if (wol
& WAKE_BCAST
) {
4327 temp_wucsr
|= WUCSR_BCST_EN_
;
4329 temp_pmt_ctl
|= PMT_CTL_WOL_EN_
;
4330 temp_pmt_ctl
&= ~PMT_CTL_SUS_MODE_MASK_
;
4331 temp_pmt_ctl
|= PMT_CTL_SUS_MODE_0_
;
4333 if (wol
& WAKE_MCAST
) {
4334 temp_wucsr
|= WUCSR_WAKE_EN_
;
4336 /* set WUF_CFG & WUF_MASK for IPv4 Multicast */
4337 crc
= lan78xx_wakeframe_crc16(ipv4_multicast
, 3);
4338 ret
= lan78xx_write_reg(dev
, WUF_CFG(mask_index
),
4340 WUF_CFGX_TYPE_MCAST_
|
4341 (0 << WUF_CFGX_OFFSET_SHIFT_
) |
4342 (crc
& WUF_CFGX_CRC16_MASK_
));
4346 ret
= lan78xx_write_reg(dev
, WUF_MASK0(mask_index
), 7);
4349 ret
= lan78xx_write_reg(dev
, WUF_MASK1(mask_index
), 0);
4352 ret
= lan78xx_write_reg(dev
, WUF_MASK2(mask_index
), 0);
4355 ret
= lan78xx_write_reg(dev
, WUF_MASK3(mask_index
), 0);
4361 /* for IPv6 Multicast */
4362 crc
= lan78xx_wakeframe_crc16(ipv6_multicast
, 2);
4363 ret
= lan78xx_write_reg(dev
, WUF_CFG(mask_index
),
4365 WUF_CFGX_TYPE_MCAST_
|
4366 (0 << WUF_CFGX_OFFSET_SHIFT_
) |
4367 (crc
& WUF_CFGX_CRC16_MASK_
));
4371 ret
= lan78xx_write_reg(dev
, WUF_MASK0(mask_index
), 3);
4374 ret
= lan78xx_write_reg(dev
, WUF_MASK1(mask_index
), 0);
4377 ret
= lan78xx_write_reg(dev
, WUF_MASK2(mask_index
), 0);
4380 ret
= lan78xx_write_reg(dev
, WUF_MASK3(mask_index
), 0);
4386 temp_pmt_ctl
|= PMT_CTL_WOL_EN_
;
4387 temp_pmt_ctl
&= ~PMT_CTL_SUS_MODE_MASK_
;
4388 temp_pmt_ctl
|= PMT_CTL_SUS_MODE_0_
;
4390 if (wol
& WAKE_UCAST
) {
4391 temp_wucsr
|= WUCSR_PFDA_EN_
;
4393 temp_pmt_ctl
|= PMT_CTL_WOL_EN_
;
4394 temp_pmt_ctl
&= ~PMT_CTL_SUS_MODE_MASK_
;
4395 temp_pmt_ctl
|= PMT_CTL_SUS_MODE_0_
;
4397 if (wol
& WAKE_ARP
) {
4398 temp_wucsr
|= WUCSR_WAKE_EN_
;
4400 /* set WUF_CFG & WUF_MASK
4401 * for packettype (offset 12,13) = ARP (0x0806)
4403 crc
= lan78xx_wakeframe_crc16(arp_type
, 2);
4404 ret
= lan78xx_write_reg(dev
, WUF_CFG(mask_index
),
4406 WUF_CFGX_TYPE_ALL_
|
4407 (0 << WUF_CFGX_OFFSET_SHIFT_
) |
4408 (crc
& WUF_CFGX_CRC16_MASK_
));
4412 ret
= lan78xx_write_reg(dev
, WUF_MASK0(mask_index
), 0x3000);
4415 ret
= lan78xx_write_reg(dev
, WUF_MASK1(mask_index
), 0);
4418 ret
= lan78xx_write_reg(dev
, WUF_MASK2(mask_index
), 0);
4421 ret
= lan78xx_write_reg(dev
, WUF_MASK3(mask_index
), 0);
4427 temp_pmt_ctl
|= PMT_CTL_WOL_EN_
;
4428 temp_pmt_ctl
&= ~PMT_CTL_SUS_MODE_MASK_
;
4429 temp_pmt_ctl
|= PMT_CTL_SUS_MODE_0_
;
4432 ret
= lan78xx_write_reg(dev
, WUCSR
, temp_wucsr
);
4436 /* when multiple WOL bits are set */
4437 if (hweight_long((unsigned long)wol
) > 1) {
4438 temp_pmt_ctl
|= PMT_CTL_WOL_EN_
;
4439 temp_pmt_ctl
&= ~PMT_CTL_SUS_MODE_MASK_
;
4440 temp_pmt_ctl
|= PMT_CTL_SUS_MODE_0_
;
4442 ret
= lan78xx_write_reg(dev
, PMT_CTL
, temp_pmt_ctl
);
4447 ret
= lan78xx_read_reg(dev
, PMT_CTL
, &buf
);
4451 buf
|= PMT_CTL_WUPS_MASK_
;
4453 ret
= lan78xx_write_reg(dev
, PMT_CTL
, buf
);
4457 ret
= lan78xx_start_rx_path(dev
);
4462 static int lan78xx_suspend(struct usb_interface
*intf
, pm_message_t message
)
4464 struct lan78xx_net
*dev
= usb_get_intfdata(intf
);
4468 mutex_lock(&dev
->dev_mutex
);
4470 netif_dbg(dev
, ifdown
, dev
->net
,
4471 "suspending: pm event %#x", message
.event
);
4473 dev_open
= test_bit(EVENT_DEV_OPEN
, &dev
->flags
);
4476 spin_lock_irq(&dev
->txq
.lock
);
4477 /* don't autosuspend while transmitting */
4478 if ((skb_queue_len(&dev
->txq
) ||
4479 skb_queue_len(&dev
->txq_pend
)) &&
4480 PMSG_IS_AUTO(message
)) {
4481 spin_unlock_irq(&dev
->txq
.lock
);
4485 set_bit(EVENT_DEV_ASLEEP
, &dev
->flags
);
4486 spin_unlock_irq(&dev
->txq
.lock
);
4490 ret
= lan78xx_stop_rx_path(dev
);
4494 ret
= lan78xx_flush_rx_fifo(dev
);
4499 ret
= lan78xx_stop_tx_path(dev
);
4503 /* empty out the Rx and Tx queues */
4504 netif_device_detach(dev
->net
);
4505 lan78xx_terminate_urbs(dev
);
4506 usb_kill_urb(dev
->urb_intr
);
4509 netif_device_attach(dev
->net
);
4511 del_timer(&dev
->stat_monitor
);
4513 if (PMSG_IS_AUTO(message
)) {
4514 ret
= lan78xx_set_auto_suspend(dev
);
4518 struct lan78xx_priv
*pdata
;
4520 pdata
= (struct lan78xx_priv
*)(dev
->data
[0]);
4521 netif_carrier_off(dev
->net
);
4522 ret
= lan78xx_set_suspend(dev
, pdata
->wol
);
4527 /* Interface is down; don't allow WOL and PHY
4528 * events to wake up the host
4532 set_bit(EVENT_DEV_ASLEEP
, &dev
->flags
);
4534 ret
= lan78xx_write_reg(dev
, WUCSR
, 0);
4537 ret
= lan78xx_write_reg(dev
, WUCSR2
, 0);
4541 ret
= lan78xx_read_reg(dev
, PMT_CTL
, &buf
);
4545 buf
&= ~PMT_CTL_RES_CLR_WKP_EN_
;
4546 buf
|= PMT_CTL_RES_CLR_WKP_STS_
;
4547 buf
&= ~PMT_CTL_SUS_MODE_MASK_
;
4548 buf
|= PMT_CTL_SUS_MODE_3_
;
4550 ret
= lan78xx_write_reg(dev
, PMT_CTL
, buf
);
4554 ret
= lan78xx_read_reg(dev
, PMT_CTL
, &buf
);
4558 buf
|= PMT_CTL_WUPS_MASK_
;
4560 ret
= lan78xx_write_reg(dev
, PMT_CTL
, buf
);
4567 mutex_unlock(&dev
->dev_mutex
);
4572 static bool lan78xx_submit_deferred_urbs(struct lan78xx_net
*dev
)
4574 bool pipe_halted
= false;
4577 while ((urb
= usb_get_from_anchor(&dev
->deferred
))) {
4578 struct sk_buff
*skb
= urb
->context
;
4581 if (!netif_device_present(dev
->net
) ||
4582 !netif_carrier_ok(dev
->net
) ||
4589 ret
= usb_submit_urb(urb
, GFP_ATOMIC
);
4592 netif_trans_update(dev
->net
);
4593 lan78xx_queue_skb(&dev
->txq
, skb
, tx_start
);
4598 if (ret
== -EPIPE
) {
4599 netif_stop_queue(dev
->net
);
4601 } else if (ret
== -ENODEV
) {
4602 netif_device_detach(dev
->net
);
4610 static int lan78xx_resume(struct usb_interface
*intf
)
4612 struct lan78xx_net
*dev
= usb_get_intfdata(intf
);
4616 mutex_lock(&dev
->dev_mutex
);
4618 netif_dbg(dev
, ifup
, dev
->net
, "resuming device");
4620 dev_open
= test_bit(EVENT_DEV_OPEN
, &dev
->flags
);
4623 bool pipe_halted
= false;
4625 ret
= lan78xx_flush_tx_fifo(dev
);
4629 if (dev
->urb_intr
) {
4630 int ret
= usb_submit_urb(dev
->urb_intr
, GFP_KERNEL
);
4634 netif_device_detach(dev
->net
);
4636 netdev_warn(dev
->net
, "Failed to submit intr URB");
4640 spin_lock_irq(&dev
->txq
.lock
);
4642 if (netif_device_present(dev
->net
)) {
4643 pipe_halted
= lan78xx_submit_deferred_urbs(dev
);
4646 lan78xx_defer_kevent(dev
, EVENT_TX_HALT
);
4649 clear_bit(EVENT_DEV_ASLEEP
, &dev
->flags
);
4651 spin_unlock_irq(&dev
->txq
.lock
);
4654 netif_device_present(dev
->net
) &&
4655 (skb_queue_len(&dev
->txq
) < dev
->tx_qlen
))
4656 netif_start_queue(dev
->net
);
4658 ret
= lan78xx_start_tx_path(dev
);
4662 tasklet_schedule(&dev
->bh
);
4664 if (!timer_pending(&dev
->stat_monitor
)) {
4666 mod_timer(&dev
->stat_monitor
,
4667 jiffies
+ STAT_UPDATE_TIMER
);
4671 clear_bit(EVENT_DEV_ASLEEP
, &dev
->flags
);
4674 ret
= lan78xx_write_reg(dev
, WUCSR2
, 0);
4677 ret
= lan78xx_write_reg(dev
, WUCSR
, 0);
4680 ret
= lan78xx_write_reg(dev
, WK_SRC
, 0xFFF1FF1FUL
);
4684 ret
= lan78xx_write_reg(dev
, WUCSR2
, WUCSR2_NS_RCD_
|
4686 WUCSR2_IPV6_TCPSYN_RCD_
|
4687 WUCSR2_IPV4_TCPSYN_RCD_
);
4691 ret
= lan78xx_write_reg(dev
, WUCSR
, WUCSR_EEE_TX_WAKE_
|
4692 WUCSR_EEE_RX_WAKE_
|
4694 WUCSR_RFE_WAKE_FR_
|
4703 mutex_unlock(&dev
->dev_mutex
);
4708 static int lan78xx_reset_resume(struct usb_interface
*intf
)
4710 struct lan78xx_net
*dev
= usb_get_intfdata(intf
);
4713 netif_dbg(dev
, ifup
, dev
->net
, "(reset) resuming device");
4715 ret
= lan78xx_reset(dev
);
4719 phy_start(dev
->net
->phydev
);
4721 ret
= lan78xx_resume(intf
);
4726 static const struct usb_device_id products
[] = {
4728 /* LAN7800 USB Gigabit Ethernet Device */
4729 USB_DEVICE(LAN78XX_USB_VENDOR_ID
, LAN7800_USB_PRODUCT_ID
),
4732 /* LAN7850 USB Gigabit Ethernet Device */
4733 USB_DEVICE(LAN78XX_USB_VENDOR_ID
, LAN7850_USB_PRODUCT_ID
),
4736 /* LAN7801 USB Gigabit Ethernet Device */
4737 USB_DEVICE(LAN78XX_USB_VENDOR_ID
, LAN7801_USB_PRODUCT_ID
),
4740 /* ATM2-AF USB Gigabit Ethernet Device */
4741 USB_DEVICE(AT29M2AF_USB_VENDOR_ID
, AT29M2AF_USB_PRODUCT_ID
),
4745 MODULE_DEVICE_TABLE(usb
, products
);
4747 static struct usb_driver lan78xx_driver
= {
4748 .name
= DRIVER_NAME
,
4749 .id_table
= products
,
4750 .probe
= lan78xx_probe
,
4751 .disconnect
= lan78xx_disconnect
,
4752 .suspend
= lan78xx_suspend
,
4753 .resume
= lan78xx_resume
,
4754 .reset_resume
= lan78xx_reset_resume
,
4755 .supports_autosuspend
= 1,
4756 .disable_hub_initiated_lpm
= 1,
4759 module_usb_driver(lan78xx_driver
);
4761 MODULE_AUTHOR(DRIVER_AUTHOR
);
4762 MODULE_DESCRIPTION(DRIVER_DESC
);
4763 MODULE_LICENSE("GPL");