mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-26 23:24:03 +02:00
MdeModulePkg/CapsuleLib: Fix runtime issue
The previous patch has problem on handling capsule request at runtime. This patch fixed the issue. Cc: Chao Zhang <chao.b.zhang@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jiewen Yao <jiewen.yao@intel.com> Reviewed-by: Chao Zhang <chao.b.zhang@intel.com>
This commit is contained in:
parent
08bed3fbac
commit
056563f1bb
@ -1453,33 +1453,44 @@ IsNestedFmpCapsule (
|
|||||||
EFI_SYSTEM_RESOURCE_ENTRY Entry;
|
EFI_SYSTEM_RESOURCE_ENTRY Entry;
|
||||||
|
|
||||||
EsrtGuidFound = FALSE;
|
EsrtGuidFound = FALSE;
|
||||||
|
if (mIsVirtualAddrConverted) {
|
||||||
//
|
if(mEsrtTable != NULL) {
|
||||||
// Check ESRT protocol
|
EsrtEntry = (EFI_SYSTEM_RESOURCE_ENTRY *)(mEsrtTable + 1);
|
||||||
//
|
for (Index = 0; Index < mEsrtTable->FwResourceCount ; Index++, EsrtEntry++) {
|
||||||
Status = gBS->LocateProtocol(&gEsrtManagementProtocolGuid, NULL, (VOID **)&EsrtProtocol);
|
|
||||||
if (!EFI_ERROR(Status)) {
|
|
||||||
Status = EsrtProtocol->GetEsrtEntry(&CapsuleHeader->CapsuleGuid, &Entry);
|
|
||||||
if (!EFI_ERROR(Status)) {
|
|
||||||
EsrtGuidFound = TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Check ESRT configuration table
|
|
||||||
//
|
|
||||||
if (!EsrtGuidFound) {
|
|
||||||
Status = EfiGetSystemConfigurationTable(&gEfiSystemResourceTableGuid, (VOID **)&Esrt);
|
|
||||||
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)) {
|
if (CompareGuid(&EsrtEntry->FwClass, &CapsuleHeader->CapsuleGuid)) {
|
||||||
EsrtGuidFound = TRUE;
|
EsrtGuidFound = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
//
|
||||||
|
// Check ESRT protocol
|
||||||
|
//
|
||||||
|
Status = gBS->LocateProtocol(&gEsrtManagementProtocolGuid, NULL, (VOID **)&EsrtProtocol);
|
||||||
|
if (!EFI_ERROR(Status)) {
|
||||||
|
Status = EsrtProtocol->GetEsrtEntry(&CapsuleHeader->CapsuleGuid, &Entry);
|
||||||
|
if (!EFI_ERROR(Status)) {
|
||||||
|
EsrtGuidFound = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check ESRT configuration table
|
||||||
|
//
|
||||||
|
if (!EsrtGuidFound) {
|
||||||
|
Status = EfiGetSystemConfigurationTable(&gEfiSystemResourceTableGuid, (VOID **)&Esrt);
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!EsrtGuidFound) {
|
if (!EsrtGuidFound) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user