Skip to main content

virtfw_libefi/
guids.rs

1//! efi guid database
2
3#![allow(non_upper_case_globals)]
4
5extern crate alloc;
6use alloc::format;
7use alloc::string::{String, ToString};
8
9use uguid::{guid, Guid};
10use zerocopy::{FromBytes, Immutable, IntoBytes, KnownLayout};
11
12// efi variable namespaces
13pub const EfiCustomModeEnable: Guid = guid!("c076ec0c-7028-4399-a072-71ee5c448b9f");
14pub const EfiGlobalVariable: Guid = guid!("8be4df61-93ca-11d2-aa0d-00e098032b8c");
15pub const EfiImageSecurityDatabase: Guid = guid!("d719b2cb-3d3a-4596-a3bc-dad00e67656f");
16pub const EfiSecureBootEnable: Guid = guid!("f0a30bc7-af08-4556-99c4-001009c93a44");
17pub const LoaderInfo: Guid = guid!("4a67b082-0a4c-41cf-b6c7-440b29bb8c4f");
18pub const ShimVariable: Guid = guid!("605dab50-e046-4300-abb6-3dd810dd8b23");
19pub const VMMBootOrder: Guid = guid!("668f4529-63d0-4bb5-b65d-6fbb9d36a44a");
20
21// efi signatures
22pub const EfiCertPkcs7: Guid = guid!("4aafd29d-68df-49ee-8aa9-347d375665a7");
23pub const EfiCertSha256: Guid = guid!("c1c41626-504c-4092-aca9-41f936934328");
24pub const EfiCertSha384: Guid = guid!("ff3e5307-9fd0-48c9-85f1-8ad56c701e01");
25pub const EfiCertSha512: Guid = guid!("093e0fae-a6c4-4f50-9f1b-d41e2b89c19a");
26pub const EfiCertRsa2048: Guid = guid!("3c5766e8-269c-4e34-aa14-ed776e85b3b6");
27pub const EfiCertX509: Guid = guid!("a5c059a1-94e4-4aa7-87b5-ab155c2bf072");
28pub const EfiCertExternalMgmt: Guid = guid!("452e8ced-dfff-4b8c-ae01-5118862e682c");
29
30// efi signature owners
31pub const MicrosoftVendor: Guid = guid!("77fa9abd-0359-4d32-bd60-28f4e78f784b");
32pub const OvmfEnrollDefaultKeys: Guid = guid!("a0baa8a3-041d-48a8-bc87-c36d121b5e3d");
33
34// efi events
35pub const EfiEndOfDxeEventGroup: Guid = guid!("02ce967a-dd7e-4ffc-9ee7-810cf0470880");
36pub const EfiEventExitBootServices: Guid = guid!("27abf055-b1b8-4c26-8048-748f37baa2df");
37pub const EfiEventReadyToBoot: Guid = guid!("7ce88fb3-4bd7-4679-87a8-a8d8dee50d2b");
38
39// mm protocols
40pub const EfiSmmVariableProtocol: Guid = guid!("ed32d533-99e6-4209-9cc0-2d72cdd998a7");
41pub const VarCheckPolicyLibMmiHandler: Guid = guid!("da1b0d11-d1a7-46c4-9dc9-f3714875c6eb");
42
43// config tables
44pub const Acpi2Cfg: Guid = guid!("8868e871-e4f1-11d3-bc22-0080c73c8881");
45pub const AcpiCfg: Guid = guid!("eb9d2d30-2d88-11d3-9a16-0090273fc14d");
46pub const DebugImageInfoCfg: Guid = guid!("49152e77-1ada-4764-b7a2-7afefed95e8b");
47pub const DxeServicesCfg: Guid = guid!("05ad34ba-6f02-4214-952e-4da0398e2bb9");
48pub const HandOffBlockListCfg: Guid = guid!("7739f24c-93d7-11d4-9a3a-0090273fc14d");
49pub const MemoryTypeInfoCfg: Guid = guid!("4c19049f-4137-4dd3-9c10-8b97a83ffdfa");
50pub const SmbiosCfg: Guid = guid!("eb9d2d31-2d88-11d3-9a16-0090273fc14d");
51
52// guid HOBs
53pub const FdtHob: Guid = guid!("16958446-19B7-480B-B047-7485AD3F716D");
54pub const OvmfPkgPlatformInfo: Guid = guid!("dec9b486-1f16-47c7-8f68-df1a41888ba5");
55pub const PcdDatabase: Guid = guid!("9b3ada4f-ae56-4c24-8dea-f03b7558ae50");
56pub const SecPlatformInformation2: Guid = guid!("9e9f374b-8f16-4230-9824-5846ee766a97");
57pub const OvmfMemDebugLog: Guid = guid!("95305139-b20f-4723-8425-627c888ff121");
58
59// firmware volumes
60pub const Ffs: Guid = guid!("8c8ce578-8a3d-4f1c-9935-896185c32dd3");
61pub const NvData: Guid = guid!("fff12b8d-7696-4c8b-a985-2747075b4f50");
62pub const FvMainCompact: Guid = guid!("9e21fd93-9c72-4c15-8c4b-e77f1db2d792");
63pub const SecMain: Guid = guid!("df1ccef6-f301-4a63-9661-fc6030dcc880");
64pub const ResetVector: Guid = guid!("1ba0062e-c779-4582-8566-336ae8f78f09");
65pub const LzmaCompress: Guid = guid!("ee4e5898-3914-4259-9d6e-dc7bd79403cf");
66
67pub const OvmfMainFv: Guid = guid!("48db5e17-707c-472d-91cd-1613e7ef51b0");
68pub const OvmfPeiFv: Guid = guid!("6938079b-b503-4e3d-9d24-b28337a25806");
69pub const OvmfDxeFv: Guid = guid!("7cb8bdc9-f8eb-4f34-aaea-3ee4af6516a1");
70pub const OvmfNccFv: Guid = guid!("ae047c6d-bce9-426c-ae03-a68e3b8a0488");
71pub const OvmfSecFv: Guid = guid!("763bed0d-de9f-48f5-81f1-3e90e1b1a015");
72
73/// Translate GUIDs to names.  Return None for unknown GUIDs.
74pub fn try_pretty_name(guid: &Guid) -> Option<&'static str> {
75    match *guid {
76        EfiCustomModeEnable => Some("EfiCustomModeEnable"),
77        EfiGlobalVariable => Some("EfiGlobalVariable"),
78        EfiImageSecurityDatabase => Some("EfiImageSecurityDatabase"),
79        EfiSecureBootEnable => Some("EfiSecureBootEnable"),
80        LoaderInfo => Some("LoaderInfo"),
81        ShimVariable => Some("ShimVariable"),
82        VMMBootOrder => Some("VMMBootOrder"),
83
84        EfiCertPkcs7 => Some("EfiCertPkcs7"),
85        EfiCertSha256 => Some("EfiCertSha256"),
86        EfiCertSha384 => Some("EfiCertSha384"),
87        EfiCertSha512 => Some("EfiCertSha512"),
88        EfiCertRsa2048 => Some("EfiCertRsa2048"),
89        EfiCertX509 => Some("EfiCertX509"),
90        EfiCertExternalMgmt => Some("EfiCertExternalMgmt"),
91
92        MicrosoftVendor => Some("MicrosoftVendor"),
93        OvmfEnrollDefaultKeys => Some("OvmfEnrollDefaultKeys"),
94
95        EfiEndOfDxeEventGroup => Some("EfiEndOfDxeEventGroup"),
96        EfiEventExitBootServices => Some("EfiEventExitBootServices"),
97        EfiEventReadyToBoot => Some("EfiEventReadyToBoot"),
98
99        EfiSmmVariableProtocol => Some("EfiSmmVariableProtocol"),
100        VarCheckPolicyLibMmiHandler => Some("VarCheckPolicyLibMmiHandler"),
101
102        Acpi2Cfg => Some("Acpi2Cfg"),
103        AcpiCfg => Some("AcpiCfg"),
104        DebugImageInfoCfg => Some("DebugImageInfoCfg"),
105        DxeServicesCfg => Some("DxeServicesCfg"),
106        HandOffBlockListCfg => Some("HandOffBlockListCfg"),
107        MemoryTypeInfoCfg => Some("MemoryTypeInfoCfg"),
108        SmbiosCfg => Some("SmbiosCfg"),
109
110        FdtHob => Some("FdtHob"),
111        OvmfPkgPlatformInfo => Some("OvmfPkgPlatformInfo"),
112        PcdDatabase => Some("PcdDatabase"),
113        SecPlatformInformation2 => Some("SecPlatformInformation2"),
114
115        Ffs => Some("Ffs"),
116        NvData => Some("NvData"),
117        FvMainCompact => Some("FvMainCompact"),
118        SecMain => Some("SecMain"),
119        ResetVector => Some("ResetVector"),
120        LzmaCompress => Some("LzmaCompress"),
121
122        OvmfMainFv => Some("OvmfMainFv"),
123        OvmfPeiFv => Some("OvmfPeiFv"),
124        OvmfDxeFv => Some("OvmfDxeFv"),
125        OvmfNccFv => Some("OvmfNccFv"),
126        OvmfSecFv => Some("OvmfSecFv"),
127
128        _ => None,
129    }
130}
131
132/// Translate GUIDs to names.  Unknown GUIDs will be returned in
133/// standard GUID string representation instead of the name.
134pub fn pretty_name(guid: &Guid) -> String {
135    match try_pretty_name(guid) {
136        Some(name) => name.to_string(),
137        None => format!("{guid}"),
138    }
139}
140
141// workaround for uguid::Guid not having zerocopy support
142#[repr(C, packed)]
143#[derive(Debug, Clone, Copy, FromBytes, IntoBytes, KnownLayout, Immutable, PartialEq)]
144pub struct RawGuid {
145    bytes: [u8; 16],
146}
147
148impl From<RawGuid> for Guid {
149    fn from(raw: RawGuid) -> Self {
150        Self::from_bytes(raw.bytes)
151    }
152}
153
154impl From<Guid> for RawGuid {
155    fn from(guid: Guid) -> Self {
156        Self {
157            bytes: guid.to_bytes(),
158        }
159    }
160}
161
162impl From<&Guid> for RawGuid {
163    fn from(guid: &Guid) -> Self {
164        Self {
165            bytes: guid.to_bytes(),
166        }
167    }
168}