From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JmISp-0002Sq-Iw for qemu-devel@nongnu.org; Wed, 16 Apr 2008 20:58:59 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JmISp-0002SR-00 for qemu-devel@nongnu.org; Wed, 16 Apr 2008 20:58:59 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JmISo-0002SB-OV for qemu-devel@nongnu.org; Wed, 16 Apr 2008 20:58:58 -0400 Received: from mx1.redhat.com ([66.187.233.31]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1JmISo-0001pL-4P for qemu-devel@nongnu.org; Wed, 16 Apr 2008 20:58:58 -0400 From: Glauber de Oliveira Costa Date: Thu, 17 Apr 2008 01:42:54 -0700 Message-Id: <12084217802688-git-send-email-gcosta@redhat.com> In-Reply-To: <12084217783693-git-send-email-gcosta@redhat.com> References: <12084217752458-git-send-email-gcosta@redhat.com> <12084217783693-git-send-email-gcosta@redhat.com> Subject: [Qemu-devel] [PATCH 2/3] map regions as registered Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: kvm-devel@lists.sourceforge.net Cc: amit.shah@qumranet.com, glommer@gmail.com, mtosatti@redhat.com, qemu-devel@nongnu.org, Glauber Costa , aurelien@aurel32.net From: Glauber Costa map which io registers where already sucessfuly registered Signed-off-by: Glauber Costa --- qemu/hw/pci.c | 5 +++-- qemu/hw/pci.h | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/qemu/hw/pci.c b/qemu/hw/pci.c index 1937408..7e4ce2d 100644 --- a/qemu/hw/pci.c +++ b/qemu/hw/pci.c @@ -199,7 +199,7 @@ static void pci_unregister_io_regions(PCIDevice *pci_dev) for(i = 0; i < PCI_NUM_REGIONS; i++) { r = &pci_dev->io_regions[i]; - if (!r->size) + if ((!r->size) || (r->status != PCI_STATUS_REGISTERED)) continue; if (r->type == PCI_ADDRESS_SPACE_IO) { isa_unassign_ioport(r->addr, r->size); @@ -321,7 +321,7 @@ static void pci_update_mappings(PCIDevice *d) } else { isa_unassign_ioport(r->addr, r->size); } - } else { + } else if (r->status == PCI_STATUS_REGISTERED) { cpu_register_physical_memory(pci_to_cpu_addr(r->addr), r->size, IO_MEM_UNASSIGNED); @@ -330,6 +330,7 @@ static void pci_update_mappings(PCIDevice *d) r->addr = new_addr; if (r->addr != -1) { r->map_func(d, i, r->addr, r->size, r->type); + r->status = PCI_STATUS_REGISTERED; } } } diff --git a/qemu/hw/pci.h b/qemu/hw/pci.h index e11fbbf..6350ad2 100644 --- a/qemu/hw/pci.h +++ b/qemu/hw/pci.h @@ -27,9 +27,12 @@ typedef struct PCIIORegion { uint32_t addr; /* current PCI mapping address. -1 means not mapped */ uint32_t size; uint8_t type; + uint8_t status; PCIMapIORegionFunc *map_func; } PCIIORegion; +#define PCI_STATUS_REGISTERED 1 + #define PCI_ROM_SLOT 6 #define PCI_NUM_REGIONS 7 -- 1.5.5