From: acevest Date: Thu, 11 Nov 2021 06:29:51 +0000 (+0800) Subject: fix在qemu中pci ide ata硬盘DMA读不到数据的问题 X-Git-Url: http://zhaoyanbai.com/repos/%22http:/www.isc.org/icons/zlib_tech.html?a=commitdiff_plain;h=7c2c5ae72cab906dc1ae2f71e3620db9df984753;p=kernel.git fix在qemu中pci ide ata硬盘DMA读不到数据的问题 --- diff --git a/drivers/ide.c b/drivers/ide.c index d7ea5a2..fed4c4b 100644 --- a/drivers/ide.c +++ b/drivers/ide.c @@ -141,6 +141,15 @@ void ide_pci_init(pci_device_t *pci) { v = pci_read_config_word(pci_cmd(pci, PCI_COMMAND)); printk(" ide pci command %04x\n", v); + // 这一句非常重要,如果不加这一句 + // 在qemu中用DMA的方式读数据就会读不到数据,而只触是发中断,然后寄存器(Bus Master IDE Status + // Register)的值会一直是5 也就是INTERRUPT和和ACTIVE位是1,正常应该是4,也就是只有INTERRUPT位为1 + // 在bochs中则加不加这一句不会有影响,都能正常读到数据 + pci_write_config_word(v | PCI_COMMAND_MASTER, pci_cmd(pci, PCI_COMMAND)); + + v = pci_read_config_word(pci_cmd(pci, PCI_COMMAND)); + printk(" ide pci command %04x\n", v); + v = pci_read_config_byte(pci_cmd(pci, PCI_PROGIF)); printk(" ide pci program interface %02x\n", v);