|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RFC v2 3/4] hvmloader/ovmf: setup ovmf_info
On Tue, Nov 19, 2013 at 09:11:43PM +0000, Wei Liu wrote:
> OVMF info contains E820 map allocated by hvmloader. This info is passed
> to OVMF to help it do proper initialization.
>
> Currently only E820 is necessary, but we reserve spaces for other tables
> in ovmf_info for later usage.
>
> Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
> ---
> tools/firmware/hvmloader/ovmf.c | 49
> +++++++++++++++++++++++++++++++++++++--
> 1 file changed, 47 insertions(+), 2 deletions(-)
>
> diff --git a/tools/firmware/hvmloader/ovmf.c b/tools/firmware/hvmloader/ovmf.c
> index 7826095..1564263 100644
> --- a/tools/firmware/hvmloader/ovmf.c
> +++ b/tools/firmware/hvmloader/ovmf.c
> @@ -46,10 +46,55 @@
> #define LOWCHUNK_SIZE 0x00010000
> #define LOWCHUNK_MAXOFFSET 0x0000FFFF
> #define LOWCHUNK_END (OVMF_BEGIN + OVMF_SIZE)
> +#define OVMF_INFO_PHYSICAL_ADDRESS 0X00001000
^-x
>
> extern unsigned char dsdt_anycpu[];
> extern int dsdt_anycpu_len;
>
> +#define OVMF_INFO_MAX_TABLES 4
> +struct ovmf_info {
> + char signature[11]; /* XenHVMOVMF\0 */
> + char pad[3];
/* Need comment */
> + uint8_t length; /* Length of this struct */
> + uint8_t checksum; /* Set such that the sum over bytes 0..length == 0 */
> + /*
> + * Physical address of an array of tables_nr elements.
> + *
> + * Each element is a 32 bit value contianing the physical address
> + * of a BIOS table.
> + */
> + uint32_t tables;
> + uint32_t tables_nr;
> + /*
> + * Physical address of the e820 table, contains e820_nr entries.
> + */
> + uint32_t e820;
> + uint32_t e820_nr;
> +} __attribute__ ((packed));
> +
> +static void ovmf_setup_bios_info(void)
> +{
> + struct ovmf_info *info = (void *)OVMF_INFO_PHYSICAL_ADDRESS;
> +
> + memset(info, 0, sizeof(*info));
> +
> + memcpy(info->signature, "XenHVMOVMF", sizeof(info->signature));
> + info->length = sizeof(*info);
> +}
> +
> +static void ovmf_finish_bios_info(void)
> +{
> + struct ovmf_info *info = (void *)OVMF_INFO_PHYSICAL_ADDRESS;
> + uint32_t i;
> + uint8_t checksum;
> +
> + checksum = 0;
> + for ( i = 0; i < info->length; i++ )
> + checksum += ((uint8_t *)(info))[i];
> +
> + info->checksum = -checksum;
> +}
> +
> static void ovmf_load(const struct bios_config *config)
> {
> xen_pfn_t mfn;
> @@ -104,8 +149,8 @@ struct bios_config ovmf_config = {
>
> .load_roms = 0,
>
> - .bios_info_setup = NULL,
> - .bios_info_finish = NULL,
> + .bios_info_setup = ovmf_setup_bios_info,
> + .bios_info_finish = ovmf_finish_bios_info,
>
> .e820_setup = NULL,
>
> --
> 1.7.10.4
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |