1//! Configuration table utilities.
2//!
3//! The configuration table is an array of GUIDs and pointers to extra system tables.
4//!
5//! For example, it can be used to find the ACPI tables.
6//!
7//! This module contains the actual entries of the configuration table,
8//! as well as GUIDs for many known vendor tables.
9
10use crate::{guid, Guid};
11use bitflags::bitflags;
12use core::ffi::c_void;
13
14/// Contains a set of GUID / pointer for a vendor-specific table.
15///
16/// The UEFI standard guarantees each entry is unique.
17#[derive(Debug)]
18#[repr(C)]
19pub struct ConfigTableEntry {
20 /// The GUID identifying this table.
21 pub guid: Guid,
22 /// The starting address of this table.
23 ///
24 /// Whether this is a physical or virtual address depends on the table.
25 pub address: *const c_void,
26}
27/// Entry pointing to the old ACPI 1 RSDP.
28pub const ACPI_GUID: Guid = guid!("eb9d2d30-2d88-11d3-9a16-0090273fc14d");
29
30///Entry pointing to the ACPI 2 RSDP.
31pub const ACPI2_GUID: Guid = guid!("8868e871-e4f1-11d3-bc22-0080c73c8881");
32
33/// Entry pointing to the SMBIOS 1.0 table.
34pub const SMBIOS_GUID: Guid = guid!("eb9d2d31-2d88-11d3-9a16-0090273fc14d");
35
36/// Entry pointing to the SMBIOS 3.0 table.
37pub const SMBIOS3_GUID: Guid = guid!("f2fd1544-9794-4a2c-992e-e5bbcf20e394");
38
39/// GUID of the UEFI properties table.
40///
41/// The properties table is used to provide additional info
42/// about the UEFI implementation.
43pub const PROPERTIES_TABLE_GUID: Guid = guid!("880aaca3-4adc-4a04-9079-b747340825e5");
44
45/// This table contains additional information about the UEFI implementation.
46#[repr(C)]
47pub struct PropertiesTable {
48 /// Version of the UEFI properties table.
49 ///
50 /// The only valid version currently is 0x10_000.
51 pub version: u32,
52 /// Length in bytes of this table.
53 ///
54 /// The initial version's length is 16.
55 pub length: u32,
56 /// Memory protection attributes.
57 pub memory_protection: MemoryProtectionAttribute,
58}
59
60bitflags! {
61 /// Flags describing memory protection.
62 pub struct MemoryProtectionAttribute: usize {
63 /// If this bit is set, then the UEFI implementation will mark pages
64 /// containing data as non-executable.
65 const NON_EXECUTABLE_DATA = 1;
66 }
67}
68
69/// Hand-off Blocks are used to pass data from the early pre-UEFI environment to the UEFI drivers.
70///
71/// Most OS loaders or applications should not mess with this.
72pub const HAND_OFF_BLOCK_LIST_GUID: Guid = guid!("7739f24c-93d7-11d4-9a3a-0090273fc14d");
73
74/// Table used in the early boot environment to record memory ranges.
75pub const MEMORY_TYPE_INFORMATION_GUID: Guid = guid!("4c19049f-4137-4dd3-9c10-8b97a83ffdfa");
76
77/// Used to identify Hand-off Blocks which store
78/// status codes reported during the pre-UEFI environment.
79pub const MEMORY_STATUS_CODE_RECORD_GUID: Guid = guid!("060cc026-4c0d-4dda-8f41-595fef00a502");
80
81/// Table which provides Driver eXecution Environment services.
82pub const DXE_SERVICES_GUID: Guid = guid!("05ad34ba-6f02-4214-952e-4da0398e2bb9");
83
84/// LZMA-compressed filesystem.
85pub const LZMA_COMPRESS_GUID: Guid = guid!("ee4e5898-3914-4259-9d6e-dc7bd79403cf");
86
87/// A custom compressed filesystem used by the Tiano UEFI implementation.
88pub const TIANO_COMPRESS_GUID: Guid = guid!("a31280ad-481e-41b6-95e8-127f4c984779");
89
90/// Pointer to the debug image info table.
91pub const DEBUG_IMAGE_INFO_GUID: Guid = guid!("49152e77-1ada-4764-b7a2-7afefed95e8b");
92