summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2014-12-31 01:40:07 -0500
committerKevin O'Connor <kevin@koconnor.net>2015-01-01 13:51:22 -0500
commit1fdc26ec96d7bb1b356775f2c1ae10956f2bcd6f (patch)
treef584d97efaed6c9926eff0286af95af199b4656f
parent41d1f27f4165b3b7a177f98c436a137065ba9a98 (diff)
downloadqemu-seabios-1fdc26ec96d7bb1b356775f2c1ae10956f2bcd6f.tar.gz
uhci: Enable "depth" tree traversal for bulk transfers
Set the "depth" flag on bulk transactions. Since SeaBIOS doesn't use bandwidth reclamation, without the depth flag the uhci controller will only transfer one bulk packet per 1 ms frame. This results in a maximum of 64 bytes per millisecond, which severely limits the transfer rate. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r--src/hw/usb-uhci.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/hw/usb-uhci.c b/src/hw/usb-uhci.c
index 6dcc340..7ef50d1 100644
--- a/src/hw/usb-uhci.c
+++ b/src/hw/usb-uhci.c
@@ -537,9 +537,9 @@ uhci_send_bulk(struct usb_pipe *p, int dir, void *data, int datasize)
int transfer = datasize;
if (transfer > maxpacket)
transfer = maxpacket;
- struct uhci_td *nexttd_fl = MAKE_FLATPTR(GET_SEG(SS)
- , &tds[tdpos % STACKTDS]);
- td->link = (transfer==datasize ? UHCI_PTR_TERM : (u32)nexttd_fl);
+ u32 nexttd = (u32)MAKE_FLATPTR(GET_SEG(SS), &tds[tdpos % STACKTDS]);
+ td->link = (transfer==datasize
+ ? UHCI_PTR_TERM : (nexttd | UHCI_PTR_DEPTH));
td->token = (uhci_explen(transfer) | toggle
| (devaddr << TD_TOKEN_DEVADDR_SHIFT)
| (dir ? USB_PID_IN : USB_PID_OUT));