Skip to main content

linux_loader/loader_gen/x86_64/
start_info.rs

1// Rust translation of xen/include/public/arch-x86/hvm/start_info.h
2
3#![allow(non_camel_case_types)]
4
5pub const XEN_HVM_START_MAGIC_VALUE: u32 = 0x336ec578;
6
7pub const XEN_HVM_MEMMAP_TYPE_RAM: u32 = 1;
8pub const XEN_HVM_MEMMAP_TYPE_RESERVED: u32 = 2;
9pub const XEN_HVM_MEMMAP_TYPE_ACPI: u32 = 3;
10pub const XEN_HVM_MEMMAP_TYPE_NVS: u32 = 4;
11pub const XEN_HVM_MEMMAP_TYPE_UNUSABLE: u32 = 5;
12pub const XEN_HVM_MEMMAP_TYPE_DISABLED: u32 = 6;
13pub const XEN_HVM_MEMMAP_TYPE_PMEM: u32 = 7;
14
15/// Start of day structure passed to PVH guests and to HVM guests in %ebx.
16///
17/// A 0 value in any address field means not present.
18/// Version 0 ends after `rsdp_paddr`; fields from `memmap_paddr` onward
19/// are only present in version 1+.
20#[repr(C)]
21#[derive(Debug, Default, Copy, Clone, PartialEq)]
22pub struct hvm_start_info {
23    pub magic: u32,
24    pub version: u32,
25    pub flags: u32,
26    pub nr_modules: u32,
27    pub modlist_paddr: u64,
28    pub cmdline_paddr: u64,
29    pub rsdp_paddr: u64,
30    pub memmap_paddr: u64,
31    pub memmap_entries: u32,
32    pub reserved: u32,
33}
34
35#[repr(C)]
36#[derive(Debug, Default, Copy, Clone, PartialEq)]
37pub struct hvm_modlist_entry {
38    pub paddr: u64,
39    pub size: u64,
40    pub cmdline_paddr: u64,
41    pub reserved: u64,
42}
43
44#[repr(C)]
45#[derive(Debug, Default, Copy, Clone, PartialEq)]
46pub struct hvm_memmap_table_entry {
47    pub addr: u64,
48    pub size: u64,
49    pub type_: u32,
50    pub reserved: u32,
51}
52
53// Compile-time layout assertions (sizes from the spec comments)
54const _: () = assert!(core::mem::size_of::<hvm_start_info>() == 56);
55const _: () = assert!(core::mem::size_of::<hvm_modlist_entry>() == 32);
56const _: () = assert!(core::mem::size_of::<hvm_memmap_table_entry>() == 24);