# HG changeset patch # User Ian Campbell # Date 1306422697 -3600 # Node ID 9b32ecfdffae7b92f7e4d7698416f05bc5778515 # Parent 71a3a138138bb1499a4e11eaea35b66e5cb1924f hvmloader: allow per-BIOS decision on loading option ROMS SeaBIOS has functionality to load ROMs from the PCI device directly, it makes sense to use this when it is available. Signed-off-by: Ian Campbell diff -r 71a3a138138b -r 9b32ecfdffae tools/firmware/hvmloader/config-seabios.h --- a/tools/firmware/hvmloader/config-seabios.h Thu May 26 16:11:37 2011 +0100 +++ b/tools/firmware/hvmloader/config-seabios.h Thu May 26 16:11:37 2011 +0100 @@ -1,9 +1,6 @@ #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 71a3a138138b -r 9b32ecfdffae tools/firmware/hvmloader/config.h --- a/tools/firmware/hvmloader/config.h Thu May 26 16:11:37 2011 +0100 +++ b/tools/firmware/hvmloader/config.h Thu May 26 16:11:37 2011 +0100 @@ -19,7 +19,10 @@ struct bios_config { /* SMBIOS */ unsigned int smbios_start, smbios_end; - /* Option ROMs */ + /* ROMS */ + int load_vgabios; + int load_etherboot; + int load_option_roms; unsigned int optionrom_start, optionrom_end; /* ACPI tables */ diff -r 71a3a138138b -r 9b32ecfdffae tools/firmware/hvmloader/hvmloader.c --- a/tools/firmware/hvmloader/hvmloader.c Thu May 26 16:11:37 2011 +0100 +++ b/tools/firmware/hvmloader/hvmloader.c Thu May 26 16:11:37 2011 +0100 @@ -417,39 +417,48 @@ int main(void) ( (hvm_info->nr_vcpus > 1) || hvm_info->apic_mode ) ) bios->create_mp_tables(); - switch ( virtual_vga ) + if ( bios->load_vgabios ) { - case VGA_cirrus: - printf("Loading Cirrus VGABIOS ...\n"); - memcpy((void *)VGABIOS_PHYSICAL_ADDRESS, - vgabios_cirrusvga, sizeof(vgabios_cirrusvga)); - vgabios_sz = round_option_rom(sizeof(vgabios_cirrusvga)); - break; - case VGA_std: - printf("Loading Standard VGABIOS ...\n"); - memcpy((void *)VGABIOS_PHYSICAL_ADDRESS, - vgabios_stdvga, sizeof(vgabios_stdvga)); - vgabios_sz = round_option_rom(sizeof(vgabios_stdvga)); - break; - case VGA_pt: - printf("Loading VGABIOS of passthroughed gfx ...\n"); - vgabios_sz = - round_option_rom((*(uint8_t *)(VGABIOS_PHYSICAL_ADDRESS+2)) * 512); - break; - default: - printf("No emulated VGA adaptor ...\n"); - break; + switch ( virtual_vga ) + { + case VGA_cirrus: + printf("Loading Cirrus VGABIOS ...\n"); + memcpy((void *)VGABIOS_PHYSICAL_ADDRESS, + vgabios_cirrusvga, sizeof(vgabios_cirrusvga)); + vgabios_sz = round_option_rom(sizeof(vgabios_cirrusvga)); + break; + case VGA_std: + printf("Loading Standard VGABIOS ...\n"); + memcpy((void *)VGABIOS_PHYSICAL_ADDRESS, + vgabios_stdvga, sizeof(vgabios_stdvga)); + vgabios_sz = round_option_rom(sizeof(vgabios_stdvga)); + break; + case VGA_pt: + printf("Loading VGABIOS of passthroughed gfx ...\n"); + vgabios_sz = + round_option_rom((*(uint8_t *)(VGABIOS_PHYSICAL_ADDRESS+2)) * 512); + break; + default: + printf("No emulated VGA adaptor ...\n"); + break; + } } etherboot_phys_addr = VGABIOS_PHYSICAL_ADDRESS + vgabios_sz; - if ( etherboot_phys_addr < bios->optionrom_start ) - etherboot_phys_addr = bios->optionrom_start; - etherboot_sz = scan_etherboot_nic(bios->optionrom_end, - etherboot_phys_addr); + if ( bios->load_etherboot ) + { + if ( etherboot_phys_addr < bios->optionrom_start ) + etherboot_phys_addr = bios->optionrom_start; + etherboot_sz = scan_etherboot_nic(bios->optionrom_end, + etherboot_phys_addr); + } option_rom_phys_addr = etherboot_phys_addr + etherboot_sz; - option_rom_sz = pci_load_option_roms(bios->optionrom_end, - option_rom_phys_addr); + if ( bios->load_option_roms ) + { + option_rom_sz = pci_load_option_roms(bios->optionrom_end, + option_rom_phys_addr); + } if ( hvm_info->acpi_enabled ) { diff -r 71a3a138138b -r 9b32ecfdffae tools/firmware/hvmloader/rombios.c --- a/tools/firmware/hvmloader/rombios.c Thu May 26 16:11:37 2011 +0100 +++ b/tools/firmware/hvmloader/rombios.c Thu May 26 16:11:37 2011 +0100 @@ -372,6 +372,10 @@ struct bios_config rombios_config = { .smbios_start = SMBIOS_PHYSICAL_ADDRESS, .smbios_end = SMBIOS_PHYSICAL_END, + .load_vgabios = 1, + .load_etherboot = 1, + .load_option_roms = 1, + .optionrom_start = OPTIONROM_PHYSICAL_ADDRESS, .optionrom_end = OPTIONROM_PHYSICAL_END, diff -r 71a3a138138b -r 9b32ecfdffae tools/firmware/hvmloader/seabios.c --- a/tools/firmware/hvmloader/seabios.c Thu May 26 16:11:37 2011 +0100 +++ b/tools/firmware/hvmloader/seabios.c Thu May 26 16:11:37 2011 +0100 @@ -46,8 +46,12 @@ struct bios_config seabios_config = { .smbios_start = 0, .smbios_end = 0, - .optionrom_start = OPTIONROM_PHYSICAL_ADDRESS, - .optionrom_end = OPTIONROM_PHYSICAL_END, + .load_vgabios = 0, + .load_etherboot = 0, + .load_option_roms = 0, + + .optionrom_start = 0, + .optionrom_end = 0, .acpi_start = 0,