From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH RFC v2 3/4] hvmloader/ovmf: setup ovmf_info Date: Tue, 19 Nov 2013 16:35:38 -0500 Message-ID: <20131119213538.GA8435@phenom.dumpdata.com> References: <1384895504-13723-1-git-send-email-wei.liu2@citrix.com> <1384895504-13723-4-git-send-email-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <1384895504-13723-4-git-send-email-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Wei Liu Cc: xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org 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 > --- > 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@lists.xen.org > http://lists.xen.org/xen-devel