[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC v5 77/86] sysbus: add a variant of sysbus_init_mmio_cb
From: |
Avi Kivity |
Subject: |
[Qemu-devel] [RFC v5 77/86] sysbus: add a variant of sysbus_init_mmio_cb with an unmap callback |
Date: |
Wed, 20 Jul 2011 19:50:27 +0300 |
sysbus_init_mmio_cb() uses the destructive IO_MEM_UNASSIGNED to remove a
region. Provide an alternative that calls an unmap callback, so the removal
may be done non-destructively.
Signed-off-by: Avi Kivity <address@hidden>
---
hw/sysbus.c | 15 +++++++++++++++
hw/sysbus.h | 3 +++
2 files changed, 18 insertions(+), 0 deletions(-)
diff --git a/hw/sysbus.c b/hw/sysbus.c
index ea442ac..64749e0 100644
--- a/hw/sysbus.c
+++ b/hw/sysbus.c
@@ -53,6 +53,8 @@ void sysbus_mmio_map(SysBusDevice *dev, int n,
target_phys_addr_t addr)
if (dev->mmio[n].memory) {
memory_region_del_subregion(get_system_memory(),
dev->mmio[n].memory);
+ } else if (dev->mmio[n].unmap) {
+ dev->mmio[n].unmap(dev, dev->mmio[n].addr);
} else {
cpu_register_physical_memory(dev->mmio[n].addr, dev->mmio[n].size,
IO_MEM_UNASSIGNED);
@@ -117,6 +119,19 @@ void sysbus_init_mmio_cb(SysBusDevice *dev,
target_phys_addr_t size,
dev->mmio[n].cb = cb;
}
+void sysbus_init_mmio_cb2(SysBusDevice *dev,
+ mmio_mapfunc cb, mmio_mapfunc unmap)
+{
+ int n;
+
+ assert(dev->num_mmio < QDEV_MAX_MMIO);
+ n = dev->num_mmio++;
+ dev->mmio[n].addr = -1;
+ dev->mmio[n].size = 0;
+ dev->mmio[n].cb = cb;
+ dev->mmio[n].unmap = unmap;
+}
+
void sysbus_init_mmio_region(SysBusDevice *dev, MemoryRegion *memory)
{
int n;
diff --git a/hw/sysbus.h b/hw/sysbus.h
index 5f62e2d..16fd969 100644
--- a/hw/sysbus.h
+++ b/hw/sysbus.h
@@ -23,6 +23,7 @@ struct SysBusDevice {
target_phys_addr_t addr;
target_phys_addr_t size;
mmio_mapfunc cb;
+ mmio_mapfunc unmap;
ram_addr_t iofunc;
MemoryRegion *memory;
} mmio[QDEV_MAX_MMIO];
@@ -48,6 +49,8 @@ void sysbus_init_mmio(SysBusDevice *dev, target_phys_addr_t
size,
ram_addr_t iofunc);
void sysbus_init_mmio_cb(SysBusDevice *dev, target_phys_addr_t size,
mmio_mapfunc cb);
+void sysbus_init_mmio_cb2(SysBusDevice *dev,
+ mmio_mapfunc cb, mmio_mapfunc unmap);
void sysbus_init_mmio_region(SysBusDevice *dev, MemoryRegion *memory);
void sysbus_init_irq(SysBusDevice *dev, qemu_irq *p);
void sysbus_pass_irq(SysBusDevice *dev, SysBusDevice *target);
--
1.7.5.3
- Re: [Qemu-devel] [RFC v5 86/86] 440fx: fix PAM, PCI holes, (continued)
- Re: [Qemu-devel] [RFC v5 86/86] 440fx: fix PAM, PCI holes, Avi Kivity, 2011/07/25
- Re: [Qemu-devel] [RFC v5 86/86] 440fx: fix PAM, PCI holes, Anthony Liguori, 2011/07/25
- Re: [Qemu-devel] [RFC v5 86/86] 440fx: fix PAM, PCI holes, Gleb Natapov, 2011/07/25
- Re: [Qemu-devel] [RFC v5 86/86] 440fx: fix PAM, PCI holes, Avi Kivity, 2011/07/25
- Re: [Qemu-devel] [RFC v5 86/86] 440fx: fix PAM, PCI holes, Anthony Liguori, 2011/07/25
- Re: [Qemu-devel] [RFC v5 86/86] 440fx: fix PAM, PCI holes, Avi Kivity, 2011/07/25
- Re: [Qemu-devel] [RFC v5 86/86] 440fx: fix PAM, PCI holes, Anthony Liguori, 2011/07/25
Re: [Qemu-devel] [RFC v5 86/86] 440fx: fix PAM, PCI holes, Eric Northup, 2011/07/25
[Qemu-devel] [RFC v5 11/86] memory: add backward compatibility for old mmio registration, Avi Kivity, 2011/07/20
[Qemu-devel] [RFC v5 77/86] sysbus: add a variant of sysbus_init_mmio_cb with an unmap callback,
Avi Kivity <=
[Qemu-devel] [RFC v5 37/86] e1000: convert to memory API, Avi Kivity, 2011/07/20
[Qemu-devel] [RFC v5 02/86] Hierarchical memory region API, Avi Kivity, 2011/07/20
[Qemu-devel] [RFC v5 41/86] ivshmem: convert to memory API, Avi Kivity, 2011/07/20
[Qemu-devel] [RFC v5 82/86] sysbus: remove sysbus_init_mmio_cb(), Avi Kivity, 2011/07/20
[Qemu-devel] [RFC v5 70/86] tusb6010: move declarations to new file tusb6010.h, Avi Kivity, 2011/07/20
[Qemu-devel] [RFC v5 17/86] pc: convert pc_memory_init() to memory API, Avi Kivity, 2011/07/20
[Qemu-devel] [RFC v5 07/86] memory: rename MemoryRegion::has_ram_addr to ::terminates, Avi Kivity, 2011/07/20
[Qemu-devel] [RFC v5 48/86] pcnet: convert to memory API, Avi Kivity, 2011/07/20
[Qemu-devel] [RFC v5 09/86] memory: I/O address space support, Avi Kivity, 2011/07/20
[Qemu-devel] [RFC v5 43/86] ahci: convert to memory API, Avi Kivity, 2011/07/20