From 1c36eada27697e1feafda6db162f7d4854b64ff6 Mon Sep 17 00:00:00 2001 From: Anton Kochkov Date: Thu, 28 Jun 2012 08:30:15 +0400 Subject: [PATCH] libpayload: add controller type in usbdev_hc Add controller type (UHCI, OHCI, EHCI or XHCI) into usbdev_hc (hci_t) struct, so now we know which type selected controller have. It needed to access controller specific data, if access usb tree outside of libpayload (e.g. in payload intself) Change-Id: I7df947bbb56a50d0d792ccd4d3a6b021ee95e2ea Signed-off-by: Anton Kochkov Reviewed-on: http://review.coreboot.org/1145 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer --- payloads/libpayload/drivers/usb/ehci.c | 2 ++ payloads/libpayload/drivers/usb/ohci.c | 2 ++ payloads/libpayload/drivers/usb/uhci.c | 2 ++ payloads/libpayload/drivers/usb/xhci.c | 2 ++ payloads/libpayload/include/usb/usb.h | 3 +++ 5 files changed, 11 insertions(+) diff --git a/payloads/libpayload/drivers/usb/ehci.c b/payloads/libpayload/drivers/usb/ehci.c index 8d84f8dd60..4d0a209977 100644 --- a/payloads/libpayload/drivers/usb/ehci.c +++ b/payloads/libpayload/drivers/usb/ehci.c @@ -635,6 +635,8 @@ ehci_init (pcidev_t addr) pci_command = (pci_command | PCI_COMMAND_MEMORY) & ~PCI_COMMAND_IO ; pci_write_config32(addr, PCI_COMMAND, pci_command); + controller->type = EHCI; + controller->start = ehci_start; controller->stop = ehci_stop; controller->reset = ehci_reset; diff --git a/payloads/libpayload/drivers/usb/ohci.c b/payloads/libpayload/drivers/usb/ohci.c index 2cfabb4d4d..570851559e 100644 --- a/payloads/libpayload/drivers/usb/ohci.c +++ b/payloads/libpayload/drivers/usb/ohci.c @@ -102,6 +102,8 @@ ohci_init (pcidev_t addr) if(!controller->instance) fatal("Not enough memory creating USB controller instance.\n"); + controller->type = OHCI; + controller->start = ohci_start; controller->stop = ohci_stop; controller->reset = ohci_reset; diff --git a/payloads/libpayload/drivers/usb/uhci.c b/payloads/libpayload/drivers/usb/uhci.c index 78f7aba2dc..84b461a466 100644 --- a/payloads/libpayload/drivers/usb/uhci.c +++ b/payloads/libpayload/drivers/usb/uhci.c @@ -147,6 +147,8 @@ uhci_init (pcidev_t addr) if(!controller->instance) fatal("Not enough memory creating USB controller instance.\n"); + controller->type = UHCI; + controller->start = uhci_start; controller->stop = uhci_stop; controller->reset = uhci_reset; diff --git a/payloads/libpayload/drivers/usb/xhci.c b/payloads/libpayload/drivers/usb/xhci.c index a25cf403a0..828e0eaec7 100644 --- a/payloads/libpayload/drivers/usb/xhci.c +++ b/payloads/libpayload/drivers/usb/xhci.c @@ -63,6 +63,8 @@ xhci_init (pcidev_t addr) if(!controller->instance) fatal("Not enough memory creating USB controller instance.\n"); + controller->type = XHCI; + controller->start = xhci_start; controller->stop = xhci_stop; controller->reset = xhci_reset; diff --git a/payloads/libpayload/include/usb/usb.h b/payloads/libpayload/include/usb/usb.h index ecfee54551..27af9bc3a0 100644 --- a/payloads/libpayload/include/usb/usb.h +++ b/payloads/libpayload/include/usb/usb.h @@ -111,10 +111,13 @@ struct usbdev { void (*poll) (usbdev_t *dev); }; +typedef enum { OHCI = 0, UHCI = 1, EHCI = 2, XHCI = 3} hc_type; + struct usbdev_hc { struct usbdev_hc *next; pcidev_t bus_address; u32 reg_base; + hc_type type; usbdev_t *devices[128]; // dev 0 is root hub, 127 is last addressable void (*start) (hci_t *controller); void (*stop) (hci_t *controller);