SignedCapsulePkg: Apply uncrustify changes
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the SignedCapsulePkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Jian J Wang <jian.j.wang@intel.com>
This commit is contained in:
committed by
mergify[bot]
parent
47d20b54f9
commit
b878648967
@@ -12,7 +12,7 @@
|
||||
#include <Library/IniParsingLib.h>
|
||||
#include <Library/PrintLib.h>
|
||||
|
||||
#define MAX_LINE_LENGTH 512
|
||||
#define MAX_LINE_LENGTH 512
|
||||
|
||||
/**
|
||||
Parse Config data file to get the updated data array.
|
||||
@@ -29,24 +29,24 @@
|
||||
**/
|
||||
EFI_STATUS
|
||||
ParseRecoveryDataFile (
|
||||
IN UINT8 *DataBuffer,
|
||||
IN UINTN BufferSize,
|
||||
IN OUT CONFIG_HEADER *ConfigHeader,
|
||||
IN OUT RECOVERY_CONFIG_DATA **RecoveryArray
|
||||
IN UINT8 *DataBuffer,
|
||||
IN UINTN BufferSize,
|
||||
IN OUT CONFIG_HEADER *ConfigHeader,
|
||||
IN OUT RECOVERY_CONFIG_DATA **RecoveryArray
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
CHAR8 *SectionName;
|
||||
CHAR8 Entry[MAX_LINE_LENGTH];
|
||||
UINTN Num;
|
||||
UINTN Index;
|
||||
EFI_GUID FileGuid;
|
||||
VOID *Context;
|
||||
EFI_STATUS Status;
|
||||
CHAR8 *SectionName;
|
||||
CHAR8 Entry[MAX_LINE_LENGTH];
|
||||
UINTN Num;
|
||||
UINTN Index;
|
||||
EFI_GUID FileGuid;
|
||||
VOID *Context;
|
||||
|
||||
//
|
||||
// First process the data buffer and get all sections and entries
|
||||
//
|
||||
Context = OpenIniFile(DataBuffer, BufferSize);
|
||||
Context = OpenIniFile (DataBuffer, BufferSize);
|
||||
if (Context == NULL) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
@@ -54,26 +54,26 @@ ParseRecoveryDataFile (
|
||||
//
|
||||
// Now get NumOfUpdate
|
||||
//
|
||||
Status = GetDecimalUintnFromDataFile(
|
||||
Status = GetDecimalUintnFromDataFile (
|
||||
Context,
|
||||
"Head",
|
||||
"NumOfRecovery",
|
||||
&Num
|
||||
);
|
||||
if (EFI_ERROR(Status) || (Num == 0)) {
|
||||
DEBUG((DEBUG_ERROR, "NumOfRecovery not found\n"));
|
||||
CloseIniFile(Context);
|
||||
if (EFI_ERROR (Status) || (Num == 0)) {
|
||||
DEBUG ((DEBUG_ERROR, "NumOfRecovery not found\n"));
|
||||
CloseIniFile (Context);
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
|
||||
ConfigHeader->NumOfRecovery = Num;
|
||||
*RecoveryArray = AllocateZeroPool ((sizeof (RECOVERY_CONFIG_DATA) * Num));
|
||||
*RecoveryArray = AllocateZeroPool ((sizeof (RECOVERY_CONFIG_DATA) * Num));
|
||||
if (*RecoveryArray == NULL) {
|
||||
CloseIniFile(Context);
|
||||
CloseIniFile (Context);
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
for (Index = 0 ; Index < ConfigHeader->NumOfRecovery; Index++) {
|
||||
for (Index = 0; Index < ConfigHeader->NumOfRecovery; Index++) {
|
||||
//
|
||||
// Get the section name of each update
|
||||
//
|
||||
@@ -85,15 +85,15 @@ ParseRecoveryDataFile (
|
||||
Index,
|
||||
0
|
||||
);
|
||||
Status = GetStringFromDataFile(
|
||||
Status = GetStringFromDataFile (
|
||||
Context,
|
||||
"Head",
|
||||
Entry,
|
||||
&SectionName
|
||||
);
|
||||
if (EFI_ERROR(Status) || (SectionName == NULL)) {
|
||||
DEBUG((DEBUG_ERROR, "[%d] %a not found\n", Index, Entry));
|
||||
CloseIniFile(Context);
|
||||
if (EFI_ERROR (Status) || (SectionName == NULL)) {
|
||||
DEBUG ((DEBUG_ERROR, "[%d] %a not found\n", Index, Entry));
|
||||
CloseIniFile (Context);
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
|
||||
@@ -105,58 +105,59 @@ ParseRecoveryDataFile (
|
||||
//
|
||||
// FileGuid
|
||||
//
|
||||
Status = GetGuidFromDataFile(
|
||||
Status = GetGuidFromDataFile (
|
||||
Context,
|
||||
SectionName,
|
||||
"FileGuid",
|
||||
&FileGuid
|
||||
);
|
||||
if (EFI_ERROR(Status)) {
|
||||
CloseIniFile(Context);
|
||||
DEBUG((DEBUG_ERROR, "[%d] FileGuid not found\n", Index));
|
||||
if (EFI_ERROR (Status)) {
|
||||
CloseIniFile (Context);
|
||||
DEBUG ((DEBUG_ERROR, "[%d] FileGuid not found\n", Index));
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
|
||||
CopyGuid(&((*RecoveryArray)[Index].FileGuid), &FileGuid);
|
||||
CopyGuid (&((*RecoveryArray)[Index].FileGuid), &FileGuid);
|
||||
|
||||
//
|
||||
// Length
|
||||
//
|
||||
Status = GetHexUintnFromDataFile(
|
||||
Status = GetHexUintnFromDataFile (
|
||||
Context,
|
||||
SectionName,
|
||||
"Length",
|
||||
&Num
|
||||
);
|
||||
if (EFI_ERROR(Status)) {
|
||||
CloseIniFile(Context);
|
||||
DEBUG((DEBUG_ERROR, "[%d] Length not found\n", Index));
|
||||
if (EFI_ERROR (Status)) {
|
||||
CloseIniFile (Context);
|
||||
DEBUG ((DEBUG_ERROR, "[%d] Length not found\n", Index));
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
|
||||
(*RecoveryArray)[Index].Length = Num;
|
||||
|
||||
//
|
||||
// ImageOffset
|
||||
//
|
||||
Status = GetHexUintnFromDataFile(
|
||||
Status = GetHexUintnFromDataFile (
|
||||
Context,
|
||||
SectionName,
|
||||
"ImageOffset",
|
||||
&Num
|
||||
);
|
||||
if (EFI_ERROR(Status)) {
|
||||
CloseIniFile(Context);
|
||||
DEBUG((DEBUG_ERROR, "[%d] ImageOffset not found\n", Index));
|
||||
if (EFI_ERROR (Status)) {
|
||||
CloseIniFile (Context);
|
||||
DEBUG ((DEBUG_ERROR, "[%d] ImageOffset not found\n", Index));
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
|
||||
(*RecoveryArray)[Index].ImageOffset = Num;
|
||||
}
|
||||
|
||||
//
|
||||
// Now all configuration data got. Free those temporary buffers
|
||||
//
|
||||
CloseIniFile(Context);
|
||||
CloseIniFile (Context);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
@@ -59,15 +59,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
LoadRecoveryCapsule (
|
||||
IN EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PEI_RECOVERY_MODULE_PPI *This
|
||||
IN EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PEI_RECOVERY_MODULE_PPI *This
|
||||
);
|
||||
|
||||
EFI_PEI_RECOVERY_MODULE_PPI mRecoveryPpi = {
|
||||
EFI_PEI_RECOVERY_MODULE_PPI mRecoveryPpi = {
|
||||
LoadRecoveryCapsule
|
||||
};
|
||||
|
||||
EFI_PEI_PPI_DESCRIPTOR mRecoveryPpiList = {
|
||||
EFI_PEI_PPI_DESCRIPTOR mRecoveryPpiList = {
|
||||
(EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
|
||||
&gEfiPeiRecoveryModulePpiGuid,
|
||||
&mRecoveryPpi
|
||||
@@ -88,10 +88,10 @@ EFI_PEI_PPI_DESCRIPTOR mRecoveryPpiList = {
|
||||
**/
|
||||
EFI_STATUS
|
||||
ParseRecoveryDataFile (
|
||||
IN UINT8 *DataBuffer,
|
||||
IN UINTN BufferSize,
|
||||
IN OUT CONFIG_HEADER *ConfigHeader,
|
||||
IN OUT RECOVERY_CONFIG_DATA **RecoveryArray
|
||||
IN UINT8 *DataBuffer,
|
||||
IN UINTN BufferSize,
|
||||
IN OUT CONFIG_HEADER *ConfigHeader,
|
||||
IN OUT RECOVERY_CONFIG_DATA **RecoveryArray
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -104,18 +104,18 @@ ParseRecoveryDataFile (
|
||||
**/
|
||||
BOOLEAN
|
||||
IsSystemFmpImage (
|
||||
IN EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER *FmpImageHeader
|
||||
IN EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER *FmpImageHeader
|
||||
)
|
||||
{
|
||||
GUID *Guid;
|
||||
UINTN Count;
|
||||
UINTN Index;
|
||||
GUID *Guid;
|
||||
UINTN Count;
|
||||
UINTN Index;
|
||||
|
||||
Guid = PcdGetPtr(PcdSystemFmpCapsuleImageTypeIdGuid);
|
||||
Count = PcdGetSize(PcdSystemFmpCapsuleImageTypeIdGuid) / sizeof(GUID);
|
||||
Guid = PcdGetPtr (PcdSystemFmpCapsuleImageTypeIdGuid);
|
||||
Count = PcdGetSize (PcdSystemFmpCapsuleImageTypeIdGuid) / sizeof (GUID);
|
||||
|
||||
for (Index = 0; Index < Count; Index++, Guid++) {
|
||||
if (CompareGuid(&FmpImageHeader->UpdateImageTypeId, Guid)) {
|
||||
if (CompareGuid (&FmpImageHeader->UpdateImageTypeId, Guid)) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -136,7 +136,7 @@ IsFmpCapsuleGuid (
|
||||
IN EFI_GUID *CapsuleGuid
|
||||
)
|
||||
{
|
||||
if (CompareGuid(&gEfiFmpCapsuleGuid, CapsuleGuid)) {
|
||||
if (CompareGuid (&gEfiFmpCapsuleGuid, CapsuleGuid)) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -159,16 +159,16 @@ IsFmpCapsuleGuid (
|
||||
**/
|
||||
BOOLEAN
|
||||
IsSystemFmpCapsuleImage (
|
||||
IN EFI_CAPSULE_HEADER *CapsuleHeader
|
||||
IN EFI_CAPSULE_HEADER *CapsuleHeader
|
||||
)
|
||||
{
|
||||
EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER *FmpCapsuleHeader;
|
||||
EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER *ImageHeader;
|
||||
UINT64 *ItemOffsetList;
|
||||
UINT32 ItemNum;
|
||||
UINTN Index;
|
||||
EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER *FmpCapsuleHeader;
|
||||
EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER *ImageHeader;
|
||||
UINT64 *ItemOffsetList;
|
||||
UINT32 ItemNum;
|
||||
UINTN Index;
|
||||
|
||||
FmpCapsuleHeader = (EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER *) ((UINT8 *) CapsuleHeader + CapsuleHeader->HeaderSize);
|
||||
FmpCapsuleHeader = (EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER *)((UINT8 *)CapsuleHeader + CapsuleHeader->HeaderSize);
|
||||
|
||||
if (FmpCapsuleHeader->EmbeddedDriverCount != 0) {
|
||||
return FALSE;
|
||||
@@ -183,8 +183,8 @@ IsSystemFmpCapsuleImage (
|
||||
ItemOffsetList = (UINT64 *)(FmpCapsuleHeader + 1);
|
||||
|
||||
for (Index = 0; Index < ItemNum; Index++) {
|
||||
ImageHeader = (EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER *)((UINT8 *)FmpCapsuleHeader + ItemOffsetList[Index]);
|
||||
if (!IsSystemFmpImage(ImageHeader)) {
|
||||
ImageHeader = (EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER *)((UINT8 *)FmpCapsuleHeader + ItemOffsetList[Index]);
|
||||
if (!IsSystemFmpImage (ImageHeader)) {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
@@ -213,9 +213,11 @@ IsValidCapsuleHeader (
|
||||
if (CapsuleHeader->CapsuleImageSize != CapsuleSize) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (CapsuleHeader->HeaderSize >= CapsuleHeader->CapsuleImageSize) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -240,69 +242,73 @@ IsValidCapsuleHeader (
|
||||
**/
|
||||
EFI_STATUS
|
||||
ValidateFmpCapsule (
|
||||
IN EFI_CAPSULE_HEADER *CapsuleHeader,
|
||||
OUT BOOLEAN *IsSystemFmp OPTIONAL,
|
||||
OUT UINT16 *EmbeddedDriverCount OPTIONAL
|
||||
IN EFI_CAPSULE_HEADER *CapsuleHeader,
|
||||
OUT BOOLEAN *IsSystemFmp OPTIONAL,
|
||||
OUT UINT16 *EmbeddedDriverCount OPTIONAL
|
||||
)
|
||||
{
|
||||
EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER *FmpCapsuleHeader;
|
||||
UINT8 *EndOfCapsule;
|
||||
EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER *ImageHeader;
|
||||
UINT8 *EndOfPayload;
|
||||
UINT64 *ItemOffsetList;
|
||||
UINT32 ItemNum;
|
||||
UINTN Index;
|
||||
UINTN FmpCapsuleSize;
|
||||
UINTN FmpCapsuleHeaderSize;
|
||||
UINT64 FmpImageSize;
|
||||
UINTN FmpImageHeaderSize;
|
||||
EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER *FmpCapsuleHeader;
|
||||
UINT8 *EndOfCapsule;
|
||||
EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER *ImageHeader;
|
||||
UINT8 *EndOfPayload;
|
||||
UINT64 *ItemOffsetList;
|
||||
UINT32 ItemNum;
|
||||
UINTN Index;
|
||||
UINTN FmpCapsuleSize;
|
||||
UINTN FmpCapsuleHeaderSize;
|
||||
UINT64 FmpImageSize;
|
||||
UINTN FmpImageHeaderSize;
|
||||
|
||||
if (CapsuleHeader->HeaderSize >= CapsuleHeader->CapsuleImageSize) {
|
||||
DEBUG((DEBUG_ERROR, "HeaderSize(0x%x) >= CapsuleImageSize(0x%x)\n", CapsuleHeader->HeaderSize, CapsuleHeader->CapsuleImageSize));
|
||||
DEBUG ((DEBUG_ERROR, "HeaderSize(0x%x) >= CapsuleImageSize(0x%x)\n", CapsuleHeader->HeaderSize, CapsuleHeader->CapsuleImageSize));
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
FmpCapsuleHeader = (EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER *) ((UINT8 *) CapsuleHeader + CapsuleHeader->HeaderSize);
|
||||
EndOfCapsule = (UINT8 *) CapsuleHeader + CapsuleHeader->CapsuleImageSize;
|
||||
FmpCapsuleHeader = (EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER *)((UINT8 *)CapsuleHeader + CapsuleHeader->HeaderSize);
|
||||
EndOfCapsule = (UINT8 *)CapsuleHeader + CapsuleHeader->CapsuleImageSize;
|
||||
FmpCapsuleSize = (UINTN)EndOfCapsule - (UINTN)FmpCapsuleHeader;
|
||||
|
||||
if (FmpCapsuleSize < sizeof(EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER)) {
|
||||
DEBUG((DEBUG_ERROR, "FmpCapsuleSize(0x%x) < EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER\n", FmpCapsuleSize));
|
||||
if (FmpCapsuleSize < sizeof (EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER)) {
|
||||
DEBUG ((DEBUG_ERROR, "FmpCapsuleSize(0x%x) < EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER\n", FmpCapsuleSize));
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
// Check EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER
|
||||
if (FmpCapsuleHeader->Version != EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER_INIT_VERSION) {
|
||||
DEBUG((DEBUG_ERROR, "FmpCapsuleHeader->Version(0x%x) != EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER_INIT_VERSION\n", FmpCapsuleHeader->Version));
|
||||
DEBUG ((DEBUG_ERROR, "FmpCapsuleHeader->Version(0x%x) != EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER_INIT_VERSION\n", FmpCapsuleHeader->Version));
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
ItemOffsetList = (UINT64 *)(FmpCapsuleHeader + 1);
|
||||
|
||||
// No overflow
|
||||
ItemNum = FmpCapsuleHeader->EmbeddedDriverCount + FmpCapsuleHeader->PayloadItemCount;
|
||||
|
||||
if ((FmpCapsuleSize - sizeof(EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER))/sizeof(UINT64) < ItemNum) {
|
||||
DEBUG((DEBUG_ERROR, "ItemNum(0x%x) too big\n", ItemNum));
|
||||
if ((FmpCapsuleSize - sizeof (EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER))/sizeof (UINT64) < ItemNum) {
|
||||
DEBUG ((DEBUG_ERROR, "ItemNum(0x%x) too big\n", ItemNum));
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
FmpCapsuleHeaderSize = sizeof(EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER) + sizeof(UINT64)*ItemNum;
|
||||
|
||||
FmpCapsuleHeaderSize = sizeof (EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER) + sizeof (UINT64)*ItemNum;
|
||||
|
||||
// Check ItemOffsetList
|
||||
for (Index = 0; Index < ItemNum; Index++) {
|
||||
if (ItemOffsetList[Index] >= FmpCapsuleSize) {
|
||||
DEBUG((DEBUG_ERROR, "ItemOffsetList[%d](0x%lx) >= FmpCapsuleSize(0x%x)\n", Index, ItemOffsetList[Index], FmpCapsuleSize));
|
||||
DEBUG ((DEBUG_ERROR, "ItemOffsetList[%d](0x%lx) >= FmpCapsuleSize(0x%x)\n", Index, ItemOffsetList[Index], FmpCapsuleSize));
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if (ItemOffsetList[Index] < FmpCapsuleHeaderSize) {
|
||||
DEBUG((DEBUG_ERROR, "ItemOffsetList[%d](0x%lx) < FmpCapsuleHeaderSize(0x%x)\n", Index, ItemOffsetList[Index], FmpCapsuleHeaderSize));
|
||||
DEBUG ((DEBUG_ERROR, "ItemOffsetList[%d](0x%lx) < FmpCapsuleHeaderSize(0x%x)\n", Index, ItemOffsetList[Index], FmpCapsuleHeaderSize));
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
//
|
||||
// All the address in ItemOffsetList must be stored in ascending order
|
||||
//
|
||||
if (Index > 0) {
|
||||
if (ItemOffsetList[Index] <= ItemOffsetList[Index - 1]) {
|
||||
DEBUG((DEBUG_ERROR, "ItemOffsetList[%d](0x%lx) < ItemOffsetList[%d](0x%x)\n", Index, ItemOffsetList[Index], Index, ItemOffsetList[Index - 1]));
|
||||
DEBUG ((DEBUG_ERROR, "ItemOffsetList[%d](0x%lx) < ItemOffsetList[%d](0x%x)\n", Index, ItemOffsetList[Index], Index, ItemOffsetList[Index - 1]));
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
}
|
||||
@@ -310,37 +316,41 @@ ValidateFmpCapsule (
|
||||
|
||||
// Check EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER
|
||||
for (Index = FmpCapsuleHeader->EmbeddedDriverCount; Index < ItemNum; Index++) {
|
||||
ImageHeader = (EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER *)((UINT8 *)FmpCapsuleHeader + ItemOffsetList[Index]);
|
||||
ImageHeader = (EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER *)((UINT8 *)FmpCapsuleHeader + ItemOffsetList[Index]);
|
||||
if (Index == ItemNum - 1) {
|
||||
EndOfPayload = (UINT8 *)((UINTN)EndOfCapsule - (UINTN)FmpCapsuleHeader);
|
||||
} else {
|
||||
EndOfPayload = (UINT8 *)(UINTN)ItemOffsetList[Index+1];
|
||||
}
|
||||
|
||||
FmpImageSize = (UINTN)EndOfPayload - ItemOffsetList[Index];
|
||||
|
||||
if (FmpImageSize < OFFSET_OF(EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, UpdateHardwareInstance)) {
|
||||
DEBUG((DEBUG_ERROR, "FmpImageSize(0x%lx) < EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER\n", FmpImageSize));
|
||||
if (FmpImageSize < OFFSET_OF (EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, UpdateHardwareInstance)) {
|
||||
DEBUG ((DEBUG_ERROR, "FmpImageSize(0x%lx) < EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER\n", FmpImageSize));
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
FmpImageHeaderSize = sizeof(EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER);
|
||||
|
||||
FmpImageHeaderSize = sizeof (EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER);
|
||||
if ((ImageHeader->Version > EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION) ||
|
||||
(ImageHeader->Version < 1)) {
|
||||
DEBUG((DEBUG_ERROR, "ImageHeader->Version(0x%x) Unknown\n", ImageHeader->Version));
|
||||
(ImageHeader->Version < 1))
|
||||
{
|
||||
DEBUG ((DEBUG_ERROR, "ImageHeader->Version(0x%x) Unknown\n", ImageHeader->Version));
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
///
|
||||
/// Current Init ImageHeader version is 3. UpdateHardwareInstance field was added in version 2
|
||||
/// and ImageCapsuleSupport field was added in version 3
|
||||
///
|
||||
if (ImageHeader->Version == 1) {
|
||||
FmpImageHeaderSize = OFFSET_OF(EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, UpdateHardwareInstance);
|
||||
} else if (ImageHeader->Version == 2){
|
||||
FmpImageHeaderSize = OFFSET_OF(EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, ImageCapsuleSupport);
|
||||
FmpImageHeaderSize = OFFSET_OF (EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, UpdateHardwareInstance);
|
||||
} else if (ImageHeader->Version == 2) {
|
||||
FmpImageHeaderSize = OFFSET_OF (EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, ImageCapsuleSupport);
|
||||
}
|
||||
|
||||
// No overflow
|
||||
if (FmpImageSize != (UINT64)FmpImageHeaderSize + (UINT64)ImageHeader->UpdateImageSize + (UINT64)ImageHeader->UpdateVendorCodeSize) {
|
||||
DEBUG((DEBUG_ERROR, "FmpImageSize(0x%lx) mismatch, UpdateImageSize(0x%x) UpdateVendorCodeSize(0x%x)\n", FmpImageSize, ImageHeader->UpdateImageSize, ImageHeader->UpdateVendorCodeSize));
|
||||
DEBUG ((DEBUG_ERROR, "FmpImageSize(0x%lx) mismatch, UpdateImageSize(0x%x) UpdateVendorCodeSize(0x%x)\n", FmpImageSize, ImageHeader->UpdateImageSize, ImageHeader->UpdateVendorCodeSize));
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
}
|
||||
@@ -351,9 +361,10 @@ ValidateFmpCapsule (
|
||||
//
|
||||
EndOfPayload = (UINT8 *)(FmpCapsuleHeader + 1);
|
||||
if (EndOfPayload != EndOfCapsule) {
|
||||
DEBUG((DEBUG_ERROR, "EndOfPayload(0x%x) mismatch, EndOfCapsule(0x%x)\n", EndOfPayload, EndOfCapsule));
|
||||
DEBUG ((DEBUG_ERROR, "EndOfPayload(0x%x) mismatch, EndOfCapsule(0x%x)\n", EndOfPayload, EndOfCapsule));
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
@@ -361,7 +372,7 @@ ValidateFmpCapsule (
|
||||
// Check in system FMP capsule
|
||||
//
|
||||
if (IsSystemFmp != NULL) {
|
||||
*IsSystemFmp = IsSystemFmpCapsuleImage(CapsuleHeader);
|
||||
*IsSystemFmp = IsSystemFmpCapsuleImage (CapsuleHeader);
|
||||
}
|
||||
|
||||
if (EmbeddedDriverCount != NULL) {
|
||||
@@ -389,8 +400,8 @@ InitializeRecoveryModule (
|
||||
EFI_STATUS Status;
|
||||
UINTN BootMode;
|
||||
|
||||
BootMode = GetBootModeHob();
|
||||
ASSERT(BootMode == BOOT_IN_RECOVERY_MODE);
|
||||
BootMode = GetBootModeHob ();
|
||||
ASSERT (BootMode == BOOT_IN_RECOVERY_MODE);
|
||||
|
||||
Status = (**PeiServices).InstallPpi (PeiServices, &mRecoveryPpiList);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
@@ -411,8 +422,8 @@ InitializeRecoveryModule (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
CreateHobForRecoveryCapsule (
|
||||
IN VOID *FvImage,
|
||||
IN UINTN FvImageSize
|
||||
IN VOID *FvImage,
|
||||
IN UINTN FvImageSize
|
||||
)
|
||||
{
|
||||
EFI_FIRMWARE_VOLUME_HEADER *FvHeader;
|
||||
@@ -423,14 +434,15 @@ CreateHobForRecoveryCapsule (
|
||||
//
|
||||
// FvImage should be at its required alignment.
|
||||
//
|
||||
FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *) FvImage;
|
||||
FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *)FvImage;
|
||||
//
|
||||
// Validate FV Header, if not as expected, return
|
||||
//
|
||||
if (ReadUnaligned32 (&FvHeader->Signature) != EFI_FVH_SIGNATURE) {
|
||||
DEBUG((DEBUG_ERROR, "CreateHobForRecoveryCapsule (Fv Signature Error)\n"));
|
||||
DEBUG ((DEBUG_ERROR, "CreateHobForRecoveryCapsule (Fv Signature Error)\n"));
|
||||
return EFI_VOLUME_CORRUPTED;
|
||||
}
|
||||
|
||||
//
|
||||
// If EFI_FVB2_WEAK_ALIGNMENT is set in the volume header then the first byte of the volume
|
||||
// can be aligned on any power-of-two boundary. A weakly aligned volume can not be moved from
|
||||
@@ -447,26 +459,28 @@ CreateHobForRecoveryCapsule (
|
||||
if (FvAlignment < 8) {
|
||||
FvAlignment = 8;
|
||||
}
|
||||
|
||||
//
|
||||
// Allocate the aligned buffer for the FvImage.
|
||||
//
|
||||
if ((UINTN) FvHeader % FvAlignment != 0) {
|
||||
DEBUG((DEBUG_INFO, "CreateHobForRecoveryCapsule (FvHeader 0x%lx is not aligned)\n", (UINT64)(UINTN)FvHeader));
|
||||
if ((UINTN)FvHeader % FvAlignment != 0) {
|
||||
DEBUG ((DEBUG_INFO, "CreateHobForRecoveryCapsule (FvHeader 0x%lx is not aligned)\n", (UINT64)(UINTN)FvHeader));
|
||||
FvLength = ReadUnaligned64 (&FvHeader->FvLength);
|
||||
NewFvBuffer = AllocateAlignedPages (EFI_SIZE_TO_PAGES ((UINTN) FvLength), FvAlignment);
|
||||
NewFvBuffer = AllocateAlignedPages (EFI_SIZE_TO_PAGES ((UINTN)FvLength), FvAlignment);
|
||||
if (NewFvBuffer == NULL) {
|
||||
DEBUG((DEBUG_ERROR, "CreateHobForRecoveryCapsule (Not enough resource to allocate 0x%lx bytes)\n", FvLength));
|
||||
DEBUG ((DEBUG_ERROR, "CreateHobForRecoveryCapsule (Not enough resource to allocate 0x%lx bytes)\n", FvLength));
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
CopyMem (NewFvBuffer, FvHeader, (UINTN) FvLength);
|
||||
FvHeader = (EFI_FIRMWARE_VOLUME_HEADER*) NewFvBuffer;
|
||||
|
||||
CopyMem (NewFvBuffer, FvHeader, (UINTN)FvLength);
|
||||
FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *)NewFvBuffer;
|
||||
}
|
||||
}
|
||||
|
||||
BuildFvHob((UINT64)(UINTN)FvHeader, FvHeader->FvLength);
|
||||
DEBUG((DEBUG_INFO, "BuildFvHob (FV in recovery) - 0x%lx - 0x%lx\n", (UINT64)(UINTN)FvHeader, FvHeader->FvLength));
|
||||
BuildFvHob ((UINT64)(UINTN)FvHeader, FvHeader->FvLength);
|
||||
DEBUG ((DEBUG_INFO, "BuildFvHob (FV in recovery) - 0x%lx - 0x%lx\n", (UINT64)(UINTN)FvHeader, FvHeader->FvLength));
|
||||
|
||||
PeiServicesInstallFvInfoPpi(
|
||||
PeiServicesInstallFvInfoPpi (
|
||||
&FvHeader->FileSystemGuid,
|
||||
(VOID *)FvHeader,
|
||||
(UINT32)FvHeader->FvLength,
|
||||
@@ -489,47 +503,48 @@ CreateHobForRecoveryCapsule (
|
||||
**/
|
||||
EFI_STATUS
|
||||
RecoverImage (
|
||||
IN VOID *SystemFirmwareImage,
|
||||
IN UINTN SystemFirmwareImageSize,
|
||||
IN VOID *ConfigImage,
|
||||
IN UINTN ConfigImageSize
|
||||
IN VOID *SystemFirmwareImage,
|
||||
IN UINTN SystemFirmwareImageSize,
|
||||
IN VOID *ConfigImage,
|
||||
IN UINTN ConfigImageSize
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
RECOVERY_CONFIG_DATA *ConfigData;
|
||||
RECOVERY_CONFIG_DATA *RecoveryConfigData;
|
||||
CONFIG_HEADER ConfigHeader;
|
||||
UINTN Index;
|
||||
EFI_STATUS Status;
|
||||
RECOVERY_CONFIG_DATA *ConfigData;
|
||||
RECOVERY_CONFIG_DATA *RecoveryConfigData;
|
||||
CONFIG_HEADER ConfigHeader;
|
||||
UINTN Index;
|
||||
|
||||
if (ConfigImage == NULL) {
|
||||
DEBUG((DEBUG_INFO, "RecoverImage (NoConfig)\n"));
|
||||
Status = CreateHobForRecoveryCapsule(
|
||||
DEBUG ((DEBUG_INFO, "RecoverImage (NoConfig)\n"));
|
||||
Status = CreateHobForRecoveryCapsule (
|
||||
SystemFirmwareImage,
|
||||
SystemFirmwareImageSize
|
||||
);
|
||||
return Status;
|
||||
}
|
||||
|
||||
ConfigData = NULL;
|
||||
ZeroMem (&ConfigHeader, sizeof(ConfigHeader));
|
||||
Status = ParseRecoveryDataFile (
|
||||
ConfigImage,
|
||||
ConfigImageSize,
|
||||
&ConfigHeader,
|
||||
&ConfigData
|
||||
);
|
||||
DEBUG((DEBUG_INFO, "ParseRecoveryDataFile - %r\n", Status));
|
||||
if (EFI_ERROR(Status)) {
|
||||
ConfigData = NULL;
|
||||
ZeroMem (&ConfigHeader, sizeof (ConfigHeader));
|
||||
Status = ParseRecoveryDataFile (
|
||||
ConfigImage,
|
||||
ConfigImageSize,
|
||||
&ConfigHeader,
|
||||
&ConfigData
|
||||
);
|
||||
DEBUG ((DEBUG_INFO, "ParseRecoveryDataFile - %r\n", Status));
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
DEBUG((DEBUG_INFO, "ConfigHeader.NumOfRecovery - 0x%x\n", ConfigHeader.NumOfRecovery));
|
||||
DEBUG((DEBUG_INFO, "PcdEdkiiSystemFirmwareFileGuid - %g\n", PcdGetPtr(PcdEdkiiSystemFirmwareFileGuid)));
|
||||
|
||||
Index = 0;
|
||||
DEBUG ((DEBUG_INFO, "ConfigHeader.NumOfRecovery - 0x%x\n", ConfigHeader.NumOfRecovery));
|
||||
DEBUG ((DEBUG_INFO, "PcdEdkiiSystemFirmwareFileGuid - %g\n", PcdGetPtr (PcdEdkiiSystemFirmwareFileGuid)));
|
||||
|
||||
Index = 0;
|
||||
RecoveryConfigData = ConfigData;
|
||||
while (Index < ConfigHeader.NumOfRecovery) {
|
||||
if (CompareGuid(&RecoveryConfigData->FileGuid, PcdGetPtr(PcdEdkiiSystemFirmwareFileGuid))) {
|
||||
DEBUG((DEBUG_INFO, "FileGuid - %g (processing)\n", &RecoveryConfigData->FileGuid));
|
||||
if (CompareGuid (&RecoveryConfigData->FileGuid, PcdGetPtr (PcdEdkiiSystemFirmwareFileGuid))) {
|
||||
DEBUG ((DEBUG_INFO, "FileGuid - %g (processing)\n", &RecoveryConfigData->FileGuid));
|
||||
Status = CreateHobForRecoveryCapsule (
|
||||
(UINT8 *)SystemFirmwareImage + RecoveryConfigData->ImageOffset,
|
||||
RecoveryConfigData->Length
|
||||
@@ -542,7 +557,7 @@ RecoverImage (
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
DEBUG((DEBUG_INFO, "FileGuid - %g (ignored)\n", &RecoveryConfigData->FileGuid));
|
||||
DEBUG ((DEBUG_INFO, "FileGuid - %g (ignored)\n", &RecoveryConfigData->FileGuid));
|
||||
}
|
||||
|
||||
Index++;
|
||||
@@ -569,31 +584,31 @@ ProcessRecoveryImage (
|
||||
IN UINTN Length
|
||||
)
|
||||
{
|
||||
UINT32 LastAttemptVersion;
|
||||
UINT32 LastAttemptStatus;
|
||||
EFI_STATUS Status;
|
||||
VOID *SystemFirmwareImage;
|
||||
UINTN SystemFirmwareImageSize;
|
||||
VOID *ConfigImage;
|
||||
UINTN ConfigImageSize;
|
||||
VOID *AuthenticatedImage;
|
||||
UINTN AuthenticatedImageSize;
|
||||
UINT32 LastAttemptVersion;
|
||||
UINT32 LastAttemptStatus;
|
||||
EFI_STATUS Status;
|
||||
VOID *SystemFirmwareImage;
|
||||
UINTN SystemFirmwareImageSize;
|
||||
VOID *ConfigImage;
|
||||
UINTN ConfigImageSize;
|
||||
VOID *AuthenticatedImage;
|
||||
UINTN AuthenticatedImageSize;
|
||||
|
||||
AuthenticatedImage = NULL;
|
||||
AuthenticatedImageSize = 0;
|
||||
|
||||
Status = CapsuleAuthenticateSystemFirmware(Image, Length, TRUE, &LastAttemptVersion, &LastAttemptStatus, &AuthenticatedImage, &AuthenticatedImageSize);
|
||||
if (EFI_ERROR(Status)) {
|
||||
DEBUG((DEBUG_INFO, "CapsuleAuthenticateSystemFirmware - %r\n", Status));
|
||||
Status = CapsuleAuthenticateSystemFirmware (Image, Length, TRUE, &LastAttemptVersion, &LastAttemptStatus, &AuthenticatedImage, &AuthenticatedImageSize);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_INFO, "CapsuleAuthenticateSystemFirmware - %r\n", Status));
|
||||
return Status;
|
||||
}
|
||||
|
||||
ExtractSystemFirmwareImage(AuthenticatedImage, AuthenticatedImageSize, &SystemFirmwareImage, &SystemFirmwareImageSize);
|
||||
ExtractConfigImage(AuthenticatedImage, AuthenticatedImageSize, &ConfigImage, &ConfigImageSize);
|
||||
ExtractSystemFirmwareImage (AuthenticatedImage, AuthenticatedImageSize, &SystemFirmwareImage, &SystemFirmwareImageSize);
|
||||
ExtractConfigImage (AuthenticatedImage, AuthenticatedImageSize, &ConfigImage, &ConfigImageSize);
|
||||
|
||||
Status = RecoverImage(SystemFirmwareImage, SystemFirmwareImageSize, ConfigImage, ConfigImageSize);
|
||||
if (EFI_ERROR(Status)) {
|
||||
DEBUG((DEBUG_INFO, "RecoverImage - %r\n", Status));
|
||||
Status = RecoverImage (SystemFirmwareImage, SystemFirmwareImageSize, ConfigImage, ConfigImageSize);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_INFO, "RecoverImage - %r\n", Status));
|
||||
return Status;
|
||||
}
|
||||
|
||||
@@ -636,7 +651,7 @@ ProcessFmpCapsuleImage (
|
||||
}
|
||||
|
||||
FmpCapsuleHeader = (EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER *)((UINT8 *)CapsuleHeader + CapsuleHeader->HeaderSize);
|
||||
ItemOffsetList = (UINT64 *)(FmpCapsuleHeader + 1);
|
||||
ItemOffsetList = (UINT64 *)(FmpCapsuleHeader + 1);
|
||||
|
||||
for (ItemIndex = 0; ItemIndex < FmpCapsuleHeader->PayloadItemCount; ItemIndex++) {
|
||||
ImageHeader = (EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER *)((UINT8 *)FmpCapsuleHeader + ItemOffsetList[ItemIndex]);
|
||||
@@ -649,14 +664,14 @@ ProcessFmpCapsuleImage (
|
||||
// If version is 2 Header should exclude ImageCapsuleSupport field.
|
||||
//
|
||||
if (ImageHeader->Version == 1) {
|
||||
Image = (UINT8 *)ImageHeader + OFFSET_OF(EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, UpdateHardwareInstance);
|
||||
Image = (UINT8 *)ImageHeader + OFFSET_OF (EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, UpdateHardwareInstance);
|
||||
} else {
|
||||
Image = (UINT8 *)ImageHeader + OFFSET_OF(EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, ImageCapsuleSupport);
|
||||
Image = (UINT8 *)ImageHeader + OFFSET_OF (EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, ImageCapsuleSupport);
|
||||
}
|
||||
}
|
||||
|
||||
Status = ProcessRecoveryImage (Image, ImageHeader->UpdateImageSize);
|
||||
if (EFI_ERROR(Status)) {
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
@@ -679,42 +694,42 @@ ProcessFmpCapsuleImage (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ProcessRecoveryCapsule (
|
||||
IN VOID *CapsuleBuffer,
|
||||
IN UINTN CapsuleSize
|
||||
IN VOID *CapsuleBuffer,
|
||||
IN UINTN CapsuleSize
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
BOOLEAN IsSystemFmp;
|
||||
EFI_CAPSULE_HEADER *CapsuleHeader;
|
||||
EFI_STATUS Status;
|
||||
BOOLEAN IsSystemFmp;
|
||||
EFI_CAPSULE_HEADER *CapsuleHeader;
|
||||
|
||||
CapsuleHeader = CapsuleBuffer;
|
||||
if (!IsValidCapsuleHeader (CapsuleHeader, CapsuleSize)) {
|
||||
DEBUG((DEBUG_ERROR, "CapsuleImageSize incorrect\n"));
|
||||
DEBUG ((DEBUG_ERROR, "CapsuleImageSize incorrect\n"));
|
||||
return EFI_SECURITY_VIOLATION;
|
||||
}
|
||||
|
||||
//
|
||||
// Check FMP capsule layout
|
||||
//
|
||||
if (IsFmpCapsuleGuid(&CapsuleHeader->CapsuleGuid)) {
|
||||
DEBUG((DEBUG_INFO, "CreateHobForRecoveryCapsule\n"));
|
||||
if (IsFmpCapsuleGuid (&CapsuleHeader->CapsuleGuid)) {
|
||||
DEBUG ((DEBUG_INFO, "CreateHobForRecoveryCapsule\n"));
|
||||
|
||||
DEBUG((DEBUG_INFO, "ProcessCapsuleImage for FmpCapsule ...\n"));
|
||||
DEBUG((DEBUG_INFO, "ValidateFmpCapsule ...\n"));
|
||||
Status = ValidateFmpCapsule(CapsuleHeader, &IsSystemFmp, NULL);
|
||||
DEBUG((DEBUG_INFO, "ValidateFmpCapsule - %r\n", Status));
|
||||
if (EFI_ERROR(Status)) {
|
||||
DEBUG ((DEBUG_INFO, "ProcessCapsuleImage for FmpCapsule ...\n"));
|
||||
DEBUG ((DEBUG_INFO, "ValidateFmpCapsule ...\n"));
|
||||
Status = ValidateFmpCapsule (CapsuleHeader, &IsSystemFmp, NULL);
|
||||
DEBUG ((DEBUG_INFO, "ValidateFmpCapsule - %r\n", Status));
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// Process EFI FMP Capsule
|
||||
//
|
||||
DEBUG((DEBUG_INFO, "ProcessFmpCapsuleImage ...\n"));
|
||||
Status = ProcessFmpCapsuleImage(CapsuleHeader, IsSystemFmp);
|
||||
DEBUG((DEBUG_INFO, "ProcessFmpCapsuleImage - %r\n", Status));
|
||||
DEBUG ((DEBUG_INFO, "ProcessFmpCapsuleImage ...\n"));
|
||||
Status = ProcessFmpCapsuleImage (CapsuleHeader, IsSystemFmp);
|
||||
DEBUG ((DEBUG_INFO, "ProcessFmpCapsuleImage - %r\n", Status));
|
||||
|
||||
DEBUG((DEBUG_INFO, "CreateHobForRecoveryCapsule Done\n"));
|
||||
DEBUG ((DEBUG_INFO, "CreateHobForRecoveryCapsule Done\n"));
|
||||
return Status;
|
||||
}
|
||||
|
||||
@@ -736,8 +751,8 @@ ProcessRecoveryCapsule (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
LoadRecoveryCapsule (
|
||||
IN EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PEI_RECOVERY_MODULE_PPI *This
|
||||
IN EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PEI_RECOVERY_MODULE_PPI *This
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
@@ -749,7 +764,7 @@ LoadRecoveryCapsule (
|
||||
EFI_GUID CapsuleType;
|
||||
VOID *CapsuleBuffer;
|
||||
|
||||
DEBUG((DEBUG_INFO | DEBUG_LOAD, "Recovery Entry\n"));
|
||||
DEBUG ((DEBUG_INFO | DEBUG_LOAD, "Recovery Entry\n"));
|
||||
|
||||
for (Instance = 0; ; Instance++) {
|
||||
Status = PeiServicesLocatePpi (
|
||||
@@ -762,35 +777,38 @@ LoadRecoveryCapsule (
|
||||
if (EFI_ERROR (Status)) {
|
||||
break;
|
||||
}
|
||||
|
||||
NumberRecoveryCapsules = 0;
|
||||
Status = DeviceRecoveryPpi->GetNumberRecoveryCapsules (
|
||||
(EFI_PEI_SERVICES **)PeiServices,
|
||||
DeviceRecoveryPpi,
|
||||
&NumberRecoveryCapsules
|
||||
);
|
||||
Status = DeviceRecoveryPpi->GetNumberRecoveryCapsules (
|
||||
(EFI_PEI_SERVICES **)PeiServices,
|
||||
DeviceRecoveryPpi,
|
||||
&NumberRecoveryCapsules
|
||||
);
|
||||
DEBUG ((DEBUG_ERROR, "LoadRecoveryCapsule - GetNumberRecoveryCapsules (%d) - %r\n", NumberRecoveryCapsules, Status));
|
||||
if (EFI_ERROR (Status)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (CapsuleInstance = 1; CapsuleInstance <= NumberRecoveryCapsules; CapsuleInstance++) {
|
||||
CapsuleSize = 0;
|
||||
Status = DeviceRecoveryPpi->GetRecoveryCapsuleInfo (
|
||||
(EFI_PEI_SERVICES **)PeiServices,
|
||||
DeviceRecoveryPpi,
|
||||
CapsuleInstance,
|
||||
&CapsuleSize,
|
||||
&CapsuleType
|
||||
);
|
||||
Status = DeviceRecoveryPpi->GetRecoveryCapsuleInfo (
|
||||
(EFI_PEI_SERVICES **)PeiServices,
|
||||
DeviceRecoveryPpi,
|
||||
CapsuleInstance,
|
||||
&CapsuleSize,
|
||||
&CapsuleType
|
||||
);
|
||||
DEBUG ((DEBUG_ERROR, "LoadRecoveryCapsule - GetRecoveryCapsuleInfo (%d - %x) - %r\n", CapsuleInstance, CapsuleSize, Status));
|
||||
if (EFI_ERROR (Status)) {
|
||||
break;
|
||||
}
|
||||
|
||||
CapsuleBuffer = AllocatePages (EFI_SIZE_TO_PAGES(CapsuleSize));
|
||||
CapsuleBuffer = AllocatePages (EFI_SIZE_TO_PAGES (CapsuleSize));
|
||||
if (CapsuleBuffer == NULL) {
|
||||
DEBUG ((DEBUG_ERROR, "LoadRecoveryCapsule - AllocatePool fail\n"));
|
||||
continue;
|
||||
}
|
||||
|
||||
Status = DeviceRecoveryPpi->LoadRecoveryCapsule (
|
||||
(EFI_PEI_SERVICES **)PeiServices,
|
||||
DeviceRecoveryPpi,
|
||||
@@ -799,9 +817,10 @@ LoadRecoveryCapsule (
|
||||
);
|
||||
DEBUG ((DEBUG_ERROR, "LoadRecoveryCapsule - LoadRecoveryCapsule (%d) - %r\n", CapsuleInstance, Status));
|
||||
if (EFI_ERROR (Status)) {
|
||||
FreePages (CapsuleBuffer, EFI_SIZE_TO_PAGES(CapsuleSize));
|
||||
FreePages (CapsuleBuffer, EFI_SIZE_TO_PAGES (CapsuleSize));
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
// good, load capsule buffer
|
||||
//
|
||||
|
@@ -24,15 +24,14 @@
|
||||
//
|
||||
|
||||
typedef struct {
|
||||
UINTN NumOfRecovery;
|
||||
UINTN NumOfRecovery;
|
||||
} CONFIG_HEADER;
|
||||
|
||||
typedef struct {
|
||||
UINTN Index;
|
||||
EFI_GUID FileGuid;
|
||||
UINTN Length;
|
||||
UINTN ImageOffset;
|
||||
UINTN Index;
|
||||
EFI_GUID FileGuid;
|
||||
UINTN Length;
|
||||
UINTN ImageOffset;
|
||||
} RECOVERY_CONFIG_DATA;
|
||||
|
||||
#endif
|
||||
|
||||
|
Reference in New Issue
Block a user