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