1#![no_std]
6
7use scroll::{Pread, Pwrite};
8
9pub mod acpi;
10pub mod loader;
11pub mod metadata;
12pub mod td_uefi_pi;
13
14use td_uefi_pi::pi::{self, guid};
15
16pub const TD_ACPI_TABLE_HOB_GUID: guid::Guid = guid::Guid::from_fields(
20 0x6a0c5870,
21 0xd4ed,
22 0x44f4,
23 [0xa1, 0x35, 0xdd, 0x23, 0x8b, 0x6f, 0xc, 0x8d],
24);
25
26pub const TD_PAYLOAD_INFO_HOB_GUID: guid::Guid = guid::Guid::from_fields(
30 0xb96fa412,
31 0x461f,
32 0x4be3,
33 [0x8c, 0xd, 0xad, 0x80, 0x5a, 0x49, 0x7a, 0xc0],
34);
35
36pub const TD_E820_TABLE_HOB_GUID: pi::guid::Guid = pi::guid::Guid::from_fields(
40 0x8f8072ea,
41 0x3486,
42 0x4b47,
43 [0x86, 0xa7, 0x23, 0x53, 0xb8, 0x8a, 0x87, 0x73],
44);
45
46#[repr(u32)]
47#[derive(Clone, Copy, Debug, Eq, PartialEq)]
48pub enum TdPayloadInfoHobType {
49 ExecutablePayload = 0,
54
55 BzImage,
60
61 RawVmLinux,
65
66 UnknownImage = u32::MAX,
68}
69
70impl From<&TdPayloadInfoHobType> for u32 {
71 fn from(v: &TdPayloadInfoHobType) -> Self {
72 *v as u32
73 }
74}
75
76impl From<u32> for TdPayloadInfoHobType {
77 fn from(v: u32) -> Self {
78 match v {
79 0 => TdPayloadInfoHobType::ExecutablePayload,
80 1 => TdPayloadInfoHobType::BzImage,
81 2 => TdPayloadInfoHobType::RawVmLinux,
82 _ => TdPayloadInfoHobType::UnknownImage,
83 }
84 }
85}
86
87#[repr(C)]
88#[derive(Default, Clone, Copy, Pread, Pwrite)]
89pub struct PayloadInfo {
90 pub image_type: u32,
91 pub reserved: u32,
92 pub entry_point: u64,
93}
94
95pub fn write_u24(data: u32, buf: &mut [u8; 3]) {
97 assert!(data <= 0xffffff);
98 buf[0] = (data & 0xFF) as u8;
99 buf[1] = ((data >> 8) & 0xFF) as u8;
100 buf[2] = ((data >> 16) & 0xFF) as u8;
101}
102
103pub fn speculation_barrier() {
106 unsafe { core::arch::asm!("lfence") }
107}
108
109#[cfg(test)]
110mod test {
111 use super::*;
112
113 #[test]
114 fn test_tdpayload_info_hob_type() {
115 assert_eq!(
116 TdPayloadInfoHobType::from(0),
117 TdPayloadInfoHobType::ExecutablePayload
118 );
119 assert_eq!(TdPayloadInfoHobType::from(1), TdPayloadInfoHobType::BzImage);
120 assert_eq!(
121 TdPayloadInfoHobType::from(2),
122 TdPayloadInfoHobType::RawVmLinux
123 );
124 assert_eq!(
125 TdPayloadInfoHobType::from(3),
126 TdPayloadInfoHobType::UnknownImage
127 );
128 }
129
130 #[test]
131 fn test_write_u24() {
132 let mut buf: [u8; 3] = [0; 3];
133 write_u24(0xffffff, &mut buf);
134 }
135}