hyperlight_common/mem/
mod.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/*
Copyright 2024 The Hyperlight Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

#![allow(non_snake_case)]

pub const PAGE_SHIFT: u64 = 12;
pub const PAGE_SIZE: u64 = 1 << 12;
pub const PAGE_SIZE_USIZE: usize = 1 << 12;

use core::ffi::{c_char, c_void};

#[repr(C)]
pub struct HostFunctionDefinitions {
    pub fbHostFunctionDetailsSize: u64,
    pub fbHostFunctionDetails: *mut c_void,
}

#[repr(C)]
pub struct HostException {
    pub hostExceptionSize: u64,
}

#[repr(C)]
pub struct GuestErrorData {
    pub guestErrorSize: u64,
    pub guestErrorBuffer: *mut c_void,
}

#[repr(u64)]
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub enum RunMode {
    None = 0,
    Hypervisor = 1,
    InProcessWindows = 2,
    InProcessLinux = 3,
    Invalid = 4,
}

#[repr(C)]
pub struct InputData {
    pub inputDataSize: u64,
    pub inputDataBuffer: *mut c_void,
}

#[repr(C)]
pub struct OutputData {
    pub outputDataSize: u64,
    pub outputDataBuffer: *mut c_void,
}

#[repr(C)]
pub struct GuestHeapData {
    pub guestHeapSize: u64,
    pub guestHeapBuffer: *mut c_void,
}

#[repr(C)]
pub struct GuestStackData {
    /// This is the top of the user stack
    pub minUserStackAddress: u64,
    /// This is the user stack pointer
    pub userStackAddress: u64,
    /// This is the stack pointer for the kernel mode stack
    pub kernelStackAddress: u64,
    /// This is the initial stack pointer when init is called its used before the TSS is set up
    pub bootStackAddress: u64,
}

#[repr(C)]
pub struct GuestPanicContextData {
    pub guestPanicContextDataSize: u64,
    pub guestPanicContextDataBuffer: *mut c_void,
}

#[repr(C)]
pub struct HyperlightPEB {
    pub security_cookie_seed: u64,
    pub guest_function_dispatch_ptr: u64,
    pub hostFunctionDefinitions: HostFunctionDefinitions,
    pub hostException: HostException,
    pub guestErrorData: GuestErrorData,
    pub pCode: *mut c_char,
    pub pOutb: *mut c_void,
    pub pOutbContext: *mut c_void,
    pub runMode: RunMode,
    pub inputdata: InputData,
    pub outputdata: OutputData,
    pub guestPanicContextData: GuestPanicContextData,
    pub guestheapData: GuestHeapData,
    pub gueststackData: GuestStackData,
}