Mailing List Archive

[PATCH 04 of 32] tools: support SeaBIOS. Use by default when upstream qemu is configured
# HG changeset patch
# User Ian Campbell <ian.campbell@citrix.com>
# Date 1303133840 -3600
# Node ID c0fdb5f1b76c8fd141208f8df15816a6d04fc5d4
# Parent 9f86b6a9e01723f9ed642b5f188655ae49d0936e
tools: support SeaBIOS. Use by default when upstream qemu is configured.

The SeaBIOS integration here is only semi-complete and is targetted at
developers and very early adopters who can be expected to cope with
some rough edges. In particular the user must clone, patch as
necessary and compile SeaBIOS themselves since this patchset does not
cover any of that (in the same way we currently do not integrate
upstream qemu clone+build). Include a big comment to that effect next
to the Config.mk option.

Many of the bios_config callback functions are not yet used by
SeaBIOS.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>

diff -r 9f86b6a9e017 -r c0fdb5f1b76c Config.mk
--- a/Config.mk Mon Apr 18 14:36:57 2011 +0100
+++ b/Config.mk Mon Apr 18 14:37:20 2011 +0100
@@ -184,6 +184,18 @@ QEMU_TAG := xen-4.1.0-rc6
# 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
diff -r 9f86b6a9e017 -r c0fdb5f1b76c tools/firmware/hvmloader/Makefile
--- a/tools/firmware/hvmloader/Makefile Mon Apr 18 14:36:57 2011 +0100
+++ b/tools/firmware/hvmloader/Makefile Mon Apr 18 14:37:20 2011 +0100
@@ -40,9 +40,16 @@ CIRRUSVGA_DEBUG ?= 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
@@ -54,7 +61,7 @@ endif
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
@@ -62,7 +69,7 @@ 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),)
@@ -71,6 +78,12 @@ 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
diff -r 9f86b6a9e017 -r c0fdb5f1b76c tools/firmware/hvmloader/config-seabios.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/firmware/hvmloader/config-seabios.h Mon Apr 18 14:37:20 2011 +0100
@@ -0,0 +1,9 @@
+#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__ */
diff -r 9f86b6a9e017 -r c0fdb5f1b76c tools/firmware/hvmloader/config.h
--- a/tools/firmware/hvmloader/config.h Mon Apr 18 14:36:57 2011 +0100
+++ b/tools/firmware/hvmloader/config.h Mon Apr 18 14:37:20 2011 +0100
@@ -40,6 +40,7 @@ struct bios_config {
};

extern struct bios_config rombios_config;
+extern struct bios_config seabios_config;

#define PAGE_SHIFT 12
#define PAGE_SIZE (1ul << PAGE_SHIFT)
diff -r 9f86b6a9e017 -r c0fdb5f1b76c tools/firmware/hvmloader/hvmloader.c
--- a/tools/firmware/hvmloader/hvmloader.c Mon Apr 18 14:36:57 2011 +0100
+++ b/tools/firmware/hvmloader/hvmloader.c Mon Apr 18 14:37:20 2011 +0100
@@ -341,7 +341,12 @@ struct bios_info {
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 }
};

diff -r 9f86b6a9e017 -r c0fdb5f1b76c tools/firmware/hvmloader/seabios.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/firmware/hvmloader/seabios.c Mon Apr 18 14:37:20 2011 +0100
@@ -0,0 +1,75 @@
+/*
+ * 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:
+ */
diff -r 9f86b6a9e017 -r c0fdb5f1b76c tools/libxl/libxl_dm.c
--- a/tools/libxl/libxl_dm.c Mon Apr 18 14:36:57 2011 +0100
+++ b/tools/libxl/libxl_dm.c Mon Apr 18 14:37:20 2011 +0100
@@ -65,7 +65,6 @@ const char *libxl__domain_device_model(l
break;
}
}
-
return dm;
}

