[SeaBIOS] [PATCH 1/3] usb: Move default pipe max packet size code from xhci to main code.
Kevin O'Connor
kevin at koconnor.net
Mon Jan 27 18:29:11 CET 2014
Also, the max packet size for super speed devices is 512 bytes (not
256 bytes).
Signed-off-by: Kevin O'Connor <kevin at koconnor.net>
---
Some additional patches on my xhci-testing branch. Also available at:
https://github.com/KevinOConnor/seabios/tree/xhci-testing
---
src/hw/usb-xhci.c | 11 ++---------
src/hw/usb.c | 9 ++++++++-
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/src/hw/usb-xhci.c b/src/hw/usb-xhci.c
index daa7b5a..3366f09 100644
--- a/src/hw/usb-xhci.c
+++ b/src/hw/usb-xhci.c
@@ -282,13 +282,6 @@ static const int speed_to_xhci[] = {
[ USB_SUPERSPEED ] = 4,
};
-static const int speed_to_ctlsize[] = {
- [ USB_FULLSPEED ] = 8,
- [ USB_LOWSPEED ] = 8,
- [ USB_HIGHSPEED ] = 64,
- [ USB_SUPERSPEED ] = 256,
-};
-
static const int eptype_to_xhci_in[] = {
[ USB_ENDPOINT_XFER_CONTROL] = 4,
[ USB_ENDPOINT_XFER_ISOC ] = 5,
@@ -955,12 +948,12 @@ xhci_alloc_pipe(struct usbdevice_s *usbdev
struct xhci_epctx *ep = (void*)&in[2 << xhci->context64];
ep->ctx[0] |= (3 << 16); // interval: 1ms
ep->ctx[1] |= (4 << 3); // control pipe
- ep->ctx[1] |= (speed_to_ctlsize[usbdev->speed] << 16);
+ ep->ctx[1] |= (pipe->pipe.maxpacket << 16);
ep->deq_low = (u32)&pipe->reqs.ring[0];
ep->deq_low |= 1; // dcs
ep->deq_high = 0;
- ep->length = 8;
+ ep->length = pipe->pipe.maxpacket;
int cc = xhci_cmd_address_device(xhci, slotid, in);
free(in);
diff --git a/src/hw/usb.c b/src/hw/usb.c
index ff20b6c..7b8a9f5 100644
--- a/src/hw/usb.c
+++ b/src/hw/usb.c
@@ -261,6 +261,13 @@ set_configuration(struct usb_pipe *pipe, u16 val)
* Initialization and enumeration
****************************************************************/
+static const int speed_to_ctlsize[] = {
+ [ USB_FULLSPEED ] = 8,
+ [ USB_LOWSPEED ] = 8,
+ [ USB_HIGHSPEED ] = 64,
+ [ USB_SUPERSPEED ] = 512,
+};
+
// Assign an address to a device in the default state on the given
// controller.
static int
@@ -276,7 +283,7 @@ usb_set_address(struct usbdevice_s *usbdev)
// Create a pipe for the default address.
struct usb_endpoint_descriptor epdesc = {
- .wMaxPacketSize = 8,
+ .wMaxPacketSize = speed_to_ctlsize[usbdev->speed],
.bmAttributes = USB_ENDPOINT_XFER_CONTROL,
};
usbdev->defpipe = usb_alloc_pipe(usbdev, &epdesc);
--
1.8.5.3
More information about the SeaBIOS
mailing list