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 | |
10 | use crate::{guid, Guid}; |
11 | use bitflags::bitflags; |
12 | use 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)] |
19 | pub 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. |
28 | pub const ACPI_GUID: Guid = guid!("eb9d2d30-2d88-11d3-9a16-0090273fc14d" ); |
29 | |
30 | ///Entry pointing to the ACPI 2 RSDP. |
31 | pub const ACPI2_GUID: Guid = guid!("8868e871-e4f1-11d3-bc22-0080c73c8881" ); |
32 | |
33 | /// Entry pointing to the SMBIOS 1.0 table. |
34 | pub const SMBIOS_GUID: Guid = guid!("eb9d2d31-2d88-11d3-9a16-0090273fc14d" ); |
35 | |
36 | /// Entry pointing to the SMBIOS 3.0 table. |
37 | pub 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. |
43 | pub 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)] |
47 | pub 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 | |
60 | bitflags! { |
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. |
72 | pub 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. |
75 | pub 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. |
79 | pub const MEMORY_STATUS_CODE_RECORD_GUID: Guid = guid!("060cc026-4c0d-4dda-8f41-595fef00a502" ); |
80 | |
81 | /// Table which provides Driver eXecution Environment services. |
82 | pub const DXE_SERVICES_GUID: Guid = guid!("05ad34ba-6f02-4214-952e-4da0398e2bb9" ); |
83 | |
84 | /// LZMA-compressed filesystem. |
85 | pub const LZMA_COMPRESS_GUID: Guid = guid!("ee4e5898-3914-4259-9d6e-dc7bd79403cf" ); |
86 | |
87 | /// A custom compressed filesystem used by the Tiano UEFI implementation. |
88 | pub const TIANO_COMPRESS_GUID: Guid = guid!("a31280ad-481e-41b6-95e8-127f4c984779" ); |
89 | |
90 | /// Pointer to the debug image info table. |
91 | pub const DEBUG_IMAGE_INFO_GUID: Guid = guid!("49152e77-1ada-4764-b7a2-7afefed95e8b" ); |
92 | |