http://git.et.redhat.com/?p=qemu-fedora.git Update the current patches with ones produced using format-patch, no real changes here. Drop a couple of patches which aren't referenced in the spec file
137 lines
5.5 KiB
Diff
137 lines
5.5 KiB
Diff
From 0a61b11b0e5e5a39598e7edc900ba272fd407877 Mon Sep 17 00:00:00 2001
|
|
From: aliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>
|
|
Date: Sat, 28 Mar 2009 17:28:45 +0000
|
|
Subject: [PATCH 11/18] get roms more room. (Glauber Costa)
|
|
|
|
This patch increases by 50 % the size available for option roms.
|
|
The main motivator is that some roms grew bigger than the 64k we
|
|
currently allocate for them (Hey, it's 2009!)
|
|
|
|
One example is the gpxe project, that produces some roms with 69k,
|
|
70k, etc. The space proposed by this patch actually makes it as
|
|
big as 84k. Probably still a fit for some time.
|
|
|
|
But there is no free lunch. This space must come from somewhere,
|
|
and we take it from vga rom space. Currently, our vga roms are
|
|
around 35k in size. With this patch, option rom space will begin
|
|
just after vga ends, aligned to the next 2k boundary.
|
|
|
|
Technicaly, we could do the same with the uper space (the bios itself),
|
|
but since bochs bios is already 128 k in size, I don't see an
|
|
urgent need to do it.
|
|
|
|
[ fix case for vgabioses smaller than 30k, by Carl-Daniel Hailfinger ]
|
|
|
|
(cherry picked from commit 34b39c2ba6cc08239a707b52bfb2886df2aa8dec)
|
|
|
|
Signed-off-by: Glauber Costa <glommer@redhat.com>
|
|
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
|
|
Signed-off-by: Mark McLoughlin <markmc@redhat.com>
|
|
---
|
|
hw/pc.c | 33 +++++++++++++++++++++------------
|
|
1 files changed, 21 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/hw/pc.c b/hw/pc.c
|
|
index 1b8d47a..413da6f 100644
|
|
--- a/hw/pc.c
|
|
+++ b/hw/pc.c
|
|
@@ -818,7 +818,7 @@ static void pc_init1(ram_addr_t ram_size, int vga_ram_size,
|
|
{
|
|
char buf[1024];
|
|
int ret, linux_boot, i;
|
|
- ram_addr_t ram_addr, vga_ram_addr, bios_offset, vga_bios_offset;
|
|
+ ram_addr_t ram_addr, vga_ram_addr, bios_offset, vga_bios_offset, option_rom_start = 0;
|
|
ram_addr_t below_4g_mem_size, above_4g_mem_size = 0;
|
|
int bios_size, isa_bios_size, vga_bios_size;
|
|
int pci_option_rom_offset;
|
|
@@ -830,6 +830,7 @@ static void pc_init1(ram_addr_t ram_size, int vga_ram_size,
|
|
int index;
|
|
BlockDriverState *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
|
|
BlockDriverState *fd[MAX_FD];
|
|
+ int using_vga = cirrus_vga_enabled || std_vga_enabled || vmsvga_enabled;
|
|
|
|
if (ram_size >= 0xe0000000 ) {
|
|
above_4g_mem_size = ram_size - 0xe0000000;
|
|
@@ -905,7 +906,7 @@ static void pc_init1(ram_addr_t ram_size, int vga_ram_size,
|
|
exit(1);
|
|
}
|
|
|
|
- if (cirrus_vga_enabled || std_vga_enabled || vmsvga_enabled) {
|
|
+ if (using_vga) {
|
|
/* VGA BIOS load */
|
|
if (cirrus_vga_enabled) {
|
|
snprintf(buf, sizeof(buf), "%s/%s", bios_dir, VGABIOS_CIRRUS_FILENAME);
|
|
@@ -923,12 +924,21 @@ vga_bios_error:
|
|
fprintf(stderr, "qemu: could not load VGA BIOS '%s'\n", buf);
|
|
exit(1);
|
|
}
|
|
+ /* Round up vga bios size to the next 2k boundary */
|
|
+ vga_bios_size = (vga_bios_size + 2047) & ~2047;
|
|
+ option_rom_start = 0xc0000 + vga_bios_size;
|
|
|
|
/* setup basic memory access */
|
|
- cpu_register_physical_memory(0xc0000, 0x10000,
|
|
+ cpu_register_physical_memory(0xc0000, vga_bios_size,
|
|
vga_bios_offset | IO_MEM_ROM);
|
|
}
|
|
|
|
+ /* No point in placing option roms before this address, since bochs bios
|
|
+ * will only start looking for it at 0xc8000 */
|
|
+ if (option_rom_start < 0xc8000)
|
|
+ option_rom_start = 0xc8000;
|
|
+
|
|
+
|
|
/* map the last 128KB of the BIOS in ISA space */
|
|
isa_bios_size = bios_size;
|
|
if (isa_bios_size > (128 * 1024))
|
|
@@ -949,14 +959,14 @@ vga_bios_error:
|
|
ram_addr_t option_rom_offset;
|
|
int size, offset;
|
|
|
|
- offset = 0;
|
|
+ offset = option_rom_start;
|
|
if (linux_boot) {
|
|
option_rom_offset = qemu_ram_alloc(TARGET_PAGE_SIZE);
|
|
- cpu_register_physical_memory(0xd0000, TARGET_PAGE_SIZE,
|
|
+ cpu_register_physical_memory(option_rom_start, TARGET_PAGE_SIZE,
|
|
option_rom_offset);
|
|
- load_linux(0xd0000,
|
|
+ load_linux(option_rom_start,
|
|
kernel_filename, initrd_filename, kernel_cmdline, below_4g_mem_size);
|
|
- offset = TARGET_PAGE_SIZE;
|
|
+ offset += TARGET_PAGE_SIZE;
|
|
}
|
|
|
|
for (i = 0; i < nb_option_roms; i++) {
|
|
@@ -966,13 +976,13 @@ vga_bios_error:
|
|
option_rom[i]);
|
|
exit(1);
|
|
}
|
|
- if (size > (0x10000 - offset))
|
|
+ if (size > (0xe0000 - offset))
|
|
goto option_rom_error;
|
|
option_rom_offset = qemu_ram_alloc(size);
|
|
ret = load_image(option_rom[i], phys_ram_base + option_rom_offset);
|
|
if (ret != size) {
|
|
option_rom_error:
|
|
- fprintf(stderr, "Too many option ROMS\n");
|
|
+ fprintf(stderr, "Could not fit %soption roms in available space\n", using_vga ? "VGA bios and " : "");
|
|
exit(1);
|
|
}
|
|
size = (size + 4095) & ~4095;
|
|
@@ -980,9 +990,8 @@ vga_bios_error:
|
|
initialization, and (optionally) marked readonly by the BIOS
|
|
before INT 19h. See the PNPBIOS specification, appendix B.
|
|
DDIM support is mandatory for proper PCI expansion ROM support. */
|
|
- cpu_register_physical_memory(0xd0000 + offset,
|
|
- size, option_rom_offset /* | IO_MEM_ROM */);
|
|
- option_rom_setup_reset(0xd0000 + offset, size);
|
|
+ cpu_register_physical_memory(offset, size, option_rom_offset /* | IO_MEM_ROM */);
|
|
+ option_rom_setup_reset(offset, size);
|
|
offset += size;
|
|
}
|
|
pci_option_rom_offset = offset;
|
|
--
|
|
1.6.2.2
|
|
|