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_settings(struct net_device *net, struct ethtool_cmd *cmd)
1180 struct lan78xx_net *dev = netdev_priv(net);
1181 struct phy_device *phydev = net->phydev;
1185 ret = usb_autopm_get_interface(dev->intf);
1189 ret = phy_ethtool_gset(phydev, cmd);
1191 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS, LAN88XX_EXT_PAGE_SPACE_1);
1192 buf = phy_read(phydev, LAN88XX_EXT_MODE_CTRL);
1193 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS, LAN88XX_EXT_PAGE_SPACE_0);
1195 buf &= LAN88XX_EXT_MODE_CTRL_MDIX_MASK_;
1196 if (buf == LAN88XX_EXT_MODE_CTRL_AUTO_MDIX_) {
1197 cmd->eth_tp_mdix = ETH_TP_MDI_AUTO;
1198 cmd->eth_tp_mdix_ctrl = ETH_TP_MDI_AUTO;
1199 } else if (buf == LAN88XX_EXT_MODE_CTRL_MDI_) {
1200 cmd->eth_tp_mdix = ETH_TP_MDI;
1201 cmd->eth_tp_mdix_ctrl = ETH_TP_MDI;
1202 } else if (buf == LAN88XX_EXT_MODE_CTRL_MDI_X_) {
1203 cmd->eth_tp_mdix = ETH_TP_MDI_X;
1204 cmd->eth_tp_mdix_ctrl = ETH_TP_MDI_X;
1207 usb_autopm_put_interface(dev->intf);
1212 static int lan78xx_set_settings(struct net_device *net, struct ethtool_cmd *cmd)
1214 struct lan78xx_net *dev = netdev_priv(net);
1215 struct phy_device *phydev = net->phydev;
1219 ret = usb_autopm_get_interface(dev->intf);
1223 if (dev->mdix_ctrl != cmd->eth_tp_mdix_ctrl) {
1224 if (cmd->eth_tp_mdix_ctrl == ETH_TP_MDI) {
1225 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
1226 LAN88XX_EXT_PAGE_SPACE_1);
1227 temp = phy_read(phydev, LAN88XX_EXT_MODE_CTRL);
1228 temp &= ~LAN88XX_EXT_MODE_CTRL_MDIX_MASK_;
1229 phy_write(phydev, LAN88XX_EXT_MODE_CTRL,
1230 temp | LAN88XX_EXT_MODE_CTRL_MDI_);
1231 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
1232 LAN88XX_EXT_PAGE_SPACE_0);
1233 } else if (cmd->eth_tp_mdix_ctrl == ETH_TP_MDI_X) {
1234 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
1235 LAN88XX_EXT_PAGE_SPACE_1);
1236 temp = phy_read(phydev, LAN88XX_EXT_MODE_CTRL);
1237 temp &= ~LAN88XX_EXT_MODE_CTRL_MDIX_MASK_;
1238 phy_write(phydev, LAN88XX_EXT_MODE_CTRL,
1239 temp | LAN88XX_EXT_MODE_CTRL_MDI_X_);
1240 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
1241 LAN88XX_EXT_PAGE_SPACE_0);
1242 } else if (cmd->eth_tp_mdix_ctrl == ETH_TP_MDI_AUTO) {
1243 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
1244 LAN88XX_EXT_PAGE_SPACE_1);
1245 temp = phy_read(phydev, LAN88XX_EXT_MODE_CTRL);
1246 temp &= ~LAN88XX_EXT_MODE_CTRL_MDIX_MASK_;
1247 phy_write(phydev, LAN88XX_EXT_MODE_CTRL,
1248 temp | LAN88XX_EXT_MODE_CTRL_AUTO_MDIX_);
1249 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS,
1250 LAN88XX_EXT_PAGE_SPACE_0);
1254 /* change speed & duplex */
1255 ret = phy_ethtool_sset(phydev, cmd);
1257 if (!cmd->autoneg) {
1258 /* force link down */
1259 temp = phy_read(phydev, MII_BMCR);
1260 phy_write(phydev, MII_BMCR, temp | BMCR_LOOPBACK);
1262 phy_write(phydev, MII_BMCR, temp);
1265 usb_autopm_put_interface(dev->intf);
1270 static const struct ethtool_ops lan78xx_ethtool_ops = {
1271 .get_link = lan78xx_get_link,
1272 .nway_reset = lan78xx_nway_reset,
1273 .get_drvinfo = lan78xx_get_drvinfo,
1274 .get_msglevel = lan78xx_get_msglevel,
1275 .set_msglevel = lan78xx_set_msglevel,
1276 .get_settings = lan78xx_get_settings,
1277 .set_settings = lan78xx_set_settings,
1278 .get_eeprom_len = lan78xx_ethtool_get_eeprom_len,
1279 .get_eeprom = lan78xx_ethtool_get_eeprom,
1280 .set_eeprom = lan78xx_ethtool_set_eeprom,
1281 .get_ethtool_stats = lan78xx_get_stats,
1282 .get_sset_count = lan78xx_get_sset_count,
1283 .get_strings = lan78xx_get_strings,
1284 .get_wol = lan78xx_get_wol,
1285 .set_wol = lan78xx_set_wol,
1286 .get_eee = lan78xx_get_eee,
1287 .set_eee = lan78xx_set_eee,
1290 static int lan78xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd)
1292 if (!netif_running(netdev))
1295 return phy_mii_ioctl(netdev->phydev, rq, cmd);
1298 static void lan78xx_init_mac_address(struct lan78xx_net *dev)
1300 u32 addr_lo, addr_hi;
1304 ret = lan78xx_read_reg(dev, RX_ADDRL, &addr_lo);
1305 ret = lan78xx_read_reg(dev, RX_ADDRH, &addr_hi);
1307 addr[0] = addr_lo & 0xFF;
1308 addr[1] = (addr_lo >> 8) & 0xFF;
1309 addr[2] = (addr_lo >> 16) & 0xFF;
1310 addr[3] = (addr_lo >> 24) & 0xFF;
1311 addr[4] = addr_hi & 0xFF;
1312 addr[5] = (addr_hi >> 8) & 0xFF;
1314 if (!is_valid_ether_addr(addr)) {
1315 /* reading mac address from EEPROM or OTP */
1316 if ((lan78xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN,
1318 (lan78xx_read_otp(dev, EEPROM_MAC_OFFSET, ETH_ALEN,
1320 if (is_valid_ether_addr(addr)) {
1321 /* eeprom values are valid so use them */
1322 netif_dbg(dev, ifup, dev->net,
1323 "MAC address read from EEPROM");
1325 /* generate random MAC */
1326 random_ether_addr(addr);
1327 netif_dbg(dev, ifup, dev->net,
1328 "MAC address set to random addr");
1331 addr_lo = addr[0] | (addr[1] << 8) |
1332 (addr[2] << 16) | (addr[3] << 24);
1333 addr_hi = addr[4] | (addr[5] << 8);
1335 ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo);
1336 ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi);
1338 /* generate random MAC */
1339 random_ether_addr(addr);
1340 netif_dbg(dev, ifup, dev->net,
1341 "MAC address set to random addr");
1345 ret = lan78xx_write_reg(dev, MAF_LO(0), addr_lo);
1346 ret = lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_);
1348 ether_addr_copy(dev->net->dev_addr, addr);
1351 /* MDIO read and write wrappers for phylib */
1352 static int lan78xx_mdiobus_read(struct mii_bus *bus, int phy_id, int idx)
1354 struct lan78xx_net *dev = bus->priv;
1358 ret = usb_autopm_get_interface(dev->intf);
1362 mutex_lock(&dev->phy_mutex);
1364 /* confirm MII not busy */
1365 ret = lan78xx_phy_wait_not_busy(dev);
1369 /* set the address, index & direction (read from PHY) */
1370 addr = mii_access(phy_id, idx, MII_READ);
1371 ret = lan78xx_write_reg(dev, MII_ACC, addr);
1373 ret = lan78xx_phy_wait_not_busy(dev);
1377 ret = lan78xx_read_reg(dev, MII_DATA, &val);
1379 ret = (int)(val & 0xFFFF);
1382 mutex_unlock(&dev->phy_mutex);
1383 usb_autopm_put_interface(dev->intf);
1387 static int lan78xx_mdiobus_write(struct mii_bus *bus, int phy_id, int idx,
1390 struct lan78xx_net *dev = bus->priv;
1394 ret = usb_autopm_get_interface(dev->intf);
1398 mutex_lock(&dev->phy_mutex);
1400 /* confirm MII not busy */
1401 ret = lan78xx_phy_wait_not_busy(dev);
1406 ret = lan78xx_write_reg(dev, MII_DATA, val);
1408 /* set the address, index & direction (write to PHY) */
1409 addr = mii_access(phy_id, idx, MII_WRITE);
1410 ret = lan78xx_write_reg(dev, MII_ACC, addr);
1412 ret = lan78xx_phy_wait_not_busy(dev);
1417 mutex_unlock(&dev->phy_mutex);
1418 usb_autopm_put_interface(dev->intf);
1422 static int lan78xx_mdio_init(struct lan78xx_net *dev)
1427 dev->mdiobus = mdiobus_alloc();
1428 if (!dev->mdiobus) {
1429 netdev_err(dev->net, "can't allocate MDIO bus\n");
1433 dev->mdiobus->priv = (void *)dev;
1434 dev->mdiobus->read = lan78xx_mdiobus_read;
1435 dev->mdiobus->write = lan78xx_mdiobus_write;
1436 dev->mdiobus->name = "lan78xx-mdiobus";
1438 snprintf(dev->mdiobus->id, MII_BUS_ID_SIZE, "usb-%03d:%03d",
1439 dev->udev->bus->busnum, dev->udev->devnum);
1441 dev->mdiobus->irq = kzalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
1442 if (!dev->mdiobus->irq) {
1447 /* handle our own interrupt */
1448 for (i = 0; i < PHY_MAX_ADDR; i++)
1449 dev->mdiobus->irq[i] = PHY_IGNORE_INTERRUPT;
1451 switch (dev->devid & ID_REV_CHIP_ID_MASK_) {
1454 /* set to internal PHY id */
1455 dev->mdiobus->phy_mask = ~(1 << 1);
1459 ret = mdiobus_register(dev->mdiobus);
1461 netdev_err(dev->net, "can't register MDIO bus\n");
1465 netdev_dbg(dev->net, "registered mdiobus bus %s\n", dev->mdiobus->id);
1468 kfree(dev->mdiobus->irq);
1470 mdiobus_free(dev->mdiobus);
1474 static void lan78xx_remove_mdio(struct lan78xx_net *dev)
1476 mdiobus_unregister(dev->mdiobus);
1477 kfree(dev->mdiobus->irq);
1478 mdiobus_free(dev->mdiobus);
1481 static void lan78xx_link_status_change(struct net_device *net)
1486 static int lan78xx_phy_init(struct lan78xx_net *dev)
1489 struct phy_device *phydev = dev->net->phydev;
1491 phydev = phy_find_first(dev->mdiobus);
1493 netdev_err(dev->net, "no PHY found\n");
1497 ret = phy_connect_direct(dev->net, phydev,
1498 lan78xx_link_status_change,
1499 PHY_INTERFACE_MODE_GMII);
1501 netdev_err(dev->net, "can't attach PHY to %s\n",
1506 /* set to AUTOMDIX */
1507 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS, LAN88XX_EXT_PAGE_SPACE_1);
1508 ret = phy_read(phydev, LAN88XX_EXT_MODE_CTRL);
1509 ret &= ~LAN88XX_EXT_MODE_CTRL_MDIX_MASK_;
1510 phy_write(phydev, LAN88XX_EXT_MODE_CTRL,
1511 ret | LAN88XX_EXT_MODE_CTRL_AUTO_MDIX_);
1512 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS, LAN88XX_EXT_PAGE_SPACE_0);
1513 dev->mdix_ctrl = ETH_TP_MDI_AUTO;
1515 /* MAC doesn't support 1000T Half */
1516 phydev->supported &= ~SUPPORTED_1000baseT_Half;
1517 phydev->supported |= (SUPPORTED_10baseT_Half |
1518 SUPPORTED_10baseT_Full |
1519 SUPPORTED_100baseT_Half |
1520 SUPPORTED_100baseT_Full |
1521 SUPPORTED_1000baseT_Full |
1522 SUPPORTED_Pause | SUPPORTED_Asym_Pause);
1523 genphy_config_aneg(phydev);
1525 /* Workaround to enable PHY interrupt.
1526 * phy_start_interrupts() is API for requesting and enabling
1527 * PHY interrupt. However, USB-to-Ethernet device can't use
1528 * request_irq() called in phy_start_interrupts().
1529 * Set PHY to PHY_HALTED and call phy_start()
1530 * to make a call to phy_enable_interrupts()
1535 netif_dbg(dev, ifup, dev->net, "phy initialised successfully");
1540 static int lan78xx_set_rx_max_frame_length(struct lan78xx_net *dev, int size)
1546 ret = lan78xx_read_reg(dev, MAC_RX, &buf);
1548 rxenabled = ((buf & MAC_RX_RXEN_) != 0);
1551 buf &= ~MAC_RX_RXEN_;
1552 ret = lan78xx_write_reg(dev, MAC_RX, buf);
1555 /* add 4 to size for FCS */
1556 buf &= ~MAC_RX_MAX_SIZE_MASK_;
1557 buf |= (((size + 4) << MAC_RX_MAX_SIZE_SHIFT_) & MAC_RX_MAX_SIZE_MASK_);
1559 ret = lan78xx_write_reg(dev, MAC_RX, buf);
1562 buf |= MAC_RX_RXEN_;
1563 ret = lan78xx_write_reg(dev, MAC_RX, buf);
1569 static int unlink_urbs(struct lan78xx_net *dev, struct sk_buff_head *q)
1571 struct sk_buff *skb;
1572 unsigned long flags;
1575 spin_lock_irqsave(&q->lock, flags);
1576 while (!skb_queue_empty(q)) {
1577 struct skb_data *entry;
1581 skb_queue_walk(q, skb) {
1582 entry = (struct skb_data *)skb->cb;
1583 if (entry->state != unlink_start)
1588 entry->state = unlink_start;
1591 /* Get reference count of the URB to avoid it to be
1592 * freed during usb_unlink_urb, which may trigger
1593 * use-after-free problem inside usb_unlink_urb since
1594 * usb_unlink_urb is always racing with .complete
1595 * handler(include defer_bh).
1598 spin_unlock_irqrestore(&q->lock, flags);
1599 /* during some PM-driven resume scenarios,
1600 * these (async) unlinks complete immediately
1602 ret = usb_unlink_urb(urb);
1603 if (ret != -EINPROGRESS && ret != 0)
1604 netdev_dbg(dev->net, "unlink urb err, %d\n", ret);
1608 spin_lock_irqsave(&q->lock, flags);
1610 spin_unlock_irqrestore(&q->lock, flags);
1614 static int lan78xx_change_mtu(struct net_device *netdev, int new_mtu)
1616 struct lan78xx_net *dev = netdev_priv(netdev);
1617 int ll_mtu = new_mtu + netdev->hard_header_len;
1618 int old_hard_mtu = dev->hard_mtu;
1619 int old_rx_urb_size = dev->rx_urb_size;
1622 if (new_mtu > MAX_SINGLE_PACKET_SIZE)
1627 /* no second zero-length packet read wanted after mtu-sized packets */
1628 if ((ll_mtu % dev->maxpacket) == 0)
1631 ret = lan78xx_set_rx_max_frame_length(dev, new_mtu + ETH_HLEN);
1633 netdev->mtu = new_mtu;
1635 dev->hard_mtu = netdev->mtu + netdev->hard_header_len;
1636 if (dev->rx_urb_size == old_hard_mtu) {
1637 dev->rx_urb_size = dev->hard_mtu;
1638 if (dev->rx_urb_size > old_rx_urb_size) {
1639 if (netif_running(dev->net)) {
1640 unlink_urbs(dev, &dev->rxq);
1641 tasklet_schedule(&dev->bh);
1649 int lan78xx_set_mac_addr(struct net_device *netdev, void *p)
1651 struct lan78xx_net *dev = netdev_priv(netdev);
1652 struct sockaddr *addr = p;
1653 u32 addr_lo, addr_hi;
1656 if (netif_running(netdev))
1659 if (!is_valid_ether_addr(addr->sa_data))
1660 return -EADDRNOTAVAIL;
1662 ether_addr_copy(netdev->dev_addr, addr->sa_data);
1664 addr_lo = netdev->dev_addr[0] |
1665 netdev->dev_addr[1] << 8 |
1666 netdev->dev_addr[2] << 16 |
1667 netdev->dev_addr[3] << 24;
1668 addr_hi = netdev->dev_addr[4] |
1669 netdev->dev_addr[5] << 8;
1671 ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo);
1672 ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi);
1677 /* Enable or disable Rx checksum offload engine */
1678 static int lan78xx_set_features(struct net_device *netdev,
1679 netdev_features_t features)
1681 struct lan78xx_net *dev = netdev_priv(netdev);
1682 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
1683 unsigned long flags;
1686 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags);
1688 if (features & NETIF_F_RXCSUM) {
1689 pdata->rfe_ctl |= RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_;
1690 pdata->rfe_ctl |= RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_;
1692 pdata->rfe_ctl &= ~(RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_);
1693 pdata->rfe_ctl &= ~(RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_);
1696 if (features & NETIF_F_HW_VLAN_CTAG_RX)
1697 pdata->rfe_ctl |= RFE_CTL_VLAN_FILTER_;
1699 pdata->rfe_ctl &= ~RFE_CTL_VLAN_FILTER_;
1701 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags);
1703 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl);
1708 static void lan78xx_deferred_vlan_write(struct work_struct *param)
1710 struct lan78xx_priv *pdata =
1711 container_of(param, struct lan78xx_priv, set_vlan);
1712 struct lan78xx_net *dev = pdata->dev;
1714 lan78xx_dataport_write(dev, DP_SEL_RSEL_VLAN_DA_, 0,
1715 DP_SEL_VHF_VLAN_LEN, pdata->vlan_table);
1718 static int lan78xx_vlan_rx_add_vid(struct net_device *netdev,
1719 __be16 proto, u16 vid)
1721 struct lan78xx_net *dev = netdev_priv(netdev);
1722 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
1724 u16 vid_dword_index;
1726 vid_dword_index = (vid >> 5) & 0x7F;
1727 vid_bit_index = vid & 0x1F;
1729 pdata->vlan_table[vid_dword_index] |= (1 << vid_bit_index);
1731 /* defer register writes to a sleepable context */
1732 schedule_work(&pdata->set_vlan);
1737 static int lan78xx_vlan_rx_kill_vid(struct net_device *netdev,
1738 __be16 proto, u16 vid)
1740 struct lan78xx_net *dev = netdev_priv(netdev);
1741 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
1743 u16 vid_dword_index;
1745 vid_dword_index = (vid >> 5) & 0x7F;
1746 vid_bit_index = vid & 0x1F;
1748 pdata->vlan_table[vid_dword_index] &= ~(1 << vid_bit_index);
1750 /* defer register writes to a sleepable context */
1751 schedule_work(&pdata->set_vlan);
1756 static void lan78xx_init_ltm(struct lan78xx_net *dev)
1760 u32 regs[6] = { 0 };
1762 ret = lan78xx_read_reg(dev, USB_CFG1, &buf);
1763 if (buf & USB_CFG1_LTM_ENABLE_) {
1765 /* Get values from EEPROM first */
1766 if (lan78xx_read_eeprom(dev, 0x3F, 2, temp) == 0) {
1767 if (temp[0] == 24) {
1768 ret = lan78xx_read_raw_eeprom(dev,
1775 } else if (lan78xx_read_otp(dev, 0x3F, 2, temp) == 0) {
1776 if (temp[0] == 24) {
1777 ret = lan78xx_read_raw_otp(dev,
1787 lan78xx_write_reg(dev, LTM_BELT_IDLE0, regs[0]);
1788 lan78xx_write_reg(dev, LTM_BELT_IDLE1, regs[1]);
1789 lan78xx_write_reg(dev, LTM_BELT_ACT0, regs[2]);
1790 lan78xx_write_reg(dev, LTM_BELT_ACT1, regs[3]);
1791 lan78xx_write_reg(dev, LTM_INACTIVE0, regs[4]);
1792 lan78xx_write_reg(dev, LTM_INACTIVE1, regs[5]);
1795 static int lan78xx_reset(struct lan78xx_net *dev)
1797 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
1800 unsigned long timeout;
1802 ret = lan78xx_read_reg(dev, HW_CFG, &buf);
1803 buf |= HW_CFG_LRST_;
1804 ret = lan78xx_write_reg(dev, HW_CFG, buf);
1806 timeout = jiffies + HZ;
1809 ret = lan78xx_read_reg(dev, HW_CFG, &buf);
1810 if (time_after(jiffies, timeout)) {
1811 netdev_warn(dev->net,
1812 "timeout on completion of LiteReset");
1815 } while (buf & HW_CFG_LRST_);
1817 lan78xx_init_mac_address(dev);
1819 /* save DEVID for later usage */
1820 ret = lan78xx_read_reg(dev, ID_REV, &buf);
1823 /* Respond to the IN token with a NAK */
1824 ret = lan78xx_read_reg(dev, USB_CFG0, &buf);
1825 buf |= USB_CFG_BIR_;
1826 ret = lan78xx_write_reg(dev, USB_CFG0, buf);
1829 lan78xx_init_ltm(dev);
1831 dev->net->hard_header_len += TX_OVERHEAD;
1832 dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len;
1834 if (dev->udev->speed == USB_SPEED_SUPER) {
1835 buf = DEFAULT_BURST_CAP_SIZE / SS_USB_PKT_SIZE;
1836 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE;
1839 } else if (dev->udev->speed == USB_SPEED_HIGH) {
1840 buf = DEFAULT_BURST_CAP_SIZE / HS_USB_PKT_SIZE;
1841 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE;
1842 dev->rx_qlen = RX_MAX_QUEUE_MEMORY / dev->rx_urb_size;
1843 dev->tx_qlen = RX_MAX_QUEUE_MEMORY / dev->hard_mtu;
1845 buf = DEFAULT_BURST_CAP_SIZE / FS_USB_PKT_SIZE;
1846 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE;
1850 ret = lan78xx_write_reg(dev, BURST_CAP, buf);
1851 ret = lan78xx_write_reg(dev, BULK_IN_DLY, DEFAULT_BULK_IN_DELAY);
1853 ret = lan78xx_read_reg(dev, HW_CFG, &buf);
1855 ret = lan78xx_write_reg(dev, HW_CFG, buf);
1857 ret = lan78xx_read_reg(dev, USB_CFG0, &buf);
1858 buf |= USB_CFG_BCE_;
1859 ret = lan78xx_write_reg(dev, USB_CFG0, buf);
1861 /* set FIFO sizes */
1862 buf = (MAX_RX_FIFO_SIZE - 512) / 512;
1863 ret = lan78xx_write_reg(dev, FCT_RX_FIFO_END, buf);
1865 buf = (MAX_TX_FIFO_SIZE - 512) / 512;
1866 ret = lan78xx_write_reg(dev, FCT_TX_FIFO_END, buf);
1868 ret = lan78xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_);
1869 ret = lan78xx_write_reg(dev, FLOW, 0);
1870 ret = lan78xx_write_reg(dev, FCT_FLOW, 0);
1872 /* Don't need rfe_ctl_lock during initialisation */
1873 ret = lan78xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl);
1874 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_ | RFE_CTL_DA_PERFECT_;
1875 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl);
1877 /* Enable or disable checksum offload engines */
1878 lan78xx_set_features(dev->net, dev->net->features);
1880 lan78xx_set_multicast(dev->net);
1883 ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
1884 buf |= PMT_CTL_PHY_RST_;
1885 ret = lan78xx_write_reg(dev, PMT_CTL, buf);
1887 timeout = jiffies + HZ;
1890 ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
1891 if (time_after(jiffies, timeout)) {
1892 netdev_warn(dev->net, "timeout waiting for PHY Reset");
1895 } while ((buf & PMT_CTL_PHY_RST_) || !(buf & PMT_CTL_READY_));
1897 ret = lan78xx_read_reg(dev, MAC_CR, &buf);
1899 buf |= MAC_CR_GMII_EN_;
1900 buf |= MAC_CR_AUTO_DUPLEX_ | MAC_CR_AUTO_SPEED_;
1902 ret = lan78xx_write_reg(dev, MAC_CR, buf);
1904 /* enable PHY interrupts */
1905 ret = lan78xx_read_reg(dev, INT_EP_CTL, &buf);
1906 buf |= INT_ENP_PHY_INT;
1907 ret = lan78xx_write_reg(dev, INT_EP_CTL, buf);
1909 ret = lan78xx_read_reg(dev, MAC_TX, &buf);
1910 buf |= MAC_TX_TXEN_;
1911 ret = lan78xx_write_reg(dev, MAC_TX, buf);
1913 ret = lan78xx_read_reg(dev, FCT_TX_CTL, &buf);
1914 buf |= FCT_TX_CTL_EN_;
1915 ret = lan78xx_write_reg(dev, FCT_TX_CTL, buf);
1917 ret = lan78xx_set_rx_max_frame_length(dev, dev->net->mtu + ETH_HLEN);
1919 ret = lan78xx_read_reg(dev, MAC_RX, &buf);
1920 buf |= MAC_RX_RXEN_;
1921 ret = lan78xx_write_reg(dev, MAC_RX, buf);
1923 ret = lan78xx_read_reg(dev, FCT_RX_CTL, &buf);
1924 buf |= FCT_RX_CTL_EN_;
1925 ret = lan78xx_write_reg(dev, FCT_RX_CTL, buf);
1930 static int lan78xx_open(struct net_device *net)
1932 struct lan78xx_net *dev = netdev_priv(net);
1935 ret = usb_autopm_get_interface(dev->intf);
1939 ret = lan78xx_reset(dev);
1943 ret = lan78xx_phy_init(dev);
1947 /* for Link Check */
1948 if (dev->urb_intr) {
1949 ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL);
1951 netif_err(dev, ifup, dev->net,
1952 "intr submit %d\n", ret);
1957 set_bit(EVENT_DEV_OPEN, &dev->flags);
1959 netif_start_queue(net);
1961 dev->link_on = false;
1963 lan78xx_defer_kevent(dev, EVENT_LINK_RESET);
1965 usb_autopm_put_interface(dev->intf);
1971 static void lan78xx_terminate_urbs(struct lan78xx_net *dev)
1973 DECLARE_WAIT_QUEUE_HEAD_ONSTACK(unlink_wakeup);
1974 DECLARE_WAITQUEUE(wait, current);
1977 /* ensure there are no more active urbs */
1978 add_wait_queue(&unlink_wakeup, &wait);
1979 set_current_state(TASK_UNINTERRUPTIBLE);
1980 dev->wait = &unlink_wakeup;
1981 temp = unlink_urbs(dev, &dev->txq) + unlink_urbs(dev, &dev->rxq);
1983 /* maybe wait for deletions to finish. */
1984 while (!skb_queue_empty(&dev->rxq) &&
1985 !skb_queue_empty(&dev->txq) &&
1986 !skb_queue_empty(&dev->done)) {
1987 schedule_timeout(msecs_to_jiffies(UNLINK_TIMEOUT_MS));
1988 set_current_state(TASK_UNINTERRUPTIBLE);
1989 netif_dbg(dev, ifdown, dev->net,
1990 "waited for %d urb completions\n", temp);
1992 set_current_state(TASK_RUNNING);
1994 remove_wait_queue(&unlink_wakeup, &wait);
1997 int lan78xx_stop(struct net_device *net)
1999 struct lan78xx_net *dev = netdev_priv(net);
2001 phy_stop(net->phydev);
2002 phy_disconnect(net->phydev);
2005 clear_bit(EVENT_DEV_OPEN, &dev->flags);
2006 netif_stop_queue(net);
2008 netif_info(dev, ifdown, dev->net,
2009 "stop stats: rx/tx %lu/%lu, errs %lu/%lu\n",
2010 net->stats.rx_packets, net->stats.tx_packets,
2011 net->stats.rx_errors, net->stats.tx_errors);
2013 lan78xx_terminate_urbs(dev);
2015 usb_kill_urb(dev->urb_intr);
2017 skb_queue_purge(&dev->rxq_pause);
2019 /* deferred work (task, timer, softirq) must also stop.
2020 * can't flush_scheduled_work() until we drop rtnl (later),
2021 * else workers could deadlock; so make workers a NOP.
2024 cancel_delayed_work_sync(&dev->wq);
2025 tasklet_kill(&dev->bh);
2027 usb_autopm_put_interface(dev->intf);
2032 static int lan78xx_linearize(struct sk_buff *skb)
2034 return skb_linearize(skb);
2037 static struct sk_buff *lan78xx_tx_prep(struct lan78xx_net *dev,
2038 struct sk_buff *skb, gfp_t flags)
2040 u32 tx_cmd_a, tx_cmd_b;
2042 if (skb_headroom(skb) < TX_OVERHEAD) {
2043 struct sk_buff *skb2;
2045 skb2 = skb_copy_expand(skb, TX_OVERHEAD, 0, flags);
2046 dev_kfree_skb_any(skb);
2052 if (lan78xx_linearize(skb) < 0)
2055 tx_cmd_a = (u32)(skb->len & TX_CMD_A_LEN_MASK_) | TX_CMD_A_FCS_;
2057 if (skb->ip_summed == CHECKSUM_PARTIAL)
2058 tx_cmd_a |= TX_CMD_A_IPE_ | TX_CMD_A_TPE_;
2061 if (skb_is_gso(skb)) {
2062 u16 mss = max(skb_shinfo(skb)->gso_size, TX_CMD_B_MSS_MIN_);
2064 tx_cmd_b = (mss << TX_CMD_B_MSS_SHIFT_) & TX_CMD_B_MSS_MASK_;
2066 tx_cmd_a |= TX_CMD_A_LSO_;
2069 if (skb_vlan_tag_present(skb)) {
2070 tx_cmd_a |= TX_CMD_A_IVTG_;
2071 tx_cmd_b |= skb_vlan_tag_get(skb) & TX_CMD_B_VTAG_MASK_;
2075 cpu_to_le32s(&tx_cmd_b);
2076 memcpy(skb->data, &tx_cmd_b, 4);
2079 cpu_to_le32s(&tx_cmd_a);
2080 memcpy(skb->data, &tx_cmd_a, 4);
2085 static enum skb_state defer_bh(struct lan78xx_net *dev, struct sk_buff *skb,
2086 struct sk_buff_head *list, enum skb_state state)
2088 unsigned long flags;
2089 enum skb_state old_state;
2090 struct skb_data *entry = (struct skb_data *)skb->cb;
2092 spin_lock_irqsave(&list->lock, flags);
2093 old_state = entry->state;
2094 entry->state = state;
2096 __skb_unlink(skb, list);
2097 spin_unlock(&list->lock);
2098 spin_lock(&dev->done.lock);
2100 __skb_queue_tail(&dev->done, skb);
2101 if (skb_queue_len(&dev->done) == 1)
2102 tasklet_schedule(&dev->bh);
2103 spin_unlock_irqrestore(&dev->done.lock, flags);
2108 static void tx_complete(struct urb *urb)
2110 struct sk_buff *skb = (struct sk_buff *)urb->context;
2111 struct skb_data *entry = (struct skb_data *)skb->cb;
2112 struct lan78xx_net *dev = entry->dev;
2114 if (urb->status == 0) {
2115 dev->net->stats.tx_packets++;
2116 dev->net->stats.tx_bytes += entry->length;
2118 dev->net->stats.tx_errors++;
2120 switch (urb->status) {
2122 lan78xx_defer_kevent(dev, EVENT_TX_HALT);
2125 /* software-driven interface shutdown */
2133 netif_stop_queue(dev->net);
2136 netif_dbg(dev, tx_err, dev->net,
2137 "tx err %d\n", entry->urb->status);
2142 usb_autopm_put_interface_async(dev->intf);
2144 defer_bh(dev, skb, &dev->txq, tx_done);
2147 static void lan78xx_queue_skb(struct sk_buff_head *list,
2148 struct sk_buff *newsk, enum skb_state state)
2150 struct skb_data *entry = (struct skb_data *)newsk->cb;
2152 __skb_queue_tail(list, newsk);
2153 entry->state = state;
2156 netdev_tx_t lan78xx_start_xmit(struct sk_buff *skb, struct net_device *net)
2158 struct lan78xx_net *dev = netdev_priv(net);
2159 struct sk_buff *skb2 = NULL;
2162 skb_tx_timestamp(skb);
2163 skb2 = lan78xx_tx_prep(dev, skb, GFP_ATOMIC);
2167 skb_queue_tail(&dev->txq_pend, skb2);
2169 if (skb_queue_len(&dev->txq_pend) > 10)
2170 netif_stop_queue(net);
2172 netif_dbg(dev, tx_err, dev->net,
2173 "lan78xx_tx_prep return NULL\n");
2174 dev->net->stats.tx_errors++;
2175 dev->net->stats.tx_dropped++;
2178 tasklet_schedule(&dev->bh);
2180 return NETDEV_TX_OK;
2183 int lan78xx_get_endpoints(struct lan78xx_net *dev, struct usb_interface *intf)
2186 struct usb_host_interface *alt = NULL;
2187 struct usb_host_endpoint *in = NULL, *out = NULL;
2188 struct usb_host_endpoint *status = NULL;
2190 for (tmp = 0; tmp < intf->num_altsetting; tmp++) {
2196 alt = intf->altsetting + tmp;
2198 for (ep = 0; ep < alt->desc.bNumEndpoints; ep++) {
2199 struct usb_host_endpoint *e;
2202 e = alt->endpoint + ep;
2203 switch (e->desc.bmAttributes) {
2204 case USB_ENDPOINT_XFER_INT:
2205 if (!usb_endpoint_dir_in(&e->desc))
2209 case USB_ENDPOINT_XFER_BULK:
2214 if (usb_endpoint_dir_in(&e->desc)) {
2217 else if (intr && !status)
2227 if (!alt || !in || !out)
2230 dev->pipe_in = usb_rcvbulkpipe(dev->udev,
2231 in->desc.bEndpointAddress &
2232 USB_ENDPOINT_NUMBER_MASK);
2233 dev->pipe_out = usb_sndbulkpipe(dev->udev,
2234 out->desc.bEndpointAddress &
2235 USB_ENDPOINT_NUMBER_MASK);
2236 dev->ep_intr = status;
2241 static int lan78xx_bind(struct lan78xx_net *dev, struct usb_interface *intf)
2243 struct lan78xx_priv *pdata = NULL;
2247 ret = lan78xx_get_endpoints(dev, intf);
2249 dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL);
2251 pdata = (struct lan78xx_priv *)(dev->data[0]);
2253 netdev_warn(dev->net, "Unable to allocate lan78xx_priv");
2259 spin_lock_init(&pdata->rfe_ctl_lock);
2260 mutex_init(&pdata->dataport_mutex);
2262 INIT_WORK(&pdata->set_multicast, lan78xx_deferred_multicast_write);
2264 for (i = 0; i < DP_SEL_VHF_VLAN_LEN; i++)
2265 pdata->vlan_table[i] = 0;
2267 INIT_WORK(&pdata->set_vlan, lan78xx_deferred_vlan_write);
2269 dev->net->features = 0;
2271 if (DEFAULT_TX_CSUM_ENABLE)
2272 dev->net->features |= NETIF_F_HW_CSUM;
2274 if (DEFAULT_RX_CSUM_ENABLE)
2275 dev->net->features |= NETIF_F_RXCSUM;
2277 if (DEFAULT_TSO_CSUM_ENABLE)
2278 dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG;
2280 dev->net->hw_features = dev->net->features;
2282 /* Init all registers */
2283 ret = lan78xx_reset(dev);
2285 lan78xx_mdio_init(dev);
2287 dev->net->flags |= IFF_MULTICAST;
2289 pdata->wol = WAKE_MAGIC;
2294 static void lan78xx_unbind(struct lan78xx_net *dev, struct usb_interface *intf)
2296 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
2298 lan78xx_remove_mdio(dev);
2301 netif_dbg(dev, ifdown, dev->net, "free pdata");
2308 static void lan78xx_rx_csum_offload(struct lan78xx_net *dev,
2309 struct sk_buff *skb,
2310 u32 rx_cmd_a, u32 rx_cmd_b)
2312 if (!(dev->net->features & NETIF_F_RXCSUM) ||
2313 unlikely(rx_cmd_a & RX_CMD_A_ICSM_)) {
2314 skb->ip_summed = CHECKSUM_NONE;
2316 skb->csum = ntohs((u16)(rx_cmd_b >> RX_CMD_B_CSUM_SHIFT_));
2317 skb->ip_summed = CHECKSUM_COMPLETE;
2321 void lan78xx_skb_return(struct lan78xx_net *dev, struct sk_buff *skb)
2325 if (test_bit(EVENT_RX_PAUSED, &dev->flags)) {
2326 skb_queue_tail(&dev->rxq_pause, skb);
2330 skb->protocol = eth_type_trans(skb, dev->net);
2331 dev->net->stats.rx_packets++;
2332 dev->net->stats.rx_bytes += skb->len;
2334 netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n",
2335 skb->len + sizeof(struct ethhdr), skb->protocol);
2336 memset(skb->cb, 0, sizeof(struct skb_data));
2338 if (skb_defer_rx_timestamp(skb))
2341 status = netif_rx(skb);
2342 if (status != NET_RX_SUCCESS)
2343 netif_dbg(dev, rx_err, dev->net,
2344 "netif_rx status %d\n", status);
2347 static int lan78xx_rx(struct lan78xx_net *dev, struct sk_buff *skb)
2349 if (skb->len < dev->net->hard_header_len)
2352 while (skb->len > 0) {
2353 u32 rx_cmd_a, rx_cmd_b, align_count, size;
2355 struct sk_buff *skb2;
2356 unsigned char *packet;
2358 memcpy(&rx_cmd_a, skb->data, sizeof(rx_cmd_a));
2359 le32_to_cpus(&rx_cmd_a);
2360 skb_pull(skb, sizeof(rx_cmd_a));
2362 memcpy(&rx_cmd_b, skb->data, sizeof(rx_cmd_b));
2363 le32_to_cpus(&rx_cmd_b);
2364 skb_pull(skb, sizeof(rx_cmd_b));
2366 memcpy(&rx_cmd_c, skb->data, sizeof(rx_cmd_c));
2367 le16_to_cpus(&rx_cmd_c);
2368 skb_pull(skb, sizeof(rx_cmd_c));
2372 /* get the packet length */
2373 size = (rx_cmd_a & RX_CMD_A_LEN_MASK_);
2374 align_count = (4 - ((size + RXW_PADDING) % 4)) % 4;
2376 if (unlikely(rx_cmd_a & RX_CMD_A_RED_)) {
2377 netif_dbg(dev, rx_err, dev->net,
2378 "Error rx_cmd_a=0x%08x", rx_cmd_a);
2380 /* last frame in this batch */
2381 if (skb->len == size) {
2382 lan78xx_rx_csum_offload(dev, skb,
2383 rx_cmd_a, rx_cmd_b);
2385 skb_trim(skb, skb->len - 4); /* remove fcs */
2386 skb->truesize = size + sizeof(struct sk_buff);
2391 skb2 = skb_clone(skb, GFP_ATOMIC);
2392 if (unlikely(!skb2)) {
2393 netdev_warn(dev->net, "Error allocating skb");
2398 skb2->data = packet;
2399 skb_set_tail_pointer(skb2, size);
2401 lan78xx_rx_csum_offload(dev, skb2, rx_cmd_a, rx_cmd_b);
2403 skb_trim(skb2, skb2->len - 4); /* remove fcs */
2404 skb2->truesize = size + sizeof(struct sk_buff);
2406 lan78xx_skb_return(dev, skb2);
2409 skb_pull(skb, size);
2411 /* padding bytes before the next frame starts */
2413 skb_pull(skb, align_count);
2416 if (unlikely(skb->len < 0)) {
2417 netdev_warn(dev->net, "invalid rx length<0 %d", skb->len);
2424 static inline void rx_process(struct lan78xx_net *dev, struct sk_buff *skb)
2426 if (!lan78xx_rx(dev, skb)) {
2427 dev->net->stats.rx_errors++;
2432 lan78xx_skb_return(dev, skb);
2436 netif_dbg(dev, rx_err, dev->net, "drop\n");
2437 dev->net->stats.rx_errors++;
2439 skb_queue_tail(&dev->done, skb);
2442 static void rx_complete(struct urb *urb);
2444 static int rx_submit(struct lan78xx_net *dev, struct urb *urb, gfp_t flags)
2446 struct sk_buff *skb;
2447 struct skb_data *entry;
2448 unsigned long lockflags;
2449 size_t size = dev->rx_urb_size;
2452 skb = netdev_alloc_skb_ip_align(dev->net, size);
2458 entry = (struct skb_data *)skb->cb;
2463 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_in,
2464 skb->data, size, rx_complete, skb);
2466 spin_lock_irqsave(&dev->rxq.lock, lockflags);
2468 if (netif_device_present(dev->net) &&
2469 netif_running(dev->net) &&
2470 !test_bit(EVENT_RX_HALT, &dev->flags) &&
2471 !test_bit(EVENT_DEV_ASLEEP, &dev->flags)) {
2472 ret = usb_submit_urb(urb, GFP_ATOMIC);
2475 lan78xx_queue_skb(&dev->rxq, skb, rx_start);
2478 lan78xx_defer_kevent(dev, EVENT_RX_HALT);
2481 netif_dbg(dev, ifdown, dev->net, "device gone\n");
2482 netif_device_detach(dev->net);
2488 netif_dbg(dev, rx_err, dev->net,
2489 "rx submit, %d\n", ret);
2490 tasklet_schedule(&dev->bh);
2493 netif_dbg(dev, ifdown, dev->net, "rx: stopped\n");
2496 spin_unlock_irqrestore(&dev->rxq.lock, lockflags);
2498 dev_kfree_skb_any(skb);
2504 static void rx_complete(struct urb *urb)
2506 struct sk_buff *skb = (struct sk_buff *)urb->context;
2507 struct skb_data *entry = (struct skb_data *)skb->cb;
2508 struct lan78xx_net *dev = entry->dev;
2509 int urb_status = urb->status;
2510 enum skb_state state;
2512 skb_put(skb, urb->actual_length);
2516 switch (urb_status) {
2518 if (skb->len < dev->net->hard_header_len) {
2520 dev->net->stats.rx_errors++;
2521 dev->net->stats.rx_length_errors++;
2522 netif_dbg(dev, rx_err, dev->net,
2523 "rx length %d\n", skb->len);
2525 usb_mark_last_busy(dev->udev);
2528 dev->net->stats.rx_errors++;
2529 lan78xx_defer_kevent(dev, EVENT_RX_HALT);
2531 case -ECONNRESET: /* async unlink */
2532 case -ESHUTDOWN: /* hardware gone */
2533 netif_dbg(dev, ifdown, dev->net,
2534 "rx shutdown, code %d\n", urb_status);
2542 dev->net->stats.rx_errors++;
2548 /* data overrun ... flush fifo? */
2550 dev->net->stats.rx_over_errors++;
2555 dev->net->stats.rx_errors++;
2556 netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status);
2560 state = defer_bh(dev, skb, &dev->rxq, state);
2563 if (netif_running(dev->net) &&
2564 !test_bit(EVENT_RX_HALT, &dev->flags) &&
2565 state != unlink_start) {
2566 rx_submit(dev, urb, GFP_ATOMIC);
2571 netif_dbg(dev, rx_err, dev->net, "no read resubmitted\n");
2574 static void lan78xx_tx_bh(struct lan78xx_net *dev)
2577 struct urb *urb = NULL;
2578 struct skb_data *entry;
2579 unsigned long flags;
2580 struct sk_buff_head *tqp = &dev->txq_pend;
2581 struct sk_buff *skb, *skb2;
2584 int skb_totallen, pkt_cnt;
2588 for (skb = tqp->next; pkt_cnt < tqp->qlen; skb = skb->next) {
2589 if (skb_is_gso(skb)) {
2591 /* handle previous packets first */
2595 skb2 = skb_dequeue(tqp);
2599 if ((skb_totallen + skb->len) > MAX_SINGLE_PACKET_SIZE)
2601 skb_totallen = skb->len + roundup(skb_totallen, sizeof(u32));
2605 /* copy to a single skb */
2606 skb = alloc_skb(skb_totallen, GFP_ATOMIC);
2610 skb_put(skb, skb_totallen);
2612 for (count = pos = 0; count < pkt_cnt; count++) {
2613 skb2 = skb_dequeue(tqp);
2615 memcpy(skb->data + pos, skb2->data, skb2->len);
2616 pos += roundup(skb2->len, sizeof(u32));
2617 dev_kfree_skb(skb2);
2621 length = skb_totallen;
2624 urb = usb_alloc_urb(0, GFP_ATOMIC);
2626 netif_dbg(dev, tx_err, dev->net, "no urb\n");
2630 entry = (struct skb_data *)skb->cb;
2633 entry->length = length;
2635 spin_lock_irqsave(&dev->txq.lock, flags);
2636 ret = usb_autopm_get_interface_async(dev->intf);
2638 spin_unlock_irqrestore(&dev->txq.lock, flags);
2642 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_out,
2643 skb->data, skb->len, tx_complete, skb);
2645 if (length % dev->maxpacket == 0) {
2646 /* send USB_ZERO_PACKET */
2647 urb->transfer_flags |= URB_ZERO_PACKET;
2651 /* if this triggers the device is still a sleep */
2652 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) {
2653 /* transmission will be done in resume */
2654 usb_anchor_urb(urb, &dev->deferred);
2655 /* no use to process more packets */
2656 netif_stop_queue(dev->net);
2658 spin_unlock_irqrestore(&dev->txq.lock, flags);
2659 netdev_dbg(dev->net, "Delaying transmission for resumption\n");
2664 ret = usb_submit_urb(urb, GFP_ATOMIC);
2667 dev->net->trans_start = jiffies;
2668 lan78xx_queue_skb(&dev->txq, skb, tx_start);
2669 if (skb_queue_len(&dev->txq) >= dev->tx_qlen)
2670 netif_stop_queue(dev->net);
2673 netif_stop_queue(dev->net);
2674 lan78xx_defer_kevent(dev, EVENT_TX_HALT);
2675 usb_autopm_put_interface_async(dev->intf);
2678 usb_autopm_put_interface_async(dev->intf);
2679 netif_dbg(dev, tx_err, dev->net,
2680 "tx: submit urb err %d\n", ret);
2684 spin_unlock_irqrestore(&dev->txq.lock, flags);
2687 netif_dbg(dev, tx_err, dev->net, "drop, code %d\n", ret);
2689 dev->net->stats.tx_dropped++;
2691 dev_kfree_skb_any(skb);
2694 netif_dbg(dev, tx_queued, dev->net,
2695 "> tx, len %d, type 0x%x\n", length, skb->protocol);
2698 static void lan78xx_rx_bh(struct lan78xx_net *dev)
2703 if (skb_queue_len(&dev->rxq) < dev->rx_qlen) {
2704 for (i = 0; i < 10; i++) {
2705 if (skb_queue_len(&dev->rxq) >= dev->rx_qlen)
2707 urb = usb_alloc_urb(0, GFP_ATOMIC);
2709 if (rx_submit(dev, urb, GFP_ATOMIC) == -ENOLINK)
2713 if (skb_queue_len(&dev->rxq) < dev->rx_qlen)
2714 tasklet_schedule(&dev->bh);
2716 if (skb_queue_len(&dev->txq) < dev->tx_qlen)
2717 netif_wake_queue(dev->net);
2720 static void lan78xx_bh(unsigned long param)
2722 struct lan78xx_net *dev = (struct lan78xx_net *)param;
2723 struct sk_buff *skb;
2724 struct skb_data *entry;
2726 while ((skb = skb_dequeue(&dev->done))) {
2727 entry = (struct skb_data *)(skb->cb);
2728 switch (entry->state) {
2730 entry->state = rx_cleanup;
2731 rx_process(dev, skb);
2734 usb_free_urb(entry->urb);
2738 usb_free_urb(entry->urb);
2742 netdev_dbg(dev->net, "skb state %d\n", entry->state);
2747 if (netif_device_present(dev->net) && netif_running(dev->net)) {
2748 if (!skb_queue_empty(&dev->txq_pend))
2751 if (!timer_pending(&dev->delay) &&
2752 !test_bit(EVENT_RX_HALT, &dev->flags))
2757 static void lan78xx_delayedwork(struct work_struct *work)
2760 struct lan78xx_net *dev;
2762 dev = container_of(work, struct lan78xx_net, wq.work);
2764 if (test_bit(EVENT_TX_HALT, &dev->flags)) {
2765 unlink_urbs(dev, &dev->txq);
2766 status = usb_autopm_get_interface(dev->intf);
2769 status = usb_clear_halt(dev->udev, dev->pipe_out);
2770 usb_autopm_put_interface(dev->intf);
2773 status != -ESHUTDOWN) {
2774 if (netif_msg_tx_err(dev))
2776 netdev_err(dev->net,
2777 "can't clear tx halt, status %d\n",
2780 clear_bit(EVENT_TX_HALT, &dev->flags);
2781 if (status != -ESHUTDOWN)
2782 netif_wake_queue(dev->net);
2785 if (test_bit(EVENT_RX_HALT, &dev->flags)) {
2786 unlink_urbs(dev, &dev->rxq);
2787 status = usb_autopm_get_interface(dev->intf);
2790 status = usb_clear_halt(dev->udev, dev->pipe_in);
2791 usb_autopm_put_interface(dev->intf);
2794 status != -ESHUTDOWN) {
2795 if (netif_msg_rx_err(dev))
2797 netdev_err(dev->net,
2798 "can't clear rx halt, status %d\n",
2801 clear_bit(EVENT_RX_HALT, &dev->flags);
2802 tasklet_schedule(&dev->bh);
2806 if (test_bit(EVENT_LINK_RESET, &dev->flags)) {
2809 clear_bit(EVENT_LINK_RESET, &dev->flags);
2810 status = usb_autopm_get_interface(dev->intf);
2813 if (lan78xx_link_reset(dev) < 0) {
2814 usb_autopm_put_interface(dev->intf);
2816 netdev_info(dev->net, "link reset failed (%d)\n",
2819 usb_autopm_put_interface(dev->intf);
2824 static void intr_complete(struct urb *urb)
2826 struct lan78xx_net *dev = urb->context;
2827 int status = urb->status;
2832 lan78xx_status(dev, urb);
2835 /* software-driven interface shutdown */
2836 case -ENOENT: /* urb killed */
2837 case -ESHUTDOWN: /* hardware gone */
2838 netif_dbg(dev, ifdown, dev->net,
2839 "intr shutdown, code %d\n", status);
2842 /* NOTE: not throttling like RX/TX, since this endpoint
2843 * already polls infrequently
2846 netdev_dbg(dev->net, "intr status %d\n", status);
2850 if (!netif_running(dev->net))
2853 memset(urb->transfer_buffer, 0, urb->transfer_buffer_length);
2854 status = usb_submit_urb(urb, GFP_ATOMIC);
2856 netif_err(dev, timer, dev->net,
2857 "intr resubmit --> %d\n", status);
2860 static void lan78xx_disconnect(struct usb_interface *intf)
2862 struct lan78xx_net *dev;
2863 struct usb_device *udev;
2864 struct net_device *net;
2866 dev = usb_get_intfdata(intf);
2867 usb_set_intfdata(intf, NULL);
2871 udev = interface_to_usbdev(intf);
2874 unregister_netdev(net);
2876 cancel_delayed_work_sync(&dev->wq);
2878 usb_scuttle_anchored_urbs(&dev->deferred);
2880 lan78xx_unbind(dev, intf);
2882 usb_kill_urb(dev->urb_intr);
2883 usb_free_urb(dev->urb_intr);
2889 void lan78xx_tx_timeout(struct net_device *net)
2891 struct lan78xx_net *dev = netdev_priv(net);
2893 unlink_urbs(dev, &dev->txq);
2894 tasklet_schedule(&dev->bh);
2897 static const struct net_device_ops lan78xx_netdev_ops = {
2898 .ndo_open = lan78xx_open,
2899 .ndo_stop = lan78xx_stop,
2900 .ndo_start_xmit = lan78xx_start_xmit,
2901 .ndo_tx_timeout = lan78xx_tx_timeout,
2902 .ndo_change_mtu = lan78xx_change_mtu,
2903 .ndo_set_mac_address = lan78xx_set_mac_addr,
2904 .ndo_validate_addr = eth_validate_addr,
2905 .ndo_do_ioctl = lan78xx_ioctl,
2906 .ndo_set_rx_mode = lan78xx_set_multicast,
2907 .ndo_set_features = lan78xx_set_features,
2908 .ndo_vlan_rx_add_vid = lan78xx_vlan_rx_add_vid,
2909 .ndo_vlan_rx_kill_vid = lan78xx_vlan_rx_kill_vid,
2912 static int lan78xx_probe(struct usb_interface *intf,
2913 const struct usb_device_id *id)
2915 struct lan78xx_net *dev;
2916 struct net_device *netdev;
2917 struct usb_device *udev;
2923 udev = interface_to_usbdev(intf);
2924 udev = usb_get_dev(udev);
2927 netdev = alloc_etherdev(sizeof(struct lan78xx_net));
2929 dev_err(&intf->dev, "Error: OOM\n");
2933 /* netdev_printk() needs this */
2934 SET_NETDEV_DEV(netdev, &intf->dev);
2936 dev = netdev_priv(netdev);
2940 dev->msg_enable = netif_msg_init(msg_level, NETIF_MSG_DRV
2941 | NETIF_MSG_PROBE | NETIF_MSG_LINK);
2943 skb_queue_head_init(&dev->rxq);
2944 skb_queue_head_init(&dev->txq);
2945 skb_queue_head_init(&dev->done);
2946 skb_queue_head_init(&dev->rxq_pause);
2947 skb_queue_head_init(&dev->txq_pend);
2948 mutex_init(&dev->phy_mutex);
2950 tasklet_init(&dev->bh, lan78xx_bh, (unsigned long)dev);
2951 INIT_DELAYED_WORK(&dev->wq, lan78xx_delayedwork);
2952 init_usb_anchor(&dev->deferred);
2954 netdev->netdev_ops = &lan78xx_netdev_ops;
2955 netdev->watchdog_timeo = TX_TIMEOUT_JIFFIES;
2956 netdev->ethtool_ops = &lan78xx_ethtool_ops;
2958 ret = lan78xx_bind(dev, intf);
2961 strcpy(netdev->name, "eth%d");
2963 if (netdev->mtu > (dev->hard_mtu - netdev->hard_header_len))
2964 netdev->mtu = dev->hard_mtu - netdev->hard_header_len;
2966 dev->ep_blkin = (intf->cur_altsetting)->endpoint + 0;
2967 dev->ep_blkout = (intf->cur_altsetting)->endpoint + 1;
2968 dev->ep_intr = (intf->cur_altsetting)->endpoint + 2;
2970 dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE);
2971 dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE);
2973 dev->pipe_intr = usb_rcvintpipe(dev->udev,
2974 dev->ep_intr->desc.bEndpointAddress &
2975 USB_ENDPOINT_NUMBER_MASK);
2976 period = dev->ep_intr->desc.bInterval;
2978 maxp = usb_maxpacket(dev->udev, dev->pipe_intr, 0);
2979 buf = kmalloc(maxp, GFP_KERNEL);
2981 dev->urb_intr = usb_alloc_urb(0, GFP_KERNEL);
2982 if (!dev->urb_intr) {
2986 usb_fill_int_urb(dev->urb_intr, dev->udev,
2987 dev->pipe_intr, buf, maxp,
2988 intr_complete, dev, period);
2992 dev->maxpacket = usb_maxpacket(dev->udev, dev->pipe_out, 1);
2994 /* driver requires remote-wakeup capability during autosuspend. */
2995 intf->needs_remote_wakeup = 1;
2997 ret = register_netdev(netdev);
2999 netif_err(dev, probe, netdev, "couldn't register the device\n");
3003 usb_set_intfdata(intf, dev);
3005 ret = device_set_wakeup_enable(&udev->dev, true);
3007 /* Default delay of 2sec has more overhead than advantage.
3008 * Set to 10sec as default.
3010 pm_runtime_set_autosuspend_delay(&udev->dev,
3011 DEFAULT_AUTOSUSPEND_DELAY);
3016 lan78xx_unbind(dev, intf);
3018 free_netdev(netdev);
3025 static u16 lan78xx_wakeframe_crc16(const u8 *buf, int len)
3027 const u16 crc16poly = 0x8005;
3033 for (i = 0; i < len; i++) {
3035 for (bit = 0; bit < 8; bit++) {
3039 if (msb ^ (u16)(data & 1)) {
3041 crc |= (u16)0x0001U;
3050 static int lan78xx_set_suspend(struct lan78xx_net *dev, u32 wol)
3058 const u8 ipv4_multicast[3] = { 0x01, 0x00, 0x5E };
3059 const u8 ipv6_multicast[3] = { 0x33, 0x33 };
3060 const u8 arp_type[2] = { 0x08, 0x06 };
3062 ret = lan78xx_read_reg(dev, MAC_TX, &buf);
3063 buf &= ~MAC_TX_TXEN_;
3064 ret = lan78xx_write_reg(dev, MAC_TX, buf);
3065 ret = lan78xx_read_reg(dev, MAC_RX, &buf);
3066 buf &= ~MAC_RX_RXEN_;
3067 ret = lan78xx_write_reg(dev, MAC_RX, buf);
3069 ret = lan78xx_write_reg(dev, WUCSR, 0);
3070 ret = lan78xx_write_reg(dev, WUCSR2, 0);
3071 ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL);
3076 ret = lan78xx_read_reg(dev, PMT_CTL, &temp_pmt_ctl);
3077 temp_pmt_ctl &= ~PMT_CTL_RES_CLR_WKP_EN_;
3078 temp_pmt_ctl |= PMT_CTL_RES_CLR_WKP_STS_;
3080 for (mask_index = 0; mask_index < NUM_OF_WUF_CFG; mask_index++)
3081 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), 0);
3084 if (wol & WAKE_PHY) {
3085 temp_pmt_ctl |= PMT_CTL_PHY_WAKE_EN_;
3087 temp_pmt_ctl |= PMT_CTL_WOL_EN_;
3088 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
3089 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
3091 if (wol & WAKE_MAGIC) {
3092 temp_wucsr |= WUCSR_MPEN_;
3094 temp_pmt_ctl |= PMT_CTL_WOL_EN_;
3095 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
3096 temp_pmt_ctl |= PMT_CTL_SUS_MODE_3_;
3098 if (wol & WAKE_BCAST) {
3099 temp_wucsr |= WUCSR_BCST_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_MCAST) {
3106 temp_wucsr |= WUCSR_WAKE_EN_;
3108 /* set WUF_CFG & WUF_MASK for IPv4 Multicast */
3109 crc = lan78xx_wakeframe_crc16(ipv4_multicast, 3);
3110 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index),
3112 WUF_CFGX_TYPE_MCAST_ |
3113 (0 << WUF_CFGX_OFFSET_SHIFT_) |
3114 (crc & WUF_CFGX_CRC16_MASK_));
3116 ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 7);
3117 ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0);
3118 ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0);
3119 ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0);
3122 /* for IPv6 Multicast */
3123 crc = lan78xx_wakeframe_crc16(ipv6_multicast, 2);
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), 3);
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 temp_pmt_ctl |= PMT_CTL_WOL_EN_;
3137 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
3138 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
3140 if (wol & WAKE_UCAST) {
3141 temp_wucsr |= WUCSR_PFDA_EN_;
3143 temp_pmt_ctl |= PMT_CTL_WOL_EN_;
3144 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
3145 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
3147 if (wol & WAKE_ARP) {
3148 temp_wucsr |= WUCSR_WAKE_EN_;
3150 /* set WUF_CFG & WUF_MASK
3151 * for packettype (offset 12,13) = ARP (0x0806)
3153 crc = lan78xx_wakeframe_crc16(arp_type, 2);
3154 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index),
3156 WUF_CFGX_TYPE_ALL_ |
3157 (0 << WUF_CFGX_OFFSET_SHIFT_) |
3158 (crc & WUF_CFGX_CRC16_MASK_));
3160 ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 0x3000);
3161 ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0);
3162 ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0);
3163 ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0);
3166 temp_pmt_ctl |= PMT_CTL_WOL_EN_;
3167 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
3168 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
3171 ret = lan78xx_write_reg(dev, WUCSR, temp_wucsr);
3173 /* when multiple WOL bits are set */
3174 if (hweight_long((unsigned long)wol) > 1) {
3175 temp_pmt_ctl |= PMT_CTL_WOL_EN_;
3176 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
3177 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
3179 ret = lan78xx_write_reg(dev, PMT_CTL, temp_pmt_ctl);
3182 ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
3183 buf |= PMT_CTL_WUPS_MASK_;
3184 ret = lan78xx_write_reg(dev, PMT_CTL, buf);
3186 ret = lan78xx_read_reg(dev, MAC_RX, &buf);
3187 buf |= MAC_RX_RXEN_;
3188 ret = lan78xx_write_reg(dev, MAC_RX, buf);
3193 int lan78xx_suspend(struct usb_interface *intf, pm_message_t message)
3195 struct lan78xx_net *dev = usb_get_intfdata(intf);
3196 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
3202 event = message.event;
3204 if (!dev->suspend_count++) {
3205 spin_lock_irq(&dev->txq.lock);
3206 /* don't autosuspend while transmitting */
3207 if ((skb_queue_len(&dev->txq) ||
3208 skb_queue_len(&dev->txq_pend)) &&
3209 PMSG_IS_AUTO(message)) {
3210 spin_unlock_irq(&dev->txq.lock);
3214 set_bit(EVENT_DEV_ASLEEP, &dev->flags);
3215 spin_unlock_irq(&dev->txq.lock);
3219 ret = lan78xx_read_reg(dev, MAC_TX, &buf);
3220 buf &= ~MAC_TX_TXEN_;
3221 ret = lan78xx_write_reg(dev, MAC_TX, buf);
3222 ret = lan78xx_read_reg(dev, MAC_RX, &buf);
3223 buf &= ~MAC_RX_RXEN_;
3224 ret = lan78xx_write_reg(dev, MAC_RX, buf);
3226 /* empty out the rx and queues */
3227 netif_device_detach(dev->net);
3228 lan78xx_terminate_urbs(dev);
3229 usb_kill_urb(dev->urb_intr);
3232 netif_device_attach(dev->net);
3235 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) {
3236 if (PMSG_IS_AUTO(message)) {
3237 /* auto suspend (selective suspend) */
3238 ret = lan78xx_read_reg(dev, MAC_TX, &buf);
3239 buf &= ~MAC_TX_TXEN_;
3240 ret = lan78xx_write_reg(dev, MAC_TX, buf);
3241 ret = lan78xx_read_reg(dev, MAC_RX, &buf);
3242 buf &= ~MAC_RX_RXEN_;
3243 ret = lan78xx_write_reg(dev, MAC_RX, buf);
3245 ret = lan78xx_write_reg(dev, WUCSR, 0);
3246 ret = lan78xx_write_reg(dev, WUCSR2, 0);
3247 ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL);
3249 /* set goodframe wakeup */
3250 ret = lan78xx_read_reg(dev, WUCSR, &buf);
3252 buf |= WUCSR_RFE_WAKE_EN_;
3253 buf |= WUCSR_STORE_WAKE_;
3255 ret = lan78xx_write_reg(dev, WUCSR, buf);
3257 ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
3259 buf &= ~PMT_CTL_RES_CLR_WKP_EN_;
3260 buf |= PMT_CTL_RES_CLR_WKP_STS_;
3262 buf |= PMT_CTL_PHY_WAKE_EN_;
3263 buf |= PMT_CTL_WOL_EN_;
3264 buf &= ~PMT_CTL_SUS_MODE_MASK_;
3265 buf |= PMT_CTL_SUS_MODE_3_;
3267 ret = lan78xx_write_reg(dev, PMT_CTL, buf);
3269 ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
3271 buf |= PMT_CTL_WUPS_MASK_;
3273 ret = lan78xx_write_reg(dev, PMT_CTL, buf);
3275 ret = lan78xx_read_reg(dev, MAC_RX, &buf);
3276 buf |= MAC_RX_RXEN_;
3277 ret = lan78xx_write_reg(dev, MAC_RX, buf);
3279 lan78xx_set_suspend(dev, pdata->wol);
3287 int lan78xx_resume(struct usb_interface *intf)
3289 struct lan78xx_net *dev = usb_get_intfdata(intf);
3290 struct sk_buff *skb;
3295 if (!--dev->suspend_count) {
3296 /* resume interrupt URBs */
3297 if (dev->urb_intr && test_bit(EVENT_DEV_OPEN, &dev->flags))
3298 usb_submit_urb(dev->urb_intr, GFP_NOIO);
3300 spin_lock_irq(&dev->txq.lock);
3301 while ((res = usb_get_from_anchor(&dev->deferred))) {
3302 skb = (struct sk_buff *)res->context;
3303 ret = usb_submit_urb(res, GFP_ATOMIC);
3305 dev_kfree_skb_any(skb);
3307 usb_autopm_put_interface_async(dev->intf);
3309 dev->net->trans_start = jiffies;
3310 lan78xx_queue_skb(&dev->txq, skb, tx_start);
3314 clear_bit(EVENT_DEV_ASLEEP, &dev->flags);
3315 spin_unlock_irq(&dev->txq.lock);
3317 if (test_bit(EVENT_DEV_OPEN, &dev->flags)) {
3318 if (!(skb_queue_len(&dev->txq) >= dev->tx_qlen))
3319 netif_start_queue(dev->net);
3320 tasklet_schedule(&dev->bh);
3324 ret = lan78xx_write_reg(dev, WUCSR2, 0);
3325 ret = lan78xx_write_reg(dev, WUCSR, 0);
3326 ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL);
3328 ret = lan78xx_write_reg(dev, WUCSR2, WUCSR2_NS_RCD_ |
3330 WUCSR2_IPV6_TCPSYN_RCD_ |
3331 WUCSR2_IPV4_TCPSYN_RCD_);
3333 ret = lan78xx_write_reg(dev, WUCSR, WUCSR_EEE_TX_WAKE_ |
3334 WUCSR_EEE_RX_WAKE_ |
3336 WUCSR_RFE_WAKE_FR_ |
3341 ret = lan78xx_read_reg(dev, MAC_TX, &buf);
3342 buf |= MAC_TX_TXEN_;
3343 ret = lan78xx_write_reg(dev, MAC_TX, buf);
3348 int lan78xx_reset_resume(struct usb_interface *intf)
3350 struct lan78xx_net *dev = usb_get_intfdata(intf);
3354 lan78xx_phy_init(dev);
3356 return lan78xx_resume(intf);
3359 static const struct usb_device_id products[] = {
3361 /* LAN7800 USB Gigabit Ethernet Device */
3362 USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7800_USB_PRODUCT_ID),
3365 /* LAN7850 USB Gigabit Ethernet Device */
3366 USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7850_USB_PRODUCT_ID),
3370 MODULE_DEVICE_TABLE(usb, products);
3372 static struct usb_driver lan78xx_driver = {
3373 .name = DRIVER_NAME,
3374 .id_table = products,
3375 .probe = lan78xx_probe,
3376 .disconnect = lan78xx_disconnect,
3377 .suspend = lan78xx_suspend,
3378 .resume = lan78xx_resume,
3379 .reset_resume = lan78xx_reset_resume,
3380 .supports_autosuspend = 1,
3381 .disable_hub_initiated_lpm = 1,
3384 module_usb_driver(lan78xx_driver);
3386 MODULE_AUTHOR(DRIVER_AUTHOR);
3387 MODULE_DESCRIPTION(DRIVER_DESC);
3388 MODULE_LICENSE("GPL");