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:
Michael Kubacki
2021-12-05 14:54:02 -08:00
committed by mergify[bot]
parent 7c7184e201
commit 1436aea4d5
994 changed files with 107608 additions and 101311 deletions

View File

@@ -59,11 +59,11 @@ AuthVariableLibInitialize (
EFI_STATUS
EFIAPI
AuthVariableLibProcessVariable (
IN CHAR16 *VariableName,
IN EFI_GUID *VendorGuid,
IN VOID *Data,
IN UINTN DataSize,
IN UINT32 Attributes
IN CHAR16 *VariableName,
IN EFI_GUID *VendorGuid,
IN VOID *Data,
IN UINTN DataSize,
IN UINT32 Attributes
)
{
ASSERT (FALSE);

View File

@@ -31,22 +31,22 @@
// BMP Image header for an uncompressed 24-bit per pixel BMP image.
//
const BMP_IMAGE_HEADER mBmpImageHeaderTemplate = {
'B', // CharB
'M', // CharM
0, // Size will be updated at runtime
{0, 0}, // Reserved
sizeof (BMP_IMAGE_HEADER), // ImageOffset
'B', // CharB
'M', // CharM
0, // Size will be updated at runtime
{ 0, 0 }, // Reserved
sizeof (BMP_IMAGE_HEADER), // ImageOffset
sizeof (BMP_IMAGE_HEADER) - OFFSET_OF (BMP_IMAGE_HEADER, HeaderSize), // HeaderSize
0, // PixelWidth will be updated at runtime
0, // PixelHeight will be updated at runtime
1, // Planes
24, // BitPerPixel
0, // CompressionType
0, // ImageSize will be updated at runtime
0, // XPixelsPerMeter
0, // YPixelsPerMeter
0, // NumberOfColors
0 // ImportantColors
0, // PixelWidth will be updated at runtime
0, // PixelHeight will be updated at runtime
1, // Planes
24, // BitPerPixel
0, // CompressionType
0, // ImageSize will be updated at runtime
0, // XPixelsPerMeter
0, // YPixelsPerMeter
0, // NumberOfColors
0 // ImportantColors
};
/**
@@ -104,10 +104,11 @@ TranslateBmpToGopBlt (
UINT32 DataSize;
UINT32 Temp;
if (BmpImage == NULL || GopBlt == NULL || GopBltSize == NULL) {
if ((BmpImage == NULL) || (GopBlt == NULL) || (GopBltSize == NULL)) {
return RETURN_INVALID_PARAMETER;
}
if (PixelHeight == NULL || PixelWidth == NULL) {
if ((PixelHeight == NULL) || (PixelWidth == NULL)) {
return RETURN_INVALID_PARAMETER;
}
@@ -118,7 +119,7 @@ TranslateBmpToGopBlt (
BmpHeader = (BMP_IMAGE_HEADER *)BmpImage;
if (BmpHeader->CharB != 'B' || BmpHeader->CharM != 'M') {
if ((BmpHeader->CharB != 'B') || (BmpHeader->CharM != 'M')) {
DEBUG ((DEBUG_ERROR, "TranslateBmpToGopBlt: BmpHeader->Char fields incorrect\n"));
return RETURN_UNSUPPORTED;
}
@@ -179,17 +180,18 @@ TranslateBmpToGopBlt (
}
DataSizePerLine = (DataSizePerLine >> 3) &(~0x3);
Status = SafeUint32Mult (
DataSizePerLine,
BmpHeader->PixelHeight,
&BltBufferSize
);
Status = SafeUint32Mult (
DataSizePerLine,
BmpHeader->PixelHeight,
&BltBufferSize
);
if (EFI_ERROR (Status)) {
DEBUG ((
DEBUG_ERROR,
"TranslateBmpToGopBlt: invalid BmpImage... DataSizePerLine:0x%x PixelHeight:0x%x\n",
DataSizePerLine, BmpHeader->PixelHeight
DataSizePerLine,
BmpHeader->PixelHeight
));
return RETURN_UNSUPPORTED;
@@ -205,7 +207,8 @@ TranslateBmpToGopBlt (
DEBUG ((
DEBUG_ERROR,
"TranslateBmpToGopBlt: invalid BmpImage... PixelHeight:0x%x DataSizePerLine:0x%x\n",
BmpHeader->PixelHeight, DataSizePerLine
BmpHeader->PixelHeight,
DataSizePerLine
));
return RETURN_UNSUPPORTED;
@@ -213,8 +216,8 @@ TranslateBmpToGopBlt (
if ((BmpHeader->Size != BmpImageSize) ||
(BmpHeader->Size < BmpHeader->ImageOffset) ||
(BmpHeader->Size - BmpHeader->ImageOffset != DataSize)) {
(BmpHeader->Size - BmpHeader->ImageOffset != DataSize))
{
DEBUG ((DEBUG_ERROR, "TranslateBmpToGopBlt: invalid BmpImage... \n"));
DEBUG ((DEBUG_ERROR, " BmpHeader->Size: 0x%x\n", BmpHeader->Size));
DEBUG ((DEBUG_ERROR, " BmpHeader->ImageOffset: 0x%x\n", BmpHeader->ImageOffset));
@@ -227,7 +230,7 @@ TranslateBmpToGopBlt (
//
// Calculate Color Map offset in the image.
//
Image = BmpImage;
Image = BmpImage;
BmpColorMap = (BMP_COLOR_MAP *)(Image + sizeof (BMP_IMAGE_HEADER));
if (BmpHeader->ImageOffset < sizeof (BMP_IMAGE_HEADER)) {
return RETURN_UNSUPPORTED;
@@ -235,19 +238,20 @@ TranslateBmpToGopBlt (
if (BmpHeader->ImageOffset > sizeof (BMP_IMAGE_HEADER)) {
switch (BmpHeader->BitPerPixel) {
case 1:
ColorMapNum = 2;
break;
case 4:
ColorMapNum = 16;
break;
case 8:
ColorMapNum = 256;
break;
default:
ColorMapNum = 0;
break;
case 1:
ColorMapNum = 2;
break;
case 4:
ColorMapNum = 16;
break;
case 8:
ColorMapNum = 256;
break;
default:
ColorMapNum = 0;
break;
}
//
// BMP file may has padding data between the bmp header section and the
// bmp data section.
@@ -260,7 +264,7 @@ TranslateBmpToGopBlt (
//
// Calculate graphics image data address in the image
//
Image = ((UINT8 *)BmpImage) + BmpHeader->ImageOffset;
Image = ((UINT8 *)BmpImage) + BmpHeader->ImageOffset;
ImageHeader = Image;
//
@@ -276,13 +280,14 @@ TranslateBmpToGopBlt (
DEBUG ((
DEBUG_ERROR,
"TranslateBmpToGopBlt: invalid BltBuffer needed size... PixelWidth:0x%x PixelHeight:0x%x\n",
BmpHeader->PixelWidth, BmpHeader->PixelHeight
BmpHeader->PixelWidth,
BmpHeader->PixelHeight
));
return RETURN_UNSUPPORTED;
}
Temp = BltBufferSize;
Temp = BltBufferSize;
Status = SafeUint32Mult (
BltBufferSize,
sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL),
@@ -293,7 +298,8 @@ TranslateBmpToGopBlt (
DEBUG ((
DEBUG_ERROR,
"TranslateBmpToGopBlt: invalid BltBuffer needed size... PixelWidth x PixelHeight:0x%x struct size:0x%x\n",
Temp, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
Temp,
sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
));
return RETURN_UNSUPPORTED;
@@ -306,7 +312,7 @@ TranslateBmpToGopBlt (
//
DEBUG ((DEBUG_INFO, "Bmp Support: Allocating 0x%X bytes of memory\n", BltBufferSize));
*GopBltSize = (UINTN)BltBufferSize;
*GopBlt = AllocatePool (*GopBltSize);
*GopBlt = AllocatePool (*GopBltSize);
IsAllocated = TRUE;
if (*GopBlt == NULL) {
return RETURN_OUT_OF_RESOURCES;
@@ -336,82 +342,83 @@ TranslateBmpToGopBlt (
//
BltBuffer = *GopBlt;
for (Height = 0; Height < BmpHeader->PixelHeight; Height++) {
Blt = &BltBuffer[ (BmpHeader->PixelHeight - Height - 1) * BmpHeader->PixelWidth];
Blt = &BltBuffer[(BmpHeader->PixelHeight - Height - 1) * BmpHeader->PixelWidth];
for (Width = 0; Width < BmpHeader->PixelWidth; Width++, Image++, Blt++) {
switch (BmpHeader->BitPerPixel) {
case 1:
//
// Translate 1-bit (2 colors) BMP to 24-bit color
//
for (Index = 0; Index < 8 && Width < BmpHeader->PixelWidth; Index++) {
Blt->Red = BmpColorMap[ ((*Image) >> (7 - Index)) & 0x1].Red;
Blt->Green = BmpColorMap[ ((*Image) >> (7 - Index)) & 0x1].Green;
Blt->Blue = BmpColorMap[ ((*Image) >> (7 - Index)) & 0x1].Blue;
Blt++;
Width++;
}
case 1:
//
// Translate 1-bit (2 colors) BMP to 24-bit color
//
for (Index = 0; Index < 8 && Width < BmpHeader->PixelWidth; Index++) {
Blt->Red = BmpColorMap[((*Image) >> (7 - Index)) & 0x1].Red;
Blt->Green = BmpColorMap[((*Image) >> (7 - Index)) & 0x1].Green;
Blt->Blue = BmpColorMap[((*Image) >> (7 - Index)) & 0x1].Blue;
Blt++;
Width++;
}
Blt--;
Width--;
break;
Blt--;
Width--;
break;
case 4:
//
// Translate 4-bit (16 colors) BMP Palette to 24-bit color
//
Index = (*Image) >> 4;
Blt->Red = BmpColorMap[Index].Red;
Blt->Green = BmpColorMap[Index].Green;
Blt->Blue = BmpColorMap[Index].Blue;
if (Width < (BmpHeader->PixelWidth - 1)) {
Blt++;
Width++;
Index = (*Image) & 0x0f;
case 4:
//
// Translate 4-bit (16 colors) BMP Palette to 24-bit color
//
Index = (*Image) >> 4;
Blt->Red = BmpColorMap[Index].Red;
Blt->Green = BmpColorMap[Index].Green;
Blt->Blue = BmpColorMap[Index].Blue;
}
break;
if (Width < (BmpHeader->PixelWidth - 1)) {
Blt++;
Width++;
Index = (*Image) & 0x0f;
Blt->Red = BmpColorMap[Index].Red;
Blt->Green = BmpColorMap[Index].Green;
Blt->Blue = BmpColorMap[Index].Blue;
}
case 8:
//
// Translate 8-bit (256 colors) BMP Palette to 24-bit color
//
Blt->Red = BmpColorMap[*Image].Red;
Blt->Green = BmpColorMap[*Image].Green;
Blt->Blue = BmpColorMap[*Image].Blue;
break;
break;
case 24:
//
// It is 24-bit BMP.
//
Blt->Blue = *Image++;
Blt->Green = *Image++;
Blt->Red = *Image;
break;
case 8:
//
// Translate 8-bit (256 colors) BMP Palette to 24-bit color
//
Blt->Red = BmpColorMap[*Image].Red;
Blt->Green = BmpColorMap[*Image].Green;
Blt->Blue = BmpColorMap[*Image].Blue;
break;
case 32:
//
//Conver 32 bit to 24bit bmp - just ignore the final byte of each pixel
Blt->Blue = *Image++;
Blt->Green = *Image++;
Blt->Red = *Image++;
break;
case 24:
//
// It is 24-bit BMP.
//
Blt->Blue = *Image++;
Blt->Green = *Image++;
Blt->Red = *Image;
break;
default:
//
// Other bit format BMP is not supported.
//
if (IsAllocated) {
FreePool (*GopBlt);
*GopBlt = NULL;
}
DEBUG ((DEBUG_ERROR, "Bmp Bit format not supported. 0x%X\n", BmpHeader->BitPerPixel));
return RETURN_UNSUPPORTED;
break;
};
case 32:
//
// Conver 32 bit to 24bit bmp - just ignore the final byte of each pixel
Blt->Blue = *Image++;
Blt->Green = *Image++;
Blt->Red = *Image++;
break;
default:
//
// Other bit format BMP is not supported.
//
if (IsAllocated) {
FreePool (*GopBlt);
*GopBlt = NULL;
}
DEBUG ((DEBUG_ERROR, "Bmp Bit format not supported. 0x%X\n", BmpHeader->BitPerPixel));
return RETURN_UNSUPPORTED;
break;
}
}
ImageIndex = (UINTN)Image - (UINTN)ImageHeader;
@@ -468,7 +475,7 @@ TranslateGopBltToBmp (
UINTN Row;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltPixel;
if (GopBlt == NULL || BmpImage == NULL || BmpImageSize == NULL) {
if ((GopBlt == NULL) || (BmpImage == NULL) || (BmpImageSize == NULL)) {
return RETURN_INVALID_PARAMETER;
}
@@ -494,6 +501,7 @@ TranslateGopBltToBmp (
));
return RETURN_UNSUPPORTED;
}
Status = SafeUint32Add (BmpSize, PaddingSize, &BmpSize);
if (EFI_ERROR (Status)) {
DEBUG ((
@@ -518,6 +526,7 @@ TranslateGopBltToBmp (
));
return RETURN_UNSUPPORTED;
}
Status = SafeUint32Add (BmpSize, sizeof (BMP_IMAGE_HEADER), &BmpSize);
if (EFI_ERROR (Status)) {
DEBUG ((
@@ -538,6 +547,7 @@ TranslateGopBltToBmp (
if (*BmpImage == NULL) {
return EFI_OUT_OF_RESOURCES;
}
*BmpImageSize = BmpSize;
} else if (*BmpImageSize < BmpSize) {
*BmpImageSize = BmpSize;

View File

@@ -59,8 +59,8 @@ GetHobList (
VOID *
EFIAPI
GetNextHob (
IN UINT16 Type,
IN CONST VOID *HobStart
IN UINT16 Type,
IN CONST VOID *HobStart
)
{
ASSERT (FALSE);
@@ -83,7 +83,7 @@ GetNextHob (
VOID *
EFIAPI
GetFirstHob (
IN UINT16 Type
IN UINT16 Type
)
{
ASSERT (FALSE);
@@ -115,8 +115,8 @@ GetFirstHob (
VOID *
EFIAPI
GetNextGuidHob (
IN CONST EFI_GUID *Guid,
IN CONST VOID *HobStart
IN CONST EFI_GUID *Guid,
IN CONST VOID *HobStart
)
{
ASSERT (FALSE);
@@ -144,7 +144,7 @@ GetNextGuidHob (
VOID *
EFIAPI
GetFirstGuidHob (
IN CONST EFI_GUID *Guid
IN CONST EFI_GUID *Guid
)
{
ASSERT (FALSE);
@@ -193,10 +193,10 @@ GetBootModeHob (
VOID
EFIAPI
BuildModuleHob (
IN CONST EFI_GUID *ModuleName,
IN EFI_PHYSICAL_ADDRESS MemoryAllocationModule,
IN UINT64 ModuleLength,
IN EFI_PHYSICAL_ADDRESS EntryPoint
IN CONST EFI_GUID *ModuleName,
IN EFI_PHYSICAL_ADDRESS MemoryAllocationModule,
IN UINT64 ModuleLength,
IN EFI_PHYSICAL_ADDRESS EntryPoint
)
{
ASSERT (FALSE);
@@ -283,8 +283,8 @@ BuildResourceDescriptorHob (
VOID *
EFIAPI
BuildGuidHob (
IN CONST EFI_GUID *Guid,
IN UINTN DataLength
IN CONST EFI_GUID *Guid,
IN UINTN DataLength
)
{
ASSERT (FALSE);
@@ -319,9 +319,9 @@ BuildGuidHob (
VOID *
EFIAPI
BuildGuidDataHob (
IN CONST EFI_GUID *Guid,
IN VOID *Data,
IN UINTN DataLength
IN CONST EFI_GUID *Guid,
IN VOID *Data,
IN UINTN DataLength
)
{
ASSERT (FALSE);
@@ -345,8 +345,8 @@ BuildGuidDataHob (
VOID
EFIAPI
BuildFvHob (
IN EFI_PHYSICAL_ADDRESS BaseAddress,
IN UINT64 Length
IN EFI_PHYSICAL_ADDRESS BaseAddress,
IN UINT64 Length
)
{
ASSERT (FALSE);
@@ -371,10 +371,10 @@ BuildFvHob (
VOID
EFIAPI
BuildFv2Hob (
IN EFI_PHYSICAL_ADDRESS BaseAddress,
IN UINT64 Length,
IN CONST EFI_GUID *FvName,
IN CONST EFI_GUID *FileName
IN EFI_PHYSICAL_ADDRESS BaseAddress,
IN UINT64 Length,
IN CONST EFI_GUID *FvName,
IN CONST EFI_GUID *FileName
)
{
ASSERT (FALSE);
@@ -404,12 +404,12 @@ BuildFv2Hob (
VOID
EFIAPI
BuildFv3Hob (
IN EFI_PHYSICAL_ADDRESS BaseAddress,
IN UINT64 Length,
IN UINT32 AuthenticationStatus,
IN BOOLEAN ExtractedFv,
IN CONST EFI_GUID *FvName OPTIONAL,
IN CONST EFI_GUID *FileName OPTIONAL
IN EFI_PHYSICAL_ADDRESS BaseAddress,
IN UINT64 Length,
IN UINT32 AuthenticationStatus,
IN BOOLEAN ExtractedFv,
IN CONST EFI_GUID *FvName OPTIONAL,
IN CONST EFI_GUID *FileName OPTIONAL
)
{
ASSERT (FALSE);
@@ -432,8 +432,8 @@ BuildFv3Hob (
VOID
EFIAPI
BuildCvHob (
IN EFI_PHYSICAL_ADDRESS BaseAddress,
IN UINT64 Length
IN EFI_PHYSICAL_ADDRESS BaseAddress,
IN UINT64 Length
)
{
ASSERT (FALSE);
@@ -455,8 +455,8 @@ BuildCvHob (
VOID
EFIAPI
BuildCpuHob (
IN UINT8 SizeOfMemorySpace,
IN UINT8 SizeOfIoSpace
IN UINT8 SizeOfMemorySpace,
IN UINT8 SizeOfIoSpace
)
{
ASSERT (FALSE);
@@ -478,8 +478,8 @@ BuildCpuHob (
VOID
EFIAPI
BuildStackHob (
IN EFI_PHYSICAL_ADDRESS BaseAddress,
IN UINT64 Length
IN EFI_PHYSICAL_ADDRESS BaseAddress,
IN UINT64 Length
)
{
ASSERT (FALSE);
@@ -502,9 +502,9 @@ BuildStackHob (
VOID
EFIAPI
BuildBspStoreHob (
IN EFI_PHYSICAL_ADDRESS BaseAddress,
IN UINT64 Length,
IN EFI_MEMORY_TYPE MemoryType
IN EFI_PHYSICAL_ADDRESS BaseAddress,
IN UINT64 Length,
IN EFI_MEMORY_TYPE MemoryType
)
{
ASSERT (FALSE);
@@ -527,9 +527,9 @@ BuildBspStoreHob (
VOID
EFIAPI
BuildMemoryAllocationHob (
IN EFI_PHYSICAL_ADDRESS BaseAddress,
IN UINT64 Length,
IN EFI_MEMORY_TYPE MemoryType
IN EFI_PHYSICAL_ADDRESS BaseAddress,
IN UINT64 Length,
IN EFI_MEMORY_TYPE MemoryType
)
{
ASSERT (FALSE);

View File

@@ -10,7 +10,6 @@
#include <Library/DebugLib.h>
#include <Library/IpmiLib.h>
/**
This service enables submitting commands via Ipmi.
@@ -32,12 +31,12 @@
EFI_STATUS
EFIAPI
IpmiSubmitCommand (
IN UINT8 NetFunction,
IN UINT8 Command,
IN UINT8 *RequestData,
IN UINT32 RequestDataSize,
OUT UINT8 *ResponseData,
IN OUT UINT32 *ResponseDataSize
IN UINT8 NetFunction,
IN UINT8 Command,
IN UINT8 *RequestData,
IN UINT32 RequestDataSize,
OUT UINT8 *ResponseData,
IN OUT UINT32 *ResponseDataSize
)
{
//

View File

@@ -7,13 +7,11 @@
**/
#include <Uefi/UefiBaseType.h>
#include <Library/DebugLib.h>
#include <Library/MemoryAllocationLib.h>
/**
Allocates one or more 4KB pages of type EfiBootServicesData.
@@ -562,7 +560,7 @@ ReallocateReservedPool (
VOID
EFIAPI
FreePool (
IN VOID *Buffer
IN VOID *Buffer
)
{
ASSERT (FALSE);

View File

@@ -26,6 +26,5 @@ PlatformHookSerialPortInitialize (
VOID
)
{
return RETURN_SUCCESS;
return RETURN_SUCCESS;
}

View File

@@ -72,8 +72,8 @@ ResetShutdown (
VOID
EFIAPI
ResetPlatformSpecific (
IN UINTN DataSize,
IN VOID *ResetData
IN UINTN DataSize,
IN VOID *ResetData
)
{
ResetCold ();
@@ -94,12 +94,11 @@ ResetPlatformSpecific (
VOID
EFIAPI
ResetSystem (
IN EFI_RESET_TYPE ResetType,
IN EFI_STATUS ResetStatus,
IN UINTN DataSize,
IN VOID *ResetData OPTIONAL
IN EFI_RESET_TYPE ResetType,
IN EFI_STATUS ResetStatus,
IN UINTN DataSize,
IN VOID *ResetData OPTIONAL
)
{
ASSERT (FALSE);
}

View File

@@ -22,41 +22,41 @@
//
// PCI Defintions.
//
#define PCI_BRIDGE_32_BIT_IO_SPACE 0x01
#define PCI_BRIDGE_32_BIT_IO_SPACE 0x01
//
// 16550 UART register offsets and bitfields
//
#define R_UART_RXBUF 0 // LCR_DLAB = 0
#define R_UART_TXBUF 0 // LCR_DLAB = 0
#define R_UART_BAUD_LOW 0 // LCR_DLAB = 1
#define R_UART_BAUD_HIGH 1 // LCR_DLAB = 1
#define R_UART_IER 1 // LCR_DLAB = 0
#define R_UART_FCR 2
#define B_UART_FCR_FIFOE BIT0
#define B_UART_FCR_FIFO64 BIT5
#define R_UART_LCR 3
#define B_UART_LCR_DLAB BIT7
#define R_UART_MCR 4
#define B_UART_MCR_DTRC BIT0
#define B_UART_MCR_RTS BIT1
#define R_UART_LSR 5
#define B_UART_LSR_RXRDY BIT0
#define B_UART_LSR_TXRDY BIT5
#define B_UART_LSR_TEMT BIT6
#define R_UART_MSR 6
#define B_UART_MSR_CTS BIT4
#define B_UART_MSR_DSR BIT5
#define B_UART_MSR_RI BIT6
#define B_UART_MSR_DCD BIT7
#define R_UART_RXBUF 0 // LCR_DLAB = 0
#define R_UART_TXBUF 0 // LCR_DLAB = 0
#define R_UART_BAUD_LOW 0 // LCR_DLAB = 1
#define R_UART_BAUD_HIGH 1 // LCR_DLAB = 1
#define R_UART_IER 1 // LCR_DLAB = 0
#define R_UART_FCR 2
#define B_UART_FCR_FIFOE BIT0
#define B_UART_FCR_FIFO64 BIT5
#define R_UART_LCR 3
#define B_UART_LCR_DLAB BIT7
#define R_UART_MCR 4
#define B_UART_MCR_DTRC BIT0
#define B_UART_MCR_RTS BIT1
#define R_UART_LSR 5
#define B_UART_LSR_RXRDY BIT0
#define B_UART_LSR_TXRDY BIT5
#define B_UART_LSR_TEMT BIT6
#define R_UART_MSR 6
#define B_UART_MSR_CTS BIT4
#define B_UART_MSR_DSR BIT5
#define B_UART_MSR_RI BIT6
#define B_UART_MSR_DCD BIT7
//
// 4-byte structure for each PCI node in PcdSerialPciDeviceInfo
//
typedef struct {
UINT8 Device;
UINT8 Function;
UINT16 PowerManagementStatusAndControlRegister;
UINT8 Device;
UINT8 Function;
UINT16 PowerManagementStatusAndControlRegister;
} PCI_UART_DEVICE_INFO;
/**
@@ -80,8 +80,9 @@ SerialPortReadRegister (
{
if (PcdGetBool (PcdSerialUseMmio)) {
if (PcdGet8 (PcdSerialRegisterAccessWidth) == 32) {
return (UINT8) MmioRead32 (Base + Offset * PcdGet32 (PcdSerialRegisterStride));
return (UINT8)MmioRead32 (Base + Offset * PcdGet32 (PcdSerialRegisterStride));
}
return MmioRead8 (Base + Offset * PcdGet32 (PcdSerialRegisterStride));
} else {
return IoRead8 (Base + Offset * PcdGet32 (PcdSerialRegisterStride));
@@ -111,8 +112,9 @@ SerialPortWriteRegister (
{
if (PcdGetBool (PcdSerialUseMmio)) {
if (PcdGet8 (PcdSerialRegisterAccessWidth) == 32) {
return (UINT8) MmioWrite32 (Base + Offset * PcdGet32 (PcdSerialRegisterStride), (UINT8)Value);
return (UINT8)MmioWrite32 (Base + Offset * PcdGet32 (PcdSerialRegisterStride), (UINT8)Value);
}
return MmioWrite8 (Base + Offset * PcdGet32 (PcdSerialRegisterStride), Value);
} else {
return IoWrite8 (Base + Offset * PcdGet32 (PcdSerialRegisterStride), Value);
@@ -145,6 +147,7 @@ SerialPortLibUpdatePciRegister16 (
if (CurrentValue != 0) {
return CurrentValue;
}
return PciWrite16 (PciAddress, Value & Mask);
}
@@ -176,6 +179,7 @@ SerialPortLibUpdatePciRegister32 (
if (CurrentValue != 0) {
return CurrentValue;
}
return PciWrite32 (PciAddress, Value & Mask);
}
@@ -212,7 +216,7 @@ GetSerialRegisterBase (
//
// Get PCI Device Info
//
DeviceInfo = (PCI_UART_DEVICE_INFO *) PcdGetPtr (PcdSerialPciDeviceInfo);
DeviceInfo = (PCI_UART_DEVICE_INFO *)PcdGetPtr (PcdSerialPciDeviceInfo);
//
// If PCI Device Info is empty, then assume fixed address UART and return PcdSerialRegisterBase
@@ -244,7 +248,7 @@ GetSerialRegisterBase (
//
BusNumber = PciRead8 (PciLibAddress + PCI_BRIDGE_SECONDARY_BUS_REGISTER_OFFSET);
SubordinateBusNumber = PciRead8 (PciLibAddress + PCI_BRIDGE_SUBORDINATE_BUS_REGISTER_OFFSET);
if (BusNumber == 0 || BusNumber > SubordinateBusNumber) {
if ((BusNumber == 0) || (BusNumber > SubordinateBusNumber)) {
return 0;
}
@@ -265,20 +269,22 @@ GetSerialRegisterBase (
//
// If PCI Bridge MMIO window is not in the address range decoded by the parent PCI Bridge, then return 0
//
if (MemoryBase < ParentMemoryBase || MemoryBase > ParentMemoryLimit || MemoryLimit > ParentMemoryLimit) {
if ((MemoryBase < ParentMemoryBase) || (MemoryBase > ParentMemoryLimit) || (MemoryLimit > ParentMemoryLimit)) {
return 0;
}
ParentMemoryBase = MemoryBase;
ParentMemoryLimit = MemoryLimit;
} else {
IoLimit = PciRead8 (PciLibAddress + OFFSET_OF (PCI_TYPE01, Bridge.IoLimit));
if ((IoLimit & PCI_BRIDGE_32_BIT_IO_SPACE ) == 0) {
if ((IoLimit & PCI_BRIDGE_32_BIT_IO_SPACE) == 0) {
IoLimit = IoLimit >> 4;
} else {
IoLimit = (PciRead16 (PciLibAddress + OFFSET_OF (PCI_TYPE01, Bridge.IoLimitUpper16)) << 4) | (IoLimit >> 4);
}
IoBase = PciRead8 (PciLibAddress + OFFSET_OF (PCI_TYPE01, Bridge.IoBase));
if ((IoBase & PCI_BRIDGE_32_BIT_IO_SPACE ) == 0) {
if ((IoBase & PCI_BRIDGE_32_BIT_IO_SPACE) == 0) {
IoBase = IoBase >> 4;
} else {
IoBase = (PciRead16 (PciLibAddress + OFFSET_OF (PCI_TYPE01, Bridge.IoBaseUpper16)) << 4) | (IoBase >> 4);
@@ -294,9 +300,10 @@ GetSerialRegisterBase (
//
// If PCI Bridge I/O window is not in the address range decoded by the parent PCI Bridge, then return 0
//
if (IoBase < ParentIoBase || IoBase > ParentIoLimit || IoLimit > ParentIoLimit) {
if ((IoBase < ParentIoBase) || (IoBase > ParentIoLimit) || (IoLimit > ParentIoLimit)) {
return 0;
}
ParentIoBase = IoBase;
ParentIoLimit = IoLimit;
}
@@ -311,7 +318,7 @@ GetSerialRegisterBase (
// Find the first IO or MMIO BAR
//
RegisterBaseMask = 0xFFFFFFF0;
for (BarIndex = 0; BarIndex < PCI_MAX_BAR; BarIndex ++) {
for (BarIndex = 0; BarIndex < PCI_MAX_BAR; BarIndex++) {
SerialRegisterBase = PciRead32 (PciLibAddress + PCI_BASE_ADDRESSREG_OFFSET + BarIndex * 4);
if (PcdGetBool (PcdSerialUseMmio) && ((SerialRegisterBase & BIT0) == 0)) {
//
@@ -350,11 +357,11 @@ GetSerialRegisterBase (
// Verify that the UART BAR is in the address range decoded by the parent PCI Bridge
//
if (PcdGetBool (PcdSerialUseMmio)) {
if (((SerialRegisterBase >> 16) & 0xfff0) < ParentMemoryBase || ((SerialRegisterBase >> 16) & 0xfff0) > ParentMemoryLimit) {
if ((((SerialRegisterBase >> 16) & 0xfff0) < ParentMemoryBase) || (((SerialRegisterBase >> 16) & 0xfff0) > ParentMemoryLimit)) {
return 0;
}
} else {
if ((SerialRegisterBase >> 12) < ParentIoBase || (SerialRegisterBase >> 12) > ParentIoLimit) {
if (((SerialRegisterBase >> 12) < ParentIoBase) || ((SerialRegisterBase >> 12) > ParentIoLimit)) {
return 0;
}
}
@@ -372,7 +379,7 @@ GetSerialRegisterBase (
//
if (DeviceInfo->PowerManagementStatusAndControlRegister != 0x00) {
if ((PciRead16 (PciLibAddress + DeviceInfo->PowerManagementStatusAndControlRegister) & (BIT0 | BIT1)) != 0x00) {
PciAnd16 (PciLibAddress + DeviceInfo->PowerManagementStatusAndControlRegister, (UINT16)~(BIT0 | BIT1));
PciAnd16 (PciLibAddress + DeviceInfo->PowerManagementStatusAndControlRegister, (UINT16) ~(BIT0 | BIT1));
//
// If PCI UART was not in D0, then make sure FIFOs are enabled, but do not reset FIFOs
//
@@ -383,7 +390,7 @@ GetSerialRegisterBase (
//
// Get PCI Device Info
//
DeviceInfo = (PCI_UART_DEVICE_INFO *) PcdGetPtr (PcdSerialPciDeviceInfo);
DeviceInfo = (PCI_UART_DEVICE_INFO *)PcdGetPtr (PcdSerialPciDeviceInfo);
//
// Enable I/O or MMIO in PCI Bridge
@@ -408,7 +415,7 @@ GetSerialRegisterBase (
//
if (DeviceInfo->PowerManagementStatusAndControlRegister != 0x00) {
if ((PciRead16 (PciLibAddress + DeviceInfo->PowerManagementStatusAndControlRegister) & (BIT0 | BIT1)) != 0x00) {
PciAnd16 (PciLibAddress + DeviceInfo->PowerManagementStatusAndControlRegister, (UINT16)~(BIT0 | BIT1));
PciAnd16 (PciLibAddress + DeviceInfo->PowerManagementStatusAndControlRegister, (UINT16) ~(BIT0 | BIT1));
}
}
@@ -445,7 +452,7 @@ SerialPortWritable (
// 1 0 Cable connected, but not clear to send. Wait
// 1 1 Cable connected, and clear to send. Transmit
//
return (BOOLEAN) ((SerialPortReadRegister (SerialRegisterBase, R_UART_MSR) & (B_UART_MSR_DSR | B_UART_MSR_CTS)) == (B_UART_MSR_DSR | B_UART_MSR_CTS));
return (BOOLEAN)((SerialPortReadRegister (SerialRegisterBase, R_UART_MSR) & (B_UART_MSR_DSR | B_UART_MSR_CTS)) == (B_UART_MSR_DSR | B_UART_MSR_CTS));
} else {
//
// Wait for both DSR and CTS to be set OR for DSR to be clear.
@@ -459,7 +466,7 @@ SerialPortWritable (
// 1 0 Cable connected, but not clear to send. Wait
// 1 1 Cable connected, and clar to send. Transmit
//
return (BOOLEAN) ((SerialPortReadRegister (SerialRegisterBase, R_UART_MSR) & (B_UART_MSR_DSR | B_UART_MSR_CTS)) != (B_UART_MSR_DSR));
return (BOOLEAN)((SerialPortReadRegister (SerialRegisterBase, R_UART_MSR) & (B_UART_MSR_DSR | B_UART_MSR_CTS)) != (B_UART_MSR_DSR));
}
}
@@ -511,7 +518,7 @@ SerialPortInitialize (
// Get the base address of the serial port in either I/O or MMIO space
//
SerialRegisterBase = GetSerialRegisterBase ();
if (SerialRegisterBase ==0) {
if (SerialRegisterBase == 0) {
return RETURN_DEVICE_ERROR;
}
@@ -522,13 +529,15 @@ SerialPortInitialize (
if ((SerialPortReadRegister (SerialRegisterBase, R_UART_LCR) & 0x3F) != (PcdGet8 (PcdSerialLineControl) & 0x3F)) {
Initialized = FALSE;
}
SerialPortWriteRegister (SerialRegisterBase, R_UART_LCR, (UINT8)(SerialPortReadRegister (SerialRegisterBase, R_UART_LCR) | B_UART_LCR_DLAB));
CurrentDivisor = SerialPortReadRegister (SerialRegisterBase, R_UART_BAUD_HIGH) << 8;
CurrentDivisor |= (UINT32) SerialPortReadRegister (SerialRegisterBase, R_UART_BAUD_LOW);
CurrentDivisor = SerialPortReadRegister (SerialRegisterBase, R_UART_BAUD_HIGH) << 8;
CurrentDivisor |= (UINT32)SerialPortReadRegister (SerialRegisterBase, R_UART_BAUD_LOW);
SerialPortWriteRegister (SerialRegisterBase, R_UART_LCR, (UINT8)(SerialPortReadRegister (SerialRegisterBase, R_UART_LCR) & ~B_UART_LCR_DLAB));
if (CurrentDivisor != Divisor) {
Initialized = FALSE;
}
if (Initialized) {
return RETURN_SUCCESS;
}
@@ -537,14 +546,15 @@ SerialPortInitialize (
// Wait for the serial port to be ready.
// Verify that both the transmit FIFO and the shift register are empty.
//
while ((SerialPortReadRegister (SerialRegisterBase, R_UART_LSR) & (B_UART_LSR_TEMT | B_UART_LSR_TXRDY)) != (B_UART_LSR_TEMT | B_UART_LSR_TXRDY));
while ((SerialPortReadRegister (SerialRegisterBase, R_UART_LSR) & (B_UART_LSR_TEMT | B_UART_LSR_TXRDY)) != (B_UART_LSR_TEMT | B_UART_LSR_TXRDY)) {
}
//
// Configure baud rate
//
SerialPortWriteRegister (SerialRegisterBase, R_UART_LCR, B_UART_LCR_DLAB);
SerialPortWriteRegister (SerialRegisterBase, R_UART_BAUD_HIGH, (UINT8) (Divisor >> 8));
SerialPortWriteRegister (SerialRegisterBase, R_UART_BAUD_LOW, (UINT8) (Divisor & 0xff));
SerialPortWriteRegister (SerialRegisterBase, R_UART_BAUD_HIGH, (UINT8)(Divisor >> 8));
SerialPortWriteRegister (SerialRegisterBase, R_UART_BAUD_LOW, (UINT8)(Divisor & 0xff));
//
// Clear DLAB and configure Data Bits, Parity, and Stop Bits.
@@ -594,8 +604,8 @@ SerialPortInitialize (
UINTN
EFIAPI
SerialPortWrite (
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
)
{
UINTN SerialRegisterBase;
@@ -608,7 +618,7 @@ SerialPortWrite (
}
SerialRegisterBase = GetSerialRegisterBase ();
if (SerialRegisterBase ==0) {
if (SerialRegisterBase == 0) {
return 0;
}
@@ -620,12 +630,15 @@ SerialPortWrite (
//
// Wait for both the transmit FIFO and shift register empty.
//
while ((SerialPortReadRegister (SerialRegisterBase, R_UART_LSR) & (B_UART_LSR_TEMT | B_UART_LSR_TXRDY)) != (B_UART_LSR_TEMT | B_UART_LSR_TXRDY));
while ((SerialPortReadRegister (SerialRegisterBase, R_UART_LSR) & (B_UART_LSR_TEMT | B_UART_LSR_TXRDY)) != (B_UART_LSR_TEMT | B_UART_LSR_TXRDY)) {
}
//
// Wait for the hardware flow control signal
//
while (!SerialPortWritable (SerialRegisterBase));
while (!SerialPortWritable (SerialRegisterBase)) {
}
return 0;
}
@@ -647,7 +660,8 @@ SerialPortWrite (
// Wait for the serial port to be ready, to make sure both the transmit FIFO
// and shift register empty.
//
while ((SerialPortReadRegister (SerialRegisterBase, R_UART_LSR) & (B_UART_LSR_TEMT | B_UART_LSR_TXRDY)) != (B_UART_LSR_TEMT | B_UART_LSR_TXRDY));
while ((SerialPortReadRegister (SerialRegisterBase, R_UART_LSR) & (B_UART_LSR_TEMT | B_UART_LSR_TXRDY)) != (B_UART_LSR_TEMT | B_UART_LSR_TXRDY)) {
}
//
// Fill then entire Tx FIFO
@@ -656,7 +670,8 @@ SerialPortWrite (
//
// Wait for the hardware flow control signal
//
while (!SerialPortWritable (SerialRegisterBase));
while (!SerialPortWritable (SerialRegisterBase)) {
}
//
// Write byte to the transmit buffer.
@@ -664,6 +679,7 @@ SerialPortWrite (
SerialPortWriteRegister (SerialRegisterBase, R_UART_TXBUF, *Buffer);
}
}
return Result;
}
@@ -681,8 +697,8 @@ SerialPortWrite (
UINTN
EFIAPI
SerialPortRead (
OUT UINT8 *Buffer,
IN UINTN NumberOfBytes
OUT UINT8 *Buffer,
IN UINTN NumberOfBytes
)
{
UINTN SerialRegisterBase;
@@ -694,7 +710,7 @@ SerialPortRead (
}
SerialRegisterBase = GetSerialRegisterBase ();
if (SerialRegisterBase ==0) {
if (SerialRegisterBase == 0) {
return 0;
}
@@ -712,6 +728,7 @@ SerialPortRead (
SerialPortWriteRegister (SerialRegisterBase, R_UART_MCR, (UINT8)(Mcr | B_UART_MCR_RTS));
}
}
if (PcdGetBool (PcdSerialUseHardwareFlowControl)) {
//
// Clear RTS to prevent peer from sending data
@@ -728,7 +745,6 @@ SerialPortRead (
return Result;
}
/**
Polls a serial device to see if there is any data waiting to be read.
@@ -749,7 +765,7 @@ SerialPortPoll (
UINTN SerialRegisterBase;
SerialRegisterBase = GetSerialRegisterBase ();
if (SerialRegisterBase ==0) {
if (SerialRegisterBase == 0) {
return FALSE;
}
@@ -763,6 +779,7 @@ SerialPortPoll (
//
SerialPortWriteRegister (SerialRegisterBase, R_UART_MCR, (UINT8)(SerialPortReadRegister (SerialRegisterBase, R_UART_MCR) & ~B_UART_MCR_RTS));
}
return TRUE;
}
@@ -789,29 +806,30 @@ SerialPortPoll (
RETURN_STATUS
EFIAPI
SerialPortSetControl (
IN UINT32 Control
IN UINT32 Control
)
{
UINTN SerialRegisterBase;
UINT8 Mcr;
UINTN SerialRegisterBase;
UINT8 Mcr;
//
// First determine the parameter is invalid.
//
if ((Control & (~(EFI_SERIAL_REQUEST_TO_SEND | EFI_SERIAL_DATA_TERMINAL_READY |
EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE))) != 0) {
EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE))) != 0)
{
return RETURN_UNSUPPORTED;
}
SerialRegisterBase = GetSerialRegisterBase ();
if (SerialRegisterBase ==0) {
if (SerialRegisterBase == 0) {
return RETURN_UNSUPPORTED;
}
//
// Read the Modem Control Register.
//
Mcr = SerialPortReadRegister (SerialRegisterBase, R_UART_MCR);
Mcr = SerialPortReadRegister (SerialRegisterBase, R_UART_MCR);
Mcr &= (~(B_UART_MCR_DTRC | B_UART_MCR_RTS));
if ((Control & EFI_SERIAL_DATA_TERMINAL_READY) == EFI_SERIAL_DATA_TERMINAL_READY) {
@@ -843,16 +861,16 @@ SerialPortSetControl (
RETURN_STATUS
EFIAPI
SerialPortGetControl (
OUT UINT32 *Control
OUT UINT32 *Control
)
{
UINTN SerialRegisterBase;
UINT8 Msr;
UINT8 Mcr;
UINT8 Lsr;
UINTN SerialRegisterBase;
UINT8 Msr;
UINT8 Mcr;
UINT8 Lsr;
SerialRegisterBase = GetSerialRegisterBase ();
if (SerialRegisterBase ==0) {
if (SerialRegisterBase == 0) {
return RETURN_UNSUPPORTED;
}
@@ -948,24 +966,24 @@ SerialPortGetControl (
RETURN_STATUS
EFIAPI
SerialPortSetAttributes (
IN OUT UINT64 *BaudRate,
IN OUT UINT32 *ReceiveFifoDepth,
IN OUT UINT32 *Timeout,
IN OUT EFI_PARITY_TYPE *Parity,
IN OUT UINT8 *DataBits,
IN OUT EFI_STOP_BITS_TYPE *StopBits
IN OUT UINT64 *BaudRate,
IN OUT UINT32 *ReceiveFifoDepth,
IN OUT UINT32 *Timeout,
IN OUT EFI_PARITY_TYPE *Parity,
IN OUT UINT8 *DataBits,
IN OUT EFI_STOP_BITS_TYPE *StopBits
)
{
UINTN SerialRegisterBase;
UINT32 SerialBaudRate;
UINTN Divisor;
UINT8 Lcr;
UINT8 LcrData;
UINT8 LcrParity;
UINT8 LcrStop;
UINTN SerialRegisterBase;
UINT32 SerialBaudRate;
UINTN Divisor;
UINT8 Lcr;
UINT8 LcrData;
UINT8 LcrParity;
UINT8 LcrStop;
SerialRegisterBase = GetSerialRegisterBase ();
if (SerialRegisterBase ==0) {
if (SerialRegisterBase == 0) {
return RETURN_UNSUPPORTED;
}
@@ -975,23 +993,25 @@ SerialPortSetAttributes (
if (*BaudRate == 0) {
*BaudRate = PcdGet32 (PcdSerialBaudRate);
}
SerialBaudRate = (UINT32) *BaudRate;
SerialBaudRate = (UINT32)*BaudRate;
if (*DataBits == 0) {
LcrData = (UINT8) (PcdGet8 (PcdSerialLineControl) & 0x3);
LcrData = (UINT8)(PcdGet8 (PcdSerialLineControl) & 0x3);
*DataBits = LcrData + 5;
} else {
if ((*DataBits < 5) || (*DataBits > 8)) {
return RETURN_INVALID_PARAMETER;
}
//
// Map 5..8 to 0..3
//
LcrData = (UINT8) (*DataBits - (UINT8) 5);
LcrData = (UINT8)(*DataBits - (UINT8)5);
}
if (*Parity == DefaultParity) {
LcrParity = (UINT8) ((PcdGet8 (PcdSerialLineControl) >> 3) & 0x7);
LcrParity = (UINT8)((PcdGet8 (PcdSerialLineControl) >> 3) & 0x7);
switch (LcrParity) {
case 0:
*Parity = NoParity;
@@ -1044,7 +1064,7 @@ SerialPortSetAttributes (
}
if (*StopBits == DefaultStopBits) {
LcrStop = (UINT8) ((PcdGet8 (PcdSerialLineControl) >> 2) & 0x1);
LcrStop = (UINT8)((PcdGet8 (PcdSerialLineControl) >> 2) & 0x1);
switch (LcrStop) {
case 0:
*StopBits = OneStopBit;
@@ -1056,6 +1076,7 @@ SerialPortSetAttributes (
} else {
*StopBits = TwoStopBits;
}
break;
default:
@@ -1090,15 +1111,15 @@ SerialPortSetAttributes (
// Configure baud rate
//
SerialPortWriteRegister (SerialRegisterBase, R_UART_LCR, B_UART_LCR_DLAB);
SerialPortWriteRegister (SerialRegisterBase, R_UART_BAUD_HIGH, (UINT8) (Divisor >> 8));
SerialPortWriteRegister (SerialRegisterBase, R_UART_BAUD_LOW, (UINT8) (Divisor & 0xff));
SerialPortWriteRegister (SerialRegisterBase, R_UART_BAUD_HIGH, (UINT8)(Divisor >> 8));
SerialPortWriteRegister (SerialRegisterBase, R_UART_BAUD_LOW, (UINT8)(Divisor & 0xff));
//
// Clear DLAB and configure Data Bits, Parity, and Stop Bits.
// Strip reserved bits from line control value
//
Lcr = (UINT8) ((LcrParity << 3) | (LcrStop << 2) | LcrData);
SerialPortWriteRegister (SerialRegisterBase, R_UART_LCR, (UINT8) (Lcr & 0x3F));
Lcr = (UINT8)((LcrParity << 3) | (LcrStop << 2) | LcrData);
SerialPortWriteRegister (SerialRegisterBase, R_UART_LCR, (UINT8)(Lcr & 0x3F));
return RETURN_SUCCESS;
}

View File

@@ -34,19 +34,19 @@
VOID
EFIAPI
PerformQuickSort (
IN OUT VOID *BufferToSort,
IN CONST UINTN Count,
IN CONST UINTN ElementSize,
IN SORT_COMPARE CompareFunction
IN OUT VOID *BufferToSort,
IN CONST UINTN Count,
IN CONST UINTN ElementSize,
IN SORT_COMPARE CompareFunction
)
{
VOID *Buffer;
ASSERT(BufferToSort != NULL);
ASSERT(CompareFunction != NULL);
ASSERT (BufferToSort != NULL);
ASSERT (CompareFunction != NULL);
Buffer = AllocateZeroPool(ElementSize);
ASSERT(Buffer != NULL);
Buffer = AllocateZeroPool (ElementSize);
ASSERT (Buffer != NULL);
QuickSort (
BufferToSort,
@@ -56,7 +56,7 @@ PerformQuickSort (
Buffer
);
FreePool(Buffer);
FreePool (Buffer);
return;
}
@@ -71,11 +71,11 @@ PerformQuickSort (
INTN
EFIAPI
DevicePathCompare (
IN CONST VOID *Buffer1,
IN CONST VOID *Buffer2
IN CONST VOID *Buffer1,
IN CONST VOID *Buffer2
)
{
ASSERT(FALSE);
ASSERT (FALSE);
return 0;
}
@@ -90,15 +90,14 @@ DevicePathCompare (
INTN
EFIAPI
StringNoCaseCompare (
IN CONST VOID *Buffer1,
IN CONST VOID *Buffer2
IN CONST VOID *Buffer1,
IN CONST VOID *Buffer2
)
{
ASSERT(FALSE);
ASSERT (FALSE);
return 0;
}
/**
Not supported in Base version.
@@ -110,12 +109,10 @@ StringNoCaseCompare (
INTN
EFIAPI
StringCompare (
IN CONST VOID *Buffer1,
IN CONST VOID *Buffer2
IN CONST VOID *Buffer1,
IN CONST VOID *Buffer2
)
{
ASSERT(FALSE);
ASSERT (FALSE);
return 0;
}

View File

@@ -24,16 +24,16 @@
/// HII specific Vendor Device Path definition.
///
typedef struct {
VENDOR_DEVICE_PATH VendorDevicePath;
EFI_DEVICE_PATH_PROTOCOL End;
VENDOR_DEVICE_PATH VendorDevicePath;
EFI_DEVICE_PATH_PROTOCOL End;
} HII_VENDOR_DEVICE_PATH;
extern UINT8 BootDiscoveryPolicyUiLibVfrBin[];
extern UINT8 BootDiscoveryPolicyUiLibVfrBin[];
EFI_HII_HANDLE mBPHiiHandle = NULL;
EFI_HII_HANDLE mBPHiiHandle = NULL;
EFI_HANDLE mBPDriverHandle = NULL;
STATIC HII_VENDOR_DEVICE_PATH mVendorDevicePath = {
STATIC HII_VENDOR_DEVICE_PATH mVendorDevicePath = {
{
{
HARDWARE_DEVICE_PATH,
@@ -69,15 +69,15 @@ STATIC HII_VENDOR_DEVICE_PATH mVendorDevicePath = {
EFI_STATUS
EFIAPI
BootDiscoveryPolicyUiLibConstructor (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;
UINTN Size;
UINT32 BootDiscoveryPolicy;
EFI_STATUS Status;
UINTN Size;
UINT32 BootDiscoveryPolicy;
Size = sizeof (UINT32);
Size = sizeof (UINT32);
Status = gRT->GetVariable (
BOOT_DISCOVERY_POLICY_VAR,
&gBootDiscoveryPolicyMgrFormsetGuid,
@@ -141,7 +141,6 @@ BootDiscoveryPolicyUiLibDestructor (
IN EFI_SYSTEM_TABLE *SystemTable
)
{
if (mBPDriverHandle != NULL) {
gBS->UninstallProtocolInterface (
mBPDriverHandle,

View File

@@ -35,35 +35,35 @@ BootLogoEnableLogo (
VOID
)
{
EFI_STATUS Status;
EDKII_PLATFORM_LOGO_PROTOCOL *PlatformLogo;
EDKII_PLATFORM_LOGO_DISPLAY_ATTRIBUTE Attribute;
INTN OffsetX;
INTN OffsetY;
UINT32 SizeOfX;
UINT32 SizeOfY;
INTN DestX;
INTN DestY;
UINT32 Instance;
EFI_IMAGE_INPUT Image;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Blt;
EFI_UGA_DRAW_PROTOCOL *UgaDraw;
UINT32 ColorDepth;
UINT32 RefreshRate;
EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
EFI_BOOT_LOGO_PROTOCOL *BootLogo;
EDKII_BOOT_LOGO2_PROTOCOL *BootLogo2;
UINTN NumberOfLogos;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *LogoBlt;
UINTN LogoDestX;
UINTN LogoDestY;
UINTN LogoHeight;
UINTN LogoWidth;
UINTN NewDestX;
UINTN NewDestY;
UINTN BufferSize;
EFI_STATUS Status;
EDKII_PLATFORM_LOGO_PROTOCOL *PlatformLogo;
EDKII_PLATFORM_LOGO_DISPLAY_ATTRIBUTE Attribute;
INTN OffsetX;
INTN OffsetY;
UINT32 SizeOfX;
UINT32 SizeOfY;
INTN DestX;
INTN DestY;
UINT32 Instance;
EFI_IMAGE_INPUT Image;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Blt;
EFI_UGA_DRAW_PROTOCOL *UgaDraw;
UINT32 ColorDepth;
UINT32 RefreshRate;
EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
EFI_BOOT_LOGO_PROTOCOL *BootLogo;
EDKII_BOOT_LOGO2_PROTOCOL *BootLogo2;
UINTN NumberOfLogos;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *LogoBlt;
UINTN LogoDestX;
UINTN LogoDestY;
UINTN LogoHeight;
UINTN LogoWidth;
UINTN NewDestX;
UINTN NewDestY;
UINTN BufferSize;
Status = gBS->LocateProtocol (&gEdkiiPlatformLogoProtocolGuid, NULL, (VOID **) &PlatformLogo);
Status = gBS->LocateProtocol (&gEdkiiPlatformLogoProtocolGuid, NULL, (VOID **)&PlatformLogo);
if (EFI_ERROR (Status)) {
return EFI_UNSUPPORTED;
}
@@ -72,17 +72,18 @@ BootLogoEnableLogo (
//
// Try to open GOP first
//
Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiGraphicsOutputProtocolGuid, (VOID **) &GraphicsOutput);
Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiGraphicsOutputProtocolGuid, (VOID **)&GraphicsOutput);
if (EFI_ERROR (Status) && FeaturePcdGet (PcdUgaConsumeSupport)) {
GraphicsOutput = NULL;
//
// Open GOP failed, try to open UGA
//
Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiUgaDrawProtocolGuid, (VOID **) &UgaDraw);
Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiUgaDrawProtocolGuid, (VOID **)&UgaDraw);
if (EFI_ERROR (Status)) {
UgaDraw = NULL;
}
}
if (EFI_ERROR (Status)) {
return EFI_UNSUPPORTED;
}
@@ -90,7 +91,7 @@ BootLogoEnableLogo (
//
// Try to open Boot Logo Protocol.
//
Status = gBS->LocateProtocol (&gEfiBootLogoProtocolGuid, NULL, (VOID **) &BootLogo);
Status = gBS->LocateProtocol (&gEfiBootLogoProtocolGuid, NULL, (VOID **)&BootLogo);
if (EFI_ERROR (Status)) {
BootLogo = NULL;
}
@@ -98,7 +99,7 @@ BootLogoEnableLogo (
//
// Try to open Boot Logo 2 Protocol.
//
Status = gBS->LocateProtocol (&gEdkiiBootLogo2ProtocolGuid, NULL, (VOID **) &BootLogo2);
Status = gBS->LocateProtocol (&gEdkiiBootLogo2ProtocolGuid, NULL, (VOID **)&BootLogo2);
if (EFI_ERROR (Status)) {
BootLogo2 = NULL;
}
@@ -111,7 +112,6 @@ BootLogoEnableLogo (
if (GraphicsOutput != NULL) {
SizeOfX = GraphicsOutput->Mode->Info->HorizontalResolution;
SizeOfY = GraphicsOutput->Mode->Info->VerticalResolution;
} else {
ASSERT (UgaDraw != NULL);
Status = UgaDraw->GetMode (UgaDraw, &SizeOfX, &SizeOfY, &ColorDepth, &RefreshRate);
@@ -120,17 +120,17 @@ BootLogoEnableLogo (
}
}
Blt = NULL;
Blt = NULL;
NumberOfLogos = 0;
LogoDestX = 0;
LogoDestY = 0;
LogoHeight = 0;
LogoWidth = 0;
NewDestX = 0;
NewDestY = 0;
Instance = 0;
DestX = 0;
DestY = 0;
LogoDestX = 0;
LogoDestY = 0;
LogoHeight = 0;
LogoWidth = 0;
NewDestX = 0;
NewDestY = 0;
Instance = 0;
DestX = 0;
DestY = 0;
while (TRUE) {
//
// Get image from PlatformLogo protocol.
@@ -150,55 +150,56 @@ BootLogoEnableLogo (
if (Blt != NULL) {
FreePool (Blt);
}
Blt = Image.Bitmap;
//
// Calculate the display position according to Attribute.
//
switch (Attribute) {
case EdkiiPlatformLogoDisplayAttributeLeftTop:
DestX = 0;
DestY = 0;
break;
case EdkiiPlatformLogoDisplayAttributeCenterTop:
DestX = (SizeOfX - Image.Width) / 2;
DestY = 0;
break;
case EdkiiPlatformLogoDisplayAttributeRightTop:
DestX = SizeOfX - Image.Width;
DestY = 0;
break;
case EdkiiPlatformLogoDisplayAttributeLeftTop:
DestX = 0;
DestY = 0;
break;
case EdkiiPlatformLogoDisplayAttributeCenterTop:
DestX = (SizeOfX - Image.Width) / 2;
DestY = 0;
break;
case EdkiiPlatformLogoDisplayAttributeRightTop:
DestX = SizeOfX - Image.Width;
DestY = 0;
break;
case EdkiiPlatformLogoDisplayAttributeCenterLeft:
DestX = 0;
DestY = (SizeOfY - Image.Height) / 2;
break;
case EdkiiPlatformLogoDisplayAttributeCenter:
DestX = (SizeOfX - Image.Width) / 2;
DestY = (SizeOfY - Image.Height) / 2;
break;
case EdkiiPlatformLogoDisplayAttributeCenterRight:
DestX = SizeOfX - Image.Width;
DestY = (SizeOfY - Image.Height) / 2;
break;
case EdkiiPlatformLogoDisplayAttributeCenterLeft:
DestX = 0;
DestY = (SizeOfY - Image.Height) / 2;
break;
case EdkiiPlatformLogoDisplayAttributeCenter:
DestX = (SizeOfX - Image.Width) / 2;
DestY = (SizeOfY - Image.Height) / 2;
break;
case EdkiiPlatformLogoDisplayAttributeCenterRight:
DestX = SizeOfX - Image.Width;
DestY = (SizeOfY - Image.Height) / 2;
break;
case EdkiiPlatformLogoDisplayAttributeLeftBottom:
DestX = 0;
DestY = SizeOfY - Image.Height;
break;
case EdkiiPlatformLogoDisplayAttributeCenterBottom:
DestX = (SizeOfX - Image.Width) / 2;
DestY = SizeOfY - Image.Height;
break;
case EdkiiPlatformLogoDisplayAttributeRightBottom:
DestX = SizeOfX - Image.Width;
DestY = SizeOfY - Image.Height;
break;
case EdkiiPlatformLogoDisplayAttributeLeftBottom:
DestX = 0;
DestY = SizeOfY - Image.Height;
break;
case EdkiiPlatformLogoDisplayAttributeCenterBottom:
DestX = (SizeOfX - Image.Width) / 2;
DestY = SizeOfY - Image.Height;
break;
case EdkiiPlatformLogoDisplayAttributeRightBottom:
DestX = SizeOfX - Image.Width;
DestY = SizeOfY - Image.Height;
break;
default:
ASSERT (FALSE);
continue;
break;
default:
ASSERT (FALSE);
continue;
break;
}
DestX += OffsetX;
@@ -212,8 +213,8 @@ BootLogoEnableLogo (
EfiBltBufferToVideo,
0,
0,
(UINTN) DestX,
(UINTN) DestY,
(UINTN)DestX,
(UINTN)DestY,
Image.Width,
Image.Height,
Image.Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
@@ -222,12 +223,12 @@ BootLogoEnableLogo (
ASSERT (UgaDraw != NULL);
Status = UgaDraw->Blt (
UgaDraw,
(EFI_UGA_PIXEL *) Blt,
(EFI_UGA_PIXEL *)Blt,
EfiUgaBltBufferToVideo,
0,
0,
(UINTN) DestX,
(UINTN) DestY,
(UINTN)DestX,
(UINTN)DestY,
Image.Width,
Image.Height,
Image.Width * sizeof (EFI_UGA_PIXEL)
@@ -244,18 +245,18 @@ BootLogoEnableLogo (
//
// The first Logo.
//
LogoDestX = (UINTN) DestX;
LogoDestY = (UINTN) DestY;
LogoWidth = Image.Width;
LogoDestX = (UINTN)DestX;
LogoDestY = (UINTN)DestY;
LogoWidth = Image.Width;
LogoHeight = Image.Height;
} else {
//
// Merge new logo with old one.
//
NewDestX = MIN ((UINTN) DestX, LogoDestX);
NewDestY = MIN ((UINTN) DestY, LogoDestY);
LogoWidth = MAX ((UINTN) DestX + Image.Width, LogoDestX + LogoWidth) - NewDestX;
LogoHeight = MAX ((UINTN) DestY + Image.Height, LogoDestY + LogoHeight) - NewDestY;
NewDestX = MIN ((UINTN)DestX, LogoDestX);
NewDestY = MIN ((UINTN)DestY, LogoDestY);
LogoWidth = MAX ((UINTN)DestX + Image.Width, LogoDestX + LogoWidth) - NewDestX;
LogoHeight = MAX ((UINTN)DestY + Image.Height, LogoDestY + LogoHeight) - NewDestY;
LogoDestX = NewDestX;
LogoDestY = NewDestY;
@@ -264,7 +265,7 @@ BootLogoEnableLogo (
}
}
if ((BootLogo == NULL && BootLogo2 == NULL) || NumberOfLogos == 0) {
if (((BootLogo == NULL) && (BootLogo2 == NULL)) || (NumberOfLogos == 0)) {
//
// No logo displayed.
//
@@ -283,7 +284,7 @@ BootLogoEnableLogo (
// Only one logo displayed, use its Blt buffer directly for BootLogo protocol.
//
LogoBlt = Blt;
Status = EFI_SUCCESS;
Status = EFI_SUCCESS;
} else {
//
// More than one Logo displayed, get merged BltBuffer using VideoToBuffer operation.
@@ -298,6 +299,7 @@ BootLogoEnableLogo (
if (LogoHeight > MAX_UINTN / LogoWidth / sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)) {
return EFI_UNSUPPORTED;
}
BufferSize = LogoWidth * LogoHeight * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL);
LogoBlt = AllocatePool (BufferSize);
@@ -307,21 +309,21 @@ BootLogoEnableLogo (
if (GraphicsOutput != NULL) {
Status = GraphicsOutput->Blt (
GraphicsOutput,
LogoBlt,
EfiBltVideoToBltBuffer,
LogoDestX,
LogoDestY,
0,
0,
LogoWidth,
LogoHeight,
LogoWidth * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
);
GraphicsOutput,
LogoBlt,
EfiBltVideoToBltBuffer,
LogoDestX,
LogoDestY,
0,
0,
LogoWidth,
LogoHeight,
LogoWidth * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
);
} else {
Status = UgaDraw->Blt (
UgaDraw,
(EFI_UGA_PIXEL *) LogoBlt,
(EFI_UGA_PIXEL *)LogoBlt,
EfiUgaVideoToBltBuffer,
LogoDestX,
LogoDestY,
@@ -341,19 +343,22 @@ BootLogoEnableLogo (
if (BootLogo2 != NULL) {
Status = BootLogo2->SetBootLogo (BootLogo2, LogoBlt, LogoDestX, LogoDestY, LogoWidth, LogoHeight);
}
//
// If Boot Logo 2 Protocol is not available or registration with Boot Logo 2
// Protocol failed, then attempt to register logo with Boot Logo Protocol
//
if (EFI_ERROR (Status) && BootLogo != NULL) {
if (EFI_ERROR (Status) && (BootLogo != NULL)) {
Status = BootLogo->SetBootLogo (BootLogo, LogoBlt, LogoDestX, LogoDestY, LogoWidth, LogoHeight);
}
//
// Status of this function is EFI_SUCCESS even if registration with Boot
// Logo 2 Protocol or Boot Logo Protocol fails.
//
Status = EFI_SUCCESS;
}
FreePool (LogoBlt);
return Status;
@@ -372,7 +377,6 @@ BootLogoDisableLogo (
VOID
)
{
//
// Enable Cursor on Screen
//
@@ -380,7 +384,6 @@ BootLogoDisableLogo (
return EFI_SUCCESS;
}
/**
Update progress bar with title above it. It only works in Graphics mode.
@@ -398,12 +401,12 @@ BootLogoDisableLogo (
EFI_STATUS
EFIAPI
BootLogoUpdateProgress (
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleForeground,
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleBackground,
IN CHAR16 *Title,
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL ProgressColor,
IN UINTN Progress,
IN UINTN PreviousValue
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleForeground,
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleBackground,
IN CHAR16 *Title,
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL ProgressColor,
IN UINTN Progress,
IN UINTN PreviousValue
)
{
EFI_STATUS Status;
@@ -426,15 +429,16 @@ BootLogoUpdateProgress (
}
UgaDraw = NULL;
Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiGraphicsOutputProtocolGuid, (VOID **) &GraphicsOutput);
Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiGraphicsOutputProtocolGuid, (VOID **)&GraphicsOutput);
if (EFI_ERROR (Status) && FeaturePcdGet (PcdUgaConsumeSupport)) {
GraphicsOutput = NULL;
Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiUgaDrawProtocolGuid, (VOID **) &UgaDraw);
Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiUgaDrawProtocolGuid, (VOID **)&UgaDraw);
if (EFI_ERROR (Status)) {
UgaDraw = NULL;
}
}
if (EFI_ERROR (Status)) {
return EFI_UNSUPPORTED;
}
@@ -462,10 +466,10 @@ BootLogoUpdateProgress (
BlockWidth = SizeOfX / 100;
BlockHeight = SizeOfY / 50;
BlockNum = Progress;
BlockNum = Progress;
PosX = 0;
PosY = SizeOfY * 48 / 50;
PosX = 0;
PosY = SizeOfY * 48 / 50;
if (BlockNum == 0) {
//
@@ -475,21 +479,21 @@ BootLogoUpdateProgress (
if (GraphicsOutput != NULL) {
Status = GraphicsOutput->Blt (
GraphicsOutput,
&Color,
EfiBltVideoFill,
0,
0,
0,
PosY - EFI_GLYPH_HEIGHT - 1,
SizeOfX,
SizeOfY - (PosY - EFI_GLYPH_HEIGHT - 1),
SizeOfX * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
);
GraphicsOutput,
&Color,
EfiBltVideoFill,
0,
0,
0,
PosY - EFI_GLYPH_HEIGHT - 1,
SizeOfX,
SizeOfY - (PosY - EFI_GLYPH_HEIGHT - 1),
SizeOfX * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
);
} else if (FeaturePcdGet (PcdUgaConsumeSupport)) {
Status = UgaDraw->Blt (
UgaDraw,
(EFI_UGA_PIXEL *) &Color,
(EFI_UGA_PIXEL *)&Color,
EfiUgaVideoFill,
0,
0,
@@ -503,6 +507,7 @@ BootLogoUpdateProgress (
return EFI_UNSUPPORTED;
}
}
//
// Show progress by drawing blocks
//
@@ -510,21 +515,21 @@ BootLogoUpdateProgress (
PosX = Index * BlockWidth;
if (GraphicsOutput != NULL) {
Status = GraphicsOutput->Blt (
GraphicsOutput,
&ProgressColor,
EfiBltVideoFill,
0,
0,
PosX,
PosY,
BlockWidth - 1,
BlockHeight,
(BlockWidth) * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
);
GraphicsOutput,
&ProgressColor,
EfiBltVideoFill,
0,
0,
PosX,
PosY,
BlockWidth - 1,
BlockHeight,
(BlockWidth) * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
);
} else if (FeaturePcdGet (PcdUgaConsumeSupport)) {
Status = UgaDraw->Blt (
UgaDraw,
(EFI_UGA_PIXEL *) &ProgressColor,
(EFI_UGA_PIXEL *)&ProgressColor,
EfiUgaVideoFill,
0,
0,

View File

@@ -23,8 +23,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
EFI_STATUS
EfiLibDeleteVariable (
IN CHAR16 *VarName,
IN EFI_GUID *VarGuid
IN CHAR16 *VarName,
IN EFI_GUID *VarGuid
)
{
return gRT->SetVariable (
@@ -49,11 +49,11 @@ EfiLibDeleteVariable (
**/
UINTN
EfiDevicePathInstanceCount (
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
)
{
UINTN Count;
UINTN Size;
UINTN Count;
UINTN Size;
Count = 0;
while (GetNextDevicePathInstance (&DevicePath, &Size) != NULL) {
@@ -76,7 +76,7 @@ EfiDevicePathInstanceCount (
**/
UINT16 *
EfiLibStrFromDatahub (
IN EFI_DEVICE_PATH_PROTOCOL *DevPath
IN EFI_DEVICE_PATH_PROTOCOL *DevPath
)
{
return NULL;

View File

@@ -44,8 +44,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
/// HII specific Vendor Device Path definition.
///
typedef struct {
VENDOR_DEVICE_PATH VendorDevicePath;
EFI_DEVICE_PATH_PROTOCOL End;
VENDOR_DEVICE_PATH VendorDevicePath;
EFI_DEVICE_PATH_PROTOCOL End;
} HII_VENDOR_DEVICE_PATH;
#pragma pack()
@@ -53,19 +53,19 @@ typedef struct {
// Constants which are variable names used to access variables
//
#define VAR_CON_OUT_MODE L"ConOutMode"
#define VAR_CON_OUT_MODE L"ConOutMode"
//
// Variable created with this flag will be "Efi:...."
//
#define VAR_FLAG EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE
extern EFI_GUID mBootMaintGuid;
extern CHAR16 mBootMaintStorageName[];
extern EFI_GUID mBootMaintGuid;
extern CHAR16 mBootMaintStorageName[];
//
// These are the VFR compiler generated data representing our VFR data.
//
extern UINT8 BootMaintenanceManagerBin[];
extern UINT8 BootMaintenanceManagerBin[];
//
// Below are the number of options in Baudrate, Databits,
@@ -79,7 +79,7 @@ extern UINT8 BootMaintenanceManagerBin[];
//
// Callback function helper
//
#define BMM_CALLBACK_DATA_SIGNATURE SIGNATURE_32 ('C', 'b', 'c', 'k')
#define BMM_CALLBACK_DATA_SIGNATURE SIGNATURE_32 ('C', 'b', 'c', 'k')
#define BMM_CALLBACK_DATA_FROM_THIS(a) CR (a, BMM_CALLBACK_DATA, BmmConfigAccess, BMM_CALLBACK_DATA_SIGNATURE)
//
@@ -88,7 +88,7 @@ extern UINT8 BootMaintenanceManagerBin[];
typedef UINT8 BBS_TYPE;
typedef enum _TYPE_OF_TERMINAL {
TerminalTypePcAnsi = 0,
TerminalTypePcAnsi = 0,
TerminalTypeVt100,
TerminalTypeVt100Plus,
TerminalTypeVtUtf8,
@@ -110,20 +110,20 @@ typedef enum _TYPE_OF_TERMINAL {
#define BM_TERMINAL_OPTION_SIGNATURE SIGNATURE_32 ('t', 'r', 'm', 'l')
#define BM_MENU_ENTRY_SIGNATURE SIGNATURE_32 ('e', 'n', 't', 'r')
#define BM_LOAD_CONTEXT_SELECT 0x0
#define BM_CONSOLE_CONTEXT_SELECT 0x1
#define BM_FILE_CONTEXT_SELECT 0x2
#define BM_HANDLE_CONTEXT_SELECT 0x3
#define BM_TERMINAL_CONTEXT_SELECT 0x5
#define BM_LOAD_CONTEXT_SELECT 0x0
#define BM_CONSOLE_CONTEXT_SELECT 0x1
#define BM_FILE_CONTEXT_SELECT 0x2
#define BM_HANDLE_CONTEXT_SELECT 0x3
#define BM_TERMINAL_CONTEXT_SELECT 0x5
#define BM_CONSOLE_IN_CONTEXT_SELECT 0x6
#define BM_CONSOLE_OUT_CONTEXT_SELECT 0x7
#define BM_CONSOLE_ERR_CONTEXT_SELECT 0x8
#define BM_CONSOLE_IN_CONTEXT_SELECT 0x6
#define BM_CONSOLE_OUT_CONTEXT_SELECT 0x7
#define BM_CONSOLE_ERR_CONTEXT_SELECT 0x8
//
// Buffer size for update data
//
#define UPDATE_DATA_SIZE 0x100000
#define UPDATE_DATA_SIZE 0x100000
//
// Namespace of callback keys used in display and file system navigation
@@ -148,12 +148,12 @@ typedef enum _TYPE_OF_TERMINAL {
// all these values are computed from the structure
// defined below
//
#define VAR_OFFSET(Field) ((UINT16) ((UINTN) &(((BMM_FAKE_NV_DATA *) 0)->Field)))
#define VAR_OFFSET(Field) ((UINT16) ((UINTN) &(((BMM_FAKE_NV_DATA *) 0)->Field)))
//
// Question Id of Zero is invalid, so add an offset to it
//
#define QUESTION_ID(Field) (VAR_OFFSET (Field) + CONFIG_OPTION_OFFSET)
#define QUESTION_ID(Field) (VAR_OFFSET (Field) + CONFIG_OPTION_OFFSET)
#define BOOT_TIME_OUT_VAR_OFFSET VAR_OFFSET (BootTimeOut)
#define BOOT_NEXT_VAR_OFFSET VAR_OFFSET (BootNext)
@@ -193,47 +193,47 @@ typedef enum _TYPE_OF_TERMINAL {
#define COM_TERMINAL_VAR_OFFSET VAR_OFFSET (COMTerminalType)
#define COM_FLOWCONTROL_VAR_OFFSET VAR_OFFSET (COMFlowControl)
#define BOOT_TIME_OUT_QUESTION_ID QUESTION_ID (BootTimeOut)
#define BOOT_NEXT_QUESTION_ID QUESTION_ID (BootNext)
#define COM1_BAUD_RATE_QUESTION_ID QUESTION_ID (COM1BaudRate)
#define COM1_DATA_RATE_QUESTION_ID QUESTION_ID (COM1DataRate)
#define COM1_STOP_BITS_QUESTION_ID QUESTION_ID (COM1StopBits)
#define COM1_PARITY_QUESTION_ID QUESTION_ID (COM1Parity)
#define COM1_TERMINAL_QUESTION_ID QUESTION_ID (COM2TerminalType)
#define COM2_BAUD_RATE_QUESTION_ID QUESTION_ID (COM2BaudRate)
#define COM2_DATA_RATE_QUESTION_ID QUESTION_ID (COM2DataRate)
#define COM2_STOP_BITS_QUESTION_ID QUESTION_ID (COM2StopBits)
#define COM2_PARITY_QUESTION_ID QUESTION_ID (COM2Parity)
#define COM2_TERMINAL_QUESTION_ID QUESTION_ID (COM2TerminalType)
#define DRV_ADD_HANDLE_DESC_QUESTION_ID QUESTION_ID (DriverAddHandleDesc)
#define DRV_ADD_ACTIVE_QUESTION_ID QUESTION_ID (DriverAddActive)
#define DRV_ADD_RECON_QUESTION_ID QUESTION_ID (DriverAddForceReconnect)
#define CON_IN_COM1_QUESTION_ID QUESTION_ID (ConsoleInputCOM1)
#define CON_IN_COM2_QUESTION_ID QUESTION_ID (ConsoleInputCOM2)
#define CON_OUT_COM1_QUESTION_ID QUESTION_ID (ConsoleOutputCOM1)
#define CON_OUT_COM2_QUESTION_ID QUESTION_ID (ConsoleOutputCOM2)
#define CON_ERR_COM1_QUESTION_ID QUESTION_ID (ConsoleErrorCOM1)
#define CON_ERR_COM2_QUESTION_ID QUESTION_ID (ConsoleErrorCOM2)
#define CON_MODE_QUESTION_ID QUESTION_ID (ConsoleOutMode)
#define CON_DEVICE_QUESTION_ID QUESTION_ID (ConsoleCheck)
#define CON_IN_DEVICE_QUESTION_ID QUESTION_ID (ConsoleInCheck)
#define CON_OUT_DEVICE_QUESTION_ID QUESTION_ID (ConsoleOutCheck)
#define CON_ERR_DEVICE_QUESTION_ID QUESTION_ID (ConsoleErrCheck)
#define BOOT_OPTION_ORDER_QUESTION_ID QUESTION_ID (BootOptionOrder)
#define DRIVER_OPTION_ORDER_QUESTION_ID QUESTION_ID (DriverOptionOrder)
#define BOOT_OPTION_DEL_QUESTION_ID QUESTION_ID (BootOptionDel)
#define DRIVER_OPTION_DEL_QUESTION_ID QUESTION_ID (DriverOptionDel)
#define DRIVER_ADD_OPTION_QUESTION_ID QUESTION_ID (DriverAddHandleOptionalData)
#define COM_BAUD_RATE_QUESTION_ID QUESTION_ID (COMBaudRate)
#define COM_DATA_RATE_QUESTION_ID QUESTION_ID (COMDataRate)
#define COM_STOP_BITS_QUESTION_ID QUESTION_ID (COMStopBits)
#define COM_PARITY_QUESTION_ID QUESTION_ID (COMParity)
#define COM_TERMINAL_QUESTION_ID QUESTION_ID (COMTerminalType)
#define COM_FLOWCONTROL_QUESTION_ID QUESTION_ID (COMFlowControl)
#define BOOT_TIME_OUT_QUESTION_ID QUESTION_ID (BootTimeOut)
#define BOOT_NEXT_QUESTION_ID QUESTION_ID (BootNext)
#define COM1_BAUD_RATE_QUESTION_ID QUESTION_ID (COM1BaudRate)
#define COM1_DATA_RATE_QUESTION_ID QUESTION_ID (COM1DataRate)
#define COM1_STOP_BITS_QUESTION_ID QUESTION_ID (COM1StopBits)
#define COM1_PARITY_QUESTION_ID QUESTION_ID (COM1Parity)
#define COM1_TERMINAL_QUESTION_ID QUESTION_ID (COM2TerminalType)
#define COM2_BAUD_RATE_QUESTION_ID QUESTION_ID (COM2BaudRate)
#define COM2_DATA_RATE_QUESTION_ID QUESTION_ID (COM2DataRate)
#define COM2_STOP_BITS_QUESTION_ID QUESTION_ID (COM2StopBits)
#define COM2_PARITY_QUESTION_ID QUESTION_ID (COM2Parity)
#define COM2_TERMINAL_QUESTION_ID QUESTION_ID (COM2TerminalType)
#define DRV_ADD_HANDLE_DESC_QUESTION_ID QUESTION_ID (DriverAddHandleDesc)
#define DRV_ADD_ACTIVE_QUESTION_ID QUESTION_ID (DriverAddActive)
#define DRV_ADD_RECON_QUESTION_ID QUESTION_ID (DriverAddForceReconnect)
#define CON_IN_COM1_QUESTION_ID QUESTION_ID (ConsoleInputCOM1)
#define CON_IN_COM2_QUESTION_ID QUESTION_ID (ConsoleInputCOM2)
#define CON_OUT_COM1_QUESTION_ID QUESTION_ID (ConsoleOutputCOM1)
#define CON_OUT_COM2_QUESTION_ID QUESTION_ID (ConsoleOutputCOM2)
#define CON_ERR_COM1_QUESTION_ID QUESTION_ID (ConsoleErrorCOM1)
#define CON_ERR_COM2_QUESTION_ID QUESTION_ID (ConsoleErrorCOM2)
#define CON_MODE_QUESTION_ID QUESTION_ID (ConsoleOutMode)
#define CON_DEVICE_QUESTION_ID QUESTION_ID (ConsoleCheck)
#define CON_IN_DEVICE_QUESTION_ID QUESTION_ID (ConsoleInCheck)
#define CON_OUT_DEVICE_QUESTION_ID QUESTION_ID (ConsoleOutCheck)
#define CON_ERR_DEVICE_QUESTION_ID QUESTION_ID (ConsoleErrCheck)
#define BOOT_OPTION_ORDER_QUESTION_ID QUESTION_ID (BootOptionOrder)
#define DRIVER_OPTION_ORDER_QUESTION_ID QUESTION_ID (DriverOptionOrder)
#define BOOT_OPTION_DEL_QUESTION_ID QUESTION_ID (BootOptionDel)
#define DRIVER_OPTION_DEL_QUESTION_ID QUESTION_ID (DriverOptionDel)
#define DRIVER_ADD_OPTION_QUESTION_ID QUESTION_ID (DriverAddHandleOptionalData)
#define COM_BAUD_RATE_QUESTION_ID QUESTION_ID (COMBaudRate)
#define COM_DATA_RATE_QUESTION_ID QUESTION_ID (COMDataRate)
#define COM_STOP_BITS_QUESTION_ID QUESTION_ID (COMStopBits)
#define COM_PARITY_QUESTION_ID QUESTION_ID (COMParity)
#define COM_TERMINAL_QUESTION_ID QUESTION_ID (COMTerminalType)
#define COM_FLOWCONTROL_QUESTION_ID QUESTION_ID (COMFlowControl)
#define STRING_DEPOSITORY_NUMBER 8
#define STRING_DEPOSITORY_NUMBER 8
#define NONE_BOOTNEXT_VALUE (0xFFFF + 1)
#define NONE_BOOTNEXT_VALUE (0xFFFF + 1)
///
/// Serial Ports attributes, first one is the value for
@@ -241,125 +241,122 @@ typedef enum _TYPE_OF_TERMINAL {
/// display the value properly
///
typedef struct {
UINTN Value;
UINT16 StringToken;
UINTN Value;
UINT16 StringToken;
} COM_ATTR;
typedef struct {
UINT64 BaudRate;
UINT8 DataBits;
UINT8 Parity;
UINT8 StopBits;
UINT64 BaudRate;
UINT8 DataBits;
UINT8 Parity;
UINT8 StopBits;
UINT8 BaudRateIndex;
UINT8 DataBitsIndex;
UINT8 ParityIndex;
UINT8 StopBitsIndex;
UINT8 BaudRateIndex;
UINT8 DataBitsIndex;
UINT8 ParityIndex;
UINT8 StopBitsIndex;
UINT8 FlowControl;
UINT8 FlowControl;
UINT8 IsConIn;
UINT8 IsConOut;
UINT8 IsStdErr;
UINT8 TerminalType;
UINT8 IsConIn;
UINT8 IsConOut;
UINT8 IsStdErr;
UINT8 TerminalType;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
} BM_TERMINAL_CONTEXT;
typedef struct {
BOOLEAN IsBootNext;
BOOLEAN Deleted;
BOOLEAN IsBootNext;
BOOLEAN Deleted;
BOOLEAN IsLegacy;
BOOLEAN IsLegacy;
UINT32 Attributes;
UINT16 FilePathListLength;
UINT16 *Description;
EFI_DEVICE_PATH_PROTOCOL *FilePathList;
UINT8 *OptionalData;
UINT32 Attributes;
UINT16 FilePathListLength;
UINT16 *Description;
EFI_DEVICE_PATH_PROTOCOL *FilePathList;
UINT8 *OptionalData;
} BM_LOAD_CONTEXT;
typedef struct {
BOOLEAN IsActive;
BOOLEAN IsActive;
BOOLEAN IsTerminal;
BOOLEAN IsTerminal;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
} BM_CONSOLE_CONTEXT;
typedef struct {
UINTN Column;
UINTN Row;
UINTN Column;
UINTN Row;
} CONSOLE_OUT_MODE;
typedef struct {
EFI_HANDLE Handle;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_FILE_HANDLE FHandle;
UINT16 *FileName;
EFI_FILE_SYSTEM_VOLUME_LABEL *Info;
EFI_HANDLE Handle;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_FILE_HANDLE FHandle;
UINT16 *FileName;
EFI_FILE_SYSTEM_VOLUME_LABEL *Info;
BOOLEAN IsRoot;
BOOLEAN IsDir;
BOOLEAN IsRemovableMedia;
BOOLEAN IsLoadFile;
BOOLEAN IsBootLegacy;
BOOLEAN IsRoot;
BOOLEAN IsDir;
BOOLEAN IsRemovableMedia;
BOOLEAN IsLoadFile;
BOOLEAN IsBootLegacy;
} BM_FILE_CONTEXT;
typedef struct {
EFI_HANDLE Handle;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_HANDLE Handle;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
} BM_HANDLE_CONTEXT;
typedef struct {
UINTN Signature;
LIST_ENTRY Head;
UINTN MenuNumber;
UINTN Signature;
LIST_ENTRY Head;
UINTN MenuNumber;
} BM_MENU_OPTION;
typedef struct {
UINTN Signature;
LIST_ENTRY Link;
UINTN OptionNumber;
UINT16 *DisplayString;
UINT16 *HelpString;
EFI_STRING_ID DisplayStringToken;
EFI_STRING_ID HelpStringToken;
UINTN ContextSelection;
VOID *VariableContext;
UINTN Signature;
LIST_ENTRY Link;
UINTN OptionNumber;
UINT16 *DisplayString;
UINT16 *HelpString;
EFI_STRING_ID DisplayStringToken;
EFI_STRING_ID HelpStringToken;
UINTN ContextSelection;
VOID *VariableContext;
} BM_MENU_ENTRY;
typedef struct {
UINTN Signature;
UINTN Signature;
EFI_HII_HANDLE BmmHiiHandle;
EFI_HANDLE BmmDriverHandle;
EFI_HII_HANDLE BmmHiiHandle;
EFI_HANDLE BmmDriverHandle;
///
/// Boot Maintenance Manager Produced protocols
///
EFI_HII_CONFIG_ACCESS_PROTOCOL BmmConfigAccess;
EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2;
EFI_HII_CONFIG_ACCESS_PROTOCOL BmmConfigAccess;
EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2;
BM_MENU_ENTRY *MenuEntry;
BM_HANDLE_CONTEXT *HandleContext;
BM_FILE_CONTEXT *FileContext;
BM_LOAD_CONTEXT *LoadContext;
BM_TERMINAL_CONTEXT *TerminalContext;
UINTN CurrentTerminal;
BBS_TYPE BbsType;
BM_MENU_ENTRY *MenuEntry;
BM_HANDLE_CONTEXT *HandleContext;
BM_FILE_CONTEXT *FileContext;
BM_LOAD_CONTEXT *LoadContext;
BM_TERMINAL_CONTEXT *TerminalContext;
UINTN CurrentTerminal;
BBS_TYPE BbsType;
//
// BMM main formset callback data.
//
EFI_FORM_ID BmmCurrentPageId;
EFI_FORM_ID BmmPreviousPageId;
BOOLEAN BmmAskSaveOrNot;
BMM_FAKE_NV_DATA BmmFakeNvData;
BMM_FAKE_NV_DATA BmmOldFakeNVData;
EFI_FORM_ID BmmCurrentPageId;
EFI_FORM_ID BmmPreviousPageId;
BOOLEAN BmmAskSaveOrNot;
BMM_FAKE_NV_DATA BmmFakeNvData;
BMM_FAKE_NV_DATA BmmOldFakeNVData;
} BMM_CALLBACK_DATA;
/**
@@ -390,7 +387,7 @@ BOpt_FindDrivers (
**/
EFI_STATUS
BOpt_GetBootOptions (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
);
/**
@@ -406,7 +403,7 @@ BOpt_GetBootOptions (
**/
EFI_STATUS
BOpt_GetDriverOptions (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
);
/**
@@ -417,7 +414,7 @@ BOpt_GetDriverOptions (
**/
VOID
BOpt_FreeMenu (
BM_MENU_OPTION *FreeMenu
BM_MENU_OPTION *FreeMenu
);
/**
@@ -431,7 +428,7 @@ BOpt_FreeMenu (
**/
UINT16
BOpt_GetOptionNumber (
CHAR16 *Type
CHAR16 *Type
);
/**
@@ -470,7 +467,7 @@ BOpt_GetDriverOptionNumber (
**/
BM_MENU_ENTRY *
BOpt_CreateMenuEntry (
UINTN MenuType
UINTN MenuType
);
/**
@@ -481,7 +478,7 @@ BOpt_CreateMenuEntry (
**/
VOID
BOpt_DestroyMenuEntry (
BM_MENU_ENTRY *MenuEntry
BM_MENU_ENTRY *MenuEntry
);
/**
@@ -498,8 +495,8 @@ BOpt_DestroyMenuEntry (
**/
BM_MENU_ENTRY *
BOpt_GetMenuEntry (
BM_MENU_OPTION *MenuOption,
UINTN MenuNumber
BM_MENU_OPTION *MenuOption,
UINTN MenuNumber
);
/**
@@ -510,7 +507,7 @@ BOpt_GetMenuEntry (
**/
VOID
GetBootOrder (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
);
/**
@@ -521,12 +518,13 @@ GetBootOrder (
**/
VOID
GetDriverOrder (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
);
//
// Locate all serial io devices for console
//
/**
Build a list containing all serial devices.
@@ -542,6 +540,7 @@ LocateSerialIo (
//
// Initializing Console menu
//
/**
Build up ConsoleOutMenu, ConsoleInpMenu and ConsoleErrMenu
@@ -549,13 +548,14 @@ LocateSerialIo (
**/
EFI_STATUS
GetAllConsoles(
GetAllConsoles (
VOID
);
//
// Get current mode information
//
/**
Get mode number according to column and row
@@ -563,12 +563,13 @@ GetAllConsoles(
**/
VOID
GetConsoleOutMode (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
);
//
// Cleaning up console menu
//
/**
Free ConsoleOutMenu, ConsoleInpMenu and ConsoleErrMenu
@@ -607,12 +608,13 @@ ChangeVariableDevicePath (
EFI_STATUS
ChangeTerminalDevicePath (
IN OUT EFI_DEVICE_PATH_PROTOCOL *DevicePath,
IN BOOLEAN ChangeTerminal
IN BOOLEAN ChangeTerminal
);
//
// Variable operation by menu selection
//
/**
This function create a currently loaded Boot Option from
the BMM. It then appends this Boot Option to the end of
@@ -627,7 +629,7 @@ ChangeTerminalDevicePath (
**/
EFI_STATUS
Var_UpdateBootOption (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
);
/**
@@ -661,11 +663,11 @@ Var_DelBootOption (
**/
EFI_STATUS
Var_UpdateDriverOption (
IN BMM_CALLBACK_DATA *CallbackData,
IN EFI_HII_HANDLE HiiHandle,
IN UINT16 *DescriptionData,
IN UINT16 *OptionalData,
IN UINT8 ForceReconnect
IN BMM_CALLBACK_DATA *CallbackData,
IN EFI_HII_HANDLE HiiHandle,
IN UINT16 *DescriptionData,
IN UINT16 *OptionalData,
IN UINT8 ForceReconnect
);
/**
@@ -725,7 +727,7 @@ Var_UpdateErrorOutOption (
**/
EFI_STATUS
Var_UpdateOutOfBandOption (
IN UINT16 MenuIndex
IN UINT16 MenuIndex
);
/**
@@ -741,7 +743,7 @@ Var_UpdateOutOfBandOption (
**/
EFI_STATUS
Var_UpdateBootNext (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
);
/**
@@ -757,7 +759,7 @@ Var_UpdateBootNext (
**/
EFI_STATUS
Var_UpdateBootOrder (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
);
/**
@@ -774,7 +776,7 @@ Var_UpdateBootOrder (
**/
EFI_STATUS
Var_UpdateDriverOrder (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
);
/**
@@ -788,12 +790,13 @@ Var_UpdateDriverOrder (
**/
EFI_STATUS
Var_UpdateConMode (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
);
//
// Following are page create and refresh functions
//
/**
Create the global UpdateData structure.
@@ -823,8 +826,8 @@ RefreshUpdateData (
**/
VOID
CleanUpPage (
IN UINT16 LabelId,
IN BMM_CALLBACK_DATA *CallbackData
IN UINT16 LabelId,
IN BMM_CALLBACK_DATA *CallbackData
);
/**
@@ -836,7 +839,7 @@ CleanUpPage (
**/
VOID
UpdateBootDelPage (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
);
/**
@@ -846,7 +849,7 @@ UpdateBootDelPage (
**/
VOID
UpdateDrvAddHandlePage (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
);
/**
@@ -857,7 +860,7 @@ UpdateDrvAddHandlePage (
**/
VOID
UpdateDrvDelPage (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
);
/**
@@ -867,7 +870,7 @@ UpdateDrvDelPage (
**/
VOID
UpdateDriverAddHandleDescPage (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
);
/**
@@ -878,8 +881,8 @@ UpdateDriverAddHandleDescPage (
**/
VOID
UpdatePageBody (
IN UINT16 UpdatePageId,
IN BMM_CALLBACK_DATA *CallbackData
IN UINT16 UpdatePageId,
IN BMM_CALLBACK_DATA *CallbackData
);
/**
@@ -890,7 +893,7 @@ UpdatePageBody (
**/
VOID
UpdateTerminalPage (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
);
/**
@@ -900,7 +903,7 @@ UpdateTerminalPage (
**/
VOID
UpdateConModePage (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
);
/**
@@ -911,7 +914,7 @@ UpdateConModePage (
**/
VOID
UpdateConCOMPage (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
);
/**
@@ -923,10 +926,10 @@ UpdateConCOMPage (
**/
VOID
UpdateOptionPage(
IN BMM_CALLBACK_DATA *CallbackData,
IN EFI_FORM_ID FormId,
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
UpdateOptionPage (
IN BMM_CALLBACK_DATA *CallbackData,
IN EFI_FORM_ID FormId,
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
);
/**
@@ -946,8 +949,8 @@ UpdateOptionPage(
**/
EFI_STATUS
EfiLibDeleteVariable (
IN CHAR16 *VarName,
IN EFI_GUID *VarGuid
IN CHAR16 *VarName,
IN EFI_GUID *VarGuid
);
/**
@@ -963,7 +966,7 @@ EfiLibDeleteVariable (
**/
UINTN
EfiDevicePathInstanceCount (
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
);
/**
@@ -979,7 +982,7 @@ EfiDevicePathInstanceCount (
**/
UINT16 *
EfiLibStrFromDatahub (
IN EFI_DEVICE_PATH_PROTOCOL *DevPath
IN EFI_DEVICE_PATH_PROTOCOL *DevPath
);
/**
@@ -994,9 +997,9 @@ EfiLibStrFromDatahub (
**/
VOID *
GetLegacyBootOptionVar (
IN UINTN DeviceType,
OUT UINTN *OptionIndex,
OUT UINTN *OptionSize
IN UINTN DeviceType,
OUT UINTN *OptionIndex,
OUT UINTN *OptionSize
);
/**
@@ -1009,11 +1012,10 @@ GetLegacyBootOptionVar (
**/
VOID
DiscardChangeHandler (
IN BMM_CALLBACK_DATA *Private,
IN BMM_FAKE_NV_DATA *CurrentFakeNVMap
IN BMM_CALLBACK_DATA *Private,
IN BMM_FAKE_NV_DATA *CurrentFakeNVMap
);
/**
This function is to clean some useless data before submit changes.
@@ -1022,7 +1024,7 @@ DiscardChangeHandler (
**/
VOID
CleanUselessBeforeSubmit (
IN BMM_CALLBACK_DATA *Private
IN BMM_CALLBACK_DATA *Private
);
/**
@@ -1034,8 +1036,8 @@ CleanUselessBeforeSubmit (
**/
VOID
UpdatePageId (
BMM_CALLBACK_DATA *Private,
UINT16 NewPageId
BMM_CALLBACK_DATA *Private,
UINT16 NewPageId
);
/**
@@ -1043,7 +1045,7 @@ UpdatePageId (
**/
VOID
FreeBMPackage(
FreeBMPackage (
VOID
);
@@ -1052,7 +1054,7 @@ FreeBMPackage(
**/
VOID
InitBootMaintenance(
InitBootMaintenance (
VOID
);
@@ -1066,7 +1068,7 @@ InitBootMaintenance(
**/
VOID
GetConsoleInCheck (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
);
/**
@@ -1079,7 +1081,7 @@ GetConsoleInCheck (
**/
VOID
GetConsoleOutCheck (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
);
/**
@@ -1092,7 +1094,7 @@ GetConsoleOutCheck (
**/
VOID
GetConsoleErrCheck (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
);
/**
@@ -1105,7 +1107,7 @@ GetConsoleErrCheck (
**/
VOID
GetTerminalAttribute (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
);
/**
@@ -1123,7 +1125,6 @@ BmmSetConsoleMode (
BOOLEAN IsSetupMode
);
/**
This function converts an input device structure to a Unicode string.
@@ -1134,7 +1135,7 @@ BmmSetConsoleMode (
**/
CHAR16 *
UiDevicePathToStr (
IN EFI_DEVICE_PATH_PROTOCOL *DevPath
IN EFI_DEVICE_PATH_PROTOCOL *DevPath
);
/**
@@ -1148,7 +1149,7 @@ UiDevicePathToStr (
**/
CHAR16 *
ExtractFileNameFromDevicePath (
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
);
/**
@@ -1175,10 +1176,10 @@ ExtractFileNameFromDevicePath (
EFI_STATUS
EFIAPI
BootMaintExtractConfig (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Request,
OUT EFI_STRING *Progress,
OUT EFI_STRING *Results
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Request,
OUT EFI_STRING *Progress,
OUT EFI_STRING *Results
);
/**
@@ -1217,9 +1218,9 @@ BootMaintExtractConfig (
EFI_STATUS
EFIAPI
BootMaintRouteConfig (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Configuration,
OUT EFI_STRING *Progress
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Configuration,
OUT EFI_STRING *Progress
);
/**
@@ -1243,12 +1244,12 @@ BootMaintRouteConfig (
EFI_STATUS
EFIAPI
BootMaintCallback (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN EFI_BROWSER_ACTION Action,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN EFI_IFR_TYPE_VALUE *Value,
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN EFI_BROWSER_ACTION Action,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN EFI_IFR_TYPE_VALUE *Value,
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
);
/**
@@ -1263,7 +1264,7 @@ BootMaintCallback (
BOOLEAN
EFIAPI
CreateBootOptionFromFile (
IN EFI_DEVICE_PATH_PROTOCOL *FilePath
IN EFI_DEVICE_PATH_PROTOCOL *FilePath
);
/**
@@ -1277,7 +1278,7 @@ CreateBootOptionFromFile (
BOOLEAN
EFIAPI
CreateDriverOptionFromFile (
IN EFI_DEVICE_PATH_PROTOCOL *FilePath
IN EFI_DEVICE_PATH_PROTOCOL *FilePath
);
/**
@@ -1292,37 +1293,37 @@ CreateDriverOptionFromFile (
BOOLEAN
EFIAPI
BootFromFile (
IN EFI_DEVICE_PATH_PROTOCOL *FilePath
IN EFI_DEVICE_PATH_PROTOCOL *FilePath
);
//
// Global variable in this program (defined in data.c)
//
extern BM_MENU_OPTION BootOptionMenu;
extern BM_MENU_OPTION DriverOptionMenu;
extern BM_MENU_OPTION ConsoleInpMenu;
extern BM_MENU_OPTION ConsoleOutMenu;
extern BM_MENU_OPTION ConsoleErrMenu;
extern BM_MENU_OPTION DriverMenu;
extern BM_MENU_OPTION TerminalMenu;
extern UINT16 TerminalType[9];
extern COM_ATTR BaudRateList[19];
extern COM_ATTR DataBitsList[4];
extern COM_ATTR ParityList[5];
extern COM_ATTR StopBitsList[3];
extern EFI_GUID TerminalTypeGuid[9];
extern EFI_DEVICE_PATH_PROTOCOL EndDevicePath[];
extern UINT16 mFlowControlType[2];
extern UINT32 mFlowControlValue[2];
extern BM_MENU_OPTION BootOptionMenu;
extern BM_MENU_OPTION DriverOptionMenu;
extern BM_MENU_OPTION ConsoleInpMenu;
extern BM_MENU_OPTION ConsoleOutMenu;
extern BM_MENU_OPTION ConsoleErrMenu;
extern BM_MENU_OPTION DriverMenu;
extern BM_MENU_OPTION TerminalMenu;
extern UINT16 TerminalType[9];
extern COM_ATTR BaudRateList[19];
extern COM_ATTR DataBitsList[4];
extern COM_ATTR ParityList[5];
extern COM_ATTR StopBitsList[3];
extern EFI_GUID TerminalTypeGuid[9];
extern EFI_DEVICE_PATH_PROTOCOL EndDevicePath[];
extern UINT16 mFlowControlType[2];
extern UINT32 mFlowControlValue[2];
//
// Shared IFR form update data
//
extern VOID *mStartOpCodeHandle;
extern VOID *mEndOpCodeHandle;
extern EFI_IFR_GUID_LABEL *mStartLabel;
extern EFI_IFR_GUID_LABEL *mEndLabel;
extern BMM_CALLBACK_DATA gBootMaintenancePrivate;
extern BMM_CALLBACK_DATA *mBmmCallbackInfo;
extern VOID *mStartOpCodeHandle;
extern VOID *mEndOpCodeHandle;
extern EFI_IFR_GUID_LABEL *mStartLabel;
extern EFI_IFR_GUID_LABEL *mEndLabel;
extern BMM_CALLBACK_DATA gBootMaintenancePrivate;
extern BMM_CALLBACK_DATA *mBmmCallbackInfo;
#endif

View File

@@ -27,19 +27,19 @@ UiCustomizeBMMPage (
//
// Create "Boot Option" menu.
//
BmmCreateBootOptionMenu(HiiHandle, StartOpCodeHandle);
BmmCreateBootOptionMenu (HiiHandle, StartOpCodeHandle);
//
// Create "Driver Option" menu.
//
BmmCreateDriverOptionMenu(HiiHandle, StartOpCodeHandle);
BmmCreateDriverOptionMenu (HiiHandle, StartOpCodeHandle);
//
// Create "Com Option" menu.
//
BmmCreateComOptionMenu(HiiHandle, StartOpCodeHandle);
BmmCreateComOptionMenu (HiiHandle, StartOpCodeHandle);
//
// Create "Boot From File" menu.
//
BmmCreateBootFromFileMenu(HiiHandle, StartOpCodeHandle);
BmmCreateBootFromFileMenu (HiiHandle, StartOpCodeHandle);
//
// Find third party drivers which need to be shown in the Bmm page.
@@ -81,12 +81,12 @@ UiCustomizeBMMPage (
**/
EFI_STATUS
UiBMMCallbackHandler (
IN EFI_HII_HANDLE HiiHandle,
IN EFI_BROWSER_ACTION Action,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN EFI_IFR_TYPE_VALUE *Value,
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
IN EFI_HII_HANDLE HiiHandle,
IN EFI_BROWSER_ACTION Action,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN EFI_IFR_TYPE_VALUE *Value,
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
)
{
return EFI_UNSUPPORTED;

View File

@@ -9,7 +9,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#ifndef __CUSTOMIZED_UI_H__
#define __CUSTOMIZED_UI_H__
/**
Customize menus in the page.
@@ -43,12 +42,12 @@ UiCustomizeBMMPage (
**/
EFI_STATUS
UiBMMCallbackHandler (
IN EFI_HII_HANDLE HiiHandle,
IN EFI_BROWSER_ACTION Action,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN EFI_IFR_TYPE_VALUE *Value,
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
IN EFI_HII_HANDLE HiiHandle,
IN EFI_BROWSER_ACTION Action,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN EFI_IFR_TYPE_VALUE *Value,
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
);
#endif

View File

@@ -6,22 +6,20 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include "BootMaintenanceManager.h"
#include "BootMaintenanceManagerCustomizedUiSupport.h"
#define UI_HII_DRIVER_LIST_SIZE 0x8
#define UI_HII_DRIVER_LIST_SIZE 0x8
typedef struct {
EFI_STRING_ID PromptId;
EFI_STRING_ID HelpId;
EFI_STRING_ID DevicePathId;
EFI_GUID FormSetGuid;
BOOLEAN EmptyLineAfter;
EFI_STRING_ID PromptId;
EFI_STRING_ID HelpId;
EFI_STRING_ID DevicePathId;
EFI_GUID FormSetGuid;
BOOLEAN EmptyLineAfter;
} UI_HII_DRIVER_INSTANCE;
STATIC UI_HII_DRIVER_INSTANCE *gHiiDriverList;
STATIC UI_HII_DRIVER_INSTANCE *gHiiDriverList;
/**
Create the dynamic item to allow user to set the "BootNext" vaule.
@@ -31,16 +29,16 @@ STATIC UI_HII_DRIVER_INSTANCE *gHiiDriverList;
**/
VOID
BmmCreateBootNextMenu(
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
BmmCreateBootNextMenu (
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
)
{
BM_MENU_ENTRY *NewMenuEntry;
BM_LOAD_CONTEXT *NewLoadContext;
UINT16 Index;
VOID *OptionsOpCodeHandle;
UINT32 BootNextIndex;
BM_MENU_ENTRY *NewMenuEntry;
BM_LOAD_CONTEXT *NewLoadContext;
UINT16 Index;
VOID *OptionsOpCodeHandle;
UINT32 BootNextIndex;
if (BootOptionMenu.MenuNumber == 0) {
return;
@@ -52,8 +50,8 @@ BmmCreateBootNextMenu(
ASSERT (OptionsOpCodeHandle != NULL);
for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {
NewMenuEntry = BOpt_GetMenuEntry (&BootOptionMenu, Index);
NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;
NewMenuEntry = BOpt_GetMenuEntry (&BootOptionMenu, Index);
NewLoadContext = (BM_LOAD_CONTEXT *)NewMenuEntry->VariableContext;
if (NewLoadContext->IsBootNext) {
HiiCreateOneOfOptionOpCode (
@@ -95,7 +93,7 @@ BmmCreateBootNextMenu(
HiiCreateOneOfOpCode (
StartOpCodeHandle,
(EFI_QUESTION_ID) BOOT_NEXT_QUESTION_ID,
(EFI_QUESTION_ID)BOOT_NEXT_QUESTION_ID,
VARSTORE_ID_BOOT_MAINT,
BOOT_NEXT_VAR_OFFSET,
STRING_TOKEN (STR_BOOT_NEXT),
@@ -107,7 +105,6 @@ BmmCreateBootNextMenu(
);
HiiFreeOpCodeHandle (OptionsOpCodeHandle);
}
/**
@@ -119,17 +116,17 @@ BmmCreateBootNextMenu(
**/
VOID
BmmCreateTimeOutMenu (
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
)
{
HiiCreateNumericOpCode (
StartOpCodeHandle,
(EFI_QUESTION_ID) FORM_TIME_OUT_ID,
(EFI_QUESTION_ID)FORM_TIME_OUT_ID,
VARSTORE_ID_BOOT_MAINT,
BOOT_TIME_OUT_VAR_OFFSET,
STRING_TOKEN(STR_NUM_AUTO_BOOT),
STRING_TOKEN(STR_HLP_AUTO_BOOT),
STRING_TOKEN (STR_NUM_AUTO_BOOT),
STRING_TOKEN (STR_HLP_AUTO_BOOT),
EFI_IFR_FLAG_CALLBACK,
EFI_IFR_NUMERIC_SIZE_2 | EFI_IFR_DISPLAY_UINT_DEC,
0,
@@ -148,8 +145,8 @@ BmmCreateTimeOutMenu (
**/
VOID
BmmCreateBootOptionMenu (
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
)
{
HiiCreateGotoOpCode (
@@ -171,8 +168,8 @@ BmmCreateBootOptionMenu (
**/
VOID
BmmCreateDriverOptionMenu (
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
)
{
HiiCreateGotoOpCode (
@@ -194,8 +191,8 @@ BmmCreateDriverOptionMenu (
**/
VOID
BmmCreateComOptionMenu (
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
)
{
HiiCreateGotoOpCode (
@@ -217,8 +214,8 @@ BmmCreateComOptionMenu (
**/
VOID
BmmCreateBootFromFileMenu (
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
)
{
HiiCreateGotoOpCode (
@@ -240,8 +237,8 @@ BmmCreateBootFromFileMenu (
**/
VOID
BmmCreateEmptyLine (
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
)
{
HiiCreateSubTitleOpCode (StartOpCodeHandle, STRING_TOKEN (STR_NULL_STRING), 0, 0, 0);
@@ -258,11 +255,11 @@ BmmCreateEmptyLine (
**/
CHAR16 *
ExtractDevicePathFromHandle (
IN EFI_HII_HANDLE Handle
IN EFI_HII_HANDLE Handle
)
{
EFI_STATUS Status;
EFI_HANDLE DriverHandle;
EFI_STATUS Status;
EFI_HANDLE DriverHandle;
ASSERT (Handle != NULL);
@@ -275,7 +272,7 @@ ExtractDevicePathFromHandle (
return NULL;
}
return ConvertDevicePathToText(DevicePathFromHandle (DriverHandle), FALSE, FALSE);
return ConvertDevicePathToText (DevicePathFromHandle (DriverHandle), FALSE, FALSE);
}
/**
@@ -292,49 +289,49 @@ ExtractDevicePathFromHandle (
**/
BOOLEAN
IsRequiredDriver (
IN EFI_HII_HANDLE HiiHandle,
IN EFI_GUID *Guid,
OUT EFI_STRING_ID *PromptId,
OUT EFI_STRING_ID *HelpId,
OUT VOID *FormsetGuid
IN EFI_HII_HANDLE HiiHandle,
IN EFI_GUID *Guid,
OUT EFI_STRING_ID *PromptId,
OUT EFI_STRING_ID *HelpId,
OUT VOID *FormsetGuid
)
{
EFI_STATUS Status;
UINT8 ClassGuidNum;
EFI_GUID *ClassGuid;
EFI_IFR_FORM_SET *Buffer;
UINTN BufferSize;
UINT8 *Ptr;
UINTN TempSize;
BOOLEAN RetVal;
EFI_STATUS Status;
UINT8 ClassGuidNum;
EFI_GUID *ClassGuid;
EFI_IFR_FORM_SET *Buffer;
UINTN BufferSize;
UINT8 *Ptr;
UINTN TempSize;
BOOLEAN RetVal;
Status = HiiGetFormSetFromHiiHandle(HiiHandle, &Buffer,&BufferSize);
Status = HiiGetFormSetFromHiiHandle (HiiHandle, &Buffer, &BufferSize);
if (EFI_ERROR (Status)) {
return FALSE;
}
RetVal = FALSE;
RetVal = FALSE;
TempSize = 0;
Ptr = (UINT8 *) Buffer;
while(TempSize < BufferSize) {
TempSize += ((EFI_IFR_OP_HEADER *) Ptr)->Length;
Ptr = (UINT8 *)Buffer;
while (TempSize < BufferSize) {
TempSize += ((EFI_IFR_OP_HEADER *)Ptr)->Length;
if (((EFI_IFR_OP_HEADER *) Ptr)->Length <= OFFSET_OF (EFI_IFR_FORM_SET, Flags)){
Ptr += ((EFI_IFR_OP_HEADER *) Ptr)->Length;
if (((EFI_IFR_OP_HEADER *)Ptr)->Length <= OFFSET_OF (EFI_IFR_FORM_SET, Flags)) {
Ptr += ((EFI_IFR_OP_HEADER *)Ptr)->Length;
continue;
}
ClassGuidNum = (UINT8) (((EFI_IFR_FORM_SET *)Ptr)->Flags & 0x3);
ClassGuid = (EFI_GUID *) (VOID *)(Ptr + sizeof (EFI_IFR_FORM_SET));
ClassGuidNum = (UINT8)(((EFI_IFR_FORM_SET *)Ptr)->Flags & 0x3);
ClassGuid = (EFI_GUID *)(VOID *)(Ptr + sizeof (EFI_IFR_FORM_SET));
while (ClassGuidNum-- > 0) {
if (!CompareGuid (Guid, ClassGuid)){
ClassGuid ++;
if (!CompareGuid (Guid, ClassGuid)) {
ClassGuid++;
continue;
}
*PromptId = ((EFI_IFR_FORM_SET *)Ptr)->FormSetTitle;
*HelpId = ((EFI_IFR_FORM_SET *)Ptr)->Help;
CopyMem (FormsetGuid, &((EFI_IFR_FORM_SET *) Ptr)->Guid, sizeof (EFI_GUID));
*HelpId = ((EFI_IFR_FORM_SET *)Ptr)->Help;
CopyMem (FormsetGuid, &((EFI_IFR_FORM_SET *)Ptr)->Guid, sizeof (EFI_GUID));
RetVal = TRUE;
}
}
@@ -358,23 +355,23 @@ IsRequiredDriver (
**/
EFI_STATUS
BmmListThirdPartyDrivers (
IN EFI_HII_HANDLE HiiHandle,
IN EFI_GUID *ClassGuid,
IN DRIVER_SPECIAL_HANDLER SpecialHandlerFn,
IN VOID *StartOpCodeHandle
IN EFI_HII_HANDLE HiiHandle,
IN EFI_GUID *ClassGuid,
IN DRIVER_SPECIAL_HANDLER SpecialHandlerFn,
IN VOID *StartOpCodeHandle
)
{
UINTN Index;
EFI_STRING String;
EFI_STRING_ID Token;
EFI_STRING_ID TokenHelp;
EFI_HII_HANDLE *HiiHandles;
CHAR16 *DevicePathStr;
UINTN Count;
UINTN CurrentSize;
UI_HII_DRIVER_INSTANCE *DriverListPtr;
EFI_STRING NewName;
BOOLEAN EmptyLineAfter;
UINTN Index;
EFI_STRING String;
EFI_STRING_ID Token;
EFI_STRING_ID TokenHelp;
EFI_HII_HANDLE *HiiHandles;
CHAR16 *DevicePathStr;
UINTN Count;
UINTN CurrentSize;
UI_HII_DRIVER_INSTANCE *DriverListPtr;
EFI_STRING NewName;
BOOLEAN EmptyLineAfter;
if (gHiiDriverList != NULL) {
FreePool (gHiiDriverList);
@@ -386,7 +383,7 @@ BmmListThirdPartyDrivers (
gHiiDriverList = AllocateZeroPool (UI_HII_DRIVER_LIST_SIZE * sizeof (UI_HII_DRIVER_INSTANCE));
ASSERT (gHiiDriverList != NULL);
DriverListPtr = gHiiDriverList;
CurrentSize = UI_HII_DRIVER_LIST_SIZE;
CurrentSize = UI_HII_DRIVER_LIST_SIZE;
for (Index = 0, Count = 0; HiiHandles[Index] != NULL; Index++) {
if (!IsRequiredDriver (HiiHandles[Index], ClassGuid, &Token, &TokenHelp, &gHiiDriverList[Count].FormSetGuid)) {
@@ -404,10 +401,11 @@ BmmListThirdPartyDrivers (
EmptyLineAfter = FALSE;
if (SpecialHandlerFn (String, &NewName, &EmptyLineAfter)) {
FreePool (String);
String = NewName;
String = NewName;
DriverListPtr[Count].EmptyLineAfter = EmptyLineAfter;
}
}
DriverListPtr[Count].PromptId = HiiSetString (HiiHandle, 0, String, NULL);
FreePool (String);
@@ -416,11 +414,12 @@ BmmListThirdPartyDrivers (
String = HiiGetString (HiiHandle, STRING_TOKEN (STR_MISSING_STRING), NULL);
ASSERT (String != NULL);
}
DriverListPtr[Count].HelpId = HiiSetString (HiiHandle, 0, String, NULL);
FreePool (String);
DevicePathStr = ExtractDevicePathFromHandle(HiiHandles[Index]);
if (DevicePathStr != NULL){
DevicePathStr = ExtractDevicePathFromHandle (HiiHandles[Index]);
if (DevicePathStr != NULL) {
DriverListPtr[Count].DevicePathId = HiiSetString (HiiHandle, 0, DevicePathStr, NULL);
FreePool (DevicePathStr);
} else {
@@ -437,7 +436,7 @@ BmmListThirdPartyDrivers (
);
ASSERT (DriverListPtr != NULL);
gHiiDriverList = DriverListPtr;
CurrentSize += UI_HII_DRIVER_LIST_SIZE;
CurrentSize += UI_HII_DRIVER_LIST_SIZE;
}
}
@@ -455,15 +454,14 @@ BmmListThirdPartyDrivers (
0,
&gHiiDriverList[Index].FormSetGuid,
gHiiDriverList[Index].DevicePathId
);
);
if (gHiiDriverList[Index].EmptyLineAfter) {
BmmCreateEmptyLine (HiiHandle, StartOpCodeHandle);
}
Index ++;
Index++;
}
return EFI_SUCCESS;
}

View File

@@ -18,8 +18,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
VOID
BmmCreateTimeOutMenu (
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
);
/**
@@ -30,9 +30,9 @@ BmmCreateTimeOutMenu (
**/
VOID
BmmCreateBootNextMenu(
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
BmmCreateBootNextMenu (
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
);
/**
@@ -44,8 +44,8 @@ BmmCreateBootNextMenu(
**/
VOID
BmmCreateBootOptionMenu (
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
);
/**
@@ -57,8 +57,8 @@ BmmCreateBootOptionMenu (
**/
VOID
BmmCreateDriverOptionMenu (
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
);
/**
@@ -70,8 +70,8 @@ BmmCreateDriverOptionMenu (
**/
VOID
BmmCreateComOptionMenu (
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
);
/**
@@ -83,8 +83,8 @@ BmmCreateComOptionMenu (
**/
VOID
BmmCreateBootFromFileMenu (
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
);
/**
@@ -96,8 +96,8 @@ BmmCreateBootFromFileMenu (
**/
VOID
BmmCreateEmptyLine (
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
);
/**
@@ -116,7 +116,7 @@ EFI_STATUS
IN CHAR16 *DriverName,
OUT CHAR16 **NewName,
OUT BOOLEAN *EmptyLineAfter
);
);
/**
Search the drivers in the system which need to show in the front page
@@ -132,10 +132,10 @@ EFI_STATUS
**/
EFI_STATUS
BmmListThirdPartyDrivers (
IN EFI_HII_HANDLE HiiHandle,
IN EFI_GUID *ClassGuid,
IN DRIVER_SPECIAL_HANDLER SpecialHandlerFn,
IN VOID *StartOpCodeHandle
IN EFI_HII_HANDLE HiiHandle,
IN EFI_GUID *ClassGuid,
IN DRIVER_SPECIAL_HANDLER SpecialHandlerFn,
IN VOID *StartOpCodeHandle
);
#endif

View File

@@ -15,7 +15,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
///
/// Define the maximum characters that will be accepted.
///
#define MAX_CHAR 480
#define MAX_CHAR 480
/**
@@ -27,21 +27,21 @@ BmmSetupResetReminder (
VOID
)
{
EFI_INPUT_KEY Key;
CHAR16 *StringBuffer1;
CHAR16 *StringBuffer2;
EFI_STATUS Status;
EDKII_FORM_BROWSER_EXTENSION2_PROTOCOL *FormBrowserEx2;
EFI_INPUT_KEY Key;
CHAR16 *StringBuffer1;
CHAR16 *StringBuffer2;
EFI_STATUS Status;
EDKII_FORM_BROWSER_EXTENSION2_PROTOCOL *FormBrowserEx2;
//
// Use BrowserEx2 protocol to check whether reset is required.
//
Status = gBS->LocateProtocol (&gEdkiiFormBrowserEx2ProtocolGuid, NULL, (VOID **) &FormBrowserEx2);
Status = gBS->LocateProtocol (&gEdkiiFormBrowserEx2ProtocolGuid, NULL, (VOID **)&FormBrowserEx2);
//
//check any reset required change is applied? if yes, reset system
// check any reset required change is applied? if yes, reset system
//
if (!EFI_ERROR(Status) && FormBrowserEx2->IsResetRequired()) {
if (!EFI_ERROR (Status) && FormBrowserEx2->IsResetRequired ()) {
StringBuffer1 = AllocateZeroPool (MAX_CHAR * sizeof (CHAR16));
ASSERT (StringBuffer1 != NULL);
StringBuffer2 = AllocateZeroPool (MAX_CHAR * sizeof (CHAR16));
@@ -73,39 +73,39 @@ BmmSetupResetReminder (
**/
BM_MENU_ENTRY *
BOpt_CreateMenuEntry (
UINTN MenuType
UINTN MenuType
)
{
BM_MENU_ENTRY *MenuEntry;
UINTN ContextSize;
BM_MENU_ENTRY *MenuEntry;
UINTN ContextSize;
//
// Get context size according to menu type
//
switch (MenuType) {
case BM_LOAD_CONTEXT_SELECT:
ContextSize = sizeof (BM_LOAD_CONTEXT);
break;
case BM_LOAD_CONTEXT_SELECT:
ContextSize = sizeof (BM_LOAD_CONTEXT);
break;
case BM_FILE_CONTEXT_SELECT:
ContextSize = sizeof (BM_FILE_CONTEXT);
break;
case BM_FILE_CONTEXT_SELECT:
ContextSize = sizeof (BM_FILE_CONTEXT);
break;
case BM_CONSOLE_CONTEXT_SELECT:
ContextSize = sizeof (BM_CONSOLE_CONTEXT);
break;
case BM_CONSOLE_CONTEXT_SELECT:
ContextSize = sizeof (BM_CONSOLE_CONTEXT);
break;
case BM_TERMINAL_CONTEXT_SELECT:
ContextSize = sizeof (BM_TERMINAL_CONTEXT);
break;
case BM_TERMINAL_CONTEXT_SELECT:
ContextSize = sizeof (BM_TERMINAL_CONTEXT);
break;
case BM_HANDLE_CONTEXT_SELECT:
ContextSize = sizeof (BM_HANDLE_CONTEXT);
break;
case BM_HANDLE_CONTEXT_SELECT:
ContextSize = sizeof (BM_HANDLE_CONTEXT);
break;
default:
ContextSize = 0;
break;
default:
ContextSize = 0;
break;
}
if (ContextSize == 0) {
@@ -139,67 +139,70 @@ BOpt_CreateMenuEntry (
**/
VOID
BOpt_DestroyMenuEntry (
BM_MENU_ENTRY *MenuEntry
BM_MENU_ENTRY *MenuEntry
)
{
BM_LOAD_CONTEXT *LoadContext;
BM_FILE_CONTEXT *FileContext;
BM_CONSOLE_CONTEXT *ConsoleContext;
BM_TERMINAL_CONTEXT *TerminalContext;
BM_HANDLE_CONTEXT *HandleContext;
BM_LOAD_CONTEXT *LoadContext;
BM_FILE_CONTEXT *FileContext;
BM_CONSOLE_CONTEXT *ConsoleContext;
BM_TERMINAL_CONTEXT *TerminalContext;
BM_HANDLE_CONTEXT *HandleContext;
//
// Select by the type in Menu entry for current context type
//
switch (MenuEntry->ContextSelection) {
case BM_LOAD_CONTEXT_SELECT:
LoadContext = (BM_LOAD_CONTEXT *) MenuEntry->VariableContext;
FreePool (LoadContext->FilePathList);
if (LoadContext->OptionalData != NULL) {
FreePool (LoadContext->OptionalData);
}
FreePool (LoadContext);
break;
case BM_FILE_CONTEXT_SELECT:
FileContext = (BM_FILE_CONTEXT *) MenuEntry->VariableContext;
if (!FileContext->IsRoot) {
FreePool (FileContext->DevicePath);
} else {
if (FileContext->FHandle != NULL) {
FileContext->FHandle->Close (FileContext->FHandle);
case BM_LOAD_CONTEXT_SELECT:
LoadContext = (BM_LOAD_CONTEXT *)MenuEntry->VariableContext;
FreePool (LoadContext->FilePathList);
if (LoadContext->OptionalData != NULL) {
FreePool (LoadContext->OptionalData);
}
}
if (FileContext->FileName != NULL) {
FreePool (FileContext->FileName);
}
if (FileContext->Info != NULL) {
FreePool (FileContext->Info);
}
FreePool (FileContext);
break;
FreePool (LoadContext);
break;
case BM_CONSOLE_CONTEXT_SELECT:
ConsoleContext = (BM_CONSOLE_CONTEXT *) MenuEntry->VariableContext;
FreePool (ConsoleContext->DevicePath);
FreePool (ConsoleContext);
break;
case BM_FILE_CONTEXT_SELECT:
FileContext = (BM_FILE_CONTEXT *)MenuEntry->VariableContext;
case BM_TERMINAL_CONTEXT_SELECT:
TerminalContext = (BM_TERMINAL_CONTEXT *) MenuEntry->VariableContext;
FreePool (TerminalContext->DevicePath);
FreePool (TerminalContext);
break;
if (!FileContext->IsRoot) {
FreePool (FileContext->DevicePath);
} else {
if (FileContext->FHandle != NULL) {
FileContext->FHandle->Close (FileContext->FHandle);
}
}
case BM_HANDLE_CONTEXT_SELECT:
HandleContext = (BM_HANDLE_CONTEXT *) MenuEntry->VariableContext;
FreePool (HandleContext);
break;
if (FileContext->FileName != NULL) {
FreePool (FileContext->FileName);
}
default:
break;
if (FileContext->Info != NULL) {
FreePool (FileContext->Info);
}
FreePool (FileContext);
break;
case BM_CONSOLE_CONTEXT_SELECT:
ConsoleContext = (BM_CONSOLE_CONTEXT *)MenuEntry->VariableContext;
FreePool (ConsoleContext->DevicePath);
FreePool (ConsoleContext);
break;
case BM_TERMINAL_CONTEXT_SELECT:
TerminalContext = (BM_TERMINAL_CONTEXT *)MenuEntry->VariableContext;
FreePool (TerminalContext->DevicePath);
FreePool (TerminalContext);
break;
case BM_HANDLE_CONTEXT_SELECT:
HandleContext = (BM_HANDLE_CONTEXT *)MenuEntry->VariableContext;
FreePool (HandleContext);
break;
default:
break;
}
FreePool (MenuEntry->DisplayString);
@@ -224,13 +227,13 @@ BOpt_DestroyMenuEntry (
**/
BM_MENU_ENTRY *
BOpt_GetMenuEntry (
BM_MENU_OPTION *MenuOption,
UINTN MenuNumber
BM_MENU_OPTION *MenuOption,
UINTN MenuNumber
)
{
BM_MENU_ENTRY *NewMenuEntry;
UINTN Index;
LIST_ENTRY *List;
BM_MENU_ENTRY *NewMenuEntry;
UINTN Index;
LIST_ENTRY *List;
ASSERT (MenuNumber < MenuOption->MenuNumber);
@@ -251,10 +254,11 @@ BOpt_GetMenuEntry (
**/
VOID
BOpt_FreeMenu (
BM_MENU_OPTION *FreeMenu
BM_MENU_OPTION *FreeMenu
)
{
BM_MENU_ENTRY *MenuEntry;
BM_MENU_ENTRY *MenuEntry;
while (!IsListEmpty (&FreeMenu->Head)) {
MenuEntry = CR (
FreeMenu->Head.ForwardLink,
@@ -265,6 +269,7 @@ BOpt_FreeMenu (
RemoveEntryList (&MenuEntry->Link);
BOpt_DestroyMenuEntry (MenuEntry);
}
FreeMenu->MenuNumber = 0;
}
@@ -281,7 +286,7 @@ BOpt_FreeMenu (
**/
EFI_STATUS
BOpt_GetBootOptions (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
UINTN Index;
@@ -317,7 +322,7 @@ BOpt_GetBootOptions (
//
// Get the BootOrder from the Var
//
GetEfiGlobalVariable2 (L"BootOrder", (VOID **) &BootOrderList, &BootOrderListSize);
GetEfiGlobalVariable2 (L"BootOrder", (VOID **)&BootOrderList, &BootOrderListSize);
if (BootOrderList == NULL) {
return EFI_NOT_FOUND;
}
@@ -325,13 +330,14 @@ BOpt_GetBootOptions (
//
// Get the BootNext from the Var
//
GetEfiGlobalVariable2 (L"BootNext", (VOID **) &BootNext, &BootNextSize);
GetEfiGlobalVariable2 (L"BootNext", (VOID **)&BootNext, &BootNextSize);
if (BootNext != NULL) {
if (BootNextSize != sizeof (UINT16)) {
FreePool (BootNext);
BootNext = NULL;
}
}
BootOption = EfiBootManagerGetLoadOptions (&BootOptionCount, LoadOptionTypeBoot);
for (Index = 0; Index < BootOrderListSize / sizeof (UINT16); Index++) {
//
@@ -345,13 +351,13 @@ BOpt_GetBootOptions (
//
// Get all loadoptions from the VAR
//
GetEfiGlobalVariable2 (BootString, (VOID **) &LoadOptionFromVar, &BootOptionSize);
GetEfiGlobalVariable2 (BootString, (VOID **)&LoadOptionFromVar, &BootOptionSize);
if (LoadOptionFromVar == NULL) {
continue;
}
if (BootNext != NULL) {
BootNextFlag = (BOOLEAN) (*BootNext == BootOrderList[Index]);
BootNextFlag = (BOOLEAN)(*BootNext == BootOrderList[Index]);
} else {
BootNextFlag = FALSE;
}
@@ -359,19 +365,19 @@ BOpt_GetBootOptions (
NewMenuEntry = BOpt_CreateMenuEntry (BM_LOAD_CONTEXT_SELECT);
ASSERT (NULL != NewMenuEntry);
NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;
NewLoadContext = (BM_LOAD_CONTEXT *)NewMenuEntry->VariableContext;
LoadOptionPtr = LoadOptionFromVar;
LoadOptionEnd = LoadOptionFromVar + BootOptionSize;
LoadOptionPtr = LoadOptionFromVar;
LoadOptionEnd = LoadOptionFromVar + BootOptionSize;
NewMenuEntry->OptionNumber = BootOrderList[Index];
NewLoadContext->Deleted = FALSE;
NewLoadContext->IsBootNext = BootNextFlag;
NewMenuEntry->OptionNumber = BootOrderList[Index];
NewLoadContext->Deleted = FALSE;
NewLoadContext->IsBootNext = BootNextFlag;
//
// Is a Legacy Device?
//
Ptr = (UINT8 *) LoadOptionFromVar;
Ptr = (UINT8 *)LoadOptionFromVar;
//
// Attribute = *(UINT32 *)Ptr;
@@ -386,38 +392,39 @@ BOpt_GetBootOptions (
//
// Description = (CHAR16 *)Ptr;
//
Ptr += StrSize ((CHAR16 *) Ptr);
Ptr += StrSize ((CHAR16 *)Ptr);
//
// Now Ptr point to Device Path
//
DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) Ptr;
DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)Ptr;
if ((BBS_DEVICE_PATH == DevicePath->Type) && (BBS_BBS_DP == DevicePath->SubType)) {
NewLoadContext->IsLegacy = TRUE;
} else {
NewLoadContext->IsLegacy = FALSE;
}
//
// LoadOption is a pointer type of UINT8
// for easy use with following LOAD_OPTION
// embedded in this struct
//
NewLoadContext->Attributes = *(UINT32 *) LoadOptionPtr;
NewLoadContext->Attributes = *(UINT32 *)LoadOptionPtr;
LoadOptionPtr += sizeof (UINT32);
NewLoadContext->FilePathListLength = *(UINT16 *) LoadOptionPtr;
LoadOptionPtr += sizeof (UINT16);
NewLoadContext->FilePathListLength = *(UINT16 *)LoadOptionPtr;
LoadOptionPtr += sizeof (UINT16);
StringSize = StrSize((UINT16*)LoadOptionPtr);
StringSize = StrSize ((UINT16 *)LoadOptionPtr);
NewLoadContext->Description = AllocateZeroPool (StrSize((UINT16*)LoadOptionPtr));
NewLoadContext->Description = AllocateZeroPool (StrSize ((UINT16 *)LoadOptionPtr));
ASSERT (NewLoadContext->Description != NULL);
StrCpyS (NewLoadContext->Description, StrSize((UINT16*)LoadOptionPtr) / sizeof (UINT16), (UINT16*)LoadOptionPtr);
StrCpyS (NewLoadContext->Description, StrSize ((UINT16 *)LoadOptionPtr) / sizeof (UINT16), (UINT16 *)LoadOptionPtr);
ASSERT (NewLoadContext->Description != NULL);
NewMenuEntry->DisplayString = NewLoadContext->Description;
NewMenuEntry->DisplayString = NewLoadContext->Description;
NewMenuEntry->DisplayStringToken = HiiSetString (CallbackData->BmmHiiHandle, 0, NewMenuEntry->DisplayString, NULL);
LoadOptionPtr += StringSize;
@@ -426,21 +433,21 @@ BOpt_GetBootOptions (
ASSERT (NewLoadContext->FilePathList != NULL);
CopyMem (
NewLoadContext->FilePathList,
(EFI_DEVICE_PATH_PROTOCOL *) LoadOptionPtr,
(EFI_DEVICE_PATH_PROTOCOL *)LoadOptionPtr,
NewLoadContext->FilePathListLength
);
NewMenuEntry->HelpString = UiDevicePathToStr (NewLoadContext->FilePathList);
NewMenuEntry->HelpString = UiDevicePathToStr (NewLoadContext->FilePathList);
NewMenuEntry->HelpStringToken = HiiSetString (CallbackData->BmmHiiHandle, 0, NewMenuEntry->HelpString, NULL);
LoadOptionPtr += NewLoadContext->FilePathListLength;
if (LoadOptionPtr < LoadOptionEnd) {
OptionalDataSize = BootOptionSize -
sizeof (UINT32) -
sizeof (UINT16) -
StringSize -
NewLoadContext->FilePathListLength;
sizeof (UINT32) -
sizeof (UINT16) -
StringSize -
NewLoadContext->FilePathListLength;
NewLoadContext->OptionalData = AllocateZeroPool (OptionalDataSize);
ASSERT (NewLoadContext->OptionalData != NULL);
@@ -455,11 +462,13 @@ BOpt_GetBootOptions (
MenuCount++;
FreePool (LoadOptionFromVar);
}
EfiBootManagerFreeLoadOptions (BootOption, BootOptionCount);
if (BootNext != NULL) {
FreePool (BootNext);
}
if (BootOrderList != NULL) {
FreePool (BootOrderList);
}
@@ -484,19 +493,19 @@ BOpt_FindDrivers (
VOID
)
{
UINTN NoDevicePathHandles;
EFI_HANDLE *DevicePathHandle;
UINTN Index;
EFI_STATUS Status;
BM_MENU_ENTRY *NewMenuEntry;
BM_HANDLE_CONTEXT *NewHandleContext;
EFI_HANDLE CurHandle;
UINTN OptionNumber;
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *SimpleFs;
EFI_LOAD_FILE_PROTOCOL *LoadFile;
UINTN NoDevicePathHandles;
EFI_HANDLE *DevicePathHandle;
UINTN Index;
EFI_STATUS Status;
BM_MENU_ENTRY *NewMenuEntry;
BM_HANDLE_CONTEXT *NewHandleContext;
EFI_HANDLE CurHandle;
UINTN OptionNumber;
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *SimpleFs;
EFI_LOAD_FILE_PROTOCOL *LoadFile;
SimpleFs = NULL;
LoadFile = NULL;
SimpleFs = NULL;
LoadFile = NULL;
InitializeListHead (&DriverMenu.Head);
@@ -523,7 +532,7 @@ BOpt_FindDrivers (
Status = gBS->HandleProtocol (
CurHandle,
&gEfiSimpleFileSystemProtocolGuid,
(VOID **) &SimpleFs
(VOID **)&SimpleFs
);
if (Status == EFI_SUCCESS) {
continue;
@@ -532,7 +541,7 @@ BOpt_FindDrivers (
Status = gBS->HandleProtocol (
CurHandle,
&gEfiLoadFileProtocolGuid,
(VOID **) &LoadFile
(VOID **)&LoadFile
);
if (Status == EFI_SUCCESS) {
continue;
@@ -544,17 +553,16 @@ BOpt_FindDrivers (
return EFI_OUT_OF_RESOURCES;
}
NewHandleContext = (BM_HANDLE_CONTEXT *) NewMenuEntry->VariableContext;
NewHandleContext->Handle = CurHandle;
NewHandleContext->DevicePath = DevicePathFromHandle (CurHandle);
NewMenuEntry->DisplayString = UiDevicePathToStr (NewHandleContext->DevicePath);
NewMenuEntry->DisplayStringToken = HiiSetString (mBmmCallbackInfo->BmmHiiHandle,0,NewMenuEntry->DisplayString,NULL);
NewMenuEntry->HelpString = NULL;
NewMenuEntry->HelpStringToken = NewMenuEntry->DisplayStringToken;
NewMenuEntry->OptionNumber = OptionNumber;
NewHandleContext = (BM_HANDLE_CONTEXT *)NewMenuEntry->VariableContext;
NewHandleContext->Handle = CurHandle;
NewHandleContext->DevicePath = DevicePathFromHandle (CurHandle);
NewMenuEntry->DisplayString = UiDevicePathToStr (NewHandleContext->DevicePath);
NewMenuEntry->DisplayStringToken = HiiSetString (mBmmCallbackInfo->BmmHiiHandle, 0, NewMenuEntry->DisplayString, NULL);
NewMenuEntry->HelpString = NULL;
NewMenuEntry->HelpStringToken = NewMenuEntry->DisplayStringToken;
NewMenuEntry->OptionNumber = OptionNumber;
OptionNumber++;
InsertTailList (&DriverMenu.Head, &NewMenuEntry->Link);
}
if (DevicePathHandle != NULL) {
@@ -576,16 +584,16 @@ BOpt_FindDrivers (
**/
UINT16
BOpt_GetOptionNumber (
CHAR16 *Type
CHAR16 *Type
)
{
UINT16 *OrderList;
UINTN OrderListSize;
UINTN Index;
CHAR16 StrTemp[20];
UINT16 *OptionBuffer;
UINT16 OptionNumber;
UINTN OptionSize;
UINT16 *OrderList;
UINTN OrderListSize;
UINTN Index;
CHAR16 StrTemp[20];
UINT16 *OptionBuffer;
UINT16 OptionNumber;
UINTN OptionSize;
OrderListSize = 0;
OrderList = NULL;
@@ -594,7 +602,7 @@ BOpt_GetOptionNumber (
UnicodeSPrint (StrTemp, sizeof (StrTemp), L"%sOrder", Type);
GetEfiGlobalVariable2 (StrTemp, (VOID **) &OrderList, &OrderListSize);
GetEfiGlobalVariable2 (StrTemp, (VOID **)&OrderList, &OrderListSize);
for (OptionNumber = 0; ; OptionNumber++) {
if (OrderList != NULL) {
for (Index = 0; Index < OrderListSize / sizeof (UINT16); Index++) {
@@ -610,9 +618,10 @@ BOpt_GetOptionNumber (
//
continue;
}
UnicodeSPrint (StrTemp, sizeof (StrTemp), L"%s%04x", Type, (UINTN) OptionNumber);
DEBUG((DEBUG_ERROR,"Option = %s\n", StrTemp));
GetEfiGlobalVariable2 (StrTemp, (VOID **) &OptionBuffer, &OptionSize);
UnicodeSPrint (StrTemp, sizeof (StrTemp), L"%s%04x", Type, (UINTN)OptionNumber);
DEBUG ((DEBUG_ERROR, "Option = %s\n", StrTemp));
GetEfiGlobalVariable2 (StrTemp, (VOID **)&OptionBuffer, &OptionSize);
if (NULL == OptionBuffer) {
//
// The Boot[OptionNumber] / Driver[OptionNumber] NOT occurs, we found it
@@ -667,22 +676,22 @@ BOpt_GetDriverOptionNumber (
**/
EFI_STATUS
BOpt_GetDriverOptions (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
UINTN Index;
UINT16 DriverString[12];
UINT8 *LoadOptionFromVar;
UINTN DriverOptionSize;
UINTN Index;
UINT16 DriverString[12];
UINT8 *LoadOptionFromVar;
UINTN DriverOptionSize;
UINT16 *DriverOrderList;
UINTN DriverOrderListSize;
BM_MENU_ENTRY *NewMenuEntry;
BM_LOAD_CONTEXT *NewLoadContext;
UINT8 *LoadOptionPtr;
UINTN StringSize;
UINTN OptionalDataSize;
UINT8 *LoadOptionEnd;
UINT16 *DriverOrderList;
UINTN DriverOrderListSize;
BM_MENU_ENTRY *NewMenuEntry;
BM_LOAD_CONTEXT *NewLoadContext;
UINT8 *LoadOptionPtr;
UINTN StringSize;
UINTN OptionalDataSize;
UINT8 *LoadOptionEnd;
DriverOrderListSize = 0;
DriverOrderList = NULL;
@@ -693,7 +702,7 @@ BOpt_GetDriverOptions (
//
// Get the DriverOrder from the Var
//
GetEfiGlobalVariable2 (L"DriverOrder", (VOID **) &DriverOrderList, &DriverOrderListSize);
GetEfiGlobalVariable2 (L"DriverOrder", (VOID **)&DriverOrderList, &DriverOrderListSize);
if (DriverOrderList == NULL) {
return EFI_NOT_FOUND;
}
@@ -708,23 +717,22 @@ BOpt_GetDriverOptions (
//
// Get all loadoptions from the VAR
//
GetEfiGlobalVariable2 (DriverString, (VOID **) &LoadOptionFromVar, &DriverOptionSize);
GetEfiGlobalVariable2 (DriverString, (VOID **)&LoadOptionFromVar, &DriverOptionSize);
if (LoadOptionFromVar == NULL) {
continue;
}
NewMenuEntry = BOpt_CreateMenuEntry (BM_LOAD_CONTEXT_SELECT);
if (NULL == NewMenuEntry) {
return EFI_OUT_OF_RESOURCES;
}
NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;
LoadOptionPtr = LoadOptionFromVar;
LoadOptionEnd = LoadOptionFromVar + DriverOptionSize;
NewMenuEntry->OptionNumber = DriverOrderList[Index];
NewLoadContext->Deleted = FALSE;
NewLoadContext->IsLegacy = FALSE;
NewLoadContext = (BM_LOAD_CONTEXT *)NewMenuEntry->VariableContext;
LoadOptionPtr = LoadOptionFromVar;
LoadOptionEnd = LoadOptionFromVar + DriverOptionSize;
NewMenuEntry->OptionNumber = DriverOrderList[Index];
NewLoadContext->Deleted = FALSE;
NewLoadContext->IsLegacy = FALSE;
//
// LoadOption is a pointer type of UINT8
@@ -732,22 +740,22 @@ BOpt_GetDriverOptions (
// embedded in this struct
//
NewLoadContext->Attributes = *(UINT32 *) LoadOptionPtr;
NewLoadContext->Attributes = *(UINT32 *)LoadOptionPtr;
LoadOptionPtr += sizeof (UINT32);
NewLoadContext->FilePathListLength = *(UINT16 *) LoadOptionPtr;
LoadOptionPtr += sizeof (UINT16);
NewLoadContext->FilePathListLength = *(UINT16 *)LoadOptionPtr;
LoadOptionPtr += sizeof (UINT16);
StringSize = StrSize ((UINT16 *) LoadOptionPtr);
StringSize = StrSize ((UINT16 *)LoadOptionPtr);
NewLoadContext->Description = AllocateZeroPool (StringSize);
ASSERT (NewLoadContext->Description != NULL);
CopyMem (
NewLoadContext->Description,
(UINT16 *) LoadOptionPtr,
(UINT16 *)LoadOptionPtr,
StringSize
);
NewMenuEntry->DisplayString = NewLoadContext->Description;
NewMenuEntry->DisplayString = NewLoadContext->Description;
NewMenuEntry->DisplayStringToken = HiiSetString (CallbackData->BmmHiiHandle, 0, NewMenuEntry->DisplayString, NULL);
LoadOptionPtr += StringSize;
@@ -756,21 +764,21 @@ BOpt_GetDriverOptions (
ASSERT (NewLoadContext->FilePathList != NULL);
CopyMem (
NewLoadContext->FilePathList,
(EFI_DEVICE_PATH_PROTOCOL *) LoadOptionPtr,
(EFI_DEVICE_PATH_PROTOCOL *)LoadOptionPtr,
NewLoadContext->FilePathListLength
);
NewMenuEntry->HelpString = UiDevicePathToStr (NewLoadContext->FilePathList);
NewMenuEntry->HelpString = UiDevicePathToStr (NewLoadContext->FilePathList);
NewMenuEntry->HelpStringToken = HiiSetString (CallbackData->BmmHiiHandle, 0, NewMenuEntry->HelpString, NULL);
LoadOptionPtr += NewLoadContext->FilePathListLength;
if (LoadOptionPtr < LoadOptionEnd) {
OptionalDataSize = DriverOptionSize -
sizeof (UINT32) -
sizeof (UINT16) -
StringSize -
NewLoadContext->FilePathListLength;
sizeof (UINT32) -
sizeof (UINT16) -
StringSize -
NewLoadContext->FilePathListLength;
NewLoadContext->OptionalData = AllocateZeroPool (OptionalDataSize);
ASSERT (NewLoadContext->OptionalData != NULL);
@@ -779,12 +787,10 @@ BOpt_GetDriverOptions (
LoadOptionPtr,
OptionalDataSize
);
}
InsertTailList (&DriverOptionMenu.Head, &NewMenuEntry->Link);
FreePool (LoadOptionFromVar);
}
if (DriverOrderList != NULL) {
@@ -793,7 +799,6 @@ BOpt_GetDriverOptions (
DriverOptionMenu.MenuNumber = Index;
return EFI_SUCCESS;
}
/**
@@ -804,31 +809,32 @@ BOpt_GetDriverOptions (
**/
VOID
GetBootOrder (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
BMM_FAKE_NV_DATA *BmmConfig;
UINT16 Index;
UINT16 OptionOrderIndex;
UINTN DeviceType;
BM_MENU_ENTRY *NewMenuEntry;
BM_LOAD_CONTEXT *NewLoadContext;
BMM_FAKE_NV_DATA *BmmConfig;
UINT16 Index;
UINT16 OptionOrderIndex;
UINTN DeviceType;
BM_MENU_ENTRY *NewMenuEntry;
BM_LOAD_CONTEXT *NewLoadContext;
ASSERT (CallbackData != NULL);
DeviceType = (UINTN) -1;
DeviceType = (UINTN)-1;
BmmConfig = &CallbackData->BmmFakeNvData;
ZeroMem (BmmConfig->BootOptionOrder, sizeof (BmmConfig->BootOptionOrder));
for (Index = 0, OptionOrderIndex = 0; ((Index < BootOptionMenu.MenuNumber) &&
(OptionOrderIndex < (sizeof (BmmConfig->BootOptionOrder) / sizeof (BmmConfig->BootOptionOrder[0]))));
Index++) {
(OptionOrderIndex < (sizeof (BmmConfig->BootOptionOrder) / sizeof (BmmConfig->BootOptionOrder[0]))));
Index++)
{
NewMenuEntry = BOpt_GetMenuEntry (&BootOptionMenu, Index);
NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;
NewLoadContext = (BM_LOAD_CONTEXT *)NewMenuEntry->VariableContext;
if (NewLoadContext->IsLegacy) {
if (((BBS_BBS_DEVICE_PATH *) NewLoadContext->FilePathList)->DeviceType != DeviceType) {
DeviceType = ((BBS_BBS_DEVICE_PATH *) NewLoadContext->FilePathList)->DeviceType;
if (((BBS_BBS_DEVICE_PATH *)NewLoadContext->FilePathList)->DeviceType != DeviceType) {
DeviceType = ((BBS_BBS_DEVICE_PATH *)NewLoadContext->FilePathList)->DeviceType;
} else {
//
// Only show one legacy boot option for the same device type
@@ -837,7 +843,8 @@ GetBootOrder (
continue;
}
}
BmmConfig->BootOptionOrder[OptionOrderIndex++] = (UINT32) (NewMenuEntry->OptionNumber + 1);
BmmConfig->BootOptionOrder[OptionOrderIndex++] = (UINT32)(NewMenuEntry->OptionNumber + 1);
}
}
@@ -849,32 +856,32 @@ GetBootOrder (
**/
VOID
GetDriverOrder (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
BMM_FAKE_NV_DATA *BmmConfig;
UINT16 Index;
UINT16 OptionOrderIndex;
UINTN DeviceType;
BM_MENU_ENTRY *NewMenuEntry;
BM_LOAD_CONTEXT *NewLoadContext;
BMM_FAKE_NV_DATA *BmmConfig;
UINT16 Index;
UINT16 OptionOrderIndex;
UINTN DeviceType;
BM_MENU_ENTRY *NewMenuEntry;
BM_LOAD_CONTEXT *NewLoadContext;
ASSERT (CallbackData != NULL);
DeviceType = (UINTN) -1;
DeviceType = (UINTN)-1;
BmmConfig = &CallbackData->BmmFakeNvData;
ZeroMem (BmmConfig->DriverOptionOrder, sizeof (BmmConfig->DriverOptionOrder));
for (Index = 0, OptionOrderIndex = 0; ((Index < DriverOptionMenu.MenuNumber) &&
(OptionOrderIndex < (sizeof (BmmConfig->DriverOptionOrder) / sizeof (BmmConfig->DriverOptionOrder[0]))));
Index++) {
(OptionOrderIndex < (sizeof (BmmConfig->DriverOptionOrder) / sizeof (BmmConfig->DriverOptionOrder[0]))));
Index++)
{
NewMenuEntry = BOpt_GetMenuEntry (&DriverOptionMenu, Index);
NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;
NewLoadContext = (BM_LOAD_CONTEXT *)NewMenuEntry->VariableContext;
if (NewLoadContext->IsLegacy) {
if (((BBS_BBS_DEVICE_PATH *) NewLoadContext->FilePathList)->DeviceType != DeviceType) {
DeviceType = ((BBS_BBS_DEVICE_PATH *) NewLoadContext->FilePathList)->DeviceType;
if (((BBS_BBS_DEVICE_PATH *)NewLoadContext->FilePathList)->DeviceType != DeviceType) {
DeviceType = ((BBS_BBS_DEVICE_PATH *)NewLoadContext->FilePathList)->DeviceType;
} else {
//
// Only show one legacy boot option for the same device type
@@ -883,7 +890,8 @@ GetDriverOrder (
continue;
}
}
BmmConfig->DriverOptionOrder[OptionOrderIndex++] = (UINT32) (NewMenuEntry->OptionNumber + 1);
BmmConfig->DriverOptionOrder[OptionOrderIndex++] = (UINT32)(NewMenuEntry->OptionNumber + 1);
}
}
@@ -898,15 +906,15 @@ GetDriverOrder (
BOOLEAN
EFIAPI
BootFromFile (
IN EFI_DEVICE_PATH_PROTOCOL *FilePath
IN EFI_DEVICE_PATH_PROTOCOL *FilePath
)
{
EFI_BOOT_MANAGER_LOAD_OPTION BootOption;
CHAR16 *FileName;
EFI_BOOT_MANAGER_LOAD_OPTION BootOption;
CHAR16 *FileName;
FileName = NULL;
FileName = ExtractFileNameFromDevicePath(FilePath);
FileName = ExtractFileNameFromDevicePath (FilePath);
if (FileName != NULL) {
EfiBootManagerInitializeLoadOption (
&BootOption,
@@ -931,7 +939,7 @@ BootFromFile (
EfiBootManagerBoot (&BootOption);
BmmSetConsoleMode (TRUE);
FreePool(FileName);
FreePool (FileName);
EfiBootManagerFreeLoadOption (&BootOption);
}
@@ -947,24 +955,24 @@ BootFromFile (
**/
BOOLEAN
ReSendForm(
ReSendForm (
IN EFI_DEVICE_PATH_PROTOCOL *FilePath,
IN EFI_FORM_ID FormId
)
{
gBootMaintenancePrivate.LoadContext->FilePathList = FilePath;
UpdateOptionPage(&gBootMaintenancePrivate, FormId, FilePath);
UpdateOptionPage (&gBootMaintenancePrivate, FormId, FilePath);
gBootMaintenancePrivate.FormBrowser2->SendForm (
gBootMaintenancePrivate.FormBrowser2,
&gBootMaintenancePrivate.BmmHiiHandle,
1,
&mBootMaintGuid,
FormId,
NULL,
NULL
);
gBootMaintenancePrivate.FormBrowser2,
&gBootMaintenancePrivate.BmmHiiHandle,
1,
&mBootMaintGuid,
FormId,
NULL,
NULL
);
return TRUE;
}
@@ -979,10 +987,10 @@ ReSendForm(
BOOLEAN
EFIAPI
CreateBootOptionFromFile (
IN EFI_DEVICE_PATH_PROTOCOL *FilePath
IN EFI_DEVICE_PATH_PROTOCOL *FilePath
)
{
return ReSendForm(FilePath, FORM_BOOT_ADD_ID);
return ReSendForm (FilePath, FORM_BOOT_ADD_ID);
}
/**
@@ -997,8 +1005,8 @@ CreateBootOptionFromFile (
BOOLEAN
EFIAPI
CreateDriverOptionFromFile (
IN EFI_DEVICE_PATH_PROTOCOL *FilePath
IN EFI_DEVICE_PATH_PROTOCOL *FilePath
)
{
return ReSendForm(FilePath, FORM_DRV_ADD_FILE_ID);
return ReSendForm (FilePath, FORM_DRV_ADD_FILE_ID);
}

View File

@@ -31,7 +31,7 @@ MatchDevicePaths (
EFI_DEVICE_PATH_PROTOCOL *DevicePathInst;
UINTN Size;
if (Multi == NULL || Single == NULL) {
if ((Multi == NULL) || (Single == NULL)) {
return FALSE;
}
@@ -69,14 +69,14 @@ MatchDevicePaths (
**/
BOOLEAN
IsIsaSerialNode (
IN ACPI_HID_DEVICE_PATH *Acpi
IN ACPI_HID_DEVICE_PATH *Acpi
)
{
return (BOOLEAN) (
(DevicePathType (Acpi) == ACPI_DEVICE_PATH) &&
(DevicePathSubType (Acpi) == ACPI_DP) &&
(ReadUnaligned32 (&Acpi->HID) == EISA_PNP_ID (0x0501))
);
return (BOOLEAN)(
(DevicePathType (Acpi) == ACPI_DEVICE_PATH) &&
(DevicePathSubType (Acpi) == ACPI_DP) &&
(ReadUnaligned32 (&Acpi->HID) == EISA_PNP_ID (0x0501))
);
}
/**
@@ -119,20 +119,20 @@ ChangeTerminalDevicePath (
BM_TERMINAL_CONTEXT *NewTerminalContext;
BM_MENU_ENTRY *NewMenuEntry;
Node = DevicePath;
Node = NextDevicePathNode (Node);
Com = 0;
Node = DevicePath;
Node = NextDevicePathNode (Node);
Com = 0;
while (!IsDevicePathEnd (Node)) {
Acpi = (ACPI_HID_DEVICE_PATH *) Node;
Acpi = (ACPI_HID_DEVICE_PATH *)Node;
if (IsIsaSerialNode (Acpi)) {
CopyMem (&Com, &Acpi->UID, sizeof (UINT32));
}
NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Com);
NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;
NewTerminalContext = (BM_TERMINAL_CONTEXT *)NewMenuEntry->VariableContext;
if ((DevicePathType (Node) == MESSAGING_DEVICE_PATH) && (DevicePathSubType (Node) == MSG_UART_DP)) {
Uart = (UART_DEVICE_PATH *) Node;
Uart = (UART_DEVICE_PATH *)Node;
CopyMem (
&Uart->BaudRate,
&NewTerminalContext->BaudRate,
@@ -164,7 +164,7 @@ ChangeTerminalDevicePath (
Node1 = NextDevicePathNode (Node1);
while (!IsDevicePathEnd (Node1)) {
if ((DevicePathType (Node1) == MESSAGING_DEVICE_PATH) && (DevicePathSubType (Node1) == MSG_UART_DP)) {
Uart1 = (UART_DEVICE_PATH *) Node1;
Uart1 = (UART_DEVICE_PATH *)Node1;
CopyMem (
&Uart1->BaudRate,
&NewTerminalContext->BaudRate,
@@ -190,11 +190,13 @@ ChangeTerminalDevicePath (
);
break;
}
//
// end if
//
Node1 = NextDevicePathNode (Node1);
}
//
// end while
//
@@ -206,7 +208,6 @@ ChangeTerminalDevicePath (
}
return EFI_SUCCESS;
}
/**
@@ -229,23 +230,23 @@ ChangeVariableDevicePath (
BM_TERMINAL_CONTEXT *NewTerminalContext;
BM_MENU_ENTRY *NewMenuEntry;
Node = DevicePath;
Node = NextDevicePathNode (Node);
Com = 0;
Node = DevicePath;
Node = NextDevicePathNode (Node);
Com = 0;
while (!IsDevicePathEnd (Node)) {
Acpi = (ACPI_HID_DEVICE_PATH *) Node;
Acpi = (ACPI_HID_DEVICE_PATH *)Node;
if (IsIsaSerialNode (Acpi)) {
CopyMem (&Com, &Acpi->UID, sizeof (UINT32));
}
if ((DevicePathType (Node) == MESSAGING_DEVICE_PATH) && (DevicePathSubType (Node) == MSG_UART_DP)) {
NewMenuEntry = BOpt_GetMenuEntry (
&TerminalMenu,
Com
);
&TerminalMenu,
Com
);
ASSERT (NewMenuEntry != NULL);
NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;
Uart = (UART_DEVICE_PATH *) Node;
NewTerminalContext = (BM_TERMINAL_CONTEXT *)NewMenuEntry->VariableContext;
Uart = (UART_DEVICE_PATH *)Node;
CopyMem (
&Uart->BaudRate,
&NewTerminalContext->BaudRate,
@@ -287,8 +288,8 @@ ChangeVariableDevicePath (
**/
BOOLEAN
RetrieveUartUid (
IN EFI_HANDLE Handle,
IN OUT UINT32 *AcpiUid
IN EFI_HANDLE Handle,
IN OUT UINT32 *AcpiUid
)
{
EFI_STATUS Status;
@@ -298,27 +299,29 @@ RetrieveUartUid (
Status = gBS->HandleProtocol (
Handle,
&gEfiDevicePathProtocolGuid,
(VOID **) &DevicePath
(VOID **)&DevicePath
);
if (EFI_ERROR (Status)) {
return FALSE;
}
Acpi = NULL;
for (; !IsDevicePathEnd (DevicePath); DevicePath = NextDevicePathNode (DevicePath)) {
for ( ; !IsDevicePathEnd (DevicePath); DevicePath = NextDevicePathNode (DevicePath)) {
if ((DevicePathType (DevicePath) == MESSAGING_DEVICE_PATH) && (DevicePathSubType (DevicePath) == MSG_UART_DP)) {
break;
}
//
// Acpi points to the node before the Uart node
//
Acpi = (ACPI_HID_DEVICE_PATH *) DevicePath;
Acpi = (ACPI_HID_DEVICE_PATH *)DevicePath;
}
if ((Acpi != NULL) && IsIsaSerialNode (Acpi)) {
if (AcpiUid != NULL) {
CopyMem (AcpiUid, &Acpi->UID, sizeof (UINT32));
}
return TRUE;
} else {
return FALSE;
@@ -333,8 +336,8 @@ RetrieveUartUid (
**/
VOID
SortedUartHandle (
IN EFI_HANDLE *Handles,
IN UINTN NoHandles
IN EFI_HANDLE *Handles,
IN UINTN NoHandles
)
{
UINTN Index1;
@@ -349,6 +352,7 @@ SortedUartHandle (
if (!RetrieveUartUid (Handles[Index1], &AcpiUid1)) {
continue;
}
TempHandle = Handles[Index1];
Position = Index1;
TempAcpiUid = AcpiUid1;
@@ -357,12 +361,14 @@ SortedUartHandle (
if (!RetrieveUartUid (Handles[Index2], &AcpiUid2)) {
continue;
}
if (AcpiUid2 < TempAcpiUid) {
TempAcpiUid = AcpiUid2;
TempHandle = Handles[Index2];
Position = Index2;
}
}
Handles[Position] = Handles[Index1];
Handles[Index1] = TempHandle;
}
@@ -382,9 +388,9 @@ SortedUartHandle (
**/
BOOLEAN
IsTerminalDevicePath (
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
OUT TYPE_OF_TERMINAL *Termi,
OUT UINTN *Com
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
OUT TYPE_OF_TERMINAL *Termi,
OUT UINTN *Com
);
/**
@@ -422,13 +428,13 @@ LocateSerialIo (
//
InitializeListHead (&TerminalMenu.Head);
TerminalMenu.MenuNumber = 0;
Status = gBS->LocateHandleBuffer (
ByProtocol,
&gEfiSerialIoProtocolGuid,
NULL,
&NoHandles,
&Handles
);
Status = gBS->LocateHandleBuffer (
ByProtocol,
&gEfiSerialIoProtocolGuid,
NULL,
&NoHandles,
&Handles
);
if (EFI_ERROR (Status)) {
//
// No serial ports present
@@ -447,20 +453,21 @@ LocateSerialIo (
// Check to see whether the handle has DevicePath Protocol installed
//
gBS->HandleProtocol (
Handles[Index],
&gEfiDevicePathProtocolGuid,
(VOID **) &DevicePath
);
Handles[Index],
&gEfiDevicePathProtocolGuid,
(VOID **)&DevicePath
);
Acpi = NULL;
for (Node = DevicePath; !IsDevicePathEnd (Node); Node = NextDevicePathNode (Node)) {
if ((DevicePathType (Node) == MESSAGING_DEVICE_PATH) && (DevicePathSubType (Node) == MSG_UART_DP)) {
break;
}
//
// Acpi points to the node before Uart node
//
Acpi = (ACPI_HID_DEVICE_PATH *) Node;
Acpi = (ACPI_HID_DEVICE_PATH *)Node;
}
if ((Acpi != NULL) && IsIsaSerialNode (Acpi)) {
@@ -470,7 +477,7 @@ LocateSerialIo (
return EFI_OUT_OF_RESOURCES;
}
NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;
NewTerminalContext = (BM_TERMINAL_CONTEXT *)NewMenuEntry->VariableContext;
CopyMem (&NewMenuEntry->OptionNumber, &Acpi->UID, sizeof (UINT32));
NewTerminalContext->DevicePath = DuplicateDevicePath (DevicePath);
//
@@ -491,10 +498,10 @@ LocateSerialIo (
NewMenuEntry->HelpStringToken = NewMenuEntry->DisplayStringToken;
gBS->HandleProtocol (
Handles[Index],
&gEfiSerialIoProtocolGuid,
(VOID **) &SerialIo
);
Handles[Index],
&gEfiSerialIoProtocolGuid,
(VOID **)&SerialIo
);
CopyMem (
&NewTerminalContext->BaudRate,
@@ -523,6 +530,7 @@ LocateSerialIo (
TerminalMenu.MenuNumber++;
}
}
if (Handles != NULL) {
FreePool (Handles);
}
@@ -530,9 +538,9 @@ LocateSerialIo (
//
// Get L"ConOut", L"ConIn" and L"ErrOut" from the Var
//
GetEfiGlobalVariable2 (L"ConOut", (VOID**)&OutDevicePath, NULL);
GetEfiGlobalVariable2 (L"ConIn", (VOID**)&InpDevicePath, NULL);
GetEfiGlobalVariable2 (L"ErrOut", (VOID**)&ErrDevicePath, NULL);
GetEfiGlobalVariable2 (L"ConOut", (VOID **)&OutDevicePath, NULL);
GetEfiGlobalVariable2 (L"ConIn", (VOID **)&InpDevicePath, NULL);
GetEfiGlobalVariable2 (L"ErrOut", (VOID **)&ErrDevicePath, NULL);
if (OutDevicePath != NULL) {
UpdateComAttributeFromVariable (OutDevicePath);
}
@@ -551,26 +559,27 @@ LocateSerialIo (
return EFI_NOT_FOUND;
}
NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;
NewTerminalContext = (BM_TERMINAL_CONTEXT *)NewMenuEntry->VariableContext;
NewTerminalContext->TerminalType = 0;
NewTerminalContext->IsConIn = FALSE;
NewTerminalContext->IsConOut = FALSE;
NewTerminalContext->IsStdErr = FALSE;
NewTerminalContext->TerminalType = 0;
NewTerminalContext->IsConIn = FALSE;
NewTerminalContext->IsConOut = FALSE;
NewTerminalContext->IsStdErr = FALSE;
Vendor.Header.Type = MESSAGING_DEVICE_PATH;
Vendor.Header.SubType = MSG_VENDOR_DP;
Vendor.Header.Type = MESSAGING_DEVICE_PATH;
Vendor.Header.SubType = MSG_VENDOR_DP;
for (Index2 = 0; Index2 < (ARRAY_SIZE (TerminalTypeGuid)); Index2++) {
CopyMem (&Vendor.Guid, &TerminalTypeGuid[Index2], sizeof (EFI_GUID));
SetDevicePathNodeLength (&Vendor.Header, sizeof (VENDOR_DEVICE_PATH));
NewDevicePath = AppendDevicePathNode (
NewTerminalContext->DevicePath,
(EFI_DEVICE_PATH_PROTOCOL *) &Vendor
(EFI_DEVICE_PATH_PROTOCOL *)&Vendor
);
if (NewMenuEntry->HelpString != NULL) {
FreePool (NewMenuEntry->HelpString);
}
//
// NewMenuEntry->HelpString = UiDevicePathToStr (NewDevicePath);
// NewMenuEntry->DisplayString = NewMenuEntry->HelpString;
@@ -582,18 +591,18 @@ LocateSerialIo (
NewMenuEntry->HelpStringToken = NewMenuEntry->DisplayStringToken;
if (MatchDevicePaths (OutDevicePath, NewDevicePath)) {
NewTerminalContext->IsConOut = TRUE;
NewTerminalContext->TerminalType = (UINT8) Index2;
NewTerminalContext->IsConOut = TRUE;
NewTerminalContext->TerminalType = (UINT8)Index2;
}
if (MatchDevicePaths (InpDevicePath, NewDevicePath)) {
NewTerminalContext->IsConIn = TRUE;
NewTerminalContext->TerminalType = (UINT8) Index2;
NewTerminalContext->IsConIn = TRUE;
NewTerminalContext->TerminalType = (UINT8)Index2;
}
if (MatchDevicePaths (ErrDevicePath, NewDevicePath)) {
NewTerminalContext->IsStdErr = TRUE;
NewTerminalContext->TerminalType = (UINT8) Index2;
NewTerminalContext->IsStdErr = TRUE;
NewTerminalContext->TerminalType = (UINT8)Index2;
}
}
}
@@ -624,24 +633,24 @@ UpdateComAttributeFromVariable (
BM_TERMINAL_CONTEXT *NewTerminalContext;
UINTN Index;
Node = DevicePath;
Node = NextDevicePathNode (Node);
TerminalNumber = 0;
Node = DevicePath;
Node = NextDevicePathNode (Node);
TerminalNumber = 0;
for (Index = 0; Index < TerminalMenu.MenuNumber; Index++) {
while (!IsDevicePathEnd (Node)) {
Acpi = (ACPI_HID_DEVICE_PATH *) Node;
Acpi = (ACPI_HID_DEVICE_PATH *)Node;
if (IsIsaSerialNode (Acpi)) {
CopyMem (&TerminalNumber, &Acpi->UID, sizeof (UINT32));
}
if ((DevicePathType (Node) == MESSAGING_DEVICE_PATH) && (DevicePathSubType (Node) == MSG_UART_DP)) {
Uart = (UART_DEVICE_PATH *) Node;
NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, TerminalNumber);
Uart = (UART_DEVICE_PATH *)Node;
NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, TerminalNumber);
if (NULL == NewMenuEntry) {
return EFI_NOT_FOUND;
}
NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;
NewTerminalContext = (BM_TERMINAL_CONTEXT *)NewMenuEntry->VariableContext;
CopyMem (
&NewTerminalContext->BaudRate,
&Uart->BaudRate,
@@ -666,15 +675,15 @@ UpdateComAttributeFromVariable (
sizeof (UINT8)
);
SerialNode = NewTerminalContext->DevicePath;
SerialNode = NextDevicePathNode (SerialNode);
SerialNode = NewTerminalContext->DevicePath;
SerialNode = NextDevicePathNode (SerialNode);
while (!IsDevicePathEnd (SerialNode)) {
if ((DevicePathType (SerialNode) == MESSAGING_DEVICE_PATH) && (DevicePathSubType (SerialNode) == MSG_UART_DP)) {
//
// Update following device paths according to
// previous acquired uart attributes
//
Uart1 = (UART_DEVICE_PATH *) SerialNode;
Uart1 = (UART_DEVICE_PATH *)SerialNode;
CopyMem (
&Uart1->BaudRate,
&NewTerminalContext->BaudRate,
@@ -702,6 +711,7 @@ UpdateComAttributeFromVariable (
SerialNode = NextDevicePathNode (SerialNode);
}
//
// end while
//
@@ -709,6 +719,7 @@ UpdateComAttributeFromVariable (
Node = NextDevicePathNode (Node);
}
//
// end while
//
@@ -734,7 +745,7 @@ UpdateComAttributeFromVariable (
**/
EFI_STATUS
GetConsoleMenu (
IN UINTN ConsoleMenuType
IN UINTN ConsoleMenuType
)
{
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
@@ -755,26 +766,26 @@ GetConsoleMenu (
AllDevicePath = NULL;
AllCount = 0;
switch (ConsoleMenuType) {
case BM_CONSOLE_IN_CONTEXT_SELECT:
ConsoleMenu = &ConsoleInpMenu;
GetEfiGlobalVariable2 (L"ConIn", (VOID**)&DevicePath, NULL);
GetEfiGlobalVariable2 (L"ConInDev", (VOID**)&AllDevicePath, NULL);
break;
case BM_CONSOLE_IN_CONTEXT_SELECT:
ConsoleMenu = &ConsoleInpMenu;
GetEfiGlobalVariable2 (L"ConIn", (VOID **)&DevicePath, NULL);
GetEfiGlobalVariable2 (L"ConInDev", (VOID **)&AllDevicePath, NULL);
break;
case BM_CONSOLE_OUT_CONTEXT_SELECT:
ConsoleMenu = &ConsoleOutMenu;
GetEfiGlobalVariable2 (L"ConOut", (VOID**)&DevicePath, NULL);
GetEfiGlobalVariable2 (L"ConOutDev", (VOID**)&AllDevicePath, NULL);
break;
case BM_CONSOLE_OUT_CONTEXT_SELECT:
ConsoleMenu = &ConsoleOutMenu;
GetEfiGlobalVariable2 (L"ConOut", (VOID **)&DevicePath, NULL);
GetEfiGlobalVariable2 (L"ConOutDev", (VOID **)&AllDevicePath, NULL);
break;
case BM_CONSOLE_ERR_CONTEXT_SELECT:
ConsoleMenu = &ConsoleErrMenu;
GetEfiGlobalVariable2 (L"ErrOut", (VOID**)&DevicePath, NULL);
GetEfiGlobalVariable2 (L"ErrOutDev", (VOID**)&AllDevicePath, NULL);
break;
case BM_CONSOLE_ERR_CONTEXT_SELECT:
ConsoleMenu = &ConsoleErrMenu;
GetEfiGlobalVariable2 (L"ErrOut", (VOID **)&DevicePath, NULL);
GetEfiGlobalVariable2 (L"ErrOutDev", (VOID **)&AllDevicePath, NULL);
break;
default:
return EFI_UNSUPPORTED;
default:
return EFI_UNSUPPORTED;
}
if (NULL == AllDevicePath) {
@@ -791,19 +802,19 @@ GetConsoleMenu (
MultiDevicePath = AllDevicePath;
Index2 = 0;
for (Index = 0; Index < AllCount; Index++) {
DevicePathInst = GetNextDevicePathInstance (&MultiDevicePath, &Size);
DevicePathInst = GetNextDevicePathInstance (&MultiDevicePath, &Size);
NewMenuEntry = BOpt_CreateMenuEntry (BM_CONSOLE_CONTEXT_SELECT);
NewMenuEntry = BOpt_CreateMenuEntry (BM_CONSOLE_CONTEXT_SELECT);
if (NULL == NewMenuEntry) {
return EFI_OUT_OF_RESOURCES;
}
NewConsoleContext = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;
NewMenuEntry->OptionNumber = Index2;
NewConsoleContext = (BM_CONSOLE_CONTEXT *)NewMenuEntry->VariableContext;
NewMenuEntry->OptionNumber = Index2;
NewConsoleContext->DevicePath = DuplicateDevicePath (DevicePathInst);
ASSERT (NewConsoleContext->DevicePath != NULL);
NewMenuEntry->DisplayString = EfiLibStrFromDatahub (NewConsoleContext->DevicePath);
NewMenuEntry->DisplayString = EfiLibStrFromDatahub (NewConsoleContext->DevicePath);
if (NULL == NewMenuEntry->DisplayString) {
NewMenuEntry->DisplayString = UiDevicePathToStr (NewConsoleContext->DevicePath);
}
@@ -887,9 +898,9 @@ FreeAllConsoles (
**/
BOOLEAN
IsTerminalDevicePath (
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
OUT TYPE_OF_TERMINAL *Termi,
OUT UINTN *Com
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
OUT TYPE_OF_TERMINAL *Termi,
OUT UINTN *Com
)
{
BOOLEAN IsTerminal;
@@ -908,24 +919,25 @@ IsTerminalDevicePath (
//
// Vendor points to the node before the End node
//
Vendor = (VENDOR_DEVICE_PATH *) Node;
Vendor = (VENDOR_DEVICE_PATH *)Node;
if ((DevicePathType (Node) == MESSAGING_DEVICE_PATH) && (DevicePathSubType (Node) == MSG_UART_DP)) {
Uart = (UART_DEVICE_PATH *) Node;
Uart = (UART_DEVICE_PATH *)Node;
}
if (Uart == NULL) {
//
// Acpi points to the node before the UART node
//
Acpi = (ACPI_HID_DEVICE_PATH *) Node;
Acpi = (ACPI_HID_DEVICE_PATH *)Node;
}
}
if (Vendor == NULL ||
DevicePathType (Vendor) != MESSAGING_DEVICE_PATH ||
DevicePathSubType (Vendor) != MSG_VENDOR_DP ||
Uart == NULL) {
if ((Vendor == NULL) ||
(DevicePathType (Vendor) != MESSAGING_DEVICE_PATH) ||
(DevicePathSubType (Vendor) != MSG_VENDOR_DP) ||
(Uart == NULL))
{
return FALSE;
}
@@ -936,7 +948,7 @@ IsTerminalDevicePath (
//
for (Index = 0; Index < ARRAY_SIZE (TerminalTypeGuid); Index++) {
if (CompareGuid (&Vendor->Guid, &TerminalTypeGuid[Index])) {
*Termi = Index;
*Termi = Index;
IsTerminal = TRUE;
break;
}
@@ -966,28 +978,28 @@ IsTerminalDevicePath (
**/
VOID
GetConsoleOutMode (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
UINTN Col;
UINTN Row;
UINTN CurrentCol;
UINTN CurrentRow;
UINTN Mode;
UINTN MaxMode;
EFI_STATUS Status;
UINTN Col;
UINTN Row;
UINTN CurrentCol;
UINTN CurrentRow;
UINTN Mode;
UINTN MaxMode;
EFI_STATUS Status;
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut;
ConOut = gST->ConOut;
MaxMode = (UINTN) (ConOut->Mode->MaxMode);
ConOut = gST->ConOut;
MaxMode = (UINTN)(ConOut->Mode->MaxMode);
CurrentCol = PcdGet32 (PcdSetupConOutColumn);
CurrentRow = PcdGet32 (PcdSetupConOutRow);
for (Mode = 0; Mode < MaxMode; Mode++) {
Status = ConOut->QueryMode (ConOut, Mode, &Col, &Row);
if (!EFI_ERROR(Status)) {
if (CurrentCol == Col && CurrentRow == Row) {
CallbackData->BmmFakeNvData.ConsoleOutMode = (UINT16) Mode;
if (!EFI_ERROR (Status)) {
if ((CurrentCol == Col) && (CurrentRow == Row)) {
CallbackData->BmmFakeNvData.ConsoleOutMode = (UINT16)Mode;
break;
}
}
@@ -1004,28 +1016,29 @@ GetConsoleOutMode (
**/
VOID
GetConsoleInCheck (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
UINT16 Index;
BM_MENU_ENTRY *NewMenuEntry;
UINT8 *ConInCheck;
BM_CONSOLE_CONTEXT *NewConsoleContext;
BM_TERMINAL_CONTEXT *NewTerminalContext;
UINT16 Index;
BM_MENU_ENTRY *NewMenuEntry;
UINT8 *ConInCheck;
BM_CONSOLE_CONTEXT *NewConsoleContext;
BM_TERMINAL_CONTEXT *NewTerminalContext;
ASSERT (CallbackData != NULL);
ConInCheck = &CallbackData->BmmFakeNvData.ConsoleInCheck[0];
for (Index = 0; ((Index < ConsoleInpMenu.MenuNumber) && \
(Index < MAX_MENU_NUMBER)) ; Index++) {
(Index < MAX_MENU_NUMBER)); Index++)
{
NewMenuEntry = BOpt_GetMenuEntry (&ConsoleInpMenu, Index);
NewConsoleContext = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;
NewConsoleContext = (BM_CONSOLE_CONTEXT *)NewMenuEntry->VariableContext;
ConInCheck[Index] = NewConsoleContext->IsActive;
}
for (Index = 0; Index < TerminalMenu.MenuNumber; Index++) {
NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index);
NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;
NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index);
NewTerminalContext = (BM_TERMINAL_CONTEXT *)NewMenuEntry->VariableContext;
ASSERT (Index + ConsoleInpMenu.MenuNumber < MAX_MENU_NUMBER);
ConInCheck[Index + ConsoleInpMenu.MenuNumber] = NewTerminalContext->IsConIn;
}
@@ -1041,27 +1054,28 @@ GetConsoleInCheck (
**/
VOID
GetConsoleOutCheck (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
UINT16 Index;
BM_MENU_ENTRY *NewMenuEntry;
UINT8 *ConOutCheck;
BM_CONSOLE_CONTEXT *NewConsoleContext;
BM_TERMINAL_CONTEXT *NewTerminalContext;
UINT16 Index;
BM_MENU_ENTRY *NewMenuEntry;
UINT8 *ConOutCheck;
BM_CONSOLE_CONTEXT *NewConsoleContext;
BM_TERMINAL_CONTEXT *NewTerminalContext;
ASSERT (CallbackData != NULL);
ConOutCheck = &CallbackData->BmmFakeNvData.ConsoleOutCheck[0];
for (Index = 0; ((Index < ConsoleOutMenu.MenuNumber) && \
(Index < MAX_MENU_NUMBER)) ; Index++) {
NewMenuEntry = BOpt_GetMenuEntry (&ConsoleOutMenu, Index);
NewConsoleContext = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;
(Index < MAX_MENU_NUMBER)); Index++)
{
NewMenuEntry = BOpt_GetMenuEntry (&ConsoleOutMenu, Index);
NewConsoleContext = (BM_CONSOLE_CONTEXT *)NewMenuEntry->VariableContext;
ConOutCheck[Index] = NewConsoleContext->IsActive;
}
for (Index = 0; Index < TerminalMenu.MenuNumber; Index++) {
NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index);
NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;
NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index);
NewTerminalContext = (BM_TERMINAL_CONTEXT *)NewMenuEntry->VariableContext;
ASSERT (Index + ConsoleOutMenu.MenuNumber < MAX_MENU_NUMBER);
ConOutCheck[Index + ConsoleOutMenu.MenuNumber] = NewTerminalContext->IsConOut;
}
@@ -1077,27 +1091,28 @@ GetConsoleOutCheck (
**/
VOID
GetConsoleErrCheck (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
UINT16 Index;
BM_MENU_ENTRY *NewMenuEntry;
UINT8 *ConErrCheck;
BM_CONSOLE_CONTEXT *NewConsoleContext;
BM_TERMINAL_CONTEXT *NewTerminalContext;
UINT16 Index;
BM_MENU_ENTRY *NewMenuEntry;
UINT8 *ConErrCheck;
BM_CONSOLE_CONTEXT *NewConsoleContext;
BM_TERMINAL_CONTEXT *NewTerminalContext;
ASSERT (CallbackData != NULL);
ConErrCheck = &CallbackData->BmmFakeNvData.ConsoleErrCheck[0];
for (Index = 0; ((Index < ConsoleErrMenu.MenuNumber) && \
(Index < MAX_MENU_NUMBER)) ; Index++) {
NewMenuEntry = BOpt_GetMenuEntry (&ConsoleErrMenu, Index);
NewConsoleContext = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;
(Index < MAX_MENU_NUMBER)); Index++)
{
NewMenuEntry = BOpt_GetMenuEntry (&ConsoleErrMenu, Index);
NewConsoleContext = (BM_CONSOLE_CONTEXT *)NewMenuEntry->VariableContext;
ConErrCheck[Index] = NewConsoleContext->IsActive;
}
for (Index = 0; Index < TerminalMenu.MenuNumber; Index++) {
NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index);
NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;
NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index);
NewTerminalContext = (BM_TERMINAL_CONTEXT *)NewMenuEntry->VariableContext;
ASSERT (Index + ConsoleErrMenu.MenuNumber < MAX_MENU_NUMBER);
ConErrCheck[Index + ConsoleErrMenu.MenuNumber] = NewTerminalContext->IsStdErr;
}
@@ -1113,7 +1128,7 @@ GetConsoleErrCheck (
**/
VOID
GetTerminalAttribute (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
BMM_FAKE_NV_DATA *CurrentFakeNVMap;
@@ -1126,35 +1141,38 @@ GetTerminalAttribute (
CurrentFakeNVMap = &CallbackData->BmmFakeNvData;
for (TerminalIndex = 0; ((TerminalIndex < TerminalMenu.MenuNumber) && \
(TerminalIndex < MAX_MENU_NUMBER)); TerminalIndex++) {
NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, TerminalIndex);
NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;
for (AttributeIndex = 0; AttributeIndex < sizeof (BaudRateList) / sizeof (BaudRateList [0]); AttributeIndex++) {
if (NewTerminalContext->BaudRate == (UINT64) (BaudRateList[AttributeIndex].Value)) {
(TerminalIndex < MAX_MENU_NUMBER)); TerminalIndex++)
{
NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, TerminalIndex);
NewTerminalContext = (BM_TERMINAL_CONTEXT *)NewMenuEntry->VariableContext;
for (AttributeIndex = 0; AttributeIndex < sizeof (BaudRateList) / sizeof (BaudRateList[0]); AttributeIndex++) {
if (NewTerminalContext->BaudRate == (UINT64)(BaudRateList[AttributeIndex].Value)) {
NewTerminalContext->BaudRateIndex = AttributeIndex;
break;
}
}
for (AttributeIndex = 0; AttributeIndex < ARRAY_SIZE (DataBitsList); AttributeIndex++) {
if (NewTerminalContext->DataBits == (UINT64) (DataBitsList[AttributeIndex].Value)) {
if (NewTerminalContext->DataBits == (UINT64)(DataBitsList[AttributeIndex].Value)) {
NewTerminalContext->DataBitsIndex = AttributeIndex;
break;
}
}
for (AttributeIndex = 0; AttributeIndex < ARRAY_SIZE (ParityList); AttributeIndex++) {
if (NewTerminalContext->Parity == (UINT64) (ParityList[AttributeIndex].Value)) {
if (NewTerminalContext->Parity == (UINT64)(ParityList[AttributeIndex].Value)) {
NewTerminalContext->ParityIndex = AttributeIndex;
break;
}
}
for (AttributeIndex = 0; AttributeIndex < ARRAY_SIZE (StopBitsList); AttributeIndex++) {
if (NewTerminalContext->StopBits == (UINT64) (StopBitsList[AttributeIndex].Value)) {
if (NewTerminalContext->StopBits == (UINT64)(StopBitsList[AttributeIndex].Value)) {
NewTerminalContext->StopBitsIndex = AttributeIndex;
break;
}
}
CurrentFakeNVMap->COMBaudRate[TerminalIndex] = NewTerminalContext->BaudRateIndex;
CurrentFakeNVMap->COMDataRate[TerminalIndex] = NewTerminalContext->DataBitsIndex;
CurrentFakeNVMap->COMStopBits[TerminalIndex] = NewTerminalContext->StopBitsIndex;
@@ -1163,4 +1181,3 @@ GetTerminalAttribute (
CurrentFakeNVMap->COMFlowControl[TerminalIndex] = NewTerminalContext->FlowControl;
}
}

View File

@@ -9,34 +9,34 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "BootMaintenanceManager.h"
VOID *mStartOpCodeHandle = NULL;
VOID *mEndOpCodeHandle = NULL;
EFI_IFR_GUID_LABEL *mStartLabel = NULL;
EFI_IFR_GUID_LABEL *mEndLabel = NULL;
VOID *mEndOpCodeHandle = NULL;
EFI_IFR_GUID_LABEL *mStartLabel = NULL;
EFI_IFR_GUID_LABEL *mEndLabel = NULL;
///
/// Terminal type string token storage
///
UINT16 TerminalType[9] = {
STRING_TOKEN(STR_COM_TYPE_0),
STRING_TOKEN(STR_COM_TYPE_1),
STRING_TOKEN(STR_COM_TYPE_2),
STRING_TOKEN(STR_COM_TYPE_3),
STRING_TOKEN(STR_COM_TYPE_4),
STRING_TOKEN(STR_COM_TYPE_5),
STRING_TOKEN(STR_COM_TYPE_6),
STRING_TOKEN(STR_COM_TYPE_7),
STRING_TOKEN(STR_COM_TYPE_8),
UINT16 TerminalType[9] = {
STRING_TOKEN (STR_COM_TYPE_0),
STRING_TOKEN (STR_COM_TYPE_1),
STRING_TOKEN (STR_COM_TYPE_2),
STRING_TOKEN (STR_COM_TYPE_3),
STRING_TOKEN (STR_COM_TYPE_4),
STRING_TOKEN (STR_COM_TYPE_5),
STRING_TOKEN (STR_COM_TYPE_6),
STRING_TOKEN (STR_COM_TYPE_7),
STRING_TOKEN (STR_COM_TYPE_8),
};
///
/// Flow Control type string token storage
///
UINT16 mFlowControlType[2] = {
STRING_TOKEN(STR_NONE_FLOW_CONTROL),
STRING_TOKEN(STR_HARDWARE_FLOW_CONTROL)
UINT16 mFlowControlType[2] = {
STRING_TOKEN (STR_NONE_FLOW_CONTROL),
STRING_TOKEN (STR_HARDWARE_FLOW_CONTROL)
};
UINT32 mFlowControlValue[2] = {
UINT32 mFlowControlValue[2] = {
0,
UART_FLOW_CONTROL_HARDWARE
};
@@ -44,215 +44,215 @@ UINT32 mFlowControlValue[2] = {
///
/// Console Input Device Selection Menu
///
BM_MENU_OPTION ConsoleInpMenu = {
BM_MENU_OPTION ConsoleInpMenu = {
BM_MENU_OPTION_SIGNATURE,
{NULL},
{ NULL },
0
};
///
/// Console Output Device Selection Menu
///
BM_MENU_OPTION ConsoleOutMenu = {
BM_MENU_OPTION ConsoleOutMenu = {
BM_MENU_OPTION_SIGNATURE,
{NULL},
{ NULL },
0
};
///
/// Error Output Device Selection Menu
///
BM_MENU_OPTION ConsoleErrMenu = {
BM_MENU_OPTION ConsoleErrMenu = {
BM_MENU_OPTION_SIGNATURE,
{NULL},
{ NULL },
0
};
///
/// Boot Option from variable Menu
///
BM_MENU_OPTION BootOptionMenu = {
BM_MENU_OPTION BootOptionMenu = {
BM_MENU_OPTION_SIGNATURE,
{NULL},
{ NULL },
0
};
///
/// Driver Option from variable menu
///
BM_MENU_OPTION DriverOptionMenu = {
BM_MENU_OPTION DriverOptionMenu = {
BM_MENU_OPTION_SIGNATURE,
{NULL},
{ NULL },
0
};
///
/// Handles in current system selection menu
///
BM_MENU_OPTION DriverMenu = {
BM_MENU_OPTION DriverMenu = {
BM_MENU_OPTION_SIGNATURE,
{NULL},
{ NULL },
0
};
BM_MENU_OPTION TerminalMenu = {
BM_MENU_OPTION TerminalMenu = {
BM_MENU_OPTION_SIGNATURE,
{NULL},
{ NULL },
0
};
///
/// Value and string token correspondency for BaudRate
///
COM_ATTR BaudRateList[19] = {
COM_ATTR BaudRateList[19] = {
{
115200,
STRING_TOKEN(STR_COM_BAUD_RATE_0)
STRING_TOKEN (STR_COM_BAUD_RATE_0)
},
{
57600,
STRING_TOKEN(STR_COM_BAUD_RATE_1)
STRING_TOKEN (STR_COM_BAUD_RATE_1)
},
{
38400,
STRING_TOKEN(STR_COM_BAUD_RATE_2)
STRING_TOKEN (STR_COM_BAUD_RATE_2)
},
{
19200,
STRING_TOKEN(STR_COM_BAUD_RATE_3)
STRING_TOKEN (STR_COM_BAUD_RATE_3)
},
{
9600,
STRING_TOKEN(STR_COM_BAUD_RATE_4)
STRING_TOKEN (STR_COM_BAUD_RATE_4)
},
{
7200,
STRING_TOKEN(STR_COM_BAUD_RATE_5)
STRING_TOKEN (STR_COM_BAUD_RATE_5)
},
{
4800,
STRING_TOKEN(STR_COM_BAUD_RATE_6)
STRING_TOKEN (STR_COM_BAUD_RATE_6)
},
{
3600,
STRING_TOKEN(STR_COM_BAUD_RATE_7)
STRING_TOKEN (STR_COM_BAUD_RATE_7)
},
{
2400,
STRING_TOKEN(STR_COM_BAUD_RATE_8)
STRING_TOKEN (STR_COM_BAUD_RATE_8)
},
{
2000,
STRING_TOKEN(STR_COM_BAUD_RATE_9)
STRING_TOKEN (STR_COM_BAUD_RATE_9)
},
{
1800,
STRING_TOKEN(STR_COM_BAUD_RATE_10)
STRING_TOKEN (STR_COM_BAUD_RATE_10)
},
{
1200,
STRING_TOKEN(STR_COM_BAUD_RATE_11)
STRING_TOKEN (STR_COM_BAUD_RATE_11)
},
{
600,
STRING_TOKEN(STR_COM_BAUD_RATE_12)
STRING_TOKEN (STR_COM_BAUD_RATE_12)
},
{
300,
STRING_TOKEN(STR_COM_BAUD_RATE_13)
STRING_TOKEN (STR_COM_BAUD_RATE_13)
},
{
150,
STRING_TOKEN(STR_COM_BAUD_RATE_14)
STRING_TOKEN (STR_COM_BAUD_RATE_14)
},
{
134,
STRING_TOKEN(STR_COM_BAUD_RATE_15)
STRING_TOKEN (STR_COM_BAUD_RATE_15)
},
{
110,
STRING_TOKEN(STR_COM_BAUD_RATE_16)
STRING_TOKEN (STR_COM_BAUD_RATE_16)
},
{
75,
STRING_TOKEN(STR_COM_BAUD_RATE_17)
STRING_TOKEN (STR_COM_BAUD_RATE_17)
},
{
50,
STRING_TOKEN(STR_COM_BAUD_RATE_18)
STRING_TOKEN (STR_COM_BAUD_RATE_18)
}
};
///
/// Value and string token correspondency for DataBits
///
COM_ATTR DataBitsList[4] = {
COM_ATTR DataBitsList[4] = {
{
5,
STRING_TOKEN(STR_COM_DATA_BITS_0)
STRING_TOKEN (STR_COM_DATA_BITS_0)
},
{
6,
STRING_TOKEN(STR_COM_DATA_BITS_1)
STRING_TOKEN (STR_COM_DATA_BITS_1)
},
{
7,
STRING_TOKEN(STR_COM_DATA_BITS_2)
STRING_TOKEN (STR_COM_DATA_BITS_2)
},
{
8,
STRING_TOKEN(STR_COM_DATA_BITS_3)
STRING_TOKEN (STR_COM_DATA_BITS_3)
}
};
///
/// Value and string token correspondency for Parity
///
COM_ATTR ParityList[5] = {
COM_ATTR ParityList[5] = {
{
NoParity,
STRING_TOKEN(STR_COM_PAR_0)
STRING_TOKEN (STR_COM_PAR_0)
},
{
EvenParity,
STRING_TOKEN(STR_COM_PAR_1)
STRING_TOKEN (STR_COM_PAR_1)
},
{
OddParity,
STRING_TOKEN(STR_COM_PAR_2)
STRING_TOKEN (STR_COM_PAR_2)
},
{
MarkParity,
STRING_TOKEN(STR_COM_PAR_3)
STRING_TOKEN (STR_COM_PAR_3)
},
{
SpaceParity,
STRING_TOKEN(STR_COM_PAR_4)
STRING_TOKEN (STR_COM_PAR_4)
}
};
///
/// Value and string token correspondency for Baudreate
///
COM_ATTR StopBitsList[3] = {
COM_ATTR StopBitsList[3] = {
{
OneStopBit,
STRING_TOKEN(STR_COM_STOP_BITS_0)
STRING_TOKEN (STR_COM_STOP_BITS_0)
},
{
OneFiveStopBits,
STRING_TOKEN(STR_COM_STOP_BITS_1)
STRING_TOKEN (STR_COM_STOP_BITS_1)
},
{
TwoStopBits,
STRING_TOKEN(STR_COM_STOP_BITS_2)
STRING_TOKEN (STR_COM_STOP_BITS_2)
}
};
///
/// Guid for messaging path, used in Serial port setting.
///
EFI_GUID TerminalTypeGuid[9] = {
EFI_GUID TerminalTypeGuid[9] = {
DEVICE_PATH_MESSAGING_PC_ANSI,
DEVICE_PATH_MESSAGING_VT_100,
DEVICE_PATH_MESSAGING_VT_100_PLUS,

View File

@@ -5,6 +5,7 @@ Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _FORM_GUID_H_
#define _FORM_GUID_H_
@@ -41,50 +42,48 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#define FORM_CON_MODE_ID 0x1021
#define FORM_BOOT_FROM_FILE_ID 0x1024
#define MAXIMUM_FORM_ID 0x10FF
#define MAXIMUM_FORM_ID 0x10FF
#define KEY_VALUE_COM_SET_BAUD_RATE 0x1101
#define KEY_VALUE_COM_SET_DATA_BITS 0x1102
#define KEY_VALUE_COM_SET_STOP_BITS 0x1103
#define KEY_VALUE_COM_SET_PARITY 0x1104
#define KEY_VALUE_COM_SET_TERMI_TYPE 0x1105
#define KEY_VALUE_MAIN_BOOT_NEXT 0x1106
#define KEY_VALUE_BOOT_ADD_DESC_DATA 0x1107
#define KEY_VALUE_BOOT_ADD_OPT_DATA 0x1108
#define KEY_VALUE_DRIVER_ADD_DESC_DATA 0x1109
#define KEY_VALUE_DRIVER_ADD_OPT_DATA 0x110A
#define KEY_VALUE_SAVE_AND_EXIT 0x110B
#define KEY_VALUE_NO_SAVE_AND_EXIT 0x110C
#define KEY_VALUE_BOOT_FROM_FILE 0x110D
#define FORM_RESET 0x110E
#define KEY_VALUE_BOOT_DESCRIPTION 0x110F
#define KEY_VALUE_BOOT_OPTION 0x1110
#define KEY_VALUE_DRIVER_DESCRIPTION 0x1111
#define KEY_VALUE_DRIVER_OPTION 0x1112
#define KEY_VALUE_SAVE_AND_EXIT_BOOT 0x1113
#define KEY_VALUE_NO_SAVE_AND_EXIT_BOOT 0x1114
#define KEY_VALUE_SAVE_AND_EXIT_DRIVER 0x1115
#define KEY_VALUE_NO_SAVE_AND_EXIT_DRIVER 0x1116
#define KEY_VALUE_TRIGGER_FORM_OPEN_ACTION 0x1117
#define KEY_VALUE_COM_SET_BAUD_RATE 0x1101
#define KEY_VALUE_COM_SET_DATA_BITS 0x1102
#define KEY_VALUE_COM_SET_STOP_BITS 0x1103
#define KEY_VALUE_COM_SET_PARITY 0x1104
#define KEY_VALUE_COM_SET_TERMI_TYPE 0x1105
#define KEY_VALUE_MAIN_BOOT_NEXT 0x1106
#define KEY_VALUE_BOOT_ADD_DESC_DATA 0x1107
#define KEY_VALUE_BOOT_ADD_OPT_DATA 0x1108
#define KEY_VALUE_DRIVER_ADD_DESC_DATA 0x1109
#define KEY_VALUE_DRIVER_ADD_OPT_DATA 0x110A
#define KEY_VALUE_SAVE_AND_EXIT 0x110B
#define KEY_VALUE_NO_SAVE_AND_EXIT 0x110C
#define KEY_VALUE_BOOT_FROM_FILE 0x110D
#define FORM_RESET 0x110E
#define KEY_VALUE_BOOT_DESCRIPTION 0x110F
#define KEY_VALUE_BOOT_OPTION 0x1110
#define KEY_VALUE_DRIVER_DESCRIPTION 0x1111
#define KEY_VALUE_DRIVER_OPTION 0x1112
#define KEY_VALUE_SAVE_AND_EXIT_BOOT 0x1113
#define KEY_VALUE_NO_SAVE_AND_EXIT_BOOT 0x1114
#define KEY_VALUE_SAVE_AND_EXIT_DRIVER 0x1115
#define KEY_VALUE_NO_SAVE_AND_EXIT_DRIVER 0x1116
#define KEY_VALUE_TRIGGER_FORM_OPEN_ACTION 0x1117
#define MAXIMUM_NORMAL_KEY_VALUE 0x11FF
#define MAXIMUM_NORMAL_KEY_VALUE 0x11FF
//
// Varstore ID defined for Buffer Storage
//
#define VARSTORE_ID_BOOT_MAINT 0x1000
#define VARSTORE_ID_BOOT_MAINT 0x1000
//
// End Label
//
#define LABEL_FORM_MAIN_START 0xfffc
#define LABEL_FORM_MAIN_END 0xfffd
#define LABEL_BMM_PLATFORM_INFORMATION 0xfffe
#define LABEL_END 0xffff
#define MAX_MENU_NUMBER 100
#define LABEL_FORM_MAIN_START 0xfffc
#define LABEL_FORM_MAIN_END 0xfffd
#define LABEL_BMM_PLATFORM_INFORMATION 0xfffe
#define LABEL_END 0xffff
#define MAX_MENU_NUMBER 100
///
/// This is the structure that will be used to store the
@@ -99,81 +98,81 @@ typedef struct {
// Three questions displayed at the main page
// for Timeout, BootNext, Variables respectively
//
UINT16 BootTimeOut;
UINT32 BootNext;
UINT16 BootTimeOut;
UINT32 BootNext;
//
// This is the COM1 Attributes value storage
//
UINT8 COM1BaudRate;
UINT8 COM1DataRate;
UINT8 COM1StopBits;
UINT8 COM1Parity;
UINT8 COM1TerminalType;
UINT8 COM1BaudRate;
UINT8 COM1DataRate;
UINT8 COM1StopBits;
UINT8 COM1Parity;
UINT8 COM1TerminalType;
//
// This is the COM2 Attributes value storage
//
UINT8 COM2BaudRate;
UINT8 COM2DataRate;
UINT8 COM2StopBits;
UINT8 COM2Parity;
UINT8 COM2TerminalType;
UINT8 COM2BaudRate;
UINT8 COM2DataRate;
UINT8 COM2StopBits;
UINT8 COM2Parity;
UINT8 COM2TerminalType;
//
// Driver Option Add Handle page storage
//
UINT16 DriverAddHandleDesc[MAX_MENU_NUMBER];
UINT16 DriverAddHandleOptionalData[MAX_MENU_NUMBER];
UINT8 DriverAddActive;
UINT8 DriverAddForceReconnect;
UINT16 DriverAddHandleDesc[MAX_MENU_NUMBER];
UINT16 DriverAddHandleOptionalData[MAX_MENU_NUMBER];
UINT8 DriverAddActive;
UINT8 DriverAddForceReconnect;
//
// Console Input/Output/Errorout using COM port check storage
//
UINT8 ConsoleInputCOM1;
UINT8 ConsoleInputCOM2;
UINT8 ConsoleOutputCOM1;
UINT8 ConsoleOutputCOM2;
UINT8 ConsoleErrorCOM1;
UINT8 ConsoleErrorCOM2;
UINT8 ConsoleInputCOM1;
UINT8 ConsoleInputCOM2;
UINT8 ConsoleOutputCOM1;
UINT8 ConsoleOutputCOM2;
UINT8 ConsoleErrorCOM1;
UINT8 ConsoleErrorCOM2;
//
// At most 100 input/output/errorout device for console storage
//
UINT8 ConsoleCheck[MAX_MENU_NUMBER];
UINT8 ConsoleCheck[MAX_MENU_NUMBER];
//
// At most 100 input/output/errorout device for console storage
//
UINT8 ConsoleInCheck[MAX_MENU_NUMBER];
UINT8 ConsoleOutCheck[MAX_MENU_NUMBER];
UINT8 ConsoleErrCheck[MAX_MENU_NUMBER];
UINT8 ConsoleInCheck[MAX_MENU_NUMBER];
UINT8 ConsoleOutCheck[MAX_MENU_NUMBER];
UINT8 ConsoleErrCheck[MAX_MENU_NUMBER];
//
// Boot or Driver Option Order storage
// The value is the OptionNumber+1 because the order list value cannot be 0
// Use UINT32 to hold the potential value 0xFFFF+1=0x10000
//
UINT32 BootOptionOrder[MAX_MENU_NUMBER];
UINT32 DriverOptionOrder[MAX_MENU_NUMBER];
UINT32 BootOptionOrder[MAX_MENU_NUMBER];
UINT32 DriverOptionOrder[MAX_MENU_NUMBER];
//
// Boot or Driver Option Delete storage
//
BOOLEAN BootOptionDel[MAX_MENU_NUMBER];
BOOLEAN DriverOptionDel[MAX_MENU_NUMBER];
BOOLEAN BootOptionDelMark[MAX_MENU_NUMBER];
BOOLEAN DriverOptionDelMark[MAX_MENU_NUMBER];
BOOLEAN BootOptionDel[MAX_MENU_NUMBER];
BOOLEAN DriverOptionDel[MAX_MENU_NUMBER];
BOOLEAN BootOptionDelMark[MAX_MENU_NUMBER];
BOOLEAN DriverOptionDelMark[MAX_MENU_NUMBER];
//
// This is the Terminal Attributes value storage
//
UINT8 COMBaudRate[MAX_MENU_NUMBER];
UINT8 COMDataRate[MAX_MENU_NUMBER];
UINT8 COMStopBits[MAX_MENU_NUMBER];
UINT8 COMParity[MAX_MENU_NUMBER];
UINT8 COMTerminalType[MAX_MENU_NUMBER];
UINT8 COMFlowControl[MAX_MENU_NUMBER];
UINT8 COMBaudRate[MAX_MENU_NUMBER];
UINT8 COMDataRate[MAX_MENU_NUMBER];
UINT8 COMStopBits[MAX_MENU_NUMBER];
UINT8 COMParity[MAX_MENU_NUMBER];
UINT8 COMTerminalType[MAX_MENU_NUMBER];
UINT8 COMFlowControl[MAX_MENU_NUMBER];
//
// We use DisableMap array to record the enable/disable state of each boot device
@@ -181,26 +180,25 @@ typedef struct {
// the most left one stands for BBS table item 0, and the most right one stands for item 256
// If the bit is 1, it means the boot device has been disabled.
//
UINT8 DisableMap[32];
UINT8 DisableMap[32];
//
// Console Output Text Mode
//
UINT16 ConsoleOutMode;
UINT16 ConsoleOutMode;
//
// UINT16 PadArea[10];
//
UINT16 BootDescriptionData[MAX_MENU_NUMBER];
UINT16 BootOptionalData[127];
UINT16 DriverDescriptionData[MAX_MENU_NUMBER];
UINT16 DriverOptionalData[127];
BOOLEAN BootOptionChanged;
BOOLEAN DriverOptionChanged;
UINT8 Active;
UINT8 ForceReconnect;
UINT16 BootDescriptionData[MAX_MENU_NUMBER];
UINT16 BootOptionalData[127];
UINT16 DriverDescriptionData[MAX_MENU_NUMBER];
UINT16 DriverOptionalData[127];
BOOLEAN BootOptionChanged;
BOOLEAN DriverOptionChanged;
UINT8 Active;
UINT8 ForceReconnect;
} BMM_FAKE_NV_DATA;
#endif

View File

@@ -29,13 +29,13 @@ CreateUpdateData (
//
// Create Hii Extend Label OpCode as the start opcode
//
mStartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (mStartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
mStartLabel = (EFI_IFR_GUID_LABEL *)HiiCreateGuidOpCode (mStartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
mStartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
//
// Create Hii Extend Label OpCode as the end opcode
//
mEndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (mEndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
mEndLabel = (EFI_IFR_GUID_LABEL *)HiiCreateGuidOpCode (mEndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
mEndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
mEndLabel->Number = LABEL_END;
}
@@ -64,9 +64,8 @@ RefreshUpdateData (
//
// Create Hii Extend Label OpCode as the start opcode
//
mStartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (mStartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
mStartLabel = (EFI_IFR_GUID_LABEL *)HiiCreateGuidOpCode (mStartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
mStartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
}
/**
@@ -78,7 +77,7 @@ RefreshUpdateData (
**/
VOID
UpdatePageStart (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
RefreshUpdateData ();
@@ -109,7 +108,7 @@ UpdatePageStart (
**/
VOID
UpdatePageEnd (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
//
@@ -164,8 +163,8 @@ UpdatePageEnd (
**/
VOID
CleanUpPage (
IN UINT16 LabelId,
IN BMM_CALLBACK_DATA *CallbackData
IN UINT16 LabelId,
IN BMM_CALLBACK_DATA *CallbackData
)
{
RefreshUpdateData ();
@@ -191,11 +190,11 @@ CleanUpPage (
**/
VOID
UpdateConCOMPage (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
BM_MENU_ENTRY *NewMenuEntry;
UINT16 Index;
BM_MENU_ENTRY *NewMenuEntry;
UINT16 Index;
CallbackData->BmmAskSaveOrNot = TRUE;
@@ -210,14 +209,13 @@ UpdateConCOMPage (
NewMenuEntry->DisplayStringToken,
STRING_TOKEN (STR_NULL_STRING),
EFI_IFR_FLAG_CALLBACK,
(UINT16) (TERMINAL_OPTION_OFFSET + Index)
(UINT16)(TERMINAL_OPTION_OFFSET + Index)
);
}
UpdatePageEnd (CallbackData);
}
/**
Create a list of boot option from global BootOptionMenu. It
allow user to delete the boot option.
@@ -227,12 +225,12 @@ UpdateConCOMPage (
**/
VOID
UpdateBootDelPage (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
BM_MENU_ENTRY *NewMenuEntry;
BM_LOAD_CONTEXT *NewLoadContext;
UINT16 Index;
BM_MENU_ENTRY *NewMenuEntry;
BM_LOAD_CONTEXT *NewLoadContext;
UINT16 Index;
CallbackData->BmmAskSaveOrNot = TRUE;
@@ -240,8 +238,8 @@ UpdateBootDelPage (
ASSERT (BootOptionMenu.MenuNumber <= (sizeof (CallbackData->BmmFakeNvData.BootOptionDel) / sizeof (CallbackData->BmmFakeNvData.BootOptionDel[0])));
for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {
NewMenuEntry = BOpt_GetMenuEntry (&BootOptionMenu, Index);
NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;
NewMenuEntry = BOpt_GetMenuEntry (&BootOptionMenu, Index);
NewLoadContext = (BM_LOAD_CONTEXT *)NewMenuEntry->VariableContext;
if (NewLoadContext->IsLegacy) {
continue;
}
@@ -255,15 +253,15 @@ UpdateBootDelPage (
// deleted, browser maintains old useless info. So clear this info here, and later update this info to browser
// through HiiSetBrowserData function.
//
CallbackData->BmmFakeNvData.BootOptionDel[Index] = FALSE;
CallbackData->BmmFakeNvData.BootOptionDel[Index] = FALSE;
CallbackData->BmmOldFakeNVData.BootOptionDel[Index] = FALSE;
}
HiiCreateCheckBoxOpCode (
mStartOpCodeHandle,
(EFI_QUESTION_ID) (BOOT_OPTION_DEL_QUESTION_ID + Index),
(EFI_QUESTION_ID)(BOOT_OPTION_DEL_QUESTION_ID + Index),
VARSTORE_ID_BOOT_MAINT,
(UINT16) (BOOT_OPTION_DEL_VAR_OFFSET + Index),
(UINT16)(BOOT_OPTION_DEL_VAR_OFFSET + Index),
NewMenuEntry->DisplayStringToken,
NewMenuEntry->HelpStringToken,
EFI_IFR_FLAG_CALLBACK,
@@ -271,6 +269,7 @@ UpdateBootDelPage (
NULL
);
}
UpdatePageEnd (CallbackData);
}
@@ -282,11 +281,11 @@ UpdateBootDelPage (
**/
VOID
UpdateDrvAddHandlePage (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
BM_MENU_ENTRY *NewMenuEntry;
UINT16 Index;
BM_MENU_ENTRY *NewMenuEntry;
UINT16 Index;
CallbackData->BmmAskSaveOrNot = FALSE;
@@ -301,7 +300,7 @@ UpdateDrvAddHandlePage (
NewMenuEntry->DisplayStringToken,
STRING_TOKEN (STR_NULL_STRING),
EFI_IFR_FLAG_CALLBACK,
(UINT16) (HANDLE_OPTION_OFFSET + Index)
(UINT16)(HANDLE_OPTION_OFFSET + Index)
);
}
@@ -317,12 +316,12 @@ UpdateDrvAddHandlePage (
**/
VOID
UpdateDrvDelPage (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
BM_MENU_ENTRY *NewMenuEntry;
BM_LOAD_CONTEXT *NewLoadContext;
UINT16 Index;
BM_MENU_ENTRY *NewMenuEntry;
BM_LOAD_CONTEXT *NewLoadContext;
UINT16 Index;
CallbackData->BmmAskSaveOrNot = TRUE;
@@ -330,9 +329,9 @@ UpdateDrvDelPage (
ASSERT (DriverOptionMenu.MenuNumber <= (sizeof (CallbackData->BmmFakeNvData.DriverOptionDel) / sizeof (CallbackData->BmmFakeNvData.DriverOptionDel[0])));
for (Index = 0; Index < DriverOptionMenu.MenuNumber; Index++) {
NewMenuEntry = BOpt_GetMenuEntry (&DriverOptionMenu, Index);
NewMenuEntry = BOpt_GetMenuEntry (&DriverOptionMenu, Index);
NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;
NewLoadContext = (BM_LOAD_CONTEXT *)NewMenuEntry->VariableContext;
NewLoadContext->Deleted = FALSE;
if (CallbackData->BmmFakeNvData.DriverOptionDel[Index] && !CallbackData->BmmFakeNvData.DriverOptionDelMark[Index]) {
@@ -342,14 +341,15 @@ UpdateDrvDelPage (
// deleted, browser maintains old useless info. So clear this info here, and later update this info to browser
// through HiiSetBrowserData function.
//
CallbackData->BmmFakeNvData.DriverOptionDel[Index] = FALSE;
CallbackData->BmmFakeNvData.DriverOptionDel[Index] = FALSE;
CallbackData->BmmOldFakeNVData.DriverOptionDel[Index] = FALSE;
}
HiiCreateCheckBoxOpCode (
mStartOpCodeHandle,
(EFI_QUESTION_ID) (DRIVER_OPTION_DEL_QUESTION_ID + Index),
(EFI_QUESTION_ID)(DRIVER_OPTION_DEL_QUESTION_ID + Index),
VARSTORE_ID_BOOT_MAINT,
(UINT16) (DRIVER_OPTION_DEL_VAR_OFFSET + Index),
(UINT16)(DRIVER_OPTION_DEL_VAR_OFFSET + Index),
NewMenuEntry->DisplayStringToken,
NewMenuEntry->HelpStringToken,
EFI_IFR_FLAG_CALLBACK,
@@ -370,15 +370,15 @@ UpdateDrvDelPage (
**/
VOID
UpdateDriverAddHandleDescPage (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
BM_MENU_ENTRY *NewMenuEntry;
BM_MENU_ENTRY *NewMenuEntry;
CallbackData->BmmFakeNvData.DriverAddActive = 0x01;
CallbackData->BmmFakeNvData.DriverAddForceReconnect = 0x00;
CallbackData->BmmAskSaveOrNot = TRUE;
NewMenuEntry = CallbackData->MenuEntry;
CallbackData->BmmFakeNvData.DriverAddActive = 0x01;
CallbackData->BmmFakeNvData.DriverAddForceReconnect = 0x00;
CallbackData->BmmAskSaveOrNot = TRUE;
NewMenuEntry = CallbackData->MenuEntry;
UpdatePageStart (CallbackData);
@@ -392,7 +392,7 @@ UpdateDriverAddHandleDescPage (
HiiCreateStringOpCode (
mStartOpCodeHandle,
(EFI_QUESTION_ID) DRV_ADD_HANDLE_DESC_QUESTION_ID,
(EFI_QUESTION_ID)DRV_ADD_HANDLE_DESC_QUESTION_ID,
VARSTORE_ID_BOOT_MAINT,
DRV_ADD_HANDLE_DESC_VAR_OFFSET,
STRING_TOKEN (STR_LOAD_OPTION_DESC),
@@ -406,7 +406,7 @@ UpdateDriverAddHandleDescPage (
HiiCreateCheckBoxOpCode (
mStartOpCodeHandle,
(EFI_QUESTION_ID) DRV_ADD_RECON_QUESTION_ID,
(EFI_QUESTION_ID)DRV_ADD_RECON_QUESTION_ID,
VARSTORE_ID_BOOT_MAINT,
DRV_ADD_RECON_VAR_OFFSET,
STRING_TOKEN (STR_LOAD_OPTION_FORCE_RECON),
@@ -418,7 +418,7 @@ UpdateDriverAddHandleDescPage (
HiiCreateStringOpCode (
mStartOpCodeHandle,
(EFI_QUESTION_ID) DRIVER_ADD_OPTION_QUESTION_ID,
(EFI_QUESTION_ID)DRIVER_ADD_OPTION_QUESTION_ID,
VARSTORE_ID_BOOT_MAINT,
DRIVER_ADD_OPTION_VAR_OFFSET,
STRING_TOKEN (STR_OPTIONAL_DATA),
@@ -443,20 +443,20 @@ UpdateDriverAddHandleDescPage (
**/
VOID
UpdateConsolePage (
IN UINT16 UpdatePageId,
IN BM_MENU_OPTION *ConsoleMenu,
IN BMM_CALLBACK_DATA *CallbackData
IN UINT16 UpdatePageId,
IN BM_MENU_OPTION *ConsoleMenu,
IN BMM_CALLBACK_DATA *CallbackData
)
{
BM_MENU_ENTRY *NewMenuEntry;
BM_CONSOLE_CONTEXT *NewConsoleContext;
BM_TERMINAL_CONTEXT *NewTerminalContext;
UINT16 Index;
UINT16 Index2;
UINT8 CheckFlags;
UINT8 *ConsoleCheck;
EFI_QUESTION_ID QuestionIdBase;
UINT16 VariableOffsetBase;
BM_MENU_ENTRY *NewMenuEntry;
BM_CONSOLE_CONTEXT *NewConsoleContext;
BM_TERMINAL_CONTEXT *NewTerminalContext;
UINT16 Index;
UINT16 Index2;
UINT8 CheckFlags;
UINT8 *ConsoleCheck;
EFI_QUESTION_ID QuestionIdBase;
UINT16 VariableOffsetBase;
CallbackData->BmmAskSaveOrNot = TRUE;
@@ -467,42 +467,45 @@ UpdateConsolePage (
VariableOffsetBase = 0;
switch (UpdatePageId) {
case FORM_CON_IN_ID:
ConsoleCheck = &CallbackData->BmmFakeNvData.ConsoleInCheck[0];
QuestionIdBase = CON_IN_DEVICE_QUESTION_ID;
VariableOffsetBase = CON_IN_DEVICE_VAR_OFFSET;
break;
case FORM_CON_IN_ID:
ConsoleCheck = &CallbackData->BmmFakeNvData.ConsoleInCheck[0];
QuestionIdBase = CON_IN_DEVICE_QUESTION_ID;
VariableOffsetBase = CON_IN_DEVICE_VAR_OFFSET;
break;
case FORM_CON_OUT_ID:
ConsoleCheck = &CallbackData->BmmFakeNvData.ConsoleOutCheck[0];
QuestionIdBase = CON_OUT_DEVICE_QUESTION_ID;
VariableOffsetBase = CON_OUT_DEVICE_VAR_OFFSET;
break;
case FORM_CON_OUT_ID:
ConsoleCheck = &CallbackData->BmmFakeNvData.ConsoleOutCheck[0];
QuestionIdBase = CON_OUT_DEVICE_QUESTION_ID;
VariableOffsetBase = CON_OUT_DEVICE_VAR_OFFSET;
break;
case FORM_CON_ERR_ID:
ConsoleCheck = &CallbackData->BmmFakeNvData.ConsoleErrCheck[0];
QuestionIdBase = CON_ERR_DEVICE_QUESTION_ID;
VariableOffsetBase = CON_ERR_DEVICE_VAR_OFFSET;
break;
case FORM_CON_ERR_ID:
ConsoleCheck = &CallbackData->BmmFakeNvData.ConsoleErrCheck[0];
QuestionIdBase = CON_ERR_DEVICE_QUESTION_ID;
VariableOffsetBase = CON_ERR_DEVICE_VAR_OFFSET;
break;
}
ASSERT (ConsoleCheck != NULL);
for (Index = 0; ((Index < ConsoleMenu->MenuNumber) && \
(Index < MAX_MENU_NUMBER)) ; Index++) {
CheckFlags = 0;
NewMenuEntry = BOpt_GetMenuEntry (ConsoleMenu, Index);
NewConsoleContext = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;
(Index < MAX_MENU_NUMBER)); Index++)
{
CheckFlags = 0;
NewMenuEntry = BOpt_GetMenuEntry (ConsoleMenu, Index);
NewConsoleContext = (BM_CONSOLE_CONTEXT *)NewMenuEntry->VariableContext;
if (NewConsoleContext->IsActive) {
CheckFlags |= EFI_IFR_CHECKBOX_DEFAULT;
CheckFlags |= EFI_IFR_CHECKBOX_DEFAULT;
ConsoleCheck[Index] = TRUE;
} else {
ConsoleCheck[Index] = FALSE;
}
HiiCreateCheckBoxOpCode (
mStartOpCodeHandle,
(EFI_QUESTION_ID) (QuestionIdBase + Index),
(EFI_QUESTION_ID)(QuestionIdBase + Index),
VARSTORE_ID_BOOT_MAINT,
(UINT16) (VariableOffsetBase + Index),
(UINT16)(VariableOffsetBase + Index),
NewMenuEntry->DisplayStringToken,
NewMenuEntry->HelpStringToken,
EFI_IFR_FLAG_CALLBACK,
@@ -512,26 +515,29 @@ UpdateConsolePage (
}
for (Index2 = 0; ((Index2 < TerminalMenu.MenuNumber) && \
(Index2 < MAX_MENU_NUMBER)); Index2++) {
CheckFlags = 0;
NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index2);
NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;
(Index2 < MAX_MENU_NUMBER)); Index2++)
{
CheckFlags = 0;
NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index2);
NewTerminalContext = (BM_TERMINAL_CONTEXT *)NewMenuEntry->VariableContext;
ASSERT (Index < MAX_MENU_NUMBER);
if (((NewTerminalContext->IsConIn != 0) && (UpdatePageId == FORM_CON_IN_ID)) ||
((NewTerminalContext->IsConOut != 0) && (UpdatePageId == FORM_CON_OUT_ID)) ||
((NewTerminalContext->IsStdErr != 0) && (UpdatePageId == FORM_CON_ERR_ID))
) {
CheckFlags |= EFI_IFR_CHECKBOX_DEFAULT;
)
{
CheckFlags |= EFI_IFR_CHECKBOX_DEFAULT;
ConsoleCheck[Index] = TRUE;
} else {
ConsoleCheck[Index] = FALSE;
}
HiiCreateCheckBoxOpCode (
mStartOpCodeHandle,
(EFI_QUESTION_ID) (QuestionIdBase + Index),
(EFI_QUESTION_ID)(QuestionIdBase + Index),
VARSTORE_ID_BOOT_MAINT,
(UINT16) (VariableOffsetBase + Index),
(UINT16)(VariableOffsetBase + Index),
NewMenuEntry->DisplayStringToken,
NewMenuEntry->HelpStringToken,
EFI_IFR_FLAG_CALLBACK,
@@ -556,58 +562,60 @@ UpdateConsolePage (
**/
VOID
UpdateOrderPage (
IN UINT16 UpdatePageId,
IN BM_MENU_OPTION *OptionMenu,
IN BMM_CALLBACK_DATA *CallbackData
IN UINT16 UpdatePageId,
IN BM_MENU_OPTION *OptionMenu,
IN BMM_CALLBACK_DATA *CallbackData
)
{
BM_MENU_ENTRY *NewMenuEntry;
UINT16 Index;
UINT16 OptionIndex;
VOID *OptionsOpCodeHandle;
BOOLEAN BootOptionFound;
UINT32 *OptionOrder;
EFI_QUESTION_ID QuestionId;
UINT16 VarOffset;
BM_MENU_ENTRY *NewMenuEntry;
UINT16 Index;
UINT16 OptionIndex;
VOID *OptionsOpCodeHandle;
BOOLEAN BootOptionFound;
UINT32 *OptionOrder;
EFI_QUESTION_ID QuestionId;
UINT16 VarOffset;
CallbackData->BmmAskSaveOrNot = TRUE;
UpdatePageStart (CallbackData);
OptionOrder = NULL;
QuestionId = 0;
VarOffset = 0;
QuestionId = 0;
VarOffset = 0;
switch (UpdatePageId) {
case FORM_BOOT_CHG_ID:
//
// If the BootOptionOrder in the BmmFakeNvData are same with the date in the BmmOldFakeNVData,
// means all Boot Options has been save in BootOptionMenu, we can get the date from the menu.
// else means browser maintains some uncommitted date which are not saved in BootOptionMenu,
// so we should not get the data from BootOptionMenu to show it.
//
if (CompareMem (CallbackData->BmmFakeNvData.BootOptionOrder, CallbackData->BmmOldFakeNVData.BootOptionOrder, sizeof (CallbackData->BmmFakeNvData.BootOptionOrder)) == 0) {
GetBootOrder (CallbackData);
}
case FORM_BOOT_CHG_ID:
//
// If the BootOptionOrder in the BmmFakeNvData are same with the date in the BmmOldFakeNVData,
// means all Boot Options has been save in BootOptionMenu, we can get the date from the menu.
// else means browser maintains some uncommitted date which are not saved in BootOptionMenu,
// so we should not get the data from BootOptionMenu to show it.
//
if (CompareMem (CallbackData->BmmFakeNvData.BootOptionOrder, CallbackData->BmmOldFakeNVData.BootOptionOrder, sizeof (CallbackData->BmmFakeNvData.BootOptionOrder)) == 0) {
GetBootOrder (CallbackData);
}
OptionOrder = CallbackData->BmmFakeNvData.BootOptionOrder;
QuestionId = BOOT_OPTION_ORDER_QUESTION_ID;
VarOffset = BOOT_OPTION_ORDER_VAR_OFFSET;
break;
OptionOrder = CallbackData->BmmFakeNvData.BootOptionOrder;
QuestionId = BOOT_OPTION_ORDER_QUESTION_ID;
VarOffset = BOOT_OPTION_ORDER_VAR_OFFSET;
break;
case FORM_DRV_CHG_ID:
//
// If the DriverOptionOrder in the BmmFakeNvData are same with the date in the BmmOldFakeNVData,
// means all Driver Options has been save in DriverOptionMenu, we can get the DriverOptionOrder from the menu.
// else means browser maintains some uncommitted date which are not saved in DriverOptionMenu,
// so we should not get the data from DriverOptionMenu to show it.
//
if (CompareMem (CallbackData->BmmFakeNvData.DriverOptionOrder, CallbackData->BmmOldFakeNVData.DriverOptionOrder, sizeof (CallbackData->BmmFakeNvData.DriverOptionOrder)) == 0) {
GetDriverOrder (CallbackData);
}
OptionOrder = CallbackData->BmmFakeNvData.DriverOptionOrder;
QuestionId = DRIVER_OPTION_ORDER_QUESTION_ID;
VarOffset = DRIVER_OPTION_ORDER_VAR_OFFSET;
break;
case FORM_DRV_CHG_ID:
//
// If the DriverOptionOrder in the BmmFakeNvData are same with the date in the BmmOldFakeNVData,
// means all Driver Options has been save in DriverOptionMenu, we can get the DriverOptionOrder from the menu.
// else means browser maintains some uncommitted date which are not saved in DriverOptionMenu,
// so we should not get the data from DriverOptionMenu to show it.
//
if (CompareMem (CallbackData->BmmFakeNvData.DriverOptionOrder, CallbackData->BmmOldFakeNVData.DriverOptionOrder, sizeof (CallbackData->BmmFakeNvData.DriverOptionOrder)) == 0) {
GetDriverOrder (CallbackData);
}
OptionOrder = CallbackData->BmmFakeNvData.DriverOptionOrder;
QuestionId = DRIVER_OPTION_ORDER_QUESTION_ID;
VarOffset = DRIVER_OPTION_ORDER_VAR_OFFSET;
break;
}
ASSERT (OptionOrder != NULL);
OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();
@@ -617,12 +625,13 @@ UpdateOrderPage (
for (OptionIndex = 0; (OptionOrder[OptionIndex] != 0 && OptionIndex < MAX_MENU_NUMBER); OptionIndex++) {
BootOptionFound = FALSE;
for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {
NewMenuEntry = BOpt_GetMenuEntry (OptionMenu, Index);
if ((UINT32) (NewMenuEntry->OptionNumber + 1) == OptionOrder[OptionIndex]) {
NewMenuEntry = BOpt_GetMenuEntry (OptionMenu, Index);
if ((UINT32)(NewMenuEntry->OptionNumber + 1) == OptionOrder[OptionIndex]) {
BootOptionFound = TRUE;
break;
}
}
if (BootOptionFound) {
HiiCreateOneOfOptionOpCode (
OptionsOpCodeHandle,
@@ -654,7 +663,6 @@ UpdateOrderPage (
HiiFreeOpCodeHandle (OptionsOpCodeHandle);
UpdatePageEnd (CallbackData);
}
/**
@@ -665,26 +673,26 @@ UpdateOrderPage (
**/
VOID
UpdateConModePage (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
UINTN Mode;
UINTN Index;
UINTN Col;
UINTN Row;
CHAR16 ModeString[50];
CHAR16 *PStr;
UINTN MaxMode;
UINTN ValidMode;
EFI_STRING_ID *ModeToken;
EFI_STATUS Status;
VOID *OptionsOpCodeHandle;
UINTN Mode;
UINTN Index;
UINTN Col;
UINTN Row;
CHAR16 ModeString[50];
CHAR16 *PStr;
UINTN MaxMode;
UINTN ValidMode;
EFI_STRING_ID *ModeToken;
EFI_STATUS Status;
VOID *OptionsOpCodeHandle;
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut;
ConOut = gST->ConOut;
Index = 0;
ValidMode = 0;
MaxMode = (UINTN) (ConOut->Mode->MaxMode);
MaxMode = (UINTN)(ConOut->Mode->MaxMode);
CallbackData->BmmAskSaveOrNot = TRUE;
@@ -698,6 +706,7 @@ UpdateConModePage (
if (EFI_ERROR (Status)) {
continue;
}
ValidMode++;
}
@@ -708,8 +717,8 @@ UpdateConModePage (
OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();
ASSERT (OptionsOpCodeHandle != NULL);
ModeToken = AllocateZeroPool (sizeof (EFI_STRING_ID) * ValidMode);
ASSERT(ModeToken != NULL);
ModeToken = AllocateZeroPool (sizeof (EFI_STRING_ID) * ValidMode);
ASSERT (ModeToken != NULL);
//
// Determin which mode should be the first entry in menu
@@ -730,7 +739,7 @@ UpdateConModePage (
//
UnicodeValueToStringS (ModeString, sizeof (ModeString), 0, Col, 0);
PStr = &ModeString[0];
StrnCatS (PStr, ARRAY_SIZE (ModeString), L" x ", StrLen(L" x ") + 1);
StrnCatS (PStr, ARRAY_SIZE (ModeString), L" x ", StrLen (L" x ") + 1);
PStr = PStr + StrLen (PStr);
UnicodeValueToStringS (
PStr,
@@ -748,7 +757,7 @@ UpdateConModePage (
ModeToken[Index],
EFI_IFR_OPTION_DEFAULT,
EFI_IFR_TYPE_NUM_SIZE_16,
(UINT16) Mode
(UINT16)Mode
);
} else {
HiiCreateOneOfOptionOpCode (
@@ -756,15 +765,16 @@ UpdateConModePage (
ModeToken[Index],
0,
EFI_IFR_TYPE_NUM_SIZE_16,
(UINT16) Mode
(UINT16)Mode
);
}
Index++;
}
HiiCreateOneOfOpCode (
mStartOpCodeHandle,
(EFI_QUESTION_ID) CON_MODE_QUESTION_ID,
(EFI_QUESTION_ID)CON_MODE_QUESTION_ID,
VARSTORE_ID_BOOT_MAINT,
CON_MODE_VAR_OFFSET,
STRING_TOKEN (STR_CON_MODE_SETUP),
@@ -781,46 +791,47 @@ UpdateConModePage (
UpdatePageEnd (CallbackData);
}
/**
Create the dynamic page which allows user to set the property such as Baud Rate, Data Bits,
Parity, Stop Bits, Terminal Type.
/**
Create the dynamic page which allows user to set the property such as Baud Rate, Data Bits,
Parity, Stop Bits, Terminal Type.
@param CallbackData The BMM context data.
@param CallbackData The BMM context data.
**/
VOID
UpdateTerminalPage (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
UINT8 Index;
UINT8 CheckFlags;
BM_MENU_ENTRY *NewMenuEntry;
VOID *OptionsOpCodeHandle;
UINTN CurrentTerminal;
UINT8 Index;
UINT8 CheckFlags;
BM_MENU_ENTRY *NewMenuEntry;
VOID *OptionsOpCodeHandle;
UINTN CurrentTerminal;
CallbackData->BmmAskSaveOrNot = TRUE;
UpdatePageStart (CallbackData);
CurrentTerminal = CallbackData->CurrentTerminal;
NewMenuEntry = BOpt_GetMenuEntry (
&TerminalMenu,
CurrentTerminal
);
NewMenuEntry = BOpt_GetMenuEntry (
&TerminalMenu,
CurrentTerminal
);
if (NewMenuEntry == NULL) {
return ;
return;
}
OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();
ASSERT (OptionsOpCodeHandle != NULL);
for (Index = 0; Index < sizeof (BaudRateList) / sizeof (BaudRateList [0]); Index++) {
for (Index = 0; Index < sizeof (BaudRateList) / sizeof (BaudRateList[0]); Index++) {
CheckFlags = 0;
if (BaudRateList[Index].Value == 115200) {
CheckFlags |= EFI_IFR_OPTION_DEFAULT;
}
HiiCreateOneOfOptionOpCode (
OptionsOpCodeHandle,
BaudRateList[Index].StringToken,
@@ -832,9 +843,9 @@ UpdateTerminalPage (
HiiCreateOneOfOpCode (
mStartOpCodeHandle,
(EFI_QUESTION_ID) (COM_BAUD_RATE_QUESTION_ID + CurrentTerminal),
(EFI_QUESTION_ID)(COM_BAUD_RATE_QUESTION_ID + CurrentTerminal),
VARSTORE_ID_BOOT_MAINT,
(UINT16) (COM_BAUD_RATE_VAR_OFFSET + CurrentTerminal),
(UINT16)(COM_BAUD_RATE_VAR_OFFSET + CurrentTerminal),
STRING_TOKEN (STR_COM_BAUD_RATE),
STRING_TOKEN (STR_COM_BAUD_RATE),
EFI_IFR_FLAG_CALLBACK,
@@ -865,9 +876,9 @@ UpdateTerminalPage (
HiiCreateOneOfOpCode (
mStartOpCodeHandle,
(EFI_QUESTION_ID) (COM_DATA_RATE_QUESTION_ID + CurrentTerminal),
(EFI_QUESTION_ID)(COM_DATA_RATE_QUESTION_ID + CurrentTerminal),
VARSTORE_ID_BOOT_MAINT,
(UINT16) (COM_DATA_RATE_VAR_OFFSET + CurrentTerminal),
(UINT16)(COM_DATA_RATE_VAR_OFFSET + CurrentTerminal),
STRING_TOKEN (STR_COM_DATA_BITS),
STRING_TOKEN (STR_COM_DATA_BITS),
EFI_IFR_FLAG_CALLBACK,
@@ -897,9 +908,9 @@ UpdateTerminalPage (
HiiCreateOneOfOpCode (
mStartOpCodeHandle,
(EFI_QUESTION_ID) (COM_PARITY_QUESTION_ID + CurrentTerminal),
(EFI_QUESTION_ID)(COM_PARITY_QUESTION_ID + CurrentTerminal),
VARSTORE_ID_BOOT_MAINT,
(UINT16) (COM_PARITY_VAR_OFFSET + CurrentTerminal),
(UINT16)(COM_PARITY_VAR_OFFSET + CurrentTerminal),
STRING_TOKEN (STR_COM_PARITY),
STRING_TOKEN (STR_COM_PARITY),
EFI_IFR_FLAG_CALLBACK,
@@ -929,9 +940,9 @@ UpdateTerminalPage (
HiiCreateOneOfOpCode (
mStartOpCodeHandle,
(EFI_QUESTION_ID) (COM_STOP_BITS_QUESTION_ID + CurrentTerminal),
(EFI_QUESTION_ID)(COM_STOP_BITS_QUESTION_ID + CurrentTerminal),
VARSTORE_ID_BOOT_MAINT,
(UINT16) (COM_STOP_BITS_VAR_OFFSET + CurrentTerminal),
(UINT16)(COM_STOP_BITS_VAR_OFFSET + CurrentTerminal),
STRING_TOKEN (STR_COM_STOP_BITS),
STRING_TOKEN (STR_COM_STOP_BITS),
EFI_IFR_FLAG_CALLBACK,
@@ -952,7 +963,7 @@ UpdateTerminalPage (
HiiCreateOneOfOptionOpCode (
OptionsOpCodeHandle,
(EFI_STRING_ID) TerminalType[Index],
(EFI_STRING_ID)TerminalType[Index],
CheckFlags,
EFI_IFR_TYPE_NUM_SIZE_8,
Index
@@ -961,9 +972,9 @@ UpdateTerminalPage (
HiiCreateOneOfOpCode (
mStartOpCodeHandle,
(EFI_QUESTION_ID) (COM_TERMINAL_QUESTION_ID + CurrentTerminal),
(EFI_QUESTION_ID)(COM_TERMINAL_QUESTION_ID + CurrentTerminal),
VARSTORE_ID_BOOT_MAINT,
(UINT16) (COM_TERMINAL_VAR_OFFSET + CurrentTerminal),
(UINT16)(COM_TERMINAL_VAR_OFFSET + CurrentTerminal),
STRING_TOKEN (STR_COM_TERMI_TYPE),
STRING_TOKEN (STR_COM_TERMI_TYPE),
EFI_IFR_FLAG_CALLBACK,
@@ -977,13 +988,14 @@ UpdateTerminalPage (
ASSERT (OptionsOpCodeHandle != NULL);
for (Index = 0; Index < ARRAY_SIZE (mFlowControlType); Index++) {
CheckFlags = 0;
CheckFlags = 0;
if (Index == 0) {
CheckFlags |= EFI_IFR_OPTION_DEFAULT;
}
HiiCreateOneOfOptionOpCode (
OptionsOpCodeHandle,
(EFI_STRING_ID) mFlowControlType[Index],
(EFI_STRING_ID)mFlowControlType[Index],
CheckFlags,
EFI_IFR_TYPE_NUM_SIZE_8,
mFlowControlValue[Index]
@@ -992,9 +1004,9 @@ UpdateTerminalPage (
HiiCreateOneOfOpCode (
mStartOpCodeHandle,
(EFI_QUESTION_ID) (COM_FLOWCONTROL_QUESTION_ID + CurrentTerminal),
(EFI_QUESTION_ID)(COM_FLOWCONTROL_QUESTION_ID + CurrentTerminal),
VARSTORE_ID_BOOT_MAINT,
(UINT16) (COM_FLOWCONTROL_VAR_OFFSET + CurrentTerminal),
(UINT16)(COM_FLOWCONTROL_VAR_OFFSET + CurrentTerminal),
STRING_TOKEN (STR_COM_FLOW_CONTROL),
STRING_TOKEN (STR_COM_FLOW_CONTROL),
EFI_IFR_FLAG_CALLBACK,
@@ -1017,20 +1029,21 @@ Update add boot/driver option page.
**/
VOID
UpdateOptionPage(
IN BMM_CALLBACK_DATA *CallbackData,
IN EFI_FORM_ID FormId,
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
UpdateOptionPage (
IN BMM_CALLBACK_DATA *CallbackData,
IN EFI_FORM_ID FormId,
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
)
{
CHAR16 *String;
EFI_STRING_ID StringToken;
CHAR16 *String;
EFI_STRING_ID StringToken;
String = NULL;
if (DevicePath != NULL){
String = ExtractFileNameFromDevicePath(DevicePath);
if (DevicePath != NULL) {
String = ExtractFileNameFromDevicePath (DevicePath);
}
if (String == NULL) {
String = HiiGetString (CallbackData->BmmHiiHandle, STRING_TOKEN (STR_NULL_STRING), NULL);
ASSERT (String != NULL);
@@ -1039,14 +1052,14 @@ UpdateOptionPage(
StringToken = HiiSetString (CallbackData->BmmHiiHandle, 0, String, NULL);
FreePool (String);
if(FormId == FORM_BOOT_ADD_ID){
if (FormId == FORM_BOOT_ADD_ID) {
if (!CallbackData->BmmFakeNvData.BootOptionChanged) {
ZeroMem (CallbackData->BmmFakeNvData.BootOptionalData, sizeof (CallbackData->BmmFakeNvData.BootOptionalData));
ZeroMem (CallbackData->BmmFakeNvData.BootDescriptionData, sizeof (CallbackData->BmmFakeNvData.BootDescriptionData));
ZeroMem (CallbackData->BmmOldFakeNVData.BootOptionalData, sizeof (CallbackData->BmmOldFakeNVData.BootOptionalData));
ZeroMem (CallbackData->BmmOldFakeNVData.BootDescriptionData, sizeof (CallbackData->BmmOldFakeNVData.BootDescriptionData));
}
} else if (FormId == FORM_DRV_ADD_FILE_ID){
} else if (FormId == FORM_DRV_ADD_FILE_ID) {
if (!CallbackData->BmmFakeNvData.DriverOptionChanged) {
ZeroMem (CallbackData->BmmFakeNvData.DriverOptionalData, sizeof (CallbackData->BmmFakeNvData.DriverOptionalData));
ZeroMem (CallbackData->BmmFakeNvData.DriverDescriptionData, sizeof (CallbackData->BmmFakeNvData.DriverDescriptionData));
@@ -1055,7 +1068,7 @@ UpdateOptionPage(
}
}
RefreshUpdateData();
RefreshUpdateData ();
mStartLabel->Number = FormId;
HiiCreateSubTitleOpCode (
@@ -1070,8 +1083,8 @@ UpdateOptionPage(
CallbackData->BmmHiiHandle,
&mBootMaintGuid,
FormId,
mStartOpCodeHandle,// Label FormId
mEndOpCodeHandle // LABEL_END
mStartOpCodeHandle, // Label FormId
mEndOpCodeHandle // LABEL_END
);
}
@@ -1085,34 +1098,34 @@ UpdateOptionPage(
**/
VOID
UpdatePageBody (
IN UINT16 UpdatePageId,
IN BMM_CALLBACK_DATA *CallbackData
IN UINT16 UpdatePageId,
IN BMM_CALLBACK_DATA *CallbackData
)
{
CleanUpPage (UpdatePageId, CallbackData);
switch (UpdatePageId) {
case FORM_CON_IN_ID:
UpdateConsolePage (UpdatePageId, &ConsoleInpMenu, CallbackData);
break;
case FORM_CON_IN_ID:
UpdateConsolePage (UpdatePageId, &ConsoleInpMenu, CallbackData);
break;
case FORM_CON_OUT_ID:
UpdateConsolePage (UpdatePageId, &ConsoleOutMenu, CallbackData);
break;
case FORM_CON_OUT_ID:
UpdateConsolePage (UpdatePageId, &ConsoleOutMenu, CallbackData);
break;
case FORM_CON_ERR_ID:
UpdateConsolePage (UpdatePageId, &ConsoleErrMenu, CallbackData);
break;
case FORM_CON_ERR_ID:
UpdateConsolePage (UpdatePageId, &ConsoleErrMenu, CallbackData);
break;
case FORM_BOOT_CHG_ID:
UpdateOrderPage (UpdatePageId, &BootOptionMenu, CallbackData);
break;
case FORM_BOOT_CHG_ID:
UpdateOrderPage (UpdatePageId, &BootOptionMenu, CallbackData);
break;
case FORM_DRV_CHG_ID:
UpdateOrderPage (UpdatePageId, &DriverOptionMenu, CallbackData);
break;
case FORM_DRV_CHG_ID:
UpdateOrderPage (UpdatePageId, &DriverOptionMenu, CallbackData);
break;
default:
break;
default:
break;
}
}
@@ -1125,8 +1138,8 @@ UpdatePageBody (
**/
VOID
UpdatePageId (
BMM_CALLBACK_DATA *Private,
UINT16 NewPageId
BMM_CALLBACK_DATA *Private,
UINT16 NewPageId
)
{
if ((NewPageId < FILE_OPTION_OFFSET) && (NewPageId >= HANDLE_OPTION_OFFSET)) {
@@ -1144,7 +1157,7 @@ UpdatePageId (
}
if ((NewPageId > 0) && (NewPageId < MAXIMUM_FORM_ID)) {
Private->BmmPreviousPageId = Private->BmmCurrentPageId;
Private->BmmCurrentPageId = NewPageId;
Private->BmmPreviousPageId = Private->BmmCurrentPageId;
Private->BmmCurrentPageId = NewPageId;
}
}

View File

@@ -22,28 +22,29 @@ Var_DelBootOption (
VOID
)
{
BM_MENU_ENTRY *NewMenuEntry;
BM_LOAD_CONTEXT *NewLoadContext;
EFI_STATUS Status;
UINTN Index;
UINTN Index2;
BM_MENU_ENTRY *NewMenuEntry;
BM_LOAD_CONTEXT *NewLoadContext;
EFI_STATUS Status;
UINTN Index;
UINTN Index2;
Index2 = 0;
Index2 = 0;
for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {
NewMenuEntry = BOpt_GetMenuEntry (&BootOptionMenu, (Index - Index2));
if (NULL == NewMenuEntry) {
return EFI_NOT_FOUND;
}
NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;
NewLoadContext = (BM_LOAD_CONTEXT *)NewMenuEntry->VariableContext;
if (!NewLoadContext->Deleted) {
continue;
}
Status = EfiBootManagerDeleteLoadOptionVariable (NewMenuEntry->OptionNumber,LoadOptionTypeBoot);
Status = EfiBootManagerDeleteLoadOptionVariable (NewMenuEntry->OptionNumber, LoadOptionTypeBoot);
if (EFI_ERROR (Status)) {
return Status;
return Status;
}
Index2++;
//
// If current Load Option is the same as BootNext,
@@ -78,24 +79,25 @@ Var_DelDriverOption (
VOID
)
{
BM_MENU_ENTRY *NewMenuEntry;
BM_LOAD_CONTEXT *NewLoadContext;
EFI_STATUS Status;
UINTN Index;
UINTN Index2;
BM_MENU_ENTRY *NewMenuEntry;
BM_LOAD_CONTEXT *NewLoadContext;
EFI_STATUS Status;
UINTN Index;
UINTN Index2;
Index2 = 0;
Index2 = 0;
for (Index = 0; Index < DriverOptionMenu.MenuNumber; Index++) {
NewMenuEntry = BOpt_GetMenuEntry (&DriverOptionMenu, (Index - Index2));
if (NULL == NewMenuEntry) {
return EFI_NOT_FOUND;
}
NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;
NewLoadContext = (BM_LOAD_CONTEXT *)NewMenuEntry->VariableContext;
if (!NewLoadContext->Deleted) {
continue;
}
Status = EfiBootManagerDeleteLoadOptionVariable (NewMenuEntry->OptionNumber,LoadOptionTypeDriver);
Status = EfiBootManagerDeleteLoadOptionVariable (NewMenuEntry->OptionNumber, LoadOptionTypeDriver);
if (EFI_ERROR (Status)) {
return Status;
}
@@ -136,9 +138,9 @@ Var_DelDriverOption (
**/
EFI_STATUS
Var_UpdateConsoleOption (
IN UINT16 *ConsoleName,
IN BM_MENU_OPTION *ConsoleMenu,
IN UINT16 UpdatePageId
IN UINT16 *ConsoleName,
IN BM_MENU_OPTION *ConsoleMenu,
IN UINT16 UpdatePageId
)
{
EFI_DEVICE_PATH_PROTOCOL *ConDevicePath;
@@ -150,12 +152,12 @@ Var_UpdateConsoleOption (
EFI_DEVICE_PATH_PROTOCOL *TerminalDevicePath;
UINTN Index;
GetEfiGlobalVariable2 (ConsoleName, (VOID**)&ConDevicePath, NULL);
GetEfiGlobalVariable2 (ConsoleName, (VOID **)&ConDevicePath, NULL);
if (ConDevicePath != NULL) {
EfiLibDeleteVariable (ConsoleName, &gEfiGlobalVariableGuid);
FreePool (ConDevicePath);
ConDevicePath = NULL;
};
}
//
// First add all console input device from console input menu
@@ -163,7 +165,7 @@ Var_UpdateConsoleOption (
for (Index = 0; Index < ConsoleMenu->MenuNumber; Index++) {
NewMenuEntry = BOpt_GetMenuEntry (ConsoleMenu, Index);
NewConsoleContext = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;
NewConsoleContext = (BM_CONSOLE_CONTEXT *)NewMenuEntry->VariableContext;
if (NewConsoleContext->IsActive) {
ConDevicePath = AppendDevicePathInstance (
ConDevicePath,
@@ -175,11 +177,12 @@ Var_UpdateConsoleOption (
for (Index = 0; Index < TerminalMenu.MenuNumber; Index++) {
NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index);
NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;
NewTerminalContext = (BM_TERMINAL_CONTEXT *)NewMenuEntry->VariableContext;
if (((NewTerminalContext->IsConIn != 0) && (UpdatePageId == FORM_CON_IN_ID)) ||
((NewTerminalContext->IsConOut != 0) && (UpdatePageId == FORM_CON_OUT_ID)) ||
((NewTerminalContext->IsStdErr != 0) && (UpdatePageId == FORM_CON_ERR_ID))
) {
)
{
Vendor.Header.Type = MESSAGING_DEVICE_PATH;
Vendor.Header.SubType = MSG_VENDOR_DP;
@@ -191,9 +194,9 @@ Var_UpdateConsoleOption (
);
SetDevicePathNodeLength (&Vendor.Header, sizeof (VENDOR_DEVICE_PATH));
TerminalDevicePath = AppendDevicePathNode (
NewTerminalContext->DevicePath,
(EFI_DEVICE_PATH_PROTOCOL *) &Vendor
);
NewTerminalContext->DevicePath,
(EFI_DEVICE_PATH_PROTOCOL *)&Vendor
);
ASSERT (TerminalDevicePath != NULL);
ChangeTerminalDevicePath (TerminalDevicePath, TRUE);
ConDevicePath = AppendDevicePathInstance (
@@ -217,7 +220,6 @@ Var_UpdateConsoleOption (
}
return EFI_SUCCESS;
}
/**
@@ -285,28 +287,28 @@ Var_UpdateErrorOutOption (
**/
EFI_STATUS
Var_UpdateDriverOption (
IN BMM_CALLBACK_DATA *CallbackData,
IN EFI_HII_HANDLE HiiHandle,
IN UINT16 *DescriptionData,
IN UINT16 *OptionalData,
IN UINT8 ForceReconnect
IN BMM_CALLBACK_DATA *CallbackData,
IN EFI_HII_HANDLE HiiHandle,
IN UINT16 *DescriptionData,
IN UINT16 *OptionalData,
IN UINT8 ForceReconnect
)
{
UINT16 Index;
UINT16 DriverString[12];
BM_MENU_ENTRY *NewMenuEntry;
BM_LOAD_CONTEXT *NewLoadContext;
BOOLEAN OptionalDataExist;
EFI_STATUS Status;
UINT16 Index;
UINT16 DriverString[12];
BM_MENU_ENTRY *NewMenuEntry;
BM_LOAD_CONTEXT *NewLoadContext;
BOOLEAN OptionalDataExist;
EFI_STATUS Status;
EFI_BOOT_MANAGER_LOAD_OPTION LoadOption;
UINT8 *OptionalDesData;
UINT32 OptionalDataSize;
OptionalDataExist = FALSE;
OptionalDesData = NULL;
OptionalDataSize = 0;
OptionalDesData = NULL;
OptionalDataSize = 0;
Index = BOpt_GetDriverOptionNumber ();
Index = BOpt_GetDriverOptionNumber ();
UnicodeSPrint (
DriverString,
sizeof (DriverString),
@@ -320,8 +322,8 @@ Var_UpdateDriverOption (
if (*OptionalData != 0x0000) {
OptionalDataExist = TRUE;
OptionalDesData = (UINT8 *)OptionalData;
OptionalDataSize = (UINT32)StrSize (OptionalData);
OptionalDesData = (UINT8 *)OptionalData;
OptionalDataSize = (UINT32)StrSize (OptionalData);
}
NewMenuEntry = BOpt_CreateMenuEntry (BM_LOAD_CONTEXT_SELECT);
@@ -338,20 +340,20 @@ Var_UpdateDriverOption (
CallbackData->LoadContext->FilePathList,
OptionalDesData,
OptionalDataSize
);
if (EFI_ERROR (Status)){
return Status;
}
Status = EfiBootManagerAddLoadOptionVariable (&LoadOption,(UINTN) -1 );
);
if (EFI_ERROR (Status)) {
EfiBootManagerFreeLoadOption(&LoadOption);
return Status;
}
NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;
NewLoadContext->Deleted = FALSE;
NewLoadContext->Attributes = LoadOption.Attributes;
Status = EfiBootManagerAddLoadOptionVariable (&LoadOption, (UINTN)-1);
if (EFI_ERROR (Status)) {
EfiBootManagerFreeLoadOption (&LoadOption);
return Status;
}
NewLoadContext = (BM_LOAD_CONTEXT *)NewMenuEntry->VariableContext;
NewLoadContext->Deleted = FALSE;
NewLoadContext->Attributes = LoadOption.Attributes;
NewLoadContext->FilePathListLength = (UINT16)GetDevicePathSize (LoadOption.FilePath);
NewLoadContext->Description = AllocateZeroPool (StrSize (DescriptionData));
@@ -371,10 +373,10 @@ Var_UpdateDriverOption (
GetDevicePathSize (CallbackData->LoadContext->FilePathList)
);
NewMenuEntry->HelpString = UiDevicePathToStr (NewLoadContext->FilePathList);
NewMenuEntry->OptionNumber = Index;
NewMenuEntry->HelpString = UiDevicePathToStr (NewLoadContext->FilePathList);
NewMenuEntry->OptionNumber = Index;
NewMenuEntry->DisplayStringToken = HiiSetString (HiiHandle, 0, NewMenuEntry->DisplayString, NULL);
NewMenuEntry->HelpStringToken = HiiSetString (HiiHandle, 0, NewMenuEntry->HelpString, NULL);
NewMenuEntry->HelpStringToken = HiiSetString (HiiHandle, 0, NewMenuEntry->HelpString, NULL);
if (OptionalDataExist) {
NewLoadContext->OptionalData = AllocateZeroPool (LoadOption.OptionalDataSize);
@@ -389,7 +391,7 @@ Var_UpdateDriverOption (
InsertTailList (&DriverOptionMenu.Head, &NewMenuEntry->Link);
DriverOptionMenu.MenuNumber++;
EfiBootManagerFreeLoadOption(&LoadOption);
EfiBootManagerFreeLoadOption (&LoadOption);
return EFI_SUCCESS;
}
@@ -410,26 +412,26 @@ Var_UpdateDriverOption (
**/
EFI_STATUS
Var_UpdateBootOption (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
UINT16 BootString[10];
UINT16 Index;
BM_MENU_ENTRY *NewMenuEntry;
BM_LOAD_CONTEXT *NewLoadContext;
BOOLEAN OptionalDataExist;
EFI_STATUS Status;
BMM_FAKE_NV_DATA *NvRamMap;
UINT16 BootString[10];
UINT16 Index;
BM_MENU_ENTRY *NewMenuEntry;
BM_LOAD_CONTEXT *NewLoadContext;
BOOLEAN OptionalDataExist;
EFI_STATUS Status;
BMM_FAKE_NV_DATA *NvRamMap;
EFI_BOOT_MANAGER_LOAD_OPTION LoadOption;
UINT8 *OptionalData;
UINT32 OptionalDataSize;
OptionalDataExist = FALSE;
NvRamMap = &CallbackData->BmmFakeNvData;
OptionalData = NULL;
OptionalDataSize = 0;
NvRamMap = &CallbackData->BmmFakeNvData;
OptionalData = NULL;
OptionalDataSize = 0;
Index = BOpt_GetBootOptionNumber () ;
Index = BOpt_GetBootOptionNumber ();
UnicodeSPrint (BootString, sizeof (BootString), L"Boot%04x", Index);
if (NvRamMap->BootDescriptionData[0] == 0x0000) {
@@ -438,8 +440,8 @@ Var_UpdateBootOption (
if (NvRamMap->BootOptionalData[0] != 0x0000) {
OptionalDataExist = TRUE;
OptionalData = (UINT8 *)NvRamMap->BootOptionalData;
OptionalDataSize = (UINT32)StrSize (NvRamMap->BootOptionalData);
OptionalData = (UINT8 *)NvRamMap->BootOptionalData;
OptionalDataSize = (UINT32)StrSize (NvRamMap->BootOptionalData);
}
NewMenuEntry = BOpt_CreateMenuEntry (BM_LOAD_CONTEXT_SELECT);
@@ -456,21 +458,21 @@ Var_UpdateBootOption (
CallbackData->LoadContext->FilePathList,
OptionalData,
OptionalDataSize
);
if (EFI_ERROR (Status)){
return Status;
}
Status = EfiBootManagerAddLoadOptionVariable (&LoadOption,(UINTN) -1 );
);
if (EFI_ERROR (Status)) {
EfiBootManagerFreeLoadOption(&LoadOption);
return Status;
}
NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;
NewLoadContext->Deleted = FALSE;
NewLoadContext->Attributes = LoadOption.Attributes;
NewLoadContext->FilePathListLength = (UINT16) GetDevicePathSize (LoadOption.FilePath);
Status = EfiBootManagerAddLoadOptionVariable (&LoadOption, (UINTN)-1);
if (EFI_ERROR (Status)) {
EfiBootManagerFreeLoadOption (&LoadOption);
return Status;
}
NewLoadContext = (BM_LOAD_CONTEXT *)NewMenuEntry->VariableContext;
NewLoadContext->Deleted = FALSE;
NewLoadContext->Attributes = LoadOption.Attributes;
NewLoadContext->FilePathListLength = (UINT16)GetDevicePathSize (LoadOption.FilePath);
NewLoadContext->Description = AllocateZeroPool (StrSize (NvRamMap->BootDescriptionData));
ASSERT (NewLoadContext->Description != NULL);
@@ -491,10 +493,10 @@ Var_UpdateBootOption (
GetDevicePathSize (CallbackData->LoadContext->FilePathList)
);
NewMenuEntry->HelpString = UiDevicePathToStr (NewLoadContext->FilePathList);
NewMenuEntry->OptionNumber = Index;
NewMenuEntry->HelpString = UiDevicePathToStr (NewLoadContext->FilePathList);
NewMenuEntry->OptionNumber = Index;
NewMenuEntry->DisplayStringToken = HiiSetString (CallbackData->BmmHiiHandle, 0, NewMenuEntry->DisplayString, NULL);
NewMenuEntry->HelpStringToken = HiiSetString (CallbackData->BmmHiiHandle, 0, NewMenuEntry->HelpString, NULL);
NewMenuEntry->HelpStringToken = HiiSetString (CallbackData->BmmHiiHandle, 0, NewMenuEntry->HelpString, NULL);
if (OptionalDataExist) {
NewLoadContext->OptionalData = AllocateZeroPool (LoadOption.OptionalDataSize);
@@ -509,7 +511,7 @@ Var_UpdateBootOption (
InsertTailList (&BootOptionMenu.Head, &NewMenuEntry->Link);
BootOptionMenu.MenuNumber++;
EfiBootManagerFreeLoadOption(&LoadOption);
EfiBootManagerFreeLoadOption (&LoadOption);
return EFI_SUCCESS;
}
@@ -529,7 +531,7 @@ Var_UpdateBootOption (
**/
EFI_STATUS
Var_UpdateBootNext (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
BM_MENU_ENTRY *NewMenuEntry;
@@ -538,14 +540,14 @@ Var_UpdateBootNext (
UINT16 Index;
EFI_STATUS Status;
Status = EFI_SUCCESS;
CurrentFakeNVMap = &CallbackData->BmmFakeNvData;
Status = EFI_SUCCESS;
CurrentFakeNVMap = &CallbackData->BmmFakeNvData;
for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {
NewMenuEntry = BOpt_GetMenuEntry (&BootOptionMenu, Index);
ASSERT (NULL != NewMenuEntry);
NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;
NewLoadContext->IsBootNext = FALSE;
NewLoadContext = (BM_LOAD_CONTEXT *)NewMenuEntry->VariableContext;
NewLoadContext->IsBootNext = FALSE;
}
if (CurrentFakeNVMap->BootNext == NONE_BOOTNEXT_VALUE) {
@@ -554,19 +556,19 @@ Var_UpdateBootNext (
}
NewMenuEntry = BOpt_GetMenuEntry (
&BootOptionMenu,
CurrentFakeNVMap->BootNext
);
&BootOptionMenu,
CurrentFakeNVMap->BootNext
);
ASSERT (NewMenuEntry != NULL);
NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;
Status = gRT->SetVariable (
L"BootNext",
&gEfiGlobalVariableGuid,
VAR_FLAG,
sizeof (UINT16),
&NewMenuEntry->OptionNumber
);
NewLoadContext = (BM_LOAD_CONTEXT *)NewMenuEntry->VariableContext;
Status = gRT->SetVariable (
L"BootNext",
&gEfiGlobalVariableGuid,
VAR_FLAG,
sizeof (UINT16),
&NewMenuEntry->OptionNumber
);
NewLoadContext->IsBootNext = TRUE;
CallbackData->BmmOldFakeNVData.BootNext = CurrentFakeNVMap->BootNext;
return Status;
@@ -586,7 +588,7 @@ Var_UpdateBootNext (
**/
EFI_STATUS
Var_UpdateBootOrder (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
EFI_STATUS Status;
@@ -599,7 +601,7 @@ Var_UpdateBootOrder (
//
// First check whether BootOrder is present in current configuration
//
GetEfiGlobalVariable2 (L"BootOrder", (VOID **) &BootOrder, &BootOrderSize);
GetEfiGlobalVariable2 (L"BootOrder", (VOID **)&BootOrder, &BootOrderSize);
if (BootOrder == NULL) {
return EFI_OUT_OF_RESOURCES;
}
@@ -611,7 +613,7 @@ Var_UpdateBootOrder (
//
for (OrderIndex = 0; (OrderIndex < BootOptionMenu.MenuNumber) && (CallbackData->BmmFakeNvData.BootOptionOrder[OrderIndex] != 0); OrderIndex++) {
for (Index = OrderIndex; Index < BootOrderSize / sizeof (UINT16); Index++) {
if ((BootOrder[Index] == (UINT16) (CallbackData->BmmFakeNvData.BootOptionOrder[OrderIndex] - 1)) && (OrderIndex != Index)) {
if ((BootOrder[Index] == (UINT16)(CallbackData->BmmFakeNvData.BootOptionOrder[OrderIndex] - 1)) && (OrderIndex != Index)) {
OptionNumber = BootOrder[Index];
CopyMem (&BootOrder[OrderIndex + 1], &BootOrder[OrderIndex], (Index - OrderIndex) * sizeof (UINT16));
BootOrder[OrderIndex] = OptionNumber;
@@ -632,7 +634,6 @@ Var_UpdateBootOrder (
BOpt_GetBootOptions (CallbackData);
return Status;
}
/**
@@ -649,7 +650,7 @@ Var_UpdateBootOrder (
**/
EFI_STATUS
Var_UpdateDriverOrder (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
EFI_STATUS Status;
@@ -664,12 +665,13 @@ Var_UpdateDriverOrder (
//
// First check whether DriverOrder is present in current configuration
//
GetEfiGlobalVariable2 (L"DriverOrder", (VOID **) &DriverOrderList, &DriverOrderListSize);
GetEfiGlobalVariable2 (L"DriverOrder", (VOID **)&DriverOrderList, &DriverOrderListSize);
NewDriverOrderList = AllocateZeroPool (DriverOrderListSize);
if (NewDriverOrderList == NULL) {
return EFI_OUT_OF_RESOURCES;
}
//
// If exists, delete it to hold new DriverOrder
//
@@ -680,7 +682,7 @@ Var_UpdateDriverOrder (
ASSERT (DriverOptionMenu.MenuNumber <= (sizeof (CallbackData->BmmFakeNvData.DriverOptionOrder) / sizeof (CallbackData->BmmFakeNvData.DriverOptionOrder[0])));
for (Index = 0; Index < DriverOptionMenu.MenuNumber; Index++) {
NewDriverOrderList[Index] = (UINT16) (CallbackData->BmmFakeNvData.DriverOptionOrder[Index] - 1);
NewDriverOrderList[Index] = (UINT16)(CallbackData->BmmFakeNvData.DriverOptionOrder[Index] - 1);
}
Status = gRT->SetVariable (
@@ -710,7 +712,7 @@ Var_UpdateDriverOrder (
**/
EFI_STATUS
Var_UpdateConMode (
IN BMM_CALLBACK_DATA *CallbackData
IN BMM_CALLBACK_DATA *CallbackData
)
{
EFI_STATUS Status;
@@ -720,10 +722,10 @@ Var_UpdateConMode (
Mode = CallbackData->BmmFakeNvData.ConsoleOutMode;
Status = gST->ConOut->QueryMode (gST->ConOut, Mode, &(ModeInfo.Column), &(ModeInfo.Row));
if (!EFI_ERROR(Status)) {
Status = PcdSet32S (PcdSetupConOutColumn, (UINT32) ModeInfo.Column);
if (!EFI_ERROR (Status)) {
Status = PcdSet32S (PcdSetupConOutColumn, (UINT32)ModeInfo.Column);
if (!EFI_ERROR (Status)) {
Status = PcdSet32S (PcdSetupConOutRow, (UINT32) ModeInfo.Row);
Status = PcdSet32S (PcdSetupConOutRow, (UINT32)ModeInfo.Row);
}
}

View File

@@ -8,26 +8,26 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "BootManager.h"
UINT16 mKeyInput;
EFI_GUID mBootManagerGuid = BOOT_MANAGER_FORMSET_GUID;
UINT16 mKeyInput;
EFI_GUID mBootManagerGuid = BOOT_MANAGER_FORMSET_GUID;
//
// Boot video resolution and text mode.
//
UINT32 mBmBootHorizontalResolution = 0;
UINT32 mBmBootVerticalResolution = 0;
UINT32 mBmBootTextModeColumn = 0;
UINT32 mBmBootTextModeRow = 0;
UINT32 mBmBootHorizontalResolution = 0;
UINT32 mBmBootVerticalResolution = 0;
UINT32 mBmBootTextModeColumn = 0;
UINT32 mBmBootTextModeRow = 0;
//
// BIOS setup video resolution and text mode.
//
UINT32 mBmSetupTextModeColumn = 0;
UINT32 mBmSetupTextModeRow = 0;
UINT32 mBmSetupHorizontalResolution = 0;
UINT32 mBmSetupVerticalResolution = 0;
UINT32 mBmSetupTextModeColumn = 0;
UINT32 mBmSetupTextModeRow = 0;
UINT32 mBmSetupHorizontalResolution = 0;
UINT32 mBmSetupVerticalResolution = 0;
BOOLEAN mBmModeInitialized = FALSE;
BOOLEAN mBmModeInitialized = FALSE;
CHAR16 *mDeviceTypeStr[] = {
CHAR16 *mDeviceTypeStr[] = {
L"Legacy BEV",
L"Legacy Floppy",
L"Legacy Hard Drive",
@@ -44,21 +44,22 @@ HII_VENDOR_DEVICE_PATH mBootManagerHiiVendorDevicePath = {
HARDWARE_DEVICE_PATH,
HW_VENDOR_DP,
{
(UINT8) (sizeof (VENDOR_DEVICE_PATH)),
(UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)
(UINT8)(sizeof (VENDOR_DEVICE_PATH)),
(UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8)
}
},
//
// {1DDDBE15-481D-4d2b-8277-B191EAF66525}
//
{ 0x1dddbe15, 0x481d, 0x4d2b, { 0x82, 0x77, 0xb1, 0x91, 0xea, 0xf6, 0x65, 0x25 } }
{ 0x1dddbe15, 0x481d, 0x4d2b, { 0x82, 0x77, 0xb1, 0x91, 0xea, 0xf6, 0x65, 0x25 }
}
},
{
END_DEVICE_PATH_TYPE,
END_ENTIRE_DEVICE_PATH_SUBTYPE,
{
(UINT8) (END_DEVICE_PATH_LENGTH),
(UINT8) ((END_DEVICE_PATH_LENGTH) >> 8)
(UINT8)(END_DEVICE_PATH_LENGTH),
(UINT8)((END_DEVICE_PATH_LENGTH) >> 8)
}
}
};
@@ -116,7 +117,7 @@ BmSetConsoleMode (
Status = gBS->HandleProtocol (
gST->ConsoleOutHandle,
&gEfiGraphicsOutputProtocolGuid,
(VOID**)&GraphicsOutput
(VOID **)&GraphicsOutput
);
if (EFI_ERROR (Status)) {
GraphicsOutput = NULL;
@@ -125,7 +126,7 @@ BmSetConsoleMode (
Status = gBS->HandleProtocol (
gST->ConsoleOutHandle,
&gEfiSimpleTextOutProtocolGuid,
(VOID**)&SimpleTextOut
(VOID **)&SimpleTextOut
);
if (EFI_ERROR (Status)) {
SimpleTextOut = NULL;
@@ -154,7 +155,7 @@ BmSetConsoleMode (
}
if (GraphicsOutput != NULL) {
MaxGopMode = GraphicsOutput->Mode->MaxMode;
MaxGopMode = GraphicsOutput->Mode->MaxMode;
}
if (SimpleTextOut != NULL) {
@@ -170,22 +171,24 @@ BmSetConsoleMode (
//
for (ModeNumber = 0; ModeNumber < MaxGopMode; ModeNumber++) {
Status = GraphicsOutput->QueryMode (
GraphicsOutput,
ModeNumber,
&SizeOfInfo,
&Info
);
GraphicsOutput,
ModeNumber,
&SizeOfInfo,
&Info
);
if (!EFI_ERROR (Status)) {
if ((Info->HorizontalResolution == NewHorizontalResolution) &&
(Info->VerticalResolution == NewVerticalResolution)) {
(Info->VerticalResolution == NewVerticalResolution))
{
if ((GraphicsOutput->Mode->Info->HorizontalResolution == NewHorizontalResolution) &&
(GraphicsOutput->Mode->Info->VerticalResolution == NewVerticalResolution)) {
(GraphicsOutput->Mode->Info->VerticalResolution == NewVerticalResolution))
{
//
// Current resolution is same with required resolution, check if text mode need be set
//
Status = SimpleTextOut->QueryMode (SimpleTextOut, SimpleTextOut->Mode->Mode, &CurrentColumn, &CurrentRow);
ASSERT_EFI_ERROR (Status);
if (CurrentColumn == NewColumns && CurrentRow == NewRows) {
if ((CurrentColumn == NewColumns) && (CurrentRow == NewRows)) {
//
// If current text mode is same with required text mode. Do nothing
//
@@ -197,7 +200,7 @@ BmSetConsoleMode (
//
for (Index = 0; Index < MaxTextMode; Index++) {
Status = SimpleTextOut->QueryMode (SimpleTextOut, Index, &CurrentColumn, &CurrentRow);
if (!EFI_ERROR(Status)) {
if (!EFI_ERROR (Status)) {
if ((CurrentColumn == NewColumns) && (CurrentRow == NewRows)) {
//
// Required text mode is supported, set it.
@@ -216,6 +219,7 @@ BmSetConsoleMode (
}
}
}
if (Index == MaxTextMode) {
//
// If required text mode is not supported, return error.
@@ -236,6 +240,7 @@ BmSetConsoleMode (
}
}
}
FreePool (Info);
}
}
@@ -266,19 +271,21 @@ BmSetConsoleMode (
// Locate all the handles with GOP protocol and reconnect it.
//
Status = gBS->LocateHandleBuffer (
ByProtocol,
&gEfiSimpleTextOutProtocolGuid,
NULL,
&HandleCount,
&HandleBuffer
);
ByProtocol,
&gEfiSimpleTextOutProtocolGuid,
NULL,
&HandleCount,
&HandleBuffer
);
if (!EFI_ERROR (Status)) {
for (Index = 0; Index < HandleCount; Index++) {
gBS->DisconnectController (HandleBuffer[Index], NULL, NULL);
}
for (Index = 0; Index < HandleCount; Index++) {
gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);
}
if (HandleBuffer != NULL) {
FreePool (HandleBuffer);
}
@@ -297,20 +304,20 @@ BmSetupResetReminder (
VOID
)
{
EFI_INPUT_KEY Key;
CHAR16 *StringBuffer1;
CHAR16 *StringBuffer2;
EFI_STATUS Status;
EDKII_FORM_BROWSER_EXTENSION2_PROTOCOL *FormBrowserEx2;
EFI_INPUT_KEY Key;
CHAR16 *StringBuffer1;
CHAR16 *StringBuffer2;
EFI_STATUS Status;
EDKII_FORM_BROWSER_EXTENSION2_PROTOCOL *FormBrowserEx2;
//
// Use BrowserEx2 protocol to check whether reset is required.
//
Status = gBS->LocateProtocol (&gEdkiiFormBrowserEx2ProtocolGuid, NULL, (VOID **) &FormBrowserEx2);
Status = gBS->LocateProtocol (&gEdkiiFormBrowserEx2ProtocolGuid, NULL, (VOID **)&FormBrowserEx2);
//
//check any reset required change is applied? if yes, reset system
// check any reset required change is applied? if yes, reset system
//
if (!EFI_ERROR(Status) && FormBrowserEx2->IsResetRequired ()) {
if (!EFI_ERROR (Status) && FormBrowserEx2->IsResetRequired ()) {
StringBuffer1 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16));
ASSERT (StringBuffer1 != NULL);
StringBuffer2 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16));
@@ -352,20 +359,20 @@ GroupMultipleLegacyBootOption4SameType (
VOID
)
{
EFI_STATUS Status;
UINTN Index;
UINTN DeviceIndex;
UINTN DeviceTypeIndex[7];
UINTN *NextIndex;
UINT16 OptionNumber;
UINT16 *BootOrder;
UINTN BootOrderSize;
CHAR16 OptionName[sizeof ("Boot####")];
EFI_BOOT_MANAGER_LOAD_OPTION BootOption;
EFI_STATUS Status;
UINTN Index;
UINTN DeviceIndex;
UINTN DeviceTypeIndex[7];
UINTN *NextIndex;
UINT16 OptionNumber;
UINT16 *BootOrder;
UINTN BootOrderSize;
CHAR16 OptionName[sizeof ("Boot####")];
EFI_BOOT_MANAGER_LOAD_OPTION BootOption;
SetMem (DeviceTypeIndex, sizeof (DeviceTypeIndex), 0xff);
GetEfiGlobalVariable2 (L"BootOrder", (VOID **) &BootOrder, &BootOrderSize);
GetEfiGlobalVariable2 (L"BootOrder", (VOID **)&BootOrder, &BootOrderSize);
if (BootOrder == NULL) {
return;
}
@@ -376,15 +383,16 @@ GroupMultipleLegacyBootOption4SameType (
ASSERT_EFI_ERROR (Status);
if ((DevicePathType (BootOption.FilePath) == BBS_DEVICE_PATH) &&
(DevicePathSubType (BootOption.FilePath) == BBS_BBS_DP)) {
(DevicePathSubType (BootOption.FilePath) == BBS_BBS_DP))
{
//
// Legacy Boot Option
//
DEBUG ((DEBUG_ERROR, "[BootManagerDxe] ==== Find Legacy Boot Option 0x%x! ==== \n", Index));
ASSERT ((((BBS_BBS_DEVICE_PATH *) BootOption.FilePath)->DeviceType & 0xF) < ARRAY_SIZE (DeviceTypeIndex));
NextIndex = &DeviceTypeIndex[((BBS_BBS_DEVICE_PATH *) BootOption.FilePath)->DeviceType & 0xF];
ASSERT ((((BBS_BBS_DEVICE_PATH *)BootOption.FilePath)->DeviceType & 0xF) < ARRAY_SIZE (DeviceTypeIndex));
NextIndex = &DeviceTypeIndex[((BBS_BBS_DEVICE_PATH *)BootOption.FilePath)->DeviceType & 0xF];
if (*NextIndex == (UINTN) -1) {
if (*NextIndex == (UINTN)-1) {
//
// *NextIndex is the Index in BootOrder to put the next Option Number for the same type
//
@@ -401,12 +409,13 @@ GroupMultipleLegacyBootOption4SameType (
// Update the DeviceTypeIndex array to reflect the right shift operation
//
for (DeviceIndex = 0; DeviceIndex < ARRAY_SIZE (DeviceTypeIndex); DeviceIndex++) {
if (DeviceTypeIndex[DeviceIndex] != (UINTN) -1 && DeviceTypeIndex[DeviceIndex] >= *NextIndex) {
if ((DeviceTypeIndex[DeviceIndex] != (UINTN)-1) && (DeviceTypeIndex[DeviceIndex] >= *NextIndex)) {
DeviceTypeIndex[DeviceIndex]++;
}
}
}
}
EfiBootManagerFreeLoadOption (&BootOption);
}
@@ -430,12 +439,12 @@ GroupMultipleLegacyBootOption4SameType (
**/
CHAR16 *
BmDevicePathToStr (
IN EFI_DEVICE_PATH_PROTOCOL *DevPath
IN EFI_DEVICE_PATH_PROTOCOL *DevPath
)
{
EFI_STATUS Status;
CHAR16 *ToText;
EFI_DEVICE_PATH_TO_TEXT_PROTOCOL *DevPathToText;
EFI_STATUS Status;
CHAR16 *ToText;
EFI_DEVICE_PATH_TO_TEXT_PROTOCOL *DevPathToText;
if (DevPath == NULL) {
return NULL;
@@ -444,7 +453,7 @@ BmDevicePathToStr (
Status = gBS->LocateProtocol (
&gEfiDevicePathToTextProtocolGuid,
NULL,
(VOID **) &DevPathToText
(VOID **)&DevPathToText
);
ASSERT_EFI_ERROR (Status);
ToText = DevPathToText->ConvertDevicePathToText (
@@ -485,7 +494,7 @@ UpdateBootManager (
BOOLEAN NeedEndOp;
UINTN MaxLen;
DeviceType = (UINT16) -1;
DeviceType = (UINT16)-1;
//
// for better user experience
@@ -516,18 +525,18 @@ UpdateBootManager (
//
// Create Hii Extend Label OpCode as the start opcode
//
StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
StartLabel = (EFI_IFR_GUID_LABEL *)HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
StartLabel->Number = LABEL_BOOT_OPTION;
//
// Create Hii Extend Label OpCode as the end opcode
//
EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (EndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
EndLabel = (EFI_IFR_GUID_LABEL *)HiiCreateGuidOpCode (EndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
EndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
EndLabel->Number = LABEL_BOOT_OPTION_END;
mKeyInput = 0;
NeedEndOp = FALSE;
mKeyInput = 0;
NeedEndOp = FALSE;
for (Index = 0; Index < BootOptionCount; Index++) {
//
// At this stage we are creating a menu entry, thus the Keys are reproduceable
@@ -544,28 +553,28 @@ UpdateBootManager (
//
// Group the legacy boot option in the sub title created dynamically
//
IsLegacyOption = (BOOLEAN) (
(DevicePathType (BootOption[Index].FilePath) == BBS_DEVICE_PATH) &&
(DevicePathSubType (BootOption[Index].FilePath) == BBS_BBS_DP)
);
IsLegacyOption = (BOOLEAN)(
(DevicePathType (BootOption[Index].FilePath) == BBS_DEVICE_PATH) &&
(DevicePathSubType (BootOption[Index].FilePath) == BBS_BBS_DP)
);
if (!IsLegacyOption && NeedEndOp) {
NeedEndOp = FALSE;
HiiCreateEndOpCode (StartOpCodeHandle);
}
if (IsLegacyOption && DeviceType != ((BBS_BBS_DEVICE_PATH *) BootOption[Index].FilePath)->DeviceType) {
if (IsLegacyOption && (DeviceType != ((BBS_BBS_DEVICE_PATH *)BootOption[Index].FilePath)->DeviceType)) {
if (NeedEndOp) {
HiiCreateEndOpCode (StartOpCodeHandle);
}
DeviceType = ((BBS_BBS_DEVICE_PATH *) BootOption[Index].FilePath)->DeviceType;
DeviceType = ((BBS_BBS_DEVICE_PATH *)BootOption[Index].FilePath)->DeviceType;
Token = HiiSetString (
HiiHandle,
0,
mDeviceTypeStr[
MIN (DeviceType & 0xF, ARRAY_SIZE (mDeviceTypeStr) - 1)
],
MIN (DeviceType & 0xF, ARRAY_SIZE (mDeviceTypeStr) - 1)
],
NULL
);
HiiCreateSubTitleOpCode (StartOpCodeHandle, Token, 0, 0, 1);
@@ -576,10 +585,10 @@ UpdateBootManager (
Token = HiiSetString (HiiHandle, 0, BootOption[Index].Description, NULL);
TempStr = BmDevicePathToStr (BootOption[Index].FilePath);
TempSize = StrSize (TempStr);
TempStr = BmDevicePathToStr (BootOption[Index].FilePath);
TempSize = StrSize (TempStr);
HelpString = AllocateZeroPool (TempSize + StrSize (L"Device Path : "));
MaxLen = (TempSize + StrSize (L"Device Path : "))/sizeof(CHAR16);
MaxLen = (TempSize + StrSize (L"Device Path : "))/sizeof (CHAR16);
ASSERT (HelpString != NULL);
StrCatS (HelpString, MaxLen, L"Device Path : ");
StrCatS (HelpString, MaxLen, TempStr);
@@ -639,15 +648,16 @@ UpdateBootManager (
EFI_STATUS
EFIAPI
BootManagerExtractConfig (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Request,
OUT EFI_STRING *Progress,
OUT EFI_STRING *Results
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Request,
OUT EFI_STRING *Progress,
OUT EFI_STRING *Results
)
{
if (Progress == NULL || Results == NULL) {
if ((Progress == NULL) || (Results == NULL)) {
return EFI_INVALID_PARAMETER;
}
*Progress = Request;
return EFI_NOT_FOUND;
}
@@ -671,12 +681,12 @@ BootManagerExtractConfig (
EFI_STATUS
EFIAPI
BootManagerRouteConfig (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Configuration,
OUT EFI_STRING *Progress
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Configuration,
OUT EFI_STRING *Progress
)
{
if (Configuration == NULL || Progress == NULL) {
if ((Configuration == NULL) || (Progress == NULL)) {
return EFI_INVALID_PARAMETER;
}
@@ -694,11 +704,11 @@ BmInitialBootModeInfo (
VOID
)
{
EFI_STATUS Status;
EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *SimpleTextOut;
UINTN BootTextColumn;
UINTN BootTextRow;
EFI_STATUS Status;
EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *SimpleTextOut;
UINTN BootTextColumn;
UINTN BootTextRow;
if (mBmModeInitialized) {
return;
@@ -711,7 +721,7 @@ BmInitialBootModeInfo (
Status = gBS->HandleProtocol (
gST->ConsoleOutHandle,
&gEfiGraphicsOutputProtocolGuid,
(VOID**)&GraphicsOutput
(VOID **)&GraphicsOutput
);
if (EFI_ERROR (Status)) {
GraphicsOutput = NULL;
@@ -720,7 +730,7 @@ BmInitialBootModeInfo (
Status = gBS->HandleProtocol (
gST->ConsoleOutHandle,
&gEfiSimpleTextOutProtocolGuid,
(VOID**)&SimpleTextOut
(VOID **)&SimpleTextOut
);
if (EFI_ERROR (Status)) {
SimpleTextOut = NULL;
@@ -753,7 +763,7 @@ BmInitialBootModeInfo (
mBmSetupTextModeColumn = PcdGet32 (PcdSetupConOutColumn);
mBmSetupTextModeRow = PcdGet32 (PcdSetupConOutRow);
mBmModeInitialized = TRUE;
mBmModeInitialized = TRUE;
}
/**
@@ -777,26 +787,27 @@ BmInitialBootModeInfo (
EFI_STATUS
EFIAPI
BootManagerCallback (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN EFI_BROWSER_ACTION Action,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN EFI_IFR_TYPE_VALUE *Value,
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN EFI_BROWSER_ACTION Action,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN EFI_IFR_TYPE_VALUE *Value,
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
)
{
EFI_BOOT_MANAGER_LOAD_OPTION *BootOption;
UINTN BootOptionCount;
EFI_INPUT_KEY Key;
EFI_BOOT_MANAGER_LOAD_OPTION *BootOption;
UINTN BootOptionCount;
EFI_INPUT_KEY Key;
if (Action == EFI_BROWSER_ACTION_FORM_OPEN) {
//
//Means enter the boot manager form.
//Update the boot manage page,because the boot option may changed.
// Means enter the boot manager form.
// Update the boot manage page,because the boot option may changed.
//
if (QuestionId == 0x1212){
UpdateBootManager();
if (QuestionId == 0x1212) {
UpdateBootManager ();
}
return EFI_SUCCESS;
}
@@ -820,7 +831,7 @@ BootManagerCallback (
gST->ConOut->ClearScreen (gST->ConOut);
//
//check any reset required change is applied? if yes, reset system
// check any reset required change is applied? if yes, reset system
//
BmSetupResetReminder ();
@@ -833,9 +844,9 @@ BootManagerCallback (
if (EFI_ERROR (BootOption[QuestionId - 1].Status)) {
gST->ConOut->OutputString (
gST->ConOut,
HiiGetString (gBootManagerPrivate.HiiHandle, STRING_TOKEN (STR_ANY_KEY_CONTINUE), NULL)
);
gST->ConOut,
HiiGetString (gBootManagerPrivate.HiiHandle, STRING_TOKEN (STR_ANY_KEY_CONTINUE), NULL)
);
gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);
}
@@ -858,24 +869,24 @@ BootManagerCallback (
EFI_STATUS
EFIAPI
BootManagerUiLibConstructor (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;
EFI_STATUS Status;
//
// Install Device Path Protocol and Config Access protocol to driver handle
//
gBootManagerPrivate.DriverHandle = NULL;
Status = gBS->InstallMultipleProtocolInterfaces (
&gBootManagerPrivate.DriverHandle,
&gEfiDevicePathProtocolGuid,
&mBootManagerHiiVendorDevicePath,
&gEfiHiiConfigAccessProtocolGuid,
&gBootManagerPrivate.ConfigAccess,
NULL
);
Status = gBS->InstallMultipleProtocolInterfaces (
&gBootManagerPrivate.DriverHandle,
&gEfiDevicePathProtocolGuid,
&mBootManagerHiiVendorDevicePath,
&gEfiHiiConfigAccessProtocolGuid,
&gBootManagerPrivate.ConfigAccess,
NULL
);
ASSERT_EFI_ERROR (Status);
//
@@ -906,11 +917,11 @@ BootManagerUiLibConstructor (
EFI_STATUS
EFIAPI
BootManagerUiLibDestructor (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;
EFI_STATUS Status;
Status = gBS->UninstallMultipleProtocolInterfaces (
gBootManagerPrivate.DriverHandle,

View File

@@ -33,8 +33,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
/// HII specific Vendor Device Path definition.
///
typedef struct {
VENDOR_DEVICE_PATH VendorDevicePath;
EFI_DEVICE_PATH_PROTOCOL End;
VENDOR_DEVICE_PATH VendorDevicePath;
EFI_DEVICE_PATH_PROTOCOL End;
} HII_VENDOR_DEVICE_PATH;
#pragma pack()
@@ -46,11 +46,11 @@ typedef struct {
0x847bc3fe, 0xb974, 0x446d, {0x94, 0x49, 0x5a, 0xd5, 0x41, 0x2e, 0x99, 0x3b} \
}
#define BOOT_MANAGER_FORM_ID 0x1000
#define BOOT_MANAGER_FORM_ID 0x1000
#define LABEL_BOOT_OPTION 0x00
#define LABEL_BOOT_OPTION_END 0x01
#define MAX_STRING_LEN 200
#define LABEL_BOOT_OPTION 0x00
#define LABEL_BOOT_OPTION_END 0x01
#define MAX_STRING_LEN 200
//
// Variable created with this flag will be "Efi:...."
@@ -60,23 +60,23 @@ typedef struct {
//
// These are the VFR compiler generated data representing our VFR data.
//
extern UINT8 BootManagerVfrBin[];
extern UINT8 BootManagerVfrBin[];
#define BOOT_MANAGER_CALLBACK_DATA_SIGNATURE SIGNATURE_32 ('B', 'M', 'C', 'B')
typedef struct {
UINTN Signature;
UINTN Signature;
//
// HII relative handles
//
EFI_HII_HANDLE HiiHandle;
EFI_HANDLE DriverHandle;
EFI_HII_HANDLE HiiHandle;
EFI_HANDLE DriverHandle;
//
// Produced protocols
//
EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess;
EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess;
} BOOT_MANAGER_CALLBACK_DATA;
/**
@@ -100,12 +100,12 @@ typedef struct {
EFI_STATUS
EFIAPI
BootManagerCallback (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN EFI_BROWSER_ACTION Action,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN EFI_IFR_TYPE_VALUE *Value,
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN EFI_BROWSER_ACTION Action,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN EFI_IFR_TYPE_VALUE *Value,
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
);
/**
@@ -133,10 +133,10 @@ BootManagerCallback (
EFI_STATUS
EFIAPI
BootManagerExtractConfig (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Request,
OUT EFI_STRING *Progress,
OUT EFI_STRING *Results
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Request,
OUT EFI_STRING *Progress,
OUT EFI_STRING *Results
);
/**
@@ -158,9 +158,9 @@ BootManagerExtractConfig (
EFI_STATUS
EFIAPI
BootManagerRouteConfig (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Configuration,
OUT EFI_STRING *Progress
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Configuration,
OUT EFI_STRING *Progress
);
#endif

View File

@@ -12,7 +12,7 @@
**/
VOID *
BrDummyMalloc (
IN size_t Size
IN size_t Size
)
{
ASSERT (FALSE);
@@ -24,7 +24,7 @@ BrDummyMalloc (
**/
VOID
BrDummyFree (
IN VOID * Ptr
IN VOID *Ptr
)
{
ASSERT (FALSE);

View File

@@ -14,30 +14,30 @@
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/DebugLib.h>
#define memcpy CopyMem
#define memmove CopyMem
#define memset(dest,ch,count) SetMem(dest,(UINTN)(count),(UINT8)(ch))
#define malloc BrDummyMalloc
#define free BrDummyFree
#define memcpy CopyMem
#define memmove CopyMem
#define memset(dest, ch, count) SetMem(dest,(UINTN)(count),(UINT8)(ch))
#define malloc BrDummyMalloc
#define free BrDummyFree
typedef INT8 int8_t;
typedef INT16 int16_t;
typedef INT32 int32_t;
typedef INT64 int64_t;
typedef UINT8 uint8_t;
typedef UINT16 uint16_t;
typedef UINT32 uint32_t;
typedef UINT64 uint64_t;
typedef UINTN size_t;
typedef INT8 int8_t;
typedef INT16 int16_t;
typedef INT32 int32_t;
typedef INT64 int64_t;
typedef UINT8 uint8_t;
typedef UINT16 uint16_t;
typedef UINT32 uint32_t;
typedef UINT64 uint64_t;
typedef UINTN size_t;
VOID *
BrDummyMalloc (
IN size_t Size
IN size_t Size
);
VOID
BrDummyFree (
IN VOID * Ptr
IN VOID *Ptr
);
#endif

View File

@@ -17,18 +17,18 @@
**/
VOID *
BrAlloc (
IN VOID * Ptr,
IN size_t Size
IN VOID *Ptr,
IN size_t Size
)
{
VOID *Addr;
BROTLI_BUFF *Private;
VOID *Addr;
BROTLI_BUFF *Private;
Private = (BROTLI_BUFF *)Ptr;
if (Private->BuffSize >= Size) {
Addr = Private->Buff;
Private->Buff = (VOID *) ((UINT8 *)Addr + Size);
Addr = Private->Buff;
Private->Buff = (VOID *)((UINT8 *)Addr + Size);
Private->BuffSize -= Size;
return Addr;
} else {
@@ -45,8 +45,8 @@ BrAlloc (
**/
VOID
BrFree (
IN VOID * Ptr,
IN VOID * Address
IN VOID *Ptr,
IN VOID *Address
)
{
//
@@ -79,83 +79,89 @@ BrFree (
**/
EFI_STATUS
BrotliDecompress (
IN CONST VOID* Source,
IN UINTN SourceSize,
IN OUT VOID* Destination,
IN OUT UINTN DestSize,
IN VOID * BuffInfo
IN CONST VOID *Source,
IN UINTN SourceSize,
IN OUT VOID *Destination,
IN OUT UINTN DestSize,
IN VOID *BuffInfo
)
{
UINT8 * Input;
UINT8 * Output;
const UINT8 * NextIn;
UINT8 * NextOut;
size_t TotalOut;
size_t AvailableIn;
size_t AvailableOut;
VOID * Temp;
BrotliDecoderResult Result;
BrotliDecoderState * BroState;
UINT8 *Input;
UINT8 *Output;
const UINT8 *NextIn;
UINT8 *NextOut;
size_t TotalOut;
size_t AvailableIn;
size_t AvailableOut;
VOID *Temp;
BrotliDecoderResult Result;
BrotliDecoderState *BroState;
TotalOut = 0;
TotalOut = 0;
AvailableOut = FILE_BUFFER_SIZE;
Result = BROTLI_DECODER_RESULT_ERROR;
BroState = BrotliDecoderCreateInstance(BrAlloc, BrFree, BuffInfo);
Temp = Destination;
Result = BROTLI_DECODER_RESULT_ERROR;
BroState = BrotliDecoderCreateInstance (BrAlloc, BrFree, BuffInfo);
Temp = Destination;
if (BroState == NULL) {
return EFI_INVALID_PARAMETER;
}
Input = (UINT8 *)BrAlloc(BuffInfo, FILE_BUFFER_SIZE);
Output = (UINT8 *)BrAlloc(BuffInfo, FILE_BUFFER_SIZE);
if ((Input==NULL) || (Output==NULL)) {
BrFree(BuffInfo, Input);
BrFree(BuffInfo, Output);
BrotliDecoderDestroyInstance(BroState);
Input = (UINT8 *)BrAlloc (BuffInfo, FILE_BUFFER_SIZE);
Output = (UINT8 *)BrAlloc (BuffInfo, FILE_BUFFER_SIZE);
if ((Input == NULL) || (Output == NULL)) {
BrFree (BuffInfo, Input);
BrFree (BuffInfo, Output);
BrotliDecoderDestroyInstance (BroState);
return EFI_INVALID_PARAMETER;
}
NextOut = Output;
Result = BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT;
Result = BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT;
while (1) {
if (Result == BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT) {
if (SourceSize == 0) {
break;
}
if (SourceSize >= FILE_BUFFER_SIZE) {
AvailableIn = FILE_BUFFER_SIZE;
}else{
} else {
AvailableIn = SourceSize;
}
CopyMem(Input, Source, AvailableIn);
Source = (VOID *)((UINT8 *)Source + AvailableIn);
CopyMem (Input, Source, AvailableIn);
Source = (VOID *)((UINT8 *)Source + AvailableIn);
SourceSize -= AvailableIn;
NextIn = Input;
NextIn = Input;
} else if (Result == BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT) {
CopyMem(Temp, Output, FILE_BUFFER_SIZE);
CopyMem (Temp, Output, FILE_BUFFER_SIZE);
AvailableOut = FILE_BUFFER_SIZE;
Temp = (VOID *)((UINT8 *)Temp +FILE_BUFFER_SIZE);
NextOut = Output;
Temp = (VOID *)((UINT8 *)Temp +FILE_BUFFER_SIZE);
NextOut = Output;
} else {
break; /* Error or success. */
}
Result = BrotliDecoderDecompressStream(
BroState,
&AvailableIn,
&NextIn,
&AvailableOut,
&NextOut,
&TotalOut
);
Result = BrotliDecoderDecompressStream (
BroState,
&AvailableIn,
&NextIn,
&AvailableOut,
&NextOut,
&TotalOut
);
}
if (NextOut != Output) {
CopyMem(Temp, Output, (size_t)(NextOut - Output));
CopyMem (Temp, Output, (size_t)(NextOut - Output));
}
DestSize = TotalOut;
BrFree(BuffInfo, Input);
BrFree(BuffInfo, Output);
BrotliDecoderDestroyInstance(BroState);
BrFree (BuffInfo, Input);
BrFree (BuffInfo, Output);
BrotliDecoderDestroyInstance (BroState);
return (Result == BROTLI_DECODER_RESULT_SUCCESS) ? EFI_SUCCESS : EFI_INVALID_PARAMETER;
}
@@ -169,19 +175,20 @@ BrotliDecompress (
@return The size of the uncompressed buffer.
**/
UINT64
BrGetDecodedSizeOfBuf(
IN UINT8 * EncodedData,
IN UINT8 StartOffset,
IN UINT8 EndOffset
BrGetDecodedSizeOfBuf (
IN UINT8 *EncodedData,
IN UINT8 StartOffset,
IN UINT8 EndOffset
)
{
UINT64 DecodedSize;
INTN Index;
UINT64 DecodedSize;
INTN Index;
/* Parse header */
DecodedSize = 0;
for (Index = EndOffset - 1; Index >= StartOffset; Index--)
DecodedSize = LShiftU64(DecodedSize, 8) + EncodedData[Index];
for (Index = EndOffset - 1; Index >= StartOffset; Index--) {
DecodedSize = LShiftU64 (DecodedSize, 8) + EncodedData[Index];
}
return DecodedSize;
}
@@ -218,23 +225,23 @@ BrGetDecodedSizeOfBuf(
EFI_STATUS
EFIAPI
BrotliUefiDecompressGetInfo (
IN CONST VOID * Source,
IN UINT32 SourceSize,
OUT UINT32 * DestinationSize,
OUT UINT32 * ScratchSize
IN CONST VOID *Source,
IN UINT32 SourceSize,
OUT UINT32 *DestinationSize,
OUT UINT32 *ScratchSize
)
{
UINT64 GetSize;
UINT8 MaxOffset;
ASSERT(SourceSize >= BROTLI_SCRATCH_MAX);
ASSERT (SourceSize >= BROTLI_SCRATCH_MAX);
MaxOffset = BROTLI_DECODE_MAX;
GetSize = BrGetDecodedSizeOfBuf((UINT8 *)Source, MaxOffset - BROTLI_INFO_SIZE, MaxOffset);
MaxOffset = BROTLI_DECODE_MAX;
GetSize = BrGetDecodedSizeOfBuf ((UINT8 *)Source, MaxOffset - BROTLI_INFO_SIZE, MaxOffset);
*DestinationSize = (UINT32)GetSize;
MaxOffset = BROTLI_SCRATCH_MAX;
GetSize = BrGetDecodedSizeOfBuf((UINT8 *)Source, MaxOffset - BROTLI_INFO_SIZE, MaxOffset);
*ScratchSize = (UINT32)GetSize;
MaxOffset = BROTLI_SCRATCH_MAX;
GetSize = BrGetDecodedSizeOfBuf ((UINT8 *)Source, MaxOffset - BROTLI_INFO_SIZE, MaxOffset);
*ScratchSize = (UINT32)GetSize;
return EFI_SUCCESS;
}
@@ -263,31 +270,31 @@ BrotliUefiDecompressGetInfo (
EFI_STATUS
EFIAPI
BrotliUefiDecompress (
IN CONST VOID * Source,
IN UINTN SourceSize,
IN OUT VOID * Destination,
IN OUT VOID * Scratch
IN CONST VOID *Source,
IN UINTN SourceSize,
IN OUT VOID *Destination,
IN OUT VOID *Scratch
)
{
UINTN DestSize = 0;
EFI_STATUS Status;
BROTLI_BUFF BroBuff;
UINT64 GetSize;
UINT8 MaxOffset;
UINTN DestSize = 0;
EFI_STATUS Status;
BROTLI_BUFF BroBuff;
UINT64 GetSize;
UINT8 MaxOffset;
MaxOffset = BROTLI_SCRATCH_MAX;
GetSize = BrGetDecodedSizeOfBuf((UINT8 *)Source, MaxOffset - BROTLI_INFO_SIZE, MaxOffset);
GetSize = BrGetDecodedSizeOfBuf ((UINT8 *)Source, MaxOffset - BROTLI_INFO_SIZE, MaxOffset);
BroBuff.Buff = Scratch;
BroBuff.BuffSize = (UINTN)GetSize;
Status = BrotliDecompress(
(VOID *)((UINT8 *)Source + BROTLI_SCRATCH_MAX),
SourceSize - BROTLI_SCRATCH_MAX,
Destination,
DestSize,
(VOID *)(&BroBuff)
);
Status = BrotliDecompress (
(VOID *)((UINT8 *)Source + BROTLI_SCRATCH_MAX),
SourceSize - BROTLI_SCRATCH_MAX,
Destination,
DestSize,
(VOID *)(&BroBuff)
);
return Status;
}

View File

@@ -16,16 +16,15 @@
#include <brotli/c/include/brotli/types.h>
#include <brotli/c/include/brotli/decode.h>
typedef struct
{
typedef struct {
VOID *Buff;
UINTN BuffSize;
} BROTLI_BUFF;
#define FILE_BUFFER_SIZE 65536
#define BROTLI_INFO_SIZE 8
#define BROTLI_DECODE_MAX 8
#define BROTLI_SCRATCH_MAX 16
#define FILE_BUFFER_SIZE 65536
#define BROTLI_INFO_SIZE 8
#define BROTLI_DECODE_MAX 8
#define BROTLI_SCRATCH_MAX 16
EFI_STATUS
EFIAPI

View File

@@ -59,31 +59,35 @@ BrotliGuidedSectionGetInfo (
if (IS_SECTION2 (InputSection)) {
if (!CompareGuid (
&gBrotliCustomDecompressGuid,
&(((EFI_GUID_DEFINED_SECTION2 *) InputSection)->SectionDefinitionGuid))) {
&gBrotliCustomDecompressGuid,
&(((EFI_GUID_DEFINED_SECTION2 *)InputSection)->SectionDefinitionGuid)
))
{
return RETURN_INVALID_PARAMETER;
}
*SectionAttribute = ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->Attributes;
*SectionAttribute = ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->Attributes;
return BrotliUefiDecompressGetInfo (
(UINT8 *) InputSection + ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->DataOffset,
SECTION2_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->DataOffset,
(UINT8 *)InputSection + ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->DataOffset,
SECTION2_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->DataOffset,
OutputBufferSize,
ScratchBufferSize
);
} else {
if (!CompareGuid (
&gBrotliCustomDecompressGuid,
&(((EFI_GUID_DEFINED_SECTION *) InputSection)->SectionDefinitionGuid))) {
&gBrotliCustomDecompressGuid,
&(((EFI_GUID_DEFINED_SECTION *)InputSection)->SectionDefinitionGuid)
))
{
return RETURN_INVALID_PARAMETER;
}
*SectionAttribute = ((EFI_GUID_DEFINED_SECTION *) InputSection)->Attributes;
*SectionAttribute = ((EFI_GUID_DEFINED_SECTION *)InputSection)->Attributes;
return BrotliUefiDecompressGetInfo (
(UINT8 *) InputSection + ((EFI_GUID_DEFINED_SECTION *) InputSection)->DataOffset,
SECTION_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION *) InputSection)->DataOffset,
(UINT8 *)InputSection + ((EFI_GUID_DEFINED_SECTION *)InputSection)->DataOffset,
SECTION_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION *)InputSection)->DataOffset,
OutputBufferSize,
ScratchBufferSize
);
@@ -136,38 +140,44 @@ BrotliGuidedSectionExtraction (
if (IS_SECTION2 (InputSection)) {
if (!CompareGuid (
&gBrotliCustomDecompressGuid,
&(((EFI_GUID_DEFINED_SECTION2 *) InputSection)->SectionDefinitionGuid))) {
&gBrotliCustomDecompressGuid,
&(((EFI_GUID_DEFINED_SECTION2 *)InputSection)->SectionDefinitionGuid)
))
{
return RETURN_INVALID_PARAMETER;
}
//
// Authentication is set to Zero, which may be ignored.
//
*AuthenticationStatus = 0;
return BrotliUefiDecompress (
(UINT8 *) InputSection + ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->DataOffset,
SECTION2_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->DataOffset,
(UINT8 *)InputSection + ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->DataOffset,
SECTION2_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->DataOffset,
*OutputBuffer,
ScratchBuffer
);
} else {
if (!CompareGuid (
&gBrotliCustomDecompressGuid,
&(((EFI_GUID_DEFINED_SECTION *) InputSection)->SectionDefinitionGuid))) {
&gBrotliCustomDecompressGuid,
&(((EFI_GUID_DEFINED_SECTION *)InputSection)->SectionDefinitionGuid)
))
{
return RETURN_INVALID_PARAMETER;
}
//
// Authentication is set to Zero, which may be ignored.
//
*AuthenticationStatus = 0;
return BrotliUefiDecompress (
(UINT8 *) InputSection + ((EFI_GUID_DEFINED_SECTION *) InputSection)->DataOffset,
SECTION_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION *) InputSection)->DataOffset,
(UINT8 *)InputSection + ((EFI_GUID_DEFINED_SECTION *)InputSection)->DataOffset,
SECTION_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION *)InputSection)->DataOffset,
*OutputBuffer,
ScratchBuffer
);
);
}
}
@@ -184,8 +194,8 @@ BrotliDecompressLibConstructor (
)
{
return ExtractGuidedSectionRegisterHandlers (
&gBrotliCustomDecompressGuid,
BrotliGuidedSectionGetInfo,
BrotliGuidedSectionExtraction
);
&gBrotliCustomDecompressGuid,
BrotliGuidedSectionGetInfo,
BrotliGuidedSectionExtraction
);
}

View File

@@ -27,7 +27,7 @@
EFI_STATUS
EFIAPI
InitializeCpuExceptionHandlers (
IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL
IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL
)
{
return EFI_SUCCESS;
@@ -52,7 +52,7 @@ InitializeCpuExceptionHandlers (
EFI_STATUS
EFIAPI
InitializeCpuInterruptHandlers (
IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL
IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL
)
{
return EFI_SUCCESS;
@@ -84,8 +84,8 @@ InitializeCpuInterruptHandlers (
EFI_STATUS
EFIAPI
RegisterCpuInterruptHandler (
IN EFI_EXCEPTION_TYPE InterruptType,
IN EFI_CPU_INTERRUPT_HANDLER InterruptHandler
IN EFI_EXCEPTION_TYPE InterruptType,
IN EFI_CPU_INTERRUPT_HANDLER InterruptHandler
)
{
return EFI_UNSUPPORTED;
@@ -100,8 +100,8 @@ RegisterCpuInterruptHandler (
VOID
EFIAPI
DumpCpuContext (
IN EFI_EXCEPTION_TYPE ExceptionType,
IN EFI_SYSTEM_CONTEXT SystemContext
IN EFI_EXCEPTION_TYPE ExceptionType,
IN EFI_SYSTEM_CONTEXT SystemContext
)
{
}
@@ -132,10 +132,9 @@ DumpCpuContext (
EFI_STATUS
EFIAPI
InitializeCpuExceptionHandlersEx (
IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL,
IN CPU_EXCEPTION_INIT_DATA *InitData OPTIONAL
IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL,
IN CPU_EXCEPTION_INIT_DATA *InitData OPTIONAL
)
{
return InitializeCpuExceptionHandlers (VectorInfo);
}

View File

@@ -14,25 +14,25 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
//
// Screen Color Settings
//
#define PICKLIST_HIGHLIGHT_TEXT EFI_WHITE
#define PICKLIST_HIGHLIGHT_BACKGROUND EFI_BACKGROUND_CYAN
#define TITLE_TEXT EFI_WHITE
#define TITLE_BACKGROUND EFI_BACKGROUND_BLUE
#define KEYHELP_TEXT EFI_LIGHTGRAY
#define KEYHELP_BACKGROUND EFI_BACKGROUND_BLACK
#define SUBTITLE_BACKGROUND EFI_BACKGROUND_LIGHTGRAY
#define BANNER_TEXT EFI_BLUE
#define BANNER_BACKGROUND EFI_BACKGROUND_LIGHTGRAY
#define FIELD_TEXT_GRAYED EFI_DARKGRAY
#define FIELD_BACKGROUND EFI_BACKGROUND_LIGHTGRAY
#define POPUP_TEXT EFI_LIGHTGRAY
#define POPUP_BACKGROUND EFI_BACKGROUND_BLUE
#define POPUP_INVERSE_TEXT EFI_LIGHTGRAY
#define POPUP_INVERSE_BACKGROUND EFI_BACKGROUND_BLACK
#define HELP_TEXT EFI_BLUE
#define ERROR_TEXT EFI_RED | EFI_BRIGHT
#define INFO_TEXT EFI_YELLOW | EFI_BRIGHT
#define ARROW_TEXT EFI_RED | EFI_BRIGHT
#define ARROW_BACKGROUND EFI_BACKGROUND_LIGHTGRAY
#define PICKLIST_HIGHLIGHT_TEXT EFI_WHITE
#define PICKLIST_HIGHLIGHT_BACKGROUND EFI_BACKGROUND_CYAN
#define TITLE_TEXT EFI_WHITE
#define TITLE_BACKGROUND EFI_BACKGROUND_BLUE
#define KEYHELP_TEXT EFI_LIGHTGRAY
#define KEYHELP_BACKGROUND EFI_BACKGROUND_BLACK
#define SUBTITLE_BACKGROUND EFI_BACKGROUND_LIGHTGRAY
#define BANNER_TEXT EFI_BLUE
#define BANNER_BACKGROUND EFI_BACKGROUND_LIGHTGRAY
#define FIELD_TEXT_GRAYED EFI_DARKGRAY
#define FIELD_BACKGROUND EFI_BACKGROUND_LIGHTGRAY
#define POPUP_TEXT EFI_LIGHTGRAY
#define POPUP_BACKGROUND EFI_BACKGROUND_BLUE
#define POPUP_INVERSE_TEXT EFI_LIGHTGRAY
#define POPUP_INVERSE_BACKGROUND EFI_BACKGROUND_BLACK
#define HELP_TEXT EFI_BLUE
#define ERROR_TEXT EFI_RED | EFI_BRIGHT
#define INFO_TEXT EFI_YELLOW | EFI_BRIGHT
#define ARROW_TEXT EFI_RED | EFI_BRIGHT
#define ARROW_BACKGROUND EFI_BACKGROUND_LIGHTGRAY
#endif

View File

@@ -8,14 +8,16 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include "CustomizedDisplayLibInternal.h"
EFI_GUID gCustomizedDisplayLibGuid = { 0x99fdc8fd, 0x849b, 0x4eba, { 0xad, 0x13, 0xfb, 0x96, 0x99, 0xc9, 0xa, 0x4d } };
EFI_GUID gCustomizedDisplayLibGuid = {
0x99fdc8fd, 0x849b, 0x4eba, { 0xad, 0x13, 0xfb, 0x96, 0x99, 0xc9, 0xa, 0x4d }
};
EFI_HII_HANDLE mCDLStringPackHandle;
UINT16 gClassOfVfr; // Formset class information
BOOLEAN gLibIsFirstForm = TRUE;
BANNER_DATA *gBannerData;
EFI_HII_HANDLE mCDLStringPackHandle;
UINT16 gClassOfVfr; // Formset class information
BOOLEAN gLibIsFirstForm = TRUE;
BANNER_DATA *gBannerData;
UINTN gFooterHeight;
UINTN gFooterHeight;
/**
+------------------------------------------------------------------------------+
@@ -51,14 +53,14 @@ Statement
EFI_STATUS
EFIAPI
DisplayPageFrame (
IN FORM_DISPLAY_ENGINE_FORM *FormData,
OUT EFI_SCREEN_DESCRIPTOR *ScreenForStatement
IN FORM_DISPLAY_ENGINE_FORM *FormData,
OUT EFI_SCREEN_DESCRIPTOR *ScreenForStatement
)
{
EFI_STATUS Status;
EFI_STATUS Status;
ASSERT (FormData != NULL && ScreenForStatement != NULL);
if (FormData == NULL || ScreenForStatement == NULL) {
if ((FormData == NULL) || (ScreenForStatement == NULL)) {
return EFI_INVALID_PARAMETER;
}
@@ -69,17 +71,18 @@ DisplayPageFrame (
gClassOfVfr = FORMSET_CLASS_PLATFORM_SETUP;
ProcessExternedOpcode(FormData);
ProcessExternedOpcode (FormData);
//
// Calculate the ScreenForStatement.
//
ScreenForStatement->BottomRow = gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - gFooterHeight;
ScreenForStatement->BottomRow = gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - gFooterHeight;
if (gClassOfVfr == FORMSET_CLASS_FRONT_PAGE) {
ScreenForStatement->TopRow = gScreenDimensions.TopRow + FRONT_PAGE_HEADER_HEIGHT;
ScreenForStatement->TopRow = gScreenDimensions.TopRow + FRONT_PAGE_HEADER_HEIGHT;
} else {
ScreenForStatement->TopRow = gScreenDimensions.TopRow + NONE_FRONT_PAGE_HEADER_HEIGHT;
ScreenForStatement->TopRow = gScreenDimensions.TopRow + NONE_FRONT_PAGE_HEADER_HEIGHT;
}
ScreenForStatement->LeftColumn = gScreenDimensions.LeftColumn;
ScreenForStatement->RightColumn = gScreenDimensions.RightColumn;
@@ -105,7 +108,7 @@ DisplayPageFrame (
PrintFramework (FormData);
UpdateStatusBar(NV_UPDATE_REQUIRED, FormData->SettingChangedFlag);
UpdateStatusBar (NV_UPDATE_REQUIRED, FormData->SettingChangedFlag);
return EFI_SUCCESS;
}
@@ -122,27 +125,27 @@ DisplayPageFrame (
VOID
EFIAPI
RefreshKeyHelp (
IN FORM_DISPLAY_ENGINE_FORM *FormData,
IN FORM_DISPLAY_ENGINE_STATEMENT *Statement,
IN BOOLEAN Selected
IN FORM_DISPLAY_ENGINE_FORM *FormData,
IN FORM_DISPLAY_ENGINE_STATEMENT *Statement,
IN BOOLEAN Selected
)
{
UINTN SecCol;
UINTN ThdCol;
UINTN RightColumnOfHelp;
UINTN TopRowOfHelp;
UINTN BottomRowOfHelp;
UINTN StartColumnOfHelp;
EFI_IFR_NUMERIC *NumericOp;
EFI_IFR_DATE *DateOp;
EFI_IFR_TIME *TimeOp;
BOOLEAN HexDisplay;
UINTN ColumnWidth1;
UINTN ColumnWidth2;
UINTN ColumnWidth3;
CHAR16 *ColumnStr1;
CHAR16 *ColumnStr2;
CHAR16 *ColumnStr3;
UINTN SecCol;
UINTN ThdCol;
UINTN RightColumnOfHelp;
UINTN TopRowOfHelp;
UINTN BottomRowOfHelp;
UINTN StartColumnOfHelp;
EFI_IFR_NUMERIC *NumericOp;
EFI_IFR_DATE *DateOp;
EFI_IFR_TIME *TimeOp;
BOOLEAN HexDisplay;
UINTN ColumnWidth1;
UINTN ColumnWidth2;
UINTN ColumnWidth3;
CHAR16 *ColumnStr1;
CHAR16 *ColumnStr2;
CHAR16 *ColumnStr3;
ASSERT (FormData != NULL);
if (FormData == NULL) {
@@ -155,8 +158,8 @@ RefreshKeyHelp (
return;
}
SecCol = gScreenDimensions.LeftColumn + (gScreenDimensions.RightColumn - gScreenDimensions.LeftColumn) / 3;
ThdCol = gScreenDimensions.LeftColumn + (gScreenDimensions.RightColumn - gScreenDimensions.LeftColumn) / 3 * 2;
SecCol = gScreenDimensions.LeftColumn + (gScreenDimensions.RightColumn - gScreenDimensions.LeftColumn) / 3;
ThdCol = gScreenDimensions.LeftColumn + (gScreenDimensions.RightColumn - gScreenDimensions.LeftColumn) / 3 * 2;
//
// + 2 means leave 1 space before the first hotkey info.
@@ -166,12 +169,12 @@ RefreshKeyHelp (
TopRowOfHelp = gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - gFooterHeight + 1;
BottomRowOfHelp = gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - 2;
ColumnWidth1 = SecCol - StartColumnOfHelp;
ColumnWidth2 = ThdCol - SecCol;
ColumnWidth3 = RightColumnOfHelp - ThdCol;
ColumnStr1 = gLibEmptyString;
ColumnStr2 = gLibEmptyString;
ColumnStr3 = gLibEmptyString;
ColumnWidth1 = SecCol - StartColumnOfHelp;
ColumnWidth2 = ThdCol - SecCol;
ColumnWidth3 = RightColumnOfHelp - ThdCol;
ColumnStr1 = gLibEmptyString;
ColumnStr2 = gLibEmptyString;
ColumnStr3 = gLibEmptyString;
//
// Clean the space at gScreenDimensions.LeftColumn + 1.
@@ -190,139 +193,152 @@ RefreshKeyHelp (
if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) {
ColumnStr3 = gEscapeString;
}
PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, ColumnStr3, ColumnWidth3);
return;
}
HexDisplay = FALSE;
NumericOp = NULL;
DateOp = NULL;
TimeOp = NULL;
NumericOp = NULL;
DateOp = NULL;
TimeOp = NULL;
if (Statement->OpCode->OpCode == EFI_IFR_NUMERIC_OP) {
NumericOp = (EFI_IFR_NUMERIC *) Statement->OpCode;
NumericOp = (EFI_IFR_NUMERIC *)Statement->OpCode;
HexDisplay = (NumericOp->Flags & EFI_IFR_DISPLAY_UINT_HEX) == EFI_IFR_DISPLAY_UINT_HEX;
} else if (Statement->OpCode->OpCode == EFI_IFR_DATE_OP) {
DateOp = (EFI_IFR_DATE *) Statement->OpCode;
DateOp = (EFI_IFR_DATE *)Statement->OpCode;
HexDisplay = (DateOp->Flags & EFI_IFR_DISPLAY_UINT_HEX) == EFI_IFR_DISPLAY_UINT_HEX;
} else if (Statement->OpCode->OpCode == EFI_IFR_TIME_OP) {
TimeOp = (EFI_IFR_TIME *) Statement->OpCode;
TimeOp = (EFI_IFR_TIME *)Statement->OpCode;
HexDisplay = (TimeOp->Flags & EFI_IFR_DISPLAY_UINT_HEX) == EFI_IFR_DISPLAY_UINT_HEX;
}
switch (Statement->OpCode->OpCode) {
case EFI_IFR_ORDERED_LIST_OP:
case EFI_IFR_ONE_OF_OP:
case EFI_IFR_NUMERIC_OP:
case EFI_IFR_TIME_OP:
case EFI_IFR_DATE_OP:
if (!Selected) {
PrintHotKeyHelpString (FormData, TRUE);
case EFI_IFR_ORDERED_LIST_OP:
case EFI_IFR_ONE_OF_OP:
case EFI_IFR_NUMERIC_OP:
case EFI_IFR_TIME_OP:
case EFI_IFR_DATE_OP:
if (!Selected) {
PrintHotKeyHelpString (FormData, TRUE);
if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) {
ColumnStr3 = gEscapeString;
}
PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, ColumnStr3, ColumnWidth3);
if ((Statement->OpCode->OpCode == EFI_IFR_DATE_OP) ||
(Statement->OpCode->OpCode == EFI_IFR_TIME_OP)) {
PrintAt (
ColumnWidth1,
StartColumnOfHelp,
BottomRowOfHelp,
L"%c%c%c%c%s",
ARROW_UP,
ARROW_DOWN,
ARROW_RIGHT,
ARROW_LEFT,
gMoveHighlight
);
PrintStringAtWithWidth (SecCol, BottomRowOfHelp, gEnterString, ColumnWidth2);
PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, gAdjustNumber, ColumnWidth1);
} else {
PrintAt (ColumnWidth1, StartColumnOfHelp, BottomRowOfHelp, L"%c%c%s", ARROW_UP, ARROW_DOWN, gMoveHighlight);
if (Statement->OpCode->OpCode == EFI_IFR_NUMERIC_OP && NumericOp != NULL && LibGetFieldFromNum(Statement->OpCode) != 0) {
ColumnStr1 = gAdjustNumber;
if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) {
ColumnStr3 = gEscapeString;
}
PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, ColumnStr1, ColumnWidth1);
PrintStringAtWithWidth (SecCol, BottomRowOfHelp, gEnterString, ColumnWidth2);
}
} else {
PrintHotKeyHelpString (FormData, FALSE);
PrintStringAtWithWidth (SecCol, BottomRowOfHelp, gEnterCommitString, ColumnWidth2);
//
// If it is a selected numeric with manual input, display different message
//
if ((Statement->OpCode->OpCode == EFI_IFR_NUMERIC_OP) ||
(Statement->OpCode->OpCode == EFI_IFR_DATE_OP) ||
(Statement->OpCode->OpCode == EFI_IFR_TIME_OP)) {
ColumnStr2 = HexDisplay ? gHexNumericInput : gDecNumericInput;
PrintStringAtWithWidth (StartColumnOfHelp, BottomRowOfHelp, gLibEmptyString, ColumnWidth1);
PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, ColumnStr3, ColumnWidth3);
if ((Statement->OpCode->OpCode == EFI_IFR_DATE_OP) ||
(Statement->OpCode->OpCode == EFI_IFR_TIME_OP))
{
PrintAt (
ColumnWidth1,
StartColumnOfHelp,
BottomRowOfHelp,
L"%c%c%c%c%s",
ARROW_UP,
ARROW_DOWN,
ARROW_RIGHT,
ARROW_LEFT,
gMoveHighlight
);
PrintStringAtWithWidth (SecCol, BottomRowOfHelp, gEnterString, ColumnWidth2);
PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, gAdjustNumber, ColumnWidth1);
} else {
PrintAt (ColumnWidth1, StartColumnOfHelp, BottomRowOfHelp, L"%c%c%s", ARROW_UP, ARROW_DOWN, gMoveHighlight);
if ((Statement->OpCode->OpCode == EFI_IFR_NUMERIC_OP) && (NumericOp != NULL) && (LibGetFieldFromNum (Statement->OpCode) != 0)) {
ColumnStr1 = gAdjustNumber;
}
PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, ColumnStr1, ColumnWidth1);
PrintStringAtWithWidth (SecCol, BottomRowOfHelp, gEnterString, ColumnWidth2);
}
} else {
PrintAt (ColumnWidth1, StartColumnOfHelp, BottomRowOfHelp, L"%c%c%s", ARROW_UP, ARROW_DOWN, gMoveHighlight);
PrintHotKeyHelpString (FormData, FALSE);
PrintStringAtWithWidth (SecCol, BottomRowOfHelp, gEnterCommitString, ColumnWidth2);
//
// If it is a selected numeric with manual input, display different message
//
if ((Statement->OpCode->OpCode == EFI_IFR_NUMERIC_OP) ||
(Statement->OpCode->OpCode == EFI_IFR_DATE_OP) ||
(Statement->OpCode->OpCode == EFI_IFR_TIME_OP))
{
ColumnStr2 = HexDisplay ? gHexNumericInput : gDecNumericInput;
PrintStringAtWithWidth (StartColumnOfHelp, BottomRowOfHelp, gLibEmptyString, ColumnWidth1);
} else {
PrintAt (ColumnWidth1, StartColumnOfHelp, BottomRowOfHelp, L"%c%c%s", ARROW_UP, ARROW_DOWN, gMoveHighlight);
}
if (Statement->OpCode->OpCode == EFI_IFR_ORDERED_LIST_OP) {
ColumnStr1 = gPlusString;
ColumnStr3 = gMinusString;
}
PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, ColumnStr1, ColumnWidth1);
PrintStringAtWithWidth (ThdCol, TopRowOfHelp, ColumnStr3, ColumnWidth3);
PrintStringAtWithWidth (SecCol, TopRowOfHelp, ColumnStr2, ColumnWidth2);
PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, gEnterEscapeString, ColumnWidth3);
}
if (Statement->OpCode->OpCode == EFI_IFR_ORDERED_LIST_OP) {
ColumnStr1 = gPlusString;
ColumnStr3 = gMinusString;
}
PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, ColumnStr1, ColumnWidth1);
PrintStringAtWithWidth (ThdCol, TopRowOfHelp, ColumnStr3, ColumnWidth3);
PrintStringAtWithWidth (SecCol, TopRowOfHelp, ColumnStr2, ColumnWidth2);
break;
PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, gEnterEscapeString, ColumnWidth3);
}
break;
case EFI_IFR_CHECKBOX_OP:
PrintHotKeyHelpString (FormData, TRUE);
if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) {
ColumnStr3 = gEscapeString;
}
PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, ColumnStr3, ColumnWidth3);
PrintAt (ColumnWidth1, StartColumnOfHelp, BottomRowOfHelp, L"%c%c%s", ARROW_UP, ARROW_DOWN, gMoveHighlight);
PrintStringAtWithWidth (SecCol, BottomRowOfHelp, gToggleCheckBox, ColumnWidth2);
PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, gLibEmptyString, ColumnWidth1);
break;
case EFI_IFR_REF_OP:
case EFI_IFR_PASSWORD_OP:
case EFI_IFR_STRING_OP:
case EFI_IFR_TEXT_OP:
case EFI_IFR_ACTION_OP:
case EFI_IFR_RESET_BUTTON_OP:
case EFI_IFR_SUBTITLE_OP:
if (!Selected) {
case EFI_IFR_CHECKBOX_OP:
PrintHotKeyHelpString (FormData, TRUE);
if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) {
ColumnStr3 = gEscapeString;
}
PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, ColumnStr3, ColumnWidth3);
PrintAt (ColumnWidth1, StartColumnOfHelp, BottomRowOfHelp, L"%c%c%s", ARROW_UP, ARROW_DOWN, gMoveHighlight);
if (Statement->OpCode->OpCode != EFI_IFR_TEXT_OP && Statement->OpCode->OpCode != EFI_IFR_SUBTITLE_OP) {
ColumnStr2 = gEnterString;
}
PrintStringAtWithWidth (SecCol, BottomRowOfHelp, ColumnStr2, ColumnWidth2);
PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, ColumnStr1, ColumnWidth1);
} else {
PrintHotKeyHelpString (FormData, FALSE);
if (Statement->OpCode->OpCode != EFI_IFR_REF_OP) {
ColumnStr2 = gEnterCommitString;
ColumnStr3 = gEnterEscapeString;
}
PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, ColumnStr1, ColumnWidth1);
PrintStringAtWithWidth (StartColumnOfHelp, BottomRowOfHelp, ColumnStr1, ColumnWidth1);
PrintStringAtWithWidth (SecCol, BottomRowOfHelp, ColumnStr2, ColumnWidth2);
PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, ColumnStr3, ColumnWidth3);
}
break;
PrintStringAtWithWidth (SecCol, BottomRowOfHelp, gToggleCheckBox, ColumnWidth2);
PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, gLibEmptyString, ColumnWidth1);
break;
default:
break;
case EFI_IFR_REF_OP:
case EFI_IFR_PASSWORD_OP:
case EFI_IFR_STRING_OP:
case EFI_IFR_TEXT_OP:
case EFI_IFR_ACTION_OP:
case EFI_IFR_RESET_BUTTON_OP:
case EFI_IFR_SUBTITLE_OP:
if (!Selected) {
PrintHotKeyHelpString (FormData, TRUE);
if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) {
ColumnStr3 = gEscapeString;
}
PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, ColumnStr3, ColumnWidth3);
PrintAt (ColumnWidth1, StartColumnOfHelp, BottomRowOfHelp, L"%c%c%s", ARROW_UP, ARROW_DOWN, gMoveHighlight);
if ((Statement->OpCode->OpCode != EFI_IFR_TEXT_OP) && (Statement->OpCode->OpCode != EFI_IFR_SUBTITLE_OP)) {
ColumnStr2 = gEnterString;
}
PrintStringAtWithWidth (SecCol, BottomRowOfHelp, ColumnStr2, ColumnWidth2);
PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, ColumnStr1, ColumnWidth1);
} else {
PrintHotKeyHelpString (FormData, FALSE);
if (Statement->OpCode->OpCode != EFI_IFR_REF_OP) {
ColumnStr2 = gEnterCommitString;
ColumnStr3 = gEnterEscapeString;
}
PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, ColumnStr1, ColumnWidth1);
PrintStringAtWithWidth (StartColumnOfHelp, BottomRowOfHelp, ColumnStr1, ColumnWidth1);
PrintStringAtWithWidth (SecCol, BottomRowOfHelp, ColumnStr2, ColumnWidth2);
PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, ColumnStr3, ColumnWidth3);
}
break;
default:
break;
}
}
@@ -338,57 +354,59 @@ RefreshKeyHelp (
VOID
EFIAPI
UpdateStatusBar (
IN UINTN MessageType,
IN BOOLEAN State
IN UINTN MessageType,
IN BOOLEAN State
)
{
UINTN Index;
CHAR16 OptionWidth;
UINTN Index;
CHAR16 OptionWidth;
OptionWidth = (CHAR16) ((gScreenDimensions.RightColumn - gScreenDimensions.LeftColumn) / 3);
OptionWidth = (CHAR16)((gScreenDimensions.RightColumn - gScreenDimensions.LeftColumn) / 3);
switch (MessageType) {
case INPUT_ERROR:
if (State) {
gST->ConOut->SetAttribute (gST->ConOut, ERROR_TEXT);
PrintStringAt (
gScreenDimensions.LeftColumn + OptionWidth,
gScreenDimensions.BottomRow - 1,
gInputErrorMessage
);
} else {
gST->ConOut->SetAttribute (gST->ConOut, KEYHELP_BACKGROUND);
for (Index = 0; Index < (LibGetStringWidth (gInputErrorMessage) - 2) / 2; Index++) {
PrintStringAt (gScreenDimensions.LeftColumn + OptionWidth + Index, gScreenDimensions.BottomRow - 1, L" ");
}
}
break;
case NV_UPDATE_REQUIRED:
//
// Global setting support. Show configuration change on every form.
//
if (State) {
gST->ConOut->SetAttribute (gST->ConOut, INFO_TEXT);
PrintStringAt (
gScreenDimensions.LeftColumn + OptionWidth * 2,
gScreenDimensions.BottomRow - 1,
gNvUpdateMessage
);
} else {
gST->ConOut->SetAttribute (gST->ConOut, KEYHELP_BACKGROUND);
for (Index = 0; Index < (LibGetStringWidth (gNvUpdateMessage) - 2) / 2; Index++) {
case INPUT_ERROR:
if (State) {
gST->ConOut->SetAttribute (gST->ConOut, ERROR_TEXT);
PrintStringAt (
(gScreenDimensions.LeftColumn + OptionWidth * 2 + Index),
gScreenDimensions.LeftColumn + OptionWidth,
gScreenDimensions.BottomRow - 1,
L" "
gInputErrorMessage
);
} else {
gST->ConOut->SetAttribute (gST->ConOut, KEYHELP_BACKGROUND);
for (Index = 0; Index < (LibGetStringWidth (gInputErrorMessage) - 2) / 2; Index++) {
PrintStringAt (gScreenDimensions.LeftColumn + OptionWidth + Index, gScreenDimensions.BottomRow - 1, L" ");
}
}
}
break;
default:
break;
break;
case NV_UPDATE_REQUIRED:
//
// Global setting support. Show configuration change on every form.
//
if (State) {
gST->ConOut->SetAttribute (gST->ConOut, INFO_TEXT);
PrintStringAt (
gScreenDimensions.LeftColumn + OptionWidth * 2,
gScreenDimensions.BottomRow - 1,
gNvUpdateMessage
);
} else {
gST->ConOut->SetAttribute (gST->ConOut, KEYHELP_BACKGROUND);
for (Index = 0; Index < (LibGetStringWidth (gNvUpdateMessage) - 2) / 2; Index++) {
PrintStringAt (
(gScreenDimensions.LeftColumn + OptionWidth * 2 + Index),
gScreenDimensions.BottomRow - 1,
L" "
);
}
}
break;
default:
break;
}
}
@@ -408,28 +426,28 @@ CreateDialog (
...
)
{
VA_LIST Marker;
EFI_INPUT_KEY KeyValue;
EFI_STATUS Status;
UINTN LargestString;
UINTN LineNum;
UINTN Index;
UINTN Count;
CHAR16 Character;
UINTN Start;
UINTN End;
UINTN Top;
UINTN Bottom;
CHAR16 *String;
UINTN DimensionsWidth;
UINTN DimensionsHeight;
UINTN CurrentAttribute;
BOOLEAN CursorVisible;
VA_LIST Marker;
EFI_INPUT_KEY KeyValue;
EFI_STATUS Status;
UINTN LargestString;
UINTN LineNum;
UINTN Index;
UINTN Count;
CHAR16 Character;
UINTN Start;
UINTN End;
UINTN Top;
UINTN Bottom;
CHAR16 *String;
UINTN DimensionsWidth;
UINTN DimensionsHeight;
UINTN CurrentAttribute;
BOOLEAN CursorVisible;
//
// If screen dimension info is not ready, get it from console.
//
if (gScreenDimensions.RightColumn == 0 || gScreenDimensions.BottomRow == 0) {
if ((gScreenDimensions.RightColumn == 0) || (gScreenDimensions.BottomRow == 0)) {
ZeroMem (&gScreenDimensions, sizeof (EFI_SCREEN_DESCRIPTOR));
gST->ConOut->QueryMode (
gST->ConOut,
@@ -439,27 +457,28 @@ CreateDialog (
);
}
DimensionsWidth = gScreenDimensions.RightColumn - gScreenDimensions.LeftColumn;
DimensionsHeight = gScreenDimensions.BottomRow - gScreenDimensions.TopRow;
DimensionsWidth = gScreenDimensions.RightColumn - gScreenDimensions.LeftColumn;
DimensionsHeight = gScreenDimensions.BottomRow - gScreenDimensions.TopRow;
LargestString = 0;
LineNum = 0;
VA_START (Marker, Key);
while ((String = VA_ARG (Marker, CHAR16 *)) != NULL) {
LineNum ++;
while ((String = VA_ARG (Marker, CHAR16 *)) != NULL) {
LineNum++;
if ((LibGetStringWidth (String) / 2) > LargestString) {
LargestString = (LibGetStringWidth (String) / 2);
}
}
VA_END (Marker);
if ((LargestString + 2) > DimensionsWidth) {
LargestString = DimensionsWidth - 2;
}
CurrentAttribute = gST->ConOut->Mode->Attribute;
CursorVisible = gST->ConOut->Mode->CursorVisible;
CurrentAttribute = gST->ConOut->Mode->Attribute;
CursorVisible = gST->ConOut->Mode->CursorVisible;
gST->ConOut->EnableCursor (gST->ConOut, FALSE);
gST->ConOut->SetAttribute (gST->ConOut, GetPopupColor ());
@@ -467,11 +486,11 @@ CreateDialog (
// Subtract the PopUp width from total Columns, allow for one space extra on
// each end plus a border.
//
Start = (DimensionsWidth - LargestString - 2) / 2 + gScreenDimensions.LeftColumn + 1;
End = Start + LargestString + 1;
Start = (DimensionsWidth - LargestString - 2) / 2 + gScreenDimensions.LeftColumn + 1;
End = Start + LargestString + 1;
Top = ((DimensionsHeight - LineNum - 2) / 2) + gScreenDimensions.TopRow - 1;
Bottom = Top + LineNum + 2;
Top = ((DimensionsHeight - LineNum - 2) / 2) + gScreenDimensions.TopRow - 1;
Bottom = Top + LineNum + 2;
Character = BOXDRAW_DOWN_RIGHT;
PrintCharAt (Start, Top, Character);
@@ -487,7 +506,7 @@ CreateDialog (
Count = 0;
VA_START (Marker, Key);
for (Index = Top; Index + 2 < Bottom; Index++, Count++) {
String = VA_ARG (Marker, CHAR16*);
String = VA_ARG (Marker, CHAR16 *);
if (String[0] == CHAR_NULL) {
//
@@ -522,17 +541,18 @@ CreateDialog (
PrintCharAt (Start, Index + 1, Character);
PrintCharAt (End - 1, Index + 1, Character);
}
VA_END (Marker);
Character = BOXDRAW_UP_RIGHT;
PrintCharAt (Start, Bottom - 1, Character);
Character = BOXDRAW_HORIZONTAL;
for (Index = Start; Index + 2 < End; Index++) {
PrintCharAt ((UINTN)-1, (UINTN) -1, Character);
PrintCharAt ((UINTN)-1, (UINTN)-1, Character);
}
Character = BOXDRAW_UP_LEFT;
PrintCharAt ((UINTN)-1, (UINTN) -1, Character);
PrintCharAt ((UINTN)-1, (UINTN)-1, Character);
if (Key != NULL) {
Status = WaitForKeyStroke (&KeyValue);
@@ -555,9 +575,9 @@ ConfirmDataChange (
VOID
)
{
CHAR16 YesResponse;
CHAR16 NoResponse;
EFI_INPUT_KEY Key;
CHAR16 YesResponse;
CHAR16 NoResponse;
EFI_INPUT_KEY Key;
gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);
@@ -571,9 +591,9 @@ ConfirmDataChange (
CreateDialog (&Key, gLibEmptyString, gSaveChanges, gAreYouSure, gLibEmptyString, NULL);
} while
(
(Key.ScanCode != SCAN_ESC) &&
((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (NoResponse | UPPER_LOWER_CASE_OFFSET)) &&
((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (YesResponse | UPPER_LOWER_CASE_OFFSET))
(Key.ScanCode != SCAN_ESC) &&
((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (NoResponse | UPPER_LOWER_CASE_OFFSET)) &&
((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (YesResponse | UPPER_LOWER_CASE_OFFSET))
);
if (Key.ScanCode == SCAN_ESC) {
@@ -617,14 +637,16 @@ FormExitPolicy (
UINT64
EFIAPI
FormExitTimeout (
IN FORM_DISPLAY_ENGINE_FORM *FormData
IN FORM_DISPLAY_ENGINE_FORM *FormData
)
{
return 0;
}
//
// Print Functions
//
/**
Prints a unicode string to the default console, at
the supplied cursor position, using L"%s" format.
@@ -639,9 +661,9 @@ FormExitTimeout (
UINTN
EFIAPI
PrintStringAt (
IN UINTN Column,
IN UINTN Row,
IN CHAR16 *String
IN UINTN Column,
IN UINTN Row,
IN CHAR16 *String
)
{
return PrintAt (0, Column, Row, L"%s", String);
@@ -662,10 +684,10 @@ PrintStringAt (
UINTN
EFIAPI
PrintStringAtWithWidth (
IN UINTN Column,
IN UINTN Row,
IN CHAR16 *String,
IN UINTN Width
IN UINTN Column,
IN UINTN Row,
IN CHAR16 *String,
IN UINTN Width
)
{
return PrintAt (Width, Column, Row, L"%s", String);
@@ -685,9 +707,9 @@ PrintStringAtWithWidth (
UINTN
EFIAPI
PrintCharAt (
IN UINTN Column,
IN UINTN Row,
CHAR16 Character
IN UINTN Column,
IN UINTN Row,
CHAR16 Character
)
{
return PrintAt (0, Column, Row, L"%c", Character);
@@ -706,11 +728,11 @@ PrintCharAt (
VOID
EFIAPI
ClearLines (
IN UINTN LeftColumn,
IN UINTN RightColumn,
IN UINTN TopRow,
IN UINTN BottomRow,
IN UINTN TextAttribute
IN UINTN LeftColumn,
IN UINTN RightColumn,
IN UINTN TopRow,
IN UINTN BottomRow,
IN UINTN TextAttribute
)
{
CHAR16 *Buffer;
@@ -914,14 +936,14 @@ ClearDisplayPage (
EFI_STATUS
EFIAPI
CustomizedDisplayLibConstructor (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
mCDLStringPackHandle = HiiAddPackages (&gCustomizedDisplayLibGuid, ImageHandle, CustomizedDisplayLibStrings, NULL);
ASSERT (mCDLStringPackHandle != NULL);
InitializeLibStrings();
InitializeLibStrings ();
return EFI_SUCCESS;
}
@@ -943,7 +965,7 @@ CustomizedDisplayLibDestructor (
IN EFI_SYSTEM_TABLE *SystemTable
)
{
HiiRemovePackages(mCDLStringPackHandle);
HiiRemovePackages (mCDLStringPackHandle);
FreeLibStrings ();

View File

@@ -8,33 +8,33 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include "CustomizedDisplayLibInternal.h"
EFI_SCREEN_DESCRIPTOR gScreenDimensions;
CHAR16 *mLibUnknownString;
extern EFI_HII_HANDLE mCDLStringPackHandle;
CHAR16 *mSpaceBuffer;
#define SPACE_BUFFER_SIZE 1000
EFI_SCREEN_DESCRIPTOR gScreenDimensions;
CHAR16 *mLibUnknownString;
extern EFI_HII_HANDLE mCDLStringPackHandle;
CHAR16 *mSpaceBuffer;
#define SPACE_BUFFER_SIZE 1000
//
// Browser Global Strings
//
CHAR16 *gEnterString;
CHAR16 *gEnterCommitString;
CHAR16 *gEnterEscapeString;
CHAR16 *gEscapeString;
CHAR16 *gMoveHighlight;
CHAR16 *gDecNumericInput;
CHAR16 *gHexNumericInput;
CHAR16 *gToggleCheckBox;
CHAR16 *gLibEmptyString;
CHAR16 *gAreYouSure;
CHAR16 *gYesResponse;
CHAR16 *gNoResponse;
CHAR16 *gPlusString;
CHAR16 *gMinusString;
CHAR16 *gAdjustNumber;
CHAR16 *gSaveChanges;
CHAR16 *gNvUpdateMessage;
CHAR16 *gInputErrorMessage;
CHAR16 *gEnterString;
CHAR16 *gEnterCommitString;
CHAR16 *gEnterEscapeString;
CHAR16 *gEscapeString;
CHAR16 *gMoveHighlight;
CHAR16 *gDecNumericInput;
CHAR16 *gHexNumericInput;
CHAR16 *gToggleCheckBox;
CHAR16 *gLibEmptyString;
CHAR16 *gAreYouSure;
CHAR16 *gYesResponse;
CHAR16 *gNoResponse;
CHAR16 *gPlusString;
CHAR16 *gMinusString;
CHAR16 *gAdjustNumber;
CHAR16 *gSaveChanges;
CHAR16 *gNvUpdateMessage;
CHAR16 *gInputErrorMessage;
/**
@@ -45,14 +45,14 @@ CHAR16 *gInputErrorMessage;
**/
VOID
PrintBannerInfo (
IN FORM_DISPLAY_ENGINE_FORM *FormData
IN FORM_DISPLAY_ENGINE_FORM *FormData
)
{
UINT8 Line;
UINT8 Alignment;
CHAR16 *StrFrontPageBanner;
UINT8 RowIdx;
UINT8 ColumnIdx;
UINT8 Line;
UINT8 Alignment;
CHAR16 *StrFrontPageBanner;
UINT8 RowIdx;
UINT8 ColumnIdx;
//
// ClearLines(0, LocalScreen.RightColumn, 0, BANNER_HEIGHT-1, BANNER_TEXT | BANNER_BACKGROUND);
@@ -68,54 +68,55 @@ PrintBannerInfo (
//
// for (Line = 0; Line < BANNER_HEIGHT; Line++) {
//
for (Line = (UINT8) gScreenDimensions.TopRow; Line < BANNER_HEIGHT + (UINT8) gScreenDimensions.TopRow; Line++) {
for (Line = (UINT8)gScreenDimensions.TopRow; Line < BANNER_HEIGHT + (UINT8)gScreenDimensions.TopRow; Line++) {
//
// for (Alignment = 0; Alignment < BANNER_COLUMNS; Alignment++) {
//
for (Alignment = (UINT8) gScreenDimensions.LeftColumn;
Alignment < BANNER_COLUMNS + (UINT8) gScreenDimensions.LeftColumn;
for (Alignment = (UINT8)gScreenDimensions.LeftColumn;
Alignment < BANNER_COLUMNS + (UINT8)gScreenDimensions.LeftColumn;
Alignment++
) {
RowIdx = (UINT8) (Line - (UINT8) gScreenDimensions.TopRow);
ColumnIdx = (UINT8) (Alignment - (UINT8) gScreenDimensions.LeftColumn);
)
{
RowIdx = (UINT8)(Line - (UINT8)gScreenDimensions.TopRow);
ColumnIdx = (UINT8)(Alignment - (UINT8)gScreenDimensions.LeftColumn);
ASSERT (RowIdx < BANNER_HEIGHT && ColumnIdx < BANNER_COLUMNS);
if (gBannerData!= NULL && gBannerData->Banner[RowIdx][ColumnIdx] != 0x0000) {
if ((gBannerData != NULL) && (gBannerData->Banner[RowIdx][ColumnIdx] != 0x0000)) {
StrFrontPageBanner = LibGetToken (gBannerData->Banner[RowIdx][ColumnIdx], FormData->HiiHandle);
} else {
continue;
}
switch (Alignment - gScreenDimensions.LeftColumn) {
case 0:
//
// Handle left column
//
PrintStringAt (gScreenDimensions.LeftColumn + BANNER_LEFT_COLUMN_INDENT, Line, StrFrontPageBanner);
break;
case 0:
//
// Handle left column
//
PrintStringAt (gScreenDimensions.LeftColumn + BANNER_LEFT_COLUMN_INDENT, Line, StrFrontPageBanner);
break;
case 1:
//
// Handle center column
//
PrintStringAt (
gScreenDimensions.LeftColumn + (gScreenDimensions.RightColumn - gScreenDimensions.LeftColumn) / 3,
Line,
StrFrontPageBanner
);
break;
case 1:
//
// Handle center column
//
PrintStringAt (
gScreenDimensions.LeftColumn + (gScreenDimensions.RightColumn - gScreenDimensions.LeftColumn) / 3,
Line,
StrFrontPageBanner
);
break;
case 2:
//
// Handle right column
//
PrintStringAt (
gScreenDimensions.LeftColumn + (gScreenDimensions.RightColumn - gScreenDimensions.LeftColumn) * 2 / 3,
Line,
StrFrontPageBanner
);
break;
case 2:
//
// Handle right column
//
PrintStringAt (
gScreenDimensions.LeftColumn + (gScreenDimensions.RightColumn - gScreenDimensions.LeftColumn) * 2 / 3,
Line,
StrFrontPageBanner
);
break;
}
FreePool (StrFrontPageBanner);
@@ -130,15 +131,15 @@ PrintBannerInfo (
**/
VOID
PrintFramework (
IN FORM_DISPLAY_ENGINE_FORM *FormData
IN FORM_DISPLAY_ENGINE_FORM *FormData
)
{
UINTN Index;
CHAR16 Character;
CHAR16 *Buffer;
UINTN Row;
CHAR16 *TitleStr;
UINTN TitleColumn;
UINTN Index;
CHAR16 Character;
CHAR16 *Buffer;
UINTN Row;
CHAR16 *TitleStr;
UINTN TitleColumn;
if (gClassOfVfr != FORMSET_CLASS_PLATFORM_SETUP) {
//
@@ -171,10 +172,10 @@ PrintFramework (
Character = BOXDRAW_DOWN_RIGHT;
PrintCharAt (gScreenDimensions.LeftColumn, gScreenDimensions.TopRow, Character);
PrintStringAt ((UINTN) -1, (UINTN) -1, Buffer);
PrintStringAt ((UINTN)-1, (UINTN)-1, Buffer);
Character = BOXDRAW_DOWN_LEFT;
PrintCharAt ((UINTN) -1, (UINTN) -1, Character);
PrintCharAt ((UINTN)-1, (UINTN)-1, Character);
Character = BOXDRAW_VERTICAL;
for (Row = gScreenDimensions.TopRow + 1; Row <= gScreenDimensions.TopRow + NONE_FRONT_PAGE_HEADER_HEIGHT - 2; Row++) {
@@ -199,10 +200,10 @@ PrintFramework (
Character = BOXDRAW_UP_RIGHT;
PrintCharAt (gScreenDimensions.LeftColumn, gScreenDimensions.TopRow + NONE_FRONT_PAGE_HEADER_HEIGHT - 1, Character);
PrintStringAt ((UINTN) -1, (UINTN) -1, Buffer);
PrintStringAt ((UINTN)-1, (UINTN)-1, Buffer);
Character = BOXDRAW_UP_LEFT;
PrintCharAt ((UINTN) -1, (UINTN) -1, Character);
PrintCharAt ((UINTN)-1, (UINTN)-1, Character);
//
// Print Bottom border line
@@ -213,15 +214,16 @@ PrintFramework (
Character = BOXDRAW_DOWN_RIGHT;
PrintCharAt (gScreenDimensions.LeftColumn, gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - gFooterHeight, Character);
PrintStringAt ((UINTN) -1, (UINTN) -1, Buffer);
PrintStringAt ((UINTN)-1, (UINTN)-1, Buffer);
Character = BOXDRAW_DOWN_LEFT;
PrintCharAt ((UINTN) -1, (UINTN) -1, Character);
PrintCharAt ((UINTN)-1, (UINTN)-1, Character);
Character = BOXDRAW_VERTICAL;
for (Row = gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - gFooterHeight + 1;
Row <= gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - 2;
Row++
) {
)
{
PrintCharAt (gScreenDimensions.LeftColumn, Row, Character);
PrintCharAt (gScreenDimensions.RightColumn - 1, Row, Character);
}
@@ -229,10 +231,10 @@ PrintFramework (
Character = BOXDRAW_UP_RIGHT;
PrintCharAt (gScreenDimensions.LeftColumn, gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - 1, Character);
PrintStringAt ((UINTN) -1, (UINTN) -1, Buffer);
PrintStringAt ((UINTN)-1, (UINTN)-1, Buffer);
Character = BOXDRAW_UP_LEFT;
PrintCharAt ((UINTN) -1, (UINTN) -1, Character);
PrintCharAt ((UINTN)-1, (UINTN)-1, Character);
FreePool (Buffer);
}
@@ -246,12 +248,12 @@ PrintFramework (
**/
VOID
ProcessUserOpcode(
IN EFI_IFR_OP_HEADER *OpCodeData
ProcessUserOpcode (
IN EFI_IFR_OP_HEADER *OpCodeData
)
{
EFI_GUID * ClassGuid;
UINT8 ClassGuidNum;
EFI_GUID *ClassGuid;
UINT8 ClassGuidNum;
ClassGuid = NULL;
ClassGuidNum = 0;
@@ -261,65 +263,70 @@ ProcessUserOpcode(
//
// process the statement outside of form,if it is formset op, get its formsetguid or classguid and compared with gFrontPageFormSetGuid
//
if (CompareMem (PcdGetPtr (PcdFrontPageFormSetGuid), &((EFI_IFR_FORM_SET *) OpCodeData)->Guid, sizeof (EFI_GUID)) == 0){
if (CompareMem (PcdGetPtr (PcdFrontPageFormSetGuid), &((EFI_IFR_FORM_SET *)OpCodeData)->Guid, sizeof (EFI_GUID)) == 0) {
gClassOfVfr = FORMSET_CLASS_FRONT_PAGE;
} else{
} else {
ClassGuidNum = (UINT8)(((EFI_IFR_FORM_SET *)OpCodeData)->Flags & 0x3);
ClassGuid = (EFI_GUID *)(VOID *)((UINT8 *)OpCodeData + sizeof (EFI_IFR_FORM_SET));
while (ClassGuidNum-- > 0){
if (CompareGuid((EFI_GUID*)PcdGetPtr (PcdFrontPageFormSetGuid),ClassGuid)){
while (ClassGuidNum-- > 0) {
if (CompareGuid ((EFI_GUID *)PcdGetPtr (PcdFrontPageFormSetGuid), ClassGuid)) {
gClassOfVfr = FORMSET_CLASS_FRONT_PAGE;
break;
}
ClassGuid ++;
ClassGuid++;
}
}
break;
case EFI_IFR_GUID_OP:
if (CompareGuid (&gEfiIfrTianoGuid, (EFI_GUID *)((CHAR8*) OpCodeData + sizeof (EFI_IFR_OP_HEADER)))) {
if (CompareGuid (&gEfiIfrTianoGuid, (EFI_GUID *)((CHAR8 *)OpCodeData + sizeof (EFI_IFR_OP_HEADER)))) {
//
// Tiano specific GUIDed opcodes
//
switch (((EFI_IFR_GUID_LABEL *) OpCodeData)->ExtendOpCode) {
case EFI_IFR_EXTEND_OP_LABEL:
//
// just ignore label
//
break;
switch (((EFI_IFR_GUID_LABEL *)OpCodeData)->ExtendOpCode) {
case EFI_IFR_EXTEND_OP_LABEL:
//
// just ignore label
//
break;
case EFI_IFR_EXTEND_OP_BANNER:
//
// Only in front page form set, we care about the banner data.
//
if (gClassOfVfr == FORMSET_CLASS_FRONT_PAGE) {
case EFI_IFR_EXTEND_OP_BANNER:
//
// Initialize Driver private data
// Only in front page form set, we care about the banner data.
//
if (gBannerData == NULL) {
gBannerData = AllocateZeroPool (sizeof (BANNER_DATA));
ASSERT (gBannerData != NULL);
if (gClassOfVfr == FORMSET_CLASS_FRONT_PAGE) {
//
// Initialize Driver private data
//
if (gBannerData == NULL) {
gBannerData = AllocateZeroPool (sizeof (BANNER_DATA));
ASSERT (gBannerData != NULL);
}
CopyMem (
&gBannerData->Banner[((EFI_IFR_GUID_BANNER *)OpCodeData)->LineNumber][
((EFI_IFR_GUID_BANNER *)OpCodeData)->Alignment],
&((EFI_IFR_GUID_BANNER *)OpCodeData)->Title,
sizeof (EFI_STRING_ID)
);
}
CopyMem (
&gBannerData->Banner[((EFI_IFR_GUID_BANNER *) OpCodeData)->LineNumber][
((EFI_IFR_GUID_BANNER *) OpCodeData)->Alignment],
&((EFI_IFR_GUID_BANNER *) OpCodeData)->Title,
sizeof (EFI_STRING_ID)
);
}
break;
break;
case EFI_IFR_EXTEND_OP_SUBCLASS:
if (((EFI_IFR_GUID_SUBCLASS *) OpCodeData)->SubClass == EFI_FRONT_PAGE_SUBCLASS) {
gClassOfVfr = FORMSET_CLASS_FRONT_PAGE;
}
break;
case EFI_IFR_EXTEND_OP_SUBCLASS:
if (((EFI_IFR_GUID_SUBCLASS *)OpCodeData)->SubClass == EFI_FRONT_PAGE_SUBCLASS) {
gClassOfVfr = FORMSET_CLASS_FRONT_PAGE;
}
default:
break;
break;
default:
break;
}
}
break;
default:
@@ -337,37 +344,36 @@ ProcessUserOpcode(
**/
VOID
ProcessExternedOpcode (
IN FORM_DISPLAY_ENGINE_FORM *FormData
IN FORM_DISPLAY_ENGINE_FORM *FormData
)
{
LIST_ENTRY *Link;
LIST_ENTRY *NestLink;
FORM_DISPLAY_ENGINE_STATEMENT *Statement;
FORM_DISPLAY_ENGINE_STATEMENT *NestStatement;
LIST_ENTRY *Link;
LIST_ENTRY *NestLink;
FORM_DISPLAY_ENGINE_STATEMENT *Statement;
FORM_DISPLAY_ENGINE_STATEMENT *NestStatement;
Link = GetFirstNode (&FormData->StatementListOSF);
while (!IsNull (&FormData->StatementListOSF, Link)) {
Statement = FORM_DISPLAY_ENGINE_STATEMENT_FROM_LINK (Link);
Link = GetNextNode (&FormData->StatementListOSF, Link);
Link = GetNextNode (&FormData->StatementListOSF, Link);
ProcessUserOpcode(Statement->OpCode);
ProcessUserOpcode (Statement->OpCode);
}
Link = GetFirstNode (&FormData->StatementListHead);
while (!IsNull (&FormData->StatementListHead, Link)) {
Statement = FORM_DISPLAY_ENGINE_STATEMENT_FROM_LINK (Link);
Link = GetNextNode (&FormData->StatementListHead, Link);
Link = GetNextNode (&FormData->StatementListHead, Link);
ProcessUserOpcode(Statement->OpCode);
ProcessUserOpcode (Statement->OpCode);
NestLink = GetFirstNode (&Statement->NestStatementList);
while (!IsNull (&Statement->NestStatementList, NestLink)) {
NestStatement = FORM_DISPLAY_ENGINE_STATEMENT_FROM_LINK (NestLink);
NestLink = GetNextNode (&Statement->NestStatementList, NestLink);
NestLink = GetNextNode (&Statement->NestStatementList, NestLink);
ProcessUserOpcode(NestStatement->OpCode);
ProcessUserOpcode (NestStatement->OpCode);
}
}
}
@@ -382,21 +388,21 @@ ProcessExternedOpcode (
**/
EFI_STATUS
ScreenDiemensionInfoValidate (
IN FORM_DISPLAY_ENGINE_FORM *FormData
IN FORM_DISPLAY_ENGINE_FORM *FormData
)
{
LIST_ENTRY *Link;
UINTN Index;
LIST_ENTRY *Link;
UINTN Index;
//
// Calculate total number of Register HotKeys.
//
Index = 0;
if (!IsListEmpty (&FormData->HotKeyListHead)){
Link = GetFirstNode (&FormData->HotKeyListHead);
if (!IsListEmpty (&FormData->HotKeyListHead)) {
Link = GetFirstNode (&FormData->HotKeyListHead);
while (!IsNull (&FormData->HotKeyListHead, Link)) {
Link = GetNextNode (&FormData->HotKeyListHead, Link);
Index ++;
Index++;
}
}
@@ -405,7 +411,6 @@ ScreenDiemensionInfoValidate (
//
gFooterHeight = FOOTER_HEIGHT + (Index / 3);
ZeroMem (&gScreenDimensions, sizeof (EFI_SCREEN_DESCRIPTOR));
gST->ConOut->QueryMode (
gST->ConOut,
@@ -420,7 +425,8 @@ ScreenDiemensionInfoValidate (
if (FormData->ScreenDimensions != NULL) {
if ((gScreenDimensions.RightColumn < FormData->ScreenDimensions->RightColumn) ||
(gScreenDimensions.BottomRow < FormData->ScreenDimensions->BottomRow)
) {
)
{
return EFI_INVALID_PARAMETER;
} else {
//
@@ -430,8 +436,9 @@ ScreenDiemensionInfoValidate (
(FormData->ScreenDimensions->BottomRow > FormData->ScreenDimensions->TopRow) &&
((FormData->ScreenDimensions->RightColumn - FormData->ScreenDimensions->LeftColumn) > 2) &&
((FormData->ScreenDimensions->BottomRow - FormData->ScreenDimensions->TopRow) > STATUS_BAR_HEIGHT +
FRONT_PAGE_HEADER_HEIGHT + gFooterHeight + 3)) {
CopyMem (&gScreenDimensions, (VOID *) FormData->ScreenDimensions, sizeof (EFI_SCREEN_DESCRIPTOR));
FRONT_PAGE_HEADER_HEIGHT + gFooterHeight + 3))
{
CopyMem (&gScreenDimensions, (VOID *)FormData->ScreenDimensions, sizeof (EFI_SCREEN_DESCRIPTOR));
} else {
return EFI_INVALID_PARAMETER;
}
@@ -453,8 +460,8 @@ ScreenDiemensionInfoValidate (
**/
CHAR16 *
LibGetToken (
IN EFI_STRING_ID Token,
IN EFI_HII_HANDLE HiiHandle
IN EFI_STRING_ID Token,
IN EFI_HII_HANDLE HiiHandle
)
{
EFI_STRING String;
@@ -465,10 +472,9 @@ LibGetToken (
ASSERT (String != NULL);
}
return (CHAR16 *) String;
return (CHAR16 *)String;
}
/**
Count the storage space of a Unicode string.
@@ -487,31 +493,32 @@ LibGetToken (
**/
UINTN
LibGetStringWidth (
IN CHAR16 *String
IN CHAR16 *String
)
{
UINTN Index;
UINTN Count;
UINTN IncrementValue;
UINTN Index;
UINTN Count;
UINTN IncrementValue;
ASSERT (String != NULL);
if (String == NULL) {
return 0;
}
Index = 0;
Count = 0;
IncrementValue = 1;
Index = 0;
Count = 0;
IncrementValue = 1;
do {
//
// Advance to the null-terminator or to the first width directive
//
for (;
(String[Index] != NARROW_CHAR) && (String[Index] != WIDE_CHAR) && (String[Index] != 0);
Index++, Count = Count + IncrementValue
)
;
for ( ;
(String[Index] != NARROW_CHAR) && (String[Index] != WIDE_CHAR) && (String[Index] != 0);
Index++, Count = Count + IncrementValue
)
{
}
//
// We hit the null-terminator, we now have a count
@@ -519,6 +526,7 @@ LibGetStringWidth (
if (String[Index] == 0) {
break;
}
//
// We encountered a narrow directive - strip it from the size calculation since it doesn't get printed
// and also set the flag that determines what we increment by.(if narrow, increment by 1, if wide increment by 2)
@@ -555,8 +563,8 @@ LibGetStringWidth (
**/
VOID
PrintHotKeyHelpString (
IN FORM_DISPLAY_ENGINE_FORM *FormData,
IN BOOLEAN SetState
IN FORM_DISPLAY_ENGINE_FORM *FormData,
IN BOOLEAN SetState
)
{
UINTN CurrentCol;
@@ -573,9 +581,9 @@ PrintHotKeyHelpString (
CHAR16 *ColumnStr;
CopyMem (&LocalScreen, &gScreenDimensions, sizeof (EFI_SCREEN_DESCRIPTOR));
ColumnWidth = (LocalScreen.RightColumn - LocalScreen.LeftColumn) / 3;
BottomRowOfHotKeyHelp = LocalScreen.BottomRow - STATUS_BAR_HEIGHT - 3;
ColumnStr = gLibEmptyString;
ColumnWidth = (LocalScreen.RightColumn - LocalScreen.LeftColumn) / 3;
BottomRowOfHotKeyHelp = LocalScreen.BottomRow - STATUS_BAR_HEIGHT - 3;
ColumnStr = gLibEmptyString;
//
// Calculate total number of Register HotKeys.
@@ -598,6 +606,7 @@ PrintHotKeyHelpString (
CurrentCol = LocalScreen.LeftColumn + 2;
ColumnIndexWidth = ColumnWidth - 2;
}
CurrentRow = BottomRowOfHotKeyHelp - Index / 3;
//
@@ -605,7 +614,7 @@ PrintHotKeyHelpString (
//
BakChar = L'\0';
if (StrLen (HotKey->HelpString) > ColumnIndexWidth) {
BakChar = HotKey->HelpString[ColumnIndexWidth];
BakChar = HotKey->HelpString[ColumnIndexWidth];
HotKey->HelpString[ColumnIndexWidth] = L'\0';
}
@@ -615,16 +624,18 @@ PrintHotKeyHelpString (
if (SetState) {
ColumnStr = HotKey->HelpString;
}
PrintStringAtWithWidth (CurrentCol, CurrentRow, ColumnStr, ColumnIndexWidth);
if (BakChar != L'\0') {
HotKey->HelpString[ColumnIndexWidth] = BakChar;
}
//
// Get Next Hot Key.
//
Link = GetNextNode (&FormData->HotKeyListHead, Link);
Index ++;
Index++;
}
if (SetState) {
@@ -636,9 +647,10 @@ PrintHotKeyHelpString (
if (ColumnIndex == 0) {
CurrentCol = LocalScreen.LeftColumn + 2 * ColumnWidth;
ColumnIndexWidth = ColumnWidth - 1;
ColumnIndex ++;
ColumnIndex++;
PrintStringAtWithWidth (CurrentCol, CurrentRow, gLibEmptyString, ColumnIndexWidth);
}
if (ColumnIndex == 1) {
CurrentCol = LocalScreen.LeftColumn + ColumnWidth;
ColumnIndexWidth = ColumnWidth;
@@ -658,34 +670,34 @@ PrintHotKeyHelpString (
**/
UINT64
LibGetFieldFromNum (
IN EFI_IFR_OP_HEADER *OpCode
IN EFI_IFR_OP_HEADER *OpCode
)
{
EFI_IFR_NUMERIC *NumericOp;
UINT64 Step;
EFI_IFR_NUMERIC *NumericOp;
UINT64 Step;
NumericOp = (EFI_IFR_NUMERIC *) OpCode;
NumericOp = (EFI_IFR_NUMERIC *)OpCode;
switch (NumericOp->Flags & EFI_IFR_NUMERIC_SIZE) {
case EFI_IFR_NUMERIC_SIZE_1:
Step = NumericOp->data.u8.Step;
break;
case EFI_IFR_NUMERIC_SIZE_1:
Step = NumericOp->data.u8.Step;
break;
case EFI_IFR_NUMERIC_SIZE_2:
Step = NumericOp->data.u16.Step;
break;
case EFI_IFR_NUMERIC_SIZE_2:
Step = NumericOp->data.u16.Step;
break;
case EFI_IFR_NUMERIC_SIZE_4:
Step = NumericOp->data.u32.Step;
break;
case EFI_IFR_NUMERIC_SIZE_4:
Step = NumericOp->data.u32.Step;
break;
case EFI_IFR_NUMERIC_SIZE_8:
Step = NumericOp->data.u64.Step;
break;
case EFI_IFR_NUMERIC_SIZE_8:
Step = NumericOp->data.u64.Step;
break;
default:
Step = 0;
break;
default:
Step = 0;
break;
}
return Step;
@@ -700,29 +712,29 @@ InitializeLibStrings (
VOID
)
{
mLibUnknownString = L"!";
mLibUnknownString = L"!";
gEnterString = LibGetToken (STRING_TOKEN (ENTER_STRING), mCDLStringPackHandle);
gEnterCommitString = LibGetToken (STRING_TOKEN (ENTER_COMMIT_STRING), mCDLStringPackHandle);
gEnterEscapeString = LibGetToken (STRING_TOKEN (ENTER_ESCAPE_STRING), mCDLStringPackHandle);
gEscapeString = LibGetToken (STRING_TOKEN (ESCAPE_STRING), mCDLStringPackHandle);
gMoveHighlight = LibGetToken (STRING_TOKEN (MOVE_HIGHLIGHT), mCDLStringPackHandle);
gDecNumericInput = LibGetToken (STRING_TOKEN (DEC_NUMERIC_INPUT), mCDLStringPackHandle);
gHexNumericInput = LibGetToken (STRING_TOKEN (HEX_NUMERIC_INPUT), mCDLStringPackHandle);
gToggleCheckBox = LibGetToken (STRING_TOKEN (TOGGLE_CHECK_BOX), mCDLStringPackHandle);
gEnterString = LibGetToken (STRING_TOKEN (ENTER_STRING), mCDLStringPackHandle);
gEnterCommitString = LibGetToken (STRING_TOKEN (ENTER_COMMIT_STRING), mCDLStringPackHandle);
gEnterEscapeString = LibGetToken (STRING_TOKEN (ENTER_ESCAPE_STRING), mCDLStringPackHandle);
gEscapeString = LibGetToken (STRING_TOKEN (ESCAPE_STRING), mCDLStringPackHandle);
gMoveHighlight = LibGetToken (STRING_TOKEN (MOVE_HIGHLIGHT), mCDLStringPackHandle);
gDecNumericInput = LibGetToken (STRING_TOKEN (DEC_NUMERIC_INPUT), mCDLStringPackHandle);
gHexNumericInput = LibGetToken (STRING_TOKEN (HEX_NUMERIC_INPUT), mCDLStringPackHandle);
gToggleCheckBox = LibGetToken (STRING_TOKEN (TOGGLE_CHECK_BOX), mCDLStringPackHandle);
gAreYouSure = LibGetToken (STRING_TOKEN (ARE_YOU_SURE), mCDLStringPackHandle);
gYesResponse = LibGetToken (STRING_TOKEN (ARE_YOU_SURE_YES), mCDLStringPackHandle);
gNoResponse = LibGetToken (STRING_TOKEN (ARE_YOU_SURE_NO), mCDLStringPackHandle);
gPlusString = LibGetToken (STRING_TOKEN (PLUS_STRING), mCDLStringPackHandle);
gMinusString = LibGetToken (STRING_TOKEN (MINUS_STRING), mCDLStringPackHandle);
gAdjustNumber = LibGetToken (STRING_TOKEN (ADJUST_NUMBER), mCDLStringPackHandle);
gSaveChanges = LibGetToken (STRING_TOKEN (SAVE_CHANGES), mCDLStringPackHandle);
gAreYouSure = LibGetToken (STRING_TOKEN (ARE_YOU_SURE), mCDLStringPackHandle);
gYesResponse = LibGetToken (STRING_TOKEN (ARE_YOU_SURE_YES), mCDLStringPackHandle);
gNoResponse = LibGetToken (STRING_TOKEN (ARE_YOU_SURE_NO), mCDLStringPackHandle);
gPlusString = LibGetToken (STRING_TOKEN (PLUS_STRING), mCDLStringPackHandle);
gMinusString = LibGetToken (STRING_TOKEN (MINUS_STRING), mCDLStringPackHandle);
gAdjustNumber = LibGetToken (STRING_TOKEN (ADJUST_NUMBER), mCDLStringPackHandle);
gSaveChanges = LibGetToken (STRING_TOKEN (SAVE_CHANGES), mCDLStringPackHandle);
gLibEmptyString = LibGetToken (STRING_TOKEN (EMPTY_STRING), mCDLStringPackHandle);
gLibEmptyString = LibGetToken (STRING_TOKEN (EMPTY_STRING), mCDLStringPackHandle);
gNvUpdateMessage = LibGetToken (STRING_TOKEN (NV_UPDATE_MESSAGE), mCDLStringPackHandle);
gInputErrorMessage = LibGetToken (STRING_TOKEN (INPUT_ERROR_MESSAGE), mCDLStringPackHandle);
gNvUpdateMessage = LibGetToken (STRING_TOKEN (NV_UPDATE_MESSAGE), mCDLStringPackHandle);
gInputErrorMessage = LibGetToken (STRING_TOKEN (INPUT_ERROR_MESSAGE), mCDLStringPackHandle);
//
// SpaceBuffer;
@@ -733,7 +745,6 @@ InitializeLibStrings (
mSpaceBuffer[SPACE_BUFFER_SIZE] = L'\0';
}
/**
Free the HII String.
@@ -778,7 +789,7 @@ FreeLibStrings (
**/
EFI_STATUS
WaitForKeyStroke (
OUT EFI_INPUT_KEY *Key
OUT EFI_INPUT_KEY *Key
)
{
EFI_STATUS Status;
@@ -796,10 +807,10 @@ WaitForKeyStroke (
gBS->WaitForEvent (1, &gST->ConIn->WaitForKey, &Index);
}
return Status;
}
/**
Set Buffer to Value for Size bytes.
@@ -810,9 +821,9 @@ WaitForKeyStroke (
**/
VOID
LibSetUnicodeMem (
IN VOID *Buffer,
IN UINTN Size,
IN CHAR16 Value
IN VOID *Buffer,
IN UINTN Size,
IN CHAR16 Value
)
{
CHAR16 *Ptr;
@@ -859,12 +870,12 @@ PrintInternal (
//
// For now, allocate an arbitrarily long buffer
//
Buffer = AllocateZeroPool (0x10000);
BackupBuffer = AllocateZeroPool (0x10000);
Buffer = AllocateZeroPool (0x10000);
BackupBuffer = AllocateZeroPool (0x10000);
ASSERT (Buffer);
ASSERT (BackupBuffer);
if (Column != (UINTN) -1) {
if (Column != (UINTN)-1) {
Out->SetCursorPosition (Out, Column, Row);
}
@@ -882,7 +893,7 @@ PrintInternal (
CharWidth = 1;
do {
for (; (Buffer[Index] != NARROW_CHAR) && (Buffer[Index] != WIDE_CHAR) && (Buffer[Index] != 0); Index++) {
for ( ; (Buffer[Index] != NARROW_CHAR) && (Buffer[Index] != WIDE_CHAR) && (Buffer[Index] != 0); Index++) {
BackupBuffer[Index] = Buffer[Index];
}
@@ -894,7 +905,7 @@ PrintInternal (
// Print this out, we are about to switch widths
//
Out->OutputString (Out, &BackupBuffer[PreviousIndex]);
Count = StrLen (&BackupBuffer[PreviousIndex]);
Count = StrLen (&BackupBuffer[PreviousIndex]);
PrintWidth += Count * CharWidth;
TotalCount += Count;
@@ -923,14 +934,13 @@ PrintInternal (
}
Index++;
} while (Buffer[Index] != 0);
//
// We hit the end of the string - print it
//
Out->OutputString (Out, &BackupBuffer[PreviousIndex]);
Count = StrLen (&BackupBuffer[PreviousIndex]);
Count = StrLen (&BackupBuffer[PreviousIndex]);
PrintWidth += Count * CharWidth;
TotalCount += Count;
if (PrintWidth < Width) {
@@ -960,19 +970,18 @@ PrintInternal (
UINTN
EFIAPI
PrintAt (
IN UINTN Width,
IN UINTN Column,
IN UINTN Row,
IN CHAR16 *Fmt,
IN UINTN Width,
IN UINTN Column,
IN UINTN Row,
IN CHAR16 *Fmt,
...
)
{
VA_LIST Args;
UINTN LengthOfPrinted;
VA_LIST Args;
UINTN LengthOfPrinted;
VA_START (Args, Fmt);
LengthOfPrinted = PrintInternal (Width, Column, Row, gST->ConOut, Fmt, Args);
VA_END (Args);
return LengthOfPrinted;
}

View File

@@ -10,8 +10,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#ifndef __CUSTOMIZED_DISPLAY_LIB_INTERNAL_H__
#define __CUSTOMIZED_DISPLAY_LIB_INTERNAL_H__
#include <PiDxe.h>
#include <Protocol/SimpleTextOut.h>
@@ -47,33 +45,30 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "Colors.h"
#define FORMSET_CLASS_PLATFORM_SETUP 0x0001
#define FORMSET_CLASS_FRONT_PAGE 0x0002
#define FORMSET_CLASS_PLATFORM_SETUP 0x0001
#define FORMSET_CLASS_FRONT_PAGE 0x0002
#define FRONT_PAGE_HEADER_HEIGHT 6
#define NONE_FRONT_PAGE_HEADER_HEIGHT 3
#define FOOTER_HEIGHT 4
#define STATUS_BAR_HEIGHT 1
#define FRONT_PAGE_HEADER_HEIGHT 6
#define NONE_FRONT_PAGE_HEADER_HEIGHT 3
#define FOOTER_HEIGHT 4
#define STATUS_BAR_HEIGHT 1
//
// Screen definitions
//
#define BANNER_HEIGHT 6
#define BANNER_COLUMNS 3
#define BANNER_LEFT_COLUMN_INDENT 1
#define BANNER_HEIGHT 6
#define BANNER_COLUMNS 3
#define BANNER_LEFT_COLUMN_INDENT 1
//
// Character definitions
//
#define UPPER_LOWER_CASE_OFFSET 0x20
#define UPPER_LOWER_CASE_OFFSET 0x20
//
// This is the Input Error Message
//
#define INPUT_ERROR 1
#define INPUT_ERROR 1
//
// This is the NV RAM update required Message
@@ -81,35 +76,36 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#define NV_UPDATE_REQUIRED 2
typedef struct {
EFI_STRING_ID Banner[BANNER_HEIGHT][BANNER_COLUMNS];
EFI_STRING_ID Banner[BANNER_HEIGHT][BANNER_COLUMNS];
} BANNER_DATA;
extern UINT16 gClassOfVfr; // Formset class information
extern BANNER_DATA *gBannerData;
extern EFI_SCREEN_DESCRIPTOR gScreenDimensions;
extern UINTN gFooterHeight;
extern UINT16 gClassOfVfr; // Formset class information
extern BANNER_DATA *gBannerData;
extern EFI_SCREEN_DESCRIPTOR gScreenDimensions;
extern UINTN gFooterHeight;
//
// Browser Global Strings
//
extern CHAR16 *gEnterString;
extern CHAR16 *gEnterCommitString;
extern CHAR16 *gEnterEscapeString;
extern CHAR16 *gEscapeString;
extern CHAR16 *gMoveHighlight;
extern CHAR16 *gDecNumericInput;
extern CHAR16 *gHexNumericInput;
extern CHAR16 *gToggleCheckBox;
extern CHAR16 *gLibEmptyString;
extern CHAR16 *gAreYouSure;
extern CHAR16 *gYesResponse;
extern CHAR16 *gNoResponse;
extern CHAR16 *gPlusString;
extern CHAR16 *gMinusString;
extern CHAR16 *gAdjustNumber;
extern CHAR16 *gSaveChanges;
extern CHAR16 *gNvUpdateMessage;
extern CHAR16 *gInputErrorMessage;
extern CHAR16 *gEnterString;
extern CHAR16 *gEnterCommitString;
extern CHAR16 *gEnterEscapeString;
extern CHAR16 *gEscapeString;
extern CHAR16 *gMoveHighlight;
extern CHAR16 *gDecNumericInput;
extern CHAR16 *gHexNumericInput;
extern CHAR16 *gToggleCheckBox;
extern CHAR16 *gLibEmptyString;
extern CHAR16 *gAreYouSure;
extern CHAR16 *gYesResponse;
extern CHAR16 *gNoResponse;
extern CHAR16 *gPlusString;
extern CHAR16 *gMinusString;
extern CHAR16 *gAdjustNumber;
extern CHAR16 *gSaveChanges;
extern CHAR16 *gNvUpdateMessage;
extern CHAR16 *gInputErrorMessage;
/**
Print banner info for front page.
@@ -119,7 +115,7 @@ extern CHAR16 *gInputErrorMessage;
**/
VOID
PrintBannerInfo (
IN FORM_DISPLAY_ENGINE_FORM *FormData
IN FORM_DISPLAY_ENGINE_FORM *FormData
);
/**
@@ -129,7 +125,7 @@ PrintBannerInfo (
**/
VOID
PrintFramework (
IN FORM_DISPLAY_ENGINE_FORM *FormData
IN FORM_DISPLAY_ENGINE_FORM *FormData
);
/**
@@ -143,7 +139,7 @@ PrintFramework (
**/
EFI_STATUS
ScreenDiemensionInfoValidate (
IN FORM_DISPLAY_ENGINE_FORM *FormData
IN FORM_DISPLAY_ENGINE_FORM *FormData
);
/**
@@ -158,8 +154,8 @@ ScreenDiemensionInfoValidate (
**/
CHAR16 *
LibGetToken (
IN EFI_STRING_ID Token,
IN EFI_HII_HANDLE HiiHandle
IN EFI_STRING_ID Token,
IN EFI_HII_HANDLE HiiHandle
);
/**
@@ -180,7 +176,7 @@ LibGetToken (
**/
UINTN
LibGetStringWidth (
IN CHAR16 *String
IN CHAR16 *String
);
/**
@@ -192,8 +188,8 @@ LibGetStringWidth (
**/
VOID
PrintHotKeyHelpString (
IN FORM_DISPLAY_ENGINE_FORM *FormData,
IN BOOLEAN SetState
IN FORM_DISPLAY_ENGINE_FORM *FormData,
IN BOOLEAN SetState
);
/**
@@ -205,7 +201,7 @@ PrintHotKeyHelpString (
**/
UINT64
LibGetFieldFromNum (
IN EFI_IFR_OP_HEADER *OpCode
IN EFI_IFR_OP_HEADER *OpCode
);
/**
@@ -236,7 +232,7 @@ FreeLibStrings (
**/
EFI_STATUS
WaitForKeyStroke (
OUT EFI_INPUT_KEY *Key
OUT EFI_INPUT_KEY *Key
);
/**
@@ -249,9 +245,9 @@ WaitForKeyStroke (
**/
VOID
LibSetUnicodeMem (
IN VOID *Buffer,
IN UINTN Size,
IN CHAR16 Value
IN VOID *Buffer,
IN UINTN Size,
IN CHAR16 Value
);
/**
@@ -270,10 +266,10 @@ LibSetUnicodeMem (
UINTN
EFIAPI
PrintAt (
IN UINTN Width,
IN UINTN Column,
IN UINTN Row,
IN CHAR16 *Fmt,
IN UINTN Width,
IN UINTN Column,
IN UINTN Row,
IN CHAR16 *Fmt,
...
);
@@ -285,7 +281,7 @@ PrintAt (
**/
VOID
ProcessExternedOpcode (
IN FORM_DISPLAY_ENGINE_FORM *FormData
IN FORM_DISPLAY_ENGINE_FORM *FormData
);
#endif

View File

@@ -58,7 +58,7 @@ InitializeDebugAgent (
BOOLEAN
EFIAPI
SaveAndSetDebugTimerInterrupt (
IN BOOLEAN EnableStatus
IN BOOLEAN EnableStatus
)
{
return FALSE;

View File

@@ -19,9 +19,9 @@ DEVICE_MANAGER_CALLBACK_DATA gDeviceManagerPrivate = {
}
};
#define MAX_MAC_ADDRESS_NODE_LIST_LEN 10
#define MAX_MAC_ADDRESS_NODE_LIST_LEN 10
EFI_GUID mDeviceManagerGuid = DEVICE_MANAGER_FORMSET_GUID;
EFI_GUID mDeviceManagerGuid = DEVICE_MANAGER_FORMSET_GUID;
//
// Which Mac Address string is select
@@ -40,21 +40,22 @@ HII_VENDOR_DEVICE_PATH mDeviceManagerHiiVendorDevicePath = {
HARDWARE_DEVICE_PATH,
HW_VENDOR_DP,
{
(UINT8) (sizeof (VENDOR_DEVICE_PATH)),
(UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)
(UINT8)(sizeof (VENDOR_DEVICE_PATH)),
(UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8)
}
},
//
// {102579A0-3686-466e-ACD8-80C087044F4A}
//
{ 0x102579a0, 0x3686, 0x466e, { 0xac, 0xd8, 0x80, 0xc0, 0x87, 0x4, 0x4f, 0x4a } }
{ 0x102579a0, 0x3686, 0x466e, { 0xac, 0xd8, 0x80, 0xc0, 0x87, 0x4, 0x4f, 0x4a }
}
},
{
END_DEVICE_PATH_TYPE,
END_ENTIRE_DEVICE_PATH_SUBTYPE,
{
(UINT8) (END_DEVICE_PATH_LENGTH),
(UINT8) ((END_DEVICE_PATH_LENGTH) >> 8)
(UINT8)(END_DEVICE_PATH_LENGTH),
(UINT8)((END_DEVICE_PATH_LENGTH) >> 8)
}
}
};
@@ -70,11 +71,11 @@ HII_VENDOR_DEVICE_PATH mDeviceManagerHiiVendorDevicePath = {
**/
CHAR16 *
DmExtractDevicePathFromHiiHandle (
IN EFI_HII_HANDLE Handle
IN EFI_HII_HANDLE Handle
)
{
EFI_STATUS Status;
EFI_HANDLE DriverHandle;
EFI_STATUS Status;
EFI_HANDLE DriverHandle;
ASSERT (Handle != NULL);
@@ -86,10 +87,11 @@ DmExtractDevicePathFromHiiHandle (
if (EFI_ERROR (Status)) {
return NULL;
}
//
// Get device path string.
//
return ConvertDevicePathToText(DevicePathFromHandle (DriverHandle), FALSE, FALSE);
return ConvertDevicePathToText (DevicePathFromHandle (DriverHandle), FALSE, FALSE);
}
/**
@@ -101,25 +103,25 @@ DmExtractDevicePathFromHiiHandle (
**/
BOOLEAN
GetMacAddressString(
IN MAC_ADDR_DEVICE_PATH *MacAddressNode,
OUT CHAR16 **PBuffer
GetMacAddressString (
IN MAC_ADDR_DEVICE_PATH *MacAddressNode,
OUT CHAR16 **PBuffer
)
{
UINTN HwAddressSize;
UINTN Index;
UINT8 *HwAddress;
UINTN HwAddressSize;
UINTN Index;
UINT8 *HwAddress;
EFI_DEVICE_PATH_PROTOCOL *Node;
UINT16 VlanId;
CHAR16 *String;
UINTN BufferLen;
UINT16 VlanId;
CHAR16 *String;
UINTN BufferLen;
VlanId = 0;
String = NULL;
ASSERT(MacAddressNode != NULL);
ASSERT (MacAddressNode != NULL);
HwAddressSize = sizeof (EFI_MAC_ADDRESS);
if (MacAddressNode->IfType == 0x01 || MacAddressNode->IfType == 0x00) {
if ((MacAddressNode->IfType == 0x01) || (MacAddressNode->IfType == 0x00)) {
HwAddressSize = 6;
}
@@ -128,13 +130,13 @@ GetMacAddressString(
// The size is the Number size + ":" size + Vlan size(\XXXX) + End
//
BufferLen = (4 + 2 * HwAddressSize + (HwAddressSize - 1) + 5 + 1) * sizeof (CHAR16);
String = AllocateZeroPool (BufferLen);
String = AllocateZeroPool (BufferLen);
if (String == NULL) {
return FALSE;
}
*PBuffer = String;
StrCpyS(String, BufferLen / sizeof (CHAR16), L"MAC:");
StrCpyS (String, BufferLen / sizeof (CHAR16), L"MAC:");
String += 4;
//
@@ -161,9 +163,10 @@ GetMacAddressString(
//
Node = (EFI_DEVICE_PATH_PROTOCOL *)MacAddressNode;
while (!IsDevicePathEnd (Node)) {
if (Node->Type == MESSAGING_DEVICE_PATH && Node->SubType == MSG_VLAN_DP) {
VlanId = ((VLAN_DEVICE_PATH *) Node)->VlanId;
if ((Node->Type == MESSAGING_DEVICE_PATH) && (Node->SubType == MSG_VLAN_DP)) {
VlanId = ((VLAN_DEVICE_PATH *)Node)->VlanId;
}
Node = NextDevicePathNode (Node);
}
@@ -198,19 +201,19 @@ GetMacAddressString(
**/
BOOLEAN
AddIdToMacDeviceList (
IN EFI_STRING MacAddrString
IN EFI_STRING MacAddrString
)
{
MENU_INFO_ITEM *TempDeviceList;
UINTN Index;
EFI_STRING StoredString;
EFI_STRING_ID PromptId;
EFI_HII_HANDLE HiiHandle;
MENU_INFO_ITEM *TempDeviceList;
UINTN Index;
EFI_STRING StoredString;
EFI_STRING_ID PromptId;
EFI_HII_HANDLE HiiHandle;
HiiHandle = gDeviceManagerPrivate.HiiHandle;
HiiHandle = gDeviceManagerPrivate.HiiHandle;
TempDeviceList = NULL;
for (Index = 0; Index < mMacDeviceList.CurListLen; Index ++) {
for (Index = 0; Index < mMacDeviceList.CurListLen; Index++) {
StoredString = HiiGetString (HiiHandle, mMacDeviceList.NodeList[Index].PromptId, NULL);
if (StoredString == NULL) {
return FALSE;
@@ -224,13 +227,13 @@ AddIdToMacDeviceList (
}
}
PromptId = HiiSetString(HiiHandle, 0, MacAddrString, NULL);
PromptId = HiiSetString (HiiHandle, 0, MacAddrString, NULL);
//
// If not in the list, save it.
//
if (mMacDeviceList.MaxListLen > mMacDeviceList.CurListLen + 1) {
mMacDeviceList.NodeList[mMacDeviceList.CurListLen].PromptId = PromptId;
mMacDeviceList.NodeList[mMacDeviceList.CurListLen].QuestionId = (EFI_QUESTION_ID) (mMacDeviceList.CurListLen + NETWORK_DEVICE_LIST_KEY_OFFSET);
mMacDeviceList.NodeList[mMacDeviceList.CurListLen].PromptId = PromptId;
mMacDeviceList.NodeList[mMacDeviceList.CurListLen].QuestionId = (EFI_QUESTION_ID)(mMacDeviceList.CurListLen + NETWORK_DEVICE_LIST_KEY_OFFSET);
} else {
mMacDeviceList.MaxListLen += MAX_MAC_ADDRESS_NODE_LIST_LEN;
if (mMacDeviceList.CurListLen != 0) {
@@ -246,12 +249,14 @@ AddIdToMacDeviceList (
if (TempDeviceList == NULL) {
return FALSE;
}
TempDeviceList[mMacDeviceList.CurListLen].PromptId = PromptId;
TempDeviceList[mMacDeviceList.CurListLen].QuestionId = (EFI_QUESTION_ID) (mMacDeviceList.CurListLen + NETWORK_DEVICE_LIST_KEY_OFFSET);
TempDeviceList[mMacDeviceList.CurListLen].PromptId = PromptId;
TempDeviceList[mMacDeviceList.CurListLen].QuestionId = (EFI_QUESTION_ID)(mMacDeviceList.CurListLen + NETWORK_DEVICE_LIST_KEY_OFFSET);
mMacDeviceList.NodeList = TempDeviceList;
}
mMacDeviceList.CurListLen ++;
mMacDeviceList.CurListLen++;
return TRUE;
}
@@ -273,28 +278,29 @@ AddIdToMacDeviceList (
**/
BOOLEAN
IsMacAddressDevicePath (
IN VOID *Node,
IN EFI_FORM_ID NextShowFormId,
OUT BOOLEAN *NeedAddItem
IN VOID *Node,
IN EFI_FORM_ID NextShowFormId,
OUT BOOLEAN *NeedAddItem
)
{
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
CHAR16 *Buffer;
BOOLEAN ReturnVal;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
CHAR16 *Buffer;
BOOLEAN ReturnVal;
ASSERT (Node != NULL);
*NeedAddItem = FALSE;
ReturnVal = FALSE;
Buffer = NULL;
Buffer = NULL;
DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) Node;
DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)Node;
//
// find the partition device path node
//
while (!IsDevicePathEnd (DevicePath)) {
if ((DevicePathType (DevicePath) == MESSAGING_DEVICE_PATH) &&
(DevicePathSubType (DevicePath) == MSG_MAC_ADDR_DP)) {
(DevicePathSubType (DevicePath) == MSG_MAC_ADDR_DP))
{
ReturnVal = TRUE;
if (DEVICE_MANAGER_FORM_ID == NextShowFormId) {
@@ -302,7 +308,7 @@ IsMacAddressDevicePath (
break;
}
if (!GetMacAddressString((MAC_ADDR_DEVICE_PATH*)DevicePath, &Buffer)) {
if (!GetMacAddressString ((MAC_ADDR_DEVICE_PATH *)DevicePath, &Buffer)) {
break;
}
@@ -310,6 +316,7 @@ IsMacAddressDevicePath (
if (StrCmp (Buffer, mSelectedMacAddrString) == 0) {
*NeedAddItem = TRUE;
}
break;
}
@@ -321,9 +328,11 @@ IsMacAddressDevicePath (
if (AddIdToMacDeviceList (Buffer)) {
*NeedAddItem = TRUE;
}
break;
}
}
DevicePath = NextDevicePathNode (DevicePath);
}
@@ -347,40 +356,43 @@ IsMacAddressDevicePath (
**/
BOOLEAN
IsNeedAddNetworkMenu (
IN EFI_HII_HANDLE Handle,
IN EFI_FORM_ID NextShowFormId,
OUT UINTN *ItemCount
IN EFI_HII_HANDLE Handle,
IN EFI_FORM_ID NextShowFormId,
OUT UINTN *ItemCount
)
{
EFI_STATUS Status;
UINTN EntryCount;
UINTN Index;
EFI_HANDLE DriverHandle;
EFI_HANDLE ControllerHandle;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_DEVICE_PATH_PROTOCOL *TmpDevicePath;
EFI_DEVICE_PATH_PROTOCOL *ChildDevicePath;
EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *OpenInfoBuffer;
BOOLEAN IsNeedAdd;
EFI_STATUS Status;
UINTN EntryCount;
UINTN Index;
EFI_HANDLE DriverHandle;
EFI_HANDLE ControllerHandle;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_DEVICE_PATH_PROTOCOL *TmpDevicePath;
EFI_DEVICE_PATH_PROTOCOL *ChildDevicePath;
EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *OpenInfoBuffer;
BOOLEAN IsNeedAdd;
IsNeedAdd = FALSE;
IsNeedAdd = FALSE;
OpenInfoBuffer = NULL;
if ((Handle == NULL) || (ItemCount == NULL)) {
return FALSE;
}
*ItemCount = 0;
Status = gHiiDatabase->GetPackageListHandle (gHiiDatabase, Handle, &DriverHandle);
if (EFI_ERROR (Status)) {
return FALSE;
}
//
// Get the device path by the got Driver handle .
//
Status = gBS->HandleProtocol (DriverHandle, &gEfiDevicePathProtocolGuid, (VOID **) &DevicePath);
Status = gBS->HandleProtocol (DriverHandle, &gEfiDevicePathProtocolGuid, (VOID **)&DevicePath);
if (EFI_ERROR (Status)) {
return FALSE;
}
TmpDevicePath = DevicePath;
//
@@ -389,10 +401,11 @@ IsNeedAddNetworkMenu (
// add this info to the menu and return.
// Else check more about the child handle devcie path.
//
if (IsMacAddressDevicePath(TmpDevicePath, NextShowFormId,&IsNeedAdd)) {
if (IsMacAddressDevicePath (TmpDevicePath, NextShowFormId, &IsNeedAdd)) {
if ((NETWORK_DEVICE_LIST_FORM_ID == NextShowFormId) && IsNeedAdd) {
(*ItemCount) = 1;
}
return IsNeedAdd;
}
@@ -401,7 +414,7 @@ IsNeedAddNetworkMenu (
// And the child handle has the network devcie connected.
//
TmpDevicePath = DevicePath;
Status = gBS->LocateDevicePath(&gEfiDevicePathProtocolGuid, &TmpDevicePath, &ControllerHandle);
Status = gBS->LocateDevicePath (&gEfiDevicePathProtocolGuid, &TmpDevicePath, &ControllerHandle);
if (EFI_ERROR (Status)) {
return FALSE;
}
@@ -437,7 +450,7 @@ IsNeedAddNetworkMenu (
Status = gBS->OpenProtocol (
OpenInfoBuffer[Index].ControllerHandle,
&gEfiDevicePathProtocolGuid,
(VOID **) &ChildDevicePath,
(VOID **)&ChildDevicePath,
NULL,
NULL,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@@ -449,7 +462,7 @@ IsNeedAddNetworkMenu (
//
// Check whether this device path include mac address device path.
//
if (!IsMacAddressDevicePath(ChildDevicePath, NextShowFormId,&IsNeedAdd)) {
if (!IsMacAddressDevicePath (ChildDevicePath, NextShowFormId, &IsNeedAdd)) {
//
// If this path not has mac address path, check the other.
//
@@ -462,6 +475,7 @@ IsNeedAddNetworkMenu (
if (IsNeedAdd) {
(*ItemCount) += 1;
}
continue;
} else {
//
@@ -477,6 +491,7 @@ Done:
if (OpenInfoBuffer != NULL) {
FreePool (OpenInfoBuffer);
}
return IsNeedAdd;
}
@@ -487,42 +502,42 @@ Done:
**/
VOID
CreateDeviceManagerForm(
IN EFI_FORM_ID NextShowFormId
)
CreateDeviceManagerForm (
IN EFI_FORM_ID NextShowFormId
)
{
UINTN Index;
EFI_STRING String;
EFI_STRING_ID Token;
EFI_STRING_ID TokenHelp;
EFI_HII_HANDLE *HiiHandles;
EFI_HII_HANDLE HiiHandle;
EFI_GUID FormSetGuid;
VOID *StartOpCodeHandle;
VOID *EndOpCodeHandle;
EFI_IFR_GUID_LABEL *StartLabel;
EFI_IFR_GUID_LABEL *EndLabel;
BOOLEAN AddNetworkMenu;
UINTN AddItemCount;
UINTN NewStringLen;
EFI_STRING NewStringTitle;
CHAR16 *DevicePathStr;
EFI_STRING_ID DevicePathId;
EFI_IFR_FORM_SET *Buffer;
UINTN BufferSize;
UINT8 ClassGuidNum;
EFI_GUID *ClassGuid;
UINTN TempSize;
UINT8 *Ptr;
EFI_STATUS Status;
UINTN Index;
EFI_STRING String;
EFI_STRING_ID Token;
EFI_STRING_ID TokenHelp;
EFI_HII_HANDLE *HiiHandles;
EFI_HII_HANDLE HiiHandle;
EFI_GUID FormSetGuid;
VOID *StartOpCodeHandle;
VOID *EndOpCodeHandle;
EFI_IFR_GUID_LABEL *StartLabel;
EFI_IFR_GUID_LABEL *EndLabel;
BOOLEAN AddNetworkMenu;
UINTN AddItemCount;
UINTN NewStringLen;
EFI_STRING NewStringTitle;
CHAR16 *DevicePathStr;
EFI_STRING_ID DevicePathId;
EFI_IFR_FORM_SET *Buffer;
UINTN BufferSize;
UINT8 ClassGuidNum;
EFI_GUID *ClassGuid;
UINTN TempSize;
UINT8 *Ptr;
EFI_STATUS Status;
TempSize =0;
TempSize = 0;
BufferSize = 0;
Buffer = NULL;
Buffer = NULL;
HiiHandle = gDeviceManagerPrivate.HiiHandle;
HiiHandle = gDeviceManagerPrivate.HiiHandle;
AddNetworkMenu = FALSE;
AddItemCount = 0;
AddItemCount = 0;
//
// If need show the Network device list form, clear the old save list first.
//
@@ -538,8 +553,9 @@ CreateDeviceManagerForm(
if (String == NULL) {
return;
}
NewStringLen = StrLen (mSelectedMacAddrString) * 2;
NewStringLen += (StrLen (String) + 2) * 2;
NewStringLen = StrLen (mSelectedMacAddrString) * 2;
NewStringLen += (StrLen (String) + 2) * 2;
NewStringTitle = AllocatePool (NewStringLen);
UnicodeSPrint (NewStringTitle, NewStringLen, L"%s %s", String, mSelectedMacAddrString);
HiiSetString (HiiHandle, STRING_TOKEN (STR_FORM_NETWORK_DEVICE_TITLE), NewStringTitle, NULL);
@@ -559,17 +575,17 @@ CreateDeviceManagerForm(
//
// Create Hii Extend Label OpCode as the start opcode
//
StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
StartLabel = (EFI_IFR_GUID_LABEL *)HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
//
// According to the next show Form id(mNextShowFormId) to decide which form need to update.
//
StartLabel->Number = (UINT16) (LABEL_FORM_ID_OFFSET + NextShowFormId);
StartLabel->Number = (UINT16)(LABEL_FORM_ID_OFFSET + NextShowFormId);
//
// Create Hii Extend Label OpCode as the end opcode
//
EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (EndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
EndLabel = (EFI_IFR_GUID_LABEL *)HiiCreateGuidOpCode (EndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
EndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
EndLabel->Number = LABEL_END;
@@ -583,23 +599,24 @@ CreateDeviceManagerForm(
// Search for formset of each class type
//
for (Index = 0; HiiHandles[Index] != NULL; Index++) {
Status = HiiGetFormSetFromHiiHandle(HiiHandles[Index], &Buffer,&BufferSize);
if (EFI_ERROR (Status)){
Status = HiiGetFormSetFromHiiHandle (HiiHandles[Index], &Buffer, &BufferSize);
if (EFI_ERROR (Status)) {
continue;
}
Ptr = (UINT8 *)Buffer;
while(TempSize < BufferSize) {
TempSize += ((EFI_IFR_OP_HEADER *) Ptr)->Length;
if (((EFI_IFR_OP_HEADER *) Ptr)->Length <= OFFSET_OF (EFI_IFR_FORM_SET, Flags)){
Ptr += ((EFI_IFR_OP_HEADER *) Ptr)->Length;
while (TempSize < BufferSize) {
TempSize += ((EFI_IFR_OP_HEADER *)Ptr)->Length;
if (((EFI_IFR_OP_HEADER *)Ptr)->Length <= OFFSET_OF (EFI_IFR_FORM_SET, Flags)) {
Ptr += ((EFI_IFR_OP_HEADER *)Ptr)->Length;
continue;
}
ClassGuidNum = (UINT8) (((EFI_IFR_FORM_SET *)Ptr)->Flags & 0x3);
ClassGuid = (EFI_GUID *) (VOID *)(Ptr + sizeof (EFI_IFR_FORM_SET));
ClassGuidNum = (UINT8)(((EFI_IFR_FORM_SET *)Ptr)->Flags & 0x3);
ClassGuid = (EFI_GUID *)(VOID *)(Ptr + sizeof (EFI_IFR_FORM_SET));
while (ClassGuidNum-- > 0) {
if (CompareGuid (&gEfiHiiPlatformSetupFormsetGuid, ClassGuid)== 0) {
ClassGuid ++;
if (CompareGuid (&gEfiHiiPlatformSetupFormsetGuid, ClassGuid) == 0) {
ClassGuid++;
continue;
}
@@ -608,6 +625,7 @@ CreateDeviceManagerForm(
String = HiiGetString (HiiHandle, STRING_TOKEN (STR_MISSING_STRING), NULL);
ASSERT (String != NULL);
}
Token = HiiSetString (HiiHandle, 0, String, NULL);
FreePool (String);
@@ -616,15 +634,16 @@ CreateDeviceManagerForm(
String = HiiGetString (HiiHandle, STRING_TOKEN (STR_MISSING_STRING), NULL);
ASSERT (String != NULL);
}
TokenHelp = HiiSetString (HiiHandle, 0, String, NULL);
FreePool (String);
CopyMem (&FormSetGuid, &((EFI_IFR_FORM_SET *) Ptr)->Guid, sizeof (EFI_GUID));
CopyMem (&FormSetGuid, &((EFI_IFR_FORM_SET *)Ptr)->Guid, sizeof (EFI_GUID));
//
// Network device process
//
if (IsNeedAddNetworkMenu (HiiHandles[Index], NextShowFormId,&AddItemCount)) {
if (IsNeedAddNetworkMenu (HiiHandles[Index], NextShowFormId, &AddItemCount)) {
if (NextShowFormId == DEVICE_MANAGER_FORM_ID) {
//
// Only show one menu item "Network Config" in the device manger form.
@@ -637,8 +656,8 @@ CreateDeviceManagerForm(
STRING_TOKEN (STR_FORM_NETWORK_DEVICE_LIST_TITLE),
STRING_TOKEN (STR_FORM_NETWORK_DEVICE_LIST_HELP),
EFI_IFR_FLAG_CALLBACK,
(EFI_QUESTION_ID) QUESTION_NETWORK_DEVICE_ID
);
(EFI_QUESTION_ID)QUESTION_NETWORK_DEVICE_ID
);
}
} else if (NextShowFormId == NETWORK_DEVICE_LIST_FORM_ID) {
//
@@ -652,63 +671,67 @@ CreateDeviceManagerForm(
STRING_TOKEN (STR_NETWORK_DEVICE_HELP),
EFI_IFR_FLAG_CALLBACK,
mMacDeviceList.NodeList[mMacDeviceList.CurListLen - AddItemCount].QuestionId
);
);
AddItemCount -= 1;
}
} else if (NextShowFormId == NETWORK_DEVICE_FORM_ID) {
//
// In network device form, only the selected mac address device need to be show.
//
DevicePathStr = DmExtractDevicePathFromHiiHandle(HiiHandles[Index]);
DevicePathStr = DmExtractDevicePathFromHiiHandle (HiiHandles[Index]);
DevicePathId = 0;
if (DevicePathStr != NULL){
if (DevicePathStr != NULL) {
DevicePathId = HiiSetString (HiiHandle, 0, DevicePathStr, NULL);
FreePool(DevicePathStr);
FreePool (DevicePathStr);
}
HiiCreateGotoExOpCode (
StartOpCodeHandle,
0,
Token,
TokenHelp,
0,
(EFI_QUESTION_ID) (Index + DEVICE_KEY_OFFSET),
(EFI_QUESTION_ID)(Index + DEVICE_KEY_OFFSET),
0,
&FormSetGuid,
DevicePathId
);
);
}
} else {
//
// Not network device process, only need to show at device manger form.
//
if (NextShowFormId == DEVICE_MANAGER_FORM_ID) {
DevicePathStr = DmExtractDevicePathFromHiiHandle(HiiHandles[Index]);
DevicePathStr = DmExtractDevicePathFromHiiHandle (HiiHandles[Index]);
DevicePathId = 0;
if (DevicePathStr != NULL){
if (DevicePathStr != NULL) {
DevicePathId = HiiSetString (HiiHandle, 0, DevicePathStr, NULL);
FreePool(DevicePathStr);
FreePool (DevicePathStr);
}
HiiCreateGotoExOpCode (
StartOpCodeHandle,
0,
Token,
TokenHelp,
0,
(EFI_QUESTION_ID) (Index + DEVICE_KEY_OFFSET),
(EFI_QUESTION_ID)(Index + DEVICE_KEY_OFFSET),
0,
&FormSetGuid,
DevicePathId
);
);
}
}
break;
}
Ptr += ((EFI_IFR_OP_HEADER *) Ptr)->Length;
Ptr += ((EFI_IFR_OP_HEADER *)Ptr)->Length;
}
FreePool(Buffer);
Buffer = NULL;
TempSize = 0;
FreePool (Buffer);
Buffer = NULL;
TempSize = 0;
BufferSize = 0;
}
@@ -750,15 +773,16 @@ CreateDeviceManagerForm(
EFI_STATUS
EFIAPI
DeviceManagerExtractConfig (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Request,
OUT EFI_STRING *Progress,
OUT EFI_STRING *Results
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Request,
OUT EFI_STRING *Progress,
OUT EFI_STRING *Results
)
{
if (Progress == NULL || Results == NULL) {
if ((Progress == NULL) || (Results == NULL)) {
return EFI_INVALID_PARAMETER;
}
*Progress = Request;
return EFI_NOT_FOUND;
}
@@ -781,12 +805,12 @@ DeviceManagerExtractConfig (
EFI_STATUS
EFIAPI
DeviceManagerRouteConfig (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Configuration,
OUT EFI_STRING *Progress
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Configuration,
OUT EFI_STRING *Progress
)
{
if (Configuration == NULL || Progress == NULL) {
if ((Configuration == NULL) || (Progress == NULL)) {
return EFI_INVALID_PARAMETER;
}
@@ -814,15 +838,15 @@ DeviceManagerRouteConfig (
EFI_STATUS
EFIAPI
DeviceManagerCallback (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN EFI_BROWSER_ACTION Action,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN EFI_IFR_TYPE_VALUE *Value,
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN EFI_BROWSER_ACTION Action,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN EFI_IFR_TYPE_VALUE *Value,
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
)
{
UINTN CurIndex;
UINTN CurIndex;
if (Action != EFI_BROWSER_ACTION_CHANGING) {
//
@@ -830,21 +854,24 @@ DeviceManagerCallback (
//
return EFI_UNSUPPORTED;
}
if ((Value == NULL) || (ActionRequest == NULL)) {
return EFI_INVALID_PARAMETER;
}
if ((QuestionId < MAX_KEY_SECTION_LEN + NETWORK_DEVICE_LIST_KEY_OFFSET) && (QuestionId >= NETWORK_DEVICE_LIST_KEY_OFFSET)) {
//
// If user select the mac address, need to record mac address string to support next form show.
//
for (CurIndex = 0; CurIndex < mMacDeviceList.CurListLen; CurIndex ++) {
for (CurIndex = 0; CurIndex < mMacDeviceList.CurListLen; CurIndex++) {
if (mMacDeviceList.NodeList[CurIndex].QuestionId == QuestionId) {
mSelectedMacAddrString = HiiGetString (gDeviceManagerPrivate.HiiHandle, mMacDeviceList.NodeList[CurIndex].PromptId, NULL);
mSelectedMacAddrString = HiiGetString (gDeviceManagerPrivate.HiiHandle, mMacDeviceList.NodeList[CurIndex].PromptId, NULL);
}
}
CreateDeviceManagerForm(NETWORK_DEVICE_FORM_ID);
} else if(QuestionId == QUESTION_NETWORK_DEVICE_ID){
CreateDeviceManagerForm(NETWORK_DEVICE_LIST_FORM_ID);
CreateDeviceManagerForm (NETWORK_DEVICE_FORM_ID);
} else if (QuestionId == QUESTION_NETWORK_DEVICE_ID) {
CreateDeviceManagerForm (NETWORK_DEVICE_LIST_FORM_ID);
}
return EFI_SUCCESS;
@@ -863,33 +890,33 @@ DeviceManagerCallback (
EFI_STATUS
EFIAPI
DeviceManagerUiLibConstructor (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;
EFI_STATUS Status;
gDeviceManagerPrivate.DriverHandle = NULL;
Status = gBS->InstallMultipleProtocolInterfaces (
&gDeviceManagerPrivate.DriverHandle,
&gEfiDevicePathProtocolGuid,
&mDeviceManagerHiiVendorDevicePath,
&gEfiHiiConfigAccessProtocolGuid,
&gDeviceManagerPrivate.ConfigAccess,
NULL
);
Status = gBS->InstallMultipleProtocolInterfaces (
&gDeviceManagerPrivate.DriverHandle,
&gEfiDevicePathProtocolGuid,
&mDeviceManagerHiiVendorDevicePath,
&gEfiHiiConfigAccessProtocolGuid,
&gDeviceManagerPrivate.ConfigAccess,
NULL
);
ASSERT_EFI_ERROR (Status);
//
// Publish our HII data.
//
gDeviceManagerPrivate.HiiHandle = HiiAddPackages (
&mDeviceManagerGuid,
gDeviceManagerPrivate.DriverHandle,
DeviceManagerVfrBin,
DeviceManagerUiLibStrings,
NULL
);
&mDeviceManagerGuid,
gDeviceManagerPrivate.DriverHandle,
DeviceManagerVfrBin,
DeviceManagerUiLibStrings,
NULL
);
ASSERT (gDeviceManagerPrivate.HiiHandle != NULL);
//
@@ -917,12 +944,12 @@ DeviceManagerUiLibConstructor (
**/
EFI_STATUS
EFIAPI
DeviceManagerUiLibDestructor(
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
DeviceManagerUiLibDestructor (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;
EFI_STATUS Status;
Status = gBS->UninstallMultipleProtocolInterfaces (
gDeviceManagerPrivate.DriverHandle,
@@ -938,4 +965,3 @@ DeviceManagerUiLibDestructor(
return EFI_SUCCESS;
}

View File

@@ -34,18 +34,18 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
0x3ebfa8e6, 0x511d, 0x4b5b, {0xa9, 0x5f, 0xfb, 0x38, 0x26, 0xf, 0x1c, 0x27} \
}
#define LABEL_END 0xffff
#define LABEL_FORM_ID_OFFSET 0x0100
#define LABEL_END 0xffff
#define LABEL_FORM_ID_OFFSET 0x0100
#define DEVICE_MANAGER_FORM_ID 0x1000
#define NETWORK_DEVICE_LIST_FORM_ID 0x1001
#define NETWORK_DEVICE_FORM_ID 0x1002
#define DEVICE_KEY_OFFSET 0x4000
#define NETWORK_DEVICE_LIST_KEY_OFFSET 0x2000
#define DEVICE_MANAGER_FORM_ID 0x1000
#define NETWORK_DEVICE_LIST_FORM_ID 0x1001
#define NETWORK_DEVICE_FORM_ID 0x1002
#define DEVICE_KEY_OFFSET 0x4000
#define NETWORK_DEVICE_LIST_KEY_OFFSET 0x2000
#define MAX_KEY_SECTION_LEN 0x1000
#define MAX_KEY_SECTION_LEN 0x1000
#define QUESTION_NETWORK_DEVICE_ID 0x3FFF
#define QUESTION_NETWORK_DEVICE_ID 0x3FFF
//
// These are the VFR compiler generated data representing our VFR data.
//
@@ -57,40 +57,40 @@ extern UINT8 DeviceManagerVfrBin[];
/// HII specific Vendor Device Path definition.
///
typedef struct {
VENDOR_DEVICE_PATH VendorDevicePath;
EFI_DEVICE_PATH_PROTOCOL End;
VENDOR_DEVICE_PATH VendorDevicePath;
EFI_DEVICE_PATH_PROTOCOL End;
} HII_VENDOR_DEVICE_PATH;
typedef struct {
UINTN Signature;
UINTN Signature;
///
/// Device Manager HII relative handles
///
EFI_HII_HANDLE HiiHandle;
EFI_HII_HANDLE HiiHandle;
EFI_HANDLE DriverHandle;
EFI_HANDLE DriverHandle;
///
/// Device Manager Produced protocols
///
EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess;
EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess;
///
/// Configuration data
///
UINT8 VideoBios;
UINT8 VideoBios;
} DEVICE_MANAGER_CALLBACK_DATA;
typedef struct {
EFI_STRING_ID PromptId;
EFI_QUESTION_ID QuestionId;
}MENU_INFO_ITEM;
EFI_STRING_ID PromptId;
EFI_QUESTION_ID QuestionId;
} MENU_INFO_ITEM;
typedef struct {
UINTN CurListLen;
UINTN MaxListLen;
MENU_INFO_ITEM *NodeList;
UINTN CurListLen;
UINTN MaxListLen;
MENU_INFO_ITEM *NodeList;
} MAC_ADDRESS_NODE_LIST;
#define DEVICE_MANAGER_CALLBACK_DATA_FROM_THIS(a) \
@@ -100,8 +100,8 @@ typedef struct {
DEVICE_MANAGER_CALLBACK_DATA_SIGNATURE \
)
typedef struct {
EFI_STRING_ID StringId;
UINT16 Class;
EFI_STRING_ID StringId;
UINT16 Class;
} DEVICE_MANAGER_MENU_ITEM;
/**
@@ -129,10 +129,10 @@ typedef struct {
EFI_STATUS
EFIAPI
DeviceManagerExtractConfig (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Request,
OUT EFI_STRING *Progress,
OUT EFI_STRING *Results
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Request,
OUT EFI_STRING *Progress,
OUT EFI_STRING *Results
);
/**
@@ -154,9 +154,9 @@ DeviceManagerExtractConfig (
EFI_STATUS
EFIAPI
DeviceManagerRouteConfig (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Configuration,
OUT EFI_STRING *Progress
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Configuration,
OUT EFI_STRING *Progress
);
/**
@@ -178,12 +178,12 @@ DeviceManagerRouteConfig (
EFI_STATUS
EFIAPI
DeviceManagerCallback (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN EFI_BROWSER_ACTION Action,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN EFI_IFR_TYPE_VALUE *Value,
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN EFI_BROWSER_ACTION Action,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN EFI_IFR_TYPE_VALUE *Value,
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
);
#endif

View File

@@ -34,7 +34,7 @@ EFI_GRAPHICS_OUTPUT_PROTOCOL *mGop = NULL;
//
// Set to 100 percent so it is reset on first call.
//
UINTN mPreviousProgress = 100;
UINTN mPreviousProgress = 100;
//
// Display coordinates for the progress bar.
@@ -99,7 +99,7 @@ const EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION mProgressBarDefaultColor = {
// Set to TRUE if a valid Graphics Output Protocol is found and the progress
// bar fits under the boot logo using the current graphics mode.
//
BOOLEAN mGraphicsGood = FALSE;
BOOLEAN mGraphicsGood = FALSE;
/**
Internal function used to find the bounds of the white logo (on black or
@@ -110,7 +110,7 @@ BOOLEAN mGraphicsGood = FALSE;
**/
VOID
FindDim (
VOID
VOID
)
{
EFI_STATUS Status;
@@ -189,6 +189,7 @@ FindDim (
DEBUG ((DEBUG_INFO, "StartX found at (%d, %d) Color is: 0x%X \n", LogoX, LogoY, Pixel->Raw));
break;
}
Pixel = Pixel + Width;
}
}
@@ -204,6 +205,7 @@ FindDim (
DEBUG ((DEBUG_INFO, "EndX found at (%d, %d) Color is: 0x%X \n", LogoX, LogoY, Pixel->Raw));
break;
}
Pixel = Pixel + Width;
}
}
@@ -226,13 +228,14 @@ FindDim (
for (LogoY = 0, LogoStartY = Height; LogoY < LogoStartY; LogoY++) {
Pixel = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *)(Logo + (Width * LogoY));
for (LogoX = 0; LogoX < (INTN)Width; LogoX++) {
//not black or red
// not black or red
if ((Pixel->Raw & mLogoDetectionColorMask.Raw) != 0x0) {
LogoStartY = LogoY;
LogoEndY = LogoY; //for next loop will search from bottom side back to this row.
LogoEndY = LogoY; // for next loop will search from bottom side back to this row.
DEBUG ((DEBUG_INFO, "StartY found at (%d, %d) Color is: 0x%X \n", LogoX, LogoY, Pixel->Raw));
break;
}
Pixel++;
}
}
@@ -248,6 +251,7 @@ FindDim (
DEBUG ((DEBUG_INFO, "EndY found at (%d, %d) Color is: 0x%X \n", LogoX, LogoY, Pixel->Raw));
break;
}
Pixel++;
}
}
@@ -360,7 +364,7 @@ DisplayUpdateProgress (
Status = gBS->HandleProtocol (
gST->ConsoleOutHandle,
&gEfiGraphicsOutputProtocolGuid,
(VOID**)&mGop
(VOID **)&mGop
);
if (EFI_ERROR (Status)) {
Status = gBS->LocateProtocol (&gEfiGraphicsOutputProtocolGuid, NULL, (VOID **)&mGop);
@@ -405,7 +409,9 @@ DisplayUpdateProgress (
0
);
DEBUG ((DEBUG_VERBOSE, "Color is 0x%X\n",
DEBUG ((
DEBUG_VERBOSE,
"Color is 0x%X\n",
(Color == NULL) ? mProgressBarDefaultColor.Raw : Color->Raw
));

View File

@@ -86,15 +86,19 @@ DisplayUpdateProgress (
if (Color->Pixel.Blue >= 0x40) {
mProgressBarForegroundColor |= EFI_BLUE;
}
if (Color->Pixel.Green >= 0x40) {
mProgressBarForegroundColor |= EFI_GREEN;
}
if (Color->Pixel.Red >= 0x40) {
mProgressBarForegroundColor |= EFI_RED;
}
if (Color->Pixel.Blue >= 0xC0 || Color->Pixel.Green >= 0xC0 || Color->Pixel.Red >= 0xC0) {
if ((Color->Pixel.Blue >= 0xC0) || (Color->Pixel.Green >= 0xC0) || (Color->Pixel.Red >= 0xC0)) {
mProgressBarForegroundColor |= EFI_BRIGHT;
}
if (mProgressBarForegroundColor == EFI_BLACK) {
mProgressBarForegroundColor = EFI_WHITE;
}
@@ -147,7 +151,7 @@ DisplayUpdateProgress (
//
// Print remaining portion of progress bar
//
for (; Index < 50; Index++) {
for ( ; Index < 50; Index++) {
Print (L"%c", BLOCKELEMENT_LIGHT_SHADE);
}

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -21,7 +21,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
EFI_STATUS
EFIAPI
SupportCapsuleImage (
IN EFI_CAPSULE_HEADER *CapsuleHeader
IN EFI_CAPSULE_HEADER *CapsuleHeader
)
{
return EFI_UNSUPPORTED;
@@ -40,7 +40,7 @@ SupportCapsuleImage (
EFI_STATUS
EFIAPI
ProcessCapsuleImage (
IN EFI_CAPSULE_HEADER *CapsuleHeader
IN EFI_CAPSULE_HEADER *CapsuleHeader
)
{
return EFI_UNSUPPORTED;
@@ -85,7 +85,6 @@ ProcessCapsules (
return EFI_UNSUPPORTED;
}
/**
This routine is called to check if CapsuleOnDisk flag in OsIndications Variable
is enabled.
@@ -96,7 +95,7 @@ ProcessCapsules (
**/
BOOLEAN
EFIAPI
CoDCheckCapsuleOnDiskFlag(
CoDCheckCapsuleOnDiskFlag (
VOID
)
{
@@ -111,7 +110,7 @@ CoDCheckCapsuleOnDiskFlag(
**/
EFI_STATUS
EFIAPI
CoDClearCapsuleOnDiskFlag(
CoDClearCapsuleOnDiskFlag (
VOID
)
{
@@ -142,8 +141,8 @@ CoDClearCapsuleOnDiskFlag(
**/
EFI_STATUS
EFIAPI
CoDRelocateCapsule(
UINTN MaxRetry
CoDRelocateCapsule (
UINTN MaxRetry
)
{
return EFI_UNSUPPORTED;
@@ -163,7 +162,7 @@ CoDRelocateCapsule(
EFI_STATUS
EFIAPI
CoDRemoveTempFile (
UINTN MaxRetry
UINTN MaxRetry
)
{
return EFI_UNSUPPORTED;

View File

@@ -12,7 +12,6 @@
#ifndef _DXE_CORE_MEMORY_ALLOCATION_SERVICES_H_
#define _DXE_CORE_MEMORY_ALLOCATION_SERVICES_H_
/**
Allocates pages from the memory map.
@@ -34,14 +33,12 @@
EFI_STATUS
EFIAPI
CoreAllocatePages (
IN EFI_ALLOCATE_TYPE Type,
IN EFI_MEMORY_TYPE MemoryType,
IN UINTN NumberOfPages,
IN EFI_ALLOCATE_TYPE Type,
IN EFI_MEMORY_TYPE MemoryType,
IN UINTN NumberOfPages,
IN OUT EFI_PHYSICAL_ADDRESS *Memory
);
/**
Frees previous allocated pages.
@@ -56,11 +53,10 @@ CoreAllocatePages (
EFI_STATUS
EFIAPI
CoreFreePages (
IN EFI_PHYSICAL_ADDRESS Memory,
IN UINTN NumberOfPages
IN EFI_PHYSICAL_ADDRESS Memory,
IN UINTN NumberOfPages
);
/**
Allocate pool of a particular type.
@@ -94,7 +90,7 @@ CoreAllocatePool (
EFI_STATUS
EFIAPI
CoreFreePool (
IN VOID *Buffer
IN VOID *Buffer
);
#endif

View File

@@ -6,7 +6,6 @@
**/
#include <PiDxe.h>
#include <Guid/MemoryProfile.h>
@@ -38,14 +37,13 @@
EFI_STATUS
EFIAPI
MemoryProfileLibRecord (
IN PHYSICAL_ADDRESS CallerAddress,
IN MEMORY_PROFILE_ACTION Action,
IN EFI_MEMORY_TYPE MemoryType,
IN VOID *Buffer,
IN UINTN Size,
IN CHAR8 *ActionString OPTIONAL
IN PHYSICAL_ADDRESS CallerAddress,
IN MEMORY_PROFILE_ACTION Action,
IN EFI_MEMORY_TYPE MemoryType,
IN VOID *Buffer,
IN UINTN Size,
IN CHAR8 *ActionString OPTIONAL
)
{
return CoreUpdateProfile (CallerAddress, Action, MemoryType, Size, Buffer, ActionString);
}

View File

@@ -6,7 +6,6 @@
**/
#include <PiDxe.h>
#include <Guid/MemoryProfile.h>
@@ -36,14 +35,13 @@
EFI_STATUS
EFIAPI
MemoryProfileLibRecord (
IN PHYSICAL_ADDRESS CallerAddress,
IN MEMORY_PROFILE_ACTION Action,
IN EFI_MEMORY_TYPE MemoryType,
IN VOID *Buffer,
IN UINTN Size,
IN CHAR8 *ActionString OPTIONAL
IN PHYSICAL_ADDRESS CallerAddress,
IN MEMORY_PROFILE_ACTION Action,
IN EFI_MEMORY_TYPE MemoryType,
IN VOID *Buffer,
IN UINTN Size,
IN CHAR8 *ActionString OPTIONAL
)
{
return EFI_UNSUPPORTED;
}

View File

@@ -8,10 +8,8 @@
**/
#include <PiDxe.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/DebugLib.h>
@@ -49,7 +47,8 @@ InternalAllocatePages (
if (EFI_ERROR (Status)) {
return NULL;
}
return (VOID *) (UINTN) Memory;
return (VOID *)(UINTN)Memory;
}
/**
@@ -76,7 +75,7 @@ AllocatePages (
Buffer = InternalAllocatePages (EfiBootServicesData, Pages);
if (Buffer != NULL) {
MemoryProfileLibRecord (
(PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS(0),
(PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
MEMORY_PROFILE_ACTION_LIB_ALLOCATE_PAGES,
EfiBootServicesData,
Buffer,
@@ -84,6 +83,7 @@ AllocatePages (
NULL
);
}
return Buffer;
}
@@ -111,7 +111,7 @@ AllocateRuntimePages (
Buffer = InternalAllocatePages (EfiRuntimeServicesData, Pages);
if (Buffer != NULL) {
MemoryProfileLibRecord (
(PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS(0),
(PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_PAGES,
EfiRuntimeServicesData,
Buffer,
@@ -119,6 +119,7 @@ AllocateRuntimePages (
NULL
);
}
return Buffer;
}
@@ -146,7 +147,7 @@ AllocateReservedPages (
Buffer = InternalAllocatePages (EfiReservedMemoryType, Pages);
if (Buffer != NULL) {
MemoryProfileLibRecord (
(PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS(0),
(PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RESERVED_PAGES,
EfiReservedMemoryType,
Buffer,
@@ -154,6 +155,7 @@ AllocateReservedPages (
NULL
);
}
return Buffer;
}
@@ -184,7 +186,7 @@ FreePages (
EFI_STATUS Status;
ASSERT (Pages != 0);
Status = CoreFreePages ((EFI_PHYSICAL_ADDRESS) (UINTN) Buffer, Pages);
Status = CoreFreePages ((EFI_PHYSICAL_ADDRESS)(UINTN)Buffer, Pages);
ASSERT_EFI_ERROR (Status);
}
@@ -228,23 +230,25 @@ InternalAllocateAlignedPages (
if (Pages == 0) {
return NULL;
}
if (Alignment > EFI_PAGE_SIZE) {
//
// Calculate the total number of pages since alignment is larger than page size.
//
AlignmentMask = Alignment - 1;
RealPages = Pages + EFI_SIZE_TO_PAGES (Alignment);
AlignmentMask = Alignment - 1;
RealPages = Pages + EFI_SIZE_TO_PAGES (Alignment);
//
// Make sure that Pages plus EFI_SIZE_TO_PAGES (Alignment) does not overflow.
//
ASSERT (RealPages > Pages);
Status = CoreAllocatePages (AllocateAnyPages, MemoryType, RealPages, &Memory);
Status = CoreAllocatePages (AllocateAnyPages, MemoryType, RealPages, &Memory);
if (EFI_ERROR (Status)) {
return NULL;
}
AlignedMemory = ((UINTN) Memory + AlignmentMask) & ~AlignmentMask;
UnalignedPages = EFI_SIZE_TO_PAGES (AlignedMemory - (UINTN) Memory);
AlignedMemory = ((UINTN)Memory + AlignmentMask) & ~AlignmentMask;
UnalignedPages = EFI_SIZE_TO_PAGES (AlignedMemory - (UINTN)Memory);
if (UnalignedPages > 0) {
//
// Free first unaligned page(s).
@@ -252,6 +256,7 @@ InternalAllocateAlignedPages (
Status = CoreFreePages (Memory, UnalignedPages);
ASSERT_EFI_ERROR (Status);
}
Memory = AlignedMemory + EFI_PAGES_TO_SIZE (Pages);
UnalignedPages = RealPages - Pages - UnalignedPages;
if (UnalignedPages > 0) {
@@ -269,9 +274,11 @@ InternalAllocateAlignedPages (
if (EFI_ERROR (Status)) {
return NULL;
}
AlignedMemory = (UINTN) Memory;
AlignedMemory = (UINTN)Memory;
}
return (VOID *) AlignedMemory;
return (VOID *)AlignedMemory;
}
/**
@@ -304,7 +311,7 @@ AllocateAlignedPages (
Buffer = InternalAllocateAlignedPages (EfiBootServicesData, Pages, Alignment);
if (Buffer != NULL) {
MemoryProfileLibRecord (
(PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS(0),
(PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ALIGNED_PAGES,
EfiBootServicesData,
Buffer,
@@ -312,6 +319,7 @@ AllocateAlignedPages (
NULL
);
}
return Buffer;
}
@@ -345,7 +353,7 @@ AllocateAlignedRuntimePages (
Buffer = InternalAllocateAlignedPages (EfiRuntimeServicesData, Pages, Alignment);
if (Buffer != NULL) {
MemoryProfileLibRecord (
(PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS(0),
(PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ALIGNED_RUNTIME_PAGES,
EfiRuntimeServicesData,
Buffer,
@@ -353,6 +361,7 @@ AllocateAlignedRuntimePages (
NULL
);
}
return Buffer;
}
@@ -386,7 +395,7 @@ AllocateAlignedReservedPages (
Buffer = InternalAllocateAlignedPages (EfiReservedMemoryType, Pages, Alignment);
if (Buffer != NULL) {
MemoryProfileLibRecord (
(PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS(0),
(PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ALIGNED_RESERVED_PAGES,
EfiReservedMemoryType,
Buffer,
@@ -394,6 +403,7 @@ AllocateAlignedReservedPages (
NULL
);
}
return Buffer;
}
@@ -424,7 +434,7 @@ FreeAlignedPages (
EFI_STATUS Status;
ASSERT (Pages != 0);
Status = CoreFreePages ((EFI_PHYSICAL_ADDRESS) (UINTN) Buffer, Pages);
Status = CoreFreePages ((EFI_PHYSICAL_ADDRESS)(UINTN)Buffer, Pages);
ASSERT_EFI_ERROR (Status);
}
@@ -456,6 +466,7 @@ InternalAllocatePool (
if (EFI_ERROR (Status)) {
Memory = NULL;
}
return Memory;
}
@@ -482,7 +493,7 @@ AllocatePool (
Buffer = InternalAllocatePool (EfiBootServicesData, AllocationSize);
if (Buffer != NULL) {
MemoryProfileLibRecord (
(PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS(0),
(PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
MEMORY_PROFILE_ACTION_LIB_ALLOCATE_POOL,
EfiBootServicesData,
Buffer,
@@ -490,6 +501,7 @@ AllocatePool (
NULL
);
}
return Buffer;
}
@@ -516,7 +528,7 @@ AllocateRuntimePool (
Buffer = InternalAllocatePool (EfiRuntimeServicesData, AllocationSize);
if (Buffer != NULL) {
MemoryProfileLibRecord (
(PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS(0),
(PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_POOL,
EfiRuntimeServicesData,
Buffer,
@@ -524,6 +536,7 @@ AllocateRuntimePool (
NULL
);
}
return Buffer;
}
@@ -550,7 +563,7 @@ AllocateReservedPool (
Buffer = InternalAllocatePool (EfiReservedMemoryType, AllocationSize);
if (Buffer != NULL) {
MemoryProfileLibRecord (
(PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS(0),
(PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RESERVED_POOL,
EfiReservedMemoryType,
Buffer,
@@ -558,6 +571,7 @@ AllocateReservedPool (
NULL
);
}
return Buffer;
}
@@ -587,6 +601,7 @@ InternalAllocateZeroPool (
if (Memory != NULL) {
Memory = ZeroMem (Memory, AllocationSize);
}
return Memory;
}
@@ -614,7 +629,7 @@ AllocateZeroPool (
Buffer = InternalAllocateZeroPool (EfiBootServicesData, AllocationSize);
if (Buffer != NULL) {
MemoryProfileLibRecord (
(PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS(0),
(PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ZERO_POOL,
EfiBootServicesData,
Buffer,
@@ -622,6 +637,7 @@ AllocateZeroPool (
NULL
);
}
return Buffer;
}
@@ -649,7 +665,7 @@ AllocateRuntimeZeroPool (
Buffer = InternalAllocateZeroPool (EfiRuntimeServicesData, AllocationSize);
if (Buffer != NULL) {
MemoryProfileLibRecord (
(PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS(0),
(PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_ZERO_POOL,
EfiRuntimeServicesData,
Buffer,
@@ -657,6 +673,7 @@ AllocateRuntimeZeroPool (
NULL
);
}
return Buffer;
}
@@ -684,7 +701,7 @@ AllocateReservedZeroPool (
Buffer = InternalAllocateZeroPool (EfiReservedMemoryType, AllocationSize);
if (Buffer != NULL) {
MemoryProfileLibRecord (
(PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS(0),
(PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RESERVED_ZERO_POOL,
EfiReservedMemoryType,
Buffer,
@@ -692,6 +709,7 @@ AllocateReservedZeroPool (
NULL
);
}
return Buffer;
}
@@ -722,12 +740,13 @@ InternalAllocateCopyPool (
VOID *Memory;
ASSERT (Buffer != NULL);
ASSERT (AllocationSize <= (MAX_ADDRESS - (UINTN) Buffer + 1));
ASSERT (AllocationSize <= (MAX_ADDRESS - (UINTN)Buffer + 1));
Memory = InternalAllocatePool (PoolType, AllocationSize);
if (Memory != NULL) {
Memory = CopyMem (Memory, Buffer, AllocationSize);
Memory = CopyMem (Memory, Buffer, AllocationSize);
}
return Memory;
}
@@ -760,7 +779,7 @@ AllocateCopyPool (
NewBuffer = InternalAllocateCopyPool (EfiBootServicesData, AllocationSize, Buffer);
if (NewBuffer != NULL) {
MemoryProfileLibRecord (
(PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS(0),
(PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
MEMORY_PROFILE_ACTION_LIB_ALLOCATE_COPY_POOL,
EfiBootServicesData,
NewBuffer,
@@ -768,6 +787,7 @@ AllocateCopyPool (
NULL
);
}
return NewBuffer;
}
@@ -800,7 +820,7 @@ AllocateRuntimeCopyPool (
NewBuffer = InternalAllocateCopyPool (EfiRuntimeServicesData, AllocationSize, Buffer);
if (NewBuffer != NULL) {
MemoryProfileLibRecord (
(PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS(0),
(PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_COPY_POOL,
EfiRuntimeServicesData,
NewBuffer,
@@ -808,6 +828,7 @@ AllocateRuntimeCopyPool (
NULL
);
}
return NewBuffer;
}
@@ -840,7 +861,7 @@ AllocateReservedCopyPool (
NewBuffer = InternalAllocateCopyPool (EfiReservedMemoryType, AllocationSize, Buffer);
if (NewBuffer != NULL) {
MemoryProfileLibRecord (
(PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS(0),
(PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RESERVED_COPY_POOL,
EfiRuntimeServicesData,
NewBuffer,
@@ -848,6 +869,7 @@ AllocateReservedCopyPool (
NULL
);
}
return NewBuffer;
}
@@ -884,10 +906,11 @@ InternalReallocatePool (
VOID *NewBuffer;
NewBuffer = InternalAllocateZeroPool (PoolType, NewSize);
if (NewBuffer != NULL && OldBuffer != NULL) {
if ((NewBuffer != NULL) && (OldBuffer != NULL)) {
CopyMem (NewBuffer, OldBuffer, MIN (OldSize, NewSize));
FreePool (OldBuffer);
}
return NewBuffer;
}
@@ -925,7 +948,7 @@ ReallocatePool (
Buffer = InternalReallocatePool (EfiBootServicesData, OldSize, NewSize, OldBuffer);
if (Buffer != NULL) {
MemoryProfileLibRecord (
(PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS(0),
(PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
MEMORY_PROFILE_ACTION_LIB_REALLOCATE_POOL,
EfiBootServicesData,
Buffer,
@@ -933,6 +956,7 @@ ReallocatePool (
NULL
);
}
return Buffer;
}
@@ -970,7 +994,7 @@ ReallocateRuntimePool (
Buffer = InternalReallocatePool (EfiRuntimeServicesData, OldSize, NewSize, OldBuffer);
if (Buffer != NULL) {
MemoryProfileLibRecord (
(PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS(0),
(PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
MEMORY_PROFILE_ACTION_LIB_REALLOCATE_RUNTIME_POOL,
EfiRuntimeServicesData,
Buffer,
@@ -978,6 +1002,7 @@ ReallocateRuntimePool (
NULL
);
}
return Buffer;
}
@@ -1015,7 +1040,7 @@ ReallocateReservedPool (
Buffer = InternalReallocatePool (EfiReservedMemoryType, OldSize, NewSize, OldBuffer);
if (Buffer != NULL) {
MemoryProfileLibRecord (
(PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS(0),
(PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
MEMORY_PROFILE_ACTION_LIB_REALLOCATE_RESERVED_POOL,
EfiReservedMemoryType,
Buffer,
@@ -1023,6 +1048,7 @@ ReallocateReservedPool (
NULL
);
}
return Buffer;
}
@@ -1043,12 +1069,11 @@ ReallocateReservedPool (
VOID
EFIAPI
FreePool (
IN VOID *Buffer
IN VOID *Buffer
)
{
EFI_STATUS Status;
EFI_STATUS Status;
Status = CoreFreePool (Buffer);
ASSERT_EFI_ERROR (Status);
}

View File

@@ -12,7 +12,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#ifndef _DXE_CORE_PERFORMANCE_LIB_INTERNAL_H_
#define _DXE_CORE_PERFORMANCE_LIB_INTERNAL_H_
#include <PiDxe.h>
#include <Guid/Performance.h>
@@ -65,7 +64,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
EFI_STATUS
EFIAPI
CreatePerformanceMeasurement(
CreatePerformanceMeasurement (
IN CONST VOID *CallerIdentifier OPTIONAL,
IN CONST VOID *Guid OPTIONAL,
IN CONST CHAR8 *String OPTIONAL,

View File

@@ -21,13 +21,13 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
/// CRC32 Guided Section header
///
typedef struct {
EFI_GUID_DEFINED_SECTION GuidedSectionHeader; ///< EFI guided section header
UINT32 CRC32Checksum; ///< 32bit CRC check sum
EFI_GUID_DEFINED_SECTION GuidedSectionHeader; ///< EFI guided section header
UINT32 CRC32Checksum; ///< 32bit CRC check sum
} CRC32_SECTION_HEADER;
typedef struct {
EFI_GUID_DEFINED_SECTION2 GuidedSectionHeader; ///< EFI guided section header
UINT32 CRC32Checksum; ///< 32bit CRC check sum
EFI_GUID_DEFINED_SECTION2 GuidedSectionHeader; ///< EFI guided section header
UINT32 CRC32Checksum; ///< 32bit CRC check sum
} CRC32_SECTION2_HEADER;
/**
@@ -60,31 +60,37 @@ Crc32GuidedSectionGetInfo (
// Check whether the input guid section is recognized.
//
if (!CompareGuid (
&gEfiCrc32GuidedSectionExtractionGuid,
&(((EFI_GUID_DEFINED_SECTION2 *) InputSection)->SectionDefinitionGuid))) {
&gEfiCrc32GuidedSectionExtractionGuid,
&(((EFI_GUID_DEFINED_SECTION2 *)InputSection)->SectionDefinitionGuid)
))
{
return EFI_INVALID_PARAMETER;
}
//
// Retrieve the size and attribute of the input section data.
//
*SectionAttribute = ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->Attributes;
*SectionAttribute = ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->Attributes;
*ScratchBufferSize = 0;
*OutputBufferSize = SECTION2_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->DataOffset;
*OutputBufferSize = SECTION2_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->DataOffset;
} else {
//
// Check whether the input guid section is recognized.
//
if (!CompareGuid (
&gEfiCrc32GuidedSectionExtractionGuid,
&(((EFI_GUID_DEFINED_SECTION *) InputSection)->SectionDefinitionGuid))) {
&gEfiCrc32GuidedSectionExtractionGuid,
&(((EFI_GUID_DEFINED_SECTION *)InputSection)->SectionDefinitionGuid)
))
{
return EFI_INVALID_PARAMETER;
}
//
// Retrieve the size and attribute of the input section data.
//
*SectionAttribute = ((EFI_GUID_DEFINED_SECTION *) InputSection)->Attributes;
*SectionAttribute = ((EFI_GUID_DEFINED_SECTION *)InputSection)->Attributes;
*ScratchBufferSize = 0;
*OutputBufferSize = SECTION_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION *) InputSection)->DataOffset;
*OutputBufferSize = SECTION_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION *)InputSection)->DataOffset;
}
return EFI_SUCCESS;
@@ -116,55 +122,59 @@ Crc32GuidedSectionHandler (
OUT UINT32 *AuthenticationStatus
)
{
EFI_STATUS Status;
UINT32 SectionCrc32Checksum;
UINT32 Crc32Checksum;
UINT32 OutputBufferSize;
VOID *DummyInterface;
EFI_STATUS Status;
UINT32 SectionCrc32Checksum;
UINT32 Crc32Checksum;
UINT32 OutputBufferSize;
VOID *DummyInterface;
if (IS_SECTION2 (InputSection)) {
//
// Check whether the input guid section is recognized.
//
if (!CompareGuid (
&gEfiCrc32GuidedSectionExtractionGuid,
&(((EFI_GUID_DEFINED_SECTION2 *) InputSection)->SectionDefinitionGuid))) {
&gEfiCrc32GuidedSectionExtractionGuid,
&(((EFI_GUID_DEFINED_SECTION2 *)InputSection)->SectionDefinitionGuid)
))
{
return EFI_INVALID_PARAMETER;
}
//
// Get section Crc32 checksum.
//
SectionCrc32Checksum = ((CRC32_SECTION2_HEADER *) InputSection)->CRC32Checksum;
*OutputBuffer = (UINT8 *) InputSection + ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->DataOffset;
OutputBufferSize = SECTION2_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->DataOffset;
SectionCrc32Checksum = ((CRC32_SECTION2_HEADER *)InputSection)->CRC32Checksum;
*OutputBuffer = (UINT8 *)InputSection + ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->DataOffset;
OutputBufferSize = SECTION2_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->DataOffset;
//
// Implicitly CRC32 GUIDed section should have STATUS_VALID bit set
//
ASSERT (((EFI_GUID_DEFINED_SECTION2 *) InputSection)->Attributes & EFI_GUIDED_SECTION_AUTH_STATUS_VALID);
ASSERT (((EFI_GUID_DEFINED_SECTION2 *)InputSection)->Attributes & EFI_GUIDED_SECTION_AUTH_STATUS_VALID);
*AuthenticationStatus = EFI_AUTH_STATUS_IMAGE_SIGNED;
} else {
//
// Check whether the input guid section is recognized.
//
if (!CompareGuid (
&gEfiCrc32GuidedSectionExtractionGuid,
&(((EFI_GUID_DEFINED_SECTION *) InputSection)->SectionDefinitionGuid))) {
&gEfiCrc32GuidedSectionExtractionGuid,
&(((EFI_GUID_DEFINED_SECTION *)InputSection)->SectionDefinitionGuid)
))
{
return EFI_INVALID_PARAMETER;
}
//
// Get section Crc32 checksum.
//
SectionCrc32Checksum = ((CRC32_SECTION_HEADER *) InputSection)->CRC32Checksum;
*OutputBuffer = (UINT8 *) InputSection + ((EFI_GUID_DEFINED_SECTION *) InputSection)->DataOffset;
OutputBufferSize = SECTION_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION *) InputSection)->DataOffset;
SectionCrc32Checksum = ((CRC32_SECTION_HEADER *)InputSection)->CRC32Checksum;
*OutputBuffer = (UINT8 *)InputSection + ((EFI_GUID_DEFINED_SECTION *)InputSection)->DataOffset;
OutputBufferSize = SECTION_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION *)InputSection)->DataOffset;
//
// Implicitly CRC32 GUIDed section should have STATUS_VALID bit set
//
ASSERT (((EFI_GUID_DEFINED_SECTION *) InputSection)->Attributes & EFI_GUIDED_SECTION_AUTH_STATUS_VALID);
ASSERT (((EFI_GUID_DEFINED_SECTION *)InputSection)->Attributes & EFI_GUIDED_SECTION_AUTH_STATUS_VALID);
*AuthenticationStatus = EFI_AUTH_STATUS_IMAGE_SIGNED;
}
@@ -222,8 +232,8 @@ DxeCrc32GuidedSectionExtractLibConstructor (
)
{
return ExtractGuidedSectionRegisterHandlers (
&gEfiCrc32GuidedSectionExtractionGuid,
Crc32GuidedSectionGetInfo,
Crc32GuidedSectionHandler
);
&gEfiCrc32GuidedSectionExtractionGuid,
Crc32GuidedSectionGetInfo,
Crc32GuidedSectionHandler
);
}

View File

@@ -78,7 +78,7 @@ EFI_DEBUG_MASK_PROTOCOL mDebugMaskProtocol = {
/// This variable prevents the EFI Variable Services from being called fort
/// every DEBUG() macro.
///
BOOLEAN mGlobalErrorLevelInitialized = FALSE;
BOOLEAN mGlobalErrorLevelInitialized = FALSE;
///
/// Global variable that contains the current debug error level mask for the
@@ -90,7 +90,7 @@ BOOLEAN mGlobalErrorLevelInitialized = FALSE;
/// Debug Mask Protocol SetDebugMask() service is called, then that overrides
/// the PcdDebugPrintErrorLevel and the EFI Variable setting.
///
UINT32 mDebugPrintErrorLevel = 0;
UINT32 mDebugPrintErrorLevel = 0;
///
/// Global variable that is used to cache a pointer to the EFI System Table
@@ -98,7 +98,7 @@ UINT32 mDebugPrintErrorLevel = 0;
/// the global debug print error level mask value. The UefiBootServicesTableLib
/// is not used to prevent a circular dependency between these libraries.
///
EFI_SYSTEM_TABLE *mSystemTable = NULL;
EFI_SYSTEM_TABLE *mSystemTable = NULL;
/**
The constructor function caches the PCI Express Base Address and creates a
@@ -118,7 +118,7 @@ DxeDebugPrintErrorLevelLibConstructor (
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;
EFI_STATUS Status;
//
// Initialize the error level mask from PCD setting.
@@ -129,11 +129,12 @@ DxeDebugPrintErrorLevelLibConstructor (
// Install Debug Mask Protocol onto ImageHandle
//
mSystemTable = SystemTable;
Status = SystemTable->BootServices->InstallMultipleProtocolInterfaces (
&ImageHandle,
&gEfiDebugMaskProtocolGuid, &mDebugMaskProtocol,
NULL
);
Status = SystemTable->BootServices->InstallMultipleProtocolInterfaces (
&ImageHandle,
&gEfiDebugMaskProtocolGuid,
&mDebugMaskProtocol,
NULL
);
//
// Attempt to retrieve the global debug print error level mask from the EFI Variable
@@ -170,7 +171,8 @@ DxeDebugPrintErrorLevelLibDestructor (
//
return SystemTable->BootServices->UninstallMultipleProtocolInterfaces (
ImageHandle,
&gEfiDebugMaskProtocolGuid, &mDebugMaskProtocol,
&gEfiDebugMaskProtocolGuid,
&mDebugMaskProtocol,
NULL
);
}
@@ -219,14 +221,14 @@ GetDebugPrintErrorLevel (
// Attempt to retrieve the global debug print error level mask from the
// EFI Variable
//
Size = sizeof (GlobalErrorLevel);
Size = sizeof (GlobalErrorLevel);
Status = mSystemTable->RuntimeServices->GetVariable (
DEBUG_MASK_VARIABLE_NAME,
&gEfiGenericVariableGuid,
NULL,
&Size,
&GlobalErrorLevel
);
DEBUG_MASK_VARIABLE_NAME,
&gEfiGenericVariableGuid,
NULL,
&Size,
&GlobalErrorLevel
);
if (Status != EFI_NOT_AVAILABLE_YET) {
//
// If EFI Variable Services are available, then set a flag so the EFI
@@ -248,7 +250,7 @@ GetDebugPrintErrorLevel (
Hob = GetFirstGuidHob (&gEfiGenericVariableGuid);
if (Hob != NULL) {
if (GET_GUID_HOB_DATA_SIZE (Hob) == sizeof (UINT32)) {
mDebugPrintErrorLevel = *(UINT32 *)GET_GUID_HOB_DATA (Hob);
mDebugPrintErrorLevel = *(UINT32 *)GET_GUID_HOB_DATA (Hob);
mGlobalErrorLevelInitialized = TRUE;
}
}
@@ -296,25 +298,26 @@ SetDebugPrintErrorLevel (
// Attempt to store the global debug print error level mask in an EFI Variable
//
GlobalErrorLevel = (UINTN)ErrorLevel;
Size = sizeof (GlobalErrorLevel);
Status = mSystemTable->RuntimeServices->SetVariable (
DEBUG_MASK_VARIABLE_NAME,
&gEfiGenericVariableGuid,
(EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS),
Size,
&GlobalErrorLevel
);
Size = sizeof (GlobalErrorLevel);
Status = mSystemTable->RuntimeServices->SetVariable (
DEBUG_MASK_VARIABLE_NAME,
&gEfiGenericVariableGuid,
(EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS),
Size,
&GlobalErrorLevel
);
if (!EFI_ERROR (Status)) {
//
// If the EFI Variable was updated, then update the mask value for this
// module and return TRUE.
//
mGlobalErrorLevelInitialized = TRUE;
mDebugPrintErrorLevel = ErrorLevel;
mDebugPrintErrorLevel = ErrorLevel;
return TRUE;
}
}
}
//
// Return FALSE since the EFI Variable could not be updated.
//

View File

@@ -20,7 +20,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Library/BaseLib.h>
#include <Library/DebugLib.h>
EFI_FILE_EXPLORER_PROTOCOL *mProtocol = NULL;
EFI_FILE_EXPLORER_PROTOCOL *mProtocol = NULL;
/**
The constructor function caches the pointer to file explorer protocol.
@@ -37,16 +37,16 @@ EFI_FILE_EXPLORER_PROTOCOL *mProtocol = NULL;
EFI_STATUS
EFIAPI
FileExplorerConstructor (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;
EFI_STATUS Status;
Status = SystemTable->BootServices->LocateProtocol (
&gEfiFileExplorerProtocolGuid,
NULL,
(VOID**) &mProtocol
(VOID **)&mProtocol
);
ASSERT_EFI_ERROR (Status);
ASSERT (mProtocol != NULL);

View File

@@ -11,7 +11,7 @@
#include <Library/UefiBootServicesTableLib.h>
#include <Library/DebugLib.h>
IPMI_PROTOCOL *mIpmiProtocol = NULL;
IPMI_PROTOCOL *mIpmiProtocol = NULL;
/**
This service enables submitting commands via Ipmi.
@@ -34,22 +34,22 @@ IPMI_PROTOCOL *mIpmiProtocol = NULL;
EFI_STATUS
EFIAPI
IpmiSubmitCommand (
IN UINT8 NetFunction,
IN UINT8 Command,
IN UINT8 *RequestData,
IN UINT32 RequestDataSize,
OUT UINT8 *ResponseData,
IN OUT UINT32 *ResponseDataSize
IN UINT8 NetFunction,
IN UINT8 Command,
IN UINT8 *RequestData,
IN UINT32 RequestDataSize,
OUT UINT8 *ResponseData,
IN OUT UINT32 *ResponseDataSize
)
{
EFI_STATUS Status;
if (mIpmiProtocol == NULL) {
Status = gBS->LocateProtocol (
&gIpmiProtocolGuid,
NULL,
(VOID **) &mIpmiProtocol
);
&gIpmiProtocolGuid,
NULL,
(VOID **)&mIpmiProtocol
);
if (EFI_ERROR (Status)) {
//
// Dxe Ipmi Protocol is not installed. So, IPMI device is not present.
@@ -71,5 +71,6 @@ IpmiSubmitCommand (
if (EFI_ERROR (Status)) {
return Status;
}
return EFI_SUCCESS;
}

View File

@@ -11,7 +11,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <PiDxe.h>
#include <Guid/PerformanceMeasurement.h>
@@ -24,7 +23,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
//
// The cached Performance Protocol and PerformanceEx Protocol interface.
//
EDKII_PERFORMANCE_MEASUREMENT_PROTOCOL *mPerformanceMeasurement = NULL;
EDKII_PERFORMANCE_MEASUREMENT_PROTOCOL *mPerformanceMeasurement = NULL;
/**
The function caches the pointers to PerformanceEx protocol and Performance Protocol.
@@ -40,14 +39,14 @@ GetPerformanceMeasurementProtocol (
VOID
)
{
EFI_STATUS Status;
EDKII_PERFORMANCE_MEASUREMENT_PROTOCOL *PerformanceMeasurement;
EFI_STATUS Status;
EDKII_PERFORMANCE_MEASUREMENT_PROTOCOL *PerformanceMeasurement;
if (mPerformanceMeasurement != NULL) {
return EFI_SUCCESS;
}
Status = gBS->LocateProtocol (&gEdkiiPerformanceMeasurementProtocolGuid, NULL, (VOID **) &PerformanceMeasurement);
Status = gBS->LocateProtocol (&gEdkiiPerformanceMeasurementProtocolGuid, NULL, (VOID **)&PerformanceMeasurement);
if (!EFI_ERROR (Status)) {
ASSERT (PerformanceMeasurement != NULL);
//
@@ -92,8 +91,8 @@ StartPerformanceMeasurementEx (
IN UINT32 Identifier
)
{
EFI_STATUS Status;
CONST CHAR8* String;
EFI_STATUS Status;
CONST CHAR8 *String;
Status = GetPerformanceMeasurementProtocol ();
if (EFI_ERROR (Status)) {
@@ -114,7 +113,7 @@ StartPerformanceMeasurementEx (
ASSERT (FALSE);
}
return (RETURN_STATUS) Status;
return (RETURN_STATUS)Status;
}
/**
@@ -151,8 +150,8 @@ EndPerformanceMeasurementEx (
IN UINT32 Identifier
)
{
EFI_STATUS Status;
CONST CHAR8* String;
EFI_STATUS Status;
CONST CHAR8 *String;
Status = GetPerformanceMeasurementProtocol ();
if (EFI_ERROR (Status)) {
@@ -173,7 +172,7 @@ EndPerformanceMeasurementEx (
ASSERT (FALSE);
}
return (RETURN_STATUS) Status;
return (RETURN_STATUS)Status;
}
/**
@@ -220,17 +219,16 @@ EndPerformanceMeasurementEx (
UINTN
EFIAPI
GetPerformanceMeasurementEx (
IN UINTN LogEntryKey,
OUT CONST VOID **Handle,
OUT CONST CHAR8 **Token,
OUT CONST CHAR8 **Module,
OUT UINT64 *StartTimeStamp,
OUT UINT64 *EndTimeStamp,
OUT UINT32 *Identifier
IN UINTN LogEntryKey,
OUT CONST VOID **Handle,
OUT CONST CHAR8 **Token,
OUT CONST CHAR8 **Module,
OUT UINT64 *StartTimeStamp,
OUT UINT64 *EndTimeStamp,
OUT UINT32 *Identifier
)
{
return 0;
}
/**
@@ -341,12 +339,12 @@ EndPerformanceMeasurement (
UINTN
EFIAPI
GetPerformanceMeasurement (
IN UINTN LogEntryKey,
OUT CONST VOID **Handle,
OUT CONST CHAR8 **Token,
OUT CONST CHAR8 **Module,
OUT UINT64 *StartTimeStamp,
OUT UINT64 *EndTimeStamp
IN UINTN LogEntryKey,
OUT CONST VOID **Handle,
OUT CONST CHAR8 **Token,
OUT CONST CHAR8 **Module,
OUT UINT64 *StartTimeStamp,
OUT UINT64 *EndTimeStamp
)
{
return 0;
@@ -370,7 +368,7 @@ PerformanceMeasurementEnabled (
VOID
)
{
return (BOOLEAN) ((PcdGet8(PcdPerformanceLibraryPropertyMask) & PERFORMANCE_LIBRARY_PROPERTY_MEASUREMENT_ENABLED) != 0);
return (BOOLEAN)((PcdGet8 (PcdPerformanceLibraryPropertyMask) & PERFORMANCE_LIBRARY_PROPERTY_MEASUREMENT_ENABLED) != 0);
}
/**
@@ -394,7 +392,7 @@ LogPerformanceMeasurement (
IN CONST VOID *CallerIdentifier,
IN CONST VOID *Guid OPTIONAL,
IN CONST CHAR8 *String OPTIONAL,
IN UINT64 Address OPTIONAL,
IN UINT64 Address OPTIONAL,
IN UINT32 Identifier
)
{
@@ -411,7 +409,7 @@ LogPerformanceMeasurement (
ASSERT (FALSE);
}
return (RETURN_STATUS) Status;
return (RETURN_STATUS)Status;
}
/**
@@ -429,14 +427,15 @@ LogPerformanceMeasurement (
BOOLEAN
EFIAPI
LogPerformanceMeasurementEnabled (
IN CONST UINTN Type
IN CONST UINTN Type
)
{
//
// When Performance measurement is enabled and the type is not filtered, the performance can be logged.
//
if (PerformanceMeasurementEnabled () && (PcdGet8(PcdPerformanceLibraryPropertyMask) & Type) == 0) {
if (PerformanceMeasurementEnabled () && ((PcdGet8 (PcdPerformanceLibraryPropertyMask) & Type) == 0)) {
return TRUE;
}
return FALSE;
}

File diff suppressed because it is too large Load Diff

View File

@@ -47,8 +47,8 @@ InternalGetReportStatusCode (
//
// Check gBS just in case ReportStatusCode is called before gBS is initialized.
//
if (gBS != NULL && gBS->LocateProtocol != NULL) {
Status = gBS->LocateProtocol (&gEfiStatusCodeRuntimeProtocolGuid, NULL, (VOID**) &mReportStatusCodeLibStatusCodeProtocol);
if ((gBS != NULL) && (gBS->LocateProtocol != NULL)) {
Status = gBS->LocateProtocol (&gEfiStatusCodeRuntimeProtocolGuid, NULL, (VOID **)&mReportStatusCodeLibStatusCodeProtocol);
if (EFI_ERROR (Status)) {
mReportStatusCodeLibStatusCodeProtocol = NULL;
}
@@ -80,16 +80,17 @@ InternalGetReportStatusCode (
**/
EFI_STATUS
InternalReportStatusCode (
IN EFI_STATUS_CODE_TYPE Type,
IN EFI_STATUS_CODE_VALUE Value,
IN UINT32 Instance,
IN CONST EFI_GUID *CallerId OPTIONAL,
IN EFI_STATUS_CODE_DATA *Data OPTIONAL
IN EFI_STATUS_CODE_TYPE Type,
IN EFI_STATUS_CODE_VALUE Value,
IN UINT32 Instance,
IN CONST EFI_GUID *CallerId OPTIONAL,
IN EFI_STATUS_CODE_DATA *Data OPTIONAL
)
{
if ((ReportProgressCodeEnabled() && ((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) ||
(ReportErrorCodeEnabled() && ((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE) ||
(ReportDebugCodeEnabled() && ((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_DEBUG_CODE)) {
if ((ReportProgressCodeEnabled () && (((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE)) ||
(ReportErrorCodeEnabled () && (((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE)) ||
(ReportDebugCodeEnabled () && (((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_DEBUG_CODE)))
{
//
// If mReportStatusCodeLibStatusCodeProtocol is NULL, then check if Report Status Code Protocol is available in system.
//
@@ -107,7 +108,6 @@ InternalReportStatusCode (
return EFI_UNSUPPORTED;
}
/**
Converts a status code to an 8-bit POST code value.
@@ -146,15 +146,16 @@ CodeTypeToPostCode (
// Convert Value to an 8 bit post code
//
if (((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) ||
((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE) ) {
*PostCode = (UINT8) ((((Value & EFI_STATUS_CODE_CLASS_MASK) >> 24) << 5) |
(((Value & EFI_STATUS_CODE_SUBCLASS_MASK) >> 16) & 0x1f));
((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE))
{
*PostCode = (UINT8)((((Value & EFI_STATUS_CODE_CLASS_MASK) >> 24) << 5) |
(((Value & EFI_STATUS_CODE_SUBCLASS_MASK) >> 16) & 0x1f));
return TRUE;
}
return FALSE;
}
/**
Extracts ASSERT() information from a status code structure.
@@ -208,17 +209,18 @@ ReportStatusCodeExtractAssertInfo (
if (((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE) &&
((CodeType & EFI_STATUS_CODE_SEVERITY_MASK) == EFI_ERROR_UNRECOVERED) &&
((Value & EFI_STATUS_CODE_OPERATION_MASK) == EFI_SW_EC_ILLEGAL_SOFTWARE_STATE)) {
((Value & EFI_STATUS_CODE_OPERATION_MASK) == EFI_SW_EC_ILLEGAL_SOFTWARE_STATE))
{
AssertData = (EFI_DEBUG_ASSERT_DATA *)(Data + 1);
*Filename = (CHAR8 *)(AssertData + 1);
*Description = *Filename + AsciiStrLen (*Filename) + 1;
*LineNumber = AssertData->LineNumber;
return TRUE;
}
return FALSE;
}
/**
Extracts DEBUG() information from a status code structure.
@@ -287,13 +289,12 @@ ReportStatusCodeExtractDebugInfo (
// 64-bit aligned is a must, otherwise retrieving 64-bit parameter from BASE_LIST will
// cause unalignment exception.
//
*Marker = (BASE_LIST) (DebugInfo + 1);
*Marker = (BASE_LIST)(DebugInfo + 1);
*Format = (CHAR8 *)(((UINT64 *)*Marker) + 12);
return TRUE;
}
/**
Reports a status code.
@@ -325,7 +326,6 @@ ReportStatusCode (
return InternalReportStatusCode (Type, Value, 0, &gEfiCallerIdGuid, NULL);
}
/**
Reports a status code with a Device Path Protocol as the extended data.
@@ -371,7 +371,6 @@ ReportStatusCodeWithDevicePath (
);
}
/**
Reports a status code with an extended data buffer.
@@ -427,7 +426,6 @@ ReportStatusCodeWithExtendedData (
);
}
/**
Reports a status code with full parameters.
@@ -496,7 +494,7 @@ ReportStatusCodeEx (
//
StatusCodeData = (EFI_STATUS_CODE_DATA *)Buffer;
} else {
if (gBS == NULL || gBS->AllocatePool == NULL || gBS->FreePool == NULL) {
if ((gBS == NULL) || (gBS->AllocatePool == NULL) || (gBS->FreePool == NULL)) {
return EFI_UNSUPPORTED;
}
@@ -523,11 +521,12 @@ ReportStatusCodeEx (
//
// Fill in the extended data header
//
StatusCodeData->HeaderSize = (UINT16) sizeof (EFI_STATUS_CODE_DATA);
StatusCodeData->Size = (UINT16) ExtendedDataSize;
StatusCodeData->HeaderSize = (UINT16)sizeof (EFI_STATUS_CODE_DATA);
StatusCodeData->Size = (UINT16)ExtendedDataSize;
if (ExtendedDataGuid == NULL) {
ExtendedDataGuid = &gEfiStatusCodeSpecificDataGuid;
}
CopyGuid (&StatusCodeData->Type, ExtendedDataGuid);
//
@@ -543,6 +542,7 @@ ReportStatusCodeEx (
if (CallerId == NULL) {
CallerId = &gEfiCallerIdGuid;
}
Status = InternalReportStatusCode (Type, Value, Instance, CallerId, StatusCodeData);
//
@@ -555,7 +555,6 @@ ReportStatusCodeEx (
return Status;
}
/**
Returns TRUE if status codes of type EFI_PROGRESS_CODE are enabled
@@ -574,10 +573,9 @@ ReportProgressCodeEnabled (
VOID
)
{
return (BOOLEAN) ((PcdGet8 (PcdReportStatusCodePropertyMask) & REPORT_STATUS_CODE_PROPERTY_PROGRESS_CODE_ENABLED) != 0);
return (BOOLEAN)((PcdGet8 (PcdReportStatusCodePropertyMask) & REPORT_STATUS_CODE_PROPERTY_PROGRESS_CODE_ENABLED) != 0);
}
/**
Returns TRUE if status codes of type EFI_ERROR_CODE are enabled
@@ -596,10 +594,9 @@ ReportErrorCodeEnabled (
VOID
)
{
return (BOOLEAN) ((PcdGet8 (PcdReportStatusCodePropertyMask) & REPORT_STATUS_CODE_PROPERTY_ERROR_CODE_ENABLED) != 0);
return (BOOLEAN)((PcdGet8 (PcdReportStatusCodePropertyMask) & REPORT_STATUS_CODE_PROPERTY_ERROR_CODE_ENABLED) != 0);
}
/**
Returns TRUE if status codes of type EFI_DEBUG_CODE are enabled
@@ -618,5 +615,5 @@ ReportDebugCodeEnabled (
VOID
)
{
return (BOOLEAN) ((PcdGet8 (PcdReportStatusCodePropertyMask) & REPORT_STATUS_CODE_PROPERTY_DEBUG_CODE_ENABLED) != 0);
return (BOOLEAN)((PcdGet8 (PcdReportStatusCodePropertyMask) & REPORT_STATUS_CODE_PROPERTY_DEBUG_CODE_ENABLED) != 0);
}

View File

@@ -71,8 +71,8 @@ ResetShutdown (
VOID
EFIAPI
ResetPlatformSpecific (
IN UINTN DataSize,
IN VOID *ResetData
IN UINTN DataSize,
IN VOID *ResetData
)
{
gRT->ResetSystem (EfiResetPlatformSpecific, EFI_SUCCESS, DataSize, ResetData);
@@ -93,10 +93,10 @@ ResetPlatformSpecific (
VOID
EFIAPI
ResetSystem (
IN EFI_RESET_TYPE ResetType,
IN EFI_STATUS ResetStatus,
IN UINTN DataSize,
IN VOID *ResetData OPTIONAL
IN EFI_RESET_TYPE ResetType,
IN EFI_STATUS ResetStatus,
IN UINTN DataSize,
IN VOID *ResetData OPTIONAL
)
{
gRT->ResetSystem (ResetType, ResetStatus, DataSize, ResetData);

View File

@@ -22,8 +22,8 @@
#include <Library/UnitTestLib.h>
#include <Library/ResetSystemLib.h>
#define UNIT_TEST_APP_NAME "DxeResetSystemLib Unit Tests"
#define UNIT_TEST_APP_VERSION "1.0"
#define UNIT_TEST_APP_NAME "DxeResetSystemLib Unit Tests"
#define UNIT_TEST_APP_VERSION "1.0"
/**
Resets the entire platform.
@@ -44,10 +44,10 @@ STATIC
VOID
EFIAPI
MockResetSystem (
IN EFI_RESET_TYPE ResetType,
IN EFI_STATUS ResetStatus,
IN UINTN DataSize,
IN VOID *ResetData OPTIONAL
IN EFI_RESET_TYPE ResetType,
IN EFI_STATUS ResetStatus,
IN UINTN DataSize,
IN VOID *ResetData OPTIONAL
)
{
check_expected_ptr (ResetType);
@@ -256,15 +256,15 @@ UnitTestingEntry (
Framework = NULL;
DEBUG(( DEBUG_INFO, "%a v%a\n", UNIT_TEST_APP_NAME, UNIT_TEST_APP_VERSION ));
DEBUG ((DEBUG_INFO, "%a v%a\n", UNIT_TEST_APP_NAME, UNIT_TEST_APP_VERSION));
//
// Start setting up the test framework for running the tests.
//
Status = InitUnitTestFramework (&Framework, UNIT_TEST_APP_NAME, gEfiCallerBaseName, UNIT_TEST_APP_VERSION);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "Failed in InitUnitTestFramework. Status = %r\n", Status));
goto EXIT;
DEBUG ((DEBUG_ERROR, "Failed in InitUnitTestFramework. Status = %r\n", Status));
goto EXIT;
}
//
@@ -304,8 +304,8 @@ EXIT:
**/
int
main (
int argc,
char *argv[]
int argc,
char *argv[]
)
{
return UnitTestingEntry ();

View File

@@ -15,7 +15,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Library/DevicePathLib.h>
#include <Library/UefiBootServicesTableLib.h>
#define SECURITY_HANDLER_TABLE_SIZE 0x10
#define SECURITY_HANDLER_TABLE_SIZE 0x10
//
// Secruity Operation on Image and none Image.
@@ -27,24 +27,24 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
| EFI_AUTH_OPERATION_AUTHENTICATION_STATE)
typedef struct {
UINT32 SecurityOperation;
SECURITY_FILE_AUTHENTICATION_STATE_HANDLER SecurityHandler;
UINT32 SecurityOperation;
SECURITY_FILE_AUTHENTICATION_STATE_HANDLER SecurityHandler;
} SECURITY_INFO;
typedef struct {
UINT32 Security2Operation;
SECURITY2_FILE_AUTHENTICATION_HANDLER Security2Handler;
UINT32 Security2Operation;
SECURITY2_FILE_AUTHENTICATION_HANDLER Security2Handler;
} SECURITY2_INFO;
UINT32 mCurrentAuthOperation = 0;
UINT32 mNumberOfSecurityHandler = 0;
UINT32 mMaxNumberOfSecurityHandler = 0;
SECURITY_INFO *mSecurityTable = NULL;
UINT32 mCurrentAuthOperation = 0;
UINT32 mNumberOfSecurityHandler = 0;
UINT32 mMaxNumberOfSecurityHandler = 0;
SECURITY_INFO *mSecurityTable = NULL;
UINT32 mCurrentAuthOperation2 = 0;
UINT32 mNumberOfSecurity2Handler = 0;
UINT32 mMaxNumberOfSecurity2Handler = 0;
SECURITY2_INFO *mSecurity2Table = NULL;
UINT32 mCurrentAuthOperation2 = 0;
UINT32 mNumberOfSecurity2Handler = 0;
UINT32 mMaxNumberOfSecurity2Handler = 0;
SECURITY2_INFO *mSecurity2Table = NULL;
/**
Reallocates more global memory to store the registered Handler list.
@@ -93,8 +93,8 @@ ReallocateSecurityHandlerTable (
**/
BOOLEAN
CheckAuthenticationOperation (
IN UINT32 CurrentAuthOperation,
IN UINT32 CheckAuthOperation
IN UINT32 CurrentAuthOperation,
IN UINT32 CheckAuthOperation
)
{
//
@@ -108,7 +108,8 @@ CheckAuthenticationOperation (
//
if ((CurrentAuthOperation & EFI_AUTH_OPERATION_MEASURE_IMAGE) == EFI_AUTH_OPERATION_MEASURE_IMAGE) {
if (((CheckAuthOperation & EFI_AUTH_OPERATION_MEASURE_IMAGE) == EFI_AUTH_OPERATION_MEASURE_IMAGE) ||
((CheckAuthOperation & EFI_AUTH_IMAGE_OPERATION_MASK) == EFI_AUTH_OPERATION_NONE)) {
((CheckAuthOperation & EFI_AUTH_IMAGE_OPERATION_MASK) == EFI_AUTH_OPERATION_NONE))
{
return TRUE;
} else {
return FALSE;
@@ -160,7 +161,7 @@ RegisterSecurityHandler (
//
// Allocate more resources for new handler.
//
Status = ReallocateSecurityHandlerTable();
Status = ReallocateSecurityHandlerTable ();
ASSERT_EFI_ERROR (Status);
}
@@ -169,7 +170,7 @@ RegisterSecurityHandler (
//
mSecurityTable[mNumberOfSecurityHandler].SecurityOperation = AuthenticationOperation;
mSecurityTable[mNumberOfSecurityHandler].SecurityHandler = SecurityHandler;
mNumberOfSecurityHandler ++;
mNumberOfSecurityHandler++;
return EFI_SUCCESS;
}
@@ -208,18 +209,18 @@ RegisterSecurityHandler (
EFI_STATUS
EFIAPI
ExecuteSecurityHandlers (
IN UINT32 AuthenticationStatus,
IN CONST EFI_DEVICE_PATH_PROTOCOL *FilePath
IN UINT32 AuthenticationStatus,
IN CONST EFI_DEVICE_PATH_PROTOCOL *FilePath
)
{
UINT32 Index;
EFI_STATUS Status;
UINT32 HandlerAuthenticationStatus;
VOID *FileBuffer;
UINTN FileSize;
EFI_HANDLE Handle;
EFI_DEVICE_PATH_PROTOCOL *Node;
EFI_DEVICE_PATH_PROTOCOL *FilePathToVerfiy;
UINT32 Index;
EFI_STATUS Status;
UINT32 HandlerAuthenticationStatus;
VOID *FileBuffer;
UINTN FileSize;
EFI_HANDLE Handle;
EFI_DEVICE_PATH_PROTOCOL *Node;
EFI_DEVICE_PATH_PROTOCOL *FilePathToVerfiy;
if (FilePath == NULL) {
return EFI_INVALID_PARAMETER;
@@ -236,11 +237,11 @@ ExecuteSecurityHandlers (
FileBuffer = NULL;
FileSize = 0;
HandlerAuthenticationStatus = AuthenticationStatus;
FilePathToVerfiy = (EFI_DEVICE_PATH_PROTOCOL *) FilePath;
FilePathToVerfiy = (EFI_DEVICE_PATH_PROTOCOL *)FilePath;
//
// Run security handler in same order to their registered list
//
for (Index = 0; Index < mNumberOfSecurityHandler; Index ++) {
for (Index = 0; Index < mNumberOfSecurityHandler; Index++) {
if ((mSecurityTable[Index].SecurityOperation & EFI_AUTH_OPERATION_IMAGE_REQUIRED) == EFI_AUTH_OPERATION_IMAGE_REQUIRED) {
//
// Try get file buffer when the handler requires image buffer.
@@ -258,6 +259,7 @@ ExecuteSecurityHandlers (
//
FileBuffer = GetFileBufferByFilePath (TRUE, FilePath, &FileSize, &AuthenticationStatus);
}
if ((FileBuffer != NULL) && (!EFI_ERROR (Status))) {
//
// LoadFile () may cause the device path of the Handle be updated.
@@ -266,12 +268,13 @@ ExecuteSecurityHandlers (
}
}
}
Status = mSecurityTable[Index].SecurityHandler (
HandlerAuthenticationStatus,
FilePathToVerfiy,
FileBuffer,
FileSize
);
HandlerAuthenticationStatus,
FilePathToVerfiy,
FileBuffer,
FileSize
);
if (EFI_ERROR (Status)) {
break;
}
@@ -280,6 +283,7 @@ ExecuteSecurityHandlers (
if (FileBuffer != NULL) {
FreePool (FileBuffer);
}
if (FilePathToVerfiy != FilePath) {
FreePool (FilePathToVerfiy);
}
@@ -303,10 +307,10 @@ ReallocateSecurity2HandlerTable (
// Reallocate memory for security info structure.
//
mSecurity2Table = ReallocatePool (
mMaxNumberOfSecurity2Handler * sizeof (SECURITY2_INFO),
(mMaxNumberOfSecurity2Handler + SECURITY_HANDLER_TABLE_SIZE) * sizeof (SECURITY2_INFO),
mSecurity2Table
);
mMaxNumberOfSecurity2Handler * sizeof (SECURITY2_INFO),
(mMaxNumberOfSecurity2Handler + SECURITY_HANDLER_TABLE_SIZE) * sizeof (SECURITY2_INFO),
mSecurity2Table
);
//
// No enough resource is allocated.
@@ -339,8 +343,8 @@ ReallocateSecurity2HandlerTable (
**/
BOOLEAN
CheckAuthentication2Operation (
IN UINT32 CurrentAuthOperation,
IN UINT32 CheckAuthOperation
IN UINT32 CurrentAuthOperation,
IN UINT32 CheckAuthOperation
)
{
//
@@ -349,9 +353,11 @@ CheckAuthentication2Operation (
if (CheckAuthOperation == EFI_AUTH_OPERATION_NONE) {
return FALSE;
}
if ((CheckAuthOperation & ~(EFI_AUTH_IMAGE_OPERATION_MASK |
EFI_AUTH_NONE_IMAGE_OPERATION_MASK |
EFI_AUTH_OPERATION_IMAGE_REQUIRED)) != 0) {
EFI_AUTH_OPERATION_IMAGE_REQUIRED)) != 0)
{
return FALSE;
}
@@ -361,7 +367,8 @@ CheckAuthentication2Operation (
//
if ((CurrentAuthOperation & EFI_AUTH_OPERATION_MEASURE_IMAGE) == EFI_AUTH_OPERATION_MEASURE_IMAGE) {
if (((CheckAuthOperation & EFI_AUTH_OPERATION_MEASURE_IMAGE) == EFI_AUTH_OPERATION_MEASURE_IMAGE) ||
((CheckAuthOperation & EFI_AUTH_IMAGE_OPERATION_MASK) == 0)) {
((CheckAuthOperation & EFI_AUTH_IMAGE_OPERATION_MASK) == 0))
{
return TRUE;
} else {
return FALSE;
@@ -392,8 +399,8 @@ CheckAuthentication2Operation (
EFI_STATUS
EFIAPI
RegisterSecurity2Handler (
IN SECURITY2_FILE_AUTHENTICATION_HANDLER Security2Handler,
IN UINT32 AuthenticationOperation
IN SECURITY2_FILE_AUTHENTICATION_HANDLER Security2Handler,
IN UINT32 AuthenticationOperation
)
{
EFI_STATUS Status;
@@ -413,7 +420,7 @@ RegisterSecurity2Handler (
//
// Allocate more resources for new handler.
//
Status = ReallocateSecurity2HandlerTable();
Status = ReallocateSecurity2HandlerTable ();
ASSERT_EFI_ERROR (Status);
}
@@ -422,7 +429,7 @@ RegisterSecurity2Handler (
//
mSecurity2Table[mNumberOfSecurity2Handler].Security2Operation = AuthenticationOperation;
mSecurity2Table[mNumberOfSecurity2Handler].Security2Handler = Security2Handler;
mNumberOfSecurity2Handler ++;
mNumberOfSecurity2Handler++;
return EFI_SUCCESS;
}
@@ -471,21 +478,21 @@ RegisterSecurity2Handler (
EFI_STATUS
EFIAPI
ExecuteSecurity2Handlers (
IN UINT32 AuthenticationOperation,
IN UINT32 AuthenticationStatus,
IN CONST EFI_DEVICE_PATH_PROTOCOL *File OPTIONAL,
IN VOID *FileBuffer,
IN UINTN FileSize,
IN BOOLEAN BootPolicy
IN UINT32 AuthenticationOperation,
IN UINT32 AuthenticationStatus,
IN CONST EFI_DEVICE_PATH_PROTOCOL *File OPTIONAL,
IN VOID *FileBuffer,
IN UINTN FileSize,
IN BOOLEAN BootPolicy
)
{
UINT32 Index;
EFI_STATUS Status;
UINT32 Index;
EFI_STATUS Status;
//
// Invalid case if File and FileBuffer are both NULL.
//
if (File == NULL && FileBuffer == NULL) {
if ((File == NULL) && (FileBuffer == NULL)) {
return EFI_INVALID_PARAMETER;
}
@@ -499,25 +506,26 @@ ExecuteSecurity2Handlers (
//
// Run security handler in same order to their registered list
//
for (Index = 0; Index < mNumberOfSecurity2Handler; Index ++) {
for (Index = 0; Index < mNumberOfSecurity2Handler; Index++) {
//
// If FileBuffer is not NULL, the input is Image, which will be handled by EFI_AUTH_IMAGE_OPERATION_MASK operation.
// If FileBuffer is NULL, the input is not Image, which will be handled by EFI_AUTH_NONE_IMAGE_OPERATION_MASK operation.
// Other cases are ignored.
//
if ((FileBuffer != NULL && (mSecurity2Table[Index].Security2Operation & EFI_AUTH_IMAGE_OPERATION_MASK) != 0) ||
(FileBuffer == NULL && (mSecurity2Table[Index].Security2Operation & EFI_AUTH_NONE_IMAGE_OPERATION_MASK) != 0)) {
if (((FileBuffer != NULL) && ((mSecurity2Table[Index].Security2Operation & EFI_AUTH_IMAGE_OPERATION_MASK) != 0)) ||
((FileBuffer == NULL) && ((mSecurity2Table[Index].Security2Operation & EFI_AUTH_NONE_IMAGE_OPERATION_MASK) != 0)))
{
//
// Execute registered handlers based on input AuthenticationOperation
//
if ((mSecurity2Table[Index].Security2Operation & AuthenticationOperation) != 0) {
Status = mSecurity2Table[Index].Security2Handler (
AuthenticationStatus,
File,
FileBuffer,
FileSize,
BootPolicy
);
AuthenticationStatus,
File,
FileBuffer,
FileSize,
BootPolicy
);
if (EFI_ERROR (Status)) {
return Status;
}

File diff suppressed because it is too large Load Diff

View File

@@ -32,8 +32,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "FormGuid.h"
#define FILE_EXPLORER_CALLBACK_DATA_SIGNATURE SIGNATURE_32 ('f', 'e', 'c', 'k')
#define FILE_EXPLORER_CALLBACK_DATA_SIGNATURE SIGNATURE_32 ('f', 'e', 'c', 'k')
#pragma pack(1)
@@ -41,77 +40,76 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
/// HII specific Vendor Device Path definition.
///
typedef struct {
VENDOR_DEVICE_PATH VendorDevicePath;
EFI_DEVICE_PATH_PROTOCOL End;
VENDOR_DEVICE_PATH VendorDevicePath;
EFI_DEVICE_PATH_PROTOCOL End;
} HII_VENDOR_DEVICE_PATH;
#pragma pack()
typedef struct {
EFI_HANDLE DeviceHandle;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_FILE_HANDLE FileHandle;
UINT16 *FileName;
EFI_HANDLE DeviceHandle;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_FILE_HANDLE FileHandle;
UINT16 *FileName;
BOOLEAN IsRoot;
BOOLEAN IsDir;
BOOLEAN IsRoot;
BOOLEAN IsDir;
} FILE_CONTEXT;
typedef struct {
UINTN Signature;
LIST_ENTRY Link;
UINT16 *DisplayString;
UINT16 *HelpString;
EFI_STRING_ID DisplayStringToken;
EFI_STRING_ID HelpStringToken;
VOID *VariableContext;
UINTN Signature;
LIST_ENTRY Link;
UINT16 *DisplayString;
UINT16 *HelpString;
EFI_STRING_ID DisplayStringToken;
EFI_STRING_ID HelpStringToken;
VOID *VariableContext;
} MENU_ENTRY;
typedef struct {
UINTN Signature;
LIST_ENTRY Head;
UINTN MenuNumber;
BOOLEAN Used;
UINTN Signature;
LIST_ENTRY Head;
UINTN MenuNumber;
BOOLEAN Used;
} MENU_OPTION;
typedef struct {
//
// Shared callback data.
//
UINTN Signature;
UINTN Signature;
//
// File explorer formset callback data.
//
EFI_HII_HANDLE FeHiiHandle;
EFI_HANDLE FeDriverHandle;
EFI_HII_CONFIG_ACCESS_PROTOCOL FeConfigAccess;
EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2;
MENU_OPTION *FsOptionMenu;
CHAR16 *FileType;
CHOOSE_HANDLER ChooseHandler;
EFI_DEVICE_PATH_PROTOCOL *RetDevicePath;
EFI_HII_HANDLE FeHiiHandle;
EFI_HANDLE FeDriverHandle;
EFI_HII_CONFIG_ACCESS_PROTOCOL FeConfigAccess;
EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2;
MENU_OPTION *FsOptionMenu;
CHAR16 *FileType;
CHOOSE_HANDLER ChooseHandler;
EFI_DEVICE_PATH_PROTOCOL *RetDevicePath;
} FILE_EXPLORER_CALLBACK_DATA;
#define FILE_EXPLORER_PRIVATE_FROM_THIS(a) CR (a, FILE_EXPLORER_CALLBACK_DATA, FeConfigAccess, FILE_EXPLORER_CALLBACK_DATA_SIGNATURE)
extern UINT8 FileExplorerVfrBin[];
extern UINT8 FileExplorerVfrBin[];
#define MENU_OPTION_SIGNATURE SIGNATURE_32 ('m', 'e', 'n', 'u')
#define MENU_ENTRY_SIGNATURE SIGNATURE_32 ('e', 'n', 't', 'r')
#define MENU_OPTION_SIGNATURE SIGNATURE_32 ('m', 'e', 'n', 'u')
#define MENU_ENTRY_SIGNATURE SIGNATURE_32 ('e', 'n', 't', 'r')
///
/// Define the maximum characters that will be accepted.
///
#define MAX_CHAR 480
#define FILE_OPTION_OFFSET 0x8000
#define FILE_OPTION_MASK 0x7FFF
#define QUESTION_ID_UPDATE_STEP 200
#define MAX_FILE_NAME_LEN 20
#define MAX_FOLDER_NAME_LEN 20
#define NEW_FILE_QUESTION_ID_BASE 0x5000;
#define NEW_FOLDER_QUESTION_ID_BASE 0x6000;
#define MAX_CHAR 480
#define FILE_OPTION_OFFSET 0x8000
#define FILE_OPTION_MASK 0x7FFF
#define QUESTION_ID_UPDATE_STEP 200
#define MAX_FILE_NAME_LEN 20
#define MAX_FOLDER_NAME_LEN 20
#define NEW_FILE_QUESTION_ID_BASE 0x5000;
#define NEW_FOLDER_QUESTION_ID_BASE 0x6000;
/**
This function processes the results of changes in configuration.
@@ -143,15 +141,14 @@ extern UINT8 FileExplorerVfrBin[];
EFI_STATUS
EFIAPI
LibCallback (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN EFI_BROWSER_ACTION Action,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN EFI_IFR_TYPE_VALUE *Value,
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN EFI_BROWSER_ACTION Action,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN EFI_IFR_TYPE_VALUE *Value,
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
);
/**
This function allows a caller to extract the current configuration for one
or more named elements from the target driver.
@@ -177,10 +174,10 @@ LibCallback (
EFI_STATUS
EFIAPI
LibExtractConfig (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Request,
OUT EFI_STRING *Progress,
OUT EFI_STRING *Results
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Request,
OUT EFI_STRING *Progress,
OUT EFI_STRING *Results
);
/**
@@ -202,9 +199,9 @@ LibExtractConfig (
EFI_STATUS
EFIAPI
LibRouteConfig (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Configuration,
OUT EFI_STRING *Progress
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN CONST EFI_STRING Configuration,
OUT EFI_STRING *Progress
);
/**
@@ -218,10 +215,9 @@ LibRouteConfig (
**/
EFI_STATUS
LibUpdateFileExplorer (
IN UINT16 KeyValue
IN UINT16 KeyValue
);
/**
Get the device path info saved in the menu structure.
@@ -230,7 +226,7 @@ LibUpdateFileExplorer (
**/
VOID
LibGetDevicePath (
IN UINT16 KeyValue
IN UINT16 KeyValue
);
#endif

View File

@@ -6,11 +6,9 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _FILE_EXPLORER_FORM_GUID_H_
#define _FILE_EXPLORER_FORM_GUID_H_
#define EFI_FILE_EXPLORE_FORMSET_GUID \
{ \
0xfe561596, 0xe6bf, 0x41a6, {0x83, 0x76, 0xc7, 0x2b, 0x71, 0x98, 0x74, 0xd0} \
@@ -26,7 +24,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#define KEY_VALUE_CREATE_FOLDER_AND_EXIT 0x3002
#define KEY_VALUE_NO_CREATE_FOLDER_AND_EXIT 0x3003
#define LABEL_END 0xffff
#define LABEL_END 0xffff
#endif

View File

@@ -55,6 +55,6 @@ AuthenticateFmpImage (
IN UINTN PublicKeyDataLength
)
{
ASSERT(FALSE);
ASSERT (FALSE);
return RETURN_UNSUPPORTED;
}

View File

@@ -15,23 +15,23 @@
#include <Library/FrameBufferBltLib.h>
struct FRAME_BUFFER_CONFIGURE {
UINT32 PixelsPerScanLine;
UINT32 BytesPerPixel;
UINT32 Width;
UINT32 Height;
UINT8 *FrameBuffer;
EFI_GRAPHICS_PIXEL_FORMAT PixelFormat;
EFI_PIXEL_BITMASK PixelMasks;
INT8 PixelShl[4]; // R-G-B-Rsvd
INT8 PixelShr[4]; // R-G-B-Rsvd
UINT8 LineBuffer[0];
UINT32 PixelsPerScanLine;
UINT32 BytesPerPixel;
UINT32 Width;
UINT32 Height;
UINT8 *FrameBuffer;
EFI_GRAPHICS_PIXEL_FORMAT PixelFormat;
EFI_PIXEL_BITMASK PixelMasks;
INT8 PixelShl[4]; // R-G-B-Rsvd
INT8 PixelShr[4]; // R-G-B-Rsvd
UINT8 LineBuffer[0];
};
CONST EFI_PIXEL_BITMASK mRgbPixelMasks = {
CONST EFI_PIXEL_BITMASK mRgbPixelMasks = {
0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000
};
CONST EFI_PIXEL_BITMASK mBgrPixelMasks = {
CONST EFI_PIXEL_BITMASK mBgrPixelMasks = {
0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000
};
@@ -45,10 +45,10 @@ CONST EFI_PIXEL_BITMASK mBgrPixelMasks = {
**/
VOID
FrameBufferBltLibConfigurePixelFormat (
IN CONST EFI_PIXEL_BITMASK *BitMask,
OUT UINT32 *BytesPerPixel,
OUT INT8 *PixelShl,
OUT INT8 *PixelShr
IN CONST EFI_PIXEL_BITMASK *BitMask,
OUT UINT32 *BytesPerPixel,
OUT INT8 *PixelShl,
OUT INT8 *PixelShr
)
{
UINT8 Index;
@@ -58,26 +58,34 @@ FrameBufferBltLibConfigurePixelFormat (
ASSERT (BytesPerPixel != NULL);
MergedMasks = 0;
Masks = (UINT32*) BitMask;
Masks = (UINT32 *)BitMask;
for (Index = 0; Index < 3; Index++) {
ASSERT ((MergedMasks & Masks[Index]) == 0);
PixelShl[Index] = (INT8) HighBitSet32 (Masks[Index]) - 23 + (Index * 8);
PixelShl[Index] = (INT8)HighBitSet32 (Masks[Index]) - 23 + (Index * 8);
if (PixelShl[Index] < 0) {
PixelShr[Index] = -PixelShl[Index];
PixelShl[Index] = 0;
} else {
PixelShr[Index] = 0;
}
DEBUG ((DEBUG_INFO, "%d: shl:%d shr:%d mask:%x\n", Index,
PixelShl[Index], PixelShr[Index], Masks[Index]));
MergedMasks = (UINT32) (MergedMasks | Masks[Index]);
DEBUG ((
DEBUG_INFO,
"%d: shl:%d shr:%d mask:%x\n",
Index,
PixelShl[Index],
PixelShr[Index],
Masks[Index]
));
MergedMasks = (UINT32)(MergedMasks | Masks[Index]);
}
MergedMasks = (UINT32) (MergedMasks | Masks[3]);
MergedMasks = (UINT32)(MergedMasks | Masks[3]);
ASSERT (MergedMasks != 0);
*BytesPerPixel = (UINT32) ((HighBitSet32 (MergedMasks) + 7) / 8);
*BytesPerPixel = (UINT32)((HighBitSet32 (MergedMasks) + 7) / 8);
DEBUG ((DEBUG_INFO, "Bytes per pixel: %d\n", *BytesPerPixel));
}
@@ -107,35 +115,35 @@ FrameBufferBltConfigure (
IN OUT UINTN *ConfigureSize
)
{
CONST EFI_PIXEL_BITMASK *BitMask;
UINT32 BytesPerPixel;
INT8 PixelShl[4];
INT8 PixelShr[4];
CONST EFI_PIXEL_BITMASK *BitMask;
UINT32 BytesPerPixel;
INT8 PixelShl[4];
INT8 PixelShr[4];
if (ConfigureSize == NULL) {
return RETURN_INVALID_PARAMETER;
}
switch (FrameBufferInfo->PixelFormat) {
case PixelRedGreenBlueReserved8BitPerColor:
BitMask = &mRgbPixelMasks;
break;
case PixelRedGreenBlueReserved8BitPerColor:
BitMask = &mRgbPixelMasks;
break;
case PixelBlueGreenRedReserved8BitPerColor:
BitMask = &mBgrPixelMasks;
break;
case PixelBlueGreenRedReserved8BitPerColor:
BitMask = &mBgrPixelMasks;
break;
case PixelBitMask:
BitMask = &FrameBufferInfo->PixelInformation;
break;
case PixelBitMask:
BitMask = &FrameBufferInfo->PixelInformation;
break;
case PixelBltOnly:
ASSERT (FrameBufferInfo->PixelFormat != PixelBltOnly);
return RETURN_UNSUPPORTED;
case PixelBltOnly:
ASSERT (FrameBufferInfo->PixelFormat != PixelBltOnly);
return RETURN_UNSUPPORTED;
default:
ASSERT (FALSE);
return RETURN_INVALID_PARAMETER;
default:
ASSERT (FALSE);
return RETURN_INVALID_PARAMETER;
}
if (FrameBufferInfo->PixelsPerScanLine < FrameBufferInfo->HorizontalResolution) {
@@ -145,9 +153,10 @@ FrameBufferBltConfigure (
FrameBufferBltLibConfigurePixelFormat (BitMask, &BytesPerPixel, PixelShl, PixelShr);
if (*ConfigureSize < sizeof (FRAME_BUFFER_CONFIGURE)
+ FrameBufferInfo->HorizontalResolution * BytesPerPixel) {
+ FrameBufferInfo->HorizontalResolution * BytesPerPixel)
{
*ConfigureSize = sizeof (FRAME_BUFFER_CONFIGURE)
+ FrameBufferInfo->HorizontalResolution * BytesPerPixel;
+ FrameBufferInfo->HorizontalResolution * BytesPerPixel;
return RETURN_BUFFER_TOO_SMALL;
}
@@ -155,12 +164,12 @@ FrameBufferBltConfigure (
return RETURN_INVALID_PARAMETER;
}
CopyMem (&Configure->PixelMasks, BitMask, sizeof (*BitMask));
CopyMem (Configure->PixelShl, PixelShl, sizeof (PixelShl));
CopyMem (Configure->PixelShr, PixelShr, sizeof (PixelShr));
CopyMem (&Configure->PixelMasks, BitMask, sizeof (*BitMask));
CopyMem (Configure->PixelShl, PixelShl, sizeof (PixelShl));
CopyMem (Configure->PixelShr, PixelShr, sizeof (PixelShr));
Configure->BytesPerPixel = BytesPerPixel;
Configure->PixelFormat = FrameBufferInfo->PixelFormat;
Configure->FrameBuffer = (UINT8*) FrameBuffer;
Configure->FrameBuffer = (UINT8 *)FrameBuffer;
Configure->Width = FrameBufferInfo->HorizontalResolution;
Configure->Height = FrameBufferInfo->VerticalResolution;
Configure->PixelsPerScanLine = FrameBufferInfo->PixelsPerScanLine;
@@ -185,25 +194,25 @@ FrameBufferBltConfigure (
**/
EFI_STATUS
FrameBufferBltLibVideoFill (
IN FRAME_BUFFER_CONFIGURE *Configure,
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Color,
IN UINTN DestinationX,
IN UINTN DestinationY,
IN UINTN Width,
IN UINTN Height
IN FRAME_BUFFER_CONFIGURE *Configure,
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Color,
IN UINTN DestinationX,
IN UINTN DestinationY,
IN UINTN Width,
IN UINTN Height
)
{
UINTN IndexX;
UINTN IndexY;
UINT8 *Destination;
UINT8 Uint8;
UINT32 Uint32;
UINT64 WideFill;
BOOLEAN UseWideFill;
BOOLEAN LineBufferReady;
UINTN Offset;
UINTN WidthInBytes;
UINTN SizeInBytes;
UINTN IndexX;
UINTN IndexY;
UINT8 *Destination;
UINT8 Uint8;
UINT32 Uint32;
UINT64 WideFill;
BOOLEAN UseWideFill;
BOOLEAN LineBufferReady;
UINTN Offset;
UINTN WidthInBytes;
UINTN SizeInBytes;
//
// BltBuffer to Video: Source is BltBuffer, destination is Video
@@ -218,25 +227,29 @@ FrameBufferBltLibVideoFill (
return RETURN_INVALID_PARAMETER;
}
if (Width == 0 || Height == 0) {
if ((Width == 0) || (Height == 0)) {
DEBUG ((DEBUG_VERBOSE, "VideoFill: Width or Height is 0\n"));
return RETURN_INVALID_PARAMETER;
}
WidthInBytes = Width * Configure->BytesPerPixel;
Uint32 = *(UINT32*) Color;
Uint32 = *(UINT32 *)Color;
WideFill =
(UINT32) (
(((Uint32 << Configure->PixelShl[0]) >> Configure->PixelShr[0]) &
Configure->PixelMasks.RedMask) |
(((Uint32 << Configure->PixelShl[1]) >> Configure->PixelShr[1]) &
Configure->PixelMasks.GreenMask) |
(((Uint32 << Configure->PixelShl[2]) >> Configure->PixelShr[2]) &
Configure->PixelMasks.BlueMask)
);
DEBUG ((DEBUG_VERBOSE, "VideoFill: color=0x%x, wide-fill=0x%x\n",
Uint32, WideFill));
(UINT32)(
(((Uint32 << Configure->PixelShl[0]) >> Configure->PixelShr[0]) &
Configure->PixelMasks.RedMask) |
(((Uint32 << Configure->PixelShl[1]) >> Configure->PixelShr[1]) &
Configure->PixelMasks.GreenMask) |
(((Uint32 << Configure->PixelShl[2]) >> Configure->PixelShr[2]) &
Configure->PixelMasks.BlueMask)
);
DEBUG ((
DEBUG_VERBOSE,
"VideoFill: color=0x%x, wide-fill=0x%x\n",
Uint32,
WideFill
));
//
// If the size of the pixel data evenly divides the sizeof
@@ -245,7 +258,7 @@ FrameBufferBltLibVideoFill (
UseWideFill = TRUE;
if ((sizeof (WideFill) % Configure->BytesPerPixel) == 0) {
for (IndexX = Configure->BytesPerPixel; IndexX < sizeof (WideFill); IndexX++) {
((UINT8*) &WideFill)[IndexX] = ((UINT8*) &WideFill)[IndexX % Configure->BytesPerPixel];
((UINT8 *)&WideFill)[IndexX] = ((UINT8 *)&WideFill)[IndexX % Configure->BytesPerPixel];
}
} else {
//
@@ -253,14 +266,16 @@ FrameBufferBltLibVideoFill (
// a wide fill operation.
//
for (
IndexX = 1, Uint8 = ((UINT8*) &WideFill)[0];
IndexX < Configure->BytesPerPixel;
IndexX++) {
if (Uint8 != ((UINT8*) &WideFill)[IndexX]) {
IndexX = 1, Uint8 = ((UINT8 *)&WideFill)[0];
IndexX < Configure->BytesPerPixel;
IndexX++)
{
if (Uint8 != ((UINT8 *)&WideFill)[IndexX]) {
UseWideFill = FALSE;
break;
}
}
if (UseWideFill) {
SetMem (&WideFill, sizeof (WideFill), Uint8);
}
@@ -268,26 +283,27 @@ FrameBufferBltLibVideoFill (
if (UseWideFill && (DestinationX == 0) && (Width == Configure->PixelsPerScanLine)) {
DEBUG ((DEBUG_VERBOSE, "VideoFill (wide, one-shot)\n"));
Offset = DestinationY * Configure->PixelsPerScanLine;
Offset = Configure->BytesPerPixel * Offset;
Offset = DestinationY * Configure->PixelsPerScanLine;
Offset = Configure->BytesPerPixel * Offset;
Destination = Configure->FrameBuffer + Offset;
SizeInBytes = WidthInBytes * Height;
if (SizeInBytes >= 8) {
SetMem32 (Destination, SizeInBytes & ~3, (UINT32) WideFill);
SetMem32 (Destination, SizeInBytes & ~3, (UINT32)WideFill);
Destination += SizeInBytes & ~3;
SizeInBytes &= 3;
}
if (SizeInBytes > 0) {
SetMem (Destination, SizeInBytes, (UINT8) (UINTN) WideFill);
SetMem (Destination, SizeInBytes, (UINT8)(UINTN)WideFill);
}
} else {
LineBufferReady = FALSE;
for (IndexY = DestinationY; IndexY < (Height + DestinationY); IndexY++) {
Offset = (IndexY * Configure->PixelsPerScanLine) + DestinationX;
Offset = Configure->BytesPerPixel * Offset;
Offset = (IndexY * Configure->PixelsPerScanLine) + DestinationX;
Offset = Configure->BytesPerPixel * Offset;
Destination = Configure->FrameBuffer + Offset;
if (UseWideFill && (((UINTN) Destination & 7) == 0)) {
if (UseWideFill && (((UINTN)Destination & 7) == 0)) {
DEBUG ((DEBUG_VERBOSE, "VideoFill (wide)\n"));
SizeInBytes = WidthInBytes;
if (SizeInBytes >= 8) {
@@ -295,6 +311,7 @@ FrameBufferBltLibVideoFill (
Destination += SizeInBytes & ~7;
SizeInBytes &= 7;
}
if (SizeInBytes > 0) {
CopyMem (Destination, &WideFill, SizeInBytes);
}
@@ -307,11 +324,13 @@ FrameBufferBltLibVideoFill (
(Configure->LineBuffer + (IndexX * Configure->BytesPerPixel)),
Configure->LineBuffer,
MIN (IndexX, Width - IndexX) * Configure->BytesPerPixel
);
);
IndexX += MIN (IndexX, Width - IndexX);
}
LineBufferReady = TRUE;
}
CopyMem (Destination, Configure->LineBuffer, WidthInBytes);
}
}
@@ -340,26 +359,26 @@ FrameBufferBltLibVideoFill (
**/
RETURN_STATUS
FrameBufferBltLibVideoToBltBuffer (
IN FRAME_BUFFER_CONFIGURE *Configure,
OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer,
IN UINTN SourceX,
IN UINTN SourceY,
IN UINTN DestinationX,
IN UINTN DestinationY,
IN UINTN Width,
IN UINTN Height,
IN UINTN Delta
IN FRAME_BUFFER_CONFIGURE *Configure,
OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer,
IN UINTN SourceX,
IN UINTN SourceY,
IN UINTN DestinationX,
IN UINTN DestinationY,
IN UINTN Width,
IN UINTN Height,
IN UINTN Delta
)
{
UINTN DstY;
UINTN SrcY;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Blt;
UINT8 *Source;
UINT8 *Destination;
UINTN IndexX;
UINT32 Uint32;
UINTN Offset;
UINTN WidthInBytes;
UINTN DstY;
UINTN SrcY;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Blt;
UINT8 *Source;
UINT8 *Destination;
UINTN IndexX;
UINT32 Uint32;
UINTN Offset;
UINTN WidthInBytes;
//
// Video to BltBuffer: Source is Video, destination is BltBuffer
@@ -372,7 +391,7 @@ FrameBufferBltLibVideoToBltBuffer (
return RETURN_INVALID_PARAMETER;
}
if (Width == 0 || Height == 0) {
if ((Width == 0) || (Height == 0)) {
return RETURN_INVALID_PARAMETER;
}
@@ -392,14 +411,14 @@ FrameBufferBltLibVideoToBltBuffer (
//
for (SrcY = SourceY, DstY = DestinationY;
DstY < (Height + DestinationY);
SrcY++, DstY++) {
SrcY++, DstY++)
{
Offset = (SrcY * Configure->PixelsPerScanLine) + SourceX;
Offset = Configure->BytesPerPixel * Offset;
Source = Configure->FrameBuffer + Offset;
if (Configure->PixelFormat == PixelBlueGreenRedReserved8BitPerColor) {
Destination = (UINT8 *) BltBuffer + (DstY * Delta) + (DestinationX * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
Destination = (UINT8 *)BltBuffer + (DstY * Delta) + (DestinationX * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
} else {
Destination = Configure->LineBuffer;
}
@@ -409,18 +428,18 @@ FrameBufferBltLibVideoToBltBuffer (
if (Configure->PixelFormat != PixelBlueGreenRedReserved8BitPerColor) {
for (IndexX = 0; IndexX < Width; IndexX++) {
Blt = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)
((UINT8 *) BltBuffer + (DstY * Delta) +
(DestinationX + IndexX) * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
Uint32 = *(UINT32*) (Configure->LineBuffer + (IndexX * Configure->BytesPerPixel));
*(UINT32*) Blt =
(UINT32) (
(((Uint32 & Configure->PixelMasks.RedMask) >>
Configure->PixelShl[0]) << Configure->PixelShr[0]) |
(((Uint32 & Configure->PixelMasks.GreenMask) >>
Configure->PixelShl[1]) << Configure->PixelShr[1]) |
(((Uint32 & Configure->PixelMasks.BlueMask) >>
Configure->PixelShl[2]) << Configure->PixelShr[2])
);
((UINT8 *)BltBuffer + (DstY * Delta) +
(DestinationX + IndexX) * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
Uint32 = *(UINT32 *)(Configure->LineBuffer + (IndexX * Configure->BytesPerPixel));
*(UINT32 *)Blt =
(UINT32)(
(((Uint32 & Configure->PixelMasks.RedMask) >>
Configure->PixelShl[0]) << Configure->PixelShr[0]) |
(((Uint32 & Configure->PixelMasks.GreenMask) >>
Configure->PixelShl[1]) << Configure->PixelShr[1]) |
(((Uint32 & Configure->PixelMasks.BlueMask) >>
Configure->PixelShl[2]) << Configure->PixelShr[2])
);
}
}
}
@@ -448,26 +467,26 @@ FrameBufferBltLibVideoToBltBuffer (
**/
RETURN_STATUS
FrameBufferBltLibBufferToVideo (
IN FRAME_BUFFER_CONFIGURE *Configure,
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer,
IN UINTN SourceX,
IN UINTN SourceY,
IN UINTN DestinationX,
IN UINTN DestinationY,
IN UINTN Width,
IN UINTN Height,
IN UINTN Delta
IN FRAME_BUFFER_CONFIGURE *Configure,
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer,
IN UINTN SourceX,
IN UINTN SourceY,
IN UINTN DestinationX,
IN UINTN DestinationY,
IN UINTN Width,
IN UINTN Height,
IN UINTN Delta
)
{
UINTN DstY;
UINTN SrcY;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Blt;
UINT8 *Source;
UINT8 *Destination;
UINTN IndexX;
UINT32 Uint32;
UINTN Offset;
UINTN WidthInBytes;
UINTN DstY;
UINTN SrcY;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Blt;
UINT8 *Source;
UINT8 *Destination;
UINTN IndexX;
UINT32 Uint32;
UINTN Offset;
UINTN WidthInBytes;
//
// BltBuffer to Video: Source is BltBuffer, destination is Video
@@ -480,7 +499,7 @@ FrameBufferBltLibBufferToVideo (
return RETURN_INVALID_PARAMETER;
}
if (Width == 0 || Height == 0) {
if ((Width == 0) || (Height == 0)) {
return RETURN_INVALID_PARAMETER;
}
@@ -497,33 +516,34 @@ FrameBufferBltLibBufferToVideo (
for (SrcY = SourceY, DstY = DestinationY;
SrcY < (Height + SourceY);
SrcY++, DstY++) {
Offset = (DstY * Configure->PixelsPerScanLine) + DestinationX;
Offset = Configure->BytesPerPixel * Offset;
SrcY++, DstY++)
{
Offset = (DstY * Configure->PixelsPerScanLine) + DestinationX;
Offset = Configure->BytesPerPixel * Offset;
Destination = Configure->FrameBuffer + Offset;
if (Configure->PixelFormat == PixelBlueGreenRedReserved8BitPerColor) {
Source = (UINT8 *) BltBuffer + (SrcY * Delta) + SourceX * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL);
Source = (UINT8 *)BltBuffer + (SrcY * Delta) + SourceX * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL);
} else {
for (IndexX = 0; IndexX < Width; IndexX++) {
Blt =
(EFI_GRAPHICS_OUTPUT_BLT_PIXEL *) (
(UINT8 *) BltBuffer +
(SrcY * Delta) +
((SourceX + IndexX) * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL))
);
Uint32 = *(UINT32*) Blt;
*(UINT32*) (Configure->LineBuffer + (IndexX * Configure->BytesPerPixel)) =
(UINT32) (
(((Uint32 << Configure->PixelShl[0]) >> Configure->PixelShr[0]) &
Configure->PixelMasks.RedMask) |
(((Uint32 << Configure->PixelShl[1]) >> Configure->PixelShr[1]) &
Configure->PixelMasks.GreenMask) |
(((Uint32 << Configure->PixelShl[2]) >> Configure->PixelShr[2]) &
Configure->PixelMasks.BlueMask)
);
(EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)(
(UINT8 *)BltBuffer +
(SrcY * Delta) +
((SourceX + IndexX) * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL))
);
Uint32 = *(UINT32 *)Blt;
*(UINT32 *)(Configure->LineBuffer + (IndexX * Configure->BytesPerPixel)) =
(UINT32)(
(((Uint32 << Configure->PixelShl[0]) >> Configure->PixelShr[0]) &
Configure->PixelMasks.RedMask) |
(((Uint32 << Configure->PixelShl[1]) >> Configure->PixelShr[1]) &
Configure->PixelMasks.GreenMask) |
(((Uint32 << Configure->PixelShl[2]) >> Configure->PixelShr[2]) &
Configure->PixelMasks.BlueMask)
);
}
Source = Configure->LineBuffer;
}
@@ -550,20 +570,20 @@ FrameBufferBltLibBufferToVideo (
**/
RETURN_STATUS
FrameBufferBltLibVideoToVideo (
IN FRAME_BUFFER_CONFIGURE *Configure,
IN UINTN SourceX,
IN UINTN SourceY,
IN UINTN DestinationX,
IN UINTN DestinationY,
IN UINTN Width,
IN UINTN Height
IN FRAME_BUFFER_CONFIGURE *Configure,
IN UINTN SourceX,
IN UINTN SourceY,
IN UINTN DestinationX,
IN UINTN DestinationY,
IN UINTN Width,
IN UINTN Height
)
{
UINT8 *Source;
UINT8 *Destination;
UINTN Offset;
UINTN WidthInBytes;
INTN LineStride;
UINT8 *Source;
UINT8 *Destination;
UINTN Offset;
UINTN WidthInBytes;
INTN LineStride;
//
// Video to Video: Source is Video, destination is Video
@@ -584,7 +604,7 @@ FrameBufferBltLibVideoToVideo (
return RETURN_INVALID_PARAMETER;
}
if (Width == 0 || Height == 0) {
if ((Width == 0) || (Height == 0)) {
return RETURN_INVALID_PARAMETER;
}
@@ -594,8 +614,8 @@ FrameBufferBltLibVideoToVideo (
Offset = Configure->BytesPerPixel * Offset;
Source = Configure->FrameBuffer + Offset;
Offset = (DestinationY * Configure->PixelsPerScanLine) + DestinationX;
Offset = Configure->BytesPerPixel * Offset;
Offset = (DestinationY * Configure->PixelsPerScanLine) + DestinationX;
Offset = Configure->BytesPerPixel * Offset;
Destination = Configure->FrameBuffer + Offset;
LineStride = Configure->BytesPerPixel * Configure->PixelsPerScanLine;
@@ -603,15 +623,15 @@ FrameBufferBltLibVideoToVideo (
//
// Copy from last line to avoid source is corrupted by copying
//
Source += Height * LineStride;
Source += Height * LineStride;
Destination += Height * LineStride;
LineStride = -LineStride;
LineStride = -LineStride;
}
while (Height-- > 0) {
CopyMem (Destination, Source, WidthInBytes);
Source += LineStride;
Source += LineStride;
Destination += LineStride;
}
@@ -648,16 +668,16 @@ FrameBufferBltLibVideoToVideo (
RETURN_STATUS
EFIAPI
FrameBufferBlt (
IN FRAME_BUFFER_CONFIGURE *Configure,
IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer OPTIONAL,
IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation,
IN UINTN SourceX,
IN UINTN SourceY,
IN UINTN DestinationX,
IN UINTN DestinationY,
IN UINTN Width,
IN UINTN Height,
IN UINTN Delta
IN FRAME_BUFFER_CONFIGURE *Configure,
IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer OPTIONAL,
IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation,
IN UINTN SourceX,
IN UINTN SourceY,
IN UINTN DestinationX,
IN UINTN DestinationY,
IN UINTN Width,
IN UINTN Height,
IN UINTN Delta
)
{
if (Configure == NULL) {
@@ -665,54 +685,54 @@ FrameBufferBlt (
}
switch (BltOperation) {
case EfiBltVideoToBltBuffer:
return FrameBufferBltLibVideoToBltBuffer (
Configure,
BltBuffer,
SourceX,
SourceY,
DestinationX,
DestinationY,
Width,
Height,
Delta
);
case EfiBltVideoToBltBuffer:
return FrameBufferBltLibVideoToBltBuffer (
Configure,
BltBuffer,
SourceX,
SourceY,
DestinationX,
DestinationY,
Width,
Height,
Delta
);
case EfiBltVideoToVideo:
return FrameBufferBltLibVideoToVideo (
Configure,
SourceX,
SourceY,
DestinationX,
DestinationY,
Width,
Height
);
case EfiBltVideoToVideo:
return FrameBufferBltLibVideoToVideo (
Configure,
SourceX,
SourceY,
DestinationX,
DestinationY,
Width,
Height
);
case EfiBltVideoFill:
return FrameBufferBltLibVideoFill (
Configure,
BltBuffer,
DestinationX,
DestinationY,
Width,
Height
);
case EfiBltVideoFill:
return FrameBufferBltLibVideoFill (
Configure,
BltBuffer,
DestinationX,
DestinationY,
Width,
Height
);
case EfiBltBufferToVideo:
return FrameBufferBltLibBufferToVideo (
Configure,
BltBuffer,
SourceX,
SourceY,
DestinationX,
DestinationY,
Width,
Height,
Delta
);
case EfiBltBufferToVideo:
return FrameBufferBltLibBufferToVideo (
Configure,
BltBuffer,
SourceX,
SourceY,
DestinationX,
DestinationY,
Width,
Height,
Delta
);
default:
return RETURN_INVALID_PARAMETER;
default:
return RETURN_INVALID_PARAMETER;
}
}

View File

@@ -27,9 +27,9 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
RETURN_STATUS
EFIAPI
SaveLockBox (
IN GUID *Guid,
IN VOID *Buffer,
IN UINTN Length
IN GUID *Guid,
IN VOID *Buffer,
IN UINTN Length
)
{
return RETURN_SUCCESS;
@@ -51,8 +51,8 @@ SaveLockBox (
RETURN_STATUS
EFIAPI
SetLockBoxAttributes (
IN GUID *Guid,
IN UINT64 Attributes
IN GUID *Guid,
IN UINT64 Attributes
)
{
return RETURN_SUCCESS;
@@ -80,10 +80,10 @@ SetLockBoxAttributes (
RETURN_STATUS
EFIAPI
UpdateLockBox (
IN GUID *Guid,
IN UINTN Offset,
IN VOID *Buffer,
IN UINTN Length
IN GUID *Guid,
IN UINTN Offset,
IN VOID *Buffer,
IN UINTN Length
)
{
return RETURN_SUCCESS;
@@ -110,9 +110,9 @@ UpdateLockBox (
RETURN_STATUS
EFIAPI
RestoreLockBox (
IN GUID *Guid,
IN VOID *Buffer OPTIONAL,
IN OUT UINTN *Length OPTIONAL
IN GUID *Guid,
IN VOID *Buffer OPTIONAL,
IN OUT UINTN *Length OPTIONAL
)
{
return RETURN_SUCCESS;

View File

@@ -61,31 +61,35 @@ LzmaArchGuidedSectionGetInfo (
if (IS_SECTION2 (InputSection)) {
if (!CompareGuid (
&gLzmaF86CustomDecompressGuid,
&(((EFI_GUID_DEFINED_SECTION2 *) InputSection)->SectionDefinitionGuid))) {
&gLzmaF86CustomDecompressGuid,
&(((EFI_GUID_DEFINED_SECTION2 *)InputSection)->SectionDefinitionGuid)
))
{
return RETURN_INVALID_PARAMETER;
}
*SectionAttribute = ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->Attributes;
*SectionAttribute = ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->Attributes;
return LzmaUefiDecompressGetInfo (
(UINT8 *) InputSection + ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->DataOffset,
SECTION2_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->DataOffset,
(UINT8 *)InputSection + ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->DataOffset,
SECTION2_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->DataOffset,
OutputBufferSize,
ScratchBufferSize
);
} else {
if (!CompareGuid (
&gLzmaF86CustomDecompressGuid,
&(((EFI_GUID_DEFINED_SECTION *) InputSection)->SectionDefinitionGuid))) {
&gLzmaF86CustomDecompressGuid,
&(((EFI_GUID_DEFINED_SECTION *)InputSection)->SectionDefinitionGuid)
))
{
return RETURN_INVALID_PARAMETER;
}
*SectionAttribute = ((EFI_GUID_DEFINED_SECTION *) InputSection)->Attributes;
*SectionAttribute = ((EFI_GUID_DEFINED_SECTION *)InputSection)->Attributes;
return LzmaUefiDecompressGetInfo (
(UINT8 *) InputSection + ((EFI_GUID_DEFINED_SECTION *) InputSection)->DataOffset,
SECTION_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION *) InputSection)->DataOffset,
(UINT8 *)InputSection + ((EFI_GUID_DEFINED_SECTION *)InputSection)->DataOffset,
SECTION_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION *)InputSection)->DataOffset,
OutputBufferSize,
ScratchBufferSize
);
@@ -134,25 +138,25 @@ LzmaArchGuidedSectionExtraction (
OUT UINT32 *AuthenticationStatus
)
{
EFI_GUID *InputGuid;
VOID *Source;
UINTN SourceSize;
EFI_STATUS Status;
UINT32 X86State;
UINT32 OutputBufferSize;
UINT32 ScratchBufferSize;
EFI_GUID *InputGuid;
VOID *Source;
UINTN SourceSize;
EFI_STATUS Status;
UINT32 X86State;
UINT32 OutputBufferSize;
UINT32 ScratchBufferSize;
ASSERT (OutputBuffer != NULL);
ASSERT (InputSection != NULL);
if (IS_SECTION2 (InputSection)) {
InputGuid = &(((EFI_GUID_DEFINED_SECTION2 *) InputSection)->SectionDefinitionGuid);
Source = (UINT8 *) InputSection + ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->DataOffset;
SourceSize = SECTION2_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->DataOffset;
InputGuid = &(((EFI_GUID_DEFINED_SECTION2 *)InputSection)->SectionDefinitionGuid);
Source = (UINT8 *)InputSection + ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->DataOffset;
SourceSize = SECTION2_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->DataOffset;
} else {
InputGuid = &(((EFI_GUID_DEFINED_SECTION *) InputSection)->SectionDefinitionGuid);
Source = (UINT8 *) InputSection + ((EFI_GUID_DEFINED_SECTION *) InputSection)->DataOffset;
SourceSize = SECTION_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION *) InputSection)->DataOffset;
InputGuid = &(((EFI_GUID_DEFINED_SECTION *)InputSection)->SectionDefinitionGuid);
Source = (UINT8 *)InputSection + ((EFI_GUID_DEFINED_SECTION *)InputSection)->DataOffset;
SourceSize = SECTION_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION *)InputSection)->DataOffset;
}
if (!CompareGuid (&gLzmaF86CustomDecompressGuid, InputGuid)) {
@@ -165,33 +169,32 @@ LzmaArchGuidedSectionExtraction (
*AuthenticationStatus = 0;
Status = LzmaUefiDecompress (
Source,
SourceSize,
*OutputBuffer,
ScratchBuffer
);
Source,
SourceSize,
*OutputBuffer,
ScratchBuffer
);
//
// After decompress, the data need to be converted to the raw data.
//
if (!EFI_ERROR (Status)) {
Status = LzmaUefiDecompressGetInfo (
Source,
(UINT32) SourceSize,
&OutputBufferSize,
&ScratchBufferSize
);
Source,
(UINT32)SourceSize,
&OutputBufferSize,
&ScratchBufferSize
);
if (!EFI_ERROR (Status)) {
x86_Convert_Init(X86State);
x86_Convert(*OutputBuffer, OutputBufferSize, 0, &X86State, 0);
x86_Convert_Init (X86State);
x86_Convert (*OutputBuffer, OutputBufferSize, 0, &X86State, 0);
}
}
return Status;
}
/**
Register LzmaArchDecompress and LzmaArchDecompressGetInfo handlers with LzmaF86CustomDecompressGuid.
@@ -205,8 +208,8 @@ LzmaArchDecompressLibConstructor (
)
{
return ExtractGuidedSectionRegisterHandlers (
&gLzmaF86CustomDecompressGuid,
LzmaArchGuidedSectionGetInfo,
LzmaArchGuidedSectionExtraction
);
&gLzmaF86CustomDecompressGuid,
LzmaArchGuidedSectionGetInfo,
LzmaArchGuidedSectionExtraction
);
}

View File

@@ -59,31 +59,35 @@ LzmaGuidedSectionGetInfo (
if (IS_SECTION2 (InputSection)) {
if (!CompareGuid (
&gLzmaCustomDecompressGuid,
&(((EFI_GUID_DEFINED_SECTION2 *) InputSection)->SectionDefinitionGuid))) {
&gLzmaCustomDecompressGuid,
&(((EFI_GUID_DEFINED_SECTION2 *)InputSection)->SectionDefinitionGuid)
))
{
return RETURN_INVALID_PARAMETER;
}
*SectionAttribute = ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->Attributes;
*SectionAttribute = ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->Attributes;
return LzmaUefiDecompressGetInfo (
(UINT8 *) InputSection + ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->DataOffset,
SECTION2_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->DataOffset,
(UINT8 *)InputSection + ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->DataOffset,
SECTION2_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->DataOffset,
OutputBufferSize,
ScratchBufferSize
);
} else {
if (!CompareGuid (
&gLzmaCustomDecompressGuid,
&(((EFI_GUID_DEFINED_SECTION *) InputSection)->SectionDefinitionGuid))) {
&gLzmaCustomDecompressGuid,
&(((EFI_GUID_DEFINED_SECTION *)InputSection)->SectionDefinitionGuid)
))
{
return RETURN_INVALID_PARAMETER;
}
*SectionAttribute = ((EFI_GUID_DEFINED_SECTION *) InputSection)->Attributes;
*SectionAttribute = ((EFI_GUID_DEFINED_SECTION *)InputSection)->Attributes;
return LzmaUefiDecompressGetInfo (
(UINT8 *) InputSection + ((EFI_GUID_DEFINED_SECTION *) InputSection)->DataOffset,
SECTION_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION *) InputSection)->DataOffset,
(UINT8 *)InputSection + ((EFI_GUID_DEFINED_SECTION *)InputSection)->DataOffset,
SECTION_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION *)InputSection)->DataOffset,
OutputBufferSize,
ScratchBufferSize
);
@@ -137,8 +141,10 @@ LzmaGuidedSectionExtraction (
if (IS_SECTION2 (InputSection)) {
if (!CompareGuid (
&gLzmaCustomDecompressGuid,
&(((EFI_GUID_DEFINED_SECTION2 *) InputSection)->SectionDefinitionGuid))) {
&gLzmaCustomDecompressGuid,
&(((EFI_GUID_DEFINED_SECTION2 *)InputSection)->SectionDefinitionGuid)
))
{
return RETURN_INVALID_PARAMETER;
}
@@ -148,15 +154,17 @@ LzmaGuidedSectionExtraction (
*AuthenticationStatus = 0;
return LzmaUefiDecompress (
(UINT8 *) InputSection + ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->DataOffset,
SECTION2_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->DataOffset,
(UINT8 *)InputSection + ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->DataOffset,
SECTION2_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->DataOffset,
*OutputBuffer,
ScratchBuffer
);
} else {
if (!CompareGuid (
&gLzmaCustomDecompressGuid,
&(((EFI_GUID_DEFINED_SECTION *) InputSection)->SectionDefinitionGuid))) {
&gLzmaCustomDecompressGuid,
&(((EFI_GUID_DEFINED_SECTION *)InputSection)->SectionDefinitionGuid)
))
{
return RETURN_INVALID_PARAMETER;
}
@@ -166,15 +174,14 @@ LzmaGuidedSectionExtraction (
*AuthenticationStatus = 0;
return LzmaUefiDecompress (
(UINT8 *) InputSection + ((EFI_GUID_DEFINED_SECTION *) InputSection)->DataOffset,
SECTION_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION *) InputSection)->DataOffset,
(UINT8 *)InputSection + ((EFI_GUID_DEFINED_SECTION *)InputSection)->DataOffset,
SECTION_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION *)InputSection)->DataOffset,
*OutputBuffer,
ScratchBuffer
);
);
}
}
/**
Register LzmaDecompress and LzmaDecompressGetInfo handlers with LzmaCustomerDecompressGuid.
@@ -188,8 +195,8 @@ LzmaDecompressLibConstructor (
)
{
return ExtractGuidedSectionRegisterHandlers (
&gLzmaCustomDecompressGuid,
LzmaGuidedSectionGetInfo,
LzmaGuidedSectionExtraction
);
&gLzmaCustomDecompressGuid,
LzmaGuidedSectionGetInfo,
LzmaGuidedSectionExtraction
);
}

View File

@@ -11,13 +11,12 @@
#include "Sdk/C/7zVersion.h"
#include "Sdk/C/LzmaDec.h"
#define SCRATCH_BUFFER_REQUEST_SIZE SIZE_64KB
#define SCRATCH_BUFFER_REQUEST_SIZE SIZE_64KB
typedef struct
{
ISzAlloc Functions;
VOID *Buffer;
UINTN BufferSize;
typedef struct {
ISzAlloc Functions;
VOID *Buffer;
UINTN BufferSize;
} ISzAllocWithData;
/**
@@ -30,18 +29,18 @@ typedef struct
**/
VOID *
SzAlloc (
CONST ISzAlloc *P,
size_t Size
CONST ISzAlloc *P,
size_t Size
)
{
VOID *Addr;
ISzAllocWithData *Private;
VOID *Addr;
ISzAllocWithData *Private;
Private = (ISzAllocWithData*) P;
Private = (ISzAllocWithData *)P;
if (Private->BufferSize >= Size) {
Addr = Private->Buffer;
Private->Buffer = (VOID*) ((UINT8*)Addr + Size);
Addr = Private->Buffer;
Private->Buffer = (VOID *)((UINT8 *)Addr + Size);
Private->BufferSize -= Size;
return Addr;
} else {
@@ -58,8 +57,8 @@ SzAlloc (
**/
VOID
SzFree (
CONST ISzAlloc *P,
VOID *Address
CONST ISzAlloc *P,
VOID *Address
)
{
//
@@ -69,7 +68,7 @@ SzFree (
//
}
#define LZMA_HEADER_SIZE (LZMA_PROPS_SIZE + 8)
#define LZMA_HEADER_SIZE (LZMA_PROPS_SIZE + 8)
/**
Get the size of the uncompressed buffer by parsing EncodeData header.
@@ -79,17 +78,18 @@ SzFree (
@return The size of the uncompressed buffer.
**/
UINT64
GetDecodedSizeOfBuf(
UINT8 *EncodedData
GetDecodedSizeOfBuf (
UINT8 *EncodedData
)
{
UINT64 DecodedSize;
INTN Index;
UINT64 DecodedSize;
INTN Index;
/* Parse header */
DecodedSize = 0;
for (Index = LZMA_PROPS_SIZE + 7; Index >= LZMA_PROPS_SIZE; Index--)
DecodedSize = LShiftU64(DecodedSize, 8) + EncodedData[Index];
for (Index = LZMA_PROPS_SIZE + 7; Index >= LZMA_PROPS_SIZE; Index--) {
DecodedSize = LShiftU64 (DecodedSize, 8) + EncodedData[Index];
}
return DecodedSize;
}
@@ -143,15 +143,15 @@ LzmaUefiDecompressGetInfo (
{
UInt64 DecodedSize;
ASSERT(SourceSize >= LZMA_HEADER_SIZE);
ASSERT (SourceSize >= LZMA_HEADER_SIZE);
DecodedSize = GetDecodedSizeOfBuf((UINT8*)Source);
DecodedSize = GetDecodedSizeOfBuf ((UINT8 *)Source);
if (DecodedSize > MAX_UINT32) {
return RETURN_UNSUPPORTED;
}
*DestinationSize = (UINT32)DecodedSize;
*ScratchSize = SCRATCH_BUFFER_REQUEST_SIZE;
*ScratchSize = SCRATCH_BUFFER_REQUEST_SIZE;
return RETURN_SUCCESS;
}
@@ -192,25 +192,25 @@ LzmaUefiDecompress (
SizeT EncodedDataSize;
ISzAllocWithData AllocFuncs;
AllocFuncs.Functions.Alloc = SzAlloc;
AllocFuncs.Functions.Free = SzFree;
AllocFuncs.Buffer = Scratch;
AllocFuncs.BufferSize = SCRATCH_BUFFER_REQUEST_SIZE;
AllocFuncs.Functions.Alloc = SzAlloc;
AllocFuncs.Functions.Free = SzFree;
AllocFuncs.Buffer = Scratch;
AllocFuncs.BufferSize = SCRATCH_BUFFER_REQUEST_SIZE;
DecodedBufSize = (SizeT)GetDecodedSizeOfBuf((UINT8*)Source);
EncodedDataSize = (SizeT) (SourceSize - LZMA_HEADER_SIZE);
DecodedBufSize = (SizeT)GetDecodedSizeOfBuf ((UINT8 *)Source);
EncodedDataSize = (SizeT)(SourceSize - LZMA_HEADER_SIZE);
LzmaResult = LzmaDecode(
Destination,
&DecodedBufSize,
(Byte*)((UINT8*)Source + LZMA_HEADER_SIZE),
&EncodedDataSize,
Source,
LZMA_PROPS_SIZE,
LZMA_FINISH_END,
&Status,
&(AllocFuncs.Functions)
);
LzmaResult = LzmaDecode (
Destination,
&DecodedBufSize,
(Byte *)((UINT8 *)Source + LZMA_HEADER_SIZE),
&EncodedDataSize,
Source,
LZMA_PROPS_SIZE,
LZMA_FINISH_END,
&Status,
&(AllocFuncs.Functions)
);
if (LzmaResult == SZ_OK) {
return RETURN_SUCCESS;
@@ -218,4 +218,3 @@ LzmaUefiDecompress (
return RETURN_INVALID_PARAMETER;
}
}

View File

@@ -92,4 +92,3 @@ LzmaUefiDecompress (
);
#endif

View File

@@ -9,73 +9,71 @@
#endif
#ifdef EFIAPI
#include "UefiLzma.h"
#include "UefiLzma.h"
#else
#include <stddef.h>
#include <stddef.h>
#endif
#ifndef EXTERN_C_BEGIN
#ifdef __cplusplus
#define EXTERN_C_BEGIN extern "C" {
#define EXTERN_C_END }
#else
#ifdef __cplusplus
#define EXTERN_C_BEGIN extern "C" {
#define EXTERN_C_END }
#else
#define EXTERN_C_BEGIN
#define EXTERN_C_END
#endif
#endif
#endif
EXTERN_C_BEGIN
#define SZ_OK 0
#define SZ_OK 0
#define SZ_ERROR_DATA 1
#define SZ_ERROR_MEM 2
#define SZ_ERROR_CRC 3
#define SZ_ERROR_UNSUPPORTED 4
#define SZ_ERROR_PARAM 5
#define SZ_ERROR_INPUT_EOF 6
#define SZ_ERROR_OUTPUT_EOF 7
#define SZ_ERROR_READ 8
#define SZ_ERROR_WRITE 9
#define SZ_ERROR_PROGRESS 10
#define SZ_ERROR_FAIL 11
#define SZ_ERROR_THREAD 12
#define SZ_ERROR_DATA 1
#define SZ_ERROR_MEM 2
#define SZ_ERROR_CRC 3
#define SZ_ERROR_UNSUPPORTED 4
#define SZ_ERROR_PARAM 5
#define SZ_ERROR_INPUT_EOF 6
#define SZ_ERROR_OUTPUT_EOF 7
#define SZ_ERROR_READ 8
#define SZ_ERROR_WRITE 9
#define SZ_ERROR_PROGRESS 10
#define SZ_ERROR_FAIL 11
#define SZ_ERROR_THREAD 12
#define SZ_ERROR_ARCHIVE 16
#define SZ_ERROR_NO_ARCHIVE 17
#define SZ_ERROR_ARCHIVE 16
#define SZ_ERROR_NO_ARCHIVE 17
typedef int SRes;
#ifdef _WIN32
/* typedef DWORD WRes; */
typedef unsigned WRes;
#define MY_SRes_HRESULT_FROM_WRes(x) HRESULT_FROM_WIN32(x)
#define MY_SRes_HRESULT_FROM_WRes(x) HRESULT_FROM_WIN32(x)
#else
typedef int WRes;
#define MY__FACILITY_WIN32 7
#define MY__FACILITY__WRes MY__FACILITY_WIN32
#define MY_SRes_HRESULT_FROM_WRes(x) ((HRESULT)(x) <= 0 ? ((HRESULT)(x)) : ((HRESULT) (((x) & 0x0000FFFF) | (MY__FACILITY__WRes << 16) | 0x80000000)))
#define MY__FACILITY_WIN32 7
#define MY__FACILITY__WRes MY__FACILITY_WIN32
#define MY_SRes_HRESULT_FROM_WRes(x) ((HRESULT)(x) <= 0 ? ((HRESULT)(x)) : ((HRESULT) (((x) & 0x0000FFFF) | (MY__FACILITY__WRes << 16) | 0x80000000)))
#endif
#ifndef RINOK
#define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; }
#define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; }
#endif
typedef unsigned char Byte;
typedef short Int16;
typedef unsigned char Byte;
typedef short Int16;
typedef unsigned short UInt16;
#ifdef _LZMA_UINT32_IS_ULONG
typedef long Int32;
typedef long Int32;
typedef unsigned long UInt32;
#else
typedef int Int32;
typedef int Int32;
typedef unsigned int UInt32;
#endif
@@ -84,20 +82,20 @@ typedef unsigned int UInt32;
/* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers.
NOTES: Some code will work incorrectly in that case! */
typedef long Int64;
typedef long Int64;
typedef unsigned long UInt64;
#else
#if defined(_MSC_VER) || defined(__BORLANDC__)
typedef __int64 Int64;
#if defined (_MSC_VER) || defined (__BORLANDC__)
typedef __int64 Int64;
typedef unsigned __int64 UInt64;
#define UINT64_CONST(n) n
#else
typedef long long int Int64;
#define UINT64_CONST(n) n
#else
typedef long long int Int64;
typedef unsigned long long int UInt64;
#define UINT64_CONST(n) n ## ULL
#endif
#define UINT64_CONST(n) n ## ULL
#endif
#endif
@@ -109,28 +107,27 @@ typedef size_t SizeT;
typedef int BoolInt;
/* typedef BoolInt Bool; */
#define True 1
#define False 0
#define True 1
#define False 0
#ifdef _WIN32
#define MY_STD_CALL __stdcall
#define MY_STD_CALL __stdcall
#else
#define MY_STD_CALL
#endif
#if defined(_MSC_VER) && !defined(__clang__)
#if defined (_MSC_VER) && !defined (__clang__)
#if _MSC_VER >= 1300
#define MY_NO_INLINE __declspec(noinline)
#else
#if _MSC_VER >= 1300
#define MY_NO_INLINE __declspec(noinline)
#else
#define MY_NO_INLINE
#endif
#endif
#define MY_FORCE_INLINE __forceinline
#define MY_FORCE_INLINE __forceinline
#define MY_CDECL __cdecl
#define MY_FAST_CALL __fastcall
#define MY_CDECL __cdecl
#define MY_FAST_CALL __fastcall
#else
@@ -142,6 +139,7 @@ typedef int BoolInt;
/* inline keyword : for C++ / C99 */
/* GCC, clang: */
/*
#if defined (__GNUC__) && (__GNUC__ >= 4)
#define MY_FORCE_INLINE __attribute__((always_inline))
@@ -151,179 +149,252 @@ typedef int BoolInt;
#endif
/* The following interfaces use first parameter as pointer to structure */
typedef struct IByteIn IByteIn;
struct IByteIn
{
Byte (*Read)(const IByteIn *p); /* reads one byte, returns 0 in case of EOF or error */
struct IByteIn {
Byte (*Read)(
const IByteIn *p
); /* reads one byte, returns 0 in case of EOF or error */
};
#define IByteIn_Read(p) (p)->Read(p)
#define IByteIn_Read(p) (p)->Read(p)
typedef struct IByteOut IByteOut;
struct IByteOut
{
void (*Write)(const IByteOut *p, Byte b);
struct IByteOut {
void (*Write)(
const IByteOut *p,
Byte b
);
};
#define IByteOut_Write(p, b) (p)->Write(p, b)
#define IByteOut_Write(p, b) (p)->Write(p, b)
typedef struct ISeqInStream ISeqInStream;
struct ISeqInStream
{
SRes (*Read)(const ISeqInStream *p, void *buf, size_t *size);
/* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
(output(*size) < input(*size)) is allowed */
struct ISeqInStream {
SRes (*Read)(
const ISeqInStream *p,
void *buf,
size_t *size
);
/* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
(output(*size) < input(*size)) is allowed */
};
#define ISeqInStream_Read(p, buf, size) (p)->Read(p, buf, size)
#define ISeqInStream_Read(p, buf, size) (p)->Read(p, buf, size)
/* it can return SZ_ERROR_INPUT_EOF */
SRes SeqInStream_Read(const ISeqInStream *stream, void *buf, size_t size);
SRes SeqInStream_Read2(const ISeqInStream *stream, void *buf, size_t size, SRes errorType);
SRes SeqInStream_ReadByte(const ISeqInStream *stream, Byte *buf);
SRes
SeqInStream_Read (
const ISeqInStream *stream,
void *buf,
size_t size
);
SRes
SeqInStream_Read2 (
const ISeqInStream *stream,
void *buf,
size_t size,
SRes errorType
);
SRes
SeqInStream_ReadByte (
const ISeqInStream *stream,
Byte *buf
);
typedef struct ISeqOutStream ISeqOutStream;
struct ISeqOutStream
{
size_t (*Write)(const ISeqOutStream *p, const void *buf, size_t size);
/* Returns: result - the number of actually written bytes.
(result < size) means error */
};
#define ISeqOutStream_Write(p, buf, size) (p)->Write(p, buf, size)
struct ISeqOutStream {
size_t (*Write)(
const ISeqOutStream *p,
const void *buf,
size_t size
);
typedef enum
{
/* Returns: result - the number of actually written bytes.
(result < size) means error */
};
#define ISeqOutStream_Write(p, buf, size) (p)->Write(p, buf, size)
typedef enum {
SZ_SEEK_SET = 0,
SZ_SEEK_CUR = 1,
SZ_SEEK_END = 2
} ESzSeek;
typedef struct ISeekInStream ISeekInStream;
struct ISeekInStream
{
SRes (*Read)(const ISeekInStream *p, void *buf, size_t *size); /* same as ISeqInStream::Read */
SRes (*Seek)(const ISeekInStream *p, Int64 *pos, ESzSeek origin);
struct ISeekInStream {
SRes (*Read)(
const ISeekInStream *p,
void *buf,
size_t *size
); /* same as ISeqInStream::Read */
SRes (*Seek)(
const ISeekInStream *p,
Int64 *pos,
ESzSeek origin
);
};
#define ISeekInStream_Read(p, buf, size) (p)->Read(p, buf, size)
#define ISeekInStream_Seek(p, pos, origin) (p)->Seek(p, pos, origin)
#define ISeekInStream_Read(p, buf, size) (p)->Read(p, buf, size)
#define ISeekInStream_Seek(p, pos, origin) (p)->Seek(p, pos, origin)
typedef struct ILookInStream ILookInStream;
struct ILookInStream
{
SRes (*Look)(const ILookInStream *p, const void **buf, size_t *size);
/* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
(output(*size) > input(*size)) is not allowed
(output(*size) < input(*size)) is allowed */
SRes (*Skip)(const ILookInStream *p, size_t offset);
/* offset must be <= output(*size) of Look */
struct ILookInStream {
SRes (*Look)(
const ILookInStream *p,
const void **buf,
size_t *size
);
SRes (*Read)(const ILookInStream *p, void *buf, size_t *size);
/* reads directly (without buffer). It's same as ISeqInStream::Read */
SRes (*Seek)(const ILookInStream *p, Int64 *pos, ESzSeek origin);
/* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
(output(*size) > input(*size)) is not allowed
(output(*size) < input(*size)) is allowed */
SRes (*Skip)(
const ILookInStream *p,
size_t offset
);
/* offset must be <= output(*size) of Look */
SRes (*Read)(
const ILookInStream *p,
void *buf,
size_t *size
);
/* reads directly (without buffer). It's same as ISeqInStream::Read */
SRes (*Seek)(
const ILookInStream *p,
Int64 *pos,
ESzSeek origin
);
};
#define ILookInStream_Look(p, buf, size) (p)->Look(p, buf, size)
#define ILookInStream_Skip(p, offset) (p)->Skip(p, offset)
#define ILookInStream_Read(p, buf, size) (p)->Read(p, buf, size)
#define ILookInStream_Seek(p, pos, origin) (p)->Seek(p, pos, origin)
#define ILookInStream_Look(p, buf, size) (p)->Look(p, buf, size)
#define ILookInStream_Skip(p, offset) (p)->Skip(p, offset)
#define ILookInStream_Read(p, buf, size) (p)->Read(p, buf, size)
#define ILookInStream_Seek(p, pos, origin) (p)->Seek(p, pos, origin)
SRes
LookInStream_LookRead (
const ILookInStream *stream,
void *buf,
size_t *size
);
SRes LookInStream_LookRead(const ILookInStream *stream, void *buf, size_t *size);
SRes LookInStream_SeekTo(const ILookInStream *stream, UInt64 offset);
SRes
LookInStream_SeekTo (
const ILookInStream *stream,
UInt64 offset
);
/* reads via ILookInStream::Read */
SRes LookInStream_Read2(const ILookInStream *stream, void *buf, size_t size, SRes errorType);
SRes LookInStream_Read(const ILookInStream *stream, void *buf, size_t size);
SRes
LookInStream_Read2 (
const ILookInStream *stream,
void *buf,
size_t size,
SRes errorType
);
SRes
LookInStream_Read (
const ILookInStream *stream,
void *buf,
size_t size
);
typedef struct {
ILookInStream vt;
const ISeekInStream *realStream;
typedef struct
{
ILookInStream vt;
const ISeekInStream *realStream;
size_t pos;
size_t size; /* it's data size */
size_t pos;
size_t size; /* it's data size */
/* the following variables must be set outside */
Byte *buf;
size_t bufSize;
Byte *buf;
size_t bufSize;
} CLookToRead2;
void LookToRead2_CreateVTable(CLookToRead2 *p, int lookahead);
void
LookToRead2_CreateVTable (
CLookToRead2 *p,
int lookahead
);
#define LookToRead2_Init(p) { (p)->pos = (p)->size = 0; }
#define LookToRead2_Init(p) { (p)->pos = (p)->size = 0; }
typedef struct
{
ISeqInStream vt;
const ILookInStream *realStream;
typedef struct {
ISeqInStream vt;
const ILookInStream *realStream;
} CSecToLook;
void SecToLook_CreateVTable(CSecToLook *p);
void
SecToLook_CreateVTable (
CSecToLook *p
);
typedef struct
{
ISeqInStream vt;
const ILookInStream *realStream;
typedef struct {
ISeqInStream vt;
const ILookInStream *realStream;
} CSecToRead;
void SecToRead_CreateVTable(CSecToRead *p);
void
SecToRead_CreateVTable (
CSecToRead *p
);
typedef struct ICompressProgress ICompressProgress;
struct ICompressProgress
{
SRes (*Progress)(const ICompressProgress *p, UInt64 inSize, UInt64 outSize);
/* Returns: result. (result != SZ_OK) means break.
Value (UInt64)(Int64)-1 for size means unknown value. */
struct ICompressProgress {
SRes (*Progress)(
const ICompressProgress *p,
UInt64 inSize,
UInt64 outSize
);
/* Returns: result. (result != SZ_OK) means break.
Value (UInt64)(Int64)-1 for size means unknown value. */
};
#define ICompressProgress_Progress(p, inSize, outSize) (p)->Progress(p, inSize, outSize)
#define ICompressProgress_Progress(p, inSize, outSize) (p)->Progress(p, inSize, outSize)
typedef struct ISzAlloc ISzAlloc;
typedef const ISzAlloc * ISzAllocPtr;
typedef const ISzAlloc *ISzAllocPtr;
struct ISzAlloc
{
void *(*Alloc)(ISzAllocPtr p, size_t size);
void (*Free)(ISzAllocPtr p, void *address); /* address can be 0 */
struct ISzAlloc {
void *(*Alloc)(
ISzAllocPtr p,
size_t size
);
void (*Free)(
ISzAllocPtr p,
void *address
); /* address can be 0 */
};
#define ISzAlloc_Alloc(p, size) (p)->Alloc(p, size)
#define ISzAlloc_Free(p, a) (p)->Free(p, a)
#define ISzAlloc_Alloc(p, size) (p)->Alloc(p, size)
#define ISzAlloc_Free(p, a) (p)->Free(p, a)
/* deprecated */
#define IAlloc_Alloc(p, size) ISzAlloc_Alloc(p, size)
#define IAlloc_Free(p, a) ISzAlloc_Free(p, a)
#define IAlloc_Alloc(p, size) ISzAlloc_Alloc(p, size)
#define IAlloc_Free(p, a) ISzAlloc_Free(p, a)
#ifndef MY_offsetof
#ifdef offsetof
#define MY_offsetof(type, m) offsetof(type, m)
/*
#define MY_offsetof(type, m) FIELD_OFFSET(type, m)
*/
#define MY_offsetof(type, m) offsetof(type, m)
/*
#define MY_offsetof(type, m) FIELD_OFFSET(type, m)
*/
#else
#define MY_offsetof(type, m) ((size_t)&(((type *)0)->m))
#define MY_offsetof(type, m) ((size_t)&(((type *)0)->m))
#endif
#endif
#ifndef MY_container_of
/*
@@ -339,38 +410,36 @@ struct ISzAlloc
GCC 4.8.1 : classes with non-public variable members"
*/
#define MY_container_of(ptr, type, m) ((type *)((char *)(1 ? (ptr) : &((type *)0)->m) - MY_offsetof(type, m)))
#define MY_container_of(ptr, type, m) ((type *)((char *)(1 ? (ptr) : &((type *)0)->m) - MY_offsetof(type, m)))
#endif
#define CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m) ((type *)(ptr))
#define CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m) ((type *)(ptr))
/*
#define CONTAINER_FROM_VTBL(ptr, type, m) CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m)
*/
#define CONTAINER_FROM_VTBL(ptr, type, m) MY_container_of(ptr, type, m)
#define CONTAINER_FROM_VTBL(ptr, type, m) MY_container_of(ptr, type, m)
#define CONTAINER_FROM_VTBL_CLS(ptr, type, m) CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m)
#define CONTAINER_FROM_VTBL_CLS(ptr, type, m) CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m)
/*
#define CONTAINER_FROM_VTBL_CLS(ptr, type, m) CONTAINER_FROM_VTBL(ptr, type, m)
*/
#ifdef _WIN32
#define CHAR_PATH_SEPARATOR '\\'
#define WCHAR_PATH_SEPARATOR L'\\'
#define STRING_PATH_SEPARATOR "\\"
#define WSTRING_PATH_SEPARATOR L"\\"
#define CHAR_PATH_SEPARATOR '\\'
#define WCHAR_PATH_SEPARATOR L'\\'
#define STRING_PATH_SEPARATOR "\\"
#define WSTRING_PATH_SEPARATOR L"\\"
#else
#define CHAR_PATH_SEPARATOR '/'
#define WCHAR_PATH_SEPARATOR L'/'
#define STRING_PATH_SEPARATOR "/"
#define WSTRING_PATH_SEPARATOR L"/"
#define CHAR_PATH_SEPARATOR '/'
#define WCHAR_PATH_SEPARATOR L'/'
#define STRING_PATH_SEPARATOR "/"
#define WSTRING_PATH_SEPARATOR L"/"
#endif

View File

@@ -1,27 +1,27 @@
#define MY_VER_MAJOR 19
#define MY_VER_MINOR 00
#define MY_VER_BUILD 0
#define MY_VERSION_NUMBERS "19.00"
#define MY_VERSION MY_VERSION_NUMBERS
#define MY_VER_MAJOR 19
#define MY_VER_MINOR 00
#define MY_VER_BUILD 0
#define MY_VERSION_NUMBERS "19.00"
#define MY_VERSION MY_VERSION_NUMBERS
#ifdef MY_CPU_NAME
#define MY_VERSION_CPU MY_VERSION " (" MY_CPU_NAME ")"
#define MY_VERSION_CPU MY_VERSION " (" MY_CPU_NAME ")"
#else
#define MY_VERSION_CPU MY_VERSION
#define MY_VERSION_CPU MY_VERSION
#endif
#define MY_DATE "2019-02-21"
#define MY_DATE "2019-02-21"
#undef MY_COPYRIGHT
#undef MY_VERSION_COPYRIGHT_DATE
#define MY_AUTHOR_NAME "Igor Pavlov"
#define MY_COPYRIGHT_PD "Igor Pavlov : Public domain"
#define MY_COPYRIGHT_CR "Copyright (c) 1999-2018 Igor Pavlov"
#define MY_AUTHOR_NAME "Igor Pavlov"
#define MY_COPYRIGHT_PD "Igor Pavlov : Public domain"
#define MY_COPYRIGHT_CR "Copyright (c) 1999-2018 Igor Pavlov"
#ifdef USE_COPYRIGHT_CR
#define MY_COPYRIGHT MY_COPYRIGHT_CR
#define MY_COPYRIGHT MY_COPYRIGHT_CR
#else
#define MY_COPYRIGHT MY_COPYRIGHT_PD
#define MY_COPYRIGHT MY_COPYRIGHT_PD
#endif
#define MY_COPYRIGHT_DATE MY_COPYRIGHT " : " MY_DATE
#define MY_VERSION_COPYRIGHT_DATE MY_VERSION_CPU " : " MY_COPYRIGHT " : " MY_DATE
#define MY_COPYRIGHT_DATE MY_COPYRIGHT " : " MY_DATE
#define MY_VERSION_COPYRIGHT_DATE MY_VERSION_CPU " : " MY_COPYRIGHT " : " MY_DATE

View File

@@ -51,13 +51,55 @@ in CALL instructions to increase the compression ratio.
}
*/
#define x86_Convert_Init(state) { state = 0; }
SizeT x86_Convert(Byte *data, SizeT size, UInt32 ip, UInt32 *state, int encoding);
SizeT ARM_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
SizeT ARMT_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
SizeT PPC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
SizeT SPARC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
SizeT IA64_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
#define x86_Convert_Init(state) { state = 0; }
SizeT
x86_Convert (
Byte *data,
SizeT size,
UInt32 ip,
UInt32 *state,
int encoding
);
SizeT
ARM_Convert (
Byte *data,
SizeT size,
UInt32 ip,
int encoding
);
SizeT
ARMT_Convert (
Byte *data,
SizeT size,
UInt32 ip,
int encoding
);
SizeT
PPC_Convert (
Byte *data,
SizeT size,
UInt32 ip,
int encoding
);
SizeT
SPARC_Convert (
Byte *data,
SizeT size,
UInt32 ip,
int encoding
);
SizeT
IA64_Convert (
Byte *data,
SizeT size,
UInt32 ip,
int encoding
);
EXTERN_C_END

View File

@@ -5,40 +5,49 @@
#include "Bra.h"
#define Test86MSByte(b) ((((b) + 1) & 0xFE) == 0)
#define Test86MSByte(b) ((((b) + 1) & 0xFE) == 0)
SizeT x86_Convert(Byte *data, SizeT size, UInt32 ip, UInt32 *state, int encoding)
SizeT
x86_Convert (
Byte *data,
SizeT size,
UInt32 ip,
UInt32 *state,
int encoding
)
{
SizeT pos = 0;
UInt32 mask = *state & 7;
if (size < 5)
return 0;
size -= 4;
ip += 5;
SizeT pos = 0;
UInt32 mask = *state & 7;
for (;;)
{
Byte *p = data + pos;
const Byte *limit = data + size;
for (; p < limit; p++)
if ((*p & 0xFE) == 0xE8)
if (size < 5) {
return 0;
}
size -= 4;
ip += 5;
for ( ; ;) {
Byte *p = data + pos;
const Byte *limit = data + size;
for ( ; p < limit; p++) {
if ((*p & 0xFE) == 0xE8) {
break;
}
}
{
SizeT d = (SizeT)(p - data - pos);
SizeT d = (SizeT)(p - data - pos);
pos = (SizeT)(p - data);
if (p >= limit)
{
if (p >= limit) {
*state = (d > 2 ? 0 : mask >> (unsigned)d);
return pos;
}
if (d > 2)
if (d > 2) {
mask = 0;
else
{
} else {
mask >>= (unsigned)d;
if (mask != 0 && (mask > 4 || mask == 3 || Test86MSByte(p[(size_t)(mask >> 1) + 1])))
{
if ((mask != 0) && ((mask > 4) || (mask == 3) || Test86MSByte (p[(size_t)(mask >> 1) + 1]))) {
mask = (mask >> 1) | 4;
pos++;
continue;
@@ -46,35 +55,35 @@ SizeT x86_Convert(Byte *data, SizeT size, UInt32 ip, UInt32 *state, int encoding
}
}
if (Test86MSByte(p[4]))
{
UInt32 v = ((UInt32)p[4] << 24) | ((UInt32)p[3] << 16) | ((UInt32)p[2] << 8) | ((UInt32)p[1]);
UInt32 cur = ip + (UInt32)pos;
if (Test86MSByte (p[4])) {
UInt32 v = ((UInt32)p[4] << 24) | ((UInt32)p[3] << 16) | ((UInt32)p[2] << 8) | ((UInt32)p[1]);
UInt32 cur = ip + (UInt32)pos;
pos += 5;
if (encoding)
if (encoding) {
v += cur;
else
} else {
v -= cur;
if (mask != 0)
{
unsigned sh = (mask & 6) << 2;
if (Test86MSByte((Byte)(v >> sh)))
{
}
if (mask != 0) {
unsigned sh = (mask & 6) << 2;
if (Test86MSByte ((Byte)(v >> sh))) {
v ^= (((UInt32)0x100 << sh) - 1);
if (encoding)
if (encoding) {
v += cur;
else
} else {
v -= cur;
}
}
mask = 0;
}
p[1] = (Byte)v;
p[2] = (Byte)(v >> 8);
p[3] = (Byte)(v >> 16);
p[4] = (Byte)(0 - ((v >> 24) & 1));
}
else
{
} else {
mask = (mask >> 1) | 4;
pos++;
}

View File

@@ -7,8 +7,8 @@
#ifdef _MSC_VER
#ifdef UNDER_CE
#define RPC_NO_WINDOWS_H
/* #pragma warning(disable : 4115) // '_RPC_ASYNC_STATE' : named type definition in parentheses */
#define RPC_NO_WINDOWS_H
/* #pragma warning(disable : 4115) // '_RPC_ASYNC_STATE' : named type definition in parentheses */
#pragma warning(disable : 4201) // nonstandard extension used : nameless struct/union
#pragma warning(disable : 4214) // nonstandard extension used : bit field types other than int
#endif
@@ -27,7 +27,7 @@
#endif
#define UNUSED_VAR(x) (void)x;
#define UNUSED_VAR(x) (void)x;
/* #define UNUSED_VAR(x) x=x; */
#endif

View File

@@ -16,269 +16,252 @@ If MY_CPU_LE and MY_CPU_BE are not defined, we don't know about ENDIANNESS of pl
MY_CPU_LE_UNALIGN means that CPU is LITTLE ENDIAN and CPU supports unaligned memory accesses.
*/
#if defined(_M_X64) \
|| defined(_M_AMD64) \
|| defined(__x86_64__) \
|| defined(__AMD64__) \
|| defined(__amd64__)
#define MY_CPU_AMD64
#if defined (_M_X64) \
|| defined (_M_AMD64) \
|| defined (__x86_64__) \
|| defined (__AMD64__) \
|| defined (__amd64__)
#define MY_CPU_AMD64
#ifdef __ILP32__
#define MY_CPU_NAME "x32"
#define MY_CPU_NAME "x32"
#else
#define MY_CPU_NAME "x64"
#define MY_CPU_NAME "x64"
#endif
#define MY_CPU_64BIT
#define MY_CPU_64BIT
#endif
#if defined(_M_IX86) \
|| defined(__i386__)
#define MY_CPU_X86
#define MY_CPU_NAME "x86"
#define MY_CPU_32BIT
#if defined (_M_IX86) \
|| defined (__i386__)
#define MY_CPU_X86
#define MY_CPU_NAME "x86"
#define MY_CPU_32BIT
#endif
#if defined(_M_ARM64) \
|| defined(__AARCH64EL__) \
|| defined(__AARCH64EB__) \
|| defined(__aarch64__)
#define MY_CPU_ARM64
#define MY_CPU_NAME "arm64"
#define MY_CPU_64BIT
#if defined (_M_ARM64) \
|| defined (__AARCH64EL__) \
|| defined (__AARCH64EB__) \
|| defined (__aarch64__)
#define MY_CPU_ARM64
#define MY_CPU_NAME "arm64"
#define MY_CPU_64BIT
#endif
#if defined(_M_ARM) \
|| defined(_M_ARM_NT) \
|| defined(_M_ARMT) \
|| defined(__arm__) \
|| defined(__thumb__) \
|| defined(__ARMEL__) \
|| defined(__ARMEB__) \
|| defined(__THUMBEL__) \
|| defined(__THUMBEB__)
#define MY_CPU_ARM
#define MY_CPU_NAME "arm"
#define MY_CPU_32BIT
#if defined (_M_ARM) \
|| defined (_M_ARM_NT) \
|| defined (_M_ARMT) \
|| defined (__arm__) \
|| defined (__thumb__) \
|| defined (__ARMEL__) \
|| defined (__ARMEB__) \
|| defined (__THUMBEL__) \
|| defined (__THUMBEB__)
#define MY_CPU_ARM
#define MY_CPU_NAME "arm"
#define MY_CPU_32BIT
#endif
#if defined(_M_IA64) \
|| defined(__ia64__)
#define MY_CPU_IA64
#define MY_CPU_NAME "ia64"
#define MY_CPU_64BIT
#if defined (_M_IA64) \
|| defined (__ia64__)
#define MY_CPU_IA64
#define MY_CPU_NAME "ia64"
#define MY_CPU_64BIT
#endif
#if defined(__mips64) \
|| defined(__mips64__) \
|| (defined(__mips) && (__mips == 64 || __mips == 4 || __mips == 3))
#define MY_CPU_NAME "mips64"
#define MY_CPU_64BIT
#elif defined(__mips__)
#define MY_CPU_NAME "mips"
/* #define MY_CPU_32BIT */
#if defined (__mips64) \
|| defined (__mips64__) \
|| (defined (__mips) && (__mips == 64 || __mips == 4 || __mips == 3))
#define MY_CPU_NAME "mips64"
#define MY_CPU_64BIT
#elif defined (__mips__)
#define MY_CPU_NAME "mips"
/* #define MY_CPU_32BIT */
#endif
#if defined(__ppc64__) \
|| defined(__powerpc64__)
#if defined (__ppc64__) \
|| defined (__powerpc64__)
#ifdef __ILP32__
#define MY_CPU_NAME "ppc64-32"
#define MY_CPU_NAME "ppc64-32"
#else
#define MY_CPU_NAME "ppc64"
#define MY_CPU_NAME "ppc64"
#endif
#define MY_CPU_64BIT
#elif defined(__ppc__) \
|| defined(__powerpc__)
#define MY_CPU_NAME "ppc"
#define MY_CPU_32BIT
#define MY_CPU_64BIT
#elif defined (__ppc__) \
|| defined (__powerpc__)
#define MY_CPU_NAME "ppc"
#define MY_CPU_32BIT
#endif
#if defined(__sparc64__)
#define MY_CPU_NAME "sparc64"
#define MY_CPU_64BIT
#elif defined(__sparc__)
#define MY_CPU_NAME "sparc"
/* #define MY_CPU_32BIT */
#if defined (__sparc64__)
#define MY_CPU_NAME "sparc64"
#define MY_CPU_64BIT
#elif defined (__sparc__)
#define MY_CPU_NAME "sparc"
/* #define MY_CPU_32BIT */
#endif
#if defined(MY_CPU_X86) || defined(MY_CPU_AMD64)
#if defined (MY_CPU_X86) || defined (MY_CPU_AMD64)
#define MY_CPU_X86_OR_AMD64
#endif
#ifdef _WIN32
#ifdef MY_CPU_ARM
#define MY_CPU_ARM_LE
#define MY_CPU_ARM_LE
#endif
#ifdef MY_CPU_ARM64
#define MY_CPU_ARM64_LE
#define MY_CPU_ARM64_LE
#endif
#ifdef _M_IA64
#define MY_CPU_IA64_LE
#define MY_CPU_IA64_LE
#endif
#endif
#if defined(MY_CPU_X86_OR_AMD64) \
|| defined(MY_CPU_ARM_LE) \
|| defined(MY_CPU_ARM64_LE) \
|| defined(MY_CPU_IA64_LE) \
|| defined(__LITTLE_ENDIAN__) \
|| defined(__ARMEL__) \
|| defined(__THUMBEL__) \
|| defined(__AARCH64EL__) \
|| defined(__MIPSEL__) \
|| defined(__MIPSEL) \
|| defined(_MIPSEL) \
|| defined(__BFIN__) \
|| (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__))
#define MY_CPU_LE
#if defined (MY_CPU_X86_OR_AMD64) \
|| defined (MY_CPU_ARM_LE) \
|| defined (MY_CPU_ARM64_LE) \
|| defined (MY_CPU_IA64_LE) \
|| defined (__LITTLE_ENDIAN__) \
|| defined (__ARMEL__) \
|| defined (__THUMBEL__) \
|| defined (__AARCH64EL__) \
|| defined (__MIPSEL__) \
|| defined (__MIPSEL) \
|| defined (_MIPSEL) \
|| defined (__BFIN__) \
|| (defined (__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__))
#define MY_CPU_LE
#endif
#if defined(__BIG_ENDIAN__) \
|| defined(__ARMEB__) \
|| defined(__THUMBEB__) \
|| defined(__AARCH64EB__) \
|| defined(__MIPSEB__) \
|| defined(__MIPSEB) \
|| defined(_MIPSEB) \
|| defined(__m68k__) \
|| defined(__s390__) \
|| defined(__s390x__) \
|| defined(__zarch__) \
|| (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__))
#define MY_CPU_BE
#if defined (__BIG_ENDIAN__) \
|| defined (__ARMEB__) \
|| defined (__THUMBEB__) \
|| defined (__AARCH64EB__) \
|| defined (__MIPSEB__) \
|| defined (__MIPSEB) \
|| defined (_MIPSEB) \
|| defined (__m68k__) \
|| defined (__s390__) \
|| defined (__s390x__) \
|| defined (__zarch__) \
|| (defined (__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__))
#define MY_CPU_BE
#endif
#if defined(MY_CPU_LE) && defined(MY_CPU_BE)
#if defined (MY_CPU_LE) && defined (MY_CPU_BE)
#error Stop_Compiling_Bad_Endian
#endif
#if defined(MY_CPU_32BIT) && defined(MY_CPU_64BIT)
#if defined (MY_CPU_32BIT) && defined (MY_CPU_64BIT)
#error Stop_Compiling_Bad_32_64_BIT
#endif
#ifndef MY_CPU_NAME
#ifdef MY_CPU_LE
#define MY_CPU_NAME "LE"
#elif defined(MY_CPU_BE)
#define MY_CPU_NAME "BE"
#define MY_CPU_NAME "LE"
#elif defined (MY_CPU_BE)
#define MY_CPU_NAME "BE"
#else
/*
#define MY_CPU_NAME ""
*/
/*
#define MY_CPU_NAME ""
*/
#endif
#endif
#ifdef MY_CPU_LE
#if defined(MY_CPU_X86_OR_AMD64) \
|| defined(MY_CPU_ARM64) \
|| defined(__ARM_FEATURE_UNALIGNED)
#define MY_CPU_LE_UNALIGN
#if defined (MY_CPU_X86_OR_AMD64) \
|| defined (MY_CPU_ARM64) \
|| defined (__ARM_FEATURE_UNALIGNED)
#define MY_CPU_LE_UNALIGN
#endif
#endif
#ifdef MY_CPU_LE_UNALIGN
#define GetUi16(p) (*(const UInt16 *)(const void *)(p))
#define GetUi32(p) (*(const UInt32 *)(const void *)(p))
#define GetUi64(p) (*(const UInt64 *)(const void *)(p))
#define GetUi16(p) (*(const UInt16 *)(const void *)(p))
#define GetUi32(p) (*(const UInt32 *)(const void *)(p))
#define GetUi64(p) (*(const UInt64 *)(const void *)(p))
#define SetUi16(p, v) { *(UInt16 *)(p) = (v); }
#define SetUi32(p, v) { *(UInt32 *)(p) = (v); }
#define SetUi64(p, v) { *(UInt64 *)(p) = (v); }
#define SetUi16(p, v) { *(UInt16 *)(p) = (v); }
#define SetUi32(p, v) { *(UInt32 *)(p) = (v); }
#define SetUi64(p, v) { *(UInt64 *)(p) = (v); }
#else
#define GetUi16(p) ( (UInt16) ( \
#define GetUi16(p) ( (UInt16) (\
((const Byte *)(p))[0] | \
((UInt16)((const Byte *)(p))[1] << 8) ))
#define GetUi32(p) ( \
#define GetUi32(p) (\
((const Byte *)(p))[0] | \
((UInt32)((const Byte *)(p))[1] << 8) | \
((UInt32)((const Byte *)(p))[2] << 16) | \
((UInt32)((const Byte *)(p))[3] << 24))
#define GetUi64(p) (GetUi32(p) | ((UInt64)GetUi32(((const Byte *)(p)) + 4) << 32))
#define GetUi64(p) (GetUi32(p) | ((UInt64)GetUi32(((const Byte *)(p)) + 4) << 32))
#define SetUi16(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v); \
#define SetUi16(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v);\
_ppp_[0] = (Byte)_vvv_; \
_ppp_[1] = (Byte)(_vvv_ >> 8); }
#define SetUi32(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v); \
#define SetUi32(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v);\
_ppp_[0] = (Byte)_vvv_; \
_ppp_[1] = (Byte)(_vvv_ >> 8); \
_ppp_[2] = (Byte)(_vvv_ >> 16); \
_ppp_[3] = (Byte)(_vvv_ >> 24); }
#define SetUi64(p, v) { Byte *_ppp2_ = (Byte *)(p); UInt64 _vvv2_ = (v); \
#define SetUi64(p, v) { Byte *_ppp2_ = (Byte *)(p); UInt64 _vvv2_ = (v);\
SetUi32(_ppp2_ , (UInt32)_vvv2_); \
SetUi32(_ppp2_ + 4, (UInt32)(_vvv2_ >> 32)); }
#endif
#ifdef __has_builtin
#define MY__has_builtin(x) __has_builtin(x)
#define MY__has_builtin(x) __has_builtin(x)
#else
#define MY__has_builtin(x) 0
#define MY__has_builtin(x) 0
#endif
#if defined(MY_CPU_LE_UNALIGN) && /* defined(_WIN64) && */ (_MSC_VER >= 1300)
#if defined (MY_CPU_LE_UNALIGN) && /* defined(_WIN64) && */ (_MSC_VER >= 1300)
/* Note: we use bswap instruction, that is unsupported in 386 cpu */
#include <stdlib.h>
#include <stdlib.h>
#pragma intrinsic(_byteswap_ushort)
#pragma intrinsic(_byteswap_ulong)
#pragma intrinsic(_byteswap_uint64)
#pragma intrinsic(_byteswap_ushort)
#pragma intrinsic(_byteswap_ulong)
#pragma intrinsic(_byteswap_uint64)
/* #define GetBe16(p) _byteswap_ushort(*(const UInt16 *)(const Byte *)(p)) */
#define GetBe32(p) _byteswap_ulong(*(const UInt32 *)(const Byte *)(p))
#define GetBe64(p) _byteswap_uint64(*(const UInt64 *)(const Byte *)(p))
#define GetBe32(p) _byteswap_ulong(*(const UInt32 *)(const Byte *)(p))
#define GetBe64(p) _byteswap_uint64(*(const UInt64 *)(const Byte *)(p))
#define SetBe32(p, v) (*(UInt32 *)(void *)(p)) = _byteswap_ulong(v)
#define SetBe32(p, v) (*(UInt32 *)(void *)(p)) = _byteswap_ulong(v)
#elif defined(MY_CPU_LE_UNALIGN) && ( \
(defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))) \
|| (defined(__clang__) && MY__has_builtin(__builtin_bswap16)) )
#elif defined (MY_CPU_LE_UNALIGN) && ( \
(defined (__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))) \
|| (defined (__clang__) && MY__has_builtin (__builtin_bswap16)))
/* #define GetBe16(p) __builtin_bswap16(*(const UInt16 *)(const Byte *)(p)) */
#define GetBe32(p) __builtin_bswap32(*(const UInt32 *)(const Byte *)(p))
#define GetBe64(p) __builtin_bswap64(*(const UInt64 *)(const Byte *)(p))
#define GetBe32(p) __builtin_bswap32(*(const UInt32 *)(const Byte *)(p))
#define GetBe64(p) __builtin_bswap64(*(const UInt64 *)(const Byte *)(p))
#define SetBe32(p, v) (*(UInt32 *)(void *)(p)) = __builtin_bswap32(v)
#define SetBe32(p, v) (*(UInt32 *)(void *)(p)) = __builtin_bswap32(v)
#else
#define GetBe32(p) ( \
#define GetBe32(p) (\
((UInt32)((const Byte *)(p))[0] << 24) | \
((UInt32)((const Byte *)(p))[1] << 16) | \
((UInt32)((const Byte *)(p))[2] << 8) | \
((const Byte *)(p))[3] )
#define GetBe64(p) (((UInt64)GetBe32(p) << 32) | GetBe32(((const Byte *)(p)) + 4))
#define GetBe64(p) (((UInt64)GetBe32(p) << 32) | GetBe32(((const Byte *)(p)) + 4))
#define SetBe32(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v); \
#define SetBe32(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v);\
_ppp_[0] = (Byte)(_vvv_ >> 24); \
_ppp_[1] = (Byte)(_vvv_ >> 16); \
_ppp_[2] = (Byte)(_vvv_ >> 8); \
@@ -286,48 +269,65 @@ MY_CPU_LE_UNALIGN means that CPU is LITTLE ENDIAN and CPU supports unaligned mem
#endif
#ifndef GetBe16
#define GetBe16(p) ( (UInt16) ( \
#define GetBe16(p) ( (UInt16) (\
((UInt16)((const Byte *)(p))[0] << 8) | \
((const Byte *)(p))[1] ))
#endif
#ifdef MY_CPU_X86_OR_AMD64
typedef struct
{
UInt32 maxFunc;
UInt32 vendor[3];
UInt32 ver;
UInt32 b;
UInt32 c;
UInt32 d;
typedef struct {
UInt32 maxFunc;
UInt32 vendor[3];
UInt32 ver;
UInt32 b;
UInt32 c;
UInt32 d;
} Cx86cpuid;
enum
{
enum {
CPU_FIRM_INTEL,
CPU_FIRM_AMD,
CPU_FIRM_VIA
};
void MyCPUID(UInt32 function, UInt32 *a, UInt32 *b, UInt32 *c, UInt32 *d);
void
MyCPUID (
UInt32 function,
UInt32 *a,
UInt32 *b,
UInt32 *c,
UInt32 *d
);
BoolInt x86cpuid_CheckAndRead(Cx86cpuid *p);
int x86cpuid_GetFirm(const Cx86cpuid *p);
BoolInt
x86cpuid_CheckAndRead (
Cx86cpuid *p
);
#define x86cpuid_GetFamily(ver) (((ver >> 16) & 0xFF0) | ((ver >> 8) & 0xF))
#define x86cpuid_GetModel(ver) (((ver >> 12) & 0xF0) | ((ver >> 4) & 0xF))
#define x86cpuid_GetStepping(ver) (ver & 0xF)
int
x86cpuid_GetFirm (
const Cx86cpuid *p
);
BoolInt CPU_Is_InOrder();
BoolInt CPU_Is_Aes_Supported();
BoolInt CPU_IsSupported_PageGB();
#define x86cpuid_GetFamily(ver) (((ver >> 16) & 0xFF0) | ((ver >> 8) & 0xF))
#define x86cpuid_GetModel(ver) (((ver >> 12) & 0xF0) | ((ver >> 4) & 0xF))
#define x86cpuid_GetStepping(ver) (ver & 0xF)
BoolInt
CPU_Is_InOrder (
);
BoolInt
CPU_Is_Aes_Supported (
);
BoolInt
CPU_IsSupported_PageGB (
);
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -10,77 +10,126 @@ EXTERN_C_BEGIN
typedef UInt32 CLzRef;
typedef struct _CMatchFinder
{
Byte *buffer;
UInt32 pos;
UInt32 posLimit;
UInt32 streamPos;
UInt32 lenLimit;
typedef struct _CMatchFinder {
Byte *buffer;
UInt32 pos;
UInt32 posLimit;
UInt32 streamPos;
UInt32 lenLimit;
UInt32 cyclicBufferPos;
UInt32 cyclicBufferSize; /* it must be = (historySize + 1) */
UInt32 cyclicBufferPos;
UInt32 cyclicBufferSize; /* it must be = (historySize + 1) */
Byte streamEndWasReached;
Byte btMode;
Byte bigHash;
Byte directInput;
Byte streamEndWasReached;
Byte btMode;
Byte bigHash;
Byte directInput;
UInt32 matchMaxLen;
CLzRef *hash;
CLzRef *son;
UInt32 hashMask;
UInt32 cutValue;
UInt32 matchMaxLen;
CLzRef *hash;
CLzRef *son;
UInt32 hashMask;
UInt32 cutValue;
Byte *bufferBase;
ISeqInStream *stream;
Byte *bufferBase;
ISeqInStream *stream;
UInt32 blockSize;
UInt32 keepSizeBefore;
UInt32 keepSizeAfter;
UInt32 blockSize;
UInt32 keepSizeBefore;
UInt32 keepSizeAfter;
UInt32 numHashBytes;
size_t directInputRem;
UInt32 historySize;
UInt32 fixedHashSize;
UInt32 hashSizeSum;
SRes result;
UInt32 crc[256];
size_t numRefs;
UInt32 numHashBytes;
size_t directInputRem;
UInt32 historySize;
UInt32 fixedHashSize;
UInt32 hashSizeSum;
SRes result;
UInt32 crc[256];
size_t numRefs;
UInt64 expectedDataSize;
UInt64 expectedDataSize;
} CMatchFinder;
#define Inline_MatchFinder_GetPointerToCurrentPos(p) ((p)->buffer)
#define Inline_MatchFinder_GetPointerToCurrentPos(p) ((p)->buffer)
#define Inline_MatchFinder_GetNumAvailableBytes(p) ((p)->streamPos - (p)->pos)
#define Inline_MatchFinder_GetNumAvailableBytes(p) ((p)->streamPos - (p)->pos)
#define Inline_MatchFinder_IsFinishedOK(p) \
((p)->streamEndWasReached \
&& (p)->streamPos == (p)->pos \
&& (!(p)->directInput || (p)->directInputRem == 0))
int MatchFinder_NeedMove(CMatchFinder *p);
Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p);
void MatchFinder_MoveBlock(CMatchFinder *p);
void MatchFinder_ReadIfRequired(CMatchFinder *p);
int
MatchFinder_NeedMove (
CMatchFinder *p
);
void MatchFinder_Construct(CMatchFinder *p);
Byte *
MatchFinder_GetPointerToCurrentPos (
CMatchFinder *p
);
void
MatchFinder_MoveBlock (
CMatchFinder *p
);
void
MatchFinder_ReadIfRequired (
CMatchFinder *p
);
void
MatchFinder_Construct (
CMatchFinder *p
);
/* Conditions:
historySize <= 3 GB
keepAddBufferBefore + matchMaxLen + keepAddBufferAfter < 511MB
*/
int MatchFinder_Create(CMatchFinder *p, UInt32 historySize,
UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter,
ISzAllocPtr alloc);
void MatchFinder_Free(CMatchFinder *p, ISzAllocPtr alloc);
void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, size_t numItems);
void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue);
int
MatchFinder_Create (
CMatchFinder *p,
UInt32 historySize,
UInt32 keepAddBufferBefore,
UInt32 matchMaxLen,
UInt32 keepAddBufferAfter,
ISzAllocPtr alloc
);
UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *buffer, CLzRef *son,
UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 _cutValue,
UInt32 *distances, UInt32 maxLen);
void
MatchFinder_Free (
CMatchFinder *p,
ISzAllocPtr alloc
);
void
MatchFinder_Normalize3 (
UInt32 subValue,
CLzRef *items,
size_t numItems
);
void
MatchFinder_ReduceOffsets (
CMatchFinder *p,
UInt32 subValue
);
UInt32 *
GetMatchesSpec1 (
UInt32 lenLimit,
UInt32 curMatch,
UInt32 pos,
const Byte *buffer,
CLzRef *son,
UInt32 _cyclicBufferPos,
UInt32 _cyclicBufferSize,
UInt32 _cutValue,
UInt32 *distances,
UInt32 maxLen
);
/*
Conditions:
@@ -88,33 +137,82 @@ Conditions:
Mf_GetPointerToCurrentPos_Func's result must be used only before any other function
*/
typedef void (*Mf_Init_Func)(void *object);
typedef UInt32 (*Mf_GetNumAvailableBytes_Func)(void *object);
typedef const Byte * (*Mf_GetPointerToCurrentPos_Func)(void *object);
typedef UInt32 (*Mf_GetMatches_Func)(void *object, UInt32 *distances);
typedef void (*Mf_Skip_Func)(void *object, UInt32);
typedef void (*Mf_Init_Func)(
void *object
);
typedef UInt32 (*Mf_GetNumAvailableBytes_Func)(
void *object
);
typedef const Byte * (*Mf_GetPointerToCurrentPos_Func)(
void *object
);
typedef UInt32 (*Mf_GetMatches_Func)(
void *object,
UInt32 *distances
);
typedef void (*Mf_Skip_Func)(
void *object,
UInt32
);
typedef struct _IMatchFinder
{
Mf_Init_Func Init;
Mf_GetNumAvailableBytes_Func GetNumAvailableBytes;
Mf_GetPointerToCurrentPos_Func GetPointerToCurrentPos;
Mf_GetMatches_Func GetMatches;
Mf_Skip_Func Skip;
typedef struct _IMatchFinder {
Mf_Init_Func Init;
Mf_GetNumAvailableBytes_Func GetNumAvailableBytes;
Mf_GetPointerToCurrentPos_Func GetPointerToCurrentPos;
Mf_GetMatches_Func GetMatches;
Mf_Skip_Func Skip;
} IMatchFinder;
void MatchFinder_CreateVTable(CMatchFinder *p, IMatchFinder *vTable);
void
MatchFinder_CreateVTable (
CMatchFinder *p,
IMatchFinder *vTable
);
void MatchFinder_Init_LowHash(CMatchFinder *p);
void MatchFinder_Init_HighHash(CMatchFinder *p);
void MatchFinder_Init_3(CMatchFinder *p, int readData);
void MatchFinder_Init(CMatchFinder *p);
void
MatchFinder_Init_LowHash (
CMatchFinder *p
);
UInt32 Bt3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances);
UInt32 Hc3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances);
void
MatchFinder_Init_HighHash (
CMatchFinder *p
);
void Bt3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num);
void Hc3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num);
void
MatchFinder_Init_3 (
CMatchFinder *p,
int readData
);
void
MatchFinder_Init (
CMatchFinder *p
);
UInt32
Bt3Zip_MatchFinder_GetMatches (
CMatchFinder *p,
UInt32 *distances
);
UInt32
Hc3Zip_MatchFinder_GetMatches (
CMatchFinder *p,
UInt32 *distances
);
void
Bt3Zip_MatchFinder_Skip (
CMatchFinder *p,
UInt32 num
);
void
Hc3Zip_MatchFinder_Skip (
CMatchFinder *p,
UInt32 num
);
EXTERN_C_END

View File

@@ -4,29 +4,29 @@
#ifndef __LZ_HASH_H
#define __LZ_HASH_H
#define kHash2Size (1 << 10)
#define kHash3Size (1 << 16)
#define kHash4Size (1 << 20)
#define kHash2Size (1 << 10)
#define kHash3Size (1 << 16)
#define kHash4Size (1 << 20)
#define kFix3HashSize (kHash2Size)
#define kFix4HashSize (kHash2Size + kHash3Size)
#define kFix5HashSize (kHash2Size + kHash3Size + kHash4Size)
#define kFix3HashSize (kHash2Size)
#define kFix4HashSize (kHash2Size + kHash3Size)
#define kFix5HashSize (kHash2Size + kHash3Size + kHash4Size)
#define HASH2_CALC hv = cur[0] | ((UInt32)cur[1] << 8);
#define HASH2_CALC hv = cur[0] | ((UInt32)cur[1] << 8);
#define HASH3_CALC { \
#define HASH3_CALC {\
UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
h2 = temp & (kHash2Size - 1); \
hv = (temp ^ ((UInt32)cur[2] << 8)) & p->hashMask; }
#define HASH4_CALC { \
#define HASH4_CALC {\
UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
h2 = temp & (kHash2Size - 1); \
temp ^= ((UInt32)cur[2] << 8); \
h3 = temp & (kHash3Size - 1); \
hv = (temp ^ (p->crc[cur[3]] << 5)) & p->hashMask; }
#define HASH5_CALC { \
#define HASH5_CALC {\
UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
h2 = temp & (kHash2Size - 1); \
temp ^= ((UInt32)cur[2] << 8); \
@@ -36,18 +36,17 @@
hv = (temp ^ (p->crc[cur[4]] << 3)) & p->hashMask; }
/* #define HASH_ZIP_CALC hv = ((cur[0] | ((UInt32)cur[1] << 8)) ^ p->crc[cur[2]]) & 0xFFFF; */
#define HASH_ZIP_CALC hv = ((cur[2] | ((UInt32)cur[0] << 8)) ^ p->crc[cur[1]]) & 0xFFFF;
#define HASH_ZIP_CALC hv = ((cur[2] | ((UInt32)cur[0] << 8)) ^ p->crc[cur[1]]) & 0xFFFF;
#define MT_HASH2_CALC \
h2 = (p->crc[cur[0]] ^ cur[1]) & (kHash2Size - 1);
#define MT_HASH3_CALC { \
#define MT_HASH3_CALC {\
UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
h2 = temp & (kHash2Size - 1); \
h3 = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); }
#define MT_HASH4_CALC { \
#define MT_HASH4_CALC {\
UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
h2 = temp & (kHash2Size - 1); \
temp ^= ((UInt32)cur[2] << 8); \

File diff suppressed because it is too large Load Diff

View File

@@ -9,6 +9,7 @@
EXTERN_C_BEGIN
/* #define _LZMA_PROB32 */
/* _LZMA_PROB32 can increase the speed on some CPUs,
but memory usage for CLzmaDec::probs will be doubled in that case */
@@ -20,18 +21,16 @@ typedef
#endif
CLzmaProb;
/* ---------- LZMA Properties ---------- */
#define LZMA_PROPS_SIZE 5
#define LZMA_PROPS_SIZE 5
typedef struct _CLzmaProps
{
Byte lc;
Byte lp;
Byte pb;
Byte _pad_;
UInt32 dicSize;
typedef struct _CLzmaProps {
Byte lc;
Byte lp;
Byte pb;
Byte _pad_;
UInt32 dicSize;
} CLzmaProps;
/* LzmaProps_Decode - decodes properties
@@ -40,49 +39,54 @@ Returns:
SZ_ERROR_UNSUPPORTED - Unsupported properties
*/
SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size);
SRes
LzmaProps_Decode (
CLzmaProps *p,
const Byte *data,
unsigned size
);
/* ---------- LZMA Decoder state ---------- */
/* LZMA_REQUIRED_INPUT_MAX = number of required input bytes for worst case.
Num bits = log2((2^11 / 31) ^ 22) + 26 < 134 + 26 = 160; */
#define LZMA_REQUIRED_INPUT_MAX 20
#define LZMA_REQUIRED_INPUT_MAX 20
typedef struct
{
typedef struct {
/* Don't change this structure. ASM code can use it. */
CLzmaProps prop;
CLzmaProb *probs;
CLzmaProb *probs_1664;
Byte *dic;
SizeT dicBufSize;
SizeT dicPos;
const Byte *buf;
UInt32 range;
UInt32 code;
UInt32 processedPos;
UInt32 checkDicSize;
UInt32 reps[4];
UInt32 state;
UInt32 remainLen;
CLzmaProps prop;
CLzmaProb *probs;
CLzmaProb *probs_1664;
Byte *dic;
SizeT dicBufSize;
SizeT dicPos;
const Byte *buf;
UInt32 range;
UInt32 code;
UInt32 processedPos;
UInt32 checkDicSize;
UInt32 reps[4];
UInt32 state;
UInt32 remainLen;
UInt32 numProbs;
unsigned tempBufSize;
Byte tempBuf[LZMA_REQUIRED_INPUT_MAX];
UInt32 numProbs;
unsigned tempBufSize;
Byte tempBuf[LZMA_REQUIRED_INPUT_MAX];
} CLzmaDec;
#define LzmaDec_Construct(p) { (p)->dic = NULL; (p)->probs = NULL; }
#define LzmaDec_Construct(p) { (p)->dic = NULL; (p)->probs = NULL; }
void LzmaDec_Init(CLzmaDec *p);
void
LzmaDec_Init (
CLzmaDec *p
);
/* There are two types of LZMA streams:
- Stream with end mark. That end mark adds about 6 bytes to compressed size.
- Stream without end mark. You must know exact uncompressed size to decompress such stream. */
typedef enum
{
typedef enum {
LZMA_FINISH_ANY, /* finish at any point */
LZMA_FINISH_END /* block must be finished at the end */
} ELzmaFinishMode;
@@ -102,8 +106,7 @@ typedef enum
3) Check that output(srcLen) = compressedSize, if you know real compressedSize.
You must use correct finish mode in that case. */
typedef enum
{
typedef enum {
LZMA_STATUS_NOT_SPECIFIED, /* use main error code instead */
LZMA_STATUS_FINISHED_WITH_MARK, /* stream was finished with end mark. */
LZMA_STATUS_NOT_FINISHED, /* stream was not finished */
@@ -113,7 +116,6 @@ typedef enum
/* ELzmaStatus is used only as output value for function call */
/* ---------- Interfaces ---------- */
/* There are 3 levels of interfaces:
@@ -123,7 +125,6 @@ typedef enum
You can select any of these interfaces, but don't mix functions from different
groups for same object. */
/* There are two variants to allocate state for Dictionary Interface:
1) LzmaDec_Allocate / LzmaDec_Free
2) LzmaDec_AllocateProbs / LzmaDec_FreeProbs
@@ -136,11 +137,33 @@ LzmaDec_Allocate* can return:
SZ_ERROR_UNSUPPORTED - Unsupported properties
*/
SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAllocPtr alloc);
void LzmaDec_FreeProbs(CLzmaDec *p, ISzAllocPtr alloc);
SRes
LzmaDec_AllocateProbs (
CLzmaDec *p,
const Byte *props,
unsigned propsSize,
ISzAllocPtr alloc
);
SRes LzmaDec_Allocate(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAllocPtr alloc);
void LzmaDec_Free(CLzmaDec *p, ISzAllocPtr alloc);
void
LzmaDec_FreeProbs (
CLzmaDec *p,
ISzAllocPtr alloc
);
SRes
LzmaDec_Allocate (
CLzmaDec *p,
const Byte *props,
unsigned propsSize,
ISzAllocPtr alloc
);
void
LzmaDec_Free (
CLzmaDec *p,
ISzAllocPtr alloc
);
/* ---------- Dictionary Interface ---------- */
@@ -183,9 +206,15 @@ Returns:
SZ_ERROR_DATA - Data error
*/
SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit,
const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
SRes
LzmaDec_DecodeToDic (
CLzmaDec *p,
SizeT dicLimit,
const Byte *src,
SizeT *srcLen,
ELzmaFinishMode finishMode,
ELzmaStatus *status
);
/* ---------- Buffer Interface ---------- */
@@ -200,9 +229,16 @@ finishMode:
LZMA_FINISH_END - Stream must be finished after (*destLen).
*/
SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen,
const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
SRes
LzmaDec_DecodeToBuf (
CLzmaDec *p,
Byte *dest,
SizeT *destLen,
const Byte *src,
SizeT *srcLen,
ELzmaFinishMode finishMode,
ELzmaStatus *status
);
/* ---------- One Call Interface ---------- */
@@ -225,9 +261,18 @@ Returns:
SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src).
*/
SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen,
const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode,
ELzmaStatus *status, ISzAllocPtr alloc);
SRes
LzmaDecode (
Byte *dest,
SizeT *destLen,
const Byte *src,
SizeT *srcLen,
const Byte *propData,
unsigned propSize,
ELzmaFinishMode finishMode,
ELzmaStatus *status,
ISzAllocPtr alloc
);
EXTERN_C_END

View File

@@ -15,23 +15,22 @@
#include <Library/BaseMemoryLib.h>
#ifdef _WIN32
#undef _WIN32
#undef _WIN32
#endif
typedef UINTN size_t;
#ifdef _WIN64
#undef _WIN64
#undef _WIN64
#endif
#ifndef _PTRDIFF_T_DEFINED
typedef int ptrdiff_t;
#endif
#define memcpy CopyMem
#define memmove CopyMem
#define memcpy CopyMem
#define memmove CopyMem
#define _LZMA_SIZE_OPT
#endif // __UEFILZMA_H__

View File

@@ -34,44 +34,44 @@ GetGuidFromType (
)
{
switch (Type) {
case NonDiscoverableDeviceTypeAhci:
return &gEdkiiNonDiscoverableAhciDeviceGuid;
case NonDiscoverableDeviceTypeAhci:
return &gEdkiiNonDiscoverableAhciDeviceGuid;
case NonDiscoverableDeviceTypeAmba:
return &gEdkiiNonDiscoverableAmbaDeviceGuid;
case NonDiscoverableDeviceTypeAmba:
return &gEdkiiNonDiscoverableAmbaDeviceGuid;
case NonDiscoverableDeviceTypeEhci:
return &gEdkiiNonDiscoverableEhciDeviceGuid;
case NonDiscoverableDeviceTypeEhci:
return &gEdkiiNonDiscoverableEhciDeviceGuid;
case NonDiscoverableDeviceTypeNvme:
return &gEdkiiNonDiscoverableNvmeDeviceGuid;
case NonDiscoverableDeviceTypeNvme:
return &gEdkiiNonDiscoverableNvmeDeviceGuid;
case NonDiscoverableDeviceTypeOhci:
return &gEdkiiNonDiscoverableOhciDeviceGuid;
case NonDiscoverableDeviceTypeOhci:
return &gEdkiiNonDiscoverableOhciDeviceGuid;
case NonDiscoverableDeviceTypeSdhci:
return &gEdkiiNonDiscoverableSdhciDeviceGuid;
case NonDiscoverableDeviceTypeSdhci:
return &gEdkiiNonDiscoverableSdhciDeviceGuid;
case NonDiscoverableDeviceTypeUfs:
return &gEdkiiNonDiscoverableUfsDeviceGuid;
case NonDiscoverableDeviceTypeUfs:
return &gEdkiiNonDiscoverableUfsDeviceGuid;
case NonDiscoverableDeviceTypeUhci:
return &gEdkiiNonDiscoverableUhciDeviceGuid;
case NonDiscoverableDeviceTypeUhci:
return &gEdkiiNonDiscoverableUhciDeviceGuid;
case NonDiscoverableDeviceTypeXhci:
return &gEdkiiNonDiscoverableXhciDeviceGuid;
case NonDiscoverableDeviceTypeXhci:
return &gEdkiiNonDiscoverableXhciDeviceGuid;
default:
return NULL;
default:
return NULL;
}
}
#pragma pack (1)
typedef struct {
VENDOR_DEVICE_PATH Vendor;
UINT64 BaseAddress;
UINT8 ResourceType;
EFI_DEVICE_PATH_PROTOCOL End;
VENDOR_DEVICE_PATH Vendor;
UINT64 BaseAddress;
UINT8 ResourceType;
EFI_DEVICE_PATH_PROTOCOL End;
} NON_DISCOVERABLE_DEVICE_PATH;
#pragma pack ()
@@ -108,25 +108,26 @@ RegisterNonDiscoverableMmioDevice (
...
)
{
NON_DISCOVERABLE_DEVICE *Device;
NON_DISCOVERABLE_DEVICE_PATH *DevicePath;
EFI_HANDLE LocalHandle;
EFI_STATUS Status;
UINTN AllocSize;
UINTN Index;
VA_LIST Args;
EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Desc;
EFI_ACPI_END_TAG_DESCRIPTOR *End;
UINTN Base, Size;
NON_DISCOVERABLE_DEVICE *Device;
NON_DISCOVERABLE_DEVICE_PATH *DevicePath;
EFI_HANDLE LocalHandle;
EFI_STATUS Status;
UINTN AllocSize;
UINTN Index;
VA_LIST Args;
EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Desc;
EFI_ACPI_END_TAG_DESCRIPTOR *End;
UINTN Base, Size;
if (Type >= NonDiscoverableDeviceTypeMax ||
DmaType >= NonDiscoverableDeviceDmaTypeMax ||
NumMmioResources == 0) {
if ((Type >= NonDiscoverableDeviceTypeMax) ||
(DmaType >= NonDiscoverableDeviceDmaTypeMax) ||
(NumMmioResources == 0))
{
return EFI_INVALID_PARAMETER;
}
if (Handle == NULL) {
Handle = &LocalHandle;
Handle = &LocalHandle;
LocalHandle = NULL;
}
@@ -141,13 +142,13 @@ RegisterNonDiscoverableMmioDevice (
Device->Type = GetGuidFromType (Type);
ASSERT (Device->Type != NULL);
Device->DmaType = DmaType;
Device->DmaType = DmaType;
Device->Initialize = InitFunc;
Device->Resources = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)(Device + 1);
Device->Resources = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)(Device + 1);
VA_START (Args, NumMmioResources);
for (Index = 0; Index < NumMmioResources; Index++) {
Desc = &Device->Resources [Index];
Desc = &Device->Resources[Index];
Base = VA_ARG (Args, UINTN);
Size = VA_ARG (Args, UINTN);
@@ -160,9 +161,10 @@ RegisterNonDiscoverableMmioDevice (
Desc->AddrSpaceGranularity = ((EFI_PHYSICAL_ADDRESS)Base + Size > SIZE_4GB) ? 64 : 32;
Desc->AddrTranslationOffset = 0;
}
VA_END (Args);
End = (EFI_ACPI_END_TAG_DESCRIPTOR *)&Device->Resources [NumMmioResources];
End = (EFI_ACPI_END_TAG_DESCRIPTOR *)&Device->Resources[NumMmioResources];
End->Desc = ACPI_END_TAG_DESCRIPTOR;
End->Checksum = 0;
@@ -170,7 +172,8 @@ RegisterNonDiscoverableMmioDevice (
DevicePath = (NON_DISCOVERABLE_DEVICE_PATH *)CreateDeviceNode (
HARDWARE_DEVICE_PATH,
HW_VENDOR_DP,
sizeof (*DevicePath));
sizeof (*DevicePath)
);
if (DevicePath == NULL) {
Status = EFI_OUT_OF_RESOURCES;
goto FreeDevice;
@@ -182,20 +185,27 @@ RegisterNonDiscoverableMmioDevice (
// Use the base address and type of the first region to
// make the device path unique
//
DevicePath->BaseAddress = Device->Resources [0].AddrRangeMin;
DevicePath->ResourceType = Device->Resources [0].ResType;
DevicePath->BaseAddress = Device->Resources[0].AddrRangeMin;
DevicePath->ResourceType = Device->Resources[0].ResType;
SetDevicePathNodeLength (&DevicePath->Vendor,
sizeof (*DevicePath) - sizeof (DevicePath->End));
SetDevicePathNodeLength (
&DevicePath->Vendor,
sizeof (*DevicePath) - sizeof (DevicePath->End)
);
SetDevicePathEndNode (&DevicePath->End);
Status = gBS->InstallMultipleProtocolInterfaces (Handle,
&gEdkiiNonDiscoverableDeviceProtocolGuid, Device,
&gEfiDevicePathProtocolGuid, DevicePath,
NULL);
Status = gBS->InstallMultipleProtocolInterfaces (
Handle,
&gEdkiiNonDiscoverableDeviceProtocolGuid,
Device,
&gEfiDevicePathProtocolGuid,
DevicePath,
NULL
);
if (EFI_ERROR (Status)) {
goto FreeDevicePath;
}
return EFI_SUCCESS;
FreeDevicePath:

View File

@@ -6,7 +6,6 @@
**/
/**
Initialize OEM status code device .
@@ -44,11 +43,11 @@ OemHookStatusCodeInitialize (
EFI_STATUS
EFIAPI
OemHookStatusCodeReport (
IN EFI_STATUS_CODE_TYPE CodeType,
IN EFI_STATUS_CODE_VALUE Value,
IN UINT32 Instance,
IN EFI_GUID *CallerId OPTIONAL,
IN EFI_STATUS_CODE_DATA *Data OPTIONAL
IN EFI_STATUS_CODE_TYPE CodeType,
IN EFI_STATUS_CODE_VALUE Value,
IN UINT32 Instance,
IN EFI_GUID *CallerId OPTIONAL,
IN EFI_STATUS_CODE_DATA *Data OPTIONAL
)
{
return EFI_SUCCESS;

View File

@@ -11,7 +11,7 @@
#include <Library/DebugLib.h>
GLOBAL_REMOVE_IF_UNREFERENCED
CHAR16 *mPciHostBridgeLibAcpiAddressSpaceTypeStr[] = {
CHAR16 *mPciHostBridgeLibAcpiAddressSpaceTypeStr[] = {
L"Mem", L"I/O", L"Bus"
};
@@ -27,7 +27,7 @@ CHAR16 *mPciHostBridgeLibAcpiAddressSpaceTypeStr[] = {
PCI_ROOT_BRIDGE *
EFIAPI
PciHostBridgeGetRootBridges (
UINTN *Count
UINTN *Count
)
{
*Count = 0;
@@ -43,8 +43,8 @@ PciHostBridgeGetRootBridges (
VOID
EFIAPI
PciHostBridgeFreeRootBridges (
PCI_ROOT_BRIDGE *Bridges,
UINTN Count
PCI_ROOT_BRIDGE *Bridges,
UINTN Count
)
{
return;
@@ -67,43 +67,52 @@ PciHostBridgeFreeRootBridges (
VOID
EFIAPI
PciHostBridgeResourceConflict (
EFI_HANDLE HostBridgeHandle,
VOID *Configuration
EFI_HANDLE HostBridgeHandle,
VOID *Configuration
)
{
EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor;
UINTN RootBridgeIndex;
EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor;
UINTN RootBridgeIndex;
DEBUG ((DEBUG_ERROR, "PciHostBridge: Resource conflict happens!\n"));
RootBridgeIndex = 0;
Descriptor = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Configuration;
Descriptor = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Configuration;
while (Descriptor->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR) {
DEBUG ((DEBUG_ERROR, "RootBridge[%d]:\n", RootBridgeIndex++));
for (; Descriptor->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR; Descriptor++) {
ASSERT (Descriptor->ResType <
(sizeof (mPciHostBridgeLibAcpiAddressSpaceTypeStr) /
sizeof (mPciHostBridgeLibAcpiAddressSpaceTypeStr[0])
)
);
DEBUG ((DEBUG_ERROR, " %s: Length/Alignment = 0x%lx / 0x%lx\n",
mPciHostBridgeLibAcpiAddressSpaceTypeStr[Descriptor->ResType],
Descriptor->AddrLen, Descriptor->AddrRangeMax
));
for ( ; Descriptor->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR; Descriptor++) {
ASSERT (
Descriptor->ResType <
(sizeof (mPciHostBridgeLibAcpiAddressSpaceTypeStr) /
sizeof (mPciHostBridgeLibAcpiAddressSpaceTypeStr[0])
)
);
DEBUG ((
DEBUG_ERROR,
" %s: Length/Alignment = 0x%lx / 0x%lx\n",
mPciHostBridgeLibAcpiAddressSpaceTypeStr[Descriptor->ResType],
Descriptor->AddrLen,
Descriptor->AddrRangeMax
));
if (Descriptor->ResType == ACPI_ADDRESS_SPACE_TYPE_MEM) {
DEBUG ((DEBUG_ERROR, " Granularity/SpecificFlag = %ld / %02x%s\n",
Descriptor->AddrSpaceGranularity, Descriptor->SpecificFlag,
((Descriptor->SpecificFlag &
EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_CACHEABLE_PREFETCHABLE
) != 0) ? L" (Prefetchable)" : L""
));
DEBUG ((
DEBUG_ERROR,
" Granularity/SpecificFlag = %ld / %02x%s\n",
Descriptor->AddrSpaceGranularity,
Descriptor->SpecificFlag,
((Descriptor->SpecificFlag &
EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_CACHEABLE_PREFETCHABLE
) != 0) ? L" (Prefetchable)" : L""
));
}
}
//
// Skip the END descriptor for root bridge
//
ASSERT (Descriptor->Desc == ACPI_END_TAG_DESCRIPTOR);
Descriptor = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)(
(EFI_ACPI_END_TAG_DESCRIPTOR *)Descriptor + 1
);
(EFI_ACPI_END_TAG_DESCRIPTOR *)Descriptor + 1
);
}
}

View File

@@ -19,13 +19,13 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
/// CRC32 Guided Section header
///
typedef struct {
EFI_GUID_DEFINED_SECTION GuidedSectionHeader; ///< EFI guided section header
UINT32 CRC32Checksum; ///< 32bit CRC check sum
EFI_GUID_DEFINED_SECTION GuidedSectionHeader; ///< EFI guided section header
UINT32 CRC32Checksum; ///< 32bit CRC check sum
} CRC32_SECTION_HEADER;
typedef struct {
EFI_GUID_DEFINED_SECTION2 GuidedSectionHeader; ///< EFI guided section header
UINT32 CRC32Checksum; ///< 32bit CRC check sum
EFI_GUID_DEFINED_SECTION2 GuidedSectionHeader; ///< EFI guided section header
UINT32 CRC32Checksum; ///< 32bit CRC check sum
} CRC32_SECTION2_HEADER;
/**
@@ -58,31 +58,37 @@ Crc32GuidedSectionGetInfo (
// Check whether the input guid section is recognized.
//
if (!CompareGuid (
&gEfiCrc32GuidedSectionExtractionGuid,
&(((EFI_GUID_DEFINED_SECTION2 *) InputSection)->SectionDefinitionGuid))) {
&gEfiCrc32GuidedSectionExtractionGuid,
&(((EFI_GUID_DEFINED_SECTION2 *)InputSection)->SectionDefinitionGuid)
))
{
return EFI_INVALID_PARAMETER;
}
//
// Retrieve the size and attribute of the input section data.
//
*SectionAttribute = ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->Attributes;
*SectionAttribute = ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->Attributes;
*ScratchBufferSize = 0;
*OutputBufferSize = SECTION2_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->DataOffset;
*OutputBufferSize = SECTION2_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->DataOffset;
} else {
//
// Check whether the input guid section is recognized.
//
if (!CompareGuid (
&gEfiCrc32GuidedSectionExtractionGuid,
&(((EFI_GUID_DEFINED_SECTION *) InputSection)->SectionDefinitionGuid))) {
&gEfiCrc32GuidedSectionExtractionGuid,
&(((EFI_GUID_DEFINED_SECTION *)InputSection)->SectionDefinitionGuid)
))
{
return EFI_INVALID_PARAMETER;
}
//
// Retrieve the size and attribute of the input section data.
//
*SectionAttribute = ((EFI_GUID_DEFINED_SECTION *) InputSection)->Attributes;
*SectionAttribute = ((EFI_GUID_DEFINED_SECTION *)InputSection)->Attributes;
*ScratchBufferSize = 0;
*OutputBufferSize = SECTION_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION *) InputSection)->DataOffset;
*OutputBufferSize = SECTION_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION *)InputSection)->DataOffset;
}
return EFI_SUCCESS;
@@ -114,53 +120,57 @@ Crc32GuidedSectionHandler (
OUT UINT32 *AuthenticationStatus
)
{
UINT32 SectionCrc32Checksum;
UINT32 Crc32Checksum;
UINT32 OutputBufferSize;
UINT32 SectionCrc32Checksum;
UINT32 Crc32Checksum;
UINT32 OutputBufferSize;
if (IS_SECTION2 (InputSection)) {
//
// Check whether the input guid section is recognized.
//
if (!CompareGuid (
&gEfiCrc32GuidedSectionExtractionGuid,
&(((EFI_GUID_DEFINED_SECTION2 *) InputSection)->SectionDefinitionGuid))) {
&gEfiCrc32GuidedSectionExtractionGuid,
&(((EFI_GUID_DEFINED_SECTION2 *)InputSection)->SectionDefinitionGuid)
))
{
return EFI_INVALID_PARAMETER;
}
//
// Get section Crc32 checksum.
//
SectionCrc32Checksum = ((CRC32_SECTION2_HEADER *) InputSection)->CRC32Checksum;
*OutputBuffer = (UINT8 *) InputSection + ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->DataOffset;
OutputBufferSize = SECTION2_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION2 *) InputSection)->DataOffset;
SectionCrc32Checksum = ((CRC32_SECTION2_HEADER *)InputSection)->CRC32Checksum;
*OutputBuffer = (UINT8 *)InputSection + ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->DataOffset;
OutputBufferSize = SECTION2_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION2 *)InputSection)->DataOffset;
//
// Implicitly CRC32 GUIDed section should have STATUS_VALID bit set
//
ASSERT (((EFI_GUID_DEFINED_SECTION2 *) InputSection)->Attributes & EFI_GUIDED_SECTION_AUTH_STATUS_VALID);
ASSERT (((EFI_GUID_DEFINED_SECTION2 *)InputSection)->Attributes & EFI_GUIDED_SECTION_AUTH_STATUS_VALID);
*AuthenticationStatus = EFI_AUTH_STATUS_IMAGE_SIGNED;
} else {
//
// Check whether the input guid section is recognized.
//
if (!CompareGuid (
&gEfiCrc32GuidedSectionExtractionGuid,
&(((EFI_GUID_DEFINED_SECTION *) InputSection)->SectionDefinitionGuid))) {
&gEfiCrc32GuidedSectionExtractionGuid,
&(((EFI_GUID_DEFINED_SECTION *)InputSection)->SectionDefinitionGuid)
))
{
return EFI_INVALID_PARAMETER;
}
//
// Get section Crc32 checksum.
//
SectionCrc32Checksum = ((CRC32_SECTION_HEADER *) InputSection)->CRC32Checksum;
*OutputBuffer = (UINT8 *) InputSection + ((EFI_GUID_DEFINED_SECTION *) InputSection)->DataOffset;
OutputBufferSize = SECTION_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION *) InputSection)->DataOffset;
SectionCrc32Checksum = ((CRC32_SECTION_HEADER *)InputSection)->CRC32Checksum;
*OutputBuffer = (UINT8 *)InputSection + ((EFI_GUID_DEFINED_SECTION *)InputSection)->DataOffset;
OutputBufferSize = SECTION_SIZE (InputSection) - ((EFI_GUID_DEFINED_SECTION *)InputSection)->DataOffset;
//
// Implicitly CRC32 GUIDed section should have STATUS_VALID bit set
//
ASSERT (((EFI_GUID_DEFINED_SECTION *) InputSection)->Attributes & EFI_GUIDED_SECTION_AUTH_STATUS_VALID);
ASSERT (((EFI_GUID_DEFINED_SECTION *)InputSection)->Attributes & EFI_GUIDED_SECTION_AUTH_STATUS_VALID);
*AuthenticationStatus = EFI_AUTH_STATUS_IMAGE_SIGNED;
}
@@ -198,13 +208,13 @@ Crc32GuidedSectionHandler (
EFI_STATUS
EFIAPI
PeiCrc32GuidedSectionExtractLibConstructor (
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
)
{
return ExtractGuidedSectionRegisterHandlers (
&gEfiCrc32GuidedSectionExtractionGuid,
Crc32GuidedSectionGetInfo,
Crc32GuidedSectionHandler
);
&gEfiCrc32GuidedSectionExtractionGuid,
Crc32GuidedSectionGetInfo,
Crc32GuidedSectionHandler
);
}

View File

@@ -40,14 +40,13 @@ DebugPrint (
...
)
{
VA_LIST Marker;
VA_LIST Marker;
VA_START (Marker, Format);
DebugVPrint (ErrorLevel, Format, Marker);
VA_END (Marker);
}
/**
Prints a debug message to the debug output device if the specified
error level is enabled.
@@ -68,13 +67,13 @@ DebugPrint (
VOID
EFIAPI
DebugBPrint (
IN UINTN ErrorLevel,
IN CONST CHAR8 *Format,
IN BASE_LIST BaseListMarker
IN UINTN ErrorLevel,
IN CONST CHAR8 *Format,
IN BASE_LIST BaseListMarker
)
{
EFI_STATUS Status;
EDKII_DEBUG_PPI *DebugPpi;
EFI_STATUS Status;
EDKII_DEBUG_PPI *DebugPpi;
//
// If Format is NULL, then ASSERT().
@@ -89,11 +88,11 @@ DebugBPrint (
}
Status = PeiServicesLocatePpi (
&gEdkiiDebugPpiGuid,
0,
NULL,
(VOID **)&DebugPpi
);
&gEdkiiDebugPpiGuid,
0,
NULL,
(VOID **)&DebugPpi
);
if (EFI_ERROR (Status)) {
return;
}
@@ -105,7 +104,6 @@ DebugBPrint (
);
}
/**
Worker function that convert a VA_LIST to a BASE_LIST based on a
Null-terminated format string.
@@ -129,8 +127,8 @@ VaListToBaseList (
IN UINTN Size
)
{
BASE_LIST BaseListStart;
BOOLEAN Long;
BASE_LIST BaseListStart;
BOOLEAN Long;
ASSERT (Format != NULL);
@@ -138,7 +136,7 @@ VaListToBaseList (
BaseListStart = BaseListMarker;
for (; *Format != '\0'; Format++) {
for ( ; *Format != '\0'; Format++) {
//
// Only format with prefix % is processed.
//
@@ -152,25 +150,28 @@ VaListToBaseList (
// Parse Flags and Width
//
for (Format++; TRUE; Format++) {
if (*Format == '.' || *Format == '-' || *Format == '+' || *Format == ' ') {
if ((*Format == '.') || (*Format == '-') || (*Format == '+') || (*Format == ' ')) {
//
// These characters in format field are omitted.
//
continue;
}
if (*Format >= '0' && *Format <= '9') {
if ((*Format >= '0') && (*Format <= '9')) {
//
// These characters in format field are omitted.
//
continue;
}
if (*Format == 'L' || *Format == 'l') {
if ((*Format == 'L') || (*Format == 'l')) {
//
// 'L" or "l" in format field means the number being printed is a UINT64
//
Long = TRUE;
continue;
}
if (*Format == '*') {
//
// '*' in format field means the precision of the field is specified by
@@ -179,6 +180,7 @@ VaListToBaseList (
BASE_ARG (BaseListMarker, UINTN) = VA_ARG (VaListMarker, UINTN);
continue;
}
if (*Format == '\0') {
//
// Make no output if Format string terminates unexpectedly when
@@ -186,6 +188,7 @@ VaListToBaseList (
//
Format--;
}
//
// When valid argument type detected or format string terminates unexpectedly,
// the inner loop is done.
@@ -199,13 +202,14 @@ VaListToBaseList (
if ((*Format == 'p') && (sizeof (VOID *) > 4)) {
Long = TRUE;
}
if (*Format == 'p' || *Format == 'X' || *Format == 'x' || *Format == 'd' || *Format == 'u') {
if ((*Format == 'p') || (*Format == 'X') || (*Format == 'x') || (*Format == 'd') || (*Format == 'u')) {
if (Long) {
BASE_ARG (BaseListMarker, INT64) = VA_ARG (VaListMarker, INT64);
} else {
BASE_ARG (BaseListMarker, int) = VA_ARG (VaListMarker, int);
}
} else if (*Format == 's' || *Format == 'S' || *Format == 'a' || *Format == 'g' || *Format == 't') {
} else if ((*Format == 's') || (*Format == 'S') || (*Format == 'a') || (*Format == 'g') || (*Format == 't')) {
BASE_ARG (BaseListMarker, VOID *) = VA_ARG (VaListMarker, VOID *);
} else if (*Format == 'c') {
BASE_ARG (BaseListMarker, UINTN) = VA_ARG (VaListMarker, UINTN);
@@ -224,7 +228,6 @@ VaListToBaseList (
return TRUE;
}
/**
Prints a debug message to the debug output device if the specified
error level is enabled.
@@ -243,13 +246,13 @@ VaListToBaseList (
VOID
EFIAPI
DebugVPrint (
IN UINTN ErrorLevel,
IN CONST CHAR8 *Format,
IN VA_LIST VaListMarker
IN UINTN ErrorLevel,
IN CONST CHAR8 *Format,
IN VA_LIST VaListMarker
)
{
UINT64 BaseListMarker[256 / sizeof (UINT64)];
BOOLEAN Converted;
UINT64 BaseListMarker[256 / sizeof (UINT64)];
BOOLEAN Converted;
//
// Convert the VaList to BaseList
@@ -268,7 +271,6 @@ DebugVPrint (
DebugBPrint (ErrorLevel, Format, (BASE_LIST)BaseListMarker);
}
/**
Prints an assert message containing a filename, line number, and description.
This may be followed by a breakpoint or a dead loop.
@@ -298,15 +300,15 @@ DebugAssert (
IN CONST CHAR8 *Description
)
{
EFI_STATUS Status;
EDKII_DEBUG_PPI *DebugPpi;
EFI_STATUS Status;
EDKII_DEBUG_PPI *DebugPpi;
Status = PeiServicesLocatePpi (
&gEdkiiDebugPpiGuid,
0,
NULL,
(VOID **)&DebugPpi
);
&gEdkiiDebugPpiGuid,
0,
NULL,
(VOID **)&DebugPpi
);
if (EFI_ERROR (Status)) {
//
// Generate a Breakpoint, DeadLoop, or NOP based on PCD settings
@@ -325,7 +327,6 @@ DebugAssert (
}
}
/**
Fills a target buffer with PcdDebugClearMemoryValue, and returns the target buffer.
@@ -353,7 +354,6 @@ DebugClearMemory (
return SetMem (Buffer, Length, PcdGet8 (PcdDebugClearMemoryValue));
}
/**
Returns TRUE if ASSERT() macros are enabled.
@@ -370,10 +370,9 @@ DebugAssertEnabled (
VOID
)
{
return (BOOLEAN) ((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED) != 0);
return (BOOLEAN)((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED) != 0);
}
/**
Returns TRUE if DEBUG() macros are enabled.
@@ -390,10 +389,9 @@ DebugPrintEnabled (
VOID
)
{
return (BOOLEAN) ((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_PRINT_ENABLED) != 0);
return (BOOLEAN)((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_PRINT_ENABLED) != 0);
}
/**
Returns TRUE if DEBUG_CODE() macros are enabled.
@@ -410,10 +408,9 @@ DebugCodeEnabled (
VOID
)
{
return (BOOLEAN) ((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_CODE_ENABLED) != 0);
return (BOOLEAN)((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_CODE_ENABLED) != 0);
}
/**
Returns TRUE if DEBUG_CLEAR_MEMORY() macro is enabled.
@@ -430,10 +427,9 @@ DebugClearMemoryEnabled (
VOID
)
{
return (BOOLEAN) ((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_CLEAR_MEMORY_ENABLED) != 0);
return (BOOLEAN)((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_CLEAR_MEMORY_ENABLED) != 0);
}
/**
Returns TRUE if any one of the bit is set both in ErrorLevel and PcdFixedDebugPrintErrorLevel.
@@ -446,9 +442,8 @@ DebugClearMemoryEnabled (
BOOLEAN
EFIAPI
DebugPrintLevelEnabled (
IN CONST UINTN ErrorLevel
IN CONST UINTN ErrorLevel
)
{
return (BOOLEAN) ((ErrorLevel & PcdGet32(PcdFixedDebugPrintErrorLevel)) != 0);
return (BOOLEAN)((ErrorLevel & PcdGet32 (PcdFixedDebugPrintErrorLevel)) != 0);
}

View File

@@ -16,7 +16,6 @@
#include <Ppi/ReadOnlyVariable2.h>
#include <Guid/DebugMask.h>
/**
The constructor reads variable and sets HOB
@@ -29,15 +28,15 @@
EFI_STATUS
EFIAPI
PeiDebugPrintHobLibConstructor (
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
)
{
EFI_STATUS Status;
EFI_PEI_READ_ONLY_VARIABLE2_PPI *Variable;
UINTN Size;
UINT64 GlobalErrorLevel;
UINT32 HobErrorLevel;
EFI_STATUS Status;
EFI_PEI_READ_ONLY_VARIABLE2_PPI *Variable;
UINTN Size;
UINT64 GlobalErrorLevel;
UINT32 HobErrorLevel;
Status = PeiServicesLocatePpi (
&gEfiPeiReadOnlyVariable2PpiGuid,
@@ -46,7 +45,7 @@ PeiDebugPrintHobLibConstructor (
(VOID **)&Variable
);
if (!EFI_ERROR (Status)) {
Size = sizeof (GlobalErrorLevel);
Size = sizeof (GlobalErrorLevel);
Status = Variable->GetVariable (
Variable,
DEBUG_MASK_VARIABLE_NAME,

View File

@@ -25,7 +25,7 @@
// VA_LIST can not initialize to NULL for all compiler, so we use this to
// indicate a null VA_LIST
//
VA_LIST mVaListNull;
VA_LIST mVaListNull;
/**
Prints a debug message to the debug output device if the specified error level is enabled.
@@ -53,7 +53,7 @@ DebugPrint (
...
)
{
VA_LIST Marker;
VA_LIST Marker;
VA_START (Marker, Format);
DebugVPrint (ErrorLevel, Format, Marker);
@@ -84,10 +84,10 @@ DebugPrint (
**/
VOID
DebugPrintMarker (
IN UINTN ErrorLevel,
IN CONST CHAR8 *Format,
IN VA_LIST VaListMarker,
IN BASE_LIST BaseListMarker
IN UINTN ErrorLevel,
IN CONST CHAR8 *Format,
IN VA_LIST VaListMarker,
IN BASE_LIST BaseListMarker
)
{
UINT64 Buffer[(EFI_STATUS_CODE_DATA_MAX_SIZE / sizeof (UINT64)) + 1];
@@ -152,8 +152,10 @@ DebugPrintMarker (
// Copy the Format string into the record. It will be truncated if it's too long.
//
AsciiStrnCpyS (
FormatString, sizeof(Buffer) - (4 + sizeof(EFI_DEBUG_INFO) + 12 * sizeof(UINT64)),
Format, sizeof(Buffer) - (4 + sizeof(EFI_DEBUG_INFO) + 12 * sizeof(UINT64)) - 1
FormatString,
sizeof (Buffer) - (4 + sizeof (EFI_DEBUG_INFO) + 12 * sizeof (UINT64)),
Format,
sizeof (Buffer) - (4 + sizeof (EFI_DEBUG_INFO) + 12 * sizeof (UINT64)) - 1
);
//
@@ -166,37 +168,41 @@ DebugPrintMarker (
// Use the actual format string.
//
Format = FormatString;
for (; *Format != '\0'; Format++) {
for ( ; *Format != '\0'; Format++) {
//
// Only format with prefix % is processed.
//
if (*Format != '%') {
continue;
}
Long = FALSE;
//
// Parse Flags and Width
//
for (Format++; TRUE; Format++) {
if (*Format == '.' || *Format == '-' || *Format == '+' || *Format == ' ') {
if ((*Format == '.') || (*Format == '-') || (*Format == '+') || (*Format == ' ')) {
//
// These characters in format field are omitted.
//
continue;
}
if (*Format >= '0' && *Format <= '9') {
if ((*Format >= '0') && (*Format <= '9')) {
//
// These characters in format field are omitted.
//
continue;
}
if (*Format == 'L' || *Format == 'l') {
if ((*Format == 'L') || (*Format == 'l')) {
//
// 'L" or "l" in format field means the number being printed is a UINT64
//
Long = TRUE;
continue;
}
if (*Format == '*') {
//
// '*' in format field means the precision of the field is specified by
@@ -207,8 +213,10 @@ DebugPrintMarker (
} else {
BASE_ARG (BaseListMarkerPointer, UINTN) = BASE_ARG (BaseListMarker, UINTN);
}
continue;
}
if (*Format == '\0') {
//
// Make no output if Format string terminates unexpectedly when
@@ -216,6 +224,7 @@ DebugPrintMarker (
//
Format--;
}
//
// When valid argument type detected or format string terminates unexpectedly,
// the inner loop is done.
@@ -229,7 +238,8 @@ DebugPrintMarker (
if ((*Format == 'p') && (sizeof (VOID *) > 4)) {
Long = TRUE;
}
if (*Format == 'p' || *Format == 'X' || *Format == 'x' || *Format == 'd' || *Format == 'u') {
if ((*Format == 'p') || (*Format == 'X') || (*Format == 'x') || (*Format == 'd') || (*Format == 'u')) {
if (Long) {
if (BaseListMarker == NULL) {
BASE_ARG (BaseListMarkerPointer, INT64) = VA_ARG (VaListMarker, INT64);
@@ -243,7 +253,7 @@ DebugPrintMarker (
BASE_ARG (BaseListMarkerPointer, int) = BASE_ARG (BaseListMarker, int);
}
}
} else if (*Format == 's' || *Format == 'S' || *Format == 'a' || *Format == 'g' || *Format == 't') {
} else if ((*Format == 's') || (*Format == 'S') || (*Format == 'a') || (*Format == 'g') || (*Format == 't')) {
if (BaseListMarker == NULL) {
BASE_ARG (BaseListMarkerPointer, VOID *) = VA_ARG (VaListMarker, VOID *);
} else {
@@ -310,9 +320,9 @@ DebugPrintMarker (
VOID
EFIAPI
DebugVPrint (
IN UINTN ErrorLevel,
IN CONST CHAR8 *Format,
IN VA_LIST VaListMarker
IN UINTN ErrorLevel,
IN CONST CHAR8 *Format,
IN VA_LIST VaListMarker
)
{
DebugPrintMarker (ErrorLevel, Format, VaListMarker, NULL);
@@ -338,9 +348,9 @@ DebugVPrint (
VOID
EFIAPI
DebugBPrint (
IN UINTN ErrorLevel,
IN CONST CHAR8 *Format,
IN BASE_LIST BaseListMarker
IN UINTN ErrorLevel,
IN CONST CHAR8 *Format,
IN BASE_LIST BaseListMarker
)
{
DebugPrintMarker (ErrorLevel, Format, mVaListNull, BaseListMarker);
@@ -375,7 +385,7 @@ DebugAssert (
IN CONST CHAR8 *Description
)
{
UINT64 Buffer[EFI_STATUS_CODE_DATA_MAX_SIZE / sizeof(UINT64)];
UINT64 Buffer[EFI_STATUS_CODE_DATA_MAX_SIZE / sizeof (UINT64)];
EFI_DEBUG_ASSERT_DATA *AssertData;
UINTN HeaderSize;
UINTN TotalSize;
@@ -387,13 +397,13 @@ DebugAssert (
//
// Get string size
//
HeaderSize = sizeof (EFI_DEBUG_ASSERT_DATA);
HeaderSize = sizeof (EFI_DEBUG_ASSERT_DATA);
//
// Compute string size of module name enclosed by []
//
ModuleNameSize = 2 + AsciiStrSize (gEfiCallerBaseName);
FileNameSize = AsciiStrSize (FileName);
DescriptionSize = AsciiStrSize (Description);
ModuleNameSize = 2 + AsciiStrSize (gEfiCallerBaseName);
FileNameSize = AsciiStrSize (FileName);
DescriptionSize = AsciiStrSize (Description);
//
// Make sure it will all fit in the passed in buffer.
@@ -422,12 +432,13 @@ DebugAssert (
}
}
}
//
// Fill in EFI_DEBUG_ASSERT_DATA
//
AssertData = (EFI_DEBUG_ASSERT_DATA *)Buffer;
AssertData = (EFI_DEBUG_ASSERT_DATA *)Buffer;
AssertData->LineNumber = (UINT32)LineNumber;
TotalSize = sizeof (EFI_DEBUG_ASSERT_DATA);
TotalSize = sizeof (EFI_DEBUG_ASSERT_DATA);
Temp = (CHAR8 *)(AssertData + 1);
@@ -435,24 +446,24 @@ DebugAssert (
// Copy Ascii [ModuleName].
//
if (ModuleNameSize != 0) {
CopyMem(Temp, "[", 1);
CopyMem(Temp + 1, gEfiCallerBaseName, ModuleNameSize - 3);
CopyMem(Temp + ModuleNameSize - 2, "] ", 2);
CopyMem (Temp, "[", 1);
CopyMem (Temp + 1, gEfiCallerBaseName, ModuleNameSize - 3);
CopyMem (Temp + ModuleNameSize - 2, "] ", 2);
}
//
// Copy Ascii FileName including NULL terminator.
//
Temp = CopyMem (Temp + ModuleNameSize, FileName, FileNameSize);
Temp = CopyMem (Temp + ModuleNameSize, FileName, FileNameSize);
Temp[FileNameSize - 1] = 0;
TotalSize += (ModuleNameSize + FileNameSize);
TotalSize += (ModuleNameSize + FileNameSize);
//
// Copy Ascii Description include NULL terminator.
//
Temp = CopyMem (Temp + FileNameSize, Description, DescriptionSize);
Temp = CopyMem (Temp + FileNameSize, Description, DescriptionSize);
Temp[DescriptionSize - 1] = 0;
TotalSize += DescriptionSize;
TotalSize += DescriptionSize;
REPORT_STATUS_CODE_EX (
(EFI_ERROR_CODE | EFI_ERROR_UNRECOVERED),
@@ -474,7 +485,6 @@ DebugAssert (
}
}
/**
Fills a target buffer with PcdDebugClearMemoryValue, and returns the target buffer.
@@ -502,7 +512,6 @@ DebugClearMemory (
return SetMem (Buffer, Length, PcdGet8 (PcdDebugClearMemoryValue));
}
/**
Returns TRUE if ASSERT() macros are enabled.
@@ -519,10 +528,9 @@ DebugAssertEnabled (
VOID
)
{
return (BOOLEAN) ((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED) != 0);
return (BOOLEAN)((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED) != 0);
}
/**
Returns TRUE if DEBUG() macros are enabled.
@@ -539,10 +547,9 @@ DebugPrintEnabled (
VOID
)
{
return (BOOLEAN) ((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_PRINT_ENABLED) != 0);
return (BOOLEAN)((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_PRINT_ENABLED) != 0);
}
/**
Returns TRUE if DEBUG_CODE() macros are enabled.
@@ -559,10 +566,9 @@ DebugCodeEnabled (
VOID
)
{
return (BOOLEAN) ((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_CODE_ENABLED) != 0);
return (BOOLEAN)((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_CODE_ENABLED) != 0);
}
/**
Returns TRUE if DEBUG_CLEAR_MEMORY() macro is enabled.
@@ -579,7 +585,7 @@ DebugClearMemoryEnabled (
VOID
)
{
return (BOOLEAN) ((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_CLEAR_MEMORY_ENABLED) != 0);
return (BOOLEAN)((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_CLEAR_MEMORY_ENABLED) != 0);
}
/**
@@ -594,8 +600,8 @@ DebugClearMemoryEnabled (
BOOLEAN
EFIAPI
DebugPrintLevelEnabled (
IN CONST UINTN ErrorLevel
IN CONST UINTN ErrorLevel
)
{
return (BOOLEAN) ((ErrorLevel & PcdGet32(PcdFixedDebugPrintErrorLevel)) != 0);
return (BOOLEAN)((ErrorLevel & PcdGet32 (PcdFixedDebugPrintErrorLevel)) != 0);
}

View File

@@ -12,7 +12,6 @@
#include <Library/PeiServicesLib.h>
#include <Library/DebugLib.h>
/**
This service enables submitting commands via Ipmi.
@@ -34,23 +33,23 @@
EFI_STATUS
EFIAPI
IpmiSubmitCommand (
IN UINT8 NetFunction,
IN UINT8 Command,
IN UINT8 *RequestData,
IN UINT32 RequestDataSize,
OUT UINT8 *ResponseData,
IN OUT UINT32 *ResponseDataSize
IN UINT8 NetFunction,
IN UINT8 Command,
IN UINT8 *RequestData,
IN UINT32 RequestDataSize,
OUT UINT8 *ResponseData,
IN OUT UINT32 *ResponseDataSize
)
{
EFI_STATUS Status;
PEI_IPMI_PPI *IpmiPpi;
EFI_STATUS Status;
PEI_IPMI_PPI *IpmiPpi;
Status = PeiServicesLocatePpi(
&gPeiIpmiPpiGuid,
0,
NULL,
(VOID **) &IpmiPpi
);
Status = PeiServicesLocatePpi (
&gPeiIpmiPpiGuid,
0,
NULL,
(VOID **)&IpmiPpi
);
if (EFI_ERROR (Status)) {
//
// Ipmi Ppi is not installed. So, IPMI device is not present.
@@ -60,16 +59,17 @@ IpmiSubmitCommand (
}
Status = IpmiPpi->IpmiSubmitCommand (
IpmiPpi,
NetFunction,
Command,
RequestData,
RequestDataSize,
ResponseData,
ResponseDataSize
);
IpmiPpi,
NetFunction,
Command,
RequestData,
RequestDataSize,
ResponseData,
ResponseDataSize
);
if (EFI_ERROR (Status)) {
return Status;
}
return EFI_SUCCESS;
}

View File

@@ -13,7 +13,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <PiPei.h>
#include <Guid/ExtendedFirmwarePerformance.h>
@@ -27,9 +26,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Library/PcdLib.h>
#include <Library/BaseMemoryLib.h>
#define STRING_SIZE (FPDT_STRING_EVENT_RECORD_NAME_LENGTH * sizeof (CHAR8))
#define PEI_MAX_RECORD_SIZE (sizeof (FPDT_DUAL_GUID_STRING_EVENT_RECORD) + STRING_SIZE)
#define STRING_SIZE (FPDT_STRING_EVENT_RECORD_NAME_LENGTH * sizeof (CHAR8))
#define PEI_MAX_RECORD_SIZE (sizeof (FPDT_DUAL_GUID_STRING_EVENT_RECORD) + STRING_SIZE)
/**
Return the pointer to the FPDT record in the allocated memory.
@@ -46,38 +44,40 @@ GetFpdtRecordPtr (
IN UINT8 RecordSize,
IN OUT FPDT_RECORD_PTR *FpdtRecordPtr,
IN OUT FPDT_PEI_EXT_PERF_HEADER **PeiPerformanceLogHeader
)
)
{
UINT16 PeiPerformanceLogEntries;
UINTN PeiPerformanceSize;
UINT8 *PeiFirmwarePerformance;
EFI_HOB_GUID_TYPE *GuidHob;
UINT16 PeiPerformanceLogEntries;
UINTN PeiPerformanceSize;
UINT8 *PeiFirmwarePerformance;
EFI_HOB_GUID_TYPE *GuidHob;
//
// Get the number of PeiPerformanceLogEntries form PCD.
//
PeiPerformanceLogEntries = (UINT16) (PcdGet16 (PcdMaxPeiPerformanceLogEntries16) != 0 ?
PcdGet16 (PcdMaxPeiPerformanceLogEntries16) :
PcdGet8 (PcdMaxPeiPerformanceLogEntries));
PeiPerformanceLogEntries = (UINT16)(PcdGet16 (PcdMaxPeiPerformanceLogEntries16) != 0 ?
PcdGet16 (PcdMaxPeiPerformanceLogEntries16) :
PcdGet8 (PcdMaxPeiPerformanceLogEntries));
//
// Create GUID HOB Data.
//
GuidHob = GetFirstGuidHob (&gEdkiiFpdtExtendedFirmwarePerformanceGuid);
GuidHob = GetFirstGuidHob (&gEdkiiFpdtExtendedFirmwarePerformanceGuid);
PeiFirmwarePerformance = NULL;
while (GuidHob != NULL) {
//
// PEI Performance HOB was found, then return the existing one.
//
PeiFirmwarePerformance = (UINT8*)GET_GUID_HOB_DATA (GuidHob);
PeiFirmwarePerformance = (UINT8 *)GET_GUID_HOB_DATA (GuidHob);
*PeiPerformanceLogHeader = (FPDT_PEI_EXT_PERF_HEADER *)PeiFirmwarePerformance;
if (!(*PeiPerformanceLogHeader)->HobIsFull && (*PeiPerformanceLogHeader)->SizeOfAllEntries + RecordSize > (PeiPerformanceLogEntries * PEI_MAX_RECORD_SIZE)) {
if (!(*PeiPerformanceLogHeader)->HobIsFull && ((*PeiPerformanceLogHeader)->SizeOfAllEntries + RecordSize > (PeiPerformanceLogEntries * PEI_MAX_RECORD_SIZE))) {
(*PeiPerformanceLogHeader)->HobIsFull = TRUE;
}
if (!(*PeiPerformanceLogHeader)->HobIsFull && (*PeiPerformanceLogHeader)->SizeOfAllEntries + RecordSize <= (PeiPerformanceLogEntries * PEI_MAX_RECORD_SIZE)) {
if (!(*PeiPerformanceLogHeader)->HobIsFull && ((*PeiPerformanceLogHeader)->SizeOfAllEntries + RecordSize <= (PeiPerformanceLogEntries * PEI_MAX_RECORD_SIZE))) {
FpdtRecordPtr->RecordHeader = (EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER *)(PeiFirmwarePerformance + sizeof (FPDT_PEI_EXT_PERF_HEADER) + (*PeiPerformanceLogHeader)->SizeOfAllEntries);
break;
}
//
// Previous HOB is used, then find next one.
//
@@ -88,12 +88,12 @@ GetFpdtRecordPtr (
//
// PEI Performance HOB was not found, then build one.
//
PeiPerformanceSize = sizeof (FPDT_PEI_EXT_PERF_HEADER) +
PEI_MAX_RECORD_SIZE * PeiPerformanceLogEntries;
PeiFirmwarePerformance = (UINT8*)BuildGuidHob (&gEdkiiFpdtExtendedFirmwarePerformanceGuid, PeiPerformanceSize);
PeiPerformanceSize = sizeof (FPDT_PEI_EXT_PERF_HEADER) +
PEI_MAX_RECORD_SIZE * PeiPerformanceLogEntries;
PeiFirmwarePerformance = (UINT8 *)BuildGuidHob (&gEdkiiFpdtExtendedFirmwarePerformanceGuid, PeiPerformanceSize);
if (PeiFirmwarePerformance != NULL) {
ZeroMem (PeiFirmwarePerformance, PeiPerformanceSize);
(*PeiPerformanceLogHeader) = (FPDT_PEI_EXT_PERF_HEADER *)PeiFirmwarePerformance;
(*PeiPerformanceLogHeader) = (FPDT_PEI_EXT_PERF_HEADER *)PeiFirmwarePerformance;
FpdtRecordPtr->RecordHeader = (EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER *)(PeiFirmwarePerformance + sizeof (FPDT_PEI_EXT_PERF_HEADER));
}
}
@@ -126,16 +126,17 @@ IsKnownTokens (
return FALSE;
}
if (AsciiStrCmp (Token, SEC_TOK) == 0 ||
AsciiStrCmp (Token, PEI_TOK) == 0 ||
AsciiStrCmp (Token, DXE_TOK) == 0 ||
AsciiStrCmp (Token, BDS_TOK) == 0 ||
AsciiStrCmp (Token, DRIVERBINDING_START_TOK) == 0 ||
AsciiStrCmp (Token, DRIVERBINDING_SUPPORT_TOK) == 0 ||
AsciiStrCmp (Token, DRIVERBINDING_STOP_TOK) == 0 ||
AsciiStrCmp (Token, LOAD_IMAGE_TOK) == 0 ||
AsciiStrCmp (Token, START_IMAGE_TOK) == 0 ||
AsciiStrCmp (Token, PEIM_TOK) == 0) {
if ((AsciiStrCmp (Token, SEC_TOK) == 0) ||
(AsciiStrCmp (Token, PEI_TOK) == 0) ||
(AsciiStrCmp (Token, DXE_TOK) == 0) ||
(AsciiStrCmp (Token, BDS_TOK) == 0) ||
(AsciiStrCmp (Token, DRIVERBINDING_START_TOK) == 0) ||
(AsciiStrCmp (Token, DRIVERBINDING_SUPPORT_TOK) == 0) ||
(AsciiStrCmp (Token, DRIVERBINDING_STOP_TOK) == 0) ||
(AsciiStrCmp (Token, LOAD_IMAGE_TOK) == 0) ||
(AsciiStrCmp (Token, START_IMAGE_TOK) == 0) ||
(AsciiStrCmp (Token, PEIM_TOK) == 0))
{
return TRUE;
} else {
return FALSE;
@@ -153,19 +154,20 @@ Check whether the ID is a known one which map to the known Token.
**/
BOOLEAN
IsKnownID (
IN UINT32 Identifier
IN UINT32 Identifier
)
{
if (Identifier == MODULE_START_ID ||
Identifier == MODULE_END_ID ||
Identifier == MODULE_LOADIMAGE_START_ID ||
Identifier == MODULE_LOADIMAGE_END_ID ||
Identifier == MODULE_DB_START_ID ||
Identifier == MODULE_DB_END_ID ||
Identifier == MODULE_DB_SUPPORT_START_ID ||
Identifier == MODULE_DB_SUPPORT_END_ID ||
Identifier == MODULE_DB_STOP_START_ID ||
Identifier == MODULE_DB_STOP_END_ID) {
if ((Identifier == MODULE_START_ID) ||
(Identifier == MODULE_END_ID) ||
(Identifier == MODULE_LOADIMAGE_START_ID) ||
(Identifier == MODULE_LOADIMAGE_END_ID) ||
(Identifier == MODULE_DB_START_ID) ||
(Identifier == MODULE_DB_END_ID) ||
(Identifier == MODULE_DB_SUPPORT_START_ID) ||
(Identifier == MODULE_DB_SUPPORT_END_ID) ||
(Identifier == MODULE_DB_STOP_START_ID) ||
(Identifier == MODULE_DB_STOP_END_ID))
{
return TRUE;
} else {
return FALSE;
@@ -188,10 +190,10 @@ IsKnownID (
**/
EFI_STATUS
GetFpdtRecordId (
IN BOOLEAN Attribute,
IN CONST VOID *Handle,
IN CONST CHAR8 *String,
OUT UINT16 *ProgressID
IN BOOLEAN Attribute,
IN CONST VOID *Handle,
IN CONST CHAR8 *String,
OUT UINT16 *ProgressID
)
{
//
@@ -199,33 +201,38 @@ GetFpdtRecordId (
// When PcdEdkiiFpdtStringRecordEnableOnly is TRUE, all records are with type of FPDT_DYNAMIC_STRING_EVENT_TYPE.
//
if (String != NULL) {
if (AsciiStrCmp (String, LOAD_IMAGE_TOK) == 0) { // "LoadImage:"
if (AsciiStrCmp (String, LOAD_IMAGE_TOK) == 0) {
// "LoadImage:"
if (Attribute == PerfStartEntry) {
*ProgressID = MODULE_LOADIMAGE_START_ID;
} else {
*ProgressID = MODULE_LOADIMAGE_END_ID;
}
} else if (AsciiStrCmp (String, SEC_TOK) == 0 || // "SEC"
AsciiStrCmp (String, PEI_TOK) == 0) { // "PEI"
} else if ((AsciiStrCmp (String, SEC_TOK) == 0) || // "SEC"
(AsciiStrCmp (String, PEI_TOK) == 0)) // "PEI"
{
if (Attribute == PerfStartEntry) {
*ProgressID = PERF_CROSSMODULE_START_ID;
} else {
*ProgressID = PERF_CROSSMODULE_END_ID;
}
} else if (AsciiStrCmp (String, PEIM_TOK) == 0) { // "PEIM"
} else if (AsciiStrCmp (String, PEIM_TOK) == 0) {
// "PEIM"
if (Attribute == PerfStartEntry) {
*ProgressID = MODULE_START_ID;
} else {
*ProgressID = MODULE_END_ID;
}
} else { //Pref used in Modules.
} else {
// Pref used in Modules.
if (Attribute == PerfStartEntry) {
*ProgressID = PERF_INMODULE_START_ID;
} else {
*ProgressID = PERF_INMODULE_END_ID;
}
}
} else if (Handle != NULL) { //Pref used in Modules.
} else if (Handle != NULL) {
// Pref used in Modules.
if (Attribute == PerfStartEntry) {
*ProgressID = PERF_INMODULE_START_ID;
} else {
@@ -249,9 +256,9 @@ GetFpdtRecordId (
**/
VOID
CopyStringIntoPerfRecordAndUpdateLength (
IN OUT CHAR8 *Destination,
IN OUT CHAR8 *Destination,
IN CONST CHAR8 *Source,
IN OUT UINT8 *Length
IN OUT UINT8 *Length
)
{
UINTN StringLen;
@@ -267,18 +274,18 @@ CopyStringIntoPerfRecordAndUpdateLength (
DestMax = STRING_SIZE;
}
}
StringLen = AsciiStrLen (Source);
if (StringLen >= DestMax) {
StringLen = DestMax -1;
}
AsciiStrnCpyS(Destination, DestMax, Source, StringLen);
AsciiStrnCpyS (Destination, DestMax, Source, StringLen);
*Length += (UINT8)DestMax;
return;
}
/**
Convert PEI performance log to FPDT String boot record.
@@ -309,16 +316,16 @@ InsertFpdtRecord (
IN PERF_MEASUREMENT_ATTRIBUTE Attribute
)
{
FPDT_RECORD_PTR FpdtRecordPtr;
CONST VOID *ModuleGuid;
CONST CHAR8 *StringPtr;
EFI_STATUS Status;
UINT64 TimeStamp;
FPDT_PEI_EXT_PERF_HEADER *PeiPerformanceLogHeader;
FPDT_RECORD_PTR FpdtRecordPtr;
CONST VOID *ModuleGuid;
CONST CHAR8 *StringPtr;
EFI_STATUS Status;
UINT64 TimeStamp;
FPDT_PEI_EXT_PERF_HEADER *PeiPerformanceLogHeader;
StringPtr = NULL;
StringPtr = NULL;
FpdtRecordPtr.RecordHeader = NULL;
PeiPerformanceLogHeader = NULL;
PeiPerformanceLogHeader = NULL;
//
// 1. Get the Perf Id for records from PERF_START/PERF_END, PERF_START_EX/PERF_END_EX.
@@ -337,7 +344,7 @@ InsertFpdtRecord (
if ((PerfId != 0) && (IsKnownID (PerfId)) && (!IsKnownTokens (String))) {
return EFI_UNSUPPORTED;
} else if ((PerfId != 0) && (!IsKnownID (PerfId)) && (!IsKnownTokens (String))) {
if (Attribute == PerfStartEntry && ((PerfId & 0x000F) != 0)) {
if ((Attribute == PerfStartEntry) && ((PerfId & 0x000F) != 0)) {
PerfId &= 0xFFF0;
} else if ((Attribute == PerfEndEntry) && ((PerfId & 0x000F) == 0)) {
PerfId += 1;
@@ -383,113 +390,123 @@ InsertFpdtRecord (
// 5. Fill in the FPDT record according to different Performance Identifier.
//
switch (PerfId) {
case MODULE_START_ID:
case MODULE_END_ID:
StringPtr = PEIM_TOK;
if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {
FpdtRecordPtr.GuidEvent->Header.Type = FPDT_GUID_EVENT_TYPE;
FpdtRecordPtr.GuidEvent->Header.Length = sizeof (FPDT_GUID_EVENT_RECORD);
FpdtRecordPtr.GuidEvent->Header.Revision = FPDT_RECORD_REVISION_1;
FpdtRecordPtr.GuidEvent->ProgressID = PerfId;
FpdtRecordPtr.GuidEvent->Timestamp = TimeStamp;
CopyMem (&FpdtRecordPtr.GuidEvent->Guid, ModuleGuid, sizeof (EFI_GUID));
}
break;
case MODULE_LOADIMAGE_START_ID:
case MODULE_LOADIMAGE_END_ID:
StringPtr = LOAD_IMAGE_TOK;
if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {
FpdtRecordPtr.GuidQwordEvent->Header.Type = FPDT_GUID_QWORD_EVENT_TYPE;
FpdtRecordPtr.GuidQwordEvent->Header.Length = sizeof (FPDT_GUID_QWORD_EVENT_RECORD);
FpdtRecordPtr.GuidQwordEvent->Header.Revision = FPDT_RECORD_REVISION_1;
FpdtRecordPtr.GuidQwordEvent->ProgressID = PerfId;
FpdtRecordPtr.GuidQwordEvent->Timestamp = TimeStamp;
if (PerfId == MODULE_LOADIMAGE_START_ID) {
PeiPerformanceLogHeader->LoadImageCount++;
case MODULE_START_ID:
case MODULE_END_ID:
StringPtr = PEIM_TOK;
if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {
FpdtRecordPtr.GuidEvent->Header.Type = FPDT_GUID_EVENT_TYPE;
FpdtRecordPtr.GuidEvent->Header.Length = sizeof (FPDT_GUID_EVENT_RECORD);
FpdtRecordPtr.GuidEvent->Header.Revision = FPDT_RECORD_REVISION_1;
FpdtRecordPtr.GuidEvent->ProgressID = PerfId;
FpdtRecordPtr.GuidEvent->Timestamp = TimeStamp;
CopyMem (&FpdtRecordPtr.GuidEvent->Guid, ModuleGuid, sizeof (EFI_GUID));
}
FpdtRecordPtr.GuidQwordEvent->Qword = PeiPerformanceLogHeader->LoadImageCount;
CopyMem (&FpdtRecordPtr.GuidQwordEvent->Guid, ModuleGuid, sizeof (EFI_GUID));
}
break;
case PERF_EVENTSIGNAL_START_ID:
case PERF_EVENTSIGNAL_END_ID:
case PERF_CALLBACK_START_ID:
case PERF_CALLBACK_END_ID:
if (String == NULL || Guid == NULL) {
return EFI_INVALID_PARAMETER;
}
StringPtr = String;
if (AsciiStrLen (String) == 0) {
StringPtr = "unknown name";
}
if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {
FpdtRecordPtr.DualGuidStringEvent->Header.Type = FPDT_DUAL_GUID_STRING_EVENT_TYPE;
FpdtRecordPtr.DualGuidStringEvent->Header.Length = sizeof (FPDT_DUAL_GUID_STRING_EVENT_RECORD);
FpdtRecordPtr.DualGuidStringEvent->Header.Revision = FPDT_RECORD_REVISION_1;
FpdtRecordPtr.DualGuidStringEvent->ProgressID = PerfId;
FpdtRecordPtr.DualGuidStringEvent->Timestamp = TimeStamp;
CopyMem (&FpdtRecordPtr.DualGuidStringEvent->Guid1, ModuleGuid, sizeof (FpdtRecordPtr.DualGuidStringEvent->Guid1));
CopyMem (&FpdtRecordPtr.DualGuidStringEvent->Guid2, Guid, sizeof (FpdtRecordPtr.DualGuidStringEvent->Guid2));
CopyStringIntoPerfRecordAndUpdateLength (FpdtRecordPtr.DualGuidStringEvent->String, StringPtr, &FpdtRecordPtr.DualGuidStringEvent->Header.Length);
}
break;
break;
case MODULE_LOADIMAGE_START_ID:
case MODULE_LOADIMAGE_END_ID:
StringPtr = LOAD_IMAGE_TOK;
if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {
FpdtRecordPtr.GuidQwordEvent->Header.Type = FPDT_GUID_QWORD_EVENT_TYPE;
FpdtRecordPtr.GuidQwordEvent->Header.Length = sizeof (FPDT_GUID_QWORD_EVENT_RECORD);
FpdtRecordPtr.GuidQwordEvent->Header.Revision = FPDT_RECORD_REVISION_1;
FpdtRecordPtr.GuidQwordEvent->ProgressID = PerfId;
FpdtRecordPtr.GuidQwordEvent->Timestamp = TimeStamp;
if (PerfId == MODULE_LOADIMAGE_START_ID) {
PeiPerformanceLogHeader->LoadImageCount++;
}
FpdtRecordPtr.GuidQwordEvent->Qword = PeiPerformanceLogHeader->LoadImageCount;
CopyMem (&FpdtRecordPtr.GuidQwordEvent->Guid, ModuleGuid, sizeof (EFI_GUID));
}
break;
case PERF_EVENTSIGNAL_START_ID:
case PERF_EVENTSIGNAL_END_ID:
case PERF_CALLBACK_START_ID:
case PERF_CALLBACK_END_ID:
if ((String == NULL) || (Guid == NULL)) {
return EFI_INVALID_PARAMETER;
}
case PERF_EVENT_ID:
case PERF_FUNCTION_START_ID:
case PERF_FUNCTION_END_ID:
case PERF_INMODULE_START_ID:
case PERF_INMODULE_END_ID:
case PERF_CROSSMODULE_START_ID:
case PERF_CROSSMODULE_END_ID:
if (String != NULL && AsciiStrLen (String) != 0) {
StringPtr = String;
} else {
StringPtr = "unknown name";
}
if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {
FpdtRecordPtr.DynamicStringEvent->Header.Type = FPDT_DYNAMIC_STRING_EVENT_TYPE;
FpdtRecordPtr.DynamicStringEvent->Header.Length = sizeof (FPDT_DYNAMIC_STRING_EVENT_RECORD);
FpdtRecordPtr.DynamicStringEvent->Header.Revision = FPDT_RECORD_REVISION_1;
FpdtRecordPtr.DynamicStringEvent->ProgressID = PerfId;
FpdtRecordPtr.DynamicStringEvent->Timestamp = TimeStamp;
CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, ModuleGuid, sizeof (EFI_GUID));
CopyStringIntoPerfRecordAndUpdateLength (FpdtRecordPtr.DynamicStringEvent->String, StringPtr, &FpdtRecordPtr.DynamicStringEvent->Header.Length);
}
break;
if (AsciiStrLen (String) == 0) {
StringPtr = "unknown name";
}
default:
if (Attribute != PerfEntry) {
if (String != NULL && AsciiStrLen (String) != 0) {
StringPtr = String;
} else {
StringPtr = "unknown name";
}
if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {
FpdtRecordPtr.DynamicStringEvent->Header.Type = FPDT_DYNAMIC_STRING_EVENT_TYPE;
FpdtRecordPtr.DynamicStringEvent->Header.Length = sizeof (FPDT_DYNAMIC_STRING_EVENT_RECORD);
FpdtRecordPtr.DynamicStringEvent->Header.Revision = FPDT_RECORD_REVISION_1;
FpdtRecordPtr.DynamicStringEvent->ProgressID = PerfId;
FpdtRecordPtr.DynamicStringEvent->Timestamp = TimeStamp;
CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, ModuleGuid, sizeof (FpdtRecordPtr.DynamicStringEvent->Guid));
CopyStringIntoPerfRecordAndUpdateLength (FpdtRecordPtr.DynamicStringEvent->String, StringPtr, &FpdtRecordPtr.DynamicStringEvent->Header.Length);
}
} else {
return EFI_INVALID_PARAMETER;
}
break;
if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {
FpdtRecordPtr.DualGuidStringEvent->Header.Type = FPDT_DUAL_GUID_STRING_EVENT_TYPE;
FpdtRecordPtr.DualGuidStringEvent->Header.Length = sizeof (FPDT_DUAL_GUID_STRING_EVENT_RECORD);
FpdtRecordPtr.DualGuidStringEvent->Header.Revision = FPDT_RECORD_REVISION_1;
FpdtRecordPtr.DualGuidStringEvent->ProgressID = PerfId;
FpdtRecordPtr.DualGuidStringEvent->Timestamp = TimeStamp;
CopyMem (&FpdtRecordPtr.DualGuidStringEvent->Guid1, ModuleGuid, sizeof (FpdtRecordPtr.DualGuidStringEvent->Guid1));
CopyMem (&FpdtRecordPtr.DualGuidStringEvent->Guid2, Guid, sizeof (FpdtRecordPtr.DualGuidStringEvent->Guid2));
CopyStringIntoPerfRecordAndUpdateLength (FpdtRecordPtr.DualGuidStringEvent->String, StringPtr, &FpdtRecordPtr.DualGuidStringEvent->Header.Length);
}
break;
case PERF_EVENT_ID:
case PERF_FUNCTION_START_ID:
case PERF_FUNCTION_END_ID:
case PERF_INMODULE_START_ID:
case PERF_INMODULE_END_ID:
case PERF_CROSSMODULE_START_ID:
case PERF_CROSSMODULE_END_ID:
if ((String != NULL) && (AsciiStrLen (String) != 0)) {
StringPtr = String;
} else {
StringPtr = "unknown name";
}
if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {
FpdtRecordPtr.DynamicStringEvent->Header.Type = FPDT_DYNAMIC_STRING_EVENT_TYPE;
FpdtRecordPtr.DynamicStringEvent->Header.Length = sizeof (FPDT_DYNAMIC_STRING_EVENT_RECORD);
FpdtRecordPtr.DynamicStringEvent->Header.Revision = FPDT_RECORD_REVISION_1;
FpdtRecordPtr.DynamicStringEvent->ProgressID = PerfId;
FpdtRecordPtr.DynamicStringEvent->Timestamp = TimeStamp;
CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, ModuleGuid, sizeof (EFI_GUID));
CopyStringIntoPerfRecordAndUpdateLength (FpdtRecordPtr.DynamicStringEvent->String, StringPtr, &FpdtRecordPtr.DynamicStringEvent->Header.Length);
}
break;
default:
if (Attribute != PerfEntry) {
if ((String != NULL) && (AsciiStrLen (String) != 0)) {
StringPtr = String;
} else {
StringPtr = "unknown name";
}
if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {
FpdtRecordPtr.DynamicStringEvent->Header.Type = FPDT_DYNAMIC_STRING_EVENT_TYPE;
FpdtRecordPtr.DynamicStringEvent->Header.Length = sizeof (FPDT_DYNAMIC_STRING_EVENT_RECORD);
FpdtRecordPtr.DynamicStringEvent->Header.Revision = FPDT_RECORD_REVISION_1;
FpdtRecordPtr.DynamicStringEvent->ProgressID = PerfId;
FpdtRecordPtr.DynamicStringEvent->Timestamp = TimeStamp;
CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, ModuleGuid, sizeof (FpdtRecordPtr.DynamicStringEvent->Guid));
CopyStringIntoPerfRecordAndUpdateLength (FpdtRecordPtr.DynamicStringEvent->String, StringPtr, &FpdtRecordPtr.DynamicStringEvent->Header.Length);
}
} else {
return EFI_INVALID_PARAMETER;
}
break;
}
//
// 5.2 When PcdEdkiiFpdtStringRecordEnableOnly==TRUE, create string record for all Perf entries.
//
if (PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {
FpdtRecordPtr.DynamicStringEvent->Header.Type = FPDT_DYNAMIC_STRING_EVENT_TYPE;
FpdtRecordPtr.DynamicStringEvent->Header.Length = sizeof (FPDT_DYNAMIC_STRING_EVENT_RECORD);
FpdtRecordPtr.DynamicStringEvent->Header.Revision = FPDT_RECORD_REVISION_1;
FpdtRecordPtr.DynamicStringEvent->ProgressID = PerfId;
FpdtRecordPtr.DynamicStringEvent->Timestamp = TimeStamp;
FpdtRecordPtr.DynamicStringEvent->Header.Type = FPDT_DYNAMIC_STRING_EVENT_TYPE;
FpdtRecordPtr.DynamicStringEvent->Header.Length = sizeof (FPDT_DYNAMIC_STRING_EVENT_RECORD);
FpdtRecordPtr.DynamicStringEvent->Header.Revision = FPDT_RECORD_REVISION_1;
FpdtRecordPtr.DynamicStringEvent->ProgressID = PerfId;
FpdtRecordPtr.DynamicStringEvent->Timestamp = TimeStamp;
if (Guid != NULL) {
//
// Cache the event guid in string event record.
@@ -498,6 +515,7 @@ InsertFpdtRecord (
} else {
CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, ModuleGuid, sizeof (EFI_GUID));
}
CopyStringIntoPerfRecordAndUpdateLength (FpdtRecordPtr.DynamicStringEvent->String, StringPtr, &FpdtRecordPtr.DynamicStringEvent->Header.Length);
}
@@ -543,7 +561,7 @@ StartPerformanceMeasurementEx (
IN UINT32 Identifier
)
{
CONST CHAR8 *String;
CONST CHAR8 *String;
if (Token != NULL) {
String = Token;
@@ -554,7 +572,6 @@ StartPerformanceMeasurementEx (
}
return (RETURN_STATUS)InsertFpdtRecord (Handle, NULL, String, TimeStamp, 0, (UINT16)Identifier, PerfStartEntry);
}
/**
@@ -589,7 +606,7 @@ EndPerformanceMeasurementEx (
IN UINT32 Identifier
)
{
CONST CHAR8 *String;
CONST CHAR8 *String;
if (Token != NULL) {
String = Token;
@@ -648,13 +665,13 @@ EndPerformanceMeasurementEx (
UINTN
EFIAPI
GetPerformanceMeasurementEx (
IN UINTN LogEntryKey,
OUT CONST VOID **Handle,
OUT CONST CHAR8 **Token,
OUT CONST CHAR8 **Module,
OUT UINT64 *StartTimeStamp,
OUT UINT64 *EndTimeStamp,
OUT UINT32 *Identifier
IN UINTN LogEntryKey,
OUT CONST VOID **Handle,
OUT CONST CHAR8 **Token,
OUT CONST CHAR8 **Module,
OUT UINT64 *StartTimeStamp,
OUT UINT64 *EndTimeStamp,
OUT UINT32 *Identifier
)
{
return 0;
@@ -771,12 +788,12 @@ EndPerformanceMeasurement (
UINTN
EFIAPI
GetPerformanceMeasurement (
IN UINTN LogEntryKey,
OUT CONST VOID **Handle,
OUT CONST CHAR8 **Token,
OUT CONST CHAR8 **Module,
OUT UINT64 *StartTimeStamp,
OUT UINT64 *EndTimeStamp
IN UINTN LogEntryKey,
OUT CONST VOID **Handle,
OUT CONST CHAR8 **Token,
OUT CONST CHAR8 **Module,
OUT UINT64 *StartTimeStamp,
OUT UINT64 *EndTimeStamp
)
{
return 0;
@@ -800,7 +817,7 @@ PerformanceMeasurementEnabled (
VOID
)
{
return (BOOLEAN) ((PcdGet8(PcdPerformanceLibraryPropertyMask) & PERFORMANCE_LIBRARY_PROPERTY_MEASUREMENT_ENABLED) != 0);
return (BOOLEAN)((PcdGet8 (PcdPerformanceLibraryPropertyMask) & PERFORMANCE_LIBRARY_PROPERTY_MEASUREMENT_ENABLED) != 0);
}
/**
@@ -846,14 +863,15 @@ LogPerformanceMeasurement (
BOOLEAN
EFIAPI
LogPerformanceMeasurementEnabled (
IN CONST UINTN Type
IN CONST UINTN Type
)
{
//
// When Performance measurement is enabled and the type is not filtered, the performance can be logged.
//
if (PerformanceMeasurementEnabled () && (PcdGet8(PcdPerformanceLibraryPropertyMask) & Type) == 0) {
if (PerformanceMeasurementEnabled () && ((PcdGet8 (PcdPerformanceLibraryPropertyMask) & Type) == 0)) {
return TRUE;
}
return FALSE;
}

View File

@@ -45,41 +45,42 @@
**/
EFI_STATUS
InternalReportStatusCode (
IN EFI_STATUS_CODE_TYPE Type,
IN EFI_STATUS_CODE_VALUE Value,
IN UINT32 Instance,
IN CONST EFI_GUID *CallerId OPTIONAL,
IN EFI_STATUS_CODE_DATA *Data OPTIONAL
IN EFI_STATUS_CODE_TYPE Type,
IN EFI_STATUS_CODE_VALUE Value,
IN UINT32 Instance,
IN CONST EFI_GUID *CallerId OPTIONAL,
IN EFI_STATUS_CODE_DATA *Data OPTIONAL
)
{
CONST EFI_PEI_SERVICES **PeiServices;
EFI_STATUS Status;
if ((ReportProgressCodeEnabled() && ((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) ||
(ReportErrorCodeEnabled() && ((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE) ||
(ReportDebugCodeEnabled() && ((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_DEBUG_CODE)) {
if ((ReportProgressCodeEnabled () && (((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE)) ||
(ReportErrorCodeEnabled () && (((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE)) ||
(ReportDebugCodeEnabled () && (((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_DEBUG_CODE)))
{
PeiServices = GetPeiServicesTablePointer ();
Status = (*PeiServices)->ReportStatusCode (
PeiServices,
Type,
Value,
Instance,
(EFI_GUID *)CallerId,
Data
);
Status = (*PeiServices)->ReportStatusCode (
PeiServices,
Type,
Value,
Instance,
(EFI_GUID *)CallerId,
Data
);
if (Status == EFI_NOT_AVAILABLE_YET) {
Status = OemHookStatusCodeInitialize ();
if (!EFI_ERROR (Status)) {
return OemHookStatusCodeReport (Type, Value, Instance, (EFI_GUID *) CallerId, Data);
return OemHookStatusCodeReport (Type, Value, Instance, (EFI_GUID *)CallerId, Data);
}
}
return Status;
}
return EFI_UNSUPPORTED;
}
/**
Converts a status code to an 8-bit POST code value.
@@ -118,15 +119,16 @@ CodeTypeToPostCode (
// Convert Value to an 8 bit post code
//
if (((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) ||
((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE)) {
*PostCode = (UINT8) ((((Value & EFI_STATUS_CODE_CLASS_MASK) >> 24) << 5) |
(((Value & EFI_STATUS_CODE_SUBCLASS_MASK) >> 16) & 0x1f));
((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE))
{
*PostCode = (UINT8)((((Value & EFI_STATUS_CODE_CLASS_MASK) >> 24) << 5) |
(((Value & EFI_STATUS_CODE_SUBCLASS_MASK) >> 16) & 0x1f));
return TRUE;
}
return FALSE;
}
/**
Extracts ASSERT() information from a status code structure.
@@ -180,17 +182,18 @@ ReportStatusCodeExtractAssertInfo (
if (((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE) &&
((CodeType & EFI_STATUS_CODE_SEVERITY_MASK) == EFI_ERROR_UNRECOVERED) &&
((Value & EFI_STATUS_CODE_OPERATION_MASK) == EFI_SW_EC_ILLEGAL_SOFTWARE_STATE)) {
((Value & EFI_STATUS_CODE_OPERATION_MASK) == EFI_SW_EC_ILLEGAL_SOFTWARE_STATE))
{
AssertData = (EFI_DEBUG_ASSERT_DATA *)(Data + 1);
*Filename = (CHAR8 *)(AssertData + 1);
*Description = *Filename + AsciiStrLen (*Filename) + 1;
*LineNumber = AssertData->LineNumber;
return TRUE;
}
return FALSE;
}
/**
Extracts DEBUG() information from a status code structure.
@@ -259,13 +262,12 @@ ReportStatusCodeExtractDebugInfo (
// 64-bit aligned is a must, otherwise retrieving 64-bit parameter from BASE_LIST will
// cause unalignment exception.
//
*Marker = (BASE_LIST) (DebugInfo + 1);
*Marker = (BASE_LIST)(DebugInfo + 1);
*Format = (CHAR8 *)(((UINT64 *)*Marker) + 12);
return TRUE;
}
/**
Reports a status code.
@@ -297,7 +299,6 @@ ReportStatusCode (
return InternalReportStatusCode (Type, Value, 0, &gEfiCallerIdGuid, NULL);
}
/**
Reports a status code with a Device Path Protocol as the extended data.
@@ -341,7 +342,6 @@ ReportStatusCodeWithDevicePath (
return EFI_UNSUPPORTED;
}
/**
Reports a status code with an extended data buffer.
@@ -397,7 +397,6 @@ ReportStatusCodeWithExtendedData (
);
}
/**
Reports a status code with full parameters.
@@ -471,23 +470,26 @@ ReportStatusCodeEx (
DEBUG ((DEBUG_ERROR, "Status code extended data is too large to be reported!\n"));
return EFI_OUT_OF_RESOURCES;
}
StatusCodeData = (EFI_STATUS_CODE_DATA *) Buffer;
StatusCodeData->HeaderSize = (UINT16) sizeof (EFI_STATUS_CODE_DATA);
StatusCodeData->Size = (UINT16) ExtendedDataSize;
StatusCodeData = (EFI_STATUS_CODE_DATA *)Buffer;
StatusCodeData->HeaderSize = (UINT16)sizeof (EFI_STATUS_CODE_DATA);
StatusCodeData->Size = (UINT16)ExtendedDataSize;
if (ExtendedDataGuid == NULL) {
ExtendedDataGuid = &gEfiStatusCodeSpecificDataGuid;
}
CopyGuid (&StatusCodeData->Type, ExtendedDataGuid);
if (ExtendedData != NULL) {
CopyMem (StatusCodeData + 1, ExtendedData, ExtendedDataSize);
}
if (CallerId == NULL) {
CallerId = &gEfiCallerIdGuid;
}
return InternalReportStatusCode (Type, Value, Instance, CallerId, StatusCodeData);
}
/**
Returns TRUE if status codes of type EFI_PROGRESS_CODE are enabled
@@ -506,10 +508,9 @@ ReportProgressCodeEnabled (
VOID
)
{
return (BOOLEAN) ((PcdGet8 (PcdReportStatusCodePropertyMask) & REPORT_STATUS_CODE_PROPERTY_PROGRESS_CODE_ENABLED) != 0);
return (BOOLEAN)((PcdGet8 (PcdReportStatusCodePropertyMask) & REPORT_STATUS_CODE_PROPERTY_PROGRESS_CODE_ENABLED) != 0);
}
/**
Returns TRUE if status codes of type EFI_ERROR_CODE are enabled
@@ -528,10 +529,9 @@ ReportErrorCodeEnabled (
VOID
)
{
return (BOOLEAN) ((PcdGet8 (PcdReportStatusCodePropertyMask) & REPORT_STATUS_CODE_PROPERTY_ERROR_CODE_ENABLED) != 0);
return (BOOLEAN)((PcdGet8 (PcdReportStatusCodePropertyMask) & REPORT_STATUS_CODE_PROPERTY_ERROR_CODE_ENABLED) != 0);
}
/**
Returns TRUE if status codes of type EFI_DEBUG_CODE are enabled
@@ -550,5 +550,5 @@ ReportDebugCodeEnabled (
VOID
)
{
return (BOOLEAN) ((PcdGet8 (PcdReportStatusCodePropertyMask) & REPORT_STATUS_CODE_PROPERTY_DEBUG_CODE_ENABLED) != 0);
return (BOOLEAN)((PcdGet8 (PcdReportStatusCodePropertyMask) & REPORT_STATUS_CODE_PROPERTY_DEBUG_CODE_ENABLED) != 0);
}

View File

@@ -71,8 +71,8 @@ ResetShutdown (
VOID
EFIAPI
ResetPlatformSpecific (
IN UINTN DataSize,
IN VOID *ResetData
IN UINTN DataSize,
IN VOID *ResetData
)
{
PeiServicesResetSystem2 (EfiResetPlatformSpecific, EFI_SUCCESS, DataSize, ResetData);
@@ -93,10 +93,10 @@ ResetPlatformSpecific (
VOID
EFIAPI
ResetSystem (
IN EFI_RESET_TYPE ResetType,
IN EFI_STATUS ResetStatus,
IN UINTN DataSize,
IN VOID *ResetData OPTIONAL
IN EFI_RESET_TYPE ResetType,
IN EFI_STATUS ResetStatus,
IN UINTN DataSize,
IN VOID *ResetData OPTIONAL
)
{
PeiServicesResetSystem2 (ResetType, ResetStatus, DataSize, ResetData);

File diff suppressed because it is too large Load Diff

View File

@@ -18,164 +18,163 @@
//
typedef struct {
UINT16 OpCode;
UINT8 Length;
UINT16 OpCode;
UINT8 Length;
} EFI_BOOT_SCRIPT_GENERIC_HEADER;
typedef struct {
UINT16 OpCode;
UINT8 Length;
UINT16 Version;
UINT32 TableLength;
UINT16 Reserved[2];
UINT16 OpCode;
UINT8 Length;
UINT16 Version;
UINT32 TableLength;
UINT16 Reserved[2];
} EFI_BOOT_SCRIPT_TABLE_HEADER;
typedef struct {
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
} EFI_BOOT_SCRIPT_COMMON_HEADER;
typedef struct {
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT32 Count;
UINT64 Address;
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT32 Count;
UINT64 Address;
} EFI_BOOT_SCRIPT_IO_WRITE;
typedef struct {
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT64 Address;
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT64 Address;
} EFI_BOOT_SCRIPT_IO_READ_WRITE;
typedef struct {
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT32 Count;
UINT64 Address;
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT32 Count;
UINT64 Address;
} EFI_BOOT_SCRIPT_MEM_WRITE;
typedef struct {
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT64 Address;
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT64 Address;
} EFI_BOOT_SCRIPT_MEM_READ_WRITE;
typedef struct {
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT32 Count;
UINT64 Address;
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT32 Count;
UINT64 Address;
} EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE;
typedef struct {
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT32 Count;
UINT64 Address;
UINT16 Segment;
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT32 Count;
UINT64 Address;
UINT16 Segment;
} EFI_BOOT_SCRIPT_PCI_CONFIG2_WRITE;
typedef struct {
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT64 Address;
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT64 Address;
} EFI_BOOT_SCRIPT_PCI_CONFIG_READ_WRITE;
typedef struct {
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT64 Address;
UINT16 Segment;
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT64 Address;
UINT16 Segment;
} EFI_BOOT_SCRIPT_PCI_CONFIG2_READ_WRITE;
typedef struct {
UINT16 OpCode;
UINT8 Length;
UINT64 SmBusAddress;
UINT32 Operation;
UINT32 DataSize;
UINT16 OpCode;
UINT8 Length;
UINT64 SmBusAddress;
UINT32 Operation;
UINT32 DataSize;
} EFI_BOOT_SCRIPT_SMBUS_EXECUTE;
typedef struct {
UINT16 OpCode;
UINT8 Length;
UINT64 Duration;
UINT16 OpCode;
UINT8 Length;
UINT64 Duration;
} EFI_BOOT_SCRIPT_STALL;
typedef struct {
UINT16 OpCode;
UINT8 Length;
EFI_PHYSICAL_ADDRESS EntryPoint;
UINT16 OpCode;
UINT8 Length;
EFI_PHYSICAL_ADDRESS EntryPoint;
} EFI_BOOT_SCRIPT_DISPATCH;
typedef struct {
UINT16 OpCode;
UINT8 Length;
EFI_PHYSICAL_ADDRESS EntryPoint;
EFI_PHYSICAL_ADDRESS Context;
UINT16 OpCode;
UINT8 Length;
EFI_PHYSICAL_ADDRESS EntryPoint;
EFI_PHYSICAL_ADDRESS Context;
} EFI_BOOT_SCRIPT_DISPATCH_2;
typedef struct {
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT64 Address;
UINT64 Duration;
UINT64 LoopTimes;
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT64 Address;
UINT64 Duration;
UINT64 LoopTimes;
} EFI_BOOT_SCRIPT_MEM_POLL;
typedef struct {
UINT16 OpCode;
UINT8 Length;
UINT32 InformationLength;
// UINT8 InformationData[InformationLength];
UINT16 OpCode;
UINT8 Length;
UINT32 InformationLength;
// UINT8 InformationData[InformationLength];
} EFI_BOOT_SCRIPT_INFORMATION;
typedef struct {
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT64 Address;
UINT64 Delay;
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT64 Address;
UINT64 Delay;
} EFI_BOOT_SCRIPT_IO_POLL;
typedef struct {
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT64 Address;
UINT64 Delay;
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT64 Address;
UINT64 Delay;
} EFI_BOOT_SCRIPT_PCI_CONFIG_POLL;
typedef struct {
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT64 Address;
UINT16 Segment;
UINT64 Delay;
UINT16 OpCode;
UINT8 Length;
UINT32 Width;
UINT64 Address;
UINT16 Segment;
UINT64 Delay;
} EFI_BOOT_SCRIPT_PCI_CONFIG2_POLL;
typedef struct {
UINT16 OpCode;
UINT8 Length;
UINT16 OpCode;
UINT8 Length;
} EFI_BOOT_SCRIPT_TERMINATE;
#pragma pack()
#define BOOT_SCRIPT_NODE_MAX_LENGTH 1024
#define BOOT_SCRIPT_NODE_MAX_LENGTH 1024
#define BOOT_SCRIPT_TABLE_VERSION 0x0001
#define BOOT_SCRIPT_TABLE_VERSION 0x0001
#endif

Some files were not shown because too many files have changed in this diff Show More