From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KJ6nC-00057O-6B for qemu-devel@nongnu.org; Wed, 16 Jul 2008 09:11:38 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KJ6n9-00056f-8p for qemu-devel@nongnu.org; Wed, 16 Jul 2008 09:11:37 -0400 Received: from [199.232.76.173] (port=38530 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KJ6n9-00056c-1H for qemu-devel@nongnu.org; Wed, 16 Jul 2008 09:11:35 -0400 Received: from smtp.eu.citrix.com ([62.200.22.115]:10834) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KJ6n8-0000wh-NB for qemu-devel@nongnu.org; Wed, 16 Jul 2008 09:11:34 -0400 Message-ID: <487DF39F.5020909@eu.citrix.com> Date: Wed, 16 Jul 2008 14:11:59 +0100 From: Stefano Stabellini MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] [PATCH] ide: enable single word DMA Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Ian Jackson Windows XP doesn't enable DMA by default on dvd-rom devices emulated by QEMU. Furthermore if I try to manually enable DMA using Device Manager, the DMA mode chosen by Windows is inexplicably one of the few modes unsupported by QEMU: single word mode 2. Since on virtual hardware single word DMA is not really slower than multi word DMA, it makes sense for QEMU to support single word dma as well. This patch does exactly this. Signed-off-by: Stefano Stabellini --- diff --git a/hw/ide.c b/hw/ide.c index 337621d..c2dfd54 100644 --- a/hw/ide.c +++ b/hw/ide.c @@ -569,6 +569,7 @@ static void ide_identify(IDEState *s) put_le16(p + 59, 0x100 | s->mult_sectors); put_le16(p + 60, s->nb_sectors); put_le16(p + 61, s->nb_sectors >> 16); + put_le16(p + 62, 0x07); /* single word dma0-2 supported */ put_le16(p + 63, 0x07); /* mdma0-2 supported */ put_le16(p + 65, 120); put_le16(p + 66, 120); @@ -620,6 +621,7 @@ static void ide_atapi_identify(IDEState *s) #ifdef USE_DMA_CDROM put_le16(p + 49, 1 << 9 | 1 << 8); /* DMA and LBA supported */ put_le16(p + 53, 7); /* words 64-70, 54-58, 88 valid */ + put_le16(p + 62, 7); /* single word dma0-2 supported */ put_le16(p + 63, 7); /* mdma0-2 supported */ put_le16(p + 64, 0x3f); /* PIO modes supported */ #else @@ -2197,6 +2199,10 @@ static void ide_ioport_write(void *opaque, uint32_t addr, uint32_t val) put_le16(s->identify_data + 63,0x07); put_le16(s->identify_data + 88,0x3f); break; + case 0x02: /* sigle word dma mode*/ + put_le16(s->identify_data + 62,0x07 | (1 << (val + 8))); + put_le16(s->identify_data + 88,0x3f); + break; case 0x04: /* mdma mode */ put_le16(s->identify_data + 63,0x07 | (1 << (val + 8))); put_le16(s->identify_data + 88,0x3f);