david/ipxe
Archived
1
0

[usb] Add the concept of a USB bus maximum transfer size

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown 2015-03-16 05:39:14 +00:00
parent 79697c75ee
commit 7b6765ff1b
4 changed files with 12 additions and 3 deletions

View File

@ -1736,11 +1736,12 @@ void free_usb_hub ( struct usb_hub *hub ) {
* *
* @v dev Underlying hardware device * @v dev Underlying hardware device
* @v ports Number of root hub ports * @v ports Number of root hub ports
* @v mtu Largest transfer allowed on the bus
* @v op Host controller operations * @v op Host controller operations
* @ret bus USB bus, or NULL on allocation failure * @ret bus USB bus, or NULL on allocation failure
*/ */
struct usb_bus * alloc_usb_bus ( struct device *dev, unsigned int ports, 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; struct usb_bus *bus;
/* Allocate and initialise structure */ /* Allocate and initialise structure */
@ -1749,6 +1750,7 @@ struct usb_bus * alloc_usb_bus ( struct device *dev, unsigned int ports,
goto err_alloc_bus; goto err_alloc_bus;
bus->name = dev->name; bus->name = dev->name;
bus->dev = dev; bus->dev = dev;
bus->mtu = mtu;
bus->op = op; bus->op = op;
INIT_LIST_HEAD ( &bus->devices ); INIT_LIST_HEAD ( &bus->devices );
INIT_LIST_HEAD ( &bus->hubs ); INIT_LIST_HEAD ( &bus->hubs );

View File

@ -3117,7 +3117,7 @@ static int xhci_probe ( struct pci_device *pci ) {
goto err_reset; goto err_reset;
/* Allocate USB bus */ /* 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 ); &xhci_operations );
if ( ! xhci->bus ) { if ( ! xhci->bus ) {
rc = -ENOMEM; rc = -ENOMEM;

View File

@ -24,6 +24,9 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
*/ */
#define XHCI_MIN_ALIGN 64 #define XHCI_MIN_ALIGN 64
/** Maximum transfer size */
#define XHCI_MTU 65536
/** xHCI PCI BAR */ /** xHCI PCI BAR */
#define XHCI_BAR PCI_BASE_ADDRESS_0 #define XHCI_BAR PCI_BASE_ADDRESS_0

View File

@ -865,6 +865,9 @@ struct usb_bus {
/** Host controller operations set */ /** Host controller operations set */
struct usb_host_operations *op; struct usb_host_operations *op;
/** Largest transfer allowed on the bus */
size_t mtu;
/** Root hub */ /** Root hub */
struct usb_hub *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 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 ); struct usb_host_operations *op );
extern int register_usb_bus ( struct usb_bus *bus ); extern int register_usb_bus ( struct usb_bus *bus );
extern void unregister_usb_bus ( struct usb_bus *bus ); extern void unregister_usb_bus ( struct usb_bus *bus );