Skip to content

Commit 0833326

Browse files
committed
MdeModulePkg/DxeCapsuleLibFmp: display capsule's FwClass GUID
Signed-off-by: Sergii Dmytruk <sergii.dmytruk@3mdeb.com>
1 parent d315e56 commit 0833326

1 file changed

Lines changed: 50 additions & 3 deletions

File tree

MdeModulePkg/Library/DxeCapsuleLibFmp/UpdateReport.c

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,42 @@ ReportVersions (
427427
}
428428
}
429429

430+
STATIC
431+
CONST EFI_GUID *
432+
GetFirstPayloadFwClass (
433+
IN CONST CapsuleResult *Capsule
434+
)
435+
{
436+
UINTN PayloadIdx;
437+
UINTN ItemCount;
438+
EFI_CAPSULE_HEADER *Header;
439+
EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER *FmpHdr;
440+
EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER *FmpImageHdr;
441+
UINT64 *ItemOffsetList;
442+
443+
Header = Capsule->Header;
444+
if (!IsFmpCapsule (Header)) {
445+
return NULL;
446+
}
447+
448+
// An FMP capsule can be nested which is checked for in IsFmpCapsule().
449+
if (!IsFmpCapsuleGuid (&Header->CapsuleGuid)) {
450+
Header = (VOID *)((UINT8 *)Header + Header->HeaderSize);
451+
}
452+
453+
FmpHdr = (VOID *)((UINT8 *)Header + Header->HeaderSize);
454+
ItemCount = FmpHdr->EmbeddedDriverCount + FmpHdr->PayloadItemCount;
455+
ItemOffsetList = (UINT64 *)&FmpHdr[1];
456+
457+
PayloadIdx = FmpHdr->EmbeddedDriverCount;
458+
if (PayloadIdx < ItemCount) {
459+
FmpImageHdr = (VOID *)((UINT8 *)FmpHdr + ItemOffsetList[PayloadIdx]);
460+
return &FmpImageHdr->UpdateImageTypeId;
461+
}
462+
463+
return NULL;
464+
}
465+
430466
STATIC
431467
VOID
432468
EFIAPI
@@ -439,6 +475,7 @@ ReportResults (
439475
UINTN PayloadIdx;
440476
CONST CapsuleResult *Capsule;
441477
CONST PayloadResult *Payload;
478+
CONST EFI_GUID *FwClass;
442479

443480
for (CapsuleIdx = 0; CapsuleIdx < Report->CapsuleCount; ++CapsuleIdx) {
444481
Capsule = &Report->Capsules[CapsuleIdx];
@@ -451,9 +488,19 @@ ReportResults (
451488
if (Report->CapsuleCount > 1) {
452489
AddFullLineF (PopUp, L"Capsule #%d", Capsule->Index + 1);
453490
}
454-
AddFullLineF (PopUp, L"- Result: %s", OutcomeToString (Capsule->Outcome));
455-
if (Capsule->Status != EFI_SUCCESS) {
456-
AddFullLineF (PopUp, L"- Status: %r", Capsule->Status);
491+
492+
// Can print GUIDs of all payloads if we'll ever use such capsules.
493+
FwClass = GetFirstPayloadFwClass (Capsule);
494+
if (FwClass == NULL) {
495+
AddFullLine (PopUp, L"- GUID: unknown");
496+
} else {
497+
AddFullLineF (PopUp, L"- GUID: %g", FwClass);
498+
}
499+
500+
if (Capsule->Status == EFI_SUCCESS) {
501+
AddFullLineF (PopUp, L"- Result: %s", OutcomeToString (Capsule->Outcome));
502+
} else {
503+
AddFullLineF (PopUp, L"- Result: %s (error: %r)", OutcomeToString (Capsule->Outcome), Capsule->Status);
457504
}
458505

459506
for (PayloadIdx = 0; PayloadIdx < Capsule->PayloadCount; ++PayloadIdx) {

0 commit comments

Comments
 (0)