mirror of https://github.com/ipxe/ipxe.git
[usb] Add the concept of a USB bus maximum transfer size
Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/35/head
parent
79697c75ee
commit
7b6765ff1b
|
@ -1736,11 +1736,12 @@ void free_usb_hub ( struct usb_hub *hub ) {
|
|||
*
|
||||
* @v dev Underlying hardware device
|
||||
* @v ports Number of root hub ports
|
||||
* @v mtu Largest transfer allowed on the bus
|
||||
* @v op Host controller operations
|
||||
* @ret bus USB bus, or NULL on allocation failure
|
||||
*/
|
||||
struct usb_bus * alloc_usb_bus ( struct device *dev, unsigned int ports,
|
||||
struct usb_host_operations *op ) {
|
||||
size_t mtu, struct usb_host_operations *op ) {
|
||||
struct usb_bus *bus;
|
||||
|
||||
/* Allocate and initialise structure */
|
||||
|
@ -1749,6 +1750,7 @@ struct usb_bus * alloc_usb_bus ( struct device *dev, unsigned int ports,
|
|||
goto err_alloc_bus;
|
||||
bus->name = dev->name;
|
||||
bus->dev = dev;
|
||||
bus->mtu = mtu;
|
||||
bus->op = op;
|
||||
INIT_LIST_HEAD ( &bus->devices );
|
||||
INIT_LIST_HEAD ( &bus->hubs );
|
||||
|
|
|
@ -3117,7 +3117,7 @@ static int xhci_probe ( struct pci_device *pci ) {
|
|||
goto err_reset;
|
||||
|
||||
/* Allocate USB bus */
|
||||
xhci->bus = alloc_usb_bus ( &pci->dev, xhci->ports,
|
||||
xhci->bus = alloc_usb_bus ( &pci->dev, xhci->ports, XHCI_MTU,
|
||||
&xhci_operations );
|
||||
if ( ! xhci->bus ) {
|
||||
rc = -ENOMEM;
|
||||
|
|
|
@ -24,6 +24,9 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
|||
*/
|
||||
#define XHCI_MIN_ALIGN 64
|
||||
|
||||
/** Maximum transfer size */
|
||||
#define XHCI_MTU 65536
|
||||
|
||||
/** xHCI PCI BAR */
|
||||
#define XHCI_BAR PCI_BASE_ADDRESS_0
|
||||
|
||||
|
|
|
@ -865,6 +865,9 @@ struct usb_bus {
|
|||
/** Host controller operations set */
|
||||
struct usb_host_operations *op;
|
||||
|
||||
/** Largest transfer allowed on the bus */
|
||||
size_t mtu;
|
||||
|
||||
/** Root hub */
|
||||
struct usb_hub *hub;
|
||||
|
||||
|
@ -1138,7 +1141,8 @@ extern void free_usb_hub ( struct usb_hub *hub );
|
|||
|
||||
extern void usb_port_changed ( struct usb_port *port );
|
||||
|
||||
extern struct usb_bus * alloc_usb_bus ( struct device *dev, unsigned int ports,
|
||||
extern struct usb_bus * alloc_usb_bus ( struct device *dev,
|
||||
unsigned int ports, size_t mtu,
|
||||
struct usb_host_operations *op );
|
||||
extern int register_usb_bus ( struct usb_bus *bus );
|
||||
extern void unregister_usb_bus ( struct usb_bus *bus );
|
||||
|
|
Loading…
Reference in New Issue