diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c index 56c8e98b84..15dbc00216 100644 --- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c +++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c @@ -1190,7 +1190,6 @@ IsNestedFmpCapsule ( ) { EFI_STATUS Status; - EFI_SYSTEM_RESOURCE_TABLE *Esrt; EFI_SYSTEM_RESOURCE_ENTRY *EsrtEntry; UINTN Index; BOOLEAN EsrtGuidFound; @@ -1198,6 +1197,8 @@ IsNestedFmpCapsule ( UINTN NestedCapsuleSize; ESRT_MANAGEMENT_PROTOCOL *EsrtProtocol; EFI_SYSTEM_RESOURCE_ENTRY Entry; + EFI_HANDLE *HandleBuffer; + UINTN NumberOfHandles; EsrtGuidFound = FALSE; if (mIsVirtualAddrConverted) { @@ -1223,19 +1224,21 @@ IsNestedFmpCapsule ( } // - // Check ESRT configuration table + // Check Firmware Management Protocols // if (!EsrtGuidFound) { - Status = EfiGetSystemConfigurationTable(&gEfiSystemResourceTableGuid, (VOID **)&Esrt); + HandleBuffer = NULL; + Status = GetFmpHandleBufferByType ( + &CapsuleHeader->CapsuleGuid, + 0, + &NumberOfHandles, + &HandleBuffer + ); if (!EFI_ERROR(Status)) { - ASSERT (Esrt != NULL); - EsrtEntry = (VOID *)(Esrt + 1); - for (Index = 0; Index < Esrt->FwResourceCount; Index++, EsrtEntry++) { - if (CompareGuid(&EsrtEntry->FwClass, &CapsuleHeader->CapsuleGuid)) { - EsrtGuidFound = TRUE; - break; - } - } + EsrtGuidFound = TRUE; + } + if (HandleBuffer != NULL) { + FreePool (HandleBuffer); } } } diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf index 9eb50337a2..1d947101d3 100644 --- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf +++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf @@ -73,7 +73,6 @@ [Guids] gEfiFmpCapsuleGuid ## SOMETIMES_CONSUMES ## GUID gWindowsUxCapsuleGuid ## SOMETIMES_CONSUMES ## GUID - gEfiSystemResourceTableGuid ## SOMETIMES_CONSUMES ## GUID ## SOMETIMES_CONSUMES ## Variable:L"CapsuleMax" ## SOMETIMES_PRODUCES ## Variable:L"CapsuleMax" gEfiCapsuleReportGuid