123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- /** @file
- UEFI variable support functions for Firmware Management Protocol based
- firmware updates.
- Copyright (c) 2016, Microsoft Corporation. All rights reserved.<BR>
- Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #ifndef __VARIABLE_SUPPORT_H__
- #define __VARIABLE_SUPPORT_H__
- ///
- /// Default values for FMP Controller State information
- ///
- #define DEFAULT_VERSION 0x1
- #define DEFAULT_LOWESTSUPPORTEDVERSION 0x0
- #define DEFAULT_LASTATTEMPTSTATUS 0x0
- #define DEFAULT_LASTATTEMPTVERSION 0x0
- ///
- /// Base UEFI Variable names for FMP Controller State information stored in
- /// separate variables.
- ///
- #define VARNAME_VERSION L"FmpVersion"
- #define VARNAME_LSV L"FmpLsv"
- #define VARNAME_LASTATTEMPTSTATUS L"LastAttemptStatus"
- #define VARNAME_LASTATTEMPTVERSION L"LastAttemptVersion"
- ///
- /// Base UEFI Variable name for FMP Controller State information stored in a
- /// merged UEFI Variable. If the separate UEFI Variables above are detected,
- /// then they are merged into a single variable and the separate variables are
- /// deleted.
- ///
- #define VARNAME_FMPSTATE L"FmpState"
- ///
- /// FMP Controller State structure that is used to store the state of
- /// a controller in one combined UEFI Variable.
- ///
- typedef struct {
- BOOLEAN VersionValid;
- BOOLEAN LsvValid;
- BOOLEAN LastAttemptStatusValid;
- BOOLEAN LastAttemptVersionValid;
- UINT32 Version;
- UINT32 Lsv;
- UINT32 LastAttemptStatus;
- UINT32 LastAttemptVersion;
- } FMP_CONTROLLER_STATE;
- /**
- Generate the names of the UEFI Variables used to store state information for
- a managed controller. The UEFI Variables names are a combination of a base
- name and an optional hardware instance value as a 16 character hex value. If
- the hardware instance value is 0, then the 16 character hex value is not
- included. These storage for the UEFI Variable names are allocated using the
- UEFI Boot Service AllocatePool() and the pointers are stored in the Private.
- The following are examples of variable names produces for hardware instance
- value 0 and value 0x1234567812345678.
- FmpVersion
- FmpLsv
- LastAttemptStatus
- LastAttemptVersion
- FmpDxe
- FmpVersion1234567812345678
- FmpLsv1234567812345678
- LastAttemptStatus1234567812345678
- LastAttemptVersion1234567812345678
- FmpDxe1234567812345678
- @param[in,out] Private Private context structure for the managed controller.
- **/
- VOID
- GenerateFmpVariableNames (
- IN OUT FIRMWARE_MANAGEMENT_PRIVATE_DATA *Private
- );
- /**
- Returns the value used to fill in the Version field of the
- EFI_FIRMWARE_IMAGE_DESCRIPTOR structure that is returned by the GetImageInfo()
- service of the Firmware Management Protocol. The value is read from a UEFI
- variable. If the UEFI variables does not exist, then a default version value
- is returned.
- UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpDxe"
- @param[in] Private Private context structure for the managed controller.
- @return The version of the firmware image in the firmware device.
- **/
- UINT32
- GetVersionFromVariable (
- IN FIRMWARE_MANAGEMENT_PRIVATE_DATA *Private
- );
- /**
- Returns the value used to fill in the LowestSupportedVersion field of the
- EFI_FIRMWARE_IMAGE_DESCRIPTOR structure that is returned by the GetImageInfo()
- service of the Firmware Management Protocol. The value is read from a UEFI
- variable. If the UEFI variables does not exist, then a default lowest
- supported version value is returned.
- UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpDxe"
- @param[in] Private Private context structure for the managed controller.
- @return The lowest supported version of the firmware image in the firmware
- device.
- **/
- UINT32
- GetLowestSupportedVersionFromVariable (
- IN FIRMWARE_MANAGEMENT_PRIVATE_DATA *Private
- );
- /**
- Returns the value used to fill in the LastAttemptStatus field of the
- EFI_FIRMWARE_IMAGE_DESCRIPTOR structure that is returned by the GetImageInfo()
- service of the Firmware Management Protocol. The value is read from a UEFI
- variable. If the UEFI variables does not exist, then a default last attempt
- status value is returned.
- UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpDxe"
- @param[in] Private Private context structure for the managed controller.
- @return The last attempt status value for the most recent capsule update.
- **/
- UINT32
- GetLastAttemptStatusFromVariable (
- IN FIRMWARE_MANAGEMENT_PRIVATE_DATA *Private
- );
- /**
- Returns the value used to fill in the LastAttemptVersion field of the
- EFI_FIRMWARE_IMAGE_DESCRIPTOR structure that is returned by the GetImageInfo()
- service of the Firmware Management Protocol. The value is read from a UEFI
- variable. If the UEFI variables does not exist, then a default last attempt
- version value is returned.
- UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpDxe"
- @param[in] Private Private context structure for the managed controller.
- @return The last attempt version value for the most recent capsule update.
- **/
- UINT32
- GetLastAttemptVersionFromVariable (
- IN FIRMWARE_MANAGEMENT_PRIVATE_DATA *Private
- );
- /**
- Saves the version current of the firmware image in the firmware device to a
- UEFI variable.
- UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpDxe"
- @param[in] Private Private context structure for the managed controller.
- @param[in] Version The version of the firmware image in the firmware device.
- **/
- VOID
- SetVersionInVariable (
- IN FIRMWARE_MANAGEMENT_PRIVATE_DATA *Private,
- IN UINT32 Version
- );
- /**
- Saves the lowest supported version current of the firmware image in the
- firmware device to a UEFI variable.
- UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpDxe"
- @param[in] Private Private context structure for the managed
- controller.
- @param[in] LowestSupportedVersion The lowest supported version of the
- firmware image in the firmware device.
- **/
- VOID
- SetLowestSupportedVersionInVariable (
- IN FIRMWARE_MANAGEMENT_PRIVATE_DATA *Private,
- IN UINT32 LowestSupportedVersion
- );
- /**
- Saves the last attempt status value of the most recent FMP capsule update to a
- UEFI variable.
- UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpDxe"
- @param[in] Private Private context structure for the managed
- controller.
- @param[in] LastAttemptStatus The last attempt status of the most recent FMP
- capsule update.
- **/
- VOID
- SetLastAttemptStatusInVariable (
- IN FIRMWARE_MANAGEMENT_PRIVATE_DATA *Private,
- IN UINT32 LastAttemptStatus
- );
- /**
- Saves the last attempt version value of the most recent FMP capsule update to
- a UEFI variable.
- UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpDxe"
- @param[in] Private Private context structure for the managed
- controller.
- @param[in] LastAttemptVersion The last attempt version value of the most
- recent FMP capsule update.
- **/
- VOID
- SetLastAttemptVersionInVariable (
- IN FIRMWARE_MANAGEMENT_PRIVATE_DATA *Private,
- IN UINT32 LastAttemptVersion
- );
- /**
- Locks all the UEFI Variables that use gEfiCallerIdGuid of the currently
- executing module.
- @param[in] Private Private context structure for the managed controller.
- @retval EFI_SUCCESS All UEFI variables are locked.
- @retval EFI_UNSUPPORTED Variable Lock Protocol not found.
- @retval Other One of the UEFI variables could not be locked.
- **/
- EFI_STATUS
- LockAllFmpVariables (
- IN FIRMWARE_MANAGEMENT_PRIVATE_DATA *Private
- );
- #endif
|