cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

start_info.h (6377B)


      1/* SPDX-License-Identifier: MIT */
      2/*
      3 * Copyright (c) 2016, Citrix Systems, Inc.
      4 */
      5
      6#ifndef __XEN_PUBLIC_ARCH_X86_HVM_START_INFO_H__
      7#define __XEN_PUBLIC_ARCH_X86_HVM_START_INFO_H__
      8
      9/*
     10 * Start of day structure passed to PVH guests and to HVM guests in %ebx.
     11 *
     12 * NOTE: nothing will be loaded at physical address 0, so a 0 value in any
     13 * of the address fields should be treated as not present.
     14 *
     15 *  0 +----------------+
     16 *    | magic          | Contains the magic value XEN_HVM_START_MAGIC_VALUE
     17 *    |                | ("xEn3" with the 0x80 bit of the "E" set).
     18 *  4 +----------------+
     19 *    | version        | Version of this structure. Current version is 1. New
     20 *    |                | versions are guaranteed to be backwards-compatible.
     21 *  8 +----------------+
     22 *    | flags          | SIF_xxx flags.
     23 * 12 +----------------+
     24 *    | nr_modules     | Number of modules passed to the kernel.
     25 * 16 +----------------+
     26 *    | modlist_paddr  | Physical address of an array of modules
     27 *    |                | (layout of the structure below).
     28 * 24 +----------------+
     29 *    | cmdline_paddr  | Physical address of the command line,
     30 *    |                | a zero-terminated ASCII string.
     31 * 32 +----------------+
     32 *    | rsdp_paddr     | Physical address of the RSDP ACPI data structure.
     33 * 40 +----------------+
     34 *    | memmap_paddr   | Physical address of the (optional) memory map. Only
     35 *    |                | present in version 1 and newer of the structure.
     36 * 48 +----------------+
     37 *    | memmap_entries | Number of entries in the memory map table. Zero
     38 *    |                | if there is no memory map being provided. Only
     39 *    |                | present in version 1 and newer of the structure.
     40 * 52 +----------------+
     41 *    | reserved       | Version 1 and newer only.
     42 * 56 +----------------+
     43 *
     44 * The layout of each entry in the module structure is the following:
     45 *
     46 *  0 +----------------+
     47 *    | paddr          | Physical address of the module.
     48 *  8 +----------------+
     49 *    | size           | Size of the module in bytes.
     50 * 16 +----------------+
     51 *    | cmdline_paddr  | Physical address of the command line,
     52 *    |                | a zero-terminated ASCII string.
     53 * 24 +----------------+
     54 *    | reserved       |
     55 * 32 +----------------+
     56 *
     57 * The layout of each entry in the memory map table is as follows:
     58 *
     59 *  0 +----------------+
     60 *    | addr           | Base address
     61 *  8 +----------------+
     62 *    | size           | Size of mapping in bytes
     63 * 16 +----------------+
     64 *    | type           | Type of mapping as defined between the hypervisor
     65 *    |                | and guest. See XEN_HVM_MEMMAP_TYPE_* values below.
     66 * 20 +----------------|
     67 *    | reserved       |
     68 * 24 +----------------+
     69 *
     70 * The address and sizes are always a 64bit little endian unsigned integer.
     71 *
     72 * NB: Xen on x86 will always try to place all the data below the 4GiB
     73 * boundary.
     74 *
     75 * Version numbers of the hvm_start_info structure have evolved like this:
     76 *
     77 * Version 0:  Initial implementation.
     78 *
     79 * Version 1:  Added the memmap_paddr/memmap_entries fields (plus 4 bytes of
     80 *             padding) to the end of the hvm_start_info struct. These new
     81 *             fields can be used to pass a memory map to the guest. The
     82 *             memory map is optional and so guests that understand version 1
     83 *             of the structure must check that memmap_entries is non-zero
     84 *             before trying to read the memory map.
     85 */
     86#define XEN_HVM_START_MAGIC_VALUE 0x336ec578
     87
     88/*
     89 * The values used in the type field of the memory map table entries are
     90 * defined below and match the Address Range Types as defined in the "System
     91 * Address Map Interfaces" section of the ACPI Specification. Please refer to
     92 * section 15 in version 6.2 of the ACPI spec: http://uefi.org/specifications
     93 */
     94#define XEN_HVM_MEMMAP_TYPE_RAM       1
     95#define XEN_HVM_MEMMAP_TYPE_RESERVED  2
     96#define XEN_HVM_MEMMAP_TYPE_ACPI      3
     97#define XEN_HVM_MEMMAP_TYPE_NVS       4
     98#define XEN_HVM_MEMMAP_TYPE_UNUSABLE  5
     99#define XEN_HVM_MEMMAP_TYPE_DISABLED  6
    100#define XEN_HVM_MEMMAP_TYPE_PMEM      7
    101
    102/*
    103 * C representation of the x86/HVM start info layout.
    104 *
    105 * The canonical definition of this layout is above, this is just a way to
    106 * represent the layout described there using C types.
    107 */
    108struct hvm_start_info {
    109    uint32_t magic;             /* Contains the magic value 0x336ec578       */
    110                                /* ("xEn3" with the 0x80 bit of the "E" set).*/
    111    uint32_t version;           /* Version of this structure.                */
    112    uint32_t flags;             /* SIF_xxx flags.                            */
    113    uint32_t nr_modules;        /* Number of modules passed to the kernel.   */
    114    uint64_t modlist_paddr;     /* Physical address of an array of           */
    115                                /* hvm_modlist_entry.                        */
    116    uint64_t cmdline_paddr;     /* Physical address of the command line.     */
    117    uint64_t rsdp_paddr;        /* Physical address of the RSDP ACPI data    */
    118                                /* structure.                                */
    119    /* All following fields only present in version 1 and newer */
    120    uint64_t memmap_paddr;      /* Physical address of an array of           */
    121                                /* hvm_memmap_table_entry.                   */
    122    uint32_t memmap_entries;    /* Number of entries in the memmap table.    */
    123                                /* Value will be zero if there is no memory  */
    124                                /* map being provided.                       */
    125    uint32_t reserved;          /* Must be zero.                             */
    126};
    127
    128struct hvm_modlist_entry {
    129    uint64_t paddr;             /* Physical address of the module.           */
    130    uint64_t size;              /* Size of the module in bytes.              */
    131    uint64_t cmdline_paddr;     /* Physical address of the command line.     */
    132    uint64_t reserved;
    133};
    134
    135struct hvm_memmap_table_entry {
    136    uint64_t addr;              /* Base address of the memory region         */
    137    uint64_t size;              /* Size of the memory region in bytes        */
    138    uint32_t type;              /* Mapping type                              */
    139    uint32_t reserved;          /* Must be zero for Version 1.               */
    140};
    141
    142#endif /* __XEN_PUBLIC_ARCH_X86_HVM_START_INFO_H__ */