[xhci] Support USB1 devices attached via transaction translators
authorMichael Brown <mcb30@ipxe.org>
Mon, 23 Mar 2015 20:24:20 +0000 (20:24 +0000)
committerMichael Brown <mcb30@ipxe.org>
Mon, 23 Mar 2015 20:24:20 +0000 (20:24 +0000)
commitf557794ab3ccae444653a25b889cc51d10e6f0c3
tree2034d103fa624aec631180d201c3c4aa4a50607d
parent026b3446b953fcec30afb66c2c197d382378dddd
[xhci] Support USB1 devices attached via transaction translators

xHCI provides a somewhat convoluted mechanism for specifying details
of a transaction translator.  Hubs must be marked as such in the
device slot context.  The only opportunity to do so is as part of a
Configure Endpoint command, which can be executed only when opening
the hub's interrupt endpoint.

We add a mechanism for host controllers to intercept the opening of
hub devices, providing xHCI with an opportunity to update the internal
device slot structure for the corresponding USB device to indicate
that the device is a hub.  We then include the hub-specific details in
the input context whenever any Configure Endpoint command is issued.

When a device is opened, we record the device slot and port for its
transaction translator (if any), and supply these as part of the
Address Device command.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/bus/usb.c
src/drivers/usb/ehci.c
src/drivers/usb/xhci.c
src/drivers/usb/xhci.h
src/include/ipxe/usb.h