diff --git a/x86/boot.c b/x86/boot.c index 9383824..c434030 100644 --- a/x86/boot.c +++ b/x86/boot.c @@ -25,10 +25,10 @@ bool kvm__load_firmware(struct kvm *kvm, const char *firmware_filename) if (fstat(fd, &st)) return false; - if (st.st_size > MB_BIOS_SIZE) + if (st.st_size > MB_FIRMWARE_BIOS_SIZE) die("firmware image %s is too big to fit in memory (%lu KB).\n", firmware_filename, st.st_size / 1024); - p = guest_flat_to_host(kvm, MB_BIOS_BEGIN); + p = guest_flat_to_host(kvm, MB_FIRMWARE_BIOS_BEGIN); while ((nr = read(fd, p, st.st_size)) > 0) p += nr; diff --git a/x86/include/kvm/bios.h b/x86/include/kvm/bios.h index 9d677ae..ec7ed71 100644 --- a/x86/include/kvm/bios.h +++ b/x86/include/kvm/bios.h @@ -10,6 +10,7 @@ * EBDA area 0x0009FC00 0x0009FFFF * VIDEO RAM 0x000A0000 0x000BFFFF * VIDEO ROM (BIOS) 0x000C0000 0x000C7FFF + * ROMs & unus. space (mapped hw & misc)0x000C8000 0x000EFFFF 160 KiB (typically) * Motherboard BIOS 0x000F0000 0x000FFFFF * Extended Memory 0x00100000 0xFEBFFFFF * Reserved (configs, ACPI, PnP, etc) 0xFEC00000 0xFFFFFFFF @@ -26,9 +27,12 @@ #define E820_MAP_START EBDA_START -#define MB_BIOS_BEGIN 0x000e0000 +#define MB_BIOS_BEGIN 0x000f0000 +#define MB_FIRMWARE_BIOS_BEGIN 0x000e0000 #define MB_BIOS_END 0x000fffff + #define MB_BIOS_SIZE (MB_BIOS_END - MB_BIOS_BEGIN + 1) +#define MB_FIRMWARE_BIOS_SIZE (MB_BIOS_END - MB_FIRMWARE_BIOS_BEGIN + 1) #define VGA_RAM_BEGIN 0x000a0000 #define VGA_RAM_END 0x000bffff