]> git.proxmox.com Git - mirror_qemu.git/commitdiff
OHCI large packet fix.
authorpbrook <pbrook@c046a42c-6fe2-441c-8c8c-71466251a162>
Thu, 25 May 2006 23:37:07 +0000 (23:37 +0000)
committerpbrook <pbrook@c046a42c-6fe2-441c-8c8c-71466251a162>
Thu, 25 May 2006 23:37:07 +0000 (23:37 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1939 c046a42c-6fe2-441c-8c8c-71466251a162

hw/usb-ohci.c

index 0cc27232d88873ece0ef0684c833d91dee30e3b2..e87d9da70a04bfdadfbf454b676ed83d944554fd 100644 (file)
@@ -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);
         }