From e6f3e5e016cc7473bc008f341d8e22bd989e03cb Mon Sep 17 00:00:00 2001 From: pbrook Date: Thu, 25 May 2006 23:37:07 +0000 Subject: OHCI large packet fix. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1939 c046a42c-6fe2-441c-8c8c-71466251a162 --- hw/usb-ohci.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'hw/usb-ohci.c') diff --git a/hw/usb-ohci.c b/hw/usb-ohci.c index 0cc27232d..e87d9da70 100644 --- a/hw/usb-ohci.c +++ b/hw/usb-ohci.c @@ -419,6 +419,7 @@ static void ohci_copy_td(struct ohci_td *td, uint8_t *buf, int len, int write) if (n == len) return; ptr = td->be & ~0xfffu; + buf += n; cpu_physical_memory_rw(ptr, buf, len - n, write); } @@ -474,7 +475,12 @@ static int ohci_service_td(OHCIState *ohci, struct ohci_ed *ed) return 1; } if (td.cbp && td.be) { - len = (td.be - td.cbp) + 1; + if ((td.cbp & 0xfffff000) != (td.be & 0xfffff000)) { + len = (td.be & 0xfff) + 0x1001 - (td.cbp & 0xfff); + } else { + len = (td.be - td.cbp) + 1; + } + if (len && dir != OHCI_TD_DIR_IN) { ohci_copy_td(&td, buf, len, 0); } -- cgit v1.2.3