MCPcopy Create free account
hub / github.com/Dstack-TEE/dstack / build_tables

Method build_tables

dstack-mr/src/acpi.rs:197–327  ·  view source on GitHub ↗
(&self)

Source from the content-addressed store, hash-verified

195 }
196
197 pub fn build_tables(&self) -> Result<Tables> {
198 let tpl = self.create_tables()?;
199 // Find all required ACPI tables
200 let (dsdt_offset, dsdt_csum, dsdt_len) = find_acpi_table(&tpl, "DSDT")?;
201 let (facp_offset, facp_csum, facp_len) = find_acpi_table(&tpl, "FACP")?;
202 let (apic_offset, apic_csum, apic_len) = find_acpi_table(&tpl, "APIC")?;
203 let (mcfg_offset, mcfg_csum, mcfg_len) = find_acpi_table(&tpl, "MCFG")?;
204 let (waet_offset, waet_csum, waet_len) = find_acpi_table(&tpl, "WAET")?;
205 let (rsdt_offset, rsdt_csum, rsdt_len) = find_acpi_table(&tpl, "RSDT")?;
206
207 // Generate RSDP
208 let mut rsdp = Vec::with_capacity(20);
209 rsdp.extend_from_slice(b"RSD PTR "); // Signature
210 rsdp.push(0x00); // Checksum placeholder
211 rsdp.extend_from_slice(b"BOCHS "); // OEM ID
212 rsdp.push(0x00); // Revision
213 rsdp.extend_from_slice(&rsdt_offset.to_le_bytes()); // RSDT Address
214
215 // Generate table loader commands
216 let mut ldr = TableLoader::new();
217 ldr.append(LoaderCmd::Allocate {
218 file: "etc/acpi/rsdp",
219 alignment: 16,
220 zone: 2,
221 });
222 ldr.append(LoaderCmd::Allocate {
223 file: "etc/acpi/tables",
224 alignment: 64,
225 zone: 1,
226 });
227 ldr.append(LoaderCmd::AddChecksum {
228 file: "etc/acpi/tables",
229 result_offset: dsdt_csum,
230 start: dsdt_offset,
231 length: dsdt_len,
232 });
233 ldr.append(LoaderCmd::AddPtr {
234 pointer_file: "etc/acpi/tables",
235 pointee_file: "etc/acpi/tables",
236 pointer_offset: facp_offset + 36,
237 pointer_size: 4,
238 });
239 ldr.append(LoaderCmd::AddPtr {
240 pointer_file: "etc/acpi/tables",
241 pointee_file: "etc/acpi/tables",
242 pointer_offset: facp_offset + 40,
243 pointer_size: 4,
244 });
245 ldr.append(LoaderCmd::AddPtr {
246 pointer_file: "etc/acpi/tables",
247 pointee_file: "etc/acpi/tables",
248 pointer_offset: facp_offset + 140,
249 pointer_size: 8,
250 });
251 ldr.append(LoaderCmd::AddChecksum {
252 file: "etc/acpi/tables",
253 result_offset: facp_csum,
254 start: facp_offset,

Callers 1

rtmr0_logMethod · 0.80

Calls 4

find_acpi_tableFunction · 0.85
create_tablesMethod · 0.80
appendMethod · 0.80
lenMethod · 0.45

Tested by

no test coverage detected