From b1c1db4c70fe311bdded85f4b61e111494bbf7ee Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 19 May 2006 13:20:20 -0700 Subject: [PATCH] --- yaml --- r: 28343 b: refs/heads/master c: 782a7a632e4b0581ade665e3d89ee97c8db0f441 h: refs/heads/master i: 28341: fbda5b7e1507ad45b80f45c42078cee661c76371 28339: 6c3db09487289539738e37c54f5d41f6568e71e5 28335: b4218c03edc33654e8ee606af15ad7fbdfe88411 v: v3 --- [refs] | 2 +- trunk/drivers/usb/core/message.c | 31 +++++++++++++++++++++++++++++++ trunk/include/linux/usb.h | 2 ++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 58c6f10f5496..06d429bf1c04 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: caa2a1226741e023a103e091a7f6dce7c42e82ee +refs/heads/master: 782a7a632e4b0581ade665e3d89ee97c8db0f441 diff --git a/trunk/drivers/usb/core/message.c b/trunk/drivers/usb/core/message.c index 08fb20f06f3e..b2f608b0538d 100644 --- a/trunk/drivers/usb/core/message.c +++ b/trunk/drivers/usb/core/message.c @@ -157,6 +157,37 @@ int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request, __u } +/** + * usb_interrupt_msg - Builds an interrupt urb, sends it off and waits for completion + * @usb_dev: pointer to the usb device to send the message to + * @pipe: endpoint "pipe" to send the message to + * @data: pointer to the data to send + * @len: length in bytes of the data to send + * @actual_length: pointer to a location to put the actual length transferred in bytes + * @timeout: time in msecs to wait for the message to complete before + * timing out (if 0 the wait is forever) + * Context: !in_interrupt () + * + * This function sends a simple interrupt message to a specified endpoint and + * waits for the message to complete, or timeout. + * + * If successful, it returns 0, otherwise a negative error number. The number + * of actual bytes transferred will be stored in the actual_length paramater. + * + * Don't use this function from within an interrupt context, like a bottom half + * handler. If you need an asynchronous message, or need to send a message + * from within interrupt context, use usb_submit_urb() If a thread in your + * driver uses this call, make sure your disconnect() method can wait for it to + * complete. Since you don't have a handle on the URB used, you can't cancel + * the request. + */ +int usb_interrupt_msg(struct usb_device *usb_dev, unsigned int pipe, + void *data, int len, int *actual_length, int timeout) +{ + return usb_bulk_msg(usb_dev, pipe, data, len, actual_length, timeout); +} +EXPORT_SYMBOL_GPL(usb_interrupt_msg); + /** * usb_bulk_msg - Builds a bulk urb, sends it off and waits for completion * @usb_dev: pointer to the usb device to send the message to diff --git a/trunk/include/linux/usb.h b/trunk/include/linux/usb.h index 1f492c0c7047..317ec9f28bce 100644 --- a/trunk/include/linux/usb.h +++ b/trunk/include/linux/usb.h @@ -1008,6 +1008,8 @@ void usb_buffer_unmap_sg (struct usb_device *dev, unsigned pipe, extern int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request, __u8 requesttype, __u16 value, __u16 index, void *data, __u16 size, int timeout); +extern int usb_interrupt_msg(struct usb_device *usb_dev, unsigned int pipe, + void *data, int len, int *actual_length, int timeout); extern int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe, void *data, int len, int *actual_length, int timeout);