linux/drivers/net/usb/usbnet.c
<<
>>
Prefs
   1/*
   2 * USB Network driver infrastructure
   3 * Copyright (C) 2000-2005 by David Brownell
   4 * Copyright (C) 2003-2005 David Hollis <dhollis@davehollis.com>
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License as published by
   8 * the Free Software Foundation; either version 2 of the License, or
   9 * (at your option) any later version.
  10 *
  11 * This program is distributed in the hope that it will be useful,
  12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 * GNU General Public License for more details.
  15 *
  16 * You should have received a copy of the GNU General Public License
  17 * along with this program; if not, write to the Free Software
  18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  19 */
  20
  21/*
  22 * This is a generic "USB networking" framework that works with several
  23 * kinds of full and high speed networking devices:  host-to-host cables,
  24 * smart usb peripherals, and actual Ethernet adapters.
  25 *
  26 * These devices usually differ in terms of control protocols (if they
  27 * even have one!) and sometimes they define new framing to wrap or batch
  28 * Ethernet packets.  Otherwise, they talk to USB pretty much the same,
  29 * so interface (un)binding, endpoint I/O queues, fault handling, and other
  30 * issues can usefully be addressed by this framework.
  31 */
  32
  33// #define      DEBUG                   // error path messages, extra info
  34// #define      VERBOSE                 // more; success messages
  35
  36#include <linux/module.h>
  37#include <linux/init.h>
  38#include <linux/netdevice.h>
  39#include <linux/etherdevice.h>
  40#include <linux/ctype.h>
  41#include <linux/ethtool.h>
  42#include <linux/workqueue.h>
  43#include <linux/mii.h>
  44#include <linux/usb.h>
  45#include <linux/usb/usbnet.h>
  46#include <linux/slab.h>
  47#include <linux/kernel.h>
  48#include <linux/pm_runtime.h>
  49
  50#define DRIVER_VERSION          "22-Aug-2005"
  51
  52
  53/*-------------------------------------------------------------------------*/
  54
  55/*
  56 * Nineteen USB 1.1 max size bulk transactions per frame (ms), max.
  57 * Several dozen bytes of IPv4 data can fit in two such transactions.
  58 * One maximum size Ethernet packet takes twenty four of them.
  59 * For high speed, each frame comfortably fits almost 36 max size
  60 * Ethernet packets (so queues should be bigger).
  61 *
  62 * REVISIT qlens should be members of 'struct usbnet'; the goal is to
  63 * let the USB host controller be busy for 5msec or more before an irq
  64 * is required, under load.  Jumbograms change the equation.
  65 */
  66#define RX_MAX_QUEUE_MEMORY (60 * 1518)
  67#define RX_QLEN(dev) (((dev)->udev->speed == USB_SPEED_HIGH) ? \
  68                        (RX_MAX_QUEUE_MEMORY/(dev)->rx_urb_size) : 4)
  69#define TX_QLEN(dev) (((dev)->udev->speed == USB_SPEED_HIGH) ? \
  70                        (RX_MAX_QUEUE_MEMORY/(dev)->hard_mtu) : 4)
  71
  72// reawaken network queue this soon after stopping; else watchdog barks
  73#define TX_TIMEOUT_JIFFIES      (5*HZ)
  74
  75// throttle rx/tx briefly after some faults, so khubd might disconnect()
  76// us (it polls at HZ/4 usually) before we report too many false errors.
  77#define THROTTLE_JIFFIES        (HZ/8)
  78
  79// between wakeups
  80#define UNLINK_TIMEOUT_MS       3
  81
  82/*-------------------------------------------------------------------------*/
  83
  84// randomly generated ethernet address
  85static u8       node_id [ETH_ALEN];
  86
  87static const char driver_name [] = "usbnet";
  88
  89/* use ethtool to change the level for any given device */
  90static int msg_level = -1;
  91module_param (msg_level, int, 0);
  92MODULE_PARM_DESC (msg_level, "Override default message level");
  93
  94/*-------------------------------------------------------------------------*/
  95
  96/* handles CDC Ethernet and many other network "bulk data" interfaces */
  97int usbnet_get_endpoints(struct usbnet *dev, struct usb_interface *intf)
  98{
  99        int                             tmp;
 100        struct usb_host_interface       *alt = NULL;
 101        struct usb_host_endpoint        *in = NULL, *out = NULL;
 102        struct usb_host_endpoint        *status = NULL;
 103
 104        for (tmp = 0; tmp < intf->num_altsetting; tmp++) {
 105                unsigned        ep;
 106
 107                in = out = status = NULL;
 108                alt = intf->altsetting + tmp;
 109
 110                /* take the first altsetting with in-bulk + out-bulk;
 111                 * remember any status endpoint, just in case;
 112                 * ignore other endpoints and altsettings.
 113                 */
 114                for (ep = 0; ep < alt->desc.bNumEndpoints; ep++) {
 115                        struct usb_host_endpoint        *e;
 116                        int                             intr = 0;
 117
 118                        e = alt->endpoint + ep;
 119                        switch (e->desc.bmAttributes) {
 120                        case USB_ENDPOINT_XFER_INT:
 121                                if (!usb_endpoint_dir_in(&e->desc))
 122                                        continue;
 123                                intr = 1;
 124                                /* FALLTHROUGH */
 125                        case USB_ENDPOINT_XFER_BULK:
 126                                break;
 127                        default:
 128                                continue;
 129                        }
 130                        if (usb_endpoint_dir_in(&e->desc)) {
 131                                if (!intr && !in)
 132                                        in = e;
 133                                else if (intr && !status)
 134                                        status = e;
 135                        } else {
 136                                if (!out)
 137                                        out = e;
 138                        }
 139                }
 140                if (in && out)
 141                        break;
 142        }
 143        if (!alt || !in || !out)
 144                return -EINVAL;
 145
 146        if (alt->desc.bAlternateSetting != 0 ||
 147            !(dev->driver_info->flags & FLAG_NO_SETINT)) {
 148                tmp = usb_set_interface (dev->udev, alt->desc.bInterfaceNumber,
 149                                alt->desc.bAlternateSetting);
 150                if (tmp < 0)
 151                        return tmp;
 152        }
 153
 154        dev->in = usb_rcvbulkpipe (dev->udev,
 155                        in->desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
 156        dev->out = usb_sndbulkpipe (dev->udev,
 157                        out->desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
 158        dev->status = status;
 159        return 0;
 160}
 161EXPORT_SYMBOL_GPL(usbnet_get_endpoints);
 162
 163int usbnet_get_ethernet_addr(struct usbnet *dev, int iMACAddress)
 164{
 165        int             tmp, i;
 166        unsigned char   buf [13];
 167
 168        tmp = usb_string(dev->udev, iMACAddress, buf, sizeof buf);
 169        if (tmp != 12) {
 170                dev_dbg(&dev->udev->dev,
 171                        "bad MAC string %d fetch, %d\n", iMACAddress, tmp);
 172                if (tmp >= 0)
 173                        tmp = -EINVAL;
 174                return tmp;
 175        }
 176        for (i = tmp = 0; i < 6; i++, tmp += 2)
 177                dev->net->dev_addr [i] =
 178                        (hex_to_bin(buf[tmp]) << 4) + hex_to_bin(buf[tmp + 1]);
 179        return 0;
 180}
 181EXPORT_SYMBOL_GPL(usbnet_get_ethernet_addr);
 182
 183static void intr_complete (struct urb *urb);
 184
 185static int init_status (struct usbnet *dev, struct usb_interface *intf)
 186{
 187        char            *buf = NULL;
 188        unsigned        pipe = 0;
 189        unsigned        maxp;
 190        unsigned        period;
 191
 192        if (!dev->driver_info->status)
 193                return 0;
 194
 195        pipe = usb_rcvintpipe (dev->udev,
 196                        dev->status->desc.bEndpointAddress
 197                                & USB_ENDPOINT_NUMBER_MASK);
 198        maxp = usb_maxpacket (dev->udev, pipe, 0);
 199
 200        /* avoid 1 msec chatter:  min 8 msec poll rate */
 201        period = max ((int) dev->status->desc.bInterval,
 202                (dev->udev->speed == USB_SPEED_HIGH) ? 7 : 3);
 203
 204        buf = kmalloc (maxp, GFP_KERNEL);
 205        if (buf) {
 206                dev->interrupt = usb_alloc_urb (0, GFP_KERNEL);
 207                if (!dev->interrupt) {
 208                        kfree (buf);
 209                        return -ENOMEM;
 210                } else {
 211                        usb_fill_int_urb(dev->interrupt, dev->udev, pipe,
 212                                buf, maxp, intr_complete, dev, period);
 213                        dev_dbg(&intf->dev,
 214                                "status ep%din, %d bytes period %d\n",
 215                                usb_pipeendpoint(pipe), maxp, period);
 216                }
 217        }
 218        return 0;
 219}
 220
 221/* Passes this packet up the stack, updating its accounting.
 222 * Some link protocols batch packets, so their rx_fixup paths
 223 * can return clones as well as just modify the original skb.
 224 */
 225void usbnet_skb_return (struct usbnet *dev, struct sk_buff *skb)
 226{
 227        int     status;
 228
 229        if (test_bit(EVENT_RX_PAUSED, &dev->flags)) {
 230                skb_queue_tail(&dev->rxq_pause, skb);
 231                return;
 232        }
 233
 234        skb->protocol = eth_type_trans (skb, dev->net);
 235        dev->net->stats.rx_packets++;
 236        dev->net->stats.rx_bytes += skb->len;
 237
 238        netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n",
 239                  skb->len + sizeof (struct ethhdr), skb->protocol);
 240        memset (skb->cb, 0, sizeof (struct skb_data));
 241
 242        if (skb_defer_rx_timestamp(skb))
 243                return;
 244
 245        status = netif_rx (skb);
 246        if (status != NET_RX_SUCCESS)
 247                netif_dbg(dev, rx_err, dev->net,
 248                          "netif_rx status %d\n", status);
 249}
 250EXPORT_SYMBOL_GPL(usbnet_skb_return);
 251
 252
 253/*-------------------------------------------------------------------------
 254 *
 255 * Network Device Driver (peer link to "Host Device", from USB host)
 256 *
 257 *-------------------------------------------------------------------------*/
 258
 259int usbnet_change_mtu (struct net_device *net, int new_mtu)
 260{
 261        struct usbnet   *dev = netdev_priv(net);
 262        int             ll_mtu = new_mtu + net->hard_header_len;
 263        int             old_hard_mtu = dev->hard_mtu;
 264        int             old_rx_urb_size = dev->rx_urb_size;
 265
 266        if (new_mtu <= 0)
 267                return -EINVAL;
 268        // no second zero-length packet read wanted after mtu-sized packets
 269        if ((ll_mtu % dev->maxpacket) == 0)
 270                return -EDOM;
 271        net->mtu = new_mtu;
 272
 273        dev->hard_mtu = net->mtu + net->hard_header_len;
 274        if (dev->rx_urb_size == old_hard_mtu) {
 275                dev->rx_urb_size = dev->hard_mtu;
 276                if (dev->rx_urb_size > old_rx_urb_size)
 277                        usbnet_unlink_rx_urbs(dev);
 278        }
 279
 280        return 0;
 281}
 282EXPORT_SYMBOL_GPL(usbnet_change_mtu);
 283
 284/*-------------------------------------------------------------------------*/
 285
 286/* some LK 2.4 HCDs oopsed if we freed or resubmitted urbs from
 287 * completion callbacks.  2.5 should have fixed those bugs...
 288 */
 289
 290static void defer_bh(struct usbnet *dev, struct sk_buff *skb, struct sk_buff_head *list)
 291{
 292        unsigned long           flags;
 293
 294        spin_lock_irqsave(&list->lock, flags);
 295        __skb_unlink(skb, list);
 296        spin_unlock(&list->lock);
 297        spin_lock(&dev->done.lock);
 298        __skb_queue_tail(&dev->done, skb);
 299        if (dev->done.qlen == 1)
 300                tasklet_schedule(&dev->bh);
 301        spin_unlock_irqrestore(&dev->done.lock, flags);
 302}
 303
 304/* some work can't be done in tasklets, so we use keventd
 305 *
 306 * NOTE:  annoying asymmetry:  if it's active, schedule_work() fails,
 307 * but tasklet_schedule() doesn't.  hope the failure is rare.
 308 */
 309void usbnet_defer_kevent (struct usbnet *dev, int work)
 310{
 311        set_bit (work, &dev->flags);
 312        if (!schedule_work (&dev->kevent))
 313                netdev_err(dev->net, "kevent %d may have been dropped\n", work);
 314        else
 315                netdev_dbg(dev->net, "kevent %d scheduled\n", work);
 316}
 317EXPORT_SYMBOL_GPL(usbnet_defer_kevent);
 318
 319/*-------------------------------------------------------------------------*/
 320
 321static void rx_complete (struct urb *urb);
 322
 323static int rx_submit (struct usbnet *dev, struct urb *urb, gfp_t flags)
 324{
 325        struct sk_buff          *skb;
 326        struct skb_data         *entry;
 327        int                     retval = 0;
 328        unsigned long           lockflags;
 329        size_t                  size = dev->rx_urb_size;
 330
 331        if ((skb = alloc_skb (size + NET_IP_ALIGN, flags)) == NULL) {
 332                netif_dbg(dev, rx_err, dev->net, "no rx skb\n");
 333                usbnet_defer_kevent (dev, EVENT_RX_MEMORY);
 334                usb_free_urb (urb);
 335                return -ENOMEM;
 336        }
 337        skb_reserve (skb, NET_IP_ALIGN);
 338
 339        entry = (struct skb_data *) skb->cb;
 340        entry->urb = urb;
 341        entry->dev = dev;
 342        entry->state = rx_start;
 343        entry->length = 0;
 344
 345        usb_fill_bulk_urb (urb, dev->udev, dev->in,
 346                skb->data, size, rx_complete, skb);
 347
 348        spin_lock_irqsave (&dev->rxq.lock, lockflags);
 349
 350        if (netif_running (dev->net) &&
 351            netif_device_present (dev->net) &&
 352            !test_bit (EVENT_RX_HALT, &dev->flags) &&
 353            !test_bit (EVENT_DEV_ASLEEP, &dev->flags)) {
 354                switch (retval = usb_submit_urb (urb, GFP_ATOMIC)) {
 355                case -EPIPE:
 356                        usbnet_defer_kevent (dev, EVENT_RX_HALT);
 357                        break;
 358                case -ENOMEM:
 359                        usbnet_defer_kevent (dev, EVENT_RX_MEMORY);
 360                        break;
 361                case -ENODEV:
 362                        netif_dbg(dev, ifdown, dev->net, "device gone\n");
 363                        netif_device_detach (dev->net);
 364                        break;
 365                case -EHOSTUNREACH:
 366                        retval = -ENOLINK;
 367                        break;
 368                default:
 369                        netif_dbg(dev, rx_err, dev->net,
 370                                  "rx submit, %d\n", retval);
 371                        tasklet_schedule (&dev->bh);
 372                        break;
 373                case 0:
 374                        __skb_queue_tail (&dev->rxq, skb);
 375                }
 376        } else {
 377                netif_dbg(dev, ifdown, dev->net, "rx: stopped\n");
 378                retval = -ENOLINK;
 379        }
 380        spin_unlock_irqrestore (&dev->rxq.lock, lockflags);
 381        if (retval) {
 382                dev_kfree_skb_any (skb);
 383                usb_free_urb (urb);
 384        }
 385        return retval;
 386}
 387
 388
 389/*-------------------------------------------------------------------------*/
 390
 391static inline void rx_process (struct usbnet *dev, struct sk_buff *skb)
 392{
 393        if (dev->driver_info->rx_fixup &&
 394            !dev->driver_info->rx_fixup (dev, skb)) {
 395                /* With RX_ASSEMBLE, rx_fixup() must update counters */
 396                if (!(dev->driver_info->flags & FLAG_RX_ASSEMBLE))
 397                        dev->net->stats.rx_errors++;
 398                goto done;
 399        }
 400        // else network stack removes extra byte if we forced a short packet
 401
 402        if (skb->len) {
 403                /* all data was already cloned from skb inside the driver */
 404                if (dev->driver_info->flags & FLAG_MULTI_PACKET)
 405                        dev_kfree_skb_any(skb);
 406                else
 407                        usbnet_skb_return(dev, skb);
 408                return;
 409        }
 410
 411        netif_dbg(dev, rx_err, dev->net, "drop\n");
 412        dev->net->stats.rx_errors++;
 413done:
 414        skb_queue_tail(&dev->done, skb);
 415}
 416
 417/*-------------------------------------------------------------------------*/
 418
 419static void rx_complete (struct urb *urb)
 420{
 421        struct sk_buff          *skb = (struct sk_buff *) urb->context;
 422        struct skb_data         *entry = (struct skb_data *) skb->cb;
 423        struct usbnet           *dev = entry->dev;
 424        int                     urb_status = urb->status;
 425
 426        skb_put (skb, urb->actual_length);
 427        entry->state = rx_done;
 428        entry->urb = NULL;
 429
 430        switch (urb_status) {
 431        /* success */
 432        case 0:
 433                if (skb->len < dev->net->hard_header_len) {
 434                        entry->state = rx_cleanup;
 435                        dev->net->stats.rx_errors++;
 436                        dev->net->stats.rx_length_errors++;
 437                        netif_dbg(dev, rx_err, dev->net,
 438                                  "rx length %d\n", skb->len);
 439                }
 440                break;
 441
 442        /* stalls need manual reset. this is rare ... except that
 443         * when going through USB 2.0 TTs, unplug appears this way.
 444         * we avoid the highspeed version of the ETIMEDOUT/EILSEQ
 445         * storm, recovering as needed.
 446         */
 447        case -EPIPE:
 448                dev->net->stats.rx_errors++;
 449                usbnet_defer_kevent (dev, EVENT_RX_HALT);
 450                // FALLTHROUGH
 451
 452        /* software-driven interface shutdown */
 453        case -ECONNRESET:               /* async unlink */
 454        case -ESHUTDOWN:                /* hardware gone */
 455                netif_dbg(dev, ifdown, dev->net,
 456                          "rx shutdown, code %d\n", urb_status);
 457                goto block;
 458
 459        /* we get controller i/o faults during khubd disconnect() delays.
 460         * throttle down resubmits, to avoid log floods; just temporarily,
 461         * so we still recover when the fault isn't a khubd delay.
 462         */
 463        case -EPROTO:
 464        case -ETIME:
 465        case -EILSEQ:
 466                dev->net->stats.rx_errors++;
 467                if (!timer_pending (&dev->delay)) {
 468                        mod_timer (&dev->delay, jiffies + THROTTLE_JIFFIES);
 469                        netif_dbg(dev, link, dev->net,
 470                                  "rx throttle %d\n", urb_status);
 471                }
 472block:
 473                entry->state = rx_cleanup;
 474                entry->urb = urb;
 475                urb = NULL;
 476                break;
 477
 478        /* data overrun ... flush fifo? */
 479        case -EOVERFLOW:
 480                dev->net->stats.rx_over_errors++;
 481                // FALLTHROUGH
 482
 483        default:
 484                entry->state = rx_cleanup;
 485                dev->net->stats.rx_errors++;
 486                netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status);
 487                break;
 488        }
 489
 490        defer_bh(dev, skb, &dev->rxq);
 491
 492        if (urb) {
 493                if (netif_running (dev->net) &&
 494                    !test_bit (EVENT_RX_HALT, &dev->flags)) {
 495                        rx_submit (dev, urb, GFP_ATOMIC);
 496                        return;
 497                }
 498                usb_free_urb (urb);
 499        }
 500        netif_dbg(dev, rx_err, dev->net, "no read resubmitted\n");
 501}
 502
 503static void intr_complete (struct urb *urb)
 504{
 505        struct usbnet   *dev = urb->context;
 506        int             status = urb->status;
 507
 508        switch (status) {
 509        /* success */
 510        case 0:
 511                dev->driver_info->status(dev, urb);
 512                break;
 513
 514        /* software-driven interface shutdown */
 515        case -ENOENT:           /* urb killed */
 516        case -ESHUTDOWN:        /* hardware gone */
 517                netif_dbg(dev, ifdown, dev->net,
 518                          "intr shutdown, code %d\n", status);
 519                return;
 520
 521        /* NOTE:  not throttling like RX/TX, since this endpoint
 522         * already polls infrequently
 523         */
 524        default:
 525                netdev_dbg(dev->net, "intr status %d\n", status);
 526                break;
 527        }
 528
 529        if (!netif_running (dev->net))
 530                return;
 531
 532        memset(urb->transfer_buffer, 0, urb->transfer_buffer_length);
 533        status = usb_submit_urb (urb, GFP_ATOMIC);
 534        if (status != 0)
 535                netif_err(dev, timer, dev->net,
 536                          "intr resubmit --> %d\n", status);
 537}
 538
 539/*-------------------------------------------------------------------------*/
 540void usbnet_pause_rx(struct usbnet *dev)
 541{
 542        set_bit(EVENT_RX_PAUSED, &dev->flags);
 543
 544        netif_dbg(dev, rx_status, dev->net, "paused rx queue enabled\n");
 545}
 546EXPORT_SYMBOL_GPL(usbnet_pause_rx);
 547
 548void usbnet_resume_rx(struct usbnet *dev)
 549{
 550        struct sk_buff *skb;
 551        int num = 0;
 552
 553        clear_bit(EVENT_RX_PAUSED, &dev->flags);
 554
 555        while ((skb = skb_dequeue(&dev->rxq_pause)) != NULL) {
 556                usbnet_skb_return(dev, skb);
 557                num++;
 558        }
 559
 560        tasklet_schedule(&dev->bh);
 561
 562        netif_dbg(dev, rx_status, dev->net,
 563                  "paused rx queue disabled, %d skbs requeued\n", num);
 564}
 565EXPORT_SYMBOL_GPL(usbnet_resume_rx);
 566
 567void usbnet_purge_paused_rxq(struct usbnet *dev)
 568{
 569        skb_queue_purge(&dev->rxq_pause);
 570}
 571EXPORT_SYMBOL_GPL(usbnet_purge_paused_rxq);
 572
 573/*-------------------------------------------------------------------------*/
 574
 575// unlink pending rx/tx; completion handlers do all other cleanup
 576
 577static int unlink_urbs (struct usbnet *dev, struct sk_buff_head *q)
 578{
 579        unsigned long           flags;
 580        struct sk_buff          *skb, *skbnext;
 581        int                     count = 0;
 582
 583        spin_lock_irqsave (&q->lock, flags);
 584        skb_queue_walk_safe(q, skb, skbnext) {
 585                struct skb_data         *entry;
 586                struct urb              *urb;
 587                int                     retval;
 588
 589                entry = (struct skb_data *) skb->cb;
 590                urb = entry->urb;
 591
 592                // during some PM-driven resume scenarios,
 593                // these (async) unlinks complete immediately
 594                retval = usb_unlink_urb (urb);
 595                if (retval != -EINPROGRESS && retval != 0)
 596                        netdev_dbg(dev->net, "unlink urb err, %d\n", retval);
 597                else
 598                        count++;
 599        }
 600        spin_unlock_irqrestore (&q->lock, flags);
 601        return count;
 602}
 603
 604// Flush all pending rx urbs
 605// minidrivers may need to do this when the MTU changes
 606
 607void usbnet_unlink_rx_urbs(struct usbnet *dev)
 608{
 609        if (netif_running(dev->net)) {
 610                (void) unlink_urbs (dev, &dev->rxq);
 611                tasklet_schedule(&dev->bh);
 612        }
 613}
 614EXPORT_SYMBOL_GPL(usbnet_unlink_rx_urbs);
 615
 616/*-------------------------------------------------------------------------*/
 617
 618// precondition: never called in_interrupt
 619static void usbnet_terminate_urbs(struct usbnet *dev)
 620{
 621        DECLARE_WAIT_QUEUE_HEAD_ONSTACK(unlink_wakeup);
 622        DECLARE_WAITQUEUE(wait, current);
 623        int temp;
 624
 625        /* ensure there are no more active urbs */
 626        add_wait_queue(&unlink_wakeup, &wait);
 627        set_current_state(TASK_UNINTERRUPTIBLE);
 628        dev->wait = &unlink_wakeup;
 629        temp = unlink_urbs(dev, &dev->txq) +
 630                unlink_urbs(dev, &dev->rxq);
 631
 632        /* maybe wait for deletions to finish. */
 633        while (!skb_queue_empty(&dev->rxq)
 634                && !skb_queue_empty(&dev->txq)
 635                && !skb_queue_empty(&dev->done)) {
 636                        schedule_timeout(msecs_to_jiffies(UNLINK_TIMEOUT_MS));
 637                        set_current_state(TASK_UNINTERRUPTIBLE);
 638                        netif_dbg(dev, ifdown, dev->net,
 639                                  "waited for %d urb completions\n", temp);
 640        }
 641        set_current_state(TASK_RUNNING);
 642        dev->wait = NULL;
 643        remove_wait_queue(&unlink_wakeup, &wait);
 644}
 645
 646int usbnet_stop (struct net_device *net)
 647{
 648        struct usbnet           *dev = netdev_priv(net);
 649        struct driver_info      *info = dev->driver_info;
 650        int                     retval;
 651
 652        clear_bit(EVENT_DEV_OPEN, &dev->flags);
 653        netif_stop_queue (net);
 654
 655        netif_info(dev, ifdown, dev->net,
 656                   "stop stats: rx/tx %lu/%lu, errs %lu/%lu\n",
 657                   net->stats.rx_packets, net->stats.tx_packets,
 658                   net->stats.rx_errors, net->stats.tx_errors);
 659
 660        /* allow minidriver to stop correctly (wireless devices to turn off
 661         * radio etc) */
 662        if (info->stop) {
 663                retval = info->stop(dev);
 664                if (retval < 0)
 665                        netif_info(dev, ifdown, dev->net,
 666                                   "stop fail (%d) usbnet usb-%s-%s, %s\n",
 667                                   retval,
 668                                   dev->udev->bus->bus_name, dev->udev->devpath,
 669                                   info->description);
 670        }
 671
 672        if (!(info->flags & FLAG_AVOID_UNLINK_URBS))
 673                usbnet_terminate_urbs(dev);
 674
 675        usb_kill_urb(dev->interrupt);
 676
 677        usbnet_purge_paused_rxq(dev);
 678
 679        /* deferred work (task, timer, softirq) must also stop.
 680         * can't flush_scheduled_work() until we drop rtnl (later),
 681         * else workers could deadlock; so make workers a NOP.
 682         */
 683        dev->flags = 0;
 684        del_timer_sync (&dev->delay);
 685        tasklet_kill (&dev->bh);
 686        if (info->manage_power)
 687                info->manage_power(dev, 0);
 688        else
 689                usb_autopm_put_interface(dev->intf);
 690
 691        return 0;
 692}
 693EXPORT_SYMBOL_GPL(usbnet_stop);
 694
 695/*-------------------------------------------------------------------------*/
 696
 697// posts reads, and enables write queuing
 698
 699// precondition: never called in_interrupt
 700
 701int usbnet_open (struct net_device *net)
 702{
 703        struct usbnet           *dev = netdev_priv(net);
 704        int                     retval;
 705        struct driver_info      *info = dev->driver_info;
 706
 707        if ((retval = usb_autopm_get_interface(dev->intf)) < 0) {
 708                netif_info(dev, ifup, dev->net,
 709                           "resumption fail (%d) usbnet usb-%s-%s, %s\n",
 710                           retval,
 711                           dev->udev->bus->bus_name,
 712                           dev->udev->devpath,
 713                           info->description);
 714                goto done_nopm;
 715        }
 716
 717        // put into "known safe" state
 718        if (info->reset && (retval = info->reset (dev)) < 0) {
 719                netif_info(dev, ifup, dev->net,
 720                           "open reset fail (%d) usbnet usb-%s-%s, %s\n",
 721                           retval,
 722                           dev->udev->bus->bus_name,
 723                           dev->udev->devpath,
 724                           info->description);
 725                goto done;
 726        }
 727
 728        // insist peer be connected
 729        if (info->check_connect && (retval = info->check_connect (dev)) < 0) {
 730                netif_dbg(dev, ifup, dev->net, "can't open; %d\n", retval);
 731                goto done;
 732        }
 733
 734        /* start any status interrupt transfer */
 735        if (dev->interrupt) {
 736                retval = usb_submit_urb (dev->interrupt, GFP_KERNEL);
 737                if (retval < 0) {
 738                        netif_err(dev, ifup, dev->net,
 739                                  "intr submit %d\n", retval);
 740                        goto done;
 741                }
 742        }
 743
 744        set_bit(EVENT_DEV_OPEN, &dev->flags);
 745        netif_start_queue (net);
 746        netif_info(dev, ifup, dev->net,
 747                   "open: enable queueing (rx %d, tx %d) mtu %d %s framing\n",
 748                   (int)RX_QLEN(dev), (int)TX_QLEN(dev),
 749                   dev->net->mtu,
 750                   (dev->driver_info->flags & FLAG_FRAMING_NC) ? "NetChip" :
 751                   (dev->driver_info->flags & FLAG_FRAMING_GL) ? "GeneSys" :
 752                   (dev->driver_info->flags & FLAG_FRAMING_Z) ? "Zaurus" :
 753                   (dev->driver_info->flags & FLAG_FRAMING_RN) ? "RNDIS" :
 754                   (dev->driver_info->flags & FLAG_FRAMING_AX) ? "ASIX" :
 755                   "simple");
 756
 757        // delay posting reads until we're fully open
 758        tasklet_schedule (&dev->bh);
 759        if (info->manage_power) {
 760                retval = info->manage_power(dev, 1);
 761                if (retval < 0)
 762                        goto done;
 763                usb_autopm_put_interface(dev->intf);
 764        }
 765        return retval;
 766
 767done:
 768        usb_autopm_put_interface(dev->intf);
 769done_nopm:
 770        return retval;
 771}
 772EXPORT_SYMBOL_GPL(usbnet_open);
 773
 774/*-------------------------------------------------------------------------*/
 775
 776/* ethtool methods; minidrivers may need to add some more, but
 777 * they'll probably want to use this base set.
 778 */
 779
 780int usbnet_get_settings (struct net_device *net, struct ethtool_cmd *cmd)
 781{
 782        struct usbnet *dev = netdev_priv(net);
 783
 784        if (!dev->mii.mdio_read)
 785                return -EOPNOTSUPP;
 786
 787        return mii_ethtool_gset(&dev->mii, cmd);
 788}
 789EXPORT_SYMBOL_GPL(usbnet_get_settings);
 790
 791int usbnet_set_settings (struct net_device *net, struct ethtool_cmd *cmd)
 792{
 793        struct usbnet *dev = netdev_priv(net);
 794        int retval;
 795
 796        if (!dev->mii.mdio_write)
 797                return -EOPNOTSUPP;
 798
 799        retval = mii_ethtool_sset(&dev->mii, cmd);
 800
 801        /* link speed/duplex might have changed */
 802        if (dev->driver_info->link_reset)
 803                dev->driver_info->link_reset(dev);
 804
 805        return retval;
 806
 807}
 808EXPORT_SYMBOL_GPL(usbnet_set_settings);
 809
 810u32 usbnet_get_link (struct net_device *net)
 811{
 812        struct usbnet *dev = netdev_priv(net);
 813
 814        /* If a check_connect is defined, return its result */
 815        if (dev->driver_info->check_connect)
 816                return dev->driver_info->check_connect (dev) == 0;
 817
 818        /* if the device has mii operations, use those */
 819        if (dev->mii.mdio_read)
 820                return mii_link_ok(&dev->mii);
 821
 822        /* Otherwise, dtrt for drivers calling netif_carrier_{on,off} */
 823        return ethtool_op_get_link(net);
 824}
 825EXPORT_SYMBOL_GPL(usbnet_get_link);
 826
 827int usbnet_nway_reset(struct net_device *net)
 828{
 829        struct usbnet *dev = netdev_priv(net);
 830
 831        if (!dev->mii.mdio_write)
 832                return -EOPNOTSUPP;
 833
 834        return mii_nway_restart(&dev->mii);
 835}
 836EXPORT_SYMBOL_GPL(usbnet_nway_reset);
 837
 838void usbnet_get_drvinfo (struct net_device *net, struct ethtool_drvinfo *info)
 839{
 840        struct usbnet *dev = netdev_priv(net);
 841
 842        strncpy (info->driver, dev->driver_name, sizeof info->driver);
 843        strncpy (info->version, DRIVER_VERSION, sizeof info->version);
 844        strncpy (info->fw_version, dev->driver_info->description,
 845                sizeof info->fw_version);
 846        usb_make_path (dev->udev, info->bus_info, sizeof info->bus_info);
 847}
 848EXPORT_SYMBOL_GPL(usbnet_get_drvinfo);
 849
 850u32 usbnet_get_msglevel (struct net_device *net)
 851{
 852        struct usbnet *dev = netdev_priv(net);
 853
 854        return dev->msg_enable;
 855}
 856EXPORT_SYMBOL_GPL(usbnet_get_msglevel);
 857
 858void usbnet_set_msglevel (struct net_device *net, u32 level)
 859{
 860        struct usbnet *dev = netdev_priv(net);
 861
 862        dev->msg_enable = level;
 863}
 864EXPORT_SYMBOL_GPL(usbnet_set_msglevel);
 865
 866/* drivers may override default ethtool_ops in their bind() routine */
 867static const struct ethtool_ops usbnet_ethtool_ops = {
 868        .get_settings           = usbnet_get_settings,
 869        .set_settings           = usbnet_set_settings,
 870        .get_link               = usbnet_get_link,
 871        .nway_reset             = usbnet_nway_reset,
 872        .get_drvinfo            = usbnet_get_drvinfo,
 873        .get_msglevel           = usbnet_get_msglevel,
 874        .set_msglevel           = usbnet_set_msglevel,
 875};
 876
 877/*-------------------------------------------------------------------------*/
 878
 879/* work that cannot be done in interrupt context uses keventd.
 880 *
 881 * NOTE:  with 2.5 we could do more of this using completion callbacks,
 882 * especially now that control transfers can be queued.
 883 */
 884static void
 885kevent (struct work_struct *work)
 886{
 887        struct usbnet           *dev =
 888                container_of(work, struct usbnet, kevent);
 889        int                     status;
 890
 891        /* usb_clear_halt() needs a thread context */
 892        if (test_bit (EVENT_TX_HALT, &dev->flags)) {
 893                unlink_urbs (dev, &dev->txq);
 894                status = usb_autopm_get_interface(dev->intf);
 895                if (status < 0)
 896                        goto fail_pipe;
 897                status = usb_clear_halt (dev->udev, dev->out);
 898                usb_autopm_put_interface(dev->intf);
 899                if (status < 0 &&
 900                    status != -EPIPE &&
 901                    status != -ESHUTDOWN) {
 902                        if (netif_msg_tx_err (dev))
 903fail_pipe:
 904                                netdev_err(dev->net, "can't clear tx halt, status %d\n",
 905                                           status);
 906                } else {
 907                        clear_bit (EVENT_TX_HALT, &dev->flags);
 908                        if (status != -ESHUTDOWN)
 909                                netif_wake_queue (dev->net);
 910                }
 911        }
 912        if (test_bit (EVENT_RX_HALT, &dev->flags)) {
 913                unlink_urbs (dev, &dev->rxq);
 914                status = usb_autopm_get_interface(dev->intf);
 915                if (status < 0)
 916                        goto fail_halt;
 917                status = usb_clear_halt (dev->udev, dev->in);
 918                usb_autopm_put_interface(dev->intf);
 919                if (status < 0 &&
 920                    status != -EPIPE &&
 921                    status != -ESHUTDOWN) {
 922                        if (netif_msg_rx_err (dev))
 923fail_halt:
 924                                netdev_err(dev->net, "can't clear rx halt, status %d\n",
 925                                           status);
 926                } else {
 927                        clear_bit (EVENT_RX_HALT, &dev->flags);
 928                        tasklet_schedule (&dev->bh);
 929                }
 930        }
 931
 932        /* tasklet could resubmit itself forever if memory is tight */
 933        if (test_bit (EVENT_RX_MEMORY, &dev->flags)) {
 934                struct urb      *urb = NULL;
 935                int resched = 1;
 936
 937                if (netif_running (dev->net))
 938                        urb = usb_alloc_urb (0, GFP_KERNEL);
 939                else
 940                        clear_bit (EVENT_RX_MEMORY, &dev->flags);
 941                if (urb != NULL) {
 942                        clear_bit (EVENT_RX_MEMORY, &dev->flags);
 943                        status = usb_autopm_get_interface(dev->intf);
 944                        if (status < 0) {
 945                                usb_free_urb(urb);
 946                                goto fail_lowmem;
 947                        }
 948                        if (rx_submit (dev, urb, GFP_KERNEL) == -ENOLINK)
 949                                resched = 0;
 950                        usb_autopm_put_interface(dev->intf);
 951fail_lowmem:
 952                        if (resched)
 953                                tasklet_schedule (&dev->bh);
 954                }
 955        }
 956
 957        if (test_bit (EVENT_LINK_RESET, &dev->flags)) {
 958                struct driver_info      *info = dev->driver_info;
 959                int                     retval = 0;
 960
 961                clear_bit (EVENT_LINK_RESET, &dev->flags);
 962                status = usb_autopm_get_interface(dev->intf);
 963                if (status < 0)
 964                        goto skip_reset;
 965                if(info->link_reset && (retval = info->link_reset(dev)) < 0) {
 966                        usb_autopm_put_interface(dev->intf);
 967skip_reset:
 968                        netdev_info(dev->net, "link reset failed (%d) usbnet usb-%s-%s, %s\n",
 969                                    retval,
 970                                    dev->udev->bus->bus_name,
 971                                    dev->udev->devpath,
 972                                    info->description);
 973                } else {
 974                        usb_autopm_put_interface(dev->intf);
 975                }
 976        }
 977
 978        if (dev->flags)
 979                netdev_dbg(dev->net, "kevent done, flags = 0x%lx\n", dev->flags);
 980}
 981
 982/*-------------------------------------------------------------------------*/
 983
 984static void tx_complete (struct urb *urb)
 985{
 986        struct sk_buff          *skb = (struct sk_buff *) urb->context;
 987        struct skb_data         *entry = (struct skb_data *) skb->cb;
 988        struct usbnet           *dev = entry->dev;
 989
 990        if (urb->status == 0) {
 991                if (!(dev->driver_info->flags & FLAG_MULTI_PACKET))
 992                        dev->net->stats.tx_packets++;
 993                dev->net->stats.tx_bytes += entry->length;
 994        } else {
 995                dev->net->stats.tx_errors++;
 996
 997                switch (urb->status) {
 998                case -EPIPE:
 999                        usbnet_defer_kevent (dev, EVENT_TX_HALT);
1000                        break;
1001
1002                /* software-driven interface shutdown */
1003                case -ECONNRESET:               // async unlink
1004                case -ESHUTDOWN:                // hardware gone
1005                        break;
1006
1007                // like rx, tx gets controller i/o faults during khubd delays
1008                // and so it uses the same throttling mechanism.
1009                case -EPROTO:
1010                case -ETIME:
1011                case -EILSEQ:
1012                        usb_mark_last_busy(dev->udev);
1013                        if (!timer_pending (&dev->delay)) {
1014                                mod_timer (&dev->delay,
1015                                        jiffies + THROTTLE_JIFFIES);
1016                                netif_dbg(dev, link, dev->net,
1017                                          "tx throttle %d\n", urb->status);
1018                        }
1019                        netif_stop_queue (dev->net);
1020                        break;
1021                default:
1022                        netif_dbg(dev, tx_err, dev->net,
1023                                  "tx err %d\n", entry->urb->status);
1024                        break;
1025                }
1026        }
1027
1028        usb_autopm_put_interface_async(dev->intf);
1029        urb->dev = NULL;
1030        entry->state = tx_done;
1031        defer_bh(dev, skb, &dev->txq);
1032}
1033
1034/*-------------------------------------------------------------------------*/
1035
1036void usbnet_tx_timeout (struct net_device *net)
1037{
1038        struct usbnet           *dev = netdev_priv(net);
1039
1040        unlink_urbs (dev, &dev->txq);
1041        tasklet_schedule (&dev->bh);
1042
1043        // FIXME: device recovery -- reset?
1044}
1045EXPORT_SYMBOL_GPL(usbnet_tx_timeout);
1046
1047/*-------------------------------------------------------------------------*/
1048
1049netdev_tx_t usbnet_start_xmit (struct sk_buff *skb,
1050                                     struct net_device *net)
1051{
1052        struct usbnet           *dev = netdev_priv(net);
1053        int                     length;
1054        struct urb              *urb = NULL;
1055        struct skb_data         *entry;
1056        struct driver_info      *info = dev->driver_info;
1057        unsigned long           flags;
1058        int retval;
1059
1060        if (skb)
1061                skb_tx_timestamp(skb);
1062
1063        // some devices want funky USB-level framing, for
1064        // win32 driver (usually) and/or hardware quirks
1065        if (info->tx_fixup) {
1066                skb = info->tx_fixup (dev, skb, GFP_ATOMIC);
1067                if (!skb) {
1068                        if (netif_msg_tx_err(dev)) {
1069                                netif_dbg(dev, tx_err, dev->net, "can't tx_fixup skb\n");
1070                                goto drop;
1071                        } else {
1072                                /* cdc_ncm collected packet; waits for more */
1073                                goto not_drop;
1074                        }
1075                }
1076        }
1077        length = skb->len;
1078
1079        if (!(urb = usb_alloc_urb (0, GFP_ATOMIC))) {
1080                netif_dbg(dev, tx_err, dev->net, "no urb\n");
1081                goto drop;
1082        }
1083
1084        entry = (struct skb_data *) skb->cb;
1085        entry->urb = urb;
1086        entry->dev = dev;
1087        entry->state = tx_start;
1088        entry->length = length;
1089
1090        usb_fill_bulk_urb (urb, dev->udev, dev->out,
1091                        skb->data, skb->len, tx_complete, skb);
1092
1093        /* don't assume the hardware handles USB_ZERO_PACKET
1094         * NOTE:  strictly conforming cdc-ether devices should expect
1095         * the ZLP here, but ignore the one-byte packet.
1096         * NOTE2: CDC NCM specification is different from CDC ECM when
1097         * handling ZLP/short packets, so cdc_ncm driver will make short
1098         * packet itself if needed.
1099         */
1100        if (length % dev->maxpacket == 0) {
1101                if (!(info->flags & FLAG_SEND_ZLP)) {
1102                        if (!(info->flags & FLAG_MULTI_PACKET)) {
1103                                urb->transfer_buffer_length++;
1104                                if (skb_tailroom(skb)) {
1105                                        skb->data[skb->len] = 0;
1106                                        __skb_put(skb, 1);
1107                                }
1108                        }
1109                } else
1110                        urb->transfer_flags |= URB_ZERO_PACKET;
1111        }
1112
1113        spin_lock_irqsave(&dev->txq.lock, flags);
1114        retval = usb_autopm_get_interface_async(dev->intf);
1115        if (retval < 0) {
1116                spin_unlock_irqrestore(&dev->txq.lock, flags);
1117                goto drop;
1118        }
1119
1120#ifdef CONFIG_PM
1121        /* if this triggers the device is still a sleep */
1122        if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) {
1123                /* transmission will be done in resume */
1124                usb_anchor_urb(urb, &dev->deferred);
1125                /* no use to process more packets */
1126                netif_stop_queue(net);
1127                spin_unlock_irqrestore(&dev->txq.lock, flags);
1128                netdev_dbg(dev->net, "Delaying transmission for resumption\n");
1129                goto deferred;
1130        }
1131#endif
1132
1133        switch ((retval = usb_submit_urb (urb, GFP_ATOMIC))) {
1134        case -EPIPE:
1135                netif_stop_queue (net);
1136                usbnet_defer_kevent (dev, EVENT_TX_HALT);
1137                usb_autopm_put_interface_async(dev->intf);
1138                break;
1139        default:
1140                usb_autopm_put_interface_async(dev->intf);
1141                netif_dbg(dev, tx_err, dev->net,
1142                          "tx: submit urb err %d\n", retval);
1143                break;
1144        case 0:
1145                net->trans_start = jiffies;
1146                __skb_queue_tail (&dev->txq, skb);
1147                if (dev->txq.qlen >= TX_QLEN (dev))
1148                        netif_stop_queue (net);
1149        }
1150        spin_unlock_irqrestore (&dev->txq.lock, flags);
1151
1152        if (retval) {
1153                netif_dbg(dev, tx_err, dev->net, "drop, code %d\n", retval);
1154drop:
1155                dev->net->stats.tx_dropped++;
1156not_drop:
1157                if (skb)
1158                        dev_kfree_skb_any (skb);
1159                usb_free_urb (urb);
1160        } else
1161                netif_dbg(dev, tx_queued, dev->net,
1162                          "> tx, len %d, type 0x%x\n", length, skb->protocol);
1163#ifdef CONFIG_PM
1164deferred:
1165#endif
1166        return NETDEV_TX_OK;
1167}
1168EXPORT_SYMBOL_GPL(usbnet_start_xmit);
1169
1170/*-------------------------------------------------------------------------*/
1171
1172// tasklet (work deferred from completions, in_irq) or timer
1173
1174static void usbnet_bh (unsigned long param)
1175{
1176        struct usbnet           *dev = (struct usbnet *) param;
1177        struct sk_buff          *skb;
1178        struct skb_data         *entry;
1179
1180        while ((skb = skb_dequeue (&dev->done))) {
1181                entry = (struct skb_data *) skb->cb;
1182                switch (entry->state) {
1183                case rx_done:
1184                        entry->state = rx_cleanup;
1185                        rx_process (dev, skb);
1186                        continue;
1187                case tx_done:
1188                case rx_cleanup:
1189                        usb_free_urb (entry->urb);
1190                        dev_kfree_skb (skb);
1191                        continue;
1192                default:
1193                        netdev_dbg(dev->net, "bogus skb state %d\n", entry->state);
1194                }
1195        }
1196
1197        // waiting for all pending urbs to complete?
1198        if (dev->wait) {
1199                if ((dev->txq.qlen + dev->rxq.qlen + dev->done.qlen) == 0) {
1200                        wake_up (dev->wait);
1201                }
1202
1203        // or are we maybe short a few urbs?
1204        } else if (netif_running (dev->net) &&
1205                   netif_device_present (dev->net) &&
1206                   !timer_pending (&dev->delay) &&
1207                   !test_bit (EVENT_RX_HALT, &dev->flags)) {
1208                int     temp = dev->rxq.qlen;
1209                int     qlen = RX_QLEN (dev);
1210
1211                if (temp < qlen) {
1212                        struct urb      *urb;
1213                        int             i;
1214
1215                        // don't refill the queue all at once
1216                        for (i = 0; i < 10 && dev->rxq.qlen < qlen; i++) {
1217                                urb = usb_alloc_urb (0, GFP_ATOMIC);
1218                                if (urb != NULL) {
1219                                        if (rx_submit (dev, urb, GFP_ATOMIC) ==
1220                                            -ENOLINK)
1221                                                return;
1222                                }
1223                        }
1224                        if (temp != dev->rxq.qlen)
1225                                netif_dbg(dev, link, dev->net,
1226                                          "rxqlen %d --> %d\n",
1227                                          temp, dev->rxq.qlen);
1228                        if (dev->rxq.qlen < qlen)
1229                                tasklet_schedule (&dev->bh);
1230                }
1231                if (dev->txq.qlen < TX_QLEN (dev))
1232                        netif_wake_queue (dev->net);
1233        }
1234}
1235
1236
1237/*-------------------------------------------------------------------------
1238 *
1239 * USB Device Driver support
1240 *
1241 *-------------------------------------------------------------------------*/
1242
1243// precondition: never called in_interrupt
1244
1245void usbnet_disconnect (struct usb_interface *intf)
1246{
1247        struct usbnet           *dev;
1248        struct usb_device       *xdev;
1249        struct net_device       *net;
1250
1251        dev = usb_get_intfdata(intf);
1252        usb_set_intfdata(intf, NULL);
1253        if (!dev)
1254                return;
1255
1256        xdev = interface_to_usbdev (intf);
1257
1258        netif_info(dev, probe, dev->net, "unregister '%s' usb-%s-%s, %s\n",
1259                   intf->dev.driver->name,
1260                   xdev->bus->bus_name, xdev->devpath,
1261                   dev->driver_info->description);
1262
1263        net = dev->net;
1264        unregister_netdev (net);
1265
1266        cancel_work_sync(&dev->kevent);
1267
1268        if (dev->driver_info->unbind)
1269                dev->driver_info->unbind (dev, intf);
1270
1271        usb_kill_urb(dev->interrupt);
1272        usb_free_urb(dev->interrupt);
1273
1274        free_netdev(net);
1275        usb_put_dev (xdev);
1276}
1277EXPORT_SYMBOL_GPL(usbnet_disconnect);
1278
1279static const struct net_device_ops usbnet_netdev_ops = {
1280        .ndo_open               = usbnet_open,
1281        .ndo_stop               = usbnet_stop,
1282        .ndo_start_xmit         = usbnet_start_xmit,
1283        .ndo_tx_timeout         = usbnet_tx_timeout,
1284        .ndo_change_mtu         = usbnet_change_mtu,
1285        .ndo_set_mac_address    = eth_mac_addr,
1286        .ndo_validate_addr      = eth_validate_addr,
1287};
1288
1289/*-------------------------------------------------------------------------*/
1290
1291// precondition: never called in_interrupt
1292
1293static struct device_type wlan_type = {
1294        .name   = "wlan",
1295};
1296
1297static struct device_type wwan_type = {
1298        .name   = "wwan",
1299};
1300
1301int
1302usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
1303{
1304        struct usbnet                   *dev;
1305        struct net_device               *net;
1306        struct usb_host_interface       *interface;
1307        struct driver_info              *info;
1308        struct usb_device               *xdev;
1309        int                             status;
1310        const char                      *name;
1311        struct usb_driver       *driver = to_usb_driver(udev->dev.driver);
1312
1313        /* usbnet already took usb runtime pm, so have to enable the feature
1314         * for usb interface, otherwise usb_autopm_get_interface may return
1315         * failure if USB_SUSPEND(RUNTIME_PM) is enabled.
1316         */
1317        if (!driver->supports_autosuspend) {
1318                driver->supports_autosuspend = 1;
1319                pm_runtime_enable(&udev->dev);
1320        }
1321
1322        name = udev->dev.driver->name;
1323        info = (struct driver_info *) prod->driver_info;
1324        if (!info) {
1325                dev_dbg (&udev->dev, "blacklisted by %s\n", name);
1326                return -ENODEV;
1327        }
1328        xdev = interface_to_usbdev (udev);
1329        interface = udev->cur_altsetting;
1330
1331        usb_get_dev (xdev);
1332
1333        status = -ENOMEM;
1334
1335        // set up our own records
1336        net = alloc_etherdev(sizeof(*dev));
1337        if (!net) {
1338                dbg ("can't kmalloc dev");
1339                goto out;
1340        }
1341
1342        /* netdev_printk() needs this so do it as early as possible */
1343        SET_NETDEV_DEV(net, &udev->dev);
1344
1345        dev = netdev_priv(net);
1346        dev->udev = xdev;
1347        dev->intf = udev;
1348        dev->driver_info = info;
1349        dev->driver_name = name;
1350        dev->msg_enable = netif_msg_init (msg_level, NETIF_MSG_DRV
1351                                | NETIF_MSG_PROBE | NETIF_MSG_LINK);
1352        skb_queue_head_init (&dev->rxq);
1353        skb_queue_head_init (&dev->txq);
1354        skb_queue_head_init (&dev->done);
1355        skb_queue_head_init(&dev->rxq_pause);
1356        dev->bh.func = usbnet_bh;
1357        dev->bh.data = (unsigned long) dev;
1358        INIT_WORK (&dev->kevent, kevent);
1359        init_usb_anchor(&dev->deferred);
1360        dev->delay.function = usbnet_bh;
1361        dev->delay.data = (unsigned long) dev;
1362        init_timer (&dev->delay);
1363        mutex_init (&dev->phy_mutex);
1364
1365        dev->net = net;
1366        strcpy (net->name, "usb%d");
1367        memcpy (net->dev_addr, node_id, sizeof node_id);
1368
1369        /* rx and tx sides can use different message sizes;
1370         * bind() should set rx_urb_size in that case.
1371         */
1372        dev->hard_mtu = net->mtu + net->hard_header_len;
1373#if 0
1374// dma_supported() is deeply broken on almost all architectures
1375        // possible with some EHCI controllers
1376        if (dma_supported (&udev->dev, DMA_BIT_MASK(64)))
1377                net->features |= NETIF_F_HIGHDMA;
1378#endif
1379
1380        net->netdev_ops = &usbnet_netdev_ops;
1381        net->watchdog_timeo = TX_TIMEOUT_JIFFIES;
1382        net->ethtool_ops = &usbnet_ethtool_ops;
1383
1384        // allow device-specific bind/init procedures
1385        // NOTE net->name still not usable ...
1386        if (info->bind) {
1387                status = info->bind (dev, udev);
1388                if (status < 0)
1389                        goto out1;
1390
1391                // heuristic:  "usb%d" for links we know are two-host,
1392                // else "eth%d" when there's reasonable doubt.  userspace
1393                // can rename the link if it knows better.
1394                if ((dev->driver_info->flags & FLAG_ETHER) != 0 &&
1395                    ((dev->driver_info->flags & FLAG_POINTTOPOINT) == 0 ||
1396                     (net->dev_addr [0] & 0x02) == 0))
1397                        strcpy (net->name, "eth%d");
1398                /* WLAN devices should always be named "wlan%d" */
1399                if ((dev->driver_info->flags & FLAG_WLAN) != 0)
1400                        strcpy(net->name, "wlan%d");
1401                /* WWAN devices should always be named "wwan%d" */
1402                if ((dev->driver_info->flags & FLAG_WWAN) != 0)
1403                        strcpy(net->name, "wwan%d");
1404
1405                /* maybe the remote can't receive an Ethernet MTU */
1406                if (net->mtu > (dev->hard_mtu - net->hard_header_len))
1407                        net->mtu = dev->hard_mtu - net->hard_header_len;
1408        } else if (!info->in || !info->out)
1409                status = usbnet_get_endpoints (dev, udev);
1410        else {
1411                dev->in = usb_rcvbulkpipe (xdev, info->in);
1412                dev->out = usb_sndbulkpipe (xdev, info->out);
1413                if (!(info->flags & FLAG_NO_SETINT))
1414                        status = usb_set_interface (xdev,
1415                                interface->desc.bInterfaceNumber,
1416                                interface->desc.bAlternateSetting);
1417                else
1418                        status = 0;
1419
1420        }
1421        if (status >= 0 && dev->status)
1422                status = init_status (dev, udev);
1423        if (status < 0)
1424                goto out3;
1425
1426        if (!dev->rx_urb_size)
1427                dev->rx_urb_size = dev->hard_mtu;
1428        dev->maxpacket = usb_maxpacket (dev->udev, dev->out, 1);
1429
1430        if ((dev->driver_info->flags & FLAG_WLAN) != 0)
1431                SET_NETDEV_DEVTYPE(net, &wlan_type);
1432        if ((dev->driver_info->flags & FLAG_WWAN) != 0)
1433                SET_NETDEV_DEVTYPE(net, &wwan_type);
1434
1435        status = register_netdev (net);
1436        if (status)
1437                goto out3;
1438        netif_info(dev, probe, dev->net,
1439                   "register '%s' at usb-%s-%s, %s, %pM\n",
1440                   udev->dev.driver->name,
1441                   xdev->bus->bus_name, xdev->devpath,
1442                   dev->driver_info->description,
1443                   net->dev_addr);
1444
1445        // ok, it's ready to go.
1446        usb_set_intfdata (udev, dev);
1447
1448        netif_device_attach (net);
1449
1450        if (dev->driver_info->flags & FLAG_LINK_INTR)
1451                netif_carrier_off(net);
1452
1453        return 0;
1454
1455out3:
1456        if (info->unbind)
1457                info->unbind (dev, udev);
1458out1:
1459        free_netdev(net);
1460out:
1461        usb_put_dev(xdev);
1462        return status;
1463}
1464EXPORT_SYMBOL_GPL(usbnet_probe);
1465
1466/*-------------------------------------------------------------------------*/
1467
1468/*
1469 * suspend the whole driver as soon as the first interface is suspended
1470 * resume only when the last interface is resumed
1471 */
1472
1473int usbnet_suspend (struct usb_interface *intf, pm_message_t message)
1474{
1475        struct usbnet           *dev = usb_get_intfdata(intf);
1476
1477        if (!dev->suspend_count++) {
1478                spin_lock_irq(&dev->txq.lock);
1479                /* don't autosuspend while transmitting */
1480                if (dev->txq.qlen && PMSG_IS_AUTO(message)) {
1481                        spin_unlock_irq(&dev->txq.lock);
1482                        return -EBUSY;
1483                } else {
1484                        set_bit(EVENT_DEV_ASLEEP, &dev->flags);
1485                        spin_unlock_irq(&dev->txq.lock);
1486                }
1487                /*
1488                 * accelerate emptying of the rx and queues, to avoid
1489                 * having everything error out.
1490                 */
1491                netif_device_detach (dev->net);
1492                usbnet_terminate_urbs(dev);
1493                usb_kill_urb(dev->interrupt);
1494
1495                /*
1496                 * reattach so runtime management can use and
1497                 * wake the device
1498                 */
1499                netif_device_attach (dev->net);
1500        }
1501        return 0;
1502}
1503EXPORT_SYMBOL_GPL(usbnet_suspend);
1504
1505int usbnet_resume (struct usb_interface *intf)
1506{
1507        struct usbnet           *dev = usb_get_intfdata(intf);
1508        struct sk_buff          *skb;
1509        struct urb              *res;
1510        int                     retval;
1511
1512        if (!--dev->suspend_count) {
1513                /* resume interrupt URBs */
1514                if (dev->interrupt && test_bit(EVENT_DEV_OPEN, &dev->flags))
1515                        usb_submit_urb(dev->interrupt, GFP_NOIO);
1516
1517                spin_lock_irq(&dev->txq.lock);
1518                while ((res = usb_get_from_anchor(&dev->deferred))) {
1519
1520                        skb = (struct sk_buff *)res->context;
1521                        retval = usb_submit_urb(res, GFP_ATOMIC);
1522                        if (retval < 0) {
1523                                dev_kfree_skb_any(skb);
1524                                usb_free_urb(res);
1525                                usb_autopm_put_interface_async(dev->intf);
1526                        } else {
1527                                dev->net->trans_start = jiffies;
1528                                __skb_queue_tail(&dev->txq, skb);
1529                        }
1530                }
1531
1532                smp_mb();
1533                clear_bit(EVENT_DEV_ASLEEP, &dev->flags);
1534                spin_unlock_irq(&dev->txq.lock);
1535
1536                if (test_bit(EVENT_DEV_OPEN, &dev->flags)) {
1537                        if (!(dev->txq.qlen >= TX_QLEN(dev)))
1538                                netif_start_queue(dev->net);
1539                        tasklet_schedule (&dev->bh);
1540                }
1541        }
1542        return 0;
1543}
1544EXPORT_SYMBOL_GPL(usbnet_resume);
1545
1546
1547/*-------------------------------------------------------------------------*/
1548
1549static int __init usbnet_init(void)
1550{
1551        /* Compiler should optimize this out. */
1552        BUILD_BUG_ON(
1553                FIELD_SIZEOF(struct sk_buff, cb) < sizeof(struct skb_data));
1554
1555        random_ether_addr(node_id);
1556        return 0;
1557}
1558module_init(usbnet_init);
1559
1560static void __exit usbnet_exit(void)
1561{
1562}
1563module_exit(usbnet_exit);
1564
1565MODULE_AUTHOR("David Brownell");
1566MODULE_DESCRIPTION("USB network driver framework");
1567MODULE_LICENSE("GPL");
1568
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.