linux/drivers/net/usb/lan78xx.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0+
   2/*
   3 * Copyright (C) 2015 Microchip Technology
   4 */
   5#include <linux/module.h>
   6#include <linux/netdevice.h>
   7#include <linux/etherdevice.h>
   8#include <linux/ethtool.h>
   9#include <linux/usb.h>
  10#include <linux/crc32.h>
  11#include <linux/signal.h>
  12#include <linux/slab.h>
  13#include <linux/if_vlan.h>
  14#include <linux/uaccess.h>
  15#include <linux/linkmode.h>
  16#include <linux/list.h>
  17#include <linux/ip.h>
  18#include <linux/ipv6.h>
  19#include <linux/mdio.h>
  20#include <linux/phy.h>
  21#include <net/ip6_checksum.h>
  22#include <net/vxlan.h>
  23#include <linux/interrupt.h>
  24#include <linux/irqdomain.h>
  25#include <linux/irq.h>
  26#include <linux/irqchip/chained_irq.h>
  27#include <linux/microchipphy.h>
  28#include <linux/phy_fixed.h>
  29#include <linux/of_mdio.h>
  30#include <linux/of_net.h>
  31#include "lan78xx.h"
  32
  33#define DRIVER_AUTHOR   "WOOJUNG HUH <woojung.huh@microchip.com>"
  34#define DRIVER_DESC     "LAN78XX USB 3.0 Gigabit Ethernet Devices"
  35#define DRIVER_NAME     "lan78xx"
  36
  37#define TX_TIMEOUT_JIFFIES              (5 * HZ)
  38#define THROTTLE_JIFFIES                (HZ / 8)
  39#define UNLINK_TIMEOUT_MS               3
  40
  41#define RX_MAX_QUEUE_MEMORY             (60 * 1518)
  42
  43#define SS_USB_PKT_SIZE                 (1024)
  44#define HS_USB_PKT_SIZE                 (512)
  45#define FS_USB_PKT_SIZE                 (64)
  46
  47#define MAX_RX_FIFO_SIZE                (12 * 1024)
  48#define MAX_TX_FIFO_SIZE                (12 * 1024)
  49
  50#define FLOW_THRESHOLD(n)               ((((n) + 511) / 512) & 0x7F)
  51#define FLOW_CTRL_THRESHOLD(on, off)    ((FLOW_THRESHOLD(on)  << 0) | \
  52                                         (FLOW_THRESHOLD(off) << 8))
  53
  54/* Flow control turned on when Rx FIFO level rises above this level (bytes) */
  55#define FLOW_ON_SS                      9216
  56#define FLOW_ON_HS                      8704
  57
  58/* Flow control turned off when Rx FIFO level falls below this level (bytes) */
  59#define FLOW_OFF_SS                     4096
  60#define FLOW_OFF_HS                     1024
  61
  62#define DEFAULT_BURST_CAP_SIZE          (MAX_TX_FIFO_SIZE)
  63#define DEFAULT_BULK_IN_DELAY           (0x0800)
  64#define MAX_SINGLE_PACKET_SIZE          (9000)
  65#define DEFAULT_TX_CSUM_ENABLE          (true)
  66#define DEFAULT_RX_CSUM_ENABLE          (true)
  67#define DEFAULT_TSO_CSUM_ENABLE         (true)
  68#define DEFAULT_VLAN_FILTER_ENABLE      (true)
  69#define DEFAULT_VLAN_RX_OFFLOAD         (true)
  70#define TX_ALIGNMENT                    (4)
  71#define RXW_PADDING                     2
  72
  73#define LAN78XX_USB_VENDOR_ID           (0x0424)
  74#define LAN7800_USB_PRODUCT_ID          (0x7800)
  75#define LAN7850_USB_PRODUCT_ID          (0x7850)
  76#define LAN7801_USB_PRODUCT_ID          (0x7801)
  77#define LAN78XX_EEPROM_MAGIC            (0x78A5)
  78#define LAN78XX_OTP_MAGIC               (0x78F3)
  79#define AT29M2AF_USB_VENDOR_ID          (0x07C9)
  80#define AT29M2AF_USB_PRODUCT_ID (0x0012)
  81
  82#define MII_READ                        1
  83#define MII_WRITE                       0
  84
  85#define EEPROM_INDICATOR                (0xA5)
  86#define EEPROM_MAC_OFFSET               (0x01)
  87#define MAX_EEPROM_SIZE                 512
  88#define OTP_INDICATOR_1                 (0xF3)
  89#define OTP_INDICATOR_2                 (0xF7)
  90
  91#define WAKE_ALL                        (WAKE_PHY | WAKE_UCAST | \
  92                                         WAKE_MCAST | WAKE_BCAST | \
  93                                         WAKE_ARP | WAKE_MAGIC)
  94
  95#define LAN78XX_NAPI_WEIGHT             64
  96
  97#define TX_URB_NUM                      10
  98#define TX_SS_URB_NUM                   TX_URB_NUM
  99#define TX_HS_URB_NUM                   TX_URB_NUM
 100#define TX_FS_URB_NUM                   TX_URB_NUM
 101
 102/* A single URB buffer must be large enough to hold a complete jumbo packet
 103 */
 104#define TX_SS_URB_SIZE                  (32 * 1024)
 105#define TX_HS_URB_SIZE                  (16 * 1024)
 106#define TX_FS_URB_SIZE                  (10 * 1024)
 107
 108#define RX_SS_URB_NUM                   30
 109#define RX_HS_URB_NUM                   10
 110#define RX_FS_URB_NUM                   10
 111#define RX_SS_URB_SIZE                  TX_SS_URB_SIZE
 112#define RX_HS_URB_SIZE                  TX_HS_URB_SIZE
 113#define RX_FS_URB_SIZE                  TX_FS_URB_SIZE
 114
 115#define SS_BURST_CAP_SIZE               RX_SS_URB_SIZE
 116#define SS_BULK_IN_DELAY                0x2000
 117#define HS_BURST_CAP_SIZE               RX_HS_URB_SIZE
 118#define HS_BULK_IN_DELAY                0x2000
 119#define FS_BURST_CAP_SIZE               RX_FS_URB_SIZE
 120#define FS_BULK_IN_DELAY                0x2000
 121
 122#define TX_CMD_LEN                      8
 123#define TX_SKB_MIN_LEN                  (TX_CMD_LEN + ETH_HLEN)
 124#define LAN78XX_TSO_SIZE(dev)           ((dev)->tx_urb_size - TX_SKB_MIN_LEN)
 125
 126#define RX_CMD_LEN                      10
 127#define RX_SKB_MIN_LEN                  (RX_CMD_LEN + ETH_HLEN)
 128#define RX_MAX_FRAME_LEN(mtu)           ((mtu) + ETH_HLEN + VLAN_HLEN)
 129
 130/* USB related defines */
 131#define BULK_IN_PIPE                    1
 132#define BULK_OUT_PIPE                   2
 133
 134/* default autosuspend delay (mSec)*/
 135#define DEFAULT_AUTOSUSPEND_DELAY       (10 * 1000)
 136
 137/* statistic update interval (mSec) */
 138#define STAT_UPDATE_TIMER               (1 * 1000)
 139
 140/* time to wait for MAC or FCT to stop (jiffies) */
 141#define HW_DISABLE_TIMEOUT              (HZ / 10)
 142
 143/* time to wait between polling MAC or FCT state (ms) */
 144#define HW_DISABLE_DELAY_MS             1
 145
 146/* defines interrupts from interrupt EP */
 147#define MAX_INT_EP                      (32)
 148#define INT_EP_INTEP                    (31)
 149#define INT_EP_OTP_WR_DONE              (28)
 150#define INT_EP_EEE_TX_LPI_START         (26)
 151#define INT_EP_EEE_TX_LPI_STOP          (25)
 152#define INT_EP_EEE_RX_LPI               (24)
 153#define INT_EP_MAC_RESET_TIMEOUT        (23)
 154#define INT_EP_RDFO                     (22)
 155#define INT_EP_TXE                      (21)
 156#define INT_EP_USB_STATUS               (20)
 157#define INT_EP_TX_DIS                   (19)
 158#define INT_EP_RX_DIS                   (18)
 159#define INT_EP_PHY                      (17)
 160#define INT_EP_DP                       (16)
 161#define INT_EP_MAC_ERR                  (15)
 162#define INT_EP_TDFU                     (14)
 163#define INT_EP_TDFO                     (13)
 164#define INT_EP_UTX                      (12)
 165#define INT_EP_GPIO_11                  (11)
 166#define INT_EP_GPIO_10                  (10)
 167#define INT_EP_GPIO_9                   (9)
 168#define INT_EP_GPIO_8                   (8)
 169#define INT_EP_GPIO_7                   (7)
 170#define INT_EP_GPIO_6                   (6)
 171#define INT_EP_GPIO_5                   (5)
 172#define INT_EP_GPIO_4                   (4)
 173#define INT_EP_GPIO_3                   (3)
 174#define INT_EP_GPIO_2                   (2)
 175#define INT_EP_GPIO_1                   (1)
 176#define INT_EP_GPIO_0                   (0)
 177
 178static const char lan78xx_gstrings[][ETH_GSTRING_LEN] = {
 179        "RX FCS Errors",
 180        "RX Alignment Errors",
 181        "Rx Fragment Errors",
 182        "RX Jabber Errors",
 183        "RX Undersize Frame Errors",
 184        "RX Oversize Frame Errors",
 185        "RX Dropped Frames",
 186        "RX Unicast Byte Count",
 187        "RX Broadcast Byte Count",
 188        "RX Multicast Byte Count",
 189        "RX Unicast Frames",
 190        "RX Broadcast Frames",
 191        "RX Multicast Frames",
 192        "RX Pause Frames",
 193        "RX 64 Byte Frames",
 194        "RX 65 - 127 Byte Frames",
 195        "RX 128 - 255 Byte Frames",
 196        "RX 256 - 511 Bytes Frames",
 197        "RX 512 - 1023 Byte Frames",
 198        "RX 1024 - 1518 Byte Frames",
 199        "RX Greater 1518 Byte Frames",
 200        "EEE RX LPI Transitions",
 201        "EEE RX LPI Time",
 202        "TX FCS Errors",
 203        "TX Excess Deferral Errors",
 204        "TX Carrier Errors",
 205        "TX Bad Byte Count",
 206        "TX Single Collisions",
 207        "TX Multiple Collisions",
 208        "TX Excessive Collision",
 209        "TX Late Collisions",
 210        "TX Unicast Byte Count",
 211        "TX Broadcast Byte Count",
 212        "TX Multicast Byte Count",
 213        "TX Unicast Frames",
 214        "TX Broadcast Frames",
 215        "TX Multicast Frames",
 216        "TX Pause Frames",
 217        "TX 64 Byte Frames",
 218        "TX 65 - 127 Byte Frames",
 219        "TX 128 - 255 Byte Frames",
 220        "TX 256 - 511 Bytes Frames",
 221        "TX 512 - 1023 Byte Frames",
 222        "TX 1024 - 1518 Byte Frames",
 223        "TX Greater 1518 Byte Frames",
 224        "EEE TX LPI Transitions",
 225        "EEE TX LPI Time",
 226};
 227
 228struct lan78xx_statstage {
 229        u32 rx_fcs_errors;
 230        u32 rx_alignment_errors;
 231        u32 rx_fragment_errors;
 232        u32 rx_jabber_errors;
 233        u32 rx_undersize_frame_errors;
 234        u32 rx_oversize_frame_errors;
 235        u32 rx_dropped_frames;
 236        u32 rx_unicast_byte_count;
 237        u32 rx_broadcast_byte_count;
 238        u32 rx_multicast_byte_count;
 239        u32 rx_unicast_frames;
 240        u32 rx_broadcast_frames;
 241        u32 rx_multicast_frames;
 242        u32 rx_pause_frames;
 243        u32 rx_64_byte_frames;
 244        u32 rx_65_127_byte_frames;
 245        u32 rx_128_255_byte_frames;
 246        u32 rx_256_511_bytes_frames;
 247        u32 rx_512_1023_byte_frames;
 248        u32 rx_1024_1518_byte_frames;
 249        u32 rx_greater_1518_byte_frames;
 250        u32 eee_rx_lpi_transitions;
 251        u32 eee_rx_lpi_time;
 252        u32 tx_fcs_errors;
 253        u32 tx_excess_deferral_errors;
 254        u32 tx_carrier_errors;
 255        u32 tx_bad_byte_count;
 256        u32 tx_single_collisions;
 257        u32 tx_multiple_collisions;
 258        u32 tx_excessive_collision;
 259        u32 tx_late_collisions;
 260        u32 tx_unicast_byte_count;
 261        u32 tx_broadcast_byte_count;
 262        u32 tx_multicast_byte_count;
 263        u32 tx_unicast_frames;
 264        u32 tx_broadcast_frames;
 265        u32 tx_multicast_frames;
 266        u32 tx_pause_frames;
 267        u32 tx_64_byte_frames;
 268        u32 tx_65_127_byte_frames;
 269        u32 tx_128_255_byte_frames;
 270        u32 tx_256_511_bytes_frames;
 271        u32 tx_512_1023_byte_frames;
 272        u32 tx_1024_1518_byte_frames;
 273        u32 tx_greater_1518_byte_frames;
 274        u32 eee_tx_lpi_transitions;
 275        u32 eee_tx_lpi_time;
 276};
 277
 278struct lan78xx_statstage64 {
 279        u64 rx_fcs_errors;
 280        u64 rx_alignment_errors;
 281        u64 rx_fragment_errors;
 282        u64 rx_jabber_errors;
 283        u64 rx_undersize_frame_errors;
 284        u64 rx_oversize_frame_errors;
 285        u64 rx_dropped_frames;
 286        u64 rx_unicast_byte_count;
 287        u64 rx_broadcast_byte_count;
 288        u64 rx_multicast_byte_count;
 289        u64 rx_unicast_frames;
 290        u64 rx_broadcast_frames;
 291        u64 rx_multicast_frames;
 292        u64 rx_pause_frames;
 293        u64 rx_64_byte_frames;
 294        u64 rx_65_127_byte_frames;
 295        u64 rx_128_255_byte_frames;
 296        u64 rx_256_511_bytes_frames;
 297        u64 rx_512_1023_byte_frames;
 298        u64 rx_1024_1518_byte_frames;
 299        u64 rx_greater_1518_byte_frames;
 300        u64 eee_rx_lpi_transitions;
 301        u64 eee_rx_lpi_time;
 302        u64 tx_fcs_errors;
 303        u64 tx_excess_deferral_errors;
 304        u64 tx_carrier_errors;
 305        u64 tx_bad_byte_count;
 306        u64 tx_single_collisions;
 307        u64 tx_multiple_collisions;
 308        u64 tx_excessive_collision;
 309        u64 tx_late_collisions;
 310        u64 tx_unicast_byte_count;
 311        u64 tx_broadcast_byte_count;
 312        u64 tx_multicast_byte_count;
 313        u64 tx_unicast_frames;
 314        u64 tx_broadcast_frames;
 315        u64 tx_multicast_frames;
 316        u64 tx_pause_frames;
 317        u64 tx_64_byte_frames;
 318        u64 tx_65_127_byte_frames;
 319        u64 tx_128_255_byte_frames;
 320        u64 tx_256_511_bytes_frames;
 321        u64 tx_512_1023_byte_frames;
 322        u64 tx_1024_1518_byte_frames;
 323        u64 tx_greater_1518_byte_frames;
 324        u64 eee_tx_lpi_transitions;
 325        u64 eee_tx_lpi_time;
 326};
 327
 328static u32 lan78xx_regs[] = {
 329        ID_REV,
 330        INT_STS,
 331        HW_CFG,
 332        PMT_CTL,
 333        E2P_CMD,
 334        E2P_DATA,
 335        USB_STATUS,
 336        VLAN_TYPE,
 337        MAC_CR,
 338        MAC_RX,
 339        MAC_TX,
 340        FLOW,
 341        ERR_STS,
 342        MII_ACC,
 343        MII_DATA,
 344        EEE_TX_LPI_REQ_DLY,
 345        EEE_TW_TX_SYS,
 346        EEE_TX_LPI_REM_DLY,
 347        WUCSR
 348};
 349
 350#define PHY_REG_SIZE (32 * sizeof(u32))
 351
 352struct lan78xx_net;
 353
 354struct lan78xx_priv {
 355        struct lan78xx_net *dev;
 356        u32 rfe_ctl;
 357        u32 mchash_table[DP_SEL_VHF_HASH_LEN]; /* multicast hash table */
 358        u32 pfilter_table[NUM_OF_MAF][2]; /* perfect filter table */
 359        u32 vlan_table[DP_SEL_VHF_VLAN_LEN];
 360        struct mutex dataport_mutex; /* for dataport access */
 361        spinlock_t rfe_ctl_lock; /* for rfe register access */
 362        struct work_struct set_multicast;
 363        struct work_struct set_vlan;
 364        u32 wol;
 365};
 366
 367enum skb_state {
 368        illegal = 0,
 369        tx_start,
 370        tx_done,
 371        rx_start,
 372        rx_done,
 373        rx_cleanup,
 374        unlink_start
 375};
 376
 377struct skb_data {               /* skb->cb is one of these */
 378        struct urb *urb;
 379        struct lan78xx_net *dev;
 380        enum skb_state state;
 381        size_t length;
 382        int num_of_packet;
 383};
 384
 385struct usb_context {
 386        struct usb_ctrlrequest req;
 387        struct lan78xx_net *dev;
 388};
 389
 390#define EVENT_TX_HALT                   0
 391#define EVENT_RX_HALT                   1
 392#define EVENT_RX_MEMORY                 2
 393#define EVENT_STS_SPLIT                 3
 394#define EVENT_LINK_RESET                4
 395#define EVENT_RX_PAUSED                 5
 396#define EVENT_DEV_WAKING                6
 397#define EVENT_DEV_ASLEEP                7
 398#define EVENT_DEV_OPEN                  8
 399#define EVENT_STAT_UPDATE               9
 400#define EVENT_DEV_DISCONNECT            10
 401
 402struct statstage {
 403        struct mutex                    access_lock;    /* for stats access */
 404        struct lan78xx_statstage        saved;
 405        struct lan78xx_statstage        rollover_count;
 406        struct lan78xx_statstage        rollover_max;
 407        struct lan78xx_statstage64      curr_stat;
 408};
 409
 410struct irq_domain_data {
 411        struct irq_domain       *irqdomain;
 412        unsigned int            phyirq;
 413        struct irq_chip         *irqchip;
 414        irq_flow_handler_t      irq_handler;
 415        u32                     irqenable;
 416        struct mutex            irq_lock;               /* for irq bus access */
 417};
 418
 419struct lan78xx_net {
 420        struct net_device       *net;
 421        struct usb_device       *udev;
 422        struct usb_interface    *intf;
 423        void                    *driver_priv;
 424
 425        unsigned int            tx_pend_data_len;
 426        size_t                  n_tx_urbs;
 427        size_t                  n_rx_urbs;
 428        size_t                  tx_urb_size;
 429        size_t                  rx_urb_size;
 430
 431        struct sk_buff_head     rxq_free;
 432        struct sk_buff_head     rxq;
 433        struct sk_buff_head     rxq_done;
 434        struct sk_buff_head     rxq_overflow;
 435        struct sk_buff_head     txq_free;
 436        struct sk_buff_head     txq;
 437        struct sk_buff_head     txq_pend;
 438
 439        struct napi_struct      napi;
 440
 441        struct delayed_work     wq;
 442
 443        int                     msg_enable;
 444
 445        struct urb              *urb_intr;
 446        struct usb_anchor       deferred;
 447
 448        struct mutex            dev_mutex; /* serialise open/stop wrt suspend/resume */
 449        struct mutex            phy_mutex; /* for phy access */
 450        unsigned int            pipe_in, pipe_out, pipe_intr;
 451
 452        unsigned int            bulk_in_delay;
 453        unsigned int            burst_cap;
 454
 455        unsigned long           flags;
 456
 457        wait_queue_head_t       *wait;
 458        unsigned char           suspend_count;
 459
 460        unsigned int            maxpacket;
 461        struct timer_list       stat_monitor;
 462
 463        unsigned long           data[5];
 464
 465        int                     link_on;
 466        u8                      mdix_ctrl;
 467
 468        u32                     chipid;
 469        u32                     chiprev;
 470        struct mii_bus          *mdiobus;
 471        phy_interface_t         interface;
 472
 473        int                     fc_autoneg;
 474        u8                      fc_request_control;
 475
 476        int                     delta;
 477        struct statstage        stats;
 478
 479        struct irq_domain_data  domain_data;
 480};
 481
 482/* define external phy id */
 483#define PHY_LAN8835                     (0x0007C130)
 484#define PHY_KSZ9031RNX                  (0x00221620)
 485
 486/* use ethtool to change the level for any given device */
 487static int msg_level = -1;
 488module_param(msg_level, int, 0);
 489MODULE_PARM_DESC(msg_level, "Override default message level");
 490
 491static struct sk_buff *lan78xx_get_buf(struct sk_buff_head *buf_pool)
 492{
 493        if (skb_queue_empty(buf_pool))
 494                return NULL;
 495
 496        return skb_dequeue(buf_pool);
 497}
 498
 499static void lan78xx_release_buf(struct sk_buff_head *buf_pool,
 500                                struct sk_buff *buf)
 501{
 502        buf->data = buf->head;
 503        skb_reset_tail_pointer(buf);
 504
 505        buf->len = 0;
 506        buf->data_len = 0;
 507
 508        skb_queue_tail(buf_pool, buf);
 509}
 510
 511static void lan78xx_free_buf_pool(struct sk_buff_head *buf_pool)
 512{
 513        struct skb_data *entry;
 514        struct sk_buff *buf;
 515
 516        while (!skb_queue_empty(buf_pool)) {
 517                buf = skb_dequeue(buf_pool);
 518                if (buf) {
 519                        entry = (struct skb_data *)buf->cb;
 520                        usb_free_urb(entry->urb);
 521                        dev_kfree_skb_any(buf);
 522                }
 523        }
 524}
 525
 526static int lan78xx_alloc_buf_pool(struct sk_buff_head *buf_pool,
 527                                  size_t n_urbs, size_t urb_size,
 528                                  struct lan78xx_net *dev)
 529{
 530        struct skb_data *entry;
 531        struct sk_buff *buf;
 532        struct urb *urb;
 533        int i;
 534
 535        skb_queue_head_init(buf_pool);
 536
 537        for (i = 0; i < n_urbs; i++) {
 538                buf = alloc_skb(urb_size, GFP_ATOMIC);
 539                if (!buf)
 540                        goto error;
 541
 542                if (skb_linearize(buf) != 0) {
 543                        dev_kfree_skb_any(buf);
 544                        goto error;
 545                }
 546
 547                urb = usb_alloc_urb(0, GFP_ATOMIC);
 548                if (!urb) {
 549                        dev_kfree_skb_any(buf);
 550                        goto error;
 551                }
 552
 553                entry = (struct skb_data *)buf->cb;
 554                entry->urb = urb;
 555                entry->dev = dev;
 556                entry->length = 0;
 557                entry->num_of_packet = 0;
 558
 559                skb_queue_tail(buf_pool, buf);
 560        }
 561
 562        return 0;
 563
 564error:
 565        lan78xx_free_buf_pool(buf_pool);
 566
 567        return -ENOMEM;
 568}
 569
 570static struct sk_buff *lan78xx_get_rx_buf(struct lan78xx_net *dev)
 571{
 572        return lan78xx_get_buf(&dev->rxq_free);
 573}
 574
 575static void lan78xx_release_rx_buf(struct lan78xx_net *dev,
 576                                   struct sk_buff *rx_buf)
 577{
 578        lan78xx_release_buf(&dev->rxq_free, rx_buf);
 579}
 580
 581static void lan78xx_free_rx_resources(struct lan78xx_net *dev)
 582{
 583        lan78xx_free_buf_pool(&dev->rxq_free);
 584}
 585
 586static int lan78xx_alloc_rx_resources(struct lan78xx_net *dev)
 587{
 588        return lan78xx_alloc_buf_pool(&dev->rxq_free,
 589                                      dev->n_rx_urbs, dev->rx_urb_size, dev);
 590}
 591
 592static struct sk_buff *lan78xx_get_tx_buf(struct lan78xx_net *dev)
 593{
 594        return lan78xx_get_buf(&dev->txq_free);
 595}
 596
 597static void lan78xx_release_tx_buf(struct lan78xx_net *dev,
 598                                   struct sk_buff *tx_buf)
 599{
 600        lan78xx_release_buf(&dev->txq_free, tx_buf);
 601}
 602
 603static void lan78xx_free_tx_resources(struct lan78xx_net *dev)
 604{
 605        lan78xx_free_buf_pool(&dev->txq_free);
 606}
 607
 608static int lan78xx_alloc_tx_resources(struct lan78xx_net *dev)
 609{
 610        return lan78xx_alloc_buf_pool(&dev->txq_free,
 611                                      dev->n_tx_urbs, dev->tx_urb_size, dev);
 612}
 613
 614static int lan78xx_read_reg(struct lan78xx_net *dev, u32 index, u32 *data)
 615{
 616        u32 *buf;
 617        int ret;
 618
 619        if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags))
 620                return -ENODEV;
 621
 622        buf = kmalloc(sizeof(u32), GFP_KERNEL);
 623        if (!buf)
 624                return -ENOMEM;
 625
 626        ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0),
 627                              USB_VENDOR_REQUEST_READ_REGISTER,
 628                              USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
 629                              0, index, buf, 4, USB_CTRL_GET_TIMEOUT);
 630        if (likely(ret >= 0)) {
 631                le32_to_cpus(buf);
 632                *data = *buf;
 633        } else if (net_ratelimit()) {
 634                netdev_warn(dev->net,
 635                            "Failed to read register index 0x%08x. ret = %d",
 636                            index, ret);
 637        }
 638
 639        kfree(buf);
 640
 641        return ret;
 642}
 643
 644static int lan78xx_write_reg(struct lan78xx_net *dev, u32 index, u32 data)
 645{
 646        u32 *buf;
 647        int ret;
 648
 649        if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags))
 650                return -ENODEV;
 651
 652        buf = kmalloc(sizeof(u32), GFP_KERNEL);
 653        if (!buf)
 654                return -ENOMEM;
 655
 656        *buf = data;
 657        cpu_to_le32s(buf);
 658
 659        ret = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0),
 660                              USB_VENDOR_REQUEST_WRITE_REGISTER,
 661                              USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
 662                              0, index, buf, 4, USB_CTRL_SET_TIMEOUT);
 663        if (unlikely(ret < 0) &&
 664            net_ratelimit()) {
 665                netdev_warn(dev->net,
 666                            "Failed to write register index 0x%08x. ret = %d",
 667                            index, ret);
 668        }
 669
 670        kfree(buf);
 671
 672        return ret;
 673}
 674
 675static int lan78xx_update_reg(struct lan78xx_net *dev, u32 reg, u32 mask,
 676                              u32 data)
 677{
 678        int ret;
 679        u32 buf;
 680
 681        ret = lan78xx_read_reg(dev, reg, &buf);
 682        if (ret < 0)
 683                return ret;
 684
 685        buf &= ~mask;
 686        buf |= (mask & data);
 687
 688        ret = lan78xx_write_reg(dev, reg, buf);
 689        if (ret < 0)
 690                return ret;
 691
 692        return 0;
 693}
 694
 695static int lan78xx_read_stats(struct lan78xx_net *dev,
 696                              struct lan78xx_statstage *data)
 697{
 698        int ret = 0;
 699        int i;
 700        struct lan78xx_statstage *stats;
 701        u32 *src;
 702        u32 *dst;
 703
 704        stats = kmalloc(sizeof(*stats), GFP_KERNEL);
 705        if (!stats)
 706                return -ENOMEM;
 707
 708        ret = usb_control_msg(dev->udev,
 709                              usb_rcvctrlpipe(dev->udev, 0),
 710                              USB_VENDOR_REQUEST_GET_STATS,
 711                              USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
 712                              0,
 713                              0,
 714                              (void *)stats,
 715                              sizeof(*stats),
 716                              USB_CTRL_SET_TIMEOUT);
 717        if (likely(ret >= 0)) {
 718                src = (u32 *)stats;
 719                dst = (u32 *)data;
 720                for (i = 0; i < sizeof(*stats) / sizeof(u32); i++) {
 721                        le32_to_cpus(&src[i]);
 722                        dst[i] = src[i];
 723                }
 724        } else {
 725                netdev_warn(dev->net,
 726                            "Failed to read stat ret = %d", ret);
 727        }
 728
 729        kfree(stats);
 730
 731        return ret;
 732}
 733
 734#define check_counter_rollover(struct1, dev_stats, member)              \
 735        do {                                                            \
 736                if ((struct1)->member < (dev_stats).saved.member)       \
 737                        (dev_stats).rollover_count.member++;            \
 738        } while (0)
 739
 740static void lan78xx_check_stat_rollover(struct lan78xx_net *dev,
 741                                        struct lan78xx_statstage *stats)
 742{
 743        check_counter_rollover(stats, dev->stats, rx_fcs_errors);
 744        check_counter_rollover(stats, dev->stats, rx_alignment_errors);
 745        check_counter_rollover(stats, dev->stats, rx_fragment_errors);
 746        check_counter_rollover(stats, dev->stats, rx_jabber_errors);
 747        check_counter_rollover(stats, dev->stats, rx_undersize_frame_errors);
 748        check_counter_rollover(stats, dev->stats, rx_oversize_frame_errors);
 749        check_counter_rollover(stats, dev->stats, rx_dropped_frames);
 750        check_counter_rollover(stats, dev->stats, rx_unicast_byte_count);
 751        check_counter_rollover(stats, dev->stats, rx_broadcast_byte_count);
 752        check_counter_rollover(stats, dev->stats, rx_multicast_byte_count);
 753        check_counter_rollover(stats, dev->stats, rx_unicast_frames);
 754        check_counter_rollover(stats, dev->stats, rx_broadcast_frames);
 755        check_counter_rollover(stats, dev->stats, rx_multicast_frames);
 756        check_counter_rollover(stats, dev->stats, rx_pause_frames);
 757        check_counter_rollover(stats, dev->stats, rx_64_byte_frames);
 758        check_counter_rollover(stats, dev->stats, rx_65_127_byte_frames);
 759        check_counter_rollover(stats, dev->stats, rx_128_255_byte_frames);
 760        check_counter_rollover(stats, dev->stats, rx_256_511_bytes_frames);
 761        check_counter_rollover(stats, dev->stats, rx_512_1023_byte_frames);
 762        check_counter_rollover(stats, dev->stats, rx_1024_1518_byte_frames);
 763        check_counter_rollover(stats, dev->stats, rx_greater_1518_byte_frames);
 764        check_counter_rollover(stats, dev->stats, eee_rx_lpi_transitions);
 765        check_counter_rollover(stats, dev->stats, eee_rx_lpi_time);
 766        check_counter_rollover(stats, dev->stats, tx_fcs_errors);
 767        check_counter_rollover(stats, dev->stats, tx_excess_deferral_errors);
 768        check_counter_rollover(stats, dev->stats, tx_carrier_errors);
 769        check_counter_rollover(stats, dev->stats, tx_bad_byte_count);
 770        check_counter_rollover(stats, dev->stats, tx_single_collisions);
 771        check_counter_rollover(stats, dev->stats, tx_multiple_collisions);
 772        check_counter_rollover(stats, dev->stats, tx_excessive_collision);
 773        check_counter_rollover(stats, dev->stats, tx_late_collisions);
 774        check_counter_rollover(stats, dev->stats, tx_unicast_byte_count);
 775        check_counter_rollover(stats, dev->stats, tx_broadcast_byte_count);
 776        check_counter_rollover(stats, dev->stats, tx_multicast_byte_count);
 777        check_counter_rollover(stats, dev->stats, tx_unicast_frames);
 778        check_counter_rollover(stats, dev->stats, tx_broadcast_frames);
 779        check_counter_rollover(stats, dev->stats, tx_multicast_frames);
 780        check_counter_rollover(stats, dev->stats, tx_pause_frames);
 781        check_counter_rollover(stats, dev->stats, tx_64_byte_frames);
 782        check_counter_rollover(stats, dev->stats, tx_65_127_byte_frames);
 783        check_counter_rollover(stats, dev->stats, tx_128_255_byte_frames);
 784        check_counter_rollover(stats, dev->stats, tx_256_511_bytes_frames);
 785        check_counter_rollover(stats, dev->stats, tx_512_1023_byte_frames);
 786        check_counter_rollover(stats, dev->stats, tx_1024_1518_byte_frames);
 787        check_counter_rollover(stats, dev->stats, tx_greater_1518_byte_frames);
 788        check_counter_rollover(stats, dev->stats, eee_tx_lpi_transitions);
 789        check_counter_rollover(stats, dev->stats, eee_tx_lpi_time);
 790
 791        memcpy(&dev->stats.saved, stats, sizeof(struct lan78xx_statstage));
 792}
 793
 794static void lan78xx_update_stats(struct lan78xx_net *dev)
 795{
 796        u32 *p, *count, *max;
 797        u64 *data;
 798        int i;
 799        struct lan78xx_statstage lan78xx_stats;
 800
 801        if (usb_autopm_get_interface(dev->intf) < 0)
 802                return;
 803
 804        p = (u32 *)&lan78xx_stats;
 805        count = (u32 *)&dev->stats.rollover_count;
 806        max = (u32 *)&dev->stats.rollover_max;
 807        data = (u64 *)&dev->stats.curr_stat;
 808
 809        mutex_lock(&dev->stats.access_lock);
 810
 811        if (lan78xx_read_stats(dev, &lan78xx_stats) > 0)
 812                lan78xx_check_stat_rollover(dev, &lan78xx_stats);
 813
 814        for (i = 0; i < (sizeof(lan78xx_stats) / (sizeof(u32))); i++)
 815                data[i] = (u64)p[i] + ((u64)count[i] * ((u64)max[i] + 1));
 816
 817        mutex_unlock(&dev->stats.access_lock);
 818
 819        usb_autopm_put_interface(dev->intf);
 820}
 821
 822/* Loop until the read is completed with timeout called with phy_mutex held */
 823static int lan78xx_phy_wait_not_busy(struct lan78xx_net *dev)
 824{
 825        unsigned long start_time = jiffies;
 826        u32 val;
 827        int ret;
 828
 829        do {
 830                ret = lan78xx_read_reg(dev, MII_ACC, &val);
 831                if (unlikely(ret < 0))
 832                        return -EIO;
 833
 834                if (!(val & MII_ACC_MII_BUSY_))
 835                        return 0;
 836        } while (!time_after(jiffies, start_time + HZ));
 837
 838        return -EIO;
 839}
 840
 841static inline u32 mii_access(int id, int index, int read)
 842{
 843        u32 ret;
 844
 845        ret = ((u32)id << MII_ACC_PHY_ADDR_SHIFT_) & MII_ACC_PHY_ADDR_MASK_;
 846        ret |= ((u32)index << MII_ACC_MIIRINDA_SHIFT_) & MII_ACC_MIIRINDA_MASK_;
 847        if (read)
 848                ret |= MII_ACC_MII_READ_;
 849        else
 850                ret |= MII_ACC_MII_WRITE_;
 851        ret |= MII_ACC_MII_BUSY_;
 852
 853        return ret;
 854}
 855
 856static int lan78xx_wait_eeprom(struct lan78xx_net *dev)
 857{
 858        unsigned long start_time = jiffies;
 859        u32 val;
 860        int ret;
 861
 862        do {
 863                ret = lan78xx_read_reg(dev, E2P_CMD, &val);
 864                if (unlikely(ret < 0))
 865                        return -EIO;
 866
 867                if (!(val & E2P_CMD_EPC_BUSY_) ||
 868                    (val & E2P_CMD_EPC_TIMEOUT_))
 869                        break;
 870                usleep_range(40, 100);
 871        } while (!time_after(jiffies, start_time + HZ));
 872
 873        if (val & (E2P_CMD_EPC_TIMEOUT_ | E2P_CMD_EPC_BUSY_)) {
 874                netdev_warn(dev->net, "EEPROM read operation timeout");
 875                return -EIO;
 876        }
 877
 878        return 0;
 879}
 880
 881static int lan78xx_eeprom_confirm_not_busy(struct lan78xx_net *dev)
 882{
 883        unsigned long start_time = jiffies;
 884        u32 val;
 885        int ret;
 886
 887        do {
 888                ret = lan78xx_read_reg(dev, E2P_CMD, &val);
 889                if (unlikely(ret < 0))
 890                        return -EIO;
 891
 892                if (!(val & E2P_CMD_EPC_BUSY_))
 893                        return 0;
 894
 895                usleep_range(40, 100);
 896        } while (!time_after(jiffies, start_time + HZ));
 897
 898        netdev_warn(dev->net, "EEPROM is busy");
 899        return -EIO;
 900}
 901
 902static int lan78xx_read_raw_eeprom(struct lan78xx_net *dev, u32 offset,
 903                                   u32 length, u8 *data)
 904{
 905        u32 val;
 906        u32 saved;
 907        int i, ret;
 908        int retval;
 909
 910        /* depends on chip, some EEPROM pins are muxed with LED function.
 911         * disable & restore LED function to access EEPROM.
 912         */
 913        ret = lan78xx_read_reg(dev, HW_CFG, &val);
 914        saved = val;
 915        if (dev->chipid == ID_REV_CHIP_ID_7800_) {
 916                val &= ~(HW_CFG_LED1_EN_ | HW_CFG_LED0_EN_);
 917                ret = lan78xx_write_reg(dev, HW_CFG, val);
 918        }
 919
 920        retval = lan78xx_eeprom_confirm_not_busy(dev);
 921        if (retval)
 922                return retval;
 923
 924        for (i = 0; i < length; i++) {
 925                val = E2P_CMD_EPC_BUSY_ | E2P_CMD_EPC_CMD_READ_;
 926                val |= (offset & E2P_CMD_EPC_ADDR_MASK_);
 927                ret = lan78xx_write_reg(dev, E2P_CMD, val);
 928                if (unlikely(ret < 0)) {
 929                        retval = -EIO;
 930                        goto exit;
 931                }
 932
 933                retval = lan78xx_wait_eeprom(dev);
 934                if (retval < 0)
 935                        goto exit;
 936
 937                ret = lan78xx_read_reg(dev, E2P_DATA, &val);
 938                if (unlikely(ret < 0)) {
 939                        retval = -EIO;
 940                        goto exit;
 941                }
 942
 943                data[i] = val & 0xFF;
 944                offset++;
 945        }
 946
 947        retval = 0;
 948exit:
 949        if (dev->chipid == ID_REV_CHIP_ID_7800_)
 950                ret = lan78xx_write_reg(dev, HW_CFG, saved);
 951
 952        return retval;
 953}
 954
 955static int lan78xx_read_eeprom(struct lan78xx_net *dev, u32 offset,
 956                               u32 length, u8 *data)
 957{
 958        u8 sig;
 959        int ret;
 960
 961        ret = lan78xx_read_raw_eeprom(dev, 0, 1, &sig);
 962        if ((ret == 0) && (sig == EEPROM_INDICATOR))
 963                ret = lan78xx_read_raw_eeprom(dev, offset, length, data);
 964        else
 965                ret = -EINVAL;
 966
 967        return ret;
 968}
 969
 970static int lan78xx_write_raw_eeprom(struct lan78xx_net *dev, u32 offset,
 971                                    u32 length, u8 *data)
 972{
 973        u32 val;
 974        u32 saved;
 975        int i, ret;
 976        int retval;
 977
 978        /* depends on chip, some EEPROM pins are muxed with LED function.
 979         * disable & restore LED function to access EEPROM.
 980         */
 981        ret = lan78xx_read_reg(dev, HW_CFG, &val);
 982        saved = val;
 983        if (dev->chipid == ID_REV_CHIP_ID_7800_) {
 984                val &= ~(HW_CFG_LED1_EN_ | HW_CFG_LED0_EN_);
 985                ret = lan78xx_write_reg(dev, HW_CFG, val);
 986        }
 987
 988        retval = lan78xx_eeprom_confirm_not_busy(dev);
 989        if (retval)
 990                goto exit;
 991
 992        /* Issue write/erase enable command */
 993        val = E2P_CMD_EPC_BUSY_ | E2P_CMD_EPC_CMD_EWEN_;
 994        ret = lan78xx_write_reg(dev, E2P_CMD, val);
 995        if (unlikely(ret < 0)) {
 996                retval = -EIO;
 997                goto exit;
 998        }
 999
1000        retval = lan78xx_wait_eeprom(dev);
1001        if (retval < 0)
1002                goto exit;
1003
1004        for (i = 0; i < length; i++) {
1005                /* Fill data register */
1006                val = data[i];
1007                ret = lan78xx_write_reg(dev, E2P_DATA, val);
1008                if (ret < 0) {
1009                        retval = -EIO;
1010                        goto exit;
1011                }
1012
1013                /* Send "write" command */
1014                val = E2P_CMD_EPC_BUSY_ | E2P_CMD_EPC_CMD_WRITE_;
1015                val |= (offset & E2P_CMD_EPC_ADDR_MASK_);
1016                ret = lan78xx_write_reg(dev, E2P_CMD, val);
1017                if (ret < 0) {
1018                        retval = -EIO;
1019                        goto exit;
1020                }
1021
1022                retval = lan78xx_wait_eeprom(dev);
1023                if (retval < 0)
1024                        goto exit;
1025
1026                offset++;
1027        }
1028
1029        retval = 0;
1030exit:
1031        if (dev->chipid == ID_REV_CHIP_ID_7800_)
1032                ret = lan78xx_write_reg(dev, HW_CFG, saved);
1033
1034        return retval;
1035}
1036
1037static int lan78xx_read_raw_otp(struct lan78xx_net *dev, u32 offset,
1038                                u32 length, u8 *data)
1039{
1040        int i;
1041        u32 buf;
1042        unsigned long timeout;
1043
1044        lan78xx_read_reg(dev, OTP_PWR_DN, &buf);
1045
1046        if (buf & OTP_PWR_DN_PWRDN_N_) {
1047                /* clear it and wait to be cleared */
1048                lan78xx_write_reg(dev, OTP_PWR_DN, 0);
1049
1050                timeout = jiffies + HZ;
1051                do {
1052                        usleep_range(1, 10);
1053                        lan78xx_read_reg(dev, OTP_PWR_DN, &buf);
1054                        if (time_after(jiffies, timeout)) {
1055                                netdev_warn(dev->net,
1056                                            "timeout on OTP_PWR_DN");
1057                                return -EIO;
1058                        }
1059                } while (buf & OTP_PWR_DN_PWRDN_N_);
1060        }
1061
1062        for (i = 0; i < length; i++) {
1063                lan78xx_write_reg(dev, OTP_ADDR1,
1064                                  ((offset + i) >> 8) & OTP_ADDR1_15_11);
1065                lan78xx_write_reg(dev, OTP_ADDR2,
1066                                  ((offset + i) & OTP_ADDR2_10_3));
1067
1068                lan78xx_write_reg(dev, OTP_FUNC_CMD, OTP_FUNC_CMD_READ_);
1069                lan78xx_write_reg(dev, OTP_CMD_GO, OTP_CMD_GO_GO_);
1070
1071                timeout = jiffies + HZ;
1072                do {
1073                        udelay(1);
1074                        lan78xx_read_reg(dev, OTP_STATUS, &buf);
1075                        if (time_after(jiffies, timeout)) {
1076                                netdev_warn(dev->net,
1077                                            "timeout on OTP_STATUS");
1078                                return -EIO;
1079                        }
1080                } while (buf & OTP_STATUS_BUSY_);
1081
1082                lan78xx_read_reg(dev, OTP_RD_DATA, &buf);
1083
1084                data[i] = (u8)(buf & 0xFF);
1085        }
1086
1087        return 0;
1088}
1089
1090static int lan78xx_write_raw_otp(struct lan78xx_net *dev, u32 offset,
1091                                 u32 length, u8 *data)
1092{
1093        int i;
1094        u32 buf;
1095        unsigned long timeout;
1096
1097        lan78xx_read_reg(dev, OTP_PWR_DN, &buf);
1098
1099        if (buf & OTP_PWR_DN_PWRDN_N_) {
1100                /* clear it and wait to be cleared */
1101                lan78xx_write_reg(dev, OTP_PWR_DN, 0);
1102
1103                timeout = jiffies + HZ;
1104                do {
1105                        udelay(1);
1106                        lan78xx_read_reg(dev, OTP_PWR_DN, &buf);
1107                        if (time_after(jiffies, timeout)) {
1108                                netdev_warn(dev->net,
1109                                            "timeout on OTP_PWR_DN completion");
1110                                return -EIO;
1111                        }
1112                } while (buf & OTP_PWR_DN_PWRDN_N_);
1113        }
1114
1115        /* set to BYTE program mode */
1116        lan78xx_write_reg(dev, OTP_PRGM_MODE, OTP_PRGM_MODE_BYTE_);
1117
1118        for (i = 0; i < length; i++) {
1119                lan78xx_write_reg(dev, OTP_ADDR1,
1120                                  ((offset + i) >> 8) & OTP_ADDR1_15_11);
1121                lan78xx_write_reg(dev, OTP_ADDR2,
1122                                  ((offset + i) & OTP_ADDR2_10_3));
1123                lan78xx_write_reg(dev, OTP_PRGM_DATA, data[i]);
1124                lan78xx_write_reg(dev, OTP_TST_CMD, OTP_TST_CMD_PRGVRFY_);
1125                lan78xx_write_reg(dev, OTP_CMD_GO, OTP_CMD_GO_GO_);
1126
1127                timeout = jiffies + HZ;
1128                do {
1129                        udelay(1);
1130                        lan78xx_read_reg(dev, OTP_STATUS, &buf);
1131                        if (time_after(jiffies, timeout)) {
1132                                netdev_warn(dev->net,
1133                                            "Timeout on OTP_STATUS completion");
1134                                return -EIO;
1135                        }
1136                } while (buf & OTP_STATUS_BUSY_);
1137        }
1138
1139        return 0;
1140}
1141
1142static int lan78xx_read_otp(struct lan78xx_net *dev, u32 offset,
1143                            u32 length, u8 *data)
1144{
1145        u8 sig;
1146        int ret;
1147
1148        ret = lan78xx_read_raw_otp(dev, 0, 1, &sig);
1149
1150        if (ret == 0) {
1151                if (sig == OTP_INDICATOR_2)
1152                        offset += 0x100;
1153                else if (sig != OTP_INDICATOR_1)
1154                        ret = -EINVAL;
1155                if (!ret)
1156                        ret = lan78xx_read_raw_otp(dev, offset, length, data);
1157        }
1158
1159        return ret;
1160}
1161
1162static int lan78xx_dataport_wait_not_busy(struct lan78xx_net *dev)
1163{
1164        int i, ret;
1165
1166        for (i = 0; i < 100; i++) {
1167                u32 dp_sel;
1168
1169                ret = lan78xx_read_reg(dev, DP_SEL, &dp_sel);
1170                if (unlikely(ret < 0))
1171                        return -EIO;
1172
1173                if (dp_sel & DP_SEL_DPRDY_)
1174                        return 0;
1175
1176                usleep_range(40, 100);
1177        }
1178
1179        netdev_warn(dev->net, "%s timed out", __func__);
1180
1181        return -EIO;
1182}
1183
1184static int lan78xx_dataport_write(struct lan78xx_net *dev, u32 ram_select,
1185                                  u32 addr, u32 length, u32 *buf)
1186{
1187        struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
1188        u32 dp_sel;
1189        int i, ret;
1190
1191        if (usb_autopm_get_interface(dev->intf) < 0)
1192                return 0;
1193
1194        mutex_lock(&pdata->dataport_mutex);
1195
1196        ret = lan78xx_dataport_wait_not_busy(dev);
1197        if (ret < 0)
1198                goto done;
1199
1200        ret = lan78xx_read_reg(dev, DP_SEL, &dp_sel);
1201
1202        dp_sel &= ~DP_SEL_RSEL_MASK_;
1203        dp_sel |= ram_select;
1204        ret = lan78xx_write_reg(dev, DP_SEL, dp_sel);
1205
1206        for (i = 0; i < length; i++) {
1207                ret = lan78xx_write_reg(dev, DP_ADDR, addr + i);
1208
1209                ret = lan78xx_write_reg(dev, DP_DATA, buf[i]);
1210
1211                ret = lan78xx_write_reg(dev, DP_CMD, DP_CMD_WRITE_);
1212
1213                ret = lan78xx_dataport_wait_not_busy(dev);
1214                if (ret < 0)
1215                        goto done;
1216        }
1217
1218done:
1219        mutex_unlock(&pdata->dataport_mutex);
1220        usb_autopm_put_interface(dev->intf);
1221
1222        return ret;
1223}
1224
1225static void lan78xx_set_addr_filter(struct lan78xx_priv *pdata,
1226                                    int index, u8 addr[ETH_ALEN])
1227{
1228        u32 temp;
1229
1230        if ((pdata) && (index > 0) && (index < NUM_OF_MAF)) {
1231                temp = addr[3];
1232                temp = addr[2] | (temp << 8);
1233                temp = addr[1] | (temp << 8);
1234                temp = addr[0] | (temp << 8);
1235                pdata->pfilter_table[index][1] = temp;
1236                temp = addr[5];
1237                temp = addr[4] | (temp << 8);
1238                temp |= MAF_HI_VALID_ | MAF_HI_TYPE_DST_;
1239                pdata->pfilter_table[index][0] = temp;
1240        }
1241}
1242
1243/* returns hash bit number for given MAC address */
1244static inline u32 lan78xx_hash(char addr[ETH_ALEN])
1245{
1246        return (ether_crc(ETH_ALEN, addr) >> 23) & 0x1ff;
1247}
1248
1249static void lan78xx_deferred_multicast_write(struct work_struct *param)
1250{
1251        struct lan78xx_priv *pdata =
1252                        container_of(param, struct lan78xx_priv, set_multicast);
1253        struct lan78xx_net *dev = pdata->dev;
1254        int i;
1255
1256        netif_dbg(dev, drv, dev->net, "deferred multicast write 0x%08x\n",
1257                  pdata->rfe_ctl);
1258
1259        lan78xx_dataport_write(dev, DP_SEL_RSEL_VLAN_DA_, DP_SEL_VHF_VLAN_LEN,
1260                               DP_SEL_VHF_HASH_LEN, pdata->mchash_table);
1261
1262        for (i = 1; i < NUM_OF_MAF; i++) {
1263                lan78xx_write_reg(dev, MAF_HI(i), 0);
1264                lan78xx_write_reg(dev, MAF_LO(i),
1265                                  pdata->pfilter_table[i][1]);
1266                lan78xx_write_reg(dev, MAF_HI(i),
1267                                  pdata->pfilter_table[i][0]);
1268        }
1269
1270        lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl);
1271}
1272
1273static void lan78xx_set_multicast(struct net_device *netdev)
1274{
1275        struct lan78xx_net *dev = netdev_priv(netdev);
1276        struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
1277        unsigned long flags;
1278        int i;
1279
1280        spin_lock_irqsave(&pdata->rfe_ctl_lock, flags);
1281
1282        pdata->rfe_ctl &= ~(RFE_CTL_UCAST_EN_ | RFE_CTL_MCAST_EN_ |
1283                            RFE_CTL_DA_PERFECT_ | RFE_CTL_MCAST_HASH_);
1284
1285        for (i = 0; i < DP_SEL_VHF_HASH_LEN; i++)
1286                pdata->mchash_table[i] = 0;
1287
1288        /* pfilter_table[0] has own HW address */
1289        for (i = 1; i < NUM_OF_MAF; i++) {
1290                pdata->pfilter_table[i][0] = 0;
1291                pdata->pfilter_table[i][1] = 0;
1292        }
1293
1294        pdata->rfe_ctl |= RFE_CTL_BCAST_EN_;
1295
1296        if (dev->net->flags & IFF_PROMISC) {
1297                netif_dbg(dev, drv, dev->net, "promiscuous mode enabled");
1298                pdata->rfe_ctl |= RFE_CTL_MCAST_EN_ | RFE_CTL_UCAST_EN_;
1299        } else {
1300                if (dev->net->flags & IFF_ALLMULTI) {
1301                        netif_dbg(dev, drv, dev->net,
1302                                  "receive all multicast enabled");
1303                        pdata->rfe_ctl |= RFE_CTL_MCAST_EN_;
1304                }
1305        }
1306
1307        if (netdev_mc_count(dev->net)) {
1308                struct netdev_hw_addr *ha;
1309                int i;
1310
1311                netif_dbg(dev, drv, dev->net, "receive multicast hash filter");
1312
1313                pdata->rfe_ctl |= RFE_CTL_DA_PERFECT_;
1314
1315                i = 1;
1316                netdev_for_each_mc_addr(ha, netdev) {
1317                        /* set first 32 into Perfect Filter */
1318                        if (i < 33) {
1319                                lan78xx_set_addr_filter(pdata, i, ha->addr);
1320                        } else {
1321                                u32 bitnum = lan78xx_hash(ha->addr);
1322
1323                                pdata->mchash_table[bitnum / 32] |=
1324                                                        (1 << (bitnum % 32));
1325                                pdata->rfe_ctl |= RFE_CTL_MCAST_HASH_;
1326                        }
1327                        i++;
1328                }
1329        }
1330
1331        spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags);
1332
1333        /* defer register writes to a sleepable context */
1334        schedule_work(&pdata->set_multicast);
1335}
1336
1337static int lan78xx_update_flowcontrol(struct lan78xx_net *dev, u8 duplex,
1338                                      u16 lcladv, u16 rmtadv)
1339{
1340        u32 flow = 0, fct_flow = 0;
1341        u8 cap;
1342
1343        if (dev->fc_autoneg)
1344                cap = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
1345        else
1346                cap = dev->fc_request_control;
1347
1348        if (cap & FLOW_CTRL_TX)
1349                flow |= (FLOW_CR_TX_FCEN_ | 0xFFFF);
1350
1351        if (cap & FLOW_CTRL_RX)
1352                flow |= FLOW_CR_RX_FCEN_;
1353
1354        if (dev->udev->speed == USB_SPEED_SUPER)
1355                fct_flow = FLOW_CTRL_THRESHOLD(FLOW_ON_SS, FLOW_OFF_SS);
1356        else if (dev->udev->speed == USB_SPEED_HIGH)
1357                fct_flow = FLOW_CTRL_THRESHOLD(FLOW_ON_HS, FLOW_OFF_HS);
1358
1359        netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s",
1360                  (cap & FLOW_CTRL_RX ? "enabled" : "disabled"),
1361                  (cap & FLOW_CTRL_TX ? "enabled" : "disabled"));
1362
1363        lan78xx_write_reg(dev, FCT_FLOW, fct_flow);
1364
1365        /* threshold value should be set before enabling flow */
1366        lan78xx_write_reg(dev, FLOW, flow);
1367
1368        return 0;
1369}
1370
1371static void lan78xx_rx_urb_submit_all(struct lan78xx_net *dev);
1372
1373static int lan78xx_mac_reset(struct lan78xx_net *dev)
1374{
1375        unsigned long start_time = jiffies;
1376        u32 val;
1377        int ret;
1378
1379        mutex_lock(&dev->phy_mutex);
1380
1381        /* Resetting the device while there is activity on the MDIO
1382         * bus can result in the MAC interface locking up and not
1383         * completing register access transactions.
1384         */
1385        ret = lan78xx_phy_wait_not_busy(dev);
1386        if (ret < 0)
1387                goto done;
1388
1389        ret = lan78xx_read_reg(dev, MAC_CR, &val);
1390        if (ret < 0)
1391                goto done;
1392
1393        val |= MAC_CR_RST_;
1394        ret = lan78xx_write_reg(dev, MAC_CR, val);
1395        if (ret < 0)
1396                goto done;
1397
1398        /* Wait for the reset to complete before allowing any further
1399         * MAC register accesses otherwise the MAC may lock up.
1400         */
1401        do {
1402                ret = lan78xx_read_reg(dev, MAC_CR, &val);
1403                if (ret < 0)
1404                        goto done;
1405
1406                if (!(val & MAC_CR_RST_)) {
1407                        ret = 0;
1408                        goto done;
1409                }
1410        } while (!time_after(jiffies, start_time + HZ));
1411
1412        ret = -ETIMEDOUT;
1413done:
1414        mutex_unlock(&dev->phy_mutex);
1415
1416        return ret;
1417}
1418
1419static int lan78xx_link_reset(struct lan78xx_net *dev)
1420{
1421        struct phy_device *phydev = dev->net->phydev;
1422        struct ethtool_link_ksettings ecmd;
1423        int ladv, radv, ret, link;
1424        u32 buf;
1425
1426        /* clear LAN78xx interrupt status */
1427        ret = lan78xx_write_reg(dev, INT_STS, INT_STS_PHY_INT_);
1428        if (unlikely(ret < 0))
1429                return ret;
1430
1431        mutex_lock(&phydev->lock);
1432        phy_read_status(phydev);
1433        link = phydev->link;
1434        mutex_unlock(&phydev->lock);
1435
1436        if (!link && dev->link_on) {
1437                dev->link_on = false;
1438
1439                /* reset MAC */
1440                ret = lan78xx_mac_reset(dev);
1441                if (ret < 0)
1442                        return ret;
1443
1444                del_timer(&dev->stat_monitor);
1445        } else if (link && !dev->link_on) {
1446                dev->link_on = true;
1447
1448                phy_ethtool_ksettings_get(phydev, &ecmd);
1449
1450                if (dev->udev->speed == USB_SPEED_SUPER) {
1451                        if (ecmd.base.speed == 1000) {
1452                                /* disable U2 */
1453                                ret = lan78xx_read_reg(dev, USB_CFG1, &buf);
1454                                if (ret < 0)
1455                                        return ret;
1456                                buf &= ~USB_CFG1_DEV_U2_INIT_EN_;
1457                                ret = lan78xx_write_reg(dev, USB_CFG1, buf);
1458                                if (ret < 0)
1459                                        return ret;
1460                                /* enable U1 */
1461                                ret = lan78xx_read_reg(dev, USB_CFG1, &buf);
1462                                if (ret < 0)
1463                                        return ret;
1464                                buf |= USB_CFG1_DEV_U1_INIT_EN_;
1465                                ret = lan78xx_write_reg(dev, USB_CFG1, buf);
1466                                if (ret < 0)
1467                                        return ret;
1468                        } else {
1469                                /* enable U1 & U2 */
1470                                ret = lan78xx_read_reg(dev, USB_CFG1, &buf);
1471                                if (ret < 0)
1472                                        return ret;
1473                                buf |= USB_CFG1_DEV_U2_INIT_EN_;
1474                                buf |= USB_CFG1_DEV_U1_INIT_EN_;
1475                                ret = lan78xx_write_reg(dev, USB_CFG1, buf);
1476                                if (ret < 0)
1477                                        return ret;
1478                        }
1479                }
1480
1481                ladv = phy_read(phydev, MII_ADVERTISE);
1482                if (ladv < 0)
1483                        return ladv;
1484
1485                radv = phy_read(phydev, MII_LPA);
1486                if (radv < 0)
1487                        return radv;
1488
1489                netif_dbg(dev, link, dev->net,
1490                          "speed: %u duplex: %d anadv: 0x%04x anlpa: 0x%04x",
1491                          ecmd.base.speed, ecmd.base.duplex, ladv, radv);
1492
1493                ret = lan78xx_update_flowcontrol(dev, ecmd.base.duplex, ladv,
1494                                                 radv);
1495                if (ret < 0)
1496                        return ret;
1497
1498                if (!timer_pending(&dev->stat_monitor)) {
1499                        dev->delta = 1;
1500                        mod_timer(&dev->stat_monitor,
1501                                  jiffies + STAT_UPDATE_TIMER);
1502                }
1503
1504                lan78xx_rx_urb_submit_all(dev);
1505
1506                napi_schedule(&dev->napi);
1507        }
1508
1509        return 0;
1510}
1511
1512/* some work can't be done in tasklets, so we use keventd
1513 *
1514 * NOTE:  annoying asymmetry:  if it's active, schedule_work() fails,
1515 * but tasklet_schedule() doesn't.      hope the failure is rare.
1516 */
1517static void lan78xx_defer_kevent(struct lan78xx_net *dev, int work)
1518{
1519        set_bit(work, &dev->flags);
1520        if (!schedule_delayed_work(&dev->wq, 0))
1521                netdev_err(dev->net, "kevent %d may have been dropped\n", work);
1522}
1523
1524static void lan78xx_status(struct lan78xx_net *dev, struct urb *urb)
1525{
1526        u32 intdata;
1527
1528        if (urb->actual_length != 4) {
1529                netdev_warn(dev->net,
1530                            "unexpected urb length %d", urb->actual_length);
1531                return;
1532        }
1533
1534        intdata = get_unaligned_le32(urb->transfer_buffer);
1535
1536        if (intdata & INT_ENP_PHY_INT) {
1537                netif_dbg(dev, link, dev->net, "PHY INTR: 0x%08x\n", intdata);
1538                lan78xx_defer_kevent(dev, EVENT_LINK_RESET);
1539
1540                if (dev->domain_data.phyirq > 0)
1541                        generic_handle_irq_safe(dev->domain_data.phyirq);
1542        } else {
1543                netdev_warn(dev->net,
1544                            "unexpected interrupt: 0x%08x\n", intdata);
1545        }
1546}
1547
1548static int lan78xx_ethtool_get_eeprom_len(struct net_device *netdev)
1549{
1550        return MAX_EEPROM_SIZE;
1551}
1552
1553static int lan78xx_ethtool_get_eeprom(struct net_device *netdev,
1554                                      struct ethtool_eeprom *ee, u8 *data)
1555{
1556        struct lan78xx_net *dev = netdev_priv(netdev);
1557        int ret;
1558
1559        ret = usb_autopm_get_interface(dev->intf);
1560        if (ret)
1561                return ret;
1562
1563        ee->magic = LAN78XX_EEPROM_MAGIC;
1564
1565        ret = lan78xx_read_raw_eeprom(dev, ee->offset, ee->len, data);
1566
1567        usb_autopm_put_interface(dev->intf);
1568
1569        return ret;
1570}
1571
1572static int lan78xx_ethtool_set_eeprom(struct net_device *netdev,
1573                                      struct ethtool_eeprom *ee, u8 *data)
1574{
1575        struct lan78xx_net *dev = netdev_priv(netdev);
1576        int ret;
1577
1578        ret = usb_autopm_get_interface(dev->intf);
1579        if (ret)
1580                return ret;
1581
1582        /* Invalid EEPROM_INDICATOR at offset zero will result in a failure
1583         * to load data from EEPROM
1584         */
1585        if (ee->magic == LAN78XX_EEPROM_MAGIC)
1586                ret = lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data);
1587        else if ((ee->magic == LAN78XX_OTP_MAGIC) &&
1588                 (ee->offset == 0) &&
1589                 (ee->len == 512) &&
1590                 (data[0] == OTP_INDICATOR_1))
1591                ret = lan78xx_write_raw_otp(dev, ee->offset, ee->len, data);
1592
1593        usb_autopm_put_interface(dev->intf);
1594
1595        return ret;
1596}
1597
1598static void lan78xx_get_strings(struct net_device *netdev, u32 stringset,
1599                                u8 *data)
1600{
1601        if (stringset == ETH_SS_STATS)
1602                memcpy(data, lan78xx_gstrings, sizeof(lan78xx_gstrings));
1603}
1604
1605static int lan78xx_get_sset_count(struct net_device *netdev, int sset)
1606{
1607        if (sset == ETH_SS_STATS)
1608                return ARRAY_SIZE(lan78xx_gstrings);
1609        else
1610                return -EOPNOTSUPP;
1611}
1612
1613static void lan78xx_get_stats(struct net_device *netdev,
1614                              struct ethtool_stats *stats, u64 *data)
1615{
1616        struct lan78xx_net *dev = netdev_priv(netdev);
1617
1618        lan78xx_update_stats(dev);
1619
1620        mutex_lock(&dev->stats.access_lock);
1621        memcpy(data, &dev->stats.curr_stat, sizeof(dev->stats.curr_stat));
1622        mutex_unlock(&dev->stats.access_lock);
1623}
1624
1625static void lan78xx_get_wol(struct net_device *netdev,
1626                            struct ethtool_wolinfo *wol)
1627{
1628        struct lan78xx_net *dev = netdev_priv(netdev);
1629        int ret;
1630        u32 buf;
1631        struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
1632
1633        if (usb_autopm_get_interface(dev->intf) < 0)
1634                return;
1635
1636        ret = lan78xx_read_reg(dev, USB_CFG0, &buf);
1637        if (unlikely(ret < 0)) {
1638                wol->supported = 0;
1639                wol->wolopts = 0;
1640        } else {
1641                if (buf & USB_CFG_RMT_WKP_) {
1642                        wol->supported = WAKE_ALL;
1643                        wol->wolopts = pdata->wol;
1644                } else {
1645                        wol->supported = 0;
1646                        wol->wolopts = 0;
1647                }
1648        }
1649
1650        usb_autopm_put_interface(dev->intf);
1651}
1652
1653static int lan78xx_set_wol(struct net_device *netdev,
1654                           struct ethtool_wolinfo *wol)
1655{
1656        struct lan78xx_net *dev = netdev_priv(netdev);
1657        struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
1658        int ret;
1659
1660        ret = usb_autopm_get_interface(dev->intf);
1661        if (ret < 0)
1662                return ret;
1663
1664        if (wol->wolopts & ~WAKE_ALL)
1665                return -EINVAL;
1666
1667        pdata->wol = wol->wolopts;
1668
1669        device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts);
1670
1671        phy_ethtool_set_wol(netdev->phydev, wol);
1672
1673        usb_autopm_put_interface(dev->intf);
1674
1675        return ret;
1676}
1677
1678static int lan78xx_get_eee(struct net_device *net, struct ethtool_eee *edata)
1679{
1680        struct lan78xx_net *dev = netdev_priv(net);
1681        struct phy_device *phydev = net->phydev;
1682        int ret;
1683        u32 buf;
1684
1685        ret = usb_autopm_get_interface(dev->intf);
1686        if (ret < 0)
1687                return ret;
1688
1689        ret = phy_ethtool_get_eee(phydev, edata);
1690        if (ret < 0)
1691                goto exit;
1692
1693        ret = lan78xx_read_reg(dev, MAC_CR, &buf);
1694        if (buf & MAC_CR_EEE_EN_) {
1695                edata->eee_enabled = true;
1696                edata->eee_active = !!(edata->advertised &
1697                                       edata->lp_advertised);
1698                edata->tx_lpi_enabled = true;
1699                /* EEE_TX_LPI_REQ_DLY & tx_lpi_timer are same uSec unit */
1700                ret = lan78xx_read_reg(dev, EEE_TX_LPI_REQ_DLY, &buf);
1701                edata->tx_lpi_timer = buf;
1702        } else {
1703                edata->eee_enabled = false;
1704                edata->eee_active = false;
1705                edata->tx_lpi_enabled = false;
1706                edata->tx_lpi_timer = 0;
1707        }
1708
1709        ret = 0;
1710exit:
1711        usb_autopm_put_interface(dev->intf);
1712
1713        return ret;
1714}
1715
1716static int lan78xx_set_eee(struct net_device *net, struct ethtool_eee *edata)
1717{
1718        struct lan78xx_net *dev = netdev_priv(net);
1719        int ret;
1720        u32 buf;
1721
1722        ret = usb_autopm_get_interface(dev->intf);
1723        if (ret < 0)
1724                return ret;
1725
1726        if (edata->eee_enabled) {
1727                ret = lan78xx_read_reg(dev, MAC_CR, &buf);
1728                buf |= MAC_CR_EEE_EN_;
1729                ret = lan78xx_write_reg(dev, MAC_CR, buf);
1730
1731                phy_ethtool_set_eee(net->phydev, edata);
1732
1733                buf = (u32)edata->tx_lpi_timer;
1734                ret = lan78xx_write_reg(dev, EEE_TX_LPI_REQ_DLY, buf);
1735        } else {
1736                ret = lan78xx_read_reg(dev, MAC_CR, &buf);
1737                buf &= ~MAC_CR_EEE_EN_;
1738                ret = lan78xx_write_reg(dev, MAC_CR, buf);
1739        }
1740
1741        usb_autopm_put_interface(dev->intf);
1742
1743        return 0;
1744}
1745
1746static u32 lan78xx_get_link(struct net_device *net)
1747{
1748        u32 link;
1749
1750        mutex_lock(&net->phydev->lock);
1751        phy_read_status(net->phydev);
1752        link = net->phydev->link;
1753        mutex_unlock(&net->phydev->lock);
1754
1755        return link;
1756}
1757
1758static void lan78xx_get_drvinfo(struct net_device *net,
1759                                struct ethtool_drvinfo *info)
1760{
1761        struct lan78xx_net *dev = netdev_priv(net);
1762
1763        strncpy(info->driver, DRIVER_NAME, sizeof(info->driver));
1764        usb_make_path(dev->udev, info->bus_info, sizeof(info->bus_info));
1765}
1766
1767static u32 lan78xx_get_msglevel(struct net_device *net)
1768{
1769        struct lan78xx_net *dev = netdev_priv(net);
1770
1771        return dev->msg_enable;
1772}
1773
1774static void lan78xx_set_msglevel(struct net_device *net, u32 level)
1775{
1776        struct lan78xx_net *dev = netdev_priv(net);
1777
1778        dev->msg_enable = level;
1779}
1780
1781static int lan78xx_get_link_ksettings(struct net_device *net,
1782                                      struct ethtool_link_ksettings *cmd)
1783{
1784        struct lan78xx_net *dev = netdev_priv(net);
1785        struct phy_device *phydev = net->phydev;
1786        int ret;
1787
1788        ret = usb_autopm_get_interface(dev->intf);
1789        if (ret < 0)
1790                return ret;
1791
1792        phy_ethtool_ksettings_get(phydev, cmd);
1793
1794        usb_autopm_put_interface(dev->intf);
1795
1796        return ret;
1797}
1798
1799static int lan78xx_set_link_ksettings(struct net_device *net,
1800                                      const struct ethtool_link_ksettings *cmd)
1801{
1802        struct lan78xx_net *dev = netdev_priv(net);
1803        struct phy_device *phydev = net->phydev;
1804        int ret = 0;
1805        int temp;
1806
1807        ret = usb_autopm_get_interface(dev->intf);
1808        if (ret < 0)
1809                return ret;
1810
1811        /* change speed & duplex */
1812        ret = phy_ethtool_ksettings_set(phydev, cmd);
1813
1814        if (!cmd->base.autoneg) {
1815                /* force link down */
1816                temp = phy_read(phydev, MII_BMCR);
1817                phy_write(phydev, MII_BMCR, temp | BMCR_LOOPBACK);
1818                mdelay(1);
1819                phy_write(phydev, MII_BMCR, temp);
1820        }
1821
1822        usb_autopm_put_interface(dev->intf);
1823
1824        return ret;
1825}
1826
1827static void lan78xx_get_pause(struct net_device *net,
1828                              struct ethtool_pauseparam *pause)
1829{
1830        struct lan78xx_net *dev = netdev_priv(net);
1831        struct phy_device *phydev = net->phydev;
1832        struct ethtool_link_ksettings ecmd;
1833
1834        phy_ethtool_ksettings_get(phydev, &ecmd);
1835
1836        pause->autoneg = dev->fc_autoneg;
1837
1838        if (dev->fc_request_control & FLOW_CTRL_TX)
1839                pause->tx_pause = 1;
1840
1841        if (dev->fc_request_control & FLOW_CTRL_RX)
1842                pause->rx_pause = 1;
1843}
1844
1845static int lan78xx_set_pause(struct net_device *net,
1846                             struct ethtool_pauseparam *pause)
1847{
1848        struct lan78xx_net *dev = netdev_priv(net);
1849        struct phy_device *phydev = net->phydev;
1850        struct ethtool_link_ksettings ecmd;
1851        int ret;
1852
1853        phy_ethtool_ksettings_get(phydev, &ecmd);
1854
1855        if (pause->autoneg && !ecmd.base.autoneg) {
1856                ret = -EINVAL;
1857                goto exit;
1858        }
1859
1860        dev->fc_request_control = 0;
1861        if (pause->rx_pause)
1862                dev->fc_request_control |= FLOW_CTRL_RX;
1863
1864        if (pause->tx_pause)
1865                dev->fc_request_control |= FLOW_CTRL_TX;
1866
1867        if (ecmd.base.autoneg) {
1868                __ETHTOOL_DECLARE_LINK_MODE_MASK(fc) = { 0, };
1869                u32 mii_adv;
1870
1871                linkmode_clear_bit(ETHTOOL_LINK_MODE_Pause_BIT,
1872                                   ecmd.link_modes.advertising);
1873                linkmode_clear_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
1874                                   ecmd.link_modes.advertising);
1875                mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control);
1876                mii_adv_to_linkmode_adv_t(fc, mii_adv);
1877                linkmode_or(ecmd.link_modes.advertising, fc,
1878                            ecmd.link_modes.advertising);
1879
1880                phy_ethtool_ksettings_set(phydev, &ecmd);
1881        }
1882
1883        dev->fc_autoneg = pause->autoneg;
1884
1885        ret = 0;
1886exit:
1887        return ret;
1888}
1889
1890static int lan78xx_get_regs_len(struct net_device *netdev)
1891{
1892        if (!netdev->phydev)
1893                return (sizeof(lan78xx_regs));
1894        else
1895                return (sizeof(lan78xx_regs) + PHY_REG_SIZE);
1896}
1897
1898static void
1899lan78xx_get_regs(struct net_device *netdev, struct ethtool_regs *regs,
1900                 void *buf)
1901{
1902        u32 *data = buf;
1903        int i, j;
1904        struct lan78xx_net *dev = netdev_priv(netdev);
1905
1906        /* Read Device/MAC registers */
1907        for (i = 0; i < ARRAY_SIZE(lan78xx_regs); i++)
1908                lan78xx_read_reg(dev, lan78xx_regs[i], &data[i]);
1909
1910        if (!netdev->phydev)
1911                return;
1912
1913        /* Read PHY registers */
1914        for (j = 0; j < 32; i++, j++)
1915                data[i] = phy_read(netdev->phydev, j);
1916}
1917
1918static const struct ethtool_ops lan78xx_ethtool_ops = {
1919        .get_link       = lan78xx_get_link,
1920        .nway_reset     = phy_ethtool_nway_reset,
1921        .get_drvinfo    = lan78xx_get_drvinfo,
1922        .get_msglevel   = lan78xx_get_msglevel,
1923        .set_msglevel   = lan78xx_set_msglevel,
1924        .get_eeprom_len = lan78xx_ethtool_get_eeprom_len,
1925        .get_eeprom     = lan78xx_ethtool_get_eeprom,
1926        .set_eeprom     = lan78xx_ethtool_set_eeprom,
1927        .get_ethtool_stats = lan78xx_get_stats,
1928        .get_sset_count = lan78xx_get_sset_count,
1929        .get_strings    = lan78xx_get_strings,
1930        .get_wol        = lan78xx_get_wol,
1931        .set_wol        = lan78xx_set_wol,
1932        .get_ts_info    = ethtool_op_get_ts_info,
1933        .get_eee        = lan78xx_get_eee,
1934        .set_eee        = lan78xx_set_eee,
1935        .get_pauseparam = lan78xx_get_pause,
1936        .set_pauseparam = lan78xx_set_pause,
1937        .get_link_ksettings = lan78xx_get_link_ksettings,
1938        .set_link_ksettings = lan78xx_set_link_ksettings,
1939        .get_regs_len   = lan78xx_get_regs_len,
1940        .get_regs       = lan78xx_get_regs,
1941};
1942
1943static void lan78xx_init_mac_address(struct lan78xx_net *dev)
1944{
1945        u32 addr_lo, addr_hi;
1946        u8 addr[6];
1947
1948        lan78xx_read_reg(dev, RX_ADDRL, &addr_lo);
1949        lan78xx_read_reg(dev, RX_ADDRH, &addr_hi);
1950
1951        addr[0] = addr_lo & 0xFF;
1952        addr[1] = (addr_lo >> 8) & 0xFF;
1953        addr[2] = (addr_lo >> 16) & 0xFF;
1954        addr[3] = (addr_lo >> 24) & 0xFF;
1955        addr[4] = addr_hi & 0xFF;
1956        addr[5] = (addr_hi >> 8) & 0xFF;
1957
1958        if (!is_valid_ether_addr(addr)) {
1959                if (!eth_platform_get_mac_address(&dev->udev->dev, addr)) {
1960                        /* valid address present in Device Tree */
1961                        netif_dbg(dev, ifup, dev->net,
1962                                  "MAC address read from Device Tree");
1963                } else if (((lan78xx_read_eeprom(dev, EEPROM_MAC_OFFSET,
1964                                                 ETH_ALEN, addr) == 0) ||
1965                            (lan78xx_read_otp(dev, EEPROM_MAC_OFFSET,
1966                                              ETH_ALEN, addr) == 0)) &&
1967                           is_valid_ether_addr(addr)) {
1968                        /* eeprom values are valid so use them */
1969                        netif_dbg(dev, ifup, dev->net,
1970                                  "MAC address read from EEPROM");
1971                } else {
1972                        /* generate random MAC */
1973                        eth_random_addr(addr);
1974                        netif_dbg(dev, ifup, dev->net,
1975                                  "MAC address set to random addr");
1976                }
1977
1978                addr_lo = addr[0] | (addr[1] << 8) |
1979                          (addr[2] << 16) | (addr[3] << 24);
1980                addr_hi = addr[4] | (addr[5] << 8);
1981
1982                lan78xx_write_reg(dev, RX_ADDRL, addr_lo);
1983                lan78xx_write_reg(dev, RX_ADDRH, addr_hi);
1984        }
1985
1986        lan78xx_write_reg(dev, MAF_LO(0), addr_lo);
1987        lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_);
1988
1989        eth_hw_addr_set(dev->net, addr);
1990}
1991
1992/* MDIO read and write wrappers for phylib */
1993static int lan78xx_mdiobus_read(struct mii_bus *bus, int phy_id, int idx)
1994{
1995        struct lan78xx_net *dev = bus->priv;
1996        u32 val, addr;
1997        int ret;
1998
1999        ret = usb_autopm_get_interface(dev->intf);
2000        if (ret < 0)
2001                return ret;
2002
2003        mutex_lock(&dev->phy_mutex);
2004
2005        /* confirm MII not busy */
2006        ret = lan78xx_phy_wait_not_busy(dev);
2007        if (ret < 0)
2008                goto done;
2009
2010        /* set the address, index & direction (read from PHY) */
2011        addr = mii_access(phy_id, idx, MII_READ);
2012        ret = lan78xx_write_reg(dev, MII_ACC, addr);
2013
2014        ret = lan78xx_phy_wait_not_busy(dev);
2015        if (ret < 0)
2016                goto done;
2017
2018        ret = lan78xx_read_reg(dev, MII_DATA, &val);
2019
2020        ret = (int)(val & 0xFFFF);
2021
2022done:
2023        mutex_unlock(&dev->phy_mutex);
2024        usb_autopm_put_interface(dev->intf);
2025
2026        return ret;
2027}
2028
2029static int lan78xx_mdiobus_write(struct mii_bus *bus, int phy_id, int idx,
2030                                 u16 regval)
2031{
2032        struct lan78xx_net *dev = bus->priv;
2033        u32 val, addr;
2034        int ret;
2035
2036        ret = usb_autopm_get_interface(dev->intf);
2037        if (ret < 0)
2038                return ret;
2039
2040        mutex_lock(&dev->phy_mutex);
2041
2042        /* confirm MII not busy */
2043        ret = lan78xx_phy_wait_not_busy(dev);
2044        if (ret < 0)
2045                goto done;
2046
2047        val = (u32)regval;
2048        ret = lan78xx_write_reg(dev, MII_DATA, val);
2049
2050        /* set the address, index & direction (write to PHY) */
2051        addr = mii_access(phy_id, idx, MII_WRITE);
2052        ret = lan78xx_write_reg(dev, MII_ACC, addr);
2053
2054        ret = lan78xx_phy_wait_not_busy(dev);
2055        if (ret < 0)
2056                goto done;
2057
2058done:
2059        mutex_unlock(&dev->phy_mutex);
2060        usb_autopm_put_interface(dev->intf);
2061        return 0;
2062}
2063
2064static int lan78xx_mdio_init(struct lan78xx_net *dev)
2065{
2066        struct device_node *node;
2067        int ret;
2068
2069        dev->mdiobus = mdiobus_alloc();
2070        if (!dev->mdiobus) {
2071                netdev_err(dev->net, "can't allocate MDIO bus\n");
2072                return -ENOMEM;
2073        }
2074
2075        dev->mdiobus->priv = (void *)dev;
2076        dev->mdiobus->read = lan78xx_mdiobus_read;
2077        dev->mdiobus->write = lan78xx_mdiobus_write;
2078        dev->mdiobus->name = "lan78xx-mdiobus";
2079        dev->mdiobus->parent = &dev->udev->dev;
2080
2081        snprintf(dev->mdiobus->id, MII_BUS_ID_SIZE, "usb-%03d:%03d",
2082                 dev->udev->bus->busnum, dev->udev->devnum);
2083
2084        switch (dev->chipid) {
2085        case ID_REV_CHIP_ID_7800_:
2086        case ID_REV_CHIP_ID_7850_:
2087                /* set to internal PHY id */
2088                dev->mdiobus->phy_mask = ~(1 << 1);
2089                break;
2090        case ID_REV_CHIP_ID_7801_:
2091                /* scan thru PHYAD[2..0] */
2092                dev->mdiobus->phy_mask = ~(0xFF);
2093                break;
2094        }
2095
2096        node = of_get_child_by_name(dev->udev->dev.of_node, "mdio");
2097        ret = of_mdiobus_register(dev->mdiobus, node);
2098        of_node_put(node);
2099        if (ret) {
2100                netdev_err(dev->net, "can't register MDIO bus\n");
2101                goto exit1;
2102        }
2103
2104        netdev_dbg(dev->net, "registered mdiobus bus %s\n", dev->mdiobus->id);
2105        return 0;
2106exit1:
2107        mdiobus_free(dev->mdiobus);
2108        return ret;
2109}
2110
2111static void lan78xx_remove_mdio(struct lan78xx_net *dev)
2112{
2113        mdiobus_unregister(dev->mdiobus);
2114        mdiobus_free(dev->mdiobus);
2115}
2116
2117static void lan78xx_link_status_change(struct net_device *net)
2118{
2119        struct phy_device *phydev = net->phydev;
2120        int temp;
2121
2122        /* At forced 100 F/H mode, chip may fail to set mode correctly
2123         * when cable is switched between long(~50+m) and short one.
2124         * As workaround, set to 10 before setting to 100
2125         * at forced 100 F/H mode.
2126         */
2127        if (!phydev->autoneg && (phydev->speed == 100)) {
2128                /* disable phy interrupt */
2129                temp = phy_read(phydev, LAN88XX_INT_MASK);
2130                temp &= ~LAN88XX_INT_MASK_MDINTPIN_EN_;
2131                phy_write(phydev, LAN88XX_INT_MASK, temp);
2132
2133                temp = phy_read(phydev, MII_BMCR);
2134                temp &= ~(BMCR_SPEED100 | BMCR_SPEED1000);
2135                phy_write(phydev, MII_BMCR, temp); /* set to 10 first */
2136                temp |= BMCR_SPEED100;
2137                phy_write(phydev, MII_BMCR, temp); /* set to 100 later */
2138
2139                /* clear pending interrupt generated while workaround */
2140                temp = phy_read(phydev, LAN88XX_INT_STS);
2141
2142                /* enable phy interrupt back */
2143                temp = phy_read(phydev, LAN88XX_INT_MASK);
2144                temp |= LAN88XX_INT_MASK_MDINTPIN_EN_;
2145                phy_write(phydev, LAN88XX_INT_MASK, temp);
2146        }
2147}
2148
2149static int irq_map(struct irq_domain *d, unsigned int irq,
2150                   irq_hw_number_t hwirq)
2151{
2152        struct irq_domain_data *data = d->host_data;
2153
2154        irq_set_chip_data(irq, data);
2155        irq_set_chip_and_handler(irq, data->irqchip, data->irq_handler);
2156        irq_set_noprobe(irq);
2157
2158        return 0;
2159}
2160
2161static void irq_unmap(struct irq_domain *d, unsigned int irq)
2162{
2163        irq_set_chip_and_handler(irq, NULL, NULL);
2164        irq_set_chip_data(irq, NULL);
2165}
2166
2167static const struct irq_domain_ops chip_domain_ops = {
2168        .map    = irq_map,
2169        .unmap  = irq_unmap,
2170};
2171
2172static void lan78xx_irq_mask(struct irq_data *irqd)
2173{
2174        struct irq_domain_data *data = irq_data_get_irq_chip_data(irqd);
2175
2176        data->irqenable &= ~BIT(irqd_to_hwirq(irqd));
2177}
2178
2179static void lan78xx_irq_unmask(struct irq_data *irqd)
2180{
2181        struct irq_domain_data *data = irq_data_get_irq_chip_data(irqd);
2182
2183        data->irqenable |= BIT(irqd_to_hwirq(irqd));
2184}
2185
2186static void lan78xx_irq_bus_lock(struct irq_data *irqd)
2187{
2188        struct irq_domain_data *data = irq_data_get_irq_chip_data(irqd);
2189
2190        mutex_lock(&data->irq_lock);
2191}
2192
2193static void lan78xx_irq_bus_sync_unlock(struct irq_data *irqd)
2194{
2195        struct irq_domain_data *data = irq_data_get_irq_chip_data(irqd);
2196        struct lan78xx_net *dev =
2197                        container_of(data, struct lan78xx_net, domain_data);
2198        u32 buf;
2199
2200        /* call register access here because irq_bus_lock & irq_bus_sync_unlock
2201         * are only two callbacks executed in non-atomic contex.
2202         */
2203        lan78xx_read_reg(dev, INT_EP_CTL, &buf);
2204        if (buf != data->irqenable)
2205                lan78xx_write_reg(dev, INT_EP_CTL, data->irqenable);
2206
2207        mutex_unlock(&data->irq_lock);
2208}
2209
2210static struct irq_chip lan78xx_irqchip = {
2211        .name                   = "lan78xx-irqs",
2212        .irq_mask               = lan78xx_irq_mask,
2213        .irq_unmask             = lan78xx_irq_unmask,
2214        .irq_bus_lock           = lan78xx_irq_bus_lock,
2215        .irq_bus_sync_unlock    = lan78xx_irq_bus_sync_unlock,
2216};
2217
2218static int lan78xx_setup_irq_domain(struct lan78xx_net *dev)
2219{
2220        struct device_node *of_node;
2221        struct irq_domain *irqdomain;
2222        unsigned int irqmap = 0;
2223        u32 buf;
2224        int ret = 0;
2225
2226        of_node = dev->udev->dev.parent->of_node;
2227
2228        mutex_init(&dev->domain_data.irq_lock);
2229
2230        lan78xx_read_reg(dev, INT_EP_CTL, &buf);
2231        dev->domain_data.irqenable = buf;
2232
2233        dev->domain_data.irqchip = &lan78xx_irqchip;
2234        dev->domain_data.irq_handler = handle_simple_irq;
2235
2236        irqdomain = irq_domain_add_simple(of_node, MAX_INT_EP, 0,
2237                                          &chip_domain_ops, &dev->domain_data);
2238        if (irqdomain) {
2239                /* create mapping for PHY interrupt */
2240                irqmap = irq_create_mapping(irqdomain, INT_EP_PHY);
2241                if (!irqmap) {
2242                        irq_domain_remove(irqdomain);
2243
2244                        irqdomain = NULL;
2245                        ret = -EINVAL;
2246                }
2247        } else {
2248                ret = -EINVAL;
2249        }
2250
2251        dev->domain_data.irqdomain = irqdomain;
2252        dev->domain_data.phyirq = irqmap;
2253
2254        return ret;
2255}
2256
2257static void lan78xx_remove_irq_domain(struct lan78xx_net *dev)
2258{
2259        if (dev->domain_data.phyirq > 0) {
2260                irq_dispose_mapping(dev->domain_data.phyirq);
2261
2262                if (dev->domain_data.irqdomain)
2263                        irq_domain_remove(dev->domain_data.irqdomain);
2264        }
2265        dev->domain_data.phyirq = 0;
2266        dev->domain_data.irqdomain = NULL;
2267}
2268
2269static int lan8835_fixup(struct phy_device *phydev)
2270{
2271        int buf;
2272        struct lan78xx_net *dev = netdev_priv(phydev->attached_dev);
2273
2274        /* LED2/PME_N/IRQ_N/RGMII_ID pin to IRQ_N mode */
2275        buf = phy_read_mmd(phydev, MDIO_MMD_PCS, 0x8010);
2276        buf &= ~0x1800;
2277        buf |= 0x0800;
2278        phy_write_mmd(phydev, MDIO_MMD_PCS, 0x8010, buf);
2279
2280        /* RGMII MAC TXC Delay Enable */
2281        lan78xx_write_reg(dev, MAC_RGMII_ID,
2282                          MAC_RGMII_ID_TXC_DELAY_EN_);
2283
2284        /* RGMII TX DLL Tune Adjust */
2285        lan78xx_write_reg(dev, RGMII_TX_BYP_DLL, 0x3D00);
2286
2287        dev->interface = PHY_INTERFACE_MODE_RGMII_TXID;
2288
2289        return 1;
2290}
2291
2292static int ksz9031rnx_fixup(struct phy_device *phydev)
2293{
2294        struct lan78xx_net *dev = netdev_priv(phydev->attached_dev);
2295
2296        /* Micrel9301RNX PHY configuration */
2297        /* RGMII Control Signal Pad Skew */
2298        phy_write_mmd(phydev, MDIO_MMD_WIS, 4, 0x0077);
2299        /* RGMII RX Data Pad Skew */
2300        phy_write_mmd(phydev, MDIO_MMD_WIS, 5, 0x7777);
2301        /* RGMII RX Clock Pad Skew */
2302        phy_write_mmd(phydev, MDIO_MMD_WIS, 8, 0x1FF);
2303
2304        dev->interface = PHY_INTERFACE_MODE_RGMII_RXID;
2305
2306        return 1;
2307}
2308
2309static struct phy_device *lan7801_phy_init(struct lan78xx_net *dev)
2310{
2311        u32 buf;
2312        int ret;
2313        struct fixed_phy_status fphy_status = {
2314                .link = 1,
2315                .speed = SPEED_1000,
2316                .duplex = DUPLEX_FULL,
2317        };
2318        struct phy_device *phydev;
2319
2320        phydev = phy_find_first(dev->mdiobus);
2321        if (!phydev) {
2322                netdev_dbg(dev->net, "PHY Not Found!! Registering Fixed PHY\n");
2323                phydev = fixed_phy_register(PHY_POLL, &fphy_status, NULL);
2324                if (IS_ERR(phydev)) {
2325                        netdev_err(dev->net, "No PHY/fixed_PHY found\n");
2326                        return NULL;
2327                }
2328                netdev_dbg(dev->net, "Registered FIXED PHY\n");
2329                dev->interface = PHY_INTERFACE_MODE_RGMII;
2330                ret = lan78xx_write_reg(dev, MAC_RGMII_ID,
2331                                        MAC_RGMII_ID_TXC_DELAY_EN_);
2332                ret = lan78xx_write_reg(dev, RGMII_TX_BYP_DLL, 0x3D00);
2333                ret = lan78xx_read_reg(dev, HW_CFG, &buf);
2334                buf |= HW_CFG_CLK125_EN_;
2335                buf |= HW_CFG_REFCLK25_EN_;
2336                ret = lan78xx_write_reg(dev, HW_CFG, buf);
2337        } else {
2338                if (!phydev->drv) {
2339                        netdev_err(dev->net, "no PHY driver found\n");
2340                        return NULL;
2341                }
2342                dev->interface = PHY_INTERFACE_MODE_RGMII;
2343                /* external PHY fixup for KSZ9031RNX */
2344                ret = phy_register_fixup_for_uid(PHY_KSZ9031RNX, 0xfffffff0,
2345                                                 ksz9031rnx_fixup);
2346                if (ret < 0) {
2347                        netdev_err(dev->net, "Failed to register fixup for PHY_KSZ9031RNX\n");
2348                        return NULL;
2349                }
2350                /* external PHY fixup for LAN8835 */
2351                ret = phy_register_fixup_for_uid(PHY_LAN8835, 0xfffffff0,
2352                                                 lan8835_fixup);
2353                if (ret < 0) {
2354                        netdev_err(dev->net, "Failed to register fixup for PHY_LAN8835\n");
2355                        return NULL;
2356                }
2357                /* add more external PHY fixup here if needed */
2358
2359                phydev->is_internal = false;
2360        }
2361        return phydev;
2362}
2363
2364static int lan78xx_phy_init(struct lan78xx_net *dev)
2365{
2366        __ETHTOOL_DECLARE_LINK_MODE_MASK(fc) = { 0, };
2367        int ret;
2368        u32 mii_adv;
2369        struct phy_device *phydev;
2370
2371        switch (dev->chipid) {
2372        case ID_REV_CHIP_ID_7801_:
2373                phydev = lan7801_phy_init(dev);
2374                if (!phydev) {
2375                        netdev_err(dev->net, "lan7801: PHY Init Failed");
2376                        return -EIO;
2377                }
2378                break;
2379
2380        case ID_REV_CHIP_ID_7800_:
2381        case ID_REV_CHIP_ID_7850_:
2382                phydev = phy_find_first(dev->mdiobus);
2383                if (!phydev) {
2384                        netdev_err(dev->net, "no PHY found\n");
2385                        return -EIO;
2386                }
2387                phydev->is_internal = true;
2388                dev->interface = PHY_INTERFACE_MODE_GMII;
2389                break;
2390
2391        default:
2392                netdev_err(dev->net, "Unknown CHIP ID found\n");
2393                return -EIO;
2394        }
2395
2396        /* if phyirq is not set, use polling mode in phylib */
2397        if (dev->domain_data.phyirq > 0)
2398                phydev->irq = dev->domain_data.phyirq;
2399        else
2400                phydev->irq = PHY_POLL;
2401        netdev_dbg(dev->net, "phydev->irq = %d\n", phydev->irq);
2402
2403        /* set to AUTOMDIX */
2404        phydev->mdix = ETH_TP_MDI_AUTO;
2405
2406        ret = phy_connect_direct(dev->net, phydev,
2407                                 lan78xx_link_status_change,
2408                                 dev->interface);
2409        if (ret) {
2410                netdev_err(dev->net, "can't attach PHY to %s\n",
2411                           dev->mdiobus->id);
2412                if (dev->chipid == ID_REV_CHIP_ID_7801_) {
2413                        if (phy_is_pseudo_fixed_link(phydev)) {
2414                                fixed_phy_unregister(phydev);
2415                        } else {
2416                                phy_unregister_fixup_for_uid(PHY_KSZ9031RNX,
2417                                                             0xfffffff0);
2418                                phy_unregister_fixup_for_uid(PHY_LAN8835,
2419                                                             0xfffffff0);
2420                        }
2421                }
2422                return -EIO;
2423        }
2424
2425        /* MAC doesn't support 1000T Half */
2426        phy_remove_link_mode(phydev, ETHTOOL_LINK_MODE_1000baseT_Half_BIT);
2427
2428        /* support both flow controls */
2429        dev->fc_request_control = (FLOW_CTRL_RX | FLOW_CTRL_TX);
2430        linkmode_clear_bit(ETHTOOL_LINK_MODE_Pause_BIT,
2431                           phydev->advertising);
2432        linkmode_clear_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
2433                           phydev->advertising);
2434        mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control);
2435        mii_adv_to_linkmode_adv_t(fc, mii_adv);
2436        linkmode_or(phydev->advertising, fc, phydev->advertising);
2437
2438        if (phydev->mdio.dev.of_node) {
2439                u32 reg;
2440                int len;
2441
2442                len = of_property_count_elems_of_size(phydev->mdio.dev.of_node,
2443                                                      "microchip,led-modes",
2444                                                      sizeof(u32));
2445                if (len >= 0) {
2446                        /* Ensure the appropriate LEDs are enabled */
2447                        lan78xx_read_reg(dev, HW_CFG, &reg);
2448                        reg &= ~(HW_CFG_LED0_EN_ |
2449                                 HW_CFG_LED1_EN_ |
2450                                 HW_CFG_LED2_EN_ |
2451                                 HW_CFG_LED3_EN_);
2452                        reg |= (len > 0) * HW_CFG_LED0_EN_ |
2453                                (len > 1) * HW_CFG_LED1_EN_ |
2454                                (len > 2) * HW_CFG_LED2_EN_ |
2455                                (len > 3) * HW_CFG_LED3_EN_;
2456                        lan78xx_write_reg(dev, HW_CFG, reg);
2457                }
2458        }
2459
2460        genphy_config_aneg(phydev);
2461
2462        dev->fc_autoneg = phydev->autoneg;
2463
2464        return 0;
2465}
2466
2467static int lan78xx_set_rx_max_frame_length(struct lan78xx_net *dev, int size)
2468{
2469        u32 buf;
2470        bool rxenabled;
2471
2472        lan78xx_read_reg(dev, MAC_RX, &buf);
2473
2474        rxenabled = ((buf & MAC_RX_RXEN_) != 0);
2475
2476        if (rxenabled) {
2477                buf &= ~MAC_RX_RXEN_;
2478                lan78xx_write_reg(dev, MAC_RX, buf);
2479        }
2480
2481        /* add 4 to size for FCS */
2482        buf &= ~MAC_RX_MAX_SIZE_MASK_;
2483        buf |= (((size + 4) << MAC_RX_MAX_SIZE_SHIFT_) & MAC_RX_MAX_SIZE_MASK_);
2484
2485        lan78xx_write_reg(dev, MAC_RX, buf);
2486
2487        if (rxenabled) {
2488                buf |= MAC_RX_RXEN_;
2489                lan78xx_write_reg(dev, MAC_RX, buf);
2490        }
2491
2492        return 0;
2493}
2494
2495static int unlink_urbs(struct lan78xx_net *dev, struct sk_buff_head *q)
2496{
2497        struct sk_buff *skb;
2498        unsigned long flags;
2499        int count = 0;
2500
2501        spin_lock_irqsave(&q->lock, flags);
2502        while (!skb_queue_empty(q)) {
2503                struct skb_data *entry;
2504                struct urb *urb;
2505                int ret;
2506
2507                skb_queue_walk(q, skb) {
2508                        entry = (struct skb_data *)skb->cb;
2509                        if (entry->state != unlink_start)
2510                                goto found;
2511                }
2512                break;
2513found:
2514                entry->state = unlink_start;
2515                urb = entry->urb;
2516
2517                /* Get reference count of the URB to avoid it to be
2518                 * freed during usb_unlink_urb, which may trigger
2519                 * use-after-free problem inside usb_unlink_urb since
2520                 * usb_unlink_urb is always racing with .complete
2521                 * handler(include defer_bh).
2522                 */
2523                usb_get_urb(urb);
2524                spin_unlock_irqrestore(&q->lock, flags);
2525                /* during some PM-driven resume scenarios,
2526                 * these (async) unlinks complete immediately
2527                 */
2528                ret = usb_unlink_urb(urb);
2529                if (ret != -EINPROGRESS && ret != 0)
2530                        netdev_dbg(dev->net, "unlink urb err, %d\n", ret);
2531                else
2532                        count++;
2533                usb_put_urb(urb);
2534                spin_lock_irqsave(&q->lock, flags);
2535        }
2536        spin_unlock_irqrestore(&q->lock, flags);
2537        return count;
2538}
2539
2540static int lan78xx_change_mtu(struct net_device *netdev, int new_mtu)
2541{
2542        struct lan78xx_net *dev = netdev_priv(netdev);
2543        int max_frame_len = RX_MAX_FRAME_LEN(new_mtu);
2544        int ret;
2545
2546        /* no second zero-length packet read wanted after mtu-sized packets */
2547        if ((max_frame_len % dev->maxpacket) == 0)
2548                return -EDOM;
2549
2550        ret = usb_autopm_get_interface(dev->intf);
2551        if (ret < 0)
2552                return ret;
2553
2554        ret = lan78xx_set_rx_max_frame_length(dev, max_frame_len);
2555        if (!ret)
2556                netdev->mtu = new_mtu;
2557
2558        usb_autopm_put_interface(dev->intf);
2559
2560        return ret;
2561}
2562
2563static int lan78xx_set_mac_addr(struct net_device *netdev, void *p)
2564{
2565        struct lan78xx_net *dev = netdev_priv(netdev);
2566        struct sockaddr *addr = p;
2567        u32 addr_lo, addr_hi;
2568
2569        if (netif_running(netdev))
2570                return -EBUSY;
2571
2572        if (!is_valid_ether_addr(addr->sa_data))
2573                return -EADDRNOTAVAIL;
2574
2575        eth_hw_addr_set(netdev, addr->sa_data);
2576
2577        addr_lo = netdev->dev_addr[0] |
2578                  netdev->dev_addr[1] << 8 |
2579                  netdev->dev_addr[2] << 16 |
2580                  netdev->dev_addr[3] << 24;
2581        addr_hi = netdev->dev_addr[4] |
2582                  netdev->dev_addr[5] << 8;
2583
2584        lan78xx_write_reg(dev, RX_ADDRL, addr_lo);
2585        lan78xx_write_reg(dev, RX_ADDRH, addr_hi);
2586
2587        /* Added to support MAC address changes */
2588        lan78xx_write_reg(dev, MAF_LO(0), addr_lo);
2589        lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_);
2590
2591        return 0;
2592}
2593
2594/* Enable or disable Rx checksum offload engine */
2595static int lan78xx_set_features(struct net_device *netdev,
2596                                netdev_features_t features)
2597{
2598        struct lan78xx_net *dev = netdev_priv(netdev);
2599        struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
2600        unsigned long flags;
2601
2602        spin_lock_irqsave(&pdata->rfe_ctl_lock, flags);
2603
2604        if (features & NETIF_F_RXCSUM) {
2605                pdata->rfe_ctl |= RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_;
2606                pdata->rfe_ctl |= RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_;
2607        } else {
2608                pdata->rfe_ctl &= ~(RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_);
2609                pdata->rfe_ctl &= ~(RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_);
2610        }
2611
2612        if (features & NETIF_F_HW_VLAN_CTAG_RX)
2613                pdata->rfe_ctl |= RFE_CTL_VLAN_STRIP_;
2614        else
2615                pdata->rfe_ctl &= ~RFE_CTL_VLAN_STRIP_;
2616
2617        if (features & NETIF_F_HW_VLAN_CTAG_FILTER)
2618                pdata->rfe_ctl |= RFE_CTL_VLAN_FILTER_;
2619        else
2620                pdata->rfe_ctl &= ~RFE_CTL_VLAN_FILTER_;
2621
2622        spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags);
2623
2624        lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl);
2625
2626        return 0;
2627}
2628
2629static void lan78xx_deferred_vlan_write(struct work_struct *param)
2630{
2631        struct lan78xx_priv *pdata =
2632                        container_of(param, struct lan78xx_priv, set_vlan);
2633        struct lan78xx_net *dev = pdata->dev;
2634
2635        lan78xx_dataport_write(dev, DP_SEL_RSEL_VLAN_DA_, 0,
2636                               DP_SEL_VHF_VLAN_LEN, pdata->vlan_table);
2637}
2638
2639static int lan78xx_vlan_rx_add_vid(struct net_device *netdev,
2640                                   __be16 proto, u16 vid)
2641{
2642        struct lan78xx_net *dev = netdev_priv(netdev);
2643        struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
2644        u16 vid_bit_index;
2645        u16 vid_dword_index;
2646
2647        vid_dword_index = (vid >> 5) & 0x7F;
2648        vid_bit_index = vid & 0x1F;
2649
2650        pdata->vlan_table[vid_dword_index] |= (1 << vid_bit_index);
2651
2652        /* defer register writes to a sleepable context */
2653        schedule_work(&pdata->set_vlan);
2654
2655        return 0;
2656}
2657
2658static int lan78xx_vlan_rx_kill_vid(struct net_device *netdev,
2659                                    __be16 proto, u16 vid)
2660{
2661        struct lan78xx_net *dev = netdev_priv(netdev);
2662        struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
2663        u16 vid_bit_index;
2664        u16 vid_dword_index;
2665
2666        vid_dword_index = (vid >> 5) & 0x7F;
2667        vid_bit_index = vid & 0x1F;
2668
2669        pdata->vlan_table[vid_dword_index] &= ~(1 << vid_bit_index);
2670
2671        /* defer register writes to a sleepable context */
2672        schedule_work(&pdata->set_vlan);
2673
2674        return 0;
2675}
2676
2677static void lan78xx_init_ltm(struct lan78xx_net *dev)
2678{
2679        int ret;
2680        u32 buf;
2681        u32 regs[6] = { 0 };
2682
2683        ret = lan78xx_read_reg(dev, USB_CFG1, &buf);
2684        if (buf & USB_CFG1_LTM_ENABLE_) {
2685                u8 temp[2];
2686                /* Get values from EEPROM first */
2687                if (lan78xx_read_eeprom(dev, 0x3F, 2, temp) == 0) {
2688                        if (temp[0] == 24) {
2689                                ret = lan78xx_read_raw_eeprom(dev,
2690                                                              temp[1] * 2,
2691                                                              24,
2692                                                              (u8 *)regs);
2693                                if (ret < 0)
2694                                        return;
2695                        }
2696                } else if (lan78xx_read_otp(dev, 0x3F, 2, temp) == 0) {
2697                        if (temp[0] == 24) {
2698                                ret = lan78xx_read_raw_otp(dev,
2699                                                           temp[1] * 2,
2700                                                           24,
2701                                                           (u8 *)regs);
2702                                if (ret < 0)
2703                                        return;
2704                        }
2705                }
2706        }
2707
2708        lan78xx_write_reg(dev, LTM_BELT_IDLE0, regs[0]);
2709        lan78xx_write_reg(dev, LTM_BELT_IDLE1, regs[1]);
2710        lan78xx_write_reg(dev, LTM_BELT_ACT0, regs[2]);
2711        lan78xx_write_reg(dev, LTM_BELT_ACT1, regs[3]);
2712        lan78xx_write_reg(dev, LTM_INACTIVE0, regs[4]);
2713        lan78xx_write_reg(dev, LTM_INACTIVE1, regs[5]);
2714}
2715
2716static int lan78xx_urb_config_init(struct lan78xx_net *dev)
2717{
2718        int result = 0;
2719
2720        switch (dev->udev->speed) {
2721        case USB_SPEED_SUPER:
2722                dev->rx_urb_size = RX_SS_URB_SIZE;
2723                dev->tx_urb_size = TX_SS_URB_SIZE;
2724                dev->n_rx_urbs = RX_SS_URB_NUM;
2725                dev->n_tx_urbs = TX_SS_URB_NUM;
2726                dev->bulk_in_delay = SS_BULK_IN_DELAY;
2727                dev->burst_cap = SS_BURST_CAP_SIZE / SS_USB_PKT_SIZE;
2728                break;
2729        case USB_SPEED_HIGH:
2730                dev->rx_urb_size = RX_HS_URB_SIZE;
2731                dev->tx_urb_size = TX_HS_URB_SIZE;
2732                dev->n_rx_urbs = RX_HS_URB_NUM;
2733                dev->n_tx_urbs = TX_HS_URB_NUM;
2734                dev->bulk_in_delay = HS_BULK_IN_DELAY;
2735                dev->burst_cap = HS_BURST_CAP_SIZE / HS_USB_PKT_SIZE;
2736                break;
2737        case USB_SPEED_FULL:
2738                dev->rx_urb_size = RX_FS_URB_SIZE;
2739                dev->tx_urb_size = TX_FS_URB_SIZE;
2740                dev->n_rx_urbs = RX_FS_URB_NUM;
2741                dev->n_tx_urbs = TX_FS_URB_NUM;
2742                dev->bulk_in_delay = FS_BULK_IN_DELAY;
2743                dev->burst_cap = FS_BURST_CAP_SIZE / FS_USB_PKT_SIZE;
2744                break;
2745        default:
2746                netdev_warn(dev->net, "USB bus speed not supported\n");
2747                result = -EIO;
2748                break;
2749        }
2750
2751        return result;
2752}
2753
2754static int lan78xx_start_hw(struct lan78xx_net *dev, u32 reg, u32 hw_enable)
2755{
2756        return lan78xx_update_reg(dev, reg, hw_enable, hw_enable);
2757}
2758
2759static int lan78xx_stop_hw(struct lan78xx_net *dev, u32 reg, u32 hw_enabled,
2760                           u32 hw_disabled)
2761{
2762        unsigned long timeout;
2763        bool stopped = true;
2764        int ret;
2765        u32 buf;
2766
2767        /* Stop the h/w block (if not already stopped) */
2768
2769        ret = lan78xx_read_reg(dev, reg, &buf);
2770        if (ret < 0)
2771                return ret;
2772
2773        if (buf & hw_enabled) {
2774                buf &= ~hw_enabled;
2775
2776                ret = lan78xx_write_reg(dev, reg, buf);
2777                if (ret < 0)
2778                        return ret;
2779
2780                stopped = false;
2781                timeout = jiffies + HW_DISABLE_TIMEOUT;
2782                do  {
2783                        ret = lan78xx_read_reg(dev, reg, &buf);
2784                        if (ret < 0)
2785                                return ret;
2786
2787                        if (buf & hw_disabled)
2788                                stopped = true;
2789                        else
2790                                msleep(HW_DISABLE_DELAY_MS);
2791                } while (!stopped && !time_after(jiffies, timeout));
2792        }
2793
2794        ret = stopped ? 0 : -ETIME;
2795
2796        return ret;
2797}
2798
2799static int lan78xx_flush_fifo(struct lan78xx_net *dev, u32 reg, u32 fifo_flush)
2800{
2801        return lan78xx_update_reg(dev, reg, fifo_flush, fifo_flush);
2802}
2803
2804static int lan78xx_start_tx_path(struct lan78xx_net *dev)
2805{
2806        int ret;
2807
2808        netif_dbg(dev, drv, dev->net, "start tx path");
2809
2810        /* Start the MAC transmitter */
2811
2812        ret = lan78xx_start_hw(dev, MAC_TX, MAC_TX_TXEN_);
2813        if (ret < 0)
2814                return ret;
2815
2816        /* Start the Tx FIFO */
2817
2818        ret = lan78xx_start_hw(dev, FCT_TX_CTL, FCT_TX_CTL_EN_);
2819        if (ret < 0)
2820                return ret;
2821
2822        return 0;
2823}
2824
2825static int lan78xx_stop_tx_path(struct lan78xx_net *dev)
2826{
2827        int ret;
2828
2829        netif_dbg(dev, drv, dev->net, "stop tx path");
2830
2831        /* Stop the Tx FIFO */
2832
2833        ret = lan78xx_stop_hw(dev, FCT_TX_CTL, FCT_TX_CTL_EN_, FCT_TX_CTL_DIS_);
2834        if (ret < 0)
2835                return ret;
2836
2837        /* Stop the MAC transmitter */
2838
2839        ret = lan78xx_stop_hw(dev, MAC_TX, MAC_TX_TXEN_, MAC_TX_TXD_);
2840        if (ret < 0)
2841                return ret;
2842
2843        return 0;
2844}
2845
2846/* The caller must ensure the Tx path is stopped before calling
2847 * lan78xx_flush_tx_fifo().
2848 */
2849static int lan78xx_flush_tx_fifo(struct lan78xx_net *dev)
2850{
2851        return lan78xx_flush_fifo(dev, FCT_TX_CTL, FCT_TX_CTL_RST_);
2852}
2853
2854static int lan78xx_start_rx_path(struct lan78xx_net *dev)
2855{
2856        int ret;
2857
2858        netif_dbg(dev, drv, dev->net, "start rx path");
2859
2860        /* Start the Rx FIFO */
2861
2862        ret = lan78xx_start_hw(dev, FCT_RX_CTL, FCT_RX_CTL_EN_);
2863        if (ret < 0)
2864                return ret;
2865
2866        /* Start the MAC receiver*/
2867
2868        ret = lan78xx_start_hw(dev, MAC_RX, MAC_RX_RXEN_);
2869        if (ret < 0)
2870                return ret;
2871
2872        return 0;
2873}
2874
2875static int lan78xx_stop_rx_path(struct lan78xx_net *dev)
2876{
2877        int ret;
2878
2879        netif_dbg(dev, drv, dev->net, "stop rx path");
2880
2881        /* Stop the MAC receiver */
2882
2883        ret = lan78xx_stop_hw(dev, MAC_RX, MAC_RX_RXEN_, MAC_RX_RXD_);
2884        if (ret < 0)
2885                return ret;
2886
2887        /* Stop the Rx FIFO */
2888
2889        ret = lan78xx_stop_hw(dev, FCT_RX_CTL, FCT_RX_CTL_EN_, FCT_RX_CTL_DIS_);
2890        if (ret < 0)
2891                return ret;
2892
2893        return 0;
2894}
2895
2896/* The caller must ensure the Rx path is stopped before calling
2897 * lan78xx_flush_rx_fifo().
2898 */
2899static int lan78xx_flush_rx_fifo(struct lan78xx_net *dev)
2900{
2901        return lan78xx_flush_fifo(dev, FCT_RX_CTL, FCT_RX_CTL_RST_);
2902}
2903
2904static int lan78xx_reset(struct lan78xx_net *dev)
2905{
2906        struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
2907        unsigned long timeout;
2908        int ret;
2909        u32 buf;
2910        u8 sig;
2911
2912        ret = lan78xx_read_reg(dev, HW_CFG, &buf);
2913        if (ret < 0)
2914                return ret;
2915
2916        buf |= HW_CFG_LRST_;
2917
2918        ret = lan78xx_write_reg(dev, HW_CFG, buf);
2919        if (ret < 0)
2920                return ret;
2921
2922        timeout = jiffies + HZ;
2923        do {
2924                mdelay(1);
2925                ret = lan78xx_read_reg(dev, HW_CFG, &buf);
2926                if (ret < 0)
2927                        return ret;
2928
2929                if (time_after(jiffies, timeout)) {
2930                        netdev_warn(dev->net,
2931                                    "timeout on completion of LiteReset");
2932                        ret = -ETIMEDOUT;
2933                        return ret;
2934                }
2935        } while (buf & HW_CFG_LRST_);
2936
2937        lan78xx_init_mac_address(dev);
2938
2939        /* save DEVID for later usage */
2940        ret = lan78xx_read_reg(dev, ID_REV, &buf);
2941        if (ret < 0)
2942                return ret;
2943
2944        dev->chipid = (buf & ID_REV_CHIP_ID_MASK_) >> 16;
2945        dev->chiprev = buf & ID_REV_CHIP_REV_MASK_;
2946
2947        /* Respond to the IN token with a NAK */
2948        ret = lan78xx_read_reg(dev, USB_CFG0, &buf);
2949        if (ret < 0)
2950                return ret;
2951
2952        buf |= USB_CFG_BIR_;
2953
2954        ret = lan78xx_write_reg(dev, USB_CFG0, buf);
2955        if (ret < 0)
2956                return ret;
2957
2958        /* Init LTM */
2959        lan78xx_init_ltm(dev);
2960
2961        ret = lan78xx_write_reg(dev, BURST_CAP, dev->burst_cap);
2962        if (ret < 0)
2963                return ret;
2964
2965        ret = lan78xx_write_reg(dev, BULK_IN_DLY, dev->bulk_in_delay);
2966        if (ret < 0)
2967                return ret;
2968
2969        ret = lan78xx_read_reg(dev, HW_CFG, &buf);
2970        if (ret < 0)
2971                return ret;
2972
2973        buf |= HW_CFG_MEF_;
2974
2975        ret = lan78xx_write_reg(dev, HW_CFG, buf);
2976        if (ret < 0)
2977                return ret;
2978
2979        ret = lan78xx_read_reg(dev, USB_CFG0, &buf);
2980        if (ret < 0)
2981                return ret;
2982
2983        buf |= USB_CFG_BCE_;
2984
2985        ret = lan78xx_write_reg(dev, USB_CFG0, buf);
2986        if (ret < 0)
2987                return ret;
2988
2989        /* set FIFO sizes */
2990        buf = (MAX_RX_FIFO_SIZE - 512) / 512;
2991
2992        ret = lan78xx_write_reg(dev, FCT_RX_FIFO_END, buf);
2993        if (ret < 0)
2994                return ret;
2995
2996        buf = (MAX_TX_FIFO_SIZE - 512) / 512;
2997
2998        ret = lan78xx_write_reg(dev, FCT_TX_FIFO_END, buf);
2999        if (ret < 0)
3000                return ret;
3001
3002        ret = lan78xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_);
3003        if (ret < 0)
3004                return ret;
3005
3006        ret = lan78xx_write_reg(dev, FLOW, 0);
3007        if (ret < 0)
3008                return ret;
3009
3010        ret = lan78xx_write_reg(dev, FCT_FLOW, 0);
3011        if (ret < 0)
3012                return ret;
3013
3014        /* Don't need rfe_ctl_lock during initialisation */
3015        ret = lan78xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl);
3016        if (ret < 0)
3017                return ret;
3018
3019        pdata->rfe_ctl |= RFE_CTL_BCAST_EN_ | RFE_CTL_DA_PERFECT_;
3020
3021        ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl);
3022        if (ret < 0)
3023                return ret;
3024
3025        /* Enable or disable checksum offload engines */
3026        ret = lan78xx_set_features(dev->net, dev->net->features);
3027        if (ret < 0)
3028                return ret;
3029
3030        lan78xx_set_multicast(dev->net);
3031
3032        /* reset PHY */
3033        ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
3034        if (ret < 0)
3035                return ret;
3036
3037        buf |= PMT_CTL_PHY_RST_;
3038
3039        ret = lan78xx_write_reg(dev, PMT_CTL, buf);
3040        if (ret < 0)
3041                return ret;
3042
3043        timeout = jiffies + HZ;
3044        do {
3045                mdelay(1);
3046                ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
3047                if (ret < 0)
3048                        return ret;
3049
3050                if (time_after(jiffies, timeout)) {
3051                        netdev_warn(dev->net, "timeout waiting for PHY Reset");
3052                        ret = -ETIMEDOUT;
3053                        return ret;
3054                }
3055        } while ((buf & PMT_CTL_PHY_RST_) || !(buf & PMT_CTL_READY_));
3056
3057        ret = lan78xx_read_reg(dev, MAC_CR, &buf);
3058        if (ret < 0)
3059                return ret;
3060
3061        /* LAN7801 only has RGMII mode */
3062        if (dev->chipid == ID_REV_CHIP_ID_7801_)
3063                buf &= ~MAC_CR_GMII_EN_;
3064
3065        if (dev->chipid == ID_REV_CHIP_ID_7800_) {
3066                ret = lan78xx_read_raw_eeprom(dev, 0, 1, &sig);
3067                if (!ret && sig != EEPROM_INDICATOR) {
3068                        /* Implies there is no external eeprom. Set mac speed */
3069                        netdev_info(dev->net, "No External EEPROM. Setting MAC Speed\n");
3070                        buf |= MAC_CR_AUTO_DUPLEX_ | MAC_CR_AUTO_SPEED_;
3071                }
3072        }
3073        ret = lan78xx_write_reg(dev, MAC_CR, buf);
3074        if (ret < 0)
3075                return ret;
3076
3077        ret = lan78xx_set_rx_max_frame_length(dev,
3078                                              RX_MAX_FRAME_LEN(dev->net->mtu));
3079
3080        return ret;
3081}
3082
3083static void lan78xx_init_stats(struct lan78xx_net *dev)
3084{
3085        u32 *p;
3086        int i;
3087
3088        /* initialize for stats update
3089         * some counters are 20bits and some are 32bits
3090         */
3091        p = (u32 *)&dev->stats.rollover_max;
3092        for (i = 0; i < (sizeof(dev->stats.rollover_max) / (sizeof(u32))); i++)
3093                p[i] = 0xFFFFF;
3094
3095        dev->stats.rollover_max.rx_unicast_byte_count = 0xFFFFFFFF;
3096        dev->stats.rollover_max.rx_broadcast_byte_count = 0xFFFFFFFF;
3097        dev->stats.rollover_max.rx_multicast_byte_count = 0xFFFFFFFF;
3098        dev->stats.rollover_max.eee_rx_lpi_transitions = 0xFFFFFFFF;
3099        dev->stats.rollover_max.eee_rx_lpi_time = 0xFFFFFFFF;
3100        dev->stats.rollover_max.tx_unicast_byte_count = 0xFFFFFFFF;
3101        dev->stats.rollover_max.tx_broadcast_byte_count = 0xFFFFFFFF;
3102        dev->stats.rollover_max.tx_multicast_byte_count = 0xFFFFFFFF;
3103        dev->stats.rollover_max.eee_tx_lpi_transitions = 0xFFFFFFFF;
3104        dev->stats.rollover_max.eee_tx_lpi_time = 0xFFFFFFFF;
3105
3106        set_bit(EVENT_STAT_UPDATE, &dev->flags);
3107}
3108
3109static int lan78xx_open(struct net_device *net)
3110{
3111        struct lan78xx_net *dev = netdev_priv(net);
3112        int ret;
3113
3114        netif_dbg(dev, ifup, dev->net, "open device");
3115
3116        ret = usb_autopm_get_interface(dev->intf);
3117        if (ret < 0)
3118                return ret;
3119
3120        mutex_lock(&dev->dev_mutex);
3121
3122        phy_start(net->phydev);
3123
3124        netif_dbg(dev, ifup, dev->net, "phy initialised successfully");
3125
3126        /* for Link Check */
3127        if (dev->urb_intr) {
3128                ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL);
3129                if (ret < 0) {
3130                        netif_err(dev, ifup, dev->net,
3131                                  "intr submit %d\n", ret);
3132                        goto done;
3133                }
3134        }
3135
3136        ret = lan78xx_flush_rx_fifo(dev);
3137        if (ret < 0)
3138                goto done;
3139        ret = lan78xx_flush_tx_fifo(dev);
3140        if (ret < 0)
3141                goto done;
3142
3143        ret = lan78xx_start_tx_path(dev);
3144        if (ret < 0)
3145                goto done;
3146        ret = lan78xx_start_rx_path(dev);
3147        if (ret < 0)
3148                goto done;
3149
3150        lan78xx_init_stats(dev);
3151
3152        set_bit(EVENT_DEV_OPEN, &dev->flags);
3153
3154        netif_start_queue(net);
3155
3156        dev->link_on = false;
3157
3158        napi_enable(&dev->napi);
3159
3160        lan78xx_defer_kevent(dev, EVENT_LINK_RESET);
3161done:
3162        mutex_unlock(&dev->dev_mutex);
3163
3164        usb_autopm_put_interface(dev->intf);
3165
3166        return ret;
3167}
3168
3169static void lan78xx_terminate_urbs(struct lan78xx_net *dev)
3170{
3171        DECLARE_WAIT_QUEUE_HEAD_ONSTACK(unlink_wakeup);
3172        DECLARE_WAITQUEUE(wait, current);
3173        int temp;
3174
3175        /* ensure there are no more active urbs */
3176        add_wait_queue(&unlink_wakeup, &wait);
3177        set_current_state(TASK_UNINTERRUPTIBLE);
3178        dev->wait = &unlink_wakeup;
3179        temp = unlink_urbs(dev, &dev->txq) + unlink_urbs(dev, &dev->rxq);
3180
3181        /* maybe wait for deletions to finish. */
3182        while (!skb_queue_empty(&dev->rxq) ||
3183               !skb_queue_empty(&dev->txq)) {
3184                schedule_timeout(msecs_to_jiffies(UNLINK_TIMEOUT_MS));
3185                set_current_state(TASK_UNINTERRUPTIBLE);
3186                netif_dbg(dev, ifdown, dev->net,
3187                          "waited for %d urb completions", temp);
3188        }
3189        set_current_state(TASK_RUNNING);
3190        dev->wait = NULL;
3191        remove_wait_queue(&unlink_wakeup, &wait);
3192
3193        /* empty Rx done, Rx overflow and Tx pend queues
3194         */
3195        while (!skb_queue_empty(&dev->rxq_done)) {
3196                struct sk_buff *skb = skb_dequeue(&dev->rxq_done);
3197
3198                lan78xx_release_rx_buf(dev, skb);
3199        }
3200
3201        skb_queue_purge(&dev->rxq_overflow);
3202        skb_queue_purge(&dev->txq_pend);
3203}
3204
3205static int lan78xx_stop(struct net_device *net)
3206{
3207        struct lan78xx_net *dev = netdev_priv(net);
3208
3209        netif_dbg(dev, ifup, dev->net, "stop device");
3210
3211        mutex_lock(&dev->dev_mutex);
3212
3213        if (timer_pending(&dev->stat_monitor))
3214                del_timer_sync(&dev->stat_monitor);
3215
3216        clear_bit(EVENT_DEV_OPEN, &dev->flags);
3217        netif_stop_queue(net);
3218        napi_disable(&dev->napi);
3219
3220        lan78xx_terminate_urbs(dev);
3221
3222        netif_info(dev, ifdown, dev->net,
3223                   "stop stats: rx/tx %lu/%lu, errs %lu/%lu\n",
3224                   net->stats.rx_packets, net->stats.tx_packets,
3225                   net->stats.rx_errors, net->stats.tx_errors);
3226
3227        /* ignore errors that occur stopping the Tx and Rx data paths */
3228        lan78xx_stop_tx_path(dev);
3229        lan78xx_stop_rx_path(dev);
3230
3231        if (net->phydev)
3232                phy_stop(net->phydev);
3233
3234        usb_kill_urb(dev->urb_intr);
3235
3236        /* deferred work (task, timer, softirq) must also stop.
3237         * can't flush_scheduled_work() until we drop rtnl (later),
3238         * else workers could deadlock; so make workers a NOP.
3239         */
3240        clear_bit(EVENT_TX_HALT, &dev->flags);
3241        clear_bit(EVENT_RX_HALT, &dev->flags);
3242        clear_bit(EVENT_LINK_RESET, &dev->flags);
3243        clear_bit(EVENT_STAT_UPDATE, &dev->flags);
3244
3245        cancel_delayed_work_sync(&dev->wq);
3246
3247        usb_autopm_put_interface(dev->intf);
3248
3249        mutex_unlock(&dev->dev_mutex);
3250
3251        return 0;
3252}
3253
3254static enum skb_state defer_bh(struct lan78xx_net *dev, struct sk_buff *skb,
3255                               struct sk_buff_head *list, enum skb_state state)
3256{
3257        unsigned long flags;
3258        enum skb_state old_state;
3259        struct skb_data *entry = (struct skb_data *)skb->cb;
3260
3261        spin_lock_irqsave(&list->lock, flags);
3262        old_state = entry->state;
3263        entry->state = state;
3264
3265        __skb_unlink(skb, list);
3266        spin_unlock(&list->lock);
3267        spin_lock(&dev->rxq_done.lock);
3268
3269        __skb_queue_tail(&dev->rxq_done, skb);
3270        if (skb_queue_len(&dev->rxq_done) == 1)
3271                napi_schedule(&dev->napi);
3272
3273        spin_unlock_irqrestore(&dev->rxq_done.lock, flags);
3274
3275        return old_state;
3276}
3277
3278static void tx_complete(struct urb *urb)
3279{
3280        struct sk_buff *skb = (struct sk_buff *)urb->context;
3281        struct skb_data *entry = (struct skb_data *)skb->cb;
3282        struct lan78xx_net *dev = entry->dev;
3283
3284        if (urb->status == 0) {
3285                dev->net->stats.tx_packets += entry->num_of_packet;
3286                dev->net->stats.tx_bytes += entry->length;
3287        } else {
3288                dev->net->stats.tx_errors += entry->num_of_packet;
3289
3290                switch (urb->status) {
3291                case -EPIPE:
3292                        lan78xx_defer_kevent(dev, EVENT_TX_HALT);
3293                        break;
3294
3295                /* software-driven interface shutdown */
3296                case -ECONNRESET:
3297                case -ESHUTDOWN:
3298                        netif_dbg(dev, tx_err, dev->net,
3299                                  "tx err interface gone %d\n",
3300                                  entry->urb->status);
3301                        break;
3302
3303                case -EPROTO:
3304                case -ETIME:
3305                case -EILSEQ:
3306                        netif_stop_queue(dev->net);
3307                        netif_dbg(dev, tx_err, dev->net,
3308                                  "tx err queue stopped %d\n",
3309                                  entry->urb->status);
3310                        break;
3311                default:
3312                        netif_dbg(dev, tx_err, dev->net,
3313                                  "unknown tx err %d\n",
3314                                  entry->urb->status);
3315                        break;
3316                }
3317        }
3318
3319        usb_autopm_put_interface_async(dev->intf);
3320
3321        skb_unlink(skb, &dev->txq);
3322
3323        lan78xx_release_tx_buf(dev, skb);
3324
3325        /* Re-schedule NAPI if Tx data pending but no URBs in progress.
3326         */
3327        if (skb_queue_empty(&dev->txq) &&
3328            !skb_queue_empty(&dev->txq_pend))
3329                napi_schedule(&dev->napi);
3330}
3331
3332static void lan78xx_queue_skb(struct sk_buff_head *list,
3333                              struct sk_buff *newsk, enum skb_state state)
3334{
3335        struct skb_data *entry = (struct skb_data *)newsk->cb;
3336
3337        __skb_queue_tail(list, newsk);
3338        entry->state = state;
3339}
3340
3341static unsigned int lan78xx_tx_urb_space(struct lan78xx_net *dev)
3342{
3343        return skb_queue_len(&dev->txq_free) * dev->tx_urb_size;
3344}
3345
3346static unsigned int lan78xx_tx_pend_data_len(struct lan78xx_net *dev)
3347{
3348        return dev->tx_pend_data_len;
3349}
3350
3351static void lan78xx_tx_pend_skb_add(struct lan78xx_net *dev,
3352                                    struct sk_buff *skb,
3353                                    unsigned int *tx_pend_data_len)
3354{
3355        unsigned long flags;
3356
3357        spin_lock_irqsave(&dev->txq_pend.lock, flags);
3358
3359        __skb_queue_tail(&dev->txq_pend, skb);
3360
3361        dev->tx_pend_data_len += skb->len;
3362        *tx_pend_data_len = dev->tx_pend_data_len;
3363
3364        spin_unlock_irqrestore(&dev->txq_pend.lock, flags);
3365}
3366
3367static void lan78xx_tx_pend_skb_head_add(struct lan78xx_net *dev,
3368                                         struct sk_buff *skb,
3369                                         unsigned int *tx_pend_data_len)
3370{
3371        unsigned long flags;
3372
3373        spin_lock_irqsave(&dev->txq_pend.lock, flags);
3374
3375        __skb_queue_head(&dev->txq_pend, skb);
3376
3377        dev->tx_pend_data_len += skb->len;
3378        *tx_pend_data_len = dev->tx_pend_data_len;
3379
3380        spin_unlock_irqrestore(&dev->txq_pend.lock, flags);
3381}
3382
3383static void lan78xx_tx_pend_skb_get(struct lan78xx_net *dev,
3384                                    struct sk_buff **skb,
3385                                    unsigned int *tx_pend_data_len)
3386{
3387        unsigned long flags;
3388
3389        spin_lock_irqsave(&dev->txq_pend.lock, flags);
3390
3391        *skb = __skb_dequeue(&dev->txq_pend);
3392        if (*skb)
3393                dev->tx_pend_data_len -= (*skb)->len;
3394        *tx_pend_data_len = dev->tx_pend_data_len;
3395
3396        spin_unlock_irqrestore(&dev->txq_pend.lock, flags);
3397}
3398
3399static netdev_tx_t
3400lan78xx_start_xmit(struct sk_buff *skb, struct net_device *net)
3401{
3402        struct lan78xx_net *dev = netdev_priv(net);
3403        unsigned int tx_pend_data_len;
3404
3405        if (test_bit(EVENT_DEV_ASLEEP, &dev->flags))
3406                schedule_delayed_work(&dev->wq, 0);
3407
3408        skb_tx_timestamp(skb);
3409
3410        lan78xx_tx_pend_skb_add(dev, skb, &tx_pend_data_len);
3411
3412        /* Set up a Tx URB if none is in progress */
3413
3414        if (skb_queue_empty(&dev->txq))
3415                napi_schedule(&dev->napi);
3416
3417        /* Stop stack Tx queue if we have enough data to fill
3418         * all the free Tx URBs.
3419         */
3420        if (tx_pend_data_len > lan78xx_tx_urb_space(dev)) {
3421                netif_stop_queue(net);
3422
3423                netif_dbg(dev, hw, dev->net, "tx data len: %u, urb space %u",
3424                          tx_pend_data_len, lan78xx_tx_urb_space(dev));
3425
3426                /* Kick off transmission of pending data */
3427
3428                if (!skb_queue_empty(&dev->txq_free))
3429                        napi_schedule(&dev->napi);
3430        }
3431
3432        return NETDEV_TX_OK;
3433}
3434
3435static int lan78xx_bind(struct lan78xx_net *dev, struct usb_interface *intf)
3436{
3437        struct lan78xx_priv *pdata = NULL;
3438        int ret;
3439        int i;
3440
3441        dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL);
3442
3443        pdata = (struct lan78xx_priv *)(dev->data[0]);
3444        if (!pdata) {
3445                netdev_warn(dev->net, "Unable to allocate lan78xx_priv");
3446                return -ENOMEM;
3447        }
3448
3449        pdata->dev = dev;
3450
3451        spin_lock_init(&pdata->rfe_ctl_lock);
3452        mutex_init(&pdata->dataport_mutex);
3453
3454        INIT_WORK(&pdata->set_multicast, lan78xx_deferred_multicast_write);
3455
3456        for (i = 0; i < DP_SEL_VHF_VLAN_LEN; i++)
3457                pdata->vlan_table[i] = 0;
3458
3459        INIT_WORK(&pdata->set_vlan, lan78xx_deferred_vlan_write);
3460
3461        dev->net->features = 0;
3462
3463        if (DEFAULT_TX_CSUM_ENABLE)
3464                dev->net->features |= NETIF_F_HW_CSUM;
3465
3466        if (DEFAULT_RX_CSUM_ENABLE)
3467                dev->net->features |= NETIF_F_RXCSUM;
3468
3469        if (DEFAULT_TSO_CSUM_ENABLE)
3470                dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG;
3471
3472        if (DEFAULT_VLAN_RX_OFFLOAD)
3473                dev->net->features |= NETIF_F_HW_VLAN_CTAG_RX;
3474
3475        if (DEFAULT_VLAN_FILTER_ENABLE)
3476                dev->net->features |= NETIF_F_HW_VLAN_CTAG_FILTER;
3477
3478        dev->net->hw_features = dev->net->features;
3479
3480        ret = lan78xx_setup_irq_domain(dev);
3481        if (ret < 0) {
3482                netdev_warn(dev->net,
3483                            "lan78xx_setup_irq_domain() failed : %d", ret);
3484                goto out1;
3485        }
3486
3487        /* Init all registers */
3488        ret = lan78xx_reset(dev);
3489        if (ret) {
3490                netdev_warn(dev->net, "Registers INIT FAILED....");
3491                goto out2;
3492        }
3493
3494        ret = lan78xx_mdio_init(dev);
3495        if (ret) {
3496                netdev_warn(dev->net, "MDIO INIT FAILED.....");
3497                goto out2;
3498        }
3499
3500        dev->net->flags |= IFF_MULTICAST;
3501
3502        pdata->wol = WAKE_MAGIC;
3503
3504        return ret;
3505
3506out2:
3507        lan78xx_remove_irq_domain(dev);
3508
3509out1:
3510        netdev_warn(dev->net, "Bind routine FAILED");
3511        cancel_work_sync(&pdata->set_multicast);
3512        cancel_work_sync(&pdata->set_vlan);
3513        kfree(pdata);
3514        return ret;
3515}
3516
3517static void lan78xx_unbind(struct lan78xx_net *dev, struct usb_interface *intf)
3518{
3519        struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
3520
3521        lan78xx_remove_irq_domain(dev);
3522
3523        lan78xx_remove_mdio(dev);
3524
3525        if (pdata) {
3526                cancel_work_sync(&pdata->set_multicast);
3527                cancel_work_sync(&pdata->set_vlan);
3528                netif_dbg(dev, ifdown, dev->net, "free pdata");
3529                kfree(pdata);
3530                pdata = NULL;
3531                dev->data[0] = 0;
3532        }
3533}
3534
3535static void lan78xx_rx_csum_offload(struct lan78xx_net *dev,
3536                                    struct sk_buff *skb,
3537                                    u32 rx_cmd_a, u32 rx_cmd_b)
3538{
3539        /* HW Checksum offload appears to be flawed if used when not stripping
3540         * VLAN headers. Drop back to S/W checksums under these conditions.
3541         */
3542        if (!(dev->net->features & NETIF_F_RXCSUM) ||
3543            unlikely(rx_cmd_a & RX_CMD_A_ICSM_) ||
3544            ((rx_cmd_a & RX_CMD_A_FVTG_) &&
3545             !(dev->net->features & NETIF_F_HW_VLAN_CTAG_RX))) {
3546                skb->ip_summed = CHECKSUM_NONE;
3547        } else {
3548                skb->csum = ntohs((u16)(rx_cmd_b >> RX_CMD_B_CSUM_SHIFT_));
3549                skb->ip_summed = CHECKSUM_COMPLETE;
3550        }
3551}
3552
3553static void lan78xx_rx_vlan_offload(struct lan78xx_net *dev,
3554                                    struct sk_buff *skb,
3555                                    u32 rx_cmd_a, u32 rx_cmd_b)
3556{
3557        if ((dev->net->features & NETIF_F_HW_VLAN_CTAG_RX) &&
3558            (rx_cmd_a & RX_CMD_A_FVTG_))
3559                __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
3560                                       (rx_cmd_b & 0xffff));
3561}
3562
3563static void lan78xx_skb_return(struct lan78xx_net *dev, struct sk_buff *skb)
3564{
3565        dev->net->stats.rx_packets++;
3566        dev->net->stats.rx_bytes += skb->len;
3567
3568        skb->protocol = eth_type_trans(skb, dev->net);
3569
3570        netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n",
3571                  skb->len + sizeof(struct ethhdr), skb->protocol);
3572        memset(skb->cb, 0, sizeof(struct skb_data));
3573
3574        if (skb_defer_rx_timestamp(skb))
3575                return;
3576
3577        napi_gro_receive(&dev->napi, skb);
3578}
3579
3580static int lan78xx_rx(struct lan78xx_net *dev, struct sk_buff *skb,
3581                      int budget, int *work_done)
3582{
3583        if (skb->len < RX_SKB_MIN_LEN)
3584                return 0;
3585
3586        /* Extract frames from the URB buffer and pass each one to
3587         * the stack in a new NAPI SKB.
3588         */
3589        while (skb->len > 0) {
3590                u32 rx_cmd_a, rx_cmd_b, align_count, size;
3591                u16 rx_cmd_c;
3592                unsigned char *packet;
3593
3594                rx_cmd_a = get_unaligned_le32(skb->data);
3595                skb_pull(skb, sizeof(rx_cmd_a));
3596
3597                rx_cmd_b = get_unaligned_le32(skb->data);
3598                skb_pull(skb, sizeof(rx_cmd_b));
3599
3600                rx_cmd_c = get_unaligned_le16(skb->data);
3601                skb_pull(skb, sizeof(rx_cmd_c));
3602
3603                packet = skb->data;
3604
3605                /* get the packet length */
3606                size = (rx_cmd_a & RX_CMD_A_LEN_MASK_);
3607                align_count = (4 - ((size + RXW_PADDING) % 4)) % 4;
3608
3609                if (unlikely(rx_cmd_a & RX_CMD_A_RED_)) {
3610                        netif_dbg(dev, rx_err, dev->net,
3611                                  "Error rx_cmd_a=0x%08x", rx_cmd_a);
3612                } else {
3613                        u32 frame_len = size - ETH_FCS_LEN;
3614                        struct sk_buff *skb2;
3615
3616                        skb2 = napi_alloc_skb(&dev->napi, frame_len);
3617                        if (!skb2)
3618                                return 0;
3619
3620                        memcpy(skb2->data, packet, frame_len);
3621
3622                        skb_put(skb2, frame_len);
3623
3624                        lan78xx_rx_csum_offload(dev, skb2, rx_cmd_a, rx_cmd_b);
3625                        lan78xx_rx_vlan_offload(dev, skb2, rx_cmd_a, rx_cmd_b);
3626
3627                        /* Processing of the URB buffer must complete once
3628                         * it has started. If the NAPI work budget is exhausted
3629                         * while frames remain they are added to the overflow
3630                         * queue for delivery in the next NAPI polling cycle.
3631                         */
3632                        if (*work_done < budget) {
3633                                lan78xx_skb_return(dev, skb2);
3634                                ++(*work_done);
3635                        } else {
3636                                skb_queue_tail(&dev->rxq_overflow, skb2);
3637                        }
3638                }
3639
3640                skb_pull(skb, size);
3641
3642                /* skip padding bytes before the next frame starts */
3643                if (skb->len)
3644                        skb_pull(skb, align_count);
3645        }
3646
3647        return 1;
3648}
3649
3650static inline void rx_process(struct lan78xx_net *dev, struct sk_buff *skb,
3651                              int budget, int *work_done)
3652{
3653        if (!lan78xx_rx(dev, skb, budget, work_done)) {
3654                netif_dbg(dev, rx_err, dev->net, "drop\n");
3655                dev->net->stats.rx_errors++;
3656        }
3657}
3658
3659static void rx_complete(struct urb *urb)
3660{
3661        struct sk_buff  *skb = (struct sk_buff *)urb->context;
3662        struct skb_data *entry = (struct skb_data *)skb->cb;
3663        struct lan78xx_net *dev = entry->dev;
3664        int urb_status = urb->status;
3665        enum skb_state state;
3666
3667        netif_dbg(dev, rx_status, dev->net,
3668                  "rx done: status %d", urb->status);
3669
3670        skb_put(skb, urb->actual_length);
3671        state = rx_done;
3672
3673        if (urb != entry->urb)
3674                netif_warn(dev, rx_err, dev->net, "URB pointer mismatch");
3675
3676        switch (urb_status) {
3677        case 0:
3678                if (skb->len < RX_SKB_MIN_LEN) {
3679                        state = rx_cleanup;
3680                        dev->net->stats.rx_errors++;
3681                        dev->net->stats.rx_length_errors++;
3682                        netif_dbg(dev, rx_err, dev->net,
3683                                  "rx length %d\n", skb->len);
3684                }
3685                usb_mark_last_busy(dev->udev);
3686                break;
3687        case -EPIPE:
3688                dev->net->stats.rx_errors++;
3689                lan78xx_defer_kevent(dev, EVENT_RX_HALT);
3690                fallthrough;
3691        case -ECONNRESET:                               /* async unlink */
3692        case -ESHUTDOWN:                                /* hardware gone */
3693                netif_dbg(dev, ifdown, dev->net,
3694                          "rx shutdown, code %d\n", urb_status);
3695                state = rx_cleanup;
3696                break;
3697        case -EPROTO:
3698        case -ETIME:
3699        case -EILSEQ:
3700                dev->net->stats.rx_errors++;
3701                state = rx_cleanup;
3702                break;
3703
3704        /* data overrun ... flush fifo? */
3705        case -EOVERFLOW:
3706                dev->net->stats.rx_over_errors++;
3707                fallthrough;
3708
3709        default:
3710                state = rx_cleanup;
3711                dev->net->stats.rx_errors++;
3712                netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status);
3713                break;
3714        }
3715
3716        state = defer_bh(dev, skb, &dev->rxq, state);
3717}
3718
3719static int rx_submit(struct lan78xx_net *dev, struct sk_buff *skb, gfp_t flags)
3720{
3721        struct skb_data *entry = (struct skb_data *)skb->cb;
3722        size_t size = dev->rx_urb_size;
3723        struct urb *urb = entry->urb;
3724        unsigned long lockflags;
3725        int ret = 0;
3726
3727        usb_fill_bulk_urb(urb, dev->udev, dev->pipe_in,
3728                          skb->data, size, rx_complete, skb);
3729
3730        spin_lock_irqsave(&dev->rxq.lock, lockflags);
3731
3732        if (netif_device_present(dev->net) &&
3733            netif_running(dev->net) &&
3734            !test_bit(EVENT_RX_HALT, &dev->flags) &&
3735            !test_bit(EVENT_DEV_ASLEEP, &dev->flags)) {
3736                ret = usb_submit_urb(urb, flags);
3737                switch (ret) {
3738                case 0:
3739                        lan78xx_queue_skb(&dev->rxq, skb, rx_start);
3740                        break;
3741                case -EPIPE:
3742                        lan78xx_defer_kevent(dev, EVENT_RX_HALT);
3743                        break;
3744                case -ENODEV:
3745                case -ENOENT:
3746                        netif_dbg(dev, ifdown, dev->net, "device gone\n");
3747                        netif_device_detach(dev->net);
3748                        break;
3749                case -EHOSTUNREACH:
3750                        ret = -ENOLINK;
3751                        napi_schedule(&dev->napi);
3752                        break;
3753                default:
3754                        netif_dbg(dev, rx_err, dev->net,
3755                                  "rx submit, %d\n", ret);
3756                        napi_schedule(&dev->napi);
3757                        break;
3758                }
3759        } else {
3760                netif_dbg(dev, ifdown, dev->net, "rx: stopped\n");
3761                ret = -ENOLINK;
3762        }
3763        spin_unlock_irqrestore(&dev->rxq.lock, lockflags);
3764
3765        if (ret)
3766                lan78xx_release_rx_buf(dev, skb);
3767
3768        return ret;
3769}
3770
3771static void lan78xx_rx_urb_submit_all(struct lan78xx_net *dev)
3772{
3773        struct sk_buff *rx_buf;
3774
3775        /* Ensure the maximum number of Rx URBs is submitted
3776         */
3777        while ((rx_buf = lan78xx_get_rx_buf(dev)) != NULL) {
3778                if (rx_submit(dev, rx_buf, GFP_ATOMIC) != 0)
3779                        break;
3780        }
3781}
3782
3783static void lan78xx_rx_urb_resubmit(struct lan78xx_net *dev,
3784                                    struct sk_buff *rx_buf)
3785{
3786        /* reset SKB data pointers */
3787
3788        rx_buf->data = rx_buf->head;
3789        skb_reset_tail_pointer(rx_buf);
3790        rx_buf->len = 0;
3791        rx_buf->data_len = 0;
3792
3793        rx_submit(dev, rx_buf, GFP_ATOMIC);
3794}
3795
3796static void lan78xx_fill_tx_cmd_words(struct sk_buff *skb, u8 *buffer)
3797{
3798        u32 tx_cmd_a;
3799        u32 tx_cmd_b;
3800
3801        tx_cmd_a = (u32)(skb->len & TX_CMD_A_LEN_MASK_) | TX_CMD_A_FCS_;
3802
3803        if (skb->ip_summed == CHECKSUM_PARTIAL)
3804                tx_cmd_a |= TX_CMD_A_IPE_ | TX_CMD_A_TPE_;
3805
3806        tx_cmd_b = 0;
3807        if (skb_is_gso(skb)) {
3808                u16 mss = max(skb_shinfo(skb)->gso_size, TX_CMD_B_MSS_MIN_);
3809
3810                tx_cmd_b = (mss << TX_CMD_B_MSS_SHIFT_) & TX_CMD_B_MSS_MASK_;
3811
3812                tx_cmd_a |= TX_CMD_A_LSO_;
3813        }
3814
3815        if (skb_vlan_tag_present(skb)) {
3816                tx_cmd_a |= TX_CMD_A_IVTG_;
3817                tx_cmd_b |= skb_vlan_tag_get(skb) & TX_CMD_B_VTAG_MASK_;
3818        }
3819
3820        put_unaligned_le32(tx_cmd_a, buffer);
3821        put_unaligned_le32(tx_cmd_b, buffer + 4);
3822}
3823
3824static struct skb_data *lan78xx_tx_buf_fill(struct lan78xx_net *dev,
3825                                            struct sk_buff *tx_buf)
3826{
3827        struct skb_data *entry = (struct skb_data *)tx_buf->cb;
3828        int remain = dev->tx_urb_size;
3829        u8 *tx_data = tx_buf->data;
3830        u32 urb_len = 0;
3831
3832        entry->num_of_packet = 0;
3833        entry->length = 0;
3834
3835        /* Work through the pending SKBs and copy the data of each SKB into
3836         * the URB buffer if there room for all the SKB data.
3837         *
3838         * There must be at least DST+SRC+TYPE in the SKB (with padding enabled)
3839         */
3840        while (remain >= TX_SKB_MIN_LEN) {
3841                unsigned int pending_bytes;
3842                unsigned int align_bytes;
3843                struct sk_buff *skb;
3844                unsigned int len;
3845
3846                lan78xx_tx_pend_skb_get(dev, &skb, &pending_bytes);
3847
3848                if (!skb)
3849                        break;
3850
3851                align_bytes = (TX_ALIGNMENT - (urb_len % TX_ALIGNMENT)) %
3852                              TX_ALIGNMENT;
3853                len = align_bytes + TX_CMD_LEN + skb->len;
3854                if (len > remain) {
3855                        lan78xx_tx_pend_skb_head_add(dev, skb, &pending_bytes);
3856                        break;
3857                }
3858
3859                tx_data += align_bytes;
3860
3861                lan78xx_fill_tx_cmd_words(skb, tx_data);
3862                tx_data += TX_CMD_LEN;
3863
3864                len = skb->len;
3865                if (skb_copy_bits(skb, 0, tx_data, len) < 0) {
3866                        struct net_device_stats *stats = &dev->net->stats;
3867
3868                        stats->tx_dropped++;
3869                        dev_kfree_skb_any(skb);
3870                        tx_data -= TX_CMD_LEN;
3871                        continue;
3872                }
3873
3874                tx_data += len;
3875                entry->length += len;
3876                entry->num_of_packet += skb_shinfo(skb)->gso_segs ?: 1;
3877
3878                dev_kfree_skb_any(skb);
3879
3880                urb_len = (u32)(tx_data - (u8 *)tx_buf->data);
3881
3882                remain = dev->tx_urb_size - urb_len;
3883        }
3884
3885        skb_put(tx_buf, urb_len);
3886
3887        return entry;
3888}
3889
3890static void lan78xx_tx_bh(struct lan78xx_net *dev)
3891{
3892        int ret;
3893
3894        /* Start the stack Tx queue if it was stopped
3895         */
3896        netif_tx_lock(dev->net);
3897        if (netif_queue_stopped(dev->net)) {
3898                if (lan78xx_tx_pend_data_len(dev) < lan78xx_tx_urb_space(dev))
3899                        netif_wake_queue(dev->net);
3900        }
3901        netif_tx_unlock(dev->net);
3902
3903        /* Go through the Tx pending queue and set up URBs to transfer
3904         * the data to the device. Stop if no more pending data or URBs,
3905         * or if an error occurs when a URB is submitted.
3906         */
3907        do {
3908                struct skb_data *entry;
3909                struct sk_buff *tx_buf;
3910                unsigned long flags;
3911
3912                if (skb_queue_empty(&dev->txq_pend))
3913                        break;
3914
3915                tx_buf = lan78xx_get_tx_buf(dev);
3916                if (!tx_buf)
3917                        break;
3918
3919                entry = lan78xx_tx_buf_fill(dev, tx_buf);
3920
3921                spin_lock_irqsave(&dev->txq.lock, flags);
3922                ret = usb_autopm_get_interface_async(dev->intf);
3923                if (ret < 0) {
3924                        spin_unlock_irqrestore(&dev->txq.lock, flags);
3925                        goto out;
3926                }
3927
3928                usb_fill_bulk_urb(entry->urb, dev->udev, dev->pipe_out,
3929                                  tx_buf->data, tx_buf->len, tx_complete,
3930                                  tx_buf);
3931
3932                if (tx_buf->len % dev->maxpacket == 0) {
3933                        /* send USB_ZERO_PACKET */
3934                        entry->urb->transfer_flags |= URB_ZERO_PACKET;
3935                }
3936
3937#ifdef CONFIG_PM
3938                /* if device is asleep stop outgoing packet processing */
3939                if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) {
3940                        usb_anchor_urb(entry->urb, &dev->deferred);
3941                        netif_stop_queue(dev->net);
3942                        spin_unlock_irqrestore(&dev->txq.lock, flags);
3943                        netdev_dbg(dev->net,
3944                                   "Delaying transmission for resumption\n");
3945                        return;
3946                }
3947#endif
3948                ret = usb_submit_urb(entry->urb, GFP_ATOMIC);
3949                switch (ret) {
3950                case 0:
3951                        netif_trans_update(dev->net);
3952                        lan78xx_queue_skb(&dev->txq, tx_buf, tx_start);
3953                        break;
3954                case -EPIPE:
3955                        netif_stop_queue(dev->net);
3956                        lan78xx_defer_kevent(dev, EVENT_TX_HALT);
3957                        usb_autopm_put_interface_async(dev->intf);
3958                        break;
3959                case -ENODEV:
3960                case -ENOENT:
3961                        netif_dbg(dev, tx_err, dev->net,
3962                                  "tx submit urb err %d (disconnected?)", ret);
3963                        netif_device_detach(dev->net);
3964                        break;
3965                default:
3966                        usb_autopm_put_interface_async(dev->intf);
3967                        netif_dbg(dev, tx_err, dev->net,
3968                                  "tx submit urb err %d\n", ret);
3969                        break;
3970                }
3971
3972                spin_unlock_irqrestore(&dev->txq.lock, flags);
3973
3974                if (ret) {
3975                        netdev_warn(dev->net, "failed to tx urb %d\n", ret);
3976out:
3977                        dev->net->stats.tx_dropped += entry->num_of_packet;
3978                        lan78xx_release_tx_buf(dev, tx_buf);
3979                }
3980        } while (ret == 0);
3981}
3982
3983static int lan78xx_bh(struct lan78xx_net *dev, int budget)
3984{
3985        struct sk_buff_head done;
3986        struct sk_buff *rx_buf;
3987        struct skb_data *entry;
3988        unsigned long flags;
3989        int work_done = 0;
3990
3991        /* Pass frames received in the last NAPI cycle before
3992         * working on newly completed URBs.
3993         */
3994        while (!skb_queue_empty(&dev->rxq_overflow)) {
3995                lan78xx_skb_return(dev, skb_dequeue(&dev->rxq_overflow));
3996                ++work_done;
3997        }
3998
3999        /* Take a snapshot of the done queue and move items to a
4000         * temporary queue. Rx URB completions will continue to add
4001         * to the done queue.
4002         */
4003        __skb_queue_head_init(&done);
4004
4005        spin_lock_irqsave(&dev->rxq_done.lock, flags);
4006        skb_queue_splice_init(&dev->rxq_done, &done);
4007        spin_unlock_irqrestore(&dev->rxq_done.lock, flags);
4008
4009        /* Extract receive frames from completed URBs and
4010         * pass them to the stack. Re-submit each completed URB.
4011         */
4012        while ((work_done < budget) &&
4013               (rx_buf = __skb_dequeue(&done))) {
4014                entry = (struct skb_data *)(rx_buf->cb);
4015                switch (entry->state) {
4016                case rx_done:
4017                        rx_process(dev, rx_buf, budget, &work_done);
4018                        break;
4019                case rx_cleanup:
4020                        break;
4021                default:
4022                        netdev_dbg(dev->net, "rx buf state %d\n",
4023                                   entry->state);
4024                        break;
4025                }
4026
4027                lan78xx_rx_urb_resubmit(dev, rx_buf);
4028        }
4029
4030        /* If budget was consumed before processing all the URBs put them
4031         * back on the front of the done queue. They will be first to be
4032         * processed in the next NAPI cycle.
4033         */
4034        spin_lock_irqsave(&dev->rxq_done.lock, flags);
4035        skb_queue_splice(&done, &dev->rxq_done);
4036        spin_unlock_irqrestore(&dev->rxq_done.lock, flags);
4037
4038        if (netif_device_present(dev->net) && netif_running(dev->net)) {
4039                /* reset update timer delta */
4040                if (timer_pending(&dev->stat_monitor) && (dev->delta != 1)) {
4041                        dev->delta = 1;
4042                        mod_timer(&dev->stat_monitor,
4043                                  jiffies + STAT_UPDATE_TIMER);
4044                }
4045
4046                /* Submit all free Rx URBs */
4047
4048                if (!test_bit(EVENT_RX_HALT, &dev->flags))
4049                        lan78xx_rx_urb_submit_all(dev);
4050
4051                /* Submit new Tx URBs */
4052
4053                lan78xx_tx_bh(dev);
4054        }
4055
4056        return work_done;
4057}
4058
4059static int lan78xx_poll(struct napi_struct *napi, int budget)
4060{
4061        struct lan78xx_net *dev = container_of(napi, struct lan78xx_net, napi);
4062        int result = budget;
4063        int work_done;
4064
4065        /* Don't do any work if the device is suspended */
4066
4067        if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) {
4068                napi_complete_done(napi, 0);
4069                return 0;
4070        }
4071
4072        /* Process completed URBs and submit new URBs */
4073
4074        work_done = lan78xx_bh(dev, budget);
4075
4076        if (work_done < budget) {
4077                napi_complete_done(napi, work_done);
4078
4079                /* Start a new polling cycle if data was received or
4080                 * data is waiting to be transmitted.
4081                 */
4082                if (!skb_queue_empty(&dev->rxq_done)) {
4083                        napi_schedule(napi);
4084                } else if (netif_carrier_ok(dev->net)) {
4085                        if (skb_queue_empty(&dev->txq) &&
4086                            !skb_queue_empty(&dev->txq_pend)) {
4087                                napi_schedule(napi);
4088                        } else {
4089                                netif_tx_lock(dev->net);
4090                                if (netif_queue_stopped(dev->net)) {
4091                                        netif_wake_queue(dev->net);
4092                                        napi_schedule(napi);
4093                                }
4094                                netif_tx_unlock(dev->net);
4095                        }
4096                }
4097                result = work_done;
4098        }
4099
4100        return result;
4101}
4102
4103static void lan78xx_delayedwork(struct work_struct *work)
4104{
4105        int status;
4106        struct lan78xx_net *dev;
4107
4108        dev = container_of(work, struct lan78xx_net, wq.work);
4109
4110        if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags))
4111                return;
4112
4113        if (usb_autopm_get_interface(dev->intf) < 0)
4114                return;
4115
4116        if (test_bit(EVENT_TX_HALT, &dev->flags)) {
4117                unlink_urbs(dev, &dev->txq);
4118
4119                status = usb_clear_halt(dev->udev, dev->pipe_out);
4120                if (status < 0 &&
4121                    status != -EPIPE &&
4122                    status != -ESHUTDOWN) {
4123                        if (netif_msg_tx_err(dev))
4124                                netdev_err(dev->net,
4125                                           "can't clear tx halt, status %d\n",
4126                                           status);
4127                } else {
4128                        clear_bit(EVENT_TX_HALT, &dev->flags);
4129                        if (status != -ESHUTDOWN)
4130                                netif_wake_queue(dev->net);
4131                }
4132        }
4133
4134        if (test_bit(EVENT_RX_HALT, &dev->flags)) {
4135                unlink_urbs(dev, &dev->rxq);
4136                status = usb_clear_halt(dev->udev, dev->pipe_in);
4137                if (status < 0 &&
4138                    status != -EPIPE &&
4139                    status != -ESHUTDOWN) {
4140                        if (netif_msg_rx_err(dev))
4141                                netdev_err(dev->net,
4142                                           "can't clear rx halt, status %d\n",
4143                                           status);
4144                } else {
4145                        clear_bit(EVENT_RX_HALT, &dev->flags);
4146                        napi_schedule(&dev->napi);
4147                }
4148        }
4149
4150        if (test_bit(EVENT_LINK_RESET, &dev->flags)) {
4151                int ret = 0;
4152
4153                clear_bit(EVENT_LINK_RESET, &dev->flags);
4154                if (lan78xx_link_reset(dev) < 0) {
4155                        netdev_info(dev->net, "link reset failed (%d)\n",
4156                                    ret);
4157                }
4158        }
4159
4160        if (test_bit(EVENT_STAT_UPDATE, &dev->flags)) {
4161                lan78xx_update_stats(dev);
4162
4163                clear_bit(EVENT_STAT_UPDATE, &dev->flags);
4164
4165                mod_timer(&dev->stat_monitor,
4166                          jiffies + (STAT_UPDATE_TIMER * dev->delta));
4167
4168                dev->delta = min((dev->delta * 2), 50);
4169        }
4170
4171        usb_autopm_put_interface(dev->intf);
4172}
4173
4174static void intr_complete(struct urb *urb)
4175{
4176        struct lan78xx_net *dev = urb->context;
4177        int status = urb->status;
4178
4179        switch (status) {
4180        /* success */
4181        case 0:
4182                lan78xx_status(dev, urb);
4183                break;
4184
4185        /* software-driven interface shutdown */
4186        case -ENOENT:                   /* urb killed */
4187        case -ENODEV:                   /* hardware gone */
4188        case -ESHUTDOWN:                /* hardware gone */
4189                netif_dbg(dev, ifdown, dev->net,
4190                          "intr shutdown, code %d\n", status);
4191                return;
4192
4193        /* NOTE:  not throttling like RX/TX, since this endpoint
4194         * already polls infrequently
4195         */
4196        default:
4197                netdev_dbg(dev->net, "intr status %d\n", status);
4198                break;
4199        }
4200
4201        if (!netif_device_present(dev->net) ||
4202            !netif_running(dev->net)) {
4203                netdev_warn(dev->net, "not submitting new status URB");
4204                return;
4205        }
4206
4207        memset(urb->transfer_buffer, 0, urb->transfer_buffer_length);
4208        status = usb_submit_urb(urb, GFP_ATOMIC);
4209
4210        switch (status) {
4211        case  0:
4212                break;
4213        case -ENODEV:
4214        case -ENOENT:
4215                netif_dbg(dev, timer, dev->net,
4216                          "intr resubmit %d (disconnect?)", status);
4217                netif_device_detach(dev->net);
4218                break;
4219        default:
4220                netif_err(dev, timer, dev->net,
4221                          "intr resubmit --> %d\n", status);
4222                break;
4223        }
4224}
4225
4226static void lan78xx_disconnect(struct usb_interface *intf)
4227{
4228        struct lan78xx_net *dev;
4229        struct usb_device *udev;
4230        struct net_device *net;
4231        struct phy_device *phydev;
4232
4233        dev = usb_get_intfdata(intf);
4234        usb_set_intfdata(intf, NULL);
4235        if (!dev)
4236                return;
4237
4238        set_bit(EVENT_DEV_DISCONNECT, &dev->flags);
4239
4240        netif_napi_del(&dev->napi);
4241
4242        udev = interface_to_usbdev(intf);
4243        net = dev->net;
4244
4245        unregister_netdev(net);
4246
4247        cancel_delayed_work_sync(&dev->wq);
4248
4249        phydev = net->phydev;
4250
4251        phy_unregister_fixup_for_uid(PHY_KSZ9031RNX, 0xfffffff0);
4252        phy_unregister_fixup_for_uid(PHY_LAN8835, 0xfffffff0);
4253
4254        phy_disconnect(net->phydev);
4255
4256        if (phy_is_pseudo_fixed_link(phydev))
4257                fixed_phy_unregister(phydev);
4258
4259        usb_scuttle_anchored_urbs(&dev->deferred);
4260
4261        if (timer_pending(&dev->stat_monitor))
4262                del_timer_sync(&dev->stat_monitor);
4263
4264        lan78xx_unbind(dev, intf);
4265
4266        lan78xx_free_tx_resources(dev);
4267        lan78xx_free_rx_resources(dev);
4268
4269        usb_kill_urb(dev->urb_intr);
4270        usb_free_urb(dev->urb_intr);
4271
4272        free_netdev(net);
4273        usb_put_dev(udev);
4274}
4275
4276static void lan78xx_tx_timeout(struct net_device *net, unsigned int txqueue)
4277{
4278        struct lan78xx_net *dev = netdev_priv(net);
4279
4280        unlink_urbs(dev, &dev->txq);
4281        napi_schedule(&dev->napi);
4282}
4283
4284static netdev_features_t lan78xx_features_check(struct sk_buff *skb,
4285                                                struct net_device *netdev,
4286                                                netdev_features_t features)
4287{
4288        struct lan78xx_net *dev = netdev_priv(netdev);
4289
4290        if (skb->len > LAN78XX_TSO_SIZE(dev))
4291                features &= ~NETIF_F_GSO_MASK;
4292
4293        features = vlan_features_check(skb, features);
4294        features = vxlan_features_check(skb, features);
4295
4296        return features;
4297}
4298
4299static const struct net_device_ops lan78xx_netdev_ops = {
4300        .ndo_open               = lan78xx_open,
4301        .ndo_stop               = lan78xx_stop,
4302        .ndo_start_xmit         = lan78xx_start_xmit,
4303        .ndo_tx_timeout         = lan78xx_tx_timeout,
4304        .ndo_change_mtu         = lan78xx_change_mtu,
4305        .ndo_set_mac_address    = lan78xx_set_mac_addr,
4306        .ndo_validate_addr      = eth_validate_addr,
4307        .ndo_eth_ioctl          = phy_do_ioctl_running,
4308        .ndo_set_rx_mode        = lan78xx_set_multicast,
4309        .ndo_set_features       = lan78xx_set_features,
4310        .ndo_vlan_rx_add_vid    = lan78xx_vlan_rx_add_vid,
4311        .ndo_vlan_rx_kill_vid   = lan78xx_vlan_rx_kill_vid,
4312        .ndo_features_check     = lan78xx_features_check,
4313};
4314
4315static void lan78xx_stat_monitor(struct timer_list *t)
4316{
4317        struct lan78xx_net *dev = from_timer(dev, t, stat_monitor);
4318
4319        lan78xx_defer_kevent(dev, EVENT_STAT_UPDATE);
4320}
4321
4322static int lan78xx_probe(struct usb_interface *intf,
4323                         const struct usb_device_id *id)
4324{
4325        struct usb_host_endpoint *ep_blkin, *ep_blkout, *ep_intr;
4326        struct lan78xx_net *dev;
4327        struct net_device *netdev;
4328        struct usb_device *udev;
4329        int ret;
4330        unsigned int maxp;
4331        unsigned int period;
4332        u8 *buf = NULL;
4333
4334        udev = interface_to_usbdev(intf);
4335        udev = usb_get_dev(udev);
4336
4337        netdev = alloc_etherdev(sizeof(struct lan78xx_net));
4338        if (!netdev) {
4339                dev_err(&intf->dev, "Error: OOM\n");
4340                ret = -ENOMEM;
4341                goto out1;
4342        }
4343
4344        /* netdev_printk() needs this */
4345        SET_NETDEV_DEV(netdev, &intf->dev);
4346
4347        dev = netdev_priv(netdev);
4348        dev->udev = udev;
4349        dev->intf = intf;
4350        dev->net = netdev;
4351        dev->msg_enable = netif_msg_init(msg_level, NETIF_MSG_DRV
4352                                        | NETIF_MSG_PROBE | NETIF_MSG_LINK);
4353
4354        skb_queue_head_init(&dev->rxq);
4355        skb_queue_head_init(&dev->txq);
4356        skb_queue_head_init(&dev->rxq_done);
4357        skb_queue_head_init(&dev->txq_pend);
4358        skb_queue_head_init(&dev->rxq_overflow);
4359        mutex_init(&dev->phy_mutex);
4360        mutex_init(&dev->dev_mutex);
4361
4362        ret = lan78xx_urb_config_init(dev);
4363        if (ret < 0)
4364                goto out2;
4365
4366        ret = lan78xx_alloc_tx_resources(dev);
4367        if (ret < 0)
4368                goto out2;
4369
4370        ret = lan78xx_alloc_rx_resources(dev);
4371        if (ret < 0)
4372                goto out3;
4373
4374        /* MTU range: 68 - 9000 */
4375        netdev->max_mtu = MAX_SINGLE_PACKET_SIZE;
4376
4377        netif_set_gso_max_size(netdev, LAN78XX_TSO_SIZE(dev));
4378
4379        netif_napi_add(netdev, &dev->napi, lan78xx_poll, LAN78XX_NAPI_WEIGHT);
4380
4381        INIT_DELAYED_WORK(&dev->wq, lan78xx_delayedwork);
4382        init_usb_anchor(&dev->deferred);
4383
4384        netdev->netdev_ops = &lan78xx_netdev_ops;
4385        netdev->watchdog_timeo = TX_TIMEOUT_JIFFIES;
4386        netdev->ethtool_ops = &lan78xx_ethtool_ops;
4387
4388        dev->delta = 1;
4389        timer_setup(&dev->stat_monitor, lan78xx_stat_monitor, 0);
4390
4391        mutex_init(&dev->stats.access_lock);
4392
4393        if (intf->cur_altsetting->desc.bNumEndpoints < 3) {
4394                ret = -ENODEV;
4395                goto out4;
4396        }
4397
4398        dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE);
4399        ep_blkin = usb_pipe_endpoint(udev, dev->pipe_in);
4400        if (!ep_blkin || !usb_endpoint_is_bulk_in(&ep_blkin->desc)) {
4401                ret = -ENODEV;
4402                goto out4;
4403        }
4404
4405        dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE);
4406        ep_blkout = usb_pipe_endpoint(udev, dev->pipe_out);
4407        if (!ep_blkout || !usb_endpoint_is_bulk_out(&ep_blkout->desc)) {
4408                ret = -ENODEV;
4409                goto out4;
4410        }
4411
4412        ep_intr = &intf->cur_altsetting->endpoint[2];
4413        if (!usb_endpoint_is_int_in(&ep_intr->desc)) {
4414                ret = -ENODEV;
4415                goto out4;
4416        }
4417
4418        dev->pipe_intr = usb_rcvintpipe(dev->udev,
4419                                        usb_endpoint_num(&ep_intr->desc));
4420
4421        ret = lan78xx_bind(dev, intf);
4422        if (ret < 0)
4423                goto out4;
4424
4425        period = ep_intr->desc.bInterval;
4426        maxp = usb_maxpacket(dev->udev, dev->pipe_intr, 0);
4427        buf = kmalloc(maxp, GFP_KERNEL);
4428        if (!buf) {
4429                ret = -ENOMEM;
4430                goto out5;
4431        }
4432
4433        dev->urb_intr = usb_alloc_urb(0, GFP_KERNEL);
4434        if (!dev->urb_intr) {
4435                ret = -ENOMEM;
4436                goto out6;
4437        } else {
4438                usb_fill_int_urb(dev->urb_intr, dev->udev,
4439                                 dev->pipe_intr, buf, maxp,
4440                                 intr_complete, dev, period);
4441                dev->urb_intr->transfer_flags |= URB_FREE_BUFFER;
4442        }
4443
4444        dev->maxpacket = usb_maxpacket(dev->udev, dev->pipe_out, 1);
4445
4446        /* Reject broken descriptors. */
4447        if (dev->maxpacket == 0) {
4448                ret = -ENODEV;
4449                goto out6;
4450        }
4451
4452        /* driver requires remote-wakeup capability during autosuspend. */
4453        intf->needs_remote_wakeup = 1;
4454
4455        ret = lan78xx_phy_init(dev);
4456        if (ret < 0)
4457                goto out7;
4458
4459        ret = register_netdev(netdev);
4460        if (ret != 0) {
4461                netif_err(dev, probe, netdev, "couldn't register the device\n");
4462                goto out8;
4463        }
4464
4465        usb_set_intfdata(intf, dev);
4466
4467        ret = device_set_wakeup_enable(&udev->dev, true);
4468
4469         /* Default delay of 2sec has more overhead than advantage.
4470          * Set to 10sec as default.
4471          */
4472        pm_runtime_set_autosuspend_delay(&udev->dev,
4473                                         DEFAULT_AUTOSUSPEND_DELAY);
4474
4475        return 0;
4476
4477out8:
4478        phy_disconnect(netdev->phydev);
4479out7:
4480        usb_free_urb(dev->urb_intr);
4481out6:
4482        kfree(buf);
4483out5:
4484        lan78xx_unbind(dev, intf);
4485out4:
4486        netif_napi_del(&dev->napi);
4487        lan78xx_free_rx_resources(dev);
4488out3:
4489        lan78xx_free_tx_resources(dev);
4490out2:
4491        free_netdev(netdev);
4492out1:
4493        usb_put_dev(udev);
4494
4495        return ret;
4496}
4497
4498static u16 lan78xx_wakeframe_crc16(const u8 *buf, int len)
4499{
4500        const u16 crc16poly = 0x8005;
4501        int i;
4502        u16 bit, crc, msb;
4503        u8 data;
4504
4505        crc = 0xFFFF;
4506        for (i = 0; i < len; i++) {
4507                data = *buf++;
4508                for (bit = 0; bit < 8; bit++) {
4509                        msb = crc >> 15;
4510                        crc <<= 1;
4511
4512                        if (msb ^ (u16)(data & 1)) {
4513                                crc ^= crc16poly;
4514                                crc |= (u16)0x0001U;
4515                        }
4516                        data >>= 1;
4517                }
4518        }
4519
4520        return crc;
4521}
4522
4523static int lan78xx_set_auto_suspend(struct lan78xx_net *dev)
4524{
4525        u32 buf;
4526        int ret;
4527
4528        ret = lan78xx_stop_tx_path(dev);
4529        if (ret < 0)
4530                return ret;
4531
4532        ret = lan78xx_stop_rx_path(dev);
4533        if (ret < 0)
4534                return ret;
4535
4536        /* auto suspend (selective suspend) */
4537
4538        ret = lan78xx_write_reg(dev, WUCSR, 0);
4539        if (ret < 0)
4540                return ret;
4541        ret = lan78xx_write_reg(dev, WUCSR2, 0);
4542        if (ret < 0)
4543                return ret;
4544        ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL);
4545        if (ret < 0)
4546                return ret;
4547
4548        /* set goodframe wakeup */
4549
4550        ret = lan78xx_read_reg(dev, WUCSR, &buf);
4551        if (ret < 0)
4552                return ret;
4553
4554        buf |= WUCSR_RFE_WAKE_EN_;
4555        buf |= WUCSR_STORE_WAKE_;
4556
4557        ret = lan78xx_write_reg(dev, WUCSR, buf);
4558        if (ret < 0)
4559                return ret;
4560
4561        ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
4562        if (ret < 0)
4563                return ret;
4564
4565        buf &= ~PMT_CTL_RES_CLR_WKP_EN_;
4566        buf |= PMT_CTL_RES_CLR_WKP_STS_;
4567        buf |= PMT_CTL_PHY_WAKE_EN_;
4568        buf |= PMT_CTL_WOL_EN_;
4569        buf &= ~PMT_CTL_SUS_MODE_MASK_;
4570        buf |= PMT_CTL_SUS_MODE_3_;
4571
4572        ret = lan78xx_write_reg(dev, PMT_CTL, buf);
4573        if (ret < 0)
4574                return ret;
4575
4576        ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
4577        if (ret < 0)
4578                return ret;
4579
4580        buf |= PMT_CTL_WUPS_MASK_;
4581
4582        ret = lan78xx_write_reg(dev, PMT_CTL, buf);
4583        if (ret < 0)
4584                return ret;
4585
4586        ret = lan78xx_start_rx_path(dev);
4587
4588        return ret;
4589}
4590
4591static int lan78xx_set_suspend(struct lan78xx_net *dev, u32 wol)
4592{
4593        const u8 ipv4_multicast[3] = { 0x01, 0x00, 0x5E };
4594        const u8 ipv6_multicast[3] = { 0x33, 0x33 };
4595        const u8 arp_type[2] = { 0x08, 0x06 };
4596        u32 temp_pmt_ctl;
4597        int mask_index;
4598        u32 temp_wucsr;
4599        u32 buf;
4600        u16 crc;
4601        int ret;
4602
4603        ret = lan78xx_stop_tx_path(dev);
4604        if (ret < 0)
4605                return ret;
4606        ret = lan78xx_stop_rx_path(dev);
4607        if (ret < 0)
4608                return ret;
4609
4610        ret = lan78xx_write_reg(dev, WUCSR, 0);
4611        if (ret < 0)
4612                return ret;
4613        ret = lan78xx_write_reg(dev, WUCSR2, 0);
4614        if (ret < 0)
4615                return ret;
4616        ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL);
4617        if (ret < 0)
4618                return ret;
4619
4620        temp_wucsr = 0;
4621
4622        temp_pmt_ctl = 0;
4623
4624        ret = lan78xx_read_reg(dev, PMT_CTL, &temp_pmt_ctl);
4625        if (ret < 0)
4626                return ret;
4627
4628        temp_pmt_ctl &= ~PMT_CTL_RES_CLR_WKP_EN_;
4629        temp_pmt_ctl |= PMT_CTL_RES_CLR_WKP_STS_;
4630
4631        for (mask_index = 0; mask_index < NUM_OF_WUF_CFG; mask_index++) {
4632                ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), 0);
4633                if (ret < 0)
4634                        return ret;
4635        }
4636
4637        mask_index = 0;
4638        if (wol & WAKE_PHY) {
4639                temp_pmt_ctl |= PMT_CTL_PHY_WAKE_EN_;
4640
4641                temp_pmt_ctl |= PMT_CTL_WOL_EN_;
4642                temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
4643                temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
4644        }
4645        if (wol & WAKE_MAGIC) {
4646                temp_wucsr |= WUCSR_MPEN_;
4647
4648                temp_pmt_ctl |= PMT_CTL_WOL_EN_;
4649                temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
4650                temp_pmt_ctl |= PMT_CTL_SUS_MODE_3_;
4651        }
4652        if (wol & WAKE_BCAST) {
4653                temp_wucsr |= WUCSR_BCST_EN_;
4654
4655                temp_pmt_ctl |= PMT_CTL_WOL_EN_;
4656                temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
4657                temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
4658        }
4659        if (wol & WAKE_MCAST) {
4660                temp_wucsr |= WUCSR_WAKE_EN_;
4661
4662                /* set WUF_CFG & WUF_MASK for IPv4 Multicast */
4663                crc = lan78xx_wakeframe_crc16(ipv4_multicast, 3);
4664                ret = lan78xx_write_reg(dev, WUF_CFG(mask_index),
4665                                        WUF_CFGX_EN_ |
4666                                        WUF_CFGX_TYPE_MCAST_ |
4667                                        (0 << WUF_CFGX_OFFSET_SHIFT_) |
4668                                        (crc & WUF_CFGX_CRC16_MASK_));
4669                if (ret < 0)
4670                        return ret;
4671
4672                ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 7);
4673                if (ret < 0)
4674                        return ret;
4675                ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0);
4676                if (ret < 0)
4677                        return ret;
4678                ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0);
4679                if (ret < 0)
4680                        return ret;
4681                ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0);
4682                if (ret < 0)
4683                        return ret;
4684
4685                mask_index++;
4686
4687                /* for IPv6 Multicast */
4688                crc = lan78xx_wakeframe_crc16(ipv6_multicast, 2);
4689                ret = lan78xx_write_reg(dev, WUF_CFG(mask_index),
4690                                        WUF_CFGX_EN_ |
4691                                        WUF_CFGX_TYPE_MCAST_ |
4692                                        (0 << WUF_CFGX_OFFSET_SHIFT_) |
4693                                        (crc & WUF_CFGX_CRC16_MASK_));
4694                if (ret < 0)
4695                        return ret;
4696
4697                ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 3);
4698                if (ret < 0)
4699                        return ret;
4700                ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0);
4701                if (ret < 0)
4702                        return ret;
4703                ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0);
4704                if (ret < 0)
4705                        return ret;
4706                ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0);
4707                if (ret < 0)
4708                        return ret;
4709
4710                mask_index++;
4711
4712                temp_pmt_ctl |= PMT_CTL_WOL_EN_;
4713                temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
4714                temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
4715        }
4716        if (wol & WAKE_UCAST) {
4717                temp_wucsr |= WUCSR_PFDA_EN_;
4718
4719                temp_pmt_ctl |= PMT_CTL_WOL_EN_;
4720                temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
4721                temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
4722        }
4723        if (wol & WAKE_ARP) {
4724                temp_wucsr |= WUCSR_WAKE_EN_;
4725
4726                /* set WUF_CFG & WUF_MASK
4727                 * for packettype (offset 12,13) = ARP (0x0806)
4728                 */
4729                crc = lan78xx_wakeframe_crc16(arp_type, 2);
4730                ret = lan78xx_write_reg(dev, WUF_CFG(mask_index),
4731                                        WUF_CFGX_EN_ |
4732                                        WUF_CFGX_TYPE_ALL_ |
4733                                        (0 << WUF_CFGX_OFFSET_SHIFT_) |
4734                                        (crc & WUF_CFGX_CRC16_MASK_));
4735                if (ret < 0)
4736                        return ret;
4737
4738                ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 0x3000);
4739                if (ret < 0)
4740                        return ret;
4741                ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0);
4742                if (ret < 0)
4743                        return ret;
4744                ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0);
4745                if (ret < 0)
4746                        return ret;
4747                ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0);
4748                if (ret < 0)
4749                        return ret;
4750
4751                mask_index++;
4752
4753                temp_pmt_ctl |= PMT_CTL_WOL_EN_;
4754                temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
4755                temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
4756        }
4757
4758        ret = lan78xx_write_reg(dev, WUCSR, temp_wucsr);
4759        if (ret < 0)
4760                return ret;
4761
4762        /* when multiple WOL bits are set */
4763        if (hweight_long((unsigned long)wol) > 1) {
4764                temp_pmt_ctl |= PMT_CTL_WOL_EN_;
4765                temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_;
4766                temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_;
4767        }
4768        ret = lan78xx_write_reg(dev, PMT_CTL, temp_pmt_ctl);
4769        if (ret < 0)
4770                return ret;
4771
4772        /* clear WUPS */
4773        ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
4774        if (ret < 0)
4775                return ret;
4776
4777        buf |= PMT_CTL_WUPS_MASK_;
4778
4779        ret = lan78xx_write_reg(dev, PMT_CTL, buf);
4780        if (ret < 0)
4781                return ret;
4782
4783        ret = lan78xx_start_rx_path(dev);
4784
4785        return ret;
4786}
4787
4788static int lan78xx_suspend(struct usb_interface *intf, pm_message_t message)
4789{
4790        struct lan78xx_net *dev = usb_get_intfdata(intf);
4791        bool dev_open;
4792        int ret;
4793
4794        mutex_lock(&dev->dev_mutex);
4795
4796        netif_dbg(dev, ifdown, dev->net,
4797                  "suspending: pm event %#x", message.event);
4798
4799        dev_open = test_bit(EVENT_DEV_OPEN, &dev->flags);
4800
4801        if (dev_open) {
4802                spin_lock_irq(&dev->txq.lock);
4803                /* don't autosuspend while transmitting */
4804                if ((skb_queue_len(&dev->txq) ||
4805                     skb_queue_len(&dev->txq_pend)) &&
4806                    PMSG_IS_AUTO(message)) {
4807                        spin_unlock_irq(&dev->txq.lock);
4808                        ret = -EBUSY;
4809                        goto out;
4810                } else {
4811                        set_bit(EVENT_DEV_ASLEEP, &dev->flags);
4812                        spin_unlock_irq(&dev->txq.lock);
4813                }
4814
4815                /* stop RX */
4816                ret = lan78xx_stop_rx_path(dev);
4817                if (ret < 0)
4818                        goto out;
4819
4820                ret = lan78xx_flush_rx_fifo(dev);
4821                if (ret < 0)
4822                        goto out;
4823
4824                /* stop Tx */
4825                ret = lan78xx_stop_tx_path(dev);
4826                if (ret < 0)
4827                        goto out;
4828
4829                /* empty out the Rx and Tx queues */
4830                netif_device_detach(dev->net);
4831                lan78xx_terminate_urbs(dev);
4832                usb_kill_urb(dev->urb_intr);
4833
4834                /* reattach */
4835                netif_device_attach(dev->net);
4836
4837                del_timer(&dev->stat_monitor);
4838
4839                if (PMSG_IS_AUTO(message)) {
4840                        ret = lan78xx_set_auto_suspend(dev);
4841                        if (ret < 0)
4842                                goto out;
4843                } else {
4844                        struct lan78xx_priv *pdata;
4845
4846                        pdata = (struct lan78xx_priv *)(dev->data[0]);
4847                        netif_carrier_off(dev->net);
4848                        ret = lan78xx_set_suspend(dev, pdata->wol);
4849                        if (ret < 0)
4850                                goto out;
4851                }
4852        } else {
4853                /* Interface is down; don't allow WOL and PHY
4854                 * events to wake up the host
4855                 */
4856                u32 buf;
4857
4858                set_bit(EVENT_DEV_ASLEEP, &dev->flags);
4859
4860                ret = lan78xx_write_reg(dev, WUCSR, 0);
4861                if (ret < 0)
4862                        goto out;
4863                ret = lan78xx_write_reg(dev, WUCSR2, 0);
4864                if (ret < 0)
4865                        goto out;
4866
4867                ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
4868                if (ret < 0)
4869                        goto out;
4870
4871                buf &= ~PMT_CTL_RES_CLR_WKP_EN_;
4872                buf |= PMT_CTL_RES_CLR_WKP_STS_;
4873                buf &= ~PMT_CTL_SUS_MODE_MASK_;
4874                buf |= PMT_CTL_SUS_MODE_3_;
4875
4876                ret = lan78xx_write_reg(dev, PMT_CTL, buf);
4877                if (ret < 0)
4878                        goto out;
4879
4880                ret = lan78xx_read_reg(dev, PMT_CTL, &buf);
4881                if (ret < 0)
4882                        goto out;
4883
4884                buf |= PMT_CTL_WUPS_MASK_;
4885
4886                ret = lan78xx_write_reg(dev, PMT_CTL, buf);
4887                if (ret < 0)
4888                        goto out;
4889        }
4890
4891        ret = 0;
4892out:
4893        mutex_unlock(&dev->dev_mutex);
4894
4895        return ret;
4896}
4897
4898static bool lan78xx_submit_deferred_urbs(struct lan78xx_net *dev)
4899{
4900        bool pipe_halted = false;
4901        struct urb *urb;
4902
4903        while ((urb = usb_get_from_anchor(&dev->deferred))) {
4904                struct sk_buff *skb = urb->context;
4905                int ret;
4906
4907                if (!netif_device_present(dev->net) ||
4908                    !netif_carrier_ok(dev->net) ||
4909                    pipe_halted) {
4910                        lan78xx_release_tx_buf(dev, skb);
4911                        continue;
4912                }
4913
4914                ret = usb_submit_urb(urb, GFP_ATOMIC);
4915
4916                if (ret == 0) {
4917                        netif_trans_update(dev->net);
4918                        lan78xx_queue_skb(&dev->txq, skb, tx_start);
4919                } else {
4920                        if (ret == -EPIPE) {
4921                                netif_stop_queue(dev->net);
4922                                pipe_halted = true;
4923                        } else if (ret == -ENODEV) {
4924                                netif_device_detach(dev->net);
4925                        }
4926
4927                        lan78xx_release_tx_buf(dev, skb);
4928                }
4929        }
4930
4931        return pipe_halted;
4932}
4933
4934static int lan78xx_resume(struct usb_interface *intf)
4935{
4936        struct lan78xx_net *dev = usb_get_intfdata(intf);
4937        bool dev_open;
4938        int ret;
4939
4940        mutex_lock(&dev->dev_mutex);
4941
4942        netif_dbg(dev, ifup, dev->net, "resuming device");
4943
4944        dev_open = test_bit(EVENT_DEV_OPEN, &dev->flags);
4945
4946        if (dev_open) {
4947                bool pipe_halted = false;
4948
4949                ret = lan78xx_flush_tx_fifo(dev);
4950                if (ret < 0)
4951                        goto out;
4952
4953                if (dev->urb_intr) {
4954                        int ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL);
4955
4956                        if (ret < 0) {
4957                                if (ret == -ENODEV)
4958                                        netif_device_detach(dev->net);
4959                                netdev_warn(dev->net, "Failed to submit intr URB");
4960                        }
4961                }
4962
4963                spin_lock_irq(&dev->txq.lock);
4964
4965                if (netif_device_present(dev->net)) {
4966                        pipe_halted = lan78xx_submit_deferred_urbs(dev);
4967
4968                        if (pipe_halted)
4969                                lan78xx_defer_kevent(dev, EVENT_TX_HALT);
4970                }
4971
4972                clear_bit(EVENT_DEV_ASLEEP, &dev->flags);
4973
4974                spin_unlock_irq(&dev->txq.lock);
4975
4976                if (!pipe_halted &&
4977                    netif_device_present(dev->net) &&
4978                    (lan78xx_tx_pend_data_len(dev) < lan78xx_tx_urb_space(dev)))
4979                        netif_start_queue(dev->net);
4980
4981                ret = lan78xx_start_tx_path(dev);
4982                if (ret < 0)
4983                        goto out;
4984
4985                napi_schedule(&dev->napi);
4986
4987                if (!timer_pending(&dev->stat_monitor)) {
4988                        dev->delta = 1;
4989                        mod_timer(&dev->stat_monitor,
4990                                  jiffies + STAT_UPDATE_TIMER);
4991                }
4992
4993        } else {
4994                clear_bit(EVENT_DEV_ASLEEP, &dev->flags);
4995        }
4996
4997        ret = lan78xx_write_reg(dev, WUCSR2, 0);
4998        if (ret < 0)
4999                goto out;
5000        ret = lan78xx_write_reg(dev, WUCSR, 0);
5001        if (ret < 0)
5002                goto out;
5003        ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL);
5004        if (ret < 0)
5005                goto out;
5006
5007        ret = lan78xx_write_reg(dev, WUCSR2, WUCSR2_NS_RCD_ |
5008                                             WUCSR2_ARP_RCD_ |
5009                                             WUCSR2_IPV6_TCPSYN_RCD_ |
5010                                             WUCSR2_IPV4_TCPSYN_RCD_);
5011        if (ret < 0)
5012                goto out;
5013
5014        ret = lan78xx_write_reg(dev, WUCSR, WUCSR_EEE_TX_WAKE_ |
5015                                            WUCSR_EEE_RX_WAKE_ |
5016                                            WUCSR_PFDA_FR_ |
5017                                            WUCSR_RFE_WAKE_FR_ |
5018                                            WUCSR_WUFR_ |
5019                                            WUCSR_MPR_ |
5020                                            WUCSR_BCST_FR_);
5021        if (ret < 0)
5022                goto out;
5023
5024        ret = 0;
5025out:
5026        mutex_unlock(&dev->dev_mutex);
5027
5028        return ret;
5029}
5030
5031static int lan78xx_reset_resume(struct usb_interface *intf)
5032{
5033        struct lan78xx_net *dev = usb_get_intfdata(intf);
5034        int ret;
5035
5036        netif_dbg(dev, ifup, dev->net, "(reset) resuming device");
5037
5038        ret = lan78xx_reset(dev);
5039        if (ret < 0)
5040                return ret;
5041
5042        phy_start(dev->net->phydev);
5043
5044        ret = lan78xx_resume(intf);
5045
5046        return ret;
5047}
5048
5049static const struct usb_device_id products[] = {
5050        {
5051        /* LAN7800 USB Gigabit Ethernet Device */
5052        USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7800_USB_PRODUCT_ID),
5053        },
5054        {
5055        /* LAN7850 USB Gigabit Ethernet Device */
5056        USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7850_USB_PRODUCT_ID),
5057        },
5058        {
5059        /* LAN7801 USB Gigabit Ethernet Device */
5060        USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7801_USB_PRODUCT_ID),
5061        },
5062        {
5063        /* ATM2-AF USB Gigabit Ethernet Device */
5064        USB_DEVICE(AT29M2AF_USB_VENDOR_ID, AT29M2AF_USB_PRODUCT_ID),
5065        },
5066        {},
5067};
5068MODULE_DEVICE_TABLE(usb, products);
5069
5070static struct usb_driver lan78xx_driver = {
5071        .name                   = DRIVER_NAME,
5072        .id_table               = products,
5073        .probe                  = lan78xx_probe,
5074        .disconnect             = lan78xx_disconnect,
5075        .suspend                = lan78xx_suspend,
5076        .resume                 = lan78xx_resume,
5077        .reset_resume           = lan78xx_reset_resume,
5078        .supports_autosuspend   = 1,
5079        .disable_hub_initiated_lpm = 1,
5080};
5081
5082module_usb_driver(lan78xx_driver);
5083
5084MODULE_AUTHOR(DRIVER_AUTHOR);
5085MODULE_DESCRIPTION(DRIVER_DESC);
5086MODULE_LICENSE("GPL");
5087