From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PULL 14/77] pvh: Add x86/HVM direct boot ABI header file
Date: Mon, 4 Feb 2019 19:35:16 +0100 [thread overview]
Message-ID: <1549305379-51117-15-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1549305379-51117-1-git-send-email-pbonzini@redhat.com>
From: Liam Merwick <Liam.Merwick@oracle.com>
The x86/HVM direct boot ABI permits Qemu to be able to boot directly
into the uncompressed Linux kernel binary with minimal firmware involvement.
https://xenbits.xen.org/docs/unstable/misc/pvh.html
This commit adds the header file that defines the start_info struct
that needs to be populated in order to use this ABI.
The canonical version of start_info.h is in the Xen codebase.
(like QEMU, the Linux kernel uses a copy as well).
Signed-off-by: Liam Merwick <Liam.Merwick@oracle.com>
Reviewed-by: Konrad Rzeszutek Wilk <Konrad.Wilk@oracle.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
include/hw/xen/start_info.h | 146 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 146 insertions(+)
create mode 100644 include/hw/xen/start_info.h
diff --git a/include/hw/xen/start_info.h b/include/hw/xen/start_info.h
new file mode 100644
index 0000000..348779e
--- /dev/null
+++ b/include/hw/xen/start_info.h
@@ -0,0 +1,146 @@
+/*
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Copyright (c) 2016, Citrix Systems, Inc.
+ */
+
+#ifndef __XEN_PUBLIC_ARCH_X86_HVM_START_INFO_H__
+#define __XEN_PUBLIC_ARCH_X86_HVM_START_INFO_H__
+
+/*
+ * Start of day structure passed to PVH guests and to HVM guests in %ebx.
+ *
+ * NOTE: nothing will be loaded at physical address 0, so a 0 value in any
+ * of the address fields should be treated as not present.
+ *
+ * 0 +----------------+
+ * | magic | Contains the magic value XEN_HVM_START_MAGIC_VALUE
+ * | | ("xEn3" with the 0x80 bit of the "E" set).
+ * 4 +----------------+
+ * | version | Version of this structure. Current version is 1. New
+ * | | versions are guaranteed to be backwards-compatible.
+ * 8 +----------------+
+ * | flags | SIF_xxx flags.
+ * 12 +----------------+
+ * | nr_modules | Number of modules passed to the kernel.
+ * 16 +----------------+
+ * | modlist_paddr | Physical address of an array of modules
+ * | | (layout of the structure below).
+ * 24 +----------------+
+ * | cmdline_paddr | Physical address of the command line,
+ * | | a zero-terminated ASCII string.
+ * 32 +----------------+
+ * | rsdp_paddr | Physical address of the RSDP ACPI data structure.
+ * 40 +----------------+
+ * | memmap_paddr | Physical address of the (optional) memory map. Only
+ * | | present in version 1 and newer of the structure.
+ * 48 +----------------+
+ * | memmap_entries | Number of entries in the memory map table. Only
+ * | | present in version 1 and newer of the structure.
+ * | | Zero if there is no memory map being provided.
+ * 52 +----------------+
+ * | reserved | Version 1 and newer only.
+ * 56 +----------------+
+ *
+ * The layout of each entry in the module structure is the following:
+ *
+ * 0 +----------------+
+ * | paddr | Physical address of the module.
+ * 8 +----------------+
+ * | size | Size of the module in bytes.
+ * 16 +----------------+
+ * | cmdline_paddr | Physical address of the command line,
+ * | | a zero-terminated ASCII string.
+ * 24 +----------------+
+ * | reserved |
+ * 32 +----------------+
+ *
+ * The layout of each entry in the memory map table is as follows:
+ *
+ * 0 +----------------+
+ * | addr | Base address
+ * 8 +----------------+
+ * | size | Size of mapping in bytes
+ * 16 +----------------+
+ * | type | Type of mapping as defined between the hypervisor
+ * | | and guest it's starting. E820_TYPE_xxx, for example.
+ * 20 +----------------|
+ * | reserved |
+ * 24 +----------------+
+ *
+ * The address and sizes are always a 64bit little endian unsigned integer.
+ *
+ * NB: Xen on x86 will always try to place all the data below the 4GiB
+ * boundary.
+ *
+ * Version numbers of the hvm_start_info structure have evolved like this:
+ *
+ * Version 0:
+ *
+ * Version 1: Added the memmap_paddr/memmap_entries fields (plus 4 bytes of
+ * padding) to the end of the hvm_start_info struct. These new
+ * fields can be used to pass a memory map to the guest. The
+ * memory map is optional and so guests that understand version 1
+ * of the structure must check that memmap_entries is non-zero
+ * before trying to read the memory map.
+ */
+#define XEN_HVM_START_MAGIC_VALUE 0x336ec578
+
+/*
+ * C representation of the x86/HVM start info layout.
+ *
+ * The canonical definition of this layout is above, this is just a way to
+ * represent the layout described there using C types.
+ */
+struct hvm_start_info {
+ uint32_t magic; /* Contains the magic value 0x336ec578 */
+ /* ("xEn3" with the 0x80 bit of the "E" set).*/
+ uint32_t version; /* Version of this structure. */
+ uint32_t flags; /* SIF_xxx flags. */
+ uint32_t nr_modules; /* Number of modules passed to the kernel. */
+ uint64_t modlist_paddr; /* Physical address of an array of */
+ /* hvm_modlist_entry. */
+ uint64_t cmdline_paddr; /* Physical address of the command line. */
+ uint64_t rsdp_paddr; /* Physical address of the RSDP ACPI data */
+ /* structure. */
+ uint64_t memmap_paddr; /* Physical address of an array of */
+ /* hvm_memmap_table_entry. Only present in */
+ /* version 1 and newer of the structure */
+ uint32_t memmap_entries; /* Number of entries in the memmap table. */
+ /* Only present in version 1 and newer of */
+ /* the structure. Value will be zero if */
+ /* there is no memory map being provided. */
+ uint32_t reserved;
+};
+
+struct hvm_modlist_entry {
+ uint64_t paddr; /* Physical address of the module. */
+ uint64_t size; /* Size of the module in bytes. */
+ uint64_t cmdline_paddr; /* Physical address of the command line. */
+ uint64_t reserved;
+};
+
+struct hvm_memmap_table_entry {
+ uint64_t addr; /* Base address of the memory region */
+ uint64_t size; /* Size of the memory region in bytes */
+ uint32_t type; /* Mapping type */
+ uint32_t reserved;
+};
+
+#endif /* __XEN_PUBLIC_ARCH_X86_HVM_START_INFO_H__ */
--
1.8.3.1
next prev parent reply other threads:[~2019-02-04 18:36 UTC|newest]
Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-04 18:35 [Qemu-devel] [PULL 00/77] Misc patches for 2019-02-04 Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 01/77] vhost-user-test: use g_cond_broadcast Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 02/77] vhost-user-test: signal data_cond when s->rings changes Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 03/77] vhost-user: support cross-endian vnet headers Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 04/77] vhost-user-test: support VHOST_USER_PROTOCOL_F_CROSS_ENDIAN Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 05/77] vhost-user-test: skip if there is no memory at address 0 Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 06/77] vhost-user-test: reduce usage of global_qtest Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 07/77] tap: flush STDOUT on newline Paolo Bonzini
2019-02-05 20:24 ` Philippe Mathieu-Daudé
2019-02-04 18:35 ` [Qemu-devel] [PULL 08/77] cpu-exec: add assert_no_pages_locked() after longjmp Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 09/77] cpu-exec: reset BQL after longjmp in cpu_exec_step_atomic Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 10/77] configure: Add a proper check for openpty() in libutil Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 11/77] cpus: ignore ESRCH in qemu_cpu_kick_thread() Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 12/77] elf: Add optional function ptr to load_elf() to parse ELF notes Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 13/77] elf-ops.h: Add get_elf_note_type() Paolo Bonzini
2019-02-04 18:35 ` Paolo Bonzini [this message]
2019-02-04 18:35 ` [Qemu-devel] [PULL 15/77] pvh: Boot uncompressed kernel using direct boot ABI Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 16/77] pvh: load initrd and expose it through fw_cfg Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 17/77] linuxboot_dma: remove duplicate definitions of FW_CFG Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 18/77] linuxboot_dma: move common functions in a new header Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 19/77] optionrom: add new PVH option rom Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 20/77] hw/i386/pc: use " Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 21/77] optionrom/pvh: load initrd from fw_cfg Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 22/77] hw/i386/pc: enable PVH only for machine type >= 4.0 Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 23/77] i386: remove the new CPUID 'PCONFIG' from Icelake-Server CPU model Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 24/77] i386: remove the 'INTEL_PT' CPUID bit from named CPU models Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 25/77] Revert "i386: Add CPUID bit for PCONFIG" Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 26/77] target-i386: hvf: remove MPX support Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 27/77] contrib/elf2dmp: fix elf.h including Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 28/77] contrib/elf2dmp: use GLib in ELF processing Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 29/77] contrib/elf2dmp: use GLib in PDB processing Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 30/77] contrib/elf2dmp: fix structures definitions Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 32/77] configure: enable elf2dmp build for Windows hosts Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 33/77] monitor: do not use QTAILQ_FOREACH_SAFE across critical sections Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 34/77] crypto: finish removing TABs Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 35/77] ui: vnc: " Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 36/77] unify len and addr type for memory/address APIs Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 37/77] hw/core/loader.c: Read as long as possible in load_image_size() Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 38/77] i386: import & use bootparam.h Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 39/77] i386: allow to load initrd below 4 GB for recent linux Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 40/77] docker: adjust Xen repository for CentOS 7 Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 41/77] i386: hvf: Don't miss 16-bit displacement Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 42/77] gdbstub: Fix i386/x86_64 machine description and add control registers Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 43/77] scsi-generic: avoid possible out-of-bounds access to r->buf Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 44/77] Remove deprecated -enable-hax option Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 45/77] qemu-options: Remove deprecated "-virtioconsole" option Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 46/77] arm: disable CONFIG_SERIAL_ISA Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 47/77] ide: split ioport registration to a separate file Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 48/77] vfio: move conditional up to hw/Makefile.objs Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 49/77] hw/pci-host/Makefile.objs: make CONFIGS clear for PCI EXPRESS Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 50/77] build: actually use CONFIG_PAM Paolo Bonzini
2019-02-04 19:34 ` Philippe Mathieu-Daudé
2019-02-04 18:35 ` [Qemu-devel] [PULL 51/77] hw/i386/Makefile.objs: Build pc_piix* and pc_q35 boards Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 52/77] hw/arm/Makefile.objs: CONFIG_ARM_VIRT created for virt board Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 53/77] hw/m68k/Makefile.objs: Conditionally build boards Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 54/77] hw/microblaze/Makefile.objs: Create configs for petalogix and xilinx boards Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 55/77] hw/mips/Makefile.objs: Create CONFIG_* for r4k, malta, mipssim boards Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 56/77] hw/ppc/Makefile.objs: Build all boards conditinally with CONFIG_* Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 57/77] hw/sh4/Makefile.objs: New CONFIG_* varibales created for sh4 boards and device Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 58/77] hw/s390/Makefile.objs: Create new CONFIG_* variables for s390x boards and devices Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 59/77] hw/sparc/Makefile.objs: CONFIG_* for sun4m and leon3 created Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 60/77] hw/lm32/Makefile.objs: Conditionally build lm32 and milkmyst Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 61/77] hw/xtensa/Makefile.objs: Build xtensa_sim and xtensa_fpga conditionally Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 62/77] hw/nios2/Makefile.objs: Conditionally build nios2 Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 63/77] hw/riscv/Makefile.objs: Create CONFIG_* for riscv boards Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 64/77] hw/sparc64/Makefile.objs: Create CONFIG_* for sparc64 Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 65/77] hw/alpha/Makefile.objs: Create CONFIG_* for alpha Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 66/77] hw/cris/Makefile.objs: Create CONFIG_* for cris Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 67/77] hw/hppa/Makefile.objs: Create CONFIG_* for hppa Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 68/77] hw/moxie/Makefile.objs: Conditionally build moxie Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 69/77] hw/openrisc/Makefile.objs: Create CONFIG_* for openrisc Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 70/77] hw/tricore/Makefile.objs: Create CONFIG_* for tricore Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 71/77] hw/i2c/Makefile.objs: Create new CONFIG_* variables for EEPROM and ACPI controller Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 72/77] hw/vfio/Makefile.objs: Create new CONFIG_* variables for VFIO core and PCI Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 73/77] i386: hvf: Fix smp boot hangs Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 74/77] pc: Use hotplug_handler_(plug|unplug|unplug_request) Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 75/77] scsi-disk: Convert from DPRINTF() macro to trace events Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 77/77] queue: fix QTAILQ_FOREACH_REVERSE_SAFE Paolo Bonzini
2019-02-05 9:35 ` [Qemu-devel] [PULL 00/77] Misc patches for 2019-02-04 Peter Maydell
2019-02-05 11:27 ` Paolo Bonzini
2019-02-05 12:45 ` Peter Maydell
2019-02-05 14:34 ` Paolo Bonzini
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=1549305379-51117-15-git-send-email-pbonzini@redhat.com \
--to=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.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).