[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 18 of 19] tools: hvmloader: select BIOS through xenstore
# 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |