From 5ced7406359ee697097641af8a7c0e1a91292927 Mon Sep 17 00:00:00 2001 From: fox0 <15684995+fox0@users.noreply.github.com> Date: Fri, 9 May 2025 01:25:00 +0700 Subject: [PATCH 1/7] uefi: move constants into ConfigTableEntry --- uefi/src/table/cfg.rs | 81 ++++++++++++++++++++++--------------------- 1 file changed, 42 insertions(+), 39 deletions(-) diff --git a/uefi/src/table/cfg.rs b/uefi/src/table/cfg.rs index bbeebe456..a1241f8dd 100644 --- a/uefi/src/table/cfg.rs +++ b/uefi/src/table/cfg.rs @@ -26,26 +26,53 @@ pub struct ConfigTableEntry { /// Whether this is a physical or virtual address depends on the table. pub address: *const c_void, } -/// Entry pointing to the old ACPI 1 RSDP. -pub const ACPI_GUID: Guid = guid!("eb9d2d30-2d88-11d3-9a16-0090273fc14d"); -///Entry pointing to the ACPI 2 RSDP. -pub const ACPI2_GUID: Guid = guid!("8868e871-e4f1-11d3-bc22-0080c73c8881"); +impl ConfigTableEntry { + /// Entry pointing to the old ACPI 1 RSDP. + pub const ACPI_GUID: Guid = guid!("eb9d2d30-2d88-11d3-9a16-0090273fc14d"); -/// Entry pointing to the SMBIOS 1.0 table. -pub const SMBIOS_GUID: Guid = guid!("eb9d2d31-2d88-11d3-9a16-0090273fc14d"); + /// Entry pointing to the ACPI 2 RSDP. + pub const ACPI2_GUID: Guid = guid!("8868e871-e4f1-11d3-bc22-0080c73c8881"); -/// Entry pointing to the SMBIOS 3.0 table. -pub const SMBIOS3_GUID: Guid = guid!("f2fd1544-9794-4a2c-992e-e5bbcf20e394"); + /// Entry pointing to the SMBIOS 1.0 table. + pub const SMBIOS_GUID: Guid = guid!("eb9d2d31-2d88-11d3-9a16-0090273fc14d"); -/// Entry pointing to the EFI System Resource table (ESRT). -pub const ESRT_GUID: Guid = guid!("b122a263-3661-4f68-9929-78f8b0d62180"); + /// Entry pointing to the SMBIOS 3.0 table. + pub const SMBIOS3_GUID: Guid = guid!("f2fd1544-9794-4a2c-992e-e5bbcf20e394"); -/// GUID of the UEFI properties table. -/// -/// The properties table is used to provide additional info -/// about the UEFI implementation. -pub const PROPERTIES_TABLE_GUID: Guid = guid!("880aaca3-4adc-4a04-9079-b747340825e5"); + /// Entry pointing to the EFI System Resource table (ESRT). + pub const ESRT_GUID: Guid = guid!("b122a263-3661-4f68-9929-78f8b0d62180"); + + /// Hand-off Blocks are used to pass data from the early pre-UEFI environment to the UEFI drivers. + /// + /// Most OS loaders or applications should not mess with this. + pub const HAND_OFF_BLOCK_LIST_GUID: Guid = guid!("7739f24c-93d7-11d4-9a3a-0090273fc14d"); + + /// Table used in the early boot environment to record memory ranges. + pub const MEMORY_TYPE_INFORMATION_GUID: Guid = guid!("4c19049f-4137-4dd3-9c10-8b97a83ffdfa"); + + /// Used to identify Hand-off Blocks which store + /// status codes reported during the pre-UEFI environment. + pub const MEMORY_STATUS_CODE_RECORD_GUID: Guid = guid!("060cc026-4c0d-4dda-8f41-595fef00a502"); + + /// Table which provides Driver eXecution Environment services. + pub const DXE_SERVICES_GUID: Guid = guid!("05ad34ba-6f02-4214-952e-4da0398e2bb9"); + + /// LZMA-compressed filesystem. + pub const LZMA_COMPRESS_GUID: Guid = guid!("ee4e5898-3914-4259-9d6e-dc7bd79403cf"); + + /// A custom compressed filesystem used by the Tiano UEFI implementation. + pub const TIANO_COMPRESS_GUID: Guid = guid!("a31280ad-481e-41b6-95e8-127f4c984779"); + + /// Pointer to the debug image info table. + pub const DEBUG_IMAGE_INFO_GUID: Guid = guid!("49152e77-1ada-4764-b7a2-7afefed95e8b"); + + /// GUID of the UEFI properties table. + /// + /// The properties table is used to provide additional info + /// about the UEFI implementation. + pub const PROPERTIES_TABLE_GUID: Guid = guid!("880aaca3-4adc-4a04-9079-b747340825e5"); +} /// This table contains additional information about the UEFI implementation. #[repr(C)] @@ -73,27 +100,3 @@ bitflags! { const NON_EXECUTABLE_DATA = 1; } } - -/// Hand-off Blocks are used to pass data from the early pre-UEFI environment to the UEFI drivers. -/// -/// Most OS loaders or applications should not mess with this. -pub const HAND_OFF_BLOCK_LIST_GUID: Guid = guid!("7739f24c-93d7-11d4-9a3a-0090273fc14d"); - -/// Table used in the early boot environment to record memory ranges. -pub const MEMORY_TYPE_INFORMATION_GUID: Guid = guid!("4c19049f-4137-4dd3-9c10-8b97a83ffdfa"); - -/// Used to identify Hand-off Blocks which store -/// status codes reported during the pre-UEFI environment. -pub const MEMORY_STATUS_CODE_RECORD_GUID: Guid = guid!("060cc026-4c0d-4dda-8f41-595fef00a502"); - -/// Table which provides Driver eXecution Environment services. -pub const DXE_SERVICES_GUID: Guid = guid!("05ad34ba-6f02-4214-952e-4da0398e2bb9"); - -/// LZMA-compressed filesystem. -pub const LZMA_COMPRESS_GUID: Guid = guid!("ee4e5898-3914-4259-9d6e-dc7bd79403cf"); - -/// A custom compressed filesystem used by the Tiano UEFI implementation. -pub const TIANO_COMPRESS_GUID: Guid = guid!("a31280ad-481e-41b6-95e8-127f4c984779"); - -/// Pointer to the debug image info table. -pub const DEBUG_IMAGE_INFO_GUID: Guid = guid!("49152e77-1ada-4764-b7a2-7afefed95e8b"); From 2501be8af78e680d9d2700fc47629b7418600f21 Mon Sep 17 00:00:00 2001 From: fox0 <15684995+fox0@users.noreply.github.com> Date: Fri, 9 May 2025 01:26:36 +0700 Subject: [PATCH 2/7] uefi: ConfigTableEntry add two GUID --- uefi/src/table/cfg.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/uefi/src/table/cfg.rs b/uefi/src/table/cfg.rs index a1241f8dd..a7a91d051 100644 --- a/uefi/src/table/cfg.rs +++ b/uefi/src/table/cfg.rs @@ -55,6 +55,16 @@ impl ConfigTableEntry { /// status codes reported during the pre-UEFI environment. pub const MEMORY_STATUS_CODE_RECORD_GUID: Guid = guid!("060cc026-4c0d-4dda-8f41-595fef00a502"); + /// Provides additional information about regions within the run-time memory blocks. + /// + /// https://uefi.org/specs/UEFI/2.10/04_EFI_System_Table.html#efi-memory-attributes-table + pub const MEMORY_ATTRIBUTES_GUID: Guid = guid!("dcfa911d-26eb-469f-a220-38b7dc461220"); + + /// Constants used for UEFI signature database variable access. + /// + /// https://uefi.org/specs/UEFI/2.11/32_Secure_Boot_and_Driver_Signing.html#uefi-image-variable-guid-variable-name + pub const IMAGE_SECURITY_DATABASE_GUID: Guid = guid!("d719b2cb-3d3a-4596-a3bc-dad00e67656f"); + /// Table which provides Driver eXecution Environment services. pub const DXE_SERVICES_GUID: Guid = guid!("05ad34ba-6f02-4214-952e-4da0398e2bb9"); From a24c59e289475d27feb19578561c8d07bbc42c38 Mon Sep 17 00:00:00 2001 From: fox0 <15684995+fox0@users.noreply.github.com> Date: Fri, 9 May 2025 01:27:21 +0700 Subject: [PATCH 3/7] doc: add example use uefi::table::cfg::ConfigTableEntry --- uefi/src/system.rs | 17 +++++++++++++++++ uefi/src/table/cfg.rs | 4 ++++ 2 files changed, 21 insertions(+) diff --git a/uefi/src/system.rs b/uefi/src/system.rs index cdfcc81bd..35a68a709 100644 --- a/uefi/src/system.rs +++ b/uefi/src/system.rs @@ -51,6 +51,23 @@ pub fn uefi_revision() -> Revision { /// Call `f` with a slice of [`ConfigTableEntry`]. Each entry provides access to /// a vendor-specific table. +/// +/// # Example +/// +/// ```rust,no_run +/// use uefi::system::with_config_table; +/// use uefi::table::cfg::ConfigTableEntry; +/// +/// with_config_table(|slice| { +/// for i in slice { +/// match i.guid { +/// ConfigTableEntry::ACPI_GUID => println!("ACPI"), +/// ConfigTableEntry::ACPI2_GUID => println!("ACPI2"), +/// guid => println!("GUID: {}", guid), +/// } +/// } +/// }); +/// ``` pub fn with_config_table(f: F) -> R where F: Fn(&[ConfigTableEntry]) -> R, diff --git a/uefi/src/table/cfg.rs b/uefi/src/table/cfg.rs index a7a91d051..5adc7fc54 100644 --- a/uefi/src/table/cfg.rs +++ b/uefi/src/table/cfg.rs @@ -8,6 +8,8 @@ //! //! This module contains the actual entries of the configuration table, //! as well as GUIDs for many known vendor tables. +//! +//! https://uefi.org/specs/UEFI/2.10/04_EFI_System_Table.html#efi-configuration-table-properties-table use crate::{guid, Guid}; use bitflags::bitflags; @@ -16,6 +18,8 @@ use core::ffi::c_void; /// Contains a set of GUID / pointer for a vendor-specific table. /// /// The UEFI standard guarantees each entry is unique. +/// +/// https://uefi.org/specs/UEFI/2.10/04_EFI_System_Table.html#efi-configuration-table #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)] #[repr(C)] pub struct ConfigTableEntry { From 47cfbec688352b517b8f3cf7bbf0db0d9dc9bd03 Mon Sep 17 00:00:00 2001 From: fox0 <15684995+fox0@users.noreply.github.com> Date: Fri, 9 May 2025 01:36:31 +0700 Subject: [PATCH 4/7] doc: changelog --- uefi/CHANGELOG.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/uefi/CHANGELOG.md b/uefi/CHANGELOG.md index 2cac6355a..61c29e4cc 100644 --- a/uefi/CHANGELOG.md +++ b/uefi/CHANGELOG.md @@ -1,8 +1,11 @@ # uefi - [Unreleased] +## Added +- Added `ConfigTableEntry::MEMORY_ATTRIBUTES_GUID` and `ConfigTableEntry::IMAGE_SECURITY_DATABASE_GUID`. + ## Changed -- **Breaking:** `boot::stall` now take `Duration` instead of - `usize`. +- **Breaking:** `boot::stall` now take `core::time::Duration` instead of `usize`. +- **Breaking:** `*_GUID` constants has been moved to `ConfigTableEntry::*_GUID`. # uefi - 0.35.0 (2025-05-04) From 51a7a04763e21dab27d9b278cca77e3db9e25b25 Mon Sep 17 00:00:00 2001 From: fox0 <15684995+fox0@users.noreply.github.com> Date: Fri, 9 May 2025 01:44:12 +0700 Subject: [PATCH 5/7] lints: format --- uefi/src/table/cfg.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/uefi/src/table/cfg.rs b/uefi/src/table/cfg.rs index 5adc7fc54..270d7df77 100644 --- a/uefi/src/table/cfg.rs +++ b/uefi/src/table/cfg.rs @@ -8,7 +8,7 @@ //! //! This module contains the actual entries of the configuration table, //! as well as GUIDs for many known vendor tables. -//! +//! //! https://uefi.org/specs/UEFI/2.10/04_EFI_System_Table.html#efi-configuration-table-properties-table use crate::{guid, Guid}; @@ -18,7 +18,7 @@ use core::ffi::c_void; /// Contains a set of GUID / pointer for a vendor-specific table. /// /// The UEFI standard guarantees each entry is unique. -/// +/// /// https://uefi.org/specs/UEFI/2.10/04_EFI_System_Table.html#efi-configuration-table #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)] #[repr(C)] @@ -60,12 +60,12 @@ impl ConfigTableEntry { pub const MEMORY_STATUS_CODE_RECORD_GUID: Guid = guid!("060cc026-4c0d-4dda-8f41-595fef00a502"); /// Provides additional information about regions within the run-time memory blocks. - /// + /// /// https://uefi.org/specs/UEFI/2.10/04_EFI_System_Table.html#efi-memory-attributes-table pub const MEMORY_ATTRIBUTES_GUID: Guid = guid!("dcfa911d-26eb-469f-a220-38b7dc461220"); /// Constants used for UEFI signature database variable access. - /// + /// /// https://uefi.org/specs/UEFI/2.11/32_Secure_Boot_and_Driver_Signing.html#uefi-image-variable-guid-variable-name pub const IMAGE_SECURITY_DATABASE_GUID: Guid = guid!("d719b2cb-3d3a-4596-a3bc-dad00e67656f"); From f3b69e87f280c1c884d9fddbcc861166a331857c Mon Sep 17 00:00:00 2001 From: fox0 <15684995+fox0@users.noreply.github.com> Date: Fri, 9 May 2025 01:50:33 +0700 Subject: [PATCH 6/7] doc: fix URL errors --- uefi/src/table/cfg.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/uefi/src/table/cfg.rs b/uefi/src/table/cfg.rs index 270d7df77..0aff1374f 100644 --- a/uefi/src/table/cfg.rs +++ b/uefi/src/table/cfg.rs @@ -9,7 +9,7 @@ //! This module contains the actual entries of the configuration table, //! as well as GUIDs for many known vendor tables. //! -//! https://uefi.org/specs/UEFI/2.10/04_EFI_System_Table.html#efi-configuration-table-properties-table +//! See . use crate::{guid, Guid}; use bitflags::bitflags; @@ -19,7 +19,7 @@ use core::ffi::c_void; /// /// The UEFI standard guarantees each entry is unique. /// -/// https://uefi.org/specs/UEFI/2.10/04_EFI_System_Table.html#efi-configuration-table +/// See . #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)] #[repr(C)] pub struct ConfigTableEntry { @@ -60,13 +60,11 @@ impl ConfigTableEntry { pub const MEMORY_STATUS_CODE_RECORD_GUID: Guid = guid!("060cc026-4c0d-4dda-8f41-595fef00a502"); /// Provides additional information about regions within the run-time memory blocks. - /// - /// https://uefi.org/specs/UEFI/2.10/04_EFI_System_Table.html#efi-memory-attributes-table + /// See . pub const MEMORY_ATTRIBUTES_GUID: Guid = guid!("dcfa911d-26eb-469f-a220-38b7dc461220"); /// Constants used for UEFI signature database variable access. - /// - /// https://uefi.org/specs/UEFI/2.11/32_Secure_Boot_and_Driver_Signing.html#uefi-image-variable-guid-variable-name + /// See . pub const IMAGE_SECURITY_DATABASE_GUID: Guid = guid!("d719b2cb-3d3a-4596-a3bc-dad00e67656f"); /// Table which provides Driver eXecution Environment services. From 9a6b4902cb16f6adf0bc8802b9d9fbd818dca1ca Mon Sep 17 00:00:00 2001 From: fox0 <15684995+fox0@users.noreply.github.com> Date: Sat, 10 May 2025 13:26:28 +0700 Subject: [PATCH 7/7] uefi: `table::cfg::*_GUID` constants now deprecated --- uefi/CHANGELOG.md | 2 +- uefi/src/system.rs | 6 +-- uefi/src/table/cfg.rs | 96 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 100 insertions(+), 4 deletions(-) diff --git a/uefi/CHANGELOG.md b/uefi/CHANGELOG.md index 61c29e4cc..fbd8c4c3a 100644 --- a/uefi/CHANGELOG.md +++ b/uefi/CHANGELOG.md @@ -5,7 +5,7 @@ ## Changed - **Breaking:** `boot::stall` now take `core::time::Duration` instead of `usize`. -- **Breaking:** `*_GUID` constants has been moved to `ConfigTableEntry::*_GUID`. +- `table::cfg::*_GUID` constants now deprecated. Use `ConfigTableEntry::*_GUID` instead. # uefi - 0.35.0 (2025-05-04) diff --git a/uefi/src/system.rs b/uefi/src/system.rs index 35a68a709..3f8ff8442 100644 --- a/uefi/src/system.rs +++ b/uefi/src/system.rs @@ -61,9 +61,9 @@ pub fn uefi_revision() -> Revision { /// with_config_table(|slice| { /// for i in slice { /// match i.guid { -/// ConfigTableEntry::ACPI_GUID => println!("ACPI"), -/// ConfigTableEntry::ACPI2_GUID => println!("ACPI2"), -/// guid => println!("GUID: {}", guid), +/// ConfigTableEntry::ACPI_GUID => println!("Found ACPI1"), +/// ConfigTableEntry::ACPI2_GUID => println!("Found ACPI2"), +/// guid => println!("Found {}", guid), /// } /// } /// }); diff --git a/uefi/src/table/cfg.rs b/uefi/src/table/cfg.rs index 0aff1374f..408871591 100644 --- a/uefi/src/table/cfg.rs +++ b/uefi/src/table/cfg.rs @@ -86,6 +86,51 @@ impl ConfigTableEntry { pub const PROPERTIES_TABLE_GUID: Guid = guid!("880aaca3-4adc-4a04-9079-b747340825e5"); } +/// Entry pointing to the old ACPI 1 RSDP. +#[deprecated( + since = "0.35.1", + note = "please use `ConfigTableEntry::ACPI_GUID` instead" +)] +pub const ACPI_GUID: Guid = ConfigTableEntry::ACPI_GUID; + +/// Entry pointing to the ACPI 2 RSDP. +#[deprecated( + since = "0.35.1", + note = "please use `ConfigTableEntry::ACPI2_GUID` instead" +)] +pub const ACPI2_GUID: Guid = ConfigTableEntry::ACPI2_GUID; + +/// Entry pointing to the SMBIOS 1.0 table. +#[deprecated( + since = "0.35.1", + note = "please use `ConfigTableEntry::SMBIOS_GUID` instead" +)] +pub const SMBIOS_GUID: Guid = ConfigTableEntry::SMBIOS_GUID; + +/// Entry pointing to the SMBIOS 3.0 table. +#[deprecated( + since = "0.35.1", + note = "please use `ConfigTableEntry::SMBIOS3_GUID` instead" +)] +pub const SMBIOS3_GUID: Guid = ConfigTableEntry::SMBIOS3_GUID; + +/// Entry pointing to the EFI System Resource table (ESRT). +#[deprecated( + since = "0.35.1", + note = "please use `ConfigTableEntry::ESRT_GUID` instead" +)] +pub const ESRT_GUID: Guid = ConfigTableEntry::ESRT_GUID; + +/// GUID of the UEFI properties table. +/// +/// The properties table is used to provide additional info +/// about the UEFI implementation. +#[deprecated( + since = "0.35.1", + note = "please use `ConfigTableEntry::PROPERTIES_TABLE_GUID` instead" +)] +pub const PROPERTIES_TABLE_GUID: Guid = ConfigTableEntry::PROPERTIES_TABLE_GUID; + /// This table contains additional information about the UEFI implementation. #[repr(C)] #[derive(Debug)] @@ -112,3 +157,54 @@ bitflags! { const NON_EXECUTABLE_DATA = 1; } } + +/// Hand-off Blocks are used to pass data from the early pre-UEFI environment to the UEFI drivers. +/// +/// Most OS loaders or applications should not mess with this. +#[deprecated( + since = "0.35.1", + note = "please use `ConfigTableEntry::HAND_OFF_BLOCK_LIST_GUID` instead" +)] +pub const HAND_OFF_BLOCK_LIST_GUID: Guid = ConfigTableEntry::HAND_OFF_BLOCK_LIST_GUID; + +/// Table used in the early boot environment to record memory ranges. +#[deprecated( + since = "0.35.1", + note = "please use `ConfigTableEntry::MEMORY_TYPE_INFORMATION_GUID` instead" +)] +pub const MEMORY_TYPE_INFORMATION_GUID: Guid = ConfigTableEntry::MEMORY_TYPE_INFORMATION_GUID; + +/// Used to identify Hand-off Blocks which store +/// status codes reported during the pre-UEFI environment. +#[deprecated( + since = "0.35.1", + note = "please use `ConfigTableEntry::MEMORY_STATUS_CODE_RECORD_GUID` instead" +)] +pub const MEMORY_STATUS_CODE_RECORD_GUID: Guid = ConfigTableEntry::MEMORY_STATUS_CODE_RECORD_GUID; + +/// Table which provides Driver eXecution Environment services. +#[deprecated( + since = "0.35.1", + note = "please use `ConfigTableEntry::DXE_SERVICES_GUID` instead" +)] +pub const DXE_SERVICES_GUID: Guid = ConfigTableEntry::DXE_SERVICES_GUID; + +/// LZMA-compressed filesystem. +#[deprecated( + since = "0.35.1", + note = "please use `ConfigTableEntry::LZMA_COMPRESS_GUID` instead" +)] +pub const LZMA_COMPRESS_GUID: Guid = ConfigTableEntry::LZMA_COMPRESS_GUID; + +/// A custom compressed filesystem used by the Tiano UEFI implementation. +#[deprecated( + since = "0.35.1", + note = "please use `ConfigTableEntry::TIANO_COMPRESS_GUID` instead" +)] +pub const TIANO_COMPRESS_GUID: Guid = ConfigTableEntry::TIANO_COMPRESS_GUID; +/// Pointer to the debug image info table. +#[deprecated( + since = "0.35.1", + note = "please use `ConfigTableEntry::DEBUG_IMAGE_INFO_GUID` instead" +)] +pub const DEBUG_IMAGE_INFO_GUID: Guid = ConfigTableEntry::DEBUG_IMAGE_INFO_GUID;