diff options
Diffstat (limited to 'payloads/libpayload/drivers/usb/xhci.c')
-rw-r--r-- | payloads/libpayload/drivers/usb/xhci.c | 23 |
1 files changed, 5 insertions, 18 deletions
diff --git a/payloads/libpayload/drivers/usb/xhci.c b/payloads/libpayload/drivers/usb/xhci.c index 23314855ee..c60a967607 100644 --- a/payloads/libpayload/drivers/usb/xhci.c +++ b/payloads/libpayload/drivers/usb/xhci.c @@ -150,11 +150,6 @@ xhci_init (unsigned long physical_bar) /* First, allocate and initialize static controller structures */ hci_t *const controller = new_controller(); - if (!controller) { - xhci_debug("Could not create USB controller instance\n"); - return controller; - } - controller->type = XHCI; controller->start = xhci_start; controller->stop = xhci_stop; @@ -170,17 +165,10 @@ xhci_init (unsigned long physical_bar) controller->destroy_intr_queue = xhci_destroy_intr_queue; controller->poll_intr_queue = xhci_poll_intr_queue; controller->pcidev = 0; - for (i = 0; i < 128; ++i) { - controller->devices[i] = NULL; - } - controller->instance = malloc(sizeof(xhci_t)); - if (!controller->instance) { - xhci_debug("Out of memory creating xHCI controller instance\n"); - goto _free_controller; - } + controller->reg_base = (u32)physical_bar; + controller->instance = xzalloc(sizeof(xhci_t)); xhci_t *const xhci = (xhci_t *)controller->instance; - memset(xhci, 0x00, sizeof(*xhci)); init_device_entry(controller, 0); xhci->roothub = controller->devices[0]; @@ -282,6 +270,7 @@ xhci_init (unsigned long physical_bar) return controller; _free_xhci_structs: + free(xhci->dma_buffer); if (xhci->sp_ptrs) { for (i = 0; i < max_sp_bufs; ++i) { if (xhci->sp_ptrs[i]) @@ -410,13 +399,10 @@ xhci_shutdown(hci_t *const controller) if (controller == 0) return; - xhci_t *const xhci = XHCI_INST(controller); detach_controller(controller); - /* Detach device hierarchy (starting at root hub) */ - usb_detach_device(controller, 0); - + xhci_t *const xhci = XHCI_INST(controller); xhci_stop(controller); if (controller->pcidev) @@ -430,6 +416,7 @@ xhci_shutdown(hci_t *const controller) } } free(xhci->sp_ptrs); + free(xhci->dma_buffer); free(xhci->dcbaa); free(xhci->dev); free((void *)xhci->ev_ring_table); |