MdeModulePkg: Apply uncrustify changes
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the MdeModulePkg 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: Liming Gao <gaoliming@byosoft.com.cn>
This commit is contained in:
committed by
mergify[bot]
parent
7c7184e201
commit
1436aea4d5
File diff suppressed because it is too large
Load Diff
@@ -38,26 +38,26 @@
|
||||
//
|
||||
// This data structure is the part of FILE_INFO_ENTRY
|
||||
//
|
||||
#define FILE_INFO_SIGNATURE SIGNATURE_32 ('F', 'L', 'I', 'F')
|
||||
#define FILE_INFO_SIGNATURE SIGNATURE_32 ('F', 'L', 'I', 'F')
|
||||
|
||||
//
|
||||
// LoadOptionNumber of the boot option where the capsules is relocated.
|
||||
//
|
||||
#define COD_RELOCATION_LOAD_OPTION_VAR_NAME L"CodRelocationLoadOption"
|
||||
#define COD_RELOCATION_LOAD_OPTION_VAR_NAME L"CodRelocationLoadOption"
|
||||
|
||||
//
|
||||
// (20 * (6+5+2))+1) unicode characters from EFI FAT spec (doubled for bytes)
|
||||
//
|
||||
#define MAX_FILE_NAME_SIZE 522
|
||||
#define MAX_FILE_NAME_LEN (MAX_FILE_NAME_SIZE / sizeof(CHAR16))
|
||||
#define MAX_FILE_INFO_LEN (OFFSET_OF(EFI_FILE_INFO, FileName) + MAX_FILE_NAME_LEN)
|
||||
#define MAX_FILE_NAME_SIZE 522
|
||||
#define MAX_FILE_NAME_LEN (MAX_FILE_NAME_SIZE / sizeof(CHAR16))
|
||||
#define MAX_FILE_INFO_LEN (OFFSET_OF(EFI_FILE_INFO, FileName) + MAX_FILE_NAME_LEN)
|
||||
|
||||
typedef struct {
|
||||
UINTN Signature;
|
||||
LIST_ENTRY Link; /// Linked list members.
|
||||
EFI_FILE_INFO *FileInfo; /// Pointer to the FileInfo struct for this file or NULL.
|
||||
CHAR16 *FileNameFirstPart; /// Text to the left of right-most period in the file name. String is capitialized
|
||||
CHAR16 *FileNameSecondPart; /// Text to the right of right-most period in the file name.String is capitialized. Maybe NULL
|
||||
UINTN Signature;
|
||||
LIST_ENTRY Link; /// Linked list members.
|
||||
EFI_FILE_INFO *FileInfo; /// Pointer to the FileInfo struct for this file or NULL.
|
||||
CHAR16 *FileNameFirstPart; /// Text to the left of right-most period in the file name. String is capitialized
|
||||
CHAR16 *FileNameSecondPart; /// Text to the right of right-most period in the file name.String is capitialized. Maybe NULL
|
||||
} FILE_INFO_ENTRY;
|
||||
|
||||
typedef struct {
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -102,7 +102,7 @@ IsValidCapsuleHeader (
|
||||
**/
|
||||
BOOLEAN
|
||||
IsCapsuleNameCapsule (
|
||||
IN EFI_CAPSULE_HEADER *CapsuleHeader
|
||||
IN EFI_CAPSULE_HEADER *CapsuleHeader
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -118,17 +118,17 @@ IsCapsuleNameCapsule (
|
||||
**/
|
||||
EFI_PHYSICAL_ADDRESS *
|
||||
ValidateCapsuleNameCapsuleIntegrity (
|
||||
IN EFI_CAPSULE_HEADER *CapsuleHeader,
|
||||
OUT UINTN *CapsuleNameNum
|
||||
IN EFI_CAPSULE_HEADER *CapsuleHeader,
|
||||
OUT UINTN *CapsuleNameNum
|
||||
);
|
||||
|
||||
extern BOOLEAN mDxeCapsuleLibEndOfDxe;
|
||||
BOOLEAN mNeedReset = FALSE;
|
||||
extern BOOLEAN mDxeCapsuleLibEndOfDxe;
|
||||
BOOLEAN mNeedReset = FALSE;
|
||||
|
||||
VOID **mCapsulePtr;
|
||||
CHAR16 **mCapsuleNamePtr;
|
||||
EFI_STATUS *mCapsuleStatusArray;
|
||||
UINT32 mCapsuleTotalNumber;
|
||||
VOID **mCapsulePtr;
|
||||
CHAR16 **mCapsuleNamePtr;
|
||||
EFI_STATUS *mCapsuleStatusArray;
|
||||
UINT32 mCapsuleTotalNumber;
|
||||
|
||||
/**
|
||||
The firmware implements to process the capsule image.
|
||||
@@ -172,7 +172,7 @@ UpdateImageProgress (
|
||||
UINTN Seconds;
|
||||
EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *Color;
|
||||
|
||||
DEBUG((DEBUG_INFO, "Update Progress - %d%%\n", Completion));
|
||||
DEBUG ((DEBUG_INFO, "Update Progress - %d%%\n", Completion));
|
||||
|
||||
if (Completion > 100) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
@@ -216,15 +216,15 @@ InitCapsulePtr (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
EFI_PEI_HOB_POINTERS HobPointer;
|
||||
UINTN Index;
|
||||
UINTN Index2;
|
||||
UINTN Index3;
|
||||
UINTN CapsuleNameNumber;
|
||||
UINTN CapsuleNameTotalNumber;
|
||||
UINTN CapsuleNameCapsuleTotalNumber;
|
||||
VOID **CapsuleNameCapsulePtr;
|
||||
EFI_PHYSICAL_ADDRESS *CapsuleNameAddress;
|
||||
EFI_PEI_HOB_POINTERS HobPointer;
|
||||
UINTN Index;
|
||||
UINTN Index2;
|
||||
UINTN Index3;
|
||||
UINTN CapsuleNameNumber;
|
||||
UINTN CapsuleNameTotalNumber;
|
||||
UINTN CapsuleNameCapsuleTotalNumber;
|
||||
VOID **CapsuleNameCapsulePtr;
|
||||
EFI_PHYSICAL_ADDRESS *CapsuleNameAddress;
|
||||
|
||||
CapsuleNameNumber = 0;
|
||||
CapsuleNameTotalNumber = 0;
|
||||
@@ -236,44 +236,47 @@ InitCapsulePtr (
|
||||
//
|
||||
HobPointer.Raw = GetHobList ();
|
||||
while ((HobPointer.Raw = GetNextHob (EFI_HOB_TYPE_UEFI_CAPSULE, HobPointer.Raw)) != NULL) {
|
||||
if (!IsValidCapsuleHeader((VOID *)(UINTN)HobPointer.Capsule->BaseAddress, HobPointer.Capsule->Length)) {
|
||||
if (!IsValidCapsuleHeader ((VOID *)(UINTN)HobPointer.Capsule->BaseAddress, HobPointer.Capsule->Length)) {
|
||||
HobPointer.Header->HobType = EFI_HOB_TYPE_UNUSED; // Mark this hob as invalid
|
||||
} else {
|
||||
if (IsCapsuleNameCapsule((VOID *)(UINTN)HobPointer.Capsule->BaseAddress)) {
|
||||
if (IsCapsuleNameCapsule ((VOID *)(UINTN)HobPointer.Capsule->BaseAddress)) {
|
||||
CapsuleNameCapsuleTotalNumber++;
|
||||
} else {
|
||||
mCapsuleTotalNumber++;
|
||||
}
|
||||
}
|
||||
|
||||
HobPointer.Raw = GET_NEXT_HOB (HobPointer);
|
||||
}
|
||||
|
||||
DEBUG ((DEBUG_INFO, "mCapsuleTotalNumber - 0x%x\n", mCapsuleTotalNumber));
|
||||
|
||||
if (mCapsuleTotalNumber == 0) {
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// Init temp Capsule Data table.
|
||||
//
|
||||
mCapsulePtr = (VOID **) AllocateZeroPool (sizeof (VOID *) * mCapsuleTotalNumber);
|
||||
mCapsulePtr = (VOID **)AllocateZeroPool (sizeof (VOID *) * mCapsuleTotalNumber);
|
||||
if (mCapsulePtr == NULL) {
|
||||
DEBUG ((DEBUG_ERROR, "Allocate mCapsulePtr fail!\n"));
|
||||
mCapsuleTotalNumber = 0;
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
mCapsuleStatusArray = (EFI_STATUS *) AllocateZeroPool (sizeof (EFI_STATUS) * mCapsuleTotalNumber);
|
||||
|
||||
mCapsuleStatusArray = (EFI_STATUS *)AllocateZeroPool (sizeof (EFI_STATUS) * mCapsuleTotalNumber);
|
||||
if (mCapsuleStatusArray == NULL) {
|
||||
DEBUG ((DEBUG_ERROR, "Allocate mCapsuleStatusArray fail!\n"));
|
||||
FreePool (mCapsulePtr);
|
||||
mCapsulePtr = NULL;
|
||||
mCapsulePtr = NULL;
|
||||
mCapsuleTotalNumber = 0;
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
|
||||
SetMemN (mCapsuleStatusArray, sizeof (EFI_STATUS) * mCapsuleTotalNumber, EFI_NOT_READY);
|
||||
|
||||
CapsuleNameCapsulePtr = (VOID **) AllocateZeroPool (sizeof (VOID *) * CapsuleNameCapsuleTotalNumber);
|
||||
CapsuleNameCapsulePtr = (VOID **)AllocateZeroPool (sizeof (VOID *) * CapsuleNameCapsuleTotalNumber);
|
||||
if (CapsuleNameCapsulePtr == NULL) {
|
||||
DEBUG ((DEBUG_ERROR, "Allocate CapsuleNameCapsulePtr fail!\n"));
|
||||
FreePool (mCapsulePtr);
|
||||
@@ -281,28 +284,29 @@ InitCapsulePtr (
|
||||
mCapsulePtr = NULL;
|
||||
mCapsuleStatusArray = NULL;
|
||||
mCapsuleTotalNumber = 0;
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// Find all capsule images from hob
|
||||
//
|
||||
HobPointer.Raw = GetHobList ();
|
||||
Index = 0;
|
||||
Index2 = 0;
|
||||
Index = 0;
|
||||
Index2 = 0;
|
||||
while ((HobPointer.Raw = GetNextHob (EFI_HOB_TYPE_UEFI_CAPSULE, HobPointer.Raw)) != NULL) {
|
||||
if (IsCapsuleNameCapsule ((VOID *) (UINTN) HobPointer.Capsule->BaseAddress)) {
|
||||
CapsuleNameCapsulePtr [Index2++] = (VOID *) (UINTN) HobPointer.Capsule->BaseAddress;
|
||||
if (IsCapsuleNameCapsule ((VOID *)(UINTN)HobPointer.Capsule->BaseAddress)) {
|
||||
CapsuleNameCapsulePtr[Index2++] = (VOID *)(UINTN)HobPointer.Capsule->BaseAddress;
|
||||
} else {
|
||||
mCapsulePtr [Index++] = (VOID *) (UINTN) HobPointer.Capsule->BaseAddress;
|
||||
mCapsulePtr[Index++] = (VOID *)(UINTN)HobPointer.Capsule->BaseAddress;
|
||||
}
|
||||
|
||||
HobPointer.Raw = GET_NEXT_HOB (HobPointer);
|
||||
}
|
||||
|
||||
//
|
||||
// Find Capsule On Disk Names
|
||||
//
|
||||
for (Index = 0; Index < CapsuleNameCapsuleTotalNumber; Index ++) {
|
||||
for (Index = 0; Index < CapsuleNameCapsuleTotalNumber; Index++) {
|
||||
CapsuleNameAddress = ValidateCapsuleNameCapsuleIntegrity (CapsuleNameCapsulePtr[Index], &CapsuleNameNumber);
|
||||
if (CapsuleNameAddress != NULL ) {
|
||||
CapsuleNameTotalNumber += CapsuleNameNumber;
|
||||
@@ -310,7 +314,7 @@ InitCapsulePtr (
|
||||
}
|
||||
|
||||
if (CapsuleNameTotalNumber == mCapsuleTotalNumber) {
|
||||
mCapsuleNamePtr = (CHAR16 **) AllocateZeroPool (sizeof (CHAR16 *) * mCapsuleTotalNumber);
|
||||
mCapsuleNamePtr = (CHAR16 **)AllocateZeroPool (sizeof (CHAR16 *) * mCapsuleTotalNumber);
|
||||
if (mCapsuleNamePtr == NULL) {
|
||||
DEBUG ((DEBUG_ERROR, "Allocate mCapsuleNamePtr fail!\n"));
|
||||
FreePool (mCapsulePtr);
|
||||
@@ -319,14 +323,14 @@ InitCapsulePtr (
|
||||
mCapsulePtr = NULL;
|
||||
mCapsuleStatusArray = NULL;
|
||||
mCapsuleTotalNumber = 0;
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
|
||||
for (Index = 0, Index3 = 0; Index < CapsuleNameCapsuleTotalNumber; Index ++) {
|
||||
for (Index = 0, Index3 = 0; Index < CapsuleNameCapsuleTotalNumber; Index++) {
|
||||
CapsuleNameAddress = ValidateCapsuleNameCapsuleIntegrity (CapsuleNameCapsulePtr[Index], &CapsuleNameNumber);
|
||||
if (CapsuleNameAddress != NULL ) {
|
||||
for (Index2 = 0; Index2 < CapsuleNameNumber; Index2 ++) {
|
||||
mCapsuleNamePtr[Index3 ++] = (CHAR16 *)(UINTN) CapsuleNameAddress[Index2];
|
||||
for (Index2 = 0; Index2 < CapsuleNameNumber; Index2++) {
|
||||
mCapsuleNamePtr[Index3++] = (CHAR16 *)(UINTN)CapsuleNameAddress[Index2];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -367,36 +371,37 @@ PopulateCapsuleInConfigurationTable (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
VOID **CapsulePtrCache;
|
||||
EFI_GUID *CapsuleGuidCache;
|
||||
EFI_CAPSULE_HEADER *CapsuleHeader;
|
||||
EFI_CAPSULE_TABLE *CapsuleTable;
|
||||
UINT32 CacheIndex;
|
||||
UINT32 CacheNumber;
|
||||
UINT32 CapsuleNumber;
|
||||
UINTN Index;
|
||||
UINTN Size;
|
||||
EFI_STATUS Status;
|
||||
VOID **CapsulePtrCache;
|
||||
EFI_GUID *CapsuleGuidCache;
|
||||
EFI_CAPSULE_HEADER *CapsuleHeader;
|
||||
EFI_CAPSULE_TABLE *CapsuleTable;
|
||||
UINT32 CacheIndex;
|
||||
UINT32 CacheNumber;
|
||||
UINT32 CapsuleNumber;
|
||||
UINTN Index;
|
||||
UINTN Size;
|
||||
EFI_STATUS Status;
|
||||
|
||||
if (mCapsuleTotalNumber == 0) {
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
|
||||
CapsulePtrCache = NULL;
|
||||
CapsuleGuidCache = NULL;
|
||||
CacheIndex = 0;
|
||||
CacheNumber = 0;
|
||||
CapsulePtrCache = NULL;
|
||||
CapsuleGuidCache = NULL;
|
||||
CacheIndex = 0;
|
||||
CacheNumber = 0;
|
||||
|
||||
CapsulePtrCache = (VOID **) AllocateZeroPool (sizeof (VOID *) * mCapsuleTotalNumber);
|
||||
CapsulePtrCache = (VOID **)AllocateZeroPool (sizeof (VOID *) * mCapsuleTotalNumber);
|
||||
if (CapsulePtrCache == NULL) {
|
||||
DEBUG ((DEBUG_ERROR, "Allocate CapsulePtrCache fail!\n"));
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
CapsuleGuidCache = (EFI_GUID *) AllocateZeroPool (sizeof (EFI_GUID) * mCapsuleTotalNumber);
|
||||
|
||||
CapsuleGuidCache = (EFI_GUID *)AllocateZeroPool (sizeof (EFI_GUID) * mCapsuleTotalNumber);
|
||||
if (CapsuleGuidCache == NULL) {
|
||||
DEBUG ((DEBUG_ERROR, "Allocate CapsuleGuidCache fail!\n"));
|
||||
FreePool (CapsulePtrCache);
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
@@ -410,7 +415,7 @@ PopulateCapsuleInConfigurationTable (
|
||||
// array for later sorting capsules by CapsuleGuid.
|
||||
//
|
||||
for (Index = 0; Index < mCapsuleTotalNumber; Index++) {
|
||||
CapsuleHeader = (EFI_CAPSULE_HEADER*) mCapsulePtr [Index];
|
||||
CapsuleHeader = (EFI_CAPSULE_HEADER *)mCapsulePtr[Index];
|
||||
if ((CapsuleHeader->Flags & CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE) != 0) {
|
||||
//
|
||||
// For each capsule, we compare it with known CapsuleGuid in the CacheArray.
|
||||
@@ -419,13 +424,15 @@ PopulateCapsuleInConfigurationTable (
|
||||
//
|
||||
CacheIndex = 0;
|
||||
while (CacheIndex < CacheNumber) {
|
||||
if (CompareGuid(&CapsuleGuidCache[CacheIndex],&CapsuleHeader->CapsuleGuid)) {
|
||||
if (CompareGuid (&CapsuleGuidCache[CacheIndex], &CapsuleHeader->CapsuleGuid)) {
|
||||
break;
|
||||
}
|
||||
|
||||
CacheIndex++;
|
||||
}
|
||||
|
||||
if (CacheIndex == CacheNumber) {
|
||||
CopyMem(&CapsuleGuidCache[CacheNumber++],&CapsuleHeader->CapsuleGuid,sizeof(EFI_GUID));
|
||||
CopyMem (&CapsuleGuidCache[CacheNumber++], &CapsuleHeader->CapsuleGuid, sizeof (EFI_GUID));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -442,34 +449,36 @@ PopulateCapsuleInConfigurationTable (
|
||||
for (CacheIndex = 0; CacheIndex < CacheNumber; CacheIndex++) {
|
||||
CapsuleNumber = 0;
|
||||
for (Index = 0; Index < mCapsuleTotalNumber; Index++) {
|
||||
CapsuleHeader = (EFI_CAPSULE_HEADER*) mCapsulePtr [Index];
|
||||
CapsuleHeader = (EFI_CAPSULE_HEADER *)mCapsulePtr[Index];
|
||||
if ((CapsuleHeader->Flags & CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE) != 0) {
|
||||
if (CompareGuid (&CapsuleGuidCache[CacheIndex], &CapsuleHeader->CapsuleGuid)) {
|
||||
//
|
||||
// Cache Caspuleheader to the array, this array is uniqued with certain CapsuleGuid.
|
||||
//
|
||||
CapsulePtrCache[CapsuleNumber++] = (VOID*)CapsuleHeader;
|
||||
CapsulePtrCache[CapsuleNumber++] = (VOID *)CapsuleHeader;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (CapsuleNumber != 0) {
|
||||
Size = sizeof(EFI_CAPSULE_TABLE) + (CapsuleNumber - 1) * sizeof(VOID*);
|
||||
Size = sizeof (EFI_CAPSULE_TABLE) + (CapsuleNumber - 1) * sizeof (VOID *);
|
||||
CapsuleTable = AllocateRuntimePool (Size);
|
||||
if (CapsuleTable == NULL) {
|
||||
DEBUG ((DEBUG_ERROR, "Allocate CapsuleTable (%g) fail!\n", &CapsuleGuidCache[CacheIndex]));
|
||||
continue;
|
||||
}
|
||||
|
||||
CapsuleTable->CapsuleArrayNumber = CapsuleNumber;
|
||||
CopyMem(&CapsuleTable->CapsulePtr[0], CapsulePtrCache, CapsuleNumber * sizeof(VOID*));
|
||||
Status = gBS->InstallConfigurationTable (&CapsuleGuidCache[CacheIndex], (VOID*)CapsuleTable);
|
||||
CopyMem (&CapsuleTable->CapsulePtr[0], CapsulePtrCache, CapsuleNumber * sizeof (VOID *));
|
||||
Status = gBS->InstallConfigurationTable (&CapsuleGuidCache[CacheIndex], (VOID *)CapsuleTable);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_ERROR, "InstallConfigurationTable (%g) fail!\n", &CapsuleGuidCache[CacheIndex]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FreePool(CapsuleGuidCache);
|
||||
FreePool(CapsulePtrCache);
|
||||
FreePool (CapsuleGuidCache);
|
||||
FreePool (CapsulePtrCache);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -492,15 +501,15 @@ ProcessTheseCapsules (
|
||||
IN BOOLEAN FirstRound
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_CAPSULE_HEADER *CapsuleHeader;
|
||||
UINT32 Index;
|
||||
ESRT_MANAGEMENT_PROTOCOL *EsrtManagement;
|
||||
UINT16 EmbeddedDriverCount;
|
||||
BOOLEAN ResetRequired;
|
||||
CHAR16 *CapsuleName;
|
||||
EFI_STATUS Status;
|
||||
EFI_CAPSULE_HEADER *CapsuleHeader;
|
||||
UINT32 Index;
|
||||
ESRT_MANAGEMENT_PROTOCOL *EsrtManagement;
|
||||
UINT16 EmbeddedDriverCount;
|
||||
BOOLEAN ResetRequired;
|
||||
CHAR16 *CapsuleName;
|
||||
|
||||
REPORT_STATUS_CODE(EFI_PROGRESS_CODE, (EFI_SOFTWARE | PcdGet32(PcdStatusCodeSubClassCapsule) | PcdGet32(PcdCapsuleStatusCodeProcessCapsulesBegin)));
|
||||
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_SOFTWARE | PcdGet32 (PcdStatusCodeSubClassCapsule) | PcdGet32 (PcdCapsuleStatusCodeProcessCapsulesBegin)));
|
||||
|
||||
if (FirstRound) {
|
||||
InitCapsulePtr ();
|
||||
@@ -527,20 +536,20 @@ ProcessTheseCapsules (
|
||||
PopulateCapsuleInConfigurationTable ();
|
||||
}
|
||||
|
||||
REPORT_STATUS_CODE(EFI_PROGRESS_CODE, (EFI_SOFTWARE | PcdGet32(PcdStatusCodeSubClassCapsule) | PcdGet32(PcdCapsuleStatusCodeUpdatingFirmware)));
|
||||
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_SOFTWARE | PcdGet32 (PcdStatusCodeSubClassCapsule) | PcdGet32 (PcdCapsuleStatusCodeUpdatingFirmware)));
|
||||
|
||||
//
|
||||
// If Windows UX capsule exist, process it first
|
||||
//
|
||||
for (Index = 0; Index < mCapsuleTotalNumber; Index++) {
|
||||
CapsuleHeader = (EFI_CAPSULE_HEADER*) mCapsulePtr [Index];
|
||||
CapsuleName = (mCapsuleNamePtr == NULL) ? NULL : mCapsuleNamePtr[Index];
|
||||
CapsuleHeader = (EFI_CAPSULE_HEADER *)mCapsulePtr[Index];
|
||||
CapsuleName = (mCapsuleNamePtr == NULL) ? NULL : mCapsuleNamePtr[Index];
|
||||
if (CompareGuid (&CapsuleHeader->CapsuleGuid, &gWindowsUxCapsuleGuid)) {
|
||||
DEBUG ((DEBUG_INFO, "ProcessThisCapsuleImage (Ux) - 0x%x\n", CapsuleHeader));
|
||||
DEBUG ((DEBUG_INFO, "Display logo capsule is found.\n"));
|
||||
Status = ProcessThisCapsuleImage (CapsuleHeader, CapsuleName, NULL);
|
||||
mCapsuleStatusArray [Index] = EFI_SUCCESS;
|
||||
DEBUG((DEBUG_INFO, "ProcessThisCapsuleImage (Ux) - %r\n", Status));
|
||||
Status = ProcessThisCapsuleImage (CapsuleHeader, CapsuleName, NULL);
|
||||
mCapsuleStatusArray[Index] = EFI_SUCCESS;
|
||||
DEBUG ((DEBUG_INFO, "ProcessThisCapsuleImage (Ux) - %r\n", Status));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -551,46 +560,47 @@ ProcessTheseCapsules (
|
||||
// All capsules left are recognized by platform.
|
||||
//
|
||||
for (Index = 0; Index < mCapsuleTotalNumber; Index++) {
|
||||
if (mCapsuleStatusArray [Index] != EFI_NOT_READY) {
|
||||
if (mCapsuleStatusArray[Index] != EFI_NOT_READY) {
|
||||
// already processed
|
||||
continue;
|
||||
}
|
||||
CapsuleHeader = (EFI_CAPSULE_HEADER*) mCapsulePtr [Index];
|
||||
CapsuleName = (mCapsuleNamePtr == NULL) ? NULL : mCapsuleNamePtr[Index];
|
||||
|
||||
CapsuleHeader = (EFI_CAPSULE_HEADER *)mCapsulePtr[Index];
|
||||
CapsuleName = (mCapsuleNamePtr == NULL) ? NULL : mCapsuleNamePtr[Index];
|
||||
if (!CompareGuid (&CapsuleHeader->CapsuleGuid, &gWindowsUxCapsuleGuid)) {
|
||||
//
|
||||
// Call capsule library to process capsule image.
|
||||
//
|
||||
EmbeddedDriverCount = 0;
|
||||
if (IsFmpCapsule(CapsuleHeader)) {
|
||||
if (IsFmpCapsule (CapsuleHeader)) {
|
||||
Status = ValidateFmpCapsule (CapsuleHeader, &EmbeddedDriverCount);
|
||||
if (EFI_ERROR(Status)) {
|
||||
DEBUG((DEBUG_ERROR, "ValidateFmpCapsule failed. Ignore!\n"));
|
||||
mCapsuleStatusArray [Index] = EFI_ABORTED;
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_ERROR, "ValidateFmpCapsule failed. Ignore!\n"));
|
||||
mCapsuleStatusArray[Index] = EFI_ABORTED;
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
mCapsuleStatusArray [Index] = EFI_ABORTED;
|
||||
mCapsuleStatusArray[Index] = EFI_ABORTED;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((!FirstRound) || (EmbeddedDriverCount == 0)) {
|
||||
DEBUG((DEBUG_INFO, "ProcessThisCapsuleImage - 0x%x\n", CapsuleHeader));
|
||||
ResetRequired = FALSE;
|
||||
Status = ProcessThisCapsuleImage (CapsuleHeader, CapsuleName, &ResetRequired);
|
||||
mCapsuleStatusArray [Index] = Status;
|
||||
DEBUG((DEBUG_INFO, "ProcessThisCapsuleImage - %r\n", Status));
|
||||
DEBUG ((DEBUG_INFO, "ProcessThisCapsuleImage - 0x%x\n", CapsuleHeader));
|
||||
ResetRequired = FALSE;
|
||||
Status = ProcessThisCapsuleImage (CapsuleHeader, CapsuleName, &ResetRequired);
|
||||
mCapsuleStatusArray[Index] = Status;
|
||||
DEBUG ((DEBUG_INFO, "ProcessThisCapsuleImage - %r\n", Status));
|
||||
|
||||
if (Status != EFI_NOT_READY) {
|
||||
if (EFI_ERROR(Status)) {
|
||||
REPORT_STATUS_CODE(EFI_ERROR_CODE, (EFI_SOFTWARE | PcdGet32(PcdStatusCodeSubClassCapsule) | PcdGet32(PcdCapsuleStatusCodeUpdateFirmwareFailed)));
|
||||
if (EFI_ERROR (Status)) {
|
||||
REPORT_STATUS_CODE (EFI_ERROR_CODE, (EFI_SOFTWARE | PcdGet32 (PcdStatusCodeSubClassCapsule) | PcdGet32 (PcdCapsuleStatusCodeUpdateFirmwareFailed)));
|
||||
DEBUG ((DEBUG_ERROR, "Capsule process failed!\n"));
|
||||
} else {
|
||||
REPORT_STATUS_CODE(EFI_PROGRESS_CODE, (EFI_SOFTWARE | PcdGet32(PcdStatusCodeSubClassCapsule) | PcdGet32(PcdCapsuleStatusCodeUpdateFirmwareSuccess)));
|
||||
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_SOFTWARE | PcdGet32 (PcdStatusCodeSubClassCapsule) | PcdGet32 (PcdCapsuleStatusCodeUpdateFirmwareSuccess)));
|
||||
}
|
||||
|
||||
mNeedReset |= ResetRequired;
|
||||
if ((CapsuleHeader->Flags & PcdGet16(PcdSystemRebootAfterCapsuleProcessFlag)) != 0) {
|
||||
if ((CapsuleHeader->Flags & PcdGet16 (PcdSystemRebootAfterCapsuleProcessFlag)) != 0) {
|
||||
mNeedReset = TRUE;
|
||||
}
|
||||
}
|
||||
@@ -598,16 +608,17 @@ ProcessTheseCapsules (
|
||||
}
|
||||
}
|
||||
|
||||
Status = gBS->LocateProtocol(&gEsrtManagementProtocolGuid, NULL, (VOID **)&EsrtManagement);
|
||||
Status = gBS->LocateProtocol (&gEsrtManagementProtocolGuid, NULL, (VOID **)&EsrtManagement);
|
||||
//
|
||||
// Always sync ESRT Cache from FMP Instance
|
||||
//
|
||||
if (!EFI_ERROR(Status)) {
|
||||
EsrtManagement->SyncEsrtFmp();
|
||||
if (!EFI_ERROR (Status)) {
|
||||
EsrtManagement->SyncEsrtFmp ();
|
||||
}
|
||||
|
||||
Status = EFI_SUCCESS;
|
||||
|
||||
REPORT_STATUS_CODE(EFI_PROGRESS_CODE, (EFI_SOFTWARE | PcdGet32(PcdStatusCodeSubClassCapsule) | PcdGet32(PcdCapsuleStatusCodeProcessCapsulesEnd)));
|
||||
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_SOFTWARE | PcdGet32 (PcdStatusCodeSubClassCapsule) | PcdGet32 (PcdCapsuleStatusCodeProcessCapsulesEnd)));
|
||||
|
||||
return Status;
|
||||
}
|
||||
@@ -620,13 +631,13 @@ DoResetSystem (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
DEBUG((DEBUG_INFO, "Capsule Request Cold Reboot."));
|
||||
DEBUG ((DEBUG_INFO, "Capsule Request Cold Reboot."));
|
||||
|
||||
REPORT_STATUS_CODE(EFI_PROGRESS_CODE, (EFI_SOFTWARE | PcdGet32(PcdStatusCodeSubClassCapsule) | PcdGet32(PcdCapsuleStatusCodeResettingSystem)));
|
||||
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_SOFTWARE | PcdGet32 (PcdStatusCodeSubClassCapsule) | PcdGet32 (PcdCapsuleStatusCodeResettingSystem)));
|
||||
|
||||
gRT->ResetSystem(EfiResetCold, EFI_SUCCESS, 0, NULL);
|
||||
gRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL);
|
||||
|
||||
CpuDeadLoop();
|
||||
CpuDeadLoop ();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -666,26 +677,27 @@ ProcessCapsules (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS Status;
|
||||
|
||||
if (!mDxeCapsuleLibEndOfDxe) {
|
||||
Status = ProcessTheseCapsules(TRUE);
|
||||
Status = ProcessTheseCapsules (TRUE);
|
||||
|
||||
//
|
||||
// Reboot System if and only if all capsule processed.
|
||||
// If not, defer reset to 2nd process.
|
||||
//
|
||||
if (mNeedReset && AreAllImagesProcessed()) {
|
||||
DoResetSystem();
|
||||
if (mNeedReset && AreAllImagesProcessed ()) {
|
||||
DoResetSystem ();
|
||||
}
|
||||
} else {
|
||||
Status = ProcessTheseCapsules(FALSE);
|
||||
Status = ProcessTheseCapsules (FALSE);
|
||||
//
|
||||
// Reboot System if required after all capsule processed
|
||||
//
|
||||
if (mNeedReset) {
|
||||
DoResetSystem();
|
||||
DoResetSystem ();
|
||||
}
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
@@ -37,7 +37,7 @@
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
CoDClearCapsuleRelocationInfo(
|
||||
CoDClearCapsuleRelocationInfo (
|
||||
VOID
|
||||
);
|
||||
|
||||
@@ -52,23 +52,24 @@ GetCurrentCapsuleLastIndex (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
UINTN Size;
|
||||
CHAR16 CapsuleLastStr[sizeof("Capsule####")];
|
||||
EFI_STATUS Status;
|
||||
UINT16 CurrentIndex;
|
||||
UINTN Size;
|
||||
CHAR16 CapsuleLastStr[sizeof ("Capsule####")];
|
||||
EFI_STATUS Status;
|
||||
UINT16 CurrentIndex;
|
||||
|
||||
Size = sizeof(L"Capsule####") - sizeof(CHAR16); // no zero terminator
|
||||
Status = gRT->GetVariable(
|
||||
Size = sizeof (L"Capsule####") - sizeof (CHAR16); // no zero terminator
|
||||
Status = gRT->GetVariable (
|
||||
L"CapsuleLast",
|
||||
&gEfiCapsuleReportGuid,
|
||||
NULL,
|
||||
&Size,
|
||||
CapsuleLastStr
|
||||
);
|
||||
if (EFI_ERROR(Status)) {
|
||||
if (EFI_ERROR (Status)) {
|
||||
return -1;
|
||||
}
|
||||
CurrentIndex = (UINT16)StrHexToUintn(&CapsuleLastStr[sizeof("Capsule") - 1]);
|
||||
|
||||
CurrentIndex = (UINT16)StrHexToUintn (&CapsuleLastStr[sizeof ("Capsule") - 1]);
|
||||
return CurrentIndex;
|
||||
}
|
||||
|
||||
@@ -83,11 +84,11 @@ GetNewCapsuleResultIndex (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
INTN CurrentIndex;
|
||||
INTN CurrentIndex;
|
||||
|
||||
CurrentIndex = GetCurrentCapsuleLastIndex();
|
||||
if (CurrentIndex >= PcdGet16(PcdCapsuleMax)) {
|
||||
DEBUG((DEBUG_INFO, " CapsuleResult variable Rolling Over!\n"));
|
||||
CurrentIndex = GetCurrentCapsuleLastIndex ();
|
||||
if (CurrentIndex >= PcdGet16 (PcdCapsuleMax)) {
|
||||
DEBUG ((DEBUG_INFO, " CapsuleResult variable Rolling Over!\n"));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -108,22 +109,27 @@ LockVariable (
|
||||
IN EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS Status;
|
||||
|
||||
// Set the policies to protect the target variables
|
||||
Status = RegisterBasicVariablePolicy (VariablePolicy,
|
||||
&VariableGuid,
|
||||
VariableName,
|
||||
VARIABLE_POLICY_NO_MIN_SIZE,
|
||||
VARIABLE_POLICY_NO_MAX_SIZE,
|
||||
VARIABLE_POLICY_NO_MUST_ATTR,
|
||||
VARIABLE_POLICY_NO_CANT_ATTR,
|
||||
VARIABLE_POLICY_TYPE_LOCK_NOW);
|
||||
Status = RegisterBasicVariablePolicy (
|
||||
VariablePolicy,
|
||||
&VariableGuid,
|
||||
VariableName,
|
||||
VARIABLE_POLICY_NO_MIN_SIZE,
|
||||
VARIABLE_POLICY_NO_MAX_SIZE,
|
||||
VARIABLE_POLICY_NO_MUST_ATTR,
|
||||
VARIABLE_POLICY_NO_CANT_ATTR,
|
||||
VARIABLE_POLICY_TYPE_LOCK_NOW
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_ERROR, "DxeCapsuleLibFmp: Failed to lock variable %g %s. Status = %r\n",
|
||||
&VariableGuid,
|
||||
VariableName,
|
||||
Status));
|
||||
DEBUG ((
|
||||
DEBUG_ERROR,
|
||||
"DxeCapsuleLibFmp: Failed to lock variable %g %s. Status = %r\n",
|
||||
&VariableGuid,
|
||||
VariableName,
|
||||
Status
|
||||
));
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
}
|
||||
}
|
||||
@@ -139,36 +145,36 @@ LockVariable (
|
||||
**/
|
||||
EFI_STATUS
|
||||
WriteNewCapsuleResultVariable (
|
||||
IN VOID *CapsuleResult,
|
||||
IN UINTN CapsuleResultSize
|
||||
IN VOID *CapsuleResult,
|
||||
IN UINTN CapsuleResultSize
|
||||
)
|
||||
{
|
||||
INTN CapsuleResultIndex;
|
||||
CHAR16 CapsuleResultStr[sizeof("Capsule####")];
|
||||
UINTN Size;
|
||||
EFI_STATUS Status;
|
||||
INTN CapsuleResultIndex;
|
||||
CHAR16 CapsuleResultStr[sizeof ("Capsule####")];
|
||||
UINTN Size;
|
||||
EFI_STATUS Status;
|
||||
|
||||
CapsuleResultIndex = GetNewCapsuleResultIndex();
|
||||
DEBUG((DEBUG_INFO, "New CapsuleResultIndex - 0x%x\n", CapsuleResultIndex));
|
||||
CapsuleResultIndex = GetNewCapsuleResultIndex ();
|
||||
DEBUG ((DEBUG_INFO, "New CapsuleResultIndex - 0x%x\n", CapsuleResultIndex));
|
||||
|
||||
UnicodeSPrint(
|
||||
UnicodeSPrint (
|
||||
CapsuleResultStr,
|
||||
sizeof(CapsuleResultStr),
|
||||
sizeof (CapsuleResultStr),
|
||||
L"Capsule%04x",
|
||||
CapsuleResultIndex
|
||||
);
|
||||
|
||||
Status = gRT->SetVariable(
|
||||
Status = gRT->SetVariable (
|
||||
CapsuleResultStr,
|
||||
&gEfiCapsuleReportGuid,
|
||||
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
|
||||
CapsuleResultSize,
|
||||
CapsuleResult
|
||||
);
|
||||
if (!EFI_ERROR(Status)) {
|
||||
Size = sizeof(L"Capsule####") - sizeof(CHAR16); // no zero terminator
|
||||
DEBUG((DEBUG_INFO, "Set CapsuleLast - %s\n", CapsuleResultStr));
|
||||
Status = gRT->SetVariable(
|
||||
if (!EFI_ERROR (Status)) {
|
||||
Size = sizeof (L"Capsule####") - sizeof (CHAR16); // no zero terminator
|
||||
DEBUG ((DEBUG_INFO, "Set CapsuleLast - %s\n", CapsuleResultStr));
|
||||
Status = gRT->SetVariable (
|
||||
L"CapsuleLast",
|
||||
&gEfiCapsuleReportGuid,
|
||||
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
|
||||
@@ -191,24 +197,25 @@ WriteNewCapsuleResultVariable (
|
||||
**/
|
||||
EFI_STATUS
|
||||
RecordCapsuleStatusVariable (
|
||||
IN EFI_CAPSULE_HEADER *CapsuleHeader,
|
||||
IN EFI_STATUS CapsuleStatus
|
||||
IN EFI_CAPSULE_HEADER *CapsuleHeader,
|
||||
IN EFI_STATUS CapsuleStatus
|
||||
)
|
||||
{
|
||||
EFI_CAPSULE_RESULT_VARIABLE_HEADER CapsuleResultVariable;
|
||||
EFI_STATUS Status;
|
||||
|
||||
CapsuleResultVariable.VariableTotalSize = sizeof(CapsuleResultVariable);
|
||||
CapsuleResultVariable.Reserved = 0;
|
||||
CapsuleResultVariable.VariableTotalSize = sizeof (CapsuleResultVariable);
|
||||
CapsuleResultVariable.Reserved = 0;
|
||||
CopyGuid (&CapsuleResultVariable.CapsuleGuid, &CapsuleHeader->CapsuleGuid);
|
||||
ZeroMem(&CapsuleResultVariable.CapsuleProcessed, sizeof(CapsuleResultVariable.CapsuleProcessed));
|
||||
gRT->GetTime(&CapsuleResultVariable.CapsuleProcessed, NULL);
|
||||
ZeroMem (&CapsuleResultVariable.CapsuleProcessed, sizeof (CapsuleResultVariable.CapsuleProcessed));
|
||||
gRT->GetTime (&CapsuleResultVariable.CapsuleProcessed, NULL);
|
||||
CapsuleResultVariable.CapsuleStatus = CapsuleStatus;
|
||||
|
||||
Status = EFI_SUCCESS;
|
||||
if ((CapsuleHeader->Flags & CAPSULE_FLAGS_PERSIST_ACROSS_RESET) != 0) {
|
||||
Status = WriteNewCapsuleResultVariable(&CapsuleResultVariable, sizeof(CapsuleResultVariable));
|
||||
Status = WriteNewCapsuleResultVariable (&CapsuleResultVariable, sizeof (CapsuleResultVariable));
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
@@ -245,58 +252,61 @@ RecordFmpCapsuleStatusVariable (
|
||||
UINTN CapFileNameSize;
|
||||
|
||||
DevicePathStr = NULL;
|
||||
CapFileNameSize = sizeof(CHAR16);
|
||||
CapFileNameSize = sizeof (CHAR16);
|
||||
|
||||
if (FmpDevicePath != NULL) {
|
||||
DevicePathStr = ConvertDevicePathToText (FmpDevicePath, FALSE, FALSE);
|
||||
}
|
||||
|
||||
if (DevicePathStr != NULL) {
|
||||
DevicePathStrSize = StrSize(DevicePathStr);
|
||||
DevicePathStrSize = StrSize (DevicePathStr);
|
||||
} else {
|
||||
DevicePathStrSize = sizeof(CHAR16);
|
||||
DevicePathStrSize = sizeof (CHAR16);
|
||||
}
|
||||
|
||||
if (CapFileName != NULL) {
|
||||
CapFileNameSize = StrSize(CapFileName);
|
||||
CapFileNameSize = StrSize (CapFileName);
|
||||
}
|
||||
|
||||
//
|
||||
// Allocate room for CapsuleFileName.
|
||||
//
|
||||
CapsuleResultVariableSize = sizeof(EFI_CAPSULE_RESULT_VARIABLE_HEADER) + sizeof(EFI_CAPSULE_RESULT_VARIABLE_FMP) + CapFileNameSize + DevicePathStrSize;
|
||||
CapsuleResultVariableSize = sizeof (EFI_CAPSULE_RESULT_VARIABLE_HEADER) + sizeof (EFI_CAPSULE_RESULT_VARIABLE_FMP) + CapFileNameSize + DevicePathStrSize;
|
||||
|
||||
CapsuleResultVariable = AllocateZeroPool (CapsuleResultVariableSize);
|
||||
CapsuleResultVariable = AllocateZeroPool (CapsuleResultVariableSize);
|
||||
if (CapsuleResultVariable == NULL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
CapsuleResultVariableHeader = (VOID *)CapsuleResultVariable;
|
||||
|
||||
CapsuleResultVariableHeader = (VOID *)CapsuleResultVariable;
|
||||
CapsuleResultVariableHeader->VariableTotalSize = (UINT32)CapsuleResultVariableSize;
|
||||
CapsuleResultVariableHeader->Reserved = 0;
|
||||
CopyGuid(&CapsuleResultVariableHeader->CapsuleGuid, &CapsuleHeader->CapsuleGuid);
|
||||
ZeroMem(&CapsuleResultVariableHeader->CapsuleProcessed, sizeof(CapsuleResultVariableHeader->CapsuleProcessed));
|
||||
gRT->GetTime(&CapsuleResultVariableHeader->CapsuleProcessed, NULL);
|
||||
CapsuleResultVariableHeader->Reserved = 0;
|
||||
CopyGuid (&CapsuleResultVariableHeader->CapsuleGuid, &CapsuleHeader->CapsuleGuid);
|
||||
ZeroMem (&CapsuleResultVariableHeader->CapsuleProcessed, sizeof (CapsuleResultVariableHeader->CapsuleProcessed));
|
||||
gRT->GetTime (&CapsuleResultVariableHeader->CapsuleProcessed, NULL);
|
||||
CapsuleResultVariableHeader->CapsuleStatus = CapsuleStatus;
|
||||
|
||||
CapsuleResultVariableFmp = (VOID *)(CapsuleResultVariable + sizeof(EFI_CAPSULE_RESULT_VARIABLE_HEADER));
|
||||
CapsuleResultVariableFmp->Version = 0x1;
|
||||
CapsuleResultVariableFmp->PayloadIndex = (UINT8)PayloadIndex;
|
||||
CapsuleResultVariableFmp = (VOID *)(CapsuleResultVariable + sizeof (EFI_CAPSULE_RESULT_VARIABLE_HEADER));
|
||||
CapsuleResultVariableFmp->Version = 0x1;
|
||||
CapsuleResultVariableFmp->PayloadIndex = (UINT8)PayloadIndex;
|
||||
CapsuleResultVariableFmp->UpdateImageIndex = ImageHeader->UpdateImageIndex;
|
||||
CopyGuid (&CapsuleResultVariableFmp->UpdateImageTypeId, &ImageHeader->UpdateImageTypeId);
|
||||
|
||||
if (CapFileName != NULL) {
|
||||
CopyMem((UINT8 *)CapsuleResultVariableFmp + sizeof(EFI_CAPSULE_RESULT_VARIABLE_FMP), CapFileName, CapFileNameSize);
|
||||
CopyMem ((UINT8 *)CapsuleResultVariableFmp + sizeof (EFI_CAPSULE_RESULT_VARIABLE_FMP), CapFileName, CapFileNameSize);
|
||||
}
|
||||
|
||||
if (DevicePathStr != NULL) {
|
||||
CopyMem ((UINT8 *)CapsuleResultVariableFmp + sizeof(EFI_CAPSULE_RESULT_VARIABLE_FMP) + CapFileNameSize, DevicePathStr, DevicePathStrSize);
|
||||
CopyMem ((UINT8 *)CapsuleResultVariableFmp + sizeof (EFI_CAPSULE_RESULT_VARIABLE_FMP) + CapFileNameSize, DevicePathStr, DevicePathStrSize);
|
||||
FreePool (DevicePathStr);
|
||||
DevicePathStr = NULL;
|
||||
}
|
||||
|
||||
Status = EFI_SUCCESS;
|
||||
if ((CapsuleHeader->Flags & CAPSULE_FLAGS_PERSIST_ACROSS_RESET) != 0) {
|
||||
Status = WriteNewCapsuleResultVariable(CapsuleResultVariable, CapsuleResultVariableSize);
|
||||
Status = WriteNewCapsuleResultVariable (CapsuleResultVariable, CapsuleResultVariableSize);
|
||||
}
|
||||
|
||||
FreePool (CapsuleResultVariable);
|
||||
return Status;
|
||||
}
|
||||
@@ -308,29 +318,29 @@ RecordFmpCapsuleStatusVariable (
|
||||
**/
|
||||
VOID
|
||||
InitCapsuleMaxVariable (
|
||||
EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy
|
||||
EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINTN Size;
|
||||
CHAR16 CapsuleMaxStr[sizeof("Capsule####")];
|
||||
EFI_STATUS Status;
|
||||
UINTN Size;
|
||||
CHAR16 CapsuleMaxStr[sizeof ("Capsule####")];
|
||||
|
||||
UnicodeSPrint(
|
||||
UnicodeSPrint (
|
||||
CapsuleMaxStr,
|
||||
sizeof(CapsuleMaxStr),
|
||||
sizeof (CapsuleMaxStr),
|
||||
L"Capsule%04x",
|
||||
PcdGet16(PcdCapsuleMax)
|
||||
PcdGet16 (PcdCapsuleMax)
|
||||
);
|
||||
|
||||
Size = sizeof(L"Capsule####") - sizeof(CHAR16); // no zero terminator
|
||||
Status = gRT->SetVariable(
|
||||
Size = sizeof (L"Capsule####") - sizeof (CHAR16); // no zero terminator
|
||||
Status = gRT->SetVariable (
|
||||
L"CapsuleMax",
|
||||
&gEfiCapsuleReportGuid,
|
||||
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
|
||||
Size,
|
||||
CapsuleMaxStr
|
||||
);
|
||||
if (!EFI_ERROR(Status)) {
|
||||
if (!EFI_ERROR (Status)) {
|
||||
// Lock it per UEFI spec.
|
||||
LockVariable (gEfiCapsuleReportGuid, L"CapsuleMax", VariablePolicy);
|
||||
}
|
||||
@@ -343,18 +353,18 @@ InitCapsuleMaxVariable (
|
||||
**/
|
||||
VOID
|
||||
InitCapsuleLastVariable (
|
||||
EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy
|
||||
EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_BOOT_MODE BootMode;
|
||||
VOID *CapsuleResult;
|
||||
UINTN Size;
|
||||
CHAR16 CapsuleLastStr[sizeof("Capsule####")];
|
||||
EFI_STATUS Status;
|
||||
EFI_BOOT_MODE BootMode;
|
||||
VOID *CapsuleResult;
|
||||
UINTN Size;
|
||||
CHAR16 CapsuleLastStr[sizeof ("Capsule####")];
|
||||
|
||||
BootMode = GetBootModeHob();
|
||||
BootMode = GetBootModeHob ();
|
||||
if (BootMode == BOOT_ON_FLASH_UPDATE) {
|
||||
Status = gRT->SetVariable(
|
||||
Status = gRT->SetVariable (
|
||||
L"CapsuleLast",
|
||||
&gEfiCapsuleReportGuid,
|
||||
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
|
||||
@@ -366,30 +376,30 @@ InitCapsuleLastVariable (
|
||||
//
|
||||
// Check if OS/APP cleared L"Capsule####"
|
||||
//
|
||||
ZeroMem(CapsuleLastStr, sizeof(CapsuleLastStr));
|
||||
Size = sizeof(L"Capsule####") - sizeof(CHAR16); // no zero terminator
|
||||
Status = gRT->GetVariable(
|
||||
ZeroMem (CapsuleLastStr, sizeof (CapsuleLastStr));
|
||||
Size = sizeof (L"Capsule####") - sizeof (CHAR16); // no zero terminator
|
||||
Status = gRT->GetVariable (
|
||||
L"CapsuleLast",
|
||||
&gEfiCapsuleReportGuid,
|
||||
NULL,
|
||||
&Size,
|
||||
CapsuleLastStr
|
||||
);
|
||||
if (!EFI_ERROR(Status)) {
|
||||
if (!EFI_ERROR (Status)) {
|
||||
//
|
||||
// L"CapsuleLast" is got, check if data is there.
|
||||
//
|
||||
Status = GetVariable2 (
|
||||
CapsuleLastStr,
|
||||
&gEfiCapsuleReportGuid,
|
||||
(VOID **) &CapsuleResult,
|
||||
(VOID **)&CapsuleResult,
|
||||
NULL
|
||||
);
|
||||
if (EFI_ERROR(Status)) {
|
||||
if (EFI_ERROR (Status)) {
|
||||
//
|
||||
// If no data, delete L"CapsuleLast"
|
||||
//
|
||||
Status = gRT->SetVariable(
|
||||
Status = gRT->SetVariable (
|
||||
L"CapsuleLast",
|
||||
&gEfiCapsuleReportGuid,
|
||||
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
|
||||
@@ -416,19 +426,19 @@ InitCapsuleUpdateVariable (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINTN Index;
|
||||
CHAR16 CapsuleVarName[30];
|
||||
CHAR16 *TempVarName;
|
||||
EFI_STATUS Status;
|
||||
UINTN Index;
|
||||
CHAR16 CapsuleVarName[30];
|
||||
CHAR16 *TempVarName;
|
||||
|
||||
//
|
||||
// Clear all the capsule variables CapsuleUpdateData, CapsuleUpdateData1, CapsuleUpdateData2...
|
||||
// as early as possible which will avoid the next time boot after the capsule update
|
||||
// will still into the capsule loop
|
||||
//
|
||||
StrCpyS (CapsuleVarName, sizeof(CapsuleVarName)/sizeof(CapsuleVarName[0]), EFI_CAPSULE_VARIABLE_NAME);
|
||||
StrCpyS (CapsuleVarName, sizeof (CapsuleVarName)/sizeof (CapsuleVarName[0]), EFI_CAPSULE_VARIABLE_NAME);
|
||||
TempVarName = CapsuleVarName + StrLen (CapsuleVarName);
|
||||
Index = 0;
|
||||
Index = 0;
|
||||
while (TRUE) {
|
||||
if (Index > 0) {
|
||||
UnicodeValueToStringS (
|
||||
@@ -439,6 +449,7 @@ InitCapsuleUpdateVariable (
|
||||
0
|
||||
);
|
||||
}
|
||||
|
||||
Status = gRT->SetVariable (
|
||||
CapsuleVarName,
|
||||
&gEfiCapsuleVendorGuid,
|
||||
@@ -452,6 +463,7 @@ InitCapsuleUpdateVariable (
|
||||
//
|
||||
break;
|
||||
}
|
||||
|
||||
Index++;
|
||||
}
|
||||
}
|
||||
@@ -463,15 +475,15 @@ InitCapsuleUpdateVariable (
|
||||
**/
|
||||
VOID
|
||||
InitCapsuleRelocationInfo (
|
||||
EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy
|
||||
EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy
|
||||
)
|
||||
{
|
||||
CoDClearCapsuleRelocationInfo();
|
||||
CoDClearCapsuleRelocationInfo ();
|
||||
|
||||
//
|
||||
// Unlock Capsule On Disk relocation Info variable only when Capsule On Disk flag is enabled
|
||||
//
|
||||
if (!CoDCheckCapsuleOnDiskFlag()) {
|
||||
if (!CoDCheckCapsuleOnDiskFlag ()) {
|
||||
LockVariable (gEfiCapsuleVendorGuid, COD_RELOCATION_INFO_VAR_NAME, VariablePolicy);
|
||||
}
|
||||
}
|
||||
@@ -484,16 +496,17 @@ InitCapsuleVariable (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy;
|
||||
EFI_STATUS Status;
|
||||
EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy;
|
||||
|
||||
// Locate the VariablePolicy protocol
|
||||
Status = gBS->LocateProtocol (&gEdkiiVariablePolicyProtocolGuid, NULL, (VOID**)&VariablePolicy);
|
||||
Status = gBS->LocateProtocol (&gEdkiiVariablePolicyProtocolGuid, NULL, (VOID **)&VariablePolicy);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_ERROR, "DxeCapsuleReportLib %a - Could not locate VariablePolicy protocol! %r\n", __FUNCTION__, Status));
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
}
|
||||
InitCapsuleUpdateVariable();
|
||||
|
||||
InitCapsuleUpdateVariable ();
|
||||
InitCapsuleMaxVariable (VariablePolicy);
|
||||
InitCapsuleLastVariable (VariablePolicy);
|
||||
InitCapsuleRelocationInfo (VariablePolicy);
|
||||
|
@@ -24,8 +24,8 @@
|
||||
**/
|
||||
EFI_STATUS
|
||||
RecordCapsuleStatusVariable (
|
||||
IN EFI_CAPSULE_HEADER *CapsuleHeader,
|
||||
IN EFI_STATUS CapsuleStatus
|
||||
IN EFI_CAPSULE_HEADER *CapsuleHeader,
|
||||
IN EFI_STATUS CapsuleStatus
|
||||
)
|
||||
{
|
||||
return EFI_UNSUPPORTED;
|
||||
|
@@ -20,10 +20,10 @@
|
||||
#include <Library/UefiRuntimeServicesTableLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
|
||||
extern EFI_SYSTEM_RESOURCE_TABLE *mEsrtTable;
|
||||
extern BOOLEAN mIsVirtualAddrConverted;
|
||||
EFI_EVENT mDxeRuntimeCapsuleLibVirtualAddressChangeEvent = NULL;
|
||||
EFI_EVENT mDxeRuntimeCapsuleLibReadyToBootEvent = NULL;
|
||||
extern EFI_SYSTEM_RESOURCE_TABLE *mEsrtTable;
|
||||
extern BOOLEAN mIsVirtualAddrConverted;
|
||||
EFI_EVENT mDxeRuntimeCapsuleLibVirtualAddressChangeEvent = NULL;
|
||||
EFI_EVENT mDxeRuntimeCapsuleLibReadyToBootEvent = NULL;
|
||||
|
||||
/**
|
||||
Convert EsrtTable physical address to virtual address.
|
||||
@@ -35,8 +35,8 @@ EFI_EVENT mDxeRuntimeCapsuleLibReadyToBootEvent = NULL;
|
||||
VOID
|
||||
EFIAPI
|
||||
DxeCapsuleLibVirtualAddressChangeEvent (
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
)
|
||||
{
|
||||
gRT->ConvertPointer (EFI_OPTIONAL_PTR, (VOID **)&mEsrtTable);
|
||||
@@ -54,22 +54,23 @@ STATIC
|
||||
VOID
|
||||
EFIAPI
|
||||
DxeCapsuleLibReadyToBootEventNotify (
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
)
|
||||
{
|
||||
UINTN Index;
|
||||
EFI_CONFIGURATION_TABLE *ConfigEntry;
|
||||
EFI_SYSTEM_RESOURCE_TABLE *EsrtTable;
|
||||
UINTN Index;
|
||||
EFI_CONFIGURATION_TABLE *ConfigEntry;
|
||||
EFI_SYSTEM_RESOURCE_TABLE *EsrtTable;
|
||||
|
||||
//
|
||||
// Get Esrt table first
|
||||
//
|
||||
ConfigEntry = gST->ConfigurationTable;
|
||||
for (Index = 0; Index < gST->NumberOfTableEntries; Index++) {
|
||||
if (CompareGuid(&gEfiSystemResourceTableGuid, &ConfigEntry->VendorGuid)) {
|
||||
if (CompareGuid (&gEfiSystemResourceTableGuid, &ConfigEntry->VendorGuid)) {
|
||||
break;
|
||||
}
|
||||
|
||||
ConfigEntry++;
|
||||
}
|
||||
|
||||
@@ -80,12 +81,13 @@ DxeCapsuleLibReadyToBootEventNotify (
|
||||
//
|
||||
// Search Esrt to check given capsule is qualified
|
||||
//
|
||||
EsrtTable = (EFI_SYSTEM_RESOURCE_TABLE *) ConfigEntry->VendorTable;
|
||||
EsrtTable = (EFI_SYSTEM_RESOURCE_TABLE *)ConfigEntry->VendorTable;
|
||||
|
||||
mEsrtTable = AllocateRuntimeCopyPool (
|
||||
sizeof (EFI_SYSTEM_RESOURCE_TABLE) +
|
||||
EsrtTable->FwResourceCount * sizeof (EFI_SYSTEM_RESOURCE_ENTRY),
|
||||
EsrtTable);
|
||||
EsrtTable
|
||||
);
|
||||
ASSERT (mEsrtTable != NULL);
|
||||
|
||||
//
|
||||
@@ -106,11 +108,11 @@ DxeCapsuleLibReadyToBootEventNotify (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
DxeRuntimeCapsuleLibConstructor (
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS Status;
|
||||
|
||||
//
|
||||
// Make sure we can handle virtual address changes.
|
||||
@@ -152,11 +154,11 @@ DxeRuntimeCapsuleLibConstructor (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
DxeRuntimeCapsuleLibDestructor (
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS Status;
|
||||
|
||||
//
|
||||
// Close the VirtualAddressChange event.
|
||||
|
Reference in New Issue
Block a user