libpayload: Add init() function to hci_t and rework uhci_reset()
uhci_reset() differs in semantics compared to the other HCI's reset() implementations. uhci_reset() does some initialization work after a controller reset. So move the initialization part to a new function, uhci_reinit(), which get's exported through a new entry in hci_t: hci_t.init(). Warning: This breaks code that relies on the current, special, counterintuitive behaviour of uhci_reset(). If one wants a working host controller after calling hci_t.reset(), he should call hci_t.init() afterwards. Change-Id: Ia7ce80865d12d11157645ce251f77f349f8e3c34 Signed-off-by: Nico Huber <nico.huber@secunet.com> Reviewed-on: http://review.coreboot.org/1851 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
This commit is contained in:
parent
aaa212d17d
commit
6e711c6a97
|
@ -68,6 +68,10 @@ static void ehci_reset (hci_t *controller)
|
|||
usb_debug("ehci_reset(): reset failed!\n");
|
||||
}
|
||||
|
||||
static void ehci_reinit (hci_t *controller)
|
||||
{
|
||||
}
|
||||
|
||||
static int ehci_set_periodic_schedule(ehci_t *ehcic, int enable)
|
||||
{
|
||||
/* Set periodic schedule status. */
|
||||
|
@ -657,6 +661,7 @@ ehci_init (pcidev_t addr)
|
|||
controller->start = ehci_start;
|
||||
controller->stop = ehci_stop;
|
||||
controller->reset = ehci_reset;
|
||||
controller->init = ehci_reinit;
|
||||
controller->shutdown = ehci_shutdown;
|
||||
controller->bulk = ehci_bulk;
|
||||
controller->control = ehci_control;
|
||||
|
|
|
@ -58,6 +58,11 @@ ohci_reset (hci_t *controller)
|
|||
mdelay(10); /* wait 10ms */
|
||||
}
|
||||
|
||||
static void
|
||||
ohci_reinit (hci_t *controller)
|
||||
{
|
||||
}
|
||||
|
||||
#ifdef USB_DEBUG
|
||||
/* Section 4.3.3 */
|
||||
static const char *completion_codes[] = {
|
||||
|
@ -107,6 +112,7 @@ ohci_init (pcidev_t addr)
|
|||
controller->start = ohci_start;
|
||||
controller->stop = ohci_stop;
|
||||
controller->reset = ohci_reset;
|
||||
controller->init = ohci_reinit;
|
||||
controller->shutdown = ohci_shutdown;
|
||||
controller->bulk = ohci_bulk;
|
||||
controller->control = ohci_control;
|
||||
|
|
|
@ -114,7 +114,11 @@ uhci_reset (hci_t *controller)
|
|||
udelay (500);
|
||||
if (timeout < 0)
|
||||
usb_debug ("Warning: uhci: host controller reset timed out.\n");
|
||||
}
|
||||
|
||||
static void
|
||||
uhci_reinit (hci_t *controller)
|
||||
{
|
||||
uhci_reg_write32 (controller, FLBASEADD,
|
||||
(u32) virt_to_phys (UHCI_INST (controller)->
|
||||
framelistptr));
|
||||
|
@ -152,6 +156,7 @@ uhci_init (pcidev_t addr)
|
|||
controller->start = uhci_start;
|
||||
controller->stop = uhci_stop;
|
||||
controller->reset = uhci_reset;
|
||||
controller->init = uhci_reinit;
|
||||
controller->shutdown = uhci_shutdown;
|
||||
controller->bulk = uhci_bulk;
|
||||
controller->control = uhci_control;
|
||||
|
@ -228,6 +233,7 @@ uhci_init (pcidev_t addr)
|
|||
controller->devices[0]->init = uhci_rh_init;
|
||||
controller->devices[0]->init (controller->devices[0]);
|
||||
uhci_reset (controller);
|
||||
uhci_reinit (controller);
|
||||
return controller;
|
||||
}
|
||||
|
||||
|
|
|
@ -49,6 +49,11 @@ xhci_reset (hci_t *controller)
|
|||
{
|
||||
}
|
||||
|
||||
static void
|
||||
xhci_reinit (hci_t *controller)
|
||||
{
|
||||
}
|
||||
|
||||
hci_t *
|
||||
xhci_init (pcidev_t addr)
|
||||
{
|
||||
|
@ -68,6 +73,7 @@ xhci_init (pcidev_t addr)
|
|||
controller->start = xhci_start;
|
||||
controller->stop = xhci_stop;
|
||||
controller->reset = xhci_reset;
|
||||
controller->init = xhci_reinit;
|
||||
controller->shutdown = xhci_shutdown;
|
||||
controller->bulk = xhci_bulk;
|
||||
controller->control = xhci_control;
|
||||
|
|
|
@ -127,6 +127,9 @@ struct usbdev_hc {
|
|||
/* reset(): Perform a controller reset. The controller needs to
|
||||
be (re)initialized afterwards to work (again). */
|
||||
void (*reset) (hci_t *controller);
|
||||
/* init(): Initialize a (previously reset) controller
|
||||
to a working state. */
|
||||
void (*init) (hci_t *controller);
|
||||
/* shutdown(): Stop operation, detach host controller and shutdown
|
||||
this driver instance. After calling shutdown() any
|
||||
other usage of this hci_t* is invalid. */
|
||||
|
|
Loading…
Reference in New Issue