The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/xen/arch-x86/hvm/start_info.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    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__ */

Cache object: a7054b492fb529cf3d299052cf2b180e


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.