ChangeSet 1.808.2.14, 2002/10/28 11:45:45-08:00, [EMAIL PROTECTED]
USB: fix the usb serial drivers due to interrupt urb no automatic resubmission change
to the usb core.
diff -Nru a/drivers/usb/serial/belkin_sa.c b/drivers/usb/serial/belkin_sa.c
--- a/drivers/usb/serial/belkin_sa.c Mon Oct 28 13:53:49 2002
+++ b/drivers/usb/serial/belkin_sa.c Mon Oct 28 13:53:49 2002
@@ -258,11 +258,23 @@
struct belkin_sa_private *priv;
struct usb_serial *serial;
unsigned char *data = urb->transfer_buffer;
+ int retval;
- /* the urb might have been killed. */
- if (urb->status)
+ switch (urb->status) {
+ case 0:
+ /* success */
+ break;
+ case -ECONNRESET:
+ case -ENOENT:
+ case -ESHUTDOWN:
+ /* this urb is terminated, clean up */
+ dbg("%s - urb shutting down with status: %d", __FUNCTION__,
+urb->status);
return;
-
+ default:
+ dbg("%s - nonzero urb status received: %d", __FUNCTION__, urb->status);
+ goto exit;
+ }
+
if (port_paranoia_check (port, __FUNCTION__)) return;
serial = port->serial;
@@ -321,8 +333,11 @@
}
}
#endif
-
- /* INT urbs are automatically re-submitted */
+exit:
+ retval = usb_submit_urb (urb, GFP_ATOMIC);
+ if (retval)
+ err ("%s - usb_submit_urb failed with result %d",
+ __FUNCTION__, retval);
}
static void belkin_sa_set_termios (struct usb_serial_port *port, struct termios
*old_termios)
diff -Nru a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
--- a/drivers/usb/serial/io_edgeport.c Mon Oct 28 13:53:49 2002
+++ b/drivers/usb/serial/io_edgeport.c Mon Oct 28 13:53:49 2002
@@ -772,9 +772,19 @@
return;
}
- if (urb->status) {
- dbg("%s - nonzero control read status received: %d", __FUNCTION__,
urb->status);
+ switch (urb->status) {
+ case 0:
+ /* success */
+ break;
+ case -ECONNRESET:
+ case -ENOENT:
+ case -ESHUTDOWN:
+ /* this urb is terminated, clean up */
+ dbg("%s - urb shutting down with status: %d", __FUNCTION__,
+urb->status);
return;
+ default:
+ dbg("%s - nonzero urb status received: %d", __FUNCTION__, urb->status);
+ goto exit;
}
// process this interrupt-read even if there are no ports open
@@ -826,6 +836,12 @@
++portNumber;
}
}
+
+exit:
+ result = usb_submit_urb (urb, GFP_ATOMIC);
+ if (result) {
+ err("%s - Error %d submitting control urb", __FUNCTION__, result);
+ }
}
@@ -1020,21 +1036,22 @@
edge_serial->bulk_out_endpoint = port0->bulk_out_endpointAddress;
/* set up our interrupt urb */
- FILL_INT_URB(edge_serial->interrupt_read_urb,
- serial->dev,
- usb_rcvintpipe(serial->dev,
- port0->interrupt_in_endpointAddress),
- port0->interrupt_in_buffer,
- edge_serial->interrupt_read_urb->transfer_buffer_length,
- edge_interrupt_callback, edge_serial,
- edge_serial->interrupt_read_urb->interval);
+ usb_fill_int_urb(edge_serial->interrupt_read_urb,
+ serial->dev,
+ usb_rcvintpipe(serial->dev,
+ port0->interrupt_in_endpointAddress),
+ port0->interrupt_in_buffer,
+
+edge_serial->interrupt_read_urb->transfer_buffer_length,
+ edge_interrupt_callback, edge_serial,
+ edge_serial->interrupt_read_urb->interval);
/* set up our bulk in urb */
- FILL_BULK_URB(edge_serial->read_urb, serial->dev,
- usb_rcvbulkpipe(serial->dev,
port0->bulk_in_endpointAddress),
- port0->bulk_in_buffer,
- edge_serial->read_urb->transfer_buffer_length,
- edge_bulk_in_callback, edge_serial);
+ usb_fill_bulk_urb(edge_serial->read_urb, serial->dev,
+ usb_rcvbulkpipe(serial->dev,
+ port0->bulk_in_endpointAddress),
+ port0->bulk_in_buffer,
+ edge_serial->read_urb->transfer_buffer_length,
+ edge_bulk_in_callback, edge_serial);
/* start interrupt read for this edgeport
* this interrupt will continue as long as the edgeport is connected */
diff -Nru a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c
--- a/drivers/usb/serial/io_ti.c Mon Oct 28 13:53:49 2002
+++ b/drivers/usb/serial/io_ti.c Mon Oct 28 13:53:49 2002
@@ -1623,6 +1623,7 @@
int length = urb->actual_length;
int port_number;
int function;
+ int status;
__u8 lsr;
__u8 msr;
@@ -1632,21 +1633,31 @@
return;
}
- if (urb->status) {
- dbg("%s - nonzero control read status received: %d", __FUNCTION__,
urb->status);
+ switch (urb->status) {
+ case 0:
+ /* success */
+ break;
+ case -ECONNRESET:
+ case -ENOENT:
+ case -ESHUTDOWN:
+ /* this urb is terminated, clean up */
+ dbg("%s - urb shutting down with status: %d", __FUNCTION__,
+urb->status);
return;
+ default:
+ dbg("%s - nonzero urb status received: %d", __FUNCTION__, urb->status);
+ goto exit;
}
if (!length) {
dbg ("%s - no data in urb", __FUNCTION__);
- return;
+ goto exit;
}
usb_serial_debug_data (__FILE__, __FUNCTION__, length, data);
if (length != 2) {
dbg ("%s - expecting packet of size 2, got %d", __FUNCTION__, length);
- return;
+ goto exit;
}
port_number = TIUMP_GET_PORT_FROM_CODE (data[0]);
@@ -1694,6 +1705,12 @@
break;
}
+
+exit:
+ status = usb_submit_urb (urb, GFP_ATOMIC);
+ if (status)
+ err ("%s - usb_submit_urb failed with result %d",
+ __FUNCTION__, status);
}
static void edge_bulk_in_callback (struct urb *urb)
@@ -1758,7 +1775,6 @@
exit:
/* continue always trying to read */
- urb->dev = edge_port->port->serial->dev;
status = usb_submit_urb (urb, GFP_ATOMIC);
if (status)
err ("%s - usb_submit_urb failed with result %d",
diff -Nru a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c
--- a/drivers/usb/serial/keyspan_pda.c Mon Oct 28 13:53:49 2002
+++ b/drivers/usb/serial/keyspan_pda.c Mon Oct 28 13:53:49 2002
@@ -229,12 +229,25 @@
struct tty_struct *tty;
unsigned char *data = urb->transfer_buffer;
int i;
+ int status;
struct keyspan_pda_private *priv;
priv = (struct keyspan_pda_private *)(port->private);
- /* the urb might have been killed. */
- if (urb->status)
+ switch (urb->status) {
+ case 0:
+ /* success */
+ break;
+ case -ECONNRESET:
+ case -ENOENT:
+ case -ESHUTDOWN:
+ /* this urb is terminated, clean up */
+ dbg("%s - urb shutting down with status: %d", __FUNCTION__,
+urb->status);
return;
+ default:
+ dbg("%s - nonzero urb status received: %d", __FUNCTION__, urb->status);
+ goto exit;
+ }
+
if (port_paranoia_check (port, "keyspan_pda_rx_interrupt")) {
return;
@@ -277,7 +290,11 @@
break;
}
- /* INT urbs are automatically re-submitted */
+exit:
+ status = usb_submit_urb (urb, GFP_ATOMIC);
+ if (status)
+ err ("%s - usb_submit_urb failed with result %d",
+ __FUNCTION__, status);
}
diff -Nru a/drivers/usb/serial/mct_u232.c b/drivers/usb/serial/mct_u232.c
--- a/drivers/usb/serial/mct_u232.c Mon Oct 28 13:53:49 2002
+++ b/drivers/usb/serial/mct_u232.c Mon Oct 28 13:53:49 2002
@@ -521,15 +521,25 @@
struct usb_serial *serial = port->serial;
struct tty_struct *tty;
unsigned char *data = urb->transfer_buffer;
+ int status;
dbg("%s - port %d", __FUNCTION__, port->number);
- /* The urb might have been killed. */
- if (urb->status) {
- dbg("%s - nonzero read bulk status received: %d", __FUNCTION__,
- urb->status);
- return;
- }
+ switch (urb->status) {
+ case 0:
+ /* success */
+ break;
+ case -ECONNRESET:
+ case -ENOENT:
+ case -ESHUTDOWN:
+ /* this urb is terminated, clean up */
+ dbg("%s - urb shutting down with status: %d", __FUNCTION__,
+urb->status);
+ return;
+ default:
+ dbg("%s - nonzero urb status received: %d", __FUNCTION__, urb->status);
+ goto exit;
+ }
+
if (!serial) {
dbg("%s - bad serial pointer, exiting", __FUNCTION__);
return;
@@ -549,8 +559,7 @@
}
tty_flip_buffer_push(tty);
}
- /* INT urbs are automatically re-submitted */
- return;
+ goto exit;
}
/*
@@ -587,8 +596,11 @@
}
}
#endif
-
- /* INT urbs are automatically re-submitted */
+exit:
+ status = usb_submit_urb (urb, GFP_ATOMIC);
+ if (status)
+ err ("%s - usb_submit_urb failed with result %d",
+ __FUNCTION__, status);
} /* mct_u232_read_int_callback */
diff -Nru a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
--- a/drivers/usb/serial/pl2303.c Mon Oct 28 13:53:49 2002
+++ b/drivers/usb/serial/pl2303.c Mon Oct 28 13:53:49 2002
@@ -592,25 +592,36 @@
struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
//unsigned char *data = urb->transfer_buffer;
- //int i;
+ int status;
-//ints auto restart...
-
- if (!serial) {
+ switch (urb->status) {
+ case 0:
+ /* success */
+ break;
+ case -ECONNRESET:
+ case -ENOENT:
+ case -ESHUTDOWN:
+ /* this urb is terminated, clean up */
+ dbg("%s - urb shutting down with status: %d", __FUNCTION__,
+urb->status);
return;
+ default:
+ dbg("%s - nonzero urb status received: %d", __FUNCTION__, urb->status);
+ goto exit;
}
- if (urb->status) {
- urb->status = 0;
+ if (!serial) {
return;
}
usb_serial_debug_data (__FILE__, __FUNCTION__, urb->actual_length,
urb->transfer_buffer);
-#if 0
-//FIXME need to update state of terminal lines variable
-#endif
- return;
+ //FIXME need to update state of terminal lines variable
+
+exit:
+ status = usb_submit_urb (urb, GFP_ATOMIC);
+ if (status)
+ err ("%s - usb_submit_urb failed with result %d",
+ __FUNCTION__, status);
}
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel