openhcl_boot/arch/x86_64/
mod.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4#![cfg(target_arch = "x86_64")]
5
6//! x86_64 architecture-specific implementations.
7
8mod address_space;
9pub mod hypercall;
10mod memory;
11pub mod snp;
12pub mod tdx;
13mod vp;
14mod vsm;
15
16use crate::host_params::shim_params::IsolationType;
17pub use address_space::TdxHypercallPage;
18pub use memory::setup_vtl2_memory;
19pub use memory::verify_imported_regions_hash;
20use safe_intrinsics::cpuid;
21pub use vp::setup_vtl2_vp;
22pub use vsm::get_isolation_type;
23use x86defs::cpuid::CpuidFunction;
24
25pub fn physical_address_bits(isolation: IsolationType) -> u8 {
26    if isolation.is_hardware_isolated() {
27        unimplemented!("can't trust host cpuid");
28    }
29    const DEFAULT_PHYSICAL_ADDRESS_SIZE: u8 = 32;
30
31    let max_extended = {
32        let result = cpuid(CpuidFunction::ExtendedMaxFunction.0, 0);
33        result.eax
34    };
35    if max_extended >= CpuidFunction::ExtendedAddressSpaceSizes.0 {
36        let result = cpuid(CpuidFunction::ExtendedAddressSpaceSizes.0, 0);
37        (result.eax & 0xFF) as u8
38    } else {
39        DEFAULT_PHYSICAL_ADDRESS_SIZE
40    }
41}
42
43// Entry point.
44#[cfg(minimal_rt)]
45core::arch::global_asm! {
46    include_str!("entry.S"),
47    relocate = sym minimal_rt::reloc::relocate,
48    start = sym crate::rt::start,
49    stack = sym crate::rt::STACK,
50    STACK_COOKIE = const crate::rt::STACK_COOKIE,
51    STACK_SIZE = const crate::rt::STACK_SIZE,
52}