mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-28 20:37:27 +00:00
cdc-acm: store in and out pipes in acm structure
Clearing stall needs pipe descriptor, store it in acm structure. Signed-off-by: Ladislav Michl <ladis@linux-mips.org> Acked-by: Oliver Neukum <oneukum@suse.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
ba8c931ded
commit
74bccc9b71
@ -1338,8 +1338,16 @@ made_compressed_probe:
|
||||
spin_lock_init(&acm->read_lock);
|
||||
mutex_init(&acm->mutex);
|
||||
acm->is_int_ep = usb_endpoint_xfer_int(epread);
|
||||
if (acm->is_int_ep)
|
||||
if (acm->is_int_ep) {
|
||||
acm->bInterval = epread->bInterval;
|
||||
acm->in = usb_rcvintpipe(usb_dev, epread->bEndpointAddress);
|
||||
} else {
|
||||
acm->in = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress);
|
||||
}
|
||||
if (usb_endpoint_xfer_int(epwrite))
|
||||
acm->out = usb_sndintpipe(usb_dev, epwrite->bEndpointAddress);
|
||||
else
|
||||
acm->out = usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress);
|
||||
tty_port_init(&acm->port);
|
||||
acm->port.ops = &acm_port_ops;
|
||||
init_usb_anchor(&acm->delayed);
|
||||
@ -1374,20 +1382,15 @@ made_compressed_probe:
|
||||
|
||||
urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
|
||||
urb->transfer_dma = rb->dma;
|
||||
if (acm->is_int_ep) {
|
||||
usb_fill_int_urb(urb, acm->dev,
|
||||
usb_rcvintpipe(usb_dev, epread->bEndpointAddress),
|
||||
rb->base,
|
||||
if (acm->is_int_ep)
|
||||
usb_fill_int_urb(urb, acm->dev, acm->in, rb->base,
|
||||
acm->readsize,
|
||||
acm_read_bulk_callback, rb,
|
||||
acm->bInterval);
|
||||
} else {
|
||||
usb_fill_bulk_urb(urb, acm->dev,
|
||||
usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress),
|
||||
rb->base,
|
||||
else
|
||||
usb_fill_bulk_urb(urb, acm->dev, acm->in, rb->base,
|
||||
acm->readsize,
|
||||
acm_read_bulk_callback, rb);
|
||||
}
|
||||
|
||||
acm->read_urbs[i] = urb;
|
||||
__set_bit(i, &acm->read_urbs_free);
|
||||
@ -1400,12 +1403,10 @@ made_compressed_probe:
|
||||
goto alloc_fail7;
|
||||
|
||||
if (usb_endpoint_xfer_int(epwrite))
|
||||
usb_fill_int_urb(snd->urb, usb_dev,
|
||||
usb_sndintpipe(usb_dev, epwrite->bEndpointAddress),
|
||||
usb_fill_int_urb(snd->urb, usb_dev, acm->out,
|
||||
NULL, acm->writesize, acm_write_bulk, snd, epwrite->bInterval);
|
||||
else
|
||||
usb_fill_bulk_urb(snd->urb, usb_dev,
|
||||
usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
|
||||
usb_fill_bulk_urb(snd->urb, usb_dev, acm->out,
|
||||
NULL, acm->writesize, acm_write_bulk, snd);
|
||||
snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
|
||||
if (quirks & SEND_ZERO_PACKET)
|
||||
@ -1477,8 +1478,8 @@ skip_countries:
|
||||
}
|
||||
|
||||
if (quirks & CLEAR_HALT_CONDITIONS) {
|
||||
usb_clear_halt(usb_dev, usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress));
|
||||
usb_clear_halt(usb_dev, usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress));
|
||||
usb_clear_halt(usb_dev, acm->in);
|
||||
usb_clear_halt(usb_dev, acm->out);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -83,6 +83,7 @@ struct acm {
|
||||
struct usb_device *dev; /* the corresponding usb device */
|
||||
struct usb_interface *control; /* control interface */
|
||||
struct usb_interface *data; /* data interface */
|
||||
unsigned in, out; /* i/o pipes */
|
||||
struct tty_port port; /* our tty port data */
|
||||
struct urb *ctrlurb; /* urbs */
|
||||
u8 *ctrl_buffer; /* buffers of urbs */
|
||||
|
Loading…
Reference in New Issue
Block a user