[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 1/4] pc: Unbreak ROM mapping for ISA machine
From: |
Jan Kiszka |
Subject: |
[Qemu-devel] [PATCH 1/4] pc: Unbreak ROM mapping for ISA machine |
Date: |
Wed, 21 Sep 2011 20:49:29 +0200 |
From: Jan Kiszka <address@hidden>
This is based on the original fix by Hervé Poussineau: pc_memory_init
actually takes a memory region for mapping BIOS and extension ROMs. That
equals the PCI memory region if PCI is available, but must be system
memory in the ISA case.
Signed-off-by: Jan Kiszka <address@hidden>
---
hw/pc.c | 8 ++++----
hw/pc.h | 2 +-
hw/pc_piix.c | 13 ++++++++++---
3 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/hw/pc.c b/hw/pc.c
index fcaae9f..992c61d 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -962,7 +962,7 @@ void pc_memory_init(MemoryRegion *system_memory,
const char *initrd_filename,
ram_addr_t below_4g_mem_size,
ram_addr_t above_4g_mem_size,
- MemoryRegion *pci_memory,
+ MemoryRegion *rom_memory,
MemoryRegion **ram_memory)
{
char *filename;
@@ -1026,7 +1026,7 @@ void pc_memory_init(MemoryRegion *system_memory,
isa_bios = g_malloc(sizeof(*isa_bios));
memory_region_init_alias(isa_bios, "isa-bios", bios,
bios_size - isa_bios_size, isa_bios_size);
- memory_region_add_subregion_overlap(pci_memory,
+ memory_region_add_subregion_overlap(rom_memory,
0x100000 - isa_bios_size,
isa_bios,
1);
@@ -1034,13 +1034,13 @@ void pc_memory_init(MemoryRegion *system_memory,
option_rom_mr = g_malloc(sizeof(*option_rom_mr));
memory_region_init_ram(option_rom_mr, NULL, "pc.rom", PC_ROM_SIZE);
- memory_region_add_subregion_overlap(pci_memory,
+ memory_region_add_subregion_overlap(rom_memory,
PC_ROM_MIN_VGA,
option_rom_mr,
1);
/* map all the bios at the top of memory */
- memory_region_add_subregion(pci_memory,
+ memory_region_add_subregion(rom_memory,
(uint32_t)(-bios_size),
bios);
diff --git a/hw/pc.h b/hw/pc.h
index 958c77d..36749b0 100644
--- a/hw/pc.h
+++ b/hw/pc.h
@@ -137,7 +137,7 @@ void pc_memory_init(MemoryRegion *system_memory,
const char *initrd_filename,
ram_addr_t below_4g_mem_size,
ram_addr_t above_4g_mem_size,
- MemoryRegion *pci_memory,
+ MemoryRegion *rom_memory,
MemoryRegion **ram_memory);
qemu_irq *pc_allocate_cpu_irq(void);
void pc_vga_init(PCIBus *pci_bus);
diff --git a/hw/pc_piix.c b/hw/pc_piix.c
index 75d96d9..52939f5 100644
--- a/hw/pc_piix.c
+++ b/hw/pc_piix.c
@@ -97,6 +97,7 @@ static void pc_init1(MemoryRegion *system_memory,
ISADevice *rtc_state;
MemoryRegion *ram_memory;
MemoryRegion *pci_memory;
+ MemoryRegion *rom_memory;
pc_cpus_init(cpu_model);
@@ -112,15 +113,21 @@ static void pc_init1(MemoryRegion *system_memory,
below_4g_mem_size = ram_size;
}
- pci_memory = g_new(MemoryRegion, 1);
- memory_region_init(pci_memory, "pci", INT64_MAX);
+ if (pci_enabled) {
+ pci_memory = g_new(MemoryRegion, 1);
+ memory_region_init(pci_memory, "pci", INT64_MAX);
+ rom_memory = pci_memory;
+ } else {
+ pci_memory = NULL;
+ rom_memory = system_memory;
+ }
/* allocate ram and load rom/bios */
if (!xen_enabled()) {
pc_memory_init(system_memory,
kernel_filename, kernel_cmdline, initrd_filename,
below_4g_mem_size, above_4g_mem_size,
- pci_memory, &ram_memory);
+ rom_memory, &ram_memory);
}
if (!xen_enabled()) {
--
1.7.3.4