|
@@ -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
|