@@ -74,7 +73,7 @@ static char *libxl__domain_bios(libxl__g
{
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;
}
}

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
[PATCH 04 of 32] tools: support SeaBIOS. Use by default when upstream qemu is configured [ In reply to ]
# HG changeset patch
# User Ian Campbell <ian.campbell@citrix.com>
# Date 1303315986 -3600
# Node ID 2b4be83bdc1aa1aaf13e0ff46c687802d77292dd
# Parent 8eb5c6ebc5c95791e8c129e75030a7979c1e7f5d
tools: support SeaBIOS. Use by default when upstream qemu is configured.

The SeaBIOS integration here is only semi-complete and is targetted at
developers and very early adopters who can be expected to cope with
some rough edges. In particular the user must clone, patch as
necessary and compile SeaBIOS themselves since this patchset does not
cover any of that (in the same way we currently do not integrate
upstream qemu clone+build). Include a big comment to that effect next
to the Config.mk option.

Many of the bios_config callback functions are not yet used by
SeaBIOS.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>

diff -r 8eb5c6ebc5c9 -r 2b4be83bdc1a Config.mk
--- a/Config.mk Wed Apr 20 17:13:06 2011 +0100
+++ b/Config.mk Wed Apr 20 17:13:06 2011 +0100
@@ -184,6 +184,18 @@ QEMU_TAG := xen-4.1.0-rc6
# 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
diff -r 8eb5c6ebc5c9 -r 2b4be83bdc1a tools/firmware/hvmloader/Makefile
--- a/tools/firmware/hvmloader/Makefile Wed Apr 20 17:13:06 2011 +0100
+++ b/tools/firmware/hvmloader/Makefile Wed Apr 20 17:13:06 2011 +0100
@@ -40,9 +40,16 @@ CIRRUSVGA_DEBUG ?= 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
@@ -54,7 +61,7 @@ endif
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
@@ -62,7 +69,7 @@ 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),)
@@ -71,6 +78,12 @@ 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
diff -r 8eb5c6ebc5c9 -r 2b4be83bdc1a tools/firmware/hvmloader/config-seabios.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/firmware/hvmloader/config-seabios.h Wed Apr 20 17:13:06 2011 +0100
@@ -0,0 +1,9 @@
+#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__ */
diff -r 8eb5c6ebc5c9 -r 2b4be83bdc1a tools/firmware/hvmloader/config.h
--- a/tools/firmware/hvmloader/config.h Wed Apr 20 17:13:06 2011 +0100
+++ b/tools/firmware/hvmloader/config.h Wed Apr 20 17:13:06 2011 +0100
@@ -40,6 +40,7 @@ struct bios_config {
};

extern struct bios_config rombios_config;
+extern struct bios_config seabios_config;

#define PAGE_SHIFT 12
#define PAGE_SIZE (1ul << PAGE_SHIFT)
diff -r 8eb5c6ebc5c9 -r 2b4be83bdc1a tools/firmware/hvmloader/hvmloader.c
--- a/tools/firmware/hvmloader/hvmloader.c Wed Apr 20 17:13:06 2011 +0100
+++ b/tools/firmware/hvmloader/hvmloader.c Wed Apr 20 17:13:06 2011 +0100
@@ -341,7 +341,12 @@ struct bios_info {
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 }
};

diff -r 8eb5c6ebc5c9 -r 2b4be83bdc1a tools/firmware/hvmloader/seabios.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/firmware/hvmloader/seabios.c Wed Apr 20 17:13:06 2011 +0100
@@ -0,0 +1,75 @@
+/*
+ * 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:
+ */
diff -r 8eb5c6ebc5c9 -r 2b4be83bdc1a tools/libxl/libxl_dm.c
--- a/tools/libxl/libxl_dm.c Wed Apr 20 17:13:06 2011 +0100
+++ b/tools/libxl/libxl_dm.c Wed Apr 20 17:13:06 2011 +0100
@@ -65,7 +65,6 @@ const char *libxl__domain_device_model(l
break;
}
}
-
return dm;
}

@@ -74,7 +73,7 @@ static char *libxl__domain_bios(libxl__g
{
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;
}
}

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel