# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1302607403 -3600
# Node ID deeb1b89d8fd0dbdd3929ed203ce8dd9c2cf50db
# Parent 20dcc3b31fd416636a69dc7c528ef486adc9dacc
tools: hvmloader: select BIOS through xenstore.
Allow the toolstack to select the BIOS to use via a xenstore key.
Defaults to "rombios" for compatibility with toolstacks which do not
write the key (e.g. xend).
Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
diff -r 20dcc3b31fd4 -r deeb1b89d8fd tools/firmware/hvmloader/hvmloader.c
--- a/tools/firmware/hvmloader/hvmloader.c Tue Apr 12 12:20:25 2011 +0100
+++ b/tools/firmware/hvmloader/hvmloader.c Tue Apr 12 12:23:23 2011 +0100
@@ -337,10 +337,34 @@ static void cmos_write_memory_size(void)
cmos_outb(0x35, (uint8_t)( alt_mem >> 8));
}
+struct bios_info {
+ const char *key;
+ const struct bios_config *bios;
+} bios_configs[] = {
+ { "rombios", &rombios_config, },
+ { NULL, NULL }
+};
static const struct bios_config *detect_bios(void)
{
- return &rombios_config;
+ const struct bios_info *b = &bios_configs[0];
+ const char *bios = xenstore_read("hvmloader/bios");
+
+ if (!bios)
+ bios = "rombios";
+
+ while(b->key != NULL) {
+ if (!strcmp(bios, b->key))
+ return b->bios;
+ b++;
+ }
+
+ /* oh dear */
+ printf("Unknown BIOS %s, no ROM image found\n", bios);
+ asm volatile (".text \n"
+ "1: hlt \n"
+ " jmp 1b \n");
+ return NULL;
}
int main(void)
diff -r 20dcc3b31fd4 -r deeb1b89d8fd tools/libxl/libxl_dm.c
--- a/tools/libxl/libxl_dm.c Tue Apr 12 12:20:25 2011 +0100
+++ b/tools/libxl/libxl_dm.c Tue Apr 12 12:23:23 2011 +0100
@@ -66,6 +66,16 @@ const char *libxl__domain_device_model(l
return dm;
}
+static char *libxl__domain_bios(libxl__gc *gc,
+ libxl_device_model_info *info)
+{
+ switch (info->device_model_version) {
+ case 1: return libxl__strdup(gc, "rombios");
+ case 2: return libxl__strdup(gc, "rombios");
+ default:return NULL;
+ }
+}
+
static char ** libxl__build_device_model_args_old(libxl__gc *gc,
const char *dm,
libxl_device_model_info
*info,
@@ -751,6 +761,11 @@ int libxl__create_device_model(libxl__gc
goto out;
}
+ path = libxl__sprintf(gc, "/local/domain/%d/hvmloader", info->domid);
+ xs_mkdir(ctx->xsh, XBT_NULL, path);
+ libxl__xs_write(gc, XBT_NULL, libxl__sprintf(gc, "%s/bios", path),
+ libxl__domain_bios(gc, info));
+
path = libxl__sprintf(gc, "/local/domain/0/device-model/%d", info->domid);
xs_mkdir(ctx->xsh, XBT_NULL, path);
libxl__xs_write(gc, XBT_NULL, libxl__sprintf(gc, "%s/disable_pf", path),
"%d", !info->xen_platform_pci);
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|