QEMU set irq0override in fw_cfg
authorJes Sorensen <jes@sgi.com>
Thu, 6 Aug 2009 14:25:50 +0000 (16:25 +0200)
committerAnthony Liguori <aliguori@us.ibm.com>
Mon, 24 Aug 2009 13:01:41 +0000 (08:01 -0500)
Hi,

After discussing the issue with Avi, Gleb and a couple others on irq,
we came to the conclusion that it is preferred to have QEMU request
features from the BIOS, rather than notifying the BIOS that it is
running on QEMU or KVM. This way memory ranges can change etc. and
an older BIOS will continue to work on newer QEMU if it receives the
info as a fw_cfg value.

This one also matches what qemu-kvm does for irq0override, except I
haven't made it configurable. I leave that as an exercise for whoever
would be interested in switching off irq0override.

Thanks,
Jes

Set irq0 override in fw_cfg, informing the BIOS that QEMU expects
override on irq0. This matches qemu-kvm, and will help sharing a
single BIOS binary.

Signed-off-by: Jes Sorensen <jes@sgi.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
hw/pc.c
sysemu.h
vl.c

diff --git a/hw/pc.c b/hw/pc.c
index cc6e7e8273d8c095383af67dc326ed46b5220e60..09252ba277e3f41f7d941e7837cd00107f0bcd4c 100644 (file)
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -54,6 +54,7 @@
 #define BIOS_CFG_IOPORT 0x510
 #define FW_CFG_ACPI_TABLES (FW_CFG_ARCH_LOCAL + 0)
 #define FW_CFG_SMBIOS_ENTRIES (FW_CFG_ARCH_LOCAL + 1)
+#define FW_CFG_IRQ0_OVERRIDE (FW_CFG_ARCH_LOCAL + 2)
 
 #define MAX_IDE_BUS 2
 
@@ -476,6 +477,7 @@ static void *bochs_bios_init(void)
     fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size);
     fw_cfg_add_bytes(fw_cfg, FW_CFG_ACPI_TABLES, (uint8_t *)acpi_tables,
                      acpi_tables_len);
+    fw_cfg_add_bytes(fw_cfg, FW_CFG_IRQ0_OVERRIDE, &irq0override, 1);
 
     smbios_table = smbios_get_table(&smbios_len);
     if (smbios_table)
index 30e5e783d5add93888a8bf67f72019ec1242173f..1ed2ad033695a34f0c467f1748ce31625f215bfb 100644 (file)
--- a/sysemu.h
+++ b/sysemu.h
@@ -113,6 +113,7 @@ extern int vga_interface_type;
 extern int graphic_width;
 extern int graphic_height;
 extern int graphic_depth;
+extern uint8_t irq0override;
 extern DisplayType display_type;
 extern const char *keyboard_layout;
 extern int win2k_install_hack;
diff --git a/vl.c b/vl.c
index 0bcc0c971a25016fd6fd1531fd5b2a5929321041..91d3f78c7d3ed513d9b8c686cd6431e1d6342967 100644 (file)
--- a/vl.c
+++ b/vl.c
@@ -227,6 +227,7 @@ int no_reboot = 0;
 int no_shutdown = 0;
 int cursor_hide = 1;
 int graphic_rotate = 0;
+uint8_t irq0override = 1;
 #ifndef _WIN32
 int daemonize = 0;
 #endif