2 * Copyright (C) 2015 Microchip Technology
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.
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.
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/>.
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>
30 #include <linux/ipv6.h>
31 #include <linux/mdio.h>
32 #include <net/ip6_checksum.h>
33 #include <linux/microchipphy.h>
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.1"
41 #define TX_TIMEOUT_JIFFIES (5 * HZ)
42 #define THROTTLE_JIFFIES (HZ / 8)
43 #define UNLINK_TIMEOUT_MS 3
45 #define RX_MAX_QUEUE_MEMORY (60 * 1518)
47 #define SS_USB_PKT_SIZE (1024)
48 #define HS_USB_PKT_SIZE (512)
49 #define FS_USB_PKT_SIZE (64)
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)
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)
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)
78 #define WAKE_ALL (WAKE_PHY | WAKE_UCAST | \
79 WAKE_MCAST | WAKE_BCAST | \
80 WAKE_ARP | WAKE_MAGIC)
82 /* USB related defines */
83 #define BULK_IN_PIPE 1
84 #define BULK_OUT_PIPE 2
86 /* default autosuspend delay (mSec)*/
87 #define DEFAULT_AUTOSUSPEND_DELAY (10 * 1000)
89 static const char lan78xx_gstrings[][ETH_GSTRING_LEN] = {
91 "RX Alignment Errors",
94 "RX Undersize Frame Errors",
95 "RX Oversize Frame Errors",
97 "RX Unicast Byte Count",
98 "RX Broadcast Byte Count",
99 "RX Multicast Byte Count",
101 "RX Broadcast Frames",
102 "RX Multicast Frames",
105 "RX 65 - 127 Byte Frames",
106 "RX 128 - 255 Byte Frames",
107 "RX 256 - 511 Bytes Frames",
108 "RX 512 - 1023 Byte Frames",
109 "RX 1024 - 1518 Byte Frames",
110 "RX Greater 1518 Byte Frames",
111 "EEE RX LPI Transitions",
114 "TX Excess Deferral Errors",
117 "TX Single Collisions",
118 "TX Multiple Collisions",
119 "TX Excessive Collision",
120 "TX Late Collisions",
121 "TX Unicast Byte Count",
122 "TX Broadcast Byte Count",
123 "TX Multicast Byte Count",
125 "TX Broadcast Frames",
126 "TX Multicast Frames",
129 "TX 65 - 127 Byte Frames",
130 "TX 128 - 255 Byte Frames",
131 "TX 256 - 511 Bytes Frames",
132 "TX 512 - 1023 Byte Frames",
133 "TX 1024 - 1518 Byte Frames",
134 "TX Greater 1518 Byte Frames",
135 "EEE TX LPI Transitions",
139 struct lan78xx_statstage {
141 u32 rx_alignment_errors;
142 u32 rx_fragment_errors;
143 u32 rx_jabber_errors;
144 u32 rx_undersize_frame_errors;
145 u32 rx_oversize_frame_errors;
146 u32 rx_dropped_frames;
147 u32 rx_unicast_byte_count;
148 u32 rx_broadcast_byte_count;
149 u32 rx_multicast_byte_count;
150 u32 rx_unicast_frames;
151 u32 rx_broadcast_frames;
152 u32 rx_multicast_frames;
154 u32 rx_64_byte_frames;
155 u32 rx_65_127_byte_frames;
156 u32 rx_128_255_byte_frames;
157 u32 rx_256_511_bytes_frames;
158 u32 rx_512_1023_byte_frames;
159 u32 rx_1024_1518_byte_frames;
160 u32 rx_greater_1518_byte_frames;
161 u32 eee_rx_lpi_transitions;
164 u32 tx_excess_deferral_errors;
165 u32 tx_carrier_errors;
166 u32 tx_bad_byte_count;
167 u32 tx_single_collisions;
168 u32 tx_multiple_collisions;
169 u32 tx_excessive_collision;
170 u32 tx_late_collisions;
171 u32 tx_unicast_byte_count;
172 u32 tx_broadcast_byte_count;
173 u32 tx_multicast_byte_count;
174 u32 tx_unicast_frames;
175 u32 tx_broadcast_frames;
176 u32 tx_multicast_frames;
178 u32 tx_64_byte_frames;
179 u32 tx_65_127_byte_frames;
180 u32 tx_128_255_byte_frames;
181 u32 tx_256_511_bytes_frames;
182 u32 tx_512_1023_byte_frames;
183 u32 tx_1024_1518_byte_frames;
184 u32 tx_greater_1518_byte_frames;
185 u32 eee_tx_lpi_transitions;
191 struct lan78xx_priv {
192 struct lan78xx_net *dev;
194 u32 mchash_table[DP_SEL_VHF_HASH_LEN]; /* multicat hash table */
195 u32 pfilter_table[NUM_OF_MAF][2]; /* perfect filter table */
196 u32 vlan_table[DP_SEL_VHF_VLAN_LEN];
197 struct mutex dataport_mutex; /* for dataport access */
198 spinlock_t rfe_ctl_lock; /* for rfe register access */
199 struct work_struct set_multicast;
200 struct work_struct set_vlan;
214 struct skb_data { /* skb->cb is one of these */
216 struct lan78xx_net *dev;
217 enum skb_state state;
222 struct usb_ctrlrequest req;
223 struct lan78xx_net *dev;
226 #define EVENT_TX_HALT 0
227 #define EVENT_RX_HALT 1
228 #define EVENT_RX_MEMORY 2
229 #define EVENT_STS_SPLIT 3
230 #define EVENT_LINK_RESET 4
231 #define EVENT_RX_PAUSED 5
232 #define EVENT_DEV_WAKING 6
233 #define EVENT_DEV_ASLEEP 7
234 #define EVENT_DEV_OPEN 8
237 struct net_device *net;
238 struct usb_device *udev;
239 struct usb_interface *intf;
244 struct sk_buff_head rxq;
245 struct sk_buff_head txq;
246 struct sk_buff_head done;
247 struct sk_buff_head rxq_pause;
248 struct sk_buff_head txq_pend;
250 struct tasklet_struct bh;
251 struct delayed_work wq;
253 struct usb_host_endpoint *ep_blkin;
254 struct usb_host_endpoint *ep_blkout;
255 struct usb_host_endpoint *ep_intr;
259 struct urb *urb_intr;
260 struct usb_anchor deferred;
262 struct mutex phy_mutex; /* for phy access */
263 unsigned pipe_in, pipe_out, pipe_intr;
265 u32 hard_mtu; /* count any extra framing */
266 size_t rx_urb_size; /* size for rx urbs */
270 wait_queue_head_t *wait;
271 unsigned char suspend_count;
274 struct timer_list delay;
276 unsigned long data[5];
282 struct mii_bus *mdiobus;
285 /* use ethtool to change the level for any given device */
286 static int msg_level = -1;
287 module_param(msg_level, int, 0);
288 MODULE_PARM_DESC(msg_level, "Override default message level");
290 static int lan78xx_read_reg(struct lan78xx_net *dev, u32 index, u32 *data)
292 u32 *buf = kmalloc(sizeof(u32), GFP_KERNEL);
298 ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0),
299 USB_VENDOR_REQUEST_READ_REGISTER,
300 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
301 0, index, buf, 4, USB_CTRL_GET_TIMEOUT);
302 if (likely(ret >= 0)) {
306 netdev_warn(dev->net,
307 "Failed to read register index 0x%08x. ret = %d",
316 static int lan78xx_write_reg(struct lan78xx_net *dev, u32 index, u32 data)
318 u32 *buf = kmalloc(sizeof(u32), GFP_KERNEL);
327 ret = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0),
328 USB_VENDOR_REQUEST_WRITE_REGISTER,
329 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
330 0, index, buf, 4, USB_CTRL_SET_TIMEOUT);
331 if (unlikely(ret < 0)) {
332 netdev_warn(dev->net,
333 "Failed to write register index 0x%08x. ret = %d",
342 static int lan78xx_read_stats(struct lan78xx_net *dev,
343 struct lan78xx_statstage *data)
347 struct lan78xx_statstage *stats;
351 stats = kmalloc(sizeof(*stats), GFP_KERNEL);
355 ret = usb_control_msg(dev->udev,
356 usb_rcvctrlpipe(dev->udev, 0),
357 USB_VENDOR_REQUEST_GET_STATS,
358 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
363 USB_CTRL_SET_TIMEOUT);
364 if (likely(ret >= 0)) {
367 for (i = 0; i < sizeof(*stats)/sizeof(u32); i++) {
368 le32_to_cpus(&src[i]);
372 netdev_warn(dev->net,
373 "Failed to read stat ret = 0x%x", ret);
381 /* Loop until the read is completed with timeout called with phy_mutex held */
382 static int lan78xx_phy_wait_not_busy(struct lan78xx_net *dev)
384 unsigned long start_time = jiffies;
389 ret = lan78xx_read_reg(dev, MII_ACC, &val);
390 if (unlikely(ret < 0))
393 if (!(val & MII_ACC_MII_BUSY_))
395 } while (!time_after(jiffies, start_time + HZ));
400 static inline u32 mii_access(int id, int index, int read)
404 ret = ((u32)id << MII_ACC_PHY_ADDR_SHIFT_) & MII_ACC_PHY_ADDR_MASK_;
405 ret |= ((u32)index << MII_ACC_MIIRINDA_SHIFT_) & MII_ACC_MIIRINDA_MASK_;
407 ret |= MII_ACC_MII_READ_;
409 ret |= MII_ACC_MII_WRITE_;
410 ret |= MII_ACC_MII_BUSY_;
415 static int lan78xx_wait_eeprom(struct lan78xx_net *dev)
417 unsigned long start_time = jiffies;
422 ret = lan78xx_read_reg(dev, E2P_CMD, &val);
423 if (unlikely(ret < 0))
426 if (!(val & E2P_CMD_EPC_BUSY_) ||
427 (val & E2P_CMD_EPC_TIMEOUT_))
429 usleep_range(40, 100);
430 } while (!time_after(jiffies, start_time + HZ));
432 if (val & (E2P_CMD_EPC_TIMEOUT_ | E2P_CMD_EPC_BUSY_)) {
433 netdev_warn(dev->net, "EEPROM read operation timeout");
440 static int lan78xx_eeprom_confirm_not_busy(struct lan78xx_net *dev)
442 unsigned long start_time = jiffies;
447 ret = lan78xx_read_reg(dev, E2P_CMD, &val);
448 if (unlikely(ret < 0))
451 if (!(val & E2P_CMD_EPC_BUSY_))
454 usleep_range(40, 100);
455 } while (!time_after(jiffies, start_time + HZ));
457 netdev_warn(dev->net, "EEPROM is busy");
461 static int lan78xx_read_raw_eeprom(struct lan78xx_net *dev, u32 offset,
462 u32 length, u8 *data)
467 ret = lan78xx_eeprom_confirm_not_busy(dev);
471 for (i = 0; i < length; i++) {
472 val = E2P_CMD_EPC_BUSY_ | E2P_CMD_EPC_CMD_READ_;
473 val |= (offset & E2P_CMD_EPC_ADDR_MASK_);
474 ret = lan78xx_write_reg(dev, E2P_CMD, val);
475 if (unlikely(ret < 0))
478 ret = lan78xx_wait_eeprom(dev);
482 ret = lan78xx_read_reg(dev, E2P_DATA, &val);
483 if (unlikely(ret < 0))
486 data[i] = val & 0xFF;
493 static int lan78xx_read_eeprom(struct lan78xx_net *dev, u32 offset,
494 u32 length, u8 *data)
499 ret = lan78xx_read_raw_eeprom(dev, 0, 1, &sig);
500 if ((ret == 0) && (sig == EEPROM_INDICATOR))
501 ret = lan78xx_read_raw_eeprom(dev, offset, length, data);
508 static int lan78xx_write_raw_eeprom(struct lan78xx_net *dev, u32 offset,
509 u32 length, u8 *data)
514 ret = lan78xx_eeprom_confirm_not_busy(dev);
518 /* Issue write/erase enable command */
519 val = E2P_CMD_EPC_BUSY_ | E2P_CMD_EPC_CMD_EWEN_;
520 ret = lan78xx_write_reg(dev, E2P_CMD, val);
521 if (unlikely(ret < 0))
524 ret = lan78xx_wait_eeprom(dev);
528 for (i = 0; i < length; i++) {
529 /* Fill data register */
531 ret = lan78xx_write_reg(dev, E2P_DATA, val);
535 /* Send "write" command */
536 val = E2P_CMD_EPC_BUSY_ | E2P_CMD_EPC_CMD_WRITE_;
537 val |= (offset & E2P_CMD_EPC_ADDR_MASK_);
538 ret = lan78xx_write_reg(dev, E2P_CMD, val);
542 ret = lan78xx_wait_eeprom(dev);
552 static int lan78xx_read_raw_otp(struct lan78xx_net *dev, u32 offset,
553 u32 length, u8 *data)
558 unsigned long timeout;
560 ret = lan78xx_read_reg(dev, OTP_PWR_DN, &buf);
562 if (buf & OTP_PWR_DN_PWRDN_N_) {
563 /* clear it and wait to be cleared */
564 ret = lan78xx_write_reg(dev, OTP_PWR_DN, 0);
566 timeout = jiffies + HZ;
569 ret = lan78xx_read_reg(dev, OTP_PWR_DN, &buf);
570 if (time_after(jiffies, timeout)) {
571 netdev_warn(dev->net,
572 "timeout on OTP_PWR_DN");
575 } while (buf & OTP_PWR_DN_PWRDN_N_);
578 for (i = 0; i < length; i++) {
579 ret = lan78xx_write_reg(dev, OTP_ADDR1,
580 ((offset + i) >> 8) & OTP_ADDR1_15_11);
581 ret = lan78xx_write_reg(dev, OTP_ADDR2,
582 ((offset + i) & OTP_ADDR2_10_3));
584 ret = lan78xx_write_reg(dev, OTP_FUNC_CMD, OTP_FUNC_CMD_READ_);
585 ret = lan78xx_write_reg(dev, OTP_CMD_GO, OTP_CMD_GO_GO_);
587 timeout = jiffies + HZ;
590 ret = lan78xx_read_reg(dev, OTP_STATUS, &buf);
591 if (time_after(jiffies, timeout)) {
592 netdev_warn(dev->net,
593 "timeout on OTP_STATUS");
596 } while (buf & OTP_STATUS_BUSY_);
598 ret = lan78xx_read_reg(dev, OTP_RD_DATA, &buf);
600 data[i] = (u8)(buf & 0xFF);
606 static int lan78xx_read_otp(struct lan78xx_net *dev, u32 offset,
607 u32 length, u8 *data)
612 ret = lan78xx_read_raw_otp(dev, 0, 1, &sig);
615 if (sig == OTP_INDICATOR_1)
617 else if (sig == OTP_INDICATOR_2)
621 ret = lan78xx_read_raw_otp(dev, offset, length, data);
627 static int lan78xx_dataport_wait_not_busy(struct lan78xx_net *dev)
631 for (i = 0; i < 100; i++) {
634 ret = lan78xx_read_reg(dev, DP_SEL, &dp_sel);
635 if (unlikely(ret < 0))
638 if (dp_sel & DP_SEL_DPRDY_)
641 usleep_range(40, 100);
644 netdev_warn(dev->net, "lan78xx_dataport_wait_not_busy timed out");
649 static int lan78xx_dataport_write(struct lan78xx_net *dev, u32 ram_select,
650 u32 addr, u32 length, u32 *buf)
652 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
656 if (usb_autopm_get_interface(dev->intf) < 0)
659 mutex_lock(&pdata->dataport_mutex);
661 ret = lan78xx_dataport_wait_not_busy(dev);
665 ret = lan78xx_read_reg(dev, DP_SEL, &dp_sel);
667 dp_sel &= ~DP_SEL_RSEL_MASK_;
668 dp_sel |= ram_select;
669 ret = lan78xx_write_reg(dev, DP_SEL, dp_sel);
671 for (i = 0; i < length; i++) {
672 ret = lan78xx_write_reg(dev, DP_ADDR, addr + i);
674 ret = lan78xx_write_reg(dev, DP_DATA, buf[i]);
676 ret = lan78xx_write_reg(dev, DP_CMD, DP_CMD_WRITE_);
678 ret = lan78xx_dataport_wait_not_busy(dev);
684 mutex_unlock(&pdata->dataport_mutex);
685 usb_autopm_put_interface(dev->intf);
690 static void lan78xx_set_addr_filter(struct lan78xx_priv *pdata,
691 int index, u8 addr[ETH_ALEN])
695 if ((pdata) && (index > 0) && (index < NUM_OF_MAF)) {
697 temp = addr[2] | (temp << 8);
698 temp = addr[1] | (temp << 8);
699 temp = addr[0] | (temp << 8);
700 pdata->pfilter_table[index][1] = temp;
702 temp = addr[4] | (temp << 8);
703 temp |= MAF_HI_VALID_ | MAF_HI_TYPE_DST_;
704 pdata->pfilter_table[index][0] = temp;
708 /* returns hash bit number for given MAC address */
709 static inline u32 lan78xx_hash(char addr[ETH_ALEN])
711 return (ether_crc(ETH_ALEN, addr) >> 23) & 0x1ff;
714 static void lan78xx_deferred_multicast_write(struct work_struct *param)
716 struct lan78xx_priv *pdata =
717 container_of(param, struct lan78xx_priv, set_multicast);
718 struct lan78xx_net *dev = pdata->dev;
722 netif_dbg(dev, drv, dev->net, "deferred multicast write 0x%08x\n",
725 lan78xx_dataport_write(dev, DP_SEL_RSEL_VLAN_DA_, DP_SEL_VHF_VLAN_LEN,
726 DP_SEL_VHF_HASH_LEN, pdata->mchash_table);
728 for (i = 1; i < NUM_OF_MAF; i++) {
729 ret = lan78xx_write_reg(dev, MAF_HI(i), 0);
730 ret = lan78xx_write_reg(dev, MAF_LO(i),
731 pdata->pfilter_table[i][1]);
732 ret = lan78xx_write_reg(dev, MAF_HI(i),
733 pdata->pfilter_table[i][0]);
736 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl);
739 static void lan78xx_set_multicast(struct net_device *netdev)
741 struct lan78xx_net *dev = netdev_priv(netdev);
742 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
746 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags);
748 pdata->rfe_ctl &= ~(RFE_CTL_UCAST_EN_ | RFE_CTL_MCAST_EN_ |
749 RFE_CTL_DA_PERFECT_ | RFE_CTL_MCAST_HASH_);
751 for (i = 0; i < DP_SEL_VHF_HASH_LEN; i++)
752 pdata->mchash_table[i] = 0;
753 /* pfilter_table[0] has own HW address */
754 for (i = 1; i < NUM_OF_MAF; i++) {
755 pdata->pfilter_table[i][0] =
756 pdata->pfilter_table[i][1] = 0;
759 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_;
761 if (dev->net->flags & IFF_PROMISC) {
762 netif_dbg(dev, drv, dev->net, "promiscuous mode enabled");
763 pdata->rfe_ctl |= RFE_CTL_MCAST_EN_ | RFE_CTL_UCAST_EN_;
765 if (dev->net->flags & IFF_ALLMULTI) {
766 netif_dbg(dev, drv, dev->net,
767 "receive all multicast enabled");
768 pdata->rfe_ctl |= RFE_CTL_MCAST_EN_;
772 if (netdev_mc_count(dev->net)) {
773 struct netdev_hw_addr *ha;
776 netif_dbg(dev, drv, dev->net, "receive multicast hash filter");
778 pdata->rfe_ctl |= RFE_CTL_DA_PERFECT_;
781 netdev_for_each_mc_addr(ha, netdev) {
782 /* set first 32 into Perfect Filter */
784 lan78xx_set_addr_filter(pdata, i, ha->addr);
786 u32 bitnum = lan78xx_hash(ha->addr);
788 pdata->mchash_table[bitnum / 32] |=
789 (1 << (bitnum % 32));
790 pdata->rfe_ctl |= RFE_CTL_MCAST_HASH_;
796 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags);
798 /* defer register writes to a sleepable context */
799 schedule_work(&pdata->set_multicast);
802 static int lan78xx_update_flowcontrol(struct lan78xx_net *dev, u8 duplex,
803 u16 lcladv, u16 rmtadv)
805 u32 flow = 0, fct_flow = 0;
808 u8 cap = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
810 if (cap & FLOW_CTRL_TX)
811 flow = (FLOW_CR_TX_FCEN_ | 0xFFFF);
813 if (cap & FLOW_CTRL_RX)
814 flow |= FLOW_CR_RX_FCEN_;
816 if (dev->udev->speed == USB_SPEED_SUPER)
818 else if (dev->udev->speed == USB_SPEED_HIGH)
821 netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s",
822 (cap & FLOW_CTRL_RX ? "enabled" : "disabled"),
823 (cap & FLOW_CTRL_TX ? "enabled" : "disabled"));
825 ret = lan78xx_write_reg(dev, FCT_FLOW, fct_flow);
827 /* threshold value should be set before enabling flow */
828 ret = lan78xx_write_reg(dev, FLOW, flow);
833 static int lan78xx_link_reset(struct lan78xx_net *dev)
835 struct phy_device *phydev = dev->net->phydev;
836 struct ethtool_cmd ecmd = { .cmd = ETHTOOL_GSET };
840 /* clear PHY interrupt status */
841 ret = phy_read(phydev, LAN88XX_INT_STS);
842 if (unlikely(ret < 0))
845 /* clear LAN78xx interrupt status */
846 ret = lan78xx_write_reg(dev, INT_STS, INT_STS_PHY_INT_);
847 if (unlikely(ret < 0))
850 phy_read_status(phydev);
852 if (!phydev->link && dev->link_on) {
853 dev->link_on = false;
854 netif_carrier_off(dev->net);
857 ret = lan78xx_read_reg(dev, MAC_CR, &buf);
858 if (unlikely(ret < 0))
861 ret = lan78xx_write_reg(dev, MAC_CR, buf);
862 if (unlikely(ret < 0))
864 } else if (phydev->link && !dev->link_on) {
867 phy_ethtool_gset(phydev, &ecmd);
869 ret = phy_read(phydev, LAN88XX_INT_STS);
871 if (dev->udev->speed == USB_SPEED_SUPER) {
872 if (ethtool_cmd_speed(&ecmd) == 1000) {
874 ret = lan78xx_read_reg(dev, USB_CFG1, &buf);
875 buf &= ~USB_CFG1_DEV_U2_INIT_EN_;
876 ret = lan78xx_write_reg(dev, USB_CFG1, buf);
878 ret = lan78xx_read_reg(dev, USB_CFG1, &buf);
879 buf |= USB_CFG1_DEV_U1_INIT_EN_;
880 ret = lan78xx_write_reg(dev, USB_CFG1, buf);
883 ret = lan78xx_read_reg(dev, USB_CFG1, &buf);
884 buf |= USB_CFG1_DEV_U2_INIT_EN_;
885 buf |= USB_CFG1_DEV_U1_INIT_EN_;
886 ret = lan78xx_write_reg(dev, USB_CFG1, buf);
890 ladv = phy_read(phydev, MII_ADVERTISE);
894 radv = phy_read(phydev, MII_LPA);
898 netif_dbg(dev, link, dev->net,
899 "speed: %u duplex: %d anadv: 0x%04x anlpa: 0x%04x",
900 ethtool_cmd_speed(&ecmd), ecmd.duplex, ladv, radv);
902 ret = lan78xx_update_flowcontrol(dev, ecmd.duplex, ladv, radv);
903 netif_carrier_on(dev->net);
909 /* some work can't be done in tasklets, so we use keventd
911 * NOTE: annoying asymmetry: if it's active, schedule_work() fails,
912 * but tasklet_schedule() doesn't. hope the failure is rare.
914 void lan78xx_defer_kevent(struct lan78xx_net *dev, int work)
916 set_bit(work, &dev->flags);
917 if (!schedule_delayed_work(&dev->wq, 0))
918 netdev_err(dev->net, "kevent %d may have been dropped\n", work);
921 static void lan78xx_status(struct lan78xx_net *dev, struct urb *urb)
925 if (urb->actual_length != 4) {
926 netdev_warn(dev->net,
927 "unexpected urb length %d", urb->actual_length);
931 memcpy(&intdata, urb->transfer_buffer, 4);
932 le32_to_cpus(&intdata);
934 if (intdata & INT_ENP_PHY_INT) {
935 netif_dbg(dev, link, dev->net, "PHY INTR: 0x%08x\n", intdata);
936 lan78xx_defer_kevent(dev, EVENT_LINK_RESET);
938 netdev_warn(dev->net,
939 "unexpected interrupt: 0x%08x\n", intdata);
942 static int lan78xx_ethtool_get_eeprom_len(struct net_device *netdev)
944 return MAX_EEPROM_SIZE;
947 static int lan78xx_ethtool_get_eeprom(struct net_device *netdev,
948 struct ethtool_eeprom *ee, u8 *data)
950 struct lan78xx_net *dev = netdev_priv(netdev);
952 ee->magic = LAN78XX_EEPROM_MAGIC;
954 return lan78xx_read_raw_eeprom(dev, ee->offset, ee->len, data);
957 static int lan78xx_ethtool_set_eeprom(struct net_device *netdev,
958 struct ethtool_eeprom *ee, u8 *data)
960 struct lan78xx_net *dev = netdev_priv(netdev);
962 /* Allow entire eeprom update only */
963 if ((ee->magic == LAN78XX_EEPROM_MAGIC) &&
966 (data[0] == EEPROM_INDICATOR))
967 return lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data);
968 else if ((ee->magic == LAN78XX_OTP_MAGIC) &&
971 (data[0] == OTP_INDICATOR_1))
972 return lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data);
977 static void lan78xx_get_strings(struct net_device *netdev, u32 stringset,
980 if (stringset == ETH_SS_STATS)
981 memcpy(data, lan78xx_gstrings, sizeof(lan78xx_gstrings));
984 static int lan78xx_get_sset_count(struct net_device *netdev, int sset)
986 if (sset == ETH_SS_STATS)
987 return ARRAY_SIZE(lan78xx_gstrings);
992 static void lan78xx_get_stats(struct net_device *netdev,
993 struct ethtool_stats *stats, u64 *data)
995 struct lan78xx_net *dev = netdev_priv(netdev);
996 struct lan78xx_statstage lan78xx_stat;
1000 if (usb_autopm_get_interface(dev->intf) < 0)
1003 if (lan78xx_read_stats(dev, &lan78xx_stat) > 0) {
1004 p = (u32 *)&lan78xx_stat;
1005 for (i = 0; i < (sizeof(lan78xx_stat) / (sizeof(u32))); i++)
1009 usb_autopm_put_interface(dev->intf);
1012 static void lan78xx_get_wol(struct net_device *netdev,
1013 struct ethtool_wolinfo *wol)
1015 struct lan78xx_net *dev = netdev_priv(netdev);
1018 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
1020 if (usb_autopm_get_interface(dev->intf) < 0)
1023 ret = lan78xx_read_reg(dev, USB_CFG0, &buf);
1024 if (unlikely(ret < 0)) {
1028 if (buf & USB_CFG_RMT_WKP_) {
1029 wol->supported = WAKE_ALL;
1030 wol->wolopts = pdata->wol;
1037 usb_autopm_put_interface(dev->intf);
1040 static int lan78xx_set_wol(struct net_device *netdev,
1041 struct ethtool_wolinfo *wol)
1043 struct lan78xx_net *dev = netdev_priv(netdev);
1044 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
1047 ret = usb_autopm_get_interface(dev->intf);
1052 if (wol->wolopts & WAKE_UCAST)
1053 pdata->wol |= WAKE_UCAST;
1054 if (wol->wolopts & WAKE_MCAST)
1055 pdata->wol |= WAKE_MCAST;
1056 if (wol->wolopts & WAKE_BCAST)
1057 pdata->wol |= WAKE_BCAST;
1058 if (wol->wolopts & WAKE_MAGIC)
1059 pdata->wol |= WAKE_MAGIC;
1060 if (wol->wolopts & WAKE_PHY)
1061 pdata->wol |= WAKE_PHY;
1062 if (wol->wolopts & WAKE_ARP)
1063 pdata->wol |= WAKE_ARP;
1065 device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts);
1067 phy_ethtool_set_wol(netdev->phydev, wol);
1069 usb_autopm_put_interface(dev->intf);
1074 static int lan78xx_get_eee(struct net_device *net, struct ethtool_eee *edata)
1076 struct lan78xx_net *dev = netdev_priv(net);
1077 struct phy_device *phydev = net->phydev;
1081 ret = usb_autopm_get_interface(dev->intf);
1085 ret = phy_ethtool_get_eee(phydev, edata);
1089 ret = lan78xx_read_reg(dev, MAC_CR, &buf);
1090 if (buf & MAC_CR_EEE_EN_) {
1091 edata->eee_enabled = true;
1092 edata->eee_active = !!(edata->advertised &
1093 edata->lp_advertised);
1094 edata->tx_lpi_enabled = true;
1095 /* EEE_TX_LPI_REQ_DLY & tx_lpi_timer are same uSec unit */
1096 ret = lan78xx_read_reg(dev, EEE_TX_LPI_REQ_DLY, &buf);
1097 edata->tx_lpi_timer = buf;
1099 edata->eee_enabled = false;
1100 edata->eee_active = false;
1101 edata->tx_lpi_enabled = false;
1102 edata->tx_lpi_timer = 0;
1107 usb_autopm_put_interface(dev->intf);
1112 static int lan78xx_set_eee(struct net_device *net, struct ethtool_eee *edata)
1114 struct lan78xx_net *dev = netdev_priv(net);
1118 ret = usb_autopm_get_interface(dev->intf);
1122 if (edata->eee_enabled) {
1123 ret = lan78xx_read_reg(dev, MAC_CR, &buf);
1124 buf |= MAC_CR_EEE_EN_;
1125 ret = lan78xx_write_reg(dev, MAC_CR, buf);
1127 phy_ethtool_set_eee(net->phydev, edata);
1129 buf = (u32)edata->tx_lpi_timer;
1130 ret = lan78xx_write_reg(dev, EEE_TX_LPI_REQ_DLY, buf);
1132 ret = lan78xx_read_reg(dev, MAC_CR, &buf);
1133 buf &= ~MAC_CR_EEE_EN_;
1134 ret = lan78xx_write_reg(dev, MAC_CR, buf);
1137 usb_autopm_put_interface(dev->intf);
1142 static u32 lan78xx_get_link(struct net_device *net)
1144 phy_read_status(net->phydev);
1146 return net->phydev->link;
1149 int lan78xx_nway_reset(struct net_device *net)
1151 return phy_start_aneg(net->phydev);
1154 static void lan78xx_get_drvinfo(struct net_device *net,
1155 struct ethtool_drvinfo *info)
1157 struct lan78xx_net *dev = netdev_priv(net);
1159 strncpy(info->driver, DRIVER_NAME, sizeof(info->driver));
1160 strncpy(info->version, DRIVER_VERSION, sizeof(info->version));
1161 usb_make_path(dev->udev, info->bus_info, sizeof(info->bus_info));
1164 static u32 lan78xx_get_msglevel(struct net_device *net)
1166 struct lan78xx_net *dev = netdev_priv(net);
1168 return dev->msg_enable;
1171 static void lan78xx_set_msglevel(struct net_device *net, u32 level)
1173 struct lan78xx_net *dev = netdev_priv(net);
1175 dev->msg_enable = level;
1178 static int lan78xx_get_mdix_status(struct net_device *net)
1180 struct phy_device *phydev = net->phydev;
1183 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS, LAN88XX_EXT_PAGE_SPACE_1);
1184 buf = phy_read(phydev, LAN88XX_EXT_MODE_CTRL);
1185 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS, LAN88XX_EXT_PAGE_SPACE_0);
1190 static void lan78xx_set_mdix_status(struct net_device *net, __u8 mdix_ctrl)
1192 struct lan78xx_net *dev = netdev_priv(net);
1193 struct phy_device *phydev = net->phydev;
1196 if (mdix_ctrl == ETH_TP_MDI) {
1197 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
1198 LAN88XX_EXT_PAGE_SPACE_1);
1199 buf = phy_read(phydev, LAN88XX_EXT_MODE_CTRL);
1200 buf &= ~LAN88XX_EXT_MODE_CTRL_MDIX_MASK_;
1201 phy_write(phydev, LAN88XX_EXT_MODE_CTRL,
1202 buf | LAN88XX_EXT_MODE_CTRL_MDI_);
1203 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
1204 LAN88XX_EXT_PAGE_SPACE_0);
1205 } else if (mdix_ctrl == ETH_TP_MDI_X) {
1206 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
1207 LAN88XX_EXT_PAGE_SPACE_1);
1208 buf = phy_read(phydev, LAN88XX_EXT_MODE_CTRL);
1209 buf &= ~LAN88XX_EXT_MODE_CTRL_MDIX_MASK_;
1210 phy_write(phydev, LAN88XX_EXT_MODE_CTRL,
1211 buf | LAN88XX_EXT_MODE_CTRL_MDI_X_);
1212 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
1213 LAN88XX_EXT_PAGE_SPACE_0);
1214 } else if (mdix_ctrl == ETH_TP_MDI_AUTO) {
1215 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
1216 LAN88XX_EXT_PAGE_SPACE_1);
1217 buf = phy_read(phydev, LAN88XX_EXT_MODE_CTRL);
1218 buf &= ~LAN88XX_EXT_MODE_CTRL_MDIX_MASK_;
1219 phy_write(phydev, LAN88XX_EXT_MODE_CTRL,
1220 buf | LAN88XX_EXT_MODE_CTRL_AUTO_MDIX_);
1221 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
1222 LAN88XX_EXT_PAGE_SPACE_0);
1224 dev->mdix_ctrl = mdix_ctrl;
1227 static int lan78xx_get_settings(struct net_device *net, struct ethtool_cmd *cmd)
1229 struct lan78xx_net *dev = netdev_priv(net);
1230 struct phy_device *phydev = net->phydev;
1234 ret = usb_autopm_get_interface(dev->intf);
1238 ret = phy_ethtool_gset(phydev, cmd);
1240 buf = lan78xx_get_mdix_status(net);
1242 buf &= LAN88XX_EXT_MODE_CTRL_MDIX_MASK_;
1243 if (buf == LAN88XX_EXT_MODE_CTRL_AUTO_MDIX_) {
1244 cmd->eth_tp_mdix = ETH_TP_MDI_AUTO;
1245 cmd->eth_tp_mdix_ctrl = ETH_TP_MDI_AUTO;
1246 } else if (buf == LAN88XX_EXT_MODE_CTRL_MDI_) {
1247 cmd->eth_tp_mdix = ETH_TP_MDI;
1248 cmd->eth_tp_mdix_ctrl = ETH_TP_MDI;
1249 } else if (buf == LAN88XX_EXT_MODE_CTRL_MDI_X_) {
1250 cmd->eth_tp_mdix = ETH_TP_MDI_X;
1251 cmd->eth_tp_mdix_ctrl = ETH_TP_MDI_X;
1254 usb_autopm_put_interface(dev->intf);
1259 static int lan78xx_set_settings(struct net_device *net, struct ethtool_cmd *cmd)
1261 struct lan78xx_net *dev = netdev_priv(net);
1262 struct phy_device *phydev = net->phydev;
1266 ret = usb_autopm_get_interface(dev->intf);
1270 if (dev->mdix_ctrl != cmd->eth_tp_mdix_ctrl) {
1271 lan78xx_set_mdix_status(net, cmd->eth_tp_mdix_ctrl);
1274 /* change speed & duplex */
1275 ret = phy_ethtool_sset(phydev, cmd);
1277 if (!cmd->autoneg) {
1278 /* force link down */
1279 temp = phy_read(phydev, MII_BMCR);
1280 phy_write(phydev, MII_BMCR, temp | BMCR_LOOPBACK);
1282 phy_write(phydev, MII_BMCR, temp);
1285 usb_autopm_put_interface(dev->intf);
1290 static const struct ethtool_ops lan78xx_ethtool_ops = {
1291 .get_link = lan78xx_get_link,
1292 .nway_reset = lan78xx_nway_reset,
1293 .get_drvinfo = lan78xx_get_drvinfo,
1294 .get_msglevel = lan78xx_get_msglevel,
1295 .set_msglevel = lan78xx_set_msglevel,
1296 .get_settings = lan78xx_get_settings,
1297 .set_settings = lan78xx_set_settings,
1298 .get_eeprom_len = lan78xx_ethtool_get_eeprom_len,
1299 .get_eeprom = lan78xx_ethtool_get_eeprom,
1300 .set_eeprom = lan78xx_ethtool_set_eeprom,
1301 .get_ethtool_stats = lan78xx_get_stats,
1302 .get_sset_count = lan78xx_get_sset_count,
1303 .get_strings = lan78xx_get_strings,
1304 .get_wol = lan78xx_get_wol,
1305 .set_wol = lan78xx_set_wol,
1306 .get_eee = lan78xx_get_eee,
1307 .set_eee = lan78xx_set_eee,
1310 static int lan78xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd)
1312 if (!netif_running(netdev))
1315 return phy_mii_ioctl(netdev->phydev, rq, cmd);
1318 static void lan78xx_init_mac_address(struct lan78xx_net *dev)
1320 u32 addr_lo, addr_hi;
1324 ret = lan78xx_read_reg(dev, RX_ADDRL, &addr_lo);
1325 ret = lan78xx_read_reg(dev, RX_ADDRH, &addr_hi);
1327 addr[0] = addr_lo & 0xFF;
1328 addr[1] = (addr_lo >> 8) & 0xFF;
1329 addr[2] = (addr_lo >> 16) & 0xFF;
1330 addr[3] = (addr_lo >> 24) & 0xFF;
1331 addr[4] = addr_hi & 0xFF;
1332 addr[5] = (addr_hi >> 8) & 0xFF;
1334 if (!is_valid_ether_addr(addr)) {
1335 /* reading mac address from EEPROM or OTP */
1336 if ((lan78xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN,
1338 (lan78xx_read_otp(dev, EEPROM_MAC_OFFSET, ETH_ALEN,
1340 if (is_valid_ether_addr(addr)) {
1341 /* eeprom values are valid so use them */
1342 netif_dbg(dev, ifup, dev->net,
1343 "MAC address read from EEPROM");
1345 /* generate random MAC */
1346 random_ether_addr(addr);
1347 netif_dbg(dev, ifup, dev->net,
1348 "MAC address set to random addr");
1351 addr_lo = addr[0] | (addr[1] << 8) |
1352 (addr[2] << 16) | (addr[3] << 24);
1353 addr_hi = addr[4] | (addr[5] << 8);
1355 ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo);
1356 ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi);
1358 /* generate random MAC */
1359 random_ether_addr(addr);
1360 netif_dbg(dev, ifup, dev->net,
1361 "MAC address set to random addr");
1365 ret = lan78xx_write_reg(dev, MAF_LO(0), addr_lo);
1366 ret = lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_);
1368 ether_addr_copy(dev->net->dev_addr, addr);
1371 /* MDIO read and write wrappers for phylib */
1372 static int lan78xx_mdiobus_read(struct mii_bus *bus, int phy_id, int idx)
1374 struct lan78xx_net *dev = bus->priv;
1378 ret = usb_autopm_get_interface(dev->intf);
1382 mutex_lock(&dev->phy_mutex);
1384 /* confirm MII not busy */
1385 ret = lan78xx_phy_wait_not_busy(dev);
1389 /* set the address, index & direction (read from PHY) */
1390 addr = mii_access(phy_id, idx, MII_READ);
1391 ret = lan78xx_write_reg(dev, MII_ACC, addr);
1393 ret = lan78xx_phy_wait_not_busy(dev);
1397 ret = lan78xx_read_reg(dev, MII_DATA, &val);
1399 ret = (int)(val & 0xFFFF);
1402 mutex_unlock(&dev->phy_mutex);
1403 usb_autopm_put_interface(dev->intf);
1407 static int lan78xx_mdiobus_write(struct mii_bus *bus, int phy_id, int idx,
1410 struct lan78xx_net *dev = bus->priv;
1414 ret = usb_autopm_get_interface(dev->intf);
1418 mutex_lock(&dev->phy_mutex);
1420 /* confirm MII not busy */
1421 ret = lan78xx_phy_wait_not_busy(dev);
1426 ret = lan78xx_write_reg(dev, MII_DATA, val);
1428 /* set the address, index & direction (write to PHY) */
1429 addr = mii_access(phy_id, idx, MII_WRITE);
1430 ret = lan78xx_write_reg(dev, MII_ACC, addr);
1432 ret = lan78xx_phy_wait_not_busy(dev);
1437 mutex_unlock(&dev->phy_mutex);
1438 usb_autopm_put_interface(dev->intf);
1442 static int lan78xx_mdio_init(struct lan78xx_net *dev)
1447 dev->mdiobus = mdiobus_alloc();
1448 if (!dev->mdiobus) {
1449 netdev_err(dev->net, "can't allocate MDIO bus\n");
1453 dev->mdiobus->priv = (void *)dev;
1454 dev->mdiobus->read = lan78xx_mdiobus_read;
1455 dev->mdiobus->write = lan78xx_mdiobus_write;
1456 dev->mdiobus->name = "lan78xx-mdiobus";
1458 snprintf(dev->mdiobus->id, MII_BUS_ID_SIZE, "usb-%03d:%03d",
1459 dev->udev->bus->busnum, dev->udev->devnum);
1461 dev->mdiobus->irq = kzalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
1462 if (!dev->mdiobus->irq) {
1467 /* handle our own interrupt */
1468 for (i = 0; i < PHY_MAX_ADDR; i++)
1469 dev->mdiobus->irq[i] = PHY_IGNORE_INTERRUPT;
1471 switch (dev->devid & ID_REV_CHIP_ID_MASK_) {
1474 /* set to internal PHY id */
1475 dev->mdiobus->phy_mask = ~(1 << 1);
1479 ret = mdiobus_register(dev->mdiobus);
1481 netdev_err(dev->net, "can't register MDIO bus\n");
1485 netdev_dbg(dev->net, "registered mdiobus bus %s\n", dev->mdiobus->id);
1488 kfree(dev->mdiobus->irq);
1490 mdiobus_free(dev->mdiobus);
1494 static void lan78xx_remove_mdio(struct lan78xx_net *dev)
1496 mdiobus_unregister(dev->mdiobus);
1497 kfree(dev->mdiobus->irq);
1498 mdiobus_free(dev->mdiobus);
1501 static void lan78xx_link_status_change(struct net_device *net)
1506 static int lan78xx_phy_init(struct lan78xx_net *dev)
1509 struct phy_device *phydev = dev->net->phydev;
1511 phydev = phy_find_first(dev->mdiobus);
1513 netdev_err(dev->net, "no PHY found\n");
1517 ret = phy_connect_direct(dev->net, phydev,
1518 lan78xx_link_status_change,
1519 PHY_INTERFACE_MODE_GMII);
1521 netdev_err(dev->net, "can't attach PHY to %s\n",
1526 /* set to AUTOMDIX */
1527 lan78xx_set_mdix_status(dev->net, ETH_TP_MDI_AUTO);
1529 /* MAC doesn't support 1000T Half */
1530 phydev->supported &= ~SUPPORTED_1000baseT_Half;
1531 phydev->supported |= (SUPPORTED_10baseT_Half |
1532 SUPPORTED_10baseT_Full |
1533 SUPPORTED_100baseT_Half |
1534 SUPPORTED_100baseT_Full |
1535 SUPPORTED_1000baseT_Full |
1536 SUPPORTED_Pause | SUPPORTED_Asym_Pause);
1537 genphy_config_aneg(phydev);
1539 /* Workaround to enable PHY interrupt.
1540 * phy_start_interrupts() is API for requesting and enabling
1541 * PHY interrupt. However, USB-to-Ethernet device can't use
1542 * request_irq() called in phy_start_interrupts().
1543 * Set PHY to PHY_HALTED and call phy_start()
1544 * to make a call to phy_enable_interrupts()
1549 netif_dbg(dev, ifup, dev->net, "phy initialised successfully");
1554 static int lan78xx_set_rx_max_frame_length(struct lan78xx_net *dev, int size)
1560 ret = lan78xx_read_reg(dev, MAC_RX, &buf);
1562 rxenabled = ((buf & MAC_RX_RXEN_) != 0);
1565 buf &= ~MAC_RX_RXEN_;
1566 ret = lan78xx_write_reg(dev, MAC_RX, buf);
1569 /* add 4 to size for FCS */
1570 buf &= ~MAC_RX_MAX_SIZE_MASK_;
1571 buf |= (((size + 4) << MAC_RX_MAX_SIZE_SHIFT_) & MAC_RX_MAX_SIZE_MASK_);
1573 ret = lan78xx_write_reg(dev, MAC_RX, buf);
1576 buf |= MAC_RX_RXEN_;
1577 ret = lan78xx_write_reg(dev, MAC_RX, buf);
1583 static int unlink_urbs(struct lan78xx_net *dev, struct sk_buff_head *q)
1585 struct sk_buff *skb;
1586 unsigned long flags;
1589 spin_lock_irqsave(&q->lock, flags);
1590 while (!skb_queue_empty(q)) {
1591 struct skb_data *entry;
1595 skb_queue_walk(q, skb) {
1596 entry = (struct skb_data *)skb->cb;
1597 if (entry->state != unlink_start)
1602 entry->state = unlink_start;
1605 /* Get reference count of the URB to avoid it to be
1606 * freed during usb_unlink_urb, which may trigger
1607 * use-after-free problem inside usb_unlink_urb since
1608 * usb_unlink_urb is always racing with .complete
1609 * handler(include defer_bh).
1612 spin_unlock_irqrestore(&q->lock, flags);
1613 /* during some PM-driven resume scenarios,
1614 * these (async) unlinks complete immediately
1616 ret = usb_unlink_urb(urb);
1617 if (ret != -EINPROGRESS && ret != 0)
1618 netdev_dbg(dev->net, "unlink urb err, %d\n", ret);
1622 spin_lock_irqsave(&q->lock, flags);
1624 spin_unlock_irqrestore(&q->lock, flags);
1628 static int lan78xx_change_mtu(struct net_device *netdev, int new_mtu)
1630 struct lan78xx_net *dev = netdev_priv(netdev);
1631 int ll_mtu = new_mtu + netdev->hard_header_len;
1632 int old_hard_mtu = dev->hard_mtu;
1633 int old_rx_urb_size = dev->rx_urb_size;
1636 if (new_mtu > MAX_SINGLE_PACKET_SIZE)
1641 /* no second zero-length packet read wanted after mtu-sized packets */
1642 if ((ll_mtu % dev->maxpacket) == 0)
1645 ret = lan78xx_set_rx_max_frame_length(dev, new_mtu + ETH_HLEN);
1647 netdev->mtu = new_mtu;
1649 dev->hard_mtu = netdev->mtu + netdev->hard_header_len;
1650 if (dev->rx_urb_size == old_hard_mtu) {
1651 dev->rx_urb_size = dev->hard_mtu;
1652 if (dev->rx_urb_size > old_rx_urb_size) {
1653 if (netif_running(dev->net)) {
1654 unlink_urbs(dev, &dev->rxq);
1655 tasklet_schedule(&dev->bh);
1663 int lan78xx_set_mac_addr(struct net_device *netdev, void *p)
1665 struct lan78xx_net *dev = netdev_priv(netdev);
1666 struct sockaddr *addr = p;
1667 u32 addr_lo, addr_hi;
1670 if (netif_running(netdev))
1673 if (!is_valid_ether_addr(addr->sa_data))
1674 return -EADDRNOTAVAIL;
1676 ether_addr_copy(netdev->dev_addr, addr->sa_data);
1678 addr_lo = netdev->dev_addr[0] |
1679 netdev->dev_addr[1] << 8 |
1680 netdev->dev_addr[2] << 16 |
1681 netdev->dev_addr[3] << 24;
1682 addr_hi = netdev->dev_addr[4] |
1683 netdev->dev_addr[5] << 8;
1685 ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo);
1686 ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi);
1691 /* Enable or disable Rx checksum offload engine */
1692 static int lan78xx_set_features(struct net_device *netdev,
1693 netdev_features_t features)
1695 struct lan78xx_net *dev = netdev_priv(netdev);
1696 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
1697 unsigned long flags;
1700 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags);
1702 if (features & NETIF_F_RXCSUM) {
1703 pdata->rfe_ctl |= RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_;
1704 pdata->rfe_ctl |= RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_;
1706 pdata->rfe_ctl &= ~(RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_);
1707 pdata->rfe_ctl &= ~(RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_);
1710 if (features & NETIF_F_HW_VLAN_CTAG_RX)
1711 pdata->rfe_ctl |= RFE_CTL_VLAN_FILTER_;
1713 pdata->rfe_ctl &= ~RFE_CTL_VLAN_FILTER_;
1715 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags);
1717 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl);
1722 static void lan78xx_deferred_vlan_write(struct work_struct *param)
1724 struct lan78xx_priv *pdata =
1725 container_of(param, struct lan78xx_priv, set_vlan);
1726 struct lan78xx_net *dev = pdata->dev;
1728 lan78xx_dataport_write(dev, DP_SEL_RSEL_VLAN_DA_, 0,
1729 DP_SEL_VHF_VLAN_LEN, pdata->vlan_table);
1732 static int lan78xx_vlan_rx_add_vid(struct net_device *netdev,
1733 __be16 proto, u16 vid)
1735 struct lan78xx_net *dev = netdev_priv(netdev);
1736 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
1738 u16 vid_dword_index;
1740 vid_dword_index = (vid >> 5) & 0x7F;
1741 vid_bit_index = vid & 0x1F;
1743 pdata->vlan_table[vid_dword_index] |= (1 << vid_bit_index);
1745 /* defer register writes to a sleepable context */
1746 schedule_work(&pdata->set_vlan);
1751 static int lan78xx_vlan_rx_kill_vid(struct net_device *netdev,
1752 __be16 proto, u16 vid)
1754 struct lan78xx_net *dev = netdev_priv(netdev);
1755 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
1757 u16 vid_dword_index;
1759 vid_dword_index = (vid >> 5) & 0x7F;
1760 vid_bit_index = vid & 0x1F;
1762 pdata->vlan_table[vid_dword_index] &= ~(1 << vid_bit_index);
1764 /* defer register writes to a sleepable context */
1765 schedule_work(&pdata->set_vlan);
1770 static void lan78xx_init_ltm(struct lan78xx_net *dev)
1774 u32 regs[6] = { 0 };
1776 ret = lan78xx_read_reg(dev, USB_CFG1, &buf);
1777 if (buf & USB_CFG1_LTM_ENABLE_) {
1779 /* Get values from EEPROM first */
1780 if (lan78xx_read_eeprom(dev, 0x3F, 2, temp) == 0) {
1781 if (temp[0] == 24) {
1782 ret = lan78xx_read_raw_eeprom(dev,
1789 } else if (lan78xx_read_otp(dev, 0x3F, 2, temp) == 0) {
1790 if (temp[0] == 24) {
1791 ret = lan78xx_read_raw_otp(dev,
1801 lan78xx_write_reg(dev, LTM_BELT_IDLE0, regs[0]);
1802 lan78xx_write_reg(dev, LTM_BELT_IDLE1, regs[1]);
1803 lan78xx_write_reg(dev, LTM_BELT_ACT0, regs[2]);
1804 lan78xx_write_reg(dev, LTM_BELT_ACT1, regs[3]);
1805 lan78xx_write_reg(dev, LTM_INACTIVE0, regs[4]);
1806 lan78xx_write_reg(dev, LTM_INACTIVE1, regs[5]);
1809 static int lan78xx_reset(struct lan78xx_net *dev)
1811 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
1814 unsigned long timeout;
1816 ret = lan78xx_read_reg(dev, HW_CFG, &buf);
1817 buf |= HW_CFG_LRST_;
1818 ret = lan78xx_write_reg(dev, HW_CFG, buf);
1820 timeout = jiffies + HZ;
1823 ret = lan78xx_read_reg(dev, HW_CFG, &buf);
1824 if (time_after(jiffies, timeout)) {
1825 netdev_warn(dev->net,
1826 "timeout on completion of LiteReset");
1829 } while (buf & HW_CFG_LRST_);
1831 lan78xx_init_mac_address(dev);
1833 /* save DEVID for later usage */
1834 ret = lan78xx_read_reg(dev, ID_REV, &buf);
1837 /* Respond to the IN token with a NAK */
1838 ret = lan78xx_read_reg(dev, USB_CFG0, &buf);
1839 buf |= USB_CFG_BIR_;
1840 ret = lan78xx_write_reg(dev, USB_CFG0, buf);
1843 lan78xx_init_ltm(dev);
1845 dev->net->hard_header_len += TX_OVERHEAD;
1846 dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len;
1848 if (dev->udev->speed == USB_SPEED_SUPER) {
1849 buf = DEFAULT_BURST_CAP_SIZE / SS_USB_PKT_SIZE;
1850 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE;
1853 } else if (dev->udev->speed == USB_SPEED_HIGH) {
1854 buf = DEFAULT_BURST_CAP_SIZE / HS_USB_PKT_SIZE;
1855 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE;
1856 dev->rx_qlen = RX_MAX_QUEUE_MEMORY / dev->rx_urb_size;
1857 dev->tx_qlen = RX_MAX_QUEUE_MEMORY / dev->hard_mtu;
1859 buf = DEFAULT_BURST_CAP_SIZE / FS_USB_PKT_SIZE;
1860 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE;
1864 ret = lan78xx_write_reg(dev, BURST_CAP, buf);
1865 ret = lan78xx_write_reg(dev, BULK_IN_DLY, DEFAULT_BULK_IN_DELAY);
1867 ret = lan78xx_read_reg(dev, HW_CFG, &buf);
1869 ret = lan78xx_write_reg(dev, HW_CFG, buf);
1871 ret = lan78xx_read_reg(dev, USB_CFG0, &buf);
1872 buf |= USB_CFG_BCE_;
1873 ret = lan78xx_write_reg(dev, USB_CFG0, buf);
1875 /* set FIFO sizes */
1876 buf = (MAX_RX_FIFO_SIZE - 512) / 512;
1877 ret = lan78xx_write_reg(dev, FCT_RX_FIFO_END, buf);
1879 buf = (MAX_TX_FIFO_SIZE - 512) / 512;
1880 ret = lan78xx_write_reg(dev, FCT_TX_FIFO_END, buf);
1882 ret = lan78xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_);
1883 ret = lan78xx_write_reg(dev, FLOW, 0);
1884 ret = lan78xx_write_reg(dev, FCT_FLOW, 0);
1886 /* Don't need rfe_ctl_lock during initialisation */
1887 ret = lan78xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl);
1888 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_ | RFE_CTL_DA_PERFECT_;
1889 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl);
1891 /* Enable or disable checksum offload engines */
1892 lan78xx_set_features(dev->net, dev->net->features);
1894 lan78xx_set_multicast(dev->net);
1897 ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
1898 buf |= PMT_CTL_PHY_RST_;
1899 ret = lan78xx_write_reg(dev, PMT_CTL, buf);
1901 timeout = jiffies + HZ;
1904 ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
1905 if (time_after(jiffies, timeout)) {
1906 netdev_warn(dev->net, "timeout waiting for PHY Reset");
1909 } while ((buf & PMT_CTL_PHY_RST_) || !(buf & PMT_CTL_READY_));
1911 ret = lan78xx_read_reg(dev, MAC_CR, &buf);
1913 buf |= MAC_CR_GMII_EN_;
1914 buf |= MAC_CR_AUTO_DUPLEX_ | MAC_CR_AUTO_SPEED_;
1916 ret = lan78xx_write_reg(dev, MAC_CR, buf);
1918 /* enable PHY interrupts */
1919 ret = lan78xx_read_reg(dev, INT_EP_CTL, &buf);
1920 buf |= INT_ENP_PHY_INT;
1921 ret = lan78xx_write_reg(dev, INT_EP_CTL, buf);
1923 ret = lan78xx_read_reg(dev, MAC_TX, &buf);
1924 buf |= MAC_TX_TXEN_;
1925 ret = lan78xx_write_reg(dev, MAC_TX, buf);
1927 ret = lan78xx_read_reg(dev, FCT_TX_CTL, &buf);
1928 buf |= FCT_TX_CTL_EN_;
1929 ret = lan78xx_write_reg(dev, FCT_TX_CTL, buf);
1931 ret = lan78xx_set_rx_max_frame_length(dev, dev->net->mtu + ETH_HLEN);
1933 ret = lan78xx_read_reg(dev, MAC_RX, &buf);
1934 buf |= MAC_RX_RXEN_;
1935 ret = lan78xx_write_reg(dev, MAC_RX, buf);
1937 ret = lan78xx_read_reg(dev, FCT_RX_CTL, &buf);
1938 buf |= FCT_RX_CTL_EN_;
1939 ret = lan78xx_write_reg(dev, FCT_RX_CTL, buf);
1944 static int lan78xx_open(struct net_device *net)
1946 struct lan78xx_net *dev = netdev_priv(net);
1949 ret = usb_autopm_get_interface(dev->intf);
1953 ret = lan78xx_reset(dev);
1957 ret = lan78xx_phy_init(dev);
1961 /* for Link Check */
1962 if (dev->urb_intr) {
1963 ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL);
1965 netif_err(dev, ifup, dev->net,
1966 "intr submit %d\n", ret);
1971 set_bit(EVENT_DEV_OPEN, &dev->flags);
1973 netif_start_queue(net);
1975 dev->link_on = false;
1977 lan78xx_defer_kevent(dev, EVENT_LINK_RESET);
1979 usb_autopm_put_interface(dev->intf);
1985 static void lan78xx_terminate_urbs(struct lan78xx_net *dev)
1987 DECLARE_WAIT_QUEUE_HEAD_ONSTACK(unlink_wakeup);
1988 DECLARE_WAITQUEUE(wait, current);
1991 /* ensure there are no more active urbs */
1992 add_wait_queue(&unlink_wakeup, &wait);
1993 set_current_state(TASK_UNINTERRUPTIBLE);
1994 dev->wait = &unlink_wakeup;
1995 temp = unlink_urbs(dev, &dev->txq) + unlink_urbs(dev, &dev->rxq);
1997 /* maybe wait for deletions to finish. */
1998 while (!skb_queue_empty(&dev->rxq) &&
1999 !skb_queue_empty(&dev->txq) &&
2000 !skb_queue_empty(&dev->done)) {
2001 schedule_timeout(msecs_to_jiffies(UNLINK_TIMEOUT_MS));
2002 set_current_state(TASK_UNINTERRUPTIBLE);
2003 netif_dbg(dev, ifdown, dev->net,
2004 "waited for %d urb completions\n", temp);
2006 set_current_state(TASK_RUNNING);
2008 remove_wait_queue(&unlink_wakeup, &wait);
2011 int lan78xx_stop(struct net_device *net)
2013 struct lan78xx_net *dev = netdev_priv(net);
2015 phy_stop(net->phydev);
2016 phy_disconnect(net->phydev);
2019 clear_bit(EVENT_DEV_OPEN, &dev->flags);
2020 netif_stop_queue(net);
2022 netif_info(dev, ifdown, dev->net,
2023 "stop stats: rx/tx %lu/%lu, errs %lu/%lu\n",
2024 net->stats.rx_packets, net->stats.tx_packets,
2025 net->stats.rx_errors, net->stats.tx_errors);
2027 lan78xx_terminate_urbs(dev);
2029 usb_kill_urb(dev->urb_intr);
2031 skb_queue_purge(&dev->rxq_pause);
2033 /* deferred work (task, timer, softirq) must also stop.
2034 * can't flush_scheduled_work() until we drop rtnl (later),
2035 * else workers could deadlock; so make workers a NOP.
2038 cancel_delayed_work_sync(&dev->wq);
2039 tasklet_kill(&dev->bh);
2041 usb_autopm_put_interface(dev->intf);
2046 static int lan78xx_linearize(struct sk_buff *skb)
2048 return skb_linearize(skb);
2051 static struct sk_buff *lan78xx_tx_prep(struct lan78xx_net *dev,
2052 struct sk_buff *skb, gfp_t flags)
2054 u32 tx_cmd_a, tx_cmd_b;
2056 if (skb_headroom(skb) < TX_OVERHEAD) {
2057 struct sk_buff *skb2;
2059 skb2 = skb_copy_expand(skb, TX_OVERHEAD, 0, flags);
2060 dev_kfree_skb_any(skb);
2066 if (lan78xx_linearize(skb) < 0)
2069 tx_cmd_a = (u32)(skb->len & TX_CMD_A_LEN_MASK_) | TX_CMD_A_FCS_;
2071 if (skb->ip_summed == CHECKSUM_PARTIAL)
2072 tx_cmd_a |= TX_CMD_A_IPE_ | TX_CMD_A_TPE_;
2075 if (skb_is_gso(skb)) {
2076 u16 mss = max(skb_shinfo(skb)->gso_size, TX_CMD_B_MSS_MIN_);
2078 tx_cmd_b = (mss << TX_CMD_B_MSS_SHIFT_) & TX_CMD_B_MSS_MASK_;
2080 tx_cmd_a |= TX_CMD_A_LSO_;
2083 if (skb_vlan_tag_present(skb)) {
2084 tx_cmd_a |= TX_CMD_A_IVTG_;
2085 tx_cmd_b |= skb_vlan_tag_get(skb) & TX_CMD_B_VTAG_MASK_;
2089 cpu_to_le32s(&tx_cmd_b);
2090 memcpy(skb->data, &tx_cmd_b, 4);
2093 cpu_to_le32s(&tx_cmd_a);
2094 memcpy(skb->data, &tx_cmd_a, 4);
2099 static enum skb_state defer_bh(struct lan78xx_net *dev, struct sk_buff *skb,
2100 struct sk_buff_head *list, enum skb_state state)
2102 unsigned long flags;
2103 enum skb_state old_state;
2104 struct skb_data *entry = (struct skb_data *)skb->cb;
2106 spin_lock_irqsave(&list->lock, flags);
2107 old_state = entry->state;
2108 entry->state = state;
2110 __skb_unlink(skb, list);
2111 spin_unlock(&list->lock);
2112 spin_lock(&dev->done.lock);
2114 __skb_queue_tail(&dev->done, skb);
2115 if (skb_queue_len(&dev->done) == 1)
2116 tasklet_schedule(&dev->bh);
2117 spin_unlock_irqrestore(&dev->done.lock, flags);
2122 static void tx_complete(struct urb *urb)
2124 struct sk_buff *skb = (struct sk_buff *)urb->context;
2125 struct skb_data *entry = (struct skb_data *)skb->cb;
2126 struct lan78xx_net *dev = entry->dev;
2128 if (urb->status == 0) {
2129 dev->net->stats.tx_packets++;
2130 dev->net->stats.tx_bytes += entry->length;
2132 dev->net->stats.tx_errors++;
2134 switch (urb->status) {
2136 lan78xx_defer_kevent(dev, EVENT_TX_HALT);
2139 /* software-driven interface shutdown */
2147 netif_stop_queue(dev->net);
2150 netif_dbg(dev, tx_err, dev->net,
2151 "tx err %d\n", entry->urb->status);
2156 usb_autopm_put_interface_async(dev->intf);
2158 defer_bh(dev, skb, &dev->txq, tx_done);
2161 static void lan78xx_queue_skb(struct sk_buff_head *list,
2162 struct sk_buff *newsk, enum skb_state state)
2164 struct skb_data *entry = (struct skb_data *)newsk->cb;
2166 __skb_queue_tail(list, newsk);
2167 entry->state = state;
2170 netdev_tx_t lan78xx_start_xmit(struct sk_buff *skb, struct net_device *net)
2172 struct lan78xx_net *dev = netdev_priv(net);
2173 struct sk_buff *skb2 = NULL;
2176 skb_tx_timestamp(skb);
2177 skb2 = lan78xx_tx_prep(dev, skb, GFP_ATOMIC);
2181 skb_queue_tail(&dev->txq_pend, skb2);
2183 if (skb_queue_len(&dev->txq_pend) > 10)
2184 netif_stop_queue(net);
2186 netif_dbg(dev, tx_err, dev->net,
2187 "lan78xx_tx_prep return NULL\n");
2188 dev->net->stats.tx_errors++;
2189 dev->net->stats.tx_dropped++;
2192 tasklet_schedule(&dev->bh);
2194 return NETDEV_TX_OK;
2197 int lan78xx_get_endpoints(struct lan78xx_net *dev, struct usb_interface *intf)
2200 struct usb_host_interface *alt = NULL;
2201 struct usb_host_endpoint *in = NULL, *out = NULL;
2202 struct usb_host_endpoint *status = NULL;
2204 for (tmp = 0; tmp < intf->num_altsetting; tmp++) {
2210 alt = intf->altsetting + tmp;
2212 for (ep = 0; ep < alt->desc.bNumEndpoints; ep++) {
2213 struct usb_host_endpoint *e;
2216 e = alt->endpoint + ep;
2217 switch (e->desc.bmAttributes) {
2218 case USB_ENDPOINT_XFER_INT:
2219 if (!usb_endpoint_dir_in(&e->desc))
2223 case USB_ENDPOINT_XFER_BULK:
2228 if (usb_endpoint_dir_in(&e->desc)) {
2231 else if (intr && !status)
2241 if (!alt || !in || !out)
2244 dev->pipe_in = usb_rcvbulkpipe(dev->udev,
2245 in->desc.bEndpointAddress &
2246 USB_ENDPOINT_NUMBER_MASK);
2247 dev->pipe_out = usb_sndbulkpipe(dev->udev,
2248 out->desc.bEndpointAddress &
2249 USB_ENDPOINT_NUMBER_MASK);
2250 dev->ep_intr = status;
2255 static int lan78xx_bind(struct lan78xx_net *dev, struct usb_interface *intf)
2257 struct lan78xx_priv *pdata = NULL;
2261 ret = lan78xx_get_endpoints(dev, intf);
2263 dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL);
2265 pdata = (struct lan78xx_priv *)(dev->data[0]);
2267 netdev_warn(dev->net, "Unable to allocate lan78xx_priv");
2273 spin_lock_init(&pdata->rfe_ctl_lock);
2274 mutex_init(&pdata->dataport_mutex);
2276 INIT_WORK(&pdata->set_multicast, lan78xx_deferred_multicast_write);
2278 for (i = 0; i < DP_SEL_VHF_VLAN_LEN; i++)
2279 pdata->vlan_table[i] = 0;
2281 INIT_WORK(&pdata->set_vlan, lan78xx_deferred_vlan_write);
2283 dev->net->features = 0;
2285 if (DEFAULT_TX_CSUM_ENABLE)
2286 dev->net->features |= NETIF_F_HW_CSUM;
2288 if (DEFAULT_RX_CSUM_ENABLE)
2289 dev->net->features |= NETIF_F_RXCSUM;
2291 if (DEFAULT_TSO_CSUM_ENABLE)
2292 dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG;
2294 dev->net->hw_features = dev->net->features;
2296 /* Init all registers */
2297 ret = lan78xx_reset(dev);
2299 lan78xx_mdio_init(dev);
2301 dev->net->flags |= IFF_MULTICAST;
2303 pdata->wol = WAKE_MAGIC;
2308 static void lan78xx_unbind(struct lan78xx_net *dev, struct usb_interface *intf)
2310 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
2312 lan78xx_remove_mdio(dev);
2315 netif_dbg(dev, ifdown, dev->net, "free pdata");
2322 static void lan78xx_rx_csum_offload(struct lan78xx_net *dev,
2323 struct sk_buff *skb,
2324 u32 rx_cmd_a, u32 rx_cmd_b)
2326 if (!(dev->net->features & NETIF_F_RXCSUM) ||
2327 unlikely(rx_cmd_a & RX_CMD_A_ICSM_)) {
2328 skb->ip_summed = CHECKSUM_NONE;
2330 skb->csum = ntohs((u16)(rx_cmd_b >> RX_CMD_B_CSUM_SHIFT_));
2331 skb->ip_summed = CHECKSUM_COMPLETE;
2335 void lan78xx_skb_return(struct lan78xx_net *dev, struct sk_buff *skb)
2339 if (test_bit(EVENT_RX_PAUSED, &dev->flags)) {
2340 skb_queue_tail(&dev->rxq_pause, skb);
2344 skb->protocol = eth_type_trans(skb, dev->net);
2345 dev->net->stats.rx_packets++;
2346 dev->net->stats.rx_bytes += skb->len;
2348 netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n",
2349 skb->len + sizeof(struct ethhdr), skb->protocol);
2350 memset(skb->cb, 0, sizeof(struct skb_data));
2352 if (skb_defer_rx_timestamp(skb))
2355 status = netif_rx(skb);
2356 if (status != NET_RX_SUCCESS)
2357 netif_dbg(dev, rx_err, dev->net,
2358 "netif_rx status %d\n", status);
2361 static int lan78xx_rx(struct lan78xx_net *dev, struct sk_buff *skb)
2363 if (skb->len < dev->net->hard_header_len)
2366 while (skb->len > 0) {
2367 u32 rx_cmd_a, rx_cmd_b, align_count, size;
2369 struct sk_buff *skb2;
2370 unsigned char *packet;
2372 memcpy(&rx_cmd_a, skb->data, sizeof(rx_cmd_a));
2373 le32_to_cpus(&rx_cmd_a);
2374 skb_pull(skb, sizeof(rx_cmd_a));
2376 memcpy(&rx_cmd_b, skb->data, sizeof(rx_cmd_b));
2377 le32_to_cpus(&rx_cmd_b);
2378 skb_pull(skb, sizeof(rx_cmd_b));
2380 memcpy(&rx_cmd_c, skb->data, sizeof(rx_cmd_c));
2381 le16_to_cpus(&rx_cmd_c);
2382 skb_pull(skb, sizeof(rx_cmd_c));
2386 /* get the packet length */
2387 size = (rx_cmd_a & RX_CMD_A_LEN_MASK_);
2388 align_count = (4 - ((size + RXW_PADDING) % 4)) % 4;
2390 if (unlikely(rx_cmd_a & RX_CMD_A_RED_)) {
2391 netif_dbg(dev, rx_err, dev->net,
2392 "Error rx_cmd_a=0x%08x", rx_cmd_a);
2394 /* last frame in this batch */
2395 if (skb->len == size) {
2396 lan78xx_rx_csum_offload(dev, skb,
2397 rx_cmd_a, rx_cmd_b);
2399 skb_trim(skb, skb->len - 4); /* remove fcs */
2400 skb->truesize = size + sizeof(struct sk_buff);
2405 skb2 = skb_clone(skb, GFP_ATOMIC);
2406 if (unlikely(!skb2)) {
2407 netdev_warn(dev->net, "Error allocating skb");
2412 skb2->data = packet;
2413 skb_set_tail_pointer(skb2, size);
2415 lan78xx_rx_csum_offload(dev, skb2, rx_cmd_a, rx_cmd_b);
2417 skb_trim(skb2, skb2->len - 4); /* remove fcs */
2418 skb2->truesize = size + sizeof(struct sk_buff);
2420 lan78xx_skb_return(dev, skb2);
2423 skb_pull(skb, size);
2425 /* padding bytes before the next frame starts */
2427 skb_pull(skb, align_count);
2430 if (unlikely(skb->len < 0)) {
2431 netdev_warn(dev->net, "invalid rx length<0 %d", skb->len);
2438 static inline void rx_process(struct lan78xx_net *dev, struct sk_buff *skb)
2440 if (!lan78xx_rx(dev, skb)) {
2441 dev->net->stats.rx_errors++;
2446 lan78xx_skb_return(dev, skb);
2450 netif_dbg(dev, rx_err, dev->net, "drop\n");
2451 dev->net->stats.rx_errors++;
2453 skb_queue_tail(&dev->done, skb);
2456 static void rx_complete(struct urb *urb);
2458 static int rx_submit(struct lan78xx_net *dev, struct urb *urb, gfp_t flags)
2460 struct sk_buff *skb;
2461 struct skb_data *entry;
2462 unsigned long lockflags;
2463 size_t size = dev->rx_urb_size;
2466 skb = netdev_alloc_skb_ip_align(dev->net, size);
2472 entry = (struct skb_data *)skb->cb;
2477 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_in,
2478 skb->data, size, rx_complete, skb);
2480 spin_lock_irqsave(&dev->rxq.lock, lockflags);
2482 if (netif_device_present(dev->net) &&
2483 netif_running(dev->net) &&
2484 !test_bit(EVENT_RX_HALT, &dev->flags) &&
2485 !test_bit(EVENT_DEV_ASLEEP, &dev->flags)) {
2486 ret = usb_submit_urb(urb, GFP_ATOMIC);
2489 lan78xx_queue_skb(&dev->rxq, skb, rx_start);
2492 lan78xx_defer_kevent(dev, EVENT_RX_HALT);
2495 netif_dbg(dev, ifdown, dev->net, "device gone\n");
2496 netif_device_detach(dev->net);
2502 netif_dbg(dev, rx_err, dev->net,
2503 "rx submit, %d\n", ret);
2504 tasklet_schedule(&dev->bh);
2507 netif_dbg(dev, ifdown, dev->net, "rx: stopped\n");
2510 spin_unlock_irqrestore(&dev->rxq.lock, lockflags);
2512 dev_kfree_skb_any(skb);
2518 static void rx_complete(struct urb *urb)
2520 struct sk_buff *skb = (struct sk_buff *)urb->context;
2521 struct skb_data *entry = (struct skb_data *)skb->cb;
2522 struct lan78xx_net *dev = entry->dev;
2523 int urb_status = urb->status;
2524 enum skb_state state;
2526 skb_put(skb, urb->actual_length);
2530 switch (urb_status) {
2532 if (skb->len < dev->net->hard_header_len) {
2534 dev->net->stats.rx_errors++;
2535 dev->net->stats.rx_length_errors++;
2536 netif_dbg(dev, rx_err, dev->net,
2537 "rx length %d\n", skb->len);
2539 usb_mark_last_busy(dev->udev);
2542 dev->net->stats.rx_errors++;
2543 lan78xx_defer_kevent(dev, EVENT_RX_HALT);
2545 case -ECONNRESET: /* async unlink */
2546 case -ESHUTDOWN: /* hardware gone */
2547 netif_dbg(dev, ifdown, dev->net,
2548 "rx shutdown, code %d\n", urb_status);
2556 dev->net->stats.rx_errors++;
2562 /* data overrun ... flush fifo? */
2564 dev->net->stats.rx_over_errors++;
2569 dev->net->stats.rx_errors++;
2570 netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status);
2574 state = defer_bh(dev, skb, &dev->rxq, state);
2577 if (netif_running(dev->net) &&
2578 !test_bit(EVENT_RX_HALT, &dev->flags) &&
2579 state != unlink_start) {
2580 rx_submit(dev, urb, GFP_ATOMIC);
2585 netif_dbg(dev, rx_err, dev->net, "no read resubmitted\n");
2588 static void lan78xx_tx_bh(struct lan78xx_net *dev)
2591 struct urb *urb = NULL;
2592 struct skb_data *entry;
2593 unsigned long flags;
2594 struct sk_buff_head *tqp = &dev->txq_pend;
2595 struct sk_buff *skb, *skb2;
2598 int skb_totallen, pkt_cnt;
2602 for (skb = tqp->next; pkt_cnt < tqp->qlen; skb = skb->next) {
2603 if (skb_is_gso(skb)) {
2605 /* handle previous packets first */
2609 skb2 = skb_dequeue(tqp);
2613 if ((skb_totallen + skb->len) > MAX_SINGLE_PACKET_SIZE)
2615 skb_totallen = skb->len + roundup(skb_totallen, sizeof(u32));
2619 /* copy to a single skb */
2620 skb = alloc_skb(skb_totallen, GFP_ATOMIC);
2624 skb_put(skb, skb_totallen);
2626 for (count = pos = 0; count < pkt_cnt; count++) {
2627 skb2 = skb_dequeue(tqp);
2629 memcpy(skb->data + pos, skb2->data, skb2->len);
2630 pos += roundup(skb2->len, sizeof(u32));
2631 dev_kfree_skb(skb2);
2635 length = skb_totallen;
2638 urb = usb_alloc_urb(0, GFP_ATOMIC);
2640 netif_dbg(dev, tx_err, dev->net, "no urb\n");
2644 entry = (struct skb_data *)skb->cb;
2647 entry->length = length;
2649 spin_lock_irqsave(&dev->txq.lock, flags);
2650 ret = usb_autopm_get_interface_async(dev->intf);
2652 spin_unlock_irqrestore(&dev->txq.lock, flags);
2656 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_out,
2657 skb->data, skb->len, tx_complete, skb);
2659 if (length % dev->maxpacket == 0) {
2660 /* send USB_ZERO_PACKET */
2661 urb->transfer_flags |= URB_ZERO_PACKET;
2665 /* if this triggers the device is still a sleep */
2666 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) {
2667 /* transmission will be done in resume */
2668 usb_anchor_urb(urb, &dev->deferred);
2669 /* no use to process more packets */
2670 netif_stop_queue(dev->net);
2672 spin_unlock_irqrestore(&dev->txq.lock, flags);
2673 netdev_dbg(dev->net, "Delaying transmission for resumption\n");
2678 ret = usb_submit_urb(urb, GFP_ATOMIC);
2681 dev->net->trans_start = jiffies;
2682 lan78xx_queue_skb(&dev->txq, skb, tx_start);
2683 if (skb_queue_len(&dev->txq) >= dev->tx_qlen)
2684 netif_stop_queue(dev->net);
2687 netif_stop_queue(dev->net);
2688 lan78xx_defer_kevent(dev, EVENT_TX_HALT);
2689 usb_autopm_put_interface_async(dev->intf);
2692 usb_autopm_put_interface_async(dev->intf);
2693 netif_dbg(dev, tx_err, dev->net,
2694 "tx: submit urb err %d\n", ret);
2698 spin_unlock_irqrestore(&dev->txq.lock, flags);
2701 netif_dbg(dev, tx_err, dev->net, "drop, code %d\n", ret);
2703 dev->net->stats.tx_dropped++;
2705 dev_kfree_skb_any(skb);
2708 netif_dbg(dev, tx_queued, dev->net,
2709 "> tx, len %d, type 0x%x\n", length, skb->protocol);
2712 static void lan78xx_rx_bh(struct lan78xx_net *dev)
2717 if (skb_queue_len(&dev->rxq) < dev->rx_qlen) {
2718 for (i = 0; i < 10; i++) {
2719 if (skb_queue_len(&dev->rxq) >= dev->rx_qlen)
2721 urb = usb_alloc_urb(0, GFP_ATOMIC);
2723 if (rx_submit(dev, urb, GFP_ATOMIC) == -ENOLINK)
2727 if (skb_queue_len(&dev->rxq) < dev->rx_qlen)
2728 tasklet_schedule(&dev->bh);
2730 if (skb_queue_len(&dev->txq) < dev->tx_qlen)
2731 netif_wake_queue(dev->net);
2734 static void lan78xx_bh(unsigned long param)
2736 struct lan78xx_net *dev = (struct lan78xx_net *)param;
2737 struct sk_buff *skb;
2738 struct skb_data *entry;
2740 while ((skb = skb_dequeue(&dev->done))) {
2741 entry = (struct skb_data *)(skb->cb);
2742 switch (entry->state) {
2744 entry->state = rx_cleanup;
2745 rx_process(dev, skb);
2748 usb_free_urb(entry->urb);
2752 usb_free_urb(entry->urb);
2756 netdev_dbg(dev->net, "skb state %d\n", entry->state);
2761 if (netif_device_present(dev->net) && netif_running(dev->net)) {
2762 if (!skb_queue_empty(&dev->txq_pend))
2765 if (!timer_pending(&dev->delay) &&
2766 !test_bit(EVENT_RX_HALT, &dev->flags))
2771 static void lan78xx_delayedwork(struct work_struct *work)
2774 struct lan78xx_net *dev;
2776 dev = container_of(work, struct lan78xx_net, wq.work);
2778 if (test_bit(EVENT_TX_HALT, &dev->flags)) {
2779 unlink_urbs(dev, &dev->txq);
2780 status = usb_autopm_get_interface(dev->intf);
2783 status = usb_clear_halt(dev->udev, dev->pipe_out);
2784 usb_autopm_put_interface(dev->intf);
2787 status != -ESHUTDOWN) {
2788 if (netif_msg_tx_err(dev))
2790 netdev_err(dev->net,
2791 "can't clear tx halt, status %d\n",
2794 clear_bit(EVENT_TX_HALT, &dev->flags);
2795 if (status != -ESHUTDOWN)
2796 netif_wake_queue(dev->net);
2799 if (test_bit(EVENT_RX_HALT, &dev->flags)) {
2800 unlink_urbs(dev, &dev->rxq);
2801 status = usb_autopm_get_interface(dev->intf);
2804 status = usb_clear_halt(dev->udev, dev->pipe_in);
2805 usb_autopm_put_interface(dev->intf);
2808 status != -ESHUTDOWN) {
2809 if (netif_msg_rx_err(dev))
2811 netdev_err(dev->net,
2812 "can't clear rx halt, status %d\n",
2815 clear_bit(EVENT_RX_HALT, &dev->flags);
2816 tasklet_schedule(&dev->bh);
2820 if (test_bit(EVENT_LINK_RESET, &dev->flags)) {
2823 clear_bit(EVENT_LINK_RESET, &dev->flags);
2824 status = usb_autopm_get_interface(dev->intf);
2827 if (lan78xx_link_reset(dev) < 0) {
2828 usb_autopm_put_interface(dev->intf);
2830 netdev_info(dev->net, "link reset failed (%d)\n",
2833 usb_autopm_put_interface(dev->intf);
2838 static void intr_complete(struct urb *urb)
2840 struct lan78xx_net *dev = urb->context;
2841 int status = urb->status;
2846 lan78xx_status(dev, urb);
2849 /* software-driven interface shutdown */
2850 case -ENOENT: /* urb killed */
2851 case -ESHUTDOWN: /* hardware gone */
2852 netif_dbg(dev, ifdown, dev->net,
2853 "intr shutdown, code %d\n", status);
2856 /* NOTE: not throttling like RX/TX, since this endpoint
2857 * already polls infrequently
2860 netdev_dbg(dev->net, "intr status %d\n", status);
2864 if (!netif_running(dev->net))
2867 memset(urb->transfer_buffer, 0, urb->transfer_buffer_length);
2868 status = usb_submit_urb(urb, GFP_ATOMIC);
2870 netif_err(dev, timer, dev->net,
2871 "intr resubmit --> %d\n", status);
2874 static void lan78xx_disconnect(struct usb_interface *intf)
2876 struct lan78xx_net *dev;
2877 struct usb_device *udev;
2878 struct net_device *net;
2880 dev = usb_get_intfdata(intf);
2881 usb_set_intfdata(intf, NULL);
2885 udev = interface_to_usbdev(intf);
2888 unregister_netdev(net);
2890 cancel_delayed_work_sync(&dev->wq);
2892 usb_scuttle_anchored_urbs(&dev->deferred);
2894 lan78xx_unbind(dev, intf);
2896 usb_kill_urb(dev->urb_intr);
2897 usb_free_urb(dev->urb_intr);
2903 void lan78xx_tx_timeout(struct net_device *net)
2905 struct lan78xx_net *dev = netdev_priv(net);
2907 unlink_urbs(dev, &dev->txq);
2908 tasklet_schedule(&dev->bh);
2911 static const struct net_device_ops lan78xx_netdev_ops = {
2912 .ndo_open = lan78xx_open,
2913 .ndo_stop = lan78xx_stop,
2914 .ndo_start_xmit = lan78xx_start_xmit,
2915 .ndo_tx_timeout = lan78xx_tx_timeout,
2916 .ndo_change_mtu = lan78xx_change_mtu,
2917 .ndo_set_mac_address = lan78xx_set_mac_addr,
2918 .ndo_validate_addr = eth_validate_addr,
2919 .ndo_do_ioctl = lan78xx_ioctl,
2920 .ndo_set_rx_mode = lan78xx_set_multicast,
2921 .ndo_set_features = lan78xx_set_features,
2922 .ndo_vlan_rx_add_vid = lan78xx_vlan_rx_add_vid,
2923 .ndo_vlan_rx_kill_vid = lan78xx_vlan_rx_kill_vid,
2926 static int lan78xx_probe(struct usb_interface *intf,
2927 const struct usb_device_id *id)
2929 struct lan78xx_net *dev;
2930 struct net_device *netdev;
2931 struct usb_device *udev;
2937 udev = interface_to_usbdev(intf);
2938 udev = usb_get_dev(udev);
2941 netdev = alloc_etherdev(sizeof(struct lan78xx_net));
2943 dev_err(&intf->dev, "Error: OOM\n");
2947 /* netdev_printk() needs this */
2948 SET_NETDEV_DEV(netdev, &intf->dev);
2950 dev = netdev_priv(netdev);
2954 dev->msg_enable = netif_msg_init(msg_level, NETIF_MSG_DRV
2955 | NETIF_MSG_PROBE | NETIF_MSG_LINK);
2957 skb_queue_head_init(&dev->rxq);
2958 skb_queue_head_init(&dev->txq);
2959 skb_queue_head_init(&dev->done);
2960 skb_queue_head_init(&dev->rxq_pause);
2961 skb_queue_head_init(&dev->txq_pend);
2962 mutex_init(&dev->phy_mutex);
2964 tasklet_init(&dev->bh, lan78xx_bh, (unsigned long)dev);
2965 INIT_DELAYED_WORK(&dev->wq, lan78xx_delayedwork);
2966 init_usb_anchor(&dev->deferred);
2968 netdev->netdev_ops = &lan78xx_netdev_ops;
2969 netdev->watchdog_timeo = TX_TIMEOUT_JIFFIES;
2970 netdev->ethtool_ops = &lan78xx_ethtool_ops;
2972 ret = lan78xx_bind(dev, intf);
2975 strcpy(netdev->name, "eth%d");
2977 if (netdev->mtu > (dev->hard_mtu - netdev->hard_header_len))
2978 netdev->mtu = dev->hard_mtu - netdev->hard_header_len;
2980 dev->ep_blkin = (intf->cur_altsetting)->endpoint + 0;
2981 dev->ep_blkout = (intf->cur_altsetting)->endpoint + 1;
2982 dev->ep_intr = (intf->cur_altsetting)->endpoint + 2;
2984 dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE);
2985 dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE);
2987 dev->pipe_intr = usb_rcvintpipe(dev->udev,
2988 dev->ep_intr->desc.bEndpointAddress &
2989 USB_ENDPOINT_NUMBER_MASK);
2990 period = dev->ep_intr->desc.bInterval;
2992 maxp = usb_maxpacket(dev->udev, dev->pipe_intr, 0);
2993 buf = kmalloc(maxp, GFP_KERNEL);
2995 dev->urb_intr = usb_alloc_urb(0, GFP_KERNEL);
2996 if (!dev->urb_intr) {
3000 usb_fill_int_urb(dev->urb_intr, dev->udev,
3001 dev->pipe_intr, buf, maxp,
3002 intr_complete, dev, period);
3006 dev->maxpacket = usb_maxpacket(dev->udev, dev->pipe_out, 1);
3008 /* driver requires remote-wakeup capability during autosuspend. */
3009 intf->needs_remote_wakeup = 1;
3011 ret = register_netdev(netdev);
3013 netif_err(dev, probe, netdev, "couldn't register the device\n");
3017 usb_set_intfdata(intf, dev);
3019 ret = device_set_wakeup_enable(&udev->dev, true);
3021 /* Default delay of 2sec has more overhead than advantage.
3022 * Set to 10sec as default.
3024 pm_runtime_set_autosuspend_delay(&udev->dev,
3025 DEFAULT_AUTOSUSPEND_DELAY);
3030 lan78xx_unbind(dev, intf);
3032 free_netdev(netdev);
3039 static u16 lan78xx_wakeframe_crc16(const u8 *buf, int len)
3041 const u16 crc16poly = 0x8005;
3047 for (i = 0; i < len; i++) {
3049 for (bit = 0; bit < 8; bit++) {
3053 if (msb ^ (u16)(data & 1)) {
3055 crc |= (u16)0x0001U;
3064 static int lan78xx_set_suspend(struct lan78xx_net *dev, u32 wol)
3072 const u8 ipv4_multicast[3] = { 0x01, 0x00, 0x5E };
3073 const u8 ipv6_multicast[3] = { 0x33, 0x33 };
3074 const u8 arp_type[2] = { 0x08, 0x06 };
3076 ret = lan78xx_read_reg(dev, MAC_TX, &buf);
3077 buf &= ~MAC_TX_TXEN_;
3078 ret = lan78xx_write_reg(dev, MAC_TX, buf);
3079 ret = lan78xx_read_reg(dev, MAC_RX, &buf);
3080 buf &= ~MAC_RX_RXEN_;
3081 ret = lan78xx_write_reg(dev, MAC_RX, buf);
3083 ret = lan78xx_write_reg(dev, WUCSR, 0);
3084 ret = lan78xx_write_reg(dev, WUCSR2, 0);
3085 ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL);
3090 ret = lan78xx_read_reg(dev, PMT_CTL, &temp_pmt_ctl);
3091 temp_pmt_ctl &= ~PMT_CTL_RES_CLR_WKP_EN_;
3092 temp_pmt_ctl |= PMT_CTL_RES_CLR_WKP_STS_;
3094 for (mask_index = 0; mask_index < NUM_OF_WUF_CFG; mask_index++)
3095 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), 0);
3098 if (wol & WAKE_PHY) {
3099 temp_pmt_ctl |= PMT_CTL_PHY_WAKE_EN_;
3101 temp_pmt_ctl |= PMT_CTL_WOL_EN_;
3102 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
3103 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
3105 if (wol & WAKE_MAGIC) {
3106 temp_wucsr |= WUCSR_MPEN_;
3108 temp_pmt_ctl |= PMT_CTL_WOL_EN_;
3109 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
3110 temp_pmt_ctl |= PMT_CTL_SUS_MODE_3_;
3112 if (wol & WAKE_BCAST) {
3113 temp_wucsr |= WUCSR_BCST_EN_;
3115 temp_pmt_ctl |= PMT_CTL_WOL_EN_;
3116 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
3117 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
3119 if (wol & WAKE_MCAST) {
3120 temp_wucsr |= WUCSR_WAKE_EN_;
3122 /* set WUF_CFG & WUF_MASK for IPv4 Multicast */
3123 crc = lan78xx_wakeframe_crc16(ipv4_multicast, 3);
3124 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index),
3126 WUF_CFGX_TYPE_MCAST_ |
3127 (0 << WUF_CFGX_OFFSET_SHIFT_) |
3128 (crc & WUF_CFGX_CRC16_MASK_));
3130 ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 7);
3131 ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0);
3132 ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0);
3133 ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0);
3136 /* for IPv6 Multicast */
3137 crc = lan78xx_wakeframe_crc16(ipv6_multicast, 2);
3138 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index),
3140 WUF_CFGX_TYPE_MCAST_ |
3141 (0 << WUF_CFGX_OFFSET_SHIFT_) |
3142 (crc & WUF_CFGX_CRC16_MASK_));
3144 ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 3);
3145 ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0);
3146 ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0);
3147 ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0);
3150 temp_pmt_ctl |= PMT_CTL_WOL_EN_;
3151 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
3152 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
3154 if (wol & WAKE_UCAST) {
3155 temp_wucsr |= WUCSR_PFDA_EN_;
3157 temp_pmt_ctl |= PMT_CTL_WOL_EN_;
3158 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
3159 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
3161 if (wol & WAKE_ARP) {
3162 temp_wucsr |= WUCSR_WAKE_EN_;
3164 /* set WUF_CFG & WUF_MASK
3165 * for packettype (offset 12,13) = ARP (0x0806)
3167 crc = lan78xx_wakeframe_crc16(arp_type, 2);
3168 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index),
3170 WUF_CFGX_TYPE_ALL_ |
3171 (0 << WUF_CFGX_OFFSET_SHIFT_) |
3172 (crc & WUF_CFGX_CRC16_MASK_));
3174 ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 0x3000);
3175 ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0);
3176 ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0);
3177 ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0);
3180 temp_pmt_ctl |= PMT_CTL_WOL_EN_;
3181 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
3182 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
3185 ret = lan78xx_write_reg(dev, WUCSR, temp_wucsr);
3187 /* when multiple WOL bits are set */
3188 if (hweight_long((unsigned long)wol) > 1) {
3189 temp_pmt_ctl |= PMT_CTL_WOL_EN_;
3190 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
3191 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
3193 ret = lan78xx_write_reg(dev, PMT_CTL, temp_pmt_ctl);
3196 ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
3197 buf |= PMT_CTL_WUPS_MASK_;
3198 ret = lan78xx_write_reg(dev, PMT_CTL, buf);
3200 ret = lan78xx_read_reg(dev, MAC_RX, &buf);
3201 buf |= MAC_RX_RXEN_;
3202 ret = lan78xx_write_reg(dev, MAC_RX, buf);
3207 int lan78xx_suspend(struct usb_interface *intf, pm_message_t message)
3209 struct lan78xx_net *dev = usb_get_intfdata(intf);
3210 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
3216 event = message.event;
3218 if (!dev->suspend_count++) {
3219 spin_lock_irq(&dev->txq.lock);
3220 /* don't autosuspend while transmitting */
3221 if ((skb_queue_len(&dev->txq) ||
3222 skb_queue_len(&dev->txq_pend)) &&
3223 PMSG_IS_AUTO(message)) {
3224 spin_unlock_irq(&dev->txq.lock);
3228 set_bit(EVENT_DEV_ASLEEP, &dev->flags);
3229 spin_unlock_irq(&dev->txq.lock);
3233 ret = lan78xx_read_reg(dev, MAC_TX, &buf);
3234 buf &= ~MAC_TX_TXEN_;
3235 ret = lan78xx_write_reg(dev, MAC_TX, buf);
3236 ret = lan78xx_read_reg(dev, MAC_RX, &buf);
3237 buf &= ~MAC_RX_RXEN_;
3238 ret = lan78xx_write_reg(dev, MAC_RX, buf);
3240 /* empty out the rx and queues */
3241 netif_device_detach(dev->net);
3242 lan78xx_terminate_urbs(dev);
3243 usb_kill_urb(dev->urb_intr);
3246 netif_device_attach(dev->net);
3249 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) {
3250 if (PMSG_IS_AUTO(message)) {
3251 /* auto suspend (selective suspend) */
3252 ret = lan78xx_read_reg(dev, MAC_TX, &buf);
3253 buf &= ~MAC_TX_TXEN_;
3254 ret = lan78xx_write_reg(dev, MAC_TX, buf);
3255 ret = lan78xx_read_reg(dev, MAC_RX, &buf);
3256 buf &= ~MAC_RX_RXEN_;
3257 ret = lan78xx_write_reg(dev, MAC_RX, buf);
3259 ret = lan78xx_write_reg(dev, WUCSR, 0);
3260 ret = lan78xx_write_reg(dev, WUCSR2, 0);
3261 ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL);
3263 /* set goodframe wakeup */
3264 ret = lan78xx_read_reg(dev, WUCSR, &buf);
3266 buf |= WUCSR_RFE_WAKE_EN_;
3267 buf |= WUCSR_STORE_WAKE_;
3269 ret = lan78xx_write_reg(dev, WUCSR, buf);
3271 ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
3273 buf &= ~PMT_CTL_RES_CLR_WKP_EN_;
3274 buf |= PMT_CTL_RES_CLR_WKP_STS_;
3276 buf |= PMT_CTL_PHY_WAKE_EN_;
3277 buf |= PMT_CTL_WOL_EN_;
3278 buf &= ~PMT_CTL_SUS_MODE_MASK_;
3279 buf |= PMT_CTL_SUS_MODE_3_;
3281 ret = lan78xx_write_reg(dev, PMT_CTL, buf);
3283 ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
3285 buf |= PMT_CTL_WUPS_MASK_;
3287 ret = lan78xx_write_reg(dev, PMT_CTL, buf);
3289 ret = lan78xx_read_reg(dev, MAC_RX, &buf);
3290 buf |= MAC_RX_RXEN_;
3291 ret = lan78xx_write_reg(dev, MAC_RX, buf);
3293 lan78xx_set_suspend(dev, pdata->wol);
3301 int lan78xx_resume(struct usb_interface *intf)
3303 struct lan78xx_net *dev = usb_get_intfdata(intf);
3304 struct sk_buff *skb;
3309 if (!--dev->suspend_count) {
3310 /* resume interrupt URBs */
3311 if (dev->urb_intr && test_bit(EVENT_DEV_OPEN, &dev->flags))
3312 usb_submit_urb(dev->urb_intr, GFP_NOIO);
3314 spin_lock_irq(&dev->txq.lock);
3315 while ((res = usb_get_from_anchor(&dev->deferred))) {
3316 skb = (struct sk_buff *)res->context;
3317 ret = usb_submit_urb(res, GFP_ATOMIC);
3319 dev_kfree_skb_any(skb);
3321 usb_autopm_put_interface_async(dev->intf);
3323 dev->net->trans_start = jiffies;
3324 lan78xx_queue_skb(&dev->txq, skb, tx_start);
3328 clear_bit(EVENT_DEV_ASLEEP, &dev->flags);
3329 spin_unlock_irq(&dev->txq.lock);
3331 if (test_bit(EVENT_DEV_OPEN, &dev->flags)) {
3332 if (!(skb_queue_len(&dev->txq) >= dev->tx_qlen))
3333 netif_start_queue(dev->net);
3334 tasklet_schedule(&dev->bh);
3338 ret = lan78xx_write_reg(dev, WUCSR2, 0);
3339 ret = lan78xx_write_reg(dev, WUCSR, 0);
3340 ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL);
3342 ret = lan78xx_write_reg(dev, WUCSR2, WUCSR2_NS_RCD_ |
3344 WUCSR2_IPV6_TCPSYN_RCD_ |
3345 WUCSR2_IPV4_TCPSYN_RCD_);
3347 ret = lan78xx_write_reg(dev, WUCSR, WUCSR_EEE_TX_WAKE_ |
3348 WUCSR_EEE_RX_WAKE_ |
3350 WUCSR_RFE_WAKE_FR_ |
3355 ret = lan78xx_read_reg(dev, MAC_TX, &buf);
3356 buf |= MAC_TX_TXEN_;
3357 ret = lan78xx_write_reg(dev, MAC_TX, buf);
3362 int lan78xx_reset_resume(struct usb_interface *intf)
3364 struct lan78xx_net *dev = usb_get_intfdata(intf);
3368 lan78xx_phy_init(dev);
3370 return lan78xx_resume(intf);
3373 static const struct usb_device_id products[] = {
3375 /* LAN7800 USB Gigabit Ethernet Device */
3376 USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7800_USB_PRODUCT_ID),
3379 /* LAN7850 USB Gigabit Ethernet Device */
3380 USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7850_USB_PRODUCT_ID),
3384 MODULE_DEVICE_TABLE(usb, products);
3386 static struct usb_driver lan78xx_driver = {
3387 .name = DRIVER_NAME,
3388 .id_table = products,
3389 .probe = lan78xx_probe,
3390 .disconnect = lan78xx_disconnect,
3391 .suspend = lan78xx_suspend,
3392 .resume = lan78xx_resume,
3393 .reset_resume = lan78xx_reset_resume,
3394 .supports_autosuspend = 1,
3395 .disable_hub_initiated_lpm = 1,
3398 module_usb_driver(lan78xx_driver);
3400 MODULE_AUTHOR(DRIVER_AUTHOR);
3401 MODULE_DESCRIPTION(DRIVER_DESC);
3402 MODULE_LICENSE("GPL");