david/ipxe
david
/
ipxe
Archived
1
0
Fork 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 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 );

View File

@ -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;

View File

@ -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

View File

@ -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 );