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,25 +29,25 @@
|
||||
**/
|
||||
EFI_STATUS
|
||||
ParseUpdateDataFile (
|
||||
IN UINT8 *DataBuffer,
|
||||
IN UINTN BufferSize,
|
||||
IN OUT CONFIG_HEADER *ConfigHeader,
|
||||
IN OUT UPDATE_CONFIG_DATA **UpdateArray
|
||||
IN UINT8 *DataBuffer,
|
||||
IN UINTN BufferSize,
|
||||
IN OUT CONFIG_HEADER *ConfigHeader,
|
||||
IN OUT UPDATE_CONFIG_DATA **UpdateArray
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
CHAR8 *SectionName;
|
||||
CHAR8 Entry[MAX_LINE_LENGTH];
|
||||
UINTN Num;
|
||||
UINT64 Num64;
|
||||
UINTN Index;
|
||||
EFI_GUID FileGuid;
|
||||
VOID *Context;
|
||||
EFI_STATUS Status;
|
||||
CHAR8 *SectionName;
|
||||
CHAR8 Entry[MAX_LINE_LENGTH];
|
||||
UINTN Num;
|
||||
UINT64 Num64;
|
||||
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;
|
||||
}
|
||||
@@ -55,26 +55,26 @@ ParseUpdateDataFile (
|
||||
//
|
||||
// Now get NumOfUpdate
|
||||
//
|
||||
Status = GetDecimalUintnFromDataFile(
|
||||
Status = GetDecimalUintnFromDataFile (
|
||||
Context,
|
||||
"Head",
|
||||
"NumOfUpdate",
|
||||
&Num
|
||||
);
|
||||
if (EFI_ERROR(Status) || (Num == 0)) {
|
||||
DEBUG((DEBUG_ERROR, "NumOfUpdate not found\n"));
|
||||
CloseIniFile(Context);
|
||||
if (EFI_ERROR (Status) || (Num == 0)) {
|
||||
DEBUG ((DEBUG_ERROR, "NumOfUpdate not found\n"));
|
||||
CloseIniFile (Context);
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
|
||||
ConfigHeader->NumOfUpdates = Num;
|
||||
*UpdateArray = AllocateZeroPool ((sizeof (UPDATE_CONFIG_DATA) * Num));
|
||||
*UpdateArray = AllocateZeroPool ((sizeof (UPDATE_CONFIG_DATA) * Num));
|
||||
if (*UpdateArray == NULL) {
|
||||
CloseIniFile(Context);
|
||||
CloseIniFile (Context);
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
for (Index = 0 ; Index < ConfigHeader->NumOfUpdates ; Index++) {
|
||||
for (Index = 0; Index < ConfigHeader->NumOfUpdates; Index++) {
|
||||
//
|
||||
// Get the section name of each update
|
||||
//
|
||||
@@ -86,15 +86,15 @@ ParseUpdateDataFile (
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -107,106 +107,110 @@ ParseUpdateDataFile (
|
||||
//
|
||||
// FirmwareType
|
||||
//
|
||||
Status = GetDecimalUintnFromDataFile(
|
||||
Status = GetDecimalUintnFromDataFile (
|
||||
Context,
|
||||
SectionName,
|
||||
"FirmwareType",
|
||||
&Num
|
||||
);
|
||||
if (EFI_ERROR(Status)) {
|
||||
CloseIniFile(Context);
|
||||
DEBUG((DEBUG_ERROR, "[%d] FirmwareType not found\n", Index));
|
||||
if (EFI_ERROR (Status)) {
|
||||
CloseIniFile (Context);
|
||||
DEBUG ((DEBUG_ERROR, "[%d] FirmwareType not found\n", Index));
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
(*UpdateArray)[Index].FirmwareType = (PLATFORM_FIRMWARE_TYPE) Num;
|
||||
|
||||
(*UpdateArray)[Index].FirmwareType = (PLATFORM_FIRMWARE_TYPE)Num;
|
||||
|
||||
//
|
||||
// AddressType
|
||||
//
|
||||
Status = GetDecimalUintnFromDataFile(
|
||||
Status = GetDecimalUintnFromDataFile (
|
||||
Context,
|
||||
SectionName,
|
||||
"AddressType",
|
||||
&Num
|
||||
);
|
||||
if (EFI_ERROR(Status)) {
|
||||
CloseIniFile(Context);
|
||||
DEBUG((DEBUG_ERROR, "[%d] AddressType not found\n", Index));
|
||||
if (EFI_ERROR (Status)) {
|
||||
CloseIniFile (Context);
|
||||
DEBUG ((DEBUG_ERROR, "[%d] AddressType not found\n", Index));
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
(*UpdateArray)[Index].AddressType = (FLASH_ADDRESS_TYPE) Num;
|
||||
|
||||
(*UpdateArray)[Index].AddressType = (FLASH_ADDRESS_TYPE)Num;
|
||||
|
||||
//
|
||||
// BaseAddress
|
||||
//
|
||||
Status = GetHexUint64FromDataFile(
|
||||
Status = GetHexUint64FromDataFile (
|
||||
Context,
|
||||
SectionName,
|
||||
"BaseAddress",
|
||||
&Num64
|
||||
);
|
||||
if (EFI_ERROR(Status)) {
|
||||
CloseIniFile(Context);
|
||||
DEBUG((DEBUG_ERROR, "[%d] BaseAddress not found\n", Index));
|
||||
if (EFI_ERROR (Status)) {
|
||||
CloseIniFile (Context);
|
||||
DEBUG ((DEBUG_ERROR, "[%d] BaseAddress not found\n", Index));
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
(*UpdateArray)[Index].BaseAddress = (EFI_PHYSICAL_ADDRESS) Num64;
|
||||
|
||||
(*UpdateArray)[Index].BaseAddress = (EFI_PHYSICAL_ADDRESS)Num64;
|
||||
|
||||
//
|
||||
// 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(&((*UpdateArray)[Index].FileGuid), &FileGuid);
|
||||
CopyGuid (&((*UpdateArray)[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;
|
||||
}
|
||||
(*UpdateArray)[Index].Length = (UINTN) Num;
|
||||
|
||||
(*UpdateArray)[Index].Length = (UINTN)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;
|
||||
}
|
||||
(*UpdateArray)[Index].ImageOffset = (UINTN) Num;
|
||||
|
||||
(*UpdateArray)[Index].ImageOffset = (UINTN)Num;
|
||||
}
|
||||
|
||||
//
|
||||
// Now all configuration data got. Free those temporary buffers
|
||||
//
|
||||
CloseIniFile(Context);
|
||||
CloseIniFile (Context);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
@@ -8,10 +8,10 @@
|
||||
|
||||
#include "SystemFirmwareDxe.h"
|
||||
|
||||
EFI_GUID gSystemFmpLastAttemptVariableGuid = SYSTEM_FMP_LAST_ATTEMPT_VARIABLE_GUID;
|
||||
EFI_GUID gSystemFmpProtocolGuid = SYSTEM_FMP_PROTOCOL_GUID;
|
||||
EFI_GUID gSystemFmpLastAttemptVariableGuid = SYSTEM_FMP_LAST_ATTEMPT_VARIABLE_GUID;
|
||||
EFI_GUID gSystemFmpProtocolGuid = SYSTEM_FMP_PROTOCOL_GUID;
|
||||
|
||||
EFI_FIRMWARE_MANAGEMENT_PROTOCOL mFirmwareManagementProtocol = {
|
||||
EFI_FIRMWARE_MANAGEMENT_PROTOCOL mFirmwareManagementProtocol = {
|
||||
FmpGetImageInfo,
|
||||
FmpGetImage,
|
||||
FmpSetImage,
|
||||
@@ -61,48 +61,49 @@ EFI_FIRMWARE_MANAGEMENT_PROTOCOL mFirmwareManagementProtocol = {
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
FmpGetImageInfo (
|
||||
IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
|
||||
IN OUT UINTN *ImageInfoSize,
|
||||
IN OUT EFI_FIRMWARE_IMAGE_DESCRIPTOR *ImageInfo,
|
||||
OUT UINT32 *DescriptorVersion,
|
||||
OUT UINT8 *DescriptorCount,
|
||||
OUT UINTN *DescriptorSize,
|
||||
OUT UINT32 *PackageVersion,
|
||||
OUT CHAR16 **PackageVersionName
|
||||
IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
|
||||
IN OUT UINTN *ImageInfoSize,
|
||||
IN OUT EFI_FIRMWARE_IMAGE_DESCRIPTOR *ImageInfo,
|
||||
OUT UINT32 *DescriptorVersion,
|
||||
OUT UINT8 *DescriptorCount,
|
||||
OUT UINTN *DescriptorSize,
|
||||
OUT UINT32 *PackageVersion,
|
||||
OUT CHAR16 **PackageVersionName
|
||||
)
|
||||
{
|
||||
SYSTEM_FMP_PRIVATE_DATA *SystemFmpPrivate;
|
||||
EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR *ImageDescriptor;
|
||||
SYSTEM_FMP_PRIVATE_DATA *SystemFmpPrivate;
|
||||
EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR *ImageDescriptor;
|
||||
|
||||
SystemFmpPrivate = SYSTEM_FMP_PRIVATE_DATA_FROM_FMP(This);
|
||||
SystemFmpPrivate = SYSTEM_FMP_PRIVATE_DATA_FROM_FMP (This);
|
||||
|
||||
if(ImageInfoSize == NULL) {
|
||||
if (ImageInfoSize == NULL) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if (*ImageInfoSize < sizeof(EFI_FIRMWARE_IMAGE_DESCRIPTOR) * SystemFmpPrivate->DescriptorCount) {
|
||||
*ImageInfoSize = sizeof(EFI_FIRMWARE_IMAGE_DESCRIPTOR) * SystemFmpPrivate->DescriptorCount;
|
||||
if (*ImageInfoSize < sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR) * SystemFmpPrivate->DescriptorCount) {
|
||||
*ImageInfoSize = sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR) * SystemFmpPrivate->DescriptorCount;
|
||||
return EFI_BUFFER_TOO_SMALL;
|
||||
}
|
||||
|
||||
if (ImageInfo == NULL ||
|
||||
DescriptorVersion == NULL ||
|
||||
DescriptorCount == NULL ||
|
||||
DescriptorSize == NULL ||
|
||||
PackageVersion == NULL ||
|
||||
PackageVersionName == NULL) {
|
||||
if ((ImageInfo == NULL) ||
|
||||
(DescriptorVersion == NULL) ||
|
||||
(DescriptorCount == NULL) ||
|
||||
(DescriptorSize == NULL) ||
|
||||
(PackageVersion == NULL) ||
|
||||
(PackageVersionName == NULL))
|
||||
{
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
*ImageInfoSize = sizeof(EFI_FIRMWARE_IMAGE_DESCRIPTOR) * SystemFmpPrivate->DescriptorCount;
|
||||
*DescriptorSize = sizeof(EFI_FIRMWARE_IMAGE_DESCRIPTOR);
|
||||
*DescriptorCount = SystemFmpPrivate->DescriptorCount;
|
||||
*DescriptorVersion = EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION;
|
||||
*ImageInfoSize = sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR) * SystemFmpPrivate->DescriptorCount;
|
||||
*DescriptorSize = sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR);
|
||||
*DescriptorCount = SystemFmpPrivate->DescriptorCount;
|
||||
*DescriptorVersion = EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION;
|
||||
|
||||
//
|
||||
// supports 1 ImageInfo descriptor
|
||||
//
|
||||
ImageDescriptor = SystemFmpPrivate->ImageDescriptor;
|
||||
ImageDescriptor = SystemFmpPrivate->ImageDescriptor;
|
||||
ImageInfo->ImageIndex = ImageDescriptor->ImageIndex;
|
||||
CopyGuid (&ImageInfo->ImageTypeId, &ImageDescriptor->ImageTypeId);
|
||||
ImageInfo->ImageId = ImageDescriptor->ImageId;
|
||||
@@ -111,20 +112,22 @@ FmpGetImageInfo (
|
||||
} else {
|
||||
ImageInfo->ImageIdName = NULL;
|
||||
}
|
||||
|
||||
ImageInfo->Version = ImageDescriptor->Version;
|
||||
if (ImageDescriptor->VersionNameStringOffset != 0) {
|
||||
ImageInfo->VersionName = (CHAR16 *)((UINTN)ImageDescriptor + ImageDescriptor->VersionNameStringOffset);
|
||||
} else {
|
||||
ImageInfo->VersionName = NULL;
|
||||
}
|
||||
ImageInfo->Size = (UINTN)ImageDescriptor->Size;
|
||||
ImageInfo->AttributesSupported = ImageDescriptor->AttributesSupported;
|
||||
ImageInfo->AttributesSetting = ImageDescriptor->AttributesSetting;
|
||||
ImageInfo->Compatibilities = ImageDescriptor->Compatibilities;
|
||||
|
||||
ImageInfo->Size = (UINTN)ImageDescriptor->Size;
|
||||
ImageInfo->AttributesSupported = ImageDescriptor->AttributesSupported;
|
||||
ImageInfo->AttributesSetting = ImageDescriptor->AttributesSetting;
|
||||
ImageInfo->Compatibilities = ImageDescriptor->Compatibilities;
|
||||
ImageInfo->LowestSupportedImageVersion = ImageDescriptor->LowestSupportedImageVersion;
|
||||
ImageInfo->LastAttemptVersion = SystemFmpPrivate->LastAttempt.LastAttemptVersion;
|
||||
ImageInfo->LastAttemptStatus = SystemFmpPrivate->LastAttempt.LastAttemptStatus;
|
||||
ImageInfo->HardwareInstance = ImageDescriptor->HardwareInstance;
|
||||
ImageInfo->LastAttemptVersion = SystemFmpPrivate->LastAttempt.LastAttemptVersion;
|
||||
ImageInfo->LastAttemptStatus = SystemFmpPrivate->LastAttempt.LastAttemptStatus;
|
||||
ImageInfo->HardwareInstance = ImageDescriptor->HardwareInstance;
|
||||
|
||||
//
|
||||
// package version
|
||||
@@ -132,7 +135,7 @@ FmpGetImageInfo (
|
||||
*PackageVersion = ImageDescriptor->PackageVersion;
|
||||
if (ImageDescriptor->PackageVersionNameStringOffset != 0) {
|
||||
*PackageVersionName = (VOID *)((UINTN)ImageDescriptor + ImageDescriptor->PackageVersionNameStringOffset);
|
||||
*PackageVersionName = AllocateCopyPool(StrSize(*PackageVersionName), *PackageVersionName);
|
||||
*PackageVersionName = AllocateCopyPool (StrSize (*PackageVersionName), *PackageVersionName);
|
||||
} else {
|
||||
*PackageVersionName = NULL;
|
||||
}
|
||||
@@ -243,12 +246,12 @@ FmpCheckImage (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
FmpGetPackageInfo (
|
||||
IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
|
||||
OUT UINT32 *PackageVersion,
|
||||
OUT CHAR16 **PackageVersionName,
|
||||
OUT UINT32 *PackageVersionNameMaxLen,
|
||||
OUT UINT64 *AttributesSupported,
|
||||
OUT UINT64 *AttributesSetting
|
||||
IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
|
||||
OUT UINT32 *PackageVersion,
|
||||
OUT CHAR16 **PackageVersionName,
|
||||
OUT UINT32 *PackageVersionNameMaxLen,
|
||||
OUT UINT64 *AttributesSupported,
|
||||
OUT UINT64 *AttributesSetting
|
||||
)
|
||||
{
|
||||
return EFI_UNSUPPORTED;
|
||||
@@ -288,12 +291,12 @@ FmpGetPackageInfo (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
FmpSetPackageInfo (
|
||||
IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
|
||||
IN CONST VOID *Image,
|
||||
IN UINTN ImageSize,
|
||||
IN CONST VOID *VendorCode,
|
||||
IN UINT32 PackageVersion,
|
||||
IN CONST CHAR16 *PackageVersionName
|
||||
IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
|
||||
IN CONST VOID *Image,
|
||||
IN UINTN ImageSize,
|
||||
IN CONST VOID *VendorCode,
|
||||
IN UINT32 PackageVersion,
|
||||
IN CONST CHAR16 *PackageVersionName
|
||||
)
|
||||
{
|
||||
return EFI_UNSUPPORTED;
|
||||
@@ -311,30 +314,28 @@ InitializePrivateData (
|
||||
IN SYSTEM_FMP_PRIVATE_DATA *SystemFmpPrivate
|
||||
)
|
||||
{
|
||||
EFI_STATUS VarStatus;
|
||||
UINTN VarSize;
|
||||
EFI_STATUS VarStatus;
|
||||
UINTN VarSize;
|
||||
|
||||
SystemFmpPrivate->Signature = SYSTEM_FMP_PRIVATE_DATA_SIGNATURE;
|
||||
SystemFmpPrivate->Handle = NULL;
|
||||
SystemFmpPrivate->DescriptorCount = 1;
|
||||
CopyMem(&SystemFmpPrivate->Fmp, &mFirmwareManagementProtocol, sizeof(EFI_FIRMWARE_MANAGEMENT_PROTOCOL));
|
||||
CopyMem (&SystemFmpPrivate->Fmp, &mFirmwareManagementProtocol, sizeof (EFI_FIRMWARE_MANAGEMENT_PROTOCOL));
|
||||
|
||||
SystemFmpPrivate->ImageDescriptor = PcdGetPtr(PcdEdkiiSystemFirmwareImageDescriptor);
|
||||
SystemFmpPrivate->ImageDescriptor = PcdGetPtr (PcdEdkiiSystemFirmwareImageDescriptor);
|
||||
|
||||
SystemFmpPrivate->LastAttempt.LastAttemptVersion = 0x0;
|
||||
SystemFmpPrivate->LastAttempt.LastAttemptStatus = 0x0;
|
||||
VarSize = sizeof(SystemFmpPrivate->LastAttempt);
|
||||
VarStatus = gRT->GetVariable(
|
||||
SYSTEM_FMP_LAST_ATTEMPT_VARIABLE_NAME,
|
||||
&gSystemFmpLastAttemptVariableGuid,
|
||||
NULL,
|
||||
&VarSize,
|
||||
&SystemFmpPrivate->LastAttempt
|
||||
);
|
||||
DEBUG((DEBUG_INFO, "GetLastAttempt - %r\n", VarStatus));
|
||||
DEBUG((DEBUG_INFO, "GetLastAttempt Version - 0x%x, State - 0x%x\n", SystemFmpPrivate->LastAttempt.LastAttemptVersion, SystemFmpPrivate->LastAttempt.LastAttemptStatus));
|
||||
SystemFmpPrivate->LastAttempt.LastAttemptStatus = 0x0;
|
||||
VarSize = sizeof (SystemFmpPrivate->LastAttempt);
|
||||
VarStatus = gRT->GetVariable (
|
||||
SYSTEM_FMP_LAST_ATTEMPT_VARIABLE_NAME,
|
||||
&gSystemFmpLastAttemptVariableGuid,
|
||||
NULL,
|
||||
&VarSize,
|
||||
&SystemFmpPrivate->LastAttempt
|
||||
);
|
||||
DEBUG ((DEBUG_INFO, "GetLastAttempt - %r\n", VarStatus));
|
||||
DEBUG ((DEBUG_INFO, "GetLastAttempt Version - 0x%x, State - 0x%x\n", SystemFmpPrivate->LastAttempt.LastAttemptVersion, SystemFmpPrivate->LastAttempt.LastAttemptStatus));
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
|
@@ -35,32 +35,32 @@
|
||||
#include <Library/EdkiiSystemCapsuleLib.h>
|
||||
|
||||
typedef struct {
|
||||
UINT32 LastAttemptVersion;
|
||||
UINT32 LastAttemptStatus;
|
||||
UINT32 LastAttemptVersion;
|
||||
UINT32 LastAttemptStatus;
|
||||
} SYSTEM_FMP_LAST_ATTEMPT_VARIABLE;
|
||||
|
||||
#define SYSTEM_FMP_LAST_ATTEMPT_VARIABLE_NAME L"SystemLastAttempVar"
|
||||
|
||||
#define SYSTEM_FMP_LAST_ATTEMPT_VARIABLE_GUID {0x2f564d6f, 0xcc2c, 0x4838, { 0xb9, 0xa8, 0xbe, 0x59, 0x48, 0xb0, 0x3d, 0x59 }}
|
||||
#define SYSTEM_FMP_LAST_ATTEMPT_VARIABLE_GUID {0x2f564d6f, 0xcc2c, 0x4838, { 0xb9, 0xa8, 0xbe, 0x59, 0x48, 0xb0, 0x3d, 0x59 }}
|
||||
|
||||
#define SYSTEM_FMP_PRIVATE_DATA_SIGNATURE SIGNATURE_32('S', 'Y', 'S', 'F')
|
||||
|
||||
#define SYSTEM_FMP_PROTOCOL_GUID {0x6d16624a, 0x26a6, 0x4cb4, { 0x84, 0xfa, 0x6, 0x78, 0x5a, 0x7e, 0x82, 0x6a }}
|
||||
#define SYSTEM_FMP_PROTOCOL_GUID {0x6d16624a, 0x26a6, 0x4cb4, { 0x84, 0xfa, 0x6, 0x78, 0x5a, 0x7e, 0x82, 0x6a }}
|
||||
|
||||
//
|
||||
// SYSTEM FMP private data structure.
|
||||
//
|
||||
|
||||
struct _SYSTEM_FMP_PRIVATE_DATA {
|
||||
UINT32 Signature;
|
||||
EFI_FIRMWARE_MANAGEMENT_PROTOCOL Fmp;
|
||||
EFI_HANDLE Handle;
|
||||
UINT8 DescriptorCount;
|
||||
EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR *ImageDescriptor;
|
||||
SYSTEM_FMP_LAST_ATTEMPT_VARIABLE LastAttempt;
|
||||
UINT32 Signature;
|
||||
EFI_FIRMWARE_MANAGEMENT_PROTOCOL Fmp;
|
||||
EFI_HANDLE Handle;
|
||||
UINT8 DescriptorCount;
|
||||
EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR *ImageDescriptor;
|
||||
SYSTEM_FMP_LAST_ATTEMPT_VARIABLE LastAttempt;
|
||||
};
|
||||
|
||||
typedef struct _SYSTEM_FMP_PRIVATE_DATA SYSTEM_FMP_PRIVATE_DATA;
|
||||
typedef struct _SYSTEM_FMP_PRIVATE_DATA SYSTEM_FMP_PRIVATE_DATA;
|
||||
|
||||
/**
|
||||
Returns a pointer to the SYSTEM_FMP_PRIVATE_DATA structure from the input a as Fmp.
|
||||
@@ -80,51 +80,49 @@ typedef struct _SYSTEM_FMP_PRIVATE_DATA SYSTEM_FMP_PRIVATE_DATA;
|
||||
SYSTEM_FMP_PRIVATE_DATA_SIGNATURE \
|
||||
)
|
||||
|
||||
|
||||
//
|
||||
// Update data
|
||||
//
|
||||
|
||||
typedef struct {
|
||||
UINTN NumOfUpdates;
|
||||
UINTN NumOfUpdates;
|
||||
} CONFIG_HEADER;
|
||||
|
||||
typedef struct {
|
||||
UINTN Index;
|
||||
PLATFORM_FIRMWARE_TYPE FirmwareType;
|
||||
FLASH_ADDRESS_TYPE AddressType;
|
||||
EFI_GUID FileGuid;
|
||||
EFI_PHYSICAL_ADDRESS BaseAddress;
|
||||
UINTN Length;
|
||||
UINTN ImageOffset;
|
||||
UINTN Index;
|
||||
PLATFORM_FIRMWARE_TYPE FirmwareType;
|
||||
FLASH_ADDRESS_TYPE AddressType;
|
||||
EFI_GUID FileGuid;
|
||||
EFI_PHYSICAL_ADDRESS BaseAddress;
|
||||
UINTN Length;
|
||||
UINTN ImageOffset;
|
||||
} UPDATE_CONFIG_DATA;
|
||||
|
||||
//
|
||||
// System Firmware Update SMM Communication
|
||||
//
|
||||
|
||||
#define SYSTEM_FIRMWARE_UPDATE_COMMUNICATION_FUNCTION_SET_IMAGE 1
|
||||
#define SYSTEM_FIRMWARE_UPDATE_COMMUNICATION_FUNCTION_SET_IMAGE 1
|
||||
|
||||
typedef struct {
|
||||
UINTN Function;
|
||||
EFI_STATUS ReturnStatus;
|
||||
//UINT8 Data[];
|
||||
UINTN Function;
|
||||
EFI_STATUS ReturnStatus;
|
||||
// UINT8 Data[];
|
||||
} SYSTEM_FIRMWARE_UPDATE_COMMUNICATION_HEAD;
|
||||
|
||||
#define ABORT_REASON_MAX_SIZE 0x40 // UnicodeStringSize including final L'\0'
|
||||
#define ABORT_REASON_MAX_SIZE 0x40 // UnicodeStringSize including final L'\0'
|
||||
|
||||
#define CAPSULE_IMAGE_ADDITIONAL_MAX_SIZE (0x20020 + 0xA0000) // Additional size for Capsule Header, FV block alignment + DispatchImage.
|
||||
|
||||
typedef struct {
|
||||
UINT8 ImageIndex;
|
||||
UINTN ImageSize;
|
||||
UINTN AbortReasonSize;
|
||||
UINT32 LastAttemptVersion;
|
||||
UINT32 LastAttemptStatus;
|
||||
//UINT8 Data[AbortReasonMaxSize + ImageSize];
|
||||
UINT8 ImageIndex;
|
||||
UINTN ImageSize;
|
||||
UINTN AbortReasonSize;
|
||||
UINT32 LastAttemptVersion;
|
||||
UINT32 LastAttemptStatus;
|
||||
// UINT8 Data[AbortReasonMaxSize + ImageSize];
|
||||
} SYSTEM_FIRMWARE_UPDATE_COMMUNICATION_SET_IMAGE;
|
||||
|
||||
|
||||
/**
|
||||
Returns information about the current firmware image(s) of the device.
|
||||
|
||||
@@ -166,14 +164,14 @@ typedef struct {
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
FmpGetImageInfo (
|
||||
IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
|
||||
IN OUT UINTN *ImageInfoSize,
|
||||
IN OUT EFI_FIRMWARE_IMAGE_DESCRIPTOR *ImageInfo,
|
||||
OUT UINT32 *DescriptorVersion,
|
||||
OUT UINT8 *DescriptorCount,
|
||||
OUT UINTN *DescriptorSize,
|
||||
OUT UINT32 *PackageVersion,
|
||||
OUT CHAR16 **PackageVersionName
|
||||
IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
|
||||
IN OUT UINTN *ImageInfoSize,
|
||||
IN OUT EFI_FIRMWARE_IMAGE_DESCRIPTOR *ImageInfo,
|
||||
OUT UINT32 *DescriptorVersion,
|
||||
OUT UINT8 *DescriptorCount,
|
||||
OUT UINTN *DescriptorSize,
|
||||
OUT UINT32 *PackageVersion,
|
||||
OUT CHAR16 **PackageVersionName
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -257,13 +255,13 @@ FmpGetImage (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
FmpSetImage (
|
||||
IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
|
||||
IN UINT8 ImageIndex,
|
||||
IN CONST VOID *Image,
|
||||
IN UINTN ImageSize,
|
||||
IN CONST VOID *VendorCode,
|
||||
IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress,
|
||||
OUT CHAR16 **AbortReason
|
||||
IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
|
||||
IN UINT8 ImageIndex,
|
||||
IN CONST VOID *Image,
|
||||
IN UINTN ImageSize,
|
||||
IN CONST VOID *VendorCode,
|
||||
IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress,
|
||||
OUT CHAR16 **AbortReason
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -331,12 +329,12 @@ FmpCheckImage (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
FmpGetPackageInfo (
|
||||
IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
|
||||
OUT UINT32 *PackageVersion,
|
||||
OUT CHAR16 **PackageVersionName,
|
||||
OUT UINT32 *PackageVersionNameMaxLen,
|
||||
OUT UINT64 *AttributesSupported,
|
||||
OUT UINT64 *AttributesSetting
|
||||
IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
|
||||
OUT UINT32 *PackageVersion,
|
||||
OUT CHAR16 **PackageVersionName,
|
||||
OUT UINT32 *PackageVersionNameMaxLen,
|
||||
OUT UINT64 *AttributesSupported,
|
||||
OUT UINT64 *AttributesSetting
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -373,12 +371,12 @@ FmpGetPackageInfo (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
FmpSetPackageInfo (
|
||||
IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
|
||||
IN CONST VOID *Image,
|
||||
IN UINTN ImageSize,
|
||||
IN CONST VOID *VendorCode,
|
||||
IN UINT32 PackageVersion,
|
||||
IN CONST CHAR16 *PackageVersionName
|
||||
IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
|
||||
IN CONST VOID *Image,
|
||||
IN UINTN ImageSize,
|
||||
IN CONST VOID *VendorCode,
|
||||
IN UINT32 PackageVersion,
|
||||
IN CONST CHAR16 *PackageVersionName
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -393,9 +391,8 @@ InitializePrivateData (
|
||||
IN SYSTEM_FMP_PRIVATE_DATA *SystemFmpPrivate
|
||||
);
|
||||
|
||||
extern EFI_GUID gSystemFmpLastAttemptVariableGuid;
|
||||
extern EFI_GUID mCurrentImageTypeId;
|
||||
extern EFI_GUID gSystemFmpProtocolGuid;
|
||||
extern EFI_GUID gSystemFmpLastAttemptVariableGuid;
|
||||
extern EFI_GUID mCurrentImageTypeId;
|
||||
extern EFI_GUID gSystemFmpProtocolGuid;
|
||||
|
||||
#endif
|
||||
|
||||
|
@@ -18,7 +18,7 @@
|
||||
//
|
||||
// SystemFmp driver private data
|
||||
//
|
||||
SYSTEM_FMP_PRIVATE_DATA *mSystemFmpPrivate = NULL;
|
||||
SYSTEM_FMP_PRIVATE_DATA *mSystemFmpPrivate = NULL;
|
||||
|
||||
/**
|
||||
Dispatch system FMP images.
|
||||
@@ -37,57 +37,57 @@ SYSTEM_FMP_PRIVATE_DATA *mSystemFmpPrivate = NULL;
|
||||
**/
|
||||
EFI_STATUS
|
||||
DispatchSystemFmpImages (
|
||||
IN VOID *Image,
|
||||
IN UINTN ImageSize,
|
||||
OUT UINT32 *LastAttemptVersion,
|
||||
OUT UINT32 *LastAttemptStatus
|
||||
IN VOID *Image,
|
||||
IN UINTN ImageSize,
|
||||
OUT UINT32 *LastAttemptVersion,
|
||||
OUT UINT32 *LastAttemptStatus
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
VOID *AuthenticatedImage;
|
||||
UINTN AuthenticatedImageSize;
|
||||
VOID *DispatchFvImage;
|
||||
UINTN DispatchFvImageSize;
|
||||
EFI_HANDLE FvProtocolHandle;
|
||||
EFI_FIRMWARE_VOLUME_HEADER *FvImage;
|
||||
BOOLEAN Result;
|
||||
EFI_STATUS Status;
|
||||
VOID *AuthenticatedImage;
|
||||
UINTN AuthenticatedImageSize;
|
||||
VOID *DispatchFvImage;
|
||||
UINTN DispatchFvImageSize;
|
||||
EFI_HANDLE FvProtocolHandle;
|
||||
EFI_FIRMWARE_VOLUME_HEADER *FvImage;
|
||||
BOOLEAN Result;
|
||||
|
||||
AuthenticatedImage = NULL;
|
||||
AuthenticatedImageSize = 0;
|
||||
|
||||
DEBUG((DEBUG_INFO, "DispatchSystemFmpImages\n"));
|
||||
DEBUG ((DEBUG_INFO, "DispatchSystemFmpImages\n"));
|
||||
|
||||
//
|
||||
// Verify
|
||||
//
|
||||
Status = CapsuleAuthenticateSystemFirmware(Image, ImageSize, FALSE, LastAttemptVersion, LastAttemptStatus, &AuthenticatedImage, &AuthenticatedImageSize);
|
||||
if (EFI_ERROR(Status)) {
|
||||
DEBUG((DEBUG_INFO, "SystemFirmwareAuthenticateImage - %r\n", Status));
|
||||
Status = CapsuleAuthenticateSystemFirmware (Image, ImageSize, FALSE, LastAttemptVersion, LastAttemptStatus, &AuthenticatedImage, &AuthenticatedImageSize);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_INFO, "SystemFirmwareAuthenticateImage - %r\n", Status));
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// Get FV
|
||||
//
|
||||
Result = ExtractDriverFvImage(AuthenticatedImage, AuthenticatedImageSize, &DispatchFvImage, &DispatchFvImageSize);
|
||||
Result = ExtractDriverFvImage (AuthenticatedImage, AuthenticatedImageSize, &DispatchFvImage, &DispatchFvImageSize);
|
||||
if (Result) {
|
||||
DEBUG((DEBUG_INFO, "ExtractDriverFvImage\n"));
|
||||
DEBUG ((DEBUG_INFO, "ExtractDriverFvImage\n"));
|
||||
//
|
||||
// Dispatch
|
||||
//
|
||||
if (((EFI_FIRMWARE_VOLUME_HEADER *)DispatchFvImage)->FvLength == DispatchFvImageSize) {
|
||||
FvImage = AllocatePages(EFI_SIZE_TO_PAGES(DispatchFvImageSize));
|
||||
FvImage = AllocatePages (EFI_SIZE_TO_PAGES (DispatchFvImageSize));
|
||||
if (FvImage != NULL) {
|
||||
CopyMem(FvImage, DispatchFvImage, DispatchFvImageSize);
|
||||
Status = gDS->ProcessFirmwareVolume(
|
||||
CopyMem (FvImage, DispatchFvImage, DispatchFvImageSize);
|
||||
Status = gDS->ProcessFirmwareVolume (
|
||||
(VOID *)FvImage,
|
||||
(UINTN)FvImage->FvLength,
|
||||
&FvProtocolHandle
|
||||
);
|
||||
DEBUG((DEBUG_INFO, "ProcessFirmwareVolume - %r\n", Status));
|
||||
if (!EFI_ERROR(Status)) {
|
||||
gDS->Dispatch();
|
||||
DEBUG((DEBUG_INFO, "Dispatch Done\n"));
|
||||
DEBUG ((DEBUG_INFO, "ProcessFirmwareVolume - %r\n", Status));
|
||||
if (!EFI_ERROR (Status)) {
|
||||
gDS->Dispatch ();
|
||||
DEBUG ((DEBUG_INFO, "Dispatch Done\n"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -145,78 +145,78 @@ DispatchSystemFmpImages (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
FmpSetImage (
|
||||
IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
|
||||
IN UINT8 ImageIndex,
|
||||
IN CONST VOID *Image,
|
||||
IN UINTN ImageSize,
|
||||
IN CONST VOID *VendorCode,
|
||||
IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress,
|
||||
OUT CHAR16 **AbortReason
|
||||
IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
|
||||
IN UINT8 ImageIndex,
|
||||
IN CONST VOID *Image,
|
||||
IN UINTN ImageSize,
|
||||
IN CONST VOID *VendorCode,
|
||||
IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress,
|
||||
OUT CHAR16 **AbortReason
|
||||
)
|
||||
{
|
||||
SYSTEM_FMP_PRIVATE_DATA *SystemFmpPrivate;
|
||||
EFI_FIRMWARE_MANAGEMENT_PROTOCOL *SystemFmp;
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS VarStatus;
|
||||
SYSTEM_FMP_PRIVATE_DATA *SystemFmpPrivate;
|
||||
EFI_FIRMWARE_MANAGEMENT_PROTOCOL *SystemFmp;
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS VarStatus;
|
||||
|
||||
if (Image == NULL || ImageSize == 0 || AbortReason == NULL) {
|
||||
if ((Image == NULL) || (ImageSize == 0) || (AbortReason == NULL)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
SystemFmpPrivate = SYSTEM_FMP_PRIVATE_DATA_FROM_FMP(This);
|
||||
SystemFmpPrivate = SYSTEM_FMP_PRIVATE_DATA_FROM_FMP (This);
|
||||
*AbortReason = NULL;
|
||||
|
||||
if (ImageIndex == 0 || ImageIndex > SystemFmpPrivate->DescriptorCount) {
|
||||
if ((ImageIndex == 0) || (ImageIndex > SystemFmpPrivate->DescriptorCount)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
//
|
||||
// Process FV
|
||||
//
|
||||
Status = DispatchSystemFmpImages((VOID *)Image, ImageSize, &SystemFmpPrivate->LastAttempt.LastAttemptVersion, &SystemFmpPrivate->LastAttempt.LastAttemptStatus);
|
||||
DEBUG((DEBUG_INFO, "(Agent)SetImage - LastAttempt Version - 0x%x, State - 0x%x\n", SystemFmpPrivate->LastAttempt.LastAttemptVersion, SystemFmpPrivate->LastAttempt.LastAttemptStatus));
|
||||
if (EFI_ERROR(Status)) {
|
||||
VarStatus = gRT->SetVariable(
|
||||
Status = DispatchSystemFmpImages ((VOID *)Image, ImageSize, &SystemFmpPrivate->LastAttempt.LastAttemptVersion, &SystemFmpPrivate->LastAttempt.LastAttemptStatus);
|
||||
DEBUG ((DEBUG_INFO, "(Agent)SetImage - LastAttempt Version - 0x%x, State - 0x%x\n", SystemFmpPrivate->LastAttempt.LastAttemptVersion, SystemFmpPrivate->LastAttempt.LastAttemptStatus));
|
||||
if (EFI_ERROR (Status)) {
|
||||
VarStatus = gRT->SetVariable (
|
||||
SYSTEM_FMP_LAST_ATTEMPT_VARIABLE_NAME,
|
||||
&gSystemFmpLastAttemptVariableGuid,
|
||||
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
|
||||
sizeof(SystemFmpPrivate->LastAttempt),
|
||||
sizeof (SystemFmpPrivate->LastAttempt),
|
||||
&SystemFmpPrivate->LastAttempt
|
||||
);
|
||||
DEBUG((DEBUG_INFO, "(Agent)SetLastAttempt - %r\n", VarStatus));
|
||||
DEBUG ((DEBUG_INFO, "(Agent)SetLastAttempt - %r\n", VarStatus));
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// Pass Thru to System FMP Protocol on same handle as FMP Protocol
|
||||
//
|
||||
Status = gBS->HandleProtocol(
|
||||
Status = gBS->HandleProtocol (
|
||||
SystemFmpPrivate->Handle,
|
||||
&gSystemFmpProtocolGuid,
|
||||
(VOID **)&SystemFmp
|
||||
);
|
||||
if (EFI_ERROR(Status)) {
|
||||
if (EFI_ERROR (Status)) {
|
||||
Status = gBS->LocateProtocol (
|
||||
&gSystemFmpProtocolGuid,
|
||||
NULL,
|
||||
(VOID **)&SystemFmp
|
||||
);
|
||||
if (EFI_ERROR(Status)) {
|
||||
DEBUG((DEBUG_INFO, "(Agent)SetImage - SystemFmpProtocol - %r\n", Status));
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_INFO, "(Agent)SetImage - SystemFmpProtocol - %r\n", Status));
|
||||
SystemFmpPrivate->LastAttempt.LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INVALID_FORMAT;
|
||||
VarStatus = gRT->SetVariable(
|
||||
SYSTEM_FMP_LAST_ATTEMPT_VARIABLE_NAME,
|
||||
&gSystemFmpLastAttemptVariableGuid,
|
||||
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
|
||||
sizeof(SystemFmpPrivate->LastAttempt),
|
||||
&SystemFmpPrivate->LastAttempt
|
||||
);
|
||||
DEBUG((DEBUG_INFO, "(Agent)SetLastAttempt - %r\n", VarStatus));
|
||||
VarStatus = gRT->SetVariable (
|
||||
SYSTEM_FMP_LAST_ATTEMPT_VARIABLE_NAME,
|
||||
&gSystemFmpLastAttemptVariableGuid,
|
||||
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
|
||||
sizeof (SystemFmpPrivate->LastAttempt),
|
||||
&SystemFmpPrivate->LastAttempt
|
||||
);
|
||||
DEBUG ((DEBUG_INFO, "(Agent)SetLastAttempt - %r\n", VarStatus));
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
|
||||
return SystemFmp->SetImage(SystemFmp, ImageIndex, Image, ImageSize, VendorCode, Progress, AbortReason);
|
||||
return SystemFmp->SetImage (SystemFmp, ImageIndex, Image, ImageSize, VendorCode, Progress, AbortReason);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -230,23 +230,23 @@ FmpSetImage (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SystemFirmwareReportMainDxe (
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS Status;
|
||||
|
||||
//
|
||||
// Initialize SystemFmpPrivateData
|
||||
//
|
||||
mSystemFmpPrivate = AllocateZeroPool (sizeof(SYSTEM_FMP_PRIVATE_DATA));
|
||||
mSystemFmpPrivate = AllocateZeroPool (sizeof (SYSTEM_FMP_PRIVATE_DATA));
|
||||
if (mSystemFmpPrivate == NULL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
Status = InitializePrivateData(mSystemFmpPrivate);
|
||||
if (EFI_ERROR(Status)) {
|
||||
FreePool(mSystemFmpPrivate);
|
||||
Status = InitializePrivateData (mSystemFmpPrivate);
|
||||
if (EFI_ERROR (Status)) {
|
||||
FreePool (mSystemFmpPrivate);
|
||||
mSystemFmpPrivate = NULL;
|
||||
return Status;
|
||||
}
|
||||
@@ -261,7 +261,7 @@ SystemFirmwareReportMainDxe (
|
||||
&mSystemFmpPrivate->Fmp
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
FreePool(mSystemFmpPrivate);
|
||||
FreePool (mSystemFmpPrivate);
|
||||
mSystemFmpPrivate = NULL;
|
||||
return Status;
|
||||
}
|
||||
|
@@ -18,9 +18,9 @@
|
||||
//
|
||||
// SystemFmp driver private data
|
||||
//
|
||||
SYSTEM_FMP_PRIVATE_DATA *mSystemFmpPrivate = NULL;
|
||||
SYSTEM_FMP_PRIVATE_DATA *mSystemFmpPrivate = NULL;
|
||||
|
||||
EFI_GUID mCurrentImageTypeId;
|
||||
EFI_GUID mCurrentImageTypeId;
|
||||
|
||||
BOOLEAN mNvRamUpdated = FALSE;
|
||||
|
||||
@@ -39,10 +39,10 @@ BOOLEAN mNvRamUpdated = FALSE;
|
||||
**/
|
||||
EFI_STATUS
|
||||
ParseUpdateDataFile (
|
||||
IN UINT8 *DataBuffer,
|
||||
IN UINTN BufferSize,
|
||||
IN OUT CONFIG_HEADER *ConfigHeader,
|
||||
IN OUT UPDATE_CONFIG_DATA **UpdateArray
|
||||
IN UINT8 *DataBuffer,
|
||||
IN UINTN BufferSize,
|
||||
IN OUT CONFIG_HEADER *ConfigHeader,
|
||||
IN OUT UPDATE_CONFIG_DATA **UpdateArray
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -72,15 +72,16 @@ PerformUpdate (
|
||||
IN UINTN EndPercentage
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS Status;
|
||||
|
||||
DEBUG((DEBUG_INFO, "PlatformUpdate:"));
|
||||
DEBUG((DEBUG_INFO, " BaseAddress - 0x%lx,", ConfigData->BaseAddress));
|
||||
DEBUG((DEBUG_INFO, " ImageOffset - 0x%x,", ConfigData->ImageOffset));
|
||||
DEBUG((DEBUG_INFO, " Legnth - 0x%x\n", ConfigData->Length));
|
||||
DEBUG ((DEBUG_INFO, "PlatformUpdate:"));
|
||||
DEBUG ((DEBUG_INFO, " BaseAddress - 0x%lx,", ConfigData->BaseAddress));
|
||||
DEBUG ((DEBUG_INFO, " ImageOffset - 0x%x,", ConfigData->ImageOffset));
|
||||
DEBUG ((DEBUG_INFO, " Legnth - 0x%x\n", ConfigData->Length));
|
||||
if (Progress != NULL) {
|
||||
Progress (StartPercentage);
|
||||
}
|
||||
|
||||
Status = PerformFlashWriteWithProgress (
|
||||
ConfigData->FirmwareType,
|
||||
ConfigData->BaseAddress,
|
||||
@@ -94,7 +95,8 @@ PerformUpdate (
|
||||
if (Progress != NULL) {
|
||||
Progress (EndPercentage);
|
||||
}
|
||||
if (!EFI_ERROR(Status)) {
|
||||
|
||||
if (!EFI_ERROR (Status)) {
|
||||
*LastAttemptStatus = LAST_ATTEMPT_STATUS_SUCCESS;
|
||||
if (ConfigData->FirmwareType == PlatformFirmwareTypeNvRam) {
|
||||
mNvRamUpdated = TRUE;
|
||||
@@ -102,6 +104,7 @@ PerformUpdate (
|
||||
} else {
|
||||
*LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
@@ -130,26 +133,27 @@ UpdateImage (
|
||||
IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UPDATE_CONFIG_DATA *ConfigData;
|
||||
UPDATE_CONFIG_DATA *UpdateConfigData;
|
||||
CONFIG_HEADER ConfigHeader;
|
||||
UINTN Index;
|
||||
UINTN TotalSize;
|
||||
UINTN BytesWritten;
|
||||
UINTN StartPercentage;
|
||||
UINTN EndPercentage;
|
||||
EFI_STATUS Status;
|
||||
UPDATE_CONFIG_DATA *ConfigData;
|
||||
UPDATE_CONFIG_DATA *UpdateConfigData;
|
||||
CONFIG_HEADER ConfigHeader;
|
||||
UINTN Index;
|
||||
UINTN TotalSize;
|
||||
UINTN BytesWritten;
|
||||
UINTN StartPercentage;
|
||||
UINTN EndPercentage;
|
||||
|
||||
if (ConfigImage == NULL) {
|
||||
DEBUG((DEBUG_INFO, "PlatformUpdate (NoConfig):"));
|
||||
DEBUG((DEBUG_INFO, " BaseAddress - 0x%x,", 0));
|
||||
DEBUG((DEBUG_INFO, " Length - 0x%x\n", SystemFirmwareImageSize));
|
||||
DEBUG ((DEBUG_INFO, "PlatformUpdate (NoConfig):"));
|
||||
DEBUG ((DEBUG_INFO, " BaseAddress - 0x%x,", 0));
|
||||
DEBUG ((DEBUG_INFO, " Length - 0x%x\n", SystemFirmwareImageSize));
|
||||
// ASSUME the whole System Firmware include NVRAM region.
|
||||
StartPercentage = 0;
|
||||
EndPercentage = 100;
|
||||
EndPercentage = 100;
|
||||
if (Progress != NULL) {
|
||||
Progress (StartPercentage);
|
||||
}
|
||||
|
||||
Status = PerformFlashWriteWithProgress (
|
||||
PlatformFirmwareTypeNvRam,
|
||||
0,
|
||||
@@ -163,57 +167,60 @@ UpdateImage (
|
||||
if (Progress != NULL) {
|
||||
Progress (EndPercentage);
|
||||
}
|
||||
if (!EFI_ERROR(Status)) {
|
||||
|
||||
if (!EFI_ERROR (Status)) {
|
||||
*LastAttemptStatus = LAST_ATTEMPT_STATUS_SUCCESS;
|
||||
mNvRamUpdated = TRUE;
|
||||
mNvRamUpdated = TRUE;
|
||||
} else {
|
||||
*LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
DEBUG((DEBUG_INFO, "PlatformUpdate (With Config):\n"));
|
||||
ConfigData = NULL;
|
||||
ZeroMem (&ConfigHeader, sizeof(ConfigHeader));
|
||||
Status = ParseUpdateDataFile (
|
||||
ConfigImage,
|
||||
ConfigImageSize,
|
||||
&ConfigHeader,
|
||||
&ConfigData
|
||||
);
|
||||
DEBUG((DEBUG_INFO, "ParseUpdateDataFile - %r\n", Status));
|
||||
if (EFI_ERROR(Status)) {
|
||||
DEBUG ((DEBUG_INFO, "PlatformUpdate (With Config):\n"));
|
||||
ConfigData = NULL;
|
||||
ZeroMem (&ConfigHeader, sizeof (ConfigHeader));
|
||||
Status = ParseUpdateDataFile (
|
||||
ConfigImage,
|
||||
ConfigImageSize,
|
||||
&ConfigHeader,
|
||||
&ConfigData
|
||||
);
|
||||
DEBUG ((DEBUG_INFO, "ParseUpdateDataFile - %r\n", Status));
|
||||
if (EFI_ERROR (Status)) {
|
||||
*LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL;
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
DEBUG((DEBUG_INFO, "ConfigHeader.NumOfUpdates - 0x%x\n", ConfigHeader.NumOfUpdates));
|
||||
DEBUG((DEBUG_INFO, "PcdEdkiiSystemFirmwareFileGuid - %g\n", PcdGetPtr(PcdEdkiiSystemFirmwareFileGuid)));
|
||||
|
||||
DEBUG ((DEBUG_INFO, "ConfigHeader.NumOfUpdates - 0x%x\n", ConfigHeader.NumOfUpdates));
|
||||
DEBUG ((DEBUG_INFO, "PcdEdkiiSystemFirmwareFileGuid - %g\n", PcdGetPtr (PcdEdkiiSystemFirmwareFileGuid)));
|
||||
|
||||
TotalSize = 0;
|
||||
for (Index = 0; Index < ConfigHeader.NumOfUpdates; Index++) {
|
||||
if (CompareGuid(&ConfigData[Index].FileGuid, PcdGetPtr(PcdEdkiiSystemFirmwareFileGuid))) {
|
||||
if (CompareGuid (&ConfigData[Index].FileGuid, PcdGetPtr (PcdEdkiiSystemFirmwareFileGuid))) {
|
||||
TotalSize = TotalSize + ConfigData[Index].Length;
|
||||
}
|
||||
}
|
||||
|
||||
BytesWritten = 0;
|
||||
Index = 0;
|
||||
BytesWritten = 0;
|
||||
Index = 0;
|
||||
UpdateConfigData = ConfigData;
|
||||
while (Index < ConfigHeader.NumOfUpdates) {
|
||||
if (CompareGuid(&UpdateConfigData->FileGuid, PcdGetPtr(PcdEdkiiSystemFirmwareFileGuid))) {
|
||||
DEBUG((DEBUG_INFO, "FileGuid - %g (processing)\n", &UpdateConfigData->FileGuid));
|
||||
if (CompareGuid (&UpdateConfigData->FileGuid, PcdGetPtr (PcdEdkiiSystemFirmwareFileGuid))) {
|
||||
DEBUG ((DEBUG_INFO, "FileGuid - %g (processing)\n", &UpdateConfigData->FileGuid));
|
||||
StartPercentage = (BytesWritten * 100) / TotalSize;
|
||||
EndPercentage = ((BytesWritten + UpdateConfigData->Length) * 100) / TotalSize;
|
||||
Status = PerformUpdate (
|
||||
SystemFirmwareImage,
|
||||
SystemFirmwareImageSize,
|
||||
UpdateConfigData,
|
||||
LastAttemptVersion,
|
||||
LastAttemptStatus,
|
||||
Progress,
|
||||
StartPercentage,
|
||||
EndPercentage
|
||||
);
|
||||
Status = PerformUpdate (
|
||||
SystemFirmwareImage,
|
||||
SystemFirmwareImageSize,
|
||||
UpdateConfigData,
|
||||
LastAttemptVersion,
|
||||
LastAttemptStatus,
|
||||
Progress,
|
||||
StartPercentage,
|
||||
EndPercentage
|
||||
);
|
||||
//
|
||||
// Shall updates be serialized so that if an update is not successfully completed,
|
||||
// the remaining updates won't be performed.
|
||||
@@ -222,7 +229,7 @@ UpdateImage (
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
DEBUG((DEBUG_INFO, "FileGuid - %g (ignored)\n", &UpdateConfigData->FileGuid));
|
||||
DEBUG ((DEBUG_INFO, "FileGuid - %g (ignored)\n", &UpdateConfigData->FileGuid));
|
||||
}
|
||||
|
||||
BytesWritten += UpdateConfigData->Length;
|
||||
@@ -258,38 +265,38 @@ SystemFirmwareAuthenticatedUpdate (
|
||||
IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
VOID *SystemFirmwareImage;
|
||||
UINTN SystemFirmwareImageSize;
|
||||
VOID *ConfigImage;
|
||||
UINTN ConfigImageSize;
|
||||
VOID *AuthenticatedImage;
|
||||
UINTN AuthenticatedImageSize;
|
||||
EFI_STATUS Status;
|
||||
VOID *SystemFirmwareImage;
|
||||
UINTN SystemFirmwareImageSize;
|
||||
VOID *ConfigImage;
|
||||
UINTN ConfigImageSize;
|
||||
VOID *AuthenticatedImage;
|
||||
UINTN AuthenticatedImageSize;
|
||||
|
||||
AuthenticatedImage = NULL;
|
||||
AuthenticatedImageSize = 0;
|
||||
|
||||
DEBUG((DEBUG_INFO, "SystemFirmwareAuthenticatedUpdate...\n"));
|
||||
DEBUG ((DEBUG_INFO, "SystemFirmwareAuthenticatedUpdate...\n"));
|
||||
|
||||
Status = CapsuleAuthenticateSystemFirmware(Image, ImageSize, FALSE, LastAttemptVersion, LastAttemptStatus, &AuthenticatedImage, &AuthenticatedImageSize);
|
||||
if (EFI_ERROR(Status)) {
|
||||
DEBUG((DEBUG_INFO, "SystemFirmwareAuthenticateImage - %r\n", Status));
|
||||
Status = CapsuleAuthenticateSystemFirmware (Image, ImageSize, FALSE, LastAttemptVersion, LastAttemptStatus, &AuthenticatedImage, &AuthenticatedImageSize);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_INFO, "SystemFirmwareAuthenticateImage - %r\n", Status));
|
||||
return Status;
|
||||
}
|
||||
|
||||
DEBUG((DEBUG_INFO, "ExtractSystemFirmwareImage ...\n"));
|
||||
ExtractSystemFirmwareImage(AuthenticatedImage, AuthenticatedImageSize, &SystemFirmwareImage, &SystemFirmwareImageSize);
|
||||
DEBUG((DEBUG_INFO, "ExtractConfigImage ...\n"));
|
||||
ExtractConfigImage(AuthenticatedImage, AuthenticatedImageSize, &ConfigImage, &ConfigImageSize);
|
||||
DEBUG ((DEBUG_INFO, "ExtractSystemFirmwareImage ...\n"));
|
||||
ExtractSystemFirmwareImage (AuthenticatedImage, AuthenticatedImageSize, &SystemFirmwareImage, &SystemFirmwareImageSize);
|
||||
DEBUG ((DEBUG_INFO, "ExtractConfigImage ...\n"));
|
||||
ExtractConfigImage (AuthenticatedImage, AuthenticatedImageSize, &ConfigImage, &ConfigImageSize);
|
||||
|
||||
DEBUG((DEBUG_INFO, "UpdateImage ...\n"));
|
||||
Status = UpdateImage(SystemFirmwareImage, SystemFirmwareImageSize, ConfigImage, ConfigImageSize, LastAttemptVersion, LastAttemptStatus, Progress);
|
||||
if (EFI_ERROR(Status)) {
|
||||
DEBUG((DEBUG_INFO, "UpdateImage - %r\n", Status));
|
||||
DEBUG ((DEBUG_INFO, "UpdateImage ...\n"));
|
||||
Status = UpdateImage (SystemFirmwareImage, SystemFirmwareImageSize, ConfigImage, ConfigImageSize, LastAttemptVersion, LastAttemptStatus, Progress);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_INFO, "UpdateImage - %r\n", Status));
|
||||
return Status;
|
||||
}
|
||||
|
||||
DEBUG((DEBUG_INFO, "SystemFirmwareAuthenticatedUpdate Done\n"));
|
||||
DEBUG ((DEBUG_INFO, "SystemFirmwareAuthenticatedUpdate Done\n"));
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
@@ -314,14 +321,14 @@ SystemFirmwareAuthenticatedUpdate (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
GetVariableHook (
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid,
|
||||
OUT UINT32 *Attributes OPTIONAL,
|
||||
IN OUT UINTN *DataSize,
|
||||
OUT VOID *Data
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid,
|
||||
OUT UINT32 *Attributes OPTIONAL,
|
||||
IN OUT UINTN *DataSize,
|
||||
OUT VOID *Data
|
||||
)
|
||||
{
|
||||
DEBUG((DEBUG_INFO, "GetVariableHook - %S, %g\n", VariableName, VendorGuid));
|
||||
DEBUG ((DEBUG_INFO, "GetVariableHook - %S, %g\n", VariableName, VendorGuid));
|
||||
return EFI_NOT_AVAILABLE_YET;
|
||||
}
|
||||
|
||||
@@ -342,12 +349,12 @@ GetVariableHook (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
GetNextVariableNameHook (
|
||||
IN OUT UINTN *VariableNameSize,
|
||||
IN OUT CHAR16 *VariableName,
|
||||
IN OUT EFI_GUID *VendorGuid
|
||||
IN OUT UINTN *VariableNameSize,
|
||||
IN OUT CHAR16 *VariableName,
|
||||
IN OUT EFI_GUID *VendorGuid
|
||||
)
|
||||
{
|
||||
DEBUG((DEBUG_INFO, "GetNextVariableNameHook - %S, %g\n", VariableName, VendorGuid));
|
||||
DEBUG ((DEBUG_INFO, "GetNextVariableNameHook - %S, %g\n", VariableName, VendorGuid));
|
||||
return EFI_NOT_AVAILABLE_YET;
|
||||
}
|
||||
|
||||
@@ -372,14 +379,14 @@ GetNextVariableNameHook (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SetVariableHook (
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid,
|
||||
IN UINT32 Attributes,
|
||||
IN UINTN DataSize,
|
||||
IN VOID *Data
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid,
|
||||
IN UINT32 Attributes,
|
||||
IN UINTN DataSize,
|
||||
IN VOID *Data
|
||||
)
|
||||
{
|
||||
DEBUG((DEBUG_INFO, "SetVariableHook - %S, %g, 0x%x (0x%x)\n", VariableName, VendorGuid, Attributes, DataSize));
|
||||
DEBUG ((DEBUG_INFO, "SetVariableHook - %S, %g, 0x%x (0x%x)\n", VariableName, VendorGuid, Attributes, DataSize));
|
||||
return EFI_NOT_AVAILABLE_YET;
|
||||
}
|
||||
|
||||
@@ -402,13 +409,13 @@ SetVariableHook (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
QueryVariableInfoHook (
|
||||
IN UINT32 Attributes,
|
||||
OUT UINT64 *MaximumVariableStorageSize,
|
||||
OUT UINT64 *RemainingVariableStorageSize,
|
||||
OUT UINT64 *MaximumVariableSize
|
||||
IN UINT32 Attributes,
|
||||
OUT UINT64 *MaximumVariableStorageSize,
|
||||
OUT UINT64 *RemainingVariableStorageSize,
|
||||
OUT UINT64 *MaximumVariableSize
|
||||
)
|
||||
{
|
||||
DEBUG((DEBUG_INFO, "QueryVariableInfoHook - 0x%x\n", Attributes));
|
||||
DEBUG ((DEBUG_INFO, "QueryVariableInfoHook - 0x%x\n", Attributes));
|
||||
return EFI_NOT_AVAILABLE_YET;
|
||||
}
|
||||
|
||||
@@ -461,32 +468,32 @@ QueryVariableInfoHook (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
FmpSetImage (
|
||||
IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
|
||||
IN UINT8 ImageIndex,
|
||||
IN CONST VOID *Image,
|
||||
IN UINTN ImageSize,
|
||||
IN CONST VOID *VendorCode,
|
||||
IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress,
|
||||
OUT CHAR16 **AbortReason
|
||||
IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
|
||||
IN UINT8 ImageIndex,
|
||||
IN CONST VOID *Image,
|
||||
IN UINTN ImageSize,
|
||||
IN CONST VOID *VendorCode,
|
||||
IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress,
|
||||
OUT CHAR16 **AbortReason
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS VarStatus;
|
||||
SYSTEM_FMP_PRIVATE_DATA *SystemFmpPrivate;
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS VarStatus;
|
||||
SYSTEM_FMP_PRIVATE_DATA *SystemFmpPrivate;
|
||||
|
||||
if (Image == NULL || ImageSize == 0 || AbortReason == NULL) {
|
||||
if ((Image == NULL) || (ImageSize == 0) || (AbortReason == NULL)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
SystemFmpPrivate = SYSTEM_FMP_PRIVATE_DATA_FROM_FMP(This);
|
||||
SystemFmpPrivate = SYSTEM_FMP_PRIVATE_DATA_FROM_FMP (This);
|
||||
*AbortReason = NULL;
|
||||
|
||||
if (ImageIndex == 0 || ImageIndex > SystemFmpPrivate->DescriptorCount) {
|
||||
if ((ImageIndex == 0) || (ImageIndex > SystemFmpPrivate->DescriptorCount)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
Status = SystemFirmwareAuthenticatedUpdate((VOID *)Image, ImageSize, &SystemFmpPrivate->LastAttempt.LastAttemptVersion, &SystemFmpPrivate->LastAttempt.LastAttemptStatus, Progress);
|
||||
DEBUG((DEBUG_INFO, "SetImage - LastAttempt Version - 0x%x, State - 0x%x\n", SystemFmpPrivate->LastAttempt.LastAttemptVersion, SystemFmpPrivate->LastAttempt.LastAttemptStatus));
|
||||
Status = SystemFirmwareAuthenticatedUpdate ((VOID *)Image, ImageSize, &SystemFmpPrivate->LastAttempt.LastAttemptVersion, &SystemFmpPrivate->LastAttempt.LastAttemptStatus, Progress);
|
||||
DEBUG ((DEBUG_INFO, "SetImage - LastAttempt Version - 0x%x, State - 0x%x\n", SystemFmpPrivate->LastAttempt.LastAttemptVersion, SystemFmpPrivate->LastAttempt.LastAttemptStatus));
|
||||
|
||||
//
|
||||
// If NVRAM is updated, we should no longer touch variable services, because
|
||||
@@ -501,20 +508,20 @@ FmpSetImage (
|
||||
|
||||
gRT->Hdr.CRC32 = 0;
|
||||
gBS->CalculateCrc32 (
|
||||
(UINT8 *) &gRT->Hdr,
|
||||
gRT->Hdr.HeaderSize,
|
||||
&gRT->Hdr.CRC32
|
||||
);
|
||||
(UINT8 *)&gRT->Hdr,
|
||||
gRT->Hdr.HeaderSize,
|
||||
&gRT->Hdr.CRC32
|
||||
);
|
||||
}
|
||||
|
||||
VarStatus = gRT->SetVariable(
|
||||
VarStatus = gRT->SetVariable (
|
||||
SYSTEM_FMP_LAST_ATTEMPT_VARIABLE_NAME,
|
||||
&gSystemFmpLastAttemptVariableGuid,
|
||||
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
|
||||
sizeof(SystemFmpPrivate->LastAttempt),
|
||||
sizeof (SystemFmpPrivate->LastAttempt),
|
||||
&SystemFmpPrivate->LastAttempt
|
||||
);
|
||||
DEBUG((DEBUG_INFO, "SetLastAttempt - %r\n", VarStatus));
|
||||
DEBUG ((DEBUG_INFO, "SetLastAttempt - %r\n", VarStatus));
|
||||
|
||||
return Status;
|
||||
}
|
||||
@@ -568,16 +575,16 @@ GetFmpImageDescriptors (
|
||||
// Determine the size required for the set of EFI_FIRMWARE_IMAGE_DESCRIPTORs.
|
||||
//
|
||||
ImageInfoSize = 0;
|
||||
Status = Fmp->GetImageInfo (
|
||||
Fmp, // FMP Pointer
|
||||
&ImageInfoSize, // Buffer Size (in this case 0)
|
||||
NULL, // NULL so we can get size
|
||||
&FmpImageInfoDescriptorVer, // DescriptorVersion
|
||||
FmpImageInfoCount, // DescriptorCount
|
||||
DescriptorSize, // DescriptorSize
|
||||
&PackageVersion, // PackageVersion
|
||||
&PackageVersionName // PackageVersionName
|
||||
);
|
||||
Status = Fmp->GetImageInfo (
|
||||
Fmp, // FMP Pointer
|
||||
&ImageInfoSize, // Buffer Size (in this case 0)
|
||||
NULL, // NULL so we can get size
|
||||
&FmpImageInfoDescriptorVer, // DescriptorVersion
|
||||
FmpImageInfoCount, // DescriptorCount
|
||||
DescriptorSize, // DescriptorSize
|
||||
&PackageVersion, // PackageVersion
|
||||
&PackageVersionName // PackageVersionName
|
||||
);
|
||||
if (Status != EFI_BUFFER_TOO_SMALL) {
|
||||
DEBUG ((DEBUG_ERROR, "SystemFirmwareUpdateDxe: Unexpected Failure. Status = %r\n", Status));
|
||||
return NULL;
|
||||
@@ -597,16 +604,16 @@ GetFmpImageDescriptors (
|
||||
// Retrieve the set of EFI_FIRMWARE_IMAGE_DESCRIPTORs.
|
||||
//
|
||||
PackageVersionName = NULL;
|
||||
Status = Fmp->GetImageInfo (
|
||||
Fmp,
|
||||
&ImageInfoSize, // ImageInfoSize
|
||||
FmpImageInfoBuf, // ImageInfo
|
||||
&FmpImageInfoDescriptorVer, // DescriptorVersion
|
||||
FmpImageInfoCount, // DescriptorCount
|
||||
DescriptorSize, // DescriptorSize
|
||||
&PackageVersion, // PackageVersion
|
||||
&PackageVersionName // PackageVersionName
|
||||
);
|
||||
Status = Fmp->GetImageInfo (
|
||||
Fmp,
|
||||
&ImageInfoSize, // ImageInfoSize
|
||||
FmpImageInfoBuf, // ImageInfo
|
||||
&FmpImageInfoDescriptorVer, // DescriptorVersion
|
||||
FmpImageInfoCount, // DescriptorCount
|
||||
DescriptorSize, // DescriptorSize
|
||||
&PackageVersion, // PackageVersion
|
||||
&PackageVersionName // PackageVersionName
|
||||
);
|
||||
|
||||
//
|
||||
// Free unused PackageVersionName return buffer
|
||||
@@ -621,6 +628,7 @@ GetFmpImageDescriptors (
|
||||
if (FmpImageInfoBuf != NULL) {
|
||||
FreePool (FmpImageInfoBuf);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -656,16 +664,16 @@ FindMatchingFmpHandles (
|
||||
UINTN DescriptorSize;
|
||||
BOOLEAN MatchFound;
|
||||
|
||||
*HandleCount = 0;
|
||||
*HandleCount = 0;
|
||||
TempHandleCount = 0;
|
||||
HandleBuffer = NULL;
|
||||
Status = gBS->LocateHandleBuffer (
|
||||
ByProtocol,
|
||||
ProtocolGuid,
|
||||
NULL,
|
||||
&TempHandleCount,
|
||||
&HandleBuffer
|
||||
);
|
||||
HandleBuffer = NULL;
|
||||
Status = gBS->LocateHandleBuffer (
|
||||
ByProtocol,
|
||||
ProtocolGuid,
|
||||
NULL,
|
||||
&TempHandleCount,
|
||||
&HandleBuffer
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return NULL;
|
||||
}
|
||||
@@ -688,21 +696,24 @@ FindMatchingFmpHandles (
|
||||
for (Index2 = 0; Index2 < FmpImageInfoCount; Index2++) {
|
||||
for (Index3 = 0; Index3 < mSystemFmpPrivate->DescriptorCount; Index3++) {
|
||||
MatchFound = CompareGuid (
|
||||
&FmpImageInfoBuf->ImageTypeId,
|
||||
&mSystemFmpPrivate->ImageDescriptor[Index3].ImageTypeId
|
||||
);
|
||||
&FmpImageInfoBuf->ImageTypeId,
|
||||
&mSystemFmpPrivate->ImageDescriptor[Index3].ImageTypeId
|
||||
);
|
||||
if (MatchFound) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (MatchFound) {
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
// Increment the buffer pointer ahead by the size of the descriptor
|
||||
//
|
||||
FmpImageInfoBuf = (EFI_FIRMWARE_IMAGE_DESCRIPTOR *)(((UINT8 *)FmpImageInfoBuf) + DescriptorSize);
|
||||
}
|
||||
|
||||
if (MatchFound) {
|
||||
HandleBuffer[*HandleCount] = HandleBuffer[Index];
|
||||
(*HandleCount)++;
|
||||
@@ -719,6 +730,7 @@ FindMatchingFmpHandles (
|
||||
FreePool (HandleBuffer);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return HandleBuffer;
|
||||
}
|
||||
|
||||
@@ -752,7 +764,7 @@ UninstallMatchingSystemFmpProtocols (
|
||||
DEBUG ((DEBUG_INFO, "SystemFirmwareUpdateDxe: Found %d matching System FMP instances\n", HandleCount));
|
||||
|
||||
for (Index = 0; Index < HandleCount; Index++) {
|
||||
Status = gBS->HandleProtocol(
|
||||
Status = gBS->HandleProtocol (
|
||||
HandleBuffer[Index],
|
||||
&gSystemFmpProtocolGuid,
|
||||
(VOID **)&SystemFmp
|
||||
@@ -760,6 +772,7 @@ UninstallMatchingSystemFmpProtocols (
|
||||
if (EFI_ERROR (Status)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
DEBUG ((DEBUG_INFO, "SystemFirmwareUpdateDxe: Uninstall SystemFmp produced by another capsule\n"));
|
||||
Status = gBS->UninstallProtocolInterface (
|
||||
HandleBuffer[Index],
|
||||
@@ -772,6 +785,7 @@ UninstallMatchingSystemFmpProtocols (
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
|
||||
if (HandleBuffer != NULL) {
|
||||
FreePool (HandleBuffer);
|
||||
}
|
||||
@@ -832,7 +846,7 @@ SystemFirmwareUpdateMainDxe (
|
||||
//
|
||||
// Look for a handle with matching Firmware Management Protocol
|
||||
//
|
||||
HandleCount = 0;
|
||||
HandleCount = 0;
|
||||
HandleBuffer = FindMatchingFmpHandles (
|
||||
&gEfiFirmwareManagementProtocolGuid,
|
||||
&HandleCount
|
||||
@@ -840,38 +854,38 @@ SystemFirmwareUpdateMainDxe (
|
||||
DEBUG ((DEBUG_INFO, "SystemFirmwareUpdateDxe: Found %d matching FMP instances\n", HandleCount));
|
||||
|
||||
switch (HandleCount) {
|
||||
case 0:
|
||||
//
|
||||
// Install FMP protocol onto a new handle.
|
||||
//
|
||||
DEBUG ((DEBUG_INFO, "SystemFirmwareUpdateDxe: Install FMP onto a new handle\n"));
|
||||
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||
&mSystemFmpPrivate->Handle,
|
||||
&gEfiFirmwareManagementProtocolGuid,
|
||||
&mSystemFmpPrivate->Fmp,
|
||||
NULL
|
||||
);
|
||||
break;
|
||||
case 1:
|
||||
//
|
||||
// Install System FMP protocol onto handle with matching FMP Protocol
|
||||
//
|
||||
DEBUG ((DEBUG_INFO, "SystemFirmwareUpdateDxe: Install System FMP onto matching FMP handle\n"));
|
||||
mSystemFmpPrivate->Handle = HandleBuffer[0];
|
||||
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||
&HandleBuffer[0],
|
||||
&gSystemFmpProtocolGuid,
|
||||
&mSystemFmpPrivate->Fmp,
|
||||
NULL
|
||||
);
|
||||
break;
|
||||
default:
|
||||
//
|
||||
// More than one matching handle is not expected. Unload driver.
|
||||
//
|
||||
DEBUG ((DEBUG_ERROR, "SystemFirmwareUpdateDxe: More than one matching FMP handle. Unload driver.\n"));
|
||||
Status = EFI_DEVICE_ERROR;
|
||||
break;
|
||||
case 0:
|
||||
//
|
||||
// Install FMP protocol onto a new handle.
|
||||
//
|
||||
DEBUG ((DEBUG_INFO, "SystemFirmwareUpdateDxe: Install FMP onto a new handle\n"));
|
||||
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||
&mSystemFmpPrivate->Handle,
|
||||
&gEfiFirmwareManagementProtocolGuid,
|
||||
&mSystemFmpPrivate->Fmp,
|
||||
NULL
|
||||
);
|
||||
break;
|
||||
case 1:
|
||||
//
|
||||
// Install System FMP protocol onto handle with matching FMP Protocol
|
||||
//
|
||||
DEBUG ((DEBUG_INFO, "SystemFirmwareUpdateDxe: Install System FMP onto matching FMP handle\n"));
|
||||
mSystemFmpPrivate->Handle = HandleBuffer[0];
|
||||
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||
&HandleBuffer[0],
|
||||
&gSystemFmpProtocolGuid,
|
||||
&mSystemFmpPrivate->Fmp,
|
||||
NULL
|
||||
);
|
||||
break;
|
||||
default:
|
||||
//
|
||||
// More than one matching handle is not expected. Unload driver.
|
||||
//
|
||||
DEBUG ((DEBUG_ERROR, "SystemFirmwareUpdateDxe: More than one matching FMP handle. Unload driver.\n"));
|
||||
Status = EFI_DEVICE_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
if (HandleBuffer != NULL) {
|
||||
|
Reference in New Issue
Block a user