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