From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH v4 13/19] xen: setup Xen specific data for PVH Date: Fri, 2 Nov 2018 13:37:32 +0100 Message-ID: <20181102123738.16395-14-jgross@suse.com> References: <20181102123738.16395-1-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181102123738.16395-1-jgross@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: grub-devel@gnu.org Cc: hans@knorrie.org, phcoder@gmail.com, daniel.kiper@oracle.com, Juergen Gross , xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org SW5pdGlhbGl6ZSB0aGUgbmVlZGVkIFhlbiBzcGVjaWZpYyBkYXRhLiBUaGlzIGlzOgoKLSB0aGUg WGVuIHN0YXJ0IG9mIGRheSBwYWdlIGNvbnRhaW5pbmcgdGhlIGNvbnNvbGUgYW5kIFhlbnN0b3Jl IHJpbmcKICBwYWdlIFBGTiBhbmQgZXZlbnQgY2hhbm5lbAotIHRoZSBncmFudCB0YWJsZQotIHRo ZSBzaGFyZWQgaW5mbyBwYWdlCgpXcml0ZSBiYWNrIHRoZSBwb3NzaWJseSBtb2RpZmllZCBtZW1v cnkgbWFwIHRvIHRoZSBoeXBlcnZpc29yIGluIGNhc2UKdGhlIGd1ZXN0IGlzIHJlYWRpbmcgaXQg ZnJvbSB0aGVyZSBhZ2Fpbi4KClNldCB0aGUgUlNEUCBhZGRyZXNzIGZvciB0aGUgZ3Vlc3QgZnJv bSB0aGUgc3RhcnRfaW5mbyBwYWdlIHBhc3NlZAphcyBib290IHBhcmFtZXRlci4KClNpZ25lZC1v ZmYtYnk6IEp1ZXJnZW4gR3Jvc3MgPGpncm9zc0BzdXNlLmNvbT4KLS0tClY0OiB3cml0ZSBiYWNr IG1lbW9yeSBtYXAgdG8gWGVuIChSb2dlciBQYXUgTW9ubsOpKQotLS0KIGdydWItY29yZS9rZXJu L2kzODYveGVuL3B2aC5jIHwgMTE5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDExOSBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEv Z3J1Yi1jb3JlL2tlcm4vaTM4Ni94ZW4vcHZoLmMgYi9ncnViLWNvcmUva2Vybi9pMzg2L3hlbi9w dmguYwppbmRleCA0NDIzNTFkMWQuLmQ3NDMwMWY5MiAxMDA2NDQKLS0tIGEvZ3J1Yi1jb3JlL2tl cm4vaTM4Ni94ZW4vcHZoLmMKKysrIGIvZ3J1Yi1jb3JlL2tlcm4vaTM4Ni94ZW4vcHZoLmMKQEAg LTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxncnViL2kzODYvbGludXguaD4KICNpbmNsdWRlIDxn cnViL21hY2hpbmUva2VybmVsLmg+CiAjaW5jbHVkZSA8Z3J1Yi9tYWNoaW5lL21lbW9yeS5oPgor I2luY2x1ZGUgPHhlbi9odm0vcGFyYW1zLmg+CiAjaW5jbHVkZSA8eGVuL21lbW9yeS5oPgogCiAj ZGVmaW5lIFhFTl9DT05TT0xFX1BPUlQgICAgICAweGU5CkBAIC0zOSw2ICs0MCw3IEBAIHN0YXRp YyBjaGFyIGh5cGVyY2FsbF9wYWdlW0dSVUJfWEVOX1BBR0VfU0laRV0KICAgX19hdHRyaWJ1dGVf XyAoKGFsaWduZWQgKEdSVUJfWEVOX1BBR0VfU0laRSkpKTsKIAogc3RhdGljIGdydWJfdWludDMy X3QgeGVuX2NwdWlkX2Jhc2U7CitzdGF0aWMgc3RydWN0IHN0YXJ0X2luZm8gZ3J1Yl94ZW5fc3Rh cnRfcGFnZTsKIHN0YXRpYyBzdHJ1Y3QgZ3J1Yl9lODIwX21tYXBfZW50cnkgbWFwW1hFTl9NRU1P UllfTUFQX1NJWkVdOwogc3RhdGljIHVuc2lnbmVkIGludCBucl9tYXBfZW50cmllczsKIApAQCAt MTAwLDYgKzEwMiwzNiBAQCBncnViX3hlbl9oeXBlcmNhbGwgKGdydWJfdWludDMyX3QgY2FsbG5v LCBncnViX3VpbnQzMl90IGEwLAogICByZXR1cm4gX19yZXM7CiB9CiAKK3N0YXRpYyBncnViX3Vp bnQzMl90CitncnViX3hlbl9nZXRfcGFyYW0gKGludCBpZHgpCit7CisgIHN0cnVjdCB4ZW5faHZt X3BhcmFtIHhodjsKKyAgaW50IHI7CisKKyAgeGh2LmRvbWlkID0gRE9NSURfU0VMRjsKKyAgeGh2 LmluZGV4ID0gaWR4OworICByID0gZ3J1Yl94ZW5faHlwZXJjYWxsIChfX0hZUEVSVklTT1JfaHZt X29wLCBIVk1PUF9nZXRfcGFyYW0sCisJCQkgIChncnViX3VpbnQzMl90KSAoJnhodiksIDAsIDAs IDAsIDApOworICBpZiAociA8IDApCisgICAgZ3J1Yl94ZW5fcGFuaWMgKCJDb3VsZCBub3QgZ2V0 IHBhcmFtZXRlciBmcm9tIFhlbi5cbiIpOworICByZXR1cm4geGh2LnZhbHVlOworfQorCitzdGF0 aWMgdm9pZCAqCitncnViX3hlbl9hZGRfcGh5c21hcCAodW5zaWduZWQgaW50IHNwYWNlLCB2b2lk ICphZGRyKQoreworICBzdHJ1Y3QgeGVuX2FkZF90b19waHlzbWFwIHhhdHA7CisKKyAgeGF0cC5k b21pZCA9IERPTUlEX1NFTEY7CisgIHhhdHAuaWR4ID0gMDsKKyAgeGF0cC5zcGFjZSA9IHNwYWNl OworICB4YXRwLmdwZm4gPSAoZ3J1Yl9hZGRyX3QpIGFkZHIgPj4gR1JVQl9YRU5fTE9HX1BBR0Vf U0laRTsKKyAgaWYgKGdydWJfeGVuX2h5cGVyY2FsbCAoX19IWVBFUlZJU09SX21lbW9yeV9vcCwg WEVOTUVNX2FkZF90b19waHlzbWFwLAorCQkJICAoZ3J1Yl91aW50MzJfdCkgKCZ4YXRwKSwgMCwg MCwgMCwgMCkpCisgICAgZ3J1Yl94ZW5fcGFuaWMgKCJNZW1vcnlfb3AgaHlwZXJjYWxsIGZhaWxl ZC5cbiIpOworICByZXR1cm4gYWRkcjsKK30KKwogc3RhdGljIHZvaWQKIGdydWJfeGVuX3NvcnRf bW1hcCAodm9pZCkKIHsKQEAgLTI1NSwxMiArMjg3LDk5IEBAIGdydWJfeGVuX2dldF9tbWFwICh2 b2lkKQogICBncnViX3hlbl9zb3J0X21tYXAgKCk7CiB9CiAKK3N0YXRpYyB2b2lkCitncnViX3hl bl9zZXRfbW1hcCAodm9pZCkKK3sKKyAgc3RydWN0IHhlbl9mb3JlaWduX21lbW9yeV9tYXAgbWVt bWFwOworCisgIG1lbW1hcC5kb21pZCA9IERPTUlEX1NFTEY7CisgIG1lbW1hcC5tYXAubnJfZW50 cmllcyA9IG5yX21hcF9lbnRyaWVzOworICBzZXRfeGVuX2d1ZXN0X2hhbmRsZSAobWVtbWFwLm1h cC5idWZmZXIsIG1hcCk7CisgIGdydWJfeGVuX2h5cGVyY2FsbCAoX19IWVBFUlZJU09SX21lbW9y eV9vcCwgWEVOTUVNX3NldF9tZW1vcnlfbWFwLAorCQkgICAgICAoZ3J1Yl91aW50MzJfdCkgKCZt ZW1tYXApLCAwLCAwLCAwLCAwKTsKK30KKworc3RhdGljIGdydWJfdWludDY0X3QKK2dydWJfeGVu X2ZpbmRfcGFnZSAoZ3J1Yl91aW50NjRfdCBzdGFydCkKK3sKKyAgdW5zaWduZWQgaW50IGksIGo7 CisgIGdydWJfdWludDY0X3QgbGFzdCA9IHN0YXJ0OworCisgIC8qIFRyeSB0byBmaW5kIGEgZTgy MCBtYXAgaG9sZSBiZWxvdyA0Ry4gKi8KKyAgZm9yIChpID0gMDsgaSA8IG5yX21hcF9lbnRyaWVz OyBpKyspCisgICAgeworICAgICAgaWYgKGxhc3QgPiBtYXBbaV0uYWRkciArIG1hcFtpXS5sZW4p CisJY29udGludWU7CisgICAgICBpZiAobGFzdCA8IG1hcFtpXS5hZGRyKQorCXJldHVybiBsYXN0 OworICAgICAgaWYgKChtYXBbaV0uYWRkciA+PiAzMikgfHwgKChtYXBbaV0uYWRkciArIG1hcFtp XS5sZW4pID4+IDMyKSkKKwlicmVhazsKKyAgICAgIGxhc3QgPSBtYXBbaV0uYWRkciArIG1hcFtp XS5sZW47CisgICAgfQorICAgIGlmIChpID09IG5yX21hcF9lbnRyaWVzKQorICAgICAgcmV0dXJu IGxhc3Q7CisKKyAgLyogTm8gaG9sZSBmb3VuZCwgdXNlIHRoZSBoaWdoZXN0IFJBTSBwYWdlIGJl bG93IDRHIGFuZCByZXNlcnZlIGl0LiAqLworICBpZiAobnJfbWFwX2VudHJpZXMgPT0gQVJSQVlf U0laRSAobWFwKSkKKyAgICBncnViX3hlbl9wYW5pYyAoIk1lbW9yeSBtYXAgc2l6ZSBsaW1pdCBy ZWFjaGVkLlxuIik7CisgIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbnJfbWFwX2VudHJpZXM7IGkr KykKKyAgICB7CisgICAgICBpZiAobWFwW2ldLnR5cGUgIT0gR1JVQl9NRU1PUllfQVZBSUxBQkxF KQorCWNvbnRpbnVlOworICAgICAgaWYgKG1hcFtpXS5hZGRyID4+IDMyKQorCWJyZWFrOworICAg ICAgaiA9IGk7CisgICAgICBpZiAoKG1hcFtpXS5hZGRyICsgbWFwW2ldLmxlbikgPj4gMzIpCisJ YnJlYWs7CisgICAgfQorICBpZiAobWFwW2pdLnR5cGUgIT0gR1JVQl9NRU1PUllfQVZBSUxBQkxF KQorICAgIGdydWJfeGVuX3BhbmljICgiTm8gZnJlZSBtZW1vcnkgcGFnZSBmb3VuZC5cbiIpOwor ICBpZiAoKG1hcFtqXS5hZGRyICsgbWFwW2pdLmxlbikgPj4gMzIpCisgICAgbGFzdCA9ICgxVUxM IDw8IDMyKSAtIEdSVUJfWEVOX1BBR0VfU0laRTsKKyAgZWxzZQorICAgIGxhc3QgPSBtYXBbal0u YWRkciArIG1hcFtqXS5sZW4gLSBHUlVCX1hFTl9QQUdFX1NJWkU7CisgIG1hcFtucl9tYXBfZW50 cmllc10uYWRkciA9IGxhc3Q7CisgIG1hcFtucl9tYXBfZW50cmllc10ubGVuID0gR1JVQl9YRU5f UEFHRV9TSVpFOworICBtYXBbbnJfbWFwX2VudHJpZXNdLnR5cGUgPSBHUlVCX01FTU9SWV9SRVNF UlZFRDsKKyAgbnJfbWFwX2VudHJpZXMrKzsKKyAgZ3J1Yl94ZW5fc29ydF9tbWFwICgpOworCisg IHJldHVybiBsYXN0OworfQorCiB2b2lkCiBncnViX3hlbl9zZXR1cF9wdmggKHZvaWQpCiB7Cisg IGdydWJfYWRkcl90IHBhcjsKKwogICBncnViX3hlbl9jcHVpZF9iYXNlICgpOwogICBncnViX3hl bl9zZXR1cF9oeXBlcmNhbGxfcGFnZSAoKTsKICAgZ3J1Yl94ZW5fZ2V0X21tYXAgKCk7CisKKyAg LyogU2V0dXAgWGVuIGRhdGEuICovCisgIGdydWJfeGVuX3N0YXJ0X3BhZ2VfYWRkciA9ICZncnVi X3hlbl9zdGFydF9wYWdlOworCisgIHBhciA9IGdydWJfeGVuX2dldF9wYXJhbSAoSFZNX1BBUkFN X0NPTlNPTEVfUEZOKTsKKyAgZ3J1Yl94ZW5fc3RhcnRfcGFnZV9hZGRyLT5jb25zb2xlLmRvbVUu bWZuID0gcGFyOworICBncnViX3hlbl94Y29ucyA9ICh2b2lkICopIChncnViX2FkZHJfdCkgKHBh ciA8PCBHUlVCX1hFTl9MT0dfUEFHRV9TSVpFKTsKKyAgcGFyID0gZ3J1Yl94ZW5fZ2V0X3BhcmFt IChIVk1fUEFSQU1fQ09OU09MRV9FVlRDSE4pOworICBncnViX3hlbl9zdGFydF9wYWdlX2FkZHIt PmNvbnNvbGUuZG9tVS5ldnRjaG4gPSBwYXI7CisKKyAgcGFyID0gZ3J1Yl94ZW5fZ2V0X3BhcmFt IChIVk1fUEFSQU1fU1RPUkVfUEZOKTsKKyAgZ3J1Yl94ZW5fc3RhcnRfcGFnZV9hZGRyLT5zdG9y ZV9tZm4gPSBwYXI7CisgIGdydWJfeGVuX3hlbnN0b3JlID0gKHZvaWQgKikgKGdydWJfYWRkcl90 KSAocGFyIDw8IEdSVUJfWEVOX0xPR19QQUdFX1NJWkUpOworICBwYXIgPSBncnViX3hlbl9nZXRf cGFyYW0gKEhWTV9QQVJBTV9TVE9SRV9FVlRDSE4pOworICBncnViX3hlbl9zdGFydF9wYWdlX2Fk ZHItPnN0b3JlX2V2dGNobiA9IHBhcjsKKworICBwYXIgPSBncnViX3hlbl9maW5kX3BhZ2UgKDAp OworICBncnViX3hlbl9ncmFudF90YWJsZSA9IGdydWJfeGVuX2FkZF9waHlzbWFwIChYRU5NQVBT UEFDRV9ncmFudF90YWJsZSwKKwkJCQkJICAgICAgICh2b2lkICopIHBhcik7CisgIHBhciA9IGdy dWJfeGVuX2ZpbmRfcGFnZSAocGFyICsgR1JVQl9YRU5fUEFHRV9TSVpFKTsKKyAgZ3J1Yl94ZW5f c2hhcmVkX2luZm8gPSBncnViX3hlbl9hZGRfcGh5c21hcCAoWEVOTUFQU1BBQ0Vfc2hhcmVkX2lu Zm8sCisJCQkJCSAgICAgICAodm9pZCAqKSBwYXIpOworICBncnViX3hlbl9zZXRfbW1hcCAoKTsK KworICBncnViX3JzZHBfYWRkciA9IHB2aF9zdGFydF9pbmZvLT5yc2RwX3BhZGRyOwogfQogCiBn cnViX2Vycl90Ci0tIAoyLjE2LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5w cm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8v eGVuLWRldmVs From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1gIYwU-0006rd-VE for mharc-grub-devel@gnu.org; Fri, 02 Nov 2018 08:52:51 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43602) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gIYwM-0005QI-Ur for grub-devel@gnu.org; Fri, 02 Nov 2018 08:52:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gIYiA-00058C-5B for grub-devel@gnu.org; Fri, 02 Nov 2018 08:38:05 -0400 Received: from mx2.suse.de ([195.135.220.15]:50250 helo=mx1.suse.de) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gIYi9-00052g-O3 for grub-devel@gnu.org; Fri, 02 Nov 2018 08:38:02 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id C601DAF3C; Fri, 2 Nov 2018 12:37:43 +0000 (UTC) From: Juergen Gross To: grub-devel@gnu.org Cc: xen-devel@lists.xen.org, phcoder@gmail.com, daniel.kiper@oracle.com, hans@knorrie.org, Juergen Gross Subject: [PATCH v4 13/19] xen: setup Xen specific data for PVH Date: Fri, 2 Nov 2018 13:37:32 +0100 Message-Id: <20181102123738.16395-14-jgross@suse.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20181102123738.16395-1-jgross@suse.com> References: <20181102123738.16395-1-jgross@suse.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x (no timestamps) [generic] X-Received-From: 195.135.220.15 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Nov 2018 12:52:45 -0000 Initialize the needed Xen specific data. This is: - the Xen start of day page containing the console and Xenstore ring page PFN and event channel - the grant table - the shared info page Write back the possibly modified memory map to the hypervisor in case the guest is reading it from there again. Set the RSDP address for the guest from the start_info page passed as boot parameter. Signed-off-by: Juergen Gross --- V4: write back memory map to Xen (Roger Pau Monn=C3=A9) --- grub-core/kern/i386/xen/pvh.c | 119 ++++++++++++++++++++++++++++++++++++= ++++++ 1 file changed, 119 insertions(+) diff --git a/grub-core/kern/i386/xen/pvh.c b/grub-core/kern/i386/xen/pvh.= c index 442351d1d..d74301f92 100644 --- a/grub-core/kern/i386/xen/pvh.c +++ b/grub-core/kern/i386/xen/pvh.c @@ -27,6 +27,7 @@ #include #include #include +#include #include =20 #define XEN_CONSOLE_PORT 0xe9 @@ -39,6 +40,7 @@ static char hypercall_page[GRUB_XEN_PAGE_SIZE] __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE))); =20 static grub_uint32_t xen_cpuid_base; +static struct start_info grub_xen_start_page; static struct grub_e820_mmap_entry map[XEN_MEMORY_MAP_SIZE]; static unsigned int nr_map_entries; =20 @@ -100,6 +102,36 @@ grub_xen_hypercall (grub_uint32_t callno, grub_uint3= 2_t a0, return __res; } =20 +static grub_uint32_t +grub_xen_get_param (int idx) +{ + struct xen_hvm_param xhv; + int r; + + xhv.domid =3D DOMID_SELF; + xhv.index =3D idx; + r =3D grub_xen_hypercall (__HYPERVISOR_hvm_op, HVMOP_get_param, + (grub_uint32_t) (&xhv), 0, 0, 0, 0); + if (r < 0) + grub_xen_panic ("Could not get parameter from Xen.\n"); + return xhv.value; +} + +static void * +grub_xen_add_physmap (unsigned int space, void *addr) +{ + struct xen_add_to_physmap xatp; + + xatp.domid =3D DOMID_SELF; + xatp.idx =3D 0; + xatp.space =3D space; + xatp.gpfn =3D (grub_addr_t) addr >> GRUB_XEN_LOG_PAGE_SIZE; + if (grub_xen_hypercall (__HYPERVISOR_memory_op, XENMEM_add_to_physmap, + (grub_uint32_t) (&xatp), 0, 0, 0, 0)) + grub_xen_panic ("Memory_op hypercall failed.\n"); + return addr; +} + static void grub_xen_sort_mmap (void) { @@ -255,12 +287,99 @@ grub_xen_get_mmap (void) grub_xen_sort_mmap (); } =20 +static void +grub_xen_set_mmap (void) +{ + struct xen_foreign_memory_map memmap; + + memmap.domid =3D DOMID_SELF; + memmap.map.nr_entries =3D nr_map_entries; + set_xen_guest_handle (memmap.map.buffer, map); + grub_xen_hypercall (__HYPERVISOR_memory_op, XENMEM_set_memory_map, + (grub_uint32_t) (&memmap), 0, 0, 0, 0); +} + +static grub_uint64_t +grub_xen_find_page (grub_uint64_t start) +{ + unsigned int i, j; + grub_uint64_t last =3D start; + + /* Try to find a e820 map hole below 4G. */ + for (i =3D 0; i < nr_map_entries; i++) + { + if (last > map[i].addr + map[i].len) + continue; + if (last < map[i].addr) + return last; + if ((map[i].addr >> 32) || ((map[i].addr + map[i].len) >> 32)) + break; + last =3D map[i].addr + map[i].len; + } + if (i =3D=3D nr_map_entries) + return last; + + /* No hole found, use the highest RAM page below 4G and reserve it. */ + if (nr_map_entries =3D=3D ARRAY_SIZE (map)) + grub_xen_panic ("Memory map size limit reached.\n"); + for (i =3D 0, j =3D 0; i < nr_map_entries; i++) + { + if (map[i].type !=3D GRUB_MEMORY_AVAILABLE) + continue; + if (map[i].addr >> 32) + break; + j =3D i; + if ((map[i].addr + map[i].len) >> 32) + break; + } + if (map[j].type !=3D GRUB_MEMORY_AVAILABLE) + grub_xen_panic ("No free memory page found.\n"); + if ((map[j].addr + map[j].len) >> 32) + last =3D (1ULL << 32) - GRUB_XEN_PAGE_SIZE; + else + last =3D map[j].addr + map[j].len - GRUB_XEN_PAGE_SIZE; + map[nr_map_entries].addr =3D last; + map[nr_map_entries].len =3D GRUB_XEN_PAGE_SIZE; + map[nr_map_entries].type =3D GRUB_MEMORY_RESERVED; + nr_map_entries++; + grub_xen_sort_mmap (); + + return last; +} + void grub_xen_setup_pvh (void) { + grub_addr_t par; + grub_xen_cpuid_base (); grub_xen_setup_hypercall_page (); grub_xen_get_mmap (); + + /* Setup Xen data. */ + grub_xen_start_page_addr =3D &grub_xen_start_page; + + par =3D grub_xen_get_param (HVM_PARAM_CONSOLE_PFN); + grub_xen_start_page_addr->console.domU.mfn =3D par; + grub_xen_xcons =3D (void *) (grub_addr_t) (par << GRUB_XEN_LOG_PAGE_SI= ZE); + par =3D grub_xen_get_param (HVM_PARAM_CONSOLE_EVTCHN); + grub_xen_start_page_addr->console.domU.evtchn =3D par; + + par =3D grub_xen_get_param (HVM_PARAM_STORE_PFN); + grub_xen_start_page_addr->store_mfn =3D par; + grub_xen_xenstore =3D (void *) (grub_addr_t) (par << GRUB_XEN_LOG_PAGE= _SIZE); + par =3D grub_xen_get_param (HVM_PARAM_STORE_EVTCHN); + grub_xen_start_page_addr->store_evtchn =3D par; + + par =3D grub_xen_find_page (0); + grub_xen_grant_table =3D grub_xen_add_physmap (XENMAPSPACE_grant_table= , + (void *) par); + par =3D grub_xen_find_page (par + GRUB_XEN_PAGE_SIZE); + grub_xen_shared_info =3D grub_xen_add_physmap (XENMAPSPACE_shared_info= , + (void *) par); + grub_xen_set_mmap (); + + grub_rsdp_addr =3D pvh_start_info->rsdp_paddr; } =20 grub_err_t --=20 2.16.4