Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0+
0002 /*
0003  * Copyright (C) 2015 Microchip Technology
0004  */
0005 #include <linux/module.h>
0006 #include <linux/netdevice.h>
0007 #include <linux/etherdevice.h>
0008 #include <linux/ethtool.h>
0009 #include <linux/usb.h>
0010 #include <linux/crc32.h>
0011 #include <linux/signal.h>
0012 #include <linux/slab.h>
0013 #include <linux/if_vlan.h>
0014 #include <linux/uaccess.h>
0015 #include <linux/linkmode.h>
0016 #include <linux/list.h>
0017 #include <linux/ip.h>
0018 #include <linux/ipv6.h>
0019 #include <linux/mdio.h>
0020 #include <linux/phy.h>
0021 #include <net/ip6_checksum.h>
0022 #include <net/vxlan.h>
0023 #include <linux/interrupt.h>
0024 #include <linux/irqdomain.h>
0025 #include <linux/irq.h>
0026 #include <linux/irqchip/chained_irq.h>
0027 #include <linux/microchipphy.h>
0028 #include <linux/phy_fixed.h>
0029 #include <linux/of_mdio.h>
0030 #include <linux/of_net.h>
0031 #include "lan78xx.h"
0032 
0033 #define DRIVER_AUTHOR   "WOOJUNG HUH <woojung.huh@microchip.com>"
0034 #define DRIVER_DESC "LAN78XX USB 3.0 Gigabit Ethernet Devices"
0035 #define DRIVER_NAME "lan78xx"
0036 
0037 #define TX_TIMEOUT_JIFFIES      (5 * HZ)
0038 #define THROTTLE_JIFFIES        (HZ / 8)
0039 #define UNLINK_TIMEOUT_MS       3
0040 
0041 #define RX_MAX_QUEUE_MEMORY     (60 * 1518)
0042 
0043 #define SS_USB_PKT_SIZE         (1024)
0044 #define HS_USB_PKT_SIZE         (512)
0045 #define FS_USB_PKT_SIZE         (64)
0046 
0047 #define MAX_RX_FIFO_SIZE        (12 * 1024)
0048 #define MAX_TX_FIFO_SIZE        (12 * 1024)
0049 
0050 #define FLOW_THRESHOLD(n)       ((((n) + 511) / 512) & 0x7F)
0051 #define FLOW_CTRL_THRESHOLD(on, off)    ((FLOW_THRESHOLD(on)  << 0) | \
0052                      (FLOW_THRESHOLD(off) << 8))
0053 
0054 /* Flow control turned on when Rx FIFO level rises above this level (bytes) */
0055 #define FLOW_ON_SS          9216
0056 #define FLOW_ON_HS          8704
0057 
0058 /* Flow control turned off when Rx FIFO level falls below this level (bytes) */
0059 #define FLOW_OFF_SS         4096
0060 #define FLOW_OFF_HS         1024
0061 
0062 #define DEFAULT_BURST_CAP_SIZE      (MAX_TX_FIFO_SIZE)
0063 #define DEFAULT_BULK_IN_DELAY       (0x0800)
0064 #define MAX_SINGLE_PACKET_SIZE      (9000)
0065 #define DEFAULT_TX_CSUM_ENABLE      (true)
0066 #define DEFAULT_RX_CSUM_ENABLE      (true)
0067 #define DEFAULT_TSO_CSUM_ENABLE     (true)
0068 #define DEFAULT_VLAN_FILTER_ENABLE  (true)
0069 #define DEFAULT_VLAN_RX_OFFLOAD     (true)
0070 #define TX_ALIGNMENT            (4)
0071 #define RXW_PADDING         2
0072 
0073 #define LAN78XX_USB_VENDOR_ID       (0x0424)
0074 #define LAN7800_USB_PRODUCT_ID      (0x7800)
0075 #define LAN7850_USB_PRODUCT_ID      (0x7850)
0076 #define LAN7801_USB_PRODUCT_ID      (0x7801)
0077 #define LAN78XX_EEPROM_MAGIC        (0x78A5)
0078 #define LAN78XX_OTP_MAGIC       (0x78F3)
0079 #define AT29M2AF_USB_VENDOR_ID      (0x07C9)
0080 #define AT29M2AF_USB_PRODUCT_ID (0x0012)
0081 
0082 #define MII_READ            1
0083 #define MII_WRITE           0
0084 
0085 #define EEPROM_INDICATOR        (0xA5)
0086 #define EEPROM_MAC_OFFSET       (0x01)
0087 #define MAX_EEPROM_SIZE         512
0088 #define OTP_INDICATOR_1         (0xF3)
0089 #define OTP_INDICATOR_2         (0xF7)
0090 
0091 #define WAKE_ALL            (WAKE_PHY | WAKE_UCAST | \
0092                      WAKE_MCAST | WAKE_BCAST | \
0093                      WAKE_ARP | WAKE_MAGIC)
0094 
0095 #define TX_URB_NUM          10
0096 #define TX_SS_URB_NUM           TX_URB_NUM
0097 #define TX_HS_URB_NUM           TX_URB_NUM
0098 #define TX_FS_URB_NUM           TX_URB_NUM
0099 
0100 /* A single URB buffer must be large enough to hold a complete jumbo packet
0101  */
0102 #define TX_SS_URB_SIZE          (32 * 1024)
0103 #define TX_HS_URB_SIZE          (16 * 1024)
0104 #define TX_FS_URB_SIZE          (10 * 1024)
0105 
0106 #define RX_SS_URB_NUM           30
0107 #define RX_HS_URB_NUM           10
0108 #define RX_FS_URB_NUM           10
0109 #define RX_SS_URB_SIZE          TX_SS_URB_SIZE
0110 #define RX_HS_URB_SIZE          TX_HS_URB_SIZE
0111 #define RX_FS_URB_SIZE          TX_FS_URB_SIZE
0112 
0113 #define SS_BURST_CAP_SIZE       RX_SS_URB_SIZE
0114 #define SS_BULK_IN_DELAY        0x2000
0115 #define HS_BURST_CAP_SIZE       RX_HS_URB_SIZE
0116 #define HS_BULK_IN_DELAY        0x2000
0117 #define FS_BURST_CAP_SIZE       RX_FS_URB_SIZE
0118 #define FS_BULK_IN_DELAY        0x2000
0119 
0120 #define TX_CMD_LEN          8
0121 #define TX_SKB_MIN_LEN          (TX_CMD_LEN + ETH_HLEN)
0122 #define LAN78XX_TSO_SIZE(dev)       ((dev)->tx_urb_size - TX_SKB_MIN_LEN)
0123 
0124 #define RX_CMD_LEN          10
0125 #define RX_SKB_MIN_LEN          (RX_CMD_LEN + ETH_HLEN)
0126 #define RX_MAX_FRAME_LEN(mtu)       ((mtu) + ETH_HLEN + VLAN_HLEN)
0127 
0128 /* USB related defines */
0129 #define BULK_IN_PIPE            1
0130 #define BULK_OUT_PIPE           2
0131 
0132 /* default autosuspend delay (mSec)*/
0133 #define DEFAULT_AUTOSUSPEND_DELAY   (10 * 1000)
0134 
0135 /* statistic update interval (mSec) */
0136 #define STAT_UPDATE_TIMER       (1 * 1000)
0137 
0138 /* time to wait for MAC or FCT to stop (jiffies) */
0139 #define HW_DISABLE_TIMEOUT      (HZ / 10)
0140 
0141 /* time to wait between polling MAC or FCT state (ms) */
0142 #define HW_DISABLE_DELAY_MS     1
0143 
0144 /* defines interrupts from interrupt EP */
0145 #define MAX_INT_EP          (32)
0146 #define INT_EP_INTEP            (31)
0147 #define INT_EP_OTP_WR_DONE      (28)
0148 #define INT_EP_EEE_TX_LPI_START     (26)
0149 #define INT_EP_EEE_TX_LPI_STOP      (25)
0150 #define INT_EP_EEE_RX_LPI       (24)
0151 #define INT_EP_MAC_RESET_TIMEOUT    (23)
0152 #define INT_EP_RDFO         (22)
0153 #define INT_EP_TXE          (21)
0154 #define INT_EP_USB_STATUS       (20)
0155 #define INT_EP_TX_DIS           (19)
0156 #define INT_EP_RX_DIS           (18)
0157 #define INT_EP_PHY          (17)
0158 #define INT_EP_DP           (16)
0159 #define INT_EP_MAC_ERR          (15)
0160 #define INT_EP_TDFU         (14)
0161 #define INT_EP_TDFO         (13)
0162 #define INT_EP_UTX          (12)
0163 #define INT_EP_GPIO_11          (11)
0164 #define INT_EP_GPIO_10          (10)
0165 #define INT_EP_GPIO_9           (9)
0166 #define INT_EP_GPIO_8           (8)
0167 #define INT_EP_GPIO_7           (7)
0168 #define INT_EP_GPIO_6           (6)
0169 #define INT_EP_GPIO_5           (5)
0170 #define INT_EP_GPIO_4           (4)
0171 #define INT_EP_GPIO_3           (3)
0172 #define INT_EP_GPIO_2           (2)
0173 #define INT_EP_GPIO_1           (1)
0174 #define INT_EP_GPIO_0           (0)
0175 
0176 static const char lan78xx_gstrings[][ETH_GSTRING_LEN] = {
0177     "RX FCS Errors",
0178     "RX Alignment Errors",
0179     "Rx Fragment Errors",
0180     "RX Jabber Errors",
0181     "RX Undersize Frame Errors",
0182     "RX Oversize Frame Errors",
0183     "RX Dropped Frames",
0184     "RX Unicast Byte Count",
0185     "RX Broadcast Byte Count",
0186     "RX Multicast Byte Count",
0187     "RX Unicast Frames",
0188     "RX Broadcast Frames",
0189     "RX Multicast Frames",
0190     "RX Pause Frames",
0191     "RX 64 Byte Frames",
0192     "RX 65 - 127 Byte Frames",
0193     "RX 128 - 255 Byte Frames",
0194     "RX 256 - 511 Bytes Frames",
0195     "RX 512 - 1023 Byte Frames",
0196     "RX 1024 - 1518 Byte Frames",
0197     "RX Greater 1518 Byte Frames",
0198     "EEE RX LPI Transitions",
0199     "EEE RX LPI Time",
0200     "TX FCS Errors",
0201     "TX Excess Deferral Errors",
0202     "TX Carrier Errors",
0203     "TX Bad Byte Count",
0204     "TX Single Collisions",
0205     "TX Multiple Collisions",
0206     "TX Excessive Collision",
0207     "TX Late Collisions",
0208     "TX Unicast Byte Count",
0209     "TX Broadcast Byte Count",
0210     "TX Multicast Byte Count",
0211     "TX Unicast Frames",
0212     "TX Broadcast Frames",
0213     "TX Multicast Frames",
0214     "TX Pause Frames",
0215     "TX 64 Byte Frames",
0216     "TX 65 - 127 Byte Frames",
0217     "TX 128 - 255 Byte Frames",
0218     "TX 256 - 511 Bytes Frames",
0219     "TX 512 - 1023 Byte Frames",
0220     "TX 1024 - 1518 Byte Frames",
0221     "TX Greater 1518 Byte Frames",
0222     "EEE TX LPI Transitions",
0223     "EEE TX LPI Time",
0224 };
0225 
0226 struct lan78xx_statstage {
0227     u32 rx_fcs_errors;
0228     u32 rx_alignment_errors;
0229     u32 rx_fragment_errors;
0230     u32 rx_jabber_errors;
0231     u32 rx_undersize_frame_errors;
0232     u32 rx_oversize_frame_errors;
0233     u32 rx_dropped_frames;
0234     u32 rx_unicast_byte_count;
0235     u32 rx_broadcast_byte_count;
0236     u32 rx_multicast_byte_count;
0237     u32 rx_unicast_frames;
0238     u32 rx_broadcast_frames;
0239     u32 rx_multicast_frames;
0240     u32 rx_pause_frames;
0241     u32 rx_64_byte_frames;
0242     u32 rx_65_127_byte_frames;
0243     u32 rx_128_255_byte_frames;
0244     u32 rx_256_511_bytes_frames;
0245     u32 rx_512_1023_byte_frames;
0246     u32 rx_1024_1518_byte_frames;
0247     u32 rx_greater_1518_byte_frames;
0248     u32 eee_rx_lpi_transitions;
0249     u32 eee_rx_lpi_time;
0250     u32 tx_fcs_errors;
0251     u32 tx_excess_deferral_errors;
0252     u32 tx_carrier_errors;
0253     u32 tx_bad_byte_count;
0254     u32 tx_single_collisions;
0255     u32 tx_multiple_collisions;
0256     u32 tx_excessive_collision;
0257     u32 tx_late_collisions;
0258     u32 tx_unicast_byte_count;
0259     u32 tx_broadcast_byte_count;
0260     u32 tx_multicast_byte_count;
0261     u32 tx_unicast_frames;
0262     u32 tx_broadcast_frames;
0263     u32 tx_multicast_frames;
0264     u32 tx_pause_frames;
0265     u32 tx_64_byte_frames;
0266     u32 tx_65_127_byte_frames;
0267     u32 tx_128_255_byte_frames;
0268     u32 tx_256_511_bytes_frames;
0269     u32 tx_512_1023_byte_frames;
0270     u32 tx_1024_1518_byte_frames;
0271     u32 tx_greater_1518_byte_frames;
0272     u32 eee_tx_lpi_transitions;
0273     u32 eee_tx_lpi_time;
0274 };
0275 
0276 struct lan78xx_statstage64 {
0277     u64 rx_fcs_errors;
0278     u64 rx_alignment_errors;
0279     u64 rx_fragment_errors;
0280     u64 rx_jabber_errors;
0281     u64 rx_undersize_frame_errors;
0282     u64 rx_oversize_frame_errors;
0283     u64 rx_dropped_frames;
0284     u64 rx_unicast_byte_count;
0285     u64 rx_broadcast_byte_count;
0286     u64 rx_multicast_byte_count;
0287     u64 rx_unicast_frames;
0288     u64 rx_broadcast_frames;
0289     u64 rx_multicast_frames;
0290     u64 rx_pause_frames;
0291     u64 rx_64_byte_frames;
0292     u64 rx_65_127_byte_frames;
0293     u64 rx_128_255_byte_frames;
0294     u64 rx_256_511_bytes_frames;
0295     u64 rx_512_1023_byte_frames;
0296     u64 rx_1024_1518_byte_frames;
0297     u64 rx_greater_1518_byte_frames;
0298     u64 eee_rx_lpi_transitions;
0299     u64 eee_rx_lpi_time;
0300     u64 tx_fcs_errors;
0301     u64 tx_excess_deferral_errors;
0302     u64 tx_carrier_errors;
0303     u64 tx_bad_byte_count;
0304     u64 tx_single_collisions;
0305     u64 tx_multiple_collisions;
0306     u64 tx_excessive_collision;
0307     u64 tx_late_collisions;
0308     u64 tx_unicast_byte_count;
0309     u64 tx_broadcast_byte_count;
0310     u64 tx_multicast_byte_count;
0311     u64 tx_unicast_frames;
0312     u64 tx_broadcast_frames;
0313     u64 tx_multicast_frames;
0314     u64 tx_pause_frames;
0315     u64 tx_64_byte_frames;
0316     u64 tx_65_127_byte_frames;
0317     u64 tx_128_255_byte_frames;
0318     u64 tx_256_511_bytes_frames;
0319     u64 tx_512_1023_byte_frames;
0320     u64 tx_1024_1518_byte_frames;
0321     u64 tx_greater_1518_byte_frames;
0322     u64 eee_tx_lpi_transitions;
0323     u64 eee_tx_lpi_time;
0324 };
0325 
0326 static u32 lan78xx_regs[] = {
0327     ID_REV,
0328     INT_STS,
0329     HW_CFG,
0330     PMT_CTL,
0331     E2P_CMD,
0332     E2P_DATA,
0333     USB_STATUS,
0334     VLAN_TYPE,
0335     MAC_CR,
0336     MAC_RX,
0337     MAC_TX,
0338     FLOW,
0339     ERR_STS,
0340     MII_ACC,
0341     MII_DATA,
0342     EEE_TX_LPI_REQ_DLY,
0343     EEE_TW_TX_SYS,
0344     EEE_TX_LPI_REM_DLY,
0345     WUCSR
0346 };
0347 
0348 #define PHY_REG_SIZE (32 * sizeof(u32))
0349 
0350 struct lan78xx_net;
0351 
0352 struct lan78xx_priv {
0353     struct lan78xx_net *dev;
0354     u32 rfe_ctl;
0355     u32 mchash_table[DP_SEL_VHF_HASH_LEN]; /* multicast hash table */
0356     u32 pfilter_table[NUM_OF_MAF][2]; /* perfect filter table */
0357     u32 vlan_table[DP_SEL_VHF_VLAN_LEN];
0358     struct mutex dataport_mutex; /* for dataport access */
0359     spinlock_t rfe_ctl_lock; /* for rfe register access */
0360     struct work_struct set_multicast;
0361     struct work_struct set_vlan;
0362     u32 wol;
0363 };
0364 
0365 enum skb_state {
0366     illegal = 0,
0367     tx_start,
0368     tx_done,
0369     rx_start,
0370     rx_done,
0371     rx_cleanup,
0372     unlink_start
0373 };
0374 
0375 struct skb_data {       /* skb->cb is one of these */
0376     struct urb *urb;
0377     struct lan78xx_net *dev;
0378     enum skb_state state;
0379     size_t length;
0380     int num_of_packet;
0381 };
0382 
0383 struct usb_context {
0384     struct usb_ctrlrequest req;
0385     struct lan78xx_net *dev;
0386 };
0387 
0388 #define EVENT_TX_HALT           0
0389 #define EVENT_RX_HALT           1
0390 #define EVENT_RX_MEMORY         2
0391 #define EVENT_STS_SPLIT         3
0392 #define EVENT_LINK_RESET        4
0393 #define EVENT_RX_PAUSED         5
0394 #define EVENT_DEV_WAKING        6
0395 #define EVENT_DEV_ASLEEP        7
0396 #define EVENT_DEV_OPEN          8
0397 #define EVENT_STAT_UPDATE       9
0398 #define EVENT_DEV_DISCONNECT        10
0399 
0400 struct statstage {
0401     struct mutex            access_lock;    /* for stats access */
0402     struct lan78xx_statstage    saved;
0403     struct lan78xx_statstage    rollover_count;
0404     struct lan78xx_statstage    rollover_max;
0405     struct lan78xx_statstage64  curr_stat;
0406 };
0407 
0408 struct irq_domain_data {
0409     struct irq_domain   *irqdomain;
0410     unsigned int        phyirq;
0411     struct irq_chip     *irqchip;
0412     irq_flow_handler_t  irq_handler;
0413     u32         irqenable;
0414     struct mutex        irq_lock;       /* for irq bus access */
0415 };
0416 
0417 struct lan78xx_net {
0418     struct net_device   *net;
0419     struct usb_device   *udev;
0420     struct usb_interface    *intf;
0421     void            *driver_priv;
0422 
0423     unsigned int        tx_pend_data_len;
0424     size_t          n_tx_urbs;
0425     size_t          n_rx_urbs;
0426     size_t          tx_urb_size;
0427     size_t          rx_urb_size;
0428 
0429     struct sk_buff_head rxq_free;
0430     struct sk_buff_head rxq;
0431     struct sk_buff_head rxq_done;
0432     struct sk_buff_head rxq_overflow;
0433     struct sk_buff_head txq_free;
0434     struct sk_buff_head txq;
0435     struct sk_buff_head txq_pend;
0436 
0437     struct napi_struct  napi;
0438 
0439     struct delayed_work wq;
0440 
0441     int         msg_enable;
0442 
0443     struct urb      *urb_intr;
0444     struct usb_anchor   deferred;
0445 
0446     struct mutex        dev_mutex; /* serialise open/stop wrt suspend/resume */
0447     struct mutex        phy_mutex; /* for phy access */
0448     unsigned int        pipe_in, pipe_out, pipe_intr;
0449 
0450     unsigned int        bulk_in_delay;
0451     unsigned int        burst_cap;
0452 
0453     unsigned long       flags;
0454 
0455     wait_queue_head_t   *wait;
0456     unsigned char       suspend_count;
0457 
0458     unsigned int        maxpacket;
0459     struct timer_list   stat_monitor;
0460 
0461     unsigned long       data[5];
0462 
0463     int         link_on;
0464     u8          mdix_ctrl;
0465 
0466     u32         chipid;
0467     u32         chiprev;
0468     struct mii_bus      *mdiobus;
0469     phy_interface_t     interface;
0470 
0471     int         fc_autoneg;
0472     u8          fc_request_control;
0473 
0474     int         delta;
0475     struct statstage    stats;
0476 
0477     struct irq_domain_data  domain_data;
0478 };
0479 
0480 /* define external phy id */
0481 #define PHY_LAN8835         (0x0007C130)
0482 #define PHY_KSZ9031RNX          (0x00221620)
0483 
0484 /* use ethtool to change the level for any given device */
0485 static int msg_level = -1;
0486 module_param(msg_level, int, 0);
0487 MODULE_PARM_DESC(msg_level, "Override default message level");
0488 
0489 static struct sk_buff *lan78xx_get_buf(struct sk_buff_head *buf_pool)
0490 {
0491     if (skb_queue_empty(buf_pool))
0492         return NULL;
0493 
0494     return skb_dequeue(buf_pool);
0495 }
0496 
0497 static void lan78xx_release_buf(struct sk_buff_head *buf_pool,
0498                 struct sk_buff *buf)
0499 {
0500     buf->data = buf->head;
0501     skb_reset_tail_pointer(buf);
0502 
0503     buf->len = 0;
0504     buf->data_len = 0;
0505 
0506     skb_queue_tail(buf_pool, buf);
0507 }
0508 
0509 static void lan78xx_free_buf_pool(struct sk_buff_head *buf_pool)
0510 {
0511     struct skb_data *entry;
0512     struct sk_buff *buf;
0513 
0514     while (!skb_queue_empty(buf_pool)) {
0515         buf = skb_dequeue(buf_pool);
0516         if (buf) {
0517             entry = (struct skb_data *)buf->cb;
0518             usb_free_urb(entry->urb);
0519             dev_kfree_skb_any(buf);
0520         }
0521     }
0522 }
0523 
0524 static int lan78xx_alloc_buf_pool(struct sk_buff_head *buf_pool,
0525                   size_t n_urbs, size_t urb_size,
0526                   struct lan78xx_net *dev)
0527 {
0528     struct skb_data *entry;
0529     struct sk_buff *buf;
0530     struct urb *urb;
0531     int i;
0532 
0533     skb_queue_head_init(buf_pool);
0534 
0535     for (i = 0; i < n_urbs; i++) {
0536         buf = alloc_skb(urb_size, GFP_ATOMIC);
0537         if (!buf)
0538             goto error;
0539 
0540         if (skb_linearize(buf) != 0) {
0541             dev_kfree_skb_any(buf);
0542             goto error;
0543         }
0544 
0545         urb = usb_alloc_urb(0, GFP_ATOMIC);
0546         if (!urb) {
0547             dev_kfree_skb_any(buf);
0548             goto error;
0549         }
0550 
0551         entry = (struct skb_data *)buf->cb;
0552         entry->urb = urb;
0553         entry->dev = dev;
0554         entry->length = 0;
0555         entry->num_of_packet = 0;
0556 
0557         skb_queue_tail(buf_pool, buf);
0558     }
0559 
0560     return 0;
0561 
0562 error:
0563     lan78xx_free_buf_pool(buf_pool);
0564 
0565     return -ENOMEM;
0566 }
0567 
0568 static struct sk_buff *lan78xx_get_rx_buf(struct lan78xx_net *dev)
0569 {
0570     return lan78xx_get_buf(&dev->rxq_free);
0571 }
0572 
0573 static void lan78xx_release_rx_buf(struct lan78xx_net *dev,
0574                    struct sk_buff *rx_buf)
0575 {
0576     lan78xx_release_buf(&dev->rxq_free, rx_buf);
0577 }
0578 
0579 static void lan78xx_free_rx_resources(struct lan78xx_net *dev)
0580 {
0581     lan78xx_free_buf_pool(&dev->rxq_free);
0582 }
0583 
0584 static int lan78xx_alloc_rx_resources(struct lan78xx_net *dev)
0585 {
0586     return lan78xx_alloc_buf_pool(&dev->rxq_free,
0587                       dev->n_rx_urbs, dev->rx_urb_size, dev);
0588 }
0589 
0590 static struct sk_buff *lan78xx_get_tx_buf(struct lan78xx_net *dev)
0591 {
0592     return lan78xx_get_buf(&dev->txq_free);
0593 }
0594 
0595 static void lan78xx_release_tx_buf(struct lan78xx_net *dev,
0596                    struct sk_buff *tx_buf)
0597 {
0598     lan78xx_release_buf(&dev->txq_free, tx_buf);
0599 }
0600 
0601 static void lan78xx_free_tx_resources(struct lan78xx_net *dev)
0602 {
0603     lan78xx_free_buf_pool(&dev->txq_free);
0604 }
0605 
0606 static int lan78xx_alloc_tx_resources(struct lan78xx_net *dev)
0607 {
0608     return lan78xx_alloc_buf_pool(&dev->txq_free,
0609                       dev->n_tx_urbs, dev->tx_urb_size, dev);
0610 }
0611 
0612 static int lan78xx_read_reg(struct lan78xx_net *dev, u32 index, u32 *data)
0613 {
0614     u32 *buf;
0615     int ret;
0616 
0617     if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags))
0618         return -ENODEV;
0619 
0620     buf = kmalloc(sizeof(u32), GFP_KERNEL);
0621     if (!buf)
0622         return -ENOMEM;
0623 
0624     ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0),
0625                   USB_VENDOR_REQUEST_READ_REGISTER,
0626                   USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
0627                   0, index, buf, 4, USB_CTRL_GET_TIMEOUT);
0628     if (likely(ret >= 0)) {
0629         le32_to_cpus(buf);
0630         *data = *buf;
0631     } else if (net_ratelimit()) {
0632         netdev_warn(dev->net,
0633                 "Failed to read register index 0x%08x. ret = %d",
0634                 index, ret);
0635     }
0636 
0637     kfree(buf);
0638 
0639     return ret;
0640 }
0641 
0642 static int lan78xx_write_reg(struct lan78xx_net *dev, u32 index, u32 data)
0643 {
0644     u32 *buf;
0645     int ret;
0646 
0647     if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags))
0648         return -ENODEV;
0649 
0650     buf = kmalloc(sizeof(u32), GFP_KERNEL);
0651     if (!buf)
0652         return -ENOMEM;
0653 
0654     *buf = data;
0655     cpu_to_le32s(buf);
0656 
0657     ret = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0),
0658                   USB_VENDOR_REQUEST_WRITE_REGISTER,
0659                   USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
0660                   0, index, buf, 4, USB_CTRL_SET_TIMEOUT);
0661     if (unlikely(ret < 0) &&
0662         net_ratelimit()) {
0663         netdev_warn(dev->net,
0664                 "Failed to write register index 0x%08x. ret = %d",
0665                 index, ret);
0666     }
0667 
0668     kfree(buf);
0669 
0670     return ret;
0671 }
0672 
0673 static int lan78xx_update_reg(struct lan78xx_net *dev, u32 reg, u32 mask,
0674                   u32 data)
0675 {
0676     int ret;
0677     u32 buf;
0678 
0679     ret = lan78xx_read_reg(dev, reg, &buf);
0680     if (ret < 0)
0681         return ret;
0682 
0683     buf &= ~mask;
0684     buf |= (mask & data);
0685 
0686     ret = lan78xx_write_reg(dev, reg, buf);
0687     if (ret < 0)
0688         return ret;
0689 
0690     return 0;
0691 }
0692 
0693 static int lan78xx_read_stats(struct lan78xx_net *dev,
0694                   struct lan78xx_statstage *data)
0695 {
0696     int ret = 0;
0697     int i;
0698     struct lan78xx_statstage *stats;
0699     u32 *src;
0700     u32 *dst;
0701 
0702     stats = kmalloc(sizeof(*stats), GFP_KERNEL);
0703     if (!stats)
0704         return -ENOMEM;
0705 
0706     ret = usb_control_msg(dev->udev,
0707                   usb_rcvctrlpipe(dev->udev, 0),
0708                   USB_VENDOR_REQUEST_GET_STATS,
0709                   USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
0710                   0,
0711                   0,
0712                   (void *)stats,
0713                   sizeof(*stats),
0714                   USB_CTRL_SET_TIMEOUT);
0715     if (likely(ret >= 0)) {
0716         src = (u32 *)stats;
0717         dst = (u32 *)data;
0718         for (i = 0; i < sizeof(*stats) / sizeof(u32); i++) {
0719             le32_to_cpus(&src[i]);
0720             dst[i] = src[i];
0721         }
0722     } else {
0723         netdev_warn(dev->net,
0724                 "Failed to read stat ret = %d", ret);
0725     }
0726 
0727     kfree(stats);
0728 
0729     return ret;
0730 }
0731 
0732 #define check_counter_rollover(struct1, dev_stats, member)      \
0733     do {                                \
0734         if ((struct1)->member < (dev_stats).saved.member)   \
0735             (dev_stats).rollover_count.member++;        \
0736     } while (0)
0737 
0738 static void lan78xx_check_stat_rollover(struct lan78xx_net *dev,
0739                     struct lan78xx_statstage *stats)
0740 {
0741     check_counter_rollover(stats, dev->stats, rx_fcs_errors);
0742     check_counter_rollover(stats, dev->stats, rx_alignment_errors);
0743     check_counter_rollover(stats, dev->stats, rx_fragment_errors);
0744     check_counter_rollover(stats, dev->stats, rx_jabber_errors);
0745     check_counter_rollover(stats, dev->stats, rx_undersize_frame_errors);
0746     check_counter_rollover(stats, dev->stats, rx_oversize_frame_errors);
0747     check_counter_rollover(stats, dev->stats, rx_dropped_frames);
0748     check_counter_rollover(stats, dev->stats, rx_unicast_byte_count);
0749     check_counter_rollover(stats, dev->stats, rx_broadcast_byte_count);
0750     check_counter_rollover(stats, dev->stats, rx_multicast_byte_count);
0751     check_counter_rollover(stats, dev->stats, rx_unicast_frames);
0752     check_counter_rollover(stats, dev->stats, rx_broadcast_frames);
0753     check_counter_rollover(stats, dev->stats, rx_multicast_frames);
0754     check_counter_rollover(stats, dev->stats, rx_pause_frames);
0755     check_counter_rollover(stats, dev->stats, rx_64_byte_frames);
0756     check_counter_rollover(stats, dev->stats, rx_65_127_byte_frames);
0757     check_counter_rollover(stats, dev->stats, rx_128_255_byte_frames);
0758     check_counter_rollover(stats, dev->stats, rx_256_511_bytes_frames);
0759     check_counter_rollover(stats, dev->stats, rx_512_1023_byte_frames);
0760     check_counter_rollover(stats, dev->stats, rx_1024_1518_byte_frames);
0761     check_counter_rollover(stats, dev->stats, rx_greater_1518_byte_frames);
0762     check_counter_rollover(stats, dev->stats, eee_rx_lpi_transitions);
0763     check_counter_rollover(stats, dev->stats, eee_rx_lpi_time);
0764     check_counter_rollover(stats, dev->stats, tx_fcs_errors);
0765     check_counter_rollover(stats, dev->stats, tx_excess_deferral_errors);
0766     check_counter_rollover(stats, dev->stats, tx_carrier_errors);
0767     check_counter_rollover(stats, dev->stats, tx_bad_byte_count);
0768     check_counter_rollover(stats, dev->stats, tx_single_collisions);
0769     check_counter_rollover(stats, dev->stats, tx_multiple_collisions);
0770     check_counter_rollover(stats, dev->stats, tx_excessive_collision);
0771     check_counter_rollover(stats, dev->stats, tx_late_collisions);
0772     check_counter_rollover(stats, dev->stats, tx_unicast_byte_count);
0773     check_counter_rollover(stats, dev->stats, tx_broadcast_byte_count);
0774     check_counter_rollover(stats, dev->stats, tx_multicast_byte_count);
0775     check_counter_rollover(stats, dev->stats, tx_unicast_frames);
0776     check_counter_rollover(stats, dev->stats, tx_broadcast_frames);
0777     check_counter_rollover(stats, dev->stats, tx_multicast_frames);
0778     check_counter_rollover(stats, dev->stats, tx_pause_frames);
0779     check_counter_rollover(stats, dev->stats, tx_64_byte_frames);
0780     check_counter_rollover(stats, dev->stats, tx_65_127_byte_frames);
0781     check_counter_rollover(stats, dev->stats, tx_128_255_byte_frames);
0782     check_counter_rollover(stats, dev->stats, tx_256_511_bytes_frames);
0783     check_counter_rollover(stats, dev->stats, tx_512_1023_byte_frames);
0784     check_counter_rollover(stats, dev->stats, tx_1024_1518_byte_frames);
0785     check_counter_rollover(stats, dev->stats, tx_greater_1518_byte_frames);
0786     check_counter_rollover(stats, dev->stats, eee_tx_lpi_transitions);
0787     check_counter_rollover(stats, dev->stats, eee_tx_lpi_time);
0788 
0789     memcpy(&dev->stats.saved, stats, sizeof(struct lan78xx_statstage));
0790 }
0791 
0792 static void lan78xx_update_stats(struct lan78xx_net *dev)
0793 {
0794     u32 *p, *count, *max;
0795     u64 *data;
0796     int i;
0797     struct lan78xx_statstage lan78xx_stats;
0798 
0799     if (usb_autopm_get_interface(dev->intf) < 0)
0800         return;
0801 
0802     p = (u32 *)&lan78xx_stats;
0803     count = (u32 *)&dev->stats.rollover_count;
0804     max = (u32 *)&dev->stats.rollover_max;
0805     data = (u64 *)&dev->stats.curr_stat;
0806 
0807     mutex_lock(&dev->stats.access_lock);
0808 
0809     if (lan78xx_read_stats(dev, &lan78xx_stats) > 0)
0810         lan78xx_check_stat_rollover(dev, &lan78xx_stats);
0811 
0812     for (i = 0; i < (sizeof(lan78xx_stats) / (sizeof(u32))); i++)
0813         data[i] = (u64)p[i] + ((u64)count[i] * ((u64)max[i] + 1));
0814 
0815     mutex_unlock(&dev->stats.access_lock);
0816 
0817     usb_autopm_put_interface(dev->intf);
0818 }
0819 
0820 /* Loop until the read is completed with timeout called with phy_mutex held */
0821 static int lan78xx_phy_wait_not_busy(struct lan78xx_net *dev)
0822 {
0823     unsigned long start_time = jiffies;
0824     u32 val;
0825     int ret;
0826 
0827     do {
0828         ret = lan78xx_read_reg(dev, MII_ACC, &val);
0829         if (unlikely(ret < 0))
0830             return -EIO;
0831 
0832         if (!(val & MII_ACC_MII_BUSY_))
0833             return 0;
0834     } while (!time_after(jiffies, start_time + HZ));
0835 
0836     return -EIO;
0837 }
0838 
0839 static inline u32 mii_access(int id, int index, int read)
0840 {
0841     u32 ret;
0842 
0843     ret = ((u32)id << MII_ACC_PHY_ADDR_SHIFT_) & MII_ACC_PHY_ADDR_MASK_;
0844     ret |= ((u32)index << MII_ACC_MIIRINDA_SHIFT_) & MII_ACC_MIIRINDA_MASK_;
0845     if (read)
0846         ret |= MII_ACC_MII_READ_;
0847     else
0848         ret |= MII_ACC_MII_WRITE_;
0849     ret |= MII_ACC_MII_BUSY_;
0850 
0851     return ret;
0852 }
0853 
0854 static int lan78xx_wait_eeprom(struct lan78xx_net *dev)
0855 {
0856     unsigned long start_time = jiffies;
0857     u32 val;
0858     int ret;
0859 
0860     do {
0861         ret = lan78xx_read_reg(dev, E2P_CMD, &val);
0862         if (unlikely(ret < 0))
0863             return -EIO;
0864 
0865         if (!(val & E2P_CMD_EPC_BUSY_) ||
0866             (val & E2P_CMD_EPC_TIMEOUT_))
0867             break;
0868         usleep_range(40, 100);
0869     } while (!time_after(jiffies, start_time + HZ));
0870 
0871     if (val & (E2P_CMD_EPC_TIMEOUT_ | E2P_CMD_EPC_BUSY_)) {
0872         netdev_warn(dev->net, "EEPROM read operation timeout");
0873         return -EIO;
0874     }
0875 
0876     return 0;
0877 }
0878 
0879 static int lan78xx_eeprom_confirm_not_busy(struct lan78xx_net *dev)
0880 {
0881     unsigned long start_time = jiffies;
0882     u32 val;
0883     int ret;
0884 
0885     do {
0886         ret = lan78xx_read_reg(dev, E2P_CMD, &val);
0887         if (unlikely(ret < 0))
0888             return -EIO;
0889 
0890         if (!(val & E2P_CMD_EPC_BUSY_))
0891             return 0;
0892 
0893         usleep_range(40, 100);
0894     } while (!time_after(jiffies, start_time + HZ));
0895 
0896     netdev_warn(dev->net, "EEPROM is busy");
0897     return -EIO;
0898 }
0899 
0900 static int lan78xx_read_raw_eeprom(struct lan78xx_net *dev, u32 offset,
0901                    u32 length, u8 *data)
0902 {
0903     u32 val;
0904     u32 saved;
0905     int i, ret;
0906     int retval;
0907 
0908     /* depends on chip, some EEPROM pins are muxed with LED function.
0909      * disable & restore LED function to access EEPROM.
0910      */
0911     ret = lan78xx_read_reg(dev, HW_CFG, &val);
0912     saved = val;
0913     if (dev->chipid == ID_REV_CHIP_ID_7800_) {
0914         val &= ~(HW_CFG_LED1_EN_ | HW_CFG_LED0_EN_);
0915         ret = lan78xx_write_reg(dev, HW_CFG, val);
0916     }
0917 
0918     retval = lan78xx_eeprom_confirm_not_busy(dev);
0919     if (retval)
0920         return retval;
0921 
0922     for (i = 0; i < length; i++) {
0923         val = E2P_CMD_EPC_BUSY_ | E2P_CMD_EPC_CMD_READ_;
0924         val |= (offset & E2P_CMD_EPC_ADDR_MASK_);
0925         ret = lan78xx_write_reg(dev, E2P_CMD, val);
0926         if (unlikely(ret < 0)) {
0927             retval = -EIO;
0928             goto exit;
0929         }
0930 
0931         retval = lan78xx_wait_eeprom(dev);
0932         if (retval < 0)
0933             goto exit;
0934 
0935         ret = lan78xx_read_reg(dev, E2P_DATA, &val);
0936         if (unlikely(ret < 0)) {
0937             retval = -EIO;
0938             goto exit;
0939         }
0940 
0941         data[i] = val & 0xFF;
0942         offset++;
0943     }
0944 
0945     retval = 0;
0946 exit:
0947     if (dev->chipid == ID_REV_CHIP_ID_7800_)
0948         ret = lan78xx_write_reg(dev, HW_CFG, saved);
0949 
0950     return retval;
0951 }
0952 
0953 static int lan78xx_read_eeprom(struct lan78xx_net *dev, u32 offset,
0954                    u32 length, u8 *data)
0955 {
0956     u8 sig;
0957     int ret;
0958 
0959     ret = lan78xx_read_raw_eeprom(dev, 0, 1, &sig);
0960     if ((ret == 0) && (sig == EEPROM_INDICATOR))
0961         ret = lan78xx_read_raw_eeprom(dev, offset, length, data);
0962     else
0963         ret = -EINVAL;
0964 
0965     return ret;
0966 }
0967 
0968 static int lan78xx_write_raw_eeprom(struct lan78xx_net *dev, u32 offset,
0969                     u32 length, u8 *data)
0970 {
0971     u32 val;
0972     u32 saved;
0973     int i, ret;
0974     int retval;
0975 
0976     /* depends on chip, some EEPROM pins are muxed with LED function.
0977      * disable & restore LED function to access EEPROM.
0978      */
0979     ret = lan78xx_read_reg(dev, HW_CFG, &val);
0980     saved = val;
0981     if (dev->chipid == ID_REV_CHIP_ID_7800_) {
0982         val &= ~(HW_CFG_LED1_EN_ | HW_CFG_LED0_EN_);
0983         ret = lan78xx_write_reg(dev, HW_CFG, val);
0984     }
0985 
0986     retval = lan78xx_eeprom_confirm_not_busy(dev);
0987     if (retval)
0988         goto exit;
0989 
0990     /* Issue write/erase enable command */
0991     val = E2P_CMD_EPC_BUSY_ | E2P_CMD_EPC_CMD_EWEN_;
0992     ret = lan78xx_write_reg(dev, E2P_CMD, val);
0993     if (unlikely(ret < 0)) {
0994         retval = -EIO;
0995         goto exit;
0996     }
0997 
0998     retval = lan78xx_wait_eeprom(dev);
0999     if (retval < 0)
1000         goto exit;
1001 
1002     for (i = 0; i < length; i++) {
1003         /* Fill data register */
1004         val = data[i];
1005         ret = lan78xx_write_reg(dev, E2P_DATA, val);
1006         if (ret < 0) {
1007             retval = -EIO;
1008             goto exit;
1009         }
1010 
1011         /* Send "write" command */
1012         val = E2P_CMD_EPC_BUSY_ | E2P_CMD_EPC_CMD_WRITE_;
1013         val |= (offset & E2P_CMD_EPC_ADDR_MASK_);
1014         ret = lan78xx_write_reg(dev, E2P_CMD, val);
1015         if (ret < 0) {
1016             retval = -EIO;
1017             goto exit;
1018         }
1019 
1020         retval = lan78xx_wait_eeprom(dev);
1021         if (retval < 0)
1022             goto exit;
1023 
1024         offset++;
1025     }
1026 
1027     retval = 0;
1028 exit:
1029     if (dev->chipid == ID_REV_CHIP_ID_7800_)
1030         ret = lan78xx_write_reg(dev, HW_CFG, saved);
1031 
1032     return retval;
1033 }
1034 
1035 static int lan78xx_read_raw_otp(struct lan78xx_net *dev, u32 offset,
1036                 u32 length, u8 *data)
1037 {
1038     int i;
1039     u32 buf;
1040     unsigned long timeout;
1041 
1042     lan78xx_read_reg(dev, OTP_PWR_DN, &buf);
1043 
1044     if (buf & OTP_PWR_DN_PWRDN_N_) {
1045         /* clear it and wait to be cleared */
1046         lan78xx_write_reg(dev, OTP_PWR_DN, 0);
1047 
1048         timeout = jiffies + HZ;
1049         do {
1050             usleep_range(1, 10);
1051             lan78xx_read_reg(dev, OTP_PWR_DN, &buf);
1052             if (time_after(jiffies, timeout)) {
1053                 netdev_warn(dev->net,
1054                         "timeout on OTP_PWR_DN");
1055                 return -EIO;
1056             }
1057         } while (buf & OTP_PWR_DN_PWRDN_N_);
1058     }
1059 
1060     for (i = 0; i < length; i++) {
1061         lan78xx_write_reg(dev, OTP_ADDR1,
1062                   ((offset + i) >> 8) & OTP_ADDR1_15_11);
1063         lan78xx_write_reg(dev, OTP_ADDR2,
1064                   ((offset + i) & OTP_ADDR2_10_3));
1065 
1066         lan78xx_write_reg(dev, OTP_FUNC_CMD, OTP_FUNC_CMD_READ_);
1067         lan78xx_write_reg(dev, OTP_CMD_GO, OTP_CMD_GO_GO_);
1068 
1069         timeout = jiffies + HZ;
1070         do {
1071             udelay(1);
1072             lan78xx_read_reg(dev, OTP_STATUS, &buf);
1073             if (time_after(jiffies, timeout)) {
1074                 netdev_warn(dev->net,
1075                         "timeout on OTP_STATUS");
1076                 return -EIO;
1077             }
1078         } while (buf & OTP_STATUS_BUSY_);
1079 
1080         lan78xx_read_reg(dev, OTP_RD_DATA, &buf);
1081 
1082         data[i] = (u8)(buf & 0xFF);
1083     }
1084 
1085     return 0;
1086 }
1087 
1088 static int lan78xx_write_raw_otp(struct lan78xx_net *dev, u32 offset,
1089                  u32 length, u8 *data)
1090 {
1091     int i;
1092     u32 buf;
1093     unsigned long timeout;
1094 
1095     lan78xx_read_reg(dev, OTP_PWR_DN, &buf);
1096 
1097     if (buf & OTP_PWR_DN_PWRDN_N_) {
1098         /* clear it and wait to be cleared */
1099         lan78xx_write_reg(dev, OTP_PWR_DN, 0);
1100 
1101         timeout = jiffies + HZ;
1102         do {
1103             udelay(1);
1104             lan78xx_read_reg(dev, OTP_PWR_DN, &buf);
1105             if (time_after(jiffies, timeout)) {
1106                 netdev_warn(dev->net,
1107                         "timeout on OTP_PWR_DN completion");
1108                 return -EIO;
1109             }
1110         } while (buf & OTP_PWR_DN_PWRDN_N_);
1111     }
1112 
1113     /* set to BYTE program mode */
1114     lan78xx_write_reg(dev, OTP_PRGM_MODE, OTP_PRGM_MODE_BYTE_);
1115 
1116     for (i = 0; i < length; i++) {
1117         lan78xx_write_reg(dev, OTP_ADDR1,
1118                   ((offset + i) >> 8) & OTP_ADDR1_15_11);
1119         lan78xx_write_reg(dev, OTP_ADDR2,
1120                   ((offset + i) & OTP_ADDR2_10_3));
1121         lan78xx_write_reg(dev, OTP_PRGM_DATA, data[i]);
1122         lan78xx_write_reg(dev, OTP_TST_CMD, OTP_TST_CMD_PRGVRFY_);
1123         lan78xx_write_reg(dev, OTP_CMD_GO, OTP_CMD_GO_GO_);
1124 
1125         timeout = jiffies + HZ;
1126         do {
1127             udelay(1);
1128             lan78xx_read_reg(dev, OTP_STATUS, &buf);
1129             if (time_after(jiffies, timeout)) {
1130                 netdev_warn(dev->net,
1131                         "Timeout on OTP_STATUS completion");
1132                 return -EIO;
1133             }
1134         } while (buf & OTP_STATUS_BUSY_);
1135     }
1136 
1137     return 0;
1138 }
1139 
1140 static int lan78xx_read_otp(struct lan78xx_net *dev, u32 offset,
1141                 u32 length, u8 *data)
1142 {
1143     u8 sig;
1144     int ret;
1145 
1146     ret = lan78xx_read_raw_otp(dev, 0, 1, &sig);
1147 
1148     if (ret == 0) {
1149         if (sig == OTP_INDICATOR_2)
1150             offset += 0x100;
1151         else if (sig != OTP_INDICATOR_1)
1152             ret = -EINVAL;
1153         if (!ret)
1154             ret = lan78xx_read_raw_otp(dev, offset, length, data);
1155     }
1156 
1157     return ret;
1158 }
1159 
1160 static int lan78xx_dataport_wait_not_busy(struct lan78xx_net *dev)
1161 {
1162     int i, ret;
1163 
1164     for (i = 0; i < 100; i++) {
1165         u32 dp_sel;
1166 
1167         ret = lan78xx_read_reg(dev, DP_SEL, &dp_sel);
1168         if (unlikely(ret < 0))
1169             return -EIO;
1170 
1171         if (dp_sel & DP_SEL_DPRDY_)
1172             return 0;
1173 
1174         usleep_range(40, 100);
1175     }
1176 
1177     netdev_warn(dev->net, "%s timed out", __func__);
1178 
1179     return -EIO;
1180 }
1181 
1182 static int lan78xx_dataport_write(struct lan78xx_net *dev, u32 ram_select,
1183                   u32 addr, u32 length, u32 *buf)
1184 {
1185     struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
1186     u32 dp_sel;
1187     int i, ret;
1188 
1189     if (usb_autopm_get_interface(dev->intf) < 0)
1190         return 0;
1191 
1192     mutex_lock(&pdata->dataport_mutex);
1193 
1194     ret = lan78xx_dataport_wait_not_busy(dev);
1195     if (ret < 0)
1196         goto done;
1197 
1198     ret = lan78xx_read_reg(dev, DP_SEL, &dp_sel);
1199 
1200     dp_sel &= ~DP_SEL_RSEL_MASK_;
1201     dp_sel |= ram_select;
1202     ret = lan78xx_write_reg(dev, DP_SEL, dp_sel);
1203 
1204     for (i = 0; i < length; i++) {
1205         ret = lan78xx_write_reg(dev, DP_ADDR, addr + i);
1206 
1207         ret = lan78xx_write_reg(dev, DP_DATA, buf[i]);
1208 
1209         ret = lan78xx_write_reg(dev, DP_CMD, DP_CMD_WRITE_);
1210 
1211         ret = lan78xx_dataport_wait_not_busy(dev);
1212         if (ret < 0)
1213             goto done;
1214     }
1215 
1216 done:
1217     mutex_unlock(&pdata->dataport_mutex);
1218     usb_autopm_put_interface(dev->intf);
1219 
1220     return ret;
1221 }
1222 
1223 static void lan78xx_set_addr_filter(struct lan78xx_priv *pdata,
1224                     int index, u8 addr[ETH_ALEN])
1225 {
1226     u32 temp;
1227 
1228     if ((pdata) && (index > 0) && (index < NUM_OF_MAF)) {
1229         temp = addr[3];
1230         temp = addr[2] | (temp << 8);
1231         temp = addr[1] | (temp << 8);
1232         temp = addr[0] | (temp << 8);
1233         pdata->pfilter_table[index][1] = temp;
1234         temp = addr[5];
1235         temp = addr[4] | (temp << 8);
1236         temp |= MAF_HI_VALID_ | MAF_HI_TYPE_DST_;
1237         pdata->pfilter_table[index][0] = temp;
1238     }
1239 }
1240 
1241 /* returns hash bit number for given MAC address */
1242 static inline u32 lan78xx_hash(char addr[ETH_ALEN])
1243 {
1244     return (ether_crc(ETH_ALEN, addr) >> 23) & 0x1ff;
1245 }
1246 
1247 static void lan78xx_deferred_multicast_write(struct work_struct *param)
1248 {
1249     struct lan78xx_priv *pdata =
1250             container_of(param, struct lan78xx_priv, set_multicast);
1251     struct lan78xx_net *dev = pdata->dev;
1252     int i;
1253 
1254     netif_dbg(dev, drv, dev->net, "deferred multicast write 0x%08x\n",
1255           pdata->rfe_ctl);
1256 
1257     lan78xx_dataport_write(dev, DP_SEL_RSEL_VLAN_DA_, DP_SEL_VHF_VLAN_LEN,
1258                    DP_SEL_VHF_HASH_LEN, pdata->mchash_table);
1259 
1260     for (i = 1; i < NUM_OF_MAF; i++) {
1261         lan78xx_write_reg(dev, MAF_HI(i), 0);
1262         lan78xx_write_reg(dev, MAF_LO(i),
1263                   pdata->pfilter_table[i][1]);
1264         lan78xx_write_reg(dev, MAF_HI(i),
1265                   pdata->pfilter_table[i][0]);
1266     }
1267 
1268     lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl);
1269 }
1270 
1271 static void lan78xx_set_multicast(struct net_device *netdev)
1272 {
1273     struct lan78xx_net *dev = netdev_priv(netdev);
1274     struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
1275     unsigned long flags;
1276     int i;
1277 
1278     spin_lock_irqsave(&pdata->rfe_ctl_lock, flags);
1279 
1280     pdata->rfe_ctl &= ~(RFE_CTL_UCAST_EN_ | RFE_CTL_MCAST_EN_ |
1281                 RFE_CTL_DA_PERFECT_ | RFE_CTL_MCAST_HASH_);
1282 
1283     for (i = 0; i < DP_SEL_VHF_HASH_LEN; i++)
1284         pdata->mchash_table[i] = 0;
1285 
1286     /* pfilter_table[0] has own HW address */
1287     for (i = 1; i < NUM_OF_MAF; i++) {
1288         pdata->pfilter_table[i][0] = 0;
1289         pdata->pfilter_table[i][1] = 0;
1290     }
1291 
1292     pdata->rfe_ctl |= RFE_CTL_BCAST_EN_;
1293 
1294     if (dev->net->flags & IFF_PROMISC) {
1295         netif_dbg(dev, drv, dev->net, "promiscuous mode enabled");
1296         pdata->rfe_ctl |= RFE_CTL_MCAST_EN_ | RFE_CTL_UCAST_EN_;
1297     } else {
1298         if (dev->net->flags & IFF_ALLMULTI) {
1299             netif_dbg(dev, drv, dev->net,
1300                   "receive all multicast enabled");
1301             pdata->rfe_ctl |= RFE_CTL_MCAST_EN_;
1302         }
1303     }
1304 
1305     if (netdev_mc_count(dev->net)) {
1306         struct netdev_hw_addr *ha;
1307         int i;
1308 
1309         netif_dbg(dev, drv, dev->net, "receive multicast hash filter");
1310 
1311         pdata->rfe_ctl |= RFE_CTL_DA_PERFECT_;
1312 
1313         i = 1;
1314         netdev_for_each_mc_addr(ha, netdev) {
1315             /* set first 32 into Perfect Filter */
1316             if (i < 33) {
1317                 lan78xx_set_addr_filter(pdata, i, ha->addr);
1318             } else {
1319                 u32 bitnum = lan78xx_hash(ha->addr);
1320 
1321                 pdata->mchash_table[bitnum / 32] |=
1322                             (1 << (bitnum % 32));
1323                 pdata->rfe_ctl |= RFE_CTL_MCAST_HASH_;
1324             }
1325             i++;
1326         }
1327     }
1328 
1329     spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags);
1330 
1331     /* defer register writes to a sleepable context */
1332     schedule_work(&pdata->set_multicast);
1333 }
1334 
1335 static int lan78xx_update_flowcontrol(struct lan78xx_net *dev, u8 duplex,
1336                       u16 lcladv, u16 rmtadv)
1337 {
1338     u32 flow = 0, fct_flow = 0;
1339     u8 cap;
1340 
1341     if (dev->fc_autoneg)
1342         cap = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
1343     else
1344         cap = dev->fc_request_control;
1345 
1346     if (cap & FLOW_CTRL_TX)
1347         flow |= (FLOW_CR_TX_FCEN_ | 0xFFFF);
1348 
1349     if (cap & FLOW_CTRL_RX)
1350         flow |= FLOW_CR_RX_FCEN_;
1351 
1352     if (dev->udev->speed == USB_SPEED_SUPER)
1353         fct_flow = FLOW_CTRL_THRESHOLD(FLOW_ON_SS, FLOW_OFF_SS);
1354     else if (dev->udev->speed == USB_SPEED_HIGH)
1355         fct_flow = FLOW_CTRL_THRESHOLD(FLOW_ON_HS, FLOW_OFF_HS);
1356 
1357     netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s",
1358           (cap & FLOW_CTRL_RX ? "enabled" : "disabled"),
1359           (cap & FLOW_CTRL_TX ? "enabled" : "disabled"));
1360 
1361     lan78xx_write_reg(dev, FCT_FLOW, fct_flow);
1362 
1363     /* threshold value should be set before enabling flow */
1364     lan78xx_write_reg(dev, FLOW, flow);
1365 
1366     return 0;
1367 }
1368 
1369 static void lan78xx_rx_urb_submit_all(struct lan78xx_net *dev);
1370 
1371 static int lan78xx_mac_reset(struct lan78xx_net *dev)
1372 {
1373     unsigned long start_time = jiffies;
1374     u32 val;
1375     int ret;
1376 
1377     mutex_lock(&dev->phy_mutex);
1378 
1379     /* Resetting the device while there is activity on the MDIO
1380      * bus can result in the MAC interface locking up and not
1381      * completing register access transactions.
1382      */
1383     ret = lan78xx_phy_wait_not_busy(dev);
1384     if (ret < 0)
1385         goto done;
1386 
1387     ret = lan78xx_read_reg(dev, MAC_CR, &val);
1388     if (ret < 0)
1389         goto done;
1390 
1391     val |= MAC_CR_RST_;
1392     ret = lan78xx_write_reg(dev, MAC_CR, val);
1393     if (ret < 0)
1394         goto done;
1395 
1396     /* Wait for the reset to complete before allowing any further
1397      * MAC register accesses otherwise the MAC may lock up.
1398      */
1399     do {
1400         ret = lan78xx_read_reg(dev, MAC_CR, &val);
1401         if (ret < 0)
1402             goto done;
1403 
1404         if (!(val & MAC_CR_RST_)) {
1405             ret = 0;
1406             goto done;
1407         }
1408     } while (!time_after(jiffies, start_time + HZ));
1409 
1410     ret = -ETIMEDOUT;
1411 done:
1412     mutex_unlock(&dev->phy_mutex);
1413 
1414     return ret;
1415 }
1416 
1417 static int lan78xx_link_reset(struct lan78xx_net *dev)
1418 {
1419     struct phy_device *phydev = dev->net->phydev;
1420     struct ethtool_link_ksettings ecmd;
1421     int ladv, radv, ret, link;
1422     u32 buf;
1423 
1424     /* clear LAN78xx interrupt status */
1425     ret = lan78xx_write_reg(dev, INT_STS, INT_STS_PHY_INT_);
1426     if (unlikely(ret < 0))
1427         return ret;
1428 
1429     mutex_lock(&phydev->lock);
1430     phy_read_status(phydev);
1431     link = phydev->link;
1432     mutex_unlock(&phydev->lock);
1433 
1434     if (!link && dev->link_on) {
1435         dev->link_on = false;
1436 
1437         /* reset MAC */
1438         ret = lan78xx_mac_reset(dev);
1439         if (ret < 0)
1440             return ret;
1441 
1442         del_timer(&dev->stat_monitor);
1443     } else if (link && !dev->link_on) {
1444         dev->link_on = true;
1445 
1446         phy_ethtool_ksettings_get(phydev, &ecmd);
1447 
1448         if (dev->udev->speed == USB_SPEED_SUPER) {
1449             if (ecmd.base.speed == 1000) {
1450                 /* disable U2 */
1451                 ret = lan78xx_read_reg(dev, USB_CFG1, &buf);
1452                 if (ret < 0)
1453                     return ret;
1454                 buf &= ~USB_CFG1_DEV_U2_INIT_EN_;
1455                 ret = lan78xx_write_reg(dev, USB_CFG1, buf);
1456                 if (ret < 0)
1457                     return ret;
1458                 /* enable U1 */
1459                 ret = lan78xx_read_reg(dev, USB_CFG1, &buf);
1460                 if (ret < 0)
1461                     return ret;
1462                 buf |= USB_CFG1_DEV_U1_INIT_EN_;
1463                 ret = lan78xx_write_reg(dev, USB_CFG1, buf);
1464                 if (ret < 0)
1465                     return ret;
1466             } else {
1467                 /* enable U1 & U2 */
1468                 ret = lan78xx_read_reg(dev, USB_CFG1, &buf);
1469                 if (ret < 0)
1470                     return ret;
1471                 buf |= USB_CFG1_DEV_U2_INIT_EN_;
1472                 buf |= USB_CFG1_DEV_U1_INIT_EN_;
1473                 ret = lan78xx_write_reg(dev, USB_CFG1, buf);
1474                 if (ret < 0)
1475                     return ret;
1476             }
1477         }
1478 
1479         ladv = phy_read(phydev, MII_ADVERTISE);
1480         if (ladv < 0)
1481             return ladv;
1482 
1483         radv = phy_read(phydev, MII_LPA);
1484         if (radv < 0)
1485             return radv;
1486 
1487         netif_dbg(dev, link, dev->net,
1488               "speed: %u duplex: %d anadv: 0x%04x anlpa: 0x%04x",
1489               ecmd.base.speed, ecmd.base.duplex, ladv, radv);
1490 
1491         ret = lan78xx_update_flowcontrol(dev, ecmd.base.duplex, ladv,
1492                          radv);
1493         if (ret < 0)
1494             return ret;
1495 
1496         if (!timer_pending(&dev->stat_monitor)) {
1497             dev->delta = 1;
1498             mod_timer(&dev->stat_monitor,
1499                   jiffies + STAT_UPDATE_TIMER);
1500         }
1501 
1502         lan78xx_rx_urb_submit_all(dev);
1503 
1504         napi_schedule(&dev->napi);
1505     }
1506 
1507     return 0;
1508 }
1509 
1510 /* some work can't be done in tasklets, so we use keventd
1511  *
1512  * NOTE:  annoying asymmetry:  if it's active, schedule_work() fails,
1513  * but tasklet_schedule() doesn't.  hope the failure is rare.
1514  */
1515 static void lan78xx_defer_kevent(struct lan78xx_net *dev, int work)
1516 {
1517     set_bit(work, &dev->flags);
1518     if (!schedule_delayed_work(&dev->wq, 0))
1519         netdev_err(dev->net, "kevent %d may have been dropped\n", work);
1520 }
1521 
1522 static void lan78xx_status(struct lan78xx_net *dev, struct urb *urb)
1523 {
1524     u32 intdata;
1525 
1526     if (urb->actual_length != 4) {
1527         netdev_warn(dev->net,
1528                 "unexpected urb length %d", urb->actual_length);
1529         return;
1530     }
1531 
1532     intdata = get_unaligned_le32(urb->transfer_buffer);
1533 
1534     if (intdata & INT_ENP_PHY_INT) {
1535         netif_dbg(dev, link, dev->net, "PHY INTR: 0x%08x\n", intdata);
1536         lan78xx_defer_kevent(dev, EVENT_LINK_RESET);
1537 
1538         if (dev->domain_data.phyirq > 0)
1539             generic_handle_irq_safe(dev->domain_data.phyirq);
1540     } else {
1541         netdev_warn(dev->net,
1542                 "unexpected interrupt: 0x%08x\n", intdata);
1543     }
1544 }
1545 
1546 static int lan78xx_ethtool_get_eeprom_len(struct net_device *netdev)
1547 {
1548     return MAX_EEPROM_SIZE;
1549 }
1550 
1551 static int lan78xx_ethtool_get_eeprom(struct net_device *netdev,
1552                       struct ethtool_eeprom *ee, u8 *data)
1553 {
1554     struct lan78xx_net *dev = netdev_priv(netdev);
1555     int ret;
1556 
1557     ret = usb_autopm_get_interface(dev->intf);
1558     if (ret)
1559         return ret;
1560 
1561     ee->magic = LAN78XX_EEPROM_MAGIC;
1562 
1563     ret = lan78xx_read_raw_eeprom(dev, ee->offset, ee->len, data);
1564 
1565     usb_autopm_put_interface(dev->intf);
1566 
1567     return ret;
1568 }
1569 
1570 static int lan78xx_ethtool_set_eeprom(struct net_device *netdev,
1571                       struct ethtool_eeprom *ee, u8 *data)
1572 {
1573     struct lan78xx_net *dev = netdev_priv(netdev);
1574     int ret;
1575 
1576     ret = usb_autopm_get_interface(dev->intf);
1577     if (ret)
1578         return ret;
1579 
1580     /* Invalid EEPROM_INDICATOR at offset zero will result in a failure
1581      * to load data from EEPROM
1582      */
1583     if (ee->magic == LAN78XX_EEPROM_MAGIC)
1584         ret = lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data);
1585     else if ((ee->magic == LAN78XX_OTP_MAGIC) &&
1586          (ee->offset == 0) &&
1587          (ee->len == 512) &&
1588          (data[0] == OTP_INDICATOR_1))
1589         ret = lan78xx_write_raw_otp(dev, ee->offset, ee->len, data);
1590 
1591     usb_autopm_put_interface(dev->intf);
1592 
1593     return ret;
1594 }
1595 
1596 static void lan78xx_get_strings(struct net_device *netdev, u32 stringset,
1597                 u8 *data)
1598 {
1599     if (stringset == ETH_SS_STATS)
1600         memcpy(data, lan78xx_gstrings, sizeof(lan78xx_gstrings));
1601 }
1602 
1603 static int lan78xx_get_sset_count(struct net_device *netdev, int sset)
1604 {
1605     if (sset == ETH_SS_STATS)
1606         return ARRAY_SIZE(lan78xx_gstrings);
1607     else
1608         return -EOPNOTSUPP;
1609 }
1610 
1611 static void lan78xx_get_stats(struct net_device *netdev,
1612                   struct ethtool_stats *stats, u64 *data)
1613 {
1614     struct lan78xx_net *dev = netdev_priv(netdev);
1615 
1616     lan78xx_update_stats(dev);
1617 
1618     mutex_lock(&dev->stats.access_lock);
1619     memcpy(data, &dev->stats.curr_stat, sizeof(dev->stats.curr_stat));
1620     mutex_unlock(&dev->stats.access_lock);
1621 }
1622 
1623 static void lan78xx_get_wol(struct net_device *netdev,
1624                 struct ethtool_wolinfo *wol)
1625 {
1626     struct lan78xx_net *dev = netdev_priv(netdev);
1627     int ret;
1628     u32 buf;
1629     struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
1630 
1631     if (usb_autopm_get_interface(dev->intf) < 0)
1632         return;
1633 
1634     ret = lan78xx_read_reg(dev, USB_CFG0, &buf);
1635     if (unlikely(ret < 0)) {
1636         wol->supported = 0;
1637         wol->wolopts = 0;
1638     } else {
1639         if (buf & USB_CFG_RMT_WKP_) {
1640             wol->supported = WAKE_ALL;
1641             wol->wolopts = pdata->wol;
1642         } else {
1643             wol->supported = 0;
1644             wol->wolopts = 0;
1645         }
1646     }
1647 
1648     usb_autopm_put_interface(dev->intf);
1649 }
1650 
1651 static int lan78xx_set_wol(struct net_device *netdev,
1652                struct ethtool_wolinfo *wol)
1653 {
1654     struct lan78xx_net *dev = netdev_priv(netdev);
1655     struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
1656     int ret;
1657 
1658     ret = usb_autopm_get_interface(dev->intf);
1659     if (ret < 0)
1660         return ret;
1661 
1662     if (wol->wolopts & ~WAKE_ALL)
1663         return -EINVAL;
1664 
1665     pdata->wol = wol->wolopts;
1666 
1667     device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts);
1668 
1669     phy_ethtool_set_wol(netdev->phydev, wol);
1670 
1671     usb_autopm_put_interface(dev->intf);
1672 
1673     return ret;
1674 }
1675 
1676 static int lan78xx_get_eee(struct net_device *net, struct ethtool_eee *edata)
1677 {
1678     struct lan78xx_net *dev = netdev_priv(net);
1679     struct phy_device *phydev = net->phydev;
1680     int ret;
1681     u32 buf;
1682 
1683     ret = usb_autopm_get_interface(dev->intf);
1684     if (ret < 0)
1685         return ret;
1686 
1687     ret = phy_ethtool_get_eee(phydev, edata);
1688     if (ret < 0)
1689         goto exit;
1690 
1691     ret = lan78xx_read_reg(dev, MAC_CR, &buf);
1692     if (buf & MAC_CR_EEE_EN_) {
1693         edata->eee_enabled = true;
1694         edata->eee_active = !!(edata->advertised &
1695                        edata->lp_advertised);
1696         edata->tx_lpi_enabled = true;
1697         /* EEE_TX_LPI_REQ_DLY & tx_lpi_timer are same uSec unit */
1698         ret = lan78xx_read_reg(dev, EEE_TX_LPI_REQ_DLY, &buf);
1699         edata->tx_lpi_timer = buf;
1700     } else {
1701         edata->eee_enabled = false;
1702         edata->eee_active = false;
1703         edata->tx_lpi_enabled = false;
1704         edata->tx_lpi_timer = 0;
1705     }
1706 
1707     ret = 0;
1708 exit:
1709     usb_autopm_put_interface(dev->intf);
1710 
1711     return ret;
1712 }
1713 
1714 static int lan78xx_set_eee(struct net_device *net, struct ethtool_eee *edata)
1715 {
1716     struct lan78xx_net *dev = netdev_priv(net);
1717     int ret;
1718     u32 buf;
1719 
1720     ret = usb_autopm_get_interface(dev->intf);
1721     if (ret < 0)
1722         return ret;
1723 
1724     if (edata->eee_enabled) {
1725         ret = lan78xx_read_reg(dev, MAC_CR, &buf);
1726         buf |= MAC_CR_EEE_EN_;
1727         ret = lan78xx_write_reg(dev, MAC_CR, buf);
1728 
1729         phy_ethtool_set_eee(net->phydev, edata);
1730 
1731         buf = (u32)edata->tx_lpi_timer;
1732         ret = lan78xx_write_reg(dev, EEE_TX_LPI_REQ_DLY, buf);
1733     } else {
1734         ret = lan78xx_read_reg(dev, MAC_CR, &buf);
1735         buf &= ~MAC_CR_EEE_EN_;
1736         ret = lan78xx_write_reg(dev, MAC_CR, buf);
1737     }
1738 
1739     usb_autopm_put_interface(dev->intf);
1740 
1741     return 0;
1742 }
1743 
1744 static u32 lan78xx_get_link(struct net_device *net)
1745 {
1746     u32 link;
1747 
1748     mutex_lock(&net->phydev->lock);
1749     phy_read_status(net->phydev);
1750     link = net->phydev->link;
1751     mutex_unlock(&net->phydev->lock);
1752 
1753     return link;
1754 }
1755 
1756 static void lan78xx_get_drvinfo(struct net_device *net,
1757                 struct ethtool_drvinfo *info)
1758 {
1759     struct lan78xx_net *dev = netdev_priv(net);
1760 
1761     strncpy(info->driver, DRIVER_NAME, sizeof(info->driver));
1762     usb_make_path(dev->udev, info->bus_info, sizeof(info->bus_info));
1763 }
1764 
1765 static u32 lan78xx_get_msglevel(struct net_device *net)
1766 {
1767     struct lan78xx_net *dev = netdev_priv(net);
1768 
1769     return dev->msg_enable;
1770 }
1771 
1772 static void lan78xx_set_msglevel(struct net_device *net, u32 level)
1773 {
1774     struct lan78xx_net *dev = netdev_priv(net);
1775 
1776     dev->msg_enable = level;
1777 }
1778 
1779 static int lan78xx_get_link_ksettings(struct net_device *net,
1780                       struct ethtool_link_ksettings *cmd)
1781 {
1782     struct lan78xx_net *dev = netdev_priv(net);
1783     struct phy_device *phydev = net->phydev;
1784     int ret;
1785 
1786     ret = usb_autopm_get_interface(dev->intf);
1787     if (ret < 0)
1788         return ret;
1789 
1790     phy_ethtool_ksettings_get(phydev, cmd);
1791 
1792     usb_autopm_put_interface(dev->intf);
1793 
1794     return ret;
1795 }
1796 
1797 static int lan78xx_set_link_ksettings(struct net_device *net,
1798                       const struct ethtool_link_ksettings *cmd)
1799 {
1800     struct lan78xx_net *dev = netdev_priv(net);
1801     struct phy_device *phydev = net->phydev;
1802     int ret = 0;
1803     int temp;
1804 
1805     ret = usb_autopm_get_interface(dev->intf);
1806     if (ret < 0)
1807         return ret;
1808 
1809     /* change speed & duplex */
1810     ret = phy_ethtool_ksettings_set(phydev, cmd);
1811 
1812     if (!cmd->base.autoneg) {
1813         /* force link down */
1814         temp = phy_read(phydev, MII_BMCR);
1815         phy_write(phydev, MII_BMCR, temp | BMCR_LOOPBACK);
1816         mdelay(1);
1817         phy_write(phydev, MII_BMCR, temp);
1818     }
1819 
1820     usb_autopm_put_interface(dev->intf);
1821 
1822     return ret;
1823 }
1824 
1825 static void lan78xx_get_pause(struct net_device *net,
1826                   struct ethtool_pauseparam *pause)
1827 {
1828     struct lan78xx_net *dev = netdev_priv(net);
1829     struct phy_device *phydev = net->phydev;
1830     struct ethtool_link_ksettings ecmd;
1831 
1832     phy_ethtool_ksettings_get(phydev, &ecmd);
1833 
1834     pause->autoneg = dev->fc_autoneg;
1835 
1836     if (dev->fc_request_control & FLOW_CTRL_TX)
1837         pause->tx_pause = 1;
1838 
1839     if (dev->fc_request_control & FLOW_CTRL_RX)
1840         pause->rx_pause = 1;
1841 }
1842 
1843 static int lan78xx_set_pause(struct net_device *net,
1844                  struct ethtool_pauseparam *pause)
1845 {
1846     struct lan78xx_net *dev = netdev_priv(net);
1847     struct phy_device *phydev = net->phydev;
1848     struct ethtool_link_ksettings ecmd;
1849     int ret;
1850 
1851     phy_ethtool_ksettings_get(phydev, &ecmd);
1852 
1853     if (pause->autoneg && !ecmd.base.autoneg) {
1854         ret = -EINVAL;
1855         goto exit;
1856     }
1857 
1858     dev->fc_request_control = 0;
1859     if (pause->rx_pause)
1860         dev->fc_request_control |= FLOW_CTRL_RX;
1861 
1862     if (pause->tx_pause)
1863         dev->fc_request_control |= FLOW_CTRL_TX;
1864 
1865     if (ecmd.base.autoneg) {
1866         __ETHTOOL_DECLARE_LINK_MODE_MASK(fc) = { 0, };
1867         u32 mii_adv;
1868 
1869         linkmode_clear_bit(ETHTOOL_LINK_MODE_Pause_BIT,
1870                    ecmd.link_modes.advertising);
1871         linkmode_clear_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
1872                    ecmd.link_modes.advertising);
1873         mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control);
1874         mii_adv_to_linkmode_adv_t(fc, mii_adv);
1875         linkmode_or(ecmd.link_modes.advertising, fc,
1876                 ecmd.link_modes.advertising);
1877 
1878         phy_ethtool_ksettings_set(phydev, &ecmd);
1879     }
1880 
1881     dev->fc_autoneg = pause->autoneg;
1882 
1883     ret = 0;
1884 exit:
1885     return ret;
1886 }
1887 
1888 static int lan78xx_get_regs_len(struct net_device *netdev)
1889 {
1890     if (!netdev->phydev)
1891         return (sizeof(lan78xx_regs));
1892     else
1893         return (sizeof(lan78xx_regs) + PHY_REG_SIZE);
1894 }
1895 
1896 static void
1897 lan78xx_get_regs(struct net_device *netdev, struct ethtool_regs *regs,
1898          void *buf)
1899 {
1900     u32 *data = buf;
1901     int i, j;
1902     struct lan78xx_net *dev = netdev_priv(netdev);
1903 
1904     /* Read Device/MAC registers */
1905     for (i = 0; i < ARRAY_SIZE(lan78xx_regs); i++)
1906         lan78xx_read_reg(dev, lan78xx_regs[i], &data[i]);
1907 
1908     if (!netdev->phydev)
1909         return;
1910 
1911     /* Read PHY registers */
1912     for (j = 0; j < 32; i++, j++)
1913         data[i] = phy_read(netdev->phydev, j);
1914 }
1915 
1916 static const struct ethtool_ops lan78xx_ethtool_ops = {
1917     .get_link   = lan78xx_get_link,
1918     .nway_reset = phy_ethtool_nway_reset,
1919     .get_drvinfo    = lan78xx_get_drvinfo,
1920     .get_msglevel   = lan78xx_get_msglevel,
1921     .set_msglevel   = lan78xx_set_msglevel,
1922     .get_eeprom_len = lan78xx_ethtool_get_eeprom_len,
1923     .get_eeprom = lan78xx_ethtool_get_eeprom,
1924     .set_eeprom = lan78xx_ethtool_set_eeprom,
1925     .get_ethtool_stats = lan78xx_get_stats,
1926     .get_sset_count = lan78xx_get_sset_count,
1927     .get_strings    = lan78xx_get_strings,
1928     .get_wol    = lan78xx_get_wol,
1929     .set_wol    = lan78xx_set_wol,
1930     .get_ts_info    = ethtool_op_get_ts_info,
1931     .get_eee    = lan78xx_get_eee,
1932     .set_eee    = lan78xx_set_eee,
1933     .get_pauseparam = lan78xx_get_pause,
1934     .set_pauseparam = lan78xx_set_pause,
1935     .get_link_ksettings = lan78xx_get_link_ksettings,
1936     .set_link_ksettings = lan78xx_set_link_ksettings,
1937     .get_regs_len   = lan78xx_get_regs_len,
1938     .get_regs   = lan78xx_get_regs,
1939 };
1940 
1941 static void lan78xx_init_mac_address(struct lan78xx_net *dev)
1942 {
1943     u32 addr_lo, addr_hi;
1944     u8 addr[6];
1945 
1946     lan78xx_read_reg(dev, RX_ADDRL, &addr_lo);
1947     lan78xx_read_reg(dev, RX_ADDRH, &addr_hi);
1948 
1949     addr[0] = addr_lo & 0xFF;
1950     addr[1] = (addr_lo >> 8) & 0xFF;
1951     addr[2] = (addr_lo >> 16) & 0xFF;
1952     addr[3] = (addr_lo >> 24) & 0xFF;
1953     addr[4] = addr_hi & 0xFF;
1954     addr[5] = (addr_hi >> 8) & 0xFF;
1955 
1956     if (!is_valid_ether_addr(addr)) {
1957         if (!eth_platform_get_mac_address(&dev->udev->dev, addr)) {
1958             /* valid address present in Device Tree */
1959             netif_dbg(dev, ifup, dev->net,
1960                   "MAC address read from Device Tree");
1961         } else if (((lan78xx_read_eeprom(dev, EEPROM_MAC_OFFSET,
1962                          ETH_ALEN, addr) == 0) ||
1963                 (lan78xx_read_otp(dev, EEPROM_MAC_OFFSET,
1964                           ETH_ALEN, addr) == 0)) &&
1965                is_valid_ether_addr(addr)) {
1966             /* eeprom values are valid so use them */
1967             netif_dbg(dev, ifup, dev->net,
1968                   "MAC address read from EEPROM");
1969         } else {
1970             /* generate random MAC */
1971             eth_random_addr(addr);
1972             netif_dbg(dev, ifup, dev->net,
1973                   "MAC address set to random addr");
1974         }
1975 
1976         addr_lo = addr[0] | (addr[1] << 8) |
1977               (addr[2] << 16) | (addr[3] << 24);
1978         addr_hi = addr[4] | (addr[5] << 8);
1979 
1980         lan78xx_write_reg(dev, RX_ADDRL, addr_lo);
1981         lan78xx_write_reg(dev, RX_ADDRH, addr_hi);
1982     }
1983 
1984     lan78xx_write_reg(dev, MAF_LO(0), addr_lo);
1985     lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_);
1986 
1987     eth_hw_addr_set(dev->net, addr);
1988 }
1989 
1990 /* MDIO read and write wrappers for phylib */
1991 static int lan78xx_mdiobus_read(struct mii_bus *bus, int phy_id, int idx)
1992 {
1993     struct lan78xx_net *dev = bus->priv;
1994     u32 val, addr;
1995     int ret;
1996 
1997     ret = usb_autopm_get_interface(dev->intf);
1998     if (ret < 0)
1999         return ret;
2000 
2001     mutex_lock(&dev->phy_mutex);
2002 
2003     /* confirm MII not busy */
2004     ret = lan78xx_phy_wait_not_busy(dev);
2005     if (ret < 0)
2006         goto done;
2007 
2008     /* set the address, index & direction (read from PHY) */
2009     addr = mii_access(phy_id, idx, MII_READ);
2010     ret = lan78xx_write_reg(dev, MII_ACC, addr);
2011 
2012     ret = lan78xx_phy_wait_not_busy(dev);
2013     if (ret < 0)
2014         goto done;
2015 
2016     ret = lan78xx_read_reg(dev, MII_DATA, &val);
2017 
2018     ret = (int)(val & 0xFFFF);
2019 
2020 done:
2021     mutex_unlock(&dev->phy_mutex);
2022     usb_autopm_put_interface(dev->intf);
2023 
2024     return ret;
2025 }
2026 
2027 static int lan78xx_mdiobus_write(struct mii_bus *bus, int phy_id, int idx,
2028                  u16 regval)
2029 {
2030     struct lan78xx_net *dev = bus->priv;
2031     u32 val, addr;
2032     int ret;
2033 
2034     ret = usb_autopm_get_interface(dev->intf);
2035     if (ret < 0)
2036         return ret;
2037 
2038     mutex_lock(&dev->phy_mutex);
2039 
2040     /* confirm MII not busy */
2041     ret = lan78xx_phy_wait_not_busy(dev);
2042     if (ret < 0)
2043         goto done;
2044 
2045     val = (u32)regval;
2046     ret = lan78xx_write_reg(dev, MII_DATA, val);
2047 
2048     /* set the address, index & direction (write to PHY) */
2049     addr = mii_access(phy_id, idx, MII_WRITE);
2050     ret = lan78xx_write_reg(dev, MII_ACC, addr);
2051 
2052     ret = lan78xx_phy_wait_not_busy(dev);
2053     if (ret < 0)
2054         goto done;
2055 
2056 done:
2057     mutex_unlock(&dev->phy_mutex);
2058     usb_autopm_put_interface(dev->intf);
2059     return 0;
2060 }
2061 
2062 static int lan78xx_mdio_init(struct lan78xx_net *dev)
2063 {
2064     struct device_node *node;
2065     int ret;
2066 
2067     dev->mdiobus = mdiobus_alloc();
2068     if (!dev->mdiobus) {
2069         netdev_err(dev->net, "can't allocate MDIO bus\n");
2070         return -ENOMEM;
2071     }
2072 
2073     dev->mdiobus->priv = (void *)dev;
2074     dev->mdiobus->read = lan78xx_mdiobus_read;
2075     dev->mdiobus->write = lan78xx_mdiobus_write;
2076     dev->mdiobus->name = "lan78xx-mdiobus";
2077     dev->mdiobus->parent = &dev->udev->dev;
2078 
2079     snprintf(dev->mdiobus->id, MII_BUS_ID_SIZE, "usb-%03d:%03d",
2080          dev->udev->bus->busnum, dev->udev->devnum);
2081 
2082     switch (dev->chipid) {
2083     case ID_REV_CHIP_ID_7800_:
2084     case ID_REV_CHIP_ID_7850_:
2085         /* set to internal PHY id */
2086         dev->mdiobus->phy_mask = ~(1 << 1);
2087         break;
2088     case ID_REV_CHIP_ID_7801_:
2089         /* scan thru PHYAD[2..0] */
2090         dev->mdiobus->phy_mask = ~(0xFF);
2091         break;
2092     }
2093 
2094     node = of_get_child_by_name(dev->udev->dev.of_node, "mdio");
2095     ret = of_mdiobus_register(dev->mdiobus, node);
2096     of_node_put(node);
2097     if (ret) {
2098         netdev_err(dev->net, "can't register MDIO bus\n");
2099         goto exit1;
2100     }
2101 
2102     netdev_dbg(dev->net, "registered mdiobus bus %s\n", dev->mdiobus->id);
2103     return 0;
2104 exit1:
2105     mdiobus_free(dev->mdiobus);
2106     return ret;
2107 }
2108 
2109 static void lan78xx_remove_mdio(struct lan78xx_net *dev)
2110 {
2111     mdiobus_unregister(dev->mdiobus);
2112     mdiobus_free(dev->mdiobus);
2113 }
2114 
2115 static void lan78xx_link_status_change(struct net_device *net)
2116 {
2117     struct phy_device *phydev = net->phydev;
2118     int temp;
2119 
2120     /* At forced 100 F/H mode, chip may fail to set mode correctly
2121      * when cable is switched between long(~50+m) and short one.
2122      * As workaround, set to 10 before setting to 100
2123      * at forced 100 F/H mode.
2124      */
2125     if (!phydev->autoneg && (phydev->speed == 100)) {
2126         /* disable phy interrupt */
2127         temp = phy_read(phydev, LAN88XX_INT_MASK);
2128         temp &= ~LAN88XX_INT_MASK_MDINTPIN_EN_;
2129         phy_write(phydev, LAN88XX_INT_MASK, temp);
2130 
2131         temp = phy_read(phydev, MII_BMCR);
2132         temp &= ~(BMCR_SPEED100 | BMCR_SPEED1000);
2133         phy_write(phydev, MII_BMCR, temp); /* set to 10 first */
2134         temp |= BMCR_SPEED100;
2135         phy_write(phydev, MII_BMCR, temp); /* set to 100 later */
2136 
2137         /* clear pending interrupt generated while workaround */
2138         temp = phy_read(phydev, LAN88XX_INT_STS);
2139 
2140         /* enable phy interrupt back */
2141         temp = phy_read(phydev, LAN88XX_INT_MASK);
2142         temp |= LAN88XX_INT_MASK_MDINTPIN_EN_;
2143         phy_write(phydev, LAN88XX_INT_MASK, temp);
2144     }
2145 }
2146 
2147 static int irq_map(struct irq_domain *d, unsigned int irq,
2148            irq_hw_number_t hwirq)
2149 {
2150     struct irq_domain_data *data = d->host_data;
2151 
2152     irq_set_chip_data(irq, data);
2153     irq_set_chip_and_handler(irq, data->irqchip, data->irq_handler);
2154     irq_set_noprobe(irq);
2155 
2156     return 0;
2157 }
2158 
2159 static void irq_unmap(struct irq_domain *d, unsigned int irq)
2160 {
2161     irq_set_chip_and_handler(irq, NULL, NULL);
2162     irq_set_chip_data(irq, NULL);
2163 }
2164 
2165 static const struct irq_domain_ops chip_domain_ops = {
2166     .map    = irq_map,
2167     .unmap  = irq_unmap,
2168 };
2169 
2170 static void lan78xx_irq_mask(struct irq_data *irqd)
2171 {
2172     struct irq_domain_data *data = irq_data_get_irq_chip_data(irqd);
2173 
2174     data->irqenable &= ~BIT(irqd_to_hwirq(irqd));
2175 }
2176 
2177 static void lan78xx_irq_unmask(struct irq_data *irqd)
2178 {
2179     struct irq_domain_data *data = irq_data_get_irq_chip_data(irqd);
2180 
2181     data->irqenable |= BIT(irqd_to_hwirq(irqd));
2182 }
2183 
2184 static void lan78xx_irq_bus_lock(struct irq_data *irqd)
2185 {
2186     struct irq_domain_data *data = irq_data_get_irq_chip_data(irqd);
2187 
2188     mutex_lock(&data->irq_lock);
2189 }
2190 
2191 static void lan78xx_irq_bus_sync_unlock(struct irq_data *irqd)
2192 {
2193     struct irq_domain_data *data = irq_data_get_irq_chip_data(irqd);
2194     struct lan78xx_net *dev =
2195             container_of(data, struct lan78xx_net, domain_data);
2196     u32 buf;
2197 
2198     /* call register access here because irq_bus_lock & irq_bus_sync_unlock
2199      * are only two callbacks executed in non-atomic contex.
2200      */
2201     lan78xx_read_reg(dev, INT_EP_CTL, &buf);
2202     if (buf != data->irqenable)
2203         lan78xx_write_reg(dev, INT_EP_CTL, data->irqenable);
2204 
2205     mutex_unlock(&data->irq_lock);
2206 }
2207 
2208 static struct irq_chip lan78xx_irqchip = {
2209     .name           = "lan78xx-irqs",
2210     .irq_mask       = lan78xx_irq_mask,
2211     .irq_unmask     = lan78xx_irq_unmask,
2212     .irq_bus_lock       = lan78xx_irq_bus_lock,
2213     .irq_bus_sync_unlock    = lan78xx_irq_bus_sync_unlock,
2214 };
2215 
2216 static int lan78xx_setup_irq_domain(struct lan78xx_net *dev)
2217 {
2218     struct device_node *of_node;
2219     struct irq_domain *irqdomain;
2220     unsigned int irqmap = 0;
2221     u32 buf;
2222     int ret = 0;
2223 
2224     of_node = dev->udev->dev.parent->of_node;
2225 
2226     mutex_init(&dev->domain_data.irq_lock);
2227 
2228     lan78xx_read_reg(dev, INT_EP_CTL, &buf);
2229     dev->domain_data.irqenable = buf;
2230 
2231     dev->domain_data.irqchip = &lan78xx_irqchip;
2232     dev->domain_data.irq_handler = handle_simple_irq;
2233 
2234     irqdomain = irq_domain_add_simple(of_node, MAX_INT_EP, 0,
2235                       &chip_domain_ops, &dev->domain_data);
2236     if (irqdomain) {
2237         /* create mapping for PHY interrupt */
2238         irqmap = irq_create_mapping(irqdomain, INT_EP_PHY);
2239         if (!irqmap) {
2240             irq_domain_remove(irqdomain);
2241 
2242             irqdomain = NULL;
2243             ret = -EINVAL;
2244         }
2245     } else {
2246         ret = -EINVAL;
2247     }
2248 
2249     dev->domain_data.irqdomain = irqdomain;
2250     dev->domain_data.phyirq = irqmap;
2251 
2252     return ret;
2253 }
2254 
2255 static void lan78xx_remove_irq_domain(struct lan78xx_net *dev)
2256 {
2257     if (dev->domain_data.phyirq > 0) {
2258         irq_dispose_mapping(dev->domain_data.phyirq);
2259 
2260         if (dev->domain_data.irqdomain)
2261             irq_domain_remove(dev->domain_data.irqdomain);
2262     }
2263     dev->domain_data.phyirq = 0;
2264     dev->domain_data.irqdomain = NULL;
2265 }
2266 
2267 static int lan8835_fixup(struct phy_device *phydev)
2268 {
2269     int buf;
2270     struct lan78xx_net *dev = netdev_priv(phydev->attached_dev);
2271 
2272     /* LED2/PME_N/IRQ_N/RGMII_ID pin to IRQ_N mode */
2273     buf = phy_read_mmd(phydev, MDIO_MMD_PCS, 0x8010);
2274     buf &= ~0x1800;
2275     buf |= 0x0800;
2276     phy_write_mmd(phydev, MDIO_MMD_PCS, 0x8010, buf);
2277 
2278     /* RGMII MAC TXC Delay Enable */
2279     lan78xx_write_reg(dev, MAC_RGMII_ID,
2280               MAC_RGMII_ID_TXC_DELAY_EN_);
2281 
2282     /* RGMII TX DLL Tune Adjust */
2283     lan78xx_write_reg(dev, RGMII_TX_BYP_DLL, 0x3D00);
2284 
2285     dev->interface = PHY_INTERFACE_MODE_RGMII_TXID;
2286 
2287     return 1;
2288 }
2289 
2290 static int ksz9031rnx_fixup(struct phy_device *phydev)
2291 {
2292     struct lan78xx_net *dev = netdev_priv(phydev->attached_dev);
2293 
2294     /* Micrel9301RNX PHY configuration */
2295     /* RGMII Control Signal Pad Skew */
2296     phy_write_mmd(phydev, MDIO_MMD_WIS, 4, 0x0077);
2297     /* RGMII RX Data Pad Skew */
2298     phy_write_mmd(phydev, MDIO_MMD_WIS, 5, 0x7777);
2299     /* RGMII RX Clock Pad Skew */
2300     phy_write_mmd(phydev, MDIO_MMD_WIS, 8, 0x1FF);
2301 
2302     dev->interface = PHY_INTERFACE_MODE_RGMII_RXID;
2303 
2304     return 1;
2305 }
2306 
2307 static struct phy_device *lan7801_phy_init(struct lan78xx_net *dev)
2308 {
2309     u32 buf;
2310     int ret;
2311     struct fixed_phy_status fphy_status = {
2312         .link = 1,
2313         .speed = SPEED_1000,
2314         .duplex = DUPLEX_FULL,
2315     };
2316     struct phy_device *phydev;
2317 
2318     phydev = phy_find_first(dev->mdiobus);
2319     if (!phydev) {
2320         netdev_dbg(dev->net, "PHY Not Found!! Registering Fixed PHY\n");
2321         phydev = fixed_phy_register(PHY_POLL, &fphy_status, NULL);
2322         if (IS_ERR(phydev)) {
2323             netdev_err(dev->net, "No PHY/fixed_PHY found\n");
2324             return NULL;
2325         }
2326         netdev_dbg(dev->net, "Registered FIXED PHY\n");
2327         dev->interface = PHY_INTERFACE_MODE_RGMII;
2328         ret = lan78xx_write_reg(dev, MAC_RGMII_ID,
2329                     MAC_RGMII_ID_TXC_DELAY_EN_);
2330         ret = lan78xx_write_reg(dev, RGMII_TX_BYP_DLL, 0x3D00);
2331         ret = lan78xx_read_reg(dev, HW_CFG, &buf);
2332         buf |= HW_CFG_CLK125_EN_;
2333         buf |= HW_CFG_REFCLK25_EN_;
2334         ret = lan78xx_write_reg(dev, HW_CFG, buf);
2335     } else {
2336         if (!phydev->drv) {
2337             netdev_err(dev->net, "no PHY driver found\n");
2338             return NULL;
2339         }
2340         dev->interface = PHY_INTERFACE_MODE_RGMII;
2341         /* external PHY fixup for KSZ9031RNX */
2342         ret = phy_register_fixup_for_uid(PHY_KSZ9031RNX, 0xfffffff0,
2343                          ksz9031rnx_fixup);
2344         if (ret < 0) {
2345             netdev_err(dev->net, "Failed to register fixup for PHY_KSZ9031RNX\n");
2346             return NULL;
2347         }
2348         /* external PHY fixup for LAN8835 */
2349         ret = phy_register_fixup_for_uid(PHY_LAN8835, 0xfffffff0,
2350                          lan8835_fixup);
2351         if (ret < 0) {
2352             netdev_err(dev->net, "Failed to register fixup for PHY_LAN8835\n");
2353             return NULL;
2354         }
2355         /* add more external PHY fixup here if needed */
2356 
2357         phydev->is_internal = false;
2358     }
2359     return phydev;
2360 }
2361 
2362 static int lan78xx_phy_init(struct lan78xx_net *dev)
2363 {
2364     __ETHTOOL_DECLARE_LINK_MODE_MASK(fc) = { 0, };
2365     int ret;
2366     u32 mii_adv;
2367     struct phy_device *phydev;
2368 
2369     switch (dev->chipid) {
2370     case ID_REV_CHIP_ID_7801_:
2371         phydev = lan7801_phy_init(dev);
2372         if (!phydev) {
2373             netdev_err(dev->net, "lan7801: PHY Init Failed");
2374             return -EIO;
2375         }
2376         break;
2377 
2378     case ID_REV_CHIP_ID_7800_:
2379     case ID_REV_CHIP_ID_7850_:
2380         phydev = phy_find_first(dev->mdiobus);
2381         if (!phydev) {
2382             netdev_err(dev->net, "no PHY found\n");
2383             return -EIO;
2384         }
2385         phydev->is_internal = true;
2386         dev->interface = PHY_INTERFACE_MODE_GMII;
2387         break;
2388 
2389     default:
2390         netdev_err(dev->net, "Unknown CHIP ID found\n");
2391         return -EIO;
2392     }
2393 
2394     /* if phyirq is not set, use polling mode in phylib */
2395     if (dev->domain_data.phyirq > 0)
2396         phydev->irq = dev->domain_data.phyirq;
2397     else
2398         phydev->irq = PHY_POLL;
2399     netdev_dbg(dev->net, "phydev->irq = %d\n", phydev->irq);
2400 
2401     /* set to AUTOMDIX */
2402     phydev->mdix = ETH_TP_MDI_AUTO;
2403 
2404     ret = phy_connect_direct(dev->net, phydev,
2405                  lan78xx_link_status_change,
2406                  dev->interface);
2407     if (ret) {
2408         netdev_err(dev->net, "can't attach PHY to %s\n",
2409                dev->mdiobus->id);
2410         if (dev->chipid == ID_REV_CHIP_ID_7801_) {
2411             if (phy_is_pseudo_fixed_link(phydev)) {
2412                 fixed_phy_unregister(phydev);
2413             } else {
2414                 phy_unregister_fixup_for_uid(PHY_KSZ9031RNX,
2415                                  0xfffffff0);
2416                 phy_unregister_fixup_for_uid(PHY_LAN8835,
2417                                  0xfffffff0);
2418             }
2419         }
2420         return -EIO;
2421     }
2422 
2423     /* MAC doesn't support 1000T Half */
2424     phy_remove_link_mode(phydev, ETHTOOL_LINK_MODE_1000baseT_Half_BIT);
2425 
2426     /* support both flow controls */
2427     dev->fc_request_control = (FLOW_CTRL_RX | FLOW_CTRL_TX);
2428     linkmode_clear_bit(ETHTOOL_LINK_MODE_Pause_BIT,
2429                phydev->advertising);
2430     linkmode_clear_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
2431                phydev->advertising);
2432     mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control);
2433     mii_adv_to_linkmode_adv_t(fc, mii_adv);
2434     linkmode_or(phydev->advertising, fc, phydev->advertising);
2435 
2436     if (phydev->mdio.dev.of_node) {
2437         u32 reg;
2438         int len;
2439 
2440         len = of_property_count_elems_of_size(phydev->mdio.dev.of_node,
2441                               "microchip,led-modes",
2442                               sizeof(u32));
2443         if (len >= 0) {
2444             /* Ensure the appropriate LEDs are enabled */
2445             lan78xx_read_reg(dev, HW_CFG, &reg);
2446             reg &= ~(HW_CFG_LED0_EN_ |
2447                  HW_CFG_LED1_EN_ |
2448                  HW_CFG_LED2_EN_ |
2449                  HW_CFG_LED3_EN_);
2450             reg |= (len > 0) * HW_CFG_LED0_EN_ |
2451                 (len > 1) * HW_CFG_LED1_EN_ |
2452                 (len > 2) * HW_CFG_LED2_EN_ |
2453                 (len > 3) * HW_CFG_LED3_EN_;
2454             lan78xx_write_reg(dev, HW_CFG, reg);
2455         }
2456     }
2457 
2458     genphy_config_aneg(phydev);
2459 
2460     dev->fc_autoneg = phydev->autoneg;
2461 
2462     return 0;
2463 }
2464 
2465 static int lan78xx_set_rx_max_frame_length(struct lan78xx_net *dev, int size)
2466 {
2467     u32 buf;
2468     bool rxenabled;
2469 
2470     lan78xx_read_reg(dev, MAC_RX, &buf);
2471 
2472     rxenabled = ((buf & MAC_RX_RXEN_) != 0);
2473 
2474     if (rxenabled) {
2475         buf &= ~MAC_RX_RXEN_;
2476         lan78xx_write_reg(dev, MAC_RX, buf);
2477     }
2478 
2479     /* add 4 to size for FCS */
2480     buf &= ~MAC_RX_MAX_SIZE_MASK_;
2481     buf |= (((size + 4) << MAC_RX_MAX_SIZE_SHIFT_) & MAC_RX_MAX_SIZE_MASK_);
2482 
2483     lan78xx_write_reg(dev, MAC_RX, buf);
2484 
2485     if (rxenabled) {
2486         buf |= MAC_RX_RXEN_;
2487         lan78xx_write_reg(dev, MAC_RX, buf);
2488     }
2489 
2490     return 0;
2491 }
2492 
2493 static int unlink_urbs(struct lan78xx_net *dev, struct sk_buff_head *q)
2494 {
2495     struct sk_buff *skb;
2496     unsigned long flags;
2497     int count = 0;
2498 
2499     spin_lock_irqsave(&q->lock, flags);
2500     while (!skb_queue_empty(q)) {
2501         struct skb_data *entry;
2502         struct urb *urb;
2503         int ret;
2504 
2505         skb_queue_walk(q, skb) {
2506             entry = (struct skb_data *)skb->cb;
2507             if (entry->state != unlink_start)
2508                 goto found;
2509         }
2510         break;
2511 found:
2512         entry->state = unlink_start;
2513         urb = entry->urb;
2514 
2515         /* Get reference count of the URB to avoid it to be
2516          * freed during usb_unlink_urb, which may trigger
2517          * use-after-free problem inside usb_unlink_urb since
2518          * usb_unlink_urb is always racing with .complete
2519          * handler(include defer_bh).
2520          */
2521         usb_get_urb(urb);
2522         spin_unlock_irqrestore(&q->lock, flags);
2523         /* during some PM-driven resume scenarios,
2524          * these (async) unlinks complete immediately
2525          */
2526         ret = usb_unlink_urb(urb);
2527         if (ret != -EINPROGRESS && ret != 0)
2528             netdev_dbg(dev->net, "unlink urb err, %d\n", ret);
2529         else
2530             count++;
2531         usb_put_urb(urb);
2532         spin_lock_irqsave(&q->lock, flags);
2533     }
2534     spin_unlock_irqrestore(&q->lock, flags);
2535     return count;
2536 }
2537 
2538 static int lan78xx_change_mtu(struct net_device *netdev, int new_mtu)
2539 {
2540     struct lan78xx_net *dev = netdev_priv(netdev);
2541     int max_frame_len = RX_MAX_FRAME_LEN(new_mtu);
2542     int ret;
2543 
2544     /* no second zero-length packet read wanted after mtu-sized packets */
2545     if ((max_frame_len % dev->maxpacket) == 0)
2546         return -EDOM;
2547 
2548     ret = usb_autopm_get_interface(dev->intf);
2549     if (ret < 0)
2550         return ret;
2551 
2552     ret = lan78xx_set_rx_max_frame_length(dev, max_frame_len);
2553     if (!ret)
2554         netdev->mtu = new_mtu;
2555 
2556     usb_autopm_put_interface(dev->intf);
2557 
2558     return ret;
2559 }
2560 
2561 static int lan78xx_set_mac_addr(struct net_device *netdev, void *p)
2562 {
2563     struct lan78xx_net *dev = netdev_priv(netdev);
2564     struct sockaddr *addr = p;
2565     u32 addr_lo, addr_hi;
2566 
2567     if (netif_running(netdev))
2568         return -EBUSY;
2569 
2570     if (!is_valid_ether_addr(addr->sa_data))
2571         return -EADDRNOTAVAIL;
2572 
2573     eth_hw_addr_set(netdev, addr->sa_data);
2574 
2575     addr_lo = netdev->dev_addr[0] |
2576           netdev->dev_addr[1] << 8 |
2577           netdev->dev_addr[2] << 16 |
2578           netdev->dev_addr[3] << 24;
2579     addr_hi = netdev->dev_addr[4] |
2580           netdev->dev_addr[5] << 8;
2581 
2582     lan78xx_write_reg(dev, RX_ADDRL, addr_lo);
2583     lan78xx_write_reg(dev, RX_ADDRH, addr_hi);
2584 
2585     /* Added to support MAC address changes */
2586     lan78xx_write_reg(dev, MAF_LO(0), addr_lo);
2587     lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_);
2588 
2589     return 0;
2590 }
2591 
2592 /* Enable or disable Rx checksum offload engine */
2593 static int lan78xx_set_features(struct net_device *netdev,
2594                 netdev_features_t features)
2595 {
2596     struct lan78xx_net *dev = netdev_priv(netdev);
2597     struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
2598     unsigned long flags;
2599 
2600     spin_lock_irqsave(&pdata->rfe_ctl_lock, flags);
2601 
2602     if (features & NETIF_F_RXCSUM) {
2603         pdata->rfe_ctl |= RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_;
2604         pdata->rfe_ctl |= RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_;
2605     } else {
2606         pdata->rfe_ctl &= ~(RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_);
2607         pdata->rfe_ctl &= ~(RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_);
2608     }
2609 
2610     if (features & NETIF_F_HW_VLAN_CTAG_RX)
2611         pdata->rfe_ctl |= RFE_CTL_VLAN_STRIP_;
2612     else
2613         pdata->rfe_ctl &= ~RFE_CTL_VLAN_STRIP_;
2614 
2615     if (features & NETIF_F_HW_VLAN_CTAG_FILTER)
2616         pdata->rfe_ctl |= RFE_CTL_VLAN_FILTER_;
2617     else
2618         pdata->rfe_ctl &= ~RFE_CTL_VLAN_FILTER_;
2619 
2620     spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags);
2621 
2622     lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl);
2623 
2624     return 0;
2625 }
2626 
2627 static void lan78xx_deferred_vlan_write(struct work_struct *param)
2628 {
2629     struct lan78xx_priv *pdata =
2630             container_of(param, struct lan78xx_priv, set_vlan);
2631     struct lan78xx_net *dev = pdata->dev;
2632 
2633     lan78xx_dataport_write(dev, DP_SEL_RSEL_VLAN_DA_, 0,
2634                    DP_SEL_VHF_VLAN_LEN, pdata->vlan_table);
2635 }
2636 
2637 static int lan78xx_vlan_rx_add_vid(struct net_device *netdev,
2638                    __be16 proto, u16 vid)
2639 {
2640     struct lan78xx_net *dev = netdev_priv(netdev);
2641     struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
2642     u16 vid_bit_index;
2643     u16 vid_dword_index;
2644 
2645     vid_dword_index = (vid >> 5) & 0x7F;
2646     vid_bit_index = vid & 0x1F;
2647 
2648     pdata->vlan_table[vid_dword_index] |= (1 << vid_bit_index);
2649 
2650     /* defer register writes to a sleepable context */
2651     schedule_work(&pdata->set_vlan);
2652 
2653     return 0;
2654 }
2655 
2656 static int lan78xx_vlan_rx_kill_vid(struct net_device *netdev,
2657                     __be16 proto, u16 vid)
2658 {
2659     struct lan78xx_net *dev = netdev_priv(netdev);
2660     struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
2661     u16 vid_bit_index;
2662     u16 vid_dword_index;
2663 
2664     vid_dword_index = (vid >> 5) & 0x7F;
2665     vid_bit_index = vid & 0x1F;
2666 
2667     pdata->vlan_table[vid_dword_index] &= ~(1 << vid_bit_index);
2668 
2669     /* defer register writes to a sleepable context */
2670     schedule_work(&pdata->set_vlan);
2671 
2672     return 0;
2673 }
2674 
2675 static void lan78xx_init_ltm(struct lan78xx_net *dev)
2676 {
2677     int ret;
2678     u32 buf;
2679     u32 regs[6] = { 0 };
2680 
2681     ret = lan78xx_read_reg(dev, USB_CFG1, &buf);
2682     if (buf & USB_CFG1_LTM_ENABLE_) {
2683         u8 temp[2];
2684         /* Get values from EEPROM first */
2685         if (lan78xx_read_eeprom(dev, 0x3F, 2, temp) == 0) {
2686             if (temp[0] == 24) {
2687                 ret = lan78xx_read_raw_eeprom(dev,
2688                                   temp[1] * 2,
2689                                   24,
2690                                   (u8 *)regs);
2691                 if (ret < 0)
2692                     return;
2693             }
2694         } else if (lan78xx_read_otp(dev, 0x3F, 2, temp) == 0) {
2695             if (temp[0] == 24) {
2696                 ret = lan78xx_read_raw_otp(dev,
2697                                temp[1] * 2,
2698                                24,
2699                                (u8 *)regs);
2700                 if (ret < 0)
2701                     return;
2702             }
2703         }
2704     }
2705 
2706     lan78xx_write_reg(dev, LTM_BELT_IDLE0, regs[0]);
2707     lan78xx_write_reg(dev, LTM_BELT_IDLE1, regs[1]);
2708     lan78xx_write_reg(dev, LTM_BELT_ACT0, regs[2]);
2709     lan78xx_write_reg(dev, LTM_BELT_ACT1, regs[3]);
2710     lan78xx_write_reg(dev, LTM_INACTIVE0, regs[4]);
2711     lan78xx_write_reg(dev, LTM_INACTIVE1, regs[5]);
2712 }
2713 
2714 static int lan78xx_urb_config_init(struct lan78xx_net *dev)
2715 {
2716     int result = 0;
2717 
2718     switch (dev->udev->speed) {
2719     case USB_SPEED_SUPER:
2720         dev->rx_urb_size = RX_SS_URB_SIZE;
2721         dev->tx_urb_size = TX_SS_URB_SIZE;
2722         dev->n_rx_urbs = RX_SS_URB_NUM;
2723         dev->n_tx_urbs = TX_SS_URB_NUM;
2724         dev->bulk_in_delay = SS_BULK_IN_DELAY;
2725         dev->burst_cap = SS_BURST_CAP_SIZE / SS_USB_PKT_SIZE;
2726         break;
2727     case USB_SPEED_HIGH:
2728         dev->rx_urb_size = RX_HS_URB_SIZE;
2729         dev->tx_urb_size = TX_HS_URB_SIZE;
2730         dev->n_rx_urbs = RX_HS_URB_NUM;
2731         dev->n_tx_urbs = TX_HS_URB_NUM;
2732         dev->bulk_in_delay = HS_BULK_IN_DELAY;
2733         dev->burst_cap = HS_BURST_CAP_SIZE / HS_USB_PKT_SIZE;
2734         break;
2735     case USB_SPEED_FULL:
2736         dev->rx_urb_size = RX_FS_URB_SIZE;
2737         dev->tx_urb_size = TX_FS_URB_SIZE;
2738         dev->n_rx_urbs = RX_FS_URB_NUM;
2739         dev->n_tx_urbs = TX_FS_URB_NUM;
2740         dev->bulk_in_delay = FS_BULK_IN_DELAY;
2741         dev->burst_cap = FS_BURST_CAP_SIZE / FS_USB_PKT_SIZE;
2742         break;
2743     default:
2744         netdev_warn(dev->net, "USB bus speed not supported\n");
2745         result = -EIO;
2746         break;
2747     }
2748 
2749     return result;
2750 }
2751 
2752 static int lan78xx_start_hw(struct lan78xx_net *dev, u32 reg, u32 hw_enable)
2753 {
2754     return lan78xx_update_reg(dev, reg, hw_enable, hw_enable);
2755 }
2756 
2757 static int lan78xx_stop_hw(struct lan78xx_net *dev, u32 reg, u32 hw_enabled,
2758                u32 hw_disabled)
2759 {
2760     unsigned long timeout;
2761     bool stopped = true;
2762     int ret;
2763     u32 buf;
2764 
2765     /* Stop the h/w block (if not already stopped) */
2766 
2767     ret = lan78xx_read_reg(dev, reg, &buf);
2768     if (ret < 0)
2769         return ret;
2770 
2771     if (buf & hw_enabled) {
2772         buf &= ~hw_enabled;
2773 
2774         ret = lan78xx_write_reg(dev, reg, buf);
2775         if (ret < 0)
2776             return ret;
2777 
2778         stopped = false;
2779         timeout = jiffies + HW_DISABLE_TIMEOUT;
2780         do  {
2781             ret = lan78xx_read_reg(dev, reg, &buf);
2782             if (ret < 0)
2783                 return ret;
2784 
2785             if (buf & hw_disabled)
2786                 stopped = true;
2787             else
2788                 msleep(HW_DISABLE_DELAY_MS);
2789         } while (!stopped && !time_after(jiffies, timeout));
2790     }
2791 
2792     ret = stopped ? 0 : -ETIME;
2793 
2794     return ret;
2795 }
2796 
2797 static int lan78xx_flush_fifo(struct lan78xx_net *dev, u32 reg, u32 fifo_flush)
2798 {
2799     return lan78xx_update_reg(dev, reg, fifo_flush, fifo_flush);
2800 }
2801 
2802 static int lan78xx_start_tx_path(struct lan78xx_net *dev)
2803 {
2804     int ret;
2805 
2806     netif_dbg(dev, drv, dev->net, "start tx path");
2807 
2808     /* Start the MAC transmitter */
2809 
2810     ret = lan78xx_start_hw(dev, MAC_TX, MAC_TX_TXEN_);
2811     if (ret < 0)
2812         return ret;
2813 
2814     /* Start the Tx FIFO */
2815 
2816     ret = lan78xx_start_hw(dev, FCT_TX_CTL, FCT_TX_CTL_EN_);
2817     if (ret < 0)
2818         return ret;
2819 
2820     return 0;
2821 }
2822 
2823 static int lan78xx_stop_tx_path(struct lan78xx_net *dev)
2824 {
2825     int ret;
2826 
2827     netif_dbg(dev, drv, dev->net, "stop tx path");
2828 
2829     /* Stop the Tx FIFO */
2830 
2831     ret = lan78xx_stop_hw(dev, FCT_TX_CTL, FCT_TX_CTL_EN_, FCT_TX_CTL_DIS_);
2832     if (ret < 0)
2833         return ret;
2834 
2835     /* Stop the MAC transmitter */
2836 
2837     ret = lan78xx_stop_hw(dev, MAC_TX, MAC_TX_TXEN_, MAC_TX_TXD_);
2838     if (ret < 0)
2839         return ret;
2840 
2841     return 0;
2842 }
2843 
2844 /* The caller must ensure the Tx path is stopped before calling
2845  * lan78xx_flush_tx_fifo().
2846  */
2847 static int lan78xx_flush_tx_fifo(struct lan78xx_net *dev)
2848 {
2849     return lan78xx_flush_fifo(dev, FCT_TX_CTL, FCT_TX_CTL_RST_);
2850 }
2851 
2852 static int lan78xx_start_rx_path(struct lan78xx_net *dev)
2853 {
2854     int ret;
2855 
2856     netif_dbg(dev, drv, dev->net, "start rx path");
2857 
2858     /* Start the Rx FIFO */
2859 
2860     ret = lan78xx_start_hw(dev, FCT_RX_CTL, FCT_RX_CTL_EN_);
2861     if (ret < 0)
2862         return ret;
2863 
2864     /* Start the MAC receiver*/
2865 
2866     ret = lan78xx_start_hw(dev, MAC_RX, MAC_RX_RXEN_);
2867     if (ret < 0)
2868         return ret;
2869 
2870     return 0;
2871 }
2872 
2873 static int lan78xx_stop_rx_path(struct lan78xx_net *dev)
2874 {
2875     int ret;
2876 
2877     netif_dbg(dev, drv, dev->net, "stop rx path");
2878 
2879     /* Stop the MAC receiver */
2880 
2881     ret = lan78xx_stop_hw(dev, MAC_RX, MAC_RX_RXEN_, MAC_RX_RXD_);
2882     if (ret < 0)
2883         return ret;
2884 
2885     /* Stop the Rx FIFO */
2886 
2887     ret = lan78xx_stop_hw(dev, FCT_RX_CTL, FCT_RX_CTL_EN_, FCT_RX_CTL_DIS_);
2888     if (ret < 0)
2889         return ret;
2890 
2891     return 0;
2892 }
2893 
2894 /* The caller must ensure the Rx path is stopped before calling
2895  * lan78xx_flush_rx_fifo().
2896  */
2897 static int lan78xx_flush_rx_fifo(struct lan78xx_net *dev)
2898 {
2899     return lan78xx_flush_fifo(dev, FCT_RX_CTL, FCT_RX_CTL_RST_);
2900 }
2901 
2902 static int lan78xx_reset(struct lan78xx_net *dev)
2903 {
2904     struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
2905     unsigned long timeout;
2906     int ret;
2907     u32 buf;
2908     u8 sig;
2909 
2910     ret = lan78xx_read_reg(dev, HW_CFG, &buf);
2911     if (ret < 0)
2912         return ret;
2913 
2914     buf |= HW_CFG_LRST_;
2915 
2916     ret = lan78xx_write_reg(dev, HW_CFG, buf);
2917     if (ret < 0)
2918         return ret;
2919 
2920     timeout = jiffies + HZ;
2921     do {
2922         mdelay(1);
2923         ret = lan78xx_read_reg(dev, HW_CFG, &buf);
2924         if (ret < 0)
2925             return ret;
2926 
2927         if (time_after(jiffies, timeout)) {
2928             netdev_warn(dev->net,
2929                     "timeout on completion of LiteReset");
2930             ret = -ETIMEDOUT;
2931             return ret;
2932         }
2933     } while (buf & HW_CFG_LRST_);
2934 
2935     lan78xx_init_mac_address(dev);
2936 
2937     /* save DEVID for later usage */
2938     ret = lan78xx_read_reg(dev, ID_REV, &buf);
2939     if (ret < 0)
2940         return ret;
2941 
2942     dev->chipid = (buf & ID_REV_CHIP_ID_MASK_) >> 16;
2943     dev->chiprev = buf & ID_REV_CHIP_REV_MASK_;
2944 
2945     /* Respond to the IN token with a NAK */
2946     ret = lan78xx_read_reg(dev, USB_CFG0, &buf);
2947     if (ret < 0)
2948         return ret;
2949 
2950     buf |= USB_CFG_BIR_;
2951 
2952     ret = lan78xx_write_reg(dev, USB_CFG0, buf);
2953     if (ret < 0)
2954         return ret;
2955 
2956     /* Init LTM */
2957     lan78xx_init_ltm(dev);
2958 
2959     ret = lan78xx_write_reg(dev, BURST_CAP, dev->burst_cap);
2960     if (ret < 0)
2961         return ret;
2962 
2963     ret = lan78xx_write_reg(dev, BULK_IN_DLY, dev->bulk_in_delay);
2964     if (ret < 0)
2965         return ret;
2966 
2967     ret = lan78xx_read_reg(dev, HW_CFG, &buf);
2968     if (ret < 0)
2969         return ret;
2970 
2971     buf |= HW_CFG_MEF_;
2972 
2973     ret = lan78xx_write_reg(dev, HW_CFG, buf);
2974     if (ret < 0)
2975         return ret;
2976 
2977     ret = lan78xx_read_reg(dev, USB_CFG0, &buf);
2978     if (ret < 0)
2979         return ret;
2980 
2981     buf |= USB_CFG_BCE_;
2982 
2983     ret = lan78xx_write_reg(dev, USB_CFG0, buf);
2984     if (ret < 0)
2985         return ret;
2986 
2987     /* set FIFO sizes */
2988     buf = (MAX_RX_FIFO_SIZE - 512) / 512;
2989 
2990     ret = lan78xx_write_reg(dev, FCT_RX_FIFO_END, buf);
2991     if (ret < 0)
2992         return ret;
2993 
2994     buf = (MAX_TX_FIFO_SIZE - 512) / 512;
2995 
2996     ret = lan78xx_write_reg(dev, FCT_TX_FIFO_END, buf);
2997     if (ret < 0)
2998         return ret;
2999 
3000     ret = lan78xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_);
3001     if (ret < 0)
3002         return ret;
3003 
3004     ret = lan78xx_write_reg(dev, FLOW, 0);
3005     if (ret < 0)
3006         return ret;
3007 
3008     ret = lan78xx_write_reg(dev, FCT_FLOW, 0);
3009     if (ret < 0)
3010         return ret;
3011 
3012     /* Don't need rfe_ctl_lock during initialisation */
3013     ret = lan78xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl);
3014     if (ret < 0)
3015         return ret;
3016 
3017     pdata->rfe_ctl |= RFE_CTL_BCAST_EN_ | RFE_CTL_DA_PERFECT_;
3018 
3019     ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl);
3020     if (ret < 0)
3021         return ret;
3022 
3023     /* Enable or disable checksum offload engines */
3024     ret = lan78xx_set_features(dev->net, dev->net->features);
3025     if (ret < 0)
3026         return ret;
3027 
3028     lan78xx_set_multicast(dev->net);
3029 
3030     /* reset PHY */
3031     ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
3032     if (ret < 0)
3033         return ret;
3034 
3035     buf |= PMT_CTL_PHY_RST_;
3036 
3037     ret = lan78xx_write_reg(dev, PMT_CTL, buf);
3038     if (ret < 0)
3039         return ret;
3040 
3041     timeout = jiffies + HZ;
3042     do {
3043         mdelay(1);
3044         ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
3045         if (ret < 0)
3046             return ret;
3047 
3048         if (time_after(jiffies, timeout)) {
3049             netdev_warn(dev->net, "timeout waiting for PHY Reset");
3050             ret = -ETIMEDOUT;
3051             return ret;
3052         }
3053     } while ((buf & PMT_CTL_PHY_RST_) || !(buf & PMT_CTL_READY_));
3054 
3055     ret = lan78xx_read_reg(dev, MAC_CR, &buf);
3056     if (ret < 0)
3057         return ret;
3058 
3059     /* LAN7801 only has RGMII mode */
3060     if (dev->chipid == ID_REV_CHIP_ID_7801_)
3061         buf &= ~MAC_CR_GMII_EN_;
3062 
3063     if (dev->chipid == ID_REV_CHIP_ID_7800_) {
3064         ret = lan78xx_read_raw_eeprom(dev, 0, 1, &sig);
3065         if (!ret && sig != EEPROM_INDICATOR) {
3066             /* Implies there is no external eeprom. Set mac speed */
3067             netdev_info(dev->net, "No External EEPROM. Setting MAC Speed\n");
3068             buf |= MAC_CR_AUTO_DUPLEX_ | MAC_CR_AUTO_SPEED_;
3069         }
3070     }
3071     ret = lan78xx_write_reg(dev, MAC_CR, buf);
3072     if (ret < 0)
3073         return ret;
3074 
3075     ret = lan78xx_set_rx_max_frame_length(dev,
3076                           RX_MAX_FRAME_LEN(dev->net->mtu));
3077 
3078     return ret;
3079 }
3080 
3081 static void lan78xx_init_stats(struct lan78xx_net *dev)
3082 {
3083     u32 *p;
3084     int i;
3085 
3086     /* initialize for stats update
3087      * some counters are 20bits and some are 32bits
3088      */
3089     p = (u32 *)&dev->stats.rollover_max;
3090     for (i = 0; i < (sizeof(dev->stats.rollover_max) / (sizeof(u32))); i++)
3091         p[i] = 0xFFFFF;
3092 
3093     dev->stats.rollover_max.rx_unicast_byte_count = 0xFFFFFFFF;
3094     dev->stats.rollover_max.rx_broadcast_byte_count = 0xFFFFFFFF;
3095     dev->stats.rollover_max.rx_multicast_byte_count = 0xFFFFFFFF;
3096     dev->stats.rollover_max.eee_rx_lpi_transitions = 0xFFFFFFFF;
3097     dev->stats.rollover_max.eee_rx_lpi_time = 0xFFFFFFFF;
3098     dev->stats.rollover_max.tx_unicast_byte_count = 0xFFFFFFFF;
3099     dev->stats.rollover_max.tx_broadcast_byte_count = 0xFFFFFFFF;
3100     dev->stats.rollover_max.tx_multicast_byte_count = 0xFFFFFFFF;
3101     dev->stats.rollover_max.eee_tx_lpi_transitions = 0xFFFFFFFF;
3102     dev->stats.rollover_max.eee_tx_lpi_time = 0xFFFFFFFF;
3103 
3104     set_bit(EVENT_STAT_UPDATE, &dev->flags);
3105 }
3106 
3107 static int lan78xx_open(struct net_device *net)
3108 {
3109     struct lan78xx_net *dev = netdev_priv(net);
3110     int ret;
3111 
3112     netif_dbg(dev, ifup, dev->net, "open device");
3113 
3114     ret = usb_autopm_get_interface(dev->intf);
3115     if (ret < 0)
3116         return ret;
3117 
3118     mutex_lock(&dev->dev_mutex);
3119 
3120     phy_start(net->phydev);
3121 
3122     netif_dbg(dev, ifup, dev->net, "phy initialised successfully");
3123 
3124     /* for Link Check */
3125     if (dev->urb_intr) {
3126         ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL);
3127         if (ret < 0) {
3128             netif_err(dev, ifup, dev->net,
3129                   "intr submit %d\n", ret);
3130             goto done;
3131         }
3132     }
3133 
3134     ret = lan78xx_flush_rx_fifo(dev);
3135     if (ret < 0)
3136         goto done;
3137     ret = lan78xx_flush_tx_fifo(dev);
3138     if (ret < 0)
3139         goto done;
3140 
3141     ret = lan78xx_start_tx_path(dev);
3142     if (ret < 0)
3143         goto done;
3144     ret = lan78xx_start_rx_path(dev);
3145     if (ret < 0)
3146         goto done;
3147 
3148     lan78xx_init_stats(dev);
3149 
3150     set_bit(EVENT_DEV_OPEN, &dev->flags);
3151 
3152     netif_start_queue(net);
3153 
3154     dev->link_on = false;
3155 
3156     napi_enable(&dev->napi);
3157 
3158     lan78xx_defer_kevent(dev, EVENT_LINK_RESET);
3159 done:
3160     mutex_unlock(&dev->dev_mutex);
3161 
3162     usb_autopm_put_interface(dev->intf);
3163 
3164     return ret;
3165 }
3166 
3167 static void lan78xx_terminate_urbs(struct lan78xx_net *dev)
3168 {
3169     DECLARE_WAIT_QUEUE_HEAD_ONSTACK(unlink_wakeup);
3170     DECLARE_WAITQUEUE(wait, current);
3171     int temp;
3172 
3173     /* ensure there are no more active urbs */
3174     add_wait_queue(&unlink_wakeup, &wait);
3175     set_current_state(TASK_UNINTERRUPTIBLE);
3176     dev->wait = &unlink_wakeup;
3177     temp = unlink_urbs(dev, &dev->txq) + unlink_urbs(dev, &dev->rxq);
3178 
3179     /* maybe wait for deletions to finish. */
3180     while (!skb_queue_empty(&dev->rxq) ||
3181            !skb_queue_empty(&dev->txq)) {
3182         schedule_timeout(msecs_to_jiffies(UNLINK_TIMEOUT_MS));
3183         set_current_state(TASK_UNINTERRUPTIBLE);
3184         netif_dbg(dev, ifdown, dev->net,
3185               "waited for %d urb completions", temp);
3186     }
3187     set_current_state(TASK_RUNNING);
3188     dev->wait = NULL;
3189     remove_wait_queue(&unlink_wakeup, &wait);
3190 
3191     /* empty Rx done, Rx overflow and Tx pend queues
3192      */
3193     while (!skb_queue_empty(&dev->rxq_done)) {
3194         struct sk_buff *skb = skb_dequeue(&dev->rxq_done);
3195 
3196         lan78xx_release_rx_buf(dev, skb);
3197     }
3198 
3199     skb_queue_purge(&dev->rxq_overflow);
3200     skb_queue_purge(&dev->txq_pend);
3201 }
3202 
3203 static int lan78xx_stop(struct net_device *net)
3204 {
3205     struct lan78xx_net *dev = netdev_priv(net);
3206 
3207     netif_dbg(dev, ifup, dev->net, "stop device");
3208 
3209     mutex_lock(&dev->dev_mutex);
3210 
3211     if (timer_pending(&dev->stat_monitor))
3212         del_timer_sync(&dev->stat_monitor);
3213 
3214     clear_bit(EVENT_DEV_OPEN, &dev->flags);
3215     netif_stop_queue(net);
3216     napi_disable(&dev->napi);
3217 
3218     lan78xx_terminate_urbs(dev);
3219 
3220     netif_info(dev, ifdown, dev->net,
3221            "stop stats: rx/tx %lu/%lu, errs %lu/%lu\n",
3222            net->stats.rx_packets, net->stats.tx_packets,
3223            net->stats.rx_errors, net->stats.tx_errors);
3224 
3225     /* ignore errors that occur stopping the Tx and Rx data paths */
3226     lan78xx_stop_tx_path(dev);
3227     lan78xx_stop_rx_path(dev);
3228 
3229     if (net->phydev)
3230         phy_stop(net->phydev);
3231 
3232     usb_kill_urb(dev->urb_intr);
3233 
3234     /* deferred work (task, timer, softirq) must also stop.
3235      * can't flush_scheduled_work() until we drop rtnl (later),
3236      * else workers could deadlock; so make workers a NOP.
3237      */
3238     clear_bit(EVENT_TX_HALT, &dev->flags);
3239     clear_bit(EVENT_RX_HALT, &dev->flags);
3240     clear_bit(EVENT_LINK_RESET, &dev->flags);
3241     clear_bit(EVENT_STAT_UPDATE, &dev->flags);
3242 
3243     cancel_delayed_work_sync(&dev->wq);
3244 
3245     usb_autopm_put_interface(dev->intf);
3246 
3247     mutex_unlock(&dev->dev_mutex);
3248 
3249     return 0;
3250 }
3251 
3252 static enum skb_state defer_bh(struct lan78xx_net *dev, struct sk_buff *skb,
3253                    struct sk_buff_head *list, enum skb_state state)
3254 {
3255     unsigned long flags;
3256     enum skb_state old_state;
3257     struct skb_data *entry = (struct skb_data *)skb->cb;
3258 
3259     spin_lock_irqsave(&list->lock, flags);
3260     old_state = entry->state;
3261     entry->state = state;
3262 
3263     __skb_unlink(skb, list);
3264     spin_unlock(&list->lock);
3265     spin_lock(&dev->rxq_done.lock);
3266 
3267     __skb_queue_tail(&dev->rxq_done, skb);
3268     if (skb_queue_len(&dev->rxq_done) == 1)
3269         napi_schedule(&dev->napi);
3270 
3271     spin_unlock_irqrestore(&dev->rxq_done.lock, flags);
3272 
3273     return old_state;
3274 }
3275 
3276 static void tx_complete(struct urb *urb)
3277 {
3278     struct sk_buff *skb = (struct sk_buff *)urb->context;
3279     struct skb_data *entry = (struct skb_data *)skb->cb;
3280     struct lan78xx_net *dev = entry->dev;
3281 
3282     if (urb->status == 0) {
3283         dev->net->stats.tx_packets += entry->num_of_packet;
3284         dev->net->stats.tx_bytes += entry->length;
3285     } else {
3286         dev->net->stats.tx_errors += entry->num_of_packet;
3287 
3288         switch (urb->status) {
3289         case -EPIPE:
3290             lan78xx_defer_kevent(dev, EVENT_TX_HALT);
3291             break;
3292 
3293         /* software-driven interface shutdown */
3294         case -ECONNRESET:
3295         case -ESHUTDOWN:
3296             netif_dbg(dev, tx_err, dev->net,
3297                   "tx err interface gone %d\n",
3298                   entry->urb->status);
3299             break;
3300 
3301         case -EPROTO:
3302         case -ETIME:
3303         case -EILSEQ:
3304             netif_stop_queue(dev->net);
3305             netif_dbg(dev, tx_err, dev->net,
3306                   "tx err queue stopped %d\n",
3307                   entry->urb->status);
3308             break;
3309         default:
3310             netif_dbg(dev, tx_err, dev->net,
3311                   "unknown tx err %d\n",
3312                   entry->urb->status);
3313             break;
3314         }
3315     }
3316 
3317     usb_autopm_put_interface_async(dev->intf);
3318 
3319     skb_unlink(skb, &dev->txq);
3320 
3321     lan78xx_release_tx_buf(dev, skb);
3322 
3323     /* Re-schedule NAPI if Tx data pending but no URBs in progress.
3324      */
3325     if (skb_queue_empty(&dev->txq) &&
3326         !skb_queue_empty(&dev->txq_pend))
3327         napi_schedule(&dev->napi);
3328 }
3329 
3330 static void lan78xx_queue_skb(struct sk_buff_head *list,
3331                   struct sk_buff *newsk, enum skb_state state)
3332 {
3333     struct skb_data *entry = (struct skb_data *)newsk->cb;
3334 
3335     __skb_queue_tail(list, newsk);
3336     entry->state = state;
3337 }
3338 
3339 static unsigned int lan78xx_tx_urb_space(struct lan78xx_net *dev)
3340 {
3341     return skb_queue_len(&dev->txq_free) * dev->tx_urb_size;
3342 }
3343 
3344 static unsigned int lan78xx_tx_pend_data_len(struct lan78xx_net *dev)
3345 {
3346     return dev->tx_pend_data_len;
3347 }
3348 
3349 static void lan78xx_tx_pend_skb_add(struct lan78xx_net *dev,
3350                     struct sk_buff *skb,
3351                     unsigned int *tx_pend_data_len)
3352 {
3353     unsigned long flags;
3354 
3355     spin_lock_irqsave(&dev->txq_pend.lock, flags);
3356 
3357     __skb_queue_tail(&dev->txq_pend, skb);
3358 
3359     dev->tx_pend_data_len += skb->len;
3360     *tx_pend_data_len = dev->tx_pend_data_len;
3361 
3362     spin_unlock_irqrestore(&dev->txq_pend.lock, flags);
3363 }
3364 
3365 static void lan78xx_tx_pend_skb_head_add(struct lan78xx_net *dev,
3366                      struct sk_buff *skb,
3367                      unsigned int *tx_pend_data_len)
3368 {
3369     unsigned long flags;
3370 
3371     spin_lock_irqsave(&dev->txq_pend.lock, flags);
3372 
3373     __skb_queue_head(&dev->txq_pend, skb);
3374 
3375     dev->tx_pend_data_len += skb->len;
3376     *tx_pend_data_len = dev->tx_pend_data_len;
3377 
3378     spin_unlock_irqrestore(&dev->txq_pend.lock, flags);
3379 }
3380 
3381 static void lan78xx_tx_pend_skb_get(struct lan78xx_net *dev,
3382                     struct sk_buff **skb,
3383                     unsigned int *tx_pend_data_len)
3384 {
3385     unsigned long flags;
3386 
3387     spin_lock_irqsave(&dev->txq_pend.lock, flags);
3388 
3389     *skb = __skb_dequeue(&dev->txq_pend);
3390     if (*skb)
3391         dev->tx_pend_data_len -= (*skb)->len;
3392     *tx_pend_data_len = dev->tx_pend_data_len;
3393 
3394     spin_unlock_irqrestore(&dev->txq_pend.lock, flags);
3395 }
3396 
3397 static netdev_tx_t
3398 lan78xx_start_xmit(struct sk_buff *skb, struct net_device *net)
3399 {
3400     struct lan78xx_net *dev = netdev_priv(net);
3401     unsigned int tx_pend_data_len;
3402 
3403     if (test_bit(EVENT_DEV_ASLEEP, &dev->flags))
3404         schedule_delayed_work(&dev->wq, 0);
3405 
3406     skb_tx_timestamp(skb);
3407 
3408     lan78xx_tx_pend_skb_add(dev, skb, &tx_pend_data_len);
3409 
3410     /* Set up a Tx URB if none is in progress */
3411 
3412     if (skb_queue_empty(&dev->txq))
3413         napi_schedule(&dev->napi);
3414 
3415     /* Stop stack Tx queue if we have enough data to fill
3416      * all the free Tx URBs.
3417      */
3418     if (tx_pend_data_len > lan78xx_tx_urb_space(dev)) {
3419         netif_stop_queue(net);
3420 
3421         netif_dbg(dev, hw, dev->net, "tx data len: %u, urb space %u",
3422               tx_pend_data_len, lan78xx_tx_urb_space(dev));
3423 
3424         /* Kick off transmission of pending data */
3425 
3426         if (!skb_queue_empty(&dev->txq_free))
3427             napi_schedule(&dev->napi);
3428     }
3429 
3430     return NETDEV_TX_OK;
3431 }
3432 
3433 static int lan78xx_bind(struct lan78xx_net *dev, struct usb_interface *intf)
3434 {
3435     struct lan78xx_priv *pdata = NULL;
3436     int ret;
3437     int i;
3438 
3439     dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL);
3440 
3441     pdata = (struct lan78xx_priv *)(dev->data[0]);
3442     if (!pdata) {
3443         netdev_warn(dev->net, "Unable to allocate lan78xx_priv");
3444         return -ENOMEM;
3445     }
3446 
3447     pdata->dev = dev;
3448 
3449     spin_lock_init(&pdata->rfe_ctl_lock);
3450     mutex_init(&pdata->dataport_mutex);
3451 
3452     INIT_WORK(&pdata->set_multicast, lan78xx_deferred_multicast_write);
3453 
3454     for (i = 0; i < DP_SEL_VHF_VLAN_LEN; i++)
3455         pdata->vlan_table[i] = 0;
3456 
3457     INIT_WORK(&pdata->set_vlan, lan78xx_deferred_vlan_write);
3458 
3459     dev->net->features = 0;
3460 
3461     if (DEFAULT_TX_CSUM_ENABLE)
3462         dev->net->features |= NETIF_F_HW_CSUM;
3463 
3464     if (DEFAULT_RX_CSUM_ENABLE)
3465         dev->net->features |= NETIF_F_RXCSUM;
3466 
3467     if (DEFAULT_TSO_CSUM_ENABLE)
3468         dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG;
3469 
3470     if (DEFAULT_VLAN_RX_OFFLOAD)
3471         dev->net->features |= NETIF_F_HW_VLAN_CTAG_RX;
3472 
3473     if (DEFAULT_VLAN_FILTER_ENABLE)
3474         dev->net->features |= NETIF_F_HW_VLAN_CTAG_FILTER;
3475 
3476     dev->net->hw_features = dev->net->features;
3477 
3478     ret = lan78xx_setup_irq_domain(dev);
3479     if (ret < 0) {
3480         netdev_warn(dev->net,
3481                 "lan78xx_setup_irq_domain() failed : %d", ret);
3482         goto out1;
3483     }
3484 
3485     /* Init all registers */
3486     ret = lan78xx_reset(dev);
3487     if (ret) {
3488         netdev_warn(dev->net, "Registers INIT FAILED....");
3489         goto out2;
3490     }
3491 
3492     ret = lan78xx_mdio_init(dev);
3493     if (ret) {
3494         netdev_warn(dev->net, "MDIO INIT FAILED.....");
3495         goto out2;
3496     }
3497 
3498     dev->net->flags |= IFF_MULTICAST;
3499 
3500     pdata->wol = WAKE_MAGIC;
3501 
3502     return ret;
3503 
3504 out2:
3505     lan78xx_remove_irq_domain(dev);
3506 
3507 out1:
3508     netdev_warn(dev->net, "Bind routine FAILED");
3509     cancel_work_sync(&pdata->set_multicast);
3510     cancel_work_sync(&pdata->set_vlan);
3511     kfree(pdata);
3512     return ret;
3513 }
3514 
3515 static void lan78xx_unbind(struct lan78xx_net *dev, struct usb_interface *intf)
3516 {
3517     struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
3518 
3519     lan78xx_remove_irq_domain(dev);
3520 
3521     lan78xx_remove_mdio(dev);
3522 
3523     if (pdata) {
3524         cancel_work_sync(&pdata->set_multicast);
3525         cancel_work_sync(&pdata->set_vlan);
3526         netif_dbg(dev, ifdown, dev->net, "free pdata");
3527         kfree(pdata);
3528         pdata = NULL;
3529         dev->data[0] = 0;
3530     }
3531 }
3532 
3533 static void lan78xx_rx_csum_offload(struct lan78xx_net *dev,
3534                     struct sk_buff *skb,
3535                     u32 rx_cmd_a, u32 rx_cmd_b)
3536 {
3537     /* HW Checksum offload appears to be flawed if used when not stripping
3538      * VLAN headers. Drop back to S/W checksums under these conditions.
3539      */
3540     if (!(dev->net->features & NETIF_F_RXCSUM) ||
3541         unlikely(rx_cmd_a & RX_CMD_A_ICSM_) ||
3542         ((rx_cmd_a & RX_CMD_A_FVTG_) &&
3543          !(dev->net->features & NETIF_F_HW_VLAN_CTAG_RX))) {
3544         skb->ip_summed = CHECKSUM_NONE;
3545     } else {
3546         skb->csum = ntohs((u16)(rx_cmd_b >> RX_CMD_B_CSUM_SHIFT_));
3547         skb->ip_summed = CHECKSUM_COMPLETE;
3548     }
3549 }
3550 
3551 static void lan78xx_rx_vlan_offload(struct lan78xx_net *dev,
3552                     struct sk_buff *skb,
3553                     u32 rx_cmd_a, u32 rx_cmd_b)
3554 {
3555     if ((dev->net->features & NETIF_F_HW_VLAN_CTAG_RX) &&
3556         (rx_cmd_a & RX_CMD_A_FVTG_))
3557         __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
3558                        (rx_cmd_b & 0xffff));
3559 }
3560 
3561 static void lan78xx_skb_return(struct lan78xx_net *dev, struct sk_buff *skb)
3562 {
3563     dev->net->stats.rx_packets++;
3564     dev->net->stats.rx_bytes += skb->len;
3565 
3566     skb->protocol = eth_type_trans(skb, dev->net);
3567 
3568     netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n",
3569           skb->len + sizeof(struct ethhdr), skb->protocol);
3570     memset(skb->cb, 0, sizeof(struct skb_data));
3571 
3572     if (skb_defer_rx_timestamp(skb))
3573         return;
3574 
3575     napi_gro_receive(&dev->napi, skb);
3576 }
3577 
3578 static int lan78xx_rx(struct lan78xx_net *dev, struct sk_buff *skb,
3579               int budget, int *work_done)
3580 {
3581     if (skb->len < RX_SKB_MIN_LEN)
3582         return 0;
3583 
3584     /* Extract frames from the URB buffer and pass each one to
3585      * the stack in a new NAPI SKB.
3586      */
3587     while (skb->len > 0) {
3588         u32 rx_cmd_a, rx_cmd_b, align_count, size;
3589         u16 rx_cmd_c;
3590         unsigned char *packet;
3591 
3592         rx_cmd_a = get_unaligned_le32(skb->data);
3593         skb_pull(skb, sizeof(rx_cmd_a));
3594 
3595         rx_cmd_b = get_unaligned_le32(skb->data);
3596         skb_pull(skb, sizeof(rx_cmd_b));
3597 
3598         rx_cmd_c = get_unaligned_le16(skb->data);
3599         skb_pull(skb, sizeof(rx_cmd_c));
3600 
3601         packet = skb->data;
3602 
3603         /* get the packet length */
3604         size = (rx_cmd_a & RX_CMD_A_LEN_MASK_);
3605         align_count = (4 - ((size + RXW_PADDING) % 4)) % 4;
3606 
3607         if (unlikely(rx_cmd_a & RX_CMD_A_RED_)) {
3608             netif_dbg(dev, rx_err, dev->net,
3609                   "Error rx_cmd_a=0x%08x", rx_cmd_a);
3610         } else {
3611             u32 frame_len = size - ETH_FCS_LEN;
3612             struct sk_buff *skb2;
3613 
3614             skb2 = napi_alloc_skb(&dev->napi, frame_len);
3615             if (!skb2)
3616                 return 0;
3617 
3618             memcpy(skb2->data, packet, frame_len);
3619 
3620             skb_put(skb2, frame_len);
3621 
3622             lan78xx_rx_csum_offload(dev, skb2, rx_cmd_a, rx_cmd_b);
3623             lan78xx_rx_vlan_offload(dev, skb2, rx_cmd_a, rx_cmd_b);
3624 
3625             /* Processing of the URB buffer must complete once
3626              * it has started. If the NAPI work budget is exhausted
3627              * while frames remain they are added to the overflow
3628              * queue for delivery in the next NAPI polling cycle.
3629              */
3630             if (*work_done < budget) {
3631                 lan78xx_skb_return(dev, skb2);
3632                 ++(*work_done);
3633             } else {
3634                 skb_queue_tail(&dev->rxq_overflow, skb2);
3635             }
3636         }
3637 
3638         skb_pull(skb, size);
3639 
3640         /* skip padding bytes before the next frame starts */
3641         if (skb->len)
3642             skb_pull(skb, align_count);
3643     }
3644 
3645     return 1;
3646 }
3647 
3648 static inline void rx_process(struct lan78xx_net *dev, struct sk_buff *skb,
3649                   int budget, int *work_done)
3650 {
3651     if (!lan78xx_rx(dev, skb, budget, work_done)) {
3652         netif_dbg(dev, rx_err, dev->net, "drop\n");
3653         dev->net->stats.rx_errors++;
3654     }
3655 }
3656 
3657 static void rx_complete(struct urb *urb)
3658 {
3659     struct sk_buff  *skb = (struct sk_buff *)urb->context;
3660     struct skb_data *entry = (struct skb_data *)skb->cb;
3661     struct lan78xx_net *dev = entry->dev;
3662     int urb_status = urb->status;
3663     enum skb_state state;
3664 
3665     netif_dbg(dev, rx_status, dev->net,
3666           "rx done: status %d", urb->status);
3667 
3668     skb_put(skb, urb->actual_length);
3669     state = rx_done;
3670 
3671     if (urb != entry->urb)
3672         netif_warn(dev, rx_err, dev->net, "URB pointer mismatch");
3673 
3674     switch (urb_status) {
3675     case 0:
3676         if (skb->len < RX_SKB_MIN_LEN) {
3677             state = rx_cleanup;
3678             dev->net->stats.rx_errors++;
3679             dev->net->stats.rx_length_errors++;
3680             netif_dbg(dev, rx_err, dev->net,
3681                   "rx length %d\n", skb->len);
3682         }
3683         usb_mark_last_busy(dev->udev);
3684         break;
3685     case -EPIPE:
3686         dev->net->stats.rx_errors++;
3687         lan78xx_defer_kevent(dev, EVENT_RX_HALT);
3688         fallthrough;
3689     case -ECONNRESET:               /* async unlink */
3690     case -ESHUTDOWN:                /* hardware gone */
3691         netif_dbg(dev, ifdown, dev->net,
3692               "rx shutdown, code %d\n", urb_status);
3693         state = rx_cleanup;
3694         break;
3695     case -EPROTO:
3696     case -ETIME:
3697     case -EILSEQ:
3698         dev->net->stats.rx_errors++;
3699         state = rx_cleanup;
3700         break;
3701 
3702     /* data overrun ... flush fifo? */
3703     case -EOVERFLOW:
3704         dev->net->stats.rx_over_errors++;
3705         fallthrough;
3706 
3707     default:
3708         state = rx_cleanup;
3709         dev->net->stats.rx_errors++;
3710         netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status);
3711         break;
3712     }
3713 
3714     state = defer_bh(dev, skb, &dev->rxq, state);
3715 }
3716 
3717 static int rx_submit(struct lan78xx_net *dev, struct sk_buff *skb, gfp_t flags)
3718 {
3719     struct skb_data *entry = (struct skb_data *)skb->cb;
3720     size_t size = dev->rx_urb_size;
3721     struct urb *urb = entry->urb;
3722     unsigned long lockflags;
3723     int ret = 0;
3724 
3725     usb_fill_bulk_urb(urb, dev->udev, dev->pipe_in,
3726               skb->data, size, rx_complete, skb);
3727 
3728     spin_lock_irqsave(&dev->rxq.lock, lockflags);
3729 
3730     if (netif_device_present(dev->net) &&
3731         netif_running(dev->net) &&
3732         !test_bit(EVENT_RX_HALT, &dev->flags) &&
3733         !test_bit(EVENT_DEV_ASLEEP, &dev->flags)) {
3734         ret = usb_submit_urb(urb, flags);
3735         switch (ret) {
3736         case 0:
3737             lan78xx_queue_skb(&dev->rxq, skb, rx_start);
3738             break;
3739         case -EPIPE:
3740             lan78xx_defer_kevent(dev, EVENT_RX_HALT);
3741             break;
3742         case -ENODEV:
3743         case -ENOENT:
3744             netif_dbg(dev, ifdown, dev->net, "device gone\n");
3745             netif_device_detach(dev->net);
3746             break;
3747         case -EHOSTUNREACH:
3748             ret = -ENOLINK;
3749             napi_schedule(&dev->napi);
3750             break;
3751         default:
3752             netif_dbg(dev, rx_err, dev->net,
3753                   "rx submit, %d\n", ret);
3754             napi_schedule(&dev->napi);
3755             break;
3756         }
3757     } else {
3758         netif_dbg(dev, ifdown, dev->net, "rx: stopped\n");
3759         ret = -ENOLINK;
3760     }
3761     spin_unlock_irqrestore(&dev->rxq.lock, lockflags);
3762 
3763     if (ret)
3764         lan78xx_release_rx_buf(dev, skb);
3765 
3766     return ret;
3767 }
3768 
3769 static void lan78xx_rx_urb_submit_all(struct lan78xx_net *dev)
3770 {
3771     struct sk_buff *rx_buf;
3772 
3773     /* Ensure the maximum number of Rx URBs is submitted
3774      */
3775     while ((rx_buf = lan78xx_get_rx_buf(dev)) != NULL) {
3776         if (rx_submit(dev, rx_buf, GFP_ATOMIC) != 0)
3777             break;
3778     }
3779 }
3780 
3781 static void lan78xx_rx_urb_resubmit(struct lan78xx_net *dev,
3782                     struct sk_buff *rx_buf)
3783 {
3784     /* reset SKB data pointers */
3785 
3786     rx_buf->data = rx_buf->head;
3787     skb_reset_tail_pointer(rx_buf);
3788     rx_buf->len = 0;
3789     rx_buf->data_len = 0;
3790 
3791     rx_submit(dev, rx_buf, GFP_ATOMIC);
3792 }
3793 
3794 static void lan78xx_fill_tx_cmd_words(struct sk_buff *skb, u8 *buffer)
3795 {
3796     u32 tx_cmd_a;
3797     u32 tx_cmd_b;
3798 
3799     tx_cmd_a = (u32)(skb->len & TX_CMD_A_LEN_MASK_) | TX_CMD_A_FCS_;
3800 
3801     if (skb->ip_summed == CHECKSUM_PARTIAL)
3802         tx_cmd_a |= TX_CMD_A_IPE_ | TX_CMD_A_TPE_;
3803 
3804     tx_cmd_b = 0;
3805     if (skb_is_gso(skb)) {
3806         u16 mss = max(skb_shinfo(skb)->gso_size, TX_CMD_B_MSS_MIN_);
3807 
3808         tx_cmd_b = (mss << TX_CMD_B_MSS_SHIFT_) & TX_CMD_B_MSS_MASK_;
3809 
3810         tx_cmd_a |= TX_CMD_A_LSO_;
3811     }
3812 
3813     if (skb_vlan_tag_present(skb)) {
3814         tx_cmd_a |= TX_CMD_A_IVTG_;
3815         tx_cmd_b |= skb_vlan_tag_get(skb) & TX_CMD_B_VTAG_MASK_;
3816     }
3817 
3818     put_unaligned_le32(tx_cmd_a, buffer);
3819     put_unaligned_le32(tx_cmd_b, buffer + 4);
3820 }
3821 
3822 static struct skb_data *lan78xx_tx_buf_fill(struct lan78xx_net *dev,
3823                         struct sk_buff *tx_buf)
3824 {
3825     struct skb_data *entry = (struct skb_data *)tx_buf->cb;
3826     int remain = dev->tx_urb_size;
3827     u8 *tx_data = tx_buf->data;
3828     u32 urb_len = 0;
3829 
3830     entry->num_of_packet = 0;
3831     entry->length = 0;
3832 
3833     /* Work through the pending SKBs and copy the data of each SKB into
3834      * the URB buffer if there room for all the SKB data.
3835      *
3836      * There must be at least DST+SRC+TYPE in the SKB (with padding enabled)
3837      */
3838     while (remain >= TX_SKB_MIN_LEN) {
3839         unsigned int pending_bytes;
3840         unsigned int align_bytes;
3841         struct sk_buff *skb;
3842         unsigned int len;
3843 
3844         lan78xx_tx_pend_skb_get(dev, &skb, &pending_bytes);
3845 
3846         if (!skb)
3847             break;
3848 
3849         align_bytes = (TX_ALIGNMENT - (urb_len % TX_ALIGNMENT)) %
3850                   TX_ALIGNMENT;
3851         len = align_bytes + TX_CMD_LEN + skb->len;
3852         if (len > remain) {
3853             lan78xx_tx_pend_skb_head_add(dev, skb, &pending_bytes);
3854             break;
3855         }
3856 
3857         tx_data += align_bytes;
3858 
3859         lan78xx_fill_tx_cmd_words(skb, tx_data);
3860         tx_data += TX_CMD_LEN;
3861 
3862         len = skb->len;
3863         if (skb_copy_bits(skb, 0, tx_data, len) < 0) {
3864             struct net_device_stats *stats = &dev->net->stats;
3865 
3866             stats->tx_dropped++;
3867             dev_kfree_skb_any(skb);
3868             tx_data -= TX_CMD_LEN;
3869             continue;
3870         }
3871 
3872         tx_data += len;
3873         entry->length += len;
3874         entry->num_of_packet += skb_shinfo(skb)->gso_segs ?: 1;
3875 
3876         dev_kfree_skb_any(skb);
3877 
3878         urb_len = (u32)(tx_data - (u8 *)tx_buf->data);
3879 
3880         remain = dev->tx_urb_size - urb_len;
3881     }
3882 
3883     skb_put(tx_buf, urb_len);
3884 
3885     return entry;
3886 }
3887 
3888 static void lan78xx_tx_bh(struct lan78xx_net *dev)
3889 {
3890     int ret;
3891 
3892     /* Start the stack Tx queue if it was stopped
3893      */
3894     netif_tx_lock(dev->net);
3895     if (netif_queue_stopped(dev->net)) {
3896         if (lan78xx_tx_pend_data_len(dev) < lan78xx_tx_urb_space(dev))
3897             netif_wake_queue(dev->net);
3898     }
3899     netif_tx_unlock(dev->net);
3900 
3901     /* Go through the Tx pending queue and set up URBs to transfer
3902      * the data to the device. Stop if no more pending data or URBs,
3903      * or if an error occurs when a URB is submitted.
3904      */
3905     do {
3906         struct skb_data *entry;
3907         struct sk_buff *tx_buf;
3908         unsigned long flags;
3909 
3910         if (skb_queue_empty(&dev->txq_pend))
3911             break;
3912 
3913         tx_buf = lan78xx_get_tx_buf(dev);
3914         if (!tx_buf)
3915             break;
3916 
3917         entry = lan78xx_tx_buf_fill(dev, tx_buf);
3918 
3919         spin_lock_irqsave(&dev->txq.lock, flags);
3920         ret = usb_autopm_get_interface_async(dev->intf);
3921         if (ret < 0) {
3922             spin_unlock_irqrestore(&dev->txq.lock, flags);
3923             goto out;
3924         }
3925 
3926         usb_fill_bulk_urb(entry->urb, dev->udev, dev->pipe_out,
3927                   tx_buf->data, tx_buf->len, tx_complete,
3928                   tx_buf);
3929 
3930         if (tx_buf->len % dev->maxpacket == 0) {
3931             /* send USB_ZERO_PACKET */
3932             entry->urb->transfer_flags |= URB_ZERO_PACKET;
3933         }
3934 
3935 #ifdef CONFIG_PM
3936         /* if device is asleep stop outgoing packet processing */
3937         if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) {
3938             usb_anchor_urb(entry->urb, &dev->deferred);
3939             netif_stop_queue(dev->net);
3940             spin_unlock_irqrestore(&dev->txq.lock, flags);
3941             netdev_dbg(dev->net,
3942                    "Delaying transmission for resumption\n");
3943             return;
3944         }
3945 #endif
3946         ret = usb_submit_urb(entry->urb, GFP_ATOMIC);
3947         switch (ret) {
3948         case 0:
3949             netif_trans_update(dev->net);
3950             lan78xx_queue_skb(&dev->txq, tx_buf, tx_start);
3951             break;
3952         case -EPIPE:
3953             netif_stop_queue(dev->net);
3954             lan78xx_defer_kevent(dev, EVENT_TX_HALT);
3955             usb_autopm_put_interface_async(dev->intf);
3956             break;
3957         case -ENODEV:
3958         case -ENOENT:
3959             netif_dbg(dev, tx_err, dev->net,
3960                   "tx submit urb err %d (disconnected?)", ret);
3961             netif_device_detach(dev->net);
3962             break;
3963         default:
3964             usb_autopm_put_interface_async(dev->intf);
3965             netif_dbg(dev, tx_err, dev->net,
3966                   "tx submit urb err %d\n", ret);
3967             break;
3968         }
3969 
3970         spin_unlock_irqrestore(&dev->txq.lock, flags);
3971 
3972         if (ret) {
3973             netdev_warn(dev->net, "failed to tx urb %d\n", ret);
3974 out:
3975             dev->net->stats.tx_dropped += entry->num_of_packet;
3976             lan78xx_release_tx_buf(dev, tx_buf);
3977         }
3978     } while (ret == 0);
3979 }
3980 
3981 static int lan78xx_bh(struct lan78xx_net *dev, int budget)
3982 {
3983     struct sk_buff_head done;
3984     struct sk_buff *rx_buf;
3985     struct skb_data *entry;
3986     unsigned long flags;
3987     int work_done = 0;
3988 
3989     /* Pass frames received in the last NAPI cycle before
3990      * working on newly completed URBs.
3991      */
3992     while (!skb_queue_empty(&dev->rxq_overflow)) {
3993         lan78xx_skb_return(dev, skb_dequeue(&dev->rxq_overflow));
3994         ++work_done;
3995     }
3996 
3997     /* Take a snapshot of the done queue and move items to a
3998      * temporary queue. Rx URB completions will continue to add
3999      * to the done queue.
4000      */
4001     __skb_queue_head_init(&done);
4002 
4003     spin_lock_irqsave(&dev->rxq_done.lock, flags);
4004     skb_queue_splice_init(&dev->rxq_done, &done);
4005     spin_unlock_irqrestore(&dev->rxq_done.lock, flags);
4006 
4007     /* Extract receive frames from completed URBs and
4008      * pass them to the stack. Re-submit each completed URB.
4009      */
4010     while ((work_done < budget) &&
4011            (rx_buf = __skb_dequeue(&done))) {
4012         entry = (struct skb_data *)(rx_buf->cb);
4013         switch (entry->state) {
4014         case rx_done:
4015             rx_process(dev, rx_buf, budget, &work_done);
4016             break;
4017         case rx_cleanup:
4018             break;
4019         default:
4020             netdev_dbg(dev->net, "rx buf state %d\n",
4021                    entry->state);
4022             break;
4023         }
4024 
4025         lan78xx_rx_urb_resubmit(dev, rx_buf);
4026     }
4027 
4028     /* If budget was consumed before processing all the URBs put them
4029      * back on the front of the done queue. They will be first to be
4030      * processed in the next NAPI cycle.
4031      */
4032     spin_lock_irqsave(&dev->rxq_done.lock, flags);
4033     skb_queue_splice(&done, &dev->rxq_done);
4034     spin_unlock_irqrestore(&dev->rxq_done.lock, flags);
4035 
4036     if (netif_device_present(dev->net) && netif_running(dev->net)) {
4037         /* reset update timer delta */
4038         if (timer_pending(&dev->stat_monitor) && (dev->delta != 1)) {
4039             dev->delta = 1;
4040             mod_timer(&dev->stat_monitor,
4041                   jiffies + STAT_UPDATE_TIMER);
4042         }
4043 
4044         /* Submit all free Rx URBs */
4045 
4046         if (!test_bit(EVENT_RX_HALT, &dev->flags))
4047             lan78xx_rx_urb_submit_all(dev);
4048 
4049         /* Submit new Tx URBs */
4050 
4051         lan78xx_tx_bh(dev);
4052     }
4053 
4054     return work_done;
4055 }
4056 
4057 static int lan78xx_poll(struct napi_struct *napi, int budget)
4058 {
4059     struct lan78xx_net *dev = container_of(napi, struct lan78xx_net, napi);
4060     int result = budget;
4061     int work_done;
4062 
4063     /* Don't do any work if the device is suspended */
4064 
4065     if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) {
4066         napi_complete_done(napi, 0);
4067         return 0;
4068     }
4069 
4070     /* Process completed URBs and submit new URBs */
4071 
4072     work_done = lan78xx_bh(dev, budget);
4073 
4074     if (work_done < budget) {
4075         napi_complete_done(napi, work_done);
4076 
4077         /* Start a new polling cycle if data was received or
4078          * data is waiting to be transmitted.
4079          */
4080         if (!skb_queue_empty(&dev->rxq_done)) {
4081             napi_schedule(napi);
4082         } else if (netif_carrier_ok(dev->net)) {
4083             if (skb_queue_empty(&dev->txq) &&
4084                 !skb_queue_empty(&dev->txq_pend)) {
4085                 napi_schedule(napi);
4086             } else {
4087                 netif_tx_lock(dev->net);
4088                 if (netif_queue_stopped(dev->net)) {
4089                     netif_wake_queue(dev->net);
4090                     napi_schedule(napi);
4091                 }
4092                 netif_tx_unlock(dev->net);
4093             }
4094         }
4095         result = work_done;
4096     }
4097 
4098     return result;
4099 }
4100 
4101 static void lan78xx_delayedwork(struct work_struct *work)
4102 {
4103     int status;
4104     struct lan78xx_net *dev;
4105 
4106     dev = container_of(work, struct lan78xx_net, wq.work);
4107 
4108     if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags))
4109         return;
4110 
4111     if (usb_autopm_get_interface(dev->intf) < 0)
4112         return;
4113 
4114     if (test_bit(EVENT_TX_HALT, &dev->flags)) {
4115         unlink_urbs(dev, &dev->txq);
4116 
4117         status = usb_clear_halt(dev->udev, dev->pipe_out);
4118         if (status < 0 &&
4119             status != -EPIPE &&
4120             status != -ESHUTDOWN) {
4121             if (netif_msg_tx_err(dev))
4122                 netdev_err(dev->net,
4123                        "can't clear tx halt, status %d\n",
4124                        status);
4125         } else {
4126             clear_bit(EVENT_TX_HALT, &dev->flags);
4127             if (status != -ESHUTDOWN)
4128                 netif_wake_queue(dev->net);
4129         }
4130     }
4131 
4132     if (test_bit(EVENT_RX_HALT, &dev->flags)) {
4133         unlink_urbs(dev, &dev->rxq);
4134         status = usb_clear_halt(dev->udev, dev->pipe_in);
4135         if (status < 0 &&
4136             status != -EPIPE &&
4137             status != -ESHUTDOWN) {
4138             if (netif_msg_rx_err(dev))
4139                 netdev_err(dev->net,
4140                        "can't clear rx halt, status %d\n",
4141                        status);
4142         } else {
4143             clear_bit(EVENT_RX_HALT, &dev->flags);
4144             napi_schedule(&dev->napi);
4145         }
4146     }
4147 
4148     if (test_bit(EVENT_LINK_RESET, &dev->flags)) {
4149         int ret = 0;
4150 
4151         clear_bit(EVENT_LINK_RESET, &dev->flags);
4152         if (lan78xx_link_reset(dev) < 0) {
4153             netdev_info(dev->net, "link reset failed (%d)\n",
4154                     ret);
4155         }
4156     }
4157 
4158     if (test_bit(EVENT_STAT_UPDATE, &dev->flags)) {
4159         lan78xx_update_stats(dev);
4160 
4161         clear_bit(EVENT_STAT_UPDATE, &dev->flags);
4162 
4163         mod_timer(&dev->stat_monitor,
4164               jiffies + (STAT_UPDATE_TIMER * dev->delta));
4165 
4166         dev->delta = min((dev->delta * 2), 50);
4167     }
4168 
4169     usb_autopm_put_interface(dev->intf);
4170 }
4171 
4172 static void intr_complete(struct urb *urb)
4173 {
4174     struct lan78xx_net *dev = urb->context;
4175     int status = urb->status;
4176 
4177     switch (status) {
4178     /* success */
4179     case 0:
4180         lan78xx_status(dev, urb);
4181         break;
4182 
4183     /* software-driven interface shutdown */
4184     case -ENOENT:           /* urb killed */
4185     case -ENODEV:           /* hardware gone */
4186     case -ESHUTDOWN:        /* hardware gone */
4187         netif_dbg(dev, ifdown, dev->net,
4188               "intr shutdown, code %d\n", status);
4189         return;
4190 
4191     /* NOTE:  not throttling like RX/TX, since this endpoint
4192      * already polls infrequently
4193      */
4194     default:
4195         netdev_dbg(dev->net, "intr status %d\n", status);
4196         break;
4197     }
4198 
4199     if (!netif_device_present(dev->net) ||
4200         !netif_running(dev->net)) {
4201         netdev_warn(dev->net, "not submitting new status URB");
4202         return;
4203     }
4204 
4205     memset(urb->transfer_buffer, 0, urb->transfer_buffer_length);
4206     status = usb_submit_urb(urb, GFP_ATOMIC);
4207 
4208     switch (status) {
4209     case  0:
4210         break;
4211     case -ENODEV:
4212     case -ENOENT:
4213         netif_dbg(dev, timer, dev->net,
4214               "intr resubmit %d (disconnect?)", status);
4215         netif_device_detach(dev->net);
4216         break;
4217     default:
4218         netif_err(dev, timer, dev->net,
4219               "intr resubmit --> %d\n", status);
4220         break;
4221     }
4222 }
4223 
4224 static void lan78xx_disconnect(struct usb_interface *intf)
4225 {
4226     struct lan78xx_net *dev;
4227     struct usb_device *udev;
4228     struct net_device *net;
4229     struct phy_device *phydev;
4230 
4231     dev = usb_get_intfdata(intf);
4232     usb_set_intfdata(intf, NULL);
4233     if (!dev)
4234         return;
4235 
4236     set_bit(EVENT_DEV_DISCONNECT, &dev->flags);
4237 
4238     netif_napi_del(&dev->napi);
4239 
4240     udev = interface_to_usbdev(intf);
4241     net = dev->net;
4242 
4243     unregister_netdev(net);
4244 
4245     cancel_delayed_work_sync(&dev->wq);
4246 
4247     phydev = net->phydev;
4248 
4249     phy_unregister_fixup_for_uid(PHY_KSZ9031RNX, 0xfffffff0);
4250     phy_unregister_fixup_for_uid(PHY_LAN8835, 0xfffffff0);
4251 
4252     phy_disconnect(net->phydev);
4253 
4254     if (phy_is_pseudo_fixed_link(phydev))
4255         fixed_phy_unregister(phydev);
4256 
4257     usb_scuttle_anchored_urbs(&dev->deferred);
4258 
4259     if (timer_pending(&dev->stat_monitor))
4260         del_timer_sync(&dev->stat_monitor);
4261 
4262     lan78xx_unbind(dev, intf);
4263 
4264     lan78xx_free_tx_resources(dev);
4265     lan78xx_free_rx_resources(dev);
4266 
4267     usb_kill_urb(dev->urb_intr);
4268     usb_free_urb(dev->urb_intr);
4269 
4270     free_netdev(net);
4271     usb_put_dev(udev);
4272 }
4273 
4274 static void lan78xx_tx_timeout(struct net_device *net, unsigned int txqueue)
4275 {
4276     struct lan78xx_net *dev = netdev_priv(net);
4277 
4278     unlink_urbs(dev, &dev->txq);
4279     napi_schedule(&dev->napi);
4280 }
4281 
4282 static netdev_features_t lan78xx_features_check(struct sk_buff *skb,
4283                         struct net_device *netdev,
4284                         netdev_features_t features)
4285 {
4286     struct lan78xx_net *dev = netdev_priv(netdev);
4287 
4288     if (skb->len > LAN78XX_TSO_SIZE(dev))
4289         features &= ~NETIF_F_GSO_MASK;
4290 
4291     features = vlan_features_check(skb, features);
4292     features = vxlan_features_check(skb, features);
4293 
4294     return features;
4295 }
4296 
4297 static const struct net_device_ops lan78xx_netdev_ops = {
4298     .ndo_open       = lan78xx_open,
4299     .ndo_stop       = lan78xx_stop,
4300     .ndo_start_xmit     = lan78xx_start_xmit,
4301     .ndo_tx_timeout     = lan78xx_tx_timeout,
4302     .ndo_change_mtu     = lan78xx_change_mtu,
4303     .ndo_set_mac_address    = lan78xx_set_mac_addr,
4304     .ndo_validate_addr  = eth_validate_addr,
4305     .ndo_eth_ioctl      = phy_do_ioctl_running,
4306     .ndo_set_rx_mode    = lan78xx_set_multicast,
4307     .ndo_set_features   = lan78xx_set_features,
4308     .ndo_vlan_rx_add_vid    = lan78xx_vlan_rx_add_vid,
4309     .ndo_vlan_rx_kill_vid   = lan78xx_vlan_rx_kill_vid,
4310     .ndo_features_check = lan78xx_features_check,
4311 };
4312 
4313 static void lan78xx_stat_monitor(struct timer_list *t)
4314 {
4315     struct lan78xx_net *dev = from_timer(dev, t, stat_monitor);
4316 
4317     lan78xx_defer_kevent(dev, EVENT_STAT_UPDATE);
4318 }
4319 
4320 static int lan78xx_probe(struct usb_interface *intf,
4321              const struct usb_device_id *id)
4322 {
4323     struct usb_host_endpoint *ep_blkin, *ep_blkout, *ep_intr;
4324     struct lan78xx_net *dev;
4325     struct net_device *netdev;
4326     struct usb_device *udev;
4327     int ret;
4328     unsigned int maxp;
4329     unsigned int period;
4330     u8 *buf = NULL;
4331 
4332     udev = interface_to_usbdev(intf);
4333     udev = usb_get_dev(udev);
4334 
4335     netdev = alloc_etherdev(sizeof(struct lan78xx_net));
4336     if (!netdev) {
4337         dev_err(&intf->dev, "Error: OOM\n");
4338         ret = -ENOMEM;
4339         goto out1;
4340     }
4341 
4342     /* netdev_printk() needs this */
4343     SET_NETDEV_DEV(netdev, &intf->dev);
4344 
4345     dev = netdev_priv(netdev);
4346     dev->udev = udev;
4347     dev->intf = intf;
4348     dev->net = netdev;
4349     dev->msg_enable = netif_msg_init(msg_level, NETIF_MSG_DRV
4350                     | NETIF_MSG_PROBE | NETIF_MSG_LINK);
4351 
4352     skb_queue_head_init(&dev->rxq);
4353     skb_queue_head_init(&dev->txq);
4354     skb_queue_head_init(&dev->rxq_done);
4355     skb_queue_head_init(&dev->txq_pend);
4356     skb_queue_head_init(&dev->rxq_overflow);
4357     mutex_init(&dev->phy_mutex);
4358     mutex_init(&dev->dev_mutex);
4359 
4360     ret = lan78xx_urb_config_init(dev);
4361     if (ret < 0)
4362         goto out2;
4363 
4364     ret = lan78xx_alloc_tx_resources(dev);
4365     if (ret < 0)
4366         goto out2;
4367 
4368     ret = lan78xx_alloc_rx_resources(dev);
4369     if (ret < 0)
4370         goto out3;
4371 
4372     /* MTU range: 68 - 9000 */
4373     netdev->max_mtu = MAX_SINGLE_PACKET_SIZE;
4374 
4375     netif_set_tso_max_size(netdev, LAN78XX_TSO_SIZE(dev));
4376 
4377     netif_napi_add(netdev, &dev->napi, lan78xx_poll, NAPI_POLL_WEIGHT);
4378 
4379     INIT_DELAYED_WORK(&dev->wq, lan78xx_delayedwork);
4380     init_usb_anchor(&dev->deferred);
4381 
4382     netdev->netdev_ops = &lan78xx_netdev_ops;
4383     netdev->watchdog_timeo = TX_TIMEOUT_JIFFIES;
4384     netdev->ethtool_ops = &lan78xx_ethtool_ops;
4385 
4386     dev->delta = 1;
4387     timer_setup(&dev->stat_monitor, lan78xx_stat_monitor, 0);
4388 
4389     mutex_init(&dev->stats.access_lock);
4390 
4391     if (intf->cur_altsetting->desc.bNumEndpoints < 3) {
4392         ret = -ENODEV;
4393         goto out4;
4394     }
4395 
4396     dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE);
4397     ep_blkin = usb_pipe_endpoint(udev, dev->pipe_in);
4398     if (!ep_blkin || !usb_endpoint_is_bulk_in(&ep_blkin->desc)) {
4399         ret = -ENODEV;
4400         goto out4;
4401     }
4402 
4403     dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE);
4404     ep_blkout = usb_pipe_endpoint(udev, dev->pipe_out);
4405     if (!ep_blkout || !usb_endpoint_is_bulk_out(&ep_blkout->desc)) {
4406         ret = -ENODEV;
4407         goto out4;
4408     }
4409 
4410     ep_intr = &intf->cur_altsetting->endpoint[2];
4411     if (!usb_endpoint_is_int_in(&ep_intr->desc)) {
4412         ret = -ENODEV;
4413         goto out4;
4414     }
4415 
4416     dev->pipe_intr = usb_rcvintpipe(dev->udev,
4417                     usb_endpoint_num(&ep_intr->desc));
4418 
4419     ret = lan78xx_bind(dev, intf);
4420     if (ret < 0)
4421         goto out4;
4422 
4423     period = ep_intr->desc.bInterval;
4424     maxp = usb_maxpacket(dev->udev, dev->pipe_intr);
4425     buf = kmalloc(maxp, GFP_KERNEL);
4426     if (!buf) {
4427         ret = -ENOMEM;
4428         goto out5;
4429     }
4430 
4431     dev->urb_intr = usb_alloc_urb(0, GFP_KERNEL);
4432     if (!dev->urb_intr) {
4433         ret = -ENOMEM;
4434         goto out6;
4435     } else {
4436         usb_fill_int_urb(dev->urb_intr, dev->udev,
4437                  dev->pipe_intr, buf, maxp,
4438                  intr_complete, dev, period);
4439         dev->urb_intr->transfer_flags |= URB_FREE_BUFFER;
4440     }
4441 
4442     dev->maxpacket = usb_maxpacket(dev->udev, dev->pipe_out);
4443 
4444     /* Reject broken descriptors. */
4445     if (dev->maxpacket == 0) {
4446         ret = -ENODEV;
4447         goto out6;
4448     }
4449 
4450     /* driver requires remote-wakeup capability during autosuspend. */
4451     intf->needs_remote_wakeup = 1;
4452 
4453     ret = lan78xx_phy_init(dev);
4454     if (ret < 0)
4455         goto out7;
4456 
4457     ret = register_netdev(netdev);
4458     if (ret != 0) {
4459         netif_err(dev, probe, netdev, "couldn't register the device\n");
4460         goto out8;
4461     }
4462 
4463     usb_set_intfdata(intf, dev);
4464 
4465     ret = device_set_wakeup_enable(&udev->dev, true);
4466 
4467      /* Default delay of 2sec has more overhead than advantage.
4468       * Set to 10sec as default.
4469       */
4470     pm_runtime_set_autosuspend_delay(&udev->dev,
4471                      DEFAULT_AUTOSUSPEND_DELAY);
4472 
4473     return 0;
4474 
4475 out8:
4476     phy_disconnect(netdev->phydev);
4477 out7:
4478     usb_free_urb(dev->urb_intr);
4479 out6:
4480     kfree(buf);
4481 out5:
4482     lan78xx_unbind(dev, intf);
4483 out4:
4484     netif_napi_del(&dev->napi);
4485     lan78xx_free_rx_resources(dev);
4486 out3:
4487     lan78xx_free_tx_resources(dev);
4488 out2:
4489     free_netdev(netdev);
4490 out1:
4491     usb_put_dev(udev);
4492 
4493     return ret;
4494 }
4495 
4496 static u16 lan78xx_wakeframe_crc16(const u8 *buf, int len)
4497 {
4498     const u16 crc16poly = 0x8005;
4499     int i;
4500     u16 bit, crc, msb;
4501     u8 data;
4502 
4503     crc = 0xFFFF;
4504     for (i = 0; i < len; i++) {
4505         data = *buf++;
4506         for (bit = 0; bit < 8; bit++) {
4507             msb = crc >> 15;
4508             crc <<= 1;
4509 
4510             if (msb ^ (u16)(data & 1)) {
4511                 crc ^= crc16poly;
4512                 crc |= (u16)0x0001U;
4513             }
4514             data >>= 1;
4515         }
4516     }
4517 
4518     return crc;
4519 }
4520 
4521 static int lan78xx_set_auto_suspend(struct lan78xx_net *dev)
4522 {
4523     u32 buf;
4524     int ret;
4525 
4526     ret = lan78xx_stop_tx_path(dev);
4527     if (ret < 0)
4528         return ret;
4529 
4530     ret = lan78xx_stop_rx_path(dev);
4531     if (ret < 0)
4532         return ret;
4533 
4534     /* auto suspend (selective suspend) */
4535 
4536     ret = lan78xx_write_reg(dev, WUCSR, 0);
4537     if (ret < 0)
4538         return ret;
4539     ret = lan78xx_write_reg(dev, WUCSR2, 0);
4540     if (ret < 0)
4541         return ret;
4542     ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL);
4543     if (ret < 0)
4544         return ret;
4545 
4546     /* set goodframe wakeup */
4547 
4548     ret = lan78xx_read_reg(dev, WUCSR, &buf);
4549     if (ret < 0)
4550         return ret;
4551 
4552     buf |= WUCSR_RFE_WAKE_EN_;
4553     buf |= WUCSR_STORE_WAKE_;
4554 
4555     ret = lan78xx_write_reg(dev, WUCSR, buf);
4556     if (ret < 0)
4557         return ret;
4558 
4559     ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
4560     if (ret < 0)
4561         return ret;
4562 
4563     buf &= ~PMT_CTL_RES_CLR_WKP_EN_;
4564     buf |= PMT_CTL_RES_CLR_WKP_STS_;
4565     buf |= PMT_CTL_PHY_WAKE_EN_;
4566     buf |= PMT_CTL_WOL_EN_;
4567     buf &= ~PMT_CTL_SUS_MODE_MASK_;
4568     buf |= PMT_CTL_SUS_MODE_3_;
4569 
4570     ret = lan78xx_write_reg(dev, PMT_CTL, buf);
4571     if (ret < 0)
4572         return ret;
4573 
4574     ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
4575     if (ret < 0)
4576         return ret;
4577 
4578     buf |= PMT_CTL_WUPS_MASK_;
4579 
4580     ret = lan78xx_write_reg(dev, PMT_CTL, buf);
4581     if (ret < 0)
4582         return ret;
4583 
4584     ret = lan78xx_start_rx_path(dev);
4585 
4586     return ret;
4587 }
4588 
4589 static int lan78xx_set_suspend(struct lan78xx_net *dev, u32 wol)
4590 {
4591     const u8 ipv4_multicast[3] = { 0x01, 0x00, 0x5E };
4592     const u8 ipv6_multicast[3] = { 0x33, 0x33 };
4593     const u8 arp_type[2] = { 0x08, 0x06 };
4594     u32 temp_pmt_ctl;
4595     int mask_index;
4596     u32 temp_wucsr;
4597     u32 buf;
4598     u16 crc;
4599     int ret;
4600 
4601     ret = lan78xx_stop_tx_path(dev);
4602     if (ret < 0)
4603         return ret;
4604     ret = lan78xx_stop_rx_path(dev);
4605     if (ret < 0)
4606         return ret;
4607 
4608     ret = lan78xx_write_reg(dev, WUCSR, 0);
4609     if (ret < 0)
4610         return ret;
4611     ret = lan78xx_write_reg(dev, WUCSR2, 0);
4612     if (ret < 0)
4613         return ret;
4614     ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL);
4615     if (ret < 0)
4616         return ret;
4617 
4618     temp_wucsr = 0;
4619 
4620     temp_pmt_ctl = 0;
4621 
4622     ret = lan78xx_read_reg(dev, PMT_CTL, &temp_pmt_ctl);
4623     if (ret < 0)
4624         return ret;
4625 
4626     temp_pmt_ctl &= ~PMT_CTL_RES_CLR_WKP_EN_;
4627     temp_pmt_ctl |= PMT_CTL_RES_CLR_WKP_STS_;
4628 
4629     for (mask_index = 0; mask_index < NUM_OF_WUF_CFG; mask_index++) {
4630         ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), 0);
4631         if (ret < 0)
4632             return ret;
4633     }
4634 
4635     mask_index = 0;
4636     if (wol & WAKE_PHY) {
4637         temp_pmt_ctl |= PMT_CTL_PHY_WAKE_EN_;
4638 
4639         temp_pmt_ctl |= PMT_CTL_WOL_EN_;
4640         temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
4641         temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
4642     }
4643     if (wol & WAKE_MAGIC) {
4644         temp_wucsr |= WUCSR_MPEN_;
4645 
4646         temp_pmt_ctl |= PMT_CTL_WOL_EN_;
4647         temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
4648         temp_pmt_ctl |= PMT_CTL_SUS_MODE_3_;
4649     }
4650     if (wol & WAKE_BCAST) {
4651         temp_wucsr |= WUCSR_BCST_EN_;
4652 
4653         temp_pmt_ctl |= PMT_CTL_WOL_EN_;
4654         temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
4655         temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
4656     }
4657     if (wol & WAKE_MCAST) {
4658         temp_wucsr |= WUCSR_WAKE_EN_;
4659 
4660         /* set WUF_CFG & WUF_MASK for IPv4 Multicast */
4661         crc = lan78xx_wakeframe_crc16(ipv4_multicast, 3);
4662         ret = lan78xx_write_reg(dev, WUF_CFG(mask_index),
4663                     WUF_CFGX_EN_ |
4664                     WUF_CFGX_TYPE_MCAST_ |
4665                     (0 << WUF_CFGX_OFFSET_SHIFT_) |
4666                     (crc & WUF_CFGX_CRC16_MASK_));
4667         if (ret < 0)
4668             return ret;
4669 
4670         ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 7);
4671         if (ret < 0)
4672             return ret;
4673         ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0);
4674         if (ret < 0)
4675             return ret;
4676         ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0);
4677         if (ret < 0)
4678             return ret;
4679         ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0);
4680         if (ret < 0)
4681             return ret;
4682 
4683         mask_index++;
4684 
4685         /* for IPv6 Multicast */
4686         crc = lan78xx_wakeframe_crc16(ipv6_multicast, 2);
4687         ret = lan78xx_write_reg(dev, WUF_CFG(mask_index),
4688                     WUF_CFGX_EN_ |
4689                     WUF_CFGX_TYPE_MCAST_ |
4690                     (0 << WUF_CFGX_OFFSET_SHIFT_) |
4691                     (crc & WUF_CFGX_CRC16_MASK_));
4692         if (ret < 0)
4693             return ret;
4694 
4695         ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 3);
4696         if (ret < 0)
4697             return ret;
4698         ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0);
4699         if (ret < 0)
4700             return ret;
4701         ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0);
4702         if (ret < 0)
4703             return ret;
4704         ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0);
4705         if (ret < 0)
4706             return ret;
4707 
4708         mask_index++;
4709 
4710         temp_pmt_ctl |= PMT_CTL_WOL_EN_;
4711         temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
4712         temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
4713     }
4714     if (wol & WAKE_UCAST) {
4715         temp_wucsr |= WUCSR_PFDA_EN_;
4716 
4717         temp_pmt_ctl |= PMT_CTL_WOL_EN_;
4718         temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
4719         temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
4720     }
4721     if (wol & WAKE_ARP) {
4722         temp_wucsr |= WUCSR_WAKE_EN_;
4723 
4724         /* set WUF_CFG & WUF_MASK
4725          * for packettype (offset 12,13) = ARP (0x0806)
4726          */
4727         crc = lan78xx_wakeframe_crc16(arp_type, 2);
4728         ret = lan78xx_write_reg(dev, WUF_CFG(mask_index),
4729                     WUF_CFGX_EN_ |
4730                     WUF_CFGX_TYPE_ALL_ |
4731                     (0 << WUF_CFGX_OFFSET_SHIFT_) |
4732                     (crc & WUF_CFGX_CRC16_MASK_));
4733         if (ret < 0)
4734             return ret;
4735 
4736         ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 0x3000);
4737         if (ret < 0)
4738             return ret;
4739         ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0);
4740         if (ret < 0)
4741             return ret;
4742         ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0);
4743         if (ret < 0)
4744             return ret;
4745         ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0);
4746         if (ret < 0)
4747             return ret;
4748 
4749         mask_index++;
4750 
4751         temp_pmt_ctl |= PMT_CTL_WOL_EN_;
4752         temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
4753         temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
4754     }
4755 
4756     ret = lan78xx_write_reg(dev, WUCSR, temp_wucsr);
4757     if (ret < 0)
4758         return ret;
4759 
4760     /* when multiple WOL bits are set */
4761     if (hweight_long((unsigned long)wol) > 1) {
4762         temp_pmt_ctl |= PMT_CTL_WOL_EN_;
4763         temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
4764         temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
4765     }
4766     ret = lan78xx_write_reg(dev, PMT_CTL, temp_pmt_ctl);
4767     if (ret < 0)
4768         return ret;
4769 
4770     /* clear WUPS */
4771     ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
4772     if (ret < 0)
4773         return ret;
4774 
4775     buf |= PMT_CTL_WUPS_MASK_;
4776 
4777     ret = lan78xx_write_reg(dev, PMT_CTL, buf);
4778     if (ret < 0)
4779         return ret;
4780 
4781     ret = lan78xx_start_rx_path(dev);
4782 
4783     return ret;
4784 }
4785 
4786 static int lan78xx_suspend(struct usb_interface *intf, pm_message_t message)
4787 {
4788     struct lan78xx_net *dev = usb_get_intfdata(intf);
4789     bool dev_open;
4790     int ret;
4791 
4792     mutex_lock(&dev->dev_mutex);
4793 
4794     netif_dbg(dev, ifdown, dev->net,
4795           "suspending: pm event %#x", message.event);
4796 
4797     dev_open = test_bit(EVENT_DEV_OPEN, &dev->flags);
4798 
4799     if (dev_open) {
4800         spin_lock_irq(&dev->txq.lock);
4801         /* don't autosuspend while transmitting */
4802         if ((skb_queue_len(&dev->txq) ||
4803              skb_queue_len(&dev->txq_pend)) &&
4804             PMSG_IS_AUTO(message)) {
4805             spin_unlock_irq(&dev->txq.lock);
4806             ret = -EBUSY;
4807             goto out;
4808         } else {
4809             set_bit(EVENT_DEV_ASLEEP, &dev->flags);
4810             spin_unlock_irq(&dev->txq.lock);
4811         }
4812 
4813         /* stop RX */
4814         ret = lan78xx_stop_rx_path(dev);
4815         if (ret < 0)
4816             goto out;
4817 
4818         ret = lan78xx_flush_rx_fifo(dev);
4819         if (ret < 0)
4820             goto out;
4821 
4822         /* stop Tx */
4823         ret = lan78xx_stop_tx_path(dev);
4824         if (ret < 0)
4825             goto out;
4826 
4827         /* empty out the Rx and Tx queues */
4828         netif_device_detach(dev->net);
4829         lan78xx_terminate_urbs(dev);
4830         usb_kill_urb(dev->urb_intr);
4831 
4832         /* reattach */
4833         netif_device_attach(dev->net);
4834 
4835         del_timer(&dev->stat_monitor);
4836 
4837         if (PMSG_IS_AUTO(message)) {
4838             ret = lan78xx_set_auto_suspend(dev);
4839             if (ret < 0)
4840                 goto out;
4841         } else {
4842             struct lan78xx_priv *pdata;
4843 
4844             pdata = (struct lan78xx_priv *)(dev->data[0]);
4845             netif_carrier_off(dev->net);
4846             ret = lan78xx_set_suspend(dev, pdata->wol);
4847             if (ret < 0)
4848                 goto out;
4849         }
4850     } else {
4851         /* Interface is down; don't allow WOL and PHY
4852          * events to wake up the host
4853          */
4854         u32 buf;
4855 
4856         set_bit(EVENT_DEV_ASLEEP, &dev->flags);
4857 
4858         ret = lan78xx_write_reg(dev, WUCSR, 0);
4859         if (ret < 0)
4860             goto out;
4861         ret = lan78xx_write_reg(dev, WUCSR2, 0);
4862         if (ret < 0)
4863             goto out;
4864 
4865         ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
4866         if (ret < 0)
4867             goto out;
4868 
4869         buf &= ~PMT_CTL_RES_CLR_WKP_EN_;
4870         buf |= PMT_CTL_RES_CLR_WKP_STS_;
4871         buf &= ~PMT_CTL_SUS_MODE_MASK_;
4872         buf |= PMT_CTL_SUS_MODE_3_;
4873 
4874         ret = lan78xx_write_reg(dev, PMT_CTL, buf);
4875         if (ret < 0)
4876             goto out;
4877 
4878         ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
4879         if (ret < 0)
4880             goto out;
4881 
4882         buf |= PMT_CTL_WUPS_MASK_;
4883 
4884         ret = lan78xx_write_reg(dev, PMT_CTL, buf);
4885         if (ret < 0)
4886             goto out;
4887     }
4888 
4889     ret = 0;
4890 out:
4891     mutex_unlock(&dev->dev_mutex);
4892 
4893     return ret;
4894 }
4895 
4896 static bool lan78xx_submit_deferred_urbs(struct lan78xx_net *dev)
4897 {
4898     bool pipe_halted = false;
4899     struct urb *urb;
4900 
4901     while ((urb = usb_get_from_anchor(&dev->deferred))) {
4902         struct sk_buff *skb = urb->context;
4903         int ret;
4904 
4905         if (!netif_device_present(dev->net) ||
4906             !netif_carrier_ok(dev->net) ||
4907             pipe_halted) {
4908             lan78xx_release_tx_buf(dev, skb);
4909             continue;
4910         }
4911 
4912         ret = usb_submit_urb(urb, GFP_ATOMIC);
4913 
4914         if (ret == 0) {
4915             netif_trans_update(dev->net);
4916             lan78xx_queue_skb(&dev->txq, skb, tx_start);
4917         } else {
4918             if (ret == -EPIPE) {
4919                 netif_stop_queue(dev->net);
4920                 pipe_halted = true;
4921             } else if (ret == -ENODEV) {
4922                 netif_device_detach(dev->net);
4923             }
4924 
4925             lan78xx_release_tx_buf(dev, skb);
4926         }
4927     }
4928 
4929     return pipe_halted;
4930 }
4931 
4932 static int lan78xx_resume(struct usb_interface *intf)
4933 {
4934     struct lan78xx_net *dev = usb_get_intfdata(intf);
4935     bool dev_open;
4936     int ret;
4937 
4938     mutex_lock(&dev->dev_mutex);
4939 
4940     netif_dbg(dev, ifup, dev->net, "resuming device");
4941 
4942     dev_open = test_bit(EVENT_DEV_OPEN, &dev->flags);
4943 
4944     if (dev_open) {
4945         bool pipe_halted = false;
4946 
4947         ret = lan78xx_flush_tx_fifo(dev);
4948         if (ret < 0)
4949             goto out;
4950 
4951         if (dev->urb_intr) {
4952             int ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL);
4953 
4954             if (ret < 0) {
4955                 if (ret == -ENODEV)
4956                     netif_device_detach(dev->net);
4957                 netdev_warn(dev->net, "Failed to submit intr URB");
4958             }
4959         }
4960 
4961         spin_lock_irq(&dev->txq.lock);
4962 
4963         if (netif_device_present(dev->net)) {
4964             pipe_halted = lan78xx_submit_deferred_urbs(dev);
4965 
4966             if (pipe_halted)
4967                 lan78xx_defer_kevent(dev, EVENT_TX_HALT);
4968         }
4969 
4970         clear_bit(EVENT_DEV_ASLEEP, &dev->flags);
4971 
4972         spin_unlock_irq(&dev->txq.lock);
4973 
4974         if (!pipe_halted &&
4975             netif_device_present(dev->net) &&
4976             (lan78xx_tx_pend_data_len(dev) < lan78xx_tx_urb_space(dev)))
4977             netif_start_queue(dev->net);
4978 
4979         ret = lan78xx_start_tx_path(dev);
4980         if (ret < 0)
4981             goto out;
4982 
4983         napi_schedule(&dev->napi);
4984 
4985         if (!timer_pending(&dev->stat_monitor)) {
4986             dev->delta = 1;
4987             mod_timer(&dev->stat_monitor,
4988                   jiffies + STAT_UPDATE_TIMER);
4989         }
4990 
4991     } else {
4992         clear_bit(EVENT_DEV_ASLEEP, &dev->flags);
4993     }
4994 
4995     ret = lan78xx_write_reg(dev, WUCSR2, 0);
4996     if (ret < 0)
4997         goto out;
4998     ret = lan78xx_write_reg(dev, WUCSR, 0);
4999     if (ret < 0)
5000         goto out;
5001     ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL);
5002     if (ret < 0)
5003         goto out;
5004 
5005     ret = lan78xx_write_reg(dev, WUCSR2, WUCSR2_NS_RCD_ |
5006                          WUCSR2_ARP_RCD_ |
5007                          WUCSR2_IPV6_TCPSYN_RCD_ |
5008                          WUCSR2_IPV4_TCPSYN_RCD_);
5009     if (ret < 0)
5010         goto out;
5011 
5012     ret = lan78xx_write_reg(dev, WUCSR, WUCSR_EEE_TX_WAKE_ |
5013                         WUCSR_EEE_RX_WAKE_ |
5014                         WUCSR_PFDA_FR_ |
5015                         WUCSR_RFE_WAKE_FR_ |
5016                         WUCSR_WUFR_ |
5017                         WUCSR_MPR_ |
5018                         WUCSR_BCST_FR_);
5019     if (ret < 0)
5020         goto out;
5021 
5022     ret = 0;
5023 out:
5024     mutex_unlock(&dev->dev_mutex);
5025 
5026     return ret;
5027 }
5028 
5029 static int lan78xx_reset_resume(struct usb_interface *intf)
5030 {
5031     struct lan78xx_net *dev = usb_get_intfdata(intf);
5032     int ret;
5033 
5034     netif_dbg(dev, ifup, dev->net, "(reset) resuming device");
5035 
5036     ret = lan78xx_reset(dev);
5037     if (ret < 0)
5038         return ret;
5039 
5040     phy_start(dev->net->phydev);
5041 
5042     ret = lan78xx_resume(intf);
5043 
5044     return ret;
5045 }
5046 
5047 static const struct usb_device_id products[] = {
5048     {
5049     /* LAN7800 USB Gigabit Ethernet Device */
5050     USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7800_USB_PRODUCT_ID),
5051     },
5052     {
5053     /* LAN7850 USB Gigabit Ethernet Device */
5054     USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7850_USB_PRODUCT_ID),
5055     },
5056     {
5057     /* LAN7801 USB Gigabit Ethernet Device */
5058     USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7801_USB_PRODUCT_ID),
5059     },
5060     {
5061     /* ATM2-AF USB Gigabit Ethernet Device */
5062     USB_DEVICE(AT29M2AF_USB_VENDOR_ID, AT29M2AF_USB_PRODUCT_ID),
5063     },
5064     {},
5065 };
5066 MODULE_DEVICE_TABLE(usb, products);
5067 
5068 static struct usb_driver lan78xx_driver = {
5069     .name           = DRIVER_NAME,
5070     .id_table       = products,
5071     .probe          = lan78xx_probe,
5072     .disconnect     = lan78xx_disconnect,
5073     .suspend        = lan78xx_suspend,
5074     .resume         = lan78xx_resume,
5075     .reset_resume       = lan78xx_reset_resume,
5076     .supports_autosuspend   = 1,
5077     .disable_hub_initiated_lpm = 1,
5078 };
5079 
5080 module_usb_driver(lan78xx_driver);
5081 
5082 MODULE_AUTHOR(DRIVER_AUTHOR);
5083 MODULE_DESCRIPTION(DRIVER_DESC);
5084 MODULE_LICENSE("GPL");