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