Laszlo Ersek 7ab26d5180 EmbeddedPkg: introduce NvVarStoreFormattedLib
Some platforms don't format a variable store template at build time;
instead they format the non-volatile varstore flash chip during boot,
dynamically. Introduce NvVarStoreFormattedLib to enable such platforms to
delay the "variable read" service drivers until the platform specific
module(s) report that the variable store has been formatted.

The platform-specific module that performs the formatting during startup
is usually an FVB or MM FVB driver. Under the proposed scheme, it becomes
responsible for installing gEdkiiNvVarStoreFormattedGuid with a NULL
interface in the protocol database. In turn, the platform DSC will hook
NvVarStoreFormattedLib into the variable service driver, to make the
latter wait for the FVB driver. Platforms that need not delay the variable
service driver like this may still use the same FVB driver;
gEdkiiNvVarStoreFormattedGuid will simply be ignored.

Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Leif Lindholm <leif.lindholm@linaro.org>
Cc: Steve Capper <steve.capper@linaro.org>
Cc: Supreeth Venkatesh <Supreeth.Venkatesh@arm.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Tested-by: Steve Capper <steve.capper@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
2018-04-12 21:24:30 +02:00

53 lines
2.3 KiB
INI

## @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