• David Brownell's avatar
    usb gadget: split out serial core · c1dca562
    David Brownell authored
    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: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    c1dca562
u_serial.c 31 KB