cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

start_info.h (6773B)


      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. Only
     55 *    |                | present in version 1 and newer of the structure.
     56 *    |                | Zero if there is no memory map being provided.
     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 it's starting. E820_TYPE_xxx, for example.
     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:
     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 * C representation of the x86/HVM start info layout.
    107 *
    108 * The canonical definition of this layout is above, this is just a way to
    109 * represent the layout described there using C types.
    110 */
    111struct hvm_start_info {
    112    uint32_t magic;             /* Contains the magic value 0x336ec578       */
    113                                /* ("xEn3" with the 0x80 bit of the "E" set).*/
    114    uint32_t version;           /* Version of this structure.                */
    115    uint32_t flags;             /* SIF_xxx flags.                            */
    116    uint32_t nr_modules;        /* Number of modules passed to the kernel.   */
    117    uint64_t modlist_paddr;     /* Physical address of an array of           */
    118                                /* hvm_modlist_entry.                        */
    119    uint64_t cmdline_paddr;     /* Physical address of the command line.     */
    120    uint64_t rsdp_paddr;        /* Physical address of the RSDP ACPI data    */
    121                                /* structure.                                */
    122    uint64_t memmap_paddr;      /* Physical address of an array of           */
    123                                /* hvm_memmap_table_entry. Only present in   */
    124                                /* version 1 and newer of the structure      */
    125    uint32_t memmap_entries;    /* Number of entries in the memmap table.    */
    126                                /* Only present in version 1 and newer of    */
    127                                /* the structure. Value will be zero if      */
    128                                /* there is no memory map being provided.    */
    129    uint32_t reserved;
    130};
    131
    132struct hvm_modlist_entry {
    133    uint64_t paddr;             /* Physical address of the module.           */
    134    uint64_t size;              /* Size of the module in bytes.              */
    135    uint64_t cmdline_paddr;     /* Physical address of the command line.     */
    136    uint64_t reserved;
    137};
    138
    139struct hvm_memmap_table_entry {
    140    uint64_t addr;              /* Base address of the memory region         */
    141    uint64_t size;              /* Size of the memory region in bytes        */
    142    uint32_t type;              /* Mapping type                              */
    143    uint32_t reserved;
    144};
    145
    146#endif /* XEN_PUBLIC_ARCH_X86_HVM_START_INFO_H */