root/include/xen/interface/hvm/start_info.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2  * Permission is hereby granted, free of charge, to any person obtaining a copy
   3  * of this software and associated documentation files (the "Software"), to
   4  * deal in the Software without restriction, including without limitation the
   5  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
   6  * sell copies of the Software, and to permit persons to whom the Software is
   7  * furnished to do so, subject to the following conditions:
   8  *
   9  * The above copyright notice and this permission notice shall be included in
  10  * all copies or substantial portions of the Software.
  11  *
  12  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  13  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  14  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  15  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  16  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  17  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  18  * DEALINGS IN THE SOFTWARE.
  19  *
  20  * Copyright (c) 2016, Citrix Systems, Inc.
  21  */
  22 
  23 #ifndef __XEN_PUBLIC_ARCH_X86_HVM_START_INFO_H__
  24 #define __XEN_PUBLIC_ARCH_X86_HVM_START_INFO_H__
  25 
  26 /*
  27  * Start of day structure passed to PVH guests and to HVM guests in %ebx.
  28  *
  29  * NOTE: nothing will be loaded at physical address 0, so a 0 value in any
  30  * of the address fields should be treated as not present.
  31  *
  32  *  0 +----------------+
  33  *    | magic          | Contains the magic value XEN_HVM_START_MAGIC_VALUE
  34  *    |                | ("xEn3" with the 0x80 bit of the "E" set).
  35  *  4 +----------------+
  36  *    | version        | Version of this structure. Current version is 1. New
  37  *    |                | versions are guaranteed to be backwards-compatible.
  38  *  8 +----------------+
  39  *    | flags          | SIF_xxx flags.
  40  * 12 +----------------+
  41  *    | nr_modules     | Number of modules passed to the kernel.
  42  * 16 +----------------+
  43  *    | modlist_paddr  | Physical address of an array of modules
  44  *    |                | (layout of the structure below).
  45  * 24 +----------------+
  46  *    | cmdline_paddr  | Physical address of the command line,
  47  *    |                | a zero-terminated ASCII string.
  48  * 32 +----------------+
  49  *    | rsdp_paddr     | Physical address of the RSDP ACPI data structure.
  50  * 40 +----------------+
  51  *    | memmap_paddr   | Physical address of the (optional) memory map. Only
  52  *    |                | present in version 1 and newer of the structure.
  53  * 48 +----------------+
  54  *    | memmap_entries | Number of entries in the memory map table. Zero
  55  *    |                | if there is no memory map being provided. Only
  56  *    |                | present in version 1 and newer of the structure.
  57  * 52 +----------------+
  58  *    | reserved       | Version 1 and newer only.
  59  * 56 +----------------+
  60  *
  61  * The layout of each entry in the module structure is the following:
  62  *
  63  *  0 +----------------+
  64  *    | paddr          | Physical address of the module.
  65  *  8 +----------------+
  66  *    | size           | Size of the module in bytes.
  67  * 16 +----------------+
  68  *    | cmdline_paddr  | Physical address of the command line,
  69  *    |                | a zero-terminated ASCII string.
  70  * 24 +----------------+
  71  *    | reserved       |
  72  * 32 +----------------+
  73  *
  74  * The layout of each entry in the memory map table is as follows:
  75  *
  76  *  0 +----------------+
  77  *    | addr           | Base address
  78  *  8 +----------------+
  79  *    | size           | Size of mapping in bytes
  80  * 16 +----------------+
  81  *    | type           | Type of mapping as defined between the hypervisor
  82  *    |                | and guest. See XEN_HVM_MEMMAP_TYPE_* values below.
  83  * 20 +----------------|
  84  *    | reserved       |
  85  * 24 +----------------+
  86  *
  87  * The address and sizes are always a 64bit little endian unsigned integer.
  88  *
  89  * NB: Xen on x86 will always try to place all the data below the 4GiB
  90  * boundary.
  91  *
  92  * Version numbers of the hvm_start_info structure have evolved like this:
  93  *
  94  * Version 0:  Initial implementation.
  95  *
  96  * Version 1:  Added the memmap_paddr/memmap_entries fields (plus 4 bytes of
  97  *             padding) to the end of the hvm_start_info struct. These new
  98  *             fields can be used to pass a memory map to the guest. The
  99  *             memory map is optional and so guests that understand version 1
 100  *             of the structure must check that memmap_entries is non-zero
 101  *             before trying to read the memory map.
 102  */
 103 #define XEN_HVM_START_MAGIC_VALUE 0x336ec578
 104 
 105 /*
 106  * The values used in the type field of the memory map table entries are
 107  * defined below and match the Address Range Types as defined in the "System
 108  * Address Map Interfaces" section of the ACPI Specification. Please refer to
 109  * section 15 in version 6.2 of the ACPI spec: http://uefi.org/specifications
 110  */
 111 #define XEN_HVM_MEMMAP_TYPE_RAM       1
 112 #define XEN_HVM_MEMMAP_TYPE_RESERVED  2
 113 #define XEN_HVM_MEMMAP_TYPE_ACPI      3
 114 #define XEN_HVM_MEMMAP_TYPE_NVS       4
 115 #define XEN_HVM_MEMMAP_TYPE_UNUSABLE  5
 116 #define XEN_HVM_MEMMAP_TYPE_DISABLED  6
 117 #define XEN_HVM_MEMMAP_TYPE_PMEM      7
 118 
 119 /*
 120  * C representation of the x86/HVM start info layout.
 121  *
 122  * The canonical definition of this layout is above, this is just a way to
 123  * represent the layout described there using C types.
 124  */
 125 struct hvm_start_info {
 126     uint32_t magic;             /* Contains the magic value 0x336ec578       */
 127                                 /* ("xEn3" with the 0x80 bit of the "E" set).*/
 128     uint32_t version;           /* Version of this structure.                */
 129     uint32_t flags;             /* SIF_xxx flags.                            */
 130     uint32_t nr_modules;        /* Number of modules passed to the kernel.   */
 131     uint64_t modlist_paddr;     /* Physical address of an array of           */
 132                                 /* hvm_modlist_entry.                        */
 133     uint64_t cmdline_paddr;     /* Physical address of the command line.     */
 134     uint64_t rsdp_paddr;        /* Physical address of the RSDP ACPI data    */
 135                                 /* structure.                                */
 136     /* All following fields only present in version 1 and newer */
 137     uint64_t memmap_paddr;      /* Physical address of an array of           */
 138                                 /* hvm_memmap_table_entry.                   */
 139     uint32_t memmap_entries;    /* Number of entries in the memmap table.    */
 140                                 /* Value will be zero if there is no memory  */
 141                                 /* map being provided.                       */
 142     uint32_t reserved;          /* Must be zero.                             */
 143 };
 144 
 145 struct hvm_modlist_entry {
 146     uint64_t paddr;             /* Physical address of the module.           */
 147     uint64_t size;              /* Size of the module in bytes.              */
 148     uint64_t cmdline_paddr;     /* Physical address of the command line.     */
 149     uint64_t reserved;
 150 };
 151 
 152 struct hvm_memmap_table_entry {
 153     uint64_t addr;              /* Base address of the memory region         */
 154     uint64_t size;              /* Size of the memory region in bytes        */
 155     uint32_t type;              /* Mapping type                              */
 156     uint32_t reserved;          /* Must be zero for Version 1.               */
 157 };
 158 
 159 #endif /* __XEN_PUBLIC_ARCH_X86_HVM_START_INFO_H__ */

/* [<][>][^][v][top][bottom][index][help] */