1. 23 9月, 2009 18 次提交
    • D
      USB: whci-hcd: make endpoint_reset method async · 831baa49
      David Vrabel 提交于
      usb_hcd_endpoint_reset() may be called in atomic context and must not
      sleep.  So make whci-hcd's endpoint_reset() asynchronous.  URBs
      submitted while the reset is in progress will be queued (on the std
      list) and transfers will resume once the reset is complete.
      Signed-off-by: NDavid Vrabel <david.vrabel@csr.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      
      831baa49
    • W
      USB: Add nuvoton Ehci driver for w90p910 platform · 586dfc8c
      Wan ZongShun 提交于
      Add ehci support for w90p910 platform.
      Signed-off-by: NWan ZongShun <mcuos.com@gmail.com>
      Cc: David Brownell <david-b@pacbell.net>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      586dfc8c
    • F
      USB: ehci-dbg.c: no need for checking it before call vfree · f8086a07
      Figo.zhang 提交于
      vfree() does it's own NULL checking,so no need for check before
      calling it.
      Signed-off-by: NFigo.zhang <figo1802@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      f8086a07
    • S
      USB: xhci: Support interrupt transfers. · 624defa1
      Sarah Sharp 提交于
      Interrupt transfers are submitted to the xHCI hardware using the same TRB
      type as bulk transfers.  Re-use the bulk transfer enqueueing code to
      enqueue interrupt transfers.
      
      Interrupt transfers are a bit different than bulk transfers.  When the
      interrupt endpoint is to be serviced, the xHC will consume (at most) one
      TD.  A TD (comprised of sg list entries) can take several service
      intervals to transmit.  The important thing for device drivers to note is
      that if they use the scatter gather interface to submit interrupt
      requests, they will not get data sent from two different scatter gather
      lists in the same service interval.
      
      For now, the xHCI driver will use the service interval from the endpoint's
      descriptor (bInterval).  Drivers will need a hook to poll at a more
      frequent interval.  Set urb->interval to the interval that the xHCI
      hardware will use.
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      624defa1
    • S
      USB: xhci: Set -EREMOTEIO when xHC gives bad transfer length. · 2f697f6c
      Sarah Sharp 提交于
      The xHCI hardware reports the number of bytes untransferred for a given
      transfer buffer.  If the hardware reports a bytes untransferred value
      greater than the submitted buffer size, we want to play it safe and say no
      data was transferred.  If the driver considers a short packet to be an
      error, remember to set -EREMOTEIO.
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      2f697f6c
    • S
      USB: xhci: Check URB_SHORT_NOT_OK before setting short packet status. · 204970a4
      Sarah Sharp 提交于
      Make sure that the driver that submitted the URB considers a short packet
      an error before setting -EREMOTEIO during a short control transfer.
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      204970a4
    • S
      USB: xhci: Check URB's actual transfer buffer size. · 99eb32db
      Sarah Sharp 提交于
      Make sure that the amount of data the xHC says was transmitted is less
      than or equal to the size of the requested transfer buffer.  Before, if
      the host controller erroneously reported that the number of bytes
      untransferred was bigger than the buffer in the URB, urb->actual_length
      could be set to a very large size.
      
      Make sure urb->actual_length <= urb->transfer_buffer_length.
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      99eb32db
    • S
      USB: xhci: Don't touch xhci_td after it's freed. · 9191eee7
      Sarah Sharp 提交于
      On a successful transfer, urb->td is freed before the URB is ready to be
      given back to the driver.  Don't touch urb->td after it's freed.  This bug
      would have only shown up when xHCI debugging was turned on, and the freed
      memory was quickly reused for something else.
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      9191eee7
    • S
      USB: xhci: Handle babbling endpoints correctly. · 83fbcdcc
      Sarah Sharp 提交于
      The 0.95 xHCI spec says that non-control endpoints will be halted if a
      babble is detected on a transfer.  The 0.96 xHCI spec says all types of
      endpoints will be halted when a babble is detected.  Some hardware that
      claims to be 0.95 compliant halts the control endpoint anyway.
      
      When a babble is detected on a control endpoint, check the hardware's
      output endpoint context to see if the endpoint is marked as halted.  If
      the control endpoint is halted, a reset endpoint command must be issued
      and the transfer ring dequeue pointer needs to be moved past the stopped
      transfer.  Basically, we treat it as if the control endpoint had stalled.
      
      Handle bulk babbling endpoints as if we got a completion event with a
      stall completion code.
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      83fbcdcc
    • S
      USB: xhci: Make TRB completion code comparison readable. · 66d1eebc
      Sarah Sharp 提交于
      Use trb_comp_code instead of getting the completion code from the transfer
      event every time.
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      66d1eebc
    • S
      USB: xhci: Add quirk for Fresco Logic xHCI hardware. · ac9d8fe7
      Sarah Sharp 提交于
      This Fresco Logic xHCI host controller chip revision puts bad data into
      the output endpoint context after a Reset Endpoint command.  It needs a
      Configure Endpoint command (instead of a Set TR Dequeue Pointer command)
      after the reset endpoint command.
      
      Set up the input context before issuing the Reset Endpoint command so we
      don't copy bad data from the output endpoint context.  The HW also can't
      handle two commands queued at once, so submit the TRB for the Configure
      Endpoint command in the event handler for the Reset Endpoint command.
      
      Devices that stall on control endpoints before a configuration is selected
      will not work under this Fresco Logic xHCI host controller revision.
      
      This patch is for prototype hardware that will be given to other companies
      for evaluation purposes only, and should not reach consumer hands.  Fresco
      Logic's next chip rev should have this bug fixed.
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      ac9d8fe7
    • S
      USB: xhci: Handle stalled control endpoints. · 82d1009f
      Sarah Sharp 提交于
      When a control endpoint stalls, the next control transfer will clear the
      stall.  The USB core doesn't call down to the host controller driver's
      endpoint_reset() method when control endpoints stall, so the xHCI driver
      has to do all its stall handling for internal state in its interrupt handler.
      
      When the host stalls on a control endpoint, it may stop on the data phase
      or status phase of the control transfer.  Like other stalled endpoints,
      the xHCI driver needs to queue a Reset Endpoint command and move the
      hardware's control endpoint ring dequeue pointer past the failed control
      transfer (with a Set TR Dequeue Pointer or a Configure Endpoint command).
      
      Since the USB core doesn't call usb_hcd_reset_endpoint() for control
      endpoints, we need to do this in interrupt context when we get notified of
      the stalled transfer.  URBs may be queued to the hardware before these two
      commands complete.  The endpoint queue will be restarted once both
      commands complete.
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      82d1009f
    • S
      USB: xhci: Support full speed devices. · 2d3f1fac
      Sarah Sharp 提交于
      Full speed devices have varying max packet sizes (8, 16, 32, or 64) for
      endpoint 0.  The xHCI hardware needs to know the real max packet size
      that the USB core discovers after it fetches the first 8 bytes of the
      device descriptor.
      
      In order to fix this without adding a new hook to host controller drivers,
      the xHCI driver looks for an updated max packet size for control
      endpoints.  If it finds an updated size, it issues an evaluate context
      command and waits for that command to finish.  This should only happen in
      the initialization and device descriptor fetching steps in the khubd
      thread, so blocking should be fine.
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      2d3f1fac
    • S
      USB: xhci: Set correct max packet size for HS/FS control endpoints. · 47aded8a
      Sarah Sharp 提交于
      Set the max packet size for the default control endpoint on high speed
      devices to be 64 bytes.  High speed devices always have a max packet size
      of 64 bytes.  There's no use setting it to eight for the initial 8 byte
      descriptor fetch and then issuing (and waiting for) an evaluate context
      command to update it to 64 bytes for the subsequent control transfers.
      
      The USB core guesses that the max packet size on a full speed control
      endpoint is 64 bytes, and then updates it after the first 8-byte
      descriptor fetch.  Change the initial setup for the xHCI internal
      representation of the full speed device to have a 64 byte max packet size.
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      47aded8a
    • S
      USB: xhci: Configure endpoint code refactoring. · f2217e8e
      Sarah Sharp 提交于
      Refactor out the code issue, wait for, and parse the event completion code
      for a configure endpoint command.  Modify it to support the evaluate
      context command, which has a very similar submission process.  Add
      functions to copy parts of the output context into the input context
      (which will be used in the evaluate context command).
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      f2217e8e
    • S
      USB: xhci: Fix slot and endpoint context debugging. · 018218d1
      Sarah Sharp 提交于
      Use the virtual address of the memory hardware uses, not the address for
      the container of that memory.
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      018218d1
    • S
      USB: xhci: Work around for chain bit in link TRBs. · b0567b3f
      Sarah Sharp 提交于
      Different sections of the xHCI 0.95 specification had opposing
      requirements for the chain bit in a link transaction request buffer (TRB).
      The chain bit is used to designate that adjacent TRBs are all part of the
      same scatter gather list that should be sent to the device.  Link TRBs can
      be in the middle, or at the beginning or end of these chained TRBs.
      
      Sections 4.11.5.1 and 6.4.4.1 both stated the link TRB "shall have the
      chain bit set to 1", meaning it is always chained to the next TRB.
      However, section 4.6.9 on the stop endpoint command has specific cases for
      what the hardware must do for a link TRB with the chain bit set to 0.  The
      0.96 specification errata later cleared up this issue by fixing the
      4.11.5.1 and 6.4.4.1 sections to state that a link TRB can have the chain
      bit set to 1 or 0.
      
      The problem is that the xHCI cancellation code depends on the chain bit of
      the link TRB being cleared when it's at the end of a TD, and some 0.95
      xHCI hardware simply stops processing the ring when it encounters a link
      TRB with the chain bit cleared.
      
      Allow users who are testing 0.95 xHCI prototypes to set a module parameter
      (link_quirk) to turn on this link TRB work around.  Cancellation may not
      work if the ring is stopped exactly on a link TRB with chain bit set, but
      cancellation should be a relatively uncommon case.
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      b0567b3f
    • H
      USB: sl811-hcd: Fix device disconnect: · eb661bc8
      Hennerich, Michael 提交于
      SL811 Device detected after removal used to be working in linux-2.6.22
      but then broke somewhere between 2.6.22 and 2.6.28. Current
      hub_port_connect_change() in drivers/usb/core/hub.c won't call
      usb_disconnect() in case the SL811 driver sets portstatus
      USB_PORT_FEAT_CONNECTION upon removal.
      AFAIK the SL811 has only a combined Device Insert/Remove
      detection bit, therefore use a count to distinguish insert or remove.
      Signed-Off-By: NMichael Hennerich <hennerich@blackfin.uclinux.org>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      
      eb661bc8
  2. 21 9月, 2009 3 次提交
  3. 16 9月, 2009 1 次提交
  4. 08 8月, 2009 2 次提交
  5. 29 7月, 2009 16 次提交