* End point communication
****************************************************************/
-struct usb_pipe *
+static struct usb_pipe *
ehci_alloc_intr_pipe(struct usbdevice_s *usbdev
, struct usb_endpoint_descriptor *epdesc)
{
- if (! CONFIG_USB_EHCI)
- return NULL;
struct usb_ehci_s *cntl = container_of(
usbdev->hub->cntl, struct usb_ehci_s, usb);
int frameexp = usb_getFrameExp(usbdev, epdesc);
}
struct usb_pipe *
-ehci_alloc_async_pipe(struct usbdevice_s *usbdev
- , struct usb_endpoint_descriptor *epdesc)
+ehci_alloc_pipe(struct usbdevice_s *usbdev
+ , struct usb_endpoint_descriptor *epdesc)
{
if (! CONFIG_USB_EHCI)
return NULL;
+ u8 eptype = epdesc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
+ if (eptype == USB_ENDPOINT_XFER_INT)
+ return ehci_alloc_intr_pipe(usbdev, epdesc);
struct usb_ehci_s *cntl = container_of(
usbdev->hub->cntl, struct usb_ehci_s, usb);
- u8 eptype = epdesc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
dprintf(7, "ehci_alloc_async_pipe %p %d\n", &cntl->usb, eptype);
struct usb_pipe *usbpipe = usb_getFreePipe(&cntl->usb, eptype);
int ehci_init(struct pci_device *pci, int busid, struct pci_device *comppci);
struct usbdevice_s;
struct usb_endpoint_descriptor;
-struct usb_pipe *ehci_alloc_async_pipe(struct usbdevice_s *usbdev
- , struct usb_endpoint_descriptor *epdesc);
+struct usb_pipe *ehci_alloc_pipe(struct usbdevice_s *usbdev
+ , struct usb_endpoint_descriptor *epdesc);
struct usb_pipe;
int ehci_control(struct usb_pipe *p, int dir, const void *cmd, int cmdsize
, void *data, int datasize);
int ehci_send_bulk(struct usb_pipe *p, int dir, void *data, int datasize);
-struct usb_pipe *ehci_alloc_intr_pipe(struct usbdevice_s *usbdev
- , struct usb_endpoint_descriptor *epdesc);
int ehci_poll_intr(struct usb_pipe *p, void *data);
if (ret)
return -1;
- keyboard_pipe = alloc_intr_pipe(usbdev, epdesc);
+ keyboard_pipe = usb_alloc_pipe(usbdev, epdesc);
if (!keyboard_pipe)
return -1;
if (ret)
return -1;
- mouse_pipe = alloc_intr_pipe(usbdev, epdesc);
+ mouse_pipe = usb_alloc_pipe(usbdev, epdesc);
if (!mouse_pipe)
return -1;
usbdev, USB_ENDPOINT_XFER_BULK, USB_DIR_OUT);
if (!indesc || !outdesc)
goto fail;
- udrive_g->bulkin = alloc_async_pipe(usbdev, indesc);
- udrive_g->bulkout = alloc_async_pipe(usbdev, outdesc);
+ udrive_g->bulkin = usb_alloc_pipe(usbdev, indesc);
+ udrive_g->bulkout = usb_alloc_pipe(usbdev, outdesc);
if (!udrive_g->bulkin || !udrive_g->bulkout)
goto fail;
* End point communication
****************************************************************/
-struct usb_pipe *
+static struct usb_pipe *
ohci_alloc_intr_pipe(struct usbdevice_s *usbdev
, struct usb_endpoint_descriptor *epdesc)
{
- if (! CONFIG_USB_OHCI)
- return NULL;
struct usb_ohci_s *cntl = container_of(
usbdev->hub->cntl, struct usb_ohci_s, usb);
int frameexp = usb_getFrameExp(usbdev, epdesc);
}
struct usb_pipe *
-ohci_alloc_async_pipe(struct usbdevice_s *usbdev
- , struct usb_endpoint_descriptor *epdesc)
+ohci_alloc_pipe(struct usbdevice_s *usbdev
+ , struct usb_endpoint_descriptor *epdesc)
{
if (! CONFIG_USB_OHCI)
return NULL;
u8 eptype = epdesc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
+ if (eptype == USB_ENDPOINT_XFER_INT)
+ return ohci_alloc_intr_pipe(usbdev, epdesc);
if (eptype != USB_ENDPOINT_XFER_CONTROL) {
dprintf(1, "OHCI Bulk transfers not supported.\n");
return NULL;
void ohci_init(struct pci_device *pci, int busid);
struct usbdevice_s;
struct usb_endpoint_descriptor;
-struct usb_pipe *ohci_alloc_async_pipe(struct usbdevice_s *usbdev
- , struct usb_endpoint_descriptor *epdesc);
+struct usb_pipe *ohci_alloc_pipe(struct usbdevice_s *usbdev
+ , struct usb_endpoint_descriptor *epdesc);
struct usb_pipe;
int ohci_control(struct usb_pipe *p, int dir, const void *cmd, int cmdsize
, void *data, int datasize);
int ohci_send_bulk(struct usb_pipe *p, int dir, void *data, int datasize);
-struct usb_pipe *ohci_alloc_intr_pipe(struct usbdevice_s *usbdev
- , struct usb_endpoint_descriptor *epdesc);
int ohci_poll_intr(struct usb_pipe *p, void *data);
* End point communication
****************************************************************/
-struct usb_pipe *
+static struct usb_pipe *
uhci_alloc_intr_pipe(struct usbdevice_s *usbdev
, struct usb_endpoint_descriptor *epdesc)
{
- if (! CONFIG_USB_UHCI)
- return NULL;
struct usb_uhci_s *cntl = container_of(
usbdev->hub->cntl, struct usb_uhci_s, usb);
int frameexp = usb_getFrameExp(usbdev, epdesc);
}
struct usb_pipe *
-uhci_alloc_async_pipe(struct usbdevice_s *usbdev
- , struct usb_endpoint_descriptor *epdesc)
+uhci_alloc_pipe(struct usbdevice_s *usbdev
+ , struct usb_endpoint_descriptor *epdesc)
{
if (! CONFIG_USB_UHCI)
return NULL;
+ u8 eptype = epdesc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
+ if (eptype == USB_ENDPOINT_XFER_INT)
+ return uhci_alloc_intr_pipe(usbdev, epdesc);
struct usb_uhci_s *cntl = container_of(
usbdev->hub->cntl, struct usb_uhci_s, usb);
- u8 eptype = epdesc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
dprintf(7, "uhci_alloc_async_pipe %p %d\n", &cntl->usb, eptype);
struct usb_pipe *usbpipe = usb_getFreePipe(&cntl->usb, eptype);
void uhci_init(struct pci_device *pci, int busid);
struct usbdevice_s;
struct usb_endpoint_descriptor;
-struct usb_pipe *uhci_alloc_async_pipe(struct usbdevice_s *usbdev
- , struct usb_endpoint_descriptor *epdesc);
+struct usb_pipe *uhci_alloc_pipe(struct usbdevice_s *usbdev
+ , struct usb_endpoint_descriptor *epdesc);
struct usb_pipe;
int uhci_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);
-struct usb_pipe *uhci_alloc_intr_pipe(struct usbdevice_s *usbdev
- , struct usb_endpoint_descriptor *epdesc);
int uhci_poll_intr(struct usb_pipe *p, void *data);
// Allocate an async pipe (control or bulk).
struct usb_pipe *
-alloc_async_pipe(struct usbdevice_s *usbdev
- , struct usb_endpoint_descriptor *epdesc)
+usb_alloc_pipe(struct usbdevice_s *usbdev
+ , struct usb_endpoint_descriptor *epdesc)
{
switch (usbdev->hub->cntl->type) {
default:
case USB_TYPE_UHCI:
- return uhci_alloc_async_pipe(usbdev, epdesc);
+ return uhci_alloc_pipe(usbdev, epdesc);
case USB_TYPE_OHCI:
- return ohci_alloc_async_pipe(usbdev, epdesc);
+ return ohci_alloc_pipe(usbdev, epdesc);
case USB_TYPE_EHCI:
- return ehci_alloc_async_pipe(usbdev, epdesc);
+ return ehci_alloc_pipe(usbdev, epdesc);
}
}
return (period <= 4) ? 0 : period - 4;
}
-struct usb_pipe *
-alloc_intr_pipe(struct usbdevice_s *usbdev
- , struct usb_endpoint_descriptor *epdesc)
-{
- switch (usbdev->hub->cntl->type) {
- default:
- case USB_TYPE_UHCI:
- return uhci_alloc_intr_pipe(usbdev, epdesc);
- case USB_TYPE_OHCI:
- return ohci_alloc_intr_pipe(usbdev, epdesc);
- case USB_TYPE_EHCI:
- return ehci_alloc_intr_pipe(usbdev, epdesc);
- }
-}
-
int noinline
usb_poll_intr(struct usb_pipe *pipe_fl, void *data)
{
.wMaxPacketSize = 8,
.bmAttributes = USB_ENDPOINT_XFER_CONTROL,
};
- usbdev->defpipe = alloc_async_pipe(usbdev, &epdesc);
+ usbdev->defpipe = usb_alloc_pipe(usbdev, &epdesc);
if (!usbdev->defpipe)
return -1;
cntl->maxaddr++;
usbdev->devaddr = cntl->maxaddr;
- usbdev->defpipe = alloc_async_pipe(usbdev, &epdesc);
+ usbdev->defpipe = usb_alloc_pipe(usbdev, &epdesc);
if (!usbdev->defpipe)
return -1;
return 0;
.wMaxPacketSize = dinfo.bMaxPacketSize0,
.bmAttributes = USB_ENDPOINT_XFER_CONTROL,
};
- usbdev->defpipe = alloc_async_pipe(usbdev, &epdesc);
+ usbdev->defpipe = usb_alloc_pipe(usbdev, &epdesc);
if (!usbdev->defpipe)
return -1;
void usb_desc2pipe(struct usb_pipe *pipe, struct usbdevice_s *usbdev
, struct usb_endpoint_descriptor *epdesc);
struct usb_pipe *usb_getFreePipe(struct usb_s *cntl, u8 eptype);
-struct usb_pipe *alloc_async_pipe(struct usbdevice_s *usbdev
- , struct usb_endpoint_descriptor *epdesc);
+struct usb_pipe *usb_alloc_pipe(struct usbdevice_s *usbdev
+ , struct usb_endpoint_descriptor *epdesc);
int usb_getFrameExp(struct usbdevice_s *usbdev
, struct usb_endpoint_descriptor *epdesc);
-struct usb_pipe *alloc_intr_pipe(struct usbdevice_s *usbdev
- , struct usb_endpoint_descriptor *epdesc);
int usb_poll_intr(struct usb_pipe *pipe, void *data);
struct usb_endpoint_descriptor *findEndPointDesc(struct usbdevice_s *usbdev
, int type, int dir);