14 Aug, 2008

1 commit

  • Update the CDC-ACM gadget code to support the peripheral-to-host
    notifications when the tty is opened or closed, or issues a BREAK.
    The serial framework code calls new generic hooks; right now only
    CDC-ACM uses those hooks. This resolves several REVISIT comments
    in the code. (Based on a patch from Felipe Balbi.)

    Note that this doesn't expose USB_CDC_CAP_BRK to the host, since
    this code still rejects USB_CDC_REQ_SEND_BREAK control requests
    for host-to-peripheral BREAK signaling (received via /dev/ttyGS*).

    Signed-off-by: David Brownell
    Cc: Felipe Balbi
    Signed-off-by: Greg Kroah-Hartman

    David Brownell
     

22 Jul, 2008

4 commits

  • 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
     
  • Split out CDC ACM parts of "gadget serial" to a "function driver".
    Some key structural differences from the previous ACM support, shared
    with with the generic serial function (next patch):

    - As a function driver, it can be combined with other functions.
    One gadget configuration could offer both serial and network
    links, as an example.

    - One serial port can be exposed in multiple configurations;
    the /dev/ttyGS0 node could be exposed regardless of which
    config the host selected.

    - One configuration can expose multiple serial ports, such as
    ttyGS0, ttyGS1, ttyGS2, and ttyGS3.

    This code should be a lot easier to understand than the previous
    all-in-one-big-file version of the driver.

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

    David Brownell
     
  • This abstracts the "gadget serial" driver TTY glue into a separate
    component, cleaning it up and disentangling it from connection state.

    It also changed some behaviors for the better:

    - Stops using "experimental" major #127, and switches over to
    having the TTY layer allocate the dev_t numbers.

    - Provides /sys/class/tty/ttyGS* nodes, thus mdev/udev support.
    (Note "mdev" hotplug bug in Busybox v1.7.2: /dev/ttyGS0 will
    be a *block* device without CONFIG_SYSFS_DEPRECATED_V2.)

    - The tty nodes no longer reject opens when there's no host.
    Now they can support normal getty configs in /etc/inttab...

    - Now implements RX throttling. When the line discipline says
    it doesn't want any more data, only packets in flight will be
    delivered (currently, max 1K/8K at full/high speeds) until it
    unthrottles the data.

    - Supports low_latency. This is a good policy for all USB serial
    adapters, since it eliminates scheduler overhead on RX paths.

    This also includes much cleanup including better comments, fixing
    memory leaks and other bugs (including some locking fixes), messaging
    cleanup, and an interface audit and tightening. This added up to a
    significant object code shrinkage, on the order of 20% (!) depending
    on CPU and compiler.

    A separate patch actually kicks in this new code, using the functions
    declared in this new header, and removes the previous glue.

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

    David Brownell