Greetings,

the following patch moves the initialization for bm->cur_addr from the
ide_dma_start function to bmdma_addr_writel, so that it is set in sync 
with the call to set the destination address for DMA (bm->addr) and to 
avoid timeouts in guests that set this address after they have called 
the READ_DMA command (FreeBSD).

the final package has been tested with the following guests :

  FreeBSD 6.2 (amd64 and i386)
  FreeBSD 5.3 (i386)
  Fedora Core 6 (i386)
  Gentoo Linux 2006.1 (i386)
  NexentaOS Alpha 6 (amd64)
  OpenSolaris Nevada b55b (amd64)
  OpenBSD 4.0 (amd64 and i386)
  Windows 2000 (i386)

Carlo
Index: hw/ide.c
===================================================================
RCS file: /sources/qemu/qemu/hw/ide.c,v
retrieving revision 1.51
diff -u -r1.51 ide.c
--- hw/ide.c    20 Jan 2007 01:12:17 -0000      1.51
+++ hw/ide.c    23 Jan 2007 09:58:44 -0000
@@ -2230,7 +2230,6 @@
         return;
     bm->ide_if = s;
     bm->dma_cb = dma_cb;
-    bm->cur_addr = bm->addr;
     bm->cur_prd_last = 0;
     bm->cur_prd_addr = 0;
     bm->cur_prd_len = 0;
@@ -2363,6 +2362,7 @@
     printf("%s: 0x%08x\n", __func__, val);
 #endif
     bm->addr = val & ~3;
+    bm->cur_addr = bm->addr;
 }
 
 static void bmdma_map(PCIDevice *pci_dev, int region_num, 
_______________________________________________
Qemu-devel mailing list
Qemu-devel@nongnu.org
http://lists.nongnu.org/mailman/listinfo/qemu-devel

Reply via email to