1. 08 1月, 2009 40 次提交
    • I
      i2400m/SDIO: TX and RX path backends · 514ec71f
      Inaky Perez-Gonzalez 提交于
      Implements the backend so that the generic driver can TX/RX to/from
      the SDIO device.
      
      For RX, when data is ready the SDIO IRQ is fired and that will
      allocate an skb, put all the data there and then pass it to the
      generic driver RX code for processing and delivery.
      
      TX, when kicked by the generic driver, will schedule work on a
      driver-specific workqueue that pulls data from the TX FIFO and sends
      it to the device until it drains it.
      
      Thread contexts are needed as SDIO functions are blocking.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      514ec71f
    • I
      i2400m/SDIO: firmware upload backend · 020bb6f3
      Inaky Perez-Gonzalez 提交于
      This implements the backends for the generic driver (i2400m) to be
      able to load firmware to the SDIO device.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      020bb6f3
    • I
      i2400m/SDIO: probe/disconnect, dev init/shutdown and reset backends · a0848826
      Inaky Perez-Gonzalez 提交于
      Implements probe/disconnect for the SDIO device, as well as main
      backends for the generic driver to control the SDIO device
      (bus_dev_start(), bus_dev_stop() and bus_reset()).
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      a0848826
    • I
      i2400m/SDIO: header for the SDIO subdriver · 17d559af
      Inaky Perez-Gonzalez 提交于
      This contains the common function declaration and constants for the
      SDIO driver for the 2400m Wireless WiMAX Connection and it's debug
      level settings.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      17d559af
    • I
      i2400m/USB: TX and RX path backends · a8ebf98f
      Inaky Perez-Gonzalez 提交于
      Implements the backend so that the generic driver can TX/RX to/from
      the USB device.
      
      TX is implemented with a kthread sitting in a never-ending loop that
      when kicked by the generic driver's TX code will pull data from the TX
      FIFO and send it to the device until it drains it. Then it goes back
      sleep, waiting for another kick.
      
      RX is implemented in a similar fashion, but reads are kicked in by the
      device notifying in the interrupt endpoint that data is ready. Device
      reset notifications are also sent via the notification endpoint.
      
      We need a thread contexts to run USB autopm functions (blocking) and
      to process the received data (can get to be heavy in processing
      time).
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      a8ebf98f
    • I
      i2400m/USB: firmware upload backend · 79503810
      Inaky Perez-Gonzalez 提交于
      This implements the backends for the generic driver (i2400m) to be
      able to load firmware to the USB device.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      79503810
    • I
      i2400m/USB: probe/disconnect, dev init/shutdown and reset backends · f398e424
      Inaky Perez-Gonzalez 提交于
      Implements probe/disconnect for the USB device, as well as main
      backends for the generic driver to control the USB device
      (bus_dev_start(), bus_dev_stop() and bus_reset()).
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      f398e424
    • I
      i2400m/USB: header for the USB bus driver · 11a7d0e3
      Inaky Perez-Gonzalez 提交于
      This contains the common function declaration and constants for the
      USB driver for the 2400m Wireless WiMAX Connection, as well as it's
      debug level settings.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      11a7d0e3
    • I
      i2400m: debugfs controls · c71228ca
      Inaky Perez-Gonzalez 提交于
      Expose knobs to control the device (induce reset, power saving,
      querying tx or rx stats, internal debug information and debug level
      manipulation).
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      c71228ca
    • I
      i2400m: various functions for device management · 3a35a1d0
      Inaky Perez-Gonzalez 提交于
      This is a collection of functions used to control the device (plus a
      few helpers).
      
      There are utilities for handling TLV buffers, hooks on the device's
      reports to act on device changes of state [i2400m_report_hook()], on
      acks to commands [i2400m_msg_ack_hook()], a helper for sending
      commands to the device and blocking until a reply arrives
      [i2400m_msg_to_dev()], a few high level commands for manipulating the
      device state, powersaving mode and configuration plus the routines to
      setup the device once communication is established with it
      [i2400m_dev_initialize()].
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      3a35a1d0
    • I
      i2400m: RX and TX data/control paths · aa5a7aca
      Inaky Perez-Gonzalez 提交于
      Handling of TX/RX data to/from the i2400m device (IP packets, control
      and diagnostics). On RX, this parses the received read transaction
      from the device, breaks it in chunks and passes it to the
      corresponding subsystems (network and control).
      
      Transmission to the device is done through a software FIFO, as
      data/control frames can be coalesced (while the device is reading the
      previous tx transaction, others accumulate). A FIFO is used because at
      the end it is resource-cheaper that scatter/gather over USB. As well,
      most traffic is going to be download (vs upload).
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      aa5a7aca
    • I
      i2400m: firmware loading and bootrom initialization · 467cc396
      Inaky Perez-Gonzalez 提交于
      Implements the firmware loader (using the bus-specific driver's
      backends for the actual upload). The most critical thing in here is
      the piece that puts the device in boot-mode from any other
      (undetermined) state, otherwise, it is just pushing the bytes from the
      firmware file to the device.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      467cc396
    • I
      i2400m: linkage to the networking stack · ce6cde92
      Inaky Perez-Gonzalez 提交于
      Implementation of the glue to the network stack so the WiMAX device
      shows up as an Ethernet device.
      
      Initially we shot for implementing a Pure IP device -- however, the
      world seems to turn around Ethernet devices. Main issues were with the
      ISC DHCP client and servers (as they don't understand types other than
      Ethernet and Token Ring).
      
      We proceeded to register with IANA the PureIP hw type, so that DHCP
      requests could declare such. We also created patches to the main ISC
      DHCP versions to support it. However, until all that permeates into
      deployments, there is going to be a long time.
      
      So we moved back to wrap Ethernet frames around the PureIP device. At
      the time being this has overhead; we need to reallocate with space for
      an Ethernet header. The reason is the device-to-host protocol
      coalesces many network packets into a single message, so we can't
      introduce Ethernet headers without overwriting valid data from other
      packets.
      
      Coming-soon versions of the firmware have this issue solved.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      ce6cde92
    • I
      i2400m: Generic probe/disconnect, reset and message passing · 024f7f31
      Inaky Perez-Gonzalez 提交于
      Implements the generic probe and disconnect functions that will be
      called by the USB and SDIO driver's probe/disconnect functions.
      
      Implements the backends for the WiMAX stack's basic operations:
      message passing, rfkill control and reset.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      024f7f31
    • I
      i2400m: host/device procotol and core driver definitions · ea24652d
      Inaky Perez-Gonzalez 提交于
      The wimax/i2400m.h defines the structures and constants for the
      host-device protocols:
      
       - boot / firmware upload protocol
      
       - general data transport protocol
      
       - control protocol
      
      It is done in such a way that can also be used verbatim by user space.
      
      drivers/net/wimax/i2400m.h defines all the APIs used by the core,
      bus-generic driver (i2400m) and the bus specific drivers
      (i2400m-BUSNAME). It also gives a roadmap to the driver
      implementation.
      
      debug-levels.h adds the core driver's debug settings.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      ea24652d
    • I
      i2400m: documentation and instructions for usage · 3e91029a
      Inaky Perez-Gonzalez 提交于
      The driver for the i2400m is a stacked driver. There is a core driver,
      the bus-generic driver that has no knowledge or dependencies on how
      the device is connected to the system; it only knows how to speak the
      device protocol. Then there are the bus-specific drivers (for USB and
      SDIO) that provide backends for the generic driver to communicate with
      the device.
      
      The bus generic driver connects to the network and WiMAX stacks on the
      top side, and on the bottom to the bus-specific drivers.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      3e91029a
    • I
      wimax: Makefile, Kconfig and docbook linkage for the stack · b0c83ae1
      Inaky Perez-Gonzalez 提交于
      This patch provides Makefile and KConfig for the WiMAX stack,
      integrating them into the networking stack's Makefile, Kconfig and
      doc-book templates.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      b0c83ae1
    • I
      wimax: debugfs controls · 617209cc
      Inaky Perez-Gonzalez 提交于
      Expose knobs to control the stack's debug output.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      617209cc
    • I
      wimax: basic API: kernel/user messaging, rfkill and reset · 3e65646b
      Inaky Perez-Gonzalez 提交于
      Implements the three basic operations provided by the stack's control
      interface to WiMAX devices:
      
      - Messaging channel between user space and driver/device
      
        This implements a direct communication channel between user space
        and the driver/device, by which free form messages can be sent back
        and forth.
      
        This is intended for device-specific features, vendor quirks, etc.
      
      - RF-kill framework integration
      
        Provide most of the RF-Kill integration for WiMAX drivers so that
        all device drivers have to do is after wimax_dev_add() is call
        wimax_report_rfkill_{hw,sw}() to update initial state and then every
        time it changes.
      
        Provides wimax_rfkill() for the kernel to call to set software
        RF-Kill status and/or query current hardware and software switch
        status.
      
        Exports wimax_rfkill() over generic netlink to user space.
      
      - Reset a WiMAX device
      
        Provides wimax_reset() for the kernel to reset a wimax device as
        needed and exports it over generic netlink to user space.
      
      This API is clearly limited, as it still provides no way to do the
      basic scan, connect and disconnect in a hardware independent way.  The
      WiMAX case is more complex than WiFi due to the way networks are
      discovered and provisioned.
      
      The next developments are to add the basic operations so they can be
      offerent by different drivers. However, we'd like to get more vendors
      to jump in and provide feedback of how the user/kernel API/abstraction
      layer should be.
      
      The user space code for the i2400m, as of now, uses the messaging
      channel, but that will change as the API evolves.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      3e65646b
    • I
      genetlink: export genl_unregister_mc_group() · 3efb40c2
      Inaky Perez-Gonzalez 提交于
      Add an EXPORT_SYMBOL() to genl_unregister_mc_group(), to allow
      unregistering groups on the run. EXPORT_SYMBOL_GPL() is not used as
      the rest of the functions exported by this module (eg:
      genl_register_mc_group) are also not _GPL().
      
      Cleanup is currently done when unregistering a family, but there is
      no way to unregister a single multicast group due to that function not
      being exported. Seems to be a mistake as it is documented as for
      external consumption.
      
      This is needed by the WiMAX stack to be able to cleanup unused mc
      groups.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Acked-by: NJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      3efb40c2
    • I
      wimax: generic device management (registration, deregistration, lookup) · 15530dfd
      Inaky Perez-Gonzalez 提交于
      Implements the basic life cycles of a 'struct wimax_dev', some common
      generic netlink functionality for marshalling calls to user space,
      and the device state machine.
      
      For looking up net devices based on their generic netlink family IDs,
      use a low overhead method that optimizes for the case where most
      systems have a single WiMAX device, or at most, a very low number of
      WiMAX adaptors.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      15530dfd
    • I
      wimax: debug macros and debug settings for the WiMAX stack · ea912f4e
      Inaky Perez-Gonzalez 提交于
      This file contains a simple debug framework that is used in the stack;
      it allows the debug level to be controlled at compile-time (so the
      debug code is optimized out) and at run-time (for what wasn't compiled
      out).
      
      This is eventually going to be moved to use dynamic_printk(). Just
      need to find time to do it.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      ea912f4e
    • I
      wimax: internal API for the kernel space WiMAX stack · 60fa9ca6
      Inaky Perez-Gonzalez 提交于
      This file contains declarations and definitions used by the different
      submodules of the stack.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      60fa9ca6
    • I
      wimax: headers for kernel API and user space interaction · ace22f08
      Inaky Perez-Gonzalez 提交于
      Definitions for the user/kernel API protocol through generic
      netlink. User space can copy it verbatim and use it.
      
      Kernel API definition declares the main data types and calls for the
      drivers to integrate into the WiMAX stack. Provides usage
      documentation.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      ace22f08
    • I
      wimax: documentation for the stack · 0d695913
      Inaky Perez-Gonzalez 提交于
      wimax documentation
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      0d695913
    • I
      debugfs: add helpers for exporting a size_t simple value · 5e078787
      Inaky Perez-Gonzalez 提交于
      In the same spirit as debugfs_create_*(), introduce helpers for
      exporting size_t values over debugfs.
      
      The only trick done is that the format verifier is kept at %llu
      instead of %zu; otherwise type warnings would pop up:
      
      format ‘%zu’ expects type ‘size_t’, but argument 2 has type ‘long long unsigned int’
      
      There is no real way to fix this one--however, we can consider %llu
      and %zu to be compatible if we consider that we are using the same for
      validating in debugfs_create_{x,u}{8,16,32}().
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      5e078787
    • G
      USB: remove info() macro from usb.h · 34c65d82
      Greg Kroah-Hartman 提交于
      USB should not be having it's own printk macros, so remove info() and
      use the system-wide standard of dev_info() wherever possible.
      
      No one in the tree is using the macro, so it can now be removed.
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      34c65d82
    • G
      USB: remove warn() macro from usb.h · 338b67b0
      Greg Kroah-Hartman 提交于
      USB should not be having it's own printk macros, so remove warn() and
      use the system-wide standard of dev_warn() wherever possible.  In the
      few places that will not work out, use a basic printk().
      
      Now that all in-tree users are gone, remove the macro.
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      338b67b0
    • G
      USB: add siemens_mpi usb-serial "stub" driver · 5aa63750
      Greg Kroah-Hartman 提交于
      This driver got rescued from a few years ago and was requested to be
      added.  So I cleaned it up, ported it to the latest kernel version and
      here it is.
      
      Cc: Thomas Hergenhahn <thomas.hergenhahn@suse.de>
      Cc: Emmanuele <iemmav@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      5aa63750
    • G
      USB: add new opticon serial driver · 57262b82
      Greg Kroah-Hartman 提交于
      This is for the serial mode of the Opticon barcode scanner.
      
      Cc: Kees Stoop <kees.stoop@opticon.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      57262b82
    • M
      USB: emi26: fix oops on load · 327d74f6
      Marcin Slusarz 提交于
      Fix oops introduced by commit ae93a55b
      (emi26: use request_firmware()):
      
      usb 1-1: new full speed USB device using uhci_hcd and address 2
      usb 1-1: configuration #1 chosen from 1 choice
      emi26 - firmware loader 1-1:1.0: emi26_probe start
      usb 1-1: firmware: requesting emi26/loader.fw
      usb 1-1: firmware: requesting emi26/bitstream.fw
      usb 1-1: firmware: requesting emi26/firmware.fw
      usb 1-1: emi26_set_reset - 1
      usb 1-1: emi26_set_reset - 0
      BUG: unable to handle kernel NULL pointer dereference at 00000000
      IP: [<f80dc487>] emi26_probe+0x2f7/0x620 [emi26]
      *pde = 00000000
      Oops: 0000 [#1] SMP
      last sysfs file: /sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/firmware/1-1/loading
      Modules linked in: emi26(+) ipv6 cpufreq_ondemand coretemp arc4 ecb iwl3945 irtty_sir sir_dev nsc_ircc ehci_hcd uhci_hcd mac80211 irda usbcore snd_hda_intel thinkpad_acpi rfkill hwmon led_class e1000e snd_pcm cfg80211 snd_timer crc_ccitt snd snd_page_alloc aes_generic
      
      Pid: 5082, comm: modprobe Not tainted (2.6.28 #2) 17023QG
      EIP: 0060:[<f80dc487>] EFLAGS: 00010206 CPU: 0
      EIP is at emi26_probe+0x2f7/0x620 [emi26]
      EAX: 0000015c EBX: 00000000 ECX: c1ffd9c0 EDX: 00000000
      ESI: 0000015c EDI: f6bb215c EBP: f6bb0400 ESP: f00ebcfc
       DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
      Process modprobe (pid: 5082, ti=f00ea000 task=f5c7c700 task.ti=f00ea000)
      Stack:
       0000015c 000000a5 f6a67cb8 f80dc7e0 c01c6262 fbef2986 f6bb2000 00008fe0
       0000015c f715f748 f715f740 f715f738 f715f748 f6a67c00 f80dd040 f80dcfc0
       f6bb0400 fbacb290 f6a67c94 fbae0160 c01c70bf 00000000 f6a67c1c 00000000
      Call Trace:
       [<c01c6262>] sysfs_add_one+0x12/0x50
       [<fbacb290>] usb_probe_interface+0xa0/0x140 [usbcore]
       [<c01c70bf>] sysfs_create_link+0xf/0x20
       [<c02dead2>] driver_probe_device+0x82/0x180
       [<fbac9eeb>] usb_match_id+0x3b/0x50 [usbcore]
       [<c02dec4e>] __driver_attach+0x7e/0x80
       [<c02de27a>] bus_for_each_dev+0x3a/0x60
       [<c02de956>] driver_attach+0x16/0x20
       [<c02debd0>] __driver_attach+0x0/0x80
       [<c02de7b1>] bus_add_driver+0x1a1/0x220
       [<c02dee4d>] driver_register+0x4d/0x120
       [<c024e622>] idr_get_empty_slot+0xf2/0x290
       [<fbacab71>] usb_register_driver+0x81/0x100 [usbcore]
       [<f806c000>] emi26_init+0x0/0x14 [emi26]
       [<c0101126>] do_one_initcall+0x36/0x1b0
       [<c01c5e70>] sysfs_ilookup_test+0x0/0x10
       [<c0197a61>] ifind+0x31/0x90
       [<c01c6229>] __sysfs_add_one+0x59/0x80
       [<c01c64e4>] sysfs_addrm_finish+0x14/0x1c0
       [<c0175ca3>] __vunmap+0xa3/0xd0
       [<c014b854>] load_module+0x1544/0x1640
       [<c014b9d7>] sys_init_module+0x87/0x1b0
       [<c0187f41>] sys_read+0x41/0x70
       [<c01032a5>] sysenter_do_call+0x12/0x21
       [<c03d0000>] wait_for_common+0x40/0x110
      Code: 66 c1 e8 08 66 09 d0 75 a5 31 d2 89 e8 e8 72 fc ff ff 85 c0 0f 88 9a 02 00 00 b8 fa 00 00 00 e8 30 46 05 c8 8b 74 24 28 8b 5e 04 <8b> 03 89 44 24 1c 0f c8 89 44 24 1c 0f b7 4b 04 c7 44 24 20 00
      EIP: [<f80dc487>] emi26_probe+0x2f7/0x620 [emi26] SS:ESP 0068:f00ebcfc
      ---[ end trace 2eefa13825431230 ]---
      
      After the last "package" of firmware data is sent to the device, we dereference
      NULL pointer (on access to rec->addr). Fix it.
      Reported--by: NDavid Flatz <david@upcs.at>
      Tested-by: NDavid Flatz <david@upcs.at>
      Signed-off-by: NMarcin Slusarz <marcin.slusarz@gmail.com>
      Cc: David Woodhouse <dwmw2@infradead.org>
      Cc: stable <stable@kernel.org> [2.6.27, 2.6.28]
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      327d74f6
    • S
      USB: Fix goku_udc usb speed handling · 32e7fea2
      SangSu Park 提交于
      The usb gadget framework revealed weakness in the godu_udc
      gadget driver register function. Instead of checking if
      speed asked for was USB_LOW_SPEED upon usb_gadget_register()
      to deny service, it checked only for USB_FULL_SPEED, thus
      denying service to usb high speed capable gadgets.
      Signed-off-by: NSangSu Park <sangsu@gmail.com>
      Acked-by: NDavid Brownell <dbrownell@users.sourceforge.net>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      
      32e7fea2
    • M
      USB: fix minor nit in usbfs checking · ed0c7720
      Mark Lord 提交于
      One minor nit did show up, though.  The patch below
      seems to make more sense than the code does without it.
      Signed-off-by: NMark Lord <mlord@pobox.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      
      ed0c7720
    • A
      USB: re-enable interface after driver unbinds · 2caf7fcd
      Alan Stern 提交于
      This patch (as1197) fixes an error introduced recently.  Since a
      significant number of devices can't handle Set-Interface requests, we
      no longer call usb_set_interface() when a driver unbinds from an
      interface, provided the interface is already in altsetting 0.  However
      the interface still does get disabled, and the call to
      usb_set_interface() was the only thing re-enabling it.  Since the
      interface doesn't get re-enabled, further attempts to use it fail.
      
      So the patch adds a call to usb_enable_interface() when a driver
      unbinds and the interface is in altsetting 0.  For this to work
      right, the interface's endpoints have to be re-enabled but their
      toggles have to be left alone.  Therefore an additional argument is
      added to usb_enable_endpoint() and usb_enable_interface(), a flag
      indicating whether or not the endpoint toggles should be reset.
      
      This is a forward-ported version of a patch which fixes Bugzilla
      #12301.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Reported-by: NDavid Roka <roka@dawid.hu>
      Reported-by: NErik Ekman <erik@kryo.se>
      Tested-by: NErik Ekman <erik@kryo.se>
      Tested-by: NAlon Bar-Lev <alon.barlev@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      2caf7fcd
    • A
      USB: cancel pending Set-Config requests if userspace gets there first · df718962
      Alan Stern 提交于
      This patch (as1195) eliminates a potential problem identified by
      Oliver Neukum.  When a driver queues an asynchronous Set-Config
      request using usb_driver_set_configuration(), the request should be
      cancelled if userspace changes the configuration first.  The patch
      introduces a linked list of pending async Set-Config requests, and
      uses it to invalidate the requests for a particular device whenever
      that device's configuration is set.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Cc: Oliver Neukum <oliver@neukum.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      df718962
    • A
      USB: automatically enable wakeup for PCI host controllers · 6fd9086a
      Alan Stern 提交于
      This patch (as1193b) enables wakeup during initialization for all PCI
      host controllers, and it removes some code (and comments!) that are no
      longer needed now that the PCI core automatically initializes wakeup
      settings for all new devices.
      
      The idea is that the bus should initialize wakeup, and the bus glue
      or controller driver should enable it.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      6fd9086a
    • A
      USB: fix up suspend and resume for PCI host controllers · a0d4922d
      Alan Stern 提交于
      This patch (as1192) rearranges the USB PCI host controller suspend and
      resume and resume routines:
      
      	Use pci_wake_from_d3() for enabling and disabling wakeup,
      	instead of pci_enable_wake().
      
      	Carry out the actual state change while interrupts are
      	disabled.
      
      	Change the order of the preparations to agree with the
      	general recommendation for PCI devices, instead of
      	messing around with the wakeup settings while the device
      	is in D3.
      
      		In .suspend:
      			Call the underlying driver to disable IRQ
      				generation;
      			pci_wake_from_d3(device_may_wakeup());
      			pci_disable_device();
      
      		In .suspend_late:
      			pci_save_state();
      			pci_set_power_state(D3hot);
      			(for PPC_PMAC) Disable ASIC clocks
      
      		In .resume_early:
      			(for PPC_PMAC) Enable ASIC clocks
      			pci_set_power_state(D0);
      			pci_restore_state();
      
      		In .resume:
      			pci_enable_device();
      			pci_set_master();
      			pci_wake_from_d3(0);
      			Call the underlying driver to reenable IRQ
      				generation
      
      	Add the necessary .suspend_late and .resume_early method
      	pointers to the PCI host controller drivers.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      CC: Rafael J. Wysocki <rjw@sisk.pl>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      a0d4922d
    • A
      USB: storage: set CAPACITY_HEURISTICS flag for bad vendors · a81a81a2
      Alan Stern 提交于
      This patch (as1194) makes usb-storage set the CAPACITY_HEURISTICS flag
      for all devices made by Nokia, Nikon, or Motorola.  These companies
      seem to include the READ CAPACITY bug in all of their devices.
      
      Since cell phones and digital cameras rely on flash storage, which
      always has an even number of sectors, setting CAPACITY_HEURISTICS
      shouldn't cause any problems.  Not even if the companies wise up and
      start making devices without the bug.
      
      A large number of unusual_devs entries are now unnecessary, so the
      patch removes them.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      a81a81a2
    • A
      USB: storage: make the "quirks=" module parameter writable · c838ea46
      Alan Stern 提交于
      This patch (as1190) makes usb-storage's "quirks=" module parameter
      writable, so that users can add entries for their devices at runtime
      with no need to reboot or reload usb-storage.
      
      New codes are added for the SANE_SENSE, CAPACITY_HEURISTICS, and
      CAPACITY_OK flags.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      c838ea46
    • A
      USB: storage: add last-sector hacks · 25ff1c31
      Alan Stern 提交于
      This patch (as1189b) adds some hacks to usb-storage for dealing with
      the growing problems involving bad capacity values and last-sector
      accesses:
      
      	A new flag, US_FL_CAPACITY_OK, is created to indicate that
      	the device is known to report its capacity correctly.  An
      	unusual_devs entry for Linux's own File-backed Storage Gadget
      	is added with this flag set, since g_file_storage always
      	reports the correct capacity and since the capacity need
      	not be even (it is determined by the size of the backing
      	file).
      
      	An entry in unusual_devs.h which has only the CAPACITY_OK
      	flag set shouldn't prejudice libusual, since the device will
      	work perfectly well with either usb-storage or ub.  So a
      	new macro, COMPLIANT_DEV, is added to let libusual know
      	about these entries.
      
      	When a last-sector access succeeds and the total number of
      	sectors is odd (the unexpected case, in which guessing that
      	the number is even might cause trouble), a WARN is triggered.
      	The kerneloops.org project will collect these warnings,
      	allowing us to add CAPACITY_OK flags for the devices in
      	question before implementing the default-to-even heuristic.
      	If users want to prevent the stack dump produced by the WARN,
      	they can disable the hack by adding an unusual_devs entry
      	for their device with the CAPACITY_OK flag.
      
      	When a last-sector access fails three times in a row and
      	neither the FIX_CAPACITY nor the CAPACITY_OK flag is set,
      	we assume the last-sector bug is present.  We replace the
      	existing status and sense data with values that will cause
      	the SCSI core to fail the access immediately rather than
      	retry indefinitely.  This should fix the difficulties
      	people have been having with Nokia phones.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      25ff1c31