qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCHv2 4/4] qemu/pci: reset device registers on bus reset


From: Michael S. Tsirkin
Subject: [Qemu-devel] [PATCHv2 4/4] qemu/pci: reset device registers on bus reset
Date: Wed, 16 Sep 2009 13:41:09 +0300
User-agent: Mutt/1.5.19 (2009-01-05)

Reset BARs and a couple of other registers on bus reset, as per PCI
spec.

Signed-off-by: Michael S. Tsirkin <address@hidden>
---
 hw/pci.c |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/hw/pci.c b/hw/pci.c
index 600df2f..b489d41 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -90,7 +90,20 @@ static inline int pci_bar(int reg)
 
 static void pci_device_reset(PCIDevice *dev)
 {
+    int r;
+
     memset(dev->irq_state, 0, sizeof dev->irq_state);
+    dev->config[PCI_COMMAND] &= ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY |
+                                  PCI_COMMAND_MASTER);
+    dev->config[PCI_CACHE_LINE_SIZE] = 0x0;
+    dev->config[PCI_INTERRUPT_LINE] = 0x0;
+    for (r = 0; r < PCI_NUM_REGIONS; ++r) {
+        if (!dev->io_regions[r].size) {
+            continue;
+        }
+        pci_set_long(dev->config + pci_bar(r), dev->io_regions[r].type);
+    }
+    pci_update_mappings(dev);
 }
 
 static void pci_bus_reset(void *opaque)
-- 
1.6.2.5




reply via email to

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