22 Jul, 2008

40 commits

  • This patch renames the existing usb_reset_device in hub.c to
    usb_reset_and_verify_device and renames the existing
    usb_reset_composite_device to usb_reset_device. Also the new
    usb_reset_and_verify_device does't need to be EXPORTED .

    The idea of the patch is that external interface driver
    should warn the other interfaces' driver of the same
    device before and after reseting the usb device. One interface
    driver shoud call _old_ usb_reset_composite_device instead of
    _old_ usb_reset_device since it can't assume the device contains
    only one interface. The _old_ usb_reset_composite_device
    is safe for single interface device also. we rename the two
    functions to make the change easily.

    This patch is under guideline from Alan Stern.

    Signed-off-by: Ming Lei

    Ming Lei
     
  • fix the following sparse warning:

    drivers/usb/serial/usb-serial.c:927:43: warning: incorrect type in argument 3 (different signedness)
    drivers/usb/serial/usb-serial.c:927:43: expected unsigned int *minor
    drivers/usb/serial/usb-serial.c:927:43: got int *
    CHECK drivers/usb/serial/generic.c

    Signed-off-by: Andre Haupt
    Signed-off-by: Greg Kroah-Hartman

    Andre Haupt
     
  • This adds support for hardware configurations that don't match the
    chip default register settings (e.g., 16-bit data bus, DACK and
    DREQ pulled up instead of down, analog overcurrent mode).

    These settings are passed in via the OF device tree. The PCI
    interface still assumes the same default values.

    Signed-off-by: Nate Case
    Acked-by: Olof Johansson
    Signed-off-by: Greg Kroah-Hartman

    Nate Case
     
  • It is the usb interface driver probe() methods that
    can't call usb_set_configuration, not usb device driver.

    Signed-off-by: Ming Lei
    Signed-off-by: Greg Kroah-Hartman

    Ming Lei
     
  • This patch (as1103) changes the iteration in the USB scatter-gather to
    use a standard SG iterator. Otherwise the iteration will fail if it
    encounters a chained SG list.

    Signed-off-by: Alan Stern
    Acked-by: Jens Axboe
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • From the current implementation of usb_reset_composite_device
    function, the iface parameter is no longer useful. This function
    doesn't do something special for the iface usb_interface,compared
    with other interfaces in the usb_device. So remove the parameter
    and fix the related caller.

    Signed-off-by: Ming Lei
    Acked-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Ming Lei
     
  • Remove an explicit memset(.., 0, ...) to a variable allocated with kzalloc
    (i.e. 'card_info' array of the structure 'instance').

    Signed-off-by: Christophe Jaillet
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Christophe Jaillet
     
  • Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Andrew Morton
     
  • - fixes an error with filling out control requests
    - increases grepability and error logging
    - fixes the short read code path

    Signed-off-by: Oliver Neukum
    Signed-off-by: Greg Kroah-Hartman

    Oliver Neukum
     
  • This driver is only for one device id, and the option driver should be
    used instead for it.

    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     
  • Signed-off-by: Akinobu Mita
    Acked-by: Pete Zaitcev
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Akinobu Mita
     
  • mark this array as const because it is read-only

    Signed-off-by: Ming Lei
    Acked-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Ming Lei
     
  • Mark the tables as const so that they end up in .rodata
    section and don't cacheline share with things that get
    written to.

    Signed-off-by: Ming Lei
    Cc: Yoshihiro Shimoda
    Signed-off-by: Greg Kroah-Hartman

    Ming Lei
     
  • This patch (as1102) clarifies two points in the USB Gadget kerneldoc:

    Request completion callbacks are always made with interrupts
    disabled;

    Device controllers may not support STALLing the status stage
    of a control transfer after the data stage is over.

    Signed-off-by: Alan Stern
    Acked-by: David Brownell
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • General cleanup on ir-usb module. Introduced
    a common header that could be used also on
    usb gadget framework.

    Lot's of cleanups and now using macros from the header
    file.

    Signed-off-by: Felipe Balbi
    Signed-off-by: Greg Kroah-Hartman

    Felipe Balbi
     
  • This patch fixes some performance bugs observed with some workloads
    when unlinking EHCI queue header (QH) descriptors from the async ring
    (control/bulk schedule).

    The mechanism intended to defer unlinking an empty QH (so there is no
    penalty in common cases where it's quickly reused) was not working as
    intended. Sometimes the unlink was scheduled:

    - too quickly ... which can be a *strong* negative effect, since
    that QH becomes unavailable for immediate re-use;

    - too slowly ... wasting DMA cycles, usually a minor issue except
    for increased bus contention and power usage;

    Plus there was an extreme case of "too slowly": a logical error in the
    IAA watchdog-timer conversion meant that sometimes the unlink never
    got scheduled.

    The fix replaces a simple counter with a timestamp derived from the
    controller's 8 KHz microframe counter, and adjusts the timer usage
    for some issues associated with HZ being less than 8K.

    (Based on a patch originally by Alan Stern, and good troubleshooting
    from Leonid.)

    Signed-off-by: David Brownell
    Cc: Alan Stern
    Cc: Leonid
    Signed-off-by: Greg Kroah-Hartman

    David Brownell
     
  • We can't allow hubs on the 7th tier as they would allow
    devices on the 8th tier.

    Signed-off-by: Felipe Balbi
    Cc: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Felipe Balbi
     
  • If we do rmmod ohci_hcd while an application is doing something, the
    following may happen:

    - a control URB completes (in finish_urb) and the ohci's endpoint is
    set into ED_UNLINK in ed_deschedule
    - same URB is (re)submitted because of the open/close loop or other
    such application behaviour
    - rmmod sets the state to HC_STATE_QUESCING
    - finish_unlinks happens at next SOF; normally it would set ed into
    ED_IDLE and immediately call ed_schedule (since URB had extra TDs
    queued), which sets it into ED_OPER. But the check in ed_schedule
    makes it fail with -EAGAIN (which is ignored)
    - from now on we have a dead URB stuck; it cannot even be unlinked
    because the ed status is not ED_OPER, and thus start_ed_unlink is
    not invoked.

    This patch removes the check. In 2.6.25, all callers check for
    __ACTIVE bit before invoking ed_schedule, which is more appropriate.

    Alan Stern and David Brownell approved of this (cautiously).

    Signed-off-by: Pete Zaitcev
    Signed-off-by: Greg Kroah-Hartman

    Pete Zaitcev
     
  • As RMK pointed out, considering the fact that the _only_ platform with
    a PXA and SA1111 is the Lubbock, and that SA1111 DMA doesn't work there,
    (i.e. the SA1111 OHCI doesn't work there) the SA1111 OHCI driver should
    really be made SA11x0 specific.

    Signed-off-by: Eric Miao
    Acked-by: Russell King
    Acked-by: David Brownell
    Signed-off-by: Greg Kroah-Hartman

    Eric Miao
     
  • Looks like usb_put_hcd was missing. Also, make an always-zero function
    return void.

    Signed-off-by: Pete Zaitcev
    Acked-by: David Brownell
    Signed-off-by: Greg Kroah-Hartman

    Pete Zaitcev
     
  • i is used only as a for-loop index no need to declare another.
    drivers/usb/atm/speedtch.c:832:7: warning: symbol 'i' shadows an earlier one
    drivers/usb/atm/speedtch.c:766:6: originally declared here

    Signed-off-by: Harvey Harrison
    Signed-off-by: Greg Kroah-Hartman

    Harvey Harrison
     
  • The get/set 2101_config helpers take an unsigned int rather than an
    int. It is safe to change these in each case and may even produce
    better code as it will be an unsigned divide rather than a signed
    divide in places. All other manipulation was setting/masking bits
    which will not be affected by the sign change.

    Fixes the following sparse warnings:
    drivers/usb/serial/cp2101.c:378:44: warning: incorrect type in argument 3 (different signedness)
    drivers/usb/serial/cp2101.c:378:44: expected unsigned int *data
    drivers/usb/serial/cp2101.c:378:44: got int *
    drivers/usb/serial/cp2101.c:388:40: warning: incorrect type in argument 3 (different signedness)
    drivers/usb/serial/cp2101.c:388:40: expected unsigned int *data
    drivers/usb/serial/cp2101.c:388:40: got int *
    drivers/usb/serial/cp2101.c:413:42: warning: incorrect type in argument 3 (different signedness)
    drivers/usb/serial/cp2101.c:413:42: expected unsigned int *data
    drivers/usb/serial/cp2101.c:413:42: got int *
    drivers/usb/serial/cp2101.c:421:42: warning: incorrect type in argument 3 (different signedness)
    drivers/usb/serial/cp2101.c:421:42: expected unsigned int *data
    drivers/usb/serial/cp2101.c:421:42: got int *
    drivers/usb/serial/cp2101.c:444:42: warning: incorrect type in argument 3 (different signedness)
    drivers/usb/serial/cp2101.c:444:42: expected unsigned int *data
    drivers/usb/serial/cp2101.c:444:42: got int *
    drivers/usb/serial/cp2101.c:451:42: warning: incorrect type in argument 3 (different signedness)
    drivers/usb/serial/cp2101.c:451:42: expected unsigned int *data
    drivers/usb/serial/cp2101.c:451:42: got int *
    drivers/usb/serial/cp2101.c:458:42: warning: incorrect type in argument 3 (different signedness)
    drivers/usb/serial/cp2101.c:458:42: expected unsigned int *data
    drivers/usb/serial/cp2101.c:458:42: got int *
    drivers/usb/serial/cp2101.c:471:42: warning: incorrect type in argument 3 (different signedness)
    drivers/usb/serial/cp2101.c:471:42: expected unsigned int *data
    drivers/usb/serial/cp2101.c:471:42: got int *
    drivers/usb/serial/cp2101.c:481:42: warning: incorrect type in argument 3 (different signedness)
    drivers/usb/serial/cp2101.c:481:42: expected unsigned int *data
    drivers/usb/serial/cp2101.c:481:42: got int *
    drivers/usb/serial/cp2101.c:561:41: warning: incorrect type in argument 3 (different signedness)
    drivers/usb/serial/cp2101.c:561:41: expected unsigned int *data
    drivers/usb/serial/cp2101.c:561:41: got int *
    drivers/usb/serial/cp2101.c:591:45: warning: incorrect type in argument 3 (different signedness)
    drivers/usb/serial/cp2101.c:591:45: expected unsigned int *data
    drivers/usb/serial/cp2101.c:591:45: got int *
    drivers/usb/serial/cp2101.c:597:41: warning: incorrect type in argument 3 (different signedness)
    drivers/usb/serial/cp2101.c:597:41: expected unsigned int *data
    drivers/usb/serial/cp2101.c:597:41: got int *
    drivers/usb/serial/cp2101.c:608:45: warning: incorrect type in argument 3 (different signedness)
    drivers/usb/serial/cp2101.c:608:45: expected unsigned int *data
    drivers/usb/serial/cp2101.c:608:45: got int *
    drivers/usb/serial/cp2101.c:614:41: warning: incorrect type in argument 3 (different signedness)
    drivers/usb/serial/cp2101.c:614:41: expected unsigned int *data
    drivers/usb/serial/cp2101.c:614:41: got int *
    drivers/usb/serial/cp2101.c:623:45: warning: incorrect type in argument 3 (different signedness)
    drivers/usb/serial/cp2101.c:623:45: expected unsigned int *data
    drivers/usb/serial/cp2101.c:623:45: got int *
    drivers/usb/serial/cp2101.c:680:50: warning: incorrect type in argument 3 (different signedness)
    drivers/usb/serial/cp2101.c:680:50: expected unsigned int *data
    drivers/usb/serial/cp2101.c:680:50: got int *
    drivers/usb/serial/cp2101.c:690:43: warning: incorrect type in argument 3 (different signedness)
    drivers/usb/serial/cp2101.c:690:43: expected unsigned int *data
    drivers/usb/serial/cp2101.c:690:43: got int *
    drivers/usb/serial/cp2101.c:715:41: warning: incorrect type in argument 3 (different signedness)
    drivers/usb/serial/cp2101.c:715:41: expected unsigned int *data
    drivers/usb/serial/cp2101.c:715:41: got int *

    Signed-off-by: Harvey Harrison
    Signed-off-by: Greg Kroah-Hartman

    Harvey Harrison
     
  • Signed-off-by: Harvey Harrison
    Signed-off-by: Greg Kroah-Hartman

    Harvey Harrison
     
  • Signed-off-by: Stephen Rothwell
    Signed-off-by: Greg Kroah-Hartman

    Stephen Rothwell
     
  • This is another case where the lock_kernel appears to be unneccessary and
    could be removed with a bit more investigative work

    Signed-off-by: Alan Cox
    Signed-off-by: Greg Kroah-Hartman

    Alan Cox
     
  • The BKL is actually probably not needed as the mutex seems sufficient. If
    so then a further patch to drop it would be a good followup.

    Signed-off-by: Alan Cox
    Signed-off-by: Greg Kroah-Hartman

    Alan Cox
     
  • Also fix the unknown ioctl return code

    Signed-off-by: Alan Cox
    Signed-off-by: Greg Kroah-Hartman

    Alan Cox
     
  • I'm pretty sure the mutex is sufficient for all locking but will come
    back to that later if the USB folks don't beat me to it. For now get rid
    of the old BKL ioctl method and wrap the ioctl handler

    Signed-off-by: Alan Cox
    Signed-off-by: Greg Kroah-Hartman

    Alan Cox
     
  • I'm pretty sure this can be eliminated however I couldn't prove (or find)
    what stopped the device vanishing mid IOCTL_GET_HARD_VERSION. Perhaps a
    USB wizard could double check that and see if the lock_kernel can go
    entirely.

    Signed-off-by: Alan Cox
    Signed-off-by: Greg Kroah-Hartman

    Alan Cox
     
  • ftdi has one ioctl, which is buggy and for debugging. Kill it off

    Signed-off-by: Alan Cox
    Signed-off-by: Greg Kroah-Hartman

    Alan Cox
     
  • This keeps the gadget ioctl method wrapped but pushes the BKL down into
    the gadget code so we can use unlocked_ioctl().

    Signed-off-by: Alan Cox
    Signed-off-by: Greg Kroah-Hartman

    Alan Cox
     
  • Building on the previous patches which took code from this driver and
    pakaged it in more-reusable network "function" components, this patch
    gets rid of the original code and uses those components instead.

    As seen with the other gadget driver conversions, the resulting code
    is much easier to understand and (presumably) work with. In this case
    that's especially true, since the Ethernet gadget had grown to handle
    three (!) different Ethernet-over-USB protocols. This modularization
    should make it much easier to add a fourth option for the newish CDC
    "Ethernet Emulation Model" (or EEM).

    Lightly tested, primarily at full speed.

    Signed-off-by: David Brownell
    Signed-off-by: Greg Kroah-Hartman

    David Brownell
     
  • This is a simple example of a composite gadget, combining two
    Communications Class Device (CDC) functions: ECM and ACM.

    This provides a clear example of how the composite gadget framework
    is intended to work. It's surprising that MS-Windows (or at least,
    XP and previous) won't "just work" with something this simple...

    One /proc/bus/usb/devices listing looks like:

    T: Bus=03 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 46 Spd=480 MxCh= 0
    D: Ver= 2.00 Cls=02(comm.) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
    P: Vendor=0525 ProdID=a4aa Rev= 3.01
    S: Manufacturer=Linux 2.6.26-rc6-pnut with net2280
    S: Product=CDC Composite Gadget
    C:* #Ifs= 4 Cfg#= 1 Atr=c0 MxPwr= 2mA
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=06 Prot=00 Driver=cdc_ether
    E: Ad=83(I) Atr=03(Int.) MxPS= 16 Ivl=32ms
    I: If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
    I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
    E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 2 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=01 Driver=cdc_acm
    E: Ad=86(I) Atr=03(Int.) MxPS= 8 Ivl=32ms
    I:* If#= 3 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_acm
    E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

    Not all USB peripheral controller hardware can support this driver.
    All the highspeed-capable peripheral controllers with drivers now in
    the mainline kernel seem to support this, as does omap_udc. But
    many full speed controllers don't have enough endpoints, or (as with
    the PXA controllers) don't support altsettings.

    Lightly tested.

    Signed-off-by: David Brownell
    Signed-off-by: Greg Kroah-Hartman

    David Brownell
     
  • This is a RNDIS function driver, extracted from the all-in-one
    Ethernet gadget driver.

    Lightly tested ... there seems to be a pre-existing problem when
    talking to Windows XP SP2, not quite sure what's up with that yet.

    Signed-off-by: David Brownell
    Signed-off-by: Greg Kroah-Hartman

    David Brownell
     
  • This is a "CDC Ethernet" (ECM) function driver, extracted from the
    all-in-one Ethernet gadget driver.

    This is a good example of how to implement interface altsettings.
    In fact it's currently the only such example in the gadget stack,
    pending addition of OBEX support.

    Signed-off-by: David Brownell
    Signed-off-by: Greg Kroah-Hartman

    David Brownell
     
  • This is a simple "CDC Subset" (and MCCI "SAFE") function driver, extracted
    from the all-in-one Ethernet gadget driver.

    Signed-off-by: David Brownell
    Signed-off-by: Greg Kroah-Hartman

    David Brownell
     
  • Abstract the peripheral side Ethernet-over-USB link layer code from
    the all-in-one Ethernet gadget driver into a component that can be
    called by various functions, so the various flavors can be split
    apart and selectively reused.

    A notable difference from the approach taken with the serial link
    layer code (beyond talking to NET not TTY) is that because of the
    initialization requirements, this only supports one network link.
    (And one set of Ethernet link addresses.)

    That is, each configuration may have only one instance of a network
    function. This doesn't change behavior; the current code has that
    same restriction. If you want multiple logical links, that can
    easily be done using network layer tools.

    Signed-off-by: David Brownell
    Signed-off-by: Greg Kroah-Hartman

    David Brownell
     
  • Some cleanup to the RNDIS code:

    - Minor bugfix: rndis_unit() is supposed to put the link into the
    RNDIS_UNINITIALIZED state, which does not mean "unused". There's
    a separate method to stop using the link. (Bug doesn't affect
    anything right now because of how the code is used.)

    - Reduce coupling between RNDIS code and its user(s), in preparation
    for updates in that code:

    * Decouple RNDIS_RESPONSE_AVAILABLE notifications from net_device
    by passing just a void* handle. (Also, remove the unused return
    value of the notification callback.)
    * When it needs a copy of net_device stats, just ask for it

    - Remove unused/untested code backing various never-used OIDs:

    * RNDIS_PM, RNDIS_WAKEUP ... "should" get implemented, but the
    relevant docs were unclear, ambguous, and incomplete. Someone
    with access to the Hidden Gospels (maybe in the EU?) might be
    able to figure out what this should do.
    * RNDIS_OPTIONAL_STATS ... as the name suggests, optional. Never
    implemented in part because not all the semantics were clear.
    * OID_GEN_RNDIS_CONFIG_PARAMETER, which has been #if 0 forever.

    - A few small whitespace fixes

    Plus switch the VERBOSE symbol over to the newer VERBOSE_DEBUG style.

    There should be no functional changes because of this patch; it's a
    net source code shrink (because of the dead/unused code removal) and
    a small object code shrink (a couple hundred bytes on ARMv5).

    Signed-off-by: David Brownell
    Signed-off-by: Greg Kroah-Hartman

    David Brownell
     
  • This switches the serial gadget over to using the new "function"
    versions of the serial port interfacing code. The remaining code
    in the main source file is quite small...

    Signed-off-by: David Brownell
    Signed-off-by: Greg Kroah-Hartman

    David Brownell
     
  • Split out the generic serial support into a "function driver". This
    closely mimics the ACM support, but with a MUCH simpler control model.

    Signed-off-by: David Brownell
    Signed-off-by: Greg Kroah-Hartman

    David Brownell