diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2014-12-31 01:40:07 -0500 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2015-01-01 13:51:22 -0500 |
commit | 1fdc26ec96d7bb1b356775f2c1ae10956f2bcd6f (patch) | |
tree | f584d97efaed6c9926eff0286af95af199b4656f | |
parent | 41d1f27f4165b3b7a177f98c436a137065ba9a98 (diff) | |
download | seabios-1fdc26ec96d7bb1b356775f2c1ae10956f2bcd6f.zip seabios-1fdc26ec96d7bb1b356775f2c1ae10956f2bcd6f.tar.gz seabios-1fdc26ec96d7bb1b356775f2c1ae10956f2bcd6f.tar.bz2 |
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.c | 6 |
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)); |