|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 4/5] hvmloader: Move option ROM loading into a separate optionnal file
On Sat, 2012-02-11 at 20:39 +0000, Julian Pidancet wrote:
> Make load_rom field in struct bios_config an optionnal callback rather
> than a boolean value. It allow BIOS specific code to implement it's own
> option ROM loading methods.
>
> Facilities to scan PCI devices, extract an deploy ROMs are moved into
> a separate file that can be compiled optionnaly.
>
> Signed-off-by: Julian Pidancet <julian.pidancet@xxxxxxxxx>
Presuming this to be mostly code motion I didn't review in depth but:
Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> ---
> tools/firmware/hvmloader/Makefile | 2 +-
> tools/firmware/hvmloader/config.h | 3 +-
> tools/firmware/hvmloader/hvmloader.c | 218
> +--------------------------------
> tools/firmware/hvmloader/option_rom.h | 7 +
> tools/firmware/hvmloader/optionroms.c | 189 ++++++++++++++++++++++++++++
> tools/firmware/hvmloader/rombios.c | 63 +++++++++-
> tools/firmware/hvmloader/seabios.c | 5 +-
> 7 files changed, 259 insertions(+), 228 deletions(-)
> create mode 100644 tools/firmware/hvmloader/optionroms.c
>
> diff --git a/tools/firmware/hvmloader/Makefile
> b/tools/firmware/hvmloader/Makefile
> index 1ea32db..5a5ee41 100644
> --- a/tools/firmware/hvmloader/Makefile
> +++ b/tools/firmware/hvmloader/Makefile
> @@ -39,7 +39,7 @@ CIRRUSVGA_DEBUG ?= n
>
> ROMBIOS_DIR := ../rombios
> ifneq ($(ROMBIOS_DIR),)
> -OBJS += 32bitbios_support.o rombios.o
> +OBJS += optionroms.o 32bitbios_support.o rombios.o
> CFLAGS += -DENABLE_ROMBIOS
> ROMBIOS_ROM := $(ROMBIOS_DIR)/BIOS-bochs-latest
> endif
> diff --git a/tools/firmware/hvmloader/config.h
> b/tools/firmware/hvmloader/config.h
> index 9cac9c1..1f80263 100644
> --- a/tools/firmware/hvmloader/config.h
> +++ b/tools/firmware/hvmloader/config.h
> @@ -18,8 +18,7 @@ struct bios_config {
> unsigned int bios_address;
>
> /* ROMS */
> - int load_roms;
> - unsigned int optionrom_start, optionrom_end;
> + void (*load_roms)(void);
>
> void (*bios_load)(const struct bios_config *config);
>
> diff --git a/tools/firmware/hvmloader/hvmloader.c
> b/tools/firmware/hvmloader/hvmloader.c
> index f120ffe..ad50189 100644
> --- a/tools/firmware/hvmloader/hvmloader.c
> +++ b/tools/firmware/hvmloader/hvmloader.c
> @@ -24,16 +24,11 @@
> #include "hypercall.h"
> #include "config.h"
> #include "pci_regs.h"
> -#include "option_rom.h"
> #include "apic_regs.h"
> #include "acpi/acpi2_0.h"
> #include <xen/version.h>
> #include <xen/hvm/params.h>
>
> -#define ROM_INCLUDE_VGABIOS
> -#define ROM_INCLUDE_ETHERBOOT
> -#include "roms.inc"
> -
> asm (
> " .text \n"
> " .globl _start \n"
> @@ -147,169 +142,6 @@ static void init_hypercalls(void)
> printf("Detected Xen v%u.%u%s\n", eax >> 16, eax & 0xffff, extraversion);
> }
>
> -/*
> - * Scan the list of Option ROMs at @roms for one which supports
> - * PCI (@vendor_id, @device_id) found at slot @devfn. If one is found,
> - * copy it to @dest and return its size rounded up to a multiple 2kB. This
> - * function will not copy ROMs beyond address option_rom_end.
> - */
> -#define round_option_rom(x) (((x) + 2047) & ~2047)
> -static int scan_option_rom(
> - unsigned int option_rom_end,
> - uint8_t devfn, uint16_t vendor_id, uint16_t device_id,
> - void *roms, uint32_t dest)
> -{
> - struct option_rom_header *rom;
> - struct option_rom_pnp_header *pnph;
> - struct option_rom_pci_header *pcih;
> - uint8_t csum;
> - int i;
> -
> - static uint32_t orom_ids[64];
> - static int nr_roms;
> -
> - /* Avoid duplicate ROMs. */
> - for ( i = 0; i < nr_roms; i++ )
> - if ( orom_ids[i] == (vendor_id | ((uint32_t)device_id << 16)) )
> - return 0;
> -
> - rom = roms;
> - for ( ; ; )
> - {
> - /* Invalid signature means we're out of option ROMs. */
> - if ( strncmp((char *)rom->signature, "\x55\xaa", 2) ||
> - (rom->rom_size == 0) )
> - break;
> -
> - /* Invalid checksum means we're out of option ROMs. */
> - csum = 0;
> - for ( i = 0; i < (rom->rom_size * 512); i++ )
> - csum += ((uint8_t *)rom)[i];
> - if ( csum != 0 )
> - break;
> -
> - /* Check the PCI PnP header (if any) for a match. */
> - pcih = (struct option_rom_pci_header *)
> - ((char *)rom + rom->pci_header_offset);
> - if ( (rom->pci_header_offset != 0) &&
> - !strncmp((char *)pcih->signature, "PCIR", 4) &&
> - (pcih->vendor_id == vendor_id) &&
> - (pcih->device_id == device_id) )
> - goto found;
> -
> - rom = (struct option_rom_header *)
> - ((char *)rom + rom->rom_size * 512);
> - }
> -
> - return 0;
> -
> - found:
> - /* Find the PnP expansion header (if any). */
> - pnph = ((rom->expansion_header_offset != 0)
> - ? ((struct option_rom_pnp_header *)
> - ((char *)rom + rom->expansion_header_offset))
> - : ((struct option_rom_pnp_header *)NULL));
> - while ( (pnph != NULL) && strncmp((char *)pnph->signature, "$PnP", 4) )
> - pnph = ((pnph->next_header_offset != 0)
> - ? ((struct option_rom_pnp_header *)
> - ((char *)rom + pnph->next_header_offset))
> - : ((struct option_rom_pnp_header *)NULL));
> -
> - printf("Loading PCI Option ROM ...\n");
> - if ( (pnph != NULL) && (pnph->manufacturer_name_offset != 0) )
> - printf(" - Manufacturer: %s\n",
> - (char *)rom + pnph->manufacturer_name_offset);
> - if ( (pnph != NULL) && (pnph->product_name_offset != 0) )
> - printf(" - Product name: %s\n",
> - (char *)rom + pnph->product_name_offset);
> -
> - if ( (dest + rom->rom_size * 512 + 1) > option_rom_end )
> - {
> - printf("Option ROM size %x exceeds available space\n",
> - rom->rom_size * 512);
> - return 0;
> - }
> -
> - orom_ids[nr_roms++] = vendor_id | ((uint32_t)device_id << 16);
> - memcpy((void *)dest, rom, rom->rom_size * 512);
> - *(uint8_t *)(dest + rom->rom_size * 512) = devfn;
> - return round_option_rom(rom->rom_size * 512 + 1);
> -}
> -
> -/*
> - * Scan the PCI bus for the first NIC supported by etherboot, and copy
> - * the corresponding rom data to *copy_rom_dest. Returns the length of the
> - * selected rom, or 0 if no NIC found.
> - */
> -static int scan_etherboot_nic(unsigned int option_rom_end,
> - uint32_t copy_rom_dest)
> -{
> - uint16_t class, vendor_id, device_id, devfn;
> - int rom_size = 0;
> -
> - for ( devfn = 0; (devfn < 256) && !rom_size; devfn++ )
> - {
> - class = pci_readw(devfn, PCI_CLASS_DEVICE);
> - vendor_id = pci_readw(devfn, PCI_VENDOR_ID);
> - device_id = pci_readw(devfn, PCI_DEVICE_ID);
> -
> - /* We're only interested in NICs. */
> - if ( (vendor_id != 0xffff) &&
> - (device_id != 0xffff) &&
> - (class == 0x0200) )
> - rom_size = scan_option_rom(
> - option_rom_end,
> - devfn, vendor_id, device_id, etherboot, copy_rom_dest);
> - }
> -
> - return rom_size;
> -}
> -
> -/*
> - * Scan the PCI bus for the devices that have an option ROM, and copy
> - * the corresponding rom data to rom_phys_addr.
> - */
> -static int pci_load_option_roms(unsigned int option_rom_end,
> - uint32_t rom_base_addr)
> -{
> - uint32_t option_rom_addr, rom_phys_addr = rom_base_addr;
> - uint16_t vendor_id, device_id, devfn, class;
> -
> - for ( devfn = 0; devfn < 256; devfn++ )
> - {
> - class = pci_readb(devfn, PCI_CLASS_DEVICE + 1);
> - vendor_id = pci_readw(devfn, PCI_VENDOR_ID);
> - device_id = pci_readw(devfn, PCI_DEVICE_ID);
> -
> - if ( (vendor_id == 0xffff) && (device_id == 0xffff) )
> - continue;
> -
> - /*
> - * Currently only scan options from mass storage devices and serial
> - * bus controller (Fibre Channel included).
> - */
> - if ( (class != 0x1) && (class != 0xc) )
> - continue;
> -
> - option_rom_addr = pci_readl(devfn, PCI_ROM_ADDRESS);
> - if ( !option_rom_addr )
> - continue;
> -
> - /* Ensure Expansion Bar is enabled before copying */
> - pci_writel(devfn, PCI_ROM_ADDRESS, option_rom_addr | 0x1);
> -
> - rom_phys_addr += scan_option_rom(
> - option_rom_end,
> - devfn, vendor_id, device_id,
> - (void *)(option_rom_addr & ~2047), rom_phys_addr);
> -
> - /* Restore the default original value of Expansion Bar */
> - pci_writel(devfn, PCI_ROM_ADDRESS, option_rom_addr);
> - }
> -
> - return rom_phys_addr - rom_base_addr;
> -}
> -
> /* Replace possibly erroneous memory-size CMOS fields with correct values. */
> static void cmos_write_memory_size(void)
> {
> @@ -421,8 +253,6 @@ static void acpi_enable_sci(void)
> int main(void)
> {
> const struct bios_config *bios;
> - int option_rom_sz = 0, vgabios_sz = 0, etherboot_sz = 0;
> - uint32_t etherboot_phys_addr = 0, option_rom_phys_addr = 0;
> int acpi_enabled;
>
> /* Initialise hypercall stubs with RET, rendering them no-ops. */
> @@ -471,41 +301,7 @@ int main(void)
> }
>
> if ( bios->load_roms )
> - {
> - 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);
> -
> - option_rom_phys_addr = etherboot_phys_addr + etherboot_sz;
> - option_rom_sz = pci_load_option_roms(bios->optionrom_end,
> - option_rom_phys_addr);
> - }
> + bios->load_roms();
>
> acpi_enabled = !strncmp(xenstore_read("platform/acpi", "1"), "1", 1);
>
> @@ -536,18 +332,6 @@ int main(void)
> if ( SCRATCH_PHYSICAL_ADDRESS != scratch_start )
> printf(" %05x-%05lx: Scratch space\n",
> SCRATCH_PHYSICAL_ADDRESS, scratch_start);
> - if ( vgabios_sz )
> - printf(" %05x-%05x: VGA BIOS\n",
> - VGABIOS_PHYSICAL_ADDRESS,
> - VGABIOS_PHYSICAL_ADDRESS + vgabios_sz - 1);
> - if ( etherboot_sz )
> - printf(" %05x-%05x: Etherboot ROM\n",
> - etherboot_phys_addr,
> - etherboot_phys_addr + etherboot_sz - 1);
> - if ( option_rom_sz )
> - printf(" %05x-%05x: PCI Option ROMs\n",
> - option_rom_phys_addr,
> - option_rom_phys_addr + option_rom_sz - 1);
> printf(" %05x-%05x: Main BIOS\n",
> bios->bios_address,
> bios->bios_address + bios->image_size - 1);
> diff --git a/tools/firmware/hvmloader/option_rom.h
> b/tools/firmware/hvmloader/option_rom.h
> index f0c7ec4..1ada3e2 100644
> --- a/tools/firmware/hvmloader/option_rom.h
> +++ b/tools/firmware/hvmloader/option_rom.h
> @@ -47,6 +47,13 @@ struct option_rom_pci_header {
> uint16_t reserved;
> } __attribute__ ((packed));
>
> +#define round_option_rom(x) (((x) + 2047) & ~2047)
> +int scan_etherboot_nic(unsigned int option_rom_end,
> + uint32_t copy_rom_dest,
> + void *etherboot_rom);
> +int pci_load_option_roms(unsigned int option_rom_end,
> + uint32_t rom_base_addr);
> +
> #endif /* __HVMLOADER_OPTION_ROM_H__ */
>
> /*
> diff --git a/tools/firmware/hvmloader/optionroms.c
> b/tools/firmware/hvmloader/optionroms.c
> new file mode 100644
> index 0000000..e35aebc
> --- /dev/null
> +++ b/tools/firmware/hvmloader/optionroms.c
> @@ -0,0 +1,189 @@
> +/*
> + * optionroms.c: Option ROM loading support.
> + *
> + * Leendert van Doorn, leendert@xxxxxxxxxxxxxx
> + * Copyright (c) 2005, International Business Machines Corporation.
> + *
> + * Copyright (c) 2006, Keir Fraser, XenSource 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 "option_rom.h"
> +#include "util.h"
> +#include "pci_regs.h"
> +
> +/*
> + * Scan the list of Option ROMs at @roms for one which supports
> + * PCI (@vendor_id, @device_id) found at slot @devfn. If one is found,
> + * copy it to @dest and return its size rounded up to a multiple 2kB. This
> + * function will not copy ROMs beyond address option_rom_end.
> + */
> +static int scan_option_rom(
> + unsigned int option_rom_end,
> + uint8_t devfn, uint16_t vendor_id, uint16_t device_id,
> + void *roms, uint32_t dest)
> +{
> + struct option_rom_header *rom;
> + struct option_rom_pnp_header *pnph;
> + struct option_rom_pci_header *pcih;
> + uint8_t csum;
> + int i;
> +
> + static uint32_t orom_ids[64];
> + static int nr_roms;
> +
> + /* Avoid duplicate ROMs. */
> + for ( i = 0; i < nr_roms; i++ )
> + if ( orom_ids[i] == (vendor_id | ((uint32_t)device_id << 16)) )
> + return 0;
> +
> + rom = roms;
> + for ( ; ; )
> + {
> + /* Invalid signature means we're out of option ROMs. */
> + if ( strncmp((char *)rom->signature, "\x55\xaa", 2) ||
> + (rom->rom_size == 0) )
> + break;
> +
> + /* Invalid checksum means we're out of option ROMs. */
> + csum = 0;
> + for ( i = 0; i < (rom->rom_size * 512); i++ )
> + csum += ((uint8_t *)rom)[i];
> + if ( csum != 0 )
> + break;
> +
> + /* Check the PCI PnP header (if any) for a match. */
> + pcih = (struct option_rom_pci_header *)
> + ((char *)rom + rom->pci_header_offset);
> + if ( (rom->pci_header_offset != 0) &&
> + !strncmp((char *)pcih->signature, "PCIR", 4) &&
> + (pcih->vendor_id == vendor_id) &&
> + (pcih->device_id == device_id) )
> + goto found;
> +
> + rom = (struct option_rom_header *)
> + ((char *)rom + rom->rom_size * 512);
> + }
> +
> + return 0;
> +
> + found:
> + /* Find the PnP expansion header (if any). */
> + pnph = ((rom->expansion_header_offset != 0)
> + ? ((struct option_rom_pnp_header *)
> + ((char *)rom + rom->expansion_header_offset))
> + : ((struct option_rom_pnp_header *)NULL));
> + while ( (pnph != NULL) && strncmp((char *)pnph->signature, "$PnP", 4) )
> + pnph = ((pnph->next_header_offset != 0)
> + ? ((struct option_rom_pnp_header *)
> + ((char *)rom + pnph->next_header_offset))
> + : ((struct option_rom_pnp_header *)NULL));
> +
> + printf("Loading PCI Option ROM ...\n");
> + if ( (pnph != NULL) && (pnph->manufacturer_name_offset != 0) )
> + printf(" - Manufacturer: %s\n",
> + (char *)rom + pnph->manufacturer_name_offset);
> + if ( (pnph != NULL) && (pnph->product_name_offset != 0) )
> + printf(" - Product name: %s\n",
> + (char *)rom + pnph->product_name_offset);
> +
> + if ( (dest + rom->rom_size * 512 + 1) > option_rom_end )
> + {
> + printf("Option ROM size %x exceeds available space\n",
> + rom->rom_size * 512);
> + return 0;
> + }
> +
> + orom_ids[nr_roms++] = vendor_id | ((uint32_t)device_id << 16);
> + memcpy((void *)dest, rom, rom->rom_size * 512);
> + *(uint8_t *)(dest + rom->rom_size * 512) = devfn;
> + return round_option_rom(rom->rom_size * 512 + 1);
> +}
> +
> +/*
> + * Scan the PCI bus for the first NIC supported by etherboot, and copy
> + * the corresponding rom data to *copy_rom_dest. Returns the length of the
> + * selected rom, or 0 if no NIC found.
> + */
> +int scan_etherboot_nic(unsigned int option_rom_end,
> + uint32_t copy_rom_dest,
> + void *etherboot_rom)
> +{
> + uint16_t class, vendor_id, device_id, devfn;
> + int rom_size = 0;
> +
> + for ( devfn = 0; (devfn < 256) && !rom_size; devfn++ )
> + {
> + class = pci_readw(devfn, PCI_CLASS_DEVICE);
> + vendor_id = pci_readw(devfn, PCI_VENDOR_ID);
> + device_id = pci_readw(devfn, PCI_DEVICE_ID);
> +
> + /* We're only interested in NICs. */
> + if ( (vendor_id != 0xffff) &&
> + (device_id != 0xffff) &&
> + (class == 0x0200) )
> + rom_size = scan_option_rom(
> + option_rom_end,
> + devfn, vendor_id, device_id, etherboot_rom, copy_rom_dest);
> + }
> +
> + return rom_size;
> +}
> +
> +/*
> + * Scan the PCI bus for the devices that have an option ROM, and copy
> + * the corresponding rom data to rom_phys_addr.
> + */
> +int pci_load_option_roms(unsigned int option_rom_end,
> + uint32_t rom_base_addr)
> +{
> + uint32_t option_rom_addr, rom_phys_addr = rom_base_addr;
> + uint16_t vendor_id, device_id, devfn, class;
> +
> + for ( devfn = 0; devfn < 256; devfn++ )
> + {
> + class = pci_readb(devfn, PCI_CLASS_DEVICE + 1);
> + vendor_id = pci_readw(devfn, PCI_VENDOR_ID);
> + device_id = pci_readw(devfn, PCI_DEVICE_ID);
> +
> + if ( (vendor_id == 0xffff) && (device_id == 0xffff) )
> + continue;
> +
> + /*
> + * Currently only scan options from mass storage devices and serial
> + * bus controller (Fibre Channel included).
> + */
> + if ( (class != 0x1) && (class != 0xc) )
> + continue;
> +
> + option_rom_addr = pci_readl(devfn, PCI_ROM_ADDRESS);
> + if ( !option_rom_addr )
> + continue;
> +
> + /* Ensure Expansion Bar is enabled before copying */
> + pci_writel(devfn, PCI_ROM_ADDRESS, option_rom_addr | 0x1);
> +
> + rom_phys_addr += scan_option_rom(
> + option_rom_end,
> + devfn, vendor_id, device_id,
> + (void *)(option_rom_addr & ~2047), rom_phys_addr);
> +
> + /* Restore the default original value of Expansion Bar */
> + pci_writel(devfn, PCI_ROM_ADDRESS, option_rom_addr);
> + }
> +
> + return rom_phys_addr - rom_base_addr;
> +}
> diff --git a/tools/firmware/hvmloader/rombios.c
> b/tools/firmware/hvmloader/rombios.c
> index d5831aa..e0d4182 100644
> --- a/tools/firmware/hvmloader/rombios.c
> +++ b/tools/firmware/hvmloader/rombios.c
> @@ -29,10 +29,13 @@
> #include "pci_regs.h"
> #include "util.h"
> #include "hypercall.h"
> +#include "option_rom.h"
>
> #include <xen/hvm/params.h>
>
> #define ROM_INCLUDE_ROMBIOS
> +#define ROM_INCLUDE_VGABIOS
> +#define ROM_INCLUDE_ETHERBOOT
> #include "roms.inc"
>
> #define ROMBIOS_BEGIN 0x000F0000
> @@ -64,6 +67,61 @@ static void rombios_setup_bios_info(void)
> memset(info, 0, sizeof(*info));
> }
>
> +static void rombios_load_roms(void)
> +{
> + int option_rom_sz = 0, vgabios_sz = 0, etherboot_sz = 0;
> + uint32_t etherboot_phys_addr = 0, option_rom_phys_addr = 0;
> +
> + 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 < OPTIONROM_PHYSICAL_ADDRESS )
> + etherboot_phys_addr = OPTIONROM_PHYSICAL_ADDRESS;
> + etherboot_sz = scan_etherboot_nic(OPTIONROM_PHYSICAL_END,
> + etherboot_phys_addr,
> + etherboot);
> +
> + option_rom_phys_addr = etherboot_phys_addr + etherboot_sz;
> + option_rom_sz = pci_load_option_roms(OPTIONROM_PHYSICAL_END,
> + option_rom_phys_addr);
> +
> + printf("Option ROMs:\n");
> + if ( vgabios_sz )
> + printf(" %05x-%05x: VGA BIOS\n",
> + VGABIOS_PHYSICAL_ADDRESS,
> + VGABIOS_PHYSICAL_ADDRESS + vgabios_sz - 1);
> + if ( etherboot_sz )
> + printf(" %05x-%05x: Etherboot ROM\n",
> + etherboot_phys_addr,
> + etherboot_phys_addr + etherboot_sz - 1);
> + if ( option_rom_sz )
> + printf(" %05x-%05x: PCI Option ROMs\n",
> + option_rom_phys_addr,
> + option_rom_phys_addr + option_rom_sz - 1);
> +}
> +
> static void rombios_load(const struct bios_config *config)
> {
> uint32_t bioshigh;
> @@ -158,10 +216,7 @@ struct bios_config rombios_config = {
>
> .bios_address = ROMBIOS_PHYSICAL_ADDRESS,
>
> - .load_roms = 1,
> -
> - .optionrom_start = OPTIONROM_PHYSICAL_ADDRESS,
> - .optionrom_end = OPTIONROM_PHYSICAL_END,
> + .load_roms = rombios_load_roms,
>
> .bios_load = rombios_load,
>
> diff --git a/tools/firmware/hvmloader/seabios.c
> b/tools/firmware/hvmloader/seabios.c
> index 3045157..15ddf35 100644
> --- a/tools/firmware/hvmloader/seabios.c
> +++ b/tools/firmware/hvmloader/seabios.c
> @@ -143,10 +143,7 @@ struct bios_config seabios_config = {
>
> .bios_address = SEABIOS_PHYSICAL_ADDRESS,
>
> - .load_roms = 0,
> -
> - .optionrom_start = 0,
> - .optionrom_end = 0,
> + .load_roms = NULL,
>
> .bios_load = NULL,
>
> --
> Julian Pidancet
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |