diff options
| -rw-r--r-- | drivers/usb/core/message.c | 31 | ||||
| -rw-r--r-- | include/linux/usb.h | 2 |
2 files changed, 33 insertions, 0 deletions
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c index 08fb20f06f3e..b2f608b0538d 100644 --- a/drivers/usb/core/message.c +++ b/drivers/usb/core/message.c | |||
| @@ -158,6 +158,37 @@ int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request, __u | |||
| 158 | 158 | ||
| 159 | 159 | ||
| 160 | /** | 160 | /** |
| 161 | * usb_interrupt_msg - Builds an interrupt urb, sends it off and waits for completion | ||
| 162 | * @usb_dev: pointer to the usb device to send the message to | ||
| 163 | * @pipe: endpoint "pipe" to send the message to | ||
| 164 | * @data: pointer to the data to send | ||
| 165 | * @len: length in bytes of the data to send | ||
| 166 | * @actual_length: pointer to a location to put the actual length transferred in bytes | ||
| 167 | * @timeout: time in msecs to wait for the message to complete before | ||
| 168 | * timing out (if 0 the wait is forever) | ||
| 169 | * Context: !in_interrupt () | ||
| 170 | * | ||
| 171 | * This function sends a simple interrupt message to a specified endpoint and | ||
| 172 | * waits for the message to complete, or timeout. | ||
| 173 | * | ||
| 174 | * If successful, it returns 0, otherwise a negative error number. The number | ||
| 175 | * of actual bytes transferred will be stored in the actual_length paramater. | ||
| 176 | * | ||
| 177 | * Don't use this function from within an interrupt context, like a bottom half | ||
| 178 | * handler. If you need an asynchronous message, or need to send a message | ||
| 179 | * from within interrupt context, use usb_submit_urb() If a thread in your | ||
| 180 | * driver uses this call, make sure your disconnect() method can wait for it to | ||
| 181 | * complete. Since you don't have a handle on the URB used, you can't cancel | ||
| 182 | * the request. | ||
| 183 | */ | ||
| 184 | int usb_interrupt_msg(struct usb_device *usb_dev, unsigned int pipe, | ||
| 185 | void *data, int len, int *actual_length, int timeout) | ||
| 186 | { | ||
| 187 | return usb_bulk_msg(usb_dev, pipe, data, len, actual_length, timeout); | ||
| 188 | } | ||
| 189 | EXPORT_SYMBOL_GPL(usb_interrupt_msg); | ||
| 190 | |||
| 191 | /** | ||
| 161 | * usb_bulk_msg - Builds a bulk urb, sends it off and waits for completion | 192 | * usb_bulk_msg - Builds a bulk urb, sends it off and waits for completion |
| 162 | * @usb_dev: pointer to the usb device to send the message to | 193 | * @usb_dev: pointer to the usb device to send the message to |
| 163 | * @pipe: endpoint "pipe" to send the message to | 194 | * @pipe: endpoint "pipe" to send the message to |
diff --git a/include/linux/usb.h b/include/linux/usb.h index 1f492c0c7047..317ec9f28bce 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
| @@ -1008,6 +1008,8 @@ void usb_buffer_unmap_sg (struct usb_device *dev, unsigned pipe, | |||
| 1008 | extern int usb_control_msg(struct usb_device *dev, unsigned int pipe, | 1008 | extern int usb_control_msg(struct usb_device *dev, unsigned int pipe, |
| 1009 | __u8 request, __u8 requesttype, __u16 value, __u16 index, | 1009 | __u8 request, __u8 requesttype, __u16 value, __u16 index, |
| 1010 | void *data, __u16 size, int timeout); | 1010 | void *data, __u16 size, int timeout); |
| 1011 | extern int usb_interrupt_msg(struct usb_device *usb_dev, unsigned int pipe, | ||
| 1012 | void *data, int len, int *actual_length, int timeout); | ||
| 1011 | extern int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe, | 1013 | extern int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe, |
| 1012 | void *data, int len, int *actual_length, | 1014 | void *data, int len, int *actual_length, |
| 1013 | int timeout); | 1015 | int timeout); |
