qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] enabling bus-master IDE driver


From: Jason Brittain
Subject: Re: [Qemu-devel] enabling bus-master IDE driver
Date: Thu, 11 Nov 2004 09:29:28 -0800
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.3) Gecko/20040913

I just pulled the latest source from CVS (today's), and tried
looking at DMA again.

Host: Linux 2.6 (Fedora Core 2)
Guest: XP corp.
It still says the primary IDE channel is in PIO mode, and
doesn't seem any faster.

Host: Linux 2.6 (Fedora Core 2)
Guest: Linux 2.6
hdparm now reports that DMA is on for /dev/hda, and I can also
turn it on and off.  With it on, it's about twice as fast as
it is with it off.  So, this seems to work.

Cheers.

--
Jason Brittain


Jens Axboe wrote:
On Sun, Nov 07 2004, Hetz Ben Hamo wrote:

-    put_le16(p + 49, 1 << 9); /* LBA supported, no DMA */
+    put_le16(p + 49, 1 << 9 | 1 << 8); /* DMA and LBA supported */

Care to put all the changes in 1 patch please, so I can put it on my web site?


Here you go.

Index: hw/ide.c
===================================================================
RCS file: /cvsroot/qemu/qemu/hw/ide.c,v
retrieving revision 1.28
diff -u -r1.28 ide.c
--- hw/ide.c    9 Oct 2004 20:27:55 -0000       1.28
+++ hw/ide.c    7 Nov 2004 11:19:52 -0000
@@ -416,10 +416,10 @@
     put_le16(p + 47, 0x8000 | MAX_MULT_SECTORS);
 #endif
     put_le16(p + 48, 1); /* dword I/O */
-    put_le16(p + 49, 1 << 9); /* LBA supported, no DMA */
+    put_le16(p + 49, 1 << 9 | 1 << 8); /* DMA and LBA supported */
     put_le16(p + 51, 0x200); /* PIO transfer cycle */
     put_le16(p + 52, 0x200); /* DMA transfer cycle */
-    put_le16(p + 53, 1); /* words 54-58 are valid */
+    put_le16(p + 53, 1 | 1 << 2); /* words 54-58,88 are valid */
     put_le16(p + 54, s->cylinders);
     put_le16(p + 55, s->heads);
     put_le16(p + 56, s->sectors);
@@ -437,6 +437,8 @@
     put_le16(p + 85, (1 << 14));
     put_le16(p + 86, 0);
     put_le16(p + 87, (1 << 14));
+    put_le16(p + 88, 0x1f | (1 << 13));
+    put_le16(p + 93, 1 | (1 << 14) | 0x2000 | 0x4000);
 }
static void ide_atapi_identify(IDEState *s)
@@ -1560,7 +1562,7 @@
             case 0x82: /* write cache disable */
             case 0xaa: /* read look-ahead enable */
             case 0x55: /* read look-ahead disable */
-                s->status = READY_STAT;
+                s->status = READY_STAT | SEEK_STAT;
                 ide_set_irq(s);
                 break;
             default:







reply via email to

[Prev in Thread] Current Thread [Next in Thread]