# Fri Feb 11 17:54:51 2011 +0000
# qemu-xen: fix segfault with empty cdroms
+# Short answer -- do not enable this unless you know what you are
+# doing and are prepared for some pain.
+
+# SeaBIOS integration is a work in progress. Before enabling this
+# option you must clone git://git.qemu.org/seabios.git/, possibly add
+# some development patches and then build it yourself before pointing
+# this variable to it (using an absolute path).
+#
+# Note that using SeaBIOS requires the use the upstream qemu as the
+# device model.
+SEABIOS_DIR ?=
+
# Optional components
XENSTAT_XENTOP ?= y
VTPM_TOOLS ?= n
ROMBIOS_DIR := ../rombios
ifneq ($(ROMBIOS_DIR),)
OBJS += rombios.o
+CFLAGS += -DENABLE_ROMBIOS
ROMBIOS_ROM := $(ROMBIOS_DIR)/BIOS-bochs-latest
endif
+ifneq ($(SEABIOS_DIR),)
+OBJS += seabios.o
+CFLAGS += -DENABLE_SEABIOS
+SEABIOS_ROM := $(SEABIOS_DIR)/out/bios.bin
+endif
+
STDVGA_ROM := ../vgabios/VGABIOS-lgpl-latest.bin
ifeq ($(CIRRUSVGA_DEBUG),y)
CIRRUSVGA_ROM := ../vgabios/VGABIOS-lgpl-latest.cirrus.debug.bin
all: subdirs-all
$(MAKE) hvmloader
-rombios.o hvmloader.o: roms.inc
+rombios.o seabios.o hvmloader.o: roms.inc
smbios.o: CFLAGS += -D__SMBIOS_DATE__="\"$(shell date +%m/%d/%Y)\""
hvmloader: $(OBJS) acpi/acpi.a
$(OBJCOPY) hvmloader.tmp hvmloader
rm -f hvmloader.tmp
-roms.inc: $(ROMBIOS_ROM) $(STDVGA_ROM) $(CIRRUSVGA_ROM) ../etherboot/eb-roms.h
+roms.inc: $(ROMBIOS_ROM) $(SEABIOS_ROM) $(STDVGA_ROM) $(CIRRUSVGA_ROM) ../etherboot/eb-roms.h
echo "/* Autogenerated file. DO NOT EDIT */" > $@.new
ifneq ($(ROMBIOS_ROM),)
echo "#endif" >> $@.new
endif
+ifneq ($(SEABIOS_ROM),)
+ echo "#ifdef ROM_INCLUDE_SEABIOS" >> $@.new
+ sh ./mkhex seabios $(SEABIOS_ROM) >> $@.new
+ echo "#endif" >> $@.new
+endif
+
ifneq ($(STDVGA_ROM),)
echo "#ifdef ROM_INCLUDE_VGABIOS" >> $@.new
sh ./mkhex vgabios_stdvga $(STDVGA_ROM) >> $@.new
--- /dev/null
+#ifndef __HVMLOADER_CONFIG_SEABIOS_H__
+#define __HVMLOADER_CONFIG_SEABIOS_H__
+
+#define OPTIONROM_PHYSICAL_ADDRESS 0x000C8000
+#define OPTIONROM_PHYSICAL_END 0x000E0000
+
+#define SEABIOS_PHYSICAL_ADDRESS 0x000E0000
+
+#endif /* __HVMLOADER_CONFIG_SEABIOS_H__ */
};
extern struct bios_config rombios_config;
+extern struct bios_config seabios_config;
#define PAGE_SHIFT 12
#define PAGE_SIZE (1ul << PAGE_SHIFT)
const char *key;
const struct bios_config *bios;
} bios_configs[] = {
+#ifdef ENABLE_ROMBIOS
{ "rombios", &rombios_config, },
+#endif
+#ifdef ENABLE_SEABIOS
+ { "seabios", &seabios_config, },
+#endif
{ NULL, NULL }
};
--- /dev/null
+/*
+ * HVM SeaBIOS support.
+ *
+ * Leendert van Doorn, leendert@watson.ibm.com
+ * Copyright (c) 2005, International Business Machines Corporation.
+ * Copyright (c) 2006, Keir Fraser, XenSource Inc.
+ * Copyright (c) 2011, Citrix Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place - Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+#include "config.h"
+#include "config-seabios.h"
+
+#include "util.h"
+
+#define ROM_INCLUDE_SEABIOS
+#include "roms.inc"
+
+static void seabios_pci_setup(void)
+{
+ virtual_vga = VGA_cirrus;
+}
+
+//BUILD_BUG_ON(sizeof(seabios) > (0x00100000U - SEABIOS_PHYSICAL_ADDRESS));
+
+struct bios_config seabios_config = {
+ .name = "SeaBIOS",
+
+ .image = seabios,
+ .image_size = sizeof(seabios),
+
+ .bios_address = SEABIOS_PHYSICAL_ADDRESS,
+
+ .smbios_start = 0,
+ .smbios_end = 0,
+
+ .optionrom_start = OPTIONROM_PHYSICAL_ADDRESS,
+ .optionrom_end = OPTIONROM_PHYSICAL_END,
+
+ .acpi_start = 0,
+
+ .bios_info_setup = NULL,
+
+ .apic_setup = NULL,
+ .pci_setup = seabios_pci_setup,
+ .smp_setup = NULL,
+
+ .vm86_setup = NULL,
+ .e820_setup = NULL,
+
+ .acpi_build_tables = NULL,
+ .create_mp_tables = NULL,
+};
+
+/*
+ * Local variables:
+ * mode: C
+ * c-set-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
break;
}
}
-
return dm;
}
{
switch (info->device_model_version) {
case 1: return libxl__strdup(gc, "rombios");
- case 2: return libxl__strdup(gc, "rombios");
+ case 2: return libxl__strdup(gc, "seabios");
default:return NULL;
}
}