From 48997fe4d38f51c8fa362fca849a400ed8b01f51 Mon Sep 17 00:00:00 2001 From: "Xu, Wei6" Date: Fri, 10 Jan 2020 13:34:52 +0800 Subject: [PATCH] MdePkg: Add definition for Fmp Capsule Dependency. REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2421 Add new definitions for Fmp Capsule dependency in UEFI Spec 2.8. 1. Extend the Last Attempt Status with a value to indicate the firmware update fails with unsatisfied dependencies. 2. Add the definition of dependency expression op-codes. 3. Add the definition of EFI_FIRMWARE_IMAGE_DEP which is an array of FMP dependency expression op-codes. 4. Extend the EFI_FIRMWARE_IMAGE_DESCRIPTOR with a pointer to the array of FMP dependency expression op-codes. 5. Extend the Image Attribute Definitions with IMAGE_ATTRIBUTE_DEPENDENCY to indicate that there is and EFI_FIRMWARE_IMAGE_DEP section associated with the image. 6. Update EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION to 4. Cc: Michael D Kinney Cc: Liming Gao Signed-off-by: Wei6 Xu Reviewed-by: Liming Gao --- MdePkg/Include/Guid/SystemResourceTable.h | 19 ++++++----- MdePkg/Include/Protocol/FirmwareManagement.h | 35 ++++++++++++++++++-- 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/MdePkg/Include/Guid/SystemResourceTable.h b/MdePkg/Include/Guid/SystemResourceTable.h index 57c42bf9f3..418b8c8d05 100644 --- a/MdePkg/Include/Guid/SystemResourceTable.h +++ b/MdePkg/Include/Guid/SystemResourceTable.h @@ -1,7 +1,7 @@ /** @file Guid & data structure used for EFI System Resource Table (ESRT) - Copyright (c) 2015, Intel Corporation. All rights reserved.
+ Copyright (c) 2015 - 2020, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @par Revision Reference: @@ -34,14 +34,15 @@ /// /// Last Attempt Status Values /// -#define LAST_ATTEMPT_STATUS_SUCCESS 0x00000000 -#define LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL 0x00000001 -#define LAST_ATTEMPT_STATUS_ERROR_INSUFFICIENT_RESOURCES 0x00000002 -#define LAST_ATTEMPT_STATUS_ERROR_INCORRECT_VERSION 0x00000003 -#define LAST_ATTEMPT_STATUS_ERROR_INVALID_FORMAT 0x00000004 -#define LAST_ATTEMPT_STATUS_ERROR_AUTH_ERROR 0x00000005 -#define LAST_ATTEMPT_STATUS_ERROR_PWR_EVT_AC 0x00000006 -#define LAST_ATTEMPT_STATUS_ERROR_PWR_EVT_BATT 0x00000007 +#define LAST_ATTEMPT_STATUS_SUCCESS 0x00000000 +#define LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL 0x00000001 +#define LAST_ATTEMPT_STATUS_ERROR_INSUFFICIENT_RESOURCES 0x00000002 +#define LAST_ATTEMPT_STATUS_ERROR_INCORRECT_VERSION 0x00000003 +#define LAST_ATTEMPT_STATUS_ERROR_INVALID_FORMAT 0x00000004 +#define LAST_ATTEMPT_STATUS_ERROR_AUTH_ERROR 0x00000005 +#define LAST_ATTEMPT_STATUS_ERROR_PWR_EVT_AC 0x00000006 +#define LAST_ATTEMPT_STATUS_ERROR_PWR_EVT_BATT 0x00000007 +#define LAST_ATTEMPT_STATUS_ERROR_UNSATISFIED_DEPENDENCIES 0x00000008 typedef struct { /// diff --git a/MdePkg/Include/Protocol/FirmwareManagement.h b/MdePkg/Include/Protocol/FirmwareManagement.h index 0a0bf4c84a..297bb5ff03 100644 --- a/MdePkg/Include/Protocol/FirmwareManagement.h +++ b/MdePkg/Include/Protocol/FirmwareManagement.h @@ -8,7 +8,7 @@ CheckImage(), GetPackageInfo(), and SetPackageInfo() shall return EFI_UNSUPPORTED if not supported by the driver. - Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.
+ Copyright (c) 2009 - 2020, Intel Corporation. All rights reserved.
Copyright (c) 2013 - 2014, Hewlett-Packard Development Company, L.P.
SPDX-License-Identifier: BSD-2-Clause-Patent @@ -28,6 +28,31 @@ typedef struct _EFI_FIRMWARE_MANAGEMENT_PROTOCOL EFI_FIRMWARE_MANAGEMENT_PROTOCOL; +/// +/// Dependency Expression Opcode +/// +#define EFI_FMP_DEP_PUSH_GUID 0x00 +#define EFI_FMP_DEP_PUSH_VERSION 0x01 +#define EFI_FMP_DEP_VERSION_STR 0x02 +#define EFI_FMP_DEP_AND 0x03 +#define EFI_FMP_DEP_OR 0x04 +#define EFI_FMP_DEP_NOT 0x05 +#define EFI_FMP_DEP_TRUE 0x06 +#define EFI_FMP_DEP_FALSE 0x07 +#define EFI_FMP_DEP_EQ 0x08 +#define EFI_FMP_DEP_GT 0x09 +#define EFI_FMP_DEP_GTE 0x0A +#define EFI_FMP_DEP_LT 0x0B +#define EFI_FMP_DEP_LTE 0x0C +#define EFI_FMP_DEP_END 0x0D + +/// +/// Image Attribute - Dependency +/// +typedef struct { + UINT8 Dependencies[1]; +} EFI_FIRMWARE_IMAGE_DEP; + /// /// EFI_FIRMWARE_IMAGE_DESCRIPTOR /// @@ -111,6 +136,7 @@ typedef struct { /// present in version 3 or higher. /// UINT64 HardwareInstance; + EFI_FIRMWARE_IMAGE_DEP *Dependencies; } EFI_FIRMWARE_IMAGE_DESCRIPTOR; @@ -143,6 +169,11 @@ typedef struct { /// The attribute IMAGE_ATTRIBUTE_UEFI_IMAGE indicates that this image is an EFI compatible image. /// #define IMAGE_ATTRIBUTE_UEFI_IMAGE 0x0000000000000010 +/// +/// The attribute IMAGE_ATTRIBUTE_DEPENDENCY indicates that there is an EFI_FIRMWARE_IMAGE_DEP +/// section associated with the image. +/// +#define IMAGE_ATTRIBUTE_DEPENDENCY 0x0000000000000020 // @@ -158,7 +189,7 @@ typedef struct { /// /// Descriptor Version exposed by GetImageInfo() function /// -#define EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION 3 +#define EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION 4 /// -- 2.39.2