What's a better small project for the holiday break, than fixing emulation
of games and programs from your youth (saying "a few decades ago" makes me
feel old)? At least it is easy to explain a suspicious wife why it is
not work!
Paolo
Paolo Bonzini (2):
vgabios: fix graphics operation with Bochs VGA in non-DISPI modes
vgabios: implement read char in graphics mode
vgasrc/bochsvga.c | 27 +++++++++++++++++++--------
vgasrc/vgafb.c | 41 ++++++++++++++++++++++++++++++++++++++---
2 files changed, 57 insertions(+), 11 deletions(-)
--
2.1.0
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(a)koconnor.net>
---
src/hw/usb-uhci.c | 6 +++---
1 file 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));
--
1.9.3