From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 3CF0781D45 for ; Wed, 2 Nov 2016 06:58:51 -0700 (PDT) Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga105.fm.intel.com with ESMTP; 02 Nov 2016 06:58:52 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,583,1473145200"; d="scan'208";a="186752624" Received: from yliu149-mobl.ccr.corp.intel.com (HELO jyao1-MOBL.ccr.corp.intel.com) ([10.254.209.154]) by fmsmga004.fm.intel.com with ESMTP; 02 Nov 2016 06:58:49 -0700 From: Jiewen Yao To: edk2-devel@lists.01.org Cc: Feng Tian , Star Zeng , Michael D Kinney , Liming Gao , Chao Zhang Date: Wed, 2 Nov 2016 21:57:08 +0800 Message-Id: <1478095036-16344-8-git-send-email-jiewen.yao@intel.com> X-Mailer: git-send-email 2.7.4.windows.1 In-Reply-To: <1478095036-16344-1-git-send-email-jiewen.yao@intel.com> References: <1478095036-16344-1-git-send-email-jiewen.yao@intel.com> Subject: [PATCH V8 07/15] MdeModulePkg/Esrt: Add ESRT_FW_TYPE_SYSTEMFIRMWARE check. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 02 Nov 2016 13:58:51 -0000 The previous ESRT driver unconditionally treat FMP to be ESRT_FW_TYPE_DEVICEFIRMWARE. EDKII System Capsule reuses FMP, but it is ESRT_FW_TYPE_SYSTEMFIRMWARE. Add check to ImageTypeId check to see if it is ESRT_FW_TYPE_SYSTEMFIRMWARE. Cc: Feng Tian Cc: Star Zeng Cc: Michael D Kinney Cc: Liming Gao Cc: Chao Zhang Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jiewen Yao Reviewed-by: Liming Gao --- MdeModulePkg/Universal/EsrtDxe/EsrtDxe.inf | 3 +- MdeModulePkg/Universal/EsrtDxe/EsrtImpl.c | 37 ++++++++++++++++++-- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.inf b/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.inf index 8fbc75b..2c66f15 100644 --- a/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.inf +++ b/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.inf @@ -4,7 +4,7 @@ # This driver produces EsrtManagement protocol to manage cache ESRT repository for FMP/Non-FMP instances. # ESRT table based on repository is published on gEfiEventReadyToBootGuid. # -# Copyright (c) 2015, Intel Corporation. All rights reserved.
+# Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.
# 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 @@ -64,6 +64,7 @@ gEfiMdeModulePkgTokenSpaceGuid.PcdMaxFmpEsrtCacheNum ## CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdMaxNonFmpEsrtCacheNum ## CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdSystemRebootAfterCapsuleProcessFlag ## CONSUMES + gEfiMdeModulePkgTokenSpaceGuid.PcdSystemFmpCapsuleImageTypeIdGuid ## CONSUMES [Depex] gEfiVariableArchProtocolGuid AND gEfiVariableWriteArchProtocolGuid diff --git a/MdeModulePkg/Universal/EsrtDxe/EsrtImpl.c b/MdeModulePkg/Universal/EsrtDxe/EsrtImpl.c index f6d1e97..35a237e 100644 --- a/MdeModulePkg/Universal/EsrtDxe/EsrtImpl.c +++ b/MdeModulePkg/Universal/EsrtDxe/EsrtImpl.c @@ -1,7 +1,7 @@ /** @file Esrt management implementation. -Copyright (c) 2015, Intel Corporation. All rights reserved.
+Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.
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 @@ -391,6 +391,35 @@ EXIT: } /** + Return if this FMP is a system FMP or a device FMP, based upon FmpImageInfo. + + @param[in] FmpImageInfo A pointer to EFI_FIRMWARE_IMAGE_DESCRIPTOR + + @return TRUE It is a system FMP. + @return FALSE It is a device FMP. +**/ +BOOLEAN +IsSystemFmp ( + IN EFI_FIRMWARE_IMAGE_DESCRIPTOR *FmpImageInfo + ) +{ + GUID *Guid; + UINTN Count; + UINTN Index; + + Guid = PcdGetPtr(PcdSystemFmpCapsuleImageTypeIdGuid); + Count = PcdGetSize(PcdSystemFmpCapsuleImageTypeIdGuid)/sizeof(GUID); + + for (Index = 0; Index < Count; Index++, Guid++) { + if (CompareGuid(&FmpImageInfo->ImageTypeId, Guid)) { + return TRUE; + } + } + + return FALSE; +} + +/** Init one ESRT entry according to input FmpImageInfo (V1, V2, V3) . @param[in, out] EsrtEntry Esrt entry to be Init @@ -407,7 +436,11 @@ SetEsrtEntryFromFmpInfo ( { EsrtEntry->FwVersion = FmpImageInfo->Version; EsrtEntry->FwClass = FmpImageInfo->ImageTypeId; - EsrtEntry->FwType = ESRT_FW_TYPE_DEVICEFIRMWARE; + if (IsSystemFmp(FmpImageInfo)) { + EsrtEntry->FwType = ESRT_FW_TYPE_SYSTEMFIRMWARE; + } else { + EsrtEntry->FwType = ESRT_FW_TYPE_DEVICEFIRMWARE; + } EsrtEntry->LowestSupportedFwVersion = 0; EsrtEntry->CapsuleFlags = 0; EsrtEntry->LastAttemptVersion = 0; -- 2.7.4.windows.1