Re: non-standard baud rates with Prolific 2303 USB-serial

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Feb 24, 2021 at 01:13:39PM -0500, Michael G. Katzmann wrote:
> On 2/24/21 12:04 PM, Johan Hovold wrote:
> > Perhaps you can even figure out how to poll for an empty TX FIFO from
> > it, unless Charles is able to provide some details on that separate
> > matter?
> 
> I presume from the code below, that when the device is closed, all
> data waiting to send is clobbered (if so, so the problem is the driver
> and not the device)
> 
> I would have thought that the driver should drain the buffers. I can
> see that this might be a problem if there is flow control (it may
> never drain) but the current method seems pretty brutal.

We do; the code below isn't called until after we've waited for the
buffers to drain (driver buffers + device FIFO).

I'll provide a patch so that you can extend the timeout for draining the
driver buffers (defaults to 30 s), but the main problem is that we don't
know how to query the PL2303 FIFO fill level.

> 119 void usb_serial_generic_close(struct usb_serial_port *port)
> 120 {
> 121         unsigned long flags;
> 122         int i;
> 123
> 124         if (port->bulk_out_size) {
> 125                 for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i)
> 126                         usb_kill_urb(port->write_urbs[i]);
> 127
> 128                 spin_lock_irqsave(&port->lock, flags);
> 129                 kfifo_reset_out(&port->write_fifo);
> 130                 spin_unlock_irqrestore(&port->lock, flags);
> 131         }
> 132         if (port->bulk_in_size) {
> 133                 for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i)
> 134                         usb_kill_urb(port->read_urbs[i]);
> 135         }
> 136 }

Johan



[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux PPP]     [Linux FS]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Linmodem]     [Device Mapper]     [Linux Kernel for ARM]

  Powered by Linux