summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/bluetooth/hci_usb.c12
-rw-r--r--drivers/isdn/hisax/st5481_usb.c4
-rw-r--r--drivers/media/video/cpia_usb.c2
-rw-r--r--drivers/net/irda/irda-usb.c12
-rw-r--r--drivers/usb/class/audio.c8
-rw-r--r--drivers/usb/class/bluetty.c16
-rw-r--r--drivers/usb/class/cdc-acm.c8
-rw-r--r--drivers/usb/class/usb-midi.c8
-rw-r--r--drivers/usb/class/usblp.c4
-rw-r--r--drivers/usb/core/devio.c2
-rw-r--r--drivers/usb/core/hcd.c23
-rw-r--r--drivers/usb/core/hcd.h6
-rw-r--r--drivers/usb/core/hub.c2
-rw-r--r--drivers/usb/core/message.c4
-rw-r--r--drivers/usb/host/ehci-hcd.c6
-rw-r--r--drivers/usb/host/ehci-q.c2
-rw-r--r--drivers/usb/host/ehci-sched.c2
-rw-r--r--drivers/usb/host/hc_simple.c4
-rw-r--r--drivers/usb/host/hc_sl811_rh.c6
-rw-r--r--drivers/usb/host/ohci-hcd.c8
-rw-r--r--drivers/usb/host/ohci-pci.c2
-rw-r--r--drivers/usb/host/ohci-q.c12
-rw-r--r--drivers/usb/host/uhci-hcd.c13
-rw-r--r--drivers/usb/image/hpusbscsi.c16
-rw-r--r--drivers/usb/image/hpusbscsi.h13
-rw-r--r--drivers/usb/image/mdc800.c6
-rw-r--r--drivers/usb/image/microtek.c12
-rw-r--r--drivers/usb/image/microtek.h1
-rw-r--r--drivers/usb/image/scanner.c2
-rw-r--r--drivers/usb/input/aiptek.c4
-rw-r--r--drivers/usb/input/hid-core.c6
-rw-r--r--drivers/usb/input/pid.c2
-rw-r--r--drivers/usb/input/powermate.c6
-rw-r--r--drivers/usb/input/usbkbd.c4
-rw-r--r--drivers/usb/input/usbmouse.c2
-rw-r--r--drivers/usb/input/wacom.c10
-rw-r--r--drivers/usb/input/xpad.c2
-rw-r--r--drivers/usb/media/dabusb.c2
-rw-r--r--drivers/usb/media/konicawc.c2
-rw-r--r--drivers/usb/media/ov511.c2
-rw-r--r--drivers/usb/media/pwc-if.c2
-rw-r--r--drivers/usb/media/se401.c4
-rw-r--r--drivers/usb/media/stv680.c2
-rw-r--r--drivers/usb/media/usbvideo.c2
-rw-r--r--drivers/usb/misc/auerswald.c38
-rw-r--r--drivers/usb/misc/brlvger.c4
-rw-r--r--drivers/usb/misc/speedtouch.c12
-rw-r--r--drivers/usb/misc/tiglusb.c25
-rw-r--r--drivers/usb/misc/usbtest.c4
-rw-r--r--drivers/usb/net/catc.c8
-rw-r--r--drivers/usb/net/cdc-ether.c4
-rw-r--r--drivers/usb/net/kaweth.c12
-rw-r--r--drivers/usb/net/pegasus.c10
-rw-r--r--drivers/usb/net/rtl8150.c8
-rw-r--r--drivers/usb/net/usbnet.c8
-rw-r--r--drivers/usb/serial/belkin_sa.c4
-rw-r--r--drivers/usb/serial/cyberjack.c12
-rw-r--r--drivers/usb/serial/digi_acceleport.c8
-rw-r--r--drivers/usb/serial/empeg.c8
-rw-r--r--drivers/usb/serial/ftdi_sio.c8
-rw-r--r--drivers/usb/serial/generic.c4
-rw-r--r--drivers/usb/serial/io_edgeport.c16
-rw-r--r--drivers/usb/serial/io_ti.c6
-rw-r--r--drivers/usb/serial/ipaq.c8
-rw-r--r--drivers/usb/serial/ir-usb.c8
-rw-r--r--drivers/usb/serial/keyspan.c46
-rw-r--r--drivers/usb/serial/keyspan_pda.c4
-rw-r--r--drivers/usb/serial/kl5kusb105.c8
-rw-r--r--drivers/usb/serial/mct_u232.c8
-rw-r--r--drivers/usb/serial/omninet.c8
-rw-r--r--drivers/usb/serial/pl2303.c13
-rw-r--r--drivers/usb/serial/pl2303.h3
-rw-r--r--drivers/usb/serial/safe_serial.c2
-rw-r--r--drivers/usb/serial/usb-serial.h10
-rw-r--r--drivers/usb/serial/visor.c8
-rw-r--r--drivers/usb/serial/whiteheat.c16
-rw-r--r--drivers/usb/storage/transport.c6
-rw-r--r--drivers/usb/storage/transport.h2
-rw-r--r--drivers/usb/usb-skeleton.c4
-rw-r--r--include/linux/usb.h11
-rw-r--r--sound/usb/usbmidi.c6
81 files changed, 319 insertions, 319 deletions
diff --git a/drivers/bluetooth/hci_usb.c b/drivers/bluetooth/hci_usb.c
index fe55c337cf26..dcc257777929 100644
--- a/drivers/bluetooth/hci_usb.c
+++ b/drivers/bluetooth/hci_usb.c
@@ -92,9 +92,9 @@ static struct usb_device_id ignore_ids[] = {
{ } /* Terminating entry */
};
-static void hci_usb_interrupt(struct urb *urb);
-static void hci_usb_rx_complete(struct urb *urb);
-static void hci_usb_tx_complete(struct urb *urb);
+static void hci_usb_interrupt(struct urb *urb, struct pt_regs *regs);
+static void hci_usb_rx_complete(struct urb *urb, struct pt_regs *regs);
+static void hci_usb_tx_complete(struct urb *urb, struct pt_regs *regs);
static struct urb *hci_usb_get_completed(struct hci_usb *husb)
{
@@ -429,7 +429,7 @@ int hci_usb_send_frame(struct sk_buff *skb)
return 0;
}
-static void hci_usb_interrupt(struct urb *urb)
+static void hci_usb_interrupt(struct urb *urb, struct pt_regs *regs)
{
struct hci_usb *husb = (void *) urb->context;
struct hci_usb_scb *scb;
@@ -531,7 +531,7 @@ exit:
husb->hdev.name, status);
}
-static void hci_usb_tx_complete(struct urb *urb)
+static void hci_usb_tx_complete(struct urb *urb, struct pt_regs *regs)
{
struct sk_buff *skb = (struct sk_buff *) urb->context;
struct hci_dev *hdev = (struct hci_dev *) skb->dev;
@@ -563,7 +563,7 @@ static void hci_usb_tx_complete(struct urb *urb)
return;
}
-static void hci_usb_rx_complete(struct urb *urb)
+static void hci_usb_rx_complete(struct urb *urb, struct pt_regs *regs)
{
struct sk_buff *skb = (struct sk_buff *) urb->context;
struct hci_dev *hdev = (struct hci_dev *) skb->dev;
diff --git a/drivers/isdn/hisax/st5481_usb.c b/drivers/isdn/hisax/st5481_usb.c
index d7a326f06199..13a13d10a95c 100644
--- a/drivers/isdn/hisax/st5481_usb.c
+++ b/drivers/isdn/hisax/st5481_usb.c
@@ -123,7 +123,7 @@ void st5481_ph_command(struct st5481_adapter *adapter, unsigned int command)
* Call the user provided completion routine and try
* to send the next request.
*/
-static void usb_ctrl_complete(struct urb *urb)
+static void usb_ctrl_complete(struct urb *urb, struct pt_regs *regs)
{
struct st5481_adapter *adapter = urb->context;
struct st5481_ctrl *ctrl = &adapter->ctrl;
@@ -176,7 +176,7 @@ static void usb_ctrl_complete(struct urb *urb)
* Decode the register values and schedule a private event.
* Called at interrupt.
*/
-static void usb_int_complete(struct urb *urb)
+static void usb_int_complete(struct urb *urb, struct pt_regs *regs)
{
u_char *data = urb->transfer_buffer;
u_char irqbyte;
diff --git a/drivers/media/video/cpia_usb.c b/drivers/media/video/cpia_usb.c
index 1b4072e98676..1c01ef626204 100644
--- a/drivers/media/video/cpia_usb.c
+++ b/drivers/media/video/cpia_usb.c
@@ -107,7 +107,7 @@ static struct cpia_camera_ops cpia_usb_ops = {
static struct cam_data *cam_list;
static spinlock_t cam_list_lock_usb;
-static void cpia_usb_complete(struct urb *urb)
+static void cpia_usb_complete(struct urb *urb, struct pt_regs *regs)
{
int i;
char *cdata;
diff --git a/drivers/net/irda/irda-usb.c b/drivers/net/irda/irda-usb.c
index da5af39db508..15d8c379510c 100644
--- a/drivers/net/irda/irda-usb.c
+++ b/drivers/net/irda/irda-usb.c
@@ -107,9 +107,9 @@ static void irda_usb_change_speed_xbofs(struct irda_usb_cb *self);
static int irda_usb_hard_xmit(struct sk_buff *skb, struct net_device *dev);
static int irda_usb_open(struct irda_usb_cb *self);
static int irda_usb_close(struct irda_usb_cb *self);
-static void speed_bulk_callback(struct urb *urb);
-static void write_bulk_callback(struct urb *urb);
-static void irda_usb_receive(struct urb *urb);
+static void speed_bulk_callback(struct urb *urb, struct pt_regs *regs);
+static void write_bulk_callback(struct urb *urb, struct pt_regs *regs);
+static void irda_usb_receive(struct urb *urb, struct pt_regs *regs);
static int irda_usb_net_init(struct net_device *dev);
static int irda_usb_net_open(struct net_device *dev);
static int irda_usb_net_close(struct net_device *dev);
@@ -284,7 +284,7 @@ static void irda_usb_change_speed_xbofs(struct irda_usb_cb *self)
* Speed URB callback
* Now, we can only get called for the speed URB.
*/
-static void speed_bulk_callback(struct urb *urb)
+static void speed_bulk_callback(struct urb *urb, struct pt_regs *regs)
{
struct irda_usb_cb *self = urb->context;
@@ -486,7 +486,7 @@ drop:
/*
* Note : this function will be called only for tx_urb...
*/
-static void write_bulk_callback(struct urb *urb)
+static void write_bulk_callback(struct urb *urb, struct pt_regs *regs)
{
unsigned long flags;
struct sk_buff *skb = urb->context;
@@ -753,7 +753,7 @@ static void irda_usb_submit(struct irda_usb_cb *self, struct sk_buff *skb, struc
* Called by the USB subsystem when a frame has been received
*
*/
-static void irda_usb_receive(struct urb *urb)
+static void irda_usb_receive(struct urb *urb, struct pt_regs *regs)
{
struct sk_buff *skb = (struct sk_buff *) urb->context;
struct irda_usb_cb *self;
diff --git a/drivers/usb/class/audio.c b/drivers/usb/class/audio.c
index 4517d61f925d..d3fe8391953f 100644
--- a/drivers/usb/class/audio.c
+++ b/drivers/usb/class/audio.c
@@ -890,7 +890,7 @@ static int usbin_retire_desc(struct usbin *u, struct urb *urb)
return err ? -1 : 0;
}
-static void usbin_completed(struct urb *urb)
+static void usbin_completed(struct urb *urb, struct pt_regs *regs)
{
struct usb_audiodev *as = (struct usb_audiodev *)urb->context;
struct usbin *u = &as->usbin;
@@ -956,7 +956,7 @@ static int usbin_sync_retire_desc(struct usbin *u, struct urb *urb)
return 0;
}
-static void usbin_sync_completed(struct urb *urb)
+static void usbin_sync_completed(struct urb *urb, struct pt_regs *regs)
{
struct usb_audiodev *as = (struct usb_audiodev *)urb->context;
struct usbin *u = &as->usbin;
@@ -1250,7 +1250,7 @@ static int usbout_retire_desc(struct usbout *u, struct urb *urb)
return 0;
}
-static void usbout_completed(struct urb *urb)
+static void usbout_completed(struct urb *urb, struct pt_regs *regs)
{
struct usb_audiodev *as = (struct usb_audiodev *)urb->context;
struct usbout *u = &as->usbout;
@@ -1323,7 +1323,7 @@ static int usbout_sync_retire_desc(struct usbout *u, struct urb *urb)
return 0;
}
-static void usbout_sync_completed(struct urb *urb)
+static void usbout_sync_completed(struct urb *urb, struct pt_regs *regs)
{
struct usb_audiodev *as = (struct usb_audiodev *)urb->context;
struct usbout *u = &as->usbout;
diff --git a/drivers/usb/class/bluetty.c b/drivers/usb/class/bluetty.c
index 9f2c5bf28cd2..634efc509023 100644
--- a/drivers/usb/class/bluetty.c
+++ b/drivers/usb/class/bluetty.c
@@ -216,10 +216,10 @@ static void bluetooth_unthrottle (struct tty_struct *tty);
static int bluetooth_ioctl (struct tty_struct *tty, struct file *file, unsigned int cmd, unsigned long arg);
static void bluetooth_set_termios (struct tty_struct *tty, struct termios *old);
-static void bluetooth_int_callback (struct urb *urb);
-static void bluetooth_ctrl_callback (struct urb *urb);
-static void bluetooth_read_bulk_callback (struct urb *urb);
-static void bluetooth_write_bulk_callback (struct urb *urb);
+static void bluetooth_int_callback (struct urb *urb, struct pt_regs *regs);
+static void bluetooth_ctrl_callback (struct urb *urb, struct pt_regs *regs);
+static void bluetooth_read_bulk_callback (struct urb *urb, struct pt_regs *regs);
+static void bluetooth_write_bulk_callback (struct urb *urb, struct pt_regs *regs);
static int usb_bluetooth_probe (struct usb_interface *intf,
const struct usb_device_id *id);
@@ -760,7 +760,7 @@ void btusb_disable_bulk_read(struct tty_struct *tty){
*****************************************************************************/
-static void bluetooth_int_callback (struct urb *urb)
+static void bluetooth_int_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_bluetooth *bluetooth = get_usb_bluetooth ((struct usb_bluetooth *)urb->context, __FUNCTION__);
unsigned char *data = urb->transfer_buffer;
@@ -871,7 +871,7 @@ exit:
}
-static void bluetooth_ctrl_callback (struct urb *urb)
+static void bluetooth_ctrl_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_bluetooth *bluetooth = get_usb_bluetooth ((struct usb_bluetooth *)urb->context, __FUNCTION__);
@@ -889,7 +889,7 @@ static void bluetooth_ctrl_callback (struct urb *urb)
}
-static void bluetooth_read_bulk_callback (struct urb *urb)
+static void bluetooth_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_bluetooth *bluetooth = get_usb_bluetooth ((struct usb_bluetooth *)urb->context, __FUNCTION__);
unsigned char *data = urb->transfer_buffer;
@@ -1006,7 +1006,7 @@ exit:
}
-static void bluetooth_write_bulk_callback (struct urb *urb)
+static void bluetooth_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_bluetooth *bluetooth = get_usb_bluetooth ((struct usb_bluetooth *)urb->context, __FUNCTION__);
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
index 16e189285585..86b6939681bd 100644
--- a/drivers/usb/class/cdc-acm.c
+++ b/drivers/usb/class/cdc-acm.c
@@ -181,7 +181,7 @@ static int acm_ctrl_msg(struct acm *acm, int request, int value, void *buf, int
* Interrupt handler for various ACM control events
*/
-static void acm_ctrl_irq(struct urb *urb)
+static void acm_ctrl_irq(struct urb *urb, struct pt_regs *regs)
{
struct acm *acm = urb->context;
struct usb_ctrlrequest *dr = urb->transfer_buffer;
@@ -245,7 +245,7 @@ exit:
__FUNCTION__, status);
}
-static void acm_read_bulk(struct urb *urb)
+static void acm_read_bulk(struct urb *urb, struct pt_regs *regs)
{
struct acm *acm = urb->context;
struct tty_struct *tty = acm->tty;
@@ -282,7 +282,7 @@ static void acm_read_bulk(struct urb *urb)
dbg("failed resubmitting read urb");
}
-static void acm_write_bulk(struct urb *urb)
+static void acm_write_bulk(struct urb *urb, struct pt_regs *regs)
{
struct acm *acm = (struct acm *)urb->context;
@@ -424,7 +424,7 @@ static void acm_tty_unthrottle(struct tty_struct *tty)
if (!ACM_READY(acm)) return;
acm->throttle = 0;
if (acm->readurb->status != -EINPROGRESS)
- acm_read_bulk(acm->readurb);
+ acm_read_bulk(acm->readurb, NULL);
}
static void acm_tty_break_ctl(struct tty_struct *tty, int state)
diff --git a/drivers/usb/class/usb-midi.c b/drivers/usb/class/usb-midi.c
index 586808aa0f4d..4a9e4716f2a4 100644
--- a/drivers/usb/class/usb-midi.c
+++ b/drivers/usb/class/usb-midi.c
@@ -308,7 +308,7 @@ static DECLARE_WAIT_QUEUE_HEAD(open_wait);
/* ------------------------------------------------------------------------- */
-static void usb_write_callback(struct urb *urb)
+static void usb_write_callback(struct urb *urb, struct pt_regs *regs)
{
struct midi_out_endpoint *ep = (struct midi_out_endpoint *)urb->context;
@@ -331,7 +331,7 @@ static int usb_write( struct midi_out_endpoint *ep, unsigned char *buf, int len
d = ep->usbdev;
pipe = usb_sndbulkpipe(d, ep->endpoint);
usb_fill_bulk_urb( ep->urb, d, pipe, (unsigned char*)buf, len,
- (usb_complete_t)usb_write_callback, ep );
+ usb_write_callback, ep );
status = usb_submit_urb(ep->urb, GFP_KERNEL);
@@ -364,7 +364,7 @@ static int usb_write( struct midi_out_endpoint *ep, unsigned char *buf, int len
*
**/
-static void usb_bulk_read(struct urb *urb)
+static void usb_bulk_read(struct urb *urb, struct pt_regs *regs)
{
struct midi_in_endpoint *ep = (struct midi_in_endpoint *)(urb->context);
unsigned char *data = urb->transfer_buffer;
@@ -1048,7 +1048,7 @@ static struct midi_in_endpoint *alloc_midi_in_endpoint( struct usb_device *d, in
usb_fill_bulk_urb( ep->urb, d,
usb_rcvbulkpipe(d, endPoint),
(unsigned char *)ep->recvBuf, bufSize,
- (usb_complete_t)usb_bulk_read, ep );
+ usb_bulk_read, ep );
/* ep->bufRdPtr = 0; */
/* ep->bufWrPtr = 0; */
diff --git a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c
index 13ade554f075..4c478e4939bf 100644
--- a/drivers/usb/class/usblp.c
+++ b/drivers/usb/class/usblp.c
@@ -260,7 +260,7 @@ static int proto_bias = -1;
* URB callback.
*/
-static void usblp_bulk_read(struct urb *urb)
+static void usblp_bulk_read(struct urb *urb, struct pt_regs *regs)
{
struct usblp *usblp = urb->context;
@@ -274,7 +274,7 @@ static void usblp_bulk_read(struct urb *urb)
wake_up_interruptible(&usblp->wait);
}
-static void usblp_bulk_write(struct urb *urb)
+static void usblp_bulk_write(struct urb *urb, struct pt_regs *regs)
{
struct usblp *usblp = urb->context;
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
index c1adbac7f205..f5fe0dcd752f 100644
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -251,7 +251,7 @@ extern __inline__ struct async *async_getpending(struct dev_state *ps, void *use
return NULL;
}
-static void async_completed(struct urb *urb)
+static void async_completed(struct urb *urb, struct pt_regs *regs)
{
struct async *as = (struct async *)urb->context;
struct dev_state *ps = as->ps;
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index 3c9b59911ed8..fe29d72659fd 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -435,7 +435,7 @@ error:
}
/* any errors get returned through the urb completion */
- usb_hcd_giveback_urb (hcd, urb);
+ usb_hcd_giveback_urb (hcd, urb, NULL);
return 0;
}
@@ -496,7 +496,7 @@ static void rh_report_status (unsigned long ptr)
urb->actual_length = length;
urb->status = 0;
urb->hcpriv = 0;
- urb->complete (urb);
+ urb->complete (urb, NULL);
return;
}
} else
@@ -511,7 +511,7 @@ static void rh_report_status (unsigned long ptr)
urb->hcpriv = 0;
spin_unlock_irqrestore (&urb->lock, flags);
- usb_hcd_giveback_urb (hcd, urb);
+ usb_hcd_giveback_urb (hcd, urb, NULL);
}
}
@@ -546,7 +546,7 @@ void usb_rh_status_dequeue (struct usb_hcd *hcd, struct urb *urb)
spin_unlock_irqrestore (&hcd_data_lock, flags);
/* we rely on RH callback code not unlinking its URB! */
- usb_hcd_giveback_urb (hcd, urb);
+ usb_hcd_giveback_urb (hcd, urb, NULL);
}
/*-------------------------------------------------------------------------*/
@@ -1062,11 +1062,11 @@ struct completion_splice { // modified urb context:
struct completion done;
/* original urb data */
- void (*complete)(struct urb *);
+ usb_complete_t complete;
void *context;
};
-static void unlink_complete (struct urb *urb)
+static void unlink_complete (struct urb *urb, struct pt_regs *regs)
{
struct completion_splice *splice;
@@ -1075,7 +1075,7 @@ static void unlink_complete (struct urb *urb)
/* issue original completion call */
urb->complete = splice->complete;
urb->context = splice->context;
- urb->complete (urb);
+ urb->complete (urb, regs);
/* then let the synchronous unlink call complete */
complete (&splice->done);
@@ -1275,6 +1275,7 @@ EXPORT_SYMBOL (usb_hcd_operations);
* usb_hcd_giveback_urb - return URB from HCD to device driver
* @hcd: host controller returning the URB
* @urb: urb being returned to the USB device driver.
+ * @regs: pt_regs, passed down to the URB completion handler
* Context: in_interrupt()
*
* This hands the URB from HCD to its USB device driver, using its
@@ -1283,7 +1284,7 @@ EXPORT_SYMBOL (usb_hcd_operations);
* the device driver won't cause problems if it frees, modifies,
* or resubmits this URB.
*/
-void usb_hcd_giveback_urb (struct usb_hcd *hcd, struct urb *urb)
+void usb_hcd_giveback_urb (struct usb_hcd *hcd, struct urb *urb, struct pt_regs *regs)
{
urb_unlink (urb);
@@ -1306,7 +1307,7 @@ void usb_hcd_giveback_urb (struct usb_hcd *hcd, struct urb *urb)
}
/* pass ownership to the completion handler */
- urb->complete (urb);
+ urb->complete (urb, regs);
usb_put_urb (urb);
}
EXPORT_SYMBOL (usb_hcd_giveback_urb);
@@ -1317,7 +1318,7 @@ EXPORT_SYMBOL (usb_hcd_giveback_urb);
* usb_hcd_irq - hook IRQs to HCD framework (bus glue)
* @irq: the IRQ being raised
* @__hcd: pointer to the HCD whose IRQ is beinng signaled
- * @r: saved hardware registers (not passed to HCD)
+ * @r: saved hardware registers
*
* When registering a USB bus through the HCD framework code, use this
* to handle interrupts. The PCI glue layer does so automatically; only
@@ -1331,7 +1332,7 @@ void usb_hcd_irq (int irq, void *__hcd, struct pt_regs * r)
if (unlikely (hcd->state == USB_STATE_HALT)) /* irq sharing? */
return;
- hcd->driver->irq (hcd);
+ hcd->driver->irq (hcd, r);
if (hcd->state != start && hcd->state == USB_STATE_HALT)
usb_hc_died (hcd);
}
diff --git a/drivers/usb/core/hcd.h b/drivers/usb/core/hcd.h
index 75844a24e77e..0db63cf30e7a 100644
--- a/drivers/usb/core/hcd.h
+++ b/drivers/usb/core/hcd.h
@@ -169,11 +169,13 @@ struct usb_operations {
/* each driver provides one of these, and hardware init support */
+struct pt_regs;
+
struct hc_driver {
const char *description; /* "ehci-hcd" etc */
/* irq handler */
- void (*irq) (struct usb_hcd *hcd);
+ void (*irq) (struct usb_hcd *hcd, struct pt_regs *regs);
int flags;
#define HCD_MEMORY 0x0001 /* HC regs use memory (else I/O) */
@@ -216,7 +218,7 @@ struct hc_driver {
char *buf, u16 wLength);
};
-extern void usb_hcd_giveback_urb (struct usb_hcd *hcd, struct urb *urb);
+extern void usb_hcd_giveback_urb (struct usb_hcd *hcd, struct urb *urb, struct pt_regs *regs);
extern void usb_bus_init (struct usb_bus *bus);
extern void usb_rh_status_dequeue (struct usb_hcd *hcd, struct urb *urb);
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index cf4e9236724c..3540d15bd771 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -115,7 +115,7 @@ static int usb_get_port_status(struct usb_device *dev, int port, void *data)
}
/* completion function, fires on port status changes and various faults */
-static void hub_irq(struct urb *urb)
+static void hub_irq(struct urb *urb, struct pt_regs *regs)
{
struct usb_hub *hub = (struct usb_hub *)urb->context;
unsigned long flags;
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
index 18a0c6493483..7b7689e38944 100644
--- a/drivers/usb/core/message.c
+++ b/drivers/usb/core/message.c
@@ -16,7 +16,7 @@ struct usb_api_data {
int done;
};
-static void usb_api_blocking_completion(struct urb *urb)
+static void usb_api_blocking_completion(struct urb *urb, struct pt_regs *regs)
{
struct usb_api_data *awd = (struct usb_api_data *)urb->context;
@@ -210,7 +210,7 @@ static void sg_clean (struct usb_sg_request *io)
io->dev = 0;
}
-static void sg_complete (struct urb *urb)
+static void sg_complete (struct urb *urb, struct pt_regs *regs)
{
struct usb_sg_request *io = (struct usb_sg_request *) urb->context;
unsigned long flags;
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 6a70bc006b6e..a76b46186c50 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -252,7 +252,7 @@ static void ehci_ready (struct ehci_hcd *ehci)
static void ehci_tasklet (unsigned long param);
-static void ehci_irq (struct usb_hcd *hcd);
+static void ehci_irq (struct usb_hcd *hcd, struct pt_regs *regs);
static void ehci_watchdog (unsigned long param)
{
@@ -261,7 +261,7 @@ static void ehci_watchdog (unsigned long param)
spin_lock_irqsave (&ehci->lock, flags);
/* guard against lost IAA, which wedges everything */
- ehci_irq (&ehci->hcd);
+ ehci_irq (&ehci->hcd, NULL);
/* stop async processing after it's idled a while */
if (ehci->async_idle) {
start_unlink_async (ehci, ehci->async);
@@ -635,7 +635,7 @@ static void ehci_tasklet (unsigned long param)
/*-------------------------------------------------------------------------*/
-static void ehci_irq (struct usb_hcd *hcd)
+static void ehci_irq (struct usb_hcd *hcd, struct pt_regs *regs)
{
struct ehci_hcd *ehci = hcd_to_ehci (hcd);
u32 status = readl (&ehci->regs->status);
diff --git a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c
index 563f001b327c..e07979d5899b 100644
--- a/drivers/usb/host/ehci-q.c
+++ b/drivers/usb/host/ehci-q.c
@@ -191,7 +191,7 @@ static void ehci_urb_done (struct ehci_hcd *ehci, struct urb *urb)
/* complete() can reenter this HCD */
spin_unlock (&ehci->lock);
- usb_hcd_giveback_urb (&ehci->hcd, urb);
+ usb_hcd_giveback_urb (&ehci->hcd, urb, NULL);
spin_lock (&ehci->lock);
}
diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c
index 62abde4c9908..528574425424 100644
--- a/drivers/usb/host/ehci-sched.c
+++ b/drivers/usb/host/ehci-sched.c
@@ -922,7 +922,7 @@ itd_complete (
/* complete() can reenter this HCD */
spin_unlock (&ehci->lock);
- usb_hcd_giveback_urb (&ehci->hcd, urb);
+ usb_hcd_giveback_urb (&ehci->hcd, urb, NULL);
spin_lock (&ehci->lock);
/* defer stopping schedule; completion can submit */
diff --git a/drivers/usb/host/hc_simple.c b/drivers/usb/host/hc_simple.c
index ce06daad48b8..d8b8039b8b0d 100644
--- a/drivers/usb/host/hc_simple.c
+++ b/drivers/usb/host/hc_simple.c
@@ -106,7 +106,7 @@ static int hcs_return_urb (hci_t * hci, struct urb * urb, int resub_ok)
urb->dev = urb->hcpriv = NULL;
if (urb->complete) {
- urb->complete (urb); /* call complete */
+ urb->complete (urb, NULL); /* call complete */
}
if (resubmit) {
@@ -254,7 +254,7 @@ static int hci_unlink_urb (struct urb * urb)
if (urb->complete && (urb->transfer_flags & URB_ASYNC_UNLINK)) {
urb->status = -ENOENT;
urb->actual_length = 0;
- urb->complete (urb);
+ urb->complete (urb, NULL);
urb->status = 0;
} else {
urb->status = -ENOENT;
diff --git a/drivers/usb/host/hc_sl811_rh.c b/drivers/usb/host/hc_sl811_rh.c
index da6d30214359..786bb4dec196 100644
--- a/drivers/usb/host/hc_sl811_rh.c
+++ b/drivers/usb/host/hc_sl811_rh.c
@@ -193,7 +193,7 @@ static void rh_int_timer_do (unsigned long ptr)
usb_pipeout (urb->pipe));
if (urb->complete) {
- urb->complete (urb);
+ urb->complete (urb, NULL);
}
}
}
@@ -506,7 +506,7 @@ static int rh_submit_urb (struct urb * urb)
urb->hcpriv = NULL;
urb->dev = NULL;
if (urb->complete) {
- urb->complete (urb);
+ urb->complete (urb, NULL);
}
return 0;
@@ -537,7 +537,7 @@ static int rh_unlink_urb (struct urb * urb)
if (urb->transfer_flags & URB_ASYNC_UNLINK) {
urb->status = -ECONNRESET;
if (urb->complete) {
- urb->complete (urb);
+ urb->complete (urb, NULL);
}
} else
urb->status = -ENOENT;
diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
index e55cdfc7b512..af15bea5fa45 100644
--- a/drivers/usb/host/ohci-hcd.c
+++ b/drivers/usb/host/ohci-hcd.c
@@ -295,7 +295,7 @@ static int ohci_urb_dequeue (struct usb_hcd *hcd, struct urb *urb)
* with HC dead, we won't respect hc queue pointers
* any more ... just clean up every urb's memory.
*/
- finish_urb (ohci, urb);
+ finish_urb (ohci, urb, NULL);
}
return 0;
}
@@ -531,7 +531,7 @@ static int hc_start (struct ohci_hcd *ohci)
/* an interrupt happens */
-static void ohci_irq (struct usb_hcd *hcd)
+static void ohci_irq (struct usb_hcd *hcd, struct pt_regs *ptregs)
{
struct ohci_hcd *ohci = hcd_to_ohci (hcd);
struct ohci_regs *regs = ohci->regs;
@@ -570,7 +570,7 @@ static void ohci_irq (struct usb_hcd *hcd)
if (ints & OHCI_INTR_WDH) {
writel (OHCI_INTR_WDH, &regs->intrdisable);
- dl_done_list (ohci, dl_reverse_done_list (ohci));
+ dl_done_list (ohci, dl_reverse_done_list (ohci), ptregs);
writel (OHCI_INTR_WDH, &regs->intrenable);
}
@@ -581,7 +581,7 @@ static void ohci_irq (struct usb_hcd *hcd)
*/
spin_lock (&ohci->lock);
if (ohci->ed_rm_list)
- finish_unlinks (ohci, le16_to_cpu (ohci->hcca->frame_no));
+ finish_unlinks (ohci, le16_to_cpu (ohci->hcca->frame_no), ptregs);
if ((ints & OHCI_INTR_SF) != 0 && !ohci->ed_rm_list)
writel (OHCI_INTR_SF, &regs->intrdisable);
spin_unlock (&ohci->lock);
diff --git a/drivers/usb/host/ohci-pci.c b/drivers/usb/host/ohci-pci.c
index 9b7e598640b3..61f02e4f5d15 100644
--- a/drivers/usb/host/ohci-pci.c
+++ b/drivers/usb/host/ohci-pci.c
@@ -271,7 +271,7 @@ static int ohci_pci_resume (struct usb_hcd *hcd)
enable_irq (hcd->pdev->irq);
#endif
if (ohci->hcca->done_head)
- dl_done_list (ohci, dl_reverse_done_list (ohci));
+ dl_done_list (ohci, dl_reverse_done_list (ohci), NULL);
writel (OHCI_INTR_WDH, &ohci->regs->intrenable);
/* assume there are TDs on the bulk and control lists */
diff --git a/drivers/usb/host/ohci-q.c b/drivers/usb/host/ohci-q.c
index 0dc07327fa55..b5bcac0df2d1 100644
--- a/drivers/usb/host/ohci-q.c
+++ b/drivers/usb/host/ohci-q.c
@@ -32,7 +32,7 @@ static void urb_free_priv (struct ohci_hcd *hc, urb_priv_t *urb_priv)
* It's completely gone from HC data structures.
* PRECONDITION: no locks held (Giveback can call into HCD.)
*/
-static void finish_urb (struct ohci_hcd *ohci, struct urb *urb)
+static void finish_urb (struct ohci_hcd *ohci, struct urb *urb, struct pt_regs *regs)
{
unsigned long flags;
@@ -59,7 +59,7 @@ static void finish_urb (struct ohci_hcd *ohci, struct urb *urb)
#ifdef OHCI_VERBOSE_DEBUG
urb_print (urb, "RET", usb_pipeout (urb->pipe));
#endif
- usb_hcd_giveback_urb (&ohci->hcd, urb);
+ usb_hcd_giveback_urb (&ohci->hcd, urb, regs);
}
@@ -848,7 +848,7 @@ static struct td *dl_reverse_done_list (struct ohci_hcd *ohci)
#define tick_before(t1,t2) ((((s16)(t1))-((s16)(t2))) < 0)
/* there are some urbs/eds to unlink; called in_irq(), with HCD locked */
-static void finish_unlinks (struct ohci_hcd *ohci, u16 tick)
+static void finish_unlinks (struct ohci_hcd *ohci, u16 tick, struct pt_regs *regs)
{
struct ed *ed, **last;
@@ -913,7 +913,7 @@ rescan_this:
if (urb_priv->td_cnt == urb_priv->length) {
modified = completed = 1;
spin_unlock (&ohci->lock);
- finish_urb (ohci, urb);
+ finish_urb (ohci, urb, regs);
spin_lock (&ohci->lock);
}
}
@@ -976,7 +976,7 @@ rescan_this:
* path is finish_unlinks(), which unlinks URBs using ed_rm_list, instead of
* scanning the (re-reversed) donelist as this does.
*/
-static void dl_done_list (struct ohci_hcd *ohci, struct td *td)
+static void dl_done_list (struct ohci_hcd *ohci, struct td *td, struct pt_regs *regs)
{
unsigned long flags;
@@ -994,7 +994,7 @@ static void dl_done_list (struct ohci_hcd *ohci, struct td *td)
/* If all this urb's TDs are done, call complete() */
if (urb_priv->td_cnt == urb_priv->length) {
spin_unlock_irqrestore (&ohci->lock, flags);
- finish_urb (ohci, urb);
+ finish_urb (ohci, urb, regs);
spin_lock_irqsave (&ohci->lock, flags);
}
diff --git a/drivers/usb/host/uhci-hcd.c b/drivers/usb/host/uhci-hcd.c
index eff487471b20..a906fdcfeb0c 100644
--- a/drivers/usb/host/uhci-hcd.c
+++ b/drivers/usb/host/uhci-hcd.c
@@ -90,7 +90,6 @@ static kmem_cache_t *uhci_up_cachep; /* urb_priv */
static int uhci_get_current_frame_number(struct uhci_hcd *uhci);
static int uhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb);
static void uhci_unlink_generic(struct uhci_hcd *uhci, struct urb *urb);
-static void uhci_finish_urb(struct usb_hcd *hcd, struct urb *urb);
static int ports_active(struct uhci_hcd *uhci);
static void suspend_hc(struct uhci_hcd *uhci);
@@ -1798,7 +1797,7 @@ static void uhci_free_pending_qhs(struct uhci_hcd *uhci)
spin_unlock_irqrestore(&uhci->qh_remove_list_lock, flags);
}
-static void uhci_finish_urb(struct usb_hcd *hcd, struct urb *urb)
+static void uhci_finish_urb(struct usb_hcd *hcd, struct urb *urb, struct pt_regs *regs)
{
struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
struct uhci_hcd *uhci = hcd_to_uhci(hcd);
@@ -1813,10 +1812,10 @@ static void uhci_finish_urb(struct usb_hcd *hcd, struct urb *urb)
urb->status = status;
spin_unlock_irqrestore(&urb->lock, flags);
- usb_hcd_giveback_urb(hcd, urb);
+ usb_hcd_giveback_urb(hcd, urb, regs);
}
-static void uhci_finish_completion(struct usb_hcd *hcd)
+static void uhci_finish_completion(struct usb_hcd *hcd, struct pt_regs *regs)
{
struct uhci_hcd *uhci = hcd_to_uhci(hcd);
struct list_head *tmp, *head;
@@ -1832,7 +1831,7 @@ static void uhci_finish_completion(struct usb_hcd *hcd)
list_del_init(&urbp->complete_list);
spin_unlock_irqrestore(&uhci->complete_list_lock, flags);
- uhci_finish_urb(hcd, urb);
+ uhci_finish_urb(hcd, urb, regs);
spin_lock_irqsave(&uhci->complete_list_lock, flags);
head = &uhci->complete_list;
@@ -1864,7 +1863,7 @@ static void uhci_remove_pending_qhs(struct uhci_hcd *uhci)
spin_unlock_irqrestore(&uhci->urb_remove_list_lock, flags);
}
-static void uhci_irq(struct usb_hcd *hcd)
+static void uhci_irq(struct usb_hcd *hcd, struct pt_regs *regs)
{
struct uhci_hcd *uhci = hcd_to_uhci(hcd);
unsigned int io_addr = uhci->io_addr;
@@ -1915,7 +1914,7 @@ static void uhci_irq(struct usb_hcd *hcd)
}
spin_unlock(&uhci->urb_list_lock);
- uhci_finish_completion(hcd);
+ uhci_finish_completion(hcd, regs);
}
static void reset_hc(struct uhci_hcd *uhci)
diff --git a/drivers/usb/image/hpusbscsi.c b/drivers/usb/image/hpusbscsi.c
index 00bb26a79802..d82059f6f186 100644
--- a/drivers/usb/image/hpusbscsi.c
+++ b/drivers/usb/image/hpusbscsi.c
@@ -275,7 +275,7 @@ hpusbscsi_scsi_detect (struct SHT *sht)
static int hpusbscsi_scsi_queuecommand (Scsi_Cmnd *srb, scsi_callback callback)
{
struct hpusbscsi* hpusbscsi = (struct hpusbscsi*)(srb->host->hostdata[0]);
- usb_urb_callback usb_callback;
+ usb_complete_t usb_callback;
int res;
/* we don't answer for anything but our single device on any faked host controller */
@@ -382,7 +382,7 @@ static void handle_usb_error (struct hpusbscsi *hpusbscsi)
hpusbscsi->state = HP_STATE_FREE;
}
-static void control_interrupt_callback (struct urb *u)
+static void control_interrupt_callback (struct urb *u, struct pt_regs *regs)
{
struct hpusbscsi * hpusbscsi = (struct hpusbscsi *)u->context;
u8 scsi_state;
@@ -435,7 +435,7 @@ DEBUG("Getting status byte %d \n",hpusbscsi->scsi_state_byte);
}
}
-static void simple_command_callback(struct urb *u)
+static void simple_command_callback(struct urb *u, struct pt_regs *regs)
{
struct hpusbscsi * hpusbscsi = (struct hpusbscsi *)u->context;
if (unlikely(u->status<0)) {
@@ -454,11 +454,11 @@ static void simple_command_callback(struct urb *u)
}
}
-static void scatter_gather_callback(struct urb *u)
+static void scatter_gather_callback(struct urb *u, struct pt_regs *regs)
{
struct hpusbscsi * hpusbscsi = (struct hpusbscsi *)u->context;
struct scatterlist *sg = hpusbscsi->srb->buffer;
- usb_urb_callback callback;
+ usb_complete_t callback;
int res;
DEBUG("Going through scatter/gather\n");
@@ -494,7 +494,7 @@ static void scatter_gather_callback(struct urb *u)
TRACE_STATE;
}
-static void simple_done (struct urb *u)
+static void simple_done (struct urb *u, struct pt_regs *regs)
{
struct hpusbscsi * hpusbscsi = (struct hpusbscsi *)u->context;
@@ -521,7 +521,7 @@ static void simple_done (struct urb *u)
}
}
-static void simple_payload_callback (struct urb *u)
+static void simple_payload_callback (struct urb *u, struct pt_regs *regs)
{
struct hpusbscsi * hpusbscsi = (struct hpusbscsi *)u->context;
int res;
@@ -553,7 +553,7 @@ static void simple_payload_callback (struct urb *u)
}
}
-static void request_sense_callback (struct urb *u)
+static void request_sense_callback (struct urb *u, struct pt_regs *regs)
{
struct hpusbscsi * hpusbscsi = (struct hpusbscsi *)u->context;
diff --git a/drivers/usb/image/hpusbscsi.h b/drivers/usb/image/hpusbscsi.h
index 878b31ae0c4c..fdb00c708f54 100644
--- a/drivers/usb/image/hpusbscsi.h
+++ b/drivers/usb/image/hpusbscsi.h
@@ -6,7 +6,6 @@
/* A big thanks to Jose for untiring testing */
-typedef void (*usb_urb_callback) (struct urb *);
typedef void (*scsi_callback)(Scsi_Cmnd *);
#define SENSE_COMMAND_SIZE 6
@@ -54,12 +53,12 @@ static const unsigned char scsi_command_direction[256/8] = {
#define DIRECTION_IS_IN(x) ((scsi_command_direction[x>>3] >> (x & 7)) & 1)
static int hpusbscsi_scsi_detect (struct SHT * sht);
-static void simple_command_callback(struct urb *u);
-static void scatter_gather_callback(struct urb *u);
-static void simple_payload_callback (struct urb *u);
-static void request_sense_callback (struct urb *u);
-static void control_interrupt_callback (struct urb *u);
-static void simple_done (struct urb *u);
+static void simple_command_callback(struct urb *u, struct pt_regs *regs);
+static void scatter_gather_callback(struct urb *u, struct pt_regs *regs);
+static void simple_payload_callback (struct urb *u, struct pt_regs *regs);
+static void request_sense_callback (struct urb *u, struct pt_regs *regs);
+static void control_interrupt_callback (struct urb *u, struct pt_regs *regs);
+static void simple_done (struct urb *u, struct pt_regs *regs);
static int hpusbscsi_scsi_queuecommand (Scsi_Cmnd *srb, scsi_callback callback);
static int hpusbscsi_scsi_host_reset (Scsi_Cmnd *srb);
static int hpusbscsi_scsi_abort (Scsi_Cmnd *srb);
diff --git a/drivers/usb/image/mdc800.c b/drivers/usb/image/mdc800.c
index 571c72615cab..9a150b9075c1 100644
--- a/drivers/usb/image/mdc800.c
+++ b/drivers/usb/image/mdc800.c
@@ -248,7 +248,7 @@ static int mdc800_isReady (char *ch)
/*
* USB IRQ Handler for InputLine
*/
-static void mdc800_usb_irq (struct urb *urb)
+static void mdc800_usb_irq (struct urb *urb, struct pt_regs *res)
{
int data_received=0, wake_up;
unsigned char* b=urb->transfer_buffer;
@@ -351,7 +351,7 @@ static int mdc800_usb_waitForIRQ (int mode, int msec)
/*
* The write_urb callback function
*/
-static void mdc800_usb_write_notify (struct urb *urb)
+static void mdc800_usb_write_notify (struct urb *urb, struct pt_regs *res)
{
struct mdc800_data* mdc800=urb->context;
@@ -371,7 +371,7 @@ static void mdc800_usb_write_notify (struct urb *urb)
/*
* The download_urb callback function
*/
-static void mdc800_usb_download_notify (struct urb *urb)
+static void mdc800_usb_download_notify (struct urb *urb, struct pt_regs *res)
{
struct mdc800_data* mdc800=urb->context;
diff --git a/drivers/usb/image/microtek.c b/drivers/usb/image/microtek.c
index 9d9cfe6f7f60..efd412c85185 100644
--- a/drivers/usb/image/microtek.c
+++ b/drivers/usb/image/microtek.c
@@ -470,7 +470,7 @@ static
int mts_scsi_queuecommand (Scsi_Cmnd *srb, mts_scsi_cmnd_callback callback );
static void mts_transfer_cleanup( struct urb *transfer );
-static void mts_do_sg(struct urb * transfer);
+static void mts_do_sg(struct urb * transfer, struct pt_regs *regs);
inline static
@@ -478,7 +478,7 @@ void mts_int_submit_urb (struct urb* transfer,
int pipe,
void* data,
unsigned length,
- mts_usb_urb_callback callback )
+ usb_complete_t callback )
/* Interrupt context! */
/* Holding transfer->context->lock! */
@@ -518,7 +518,7 @@ static void mts_transfer_cleanup( struct urb *transfer )
}
-static void mts_transfer_done( struct urb *transfer )
+static void mts_transfer_done( struct urb *transfer, struct pt_regs *regs )
{
MTS_INT_INIT();
@@ -544,7 +544,7 @@ static void mts_get_status( struct urb *transfer )
mts_transfer_done );
}
-static void mts_data_done( struct urb* transfer )
+static void mts_data_done( struct urb* transfer, struct pt_regs *regs )
/* Interrupt context! */
{
MTS_INT_INIT();
@@ -561,7 +561,7 @@ static void mts_data_done( struct urb* transfer )
}
-static void mts_command_done( struct urb *transfer )
+static void mts_command_done( struct urb *transfer, struct pt_regs *regs )
/* Interrupt context! */
{
MTS_INT_INIT();
@@ -602,7 +602,7 @@ static void mts_command_done( struct urb *transfer )
return;
}
-static void mts_do_sg (struct urb* transfer)
+static void mts_do_sg (struct urb* transfer, struct pt_regs *regs)
{
struct scatterlist * sg;
MTS_INT_INIT();
diff --git a/drivers/usb/image/microtek.h b/drivers/usb/image/microtek.h
index 1dd70640c63b..88d0387a9af7 100644
--- a/drivers/usb/image/microtek.h
+++ b/drivers/usb/image/microtek.h
@@ -9,7 +9,6 @@
*/
typedef void (*mts_scsi_cmnd_callback)(Scsi_Cmnd *);
-typedef void (*mts_usb_urb_callback) (struct urb *);
struct mts_transfer_context
diff --git a/drivers/usb/image/scanner.c b/drivers/usb/image/scanner.c
index 6ccbcdb1b242..6f49070f4fe0 100644
--- a/drivers/usb/image/scanner.c
+++ b/drivers/usb/image/scanner.c
@@ -354,7 +354,7 @@
#include "scanner.h"
static void
-irq_scanner(struct urb *urb)
+irq_scanner(struct urb *urb, struct pt_regs *regs)
{
/*
diff --git a/drivers/usb/input/aiptek.c b/drivers/usb/input/aiptek.c
index fe5ccf692f2b..26946e593f64 100644
--- a/drivers/usb/input/aiptek.c
+++ b/drivers/usb/input/aiptek.c
@@ -104,7 +104,7 @@ struct aiptek_features {
int y_max;
int pressure_min;
int pressure_max;
- void (*irq) (struct urb * urb);
+ usb_complete_t irq;
unsigned long evbit;
unsigned long absbit;
unsigned long relbit;
@@ -125,7 +125,7 @@ struct aiptek {
};
static void
-aiptek_irq(struct urb *urb)
+aiptek_irq(struct urb *urb, struct pt_regs *regs)
{
struct aiptek *aiptek = urb->context;
unsigned char *data = aiptek->data;
diff --git a/drivers/usb/input/hid-core.c b/drivers/usb/input/hid-core.c
index 4ee10594abe7..88523db2a603 100644
--- a/drivers/usb/input/hid-core.c
+++ b/drivers/usb/input/hid-core.c
@@ -898,7 +898,7 @@ static int hid_input_report(int type, struct urb *urb)
* Input interrupt completion handler.
*/
-static void hid_irq_in(struct urb *urb)
+static void hid_irq_in(struct urb *urb, struct pt_regs *regs)
{
struct hid_device *hid = urb->context;
int status;
@@ -1090,7 +1090,7 @@ static int hid_submit_ctrl(struct hid_device *hid)
* Output interrupt completion handler.
*/
-static void hid_irq_out(struct urb *urb)
+static void hid_irq_out(struct urb *urb, struct pt_regs *regs)
{
struct hid_device *hid = urb->context;
unsigned long flags;
@@ -1119,7 +1119,7 @@ static void hid_irq_out(struct urb *urb)
* Control pipe completion handler.
*/
-static void hid_ctrl(struct urb *urb)
+static void hid_ctrl(struct urb *urb, struct pt_regs *regs)
{
struct hid_device *hid = urb->context;
unsigned long flags;
diff --git a/drivers/usb/input/pid.c b/drivers/usb/input/pid.c
index 509ae388051b..e98387579369 100644
--- a/drivers/usb/input/pid.c
+++ b/drivers/usb/input/pid.c
@@ -46,7 +46,7 @@
(hid_pid)->effects[(i)].owner == current->pid))
/* Called when a transfer is completed */
-static void hid_pid_ctrl_out(struct urb *u)
+static void hid_pid_ctrl_out(struct urb *u, struct pt_regs *regs)
{
#ifdef DEBUG
printk("hid_pid_ctrl_out - Transfer Completed\n");
diff --git a/drivers/usb/input/powermate.c b/drivers/usb/input/powermate.c
index 6e0c7557678d..52d7b5d1f6c8 100644
--- a/drivers/usb/input/powermate.c
+++ b/drivers/usb/input/powermate.c
@@ -72,10 +72,10 @@ struct powermate_device {
static char pm_name_powermate[] = "Griffin PowerMate";
static char pm_name_soundknob[] = "Griffin SoundKnob";
-static void powermate_config_complete(struct urb *urb); /* forward declararation of callback */
+static void powermate_config_complete(struct urb *urb, struct pt_regs *regs);
/* Callback for data arriving from the PowerMate over the USB interrupt pipe */
-static void powermate_irq(struct urb *urb)
+static void powermate_irq(struct urb *urb, struct pt_regs *regs)
{
struct powermate_device *pm = urb->context;
int retval;
@@ -182,7 +182,7 @@ static void powermate_sync_state(struct powermate_device *pm)
}
/* Called when our asynchronous control message completes. We may need to issue another immediately */
-static void powermate_config_complete(struct urb *urb)
+static void powermate_config_complete(struct urb *urb, struct pt_regs *regs)
{
struct powermate_device *pm = urb->context;
diff --git a/drivers/usb/input/usbkbd.c b/drivers/usb/input/usbkbd.c
index d58ed293a3cd..0d0288b1328c 100644
--- a/drivers/usb/input/usbkbd.c
+++ b/drivers/usb/input/usbkbd.c
@@ -82,7 +82,7 @@ struct usb_kbd {
dma_addr_t leds_dma;
};
-static void usb_kbd_irq(struct urb *urb)
+static void usb_kbd_irq(struct urb *urb, struct pt_regs *regs)
{
struct usb_kbd *kbd = urb->context;
int i;
@@ -156,7 +156,7 @@ int usb_kbd_event(struct input_dev *dev, unsigned int type, unsigned int code, i
return 0;
}
-static void usb_kbd_led(struct urb *urb)
+static void usb_kbd_led(struct urb *urb, struct pt_regs *regs)
{
struct usb_kbd *kbd = urb->context;
diff --git a/drivers/usb/input/usbmouse.c b/drivers/usb/input/usbmouse.c
index 6323fac01c63..1c88156effdc 100644
--- a/drivers/usb/input/usbmouse.c
+++ b/drivers/usb/input/usbmouse.c
@@ -57,7 +57,7 @@ struct usb_mouse {
dma_addr_t data_dma;
};
-static void usb_mouse_irq(struct urb *urb)
+static void usb_mouse_irq(struct urb *urb, struct pt_regs *regs)
{
struct usb_mouse *mouse = urb->context;
signed char *data = mouse->data;
diff --git a/drivers/usb/input/wacom.c b/drivers/usb/input/wacom.c
index 5efae4d7b0ab..e9900ce3439c 100644
--- a/drivers/usb/input/wacom.c
+++ b/drivers/usb/input/wacom.c
@@ -86,7 +86,7 @@ struct wacom_features {
int pressure_max;
int distance_max;
int type;
- void (*irq)(struct urb *urb);
+ usb_complete_t irq;
};
struct wacom {
@@ -102,7 +102,7 @@ struct wacom {
char phys[32];
};
-static void wacom_pl_irq(struct urb *urb)
+static void wacom_pl_irq(struct urb *urb, struct pt_regs *regs)
{
struct wacom *wacom = urb->context;
unsigned char *data = wacom->data;
@@ -157,7 +157,7 @@ exit:
__FUNCTION__, retval);
}
-static void wacom_penpartner_irq(struct urb *urb)
+static void wacom_penpartner_irq(struct urb *urb, struct pt_regs *regs)
{
struct wacom *wacom = urb->context;
unsigned char *data = wacom->data;
@@ -194,7 +194,7 @@ exit:
__FUNCTION__, retval);
}
-static void wacom_graphire_irq(struct urb *urb)
+static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
{
struct wacom *wacom = urb->context;
unsigned char *data = wacom->data;
@@ -267,7 +267,7 @@ exit:
__FUNCTION__, retval);
}
-static void wacom_intuos_irq(struct urb *urb)
+static void wacom_intuos_irq(struct urb *urb, struct pt_regs *regs)
{
struct wacom *wacom = urb->context;
unsigned char *data = wacom->data;
diff --git a/drivers/usb/input/xpad.c b/drivers/usb/input/xpad.c
index 1f41067695fe..596c19dec29b 100644
--- a/drivers/usb/input/xpad.c
+++ b/drivers/usb/input/xpad.c
@@ -163,7 +163,7 @@ static void xpad_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char *d
input_sync(dev);
}
-static void xpad_irq_in(struct urb *urb)
+static void xpad_irq_in(struct urb *urb, struct pt_regs *regs)
{
struct usb_xpad *xpad = urb->context;
int retval;
diff --git a/drivers/usb/media/dabusb.c b/drivers/usb/media/dabusb.c
index ad0c2e2c86a5..254dff941bcc 100644
--- a/drivers/usb/media/dabusb.c
+++ b/drivers/usb/media/dabusb.c
@@ -171,7 +171,7 @@ static int dabusb_free_buffers (pdabusb_t s)
return 0;
}
/*-------------------------------------------------------------------*/
-static void dabusb_iso_complete (struct urb *purb)
+static void dabusb_iso_complete (struct urb *purb, struct pt_regs *regs)
{
pbuff_t b = purb->context;
pdabusb_t s = b->s;
diff --git a/drivers/usb/media/konicawc.c b/drivers/usb/media/konicawc.c
index 190743d30b2f..22b738aee272 100644
--- a/drivers/usb/media/konicawc.c
+++ b/drivers/usb/media/konicawc.c
@@ -332,7 +332,7 @@ static void resubmit_urb(struct uvd *uvd, struct urb *urb)
}
-static void konicawc_isoc_irq(struct urb *urb)
+static void konicawc_isoc_irq(struct urb *urb, struct pt_regs *regs)
{
struct uvd *uvd = urb->context;
struct konicawc *cam = (struct konicawc *)uvd->user_data;
diff --git a/drivers/usb/media/ov511.c b/drivers/usb/media/ov511.c
index 6eb6b2f3f828..3511edd1d0e1 100644
--- a/drivers/usb/media/ov511.c
+++ b/drivers/usb/media/ov511.c
@@ -3843,7 +3843,7 @@ check_middle:
}
static void
-ov51x_isoc_irq(struct urb *urb)
+ov51x_isoc_irq(struct urb *urb, struct pt_regs *regs)
{
int i;
struct usb_ov511 *ov;
diff --git a/drivers/usb/media/pwc-if.c b/drivers/usb/media/pwc-if.c
index 2ceefe446df3..08dff12a572a 100644
--- a/drivers/usb/media/pwc-if.c
+++ b/drivers/usb/media/pwc-if.c
@@ -598,7 +598,7 @@ static int pwc_set_palette(struct pwc_device *pdev, int pal)
/* This gets called for the Isochronous pipe (video). This is done in
* interrupt time, so it has to be fast, not crash, and not stall. Neat.
*/
-static void pwc_isoc_handler(struct urb *urb)
+static void pwc_isoc_handler(struct urb *urb, struct pt_regs *regs)
{
struct pwc_device *pdev;
int i, fst, flen;
diff --git a/drivers/usb/media/se401.c b/drivers/usb/media/se401.c
index fd090f2fd147..e527235276ea 100644
--- a/drivers/usb/media/se401.c
+++ b/drivers/usb/media/se401.c
@@ -425,7 +425,7 @@ static void se401_auto_resetlevel(struct usb_se401 *se401)
}
/* irq handler for snapshot button */
-static void se401_button_irq(struct urb *urb)
+static void se401_button_irq(struct urb *urb, struct pt_regs *regs)
{
struct usb_se401 *se401 = urb->context;
int status;
@@ -461,7 +461,7 @@ exit:
__FUNCTION__, status);
}
-static void se401_video_irq(struct urb *urb)
+static void se401_video_irq(struct urb *urb, struct pt_regs *regs)
{
struct usb_se401 *se401 = urb->context;
int length = urb->actual_length;
diff --git a/drivers/usb/media/stv680.c b/drivers/usb/media/stv680.c
index 4e341c3b94cb..1dc71245999e 100644
--- a/drivers/usb/media/stv680.c
+++ b/drivers/usb/media/stv680.c
@@ -673,7 +673,7 @@ static int stv680_set_pict (struct usb_stv *stv680, struct video_picture *p)
return 0;
}
-static void stv680_video_irq (struct urb *urb)
+static void stv680_video_irq (struct urb *urb, struct pt_regs *regs)
{
struct usb_stv *stv680 = urb->context;
int length = urb->actual_length;
diff --git a/drivers/usb/media/usbvideo.c b/drivers/usb/media/usbvideo.c
index 9aeffc958b04..1a8c63da8460 100644
--- a/drivers/usb/media/usbvideo.c
+++ b/drivers/usb/media/usbvideo.c
@@ -1820,7 +1820,7 @@ static int usbvideo_CompressIsochronous(struct uvd *uvd, struct urb *urb)
return totlen;
}
-static void usbvideo_IsocIrq(struct urb *urb)
+static void usbvideo_IsocIrq(struct urb *urb, struct pt_regs *regs)
{
int i, ret, len;
struct uvd *uvd = urb->context;
diff --git a/drivers/usb/misc/auerswald.c b/drivers/usb/misc/auerswald.c
index c245ee3d455c..476ae293a56d 100644
--- a/drivers/usb/misc/auerswald.c
+++ b/drivers/usb/misc/auerswald.c
@@ -287,7 +287,7 @@ typedef struct
/*-------------------------------------------------------------------*/
/* Forwards */
-static void auerswald_ctrlread_complete (struct urb * urb);
+static void auerswald_ctrlread_complete (struct urb * urb, struct pt_regs *regs);
static void auerswald_removeservice (pauerswald_t cp, pauerscon_t scp);
extern struct usb_driver auerswald_driver;
@@ -297,7 +297,7 @@ extern struct usb_driver auerswald_driver;
/* -------------------------- */
/* completion function for chained urbs */
-static void auerchain_complete (struct urb * urb)
+static void auerchain_complete (struct urb * urb, struct pt_regs *regs)
{
unsigned long flags;
int result;
@@ -316,7 +316,7 @@ static void auerchain_complete (struct urb * urb)
NOTE: this function may lead to more urbs submitted into the chain.
(no chain lock at calling complete()!)
acp->active != NULL is protecting us against recursion.*/
- urb->complete (urb);
+ urb->complete (urb, regs);
/* detach element from chain data structure */
spin_lock_irqsave (&acp->lock, flags);
@@ -351,7 +351,7 @@ static void auerchain_complete (struct urb * urb)
urb->status = result;
dbg("auerchain_complete: usb_submit_urb with error code %d", result);
/* and do error handling via *this* completion function (recursive) */
- auerchain_complete( urb);
+ auerchain_complete( urb, NULL);
}
} else {
/* simple return without submitting a new urb.
@@ -428,7 +428,7 @@ static int auerchain_submit_urb_list (pauerchain_t acp, struct urb * urb, int ea
urb->status = result;
dbg("auerchain_submit_urb: usb_submit_urb with error code %d", result);
/* and do error handling via completion function */
- auerchain_complete( urb);
+ auerchain_complete( urb, NULL);
}
}
@@ -468,7 +468,7 @@ static int auerchain_unlink_urb (pauerchain_t acp, struct urb * urb)
spin_unlock_irqrestore (&acp->lock, flags);
dbg ("unlink waiting urb");
urb->status = -ENOENT;
- urb->complete (urb);
+ urb->complete (urb, NULL);
return 0;
}
}
@@ -525,7 +525,7 @@ static void auerchain_unlink_all (pauerchain_t acp)
spin_unlock_irqrestore (&acp->lock, flags);
dbg ("unlink waiting urb");
urbp->status = -ENOENT;
- urbp->complete (urbp);
+ urbp->complete (urbp, NULL);
spin_lock_irqsave (&acp->lock, flags);
}
spin_unlock_irqrestore (&acp->lock, flags);
@@ -612,7 +612,7 @@ ac_fail:/* free the elements */
/* completion handler for synchronous chained URBs */
-static void auerchain_blocking_completion (struct urb *urb)
+static void auerchain_blocking_completion (struct urb *urb, struct pt_regs *regs)
{
pauerchain_chs_t pchs = (pauerchain_chs_t)urb->context;
pchs->done = 1;
@@ -718,7 +718,7 @@ static int auerchain_control_msg (pauerchain_t acp, struct usb_device *dev, unsi
dr->wLength = cpu_to_le16 (size);
usb_fill_control_urb (urb, dev, pipe, (unsigned char*)dr, data, size, /* build urb */
- (usb_complete_t)auerchain_blocking_completion,0);
+ auerchain_blocking_completion,0);
ret = auerchain_start_wait_urb (acp, urb, timeout, &length);
usb_free_urb (urb);
@@ -881,7 +881,7 @@ static int auerswald_status_retry (int status)
}
/* Completion of asynchronous write block */
-static void auerchar_ctrlwrite_complete (struct urb * urb)
+static void auerchar_ctrlwrite_complete (struct urb * urb, struct pt_regs *regs)
{
pauerbuf_t bp = (pauerbuf_t) urb->context;
pauerswald_t cp = ((pauerswald_t)((char *)(bp->list)-(unsigned long)(&((pauerswald_t)0)->bufctl)));
@@ -894,7 +894,7 @@ static void auerchar_ctrlwrite_complete (struct urb * urb)
}
/* Completion handler for dummy retry packet */
-static void auerswald_ctrlread_wretcomplete (struct urb * urb)
+static void auerswald_ctrlread_wretcomplete (struct urb * urb, struct pt_regs *regs)
{
pauerbuf_t bp = (pauerbuf_t) urb->context;
pauerswald_t cp;
@@ -921,19 +921,19 @@ static void auerswald_ctrlread_wretcomplete (struct urb * urb)
/* bp->dr->index = channel id; remains */
usb_fill_control_urb (bp->urbp, cp->usbdev, usb_rcvctrlpipe (cp->usbdev, 0),
(unsigned char*)bp->dr, bp->bufp, le16_to_cpu (bp->dr->wLength),
- (usb_complete_t)auerswald_ctrlread_complete,bp);
+ auerswald_ctrlread_complete,bp);
/* submit the control msg as next paket */
ret = auerchain_submit_urb_list (&cp->controlchain, bp->urbp, 1);
if (ret) {
dbg ("auerswald_ctrlread_complete: nonzero result of auerchain_submit_urb_list %d", ret);
bp->urbp->status = ret;
- auerswald_ctrlread_complete (bp->urbp);
+ auerswald_ctrlread_complete (bp->urbp, NULL);
}
}
/* completion handler for receiving of control messages */
-static void auerswald_ctrlread_complete (struct urb * urb)
+static void auerswald_ctrlread_complete (struct urb * urb, struct pt_regs *regs)
{
unsigned int serviceid;
pauerswald_t cp;
@@ -969,14 +969,14 @@ static void auerswald_ctrlread_complete (struct urb * urb)
bp->dr->wLength = cpu_to_le16 (32); /* >= 8 bytes */
usb_fill_control_urb (bp->urbp, cp->usbdev, usb_sndctrlpipe (cp->usbdev, 0),
(unsigned char*)bp->dr, bp->bufp, 32,
- (usb_complete_t)auerswald_ctrlread_wretcomplete,bp);
+ auerswald_ctrlread_wretcomplete,bp);
/* submit the control msg as next paket */
ret = auerchain_submit_urb_list (&cp->controlchain, bp->urbp, 1);
if (ret) {
dbg ("auerswald_ctrlread_complete: nonzero result of auerchain_submit_urb_list %d", ret);
bp->urbp->status = ret;
- auerswald_ctrlread_wretcomplete (bp->urbp);
+ auerswald_ctrlread_wretcomplete (bp->urbp, regs);
}
return;
}
@@ -1005,7 +1005,7 @@ static void auerswald_ctrlread_complete (struct urb * urb)
messages from the USB device.
*/
/* int completion handler. */
-static void auerswald_int_complete (struct urb * urb)
+static void auerswald_int_complete (struct urb * urb, struct pt_regs *regs)
{
unsigned long flags;
unsigned int channelid;
@@ -1097,14 +1097,14 @@ static void auerswald_int_complete (struct urb * urb)
bp->dr->wLength = cpu_to_le16 (bytecount);
usb_fill_control_urb (bp->urbp, cp->usbdev, usb_rcvctrlpipe (cp->usbdev, 0),
(unsigned char*)bp->dr, bp->bufp, bytecount,
- (usb_complete_t)auerswald_ctrlread_complete,bp);
+ auerswald_ctrlread_complete,bp);
/* submit the control msg */
ret = auerchain_submit_urb (&cp->controlchain, bp->urbp);
if (ret) {
dbg ("auerswald_int_complete: nonzero result of auerchain_submit_urb %d", ret);
bp->urbp->status = ret;
- auerswald_ctrlread_complete( bp->urbp);
+ auerswald_ctrlread_complete( bp->urbp, NULL);
/* here applies the same problem as above: device locking! */
}
exit:
diff --git a/drivers/usb/misc/brlvger.c b/drivers/usb/misc/brlvger.c
index db226465bf9c..279d6bb94d99 100644
--- a/drivers/usb/misc/brlvger.c
+++ b/drivers/usb/misc/brlvger.c
@@ -118,7 +118,7 @@ static int brlvger_ioctl(struct inode *inode, struct file *file,
unsigned cmd, unsigned long arg);
static unsigned brlvger_poll(struct file *file, poll_table *wait);
static loff_t brlvger_llseek(struct file * file, loff_t offset, int orig);
-static void intr_callback(struct urb *urb);
+static void intr_callback(struct urb *urb, struct pt_regs *regs);
struct brlvger_priv;
static int brlvger_get_hw_version(struct brlvger_priv *priv,
unsigned char *verbuf);
@@ -842,7 +842,7 @@ brlvger_poll(struct file *file, poll_table *wait)
}
static void
-intr_callback(struct urb *urb)
+intr_callback(struct urb *urb, struct pt_regs *regs)
{
struct brlvger_priv *priv = urb->context;
int intr_idx, read_idx;
diff --git a/drivers/usb/misc/speedtouch.c b/drivers/usb/misc/speedtouch.c
index 50118caa0e44..d9acad35b1f0 100644
--- a/drivers/usb/misc/speedtouch.c
+++ b/drivers/usb/misc/speedtouch.c
@@ -570,7 +570,7 @@ struct udsl_cb {
struct atm_vcc *vcc;
};
-static void udsl_usb_send_data_complete (struct urb *urb)
+static void udsl_usb_send_data_complete (struct urb *urb, struct pt_regs *regs)
{
struct udsl_usb_send_data_context *ctx = (struct udsl_usb_send_data_context *) urb->context;
struct udsl_instance_data *instance = ctx->instance;
@@ -596,7 +596,7 @@ static void udsl_usb_send_data_complete (struct urb *urb)
instance->usb_dev,
usb_sndbulkpipe (instance->usb_dev, UDSL_ENDPOINT_DATA_OUT),
(unsigned char *) ctx->skb->data,
- ctx->skb->len, (usb_complete_t) udsl_usb_send_data_complete, ctx);
+ ctx->skb->len, udsl_usb_send_data_complete, ctx);
err = usb_submit_urb (urb, GFP_KERNEL);
@@ -678,7 +678,7 @@ int udsl_usb_send_data (struct udsl_instance_data *instance, struct atm_vcc *vcc
usb_sndbulkpipe (instance->usb_dev, UDSL_ENDPOINT_DATA_OUT),
(unsigned char *) skb->data,
skb->len,
- (usb_complete_t) udsl_usb_send_data_complete, &(instance->send_ctx[i])
+ udsl_usb_send_data_complete, &(instance->send_ctx[i])
);
err = usb_submit_urb (urb, GFP_KERNEL);
@@ -691,7 +691,7 @@ int udsl_usb_send_data (struct udsl_instance_data *instance, struct atm_vcc *vcc
}
/********* receive *******/
-void udsl_usb_data_receive (struct urb *urb)
+void udsl_usb_data_receive (struct urb *urb, struct pt_regs *regs)
{
struct udsl_data_ctx *ctx;
struct udsl_instance_data *instance;
@@ -746,7 +746,7 @@ void udsl_usb_data_receive (struct urb *urb)
instance->usb_dev,
usb_rcvbulkpipe (instance->usb_dev, UDSL_ENDPOINT_DATA_IN),
(unsigned char *) ctx->skb->data,
- UDSL_RECEIVE_BUFFER_SIZE, (usb_complete_t) udsl_usb_data_receive, ctx);
+ UDSL_RECEIVE_BUFFER_SIZE, udsl_usb_data_receive, ctx);
usb_submit_urb (urb, GFP_KERNEL);
return;
};
@@ -795,7 +795,7 @@ int udsl_usb_data_init (struct udsl_instance_data *instance)
usb_rcvbulkpipe (instance->usb_dev, UDSL_ENDPOINT_DATA_IN),
(unsigned char *) ctx->skb->data,
UDSL_RECEIVE_BUFFER_SIZE,
- (usb_complete_t) udsl_usb_data_receive, ctx);
+ udsl_usb_data_receive, ctx);
ctx->instance = instance;
diff --git a/drivers/usb/misc/tiglusb.c b/drivers/usb/misc/tiglusb.c
index 3c590e9f3457..0334cc4e5a18 100644
--- a/drivers/usb/misc/tiglusb.c
+++ b/drivers/usb/misc/tiglusb.c
@@ -15,16 +15,11 @@
* for more info.
*
* History :
- * 16/07/2002 : v1.04 -- Julien BLACHE <jb@jblache.org>
- * + removed useless usblp_cleanup()
- * + removed {un,}lock_kernel() as suggested on lkml
- * + inlined clear_pipes() (used once)
- * + inlined clear_device() (small, used twice)
- * + removed tiglusb_find_struct() (used once, simple code)
- * + replaced down() with down_interruptible() wherever possible
- * + fixed double unregistering wrt devfs, causing devfs
- * to force an oops when the device is deconnected
- * + removed unused fields from struct tiglusb_t
+ * 1.0x, Romain & Julien: initial submit.
+ * 1.03, Greg Kroah: modifications.
+ * 1.04, Julien: clean-up & fixes; Romain: 2.4 backport.
+ * 1.05, Randy Dunlap: bug fix with the timeout parameter (divide-by-zero).
+ * 1.06, Romain: synched with 2.5, version/firmware changed (confusing).
*/
#include <linux/module.h>
@@ -44,7 +39,7 @@
/*
* Version Information
*/
-#define DRIVER_VERSION "1.04"
+#define DRIVER_VERSION "1.06"
#define DRIVER_AUTHOR "Romain Lievin <roms@lpg.ticalc.org> & Julien Blache <jb@jblache.org>"
#define DRIVER_DESC "TI-GRAPH LINK USB (aka SilverLink) driver"
#define DRIVER_LICENSE "GPL"
@@ -384,7 +379,7 @@ tiglusb_probe (struct usb_interface *intf,
&tiglusb_fops, NULL);
/* Display firmware version */
- info ("link cable version %i.%02x",
+ info ("firmware revision %i.%02x",
dev->descriptor.bcdDevice >> 8,
dev->descriptor.bcdDevice & 0xff);
@@ -449,7 +444,7 @@ tiglusb_setup (char *str)
if (ints[0] > 0) {
timeout = ints[1];
}
- if (!timeout)
+ if (timeout <= 0)
timeout = TIMAXTIME;
return 1;
@@ -490,9 +485,9 @@ tiglusb_init (void)
return -1;
}
- info (DRIVER_DESC ", " DRIVER_VERSION);
+ info (DRIVER_DESC ", version " DRIVER_VERSION);
- if (!timeout)
+ if (timeout <= 0)
timeout = TIMAXTIME;
return 0;
diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
index c3362d8a9a6f..7d6ee5ba3e86 100644
--- a/drivers/usb/misc/usbtest.c
+++ b/drivers/usb/misc/usbtest.c
@@ -85,7 +85,7 @@ static struct usb_device *testdev_to_usbdev (struct usbtest_dev *test)
* them with non-zero test data (or test for it) when appropriate.
*/
-static void simple_callback (struct urb *urb)
+static void simple_callback (struct urb *urb, struct pt_regs *regs)
{
complete ((struct completion *) urb->context);
}
@@ -550,7 +550,7 @@ static int ch9_postconfig (struct usbtest_dev *dev)
/*-------------------------------------------------------------------------*/
-static void unlink1_callback (struct urb *urb)
+static void unlink1_callback (struct urb *urb, struct pt_regs *regs)
{
int status = urb->status;
diff --git a/drivers/usb/net/catc.c b/drivers/usb/net/catc.c
index 57c249c3eb5e..a8a33237384e 100644
--- a/drivers/usb/net/catc.c
+++ b/drivers/usb/net/catc.c
@@ -221,7 +221,7 @@ struct catc {
* Receive routines.
*/
-static void catc_rx_done(struct urb *urb)
+static void catc_rx_done(struct urb *urb, struct pt_regs *regs)
{
struct catc *catc = urb->context;
u8 *pkt_start = urb->transfer_buffer;
@@ -287,7 +287,7 @@ static void catc_rx_done(struct urb *urb)
}
}
-static void catc_irq_done(struct urb *urb)
+static void catc_irq_done(struct urb *urb, struct pt_regs *regs)
{
struct catc *catc = urb->context;
u8 *data = urb->transfer_buffer;
@@ -374,7 +374,7 @@ static void catc_tx_run(struct catc *catc)
catc->netdev->trans_start = jiffies;
}
-static void catc_tx_done(struct urb *urb)
+static void catc_tx_done(struct urb *urb, struct pt_regs *regs)
{
struct catc *catc = urb->context;
unsigned long flags;
@@ -486,7 +486,7 @@ static void catc_ctrl_run(struct catc *catc)
err("submit(ctrl_urb) status %d", status);
}
-static void catc_ctrl_done(struct urb *urb)
+static void catc_ctrl_done(struct urb *urb, struct pt_regs *regs)
{
struct catc *catc = urb->context;
struct ctrl_queue *q;
diff --git a/drivers/usb/net/cdc-ether.c b/drivers/usb/net/cdc-ether.c
index 2b9626c44276..5c8c1998eee9 100644
--- a/drivers/usb/net/cdc-ether.c
+++ b/drivers/usb/net/cdc-ether.c
@@ -52,7 +52,7 @@ static int multicast_filter_limit = 32767;
// Callback routines from USB device /////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
-static void read_bulk_callback( struct urb *urb )
+static void read_bulk_callback( struct urb *urb, struct pt_regs *regs )
{
ether_dev_t *ether_dev = urb->context;
struct net_device *net;
@@ -140,7 +140,7 @@ goon:
ether_dev->flags &= ~CDC_ETHER_RX_BUSY;
}
-static void write_bulk_callback( struct urb *urb )
+static void write_bulk_callback( struct urb *urb, struct pt_regs *regs )
{
ether_dev_t *ether_dev = urb->context;
diff --git a/drivers/usb/net/kaweth.c b/drivers/usb/net/kaweth.c
index 32e669e81758..831f9ef4eea3 100644
--- a/drivers/usb/net/kaweth.c
+++ b/drivers/usb/net/kaweth.c
@@ -462,13 +462,13 @@ static int kaweth_reset(struct kaweth_device *kaweth)
return result;
}
-static void kaweth_usb_receive(struct urb *);
+static void kaweth_usb_receive(struct urb *, struct pt_regs *regs);
static int kaweth_resubmit_rx_urb(struct kaweth_device *, int);
/****************************************************************
int_callback
*****************************************************************/
-static void int_callback(struct urb *u)
+static void int_callback(struct urb *u, struct pt_regs *regs)
{
struct kaweth_device *kaweth = u->context;
int act_state, status;
@@ -538,7 +538,7 @@ static void kaweth_async_set_rx_mode(struct kaweth_device *kaweth);
/****************************************************************
* kaweth_usb_receive
****************************************************************/
-static void kaweth_usb_receive(struct urb *urb)
+static void kaweth_usb_receive(struct urb *urb, struct pt_regs *regs)
{
struct kaweth_device *kaweth = urb->context;
struct net_device *net = kaweth->net;
@@ -699,7 +699,7 @@ static int kaweth_ioctl(struct net_device *net, struct ifreq *rq, int cmd)
/****************************************************************
* kaweth_usb_transmit_complete
****************************************************************/
-static void kaweth_usb_transmit_complete(struct urb *urb)
+static void kaweth_usb_transmit_complete(struct urb *urb, struct pt_regs *regs)
{
struct kaweth_device *kaweth = urb->context;
struct sk_buff *skb = kaweth->tx_skb;
@@ -1135,7 +1135,7 @@ struct usb_api_data {
/*-------------------------------------------------------------------*
* completion handler for compatibility wrappers (sync control/bulk) *
*-------------------------------------------------------------------*/
-static void usb_api_blocking_completion(struct urb *urb)
+static void usb_api_blocking_completion(struct urb *urb, struct pt_regs *regs)
{
struct usb_api_data *awd = (struct usb_api_data *)urb->context;
@@ -1208,7 +1208,7 @@ int kaweth_internal_control_msg(struct usb_device *usb_dev, unsigned int pipe,
return -ENOMEM;
usb_fill_control_urb(urb, usb_dev, pipe, (unsigned char*)cmd, data,
- len, (usb_complete_t)usb_api_blocking_completion,0);
+ len, usb_api_blocking_completion,0);
retv = usb_start_wait_urb(urb, timeout, &length);
if (retv < 0) {
diff --git a/drivers/usb/net/pegasus.c b/drivers/usb/net/pegasus.c
index 94ec69af89f1..8760a73e4bb2 100644
--- a/drivers/usb/net/pegasus.c
+++ b/drivers/usb/net/pegasus.c
@@ -87,7 +87,7 @@ MODULE_DEVICE_TABLE(usb, pegasus_ids);
static int update_eth_regs_async(pegasus_t *);
/* Aargh!!! I _really_ hate such tweaks */
-static void ctrl_callback(struct urb *urb)
+static void ctrl_callback(struct urb *urb, struct pt_regs *regs)
{
pegasus_t *pegasus = urb->context;
@@ -524,7 +524,7 @@ static inline struct sk_buff *pull_skb(pegasus_t * pegasus)
return NULL;
}
-static void read_bulk_callback(struct urb *urb)
+static void read_bulk_callback(struct urb *urb, struct pt_regs *regs)
{
pegasus_t *pegasus = urb->context;
struct net_device *net;
@@ -644,7 +644,7 @@ try_again:
}
}
-static void write_bulk_callback(struct urb *urb)
+static void write_bulk_callback(struct urb *urb, struct pt_regs *regs)
{
pegasus_t *pegasus = urb->context;
@@ -661,7 +661,7 @@ static void write_bulk_callback(struct urb *urb)
netif_wake_queue(pegasus->net);
}
-static void intr_callback(struct urb *urb)
+static void intr_callback(struct urb *urb, struct pt_regs *regs)
{
pegasus_t *pegasus = urb->context;
struct net_device *net;
@@ -1092,7 +1092,7 @@ static void pegasus_set_multicast(struct net_device *net)
}
pegasus->flags |= ETH_REGS_CHANGE;
- ctrl_callback(pegasus->ctrl_urb);
+ ctrl_callback(pegasus->ctrl_urb, NULL);
netif_wake_queue(net);
}
diff --git a/drivers/usb/net/rtl8150.c b/drivers/usb/net/rtl8150.c
index bb38b4caa353..fbbb6d5d2025 100644
--- a/drivers/usb/net/rtl8150.c
+++ b/drivers/usb/net/rtl8150.c
@@ -143,7 +143,7 @@ static int set_registers(rtl8150_t * dev, u16 indx, u16 size, void *data)
indx, 0, data, size, HZ / 2);
}
-static void ctrl_callback(struct urb *urb)
+static void ctrl_callback(struct urb *urb, struct pt_regs *regs)
{
rtl8150_t *dev;
@@ -336,7 +336,7 @@ static void unlink_all_urbs(rtl8150_t * dev)
usb_unlink_urb(dev->ctrl_urb);
}
-static void read_bulk_callback(struct urb *urb)
+static void read_bulk_callback(struct urb *urb, struct pt_regs *regs)
{
rtl8150_t *dev;
unsigned pkt_len, res;
@@ -435,7 +435,7 @@ tlsched:
tasklet_schedule(&dev->tl);
}
-static void write_bulk_callback(struct urb *urb)
+static void write_bulk_callback(struct urb *urb, struct pt_regs *regs)
{
rtl8150_t *dev;
@@ -451,7 +451,7 @@ static void write_bulk_callback(struct urb *urb)
netif_wake_queue(dev->netdev);
}
-void intr_callback(struct urb *urb)
+void intr_callback(struct urb *urb, struct pt_regs *regs)
{
rtl8150_t *dev;
int status;
diff --git a/drivers/usb/net/usbnet.c b/drivers/usb/net/usbnet.c
index 69a67505b02c..11546d617984 100644
--- a/drivers/usb/net/usbnet.c
+++ b/drivers/usb/net/usbnet.c
@@ -445,7 +445,7 @@ static inline int gl_control_write (struct usbnet *dev, u8 request, u16 value)
return retval;
}
-static void gl_interrupt_complete (struct urb *urb)
+static void gl_interrupt_complete (struct urb *urb, struct pt_regs *regs)
{
int status = urb->status;
@@ -1437,7 +1437,7 @@ static void defer_kevent (struct usbnet *dev, int work)
/*-------------------------------------------------------------------------*/
-static void rx_complete (struct urb *urb);
+static void rx_complete (struct urb *urb, struct pt_regs *regs);
static void rx_submit (struct usbnet *dev, struct urb *urb, int flags)
{
@@ -1549,7 +1549,7 @@ error:
/*-------------------------------------------------------------------------*/
-static void rx_complete (struct urb *urb)
+static void rx_complete (struct urb *urb, struct pt_regs *regs)
{
struct sk_buff *skb = (struct sk_buff *) urb->context;
struct skb_data *entry = (struct skb_data *) skb->cb;
@@ -1874,7 +1874,7 @@ kevent (void *data)
/*-------------------------------------------------------------------------*/
-static void tx_complete (struct urb *urb)
+static void tx_complete (struct urb *urb, struct pt_regs *regs)
{
struct sk_buff *skb = (struct sk_buff *) urb->context;
struct skb_data *entry = (struct skb_data *) skb->cb;
diff --git a/drivers/usb/serial/belkin_sa.c b/drivers/usb/serial/belkin_sa.c
index c225ccee50d0..9786ad32d092 100644
--- a/drivers/usb/serial/belkin_sa.c
+++ b/drivers/usb/serial/belkin_sa.c
@@ -97,7 +97,7 @@ static int belkin_sa_startup (struct usb_serial *serial);
static void belkin_sa_shutdown (struct usb_serial *serial);
static int belkin_sa_open (struct usb_serial_port *port, struct file *filp);
static void belkin_sa_close (struct usb_serial_port *port, struct file *filp);
-static void belkin_sa_read_int_callback (struct urb *urb);
+static void belkin_sa_read_int_callback (struct urb *urb, struct pt_regs *regs);
static void belkin_sa_set_termios (struct usb_serial_port *port, struct termios * old);
static int belkin_sa_ioctl (struct usb_serial_port *port, struct file * file, unsigned int cmd, unsigned long arg);
static void belkin_sa_break_ctl (struct usb_serial_port *port, int break_state );
@@ -252,7 +252,7 @@ static void belkin_sa_close (struct usb_serial_port *port, struct file *filp)
} /* belkin_sa_close */
-static void belkin_sa_read_int_callback (struct urb *urb)
+static void belkin_sa_read_int_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct belkin_sa_private *priv;
diff --git a/drivers/usb/serial/cyberjack.c b/drivers/usb/serial/cyberjack.c
index 75d55155ba15..7392d3586510 100644
--- a/drivers/usb/serial/cyberjack.c
+++ b/drivers/usb/serial/cyberjack.c
@@ -62,9 +62,9 @@ static int cyberjack_open (struct usb_serial_port *port, struct file *filp);
static void cyberjack_close (struct usb_serial_port *port, struct file *filp);
static int cyberjack_write (struct usb_serial_port *port, int from_user,
const unsigned char *buf, int count);
-static void cyberjack_read_int_callback( struct urb *urb );
-static void cyberjack_read_bulk_callback (struct urb *urb);
-static void cyberjack_write_bulk_callback (struct urb *urb);
+static void cyberjack_read_int_callback (struct urb *urb, struct pt_regs *regs);
+static void cyberjack_read_bulk_callback (struct urb *urb, struct pt_regs *regs);
+static void cyberjack_write_bulk_callback (struct urb *urb, struct pt_regs *regs);
static struct usb_device_id id_table [] = {
{ USB_DEVICE(CYBERJACK_VENDOR_ID, CYBERJACK_PRODUCT_ID) },
@@ -276,7 +276,7 @@ static int cyberjack_write (struct usb_serial_port *port, int from_user, const u
return (count);
}
-static void cyberjack_read_int_callback( struct urb *urb )
+static void cyberjack_read_int_callback( struct urb *urb, struct pt_regs *regs )
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct cyberjack_private *priv = (struct cyberjack_private *)port->private;
@@ -330,7 +330,7 @@ static void cyberjack_read_int_callback( struct urb *urb )
}
}
-static void cyberjack_read_bulk_callback (struct urb *urb)
+static void cyberjack_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct cyberjack_private *priv = (struct cyberjack_private *)port->private;
@@ -385,7 +385,7 @@ static void cyberjack_read_bulk_callback (struct urb *urb)
}
}
-static void cyberjack_write_bulk_callback (struct urb *urb)
+static void cyberjack_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct cyberjack_private *priv = (struct cyberjack_private *)port->private;
diff --git a/drivers/usb/serial/digi_acceleport.c b/drivers/usb/serial/digi_acceleport.c
index d5e6f3ae05d5..659e91cfd1f7 100644
--- a/drivers/usb/serial/digi_acceleport.c
+++ b/drivers/usb/serial/digi_acceleport.c
@@ -462,7 +462,7 @@ static int digi_ioctl( struct usb_serial_port *port, struct file *file,
unsigned int cmd, unsigned long arg );
static int digi_write( struct usb_serial_port *port, int from_user,
const unsigned char *buf, int count );
-static void digi_write_bulk_callback( struct urb *urb );
+static void digi_write_bulk_callback( struct urb *urb, struct pt_regs *regs );
static int digi_write_room( struct usb_serial_port *port );
static int digi_chars_in_buffer( struct usb_serial_port *port );
static int digi_open( struct usb_serial_port *port, struct file *filp );
@@ -470,7 +470,7 @@ static void digi_close( struct usb_serial_port *port, struct file *filp );
static int digi_startup_device( struct usb_serial *serial );
static int digi_startup( struct usb_serial *serial );
static void digi_shutdown( struct usb_serial *serial );
-static void digi_read_bulk_callback( struct urb *urb );
+static void digi_read_bulk_callback( struct urb *urb, struct pt_regs *regs );
static int digi_read_inb_callback( struct urb *urb );
static int digi_read_oob_callback( struct urb *urb );
@@ -1347,7 +1347,7 @@ dbg( "digi_write: returning %d", ret );
}
-static void digi_write_bulk_callback( struct urb *urb )
+static void digi_write_bulk_callback( struct urb *urb, struct pt_regs *regs )
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
@@ -1766,7 +1766,7 @@ dbg( "digi_shutdown: TOP, in_interrupt()=%ld", in_interrupt() );
}
-static void digi_read_bulk_callback( struct urb *urb )
+static void digi_read_bulk_callback( struct urb *urb, struct pt_regs *regs )
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
diff --git a/drivers/usb/serial/empeg.c b/drivers/usb/serial/empeg.c
index f006bab74df0..a5e3b7795d7d 100644
--- a/drivers/usb/serial/empeg.c
+++ b/drivers/usb/serial/empeg.c
@@ -100,8 +100,8 @@ static int empeg_ioctl (struct usb_serial_port *port,
unsigned int cmd,
unsigned long arg);
static void empeg_set_termios (struct usb_serial_port *port, struct termios *old_termios);
-static void empeg_write_bulk_callback (struct urb *urb);
-static void empeg_read_bulk_callback (struct urb *urb);
+static void empeg_write_bulk_callback (struct urb *urb, struct pt_regs *regs);
+static void empeg_read_bulk_callback (struct urb *urb, struct pt_regs *regs);
static struct usb_device_id id_table [] = {
{ USB_DEVICE(EMPEG_VENDOR_ID, EMPEG_PRODUCT_ID) },
@@ -348,7 +348,7 @@ static int empeg_chars_in_buffer (struct usb_serial_port *port)
}
-static void empeg_write_bulk_callback (struct urb *urb)
+static void empeg_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
@@ -366,7 +366,7 @@ static void empeg_write_bulk_callback (struct urb *urb)
}
-static void empeg_read_bulk_callback (struct urb *urb)
+static void empeg_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
index fe4a96240096..c696597fa4e2 100644
--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -170,8 +170,8 @@ static int ftdi_sio_open (struct usb_serial_port *port, struct file *filp);
static void ftdi_sio_close (struct usb_serial_port *port, struct file *filp);
static int ftdi_sio_write (struct usb_serial_port *port, int from_user, const unsigned char *buf, int count);
static int ftdi_sio_write_room (struct usb_serial_port *port);
-static void ftdi_sio_write_bulk_callback (struct urb *urb);
-static void ftdi_sio_read_bulk_callback (struct urb *urb);
+static void ftdi_sio_write_bulk_callback (struct urb *urb, struct pt_regs *regs);
+static void ftdi_sio_read_bulk_callback (struct urb *urb, struct pt_regs *regs);
static void ftdi_sio_set_termios (struct usb_serial_port *port, struct termios * old);
static int ftdi_sio_ioctl (struct usb_serial_port *port, struct file * file, unsigned int cmd, unsigned long arg);
static void ftdi_sio_break_ctl (struct usb_serial_port *port, int break_state );
@@ -464,7 +464,7 @@ static int ftdi_sio_write (struct usb_serial_port *port, int from_user,
return (count - data_offset);
} /* ftdi_sio_write */
-static void ftdi_sio_write_bulk_callback (struct urb *urb)
+static void ftdi_sio_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct usb_serial *serial;
@@ -504,7 +504,7 @@ static int ftdi_sio_write_room( struct usb_serial_port *port )
} /* ftdi_sio_write_room */
-static void ftdi_sio_read_bulk_callback (struct urb *urb)
+static void ftdi_sio_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
{ /* ftdi_sio_serial_buld_callback */
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct usb_serial *serial;
diff --git a/drivers/usb/serial/generic.c b/drivers/usb/serial/generic.c
index 29dc63fa01d7..cc381d0fa681 100644
--- a/drivers/usb/serial/generic.c
+++ b/drivers/usb/serial/generic.c
@@ -218,7 +218,7 @@ int usb_serial_generic_chars_in_buffer (struct usb_serial_port *port)
return (chars);
}
-void usb_serial_generic_read_bulk_callback (struct urb *urb)
+void usb_serial_generic_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
@@ -268,7 +268,7 @@ void usb_serial_generic_read_bulk_callback (struct urb *urb)
err("%s - failed resubmitting read urb, error %d", __FUNCTION__, result);
}
-void usb_serial_generic_write_bulk_callback (struct urb *urb)
+void usb_serial_generic_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
diff --git a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
index f777c14abe34..e0963b2ecf13 100644
--- a/drivers/usb/serial/io_edgeport.c
+++ b/drivers/usb/serial/io_edgeport.c
@@ -435,10 +435,10 @@ static int CmdUrbs = 0; /* Number of outstanding Command Write Urbs */
/* local function prototypes */
/* function prototypes for all URB callbacks */
-static void edge_interrupt_callback (struct urb *urb);
-static void edge_bulk_in_callback (struct urb *urb);
-static void edge_bulk_out_data_callback (struct urb *urb);
-static void edge_bulk_out_cmd_callback (struct urb *urb);
+static void edge_interrupt_callback (struct urb *urb, struct pt_regs *regs);
+static void edge_bulk_in_callback (struct urb *urb, struct pt_regs *regs);
+static void edge_bulk_out_data_callback (struct urb *urb, struct pt_regs *regs);
+static void edge_bulk_out_cmd_callback (struct urb *urb, struct pt_regs *regs);
/* function prototypes for the usbserial callbacks */
static int edge_open (struct usb_serial_port *port, struct file *filp);
@@ -753,7 +753,7 @@ static void get_product_info(struct edgeport_serial *edge_serial)
* this is the callback function for when we have received data on the
* interrupt endpoint.
*****************************************************************************/
-static void edge_interrupt_callback (struct urb *urb)
+static void edge_interrupt_callback (struct urb *urb, struct pt_regs *regs)
{
struct edgeport_serial *edge_serial = (struct edgeport_serial *)urb->context;
struct edgeport_port *edge_port;
@@ -850,7 +850,7 @@ exit:
* this is the callback function for when we have received data on the
* bulk in endpoint.
*****************************************************************************/
-static void edge_bulk_in_callback (struct urb *urb)
+static void edge_bulk_in_callback (struct urb *urb, struct pt_regs *regs)
{
struct edgeport_serial *edge_serial = (struct edgeport_serial *)urb->context;
unsigned char *data = urb->transfer_buffer;
@@ -901,7 +901,7 @@ static void edge_bulk_in_callback (struct urb *urb)
* this is the callback function for when we have finished sending serial data
* on the bulk out endpoint.
*****************************************************************************/
-static void edge_bulk_out_data_callback (struct urb *urb)
+static void edge_bulk_out_data_callback (struct urb *urb, struct pt_regs *regs)
{
struct edgeport_port *edge_port = (struct edgeport_port *)urb->context;
struct tty_struct *tty;
@@ -941,7 +941,7 @@ static void edge_bulk_out_data_callback (struct urb *urb)
* this is the callback function for when we have finished sending a command
* on the bulk out endpoint.
*****************************************************************************/
-static void edge_bulk_out_cmd_callback (struct urb *urb)
+static void edge_bulk_out_cmd_callback (struct urb *urb, struct pt_regs *regs)
{
struct edgeport_port *edge_port = (struct edgeport_port *)urb->context;
struct tty_struct *tty;
diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c
index 4ac6d31bfd38..6e3bf74c11da 100644
--- a/drivers/usb/serial/io_ti.c
+++ b/drivers/usb/serial/io_ti.c
@@ -1614,7 +1614,7 @@ static void handle_new_lsr (struct edgeport_port *edge_port, int lsr_data, __u8
}
-static void edge_interrupt_callback (struct urb *urb)
+static void edge_interrupt_callback (struct urb *urb, struct pt_regs *regs)
{
struct edgeport_serial *edge_serial = (struct edgeport_serial *)urb->context;
struct usb_serial_port *port;
@@ -1713,7 +1713,7 @@ exit:
__FUNCTION__, status);
}
-static void edge_bulk_in_callback (struct urb *urb)
+static void edge_bulk_in_callback (struct urb *urb, struct pt_regs *regs)
{
struct edgeport_port *edge_port = (struct edgeport_port *)urb->context;
unsigned char *data = urb->transfer_buffer;
@@ -1781,7 +1781,7 @@ exit:
__FUNCTION__, status);
}
-static void edge_bulk_out_callback (struct urb *urb)
+static void edge_bulk_out_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
diff --git a/drivers/usb/serial/ipaq.c b/drivers/usb/serial/ipaq.c
index 8d0a4d5b57a7..b9e23ac67023 100644
--- a/drivers/usb/serial/ipaq.c
+++ b/drivers/usb/serial/ipaq.c
@@ -84,8 +84,8 @@ static int ipaq_write(struct usb_serial_port *port, int from_user, const unsigne
static int ipaq_write_bulk(struct usb_serial_port *port, int from_user, const unsigned char *buf,
int count);
static void ipaq_write_gather(struct usb_serial_port *port);
-static void ipaq_read_bulk_callback (struct urb *urb);
-static void ipaq_write_bulk_callback(struct urb *urb);
+static void ipaq_read_bulk_callback (struct urb *urb, struct pt_regs *regs);
+static void ipaq_write_bulk_callback(struct urb *urb, struct pt_regs *regs);
static int ipaq_write_room(struct usb_serial_port *port);
static int ipaq_chars_in_buffer(struct usb_serial_port *port);
static void ipaq_destroy_lists(struct usb_serial_port *port);
@@ -277,7 +277,7 @@ static void ipaq_close(struct usb_serial_port *port, struct file *filp)
/* info ("Bytes In = %d Bytes Out = %d", bytes_in, bytes_out); */
}
-static void ipaq_read_bulk_callback(struct urb *urb)
+static void ipaq_read_bulk_callback(struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
@@ -445,7 +445,7 @@ static void ipaq_write_gather(struct usb_serial_port *port)
return;
}
-static void ipaq_write_bulk_callback(struct urb *urb)
+static void ipaq_write_bulk_callback(struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct ipaq_private *priv = (struct ipaq_private *)port->private;
diff --git a/drivers/usb/serial/ir-usb.c b/drivers/usb/serial/ir-usb.c
index e11b418d6474..d18801249d63 100644
--- a/drivers/usb/serial/ir-usb.c
+++ b/drivers/usb/serial/ir-usb.c
@@ -111,8 +111,8 @@ static int ir_startup (struct usb_serial *serial);
static int ir_open (struct usb_serial_port *port, struct file *filep);
static void ir_close (struct usb_serial_port *port, struct file *filep);
static int ir_write (struct usb_serial_port *port, int from_user, const unsigned char *buf, int count);
-static void ir_write_bulk_callback (struct urb *urb);
-static void ir_read_bulk_callback (struct urb *urb);
+static void ir_write_bulk_callback (struct urb *urb, struct pt_regs *regs);
+static void ir_read_bulk_callback (struct urb *urb, struct pt_regs *regs);
static void ir_set_termios (struct usb_serial_port *port, struct termios *old_termios);
static u8 ir_baud = 0;
@@ -406,7 +406,7 @@ static int ir_write (struct usb_serial_port *port, int from_user, const unsigned
return result;
}
-static void ir_write_bulk_callback (struct urb *urb)
+static void ir_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
@@ -429,7 +429,7 @@ static void ir_write_bulk_callback (struct urb *urb)
schedule_work(&port->work);
}
-static void ir_read_bulk_callback (struct urb *urb)
+static void ir_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c
index 2315dbf6299a..e128949276bf 100644
--- a/drivers/usb/serial/keyspan.c
+++ b/drivers/usb/serial/keyspan.c
@@ -383,7 +383,7 @@ static int keyspan_write(struct usb_serial_port *port, int from_user,
return count - left;
}
-static void usa26_indat_callback(struct urb *urb)
+static void usa26_indat_callback(struct urb *urb, struct pt_regs *regs)
{
int i, err;
int endpoint;
@@ -438,7 +438,7 @@ static void usa26_indat_callback(struct urb *urb)
}
/* Outdat handling is common for usa26, usa28 and usa49 messages */
-static void usa2x_outdat_callback(struct urb *urb)
+static void usa2x_outdat_callback(struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port;
struct keyspan_port_private *p_priv;
@@ -451,13 +451,13 @@ static void usa2x_outdat_callback(struct urb *urb)
schedule_work(&port->work);
}
-static void usa26_inack_callback(struct urb *urb)
+static void usa26_inack_callback(struct urb *urb, struct pt_regs *regs)
{
dbg ("%s", __FUNCTION__);
}
-static void usa26_outcont_callback(struct urb *urb)
+static void usa26_outcont_callback(struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port;
struct keyspan_port_private *p_priv;
@@ -471,7 +471,7 @@ static void usa26_outcont_callback(struct urb *urb)
}
}
-static void usa26_instat_callback(struct urb *urb)
+static void usa26_instat_callback(struct urb *urb, struct pt_regs *regs)
{
unsigned char *data = urb->transfer_buffer;
struct keyspan_usa26_portStatusMessage *msg;
@@ -533,14 +533,14 @@ static void usa26_instat_callback(struct urb *urb)
exit: ;
}
-static void usa26_glocont_callback(struct urb *urb)
+static void usa26_glocont_callback(struct urb *urb, struct pt_regs *regs)
{
dbg ("%s", __FUNCTION__);
}
-static void usa28_indat_callback(struct urb *urb)
+static void usa28_indat_callback(struct urb *urb, struct pt_regs *regs)
{
int i, err;
struct usb_serial_port *port;
@@ -588,12 +588,12 @@ static void usa28_indat_callback(struct urb *urb)
} while (urb->status != -EINPROGRESS);
}
-static void usa28_inack_callback(struct urb *urb)
+static void usa28_inack_callback(struct urb *urb, struct pt_regs *regs)
{
dbg ("%s", __FUNCTION__);
}
-static void usa28_outcont_callback(struct urb *urb)
+static void usa28_outcont_callback(struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port;
struct keyspan_port_private *p_priv;
@@ -607,7 +607,7 @@ static void usa28_outcont_callback(struct urb *urb)
}
}
-static void usa28_instat_callback(struct urb *urb)
+static void usa28_instat_callback(struct urb *urb, struct pt_regs *regs)
{
int err;
unsigned char *data = urb->transfer_buffer;
@@ -668,13 +668,13 @@ static void usa28_instat_callback(struct urb *urb)
exit: ;
}
-static void usa28_glocont_callback(struct urb *urb)
+static void usa28_glocont_callback(struct urb *urb, struct pt_regs *regs)
{
dbg ("%s", __FUNCTION__);
}
-static void usa49_glocont_callback(struct urb *urb)
+static void usa49_glocont_callback(struct urb *urb, struct pt_regs *regs)
{
struct usb_serial *serial;
struct usb_serial_port *port;
@@ -698,7 +698,7 @@ static void usa49_glocont_callback(struct urb *urb)
/* This is actually called glostat in the Keyspan
doco */
-static void usa49_instat_callback(struct urb *urb)
+static void usa49_instat_callback(struct urb *urb, struct pt_regs *regs)
{
int err;
unsigned char *data = urb->transfer_buffer;
@@ -761,12 +761,12 @@ static void usa49_instat_callback(struct urb *urb)
exit: ;
}
-static void usa49_inack_callback(struct urb *urb)
+static void usa49_inack_callback(struct urb *urb, struct pt_regs *regs)
{
dbg ("%s", __FUNCTION__);
}
-static void usa49_indat_callback(struct urb *urb)
+static void usa49_indat_callback(struct urb *urb, struct pt_regs *regs)
{
int i, err;
int endpoint;
@@ -819,7 +819,7 @@ static void usa49_indat_callback(struct urb *urb)
}
/* not used, usa-49 doesn't have per-port control endpoints */
-static void usa49_outcont_callback(struct urb *urb)
+static void usa49_outcont_callback(struct urb *urb, struct pt_regs *regs)
{
dbg ("%s", __FUNCTION__);
}
@@ -1070,7 +1070,7 @@ static int keyspan_fake_startup (struct usb_serial *serial)
/* Helper functions used by keyspan_setup_urbs */
static struct urb *keyspan_setup_urb (struct usb_serial *serial, int endpoint,
int dir, void *ctx, char *buf, int len,
- void (*callback)(struct urb *))
+ void (*callback)(struct urb *, struct pt_regs *regs))
{
struct urb *urb;
@@ -1093,12 +1093,12 @@ static struct urb *keyspan_setup_urb (struct usb_serial *serial, int endpoint,
}
static struct callbacks {
- void (*instat_callback)(struct urb *);
- void (*glocont_callback)(struct urb *);
- void (*indat_callback)(struct urb *);
- void (*outdat_callback)(struct urb *);
- void (*inack_callback)(struct urb *);
- void (*outcont_callback)(struct urb *);
+ void (*instat_callback)(struct urb *, struct pt_regs *regs);
+ void (*glocont_callback)(struct urb *, struct pt_regs *regs);
+ void (*indat_callback)(struct urb *, struct pt_regs *regs);
+ void (*outdat_callback)(struct urb *, struct pt_regs *regs);
+ void (*inack_callback)(struct urb *, struct pt_regs *regs);
+ void (*outcont_callback)(struct urb *, struct pt_regs *regs);
} keyspan_callbacks[] = {
{
/* msg_usa26 callbacks */
diff --git a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c
index f7d1bbab0430..94c1e26348d7 100644
--- a/drivers/usb/serial/keyspan_pda.c
+++ b/drivers/usb/serial/keyspan_pda.c
@@ -222,7 +222,7 @@ static void keyspan_pda_request_unthrottle( struct usb_serial *serial )
}
-static void keyspan_pda_rx_interrupt (struct urb *urb)
+static void keyspan_pda_rx_interrupt (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct usb_serial *serial;
@@ -637,7 +637,7 @@ exit:
}
-static void keyspan_pda_write_bulk_callback (struct urb *urb)
+static void keyspan_pda_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct usb_serial *serial;
diff --git a/drivers/usb/serial/kl5kusb105.c b/drivers/usb/serial/kl5kusb105.c
index f97774827372..7ec0577d8726 100644
--- a/drivers/usb/serial/kl5kusb105.c
+++ b/drivers/usb/serial/kl5kusb105.c
@@ -88,11 +88,11 @@ static int klsi_105_write (struct usb_serial_port *port,
int from_user,
const unsigned char *buf,
int count);
-static void klsi_105_write_bulk_callback (struct urb *urb);
+static void klsi_105_write_bulk_callback (struct urb *urb, struct pt_regs *regs);
static int klsi_105_chars_in_buffer (struct usb_serial_port *port);
static int klsi_105_write_room (struct usb_serial_port *port);
-static void klsi_105_read_bulk_callback (struct urb *urb);
+static void klsi_105_read_bulk_callback (struct urb *urb, struct pt_regs *regs);
static void klsi_105_set_termios (struct usb_serial_port *port,
struct termios * old);
static int klsi_105_ioctl (struct usb_serial_port *port,
@@ -558,7 +558,7 @@ exit:
return bytes_sent; /* that's how much we wrote */
} /* klsi_105_write */
-static void klsi_105_write_bulk_callback ( struct urb *urb)
+static void klsi_105_write_bulk_callback ( struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct usb_serial *serial = port->serial;
@@ -627,7 +627,7 @@ static int klsi_105_write_room (struct usb_serial_port *port)
-static void klsi_105_read_bulk_callback (struct urb *urb)
+static void klsi_105_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct usb_serial *serial = port->serial;
diff --git a/drivers/usb/serial/mct_u232.c b/drivers/usb/serial/mct_u232.c
index 5b7a48de3b2c..911b42ceb7e2 100644
--- a/drivers/usb/serial/mct_u232.c
+++ b/drivers/usb/serial/mct_u232.c
@@ -114,9 +114,9 @@ static int mct_u232_write (struct usb_serial_port *port,
int from_user,
const unsigned char *buf,
int count);
-static void mct_u232_write_bulk_callback (struct urb *urb);
+static void mct_u232_write_bulk_callback (struct urb *urb, struct pt_regs *regs);
#endif
-static void mct_u232_read_int_callback (struct urb *urb);
+static void mct_u232_read_int_callback (struct urb *urb, struct pt_regs *regs);
static void mct_u232_set_termios (struct usb_serial_port *port,
struct termios * old);
static int mct_u232_ioctl (struct usb_serial_port *port,
@@ -479,7 +479,7 @@ static int mct_u232_write (struct usb_serial_port *port, int from_user,
return bytes_sent;
} /* mct_u232_write */
-static void mct_u232_write_bulk_callback (struct urb *urb)
+static void mct_u232_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct usb_serial *serial = port->serial;
@@ -514,7 +514,7 @@ static void mct_u232_write_bulk_callback (struct urb *urb)
} /* mct_u232_write_bulk_callback */
#endif
-static void mct_u232_read_int_callback (struct urb *urb)
+static void mct_u232_read_int_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct mct_u232_private *priv = (struct mct_u232_private *)port->private;
diff --git a/drivers/usb/serial/omninet.c b/drivers/usb/serial/omninet.c
index 541bcdbe8f61..c5d0ded0b17f 100644
--- a/drivers/usb/serial/omninet.c
+++ b/drivers/usb/serial/omninet.c
@@ -70,8 +70,8 @@
/* function prototypes */
static int omninet_open (struct usb_serial_port *port, struct file *filp);
static void omninet_close (struct usb_serial_port *port, struct file *filp);
-static void omninet_read_bulk_callback (struct urb *urb);
-static void omninet_write_bulk_callback (struct urb *urb);
+static void omninet_read_bulk_callback (struct urb *urb, struct pt_regs *regs);
+static void omninet_write_bulk_callback (struct urb *urb, struct pt_regs *regs);
static int omninet_write (struct usb_serial_port *port, int from_user, const unsigned char *buf, int count);
static int omninet_write_room (struct usb_serial_port *port);
static void omninet_shutdown (struct usb_serial *serial);
@@ -214,7 +214,7 @@ static void omninet_close (struct usb_serial_port *port, struct file * filp)
#define OMNINET_HEADERLEN sizeof(struct omninet_header)
#define OMNINET_BULKOUTSIZE (64 - OMNINET_HEADERLEN)
-static void omninet_read_bulk_callback (struct urb *urb)
+static void omninet_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
@@ -336,7 +336,7 @@ static int omninet_write_room (struct usb_serial_port *port)
return (room);
}
-static void omninet_write_bulk_callback (struct urb *urb)
+static void omninet_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
/* struct omninet_header *header = (struct omninet_header *) urb->transfer_buffer; */
struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
index fc93a7587fc4..1284892b0fb4 100644
--- a/drivers/usb/serial/pl2303.c
+++ b/drivers/usb/serial/pl2303.c
@@ -73,6 +73,7 @@ static struct usb_device_id id_table [] = {
{ USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID) },
{ USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID) },
{ USB_DEVICE(MA620_VENDOR_ID, MA620_PRODUCT_ID) },
+ { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID) },
{ } /* Terminating entry */
};
@@ -114,9 +115,9 @@ static void pl2303_set_termios (struct usb_serial_port *port,
struct termios *old);
static int pl2303_ioctl (struct usb_serial_port *port, struct file *file,
unsigned int cmd, unsigned long arg);
-static void pl2303_read_int_callback (struct urb *urb);
-static void pl2303_read_bulk_callback (struct urb *urb);
-static void pl2303_write_bulk_callback (struct urb *urb);
+static void pl2303_read_int_callback (struct urb *urb, struct pt_regs *regs);
+static void pl2303_read_bulk_callback (struct urb *urb, struct pt_regs *regs);
+static void pl2303_write_bulk_callback (struct urb *urb, struct pt_regs *regs);
static int pl2303_write (struct usb_serial_port *port, int from_user,
const unsigned char *buf, int count);
static void pl2303_break_ctl(struct usb_serial_port *port,int break_state);
@@ -587,7 +588,7 @@ static void pl2303_shutdown (struct usb_serial *serial)
}
-static void pl2303_read_int_callback (struct urb *urb)
+static void pl2303_read_int_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
@@ -625,7 +626,7 @@ exit:
}
-static void pl2303_read_bulk_callback (struct urb *urb)
+static void pl2303_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
@@ -690,7 +691,7 @@ static void pl2303_read_bulk_callback (struct urb *urb)
-static void pl2303_write_bulk_callback (struct urb *urb)
+static void pl2303_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
int result;
diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h
index 6812218a8c2f..6566b2b85573 100644
--- a/drivers/usb/serial/pl2303.h
+++ b/drivers/usb/serial/pl2303.h
@@ -25,3 +25,6 @@
#define MA620_VENDOR_ID 0x0df7
#define MA620_PRODUCT_ID 0x0620
+
+#define RATOC_VENDOR_ID 0x0584
+#define RATOC_PRODUCT_ID 0xb000
diff --git a/drivers/usb/serial/safe_serial.c b/drivers/usb/serial/safe_serial.c
index 31301e598125..0d348fd24a7a 100644
--- a/drivers/usb/serial/safe_serial.c
+++ b/drivers/usb/serial/safe_serial.c
@@ -206,7 +206,7 @@ static __u16 __inline__ fcs_compute10 (unsigned char *sp, int len, __u16 fcs)
return fcs;
}
-static void safe_read_bulk_callback (struct urb *urb)
+static void safe_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
diff --git a/drivers/usb/serial/usb-serial.h b/drivers/usb/serial/usb-serial.h
index 82c75d867f39..08943d411f23 100644
--- a/drivers/usb/serial/usb-serial.h
+++ b/drivers/usb/serial/usb-serial.h
@@ -225,9 +225,9 @@ struct usb_serial_device_type {
void (*throttle) (struct usb_serial_port *port);
void (*unthrottle) (struct usb_serial_port *port);
- void (*read_int_callback)(struct urb *urb);
- void (*read_bulk_callback)(struct urb *urb);
- void (*write_bulk_callback)(struct urb *urb);
+ void (*read_int_callback)(struct urb *urb, struct pt_regs *regs);
+ void (*read_bulk_callback)(struct urb *urb, struct pt_regs *regs);
+ void (*write_bulk_callback)(struct urb *urb, struct pt_regs *regs);
};
extern int usb_serial_register(struct usb_serial_device_type *new_device);
@@ -256,8 +256,8 @@ extern int usb_serial_generic_write (struct usb_serial_port *port, int from_user
extern void usb_serial_generic_close (struct usb_serial_port *port, struct file *filp);
extern int usb_serial_generic_write_room (struct usb_serial_port *port);
extern int usb_serial_generic_chars_in_buffer (struct usb_serial_port *port);
-extern void usb_serial_generic_read_bulk_callback (struct urb *urb);
-extern void usb_serial_generic_write_bulk_callback (struct urb *urb);
+extern void usb_serial_generic_read_bulk_callback (struct urb *urb, struct pt_regs *regs);
+extern void usb_serial_generic_write_bulk_callback (struct urb *urb, struct pt_regs *regs);
extern void usb_serial_generic_shutdown (struct usb_serial *serial);
extern int usb_serial_generic_register (int debug);
extern void usb_serial_generic_deregister (void);
diff --git a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c
index 2d05857bb1c5..eeb9ee04ccaa 100644
--- a/drivers/usb/serial/visor.c
+++ b/drivers/usb/serial/visor.c
@@ -173,8 +173,8 @@ static int visor_calc_num_ports(struct usb_serial *serial);
static void visor_shutdown (struct usb_serial *serial);
static int visor_ioctl (struct usb_serial_port *port, struct file * file, unsigned int cmd, unsigned long arg);
static void visor_set_termios (struct usb_serial_port *port, struct termios *old_termios);
-static void visor_write_bulk_callback (struct urb *urb);
-static void visor_read_bulk_callback (struct urb *urb);
+static void visor_write_bulk_callback (struct urb *urb, struct pt_regs *regs);
+static void visor_read_bulk_callback (struct urb *urb, struct pt_regs *regs);
static int clie_3_5_startup (struct usb_serial *serial);
@@ -449,7 +449,7 @@ static int visor_chars_in_buffer (struct usb_serial_port *port)
}
-static void visor_write_bulk_callback (struct urb *urb)
+static void visor_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
@@ -470,7 +470,7 @@ static void visor_write_bulk_callback (struct urb *urb)
}
-static void visor_read_bulk_callback (struct urb *urb)
+static void visor_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
diff --git a/drivers/usb/serial/whiteheat.c b/drivers/usb/serial/whiteheat.c
index 027354fd948c..dc29c4ec06e9 100644
--- a/drivers/usb/serial/whiteheat.c
+++ b/drivers/usb/serial/whiteheat.c
@@ -150,8 +150,8 @@ static void whiteheat_break_ctl (struct usb_serial_port *port, int break_state)
static int whiteheat_chars_in_buffer (struct usb_serial_port *port);
static void whiteheat_throttle (struct usb_serial_port *port);
static void whiteheat_unthrottle (struct usb_serial_port *port);
-static void whiteheat_read_callback (struct urb *urb);
-static void whiteheat_write_callback (struct urb *urb);
+static void whiteheat_read_callback (struct urb *urb, struct pt_regs *regs);
+static void whiteheat_write_callback (struct urb *urb, struct pt_regs *regs);
static struct usb_serial_device_type whiteheat_fake_device = {
.owner = THIS_MODULE,
@@ -225,8 +225,8 @@ struct whiteheat_private {
/* local function prototypes */
static int start_command_port(struct usb_serial *serial);
static void stop_command_port(struct usb_serial *serial);
-static void command_port_write_callback(struct urb *urb);
-static void command_port_read_callback(struct urb *urb);
+static void command_port_write_callback(struct urb *urb, struct pt_regs *regs);
+static void command_port_read_callback(struct urb *urb, struct pt_regs *regs);
static int start_port_read(struct usb_serial_port *port);
static struct whiteheat_urb_wrap *urb_to_wrap(struct urb *urb, struct list_head *head);
@@ -957,7 +957,7 @@ static void whiteheat_unthrottle (struct usb_serial_port *port)
/*****************************************************************************
* Connect Tech's White Heat callback routines
*****************************************************************************/
-static void command_port_write_callback (struct urb *urb)
+static void command_port_write_callback (struct urb *urb, struct pt_regs *regs)
{
dbg("%s", __FUNCTION__);
@@ -972,7 +972,7 @@ static void command_port_write_callback (struct urb *urb)
}
-static void command_port_read_callback (struct urb *urb)
+static void command_port_read_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *command_port = (struct usb_serial_port *)urb->context;
struct usb_serial *serial = get_usb_serial (command_port, __FUNCTION__);
@@ -1028,7 +1028,7 @@ static void command_port_read_callback (struct urb *urb)
}
-static void whiteheat_read_callback(struct urb *urb)
+static void whiteheat_read_callback(struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
@@ -1079,7 +1079,7 @@ static void whiteheat_read_callback(struct urb *urb)
}
-static void whiteheat_write_callback(struct urb *urb)
+static void whiteheat_write_callback(struct urb *urb, struct pt_regs *regs)
{
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
diff --git a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c
index b1e4bdd9ff96..622a5d7d96bc 100644
--- a/drivers/usb/storage/transport.c
+++ b/drivers/usb/storage/transport.c
@@ -401,7 +401,7 @@ unsigned int usb_stor_transfer_length(Scsi_Cmnd *srb)
/* This is the completion handler which will wake us up when an URB
* completes.
*/
-static void usb_stor_blocking_completion(struct urb *urb)
+static void usb_stor_blocking_completion(struct urb *urb, struct pt_regs *regs)
{
struct completion *urb_done_ptr = (struct completion *)urb->context;
@@ -967,7 +967,7 @@ void usb_stor_abort_transport(struct us_data *us)
/* If we are waiting for an IRQ, simulate it */
if (test_bit(US_FLIDX_IP_WANTED, &us->flags)) {
US_DEBUGP("-- simulating missing IRQ\n");
- usb_stor_CBI_irq(us->irq_urb);
+ usb_stor_CBI_irq(us->irq_urb, NULL);
}
/* Wait for the aborted command to finish */
@@ -982,7 +982,7 @@ void usb_stor_abort_transport(struct us_data *us)
*/
/* The interrupt handler for CBI devices */
-void usb_stor_CBI_irq(struct urb *urb)
+void usb_stor_CBI_irq(struct urb *urb, struct pt_regs *regs)
{
struct us_data *us = (struct us_data *)urb->context;
int status;
diff --git a/drivers/usb/storage/transport.h b/drivers/usb/storage/transport.h
index a8ac7f3fbf8f..d1c5cc4aba9e 100644
--- a/drivers/usb/storage/transport.h
+++ b/drivers/usb/storage/transport.h
@@ -145,7 +145,7 @@ struct bulk_cs_wrap {
#define US_CBI_ADSC 0
-extern void usb_stor_CBI_irq(struct urb*);
+extern void usb_stor_CBI_irq(struct urb*, struct pt_regs *);
extern int usb_stor_CBI_transport(Scsi_Cmnd*, struct us_data*);
extern int usb_stor_CB_transport(Scsi_Cmnd*, struct us_data*);
diff --git a/drivers/usb/usb-skeleton.c b/drivers/usb/usb-skeleton.c
index 97aa1a3556db..1010ac6acf33 100644
--- a/drivers/usb/usb-skeleton.c
+++ b/drivers/usb/usb-skeleton.c
@@ -137,7 +137,7 @@ static int skel_release (struct inode *inode, struct file *file);
static int skel_probe (struct usb_interface *intf, const struct usb_device_id *id);
static void skel_disconnect (struct usb_interface *intf);
-static void skel_write_bulk_callback (struct urb *urb);
+static void skel_write_bulk_callback (struct urb *urb, struct pt_regs *regs);
/* array of pointers to our devices that are currently connected */
@@ -487,7 +487,7 @@ static int skel_ioctl (struct inode *inode, struct file *file, unsigned int cmd,
/**
* skel_write_bulk_callback
*/
-static void skel_write_bulk_callback (struct urb *urb)
+static void skel_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
{
struct usb_skel *dev = (struct usb_skel *)urb->context;
diff --git a/include/linux/usb.h b/include/linux/usb.h
index 774d35815121..9cc9f1d2e2df 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -414,7 +414,7 @@ struct usb_device_id {
* specific device.
*/
#define USB_DEVICE(vend,prod) \
- match_flags: USB_DEVICE_ID_MATCH_DEVICE, idVendor: (vend), idProduct: (prod)
+ .match_flags = USB_DEVICE_ID_MATCH_DEVICE, .idVendor = (vend), .idProduct = (prod)
/**
* USB_DEVICE_VER - macro used to describe a specific usb device with a version range
* @vend: the 16 bit USB Vendor ID
@@ -426,7 +426,7 @@ struct usb_device_id {
* specific device, with a version range.
*/
#define USB_DEVICE_VER(vend,prod,lo,hi) \
- match_flags: USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION, idVendor: (vend), idProduct: (prod), bcdDevice_lo: (lo), bcdDevice_hi: (hi)
+ .match_flags = USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION, .idVendor = (vend), .idProduct = (prod), .bcdDevice_lo = (lo), .bcdDevice_hi = (hi)
/**
* USB_DEVICE_INFO - macro used to describe a class of usb devices
@@ -438,7 +438,7 @@ struct usb_device_id {
* specific class of devices.
*/
#define USB_DEVICE_INFO(cl,sc,pr) \
- match_flags: USB_DEVICE_ID_MATCH_DEV_INFO, bDeviceClass: (cl), bDeviceSubClass: (sc), bDeviceProtocol: (pr)
+ .match_flags = USB_DEVICE_ID_MATCH_DEV_INFO, .bDeviceClass = (cl), .bDeviceSubClass = (sc), .bDeviceProtocol = (pr)
/**
* USB_INTERFACE_INFO - macro used to describe a class of usb interfaces
@@ -450,7 +450,7 @@ struct usb_device_id {
* specific class of interfaces.
*/
#define USB_INTERFACE_INFO(cl,sc,pr) \
- match_flags: USB_DEVICE_ID_MATCH_INT_INFO, bInterfaceClass: (cl), bInterfaceSubClass: (sc), bInterfaceProtocol: (pr)
+ .match_flags = USB_DEVICE_ID_MATCH_INT_INFO, .bInterfaceClass = (cl), .bInterfaceSubClass = (sc), .bInterfaceProtocol = (pr)
/* -------------------------------------------------------------------------- */
@@ -554,8 +554,9 @@ struct usb_iso_packet_descriptor {
};
struct urb;
+struct pt_regs;
-typedef void (*usb_complete_t)(struct urb *);
+typedef void (*usb_complete_t)(struct urb *, struct pt_regs *);
/**
* struct urb - USB Request Block
diff --git a/sound/usb/usbmidi.c b/sound/usb/usbmidi.c
index 4e75e1c102ec..bb81257a7d02 100644
--- a/sound/usb/usbmidi.c
+++ b/sound/usb/usbmidi.c
@@ -168,7 +168,7 @@ static void snd_usbmidi_input_packet(snd_usb_midi_in_endpoint_t* ep,
/*
* Processes the data read from the device.
*/
-static void snd_usbmidi_in_urb_complete(struct urb* urb)
+static void snd_usbmidi_in_urb_complete(struct urb* urb, struct pt_regs *regs)
{
snd_usb_midi_in_endpoint_t* ep = snd_magic_cast(snd_usb_midi_in_endpoint_t, urb->context, return);
@@ -191,7 +191,7 @@ static void snd_usbmidi_in_urb_complete(struct urb* urb)
/*
* Converts the data read from a Midiman device to standard USB MIDI packets.
*/
-static void snd_usbmidi_in_midiman_complete(struct urb* urb)
+static void snd_usbmidi_in_midiman_complete(struct urb* urb, struct pt_regs *regs)
{
if (urb->status == 0) {
uint8_t* buffer = (uint8_t*)urb->transfer_buffer;
@@ -220,7 +220,7 @@ static void snd_usbmidi_in_midiman_complete(struct urb* urb)
snd_usbmidi_in_urb_complete(urb);
}
-static void snd_usbmidi_out_urb_complete(struct urb* urb)
+static void snd_usbmidi_out_urb_complete(struct urb* urb, struct pt_regs *regs)
{
snd_usb_midi_out_endpoint_t* ep = snd_magic_cast(snd_usb_midi_out_endpoint_t, urb->context, return);