Support alloc, update, and free from the single exported function.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
}
struct usb_pipe *
-uhci_alloc_pipe(struct usbdevice_s *usbdev
- , struct usb_endpoint_descriptor *epdesc)
+uhci_realloc_pipe(struct usbdevice_s *usbdev, struct usb_pipe *upipe
+ , struct usb_endpoint_descriptor *epdesc)
{
if (! CONFIG_USB_UHCI)
return NULL;
+ usb_add_freelist(upipe);
+ if (!epdesc)
+ return NULL;
u8 eptype = epdesc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
if (eptype == USB_ENDPOINT_XFER_INT)
return uhci_alloc_intr_pipe(usbdev, epdesc);
void uhci_setup(void);
struct usbdevice_s;
struct usb_endpoint_descriptor;
-struct usb_pipe *uhci_alloc_pipe(struct usbdevice_s *usbdev
- , struct usb_endpoint_descriptor *epdesc);
struct usb_pipe;
+struct usb_pipe *uhci_realloc_pipe(struct usbdevice_s *usbdev
+ , struct usb_pipe *upipe
+ , struct usb_endpoint_descriptor *epdesc);
int uhci_send_control(struct usb_pipe *p, int dir, const void *cmd, int cmdsize
, void *data, int datasize);
int uhci_send_bulk(struct usb_pipe *p, int dir, void *data, int datasize);
switch (usbdev->hub->cntl->type) {
default:
case USB_TYPE_UHCI:
- return uhci_alloc_pipe(usbdev, epdesc);
+ return uhci_realloc_pipe(usbdev, NULL, epdesc);
case USB_TYPE_OHCI:
return ohci_alloc_pipe(usbdev, epdesc);
case USB_TYPE_EHCI: