xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Wei Liu <wei.liu2@citrix.com>
To: xen-devel@lists.xenproject.org
Cc: wei.liu2@citrix.com
Subject: [PATCH RFC 3/4] hvmloader/ovmf: setup ovmf_info
Date: Fri, 15 Nov 2013 15:59:24 +0000	[thread overview]
Message-ID: <1384531165-3600-4-git-send-email-wei.liu2@citrix.com> (raw)
In-Reply-To: <1384531165-3600-1-git-send-email-wei.liu2@citrix.com>

OVMF info contains E820 map allocated by hvmloader. This info is passed
to OVMF to help it do proper initialization.

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
---
 tools/firmware/hvmloader/ovmf.c |   39 +++++++++++++++++++++++++++++++++++++--
 1 file changed, 37 insertions(+), 2 deletions(-)

diff --git a/tools/firmware/hvmloader/ovmf.c b/tools/firmware/hvmloader/ovmf.c
index 7826095..c253083 100644
--- a/tools/firmware/hvmloader/ovmf.c
+++ b/tools/firmware/hvmloader/ovmf.c
@@ -46,10 +46,45 @@
 #define LOWCHUNK_SIZE           0x00010000
 #define LOWCHUNK_MAXOFFSET      0x0000FFFF
 #define LOWCHUNK_END            (OVMF_BEGIN + OVMF_SIZE)
+#define OVMF_INFO_PHYSICAL_ADDRESS 0X00001000
 
 extern unsigned char dsdt_anycpu[];
 extern int dsdt_anycpu_len;
 
+struct ovmf_info {
+    char signature[11]; /* XenHVMOVMF\0 */
+    uint8_t length;     /* Length of this struct */
+    uint8_t checksum;   /* Set such that the sum over bytes 0..length == 0 */
+    /*
+     * 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 +139,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

  parent reply	other threads:[~2013-11-15 16:00 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-15 15:59 [PATCH RFC 0/4] hvmloader: make OVMF work with Xen Wei Liu
2013-11-15 15:59 ` [PATCH RFC 1/4] hvmloader/ovmf: increase blob size to 2MB Wei Liu
2013-11-19 17:49   ` Ian Campbell
2013-11-19 20:49     ` Wei Liu
2013-11-20 10:13       ` Ian Campbell
2013-11-15 15:59 ` [PATCH RFC 2/4] hvmloader/ovmf: show OVMF_BEGIN as bios address Wei Liu
2013-11-19 17:51   ` Ian Campbell
2013-11-15 15:59 ` Wei Liu [this message]
2013-11-19 17:54   ` [PATCH RFC 3/4] hvmloader/ovmf: setup ovmf_info Ian Campbell
2013-11-19 18:03     ` Wei Liu
2013-11-20 10:08       ` Ian Campbell
2013-11-15 15:59 ` [PATCH RFC 4/4] hvmloader:ovmf: setup E820 map Wei Liu
2013-11-19 17:56   ` Ian Campbell
2013-11-19 18:01     ` Wei Liu
2013-11-20 10:07       ` Ian Campbell
2013-11-20 11:49         ` Wei Liu
2013-11-20 11:51           ` Ian Campbell
2013-11-20 11:58             ` Wei Liu
2013-11-20 12:11               ` Ian Campbell
2013-11-20 12:19                 ` Wei Liu
2013-11-19 19:56   ` Konrad Rzeszutek Wilk
2013-11-19 20:05     ` Wei Liu
2013-11-20 10:12       ` Ian Campbell
2013-11-20 14:04         ` Konrad Rzeszutek Wilk
2013-11-20 14:05           ` Ian Campbell
2013-11-19 17:47 ` [PATCH RFC 0/4] hvmloader: make OVMF work with Xen Ian Campbell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1384531165-3600-4-git-send-email-wei.liu2@citrix.com \
    --to=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).