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:
Jiewen Yao 2017-03-15 13:12:33 +08:00
parent 08bed3fbac
commit 056563f1bb

View File

@ -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;