|
@@ -1505,6 +1505,26 @@ static ohci_dev_t *ohci_get_ohci_dev(ohci_t *ohci, int devnum, int intr)
|
|
|
|
|
|
/* common code for handling submit messages - used for all but root hub */
|
|
|
/* accesses. */
|
|
|
+static urb_priv_t *ohci_alloc_urb(struct usb_device *dev, unsigned long pipe,
|
|
|
+ void *buffer, int transfer_len, int interval)
|
|
|
+{
|
|
|
+ urb_priv_t *urb;
|
|
|
+
|
|
|
+ urb = calloc(1, sizeof(urb_priv_t));
|
|
|
+ if (!urb) {
|
|
|
+ printf("ohci: Error out of memory allocating urb\n");
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
+
|
|
|
+ urb->dev = dev;
|
|
|
+ urb->pipe = pipe;
|
|
|
+ urb->transfer_buffer = buffer;
|
|
|
+ urb->transfer_buffer_length = transfer_len;
|
|
|
+ urb->interval = interval;
|
|
|
+
|
|
|
+ return urb;
|
|
|
+}
|
|
|
+
|
|
|
static int submit_common_msg(ohci_t *ohci, struct usb_device *dev,
|
|
|
unsigned long pipe, void *buffer, int transfer_len,
|
|
|
struct devrequest *setup, int interval)
|
|
@@ -1515,14 +1535,9 @@ static int submit_common_msg(ohci_t *ohci, struct usb_device *dev,
|
|
|
urb_priv_t *urb;
|
|
|
ohci_dev_t *ohci_dev;
|
|
|
|
|
|
- urb = malloc(sizeof(urb_priv_t));
|
|
|
- memset(urb, 0, sizeof(urb_priv_t));
|
|
|
-
|
|
|
- urb->dev = dev;
|
|
|
- urb->pipe = pipe;
|
|
|
- urb->transfer_buffer = buffer;
|
|
|
- urb->transfer_buffer_length = transfer_len;
|
|
|
- urb->interval = interval;
|
|
|
+ urb = ohci_alloc_urb(dev, pipe, buffer, transfer_len, interval);
|
|
|
+ if (!urb)
|
|
|
+ return -ENOMEM;
|
|
|
|
|
|
#ifdef DEBUG
|
|
|
urb->actual_length = 0;
|