aboutsummaryrefslogtreecommitdiff
path: root/payloads/libpayload/drivers/usb/xhci.c
diff options
context:
space:
mode:
Diffstat (limited to 'payloads/libpayload/drivers/usb/xhci.c')
-rw-r--r--payloads/libpayload/drivers/usb/xhci.c23
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);