1. 30 10月, 2016 1 次提交
  2. 08 2月, 2014 1 次提交
    • V
      staging: usbip: convert usbip-host driver to usb_device_driver · b7945b77
      Valentina Manea 提交于
      This driver was previously an interface driver. Since USB/IP
      exports a whole device, not just an interface, it would make
      sense to be a device driver.
      
      This patch also modifies the way userspace sees and uses a
      shared device:
      
      * the usbip_status file is no longer created for interface 0, but for
      the whole device (such as
      /sys/devices/pci0000:00/0000:00:01.2/usb1/1-1/usbip_status).
      * per interface information, such as interface class or protocol, is
      no longer sent/received; only device specific information is
      transmitted.
      * since the driver was moved one level below in the USB architecture,
      there is no need to bind/unbind each interface, just the device as a
      whole.
      Signed-off-by: NValentina Manea <valentina.manea.m@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b7945b77
  3. 29 3月, 2013 1 次提交
  4. 12 1月, 2013 1 次提交
  5. 16 11月, 2012 1 次提交
    • H
      USB: fix authorization and claimed port logic · c13b86a3
      Hindin Joseph 提交于
          It looks like I've run into some inconsistency in the USB stack behavior.
      
          The USB stack maintains, among others, two states for the attach
      USB device: authorized and owned. Authorization state is accessible to
      the user space code through correspondent sysfs files, the ownership
      can be set by claiming the hub's port with ioctl call. Both state may
      be set before the device is attached, by access the hub settings. When
      the new device is attached, both authorization and ownership prevent
      the kernel USB stack from setting the newly attached device
      configuration, but when the device is authorized, the ownership state
      is ignored. It looks like ignoring the ownership state on
      authorization make the stack behavior inconsistent; it also prevents
      the user space code from completely overriding configuration
      selection, important for implementing workarounds for bugs in the
      device configuration selection.
      
         The following patch makes the stack behavior more consistent, by
      moving ownership test into usb_choose_configuration - the later
      function is used both by generic_probe and usb_authorize_device
      Signed-off-by: NJoseph Hindin <hindin@gmail.com>
      Acked-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c13b86a3
  6. 11 8月, 2010 1 次提交
  7. 21 5月, 2010 1 次提交
  8. 01 5月, 2010 1 次提交
  9. 12 12月, 2009 1 次提交
  10. 23 9月, 2009 1 次提交
    • A
      USB: add API for userspace drivers to "claim" ports · 7cbe5dca
      Alan Stern 提交于
      This patch (as1258) implements a feature that users have been asking
      for: It gives programs the ability to "claim" a port on a hub, via a
      new usbfs ioctl.  A device plugged into a "claimed" port will not be
      touched by the kernel beyond the immediate necessities of
      initialization and enumeration.
      
      In particular, when a device is plugged into a "claimed" port, the
      kernel will not select and install a configuration.  And when a config
      is installed by usbfs or sysfs, the kernel will not probe any drivers
      for any of the interfaces.  (However the kernel will fetch various
      string descriptors during enumeration.  One could argue that this
      isn't really necessary, but the strings are exported in sysfs.)
      
      The patch does not guarantee exclusive access to these devices; it is
      still possible for more than one program to open the device file
      concurrently.  Programs are responsible for coordinating access among
      themselves.
      
      A demonstration program showing how to use the new interface can be 
      found in an attachment to
      
      	http://marc.info/?l=linux-usb&m=124345857431452&w=2
      
      The patch also makes a small simplification to the hub driver,
      replacing a bunch of more-or-less useless variants of "out of memory"
      with a single message.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      7cbe5dca
  11. 08 1月, 2009 1 次提交
    • A
      USB: Enhance usage of pm_message_t · 65bfd296
      Alan Stern 提交于
      This patch (as1177) modifies the USB core suspend and resume
      routines.  The resume functions now will take a pm_message_t argument,
      so they will know what sort of resume is occurring.  The new argument
      is also passed to the port suspend/resume and bus suspend/resume
      routines (although they don't use it for anything but debugging).
      
      In addition, special pm_message_t values are used for user-initiated,
      device-initiated (i.e., remote wakeup), and automatic suspend/resume.
      By testing these values, drivers can tell whether or not a particular
      suspend was an autosuspend.  Unfortunately, they can't do the same for
      resumes -- not until the pm_message_t argument is also passed to the
      drivers' resume methods.  That will require a bigger change.
      
      IMO, the whole Power Management framework should have been set up this
      way in the first place.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      65bfd296
  12. 30 5月, 2008 1 次提交
    • A
      USB: fix possible deadlock involving sysfs attributes · e16362a0
      Alan Stern 提交于
      There is a potential deadlock when the usb_generic driver is unbound
      from a device.  The problem is that generic_disconnect() is called
      with the device lock held, and it removes a bunch of device attributes
      from sysfs.  If a user task happens to be running an attribute method
      at the time, the removal will block until the method returns.  But at
      least one of the attribute methods (the store routine for power/level)
      needs to acquire the device lock!
      
      This patch (as1093) eliminates the deadlock by moving the calls to
      create and remove the sysfs attributes from the usb_generic driver
      into usb_new_device() and usb_disconnect(), where they can be invoked
      without holding the device lock.
      
      Besides, the other sysfs attributes are created when the device is
      registered and removed when the device is unregistered.  So it seems
      only fitting for the extra attributes to be created and removed at the
      same time.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      e16362a0
  13. 13 10月, 2007 4 次提交
  14. 13 7月, 2007 5 次提交
    • A
      USB: unify reset_resume and normal resume · 54515fe5
      Alan Stern 提交于
      This patch (as919) unifies the code paths used for normal resume and
      for reset-resume.  Earlier I had failed to note a section in the USB
      spec which requires the host to resume a suspended port before
      resetting it if the attached device is enabled for remote wakeup.
      Since the port has to be resumed anyway, we might as well reuse the
      existing code.
      
      The main changes are:
      
      	usb_reset_suspended_device() is eliminated.
      
      	usb_root_hub_lost_power() is moved down next to the
      	hub_reset_resume() routine, to which it is logically
      	related.
      
      	finish_port_resume() does a port reset() if the device's
      	reset_resume flag is set.
      
      	usb_port_resume() doesn't check whether the port is initially
      	enabled if this is a USB-Persist sort of resume.
      
      	Code to perform the port reset is added to the resume pathway
      	for the non-CONFIG_USB_SUSPEND case.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      54515fe5
    • A
      USB: separate root and non-root suspend/resume · 686314cf
      Alan Stern 提交于
      This patch (as916) completes the separation of code paths for suspend
      and resume of root hubs as opposed to non-root devices.  Root hubs
      will be power-managed through their bus_suspend and bus_resume
      methods, whereas normal devices will use usb_port_suspend() and
      usb_port_resume().
      
      Changes to the hcd_bus_{suspend,resume} routines mostly represent
      motion of code that was already present elsewhere.  They include:
      
      	Adding debugging log messages,
      
      	Setting the device state appropriately, and
      
      	Adding a resume recovery time delay.
      
      Changes to the port-suspend and port-resume routines in hub.c include:
      
      	Removal of checks for root devices (since they will never
      	be triggered), and
      
      	Removal of checks for NULL or invalid device pointers (these
      	were left over from earlier kernel versions and aren't needed
      	at all).
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      686314cf
    • A
      USB: add USB-Persist facility · 0458d5b4
      Alan Stern 提交于
      This patch (as886) adds the controversial USB-persist facility,
      allowing USB devices to persist across a power loss during system
      suspend.
      
      The facility is controlled by a new Kconfig option (with appropriate
      warnings about the potential dangers); when the option is off the
      behavior will remain the same as it is now.  But when the option is
      on, people will be able to use suspend-to-disk and keep their USB
      filesystems intact -- something particularly valuable for small
      machines where the root filesystem is on a USB device!
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      0458d5b4
    • A
      USB: move bus_suspend and bus_resume method calls · b6f6436d
      Alan Stern 提交于
      This patch (as885) moves the root-hub bus_suspend() and bus_resume()
      method calls from the hub driver's suspend and resume methods into the
      usb_generic driver methods, where they make just as much sense.
      
      Their old locations were not fully correct.  For example, in a kernel
      compiled without CONFIG_USB_SUSPEND, if one were to do:
      
      	echo -n 1-0:1.0 >/sys/bus/usb/drivers/hub/unbind
      
      to unbind the hub driver from a root hub, there would then be no way
      to suspend that root hub.  Attempts to put the system to sleep would
      fail; the USB controller driver would refuse to suspend because the
      root hub was still active.
      
      The patch also makes a very slight change in the way devices with no
      driver are handled during suspend.  Rather than doing a standard USB
      port-suspend directly, now the suspend routine in usb_generic is
      called.  In practice this should never affect anyone.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      b6f6436d
    • A
      USB: Implement PM FREEZE and PRETHAW · 4d461095
      Alan Stern 提交于
      This patch (as884) finally implements the time-saving semantics
      possible with the Power Management FREEZE and PRETHAW events.  Their
      proper handling requires only that devices be quiesced, with
      interrupts and DMA turned off; non-root USB devices don't actually
      need to be put in a suspended state.  The patch checks and avoids
      doing the suspend call when possible.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      4d461095
  15. 17 2月, 2007 1 次提交
    • A
      USB: unconfigure devices which have config 0 · 3f141e2a
      Alan Stern 提交于
      Some USB devices do have a configuration 0, in contravention of the
      USB spec.  Normally 0 is supposed to indicate that a device is
      unconfigured.
      
      While we can't change what the device is doing, we can change usbcore.
      This patch (as852) allows usb_set_configuration() to accept a config
      value of -1 as indicating that the device should be unconfigured.  The
      request actually sent to the device will still contain 0 as the value.
      But even if the device does have a configuration 0, dev->actconfig
      will be set to NULL and dev->state will be set to USB_STATE_ADDRESS.
      
      Without some sort of special-case handling like this, there is no way
      to unconfigure these non-compliant devices.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      3f141e2a
  16. 08 2月, 2007 1 次提交
    • O
      rndis_host learns ActiveSync basics · ad55d71a
      Ole Andre Vadla Ravnas 提交于
      Windows Mobile 5 based devices described as supporting "ActiveSync":
      
       - Speak RNDIS but lack the CDC and union descriptors.  This patch
         updates the cdc ethernet code to fake ACM descriptors we need.
      
       - Require RNDIS_MSG_QUERY messages to include a buffer of the size the
         response should generate.  This patch updates the rndis host code to
         pass this will-be-ignored data.
      
      The resulting RNDIS host code has been reported to work with several
      WM5 based devices.
      
      (Note that a fancier patch is available at synce.sf.net.)
      
      
      Some bugfixes, affecting not just ActiveSync:
          (a)	when cleaning up after RNDS init fails, scrub the second interface
      	just like cdc_ether does, so disconnect won't oops.
          (b)	handle peripherals that use the pad-to-end-of-packet option; some
      	devices can't talk to us if that option doesn't work.
          (c)	when choosing configurations, don't forget about an RNDIS config
      	just because the RNDIS driver is dynamically linked.
      
      Cleanup, streamlining, bugfixes, Kconfig, and matching hub driver update.
      Also for paranoia's sake, refuse to talk to something that looks like a
      real modem instead of RNDIS.
      Signed-off-by: NOle Andre Vadla Ravnaas <oleavr@gmail.com>
      Signed-off-by: NDavid Brownell <dbrownell@users.sourceforge.net>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      
      ad55d71a
  17. 04 10月, 2006 1 次提交
  18. 28 9月, 2006 6 次提交
    • A
      usbcore: non-hub-specific uses of autosuspend · 01d883d4
      Alan Stern 提交于
      This patch (as741) makes the non-hub parts of usbcore actually use the
      autosuspend facilities added by an earlier patch.
      
      	Devices opened through usbfs are autoresumed and then
      	autosuspended upon close.
      
      	Likewise for usb-skeleton.
      
      	Devices are autoresumed for usb_set_configuration.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      01d883d4
    • A
      usbcore: fix up device and power state tests · 114b368c
      Alan Stern 提交于
      This patch (as734) rationalizes the various tests of device state and
      power states.  There are duplications and mistaken tests in several
      places.
      
      Perhaps the most interesting challenge is where the hub driver tests to
      see that all the child devices are suspended before allowing itself to
      be suspended.  When CONFIG_USB_SUSPEND is set the test is
      straightforward, since we expect that the children _will_ be suspended.
      But when CONFIG_USB_SUSPEND isn't set, it's not so clear what should be
      done.  The code compromises by checking the child's
      power.power_state.event field.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      114b368c
    • A
      usbcore: resume device resume recursion · a8e7c565
      Alan Stern 提交于
      This patch (as717b) removes the existing recursion in hub resume code:
      Resuming a hub will no longer automatically resume the devices attached
      to the hub.
      
      At the same time, it adds one level of recursion: Suspending a USB
      device will automatically suspend all the device's interfaces.  Failure
      at an intermediate stage will cause all the already-suspended interfaces
      to be resumed. Attempts to suspend or resume an interface by itself will
      do nothing, although they won't return an error.  Thus the regular
      system-suspend and system-resume procedures should continue to work as
      before; only runtime PM will be affected.
      
      The patch also removes the code that tests state of the interfaces
      before suspending a device.  It's no longer needed, since everything
      gets suspended together.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      a8e7c565
    • A
      usbcore: make usb_generic a usb_device_driver · 782da727
      Alan Stern 提交于
      This patch (as714b) makes usb_generic into a usb_device_driver capable
      of being probed and unbound, just like other drivers.  A fair amount of
      the work that used to get done during discovery or removal of a USB
      device have been moved to the probe and disconnect methods of
      usb_generic: creating the sysfs attributes and selecting an initial
      configuration.  However the normal behavior should continue to be the
      same as before.
      
      We will now have the possibility of creating other USB device drivers,
      They will assist with exporting devices to remote systems
      (USB-over-TCPIP) or to paravirtual guest operating systems.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      782da727
    • A
      usbcore: add usb_device_driver definition · 8bb54ab5
      Alan Stern 提交于
      This patch (as732) adds a usb_device_driver structure, for representing
      drivers that manage an entire USB device as opposed to just an
      interface.  Support routines like usb_register_device_driver,
      usb_deregister_device_driver, usb_probe_device, and usb_unbind_device
      are also added.
      
      Unlike an earlier version of this patch, the new code is type-safe.  To
      accomplish this, the existing struct driver embedded in struct
      usb_driver had to be wrapped in an intermediate wrapper.  This enables
      the core to tell at runtime whether a particular struct driver belongs
      to a device driver or to an interface driver.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      8bb54ab5
    • A
      usbcore: move code among source files · 36e56a34
      Alan Stern 提交于
      This revised patch (as713b) moves a few routines among source files in
      usbcore.  Some driver-related code in usb.c (claiming interfaces and
      matching IDs) is moved to driver.c, where it belongs.  Also the
      usb_generic stuff in driver.c is moved to a new source file: generic.c.
      (That's the reason for revising the patch.)  Although not very big now,
      it will get bigger in a later patch.
      
      None of the code has been changed; it has only been re-arranged.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      
      36e56a34