diff --git a/EmbeddedPkg/EmbeddedPkg.dec b/EmbeddedPkg/EmbeddedPkg.dec index e48ce2e95b..c7b134dd34 100644 --- a/EmbeddedPkg/EmbeddedPkg.dec +++ b/EmbeddedPkg/EmbeddedPkg.dec @@ -67,6 +67,9 @@ # HII form set GUID for ConsolePrefDxe driver gConsolePrefFormSetGuid = { 0x2d2358b4, 0xe96c, 0x484d, { 0xb2, 0xdd, 0x7c, 0x2e, 0xdf, 0xc7, 0xd5, 0x6f } } + ## Include/Guid/NvVarStoreFormatted.h + gEdkiiNvVarStoreFormattedGuid = { 0xd1a86e3f, 0x0707, 0x4c35, { 0x83, 0xcd, 0xdc, 0x2c, 0x29, 0xc8, 0x91, 0xa3 } } + [Protocols.common] gHardwareInterruptProtocolGuid = { 0x2890B3EA, 0x053D, 0x1643, { 0xAD, 0x0C, 0xD6, 0x48, 0x08, 0xDA, 0x3F, 0xF1 } } gHardwareInterrupt2ProtocolGuid = { 0x32898322, 0x2da1, 0x474a, { 0xba, 0xaa, 0xf3, 0xf7, 0xcf, 0x56, 0x94, 0x70 } } diff --git a/EmbeddedPkg/Include/Guid/NvVarStoreFormatted.h b/EmbeddedPkg/Include/Guid/NvVarStoreFormatted.h new file mode 100644 index 0000000000..4e057e4d89 --- /dev/null +++ b/EmbeddedPkg/Include/Guid/NvVarStoreFormatted.h @@ -0,0 +1,39 @@ +/** @file + EDKII NvVarStore Formatted GUID + + A NULL protocol instance with this GUID in the DXE and/or MM protocol + databases, and/or a NULL PPI with this GUID in the PPI database, implies that + a DXE or MM driver, or a PEIM, has verified (or dynamically ensured) that the + non-volatile variable store has valid and consistent headers + (EFI_FIRMWARE_VOLUME_HEADER and VARIABLE_STORE_HEADER). + + Said predicate is required by the read-only variable PEIM, and the read side + of the runtime variable DXE and MM drivers, immediately after they are + dispatched. This GUID presents platforms with one way to coordinate between + their module(s) that format the variable store FVB device and the variable + service drivers. + + Copyright (C) 2018, Red Hat, Inc. + + This program and the accompanying materials are licensed and made available + under the terms and conditions of the BSD License that accompanies this + distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php. + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT + WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +**/ + + +#ifndef __EDKII_NV_VAR_STORE_FORMATTED_H__ +#define __EDKII_NV_VAR_STORE_FORMATTED_H__ + +#define EDKII_NV_VAR_STORE_FORMATTED_GUID \ + { \ + 0xd1a86e3f, 0x0707, 0x4c35, \ + { 0x83, 0xcd, 0xdc, 0x2c, 0x29, 0xc8, 0x91, 0xa3 } \ + } + +extern EFI_GUID gEdkiiNvVarStoreFormattedGuid; + +#endif diff --git a/EmbeddedPkg/Library/NvVarStoreFormattedLib/NvVarStoreFormattedLib.c b/EmbeddedPkg/Library/NvVarStoreFormattedLib/NvVarStoreFormattedLib.c new file mode 100644 index 0000000000..001e47cfe8 --- /dev/null +++ b/EmbeddedPkg/Library/NvVarStoreFormattedLib/NvVarStoreFormattedLib.c @@ -0,0 +1,41 @@ +/** @file + A hook-in library for: + - MdeModulePkg/Universal/Variable/Pei/VariablePei.inf + - MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf + - MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf + + Plugging this library instance into one of the above modules makes that + variable service backend wait for another platform module to dynamically + initialize or verify EFI_FIRMWARE_VOLUME_HEADER and VARIABLE_STORE_HEADER in + the non-volatile variable store FVB device. The initialization / verification + is signaled by installing gEdkiiNvVarStoreFormattedGuid into the + phase-matching PPI or protocol database, with a NULL interface. (Note that + installing gEdkiiNvVarStoreFormattedGuid into either the DXE or the MM + protocol database will unblock VariableSmm -- refer to EFI_SECTION_MM_DEPEX + in the PI spec.) + + Copyright (C) 2018, Red Hat, Inc. + + This program and the accompanying materials are licensed and made available + under the terms and conditions of the BSD License which accompanies this + distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT + WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +**/ + +#include + +RETURN_STATUS +EFIAPI +NvVarStoreFormattedInitialize ( + VOID + ) +{ + // + // Do nothing, just imbue VariablePei / VariableRuntimeDxe / VariableSmm with + // a PPI or protocol dependency on EDKII_NV_VAR_STORE_FORMATTED_GUID. + // + return RETURN_SUCCESS; +} diff --git a/EmbeddedPkg/Library/NvVarStoreFormattedLib/NvVarStoreFormattedLib.inf b/EmbeddedPkg/Library/NvVarStoreFormattedLib/NvVarStoreFormattedLib.inf new file mode 100644 index 0000000000..b02fc78109 --- /dev/null +++ b/EmbeddedPkg/Library/NvVarStoreFormattedLib/NvVarStoreFormattedLib.inf @@ -0,0 +1,52 @@ +## @file +# A hook-in library for: +# - MdeModulePkg/Universal/Variable/Pei/VariablePei.inf +# - MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf +# - MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf +# +# Plugging this library instance into one of the above modules makes that +# variable service backend wait for another platform module to dynamically +# initialize or verify EFI_FIRMWARE_VOLUME_HEADER and VARIABLE_STORE_HEADER in +# the non-volatile variable store FVB device. The initialization / verification +# is signaled by installing gEdkiiNvVarStoreFormattedGuid into the +# phase-matching PPI or protocol database, with a NULL interface. (Note that +# installing gEdkiiNvVarStoreFormattedGuid into either the DXE or the MM +# protocol database will unblock VariableSmm -- refer to EFI_SECTION_MM_DEPEX +# in the PI spec.) +# +# Copyright (C) 2018, Red Hat, Inc. +# +# This program and the accompanying materials are licensed and made available +# under the terms and conditions of the BSD License which accompanies this +# distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT +# WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +## + +[Defines] + INF_VERSION = 1.27 + BASE_NAME = NvVarStoreFormattedLib + FILE_GUID = 78f76ae8-ae62-4455-8148-c3a7ebaaa3f3 + MODULE_TYPE = BASE + VERSION_STRING = 1.0 + LIBRARY_CLASS = NvVarStoreFormattedLib|PEIM DXE_RUNTIME_DRIVER DXE_SMM_DRIVER + CONSTRUCTOR = NvVarStoreFormattedInitialize + +[Sources] + NvVarStoreFormattedLib.c + +[Packages] + EmbeddedPkg/EmbeddedPkg.dec + MdeModulePkg/MdeModulePkg.dec + MdePkg/MdePkg.dec + +# +# The matching DEPEX section below will generate the EFI_SECTION_PEI_DEPEX, +# EFI_SECTION_DXE_DEPEX or EFI_SECTION_MM_DEPEX leaf section for the PEIM +# (EFI_FV_FILETYPE_PEIM), DXE_RUNTIME_DRIVER (EFI_FV_FILETYPE_DRIVER), or +# DXE_SMM_DRIVER (EFI_FV_FILETYPE_MM) module, respectively. +# +[Depex.common.PEIM, Depex.common.DXE_RUNTIME_DRIVER, Depex.common.DXE_SMM_DRIVER] + gEdkiiNvVarStoreFormattedGuid