[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 1/3] Add PhysicalMemoryRegion type
From: |
Avi Kivity |
Subject: |
[Qemu-devel] [PATCH 1/3] Add PhysicalMemoryRegion type |
Date: |
Sun, 24 May 2009 12:29:33 +0300 |
A PhysicalMemoryRegion represents a region in the physical address space.
Cuurently supported operations include creation and destruction.
Signed-off-by: Avi Kivity <address@hidden>
---
cpu-all.h | 13 +++++++++++++
exec.c | 42 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 55 insertions(+), 0 deletions(-)
diff --git a/cpu-all.h b/cpu-all.h
index 0df54b6..dc9c8b7 100644
--- a/cpu-all.h
+++ b/cpu-all.h
@@ -893,6 +893,19 @@ extern ram_addr_t last_ram_offset;
typedef void CPUWriteMemoryFunc(void *opaque, target_phys_addr_t addr,
uint32_t value);
typedef uint32_t CPUReadMemoryFunc(void *opaque, target_phys_addr_t addr);
+typedef struct PhysicalMemoryRegion PhysicalMemoryRegion;
+
+PhysicalMemoryRegion *physical_memory_region_register(
+ target_phys_addr_t start_addr,
+ target_phys_addr_t size,
+ ram_addr_t ram_addr);
+PhysicalMemoryRegion *physical_memory_region_register_offset(
+ target_phys_addr_t start_addr,
+ target_phys_addr_t size,
+ ram_addr_t ram_addr,
+ ram_addr_t region_offset);
+void physical_memory_region_unregister(PhysicalMemoryRegion *pmr);
+
void cpu_register_physical_memory_offset(target_phys_addr_t start_addr,
ram_addr_t size,
ram_addr_t phys_offset,
diff --git a/exec.c b/exec.c
index c5c9280..03c03dc 100644
--- a/exec.c
+++ b/exec.c
@@ -2418,6 +2418,48 @@ void
cpu_register_physical_memory_offset(target_phys_addr_t start_addr,
}
}
+struct PhysicalMemoryRegion {
+ target_phys_addr_t start_addr;
+ target_phys_addr_t size;
+ ram_addr_t ram_addr;
+ ram_addr_t region_offset;
+};
+
+PhysicalMemoryRegion *physical_memory_region_register(
+ target_phys_addr_t start_addr,
+ target_phys_addr_t size,
+ ram_addr_t ram_addr)
+{
+ return physical_memory_region_register_offset(start_addr, size, ram_addr,
0);
+}
+
+PhysicalMemoryRegion *physical_memory_region_register_offset(
+ target_phys_addr_t start_addr,
+ target_phys_addr_t size,
+ ram_addr_t ram_addr,
+ ram_addr_t region_offset)
+{
+ PhysicalMemoryRegion *pmr = (PhysicalMemoryRegion
*)qemu_malloc(sizeof(*pmr));
+
+ pmr->start_addr = start_addr;
+ pmr->size = size;
+ pmr->ram_addr = ram_addr;
+ pmr->region_offset = region_offset;
+
+ cpu_register_physical_memory_offset(start_addr, size, ram_addr,
region_offset);
+
+ return pmr;
+}
+
+void physical_memory_region_unregister(PhysicalMemoryRegion *pmr)
+{
+ if (kvm_enabled()) {
+ kvm_uncoalesce_mmio_region(pmr->start_addr, pmr->size);
+ }
+ cpu_register_physical_memory(pmr->start_addr, pmr->size,
IO_MEM_UNASSIGNED);
+ qemu_free(pmr);
+}
+
/* XXX: temporary until new memory mapping API */
ram_addr_t cpu_get_physical_page_desc(target_phys_addr_t addr)
{
--
1.6.0.6
- [Qemu-devel] [PATCH 0/3] Object-based physical memory management, Avi Kivity, 2009/05/24
- [Qemu-devel] [PATCH 1/3] Add PhysicalMemoryRegion type,
Avi Kivity <=
- [Qemu-devel] [PATCH 2/3] Add PCI memory region registration, Avi Kivity, 2009/05/24
- Re: [Qemu-devel] [PATCH 2/3] Add PCI memory region registration, Anthony Liguori, 2009/05/27
- Re: [Qemu-devel] [PATCH 2/3] Add PCI memory region registration, Avi Kivity, 2009/05/27
- Re: [Qemu-devel] [PATCH 2/3] Add PCI memory region registration, Anthony Liguori, 2009/05/27
- Re: [Qemu-devel] [PATCH 2/3] Add PCI memory region registration, Avi Kivity, 2009/05/27
- Re: [Qemu-devel] [PATCH 2/3] Add PCI memory region registration, Anthony Liguori, 2009/05/27
- Re: [Qemu-devel] [PATCH 2/3] Add PCI memory region registration, Christoph Hellwig, 2009/05/31
- Re: [Qemu-devel] [PATCH 2/3] Add PCI memory region registration, Avi Kivity, 2009/05/31