support gpxe roms
This commit is contained in:
parent
f10cadd207
commit
3afbf09fb0
52
qemu-bios-bigger-roms.patch
Normal file
52
qemu-bios-bigger-roms.patch
Normal file
@ -0,0 +1,52 @@
|
||||
diff --git a/bios/rombios.c b/bios/rombios.c
|
||||
index c4f6ccd..c4bfe60 100644
|
||||
--- a/bios/rombios.c
|
||||
+++ b/bios/rombios.c
|
||||
@@ -10196,22 +10196,43 @@ no_serial:
|
||||
ret
|
||||
|
||||
rom_checksum:
|
||||
- push ax
|
||||
- push bx
|
||||
- push cx
|
||||
+ pusha
|
||||
+ push ds
|
||||
+
|
||||
xor ax, ax
|
||||
xor bx, bx
|
||||
xor cx, cx
|
||||
+ xor dx, dx
|
||||
+
|
||||
mov ch, [2]
|
||||
shl cx, #1
|
||||
+
|
||||
+ jnc checksum_loop
|
||||
+ xchg dx, cx
|
||||
+ dec cx
|
||||
+
|
||||
checksum_loop:
|
||||
add al, [bx]
|
||||
inc bx
|
||||
loop checksum_loop
|
||||
+
|
||||
+ test dx, dx
|
||||
+ je checksum_out
|
||||
+
|
||||
+ add al, [bx]
|
||||
+ mov cx, dx
|
||||
+ mov dx, ds
|
||||
+ add dh, #0x10
|
||||
+ mov ds, dx
|
||||
+ xor dx, dx
|
||||
+ xor bx, bx
|
||||
+
|
||||
+ jmp checksum_loop
|
||||
+
|
||||
+checksum_out:
|
||||
and al, #0xff
|
||||
- pop cx
|
||||
- pop bx
|
||||
- pop ax
|
||||
+ pop ds
|
||||
+ popa
|
||||
ret
|
132
qemu-roms-more-room.patch
Normal file
132
qemu-roms-more-room.patch
Normal file
@ -0,0 +1,132 @@
|
||||
From 34b39c2ba6cc08239a707b52bfb2886df2aa8dec 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] 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 ]
|
||||
|
||||
Signed-off-by: Glauber Costa <glommer@redhat.com>
|
||||
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
|
||||
|
||||
|
||||
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6896 c046a42c-6fe2-441c-8c8c-71466251a162
|
||||
---
|
||||
hw/pc.c | 29 +++++++++++++++++++----------
|
||||
1 files changed, 19 insertions(+), 10 deletions(-)
|
||||
|
||||
Index: qemu-kvm-0.10/qemu/hw/pc.c
|
||||
===================================================================
|
||||
--- qemu-kvm-0.10.orig/qemu/hw/pc.c
|
||||
+++ qemu-kvm-0.10/qemu/hw/pc.c
|
||||
@@ -813,7 +813,7 @@ static void pc_init1(ram_addr_t 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;
|
||||
@@ -825,6 +825,7 @@ static void pc_init1(ram_addr_t 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;
|
||||
@@ -900,7 +901,7 @@ static void pc_init1(ram_addr_t 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);
|
||||
@@ -918,12 +919,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))
|
||||
@@ -944,14 +954,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);
|
||||
load_linux(phys_ram_base + option_rom_offset,
|
||||
kernel_filename, initrd_filename, kernel_cmdline);
|
||||
- cpu_register_physical_memory(0xd0000, TARGET_PAGE_SIZE,
|
||||
+ cpu_register_physical_memory(option_rom_start, TARGET_PAGE_SIZE,
|
||||
option_rom_offset | IO_MEM_ROM);
|
||||
- offset = TARGET_PAGE_SIZE;
|
||||
+ offset += TARGET_PAGE_SIZE;
|
||||
}
|
||||
|
||||
for (i = 0; i < nb_option_roms; i++) {
|
||||
@@ -961,13 +971,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;
|
||||
@@ -975,9 +985,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,7 +1,7 @@
|
||||
Summary: QEMU is a FAST! processor emulator
|
||||
Name: qemu
|
||||
Version: 0.10
|
||||
Release: 3%{?dist}
|
||||
Release: 4%{?dist}
|
||||
# I have mistakenly thought the revision name would be 1.0.
|
||||
# So 0.10 series get Epoch = 1
|
||||
Epoch: 2
|
||||
@ -33,6 +33,8 @@ Patch8: 08-vnc-acl-mgmt.patch
|
||||
Patch9: kvm-upstream-ppc.patch
|
||||
Patch10: qemu-fix-debuginfo.patch
|
||||
Patch11: qemu-fix-gcc.patch
|
||||
Patch12: qemu-roms-more-room.patch
|
||||
Patch13: qemu-bios-bigger-roms.patch
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
BuildRequires: SDL-devel zlib-devel which texi2html gnutls-devel cyrus-sasl-devel
|
||||
@ -208,6 +210,8 @@ such as kvmtrace and kvm_stat.
|
||||
%patch9 -p1
|
||||
%patch10 -p1
|
||||
%patch11 -p1
|
||||
%patch12 -p1
|
||||
%patch13 -p1
|
||||
|
||||
%build
|
||||
# systems like rhel build system does not have a recent enough linker so
|
||||
@ -451,6 +455,9 @@ fi
|
||||
%{_mandir}/man1/qemu-img.1*
|
||||
|
||||
%changelog
|
||||
* Thu Apr 02 2009 Glauber Costa <glommer@redhat.com> - 2:0.10-4
|
||||
- Support botting gpxe roms.
|
||||
|
||||
* Wed Apr 01 2009 Glauber Costa <glommer@redhat.com> - 2:0.10-2
|
||||
- added missing patch. love for CVS.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user