EmulatorPkg: Apply uncrustify changes

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737

Apply uncrustify changes to .c/.h files in the EmulatorPkg 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: Ray Ni <ray.ni@intel.com>
This commit is contained in:
Michael Kubacki
2021-12-05 14:53:57 -08:00
committed by mergify[bot]
parent e7108d0e96
commit a550d468a6
111 changed files with 6170 additions and 6345 deletions

View File

@ -17,8 +17,8 @@
#include <Library/UefiLib.h>
#include <Protocol/ShellParameters.h>
UINTN Argc;
CHAR16 **Argv;
UINTN Argc;
CHAR16 **Argv;
/**
@ -31,15 +31,15 @@ GetArg (
VOID
)
{
EFI_STATUS Status;
EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters;
EFI_STATUS Status;
EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters;
Status = gBS->HandleProtocol (
gImageHandle,
&gEfiShellParametersProtocolGuid,
(VOID**)&ShellParameters
(VOID **)&ShellParameters
);
if (EFI_ERROR(Status)) {
if (EFI_ERROR (Status)) {
return Status;
}
@ -84,8 +84,8 @@ UefiMain (
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;
RETURN_STATUS ReturnStatus;
EFI_STATUS Status;
RETURN_STATUS ReturnStatus;
UINT8 HostIpAssignmentType;
EFI_IPv4_ADDRESS HostIpAddress;
@ -94,8 +94,8 @@ UefiMain (
EFI_IPv4_ADDRESS RedfishServiceIpMask;
UINTN RedfishServiceIpPort;
Status = GetArg();
if (EFI_ERROR(Status)) {
Status = GetArg ();
if (EFI_ERROR (Status)) {
return Status;
}
@ -104,39 +104,41 @@ UefiMain (
// RedfishPlatformConfig.efi -s HostIpAddress HostIpMask RedfishServiceIpAddress RedfishServiceIpMask RedfishServiceIpPort
// RedfishPlatformConfig.efi -a RedfishServiceIpAddress RedfishServiceIpMask RedfishServiceIpPort
//
if (Argc != 7 && Argc != 5) {
PrintHelp();
if ((Argc != 7) && (Argc != 5)) {
PrintHelp ();
return EFI_UNSUPPORTED;
}
if (StrCmp(Argv[1], L"-s") == 0) {
if (StrCmp (Argv[1], L"-s") == 0) {
HostIpAssignmentType = 1;
Status = NetLibStrToIp4 (Argv[2], &HostIpAddress);
if (EFI_ERROR (Status)) {
PrintHelp();
PrintHelp ();
return Status;
}
Status = NetLibStrToIp4 (Argv[3], &HostIpMask);
if (EFI_ERROR (Status)) {
PrintHelp();
PrintHelp ();
return Status;
}
Status = NetLibStrToIp4 (Argv[4], &RedfishServiceIpAddress);
if (EFI_ERROR (Status)) {
PrintHelp();
PrintHelp ();
return Status;
}
Status = NetLibStrToIp4 (Argv[5], &RedfishServiceIpMask);
if (EFI_ERROR (Status)) {
PrintHelp();
PrintHelp ();
return Status;
}
ReturnStatus = StrDecimalToUintnS (Argv[6], NULL, &RedfishServiceIpPort);
if (RETURN_ERROR (ReturnStatus)) {
PrintHelp();
PrintHelp ();
return Status;
}
@ -214,24 +216,24 @@ UefiMain (
Print (L"RedfishServiceIpMask: %s has been set Successfully!\n", Argv[5]);
Print (L"RedfishServiceIpPort: %s has been set Successfully!\n", Argv[6]);
Print (L"Please Restart!\n");
} else if (StrCmp(Argv[1], L"-a") == 0) {
} else if (StrCmp (Argv[1], L"-a") == 0) {
HostIpAssignmentType = 3;
Status = NetLibStrToIp4 (Argv[2], &RedfishServiceIpAddress);
if (EFI_ERROR (Status)) {
PrintHelp();
PrintHelp ();
return Status;
}
Status = NetLibStrToIp4 (Argv[3], &RedfishServiceIpMask);
if (EFI_ERROR (Status)) {
PrintHelp();
PrintHelp ();
return Status;
}
ReturnStatus = StrDecimalToUintnS (Argv[4], NULL, &RedfishServiceIpPort);
if (RETURN_ERROR (ReturnStatus)) {
PrintHelp();
PrintHelp ();
return Status;
}
@ -285,12 +287,10 @@ UefiMain (
Print (L"RedfishServiceIpMask: %s has been set Successfully!\n", Argv[3]);
Print (L"RedfishServiceIpPort: %s has been set Successfully!\n", Argv[4]);
Print (L"Please Restart!\n");
} else if (StrCmp(Argv[1], L"-h") == 0 || StrCmp(Argv[1], L"-help") == 0) {
PrintHelp();
} else if ((StrCmp (Argv[1], L"-h") == 0) || (StrCmp (Argv[1], L"-help") == 0)) {
PrintHelp ();
} else {
PrintHelp();
PrintHelp ();
return EFI_UNSUPPORTED;
}

View File

@ -21,9 +21,10 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
EFI_STATUS
EFIAPI
PeimInitializeAutoScanPei (
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
)
/*++
Routine Description:
@ -38,14 +39,13 @@ Returns:
**/
{
EFI_STATUS Status;
EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor;
EMU_THUNK_PPI *Thunk;
UINT64 MemorySize;
EFI_PHYSICAL_ADDRESS MemoryBase;
UINTN Index;
EFI_RESOURCE_ATTRIBUTE_TYPE Attributes;
EFI_STATUS Status;
EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor;
EMU_THUNK_PPI *Thunk;
UINT64 MemorySize;
EFI_PHYSICAL_ADDRESS MemoryBase;
UINTN Index;
EFI_RESOURCE_ATTRIBUTE_TYPE Attributes;
DEBUG ((DEBUG_ERROR, "Emu Autoscan PEIM Loaded\n"));
@ -66,12 +66,12 @@ Returns:
if (!EFI_ERROR (Status)) {
Attributes =
(
EFI_RESOURCE_ATTRIBUTE_PRESENT |
EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |
EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |
EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |
EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE
EFI_RESOURCE_ATTRIBUTE_PRESENT |
EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |
EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |
EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |
EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE
);
if (Index == 0) {
@ -91,6 +91,7 @@ Returns:
MemorySize
);
}
Index++;
} while (!EFI_ERROR (Status));

View File

@ -6,8 +6,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
//
// The package level header files this module uses
//
@ -16,7 +14,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Library/PcdLib.h>
#include <Library/PeiServicesLib.h>
//
// The protocols, PPI and GUID defintions for this module
//
@ -28,7 +25,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Library/DebugLib.h>
#include <Library/PeimEntryPoint.h>
//
// Module globals
//
@ -47,9 +43,10 @@ EFI_PEI_PPI_DESCRIPTOR mPpiListRecoveryBootMode = {
EFI_STATUS
EFIAPI
InitializeBootMode (
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
)
/*++
Routine Description:
@ -66,14 +63,14 @@ Returns:
**/
{
EFI_STATUS Status;
EFI_BOOT_MODE BootMode;
EFI_STATUS Status;
EFI_BOOT_MODE BootMode;
DEBUG ((DEBUG_ERROR, "Emu Boot Mode PEIM Loaded\n"));
BootMode = FixedPcdGet32 (PcdEmuBootMode);
BootMode = FixedPcdGet32 (PcdEmuBootMode);
Status = PeiServicesSetBootMode (BootMode);
Status = PeiServicesSetBootMode (BootMode);
ASSERT_EFI_ERROR (Status);
Status = PeiServicesInstallPpi (&mPpiListBootMode);

View File

@ -11,7 +11,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
UINT64 mTimerPeriod;
CPU_ARCH_PROTOCOL_PRIVATE mCpuTemplate = {
CPU_ARCH_PROTOCOL_PRIVATE mCpuTemplate = {
CPU_ARCH_PROT_PRIVATE_SIGNATURE,
NULL,
{
@ -39,16 +39,16 @@ CPU_ARCH_PROTOCOL_PRIVATE mCpuTemplate = {
TRUE
};
#define EFI_CPU_DATA_MAXIMUM_LENGTH 0x100
#define EFI_CPU_DATA_MAXIMUM_LENGTH 0x100
SMBIOS_TABLE_TYPE4 mCpuSmbiosType4 = {
{ EFI_SMBIOS_TYPE_PROCESSOR_INFORMATION, sizeof (SMBIOS_TABLE_TYPE4), 0},
SMBIOS_TABLE_TYPE4 mCpuSmbiosType4 = {
{ EFI_SMBIOS_TYPE_PROCESSOR_INFORMATION, sizeof (SMBIOS_TABLE_TYPE4), 0 },
1, // Socket String
ProcessorOther, // ProcessorType; ///< The enumeration value from PROCESSOR_TYPE_DATA.
ProcessorFamilyOther, // ProcessorFamily; ///< The enumeration value from PROCESSOR_FAMILY_DATA.
2, // ProcessorManufacture String;
{ // ProcessorId;
{ // PROCESSOR_SIGNATURE
{ // PROCESSOR_SIGNATURE
0, // ProcessorSteppingId:4;
0, // ProcessorModel: 4;
0, // ProcessorFamily: 4;
@ -58,7 +58,7 @@ SMBIOS_TABLE_TYPE4 mCpuSmbiosType4 = {
0, // ProcessorXFamily: 8;
0, // ProcessorReserved2: 4;
},
{ // PROCESSOR_FEATURE_FLAGS
{ // PROCESSOR_FEATURE_FLAGS
0, // ProcessorFpu :1;
0, // ProcessorVme :1;
0, // ProcessorDe :1;
@ -93,7 +93,7 @@ SMBIOS_TABLE_TYPE4 mCpuSmbiosType4 = {
}
},
3, // ProcessorVersion String;
{ // Voltage;
{ // Voltage;
1, // ProcessorVoltageCapability5V :1;
1, // ProcessorVoltageCapability3_3V :1;
1, // ProcessorVoltageCapability2_9V :1;
@ -119,7 +119,7 @@ SMBIOS_TABLE_TYPE4 mCpuSmbiosType4 = {
0, // ProcessorFamily2;
};
CHAR8 *mCpuSmbiosType4Strings[] = {
CHAR8 *mCpuSmbiosType4Strings[] = {
"Socket",
"http://www.tianocore.org/edk2/",
"Emulated Processor",
@ -129,7 +129,6 @@ CHAR8 *mCpuSmbiosType4Strings[] = {
NULL
};
/**
Create SMBIOS record.
@ -159,18 +158,18 @@ CHAR8 *mCpuSmbiosType4Strings[] = {
**/
EFI_STATUS
LogSmbiosData (
IN EFI_SMBIOS_TABLE_HEADER *Template,
IN CHAR8 **StringPack
IN EFI_SMBIOS_TABLE_HEADER *Template,
IN CHAR8 **StringPack
)
{
EFI_STATUS Status;
EFI_SMBIOS_PROTOCOL *Smbios;
EFI_SMBIOS_HANDLE SmbiosHandle;
EFI_SMBIOS_TABLE_HEADER *Record;
UINTN Index;
UINTN StringSize;
UINTN Size;
CHAR8 *Str;
EFI_STATUS Status;
EFI_SMBIOS_PROTOCOL *Smbios;
EFI_SMBIOS_HANDLE SmbiosHandle;
EFI_SMBIOS_TABLE_HEADER *Record;
UINTN Index;
UINTN StringSize;
UINTN Size;
CHAR8 *Str;
//
// Locate Smbios protocol.
@ -188,12 +187,14 @@ LogSmbiosData (
} else {
for (Index = 0; StringPack[Index] != NULL; Index++) {
StringSize = AsciiStrSize (StringPack[Index]);
Size += StringSize;
Size += StringSize;
}
if (StringPack[0] == NULL) {
// At least a double null is required
Size += 1;
}
// Don't forget the terminating double null
Size += 1;
}
@ -203,6 +204,7 @@ LogSmbiosData (
if (Record == NULL) {
return EFI_OUT_OF_RESOURCES;
}
CopyMem (Record, Template, Template->Length);
// Append string pack
@ -212,32 +214,30 @@ LogSmbiosData (
CopyMem (Str, StringPack[Index], StringSize);
Str += StringSize;
}
*Str = 0;
SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;
Status = Smbios->Add (
Smbios,
gImageHandle,
&SmbiosHandle,
Record
);
Status = Smbios->Add (
Smbios,
gImageHandle,
&SmbiosHandle,
Record
);
ASSERT_EFI_ERROR (Status);
FreePool (Record);
return Status;
}
VOID
CpuUpdateSmbios (
IN UINTN MaxCpus
)
{
mCpuSmbiosType4.CoreCount = (UINT8) MaxCpus;
mCpuSmbiosType4.EnabledCoreCount = (UINT8) MaxCpus;
mCpuSmbiosType4.ThreadCount = (UINT8) MaxCpus;
mCpuSmbiosType4.CoreCount = (UINT8)MaxCpus;
mCpuSmbiosType4.EnabledCoreCount = (UINT8)MaxCpus;
mCpuSmbiosType4.ThreadCount = (UINT8)MaxCpus;
//
// The value of 1234 is fake value for CPU frequency
//
@ -245,7 +245,6 @@ CpuUpdateSmbios (
LogSmbiosData ((EFI_SMBIOS_TABLE_HEADER *)&mCpuSmbiosType4, mCpuSmbiosType4Strings);
}
//
// Service routines for the driver
//
@ -265,6 +264,7 @@ EmuFlushCpuDataCache (
//
return EFI_SUCCESS;
}
//
// Other flush types are not supported by Emu emulator
//
@ -277,7 +277,7 @@ EmuEnableInterrupt (
IN EFI_CPU_ARCH_PROTOCOL *This
)
{
CPU_ARCH_PROTOCOL_PRIVATE *Private;
CPU_ARCH_PROTOCOL_PRIVATE *Private;
Private = CPU_ARCH_PROTOCOL_PRIVATE_DATA_FROM_THIS (This);
Private->InterruptState = TRUE;
@ -291,7 +291,7 @@ EmuDisableInterrupt (
IN EFI_CPU_ARCH_PROTOCOL *This
)
{
CPU_ARCH_PROTOCOL_PRIVATE *Private;
CPU_ARCH_PROTOCOL_PRIVATE *Private;
Private = CPU_ARCH_PROTOCOL_PRIVATE_DATA_FROM_THIS (This);
Private->InterruptState = FALSE;
@ -306,7 +306,7 @@ EmuGetInterruptState (
OUT BOOLEAN *State
)
{
CPU_ARCH_PROTOCOL_PRIVATE *Private;
CPU_ARCH_PROTOCOL_PRIVATE *Private;
if (State == NULL) {
return EFI_INVALID_PARAMETER;
@ -338,9 +338,10 @@ EmuRegisterInterruptHandler (
//
// Do parameter checking for EFI spec conformance
//
if (InterruptType < 0 || InterruptType > 0xff) {
if ((InterruptType < 0) || (InterruptType > 0xff)) {
return EFI_UNSUPPORTED;
}
//
// Do nothing for Emu emulation
//
@ -350,10 +351,10 @@ EmuRegisterInterruptHandler (
EFI_STATUS
EFIAPI
EmuGetTimerValue (
IN EFI_CPU_ARCH_PROTOCOL *This,
IN UINT32 TimerIndex,
OUT UINT64 *TimerValue,
OUT UINT64 *TimerPeriod OPTIONAL
IN EFI_CPU_ARCH_PROTOCOL *This,
IN UINT32 TimerIndex,
OUT UINT64 *TimerValue,
OUT UINT64 *TimerPeriod OPTIONAL
)
{
if (TimerValue == NULL) {
@ -373,7 +374,6 @@ EmuGetTimerValue (
return EFI_SUCCESS;
}
EFI_STATUS
EFIAPI
EmuSetMemoryAttributes (
@ -396,9 +396,6 @@ EmuSetMemoryAttributes (
return EFI_UNSUPPORTED;
}
/**
Callback function for idle events.
@ -410,14 +407,13 @@ EmuSetMemoryAttributes (
VOID
EFIAPI
IdleLoopEventCallback (
IN EFI_EVENT Event,
IN VOID *Context
IN EFI_EVENT Event,
IN VOID *Context
)
{
gEmuThunk->CpuSleep ();
}
EFI_STATUS
EFIAPI
InitializeCpu (
@ -425,10 +421,10 @@ InitializeCpu (
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;
UINT64 Frequency;
EFI_EVENT IdleLoopEvent;
UINTN MaxCpu;
EFI_STATUS Status;
UINT64 Frequency;
EFI_EVENT IdleLoopEvent;
UINTN MaxCpu;
//
// Retrieve the frequency of the performance counter in Hz.
@ -444,7 +440,6 @@ InitializeCpu (
CpuUpdateSmbios (MaxCpu);
Status = gBS->CreateEventEx (
EVT_NOTIFY_SIGNAL,
TPL_NOTIFY,
@ -455,11 +450,12 @@ InitializeCpu (
);
ASSERT_EFI_ERROR (Status);
Status = gBS->InstallMultipleProtocolInterfaces (
&mCpuTemplate.Handle,
&gEfiCpuArchProtocolGuid, &mCpuTemplate.Cpu,
&gEfiCpuIo2ProtocolGuid, &mCpuTemplate.CpuIo,
&gEfiCpuArchProtocolGuid,
&mCpuTemplate.Cpu,
&gEfiCpuIo2ProtocolGuid,
&mCpuTemplate.CpuIo,
NULL
);
ASSERT_EFI_ERROR (Status);

View File

@ -10,7 +10,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#ifndef _CPU_ARCHITECTURAL_PROTOCOL_DRIVER_H_
#define _CPU_ARCHITECTURAL_PROTOCOL_DRIVER_H_
#include <PiDxe.h>
#include <IndustryStandard/SmBios.h>
@ -32,25 +31,22 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Library/UefiLib.h>
#include <Library/PcdLib.h>
//
// Internal Data Structures
//
#define CPU_ARCH_PROT_PRIVATE_SIGNATURE SIGNATURE_32 ('c', 'a', 'p', 'd')
#define CPU_ARCH_PROT_PRIVATE_SIGNATURE SIGNATURE_32 ('c', 'a', 'p', 'd')
typedef struct {
UINTN Signature;
EFI_HANDLE Handle;
UINTN Signature;
EFI_HANDLE Handle;
EFI_CPU_ARCH_PROTOCOL Cpu;
EFI_CPU_IO2_PROTOCOL CpuIo;
EFI_CPU_ARCH_PROTOCOL Cpu;
EFI_CPU_IO2_PROTOCOL CpuIo;
//
// Local Data for CPU interface goes here
//
BOOLEAN InterruptState;
BOOLEAN InterruptState;
} CPU_ARCH_PROTOCOL_PRIVATE;
#define CPU_ARCH_PROTOCOL_PRIVATE_DATA_FROM_THIS(a) \
@ -60,8 +56,6 @@ typedef struct {
CPU_ARCH_PROT_PRIVATE_SIGNATURE \
)
typedef enum {
CPU_STATE_IDLE,
CPU_STATE_BLOCKED,
@ -70,84 +64,78 @@ typedef enum {
CPU_STATE_FINISHED
} PROCESSOR_STATE;
//
// Define Individual Processor Data block.
//
typedef struct {
EFI_PROCESSOR_INFORMATION Info;
EFI_AP_PROCEDURE Procedure;
VOID *Parameter;
VOID *StateLock;
VOID *ProcedureLock;
PROCESSOR_STATE State;
EFI_EVENT CheckThisAPEvent;
EFI_PROCESSOR_INFORMATION Info;
EFI_AP_PROCEDURE Procedure;
VOID *Parameter;
VOID *StateLock;
VOID *ProcedureLock;
PROCESSOR_STATE State;
EFI_EVENT CheckThisAPEvent;
} PROCESSOR_DATA_BLOCK;
//
// Define MP data block which consumes individual processor block.
//
typedef struct {
UINTN NumberOfProcessors;
UINTN NumberOfEnabledProcessors;
EFI_EVENT CheckAllAPsEvent;
EFI_EVENT WaitEvent;
UINTN FinishCount;
UINTN StartCount;
EFI_AP_PROCEDURE Procedure;
VOID *ProcedureArgument;
BOOLEAN SingleThread;
UINTN StartedNumber;
PROCESSOR_DATA_BLOCK *ProcessorData;
UINTN Timeout;
UINTN *FailedList;
UINTN FailedListIndex;
BOOLEAN TimeoutActive;
UINTN NumberOfProcessors;
UINTN NumberOfEnabledProcessors;
EFI_EVENT CheckAllAPsEvent;
EFI_EVENT WaitEvent;
UINTN FinishCount;
UINTN StartCount;
EFI_AP_PROCEDURE Procedure;
VOID *ProcedureArgument;
BOOLEAN SingleThread;
UINTN StartedNumber;
PROCESSOR_DATA_BLOCK *ProcessorData;
UINTN Timeout;
UINTN *FailedList;
UINTN FailedListIndex;
BOOLEAN TimeoutActive;
} MP_SYSTEM_DATA;
EFI_STATUS
EFIAPI
CpuMemoryServiceRead (
IN EFI_CPU_IO2_PROTOCOL *This,
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
IN UINT64 Address,
IN UINTN Count,
IN OUT VOID *Buffer
IN EFI_CPU_IO2_PROTOCOL *This,
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
IN UINT64 Address,
IN UINTN Count,
IN OUT VOID *Buffer
);
EFI_STATUS
EFIAPI
CpuMemoryServiceWrite (
IN EFI_CPU_IO2_PROTOCOL *This,
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
IN UINT64 Address,
IN UINTN Count,
IN OUT VOID *Buffer
IN EFI_CPU_IO2_PROTOCOL *This,
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
IN UINT64 Address,
IN UINTN Count,
IN OUT VOID *Buffer
);
EFI_STATUS
EFIAPI
CpuIoServiceRead (
IN EFI_CPU_IO2_PROTOCOL *This,
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
IN UINT64 UserAddress,
IN UINTN Count,
IN OUT VOID *UserBuffer
IN EFI_CPU_IO2_PROTOCOL *This,
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
IN UINT64 UserAddress,
IN UINTN Count,
IN OUT VOID *UserBuffer
);
EFI_STATUS
EFIAPI
CpuIoServiceWrite (
IN EFI_CPU_IO2_PROTOCOL *This,
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
IN UINT64 UserAddress,
IN UINTN Count,
IN OUT VOID *UserBuffer
IN EFI_CPU_IO2_PROTOCOL *This,
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
IN UINT64 UserAddress,
IN UINTN Count,
IN OUT VOID *UserBuffer
);
EFI_STATUS
@ -203,10 +191,10 @@ EmuRegisterInterruptHandler (
EFI_STATUS
EFIAPI
EmuGetTimerValue (
IN EFI_CPU_ARCH_PROTOCOL *This,
IN UINT32 TimerIndex,
OUT UINT64 *TimerValue,
OUT UINT64 *TimerPeriod OPTIONAL
IN EFI_CPU_ARCH_PROTOCOL *This,
IN UINT32 TimerIndex,
OUT UINT64 *TimerValue,
OUT UINT64 *TimerPeriod OPTIONAL
);
EFI_STATUS
@ -220,7 +208,7 @@ EmuSetMemoryAttributes (
EFI_STATUS
CpuMpServicesInit (
OUT UINTN *MaxCores
OUT UINTN *MaxCores
);
EFI_STATUS
@ -232,5 +220,4 @@ CpuMpServicesWhoAmI (
extern EFI_MP_SERVICES_PROTOCOL mMpServicesTemplate;
#endif

View File

@ -31,22 +31,23 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
EFI_STATUS
CpuIoCheckAddressRange (
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
IN UINT64 Address,
IN UINTN Count,
IN VOID *Buffer,
IN UINT64 Limit
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
IN UINT64 Address,
IN UINTN Count,
IN VOID *Buffer,
IN UINT64 Limit
);
EFI_STATUS
EFIAPI
CpuMemoryServiceRead (
IN EFI_CPU_IO2_PROTOCOL *This,
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
IN UINT64 Address,
IN UINTN Count,
IN OUT VOID *Buffer
IN EFI_CPU_IO2_PROTOCOL *This,
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
IN UINT64 Address,
IN UINTN Count,
IN OUT VOID *Buffer
)
/*++
Routine Description:
@ -95,12 +96,13 @@ Returns:
EFI_STATUS
EFIAPI
CpuMemoryServiceWrite (
IN EFI_CPU_IO2_PROTOCOL *This,
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
IN UINT64 Address,
IN UINTN Count,
IN OUT VOID *Buffer
IN EFI_CPU_IO2_PROTOCOL *This,
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
IN UINT64 Address,
IN UINTN Count,
IN OUT VOID *Buffer
)
/*++
Routine Description:
@ -148,12 +150,13 @@ Returns:
EFI_STATUS
EFIAPI
CpuIoServiceRead (
IN EFI_CPU_IO2_PROTOCOL *This,
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
IN UINT64 UserAddress,
IN UINTN Count,
IN OUT VOID *UserBuffer
IN EFI_CPU_IO2_PROTOCOL *This,
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
IN UINT64 UserAddress,
IN UINTN Count,
IN OUT VOID *UserBuffer
)
/*++
Routine Description:
@ -186,7 +189,7 @@ Returns:
return EFI_INVALID_PARAMETER;
}
Address = (UINTN) UserAddress;
Address = (UINTN)UserAddress;
if (Width >= EfiCpuIoWidthMaximum) {
return EFI_INVALID_PARAMETER;
@ -206,12 +209,13 @@ Returns:
EFI_STATUS
EFIAPI
CpuIoServiceWrite (
IN EFI_CPU_IO2_PROTOCOL *This,
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
IN UINT64 UserAddress,
IN UINTN Count,
IN OUT VOID *UserBuffer
IN EFI_CPU_IO2_PROTOCOL *This,
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
IN UINT64 UserAddress,
IN UINTN Count,
IN OUT VOID *UserBuffer
)
/*++
Routine Description:
@ -248,7 +252,7 @@ Returns:
return EFI_INVALID_PARAMETER;
}
Address = (UINTN) UserAddress;
Address = (UINTN)UserAddress;
if (Width >= EfiCpuIoWidthMaximum) {
return EFI_INVALID_PARAMETER;
@ -265,7 +269,6 @@ Returns:
return EFI_SUCCESS;
}
/*++
Routine Description:
@ -288,14 +291,14 @@ Returns:
**/
EFI_STATUS
CpuIoCheckAddressRange (
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
IN UINT64 Address,
IN UINTN Count,
IN VOID *Buffer,
IN UINT64 Limit
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
IN UINT64 Address,
IN UINTN Count,
IN VOID *Buffer,
IN UINT64 Limit
)
{
UINTN AlignMask;
UINTN AlignMask;
if (Address > Limit) {
return EFI_UNSUPPORTED;
@ -304,7 +307,7 @@ CpuIoCheckAddressRange (
//
// For FiFo type, the target address won't increase during the access, so treat count as 1
//
if (Width >= EfiCpuIoWidthFifoUint8 && Width <= EfiCpuIoWidthFifoUint64) {
if ((Width >= EfiCpuIoWidthFifoUint8) && (Width <= EfiCpuIoWidthFifoUint64)) {
Count = 1;
}
@ -314,11 +317,9 @@ CpuIoCheckAddressRange (
}
AlignMask = (1 << Width) - 1;
if ((UINTN) Buffer & AlignMask) {
if ((UINTN)Buffer & AlignMask) {
return EFI_UNSUPPORTED;
}
return EFI_SUCCESS;
}

View File

@ -37,13 +37,11 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "CpuDriver.h"
MP_SYSTEM_DATA gMPSystem;
EMU_THREAD_THUNK_PROTOCOL *gThread = NULL;
EFI_EVENT gReadToBootEvent;
BOOLEAN gReadToBoot = FALSE;
UINTN gPollInterval;
MP_SYSTEM_DATA gMPSystem;
EMU_THREAD_THUNK_PROTOCOL *gThread = NULL;
EFI_EVENT gReadToBootEvent;
BOOLEAN gReadToBoot = FALSE;
UINTN gPollInterval;
BOOLEAN
IsBSP (
@ -61,7 +59,6 @@ IsBSP (
return (gMPSystem.ProcessorData[ProcessorNumber].Info.StatusFlag & PROCESSOR_AS_BSP_BIT) != 0;
}
VOID
SetApProcedure (
IN PROCESSOR_DATA_BLOCK *Processor,
@ -70,15 +67,14 @@ SetApProcedure (
)
{
gThread->MutexLock (Processor->ProcedureLock);
Processor->Parameter = ProcedureArgument;
Processor->Procedure = Procedure;
Processor->Parameter = ProcedureArgument;
Processor->Procedure = Procedure;
gThread->MutexUnlock (Processor->ProcedureLock);
}
EFI_STATUS
GetNextBlockedNumber (
OUT UINTN *NextNumber
OUT UINTN *NextNumber
)
{
UINTN Number;
@ -116,16 +112,17 @@ GetNextBlockedNumber (
**/
UINTN
CalculateAndStallInterval (
IN UINTN Timeout
IN UINTN Timeout
)
{
UINTN StallTime;
UINTN StallTime;
if (Timeout < gPollInterval && Timeout != 0) {
if ((Timeout < gPollInterval) && (Timeout != 0)) {
StallTime = Timeout;
} else {
StallTime = gPollInterval;
}
gBS->Stall (StallTime);
return StallTime;
@ -188,8 +185,6 @@ CpuMpServicesGetNumberOfProcessors (
return EFI_SUCCESS;
}
/**
Gets detailed MP-related information on the requested processor at the
instant this call is made. This service may only be called from the BSP.
@ -240,7 +235,6 @@ CpuMpServicesGetProcessorInfo (
return EFI_SUCCESS;
}
/**
This service executes a caller provided function on all enabled APs. APs can
run either simultaneously or one at a time in sequence. This service supports
@ -397,7 +391,6 @@ CpuMpServicesStartupAllAps (
PROCESSOR_STATE ProcessorState;
UINTN Timeout;
if (!IsBSP ()) {
return EFI_DEVICE_ERROR;
}
@ -425,12 +418,14 @@ CpuMpServicesStartupAllAps (
// Skip Disabled processors
continue;
}
gThread->MutexLock(ProcessorData->StateLock);
gThread->MutexLock (ProcessorData->StateLock);
if (ProcessorData->State != CPU_STATE_IDLE) {
gThread->MutexUnlock (ProcessorData->StateLock);
return EFI_NOT_READY;
}
gThread->MutexUnlock(ProcessorData->StateLock);
gThread->MutexUnlock (ProcessorData->StateLock);
}
if (FailedCpuList != NULL) {
@ -438,19 +433,20 @@ CpuMpServicesStartupAllAps (
if (gMPSystem.FailedList == NULL) {
return EFI_OUT_OF_RESOURCES;
}
SetMemN (gMPSystem.FailedList, (gMPSystem.NumberOfProcessors + 1) * sizeof (UINTN), END_OF_CPU_LIST);
gMPSystem.FailedListIndex = 0;
*FailedCpuList = gMPSystem.FailedList;
*FailedCpuList = gMPSystem.FailedList;
}
Timeout = TimeoutInMicroseconds;
ProcessorData = NULL;
ProcessorData = NULL;
gMPSystem.FinishCount = 0;
gMPSystem.StartCount = 0;
gMPSystem.SingleThread = SingleThread;
APInitialState = CPU_STATE_READY;
gMPSystem.FinishCount = 0;
gMPSystem.StartCount = 0;
gMPSystem.SingleThread = SingleThread;
APInitialState = CPU_STATE_READY;
for (Number = 0; Number < gMPSystem.NumberOfProcessors; Number++) {
ProcessorData = &gMPSystem.ProcessorData[Number];
@ -472,7 +468,7 @@ CpuMpServicesStartupAllAps (
// state 1 by 1, until the previous 1 finished its task
// if not "SingleThread", all APs are put to ready state from the beginning
//
gThread->MutexLock(ProcessorData->StateLock);
gThread->MutexLock (ProcessorData->StateLock);
ASSERT (ProcessorData->State == CPU_STATE_IDLE);
ProcessorData->State = APInitialState;
gThread->MutexUnlock (ProcessorData->StateLock);
@ -487,7 +483,7 @@ CpuMpServicesStartupAllAps (
for (Number = 0; Number < gMPSystem.NumberOfProcessors; Number++) {
ProcessorData = &gMPSystem.ProcessorData[Number];
if ((ProcessorData->Info.StatusFlag & PROCESSOR_AS_BSP_BIT) == PROCESSOR_AS_BSP_BIT) {
// Skip BSP
// Skip BSP
continue;
}
@ -513,20 +509,19 @@ CpuMpServicesStartupAllAps (
gMPSystem.WaitEvent = WaitEvent;
gMPSystem.Timeout = TimeoutInMicroseconds;
gMPSystem.TimeoutActive = (BOOLEAN)(TimeoutInMicroseconds != 0);
Status = gBS->SetTimer (
gMPSystem.CheckAllAPsEvent,
TimerPeriodic,
gPollInterval
);
Status = gBS->SetTimer (
gMPSystem.CheckAllAPsEvent,
TimerPeriodic,
gPollInterval
);
return Status;
}
while (TRUE) {
for (Number = 0; Number < gMPSystem.NumberOfProcessors; Number++) {
ProcessorData = &gMPSystem.ProcessorData[Number];
if ((ProcessorData->Info.StatusFlag & PROCESSOR_AS_BSP_BIT) == PROCESSOR_AS_BSP_BIT) {
// Skip BSP
// Skip BSP
continue;
}
@ -540,29 +535,29 @@ CpuMpServicesStartupAllAps (
gThread->MutexUnlock (ProcessorData->StateLock);
switch (ProcessorState) {
case CPU_STATE_READY:
SetApProcedure (ProcessorData, Procedure, ProcedureArgument);
break;
case CPU_STATE_READY:
SetApProcedure (ProcessorData, Procedure, ProcedureArgument);
break;
case CPU_STATE_FINISHED:
gMPSystem.FinishCount++;
if (SingleThread) {
Status = GetNextBlockedNumber (&NextNumber);
if (!EFI_ERROR (Status)) {
gThread->MutexLock (gMPSystem.ProcessorData[NextNumber].StateLock);
gMPSystem.ProcessorData[NextNumber].State = CPU_STATE_READY;
gThread->MutexUnlock (gMPSystem.ProcessorData[NextNumber].StateLock);
case CPU_STATE_FINISHED:
gMPSystem.FinishCount++;
if (SingleThread) {
Status = GetNextBlockedNumber (&NextNumber);
if (!EFI_ERROR (Status)) {
gThread->MutexLock (gMPSystem.ProcessorData[NextNumber].StateLock);
gMPSystem.ProcessorData[NextNumber].State = CPU_STATE_READY;
gThread->MutexUnlock (gMPSystem.ProcessorData[NextNumber].StateLock);
}
}
}
gThread->MutexLock (ProcessorData->StateLock);
ProcessorData->State = CPU_STATE_IDLE;
gThread->MutexUnlock (ProcessorData->StateLock);
gThread->MutexLock (ProcessorData->StateLock);
ProcessorData->State = CPU_STATE_IDLE;
gThread->MutexUnlock (ProcessorData->StateLock);
break;
break;
default:
break;
default:
break;
}
}
@ -590,7 +585,6 @@ Done:
return EFI_SUCCESS;
}
/**
This service lets the caller get one enabled AP to execute a caller-provided
function. The caller can request the BSP to either wait for the completion
@ -689,7 +683,7 @@ CpuMpServicesStartupThisAP (
OUT BOOLEAN *Finished OPTIONAL
)
{
UINTN Timeout;
UINTN Timeout;
if (!IsBSP ()) {
return EFI_DEVICE_ERROR;
@ -711,12 +705,13 @@ CpuMpServicesStartupThisAP (
return EFI_INVALID_PARAMETER;
}
gThread->MutexLock(gMPSystem.ProcessorData[ProcessorNumber].StateLock);
gThread->MutexLock (gMPSystem.ProcessorData[ProcessorNumber].StateLock);
if (gMPSystem.ProcessorData[ProcessorNumber].State != CPU_STATE_IDLE) {
gThread->MutexUnlock(gMPSystem.ProcessorData[ProcessorNumber].StateLock);
gThread->MutexUnlock (gMPSystem.ProcessorData[ProcessorNumber].StateLock);
return EFI_NOT_READY;
}
gThread->MutexUnlock(gMPSystem.ProcessorData[ProcessorNumber].StateLock);
gThread->MutexUnlock (gMPSystem.ProcessorData[ProcessorNumber].StateLock);
if ((WaitEvent != NULL) && gReadToBoot) {
return EFI_UNSUPPORTED;
@ -724,8 +719,8 @@ CpuMpServicesStartupThisAP (
Timeout = TimeoutInMicroseconds;
gMPSystem.StartCount = 1;
gMPSystem.FinishCount = 0;
gMPSystem.StartCount = 1;
gMPSystem.FinishCount = 0;
SetApProcedure (&gMPSystem.ProcessorData[ProcessorNumber], Procedure, ProcedureArgument);
@ -759,10 +754,8 @@ CpuMpServicesStartupThisAP (
}
return EFI_SUCCESS;
}
/**
This service switches the requested AP to be the BSP from that point onward.
This service changes the BSP for all purposes. This call can only be performed
@ -806,7 +799,7 @@ CpuMpServicesSwitchBSP (
IN BOOLEAN EnableOldBSP
)
{
UINTN Index;
UINTN Index;
if (!IsBSP ()) {
return EFI_DEVICE_ERROR;
@ -829,6 +822,7 @@ CpuMpServicesSwitchBSP (
break;
}
}
ASSERT (Index != gMPSystem.NumberOfProcessors);
gThread->MutexLock (gMPSystem.ProcessorData[ProcessorNumber].StateLock);
@ -836,6 +830,7 @@ CpuMpServicesSwitchBSP (
gThread->MutexUnlock (gMPSystem.ProcessorData[ProcessorNumber].StateLock);
return EFI_NOT_READY;
}
gThread->MutexUnlock (gMPSystem.ProcessorData[ProcessorNumber].StateLock);
// Skip for now as we need switch a bunch of stack stuff around and it's complex
@ -843,7 +838,6 @@ CpuMpServicesSwitchBSP (
return EFI_NOT_READY;
}
/**
This service lets the caller enable or disable an AP from this point onward.
This service may only be called from the BSP.
@ -911,17 +905,20 @@ CpuMpServicesEnableDisableAP (
gThread->MutexUnlock (gMPSystem.ProcessorData[ProcessorNumber].StateLock);
return EFI_UNSUPPORTED;
}
gThread->MutexUnlock (gMPSystem.ProcessorData[ProcessorNumber].StateLock);
if (EnableAP) {
if ((gMPSystem.ProcessorData[ProcessorNumber].Info.StatusFlag & PROCESSOR_ENABLED_BIT) == 0 ) {
gMPSystem.NumberOfEnabledProcessors++;
}
gMPSystem.ProcessorData[ProcessorNumber].Info.StatusFlag |= PROCESSOR_ENABLED_BIT;
} else {
if ((gMPSystem.ProcessorData[ProcessorNumber].Info.StatusFlag & PROCESSOR_ENABLED_BIT) == PROCESSOR_ENABLED_BIT ) {
gMPSystem.NumberOfEnabledProcessors--;
}
gMPSystem.ProcessorData[ProcessorNumber].Info.StatusFlag &= ~PROCESSOR_ENABLED_BIT;
}
@ -933,7 +930,6 @@ CpuMpServicesEnableDisableAP (
return EFI_SUCCESS;
}
/**
This return the handle number for the calling processor. This service may be
called from the BSP and APs.
@ -983,8 +979,6 @@ CpuMpServicesWhoAmI (
return EFI_SUCCESS;
}
EFI_MP_SERVICES_PROTOCOL mMpServicesTemplate = {
CpuMpServicesGetNumberOfProcessors,
CpuMpServicesGetProcessorInfo,
@ -995,8 +989,6 @@ EFI_MP_SERVICES_PROTOCOL mMpServicesTemplate = {
CpuMpServicesWhoAmI
};
/*++
If timeout occurs in StartupAllAps(), a timer is set, which invokes this
procedure periodically to check whether all APs have finished.
@ -1006,8 +998,8 @@ EFI_MP_SERVICES_PROTOCOL mMpServicesTemplate = {
VOID
EFIAPI
CpuCheckAllAPsStatus (
IN EFI_EVENT Event,
IN VOID *Context
IN EFI_EVENT Event,
IN VOID *Context
)
{
UINTN ProcessorNumber;
@ -1026,7 +1018,7 @@ CpuCheckAllAPsStatus (
for (ProcessorNumber = 0; ProcessorNumber < gMPSystem.NumberOfProcessors; ProcessorNumber++) {
ProcessorData = &gMPSystem.ProcessorData[ProcessorNumber];
if ((ProcessorData->Info.StatusFlag & PROCESSOR_AS_BSP_BIT) == PROCESSOR_AS_BSP_BIT) {
// Skip BSP
// Skip BSP
continue;
}
@ -1041,39 +1033,40 @@ CpuCheckAllAPsStatus (
// So, try lock it. If we can get it, cool, do our thing.
// otherwise, just dump out & try again on the next iteration.
Status = gThread->MutexTryLock (ProcessorData->StateLock);
if (EFI_ERROR(Status)) {
if (EFI_ERROR (Status)) {
return;
}
ProcessorState = ProcessorData->State;
gThread->MutexUnlock (ProcessorData->StateLock);
switch (ProcessorState) {
case CPU_STATE_FINISHED:
if (gMPSystem.SingleThread) {
Status = GetNextBlockedNumber (&NextNumber);
if (!EFI_ERROR (Status)) {
NextData = &gMPSystem.ProcessorData[NextNumber];
case CPU_STATE_FINISHED:
if (gMPSystem.SingleThread) {
Status = GetNextBlockedNumber (&NextNumber);
if (!EFI_ERROR (Status)) {
NextData = &gMPSystem.ProcessorData[NextNumber];
gThread->MutexLock (NextData->StateLock);
NextData->State = CPU_STATE_READY;
gThread->MutexUnlock (NextData->StateLock);
gThread->MutexLock (NextData->StateLock);
NextData->State = CPU_STATE_READY;
gThread->MutexUnlock (NextData->StateLock);
SetApProcedure (NextData, gMPSystem.Procedure, gMPSystem.ProcedureArgument);
SetApProcedure (NextData, gMPSystem.Procedure, gMPSystem.ProcedureArgument);
}
}
}
gThread->MutexLock (ProcessorData->StateLock);
ProcessorData->State = CPU_STATE_IDLE;
gThread->MutexUnlock (ProcessorData->StateLock);
gMPSystem.FinishCount++;
break;
gThread->MutexLock (ProcessorData->StateLock);
ProcessorData->State = CPU_STATE_IDLE;
gThread->MutexUnlock (ProcessorData->StateLock);
gMPSystem.FinishCount++;
break;
default:
break;
default:
break;
}
}
if (gMPSystem.TimeoutActive && gMPSystem.Timeout == 0) {
if (gMPSystem.TimeoutActive && (gMPSystem.Timeout == 0)) {
//
// Timeout
//
@ -1081,7 +1074,7 @@ CpuCheckAllAPsStatus (
for (ProcessorNumber = 0; ProcessorNumber < gMPSystem.NumberOfProcessors; ProcessorNumber++) {
ProcessorData = &gMPSystem.ProcessorData[ProcessorNumber];
if ((ProcessorData->Info.StatusFlag & PROCESSOR_AS_BSP_BIT) == PROCESSOR_AS_BSP_BIT) {
// Skip BSP
// Skip BSP
continue;
}
@ -1092,9 +1085,10 @@ CpuCheckAllAPsStatus (
// Mark the
Status = gThread->MutexTryLock (ProcessorData->StateLock);
if (EFI_ERROR(Status)) {
if (EFI_ERROR (Status)) {
return;
}
ProcessorState = ProcessorData->State;
gThread->MutexUnlock (ProcessorData->StateLock);
@ -1104,17 +1098,20 @@ CpuCheckAllAPsStatus (
if (gMPSystem.FailedList[Cpu] == END_OF_CPU_LIST) {
break;
}
if (gMPSystem.FailedList[ProcessorNumber] == Cpu) {
Found = TRUE;
break;
}
}
if (!Found) {
gMPSystem.FailedList[gMPSystem.FailedListIndex++] = Cpu;
}
}
}
}
// Force terminal exit
gMPSystem.FinishCount = gMPSystem.StartCount;
}
@ -1138,21 +1135,21 @@ CpuCheckAllAPsStatus (
Status = gBS->SignalEvent (gMPSystem.WaitEvent);
return ;
return;
}
VOID
EFIAPI
CpuCheckThisAPStatus (
IN EFI_EVENT Event,
IN VOID *Context
IN EFI_EVENT Event,
IN VOID *Context
)
{
EFI_STATUS Status;
PROCESSOR_DATA_BLOCK *ProcessorData;
PROCESSOR_STATE ProcessorState;
ProcessorData = (PROCESSOR_DATA_BLOCK *) Context;
ProcessorData = (PROCESSOR_DATA_BLOCK *)Context;
//
// This is an Interrupt Service routine.
@ -1162,9 +1159,10 @@ CpuCheckThisAPStatus (
// otherwise, just dump out & try again on the next iteration.
//
Status = gThread->MutexTryLock (ProcessorData->StateLock);
if (EFI_ERROR(Status)) {
if (EFI_ERROR (Status)) {
return;
}
ProcessorState = ProcessorData->State;
gThread->MutexUnlock (ProcessorData->StateLock);
@ -1180,10 +1178,9 @@ CpuCheckThisAPStatus (
gThread->MutexUnlock (ProcessorData->StateLock);
}
return ;
return;
}
/*++
This function is called by all processors (both BSP and AP) once and collects MP related data
@ -1195,25 +1192,25 @@ CpuCheckThisAPStatus (
--*/
EFI_STATUS
FillInProcessorInformation (
IN BOOLEAN BSP,
IN UINTN ProcessorNumber
IN BOOLEAN BSP,
IN UINTN ProcessorNumber
)
{
gMPSystem.ProcessorData[ProcessorNumber].Info.ProcessorId = gThread->Self ();
gMPSystem.ProcessorData[ProcessorNumber].Info.StatusFlag = PROCESSOR_ENABLED_BIT | PROCESSOR_HEALTH_STATUS_BIT;
gMPSystem.ProcessorData[ProcessorNumber].Info.ProcessorId = gThread->Self ();
gMPSystem.ProcessorData[ProcessorNumber].Info.StatusFlag = PROCESSOR_ENABLED_BIT | PROCESSOR_HEALTH_STATUS_BIT;
if (BSP) {
gMPSystem.ProcessorData[ProcessorNumber].Info.StatusFlag |= PROCESSOR_AS_BSP_BIT;
}
gMPSystem.ProcessorData[ProcessorNumber].Info.Location.Package = (UINT32) ProcessorNumber;
gMPSystem.ProcessorData[ProcessorNumber].Info.Location.Package = (UINT32)ProcessorNumber;
gMPSystem.ProcessorData[ProcessorNumber].Info.Location.Core = 0;
gMPSystem.ProcessorData[ProcessorNumber].Info.Location.Thread = 0;
gMPSystem.ProcessorData[ProcessorNumber].State = BSP ? CPU_STATE_BUSY : CPU_STATE_IDLE;
gMPSystem.ProcessorData[ProcessorNumber].State = BSP ? CPU_STATE_BUSY : CPU_STATE_IDLE;
gMPSystem.ProcessorData[ProcessorNumber].Procedure = NULL;
gMPSystem.ProcessorData[ProcessorNumber].Parameter = NULL;
gMPSystem.ProcessorData[ProcessorNumber].StateLock = gThread->MutexInit ();
gMPSystem.ProcessorData[ProcessorNumber].ProcedureLock = gThread->MutexInit ();
gMPSystem.ProcessorData[ProcessorNumber].Procedure = NULL;
gMPSystem.ProcessorData[ProcessorNumber].Parameter = NULL;
gMPSystem.ProcessorData[ProcessorNumber].StateLock = gThread->MutexInit ();
gMPSystem.ProcessorData[ProcessorNumber].ProcedureLock = gThread->MutexInit ();
return EFI_SUCCESS;
}
@ -1230,7 +1227,7 @@ CpuDriverApIdolLoop (
PROCESSOR_DATA_BLOCK *ProcessorData;
ProcessorNumber = (UINTN)Context;
ProcessorData = &gMPSystem.ProcessorData[ProcessorNumber];
ProcessorData = &gMPSystem.ProcessorData[ProcessorNumber];
ProcessorData->Info.ProcessorId = gThread->Self ();
@ -1267,15 +1264,13 @@ CpuDriverApIdolLoop (
return 0;
}
EFI_STATUS
InitializeMpSystemData (
IN UINTN NumberOfProcessors
IN UINTN NumberOfProcessors
)
{
EFI_STATUS Status;
UINTN Index;
EFI_STATUS Status;
UINTN Index;
//
// Clear the data structure area first.
@ -1285,8 +1280,8 @@ InitializeMpSystemData (
//
// First BSP fills and inits all known values, including it's own records.
//
gMPSystem.NumberOfProcessors = NumberOfProcessors;
gMPSystem.NumberOfEnabledProcessors = NumberOfProcessors;
gMPSystem.NumberOfProcessors = NumberOfProcessors;
gMPSystem.NumberOfEnabledProcessors = NumberOfProcessors;
gMPSystem.ProcessorData = AllocateZeroPool (gMPSystem.NumberOfProcessors * sizeof (PROCESSOR_DATA_BLOCK));
ASSERT (gMPSystem.ProcessorData != NULL);
@ -1302,10 +1297,9 @@ InitializeMpSystemData (
);
ASSERT_EFI_ERROR (Status);
for (Index = 0; Index < gMPSystem.NumberOfProcessors; Index++) {
if ((gMPSystem.ProcessorData[Index].Info.StatusFlag & PROCESSOR_AS_BSP_BIT) == PROCESSOR_AS_BSP_BIT) {
// Skip BSP
// Skip BSP
continue;
}
@ -1318,21 +1312,18 @@ InitializeMpSystemData (
(VOID *)Index
);
Status = gBS->CreateEvent (
EVT_TIMER | EVT_NOTIFY_SIGNAL,
TPL_CALLBACK,
CpuCheckThisAPStatus,
(VOID *) &gMPSystem.ProcessorData[Index],
&gMPSystem.ProcessorData[Index].CheckThisAPEvent
);
EVT_TIMER | EVT_NOTIFY_SIGNAL,
TPL_CALLBACK,
CpuCheckThisAPStatus,
(VOID *)&gMPSystem.ProcessorData[Index],
&gMPSystem.ProcessorData[Index].CheckThisAPEvent
);
}
return EFI_SUCCESS;
}
/**
Invoke a notification event
@ -1344,32 +1335,30 @@ InitializeMpSystemData (
VOID
EFIAPI
CpuReadToBootFunction (
IN EFI_EVENT Event,
IN VOID *Context
IN EFI_EVENT Event,
IN VOID *Context
)
{
gReadToBoot = TRUE;
}
EFI_STATUS
CpuMpServicesInit (
OUT UINTN *MaxCpus
OUT UINTN *MaxCpus
)
{
EFI_STATUS Status;
EFI_HANDLE Handle;
EMU_IO_THUNK_PROTOCOL *IoThunk;
EFI_STATUS Status;
EFI_HANDLE Handle;
EMU_IO_THUNK_PROTOCOL *IoThunk;
*MaxCpus = 1; // BSP
IoThunk = GetIoThunkInstance (&gEmuThreadThunkProtocolGuid, 0);
IoThunk = GetIoThunkInstance (&gEmuThreadThunkProtocolGuid, 0);
if (IoThunk != NULL) {
Status = IoThunk->Open (IoThunk);
if (!EFI_ERROR (Status)) {
if (IoThunk->ConfigString != NULL) {
*MaxCpus += StrDecimalToUintn (IoThunk->ConfigString);
gThread = IoThunk->Interface;
gThread = IoThunk->Interface;
}
}
}
@ -1379,9 +1368,9 @@ CpuMpServicesInit (
return EFI_SUCCESS;
}
gPollInterval = (UINTN) PcdGet64 (PcdEmuMpServicesPollingInterval);
gPollInterval = (UINTN)PcdGet64 (PcdEmuMpServicesPollingInterval);
Status = InitializeMpSystemData (*MaxCpus);
Status = InitializeMpSystemData (*MaxCpus);
if (EFI_ERROR (Status)) {
return Status;
}
@ -1395,10 +1384,9 @@ CpuMpServicesInit (
Handle = NULL;
Status = gBS->InstallMultipleProtocolInterfaces (
&Handle,
&gEfiMpServiceProtocolGuid, &mMpServicesTemplate,
&gEfiMpServiceProtocolGuid,
&mMpServicesTemplate,
NULL
);
return Status;
}

View File

@ -16,6 +16,7 @@ Abstract:
//
// EFI Component Name Functions
//
/**
Retrieves a Unicode string that is the user readable name of the driver.
@ -63,7 +64,6 @@ EmuBlockIoComponentNameGetDriverName (
OUT CHAR16 **DriverName
);
/**
Retrieves a Unicode string that is the user readable name of the controller
that is being managed by a driver.
@ -135,17 +135,17 @@ EmuBlockIoComponentNameGetDriverName (
EFI_STATUS
EFIAPI
EmuBlockIoComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
);
//
// EFI Component Name Protocol
//
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gEmuBlockIoComponentName = {
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gEmuBlockIoComponentName = {
EmuBlockIoComponentNameGetDriverName,
EmuBlockIoComponentNameGetControllerName,
"eng"
@ -154,16 +154,15 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gEmuBlockIoCompon
//
// EFI Component Name 2 Protocol
//
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gEmuBlockIoComponentName2 = {
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME) EmuBlockIoComponentNameGetDriverName,
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) EmuBlockIoComponentNameGetControllerName,
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gEmuBlockIoComponentName2 = {
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME)EmuBlockIoComponentNameGetDriverName,
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)EmuBlockIoComponentNameGetControllerName,
"en"
};
EFI_UNICODE_STRING_TABLE mEmuBlockIoDriverNameTable[] = {
EFI_UNICODE_STRING_TABLE mEmuBlockIoDriverNameTable[] = {
{ "eng;en", L"Emu Block I/O Driver" },
{ NULL , NULL }
{ NULL, NULL }
};
/**
@ -214,12 +213,12 @@ EmuBlockIoComponentNameGetDriverName (
)
{
return LookupUnicodeString2 (
Language,
This->SupportedLanguages,
mEmuBlockIoDriverNameTable,
DriverName,
Language,
This->SupportedLanguages,
mEmuBlockIoDriverNameTable,
DriverName,
(BOOLEAN)(This == &gEmuBlockIoComponentName)
);
);
}
/**
@ -293,16 +292,16 @@ EmuBlockIoComponentNameGetDriverName (
EFI_STATUS
EFIAPI
EmuBlockIoComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
)
{
EFI_STATUS Status;
EFI_BLOCK_IO_PROTOCOL *BlockIo;
EMU_BLOCK_IO_PRIVATE *Private;
EFI_STATUS Status;
EFI_BLOCK_IO_PROTOCOL *BlockIo;
EMU_BLOCK_IO_PRIVATE *Private;
//
// This is a device driver, so ChildHandle must be NULL.
@ -310,6 +309,7 @@ EmuBlockIoComponentNameGetControllerName (
if (ChildHandle != NULL) {
return EFI_UNSUPPORTED;
}
//
// Make sure this driver is currently managing ControllerHandle
//
@ -321,6 +321,7 @@ EmuBlockIoComponentNameGetControllerName (
if (EFI_ERROR (Status)) {
return EFI_UNSUPPORTED;
}
//
// Get our context back
//
@ -339,10 +340,10 @@ EmuBlockIoComponentNameGetControllerName (
Private = EMU_BLOCK_IO_PRIVATE_DATA_FROM_THIS (BlockIo);
return LookupUnicodeString2 (
Language,
Language,
This->SupportedLanguages,
Private->ControllerNameTable,
ControllerName,
(BOOLEAN)(This == &gEmuBlockIoComponentName)
);
);
}

View File

@ -19,35 +19,35 @@ Abstract:
EFI_STATUS
EFIAPI
EmuBlockIoDriverConfigurationSetOptions (
IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED *ActionRequired
IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED *ActionRequired
);
EFI_STATUS
EFIAPI
EmuBlockIoDriverConfigurationOptionsValid (
IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL
IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL
);
EFI_STATUS
EFIAPI
EmuBlockIoDriverConfigurationForceDefaults (
IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN UINT32 DefaultType,
OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED *ActionRequired
IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN UINT32 DefaultType,
OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED *ActionRequired
);
//
// EFI Driver Configuration Protocol
//
EFI_DRIVER_CONFIGURATION_PROTOCOL gEmuBlockIoDriverConfiguration = {
EFI_DRIVER_CONFIGURATION_PROTOCOL gEmuBlockIoDriverConfiguration = {
EmuBlockIoDriverConfigurationSetOptions,
EmuBlockIoDriverConfigurationOptionsValid,
EmuBlockIoDriverConfigurationForceDefaults,
@ -103,20 +103,20 @@ EFI_DRIVER_CONFIGURATION_PROTOCOL gEmuBlockIoDriverConfiguration = {
EFI_STATUS
EFIAPI
EmuBlockIoDriverConfigurationSetOptions (
IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED *ActionRequired
IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED *ActionRequired
)
{
EFI_STATUS Status;
EFI_BLOCK_IO_PROTOCOL *BlockIo;
CHAR8 *SupportedLanguage;
EFI_STATUS Status;
EFI_BLOCK_IO_PROTOCOL *BlockIo;
CHAR8 *SupportedLanguage;
SupportedLanguage = This->SupportedLanguages;
Status = EFI_UNSUPPORTED;
Status = EFI_UNSUPPORTED;
while (*SupportedLanguage != 0) {
if (AsciiStrnCmp (Language, SupportedLanguage, 3) == 0) {
Status = EFI_SUCCESS;
@ -129,7 +129,7 @@ EmuBlockIoDriverConfigurationSetOptions (
return Status;
}
if (ActionRequired == NULL || ControllerHandle == NULL) {
if ((ActionRequired == NULL) || (ControllerHandle == NULL)) {
return EFI_INVALID_PARAMETER;
}
@ -151,11 +151,11 @@ EmuBlockIoDriverConfigurationSetOptions (
if (!EFI_ERROR (Status)) {
gBS->CloseProtocol (
ControllerHandle,
&gEmuIoThunkProtocolGuid,
gEmuBlockIoDriverBinding.DriverBindingHandle,
ControllerHandle
);
ControllerHandle,
&gEmuIoThunkProtocolGuid,
gEmuBlockIoDriverBinding.DriverBindingHandle,
ControllerHandle
);
return EFI_UNSUPPORTED;
}
@ -206,13 +206,13 @@ EmuBlockIoDriverConfigurationSetOptions (
EFI_STATUS
EFIAPI
EmuBlockIoDriverConfigurationOptionsValid (
IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL
IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL
)
{
EFI_STATUS Status;
EFI_BLOCK_IO_PROTOCOL *BlockIo;
EFI_STATUS Status;
EFI_BLOCK_IO_PROTOCOL *BlockIo;
if (ChildHandle != NULL) {
return EFI_UNSUPPORTED;
@ -236,11 +236,11 @@ EmuBlockIoDriverConfigurationOptionsValid (
if (!EFI_ERROR (Status)) {
gBS->CloseProtocol (
ControllerHandle,
&gEmuIoThunkProtocolGuid,
gEmuBlockIoDriverBinding.DriverBindingHandle,
ControllerHandle
);
ControllerHandle,
&gEmuIoThunkProtocolGuid,
gEmuBlockIoDriverBinding.DriverBindingHandle,
ControllerHandle
);
return EFI_UNSUPPORTED;
}
@ -280,21 +280,21 @@ EmuBlockIoDriverConfigurationOptionsValid (
EFI_STATUS
EFIAPI
EmuBlockIoDriverConfigurationForceDefaults (
IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN UINT32 DefaultType,
OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED *ActionRequired
IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN UINT32 DefaultType,
OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED *ActionRequired
)
{
EFI_STATUS Status;
EFI_BLOCK_IO_PROTOCOL *BlockIo;
EFI_STATUS Status;
EFI_BLOCK_IO_PROTOCOL *BlockIo;
if (ChildHandle != NULL) {
return EFI_UNSUPPORTED;
}
if (ActionRequired == NULL || ControllerHandle == NULL) {
if ((ActionRequired == NULL) || (ControllerHandle == NULL)) {
return EFI_INVALID_PARAMETER;
}
@ -312,11 +312,11 @@ EmuBlockIoDriverConfigurationForceDefaults (
if (!EFI_ERROR (Status)) {
gBS->CloseProtocol (
ControllerHandle,
&gEmuIoThunkProtocolGuid,
gEmuBlockIoDriverBinding.DriverBindingHandle,
ControllerHandle
);
ControllerHandle,
&gEmuIoThunkProtocolGuid,
gEmuBlockIoDriverBinding.DriverBindingHandle,
ControllerHandle
);
return EFI_UNSUPPORTED;
}

View File

@ -19,20 +19,20 @@ Abstract:
EFI_STATUS
EFIAPI
EmuBlockIoDriverDiagnosticsRunDiagnostics (
IN EFI_DRIVER_DIAGNOSTICS_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN EFI_DRIVER_DIAGNOSTIC_TYPE DiagnosticType,
IN CHAR8 *Language,
OUT EFI_GUID **ErrorType,
OUT UINTN *BufferSize,
OUT CHAR16 **Buffer
IN EFI_DRIVER_DIAGNOSTICS_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN EFI_DRIVER_DIAGNOSTIC_TYPE DiagnosticType,
IN CHAR8 *Language,
OUT EFI_GUID **ErrorType,
OUT UINTN *BufferSize,
OUT CHAR16 **Buffer
);
//
// EFI Driver Diagnostics Protocol
//
EFI_DRIVER_DIAGNOSTICS_PROTOCOL gEmuBlockIoDriverDiagnostics = {
EFI_DRIVER_DIAGNOSTICS_PROTOCOL gEmuBlockIoDriverDiagnostics = {
EmuBlockIoDriverDiagnosticsRunDiagnostics,
"eng"
};
@ -40,23 +40,24 @@ EFI_DRIVER_DIAGNOSTICS_PROTOCOL gEmuBlockIoDriverDiagnostics = {
//
// EFI Driver Diagnostics 2 Protocol
//
GLOBAL_REMOVE_IF_UNREFERENCED EFI_DRIVER_DIAGNOSTICS2_PROTOCOL gEmuBlockIoDriverDiagnostics2 = {
(EFI_DRIVER_DIAGNOSTICS2_RUN_DIAGNOSTICS) EmuBlockIoDriverDiagnosticsRunDiagnostics,
GLOBAL_REMOVE_IF_UNREFERENCED EFI_DRIVER_DIAGNOSTICS2_PROTOCOL gEmuBlockIoDriverDiagnostics2 = {
(EFI_DRIVER_DIAGNOSTICS2_RUN_DIAGNOSTICS)EmuBlockIoDriverDiagnosticsRunDiagnostics,
"en"
};
EFI_STATUS
EFIAPI
EmuBlockIoDriverDiagnosticsRunDiagnostics (
IN EFI_DRIVER_DIAGNOSTICS_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN EFI_DRIVER_DIAGNOSTIC_TYPE DiagnosticType,
IN CHAR8 *Language,
OUT EFI_GUID **ErrorType,
OUT UINTN *BufferSize,
OUT CHAR16 **Buffer
IN EFI_DRIVER_DIAGNOSTICS_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN EFI_DRIVER_DIAGNOSTIC_TYPE DiagnosticType,
IN CHAR8 *Language,
OUT EFI_GUID **ErrorType,
OUT UINTN *BufferSize,
OUT CHAR16 **Buffer
)
/*++
Routine Description:
@ -117,24 +118,24 @@ EmuBlockIoDriverDiagnosticsRunDiagnostics (
--*/
{
EFI_STATUS Status;
EFI_BLOCK_IO_PROTOCOL *BlockIo;
CHAR8 *SupportedLanguages;
BOOLEAN Iso639Language;
BOOLEAN Found;
UINTN Index;
if (Language == NULL ||
ErrorType == NULL ||
Buffer == NULL ||
ControllerHandle == NULL ||
BufferSize == NULL) {
EFI_STATUS Status;
EFI_BLOCK_IO_PROTOCOL *BlockIo;
CHAR8 *SupportedLanguages;
BOOLEAN Iso639Language;
BOOLEAN Found;
UINTN Index;
if ((Language == NULL) ||
(ErrorType == NULL) ||
(Buffer == NULL) ||
(ControllerHandle == NULL) ||
(BufferSize == NULL))
{
return EFI_INVALID_PARAMETER;
}
SupportedLanguages = This->SupportedLanguages;
Iso639Language = (BOOLEAN)(This == &gEmuBlockIoDriverDiagnostics);
Iso639Language = (BOOLEAN)(This == &gEmuBlockIoDriverDiagnostics);
//
// Make sure Language is in the set of Supported Languages
//
@ -143,19 +144,25 @@ EmuBlockIoDriverDiagnosticsRunDiagnostics (
if (Iso639Language) {
if (CompareMem (Language, SupportedLanguages, 3) == 0) {
Found = TRUE;
break;
}
break;
}
SupportedLanguages += 3;
} else {
for (Index = 0; SupportedLanguages[Index] != 0 && SupportedLanguages[Index] != ';'; Index++);
if ((AsciiStrnCmp(SupportedLanguages, Language, Index) == 0) && (Language[Index] == 0)) {
for (Index = 0; SupportedLanguages[Index] != 0 && SupportedLanguages[Index] != ';'; Index++) {
}
if ((AsciiStrnCmp (SupportedLanguages, Language, Index) == 0) && (Language[Index] == 0)) {
Found = TRUE;
break;
}
}
SupportedLanguages += Index;
for (; *SupportedLanguages != 0 && *SupportedLanguages == ';'; SupportedLanguages++);
for ( ; *SupportedLanguages != 0 && *SupportedLanguages == ';'; SupportedLanguages++) {
}
}
}
//
// If Language is not a member of SupportedLanguages, then return EFI_UNSUPPORTED
//
@ -168,7 +175,7 @@ EmuBlockIoDriverDiagnosticsRunDiagnostics (
if (DiagnosticType != EfiDriverDiagnosticTypeStandard) {
*ErrorType = &gEfiBlockIoProtocolGuid;
*BufferSize = 0x60;
Buffer = AllocatePool ((UINTN) (*BufferSize));
Buffer = AllocatePool ((UINTN)(*BufferSize));
CopyMem (*Buffer, L"Windows Block I/O Driver Diagnostics Failed\n", *BufferSize);
return EFI_DEVICE_ERROR;
}
@ -194,11 +201,11 @@ EmuBlockIoDriverDiagnosticsRunDiagnostics (
if (!EFI_ERROR (Status)) {
gBS->CloseProtocol (
ControllerHandle,
&gEmuIoThunkProtocolGuid,
gEmuBlockIoDriverBinding.DriverBindingHandle,
ControllerHandle
);
ControllerHandle,
&gEmuIoThunkProtocolGuid,
gEmuBlockIoDriverBinding.DriverBindingHandle,
ControllerHandle
);
return EFI_UNSUPPORTED;
}

View File

@ -7,7 +7,6 @@ bbe
#include "EmuBlockIo.h"
/**
Reset the block device hardware.
@ -28,9 +27,9 @@ EmuBlockIo2Reset (
IN BOOLEAN ExtendedVerification
)
{
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
EFI_TPL OldTpl;
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
EFI_TPL OldTpl;
Private = EMU_BLOCK_IO2_PRIVATE_DATA_FROM_THIS (This);
@ -78,17 +77,17 @@ EmuBlockIo2Reset (
EFI_STATUS
EFIAPI
EmuBlockIo2ReadBlocksEx (
IN EFI_BLOCK_IO2_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA LBA,
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
IN UINTN BufferSize,
OUT VOID *Buffer
IN EFI_BLOCK_IO2_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA LBA,
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
IN UINTN BufferSize,
OUT VOID *Buffer
)
{
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
EFI_TPL OldTpl;
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
EFI_TPL OldTpl;
Private = EMU_BLOCK_IO2_PRIVATE_DATA_FROM_THIS (This);
@ -100,7 +99,6 @@ EmuBlockIo2ReadBlocksEx (
return Status;
}
/**
Write BufferSize bytes from Lba into Buffer.
@ -136,16 +134,16 @@ EFI_STATUS
EFIAPI
EmuBlockIo2WriteBlocksEx (
IN EFI_BLOCK_IO2_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA LBA,
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
IN UINTN BufferSize,
IN VOID *Buffer
IN UINT32 MediaId,
IN EFI_LBA LBA,
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
IN UINTN BufferSize,
IN VOID *Buffer
)
{
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
EFI_TPL OldTpl;
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
EFI_TPL OldTpl;
Private = EMU_BLOCK_IO2_PRIVATE_DATA_FROM_THIS (This);
@ -157,8 +155,6 @@ EmuBlockIo2WriteBlocksEx (
return Status;
}
/**
Flush the Block Device.
@ -184,13 +180,13 @@ EmuBlockIo2WriteBlocksEx (
EFI_STATUS
EFIAPI
EmuBlockIo2Flush (
IN EFI_BLOCK_IO2_PROTOCOL *This,
IN OUT EFI_BLOCK_IO2_TOKEN *Token
IN EFI_BLOCK_IO2_PROTOCOL *This,
IN OUT EFI_BLOCK_IO2_TOKEN *Token
)
{
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
EFI_TPL OldTpl;
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
EFI_TPL OldTpl;
Private = EMU_BLOCK_IO2_PRIVATE_DATA_FROM_THIS (This);
@ -202,8 +198,6 @@ EmuBlockIo2Flush (
return Status;
}
/**
Reset the Block Device.
@ -218,13 +212,13 @@ EmuBlockIo2Flush (
EFI_STATUS
EFIAPI
EmuBlockIoReset (
IN EFI_BLOCK_IO_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
IN EFI_BLOCK_IO_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
)
{
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
EFI_TPL OldTpl;
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
EFI_TPL OldTpl;
Private = EMU_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This);
@ -236,7 +230,6 @@ EmuBlockIoReset (
return Status;
}
/**
Read BufferSize bytes from Lba into Buffer.
@ -259,30 +252,29 @@ EmuBlockIoReset (
EFI_STATUS
EFIAPI
EmuBlockIoReadBlocks (
IN EFI_BLOCK_IO_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN UINTN BufferSize,
OUT VOID *Buffer
IN EFI_BLOCK_IO_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN UINTN BufferSize,
OUT VOID *Buffer
)
{
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
EFI_TPL OldTpl;
EFI_BLOCK_IO2_TOKEN Token;
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
EFI_TPL OldTpl;
EFI_BLOCK_IO2_TOKEN Token;
Private = EMU_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This);
OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
Token.Event = NULL;
Status = Private->Io->ReadBlocks (Private->Io, MediaId, Lba, &Token, BufferSize, Buffer);
Status = Private->Io->ReadBlocks (Private->Io, MediaId, Lba, &Token, BufferSize, Buffer);
gBS->RestoreTPL (OldTpl);
return Status;
}
/**
Write BufferSize bytes from Lba into Buffer.
@ -306,24 +298,24 @@ EmuBlockIoReadBlocks (
EFI_STATUS
EFIAPI
EmuBlockIoWriteBlocks (
IN EFI_BLOCK_IO_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN UINTN BufferSize,
IN VOID *Buffer
IN EFI_BLOCK_IO_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN UINTN BufferSize,
IN VOID *Buffer
)
{
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
EFI_TPL OldTpl;
EFI_BLOCK_IO2_TOKEN Token;
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
EFI_TPL OldTpl;
EFI_BLOCK_IO2_TOKEN Token;
Private = EMU_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This);
OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
Token.Event = NULL;
Status = Private->Io->WriteBlocks (Private->Io, MediaId, Lba, &Token, BufferSize, Buffer);
Status = Private->Io->WriteBlocks (Private->Io, MediaId, Lba, &Token, BufferSize, Buffer);
gBS->RestoreTPL (OldTpl);
return Status;
@ -345,24 +337,22 @@ EmuBlockIoFlushBlocks (
IN EFI_BLOCK_IO_PROTOCOL *This
)
{
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
EFI_TPL OldTpl;
EFI_BLOCK_IO2_TOKEN Token;
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
EFI_TPL OldTpl;
EFI_BLOCK_IO2_TOKEN Token;
Private = EMU_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This);
OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
Token.Event = NULL;
Status = Private->Io->FlushBlocks (Private->Io, &Token);
Status = Private->Io->FlushBlocks (Private->Io, &Token);
gBS->RestoreTPL (OldTpl);
return Status;
}
/**
Tests to see if this driver supports a given controller. If a child device is provided,
it further tests to see if this driver supports creating a handle for the specified child device.
@ -413,8 +403,8 @@ EmuBlockIoDriverBindingSupported (
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
)
{
EFI_STATUS Status;
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
EFI_STATUS Status;
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
//
// Open the IO Abstraction(s) needed to perform the supported test
@ -443,15 +433,14 @@ EmuBlockIoDriverBindingSupported (
// Close the I/O Abstraction(s) used to perform the supported test
//
gBS->CloseProtocol (
Handle,
&gEmuIoThunkProtocolGuid,
This->DriverBindingHandle,
Handle
);
Handle,
&gEmuIoThunkProtocolGuid,
This->DriverBindingHandle,
Handle
);
return Status;
}
/**
Starts a device controller or a bus controller.
@ -490,14 +479,14 @@ EmuBlockIoDriverBindingSupported (
EFI_STATUS
EFIAPI
EmuBlockIoDriverBindingStart (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Handle,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Handle,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
)
{
EFI_STATUS Status;
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
EMU_BLOCK_IO_PRIVATE *Private = NULL;
EFI_STATUS Status;
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
EMU_BLOCK_IO_PRIVATE *Private = NULL;
//
// Grab the protocols we need
@ -573,8 +562,10 @@ EmuBlockIoDriverBindingStart (
Status = gBS->InstallMultipleProtocolInterfaces (
&Handle,
&gEfiBlockIoProtocolGuid, &Private->BlockIo,
&gEfiBlockIo2ProtocolGuid, &Private->BlockIo2,
&gEfiBlockIoProtocolGuid,
&Private->BlockIo,
&gEfiBlockIo2ProtocolGuid,
&Private->BlockIo2,
NULL
);
@ -586,21 +577,19 @@ Done:
}
gBS->FreePool (Private);
}
gBS->CloseProtocol (
Handle,
&gEmuIoThunkProtocolGuid,
This->DriverBindingHandle,
Handle
);
Handle,
&gEmuIoThunkProtocolGuid,
This->DriverBindingHandle,
Handle
);
}
return Status;
}
/**
Stops a device controller or a bus controller.
@ -636,9 +625,9 @@ EmuBlockIoDriverBindingStop (
IN EFI_HANDLE *ChildHandleBuffer
)
{
EFI_BLOCK_IO_PROTOCOL *BlockIo;
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
EFI_BLOCK_IO_PROTOCOL *BlockIo;
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
//
// Get our context back
@ -659,8 +648,10 @@ EmuBlockIoDriverBindingStop (
Status = gBS->UninstallMultipleProtocolInterfaces (
Private->EfiHandle,
&gEfiBlockIoProtocolGuid, &Private->BlockIo,
&gEfiBlockIo2ProtocolGuid, &Private->BlockIo2,
&gEfiBlockIoProtocolGuid,
&Private->BlockIo,
&gEfiBlockIo2ProtocolGuid,
&Private->BlockIo2,
NULL
);
if (!EFI_ERROR (Status)) {
@ -686,11 +677,7 @@ EmuBlockIoDriverBindingStop (
return Status;
}
EFI_DRIVER_BINDING_PROTOCOL gEmuBlockIoDriverBinding = {
EFI_DRIVER_BINDING_PROTOCOL gEmuBlockIoDriverBinding = {
EmuBlockIoDriverBindingSupported,
EmuBlockIoDriverBindingStart,
EmuBlockIoDriverBindingStop,
@ -699,9 +686,6 @@ EFI_DRIVER_BINDING_PROTOCOL gEmuBlockIoDriverBinding = {
NULL
};
/**
The user Entry Point for module EmuBlockIo . The user code starts with this function.
@ -715,11 +699,11 @@ EFI_DRIVER_BINDING_PROTOCOL gEmuBlockIoDriverBinding = {
EFI_STATUS
EFIAPI
InitializeEmuBlockIo (
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 = EfiLibInstallAllDriverProtocols2 (
ImageHandle,
@ -735,9 +719,5 @@ InitializeEmuBlockIo (
);
ASSERT_EFI_ERROR (Status);
return Status;
}

View File

@ -38,12 +38,11 @@ Abstract:
#include <Library/MemoryAllocationLib.h>
#include <Library/UefiBootServicesTableLib.h>
//
// Language supported for driverconfiguration protocol
//
#define EMU_BLOCK_IO_PRIVATE_SIGNATURE SIGNATURE_32 ('E', 'M', 'b', 'k')
#define EMU_BLOCK_IO_PRIVATE_SIGNATURE SIGNATURE_32 ('E', 'M', 'b', 'k')
typedef struct {
UINTN Signature;
EMU_IO_THUNK_PROTOCOL *IoThunk;
@ -55,7 +54,6 @@ typedef struct {
EFI_BLOCK_IO_MEDIA Media;
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
} EMU_BLOCK_IO_PRIVATE;
#define EMU_BLOCK_IO_PRIVATE_DATA_FROM_THIS(a) \
@ -64,7 +62,6 @@ typedef struct {
#define EMU_BLOCK_IO2_PRIVATE_DATA_FROM_THIS(a) \
CR(a, EMU_BLOCK_IO_PRIVATE, BlockIo2, EMU_BLOCK_IO_PRIVATE_SIGNATURE)
//
// Block I/O Global Variables
//

View File

@ -21,17 +21,17 @@ EmuBusDriverComponentNameGetDriverName (
EFI_STATUS
EFIAPI
EmuBusDriverComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
);
//
// EFI Component Name Protocol
//
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gEmuBusDriverComponentName = {
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gEmuBusDriverComponentName = {
EmuBusDriverComponentNameGetDriverName,
EmuBusDriverComponentNameGetControllerName,
"eng"
@ -40,15 +40,15 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gEmuBusDriverCompo
//
// EFI Component Name 2 Protocol
//
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gEmuBusDriverComponentName2 = {
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME) EmuBusDriverComponentNameGetDriverName,
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) EmuBusDriverComponentNameGetControllerName,
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gEmuBusDriverComponentName2 = {
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME)EmuBusDriverComponentNameGetDriverName,
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)EmuBusDriverComponentNameGetControllerName,
"en"
};
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mEmuBusDriverNameTable[] = {
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mEmuBusDriverNameTable[] = {
{ "eng", L"Emu Bus Driver" },
{ NULL , NULL }
{ NULL, NULL }
};
/**
@ -99,12 +99,12 @@ EmuBusDriverComponentNameGetDriverName (
)
{
return LookupUnicodeString2 (
Language,
This->SupportedLanguages,
mEmuBusDriverNameTable,
DriverName,
(BOOLEAN)(This == &gEmuBusDriverComponentName)
);
Language,
This->SupportedLanguages,
mEmuBusDriverNameTable,
DriverName,
(BOOLEAN)(This == &gEmuBusDriverComponentName)
);
}
/**
@ -178,16 +178,16 @@ EmuBusDriverComponentNameGetDriverName (
EFI_STATUS
EFIAPI
EmuBusDriverComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
)
{
EFI_STATUS Status;
EMU_IO_THUNK_PROTOCOL *EmuIo;
EMU_IO_DEVICE *Private;
EFI_STATUS Status;
EMU_IO_THUNK_PROTOCOL *EmuIo;
EMU_IO_DEVICE *Private;
//
// Make sure this driver is currently managing ControllHandle
@ -223,7 +223,7 @@ EmuBusDriverComponentNameGetControllerName (
Status = gBS->OpenProtocol (
ChildHandle,
&gEmuIoThunkProtocolGuid,
(VOID**)&EmuIo,
(VOID **)&EmuIo,
gEmuBusDriverBinding.DriverBindingHandle,
ChildHandle,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@ -240,5 +240,5 @@ EmuBusDriverComponentNameGetControllerName (
Private->ControllerNameTable,
ControllerName,
(BOOLEAN)(This == &gEmuBusDriverComponentName)
);
);
}

View File

@ -10,12 +10,10 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "EmuBusDriverDxe.h"
//
// DriverBinding protocol global
//
EFI_DRIVER_BINDING_PROTOCOL gEmuBusDriverBinding = {
EFI_DRIVER_BINDING_PROTOCOL gEmuBusDriverBinding = {
EmuBusDriverBindingSupported,
EmuBusDriverBindingStart,
EmuBusDriverBindingStop,
@ -24,8 +22,6 @@ EFI_DRIVER_BINDING_PROTOCOL gEmuBusDriverBinding = {
NULL
};
EFI_STATUS
EFIAPI
EmuBusDriverBindingSupported (
@ -52,9 +48,10 @@ EmuBusDriverBindingSupported (
// If RemainingDevicePath isn't the End of Device Path Node,
// check its validation
//
if (RemainingDevicePath->Type != HARDWARE_DEVICE_PATH ||
RemainingDevicePath->SubType != HW_VENDOR_DP ||
DevicePathNodeLength(RemainingDevicePath) != sizeof(EMU_VENDOR_DEVICE_PATH_NODE)) {
if ((RemainingDevicePath->Type != HARDWARE_DEVICE_PATH) ||
(RemainingDevicePath->SubType != HW_VENDOR_DP) ||
(DevicePathNodeLength (RemainingDevicePath) != sizeof (EMU_VENDOR_DEVICE_PATH_NODE)))
{
return EFI_UNSUPPORTED;
}
}
@ -66,7 +63,7 @@ EmuBusDriverBindingSupported (
Status = gBS->OpenProtocol (
ControllerHandle,
&gEmuThunkProtocolGuid,
(VOID **)&EmuThunk ,
(VOID **)&EmuThunk,
This->DriverBindingHandle,
ControllerHandle,
EFI_OPEN_PROTOCOL_BY_DRIVER
@ -83,11 +80,11 @@ EmuBusDriverBindingSupported (
// Close the I/O Abstraction(s) used to perform the supported test
//
gBS->CloseProtocol (
ControllerHandle,
&gEmuThunkProtocolGuid,
This->DriverBindingHandle,
ControllerHandle
);
ControllerHandle,
&gEmuThunkProtocolGuid,
This->DriverBindingHandle,
ControllerHandle
);
//
// Open the EFI Device Path protocol needed to perform the supported test
@ -108,21 +105,19 @@ EmuBusDriverBindingSupported (
return Status;
}
//
// Close protocol, don't use device path protocol in the Support() function
//
gBS->CloseProtocol (
ControllerHandle,
&gEfiDevicePathProtocolGuid,
This->DriverBindingHandle,
ControllerHandle
);
ControllerHandle,
&gEfiDevicePathProtocolGuid,
This->DriverBindingHandle,
ControllerHandle
);
return Status;
}
EFI_STATUS
EFIAPI
EmuBusDriverBindingStart (
@ -131,19 +126,19 @@ EmuBusDriverBindingStart (
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
)
{
EFI_STATUS Status;
EFI_STATUS InstallStatus;
EMU_THUNK_PROTOCOL *EmuThunk;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
EMU_IO_DEVICE *EmuDevice;
EMU_BUS_DEVICE *EmuBusDevice;
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
UINT16 ComponentName[512];
EMU_VENDOR_DEVICE_PATH_NODE *Node;
BOOLEAN CreateDevice;
EFI_STATUS Status;
EFI_STATUS InstallStatus;
EMU_THUNK_PROTOCOL *EmuThunk;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
EMU_IO_DEVICE *EmuDevice;
EMU_BUS_DEVICE *EmuBusDevice;
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
UINT16 ComponentName[512];
EMU_VENDOR_DEVICE_PATH_NODE *Node;
BOOLEAN CreateDevice;
InstallStatus = EFI_UNSUPPORTED;
Status = EFI_UNSUPPORTED;
Status = EFI_UNSUPPORTED;
//
// Grab the protocols we need
@ -156,7 +151,7 @@ EmuBusDriverBindingStart (
ControllerHandle,
EFI_OPEN_PROTOCOL_BY_DRIVER
);
if (EFI_ERROR (Status) && Status != EFI_ALREADY_STARTED) {
if (EFI_ERROR (Status) && (Status != EFI_ALREADY_STARTED)) {
return Status;
}
@ -168,7 +163,7 @@ EmuBusDriverBindingStart (
ControllerHandle,
EFI_OPEN_PROTOCOL_BY_DRIVER
);
if (EFI_ERROR (Status) && Status != EFI_ALREADY_STARTED) {
if (EFI_ERROR (Status) && (Status != EFI_ALREADY_STARTED)) {
return Status;
}
@ -196,10 +191,10 @@ EmuBusDriverBindingStart (
FALSE
);
Status = gBS->InstallMultipleProtocolInterfaces (
&ControllerHandle,
&gEfiCallerIdGuid, EmuBusDevice,
&gEfiCallerIdGuid,
EmuBusDevice,
NULL
);
if (EFI_ERROR (Status)) {
@ -209,7 +204,6 @@ EmuBusDriverBindingStart (
}
}
for (Status = EFI_SUCCESS, EmuIoThunk = NULL; !EFI_ERROR (Status); ) {
Status = EmuThunk->GetNextProtocol (TRUE, &EmuIoThunk);
if (EFI_ERROR (Status)) {
@ -218,7 +212,7 @@ EmuBusDriverBindingStart (
CreateDevice = TRUE;
if (RemainingDevicePath != NULL) {
CreateDevice = FALSE;
CreateDevice = FALSE;
//
// Check if RemainingDevicePath is the End of Device Path Node,
// if yes, don't create any child device
@ -228,12 +222,13 @@ EmuBusDriverBindingStart (
// If RemainingDevicePath isn't the End of Device Path Node,
// check its validation
//
Node = (EMU_VENDOR_DEVICE_PATH_NODE *) RemainingDevicePath;
if (Node->VendorDevicePath.Header.Type == HARDWARE_DEVICE_PATH &&
Node->VendorDevicePath.Header.SubType == HW_VENDOR_DP &&
DevicePathNodeLength (&Node->VendorDevicePath.Header) == sizeof (EMU_VENDOR_DEVICE_PATH_NODE)
) {
if (CompareGuid (&Node->VendorDevicePath.Guid, EmuIoThunk->Protocol) && Node->Instance == EmuIoThunk->Instance) {
Node = (EMU_VENDOR_DEVICE_PATH_NODE *)RemainingDevicePath;
if ((Node->VendorDevicePath.Header.Type == HARDWARE_DEVICE_PATH) &&
(Node->VendorDevicePath.Header.SubType == HW_VENDOR_DP) &&
(DevicePathNodeLength (&Node->VendorDevicePath.Header) == sizeof (EMU_VENDOR_DEVICE_PATH_NODE))
)
{
if (CompareGuid (&Node->VendorDevicePath.Guid, EmuIoThunk->Protocol) && (Node->Instance == EmuIoThunk->Instance)) {
CreateDevice = TRUE;
}
}
@ -249,9 +244,9 @@ EmuBusDriverBindingStart (
return EFI_OUT_OF_RESOURCES;
}
EmuDevice->Handle = NULL;
EmuDevice->ControllerHandle = ControllerHandle;
EmuDevice->ParentDevicePath = ParentDevicePath;
EmuDevice->Handle = NULL;
EmuDevice->ControllerHandle = ControllerHandle;
EmuDevice->ParentDevicePath = ParentDevicePath;
CopyMem (&EmuDevice->EmuIoThunk, EmuIoThunk, sizeof (EMU_IO_THUNK_PROTOCOL));
EmuDevice->ControllerNameTable = NULL;
@ -264,10 +259,10 @@ EmuBusDriverBindingStart (
);
EmuDevice->DevicePath = EmuBusCreateDevicePath (
ParentDevicePath,
EmuIoThunk->Protocol,
EmuIoThunk->Instance
);
ParentDevicePath,
EmuIoThunk->Protocol,
EmuIoThunk->Instance
);
if (EmuDevice->DevicePath == NULL) {
gBS->FreePool (EmuDevice);
return EFI_OUT_OF_RESOURCES;
@ -283,11 +278,13 @@ EmuBusDriverBindingStart (
EmuDevice->Signature = EMU_IO_DEVICE_SIGNATURE;
InstallStatus = gBS->InstallMultipleProtocolInterfaces (
&EmuDevice->Handle,
&gEfiDevicePathProtocolGuid, EmuDevice->DevicePath,
&gEmuIoThunkProtocolGuid, &EmuDevice->EmuIoThunk,
NULL
);
&EmuDevice->Handle,
&gEfiDevicePathProtocolGuid,
EmuDevice->DevicePath,
&gEmuIoThunkProtocolGuid,
&EmuDevice->EmuIoThunk,
NULL
);
if (EFI_ERROR (InstallStatus)) {
FreeUnicodeStringTable (EmuDevice->ControllerNameTable);
gBS->FreePool (EmuDevice);
@ -298,7 +295,7 @@ EmuBusDriverBindingStart (
Status = gBS->OpenProtocol (
ControllerHandle,
&gEmuThunkProtocolGuid,
(VOID **)&EmuThunk ,
(VOID **)&EmuThunk,
This->DriverBindingHandle,
EmuDevice->Handle,
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
@ -313,7 +310,6 @@ EmuBusDriverBindingStart (
return InstallStatus;
}
EFI_STATUS
EFIAPI
EmuBusDriverBindingStop (
@ -323,13 +319,13 @@ EmuBusDriverBindingStop (
IN EFI_HANDLE *ChildHandleBuffer
)
{
EFI_STATUS Status;
UINTN Index;
BOOLEAN AllChildrenStopped;
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
EMU_BUS_DEVICE *EmuBusDevice;
EMU_IO_DEVICE *EmuDevice;
EMU_THUNK_PROTOCOL *EmuThunk;
EFI_STATUS Status;
UINTN Index;
BOOLEAN AllChildrenStopped;
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
EMU_BUS_DEVICE *EmuBusDevice;
EMU_IO_DEVICE *EmuDevice;
EMU_THUNK_PROTOCOL *EmuThunk;
//
// Complete all outstanding transactions to Controller.
@ -353,35 +349,35 @@ EmuBusDriverBindingStop (
}
gBS->UninstallMultipleProtocolInterfaces (
ControllerHandle,
&gEfiCallerIdGuid, EmuBusDevice,
NULL
);
ControllerHandle,
&gEfiCallerIdGuid,
EmuBusDevice,
NULL
);
FreeUnicodeStringTable (EmuBusDevice->ControllerNameTable);
gBS->FreePool (EmuBusDevice);
gBS->CloseProtocol (
ControllerHandle,
&gEmuThunkProtocolGuid,
This->DriverBindingHandle,
ControllerHandle
);
ControllerHandle,
&gEmuThunkProtocolGuid,
This->DriverBindingHandle,
ControllerHandle
);
gBS->CloseProtocol (
ControllerHandle,
&gEfiDevicePathProtocolGuid,
This->DriverBindingHandle,
ControllerHandle
);
ControllerHandle,
&gEfiDevicePathProtocolGuid,
This->DriverBindingHandle,
ControllerHandle
);
return EFI_SUCCESS;
}
AllChildrenStopped = TRUE;
for (Index = 0; Index < NumberOfChildren; Index++) {
Status = gBS->OpenProtocol (
ChildHandleBuffer[Index],
&gEmuIoThunkProtocolGuid,
@ -402,20 +398,22 @@ EmuBusDriverBindingStop (
Status = gBS->UninstallMultipleProtocolInterfaces (
EmuDevice->Handle,
&gEfiDevicePathProtocolGuid, EmuDevice->DevicePath,
&gEmuIoThunkProtocolGuid, &EmuDevice->EmuIoThunk,
&gEfiDevicePathProtocolGuid,
EmuDevice->DevicePath,
&gEmuIoThunkProtocolGuid,
&EmuDevice->EmuIoThunk,
NULL
);
if (EFI_ERROR (Status)) {
gBS->OpenProtocol (
ControllerHandle,
&gEmuThunkProtocolGuid,
(VOID **) &EmuThunk ,
This->DriverBindingHandle,
EmuDevice->Handle,
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
);
ControllerHandle,
&gEmuThunkProtocolGuid,
(VOID **)&EmuThunk,
This->DriverBindingHandle,
EmuDevice->Handle,
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
);
} else {
//
// Close the child handle
@ -437,7 +435,6 @@ EmuBusDriverBindingStop (
return EFI_SUCCESS;
}
/*++
Routine Description:
@ -466,8 +463,8 @@ EmuBusCreateDevicePath (
{
EMU_VENDOR_DEVICE_PATH_NODE DevicePath;
DevicePath.VendorDevicePath.Header.Type = HARDWARE_DEVICE_PATH;
DevicePath.VendorDevicePath.Header.SubType = HW_VENDOR_DP;
DevicePath.VendorDevicePath.Header.Type = HARDWARE_DEVICE_PATH;
DevicePath.VendorDevicePath.Header.SubType = HW_VENDOR_DP;
SetDevicePathNodeLength (&DevicePath.VendorDevicePath.Header, sizeof (EMU_VENDOR_DEVICE_PATH_NODE));
//
@ -482,13 +479,11 @@ EmuBusCreateDevicePath (
DevicePath.Instance = InstanceNumber;
return AppendDevicePathNode (
RootDevicePath,
(EFI_DEVICE_PATH_PROTOCOL *) &DevicePath
);
RootDevicePath,
(EFI_DEVICE_PATH_PROTOCOL *)&DevicePath
);
}
/**
The user Entry Point for module EmuBusDriver. The user code starts with this function.
@ -502,11 +497,11 @@ EmuBusCreateDevicePath (
EFI_STATUS
EFIAPI
InitializeEmuBusDriver (
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 = EfiLibInstallAllDriverProtocols (
ImageHandle,
@ -519,10 +514,5 @@ InitializeEmuBusDriver (
);
ASSERT_EFI_ERROR (Status);
return Status;
}

View File

@ -25,19 +25,18 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Library/UefiBootServicesTableLib.h>
#include <Library/DevicePathLib.h>
extern EFI_DRIVER_BINDING_PROTOCOL gEmuBusDriverBinding;
extern EFI_COMPONENT_NAME_PROTOCOL gEmuBusDriverComponentName;
extern EFI_COMPONENT_NAME2_PROTOCOL gEmuBusDriverComponentName2;
extern EFI_DRIVER_BINDING_PROTOCOL gEmuBusDriverBinding;
extern EFI_COMPONENT_NAME_PROTOCOL gEmuBusDriverComponentName;
extern EFI_COMPONENT_NAME2_PROTOCOL gEmuBusDriverComponentName2;
//
// Unix Bus Controller Structure
//
#define EMU_BUS_DEVICE_SIGNATURE SIGNATURE_32 ('L', 'X', 'B', 'D')
#define EMU_BUS_DEVICE_SIGNATURE SIGNATURE_32 ('L', 'X', 'B', 'D')
typedef struct {
UINT64 Signature;
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
UINT64 Signature;
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
} EMU_BUS_DEVICE;
//
@ -46,47 +45,42 @@ typedef struct {
#define EMU_IO_DEVICE_SIGNATURE SIGNATURE_32 ('L', 'X', 'V', 'D')
typedef struct {
UINT64 Signature;
EFI_HANDLE Handle;
EMU_IO_THUNK_PROTOCOL EmuIoThunk;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
UINT64 Signature;
EFI_HANDLE Handle;
EMU_IO_THUNK_PROTOCOL EmuIoThunk;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
//
// Private data about the parent
//
EFI_HANDLE ControllerHandle;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
EFI_HANDLE ControllerHandle;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
} EMU_IO_DEVICE;
#define EMU_IO_DEVICE_FROM_THIS(a) \
CR(a, EMU_IO_DEVICE, EmuIoThunk, EMU_IO_DEVICE_SIGNATURE)
//
// Driver Binding Protocol function prototypes
//
EFI_STATUS
EFIAPI
EmuBusDriverBindingSupported (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Handle,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Handle,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
);
EFI_STATUS
EFIAPI
EmuBusDriverBindingStart (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE ParentHandle,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE ParentHandle,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
);
EFI_STATUS
EFIAPI
EmuBusDriverBindingStop (
@ -106,5 +100,4 @@ EmuBusCreateDevicePath (
IN UINT16 InstanceNumber
);
#endif

View File

@ -28,17 +28,17 @@ EmuGopComponentNameGetDriverName (
EFI_STATUS
EFIAPI
EmuGopComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
);
//
// EFI Component Name Protocol
//
EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName = {
EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName = {
EmuGopComponentNameGetDriverName,
EmuGopComponentNameGetControllerName,
"eng"
@ -47,19 +47,17 @@ EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName = {
//
// EFI Component Name 2 Protocol
//
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gEmuGopComponentName2 = {
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME) EmuGopComponentNameGetDriverName,
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) EmuGopComponentNameGetControllerName,
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gEmuGopComponentName2 = {
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME)EmuGopComponentNameGetDriverName,
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)EmuGopComponentNameGetControllerName,
"en"
};
EFI_UNICODE_STRING_TABLE mEmuGopDriverNameTable[] = {
EFI_UNICODE_STRING_TABLE mEmuGopDriverNameTable[] = {
{ "eng", L"Emulator GOP Driver" },
{ NULL , NULL }
{ NULL, NULL }
};
/**
Retrieves a Unicode string that is the user readable name of the driver.
@ -116,7 +114,6 @@ EmuGopComponentNameGetDriverName (
);
}
/**
Retrieves a Unicode string that is the user readable name of the controller
that is being managed by a driver.
@ -188,11 +185,11 @@ EmuGopComponentNameGetDriverName (
EFI_STATUS
EFIAPI
EmuGopComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
)
{
EFI_STATUS Status;
@ -217,6 +214,7 @@ EmuGopComponentNameGetControllerName (
if (EFI_ERROR (Status)) {
return EFI_UNSUPPORTED;
}
//
// Get our context back
//

View File

@ -29,78 +29,73 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Library/UefiBootServicesTableLib.h>
#include <Library/KeyMapLib.h>
#define MAX_Q 256
#define MAX_Q 256
typedef struct {
UINTN Front;
UINTN Rear;
UINTN Count;
EFI_INPUT_KEY Q[MAX_Q];
UINTN Front;
UINTN Rear;
UINTN Count;
EFI_INPUT_KEY Q[MAX_Q];
} GOP_QUEUE_FIXED;
#define EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY_SIGNATURE SIGNATURE_32 ('U', 'g', 'S', 'n')
#define EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY_SIGNATURE SIGNATURE_32 ('U', 'g', 'S', 'n')
typedef struct _EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY {
UINTN Signature;
EFI_HANDLE NotifyHandle;
EFI_KEY_DATA KeyData;
EFI_KEY_NOTIFY_FUNCTION KeyNotificationFn;
EFI_EVENT Event;
LIST_ENTRY NotifyEntry;
UINTN Signature;
EFI_HANDLE NotifyHandle;
EFI_KEY_DATA KeyData;
EFI_KEY_NOTIFY_FUNCTION KeyNotificationFn;
EFI_EVENT Event;
LIST_ENTRY NotifyEntry;
} EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY;
#define GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER 0xffff
#define GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER 0xffff
typedef struct {
UINT32 HorizontalResolution;
UINT32 VerticalResolution;
UINT32 ColorDepth;
UINT32 RefreshRate;
UINT32 HorizontalResolution;
UINT32 VerticalResolution;
UINT32 ColorDepth;
UINT32 RefreshRate;
} GOP_MODE_DATA;
extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding;
extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName;
extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding;
extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName;
#define EMU_UGA_CLASS_NAME L"EmuGopWindow"
#define EMU_UGA_CLASS_NAME L"EmuGopWindow"
#define GOP_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('G', 'o', 'p', 'N')
typedef struct {
UINT64 Signature;
UINT64 Signature;
EFI_HANDLE Handle;
EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput;
EFI_SIMPLE_TEXT_INPUT_PROTOCOL SimpleTextIn;
EFI_SIMPLE_POINTER_PROTOCOL SimplePointer;
EFI_HANDLE Handle;
EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput;
EFI_SIMPLE_TEXT_INPUT_PROTOCOL SimpleTextIn;
EFI_SIMPLE_POINTER_PROTOCOL SimplePointer;
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
EMU_GRAPHICS_WINDOW_PROTOCOL *EmuGraphicsWindow;
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
EMU_GRAPHICS_WINDOW_PROTOCOL *EmuGraphicsWindow;
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
EFI_SIMPLE_POINTER_MODE PointerMode;
EFI_SIMPLE_POINTER_MODE PointerMode;
//
// GOP Private Data for QueryMode ()
//
GOP_MODE_DATA *ModeData;
GOP_MODE_DATA *ModeData;
//
// UGA Private Data knowing when to start hardware
//
BOOLEAN HardwareNeedsStarting;
BOOLEAN HardwareNeedsStarting;
CHAR16 *WindowName;
CHAR16 *WindowName;
GOP_QUEUE_FIXED Queue;
GOP_QUEUE_FIXED Queue;
EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL SimpleTextInEx;
EFI_KEY_STATE KeyState;
LIST_ENTRY NotifyList;
EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL SimpleTextInEx;
EFI_KEY_STATE KeyState;
LIST_ENTRY NotifyList;
} GOP_PRIVATE_DATA;
#define GOP_PRIVATE_DATA_FROM_THIS(a) \
CR(a, GOP_PRIVATE_DATA, GraphicsOutput, GOP_PRIVATE_DATA_SIGNATURE)
@ -113,13 +108,12 @@ typedef struct {
#define GOP_PRIVATE_DATA_FROM_POINTER_MODE_THIS(a) \
CR(a, GOP_PRIVATE_DATA, SimplePointer, GOP_PRIVATE_DATA_SIGNATURE)
//
// Global Protocol Variables
//
extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding;
extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName;
extern EFI_COMPONENT_NAME2_PROTOCOL gEmuGopComponentName2;
extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding;
extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName;
extern EFI_COMPONENT_NAME2_PROTOCOL gEmuGopComponentName2;
//
// Gop Hardware abstraction internal worker functions
@ -131,38 +125,37 @@ EmuGopSupported (
EFI_STATUS
EmuGopConstructor (
IN GOP_PRIVATE_DATA *Private
IN GOP_PRIVATE_DATA *Private
);
EFI_STATUS
EmuGopDestructor (
IN GOP_PRIVATE_DATA *Private
IN GOP_PRIVATE_DATA *Private
);
EFI_STATUS
GopPrivateAddQ (
IN GOP_PRIVATE_DATA *Private,
IN EFI_INPUT_KEY Key
IN GOP_PRIVATE_DATA *Private,
IN EFI_INPUT_KEY Key
);
EFI_STATUS
EmuGopInitializeSimpleTextInForWindow (
IN GOP_PRIVATE_DATA *Private
IN GOP_PRIVATE_DATA *Private
);
EFI_STATUS
EmuGopInitializeSimplePointerForWindow (
IN GOP_PRIVATE_DATA *Private
IN GOP_PRIVATE_DATA *Private
);
EFI_STATUS
EmuGopStartWindow (
IN GOP_PRIVATE_DATA *Private,
IN UINT32 HorizontalResolution,
IN UINT32 VerticalResolution,
IN UINT32 ColorDepth,
IN UINT32 RefreshRate
IN GOP_PRIVATE_DATA *Private,
IN UINT32 HorizontalResolution,
IN UINT32 VerticalResolution,
IN UINT32 ColorDepth,
IN UINT32 RefreshRate
);
VOID
@ -175,15 +168,15 @@ ShutdownGopEvent (
VOID
EFIAPI
GopPrivateMakeCallbackFunction (
IN VOID *Context,
IN EFI_KEY_DATA *KeyData
IN VOID *Context,
IN EFI_KEY_DATA *KeyData
);
VOID
EFIAPI
GopPrivateBreakCallbackFunction (
IN VOID *Context,
IN EFI_KEY_DATA *KeyData
IN VOID *Context,
IN EFI_KEY_DATA *KeyData
);
#endif

View File

@ -9,11 +9,11 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "Gop.h"
EFI_STATUS
FreeNotifyList (
IN OUT LIST_ENTRY *ListHead
IN OUT LIST_ENTRY *ListHead
)
/*++
Routine Description:
@ -29,11 +29,12 @@ Returns:
**/
{
EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY *NotifyNode;
EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY *NotifyNode;
if (ListHead == NULL) {
return EFI_INVALID_PARAMETER;
}
while (!IsListEmpty (ListHead)) {
NotifyNode = CR (
ListHead->ForwardLink,
@ -48,7 +49,6 @@ Returns:
return EFI_SUCCESS;
}
/**
Tests to see if this driver supports a given controller. If a child device is provided,
it further tests to see if this driver supports creating a handle for the specified child device.
@ -94,13 +94,13 @@ Returns:
EFI_STATUS
EFIAPI
EmuGopDriverBindingSupported (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Handle,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Handle,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
)
{
EFI_STATUS Status;
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
EFI_STATUS Status;
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
//
// Open the IO Abstraction(s) needed to perform the supported test
@ -123,16 +123,15 @@ EmuGopDriverBindingSupported (
// Close the I/O Abstraction(s) used to perform the supported test
//
gBS->CloseProtocol (
Handle,
&gEmuIoThunkProtocolGuid,
This->DriverBindingHandle,
Handle
);
Handle,
&gEmuIoThunkProtocolGuid,
This->DriverBindingHandle,
Handle
);
return Status;
}
/**
Starts a device controller or a bus controller.
@ -171,14 +170,14 @@ EmuGopDriverBindingSupported (
EFI_STATUS
EFIAPI
EmuGopDriverBindingStart (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Handle,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Handle,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
)
{
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
EFI_STATUS Status;
GOP_PRIVATE_DATA *Private;
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
EFI_STATUS Status;
GOP_PRIVATE_DATA *Private;
//
// Grab the protocols we need
@ -199,14 +198,15 @@ EmuGopDriverBindingStart (
// Allocate Private context data for SGO inteface.
//
Private = NULL;
Status = gBS->AllocatePool (
EfiBootServicesData,
sizeof (GOP_PRIVATE_DATA),
(VOID **)&Private
);
Status = gBS->AllocatePool (
EfiBootServicesData,
sizeof (GOP_PRIVATE_DATA),
(VOID **)&Private
);
if (EFI_ERROR (Status)) {
goto Done;
}
//
// Set up context record
//
@ -234,27 +234,31 @@ EmuGopDriverBindingStart (
if (EFI_ERROR (Status)) {
goto Done;
}
//
// Publish the Gop interface to the world
//
Status = gBS->InstallMultipleProtocolInterfaces (
&Private->Handle,
&gEfiGraphicsOutputProtocolGuid, &Private->GraphicsOutput,
&gEfiSimpleTextInProtocolGuid, &Private->SimpleTextIn,
&gEfiSimplePointerProtocolGuid, &Private->SimplePointer,
&gEfiSimpleTextInputExProtocolGuid, &Private->SimpleTextInEx,
&gEfiGraphicsOutputProtocolGuid,
&Private->GraphicsOutput,
&gEfiSimpleTextInProtocolGuid,
&Private->SimpleTextIn,
&gEfiSimplePointerProtocolGuid,
&Private->SimplePointer,
&gEfiSimpleTextInputExProtocolGuid,
&Private->SimpleTextInEx,
NULL
);
Done:
if (EFI_ERROR (Status)) {
gBS->CloseProtocol (
Handle,
&gEmuIoThunkProtocolGuid,
This->DriverBindingHandle,
Handle
);
Handle,
&gEmuIoThunkProtocolGuid,
This->DriverBindingHandle,
Handle
);
if (Private != NULL) {
//
@ -263,12 +267,15 @@ Done:
if (Private->ControllerNameTable != NULL) {
FreeUnicodeStringTable (Private->ControllerNameTable);
}
if (Private->SimpleTextIn.WaitForKey != NULL) {
gBS->CloseEvent (Private->SimpleTextIn.WaitForKey);
}
if (Private->SimpleTextInEx.WaitForKeyEx != NULL) {
gBS->CloseEvent (Private->SimpleTextInEx.WaitForKeyEx);
}
FreeNotifyList (&Private->NotifyList);
gBS->FreePool (Private);
@ -278,8 +285,6 @@ Done:
return Status;
}
/**
Stops a device controller or a bus controller.
@ -315,9 +320,9 @@ EmuGopDriverBindingStop (
IN EFI_HANDLE *ChildHandleBuffer
)
{
EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
EFI_STATUS Status;
GOP_PRIVATE_DATA *Private;
EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
EFI_STATUS Status;
GOP_PRIVATE_DATA *Private;
Status = gBS->OpenProtocol (
Handle,
@ -344,10 +349,14 @@ EmuGopDriverBindingStop (
//
Status = gBS->UninstallMultipleProtocolInterfaces (
Private->Handle,
&gEfiGraphicsOutputProtocolGuid, &Private->GraphicsOutput,
&gEfiSimpleTextInProtocolGuid, &Private->SimpleTextIn,
&gEfiSimplePointerProtocolGuid, &Private->SimplePointer,
&gEfiSimpleTextInputExProtocolGuid, &Private->SimpleTextInEx,
&gEfiGraphicsOutputProtocolGuid,
&Private->GraphicsOutput,
&gEfiSimpleTextInProtocolGuid,
&Private->SimpleTextIn,
&gEfiSimplePointerProtocolGuid,
&Private->SimplePointer,
&gEfiSimpleTextInputExProtocolGuid,
&Private->SimpleTextInEx,
NULL
);
if (!EFI_ERROR (Status)) {
@ -360,11 +369,11 @@ EmuGopDriverBindingStop (
}
gBS->CloseProtocol (
Handle,
&gEmuIoThunkProtocolGuid,
This->DriverBindingHandle,
Handle
);
Handle,
&gEmuIoThunkProtocolGuid,
This->DriverBindingHandle,
Handle
);
//
// Free our instance data
@ -380,18 +389,16 @@ EmuGopDriverBindingStop (
FreeNotifyList (&Private->NotifyList);
gBS->FreePool (Private);
}
return Status;
}
///
/// This protocol provides the services required to determine if a driver supports a given controller.
/// If a controller is supported, then it also provides routines to start and stop the controller.
///
EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding = {
EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding = {
EmuGopDriverBindingSupported,
EmuGopDriverBindingStart,
EmuGopDriverBindingStop,
@ -400,8 +407,6 @@ EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding = {
NULL
};
/**
The user Entry Point for module EmuGop. The user code starts with this function.
@ -415,11 +420,11 @@ EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding = {
EFI_STATUS
EFIAPI
InitializeEmuGop (
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 = EfiLibInstallDriverBindingComponentName2 (
ImageHandle,
@ -431,7 +436,5 @@ InitializeEmuGop (
);
ASSERT_EFI_ERROR (Status);
return Status;
}

View File

@ -9,12 +9,12 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "Gop.h"
BOOLEAN
GopPrivateIsKeyRegistered (
IN EFI_KEY_DATA *RegsiteredData,
IN EFI_KEY_DATA *InputData
)
/*++
Routine Description:
@ -35,37 +35,39 @@ Returns:
ASSERT (RegsiteredData != NULL && InputData != NULL);
if ((RegsiteredData->Key.ScanCode != InputData->Key.ScanCode) ||
(RegsiteredData->Key.UnicodeChar != InputData->Key.UnicodeChar)) {
(RegsiteredData->Key.UnicodeChar != InputData->Key.UnicodeChar))
{
return FALSE;
}
//
// Assume KeyShiftState/KeyToggleState = 0 in Registered key data means these state could be ignored.
//
if (RegsiteredData->KeyState.KeyShiftState != 0 &&
RegsiteredData->KeyState.KeyShiftState != InputData->KeyState.KeyShiftState) {
if ((RegsiteredData->KeyState.KeyShiftState != 0) &&
(RegsiteredData->KeyState.KeyShiftState != InputData->KeyState.KeyShiftState))
{
return FALSE;
}
if (RegsiteredData->KeyState.KeyToggleState != 0 &&
RegsiteredData->KeyState.KeyToggleState != InputData->KeyState.KeyToggleState) {
if ((RegsiteredData->KeyState.KeyToggleState != 0) &&
(RegsiteredData->KeyState.KeyToggleState != InputData->KeyState.KeyToggleState))
{
return FALSE;
}
return TRUE;
}
VOID
EFIAPI
GopPrivateMakeCallbackFunction (
IN VOID *Context,
IN EFI_KEY_DATA *KeyData
IN VOID *Context,
IN EFI_KEY_DATA *KeyData
)
{
LIST_ENTRY *Link;
LIST_ENTRY *Link;
EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY *CurrentNotify;
GOP_PRIVATE_DATA *Private = (GOP_PRIVATE_DATA *)Context;
GOP_PRIVATE_DATA *Private = (GOP_PRIVATE_DATA *)Context;
KeyMapMake (KeyData);
@ -84,19 +86,16 @@ GopPrivateMakeCallbackFunction (
}
}
VOID
EFIAPI
GopPrivateBreakCallbackFunction (
IN VOID *Context,
IN EFI_KEY_DATA *KeyData
IN VOID *Context,
IN EFI_KEY_DATA *KeyData
)
{
KeyMapBreak (KeyData);
}
//
// Simple Text In implementation.
//
@ -114,8 +113,8 @@ GopPrivateBreakCallbackFunction (
EFI_STATUS
EFIAPI
EmuGopSimpleTextInReset (
IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
)
{
GOP_PRIVATE_DATA *Private;
@ -135,8 +134,8 @@ EmuGopSimpleTextInReset (
//
// A reset is draining the Queue
//
while (Private->EmuGraphicsWindow->GetKey (Private->EmuGraphicsWindow, &KeyData) == EFI_SUCCESS)
;
while (Private->EmuGraphicsWindow->GetKey (Private->EmuGraphicsWindow, &KeyData) == EFI_SUCCESS) {
}
//
// Leave critical section and return
@ -145,7 +144,6 @@ EmuGopSimpleTextInReset (
return EFI_SUCCESS;
}
/**
Reads the next keystroke from the input device. The WaitForKey Event can
be used to test for existence of a keystroke via WaitForEvent () call.
@ -163,8 +161,8 @@ EmuGopSimpleTextInReset (
EFI_STATUS
EFIAPI
EmuGopSimpleTextInReadKeyStroke (
IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,
OUT EFI_INPUT_KEY *Key
IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,
OUT EFI_INPUT_KEY *Key
)
{
GOP_PRIVATE_DATA *Private;
@ -180,9 +178,9 @@ EmuGopSimpleTextInReadKeyStroke (
//
// Enter critical section
//
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
Status = Private->EmuGraphicsWindow->GetKey (Private->EmuGraphicsWindow, &KeyData);
Status = Private->EmuGraphicsWindow->GetKey (Private->EmuGraphicsWindow, &KeyData);
if (!EFI_ERROR (Status)) {
if ((KeyData.Key.ScanCode == 0) && (KeyData.Key.UnicodeChar == 0)) {
// Modifier key was pressed
@ -200,8 +198,6 @@ EmuGopSimpleTextInReadKeyStroke (
return Status;
}
/**
SimpleTextIn and SimpleTextInEx Notify Wait Event
@ -212,15 +208,15 @@ EmuGopSimpleTextInReadKeyStroke (
VOID
EFIAPI
EmuGopSimpleTextInWaitForKey (
IN EFI_EVENT Event,
IN VOID *Context
IN EFI_EVENT Event,
IN VOID *Context
)
{
GOP_PRIVATE_DATA *Private;
EFI_STATUS Status;
EFI_TPL OldTpl;
Private = (GOP_PRIVATE_DATA *) Context;
Private = (GOP_PRIVATE_DATA *)Context;
if (Private->EmuGraphicsWindow == NULL) {
return;
}
@ -228,27 +224,26 @@ EmuGopSimpleTextInWaitForKey (
//
// Enter critical section
//
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
Status = Private->EmuGraphicsWindow->CheckKey (Private->EmuGraphicsWindow);
Status = Private->EmuGraphicsWindow->CheckKey (Private->EmuGraphicsWindow);
if (!EFI_ERROR (Status)) {
//
// If a there is a key in the queue signal our event.
//
gBS->SignalEvent (Event);
}
//
// Leave critical section and return
//
gBS->RestoreTPL (OldTpl);
}
//
// Simple Text Input Ex protocol functions
//
/**
The Reset() function resets the input device hardware. As part
of initialization process, the firmware/device will make a quick
@ -280,6 +275,7 @@ EmuGopSimpleTextInExResetEx (
IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
)
/*++
Routine Description:
@ -297,8 +293,6 @@ EmuGopSimpleTextInExResetEx (
return EFI_SUCCESS;
}
/**
The function reads the next keystroke from the input device. If
there is no pending keystroke the function returns
@ -351,9 +345,10 @@ EmuGopSimpleTextInExResetEx (
EFI_STATUS
EFIAPI
EmuGopSimpleTextInExReadKeyStrokeEx (
IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
OUT EFI_KEY_DATA *KeyData
IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
OUT EFI_KEY_DATA *KeyData
)
/*++
Routine Description:
@ -378,7 +373,6 @@ EmuGopSimpleTextInExReadKeyStrokeEx (
GOP_PRIVATE_DATA *Private;
EFI_TPL OldTpl;
if (KeyData == NULL) {
return EFI_INVALID_PARAMETER;
}
@ -391,9 +385,9 @@ EmuGopSimpleTextInExReadKeyStrokeEx (
//
// Enter critical section
//
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
Status = Private->EmuGraphicsWindow->GetKey(Private->EmuGraphicsWindow, KeyData);
Status = Private->EmuGraphicsWindow->GetKey (Private->EmuGraphicsWindow, KeyData);
//
// Leave critical section and return
@ -403,8 +397,6 @@ EmuGopSimpleTextInExReadKeyStrokeEx (
return Status;
}
/**
The SetState() function allows the input device hardware to
have state settings adjusted.
@ -446,16 +438,17 @@ EmuGopSimpleTextInExSetState (
}
if (((Private->KeyState.KeyToggleState & EFI_TOGGLE_STATE_VALID) != EFI_TOGGLE_STATE_VALID) ||
((*KeyToggleState & EFI_TOGGLE_STATE_VALID) != EFI_TOGGLE_STATE_VALID)) {
((*KeyToggleState & EFI_TOGGLE_STATE_VALID) != EFI_TOGGLE_STATE_VALID))
{
return EFI_UNSUPPORTED;
}
//
// Enter critical section
//
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
Status = Private->EmuGraphicsWindow->KeySetState (Private->EmuGraphicsWindow, KeyToggleState);
Status = Private->EmuGraphicsWindow->KeySetState (Private->EmuGraphicsWindow, KeyToggleState);
//
// Leave critical section and return
//
@ -464,7 +457,6 @@ EmuGopSimpleTextInExSetState (
return Status;
}
/**
SimpleTextIn and SimpleTextInEx Notify Wait Event
@ -475,17 +467,15 @@ EmuGopSimpleTextInExSetState (
VOID
EFIAPI
EmuGopRegisterKeyCallback (
IN EFI_EVENT Event,
IN VOID *Context
IN EFI_EVENT Event,
IN VOID *Context
)
{
EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY *ExNotify = (EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY *)Context;
EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY *ExNotify = (EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY *)Context;
ExNotify->KeyNotificationFn (&ExNotify->KeyData);
}
/**
The RegisterKeystrokeNotify() function registers a function
which will be called when a specified keystroke will occur.
@ -520,13 +510,13 @@ EmuGopSimpleTextInExRegisterKeyNotify (
OUT VOID **NotifyHandle
)
{
EFI_STATUS Status;
GOP_PRIVATE_DATA *Private;
EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY *CurrentNotify;
LIST_ENTRY *Link;
EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY *NewNotify;
EFI_STATUS Status;
GOP_PRIVATE_DATA *Private;
EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY *CurrentNotify;
LIST_ENTRY *Link;
EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY *NewNotify;
if (KeyData == NULL || KeyNotificationFunction == NULL || NotifyHandle == NULL) {
if ((KeyData == NULL) || (KeyNotificationFunction == NULL) || (NotifyHandle == NULL)) {
return EFI_INVALID_PARAMETER;
}
@ -553,14 +543,14 @@ EmuGopSimpleTextInExRegisterKeyNotify (
//
// Allocate resource to save the notification function
//
NewNotify = (EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY *) AllocateZeroPool (sizeof (EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY));
NewNotify = (EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY *)AllocateZeroPool (sizeof (EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY));
if (NewNotify == NULL) {
return EFI_OUT_OF_RESOURCES;
}
NewNotify->Signature = EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY_SIGNATURE;
NewNotify->KeyNotificationFn = KeyNotificationFunction;
NewNotify->NotifyHandle = (EFI_HANDLE) NewNotify;
NewNotify->NotifyHandle = (EFI_HANDLE)NewNotify;
CopyMem (&NewNotify->KeyData, KeyData, sizeof (KeyData));
InsertTailList (&Private->NotifyList, &NewNotify->NotifyEntry);
@ -573,14 +563,11 @@ EmuGopSimpleTextInExRegisterKeyNotify (
);
ASSERT_EFI_ERROR (Status);
*NotifyHandle = NewNotify->NotifyHandle;
return EFI_SUCCESS;
}
/**
The UnregisterKeystrokeNotify() function removes the
notification which was previously registered.
@ -602,6 +589,7 @@ EmuGopSimpleTextInExUnregisterKeyNotify (
IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
IN VOID *NotificationHandle
)
/*++
Routine Description:
@ -617,15 +605,15 @@ EmuGopSimpleTextInExUnregisterKeyNotify (
**/
{
GOP_PRIVATE_DATA *Private;
LIST_ENTRY *Link;
EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY *CurrentNotify;
GOP_PRIVATE_DATA *Private;
LIST_ENTRY *Link;
EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY *CurrentNotify;
if (NotificationHandle == NULL) {
return EFI_INVALID_PARAMETER;
}
if (((EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY *) NotificationHandle)->Signature != EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY_SIGNATURE) {
if (((EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY *)NotificationHandle)->Signature != EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY_SIGNATURE) {
return EFI_INVALID_PARAMETER;
}
@ -657,8 +645,6 @@ EmuGopSimpleTextInExUnregisterKeyNotify (
return EFI_INVALID_PARAMETER;
}
/**
Initialize SimplelTextIn and SimpleTextInEx protocols in the Private
context structure.
@ -670,7 +656,7 @@ EmuGopSimpleTextInExUnregisterKeyNotify (
**/
EFI_STATUS
EmuGopInitializeSimpleTextInForWindow (
IN GOP_PRIVATE_DATA *Private
IN GOP_PRIVATE_DATA *Private
)
{
EFI_STATUS Status;
@ -690,7 +676,6 @@ EmuGopInitializeSimpleTextInForWindow (
);
ASSERT_EFI_ERROR (Status);
//
// Initialize Simple Text In Ex
//
@ -714,21 +699,13 @@ EmuGopInitializeSimpleTextInForWindow (
);
ASSERT_EFI_ERROR (Status);
return Status;
}
//
// Simple Pointer implementation.
//
/**
Resets the pointer device hardware.
@ -744,13 +721,13 @@ EmuGopInitializeSimpleTextInForWindow (
EFI_STATUS
EFIAPI
EmuGopSimplePointerReset (
IN EFI_SIMPLE_POINTER_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
IN EFI_SIMPLE_POINTER_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
)
{
GOP_PRIVATE_DATA *Private;
EFI_SIMPLE_POINTER_STATE State;
EFI_TPL OldTpl;
GOP_PRIVATE_DATA *Private;
EFI_SIMPLE_POINTER_STATE State;
EFI_TPL OldTpl;
Private = GOP_PRIVATE_DATA_FROM_POINTER_MODE_THIS (This);
if (Private->EmuGraphicsWindow == NULL) {
@ -765,8 +742,8 @@ EmuGopSimplePointerReset (
//
// A reset is draining the Queue
//
while (Private->EmuGraphicsWindow->GetPointerState (Private->EmuGraphicsWindow, &State) == EFI_SUCCESS)
;
while (Private->EmuGraphicsWindow->GetPointerState (Private->EmuGraphicsWindow, &State) == EFI_SUCCESS) {
}
//
// Leave critical section and return
@ -775,7 +752,6 @@ EmuGopSimplePointerReset (
return EFI_SUCCESS;
}
/**
Retrieves the current state of a pointer device.
@ -793,8 +769,8 @@ EmuGopSimplePointerReset (
EFI_STATUS
EFIAPI
EmuGopSimplePointerGetState (
IN EFI_SIMPLE_POINTER_PROTOCOL *This,
IN OUT EFI_SIMPLE_POINTER_STATE *State
IN EFI_SIMPLE_POINTER_PROTOCOL *This,
IN OUT EFI_SIMPLE_POINTER_STATE *State
)
{
GOP_PRIVATE_DATA *Private;
@ -809,9 +785,9 @@ EmuGopSimplePointerGetState (
//
// Enter critical section
//
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
Status = Private->EmuGraphicsWindow->GetPointerState (Private->EmuGraphicsWindow, State);
Status = Private->EmuGraphicsWindow->GetPointerState (Private->EmuGraphicsWindow, State);
//
// Leave critical section and return
//
@ -820,7 +796,6 @@ EmuGopSimplePointerGetState (
return Status;
}
/**
SimplePointer Notify Wait Event
@ -831,15 +806,15 @@ EmuGopSimplePointerGetState (
VOID
EFIAPI
EmuGopSimplePointerWaitForInput (
IN EFI_EVENT Event,
IN VOID *Context
IN EFI_EVENT Event,
IN VOID *Context
)
{
GOP_PRIVATE_DATA *Private;
EFI_STATUS Status;
EFI_TPL OldTpl;
Private = (GOP_PRIVATE_DATA *) Context;
Private = (GOP_PRIVATE_DATA *)Context;
if (Private->EmuGraphicsWindow == NULL) {
return;
}
@ -847,22 +822,22 @@ EmuGopSimplePointerWaitForInput (
//
// Enter critical section
//
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
Status = Private->EmuGraphicsWindow->CheckPointer (Private->EmuGraphicsWindow);
Status = Private->EmuGraphicsWindow->CheckPointer (Private->EmuGraphicsWindow);
if (!EFI_ERROR (Status)) {
//
// If the pointer state has changed, signal our event.
//
gBS->SignalEvent (Event);
}
//
// Leave critical section and return
//
gBS->RestoreTPL (OldTpl);
}
/**
SimplePointer constructor
@ -873,7 +848,7 @@ EmuGopSimplePointerWaitForInput (
**/
EFI_STATUS
EmuGopInitializeSimplePointerForWindow (
IN GOP_PRIVATE_DATA *Private
IN GOP_PRIVATE_DATA *Private
)
{
EFI_STATUS Status;
@ -887,9 +862,9 @@ EmuGopInitializeSimplePointerForWindow (
Private->PointerMode.LeftButton = TRUE;
Private->PointerMode.RightButton = TRUE;
Private->SimplePointer.Reset = EmuGopSimplePointerReset;
Private->SimplePointer.GetState = EmuGopSimplePointerGetState;
Private->SimplePointer.Mode = &Private->PointerMode;
Private->SimplePointer.Reset = EmuGopSimplePointerReset;
Private->SimplePointer.GetState = EmuGopSimplePointerGetState;
Private->SimplePointer.Mode = &Private->PointerMode;
Status = gBS->CreateEvent (
EVT_NOTIFY_WAIT,

View File

@ -18,17 +18,15 @@ Abstract:
#include "Gop.h"
EFI_EVENT mGopScreenExitBootServicesEvent;
EFI_EVENT mGopScreenExitBootServicesEvent;
GOP_MODE_DATA mGopModeData[] = {
{ 800, 600, 0, 0 },
{ 640, 480, 0, 0 },
{ 720, 400, 0, 0 },
{1024, 768, 0, 0 },
{1280, 1024, 0, 0 }
};
GOP_MODE_DATA mGopModeData[] = {
{ 800, 600, 0, 0 },
{ 640, 480, 0, 0 },
{ 720, 400, 0, 0 },
{ 1024, 768, 0, 0 },
{ 1280, 1024, 0, 0 }
};
/**
Returns information for an available graphics mode that the graphics device
@ -59,7 +57,7 @@ EmuGopQuerytMode (
Private = GOP_PRIVATE_DATA_FROM_THIS (This);
if (Info == NULL || SizeOfInfo == NULL || (UINTN) ModeNumber >= This->Mode->MaxMode) {
if ((Info == NULL) || (SizeOfInfo == NULL) || ((UINTN)ModeNumber >= This->Mode->MaxMode)) {
return EFI_INVALID_PARAMETER;
}
@ -70,17 +68,15 @@ EmuGopQuerytMode (
*SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);
(*Info)->Version = 0;
(*Info)->Version = 0;
(*Info)->HorizontalResolution = Private->ModeData[ModeNumber].HorizontalResolution;
(*Info)->VerticalResolution = Private->ModeData[ModeNumber].VerticalResolution;
(*Info)->PixelFormat = PixelBltOnly;
(*Info)->PixelsPerScanLine = (*Info)->HorizontalResolution;
(*Info)->PixelFormat = PixelBltOnly;
(*Info)->PixelsPerScanLine = (*Info)->HorizontalResolution;
return EFI_SUCCESS;
}
/**
Set the video device into the specified mode and clears the visible portions of
the output display to black.
@ -100,10 +96,10 @@ EmuGopSetMode (
IN UINT32 ModeNumber
)
{
EFI_STATUS Status;
GOP_PRIVATE_DATA *Private;
GOP_MODE_DATA *ModeData;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL Fill;
EFI_STATUS Status;
GOP_PRIVATE_DATA *Private;
GOP_MODE_DATA *ModeData;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL Fill;
Private = GOP_PRIVATE_DATA_FROM_THIS (This);
@ -111,20 +107,20 @@ EmuGopSetMode (
return EFI_UNSUPPORTED;
}
ModeData = &Private->ModeData[ModeNumber];
This->Mode->Mode = ModeNumber;
ModeData = &Private->ModeData[ModeNumber];
This->Mode->Mode = ModeNumber;
Private->GraphicsOutput.Mode->Info->HorizontalResolution = ModeData->HorizontalResolution;
Private->GraphicsOutput.Mode->Info->VerticalResolution = ModeData->VerticalResolution;
Private->GraphicsOutput.Mode->Info->PixelsPerScanLine = ModeData->HorizontalResolution;
Private->GraphicsOutput.Mode->Info->VerticalResolution = ModeData->VerticalResolution;
Private->GraphicsOutput.Mode->Info->PixelsPerScanLine = ModeData->HorizontalResolution;
if (Private->HardwareNeedsStarting) {
Status = EmuGopStartWindow (
Private,
ModeData->HorizontalResolution,
ModeData->VerticalResolution,
ModeData->ColorDepth,
ModeData->RefreshRate
);
Private,
ModeData->HorizontalResolution,
ModeData->VerticalResolution,
ModeData->ColorDepth,
ModeData->RefreshRate
);
if (EFI_ERROR (Status)) {
return EFI_DEVICE_ERROR;
}
@ -132,13 +128,11 @@ EmuGopSetMode (
Private->HardwareNeedsStarting = FALSE;
}
Status = Private->EmuGraphicsWindow->Size(
Private->EmuGraphicsWindow,
ModeData->HorizontalResolution,
ModeData->VerticalResolution
);
Status = Private->EmuGraphicsWindow->Size (
Private->EmuGraphicsWindow,
ModeData->HorizontalResolution,
ModeData->VerticalResolution
);
Fill.Red = 0;
Fill.Green = 0;
@ -158,8 +152,6 @@ EmuGopSetMode (
return EFI_SUCCESS;
}
/**
Blt a rectangle of pixels on the graphics screen. Blt stands for BLock Transfer.
@ -183,22 +175,22 @@ EmuGopSetMode (
EFI_STATUS
EFIAPI
EmuGopBlt (
IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
IN 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 OPTIONAL
IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
IN 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 OPTIONAL
)
{
GOP_PRIVATE_DATA *Private;
EFI_TPL OriginalTPL;
EFI_STATUS Status;
EMU_GRAPHICS_WINDOWS__BLT_ARGS GopBltArgs;
GOP_PRIVATE_DATA *Private;
EFI_TPL OriginalTPL;
EFI_STATUS Status;
EMU_GRAPHICS_WINDOWS__BLT_ARGS GopBltArgs;
Private = GOP_PRIVATE_DATA_FROM_THIS (This);
@ -206,9 +198,10 @@ EmuGopBlt (
return EFI_INVALID_PARAMETER;
}
if (Width == 0 || Height == 0) {
if ((Width == 0) || (Height == 0)) {
return EFI_INVALID_PARAMETER;
}
//
// If Delta is zero, then the entire BltBuffer is being used, so Delta
// is the number of bytes in each row of BltBuffer. Since BltBuffer is Width pixels size,
@ -236,19 +229,18 @@ EmuGopBlt (
GopBltArgs.SourceX = SourceX;
GopBltArgs.SourceY = SourceY;
GopBltArgs.Delta = Delta;
Status = Private->EmuGraphicsWindow->Blt (
Private->EmuGraphicsWindow,
(EFI_UGA_PIXEL *)BltBuffer,
(EFI_UGA_BLT_OPERATION)BltOperation,
&GopBltArgs
);
Status = Private->EmuGraphicsWindow->Blt (
Private->EmuGraphicsWindow,
(EFI_UGA_PIXEL *)BltBuffer,
(EFI_UGA_BLT_OPERATION)BltOperation,
&GopBltArgs
);
gBS->RestoreTPL (OriginalTPL);
return Status;
}
//
// Construction and Destruction functions
//
@ -270,17 +262,16 @@ EmuGopSupported (
return EFI_SUCCESS;
}
EFI_STATUS
EmuGopStartWindow (
IN GOP_PRIVATE_DATA *Private,
IN UINT32 HorizontalResolution,
IN UINT32 VerticalResolution,
IN UINT32 ColorDepth,
IN UINT32 RefreshRate
IN GOP_PRIVATE_DATA *Private,
IN UINT32 HorizontalResolution,
IN UINT32 VerticalResolution,
IN UINT32 ColorDepth,
IN UINT32 RefreshRate
)
{
EFI_STATUS Status;
EFI_STATUS Status;
//
// Register to be notified on exit boot services so we can destroy the window.
@ -298,27 +289,28 @@ EmuGopStartWindow (
Private->EmuGraphicsWindow = Private->EmuIoThunk->Interface;
// Register callback to support RegisterKeyNotify()
Status = Private->EmuGraphicsWindow->RegisterKeyNotify (
Private->EmuGraphicsWindow,
GopPrivateMakeCallbackFunction,
GopPrivateBreakCallbackFunction,
Private
);
Status = Private->EmuGraphicsWindow->RegisterKeyNotify (
Private->EmuGraphicsWindow,
GopPrivateMakeCallbackFunction,
GopPrivateBreakCallbackFunction,
Private
);
ASSERT_EFI_ERROR (Status);
}
return Status;
}
EFI_STATUS
EmuGopConstructor (
GOP_PRIVATE_DATA *Private
GOP_PRIVATE_DATA *Private
)
{
Private->ModeData = mGopModeData;
Private->GraphicsOutput.QueryMode = EmuGopQuerytMode;
Private->GraphicsOutput.SetMode = EmuGopSetMode;
Private->GraphicsOutput.Blt = EmuGopBlt;
Private->GraphicsOutput.QueryMode = EmuGopQuerytMode;
Private->GraphicsOutput.SetMode = EmuGopSetMode;
Private->GraphicsOutput.Blt = EmuGopBlt;
//
// Allocate buffer for Graphics Output Protocol mode information
@ -327,26 +319,27 @@ EmuGopConstructor (
if (Private->GraphicsOutput.Mode == NULL) {
return EFI_OUT_OF_RESOURCES;
}
Private->GraphicsOutput.Mode->Info = AllocatePool (sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION));
if (Private->GraphicsOutput.Mode->Info == NULL) {
return EFI_OUT_OF_RESOURCES;
}
Private->GraphicsOutput.Mode->MaxMode = sizeof(mGopModeData) / sizeof(GOP_MODE_DATA);
Private->GraphicsOutput.Mode->MaxMode = sizeof (mGopModeData) / sizeof (GOP_MODE_DATA);
//
// Till now, we have no idea about the window size.
//
Private->GraphicsOutput.Mode->Mode = GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER;
Private->GraphicsOutput.Mode->Info->Version = 0;
Private->GraphicsOutput.Mode->Mode = GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER;
Private->GraphicsOutput.Mode->Info->Version = 0;
Private->GraphicsOutput.Mode->Info->HorizontalResolution = 0;
Private->GraphicsOutput.Mode->Info->VerticalResolution = 0;
Private->GraphicsOutput.Mode->Info->PixelFormat = PixelBltOnly;
Private->GraphicsOutput.Mode->SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);
Private->GraphicsOutput.Mode->FrameBufferBase = (EFI_PHYSICAL_ADDRESS) (UINTN) NULL;
Private->GraphicsOutput.Mode->FrameBufferSize = 0;
Private->GraphicsOutput.Mode->Info->VerticalResolution = 0;
Private->GraphicsOutput.Mode->Info->PixelFormat = PixelBltOnly;
Private->GraphicsOutput.Mode->SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);
Private->GraphicsOutput.Mode->FrameBufferBase = (EFI_PHYSICAL_ADDRESS)(UINTN)NULL;
Private->GraphicsOutput.Mode->FrameBufferSize = 0;
Private->HardwareNeedsStarting = TRUE;
Private->EmuGraphicsWindow = NULL;
Private->HardwareNeedsStarting = TRUE;
Private->EmuGraphicsWindow = NULL;
EmuGopInitializeSimpleTextInForWindow (Private);
@ -355,11 +348,9 @@ EmuGopConstructor (
return EFI_SUCCESS;
}
EFI_STATUS
EmuGopDestructor (
GOP_PRIVATE_DATA *Private
GOP_PRIVATE_DATA *Private
)
{
if (!Private->HardwareNeedsStarting) {
@ -374,19 +365,20 @@ EmuGopDestructor (
if (Private->GraphicsOutput.Mode->Info != NULL) {
FreePool (Private->GraphicsOutput.Mode->Info);
}
FreePool (Private->GraphicsOutput.Mode);
}
return EFI_SUCCESS;
}
VOID
EFIAPI
ShutdownGopEvent (
IN EFI_EVENT Event,
IN VOID *Context
)
/*++
Routine Description:

View File

@ -21,11 +21,11 @@ EmuSimpleFileSystemComponentNameGetDriverName (
EFI_STATUS
EFIAPI
EmuSimpleFileSystemComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
);
//
@ -43,7 +43,7 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gEmuSimpleFileSystem
"en"
};
EFI_UNICODE_STRING_TABLE mEmuSimpleFileSystemDriverNameTable[] = {
EFI_UNICODE_STRING_TABLE mEmuSimpleFileSystemDriverNameTable[] = {
{
"eng;en",
L"Emu Simple File System Driver"
@ -102,15 +102,14 @@ EmuSimpleFileSystemComponentNameGetDriverName (
)
{
return LookupUnicodeString2 (
Language,
This->SupportedLanguages,
mEmuSimpleFileSystemDriverNameTable,
DriverName,
(BOOLEAN)(This == &gEmuSimpleFileSystemComponentName)
);
Language,
This->SupportedLanguages,
mEmuSimpleFileSystemDriverNameTable,
DriverName,
(BOOLEAN)(This == &gEmuSimpleFileSystemComponentName)
);
}
/**
Retrieves a Unicode string that is the user readable name of the controller
that is being managed by a driver.
@ -182,16 +181,16 @@ EmuSimpleFileSystemComponentNameGetDriverName (
EFI_STATUS
EFIAPI
EmuSimpleFileSystemComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
)
{
EFI_STATUS Status;
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *SimpleFileSystem;
EMU_SIMPLE_FILE_SYSTEM_PRIVATE *Private;
EFI_STATUS Status;
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *SimpleFileSystem;
EMU_SIMPLE_FILE_SYSTEM_PRIVATE *Private;
//
// This is a device driver, so ChildHandle must be NULL.
@ -211,13 +210,14 @@ EmuSimpleFileSystemComponentNameGetControllerName (
if (EFI_ERROR (Status)) {
return EFI_UNSUPPORTED;
}
//
// Get our context back
//
Status = gBS->OpenProtocol (
ControllerHandle,
&gEfiSimpleFileSystemProtocolGuid,
(VOID**)&SimpleFileSystem,
(VOID **)&SimpleFileSystem,
gEmuSimpleFileSystemDriverBinding.DriverBindingHandle,
ControllerHandle,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@ -229,10 +229,10 @@ EmuSimpleFileSystemComponentNameGetControllerName (
Private = EMU_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS (SimpleFileSystem);
return LookupUnicodeString2 (
Language,
This->SupportedLanguages,
Private->ControllerNameTable,
ControllerName,
(BOOLEAN)(This == &gEmuSimpleFileSystemComponentName)
);
Language,
This->SupportedLanguages,
Private->ControllerNameTable,
ControllerName,
(BOOLEAN)(This == &gEmuSimpleFileSystemComponentName)
);
}

View File

@ -12,9 +12,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "EmuSimpleFileSystem.h"
/**
Opens a new file relative to the source file's location.
@ -38,44 +35,44 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
EFI_STATUS
EFIAPI
EmuSimpleFileSystemOpen (
IN EFI_FILE_PROTOCOL *This,
OUT EFI_FILE_PROTOCOL **NewHandle,
IN CHAR16 *FileName,
IN UINT64 OpenMode,
IN UINT64 Attributes
IN EFI_FILE_PROTOCOL *This,
OUT EFI_FILE_PROTOCOL **NewHandle,
IN CHAR16 *FileName,
IN UINT64 OpenMode,
IN UINT64 Attributes
)
{
EFI_STATUS Status;
EFI_TPL OldTpl;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EMU_EFI_FILE_PRIVATE *NewPrivateFile;
EFI_STATUS Status;
EFI_TPL OldTpl;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EMU_EFI_FILE_PRIVATE *NewPrivateFile;
//
// Check for obvious invalid parameters.
//
if (This == NULL || NewHandle == NULL || FileName == NULL) {
if ((This == NULL) || (NewHandle == NULL) || (FileName == NULL)) {
return EFI_INVALID_PARAMETER;
}
switch (OpenMode) {
case EFI_FILE_MODE_CREATE | EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE:
if (Attributes &~EFI_FILE_VALID_ATTR) {
case EFI_FILE_MODE_CREATE | EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE:
if (Attributes &~EFI_FILE_VALID_ATTR) {
return EFI_INVALID_PARAMETER;
}
if (Attributes & EFI_FILE_READ_ONLY) {
return EFI_INVALID_PARAMETER;
}
//
// fall through
//
case EFI_FILE_MODE_READ:
case EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE:
break;
default:
return EFI_INVALID_PARAMETER;
}
if (Attributes & EFI_FILE_READ_ONLY) {
return EFI_INVALID_PARAMETER;
}
//
// fall through
//
case EFI_FILE_MODE_READ:
case EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE:
break;
default:
return EFI_INVALID_PARAMETER;
}
OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
@ -88,7 +85,6 @@ EmuSimpleFileSystemOpen (
goto Done;
}
Status = PrivateFile->Io->Open (PrivateFile->Io, &NewPrivateFile->Io, FileName, OpenMode, Attributes);
if (!EFI_ERROR (Status)) {
*NewHandle = &NewPrivateFile->EfiFile;
@ -103,8 +99,6 @@ Done:
return Status;
}
/**
Close the file handle
@ -119,9 +113,9 @@ EmuSimpleFileSystemClose (
IN EFI_FILE_PROTOCOL *This
)
{
EFI_STATUS Status;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EFI_TPL OldTpl;
EFI_STATUS Status;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EFI_TPL OldTpl;
if (This == NULL) {
return EFI_INVALID_PARAMETER;
@ -141,7 +135,6 @@ EmuSimpleFileSystemClose (
return Status;
}
/**
Close and delete the file handle.
@ -157,9 +150,9 @@ EmuSimpleFileSystemDelete (
IN EFI_FILE_PROTOCOL *This
)
{
EFI_STATUS Status;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EFI_TPL OldTpl;
EFI_STATUS Status;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EFI_TPL OldTpl;
if (This == NULL) {
return EFI_INVALID_PARAMETER;
@ -179,7 +172,6 @@ EmuSimpleFileSystemDelete (
return Status;
}
/**
Read data from the file.
@ -202,11 +194,11 @@ EmuSimpleFileSystemRead (
OUT VOID *Buffer
)
{
EFI_STATUS Status;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EFI_TPL OldTpl;
EFI_STATUS Status;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EFI_TPL OldTpl;
if (This == NULL || BufferSize == NULL) {
if ((This == NULL) || (BufferSize == NULL)) {
return EFI_INVALID_PARAMETER;
}
@ -225,7 +217,6 @@ EmuSimpleFileSystemRead (
return Status;
}
/**
Write data to a file.
@ -253,10 +244,10 @@ EmuSimpleFileSystemWrite (
)
{
EFI_STATUS Status;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EFI_TPL OldTpl;
if (This == NULL || BufferSize == NULL || Buffer == NULL) {
if ((This == NULL) || (BufferSize == NULL) || (Buffer == NULL)) {
return EFI_INVALID_PARAMETER;
}
@ -270,7 +261,6 @@ EmuSimpleFileSystemWrite (
return Status;
}
/**
Get a file's current position
@ -284,21 +274,21 @@ EmuSimpleFileSystemWrite (
EFI_STATUS
EFIAPI
EmuSimpleFileSystemGetPosition (
IN EFI_FILE_PROTOCOL *This,
OUT UINT64 *Position
IN EFI_FILE_PROTOCOL *This,
OUT UINT64 *Position
)
{
EFI_STATUS Status;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EFI_TPL OldTpl;
if (This == NULL || Position == NULL) {
if ((This == NULL) || (Position == NULL)) {
return EFI_INVALID_PARAMETER;
}
OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This);
PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This);
Status = PrivateFile->Io->GetPosition (PrivateFile->Io, Position);
@ -306,8 +296,6 @@ EmuSimpleFileSystemGetPosition (
return Status;
}
/**
Set file's current position
@ -325,9 +313,9 @@ EmuSimpleFileSystemSetPosition (
IN UINT64 Position
)
{
EFI_STATUS Status;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EFI_TPL OldTpl;
EFI_STATUS Status;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EFI_TPL OldTpl;
if (This == NULL) {
return EFI_INVALID_PARAMETER;
@ -343,7 +331,6 @@ EmuSimpleFileSystemSetPosition (
return Status;
}
/**
Get information about a file.
@ -371,11 +358,11 @@ EmuSimpleFileSystemGetInfo (
OUT VOID *Buffer
)
{
EFI_STATUS Status;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EFI_TPL OldTpl;
EFI_STATUS Status;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EFI_TPL OldTpl;
if (This == NULL || InformationType == NULL || BufferSize == NULL) {
if ((This == NULL) || (InformationType == NULL) || (BufferSize == NULL)) {
return EFI_INVALID_PARAMETER;
}
@ -389,7 +376,6 @@ EmuSimpleFileSystemGetInfo (
return Status;
}
/**
Set information about a file
@ -410,26 +396,26 @@ EmuSimpleFileSystemGetInfo (
EFI_STATUS
EFIAPI
EmuSimpleFileSystemSetInfo (
IN EFI_FILE_PROTOCOL*This,
IN EFI_GUID *InformationType,
IN UINTN BufferSize,
IN VOID *Buffer
IN EFI_FILE_PROTOCOL *This,
IN EFI_GUID *InformationType,
IN UINTN BufferSize,
IN VOID *Buffer
)
{
EFI_STATUS Status;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EFI_TPL OldTpl;
EFI_STATUS Status;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EFI_TPL OldTpl;
//
// Check for invalid parameters.
//
if (This == NULL || InformationType == NULL || BufferSize == 0 || Buffer == NULL) {
if ((This == NULL) || (InformationType == NULL) || (BufferSize == 0) || (Buffer == NULL)) {
return EFI_INVALID_PARAMETER;
}
OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This);
PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This);
Status = PrivateFile->Io->SetInfo (PrivateFile->Io, InformationType, BufferSize, Buffer);
@ -437,7 +423,6 @@ EmuSimpleFileSystemSetInfo (
return Status;
}
/**
Flush data back for the file handle.
@ -459,9 +444,9 @@ EmuSimpleFileSystemFlush (
IN EFI_FILE_PROTOCOL *This
)
{
EFI_STATUS Status;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EFI_TPL OldTpl;
EFI_STATUS Status;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EFI_TPL OldTpl;
if (This == NULL) {
return EFI_INVALID_PARAMETER;
@ -477,8 +462,6 @@ EmuSimpleFileSystemFlush (
return Status;
}
/**
Open the root directory on a volume.
@ -501,14 +484,14 @@ EmuSimpleFileSystemOpenVolume (
OUT EFI_FILE_PROTOCOL **Root
)
{
EFI_STATUS Status;
EMU_SIMPLE_FILE_SYSTEM_PRIVATE *Private;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EFI_TPL OldTpl;
EFI_STATUS Status;
EMU_SIMPLE_FILE_SYSTEM_PRIVATE *Private;
EMU_EFI_FILE_PRIVATE *PrivateFile;
EFI_TPL OldTpl;
Status = EFI_UNSUPPORTED;
if (This == NULL || Root == NULL) {
if ((This == NULL) || (Root == NULL)) {
return EFI_INVALID_PARAMETER;
}
@ -522,22 +505,22 @@ EmuSimpleFileSystemOpenVolume (
goto Done;
}
PrivateFile->Signature = EMU_EFI_FILE_PRIVATE_SIGNATURE;
PrivateFile->IoThunk = Private->IoThunk;
PrivateFile->SimpleFileSystem = This;
PrivateFile->Signature = EMU_EFI_FILE_PRIVATE_SIGNATURE;
PrivateFile->IoThunk = Private->IoThunk;
PrivateFile->SimpleFileSystem = This;
ZeroMem (&PrivateFile->EfiFile, sizeof (PrivateFile->EfiFile));
PrivateFile->EfiFile.Revision = EFI_FILE_PROTOCOL_REVISION;
PrivateFile->EfiFile.Open = EmuSimpleFileSystemOpen;
PrivateFile->EfiFile.Close = EmuSimpleFileSystemClose;
PrivateFile->EfiFile.Delete = EmuSimpleFileSystemDelete;
PrivateFile->EfiFile.Read = EmuSimpleFileSystemRead;
PrivateFile->EfiFile.Write = EmuSimpleFileSystemWrite;
PrivateFile->EfiFile.GetPosition = EmuSimpleFileSystemGetPosition;
PrivateFile->EfiFile.SetPosition = EmuSimpleFileSystemSetPosition;
PrivateFile->EfiFile.GetInfo = EmuSimpleFileSystemGetInfo;
PrivateFile->EfiFile.SetInfo = EmuSimpleFileSystemSetInfo;
PrivateFile->EfiFile.Flush = EmuSimpleFileSystemFlush;
PrivateFile->EfiFile.Revision = EFI_FILE_PROTOCOL_REVISION;
PrivateFile->EfiFile.Open = EmuSimpleFileSystemOpen;
PrivateFile->EfiFile.Close = EmuSimpleFileSystemClose;
PrivateFile->EfiFile.Delete = EmuSimpleFileSystemDelete;
PrivateFile->EfiFile.Read = EmuSimpleFileSystemRead;
PrivateFile->EfiFile.Write = EmuSimpleFileSystemWrite;
PrivateFile->EfiFile.GetPosition = EmuSimpleFileSystemGetPosition;
PrivateFile->EfiFile.SetPosition = EmuSimpleFileSystemSetPosition;
PrivateFile->EfiFile.GetInfo = EmuSimpleFileSystemGetInfo;
PrivateFile->EfiFile.SetInfo = EmuSimpleFileSystemSetInfo;
PrivateFile->EfiFile.Flush = EmuSimpleFileSystemFlush;
*Root = &PrivateFile->EfiFile;
@ -562,7 +545,6 @@ EmuSimpleFileSystemOpenVolume (
FALSE
);
Done:
if (EFI_ERROR (Status)) {
if (PrivateFile) {
@ -627,7 +609,7 @@ EmuSimpleFileSystemDriverBindingSupported (
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
)
{
EFI_STATUS Status;
EFI_STATUS Status;
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
//
@ -657,17 +639,15 @@ EmuSimpleFileSystemDriverBindingSupported (
// Close the I/O Abstraction(s) used to perform the supported test
//
gBS->CloseProtocol (
ControllerHandle,
&gEmuIoThunkProtocolGuid,
This->DriverBindingHandle,
ControllerHandle
);
ControllerHandle,
&gEmuIoThunkProtocolGuid,
This->DriverBindingHandle,
ControllerHandle
);
return Status;
}
/**
Starts a device controller or a bus controller.
@ -706,14 +686,14 @@ EmuSimpleFileSystemDriverBindingSupported (
EFI_STATUS
EFIAPI
EmuSimpleFileSystemDriverBindingStart (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
)
{
EFI_STATUS Status;
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
EMU_SIMPLE_FILE_SYSTEM_PRIVATE *Private;
EFI_STATUS Status;
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
EMU_SIMPLE_FILE_SYSTEM_PRIVATE *Private;
Private = NULL;
@ -755,8 +735,8 @@ EmuSimpleFileSystemDriverBindingStart (
Private->IoThunk = EmuIoThunk;
Private->Io = EmuIoThunk->Interface;
Private->SimpleFileSystem.Revision = EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION;
Private->SimpleFileSystem.OpenVolume = EmuSimpleFileSystemOpenVolume;
Private->SimpleFileSystem.Revision = EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION;
Private->SimpleFileSystem.OpenVolume = EmuSimpleFileSystemOpenVolume;
Private->ControllerNameTable = NULL;
@ -778,7 +758,8 @@ EmuSimpleFileSystemDriverBindingStart (
Status = gBS->InstallMultipleProtocolInterfaces (
&ControllerHandle,
&gEfiSimpleFileSystemProtocolGuid, &Private->SimpleFileSystem,
&gEfiSimpleFileSystemProtocolGuid,
&Private->SimpleFileSystem,
NULL
);
@ -790,21 +771,19 @@ Done:
}
gBS->FreePool (Private);
}
gBS->CloseProtocol (
ControllerHandle,
&gEmuIoThunkProtocolGuid,
This->DriverBindingHandle,
ControllerHandle
);
ControllerHandle,
&gEmuIoThunkProtocolGuid,
This->DriverBindingHandle,
ControllerHandle
);
}
return Status;
}
/**
Stops a device controller or a bus controller.
@ -840,9 +819,9 @@ EmuSimpleFileSystemDriverBindingStop (
IN EFI_HANDLE *ChildHandleBuffer
)
{
EFI_STATUS Status;
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *SimpleFileSystem;
EMU_SIMPLE_FILE_SYSTEM_PRIVATE *Private;
EFI_STATUS Status;
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *SimpleFileSystem;
EMU_SIMPLE_FILE_SYSTEM_PRIVATE *Private;
//
// Get our context back
@ -866,7 +845,8 @@ EmuSimpleFileSystemDriverBindingStop (
//
Status = gBS->UninstallMultipleProtocolInterfaces (
ControllerHandle,
&gEfiSimpleFileSystemProtocolGuid, &Private->SimpleFileSystem,
&gEfiSimpleFileSystemProtocolGuid,
&Private->SimpleFileSystem,
NULL
);
if (!EFI_ERROR (Status)) {
@ -892,8 +872,7 @@ EmuSimpleFileSystemDriverBindingStop (
return Status;
}
EFI_DRIVER_BINDING_PROTOCOL gEmuSimpleFileSystemDriverBinding = {
EFI_DRIVER_BINDING_PROTOCOL gEmuSimpleFileSystemDriverBinding = {
EmuSimpleFileSystemDriverBindingSupported,
EmuSimpleFileSystemDriverBindingStart,
EmuSimpleFileSystemDriverBindingStop,
@ -902,9 +881,6 @@ EFI_DRIVER_BINDING_PROTOCOL gEmuSimpleFileSystemDriverBinding = {
NULL
};
/**
The user Entry Point for module EmuSimpleFileSystem. The user code starts with this function.
@ -917,12 +893,12 @@ EFI_DRIVER_BINDING_PROTOCOL gEmuSimpleFileSystemDriverBinding = {
**/
EFI_STATUS
EFIAPI
InitializeEmuSimpleFileSystem(
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
InitializeEmuSimpleFileSystem (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;
EFI_STATUS Status;
Status = EfiLibInstallDriverBindingComponentName2 (
ImageHandle,

View File

@ -30,19 +30,18 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Library/MemoryAllocationLib.h>
#include <Library/UefiBootServicesTableLib.h>
extern EFI_DRIVER_BINDING_PROTOCOL gEmuSimpleFileSystemDriverBinding;
extern EFI_COMPONENT_NAME_PROTOCOL gEmuSimpleFileSystemComponentName;
extern EFI_COMPONENT_NAME2_PROTOCOL gEmuSimpleFileSystemComponentName2;
extern EFI_DRIVER_BINDING_PROTOCOL gEmuSimpleFileSystemDriverBinding;
extern EFI_COMPONENT_NAME_PROTOCOL gEmuSimpleFileSystemComponentName;
extern EFI_COMPONENT_NAME2_PROTOCOL gEmuSimpleFileSystemComponentName2;
#define EMU_SIMPLE_FILE_SYSTEM_PRIVATE_SIGNATURE SIGNATURE_32 ('E', 'M', 'f', 's')
#define EMU_SIMPLE_FILE_SYSTEM_PRIVATE_SIGNATURE SIGNATURE_32 ('E', 'M', 'f', 's')
typedef struct {
UINTN Signature;
EMU_IO_THUNK_PROTOCOL *IoThunk;
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL SimpleFileSystem;
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *Io;
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
UINTN Signature;
EMU_IO_THUNK_PROTOCOL *IoThunk;
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL SimpleFileSystem;
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *Io;
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
} EMU_SIMPLE_FILE_SYSTEM_PRIVATE;
#define EMU_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS(a) \
@ -52,14 +51,14 @@ typedef struct {
EMU_SIMPLE_FILE_SYSTEM_PRIVATE_SIGNATURE \
)
#define EMU_EFI_FILE_PRIVATE_SIGNATURE SIGNATURE_32 ('e', 'm', 'f', 's')
#define EMU_EFI_FILE_PRIVATE_SIGNATURE SIGNATURE_32 ('e', 'm', 'f', 's')
typedef struct {
UINTN Signature;
EMU_IO_THUNK_PROTOCOL *IoThunk;
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *SimpleFileSystem;
EFI_FILE_PROTOCOL EfiFile;
EFI_FILE_PROTOCOL *Io;
UINTN Signature;
EMU_IO_THUNK_PROTOCOL *IoThunk;
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *SimpleFileSystem;
EFI_FILE_PROTOCOL EfiFile;
EFI_FILE_PROTOCOL *Io;
} EMU_EFI_FILE_PRIVATE;
#define EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS(a) \
@ -69,6 +68,4 @@ typedef struct {
EMU_EFI_FILE_PRIVATE_SIGNATURE \
)
#endif

View File

@ -17,6 +17,7 @@ Abstract:
//
// EFI Component Name Functions
//
/**
Retrieves a Unicode string that is the user readable name of the driver.
@ -64,7 +65,6 @@ EmuSnpDriverComponentNameGetDriverName (
OUT CHAR16 **DriverName
);
/**
Retrieves a Unicode string that is the user readable name of the controller
that is being managed by a driver.
@ -136,14 +136,13 @@ EmuSnpDriverComponentNameGetDriverName (
EFI_STATUS
EFIAPI
EmuSnpDriverComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
);
//
// EFI Component Name Protocol
//
@ -156,14 +155,13 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gEmuSnpDriverComponen
//
// EFI Component Name 2 Protocol
//
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gEmuSnpDriverComponentName2 = {
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME) EmuSnpDriverComponentNameGetDriverName,
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) EmuSnpDriverComponentNameGetControllerName,
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gEmuSnpDriverComponentName2 = {
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME)EmuSnpDriverComponentNameGetDriverName,
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)EmuSnpDriverComponentNameGetControllerName,
"en"
};
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mEmuSnpDriverNameTable[] = {
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mEmuSnpDriverNameTable[] = {
{
"eng;en",
L"Emu SNP Driver"
@ -301,11 +299,11 @@ EmuSnpDriverComponentNameGetDriverName (
EFI_STATUS
EFIAPI
EmuSnpDriverComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
)
{
return EFI_UNSUPPORTED;

View File

@ -15,9 +15,7 @@ Abstract:
#include "EmuSnpDxe.h"
EFI_SIMPLE_NETWORK_PROTOCOL gEmuSnpTemplate = {
EFI_SIMPLE_NETWORK_PROTOCOL gEmuSnpTemplate = {
EFI_SIMPLE_NETWORK_PROTOCOL_REVISION,
EmuSnpStart,
EmuSnpStop,
@ -34,9 +32,9 @@ EFI_SIMPLE_NETWORK_PROTOCOL gEmuSnpTemplate = {
EmuSnpReceive,
NULL, // WaitForPacket
NULL // Mode
};
};
EFI_SIMPLE_NETWORK_MODE gEmuSnpModeTemplate = {
EFI_SIMPLE_NETWORK_MODE gEmuSnpModeTemplate = {
EfiSimpleNetworkStopped, // State
NET_ETHER_ADDR_LEN, // HwAddressSize
NET_ETHER_HEADER_SIZE, // MediaHeaderSize
@ -48,7 +46,9 @@ EFI_SIMPLE_NETWORK_MODE gEmuSnpModeTemplate = {
MAX_MCAST_FILTER_CNT, // MaxMCastFilterCount
0, // MCastFilterCount
{
{ { 0 } }
{
{ 0 }
}
}, // MCastFilter
{
{ 0 }
@ -66,7 +66,6 @@ EFI_SIMPLE_NETWORK_MODE gEmuSnpModeTemplate = {
TRUE // MediaPresent
};
/**
Changes the state of a network interface from "stopped" to "started".
@ -77,12 +76,12 @@ EFI_SIMPLE_NETWORK_MODE gEmuSnpModeTemplate = {
**/
EFI_STATUS
EFIAPI
EmuSnpStart(
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
EmuSnpStart (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
)
{
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
@ -90,7 +89,6 @@ EmuSnpStart(
return Status;
}
/**
Changes the state of a network interface from "started" to "stopped".
@ -102,11 +100,11 @@ EmuSnpStart(
EFI_STATUS
EFIAPI
EmuSnpStop (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
)
{
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
@ -114,7 +112,6 @@ EmuSnpStop (
return Status;
}
/**
Resets a network adapter and allocates the transmit and receive buffers
required by the network interface; optionally, also requests allocation
@ -138,13 +135,13 @@ EmuSnpStop (
EFI_STATUS
EFIAPI
EmuSnpInitialize (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN UINTN ExtraRxBufferSize OPTIONAL,
IN UINTN ExtraTxBufferSize OPTIONAL
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN UINTN ExtraRxBufferSize OPTIONAL,
IN UINTN ExtraTxBufferSize OPTIONAL
)
{
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
@ -167,12 +164,12 @@ EmuSnpInitialize (
EFI_STATUS
EFIAPI
EmuSnpReset (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
)
{
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
@ -192,11 +189,11 @@ EmuSnpReset (
EFI_STATUS
EFIAPI
EmuSnpShutdown (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
)
{
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
@ -228,16 +225,16 @@ EmuSnpShutdown (
EFI_STATUS
EFIAPI
EmuSnpReceiveFilters (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN UINT32 EnableBits,
IN UINT32 DisableBits,
IN BOOLEAN ResetMcastFilter,
IN UINTN McastFilterCount OPTIONAL,
IN EFI_MAC_ADDRESS *McastFilter OPTIONAL
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN UINT32 EnableBits,
IN UINT32 DisableBits,
IN BOOLEAN ResetMcastFilter,
IN UINTN McastFilterCount OPTIONAL,
IN EFI_MAC_ADDRESS *McastFilter OPTIONAL
)
{
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
@ -266,13 +263,13 @@ EmuSnpReceiveFilters (
EFI_STATUS
EFIAPI
EmuSnpStationAddress (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN Reset,
IN EFI_MAC_ADDRESS *NewMacAddr OPTIONAL
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN Reset,
IN EFI_MAC_ADDRESS *NewMacAddr OPTIONAL
)
{
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
@ -302,14 +299,14 @@ EmuSnpStationAddress (
EFI_STATUS
EFIAPI
EmuSnpStatistics (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN Reset,
IN OUT UINTN *StatisticsSize OPTIONAL,
OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN Reset,
IN OUT UINTN *StatisticsSize OPTIONAL,
OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL
)
{
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
@ -339,14 +336,14 @@ EmuSnpStatistics (
EFI_STATUS
EFIAPI
EmuSnpMcastIptoMac (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN Ipv6,
IN EFI_IP_ADDRESS *Ip,
OUT EFI_MAC_ADDRESS *Mac
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN Ipv6,
IN EFI_IP_ADDRESS *Ip,
OUT EFI_MAC_ADDRESS *Mac
)
{
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
@ -354,7 +351,6 @@ EmuSnpMcastIptoMac (
return Status;
}
/**
Performs read and write operations on the NVRAM device attached to a
network interface.
@ -374,15 +370,15 @@ EmuSnpMcastIptoMac (
EFI_STATUS
EFIAPI
EmuSnpNvdata (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN ReadOrWrite,
IN UINTN Offset,
IN UINTN BufferSize,
IN OUT VOID *Buffer
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN ReadOrWrite,
IN UINTN Offset,
IN UINTN BufferSize,
IN OUT VOID *Buffer
)
{
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
@ -390,7 +386,6 @@ EmuSnpNvdata (
return Status;
}
/**
Reads the current interrupt status and recycled transmit buffer status from
a network interface.
@ -415,13 +410,13 @@ EmuSnpNvdata (
EFI_STATUS
EFIAPI
EmuSnpGetStatus (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
OUT UINT32 *InterruptStatus,
OUT VOID **TxBuffer
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
OUT UINT32 *InterruptStatus,
OUT VOID **TxBuffer
)
{
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
@ -429,7 +424,6 @@ EmuSnpGetStatus (
return Status;
}
/**
Places a packet in the transmit queue of a network interface.
@ -463,17 +457,17 @@ EmuSnpGetStatus (
EFI_STATUS
EFIAPI
EmuSnpTransmit (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN UINTN HeaderSize,
IN UINTN BufferSize,
IN VOID* Buffer,
IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
IN EFI_MAC_ADDRESS *DestAddr OPTIONAL,
IN UINT16 *Protocol OPTIONAL
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN UINTN HeaderSize,
IN UINTN BufferSize,
IN VOID *Buffer,
IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
IN EFI_MAC_ADDRESS *DestAddr OPTIONAL,
IN UINT16 *Protocol OPTIONAL
)
{
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
@ -522,17 +516,17 @@ EmuSnpTransmit (
EFI_STATUS
EFIAPI
EmuSnpReceive (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
OUT UINTN *HeaderSize OPTIONAL,
IN OUT UINTN *BuffSize,
OUT VOID *Buffer,
OUT EFI_MAC_ADDRESS *SourceAddr OPTIONAL,
OUT EFI_MAC_ADDRESS *DestinationAddr OPTIONAL,
OUT UINT16 *Protocol OPTIONAL
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
OUT UINTN *HeaderSize OPTIONAL,
IN OUT UINTN *BuffSize,
OUT VOID *Buffer,
OUT EFI_MAC_ADDRESS *SourceAddr OPTIONAL,
OUT EFI_MAC_ADDRESS *DestinationAddr OPTIONAL,
OUT UINT16 *Protocol OPTIONAL
)
{
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This);
@ -548,8 +542,6 @@ EmuSnpReceive (
return Status;
}
/**
Test to see if this driver supports ControllerHandle. This service
is called by the EFI boot service ConnectController(). In
@ -583,15 +575,15 @@ EmuSnpDriverBindingSupported (
if (RemainingDevicePath != NULL) {
if (!IsDevicePathEnd (RemainingDevicePath)) {
Node = (MAC_ADDR_DEVICE_PATH *)RemainingDevicePath;
if (Node->Header.Type != MESSAGING_DEVICE_PATH ||
Node->Header.SubType != MSG_MAC_ADDR_DP) {
if ((Node->Header.Type != MESSAGING_DEVICE_PATH) ||
(Node->Header.SubType != MSG_MAC_ADDR_DP))
{
// If the remaining device path does not match we don't support the request
return EFI_UNSUPPORTED;
}
}
}
//
// Open the IO Abstraction(s) needed to perform the supported test
//
@ -611,12 +603,11 @@ EmuSnpDriverBindingSupported (
// Close the I/O Abstraction(s) used to perform the supported test
//
gBS->CloseProtocol (
ControllerHandle,
&gEmuIoThunkProtocolGuid,
This->DriverBindingHandle,
ControllerHandle
);
ControllerHandle,
&gEmuIoThunkProtocolGuid,
This->DriverBindingHandle,
ControllerHandle
);
//
// Open the EFI Device Path protocol needed to perform the supported test
@ -624,7 +615,7 @@ EmuSnpDriverBindingSupported (
Status = gBS->OpenProtocol (
ControllerHandle,
&gEfiDevicePathProtocolGuid,
(VOID **) &ParentDevicePath,
(VOID **)&ParentDevicePath,
This->DriverBindingHandle,
ControllerHandle,
EFI_OPEN_PROTOCOL_BY_DRIVER
@ -649,16 +640,15 @@ EmuSnpDriverBindingSupported (
// Close protocol, don't use device path protocol in the Support() function
//
gBS->CloseProtocol (
ControllerHandle,
&gEfiDevicePathProtocolGuid,
This->DriverBindingHandle,
ControllerHandle
);
ControllerHandle,
&gEfiDevicePathProtocolGuid,
This->DriverBindingHandle,
ControllerHandle
);
return Status;
}
/**
Start this driver on ControllerHandle. This service is called by the
EFI boot service ConnectController(). In order to make
@ -683,21 +673,21 @@ EmuSnpDriverBindingStart (
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
)
{
EFI_STATUS Status;
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
EMU_SNP_PRIVATE_DATA *Private;
MAC_ADDR_DEVICE_PATH Node;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
EFI_STATUS Status;
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
EMU_SNP_PRIVATE_DATA *Private;
MAC_ADDR_DEVICE_PATH Node;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
Private = NULL;
//
// Grab the protocols we need
//
Status = gBS->OpenProtocol(
Status = gBS->OpenProtocol (
ControllerHandle,
&gEfiDevicePathProtocolGuid,
( VOID ** ) &ParentDevicePath,
(VOID **)&ParentDevicePath,
This->DriverBindingHandle,
ControllerHandle,
EFI_OPEN_PROTOCOL_BY_DRIVER
@ -739,15 +729,14 @@ EmuSnpDriverBindingStart (
CopyMem (&Private->Snp, &gEmuSnpTemplate, sizeof (EFI_SIMPLE_NETWORK_PROTOCOL));
CopyMem (&Private->Mode, &gEmuSnpModeTemplate, sizeof (EFI_SIMPLE_NETWORK_MODE));
Private->Signature = EMU_SNP_PRIVATE_DATA_SIGNATURE;
Private->IoThunk = EmuIoThunk;
Private->Io = EmuIoThunk->Interface;
Private->EfiHandle = ControllerHandle;
Private->DeviceHandle = NULL;
Private->Snp.Mode = &Private->Mode;
Private->Signature = EMU_SNP_PRIVATE_DATA_SIGNATURE;
Private->IoThunk = EmuIoThunk;
Private->Io = EmuIoThunk->Interface;
Private->EfiHandle = ControllerHandle;
Private->DeviceHandle = NULL;
Private->Snp.Mode = &Private->Mode;
Private->ControllerNameTable = NULL;
Status = Private->Io->CreateMapping (Private->Io, &Private->Mode);
if (EFI_ERROR (Status)) {
goto Done;
@ -759,11 +748,11 @@ EmuSnpDriverBindingStart (
//
ZeroMem (&Node, sizeof (MAC_ADDR_DEVICE_PATH));
Node.Header.Type = MESSAGING_DEVICE_PATH;
Node.Header.SubType = MSG_MAC_ADDR_DP;
Node.IfType = Private->Mode.IfType;
Node.Header.Type = MESSAGING_DEVICE_PATH;
Node.Header.SubType = MSG_MAC_ADDR_DP;
Node.IfType = Private->Mode.IfType;
SetDevicePathNodeLength ((EFI_DEVICE_PATH_PROTOCOL * )&Node, sizeof (MAC_ADDR_DEVICE_PATH));
SetDevicePathNodeLength ((EFI_DEVICE_PATH_PROTOCOL *)&Node, sizeof (MAC_ADDR_DEVICE_PATH));
CopyMem (&Node.MacAddress, &Private->Mode.CurrentAddress, sizeof (EFI_MAC_ADDRESS));
@ -795,10 +784,12 @@ EmuSnpDriverBindingStart (
//
// Create Child Handle
//
Status = gBS->InstallMultipleProtocolInterfaces(
Status = gBS->InstallMultipleProtocolInterfaces (
&Private->DeviceHandle,
&gEfiSimpleNetworkProtocolGuid, &Private->Snp,
&gEfiDevicePathProtocolGuid, Private->DevicePath,
&gEfiSimpleNetworkProtocolGuid,
&Private->Snp,
&gEfiDevicePathProtocolGuid,
Private->DevicePath,
NULL
);
if (EFI_ERROR (Status)) {
@ -822,13 +813,14 @@ Done:
if (Private != NULL) {
FreePool (Private);
}
if (ParentDevicePath != NULL) {
gBS->CloseProtocol(
ControllerHandle,
&gEfiDevicePathProtocolGuid,
This->DriverBindingHandle,
ControllerHandle
);
gBS->CloseProtocol (
ControllerHandle,
&gEfiDevicePathProtocolGuid,
This->DriverBindingHandle,
ControllerHandle
);
}
}
@ -855,16 +847,16 @@ Done:
EFI_STATUS
EFIAPI
EmuSnpDriverBindingStop (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN UINTN NumberOfChildren,
IN EFI_HANDLE *ChildHandleBuffer
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN UINTN NumberOfChildren,
IN EFI_HANDLE *ChildHandleBuffer
)
{
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private = NULL;
EFI_SIMPLE_NETWORK_PROTOCOL *Snp;
VOID *EmuIoThunk;
EFI_STATUS Status;
EMU_SNP_PRIVATE_DATA *Private = NULL;
EFI_SIMPLE_NETWORK_PROTOCOL *Snp;
VOID *EmuIoThunk;
//
// Complete all outstanding transactions to Controller.
@ -892,14 +884,13 @@ EmuSnpDriverBindingStop (
ASSERT (NumberOfChildren == 1);
//
// Get our context back.
//
Status = gBS->OpenProtocol(
Status = gBS->OpenProtocol (
ChildHandleBuffer[0],
&gEfiSimpleNetworkProtocolGuid,
( VOID ** ) &Snp,
(VOID **)&Snp,
This->DriverBindingHandle,
ControllerHandle,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@ -912,7 +903,7 @@ EmuSnpDriverBindingStop (
ASSERT (Private->DeviceHandle == ChildHandleBuffer[0]);
ASSERT (Private->EfiHandle == ControllerHandle);
Status = gBS->CloseProtocol(
Status = gBS->CloseProtocol (
ControllerHandle,
&gEmuIoThunkProtocolGuid,
This->DriverBindingHandle,
@ -920,10 +911,12 @@ EmuSnpDriverBindingStop (
);
ASSERT_EFI_ERROR (Status);
Status = gBS->UninstallMultipleProtocolInterfaces(
Status = gBS->UninstallMultipleProtocolInterfaces (
Private->DeviceHandle,
&gEfiSimpleNetworkProtocolGuid, &Private->Snp,
&gEfiDevicePathProtocolGuid, Private->DevicePath,
&gEfiSimpleNetworkProtocolGuid,
&Private->Snp,
&gEfiDevicePathProtocolGuid,
Private->DevicePath,
NULL
);
if (EFI_ERROR (Status)) {
@ -947,8 +940,7 @@ EmuSnpDriverBindingStop (
return Status;
}
EFI_DRIVER_BINDING_PROTOCOL gEmuSnpDriverBinding = {
EFI_DRIVER_BINDING_PROTOCOL gEmuSnpDriverBinding = {
EmuSnpDriverBindingSupported,
EmuSnpDriverBindingStart,
EmuSnpDriverBindingStop,
@ -957,8 +949,6 @@ EFI_DRIVER_BINDING_PROTOCOL gEmuSnpDriverBinding = {
NULL
};
/**
This is the declaration of an EFI image entry point. This entry point is
the same for UEFI Applications, UEFI OS Loaders, and UEFI Drivers including
@ -975,22 +965,22 @@ EFI_STATUS
EFIAPI
InitializeEmuSnpDriver (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;
EFI_STATUS Status;
//
// Install the Driver Protocols
//
Status = EfiLibInstallDriverBindingComponentName2(
ImageHandle,
SystemTable,
&gEmuSnpDriverBinding,
ImageHandle,
&gEmuSnpDriverComponentName,
&gEmuSnpDriverComponentName2
);
Status = EfiLibInstallDriverBindingComponentName2 (
ImageHandle,
SystemTable,
&gEmuSnpDriverBinding,
ImageHandle,
&gEmuSnpDriverComponentName,
&gEmuSnpDriverComponentName2
);
return Status;
}

View File

@ -22,7 +22,6 @@ Abstract:
#include <Protocol/EmuIoThunk.h>
#include <Protocol/EmuSnp.h>
#include <Library/BaseLib.h>
#include <Library/DebugLib.h>
#include <Library/BaseMemoryLib.h>
@ -32,35 +31,34 @@ Abstract:
#include <Library/MemoryAllocationLib.h>
#include <Library/NetLib.h>
#define NET_ETHER_HEADER_SIZE 14
#define NET_ETHER_HEADER_SIZE 14
//
// Private data for driver.
//
#define EMU_SNP_PRIVATE_DATA_SIGNATURE SIGNATURE_32( 'U', 'S', 'N', 'P' )
#define EMU_SNP_PRIVATE_DATA_SIGNATURE SIGNATURE_32( 'U', 'S', 'N', 'P' )
typedef struct {
UINTN Signature;
EMU_IO_THUNK_PROTOCOL *IoThunk;
EMU_SNP_PROTOCOL *Io;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
UINTN Signature;
EMU_IO_THUNK_PROTOCOL *IoThunk;
EMU_SNP_PROTOCOL *Io;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_HANDLE EfiHandle;
EFI_HANDLE DeviceHandle;
EFI_HANDLE EfiHandle;
EFI_HANDLE DeviceHandle;
EFI_SIMPLE_NETWORK_PROTOCOL Snp;
EFI_SIMPLE_NETWORK_MODE Mode;
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
EFI_SIMPLE_NETWORK_PROTOCOL Snp;
EFI_SIMPLE_NETWORK_MODE Mode;
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
} EMU_SNP_PRIVATE_DATA;
#define EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS(a) \
CR( a, EMU_SNP_PRIVATE_DATA, Snp, EMU_SNP_PRIVATE_DATA_SIGNATURE )
extern EFI_DRIVER_BINDING_PROTOCOL gEmuSnpDriverBinding;
extern EFI_COMPONENT_NAME_PROTOCOL gEmuSnpDriverComponentName;
extern EFI_COMPONENT_NAME2_PROTOCOL gEmuSnpDriverComponentName2;
extern EFI_DRIVER_BINDING_PROTOCOL gEmuSnpDriverBinding;
extern EFI_COMPONENT_NAME_PROTOCOL gEmuSnpDriverComponentName;
extern EFI_COMPONENT_NAME2_PROTOCOL gEmuSnpDriverComponentName2;
/**
Test to see if this driver supports ControllerHandle. This service
@ -82,9 +80,9 @@ extern EFI_COMPONENT_NAME2_PROTOCOL gEmuSnpDriverComponentName2;
EFI_STATUS
EFIAPI
EmuSnpDriverBindingSupported (
IN EFI_DRIVER_BINDING_PROTOCOL * This,
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_DEVICE_PATH_PROTOCOL * RemainingDevicePath OPTIONAL
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
);
/**
@ -106,9 +104,9 @@ EmuSnpDriverBindingSupported (
EFI_STATUS
EFIAPI
EmuSnpDriverBindingStart (
IN EFI_DRIVER_BINDING_PROTOCOL * This,
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_DEVICE_PATH_PROTOCOL * RemainingDevicePath OPTIONAL
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
);
/**
@ -147,8 +145,8 @@ EmuSnpDriverBindingStop (
**/
EFI_STATUS
EFIAPI
EmuSnpStart(
IN EFI_SIMPLE_NETWORK_PROTOCOL* This
EmuSnpStart (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
);
/**
@ -161,8 +159,8 @@ EmuSnpStart(
**/
EFI_STATUS
EFIAPI
EmuSnpStop(
IN EFI_SIMPLE_NETWORK_PROTOCOL* This
EmuSnpStop (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
);
/**
@ -187,10 +185,10 @@ EmuSnpStop(
**/
EFI_STATUS
EFIAPI
EmuSnpInitialize(
IN EFI_SIMPLE_NETWORK_PROTOCOL* This,
IN UINTN ExtraRxBufferSize OPTIONAL,
IN UINTN ExtraTxBufferSize OPTIONAL
EmuSnpInitialize (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN UINTN ExtraRxBufferSize OPTIONAL,
IN UINTN ExtraTxBufferSize OPTIONAL
);
/**
@ -207,9 +205,9 @@ EmuSnpInitialize(
**/
EFI_STATUS
EFIAPI
EmuSnpReset(
IN EFI_SIMPLE_NETWORK_PROTOCOL* This,
IN BOOLEAN ExtendedVerification
EmuSnpReset (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
);
/**
@ -223,8 +221,8 @@ EmuSnpReset(
**/
EFI_STATUS
EFIAPI
EmuSnpShutdown(
IN EFI_SIMPLE_NETWORK_PROTOCOL* This
EmuSnpShutdown (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
);
/**
@ -250,13 +248,13 @@ EmuSnpShutdown(
**/
EFI_STATUS
EFIAPI
EmuSnpReceiveFilters(
IN EFI_SIMPLE_NETWORK_PROTOCOL* This,
IN UINT32 EnableBits,
IN UINT32 DisableBits,
IN BOOLEAN ResetMcastFilter,
IN UINTN McastFilterCount OPTIONAL,
IN EFI_MAC_ADDRESS* McastFilter OPTIONAL
EmuSnpReceiveFilters (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN UINT32 EnableBits,
IN UINT32 DisableBits,
IN BOOLEAN ResetMcastFilter,
IN UINTN McastFilterCount OPTIONAL,
IN EFI_MAC_ADDRESS *McastFilter OPTIONAL
);
/**
@ -272,10 +270,10 @@ EmuSnpReceiveFilters(
**/
EFI_STATUS
EFIAPI
EmuSnpStationAddress(
IN EFI_SIMPLE_NETWORK_PROTOCOL* This,
IN BOOLEAN Reset,
IN EFI_MAC_ADDRESS* NewMacAddr OPTIONAL
EmuSnpStationAddress (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN Reset,
IN EFI_MAC_ADDRESS *NewMacAddr OPTIONAL
);
/**
@ -299,11 +297,11 @@ EmuSnpStationAddress(
**/
EFI_STATUS
EFIAPI
EmuSnpStatistics(
IN EFI_SIMPLE_NETWORK_PROTOCOL* This,
IN BOOLEAN Reset,
IN OUT UINTN* StatisticsSize OPTIONAL,
OUT EFI_NETWORK_STATISTICS* StatisticsTable OPTIONAL
EmuSnpStatistics (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN Reset,
IN OUT UINTN *StatisticsSize OPTIONAL,
OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL
);
/**
@ -327,11 +325,11 @@ EmuSnpStatistics(
**/
EFI_STATUS
EFIAPI
EmuSnpMcastIptoMac(
IN EFI_SIMPLE_NETWORK_PROTOCOL* This,
IN BOOLEAN Ipv6,
IN EFI_IP_ADDRESS* Ip,
OUT EFI_MAC_ADDRESS* Mac
EmuSnpMcastIptoMac (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN Ipv6,
IN EFI_IP_ADDRESS *Ip,
OUT EFI_MAC_ADDRESS *Mac
);
/**
@ -352,12 +350,12 @@ EmuSnpMcastIptoMac(
**/
EFI_STATUS
EFIAPI
EmuSnpNvdata(
IN EFI_SIMPLE_NETWORK_PROTOCOL* This,
IN BOOLEAN ReadOrWrite,
IN UINTN Offset,
IN UINTN BufferSize,
IN OUT VOID* Buffer
EmuSnpNvdata (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN ReadOrWrite,
IN UINTN Offset,
IN UINTN BufferSize,
IN OUT VOID *Buffer
);
/**
@ -383,10 +381,10 @@ EmuSnpNvdata(
**/
EFI_STATUS
EFIAPI
EmuSnpGetStatus(
IN EFI_SIMPLE_NETWORK_PROTOCOL* This,
OUT UINT32* InterruptStatus,
OUT VOID** TxBuffer
EmuSnpGetStatus (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
OUT UINT32 *InterruptStatus,
OUT VOID **TxBuffer
);
/**
@ -420,14 +418,14 @@ EmuSnpGetStatus(
**/
EFI_STATUS
EFIAPI
EmuSnpTransmit(
IN EFI_SIMPLE_NETWORK_PROTOCOL* This,
IN UINTN HeaderSize,
IN UINTN BufferSize,
IN VOID* Buffer,
IN EFI_MAC_ADDRESS* SrcAddr OPTIONAL,
IN EFI_MAC_ADDRESS* DestAddr OPTIONAL,
IN UINT16* Protocol OPTIONAL
EmuSnpTransmit (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN UINTN HeaderSize,
IN UINTN BufferSize,
IN VOID *Buffer,
IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
IN EFI_MAC_ADDRESS *DestAddr OPTIONAL,
IN UINT16 *Protocol OPTIONAL
);
/**
@ -462,21 +460,21 @@ EmuSnpTransmit(
**/
EFI_STATUS
EFIAPI
EmuSnpReceive(
IN EFI_SIMPLE_NETWORK_PROTOCOL* This,
OUT UINTN* HeaderSize OPTIONAL,
IN OUT UINTN* BuffSize,
OUT VOID* Buffer,
OUT EFI_MAC_ADDRESS* SourceAddr OPTIONAL,
OUT EFI_MAC_ADDRESS* DestinationAddr OPTIONAL,
OUT UINT16* Protocol OPTIONAL
EmuSnpReceive (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
OUT UINTN *HeaderSize OPTIONAL,
IN OUT UINTN *BuffSize,
OUT VOID *Buffer,
OUT EFI_MAC_ADDRESS *SourceAddr OPTIONAL,
OUT EFI_MAC_ADDRESS *DestinationAddr OPTIONAL,
OUT UINT16 *Protocol OPTIONAL
);
VOID
EFIAPI
EmuSnpWaitForPacketNotify(
IN EFI_EVENT Event,
IN VOID* Private
EmuSnpWaitForPacketNotify (
IN EFI_EVENT Event,
IN VOID *Private
);
#endif // _EMU_SNP_H_
#endif // _EMU_SNP_H_

View File

@ -22,15 +22,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
//
// EmuThunk Device Path Protocol Instance
//
EMU_THUNK_DEVICE_PATH mEmuThunkDevicePath = {
EMU_THUNK_DEVICE_PATH mEmuThunkDevicePath = {
{
{
{
HARDWARE_DEVICE_PATH,
HW_VENDOR_DP,
{
(UINT8) (sizeof (EMU_VENDOR_DEVICE_PATH_NODE)),
(UINT8) ((sizeof (EMU_VENDOR_DEVICE_PATH_NODE)) >> 8)
(UINT8)(sizeof (EMU_VENDOR_DEVICE_PATH_NODE)),
(UINT8)((sizeof (EMU_VENDOR_DEVICE_PATH_NODE)) >> 8)
}
},
EMU_THUNK_PROTOCOL_GUID
@ -47,13 +47,13 @@ EMU_THUNK_DEVICE_PATH mEmuThunkDevicePath = {
}
};
EFI_STATUS
EFIAPI
InitializeEmuThunk (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
/*++
Routine Description:
@ -74,8 +74,10 @@ Returns:
Handle = NULL;
Status = gBS->InstallMultipleProtocolInterfaces (
&Handle,
&gEmuThunkProtocolGuid, gEmuThunk,
&gEfiDevicePathProtocolGuid, &mEmuThunkDevicePath,
&gEmuThunkProtocolGuid,
gEmuThunk,
&gEfiDevicePathProtocolGuid,
&mEmuThunkDevicePath,
NULL
);

View File

@ -18,9 +18,10 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
EFI_STATUS
EFIAPI
PeimInitializeFirmwareVolumePei (
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
)
/*++
Routine Description:
@ -50,11 +51,11 @@ Returns:
// Get the Fwh Information PPI
//
Status = PeiServicesLocatePpi (
&gEmuThunkPpiGuid, // GUID
0, // INSTANCE
&PpiDescriptor, // EFI_PEI_PPI_DESCRIPTOR
(VOID **)&Thunk // PPI
);
&gEmuThunkPpiGuid, // GUID
0, // INSTANCE
&PpiDescriptor, // EFI_PEI_PPI_DESCRIPTOR
(VOID **)&Thunk // PPI
);
ASSERT_EFI_ERROR (Status);
Index = 0;
@ -67,7 +68,7 @@ Returns:
//
// Assume the FD starts with an FV header
//
FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) FdBase;
FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)FdBase;
//
// Make an FV Hob for the first FV in the FD
@ -85,19 +86,19 @@ Returns:
(EFI_RESOURCE_ATTRIBUTE_PRESENT | EFI_RESOURCE_ATTRIBUTE_INITIALIZED | EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE),
FdBase,
(
FvHeader->FvLength +
PcdGet32 (PcdFlashNvStorageVariableSize) +
PcdGet32 (PcdFlashNvStorageFtwWorkingSize) +
PcdGet32 (PcdFlashNvStorageFtwSpareSize) +
PcdGet32 (PcdEmuFlashNvStorageEventLogSize)
FvHeader->FvLength +
PcdGet32 (PcdFlashNvStorageVariableSize) +
PcdGet32 (PcdFlashNvStorageFtwWorkingSize) +
PcdGet32 (PcdFlashNvStorageFtwSpareSize) +
PcdGet32 (PcdEmuFlashNvStorageEventLogSize)
)
);
);
//
// Hard code the address of the spare block and variable services.
// Assume it's a hard coded offset from FV0 in FD0.
//
FdSize =
FdSize =
PcdGet32 (PcdFlashNvStorageVariableSize) +
PcdGet32 (PcdFlashNvStorageFtwWorkingSize) +
PcdGet32 (PcdFlashNvStorageFtwSpareSize) +

View File

@ -7,7 +7,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include "PiPei.h"
#include <Guid/SystemNvDataGuid.h>
@ -24,9 +23,10 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
EFI_STATUS
EFIAPI
PeimInitializeFlashMap (
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
)
/*++
Routine Description:
@ -54,11 +54,11 @@ Returns:
// Get the Fwh Information PPI
//
Status = PeiServicesLocatePpi (
&gEmuThunkPpiGuid, // GUID
0, // INSTANCE
&PpiDescriptor, // EFI_PEI_PPI_DESCRIPTOR
(VOID **)&Thunk // PPI
);
&gEmuThunkPpiGuid, // GUID
0, // INSTANCE
&PpiDescriptor, // EFI_PEI_PPI_DESCRIPTOR
(VOID **)&Thunk // PPI
);
ASSERT_EFI_ERROR (Status);
//

View File

@ -25,11 +25,11 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "FwBlockService.h"
ESAL_FWB_GLOBAL *mFvbModuleGlobal;
ESAL_FWB_GLOBAL *mFvbModuleGlobal;
#define EFI_FVB2_STATUS (EFI_FVB2_READ_STATUS | EFI_FVB2_WRITE_STATUS | EFI_FVB2_LOCK_STATUS)
#define EFI_FVB2_STATUS (EFI_FVB2_READ_STATUS | EFI_FVB2_WRITE_STATUS | EFI_FVB2_LOCK_STATUS)
EFI_FW_VOL_BLOCK_DEVICE mFvbDeviceTemplate = {
EFI_FW_VOL_BLOCK_DEVICE mFvbDeviceTemplate = {
FVB_DEVICE_SIGNATURE,
{
{
@ -67,14 +67,13 @@ EFI_FW_VOL_BLOCK_DEVICE mFvbDeviceTemplate = {
}
};
VOID
EFIAPI
FvbVirtualddressChangeEvent (
IN EFI_EVENT Event,
IN VOID *Context
IN EFI_EVENT Event,
IN VOID *Context
)
/*++
Routine Description:
@ -97,10 +96,10 @@ Returns:
**/
{
EFI_FW_VOL_INSTANCE *FwhInstance;
UINTN Index;
EFI_FW_VOL_INSTANCE *FwhInstance;
UINTN Index;
EfiConvertPointer (0x0, (VOID **) &mFvbModuleGlobal->FvInstance[FVB_VIRTUAL]);
EfiConvertPointer (0x0, (VOID **)&mFvbModuleGlobal->FvInstance[FVB_VIRTUAL]);
//
// Convert the base address of all the instances
@ -108,25 +107,26 @@ Returns:
Index = 0;
FwhInstance = mFvbModuleGlobal->FvInstance[FVB_PHYSICAL];
while (Index < mFvbModuleGlobal->NumFv) {
EfiConvertPointer (0x0, (VOID **) &FwhInstance->FvBase[FVB_VIRTUAL]);
EfiConvertPointer (0x0, (VOID **)&FwhInstance->FvBase[FVB_VIRTUAL]);
FwhInstance = (EFI_FW_VOL_INSTANCE *)
(
(UINTN) ((UINT8 *) FwhInstance) + FwhInstance->VolumeHeader.HeaderLength +
(sizeof (EFI_FW_VOL_INSTANCE) - sizeof (EFI_FIRMWARE_VOLUME_HEADER))
);
(
(UINTN)((UINT8 *)FwhInstance) + FwhInstance->VolumeHeader.HeaderLength +
(sizeof (EFI_FW_VOL_INSTANCE) - sizeof (EFI_FIRMWARE_VOLUME_HEADER))
);
Index++;
}
EfiConvertPointer (0x0, (VOID **) &mFvbModuleGlobal);
EfiConvertPointer (0x0, (VOID **)&mFvbModuleGlobal);
}
EFI_STATUS
GetFvbInstance (
IN UINTN Instance,
IN ESAL_FWB_GLOBAL *Global,
OUT EFI_FW_VOL_INSTANCE **FwhInstance,
IN BOOLEAN Virtual
IN UINTN Instance,
IN ESAL_FWB_GLOBAL *Global,
OUT EFI_FW_VOL_INSTANCE **FwhInstance,
IN BOOLEAN Virtual
)
/*++
Routine Description:
@ -146,21 +146,22 @@ Returns:
**/
{
EFI_FW_VOL_INSTANCE *FwhRecord;
EFI_FW_VOL_INSTANCE *FwhRecord;
if (Instance >= Global->NumFv) {
return EFI_INVALID_PARAMETER;
}
//
// Find the right instance of the FVB private data
//
FwhRecord = Global->FvInstance[Virtual];
while (Instance > 0) {
FwhRecord = (EFI_FW_VOL_INSTANCE *)
(
(UINTN) ((UINT8 *) FwhRecord) + FwhRecord->VolumeHeader.HeaderLength +
(sizeof (EFI_FW_VOL_INSTANCE) - sizeof (EFI_FIRMWARE_VOLUME_HEADER))
);
(
(UINTN)((UINT8 *)FwhRecord) + FwhRecord->VolumeHeader.HeaderLength +
(sizeof (EFI_FW_VOL_INSTANCE) - sizeof (EFI_FIRMWARE_VOLUME_HEADER))
);
Instance--;
}
@ -171,11 +172,12 @@ Returns:
EFI_STATUS
FvbGetPhysicalAddress (
IN UINTN Instance,
OUT EFI_PHYSICAL_ADDRESS *Address,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
IN UINTN Instance,
OUT EFI_PHYSICAL_ADDRESS *Address,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
)
/*++
Routine Description:
@ -197,8 +199,8 @@ Returns:
**/
{
EFI_FW_VOL_INSTANCE *FwhInstance = NULL;
EFI_STATUS Status;
EFI_FW_VOL_INSTANCE *FwhInstance = NULL;
EFI_STATUS Status;
//
// Find the right instance of the FVB private data
@ -212,11 +214,12 @@ Returns:
EFI_STATUS
FvbGetVolumeAttributes (
IN UINTN Instance,
OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
IN UINTN Instance,
OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
)
/*++
Routine Description:
@ -237,8 +240,8 @@ Returns:
**/
{
EFI_FW_VOL_INSTANCE *FwhInstance = NULL;
EFI_STATUS Status;
EFI_FW_VOL_INSTANCE *FwhInstance = NULL;
EFI_STATUS Status;
//
// Find the right instance of the FVB private data
@ -252,14 +255,15 @@ Returns:
EFI_STATUS
FvbGetLbaAddress (
IN UINTN Instance,
IN EFI_LBA Lba,
OUT UINTN *LbaAddress,
OUT UINTN *LbaLength,
OUT UINTN *NumOfBlocks,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
IN UINTN Instance,
IN EFI_LBA Lba,
OUT UINTN *LbaAddress,
OUT UINTN *LbaLength,
OUT UINTN *NumOfBlocks,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
)
/*++
Routine Description:
@ -300,9 +304,9 @@ Returns:
Status = GetFvbInstance (Instance, Global, &FwhInstance, Virtual);
ASSERT_EFI_ERROR (Status);
StartLba = 0;
Offset = 0;
BlockMap = &(FwhInstance->VolumeHeader.BlockMap[0]);
StartLba = 0;
Offset = 0;
BlockMap = &(FwhInstance->VolumeHeader.BlockMap[0]);
//
// Parse the blockmap of the FV to find which map entry the Lba belongs to
@ -311,7 +315,7 @@ Returns:
NumBlocks = BlockMap->NumBlocks;
BlockLength = BlockMap->Length;
if (NumBlocks == 0 || BlockLength == 0) {
if ((NumBlocks == 0) || (BlockLength == 0)) {
return EFI_INVALID_PARAMETER;
}
@ -320,8 +324,8 @@ Returns:
//
// The map entry found
//
if (Lba >= StartLba && Lba < NextLba) {
Offset = Offset + (UINTN) MultU64x32 ((Lba - StartLba), BlockLength);
if ((Lba >= StartLba) && (Lba < NextLba)) {
Offset = Offset + (UINTN)MultU64x32 ((Lba - StartLba), BlockLength);
if (LbaAddress != NULL) {
*LbaAddress = FwhInstance->FvBase[Virtual] + Offset;
}
@ -331,28 +335,29 @@ Returns:
}
if (NumOfBlocks != NULL) {
*NumOfBlocks = (UINTN) (NextLba - Lba);
*NumOfBlocks = (UINTN)(NextLba - Lba);
}
return EFI_SUCCESS;
}
StartLba = NextLba;
Offset = Offset + NumBlocks * BlockLength;
StartLba = NextLba;
Offset = Offset + NumBlocks * BlockLength;
BlockMap++;
}
}
EFI_STATUS
FvbReadBlock (
IN UINTN Instance,
IN EFI_LBA Lba,
IN UINTN BlockOffset,
IN OUT UINTN *NumBytes,
IN UINT8 *Buffer,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
IN UINTN Instance,
IN EFI_LBA Lba,
IN UINTN BlockOffset,
IN OUT UINTN *NumBytes,
IN UINT8 *Buffer,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
)
/*++
Routine Description:
@ -385,9 +390,9 @@ Returns:
**/
{
EFI_FVB_ATTRIBUTES_2 Attributes;
UINTN LbaAddress;
UINTN LbaLength;
EFI_STATUS Status;
UINTN LbaAddress;
UINTN LbaLength;
EFI_STATUS Status;
//
// Check for invalid conditions
@ -404,6 +409,7 @@ Returns:
if (EFI_ERROR (Status)) {
return Status;
}
//
// Check if the FV is read enabled
//
@ -412,6 +418,7 @@ Returns:
if ((Attributes & EFI_FVB2_READ_STATUS) == 0) {
return EFI_ACCESS_DENIED;
}
//
// Perform boundary checks and adjust NumBytes
//
@ -420,25 +427,26 @@ Returns:
}
if (LbaLength < (*NumBytes + BlockOffset)) {
*NumBytes = (UINT32) (LbaLength - BlockOffset);
*NumBytes = (UINT32)(LbaLength - BlockOffset);
Status = EFI_BAD_BUFFER_SIZE;
}
CopyMem (Buffer, (UINT8 *) (LbaAddress + BlockOffset), (UINTN) (*NumBytes));
CopyMem (Buffer, (UINT8 *)(LbaAddress + BlockOffset), (UINTN)(*NumBytes));
return Status;
}
EFI_STATUS
FvbWriteBlock (
IN UINTN Instance,
IN EFI_LBA Lba,
IN UINTN BlockOffset,
IN OUT UINTN *NumBytes,
IN UINT8 *Buffer,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
IN UINTN Instance,
IN EFI_LBA Lba,
IN UINTN BlockOffset,
IN OUT UINTN *NumBytes,
IN UINT8 *Buffer,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
)
/*++
Routine Description:
@ -470,9 +478,9 @@ Returns:
**/
{
EFI_FVB_ATTRIBUTES_2 Attributes;
UINTN LbaAddress;
UINTN LbaLength;
EFI_STATUS Status;
UINTN LbaAddress;
UINTN LbaLength;
EFI_STATUS Status;
//
// Check for invalid conditions
@ -489,6 +497,7 @@ Returns:
if (EFI_ERROR (Status)) {
return Status;
}
//
// Check if the FV is write enabled
//
@ -497,6 +506,7 @@ Returns:
if ((Attributes & EFI_FVB2_WRITE_STATUS) == 0) {
return EFI_ACCESS_DENIED;
}
//
// Perform boundary checks and adjust NumBytes
//
@ -505,24 +515,26 @@ Returns:
}
if (LbaLength < (*NumBytes + BlockOffset)) {
*NumBytes = (UINT32) (LbaLength - BlockOffset);
*NumBytes = (UINT32)(LbaLength - BlockOffset);
Status = EFI_BAD_BUFFER_SIZE;
}
//
// Write data
//
CopyMem ((UINT8 *) (LbaAddress + BlockOffset), Buffer, (UINTN) (*NumBytes));
CopyMem ((UINT8 *)(LbaAddress + BlockOffset), Buffer, (UINTN)(*NumBytes));
return Status;
}
EFI_STATUS
FvbEraseBlock (
IN UINTN Instance,
IN EFI_LBA Lba,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
IN UINTN Instance,
IN EFI_LBA Lba,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
)
/*++
Routine Description:
@ -545,7 +557,6 @@ Returns:
**/
{
EFI_FVB_ATTRIBUTES_2 Attributes;
UINTN LbaAddress;
UINTN LbaLength;
@ -560,6 +571,7 @@ Returns:
if ((Attributes & EFI_FVB2_WRITE_STATUS) == 0) {
return EFI_ACCESS_DENIED;
}
//
// Get the starting address of the block for erase.
//
@ -575,18 +587,19 @@ Returns:
Data = 0x0;
}
SetMem ((UINT8 *) LbaAddress, LbaLength, Data);
SetMem ((UINT8 *)LbaAddress, LbaLength, Data);
return EFI_SUCCESS;
}
EFI_STATUS
FvbSetVolumeAttributes (
IN UINTN Instance,
IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
IN UINTN Instance,
IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
)
/*++
Routine Description:
@ -622,14 +635,13 @@ Returns:
EFI_STATUS Status;
EFI_FVB_ATTRIBUTES_2 UnchangedAttributes;
//
// Find the right instance of the FVB private data
//
Status = GetFvbInstance (Instance, Global, &FwhInstance, Virtual);
ASSERT_EFI_ERROR (Status);
AttribPtr = (EFI_FVB_ATTRIBUTES_2 *) &(FwhInstance->VolumeHeader.Attributes);
AttribPtr = (EFI_FVB_ATTRIBUTES_2 *)&(FwhInstance->VolumeHeader.Attributes);
OldAttributes = *AttribPtr;
Capabilities = OldAttributes & (EFI_FVB2_READ_DISABLED_CAP | \
EFI_FVB2_READ_ENABLED_CAP | \
@ -638,8 +650,8 @@ Returns:
EFI_FVB2_LOCK_CAP \
);
OldStatus = OldAttributes & EFI_FVB2_STATUS;
NewStatus = *Attributes & EFI_FVB2_STATUS;
OldStatus = OldAttributes & EFI_FVB2_STATUS;
NewStatus = *Attributes & EFI_FVB2_STATUS;
UnchangedAttributes = EFI_FVB2_READ_DISABLED_CAP | \
EFI_FVB2_READ_ENABLED_CAP | \
EFI_FVB2_WRITE_DISABLED_CAP | \
@ -667,6 +679,7 @@ Returns:
return EFI_ACCESS_DENIED;
}
}
//
// Test read disable
//
@ -675,6 +688,7 @@ Returns:
return EFI_INVALID_PARAMETER;
}
}
//
// Test read enable
//
@ -683,6 +697,7 @@ Returns:
return EFI_INVALID_PARAMETER;
}
}
//
// Test write disable
//
@ -691,6 +706,7 @@ Returns:
return EFI_INVALID_PARAMETER;
}
}
//
// Test write enable
//
@ -699,6 +715,7 @@ Returns:
return EFI_INVALID_PARAMETER;
}
}
//
// Test lock
//
@ -714,15 +731,17 @@ Returns:
return EFI_SUCCESS;
}
//
// FVB protocol APIs
//
EFI_STATUS
EFIAPI
FvbProtocolGetPhysicalAddress (
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
OUT EFI_PHYSICAL_ADDRESS *Address
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
OUT EFI_PHYSICAL_ADDRESS *Address
)
/*++
Routine Description:
@ -741,7 +760,7 @@ Returns:
**/
{
EFI_FW_VOL_BLOCK_DEVICE *FvbDevice;
EFI_FW_VOL_BLOCK_DEVICE *FvbDevice;
FvbDevice = FVB_DEVICE_FROM_THIS (This);
@ -751,11 +770,12 @@ Returns:
EFI_STATUS
EFIAPI
FvbProtocolGetBlockSize (
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN EFI_LBA Lba,
OUT UINTN *BlockSize,
OUT UINTN *NumOfBlocks
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN EFI_LBA Lba,
OUT UINTN *BlockSize,
OUT UINTN *NumOfBlocks
)
/*++
Routine Description:
@ -777,27 +797,28 @@ Returns:
**/
{
EFI_FW_VOL_BLOCK_DEVICE *FvbDevice;
EFI_FW_VOL_BLOCK_DEVICE *FvbDevice;
FvbDevice = FVB_DEVICE_FROM_THIS (This);
return FvbGetLbaAddress (
FvbDevice->Instance,
Lba,
NULL,
BlockSize,
NumOfBlocks,
mFvbModuleGlobal,
EfiGoneVirtual ()
);
FvbDevice->Instance,
Lba,
NULL,
BlockSize,
NumOfBlocks,
mFvbModuleGlobal,
EfiGoneVirtual ()
);
}
EFI_STATUS
EFIAPI
FvbProtocolGetAttributes (
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
OUT EFI_FVB_ATTRIBUTES_2 *Attributes
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
OUT EFI_FVB_ATTRIBUTES_2 *Attributes
)
/*++
Routine Description:
@ -812,7 +833,7 @@ Returns:
**/
{
EFI_FW_VOL_BLOCK_DEVICE *FvbDevice;
EFI_FW_VOL_BLOCK_DEVICE *FvbDevice;
FvbDevice = FVB_DEVICE_FROM_THIS (This);
@ -822,9 +843,10 @@ Returns:
EFI_STATUS
EFIAPI
FvbProtocolSetAttributes (
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes
)
/*++
Routine Description:
@ -839,7 +861,7 @@ Returns:
**/
{
EFI_FW_VOL_BLOCK_DEVICE *FvbDevice;
EFI_FW_VOL_BLOCK_DEVICE *FvbDevice;
FvbDevice = FVB_DEVICE_FROM_THIS (This);
@ -849,9 +871,10 @@ Returns:
EFI_STATUS
EFIAPI
FvbProtocolEraseBlocks (
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
...
)
/*++
Routine Description:
@ -877,17 +900,17 @@ Returns:
**/
{
EFI_FW_VOL_BLOCK_DEVICE *FvbDevice;
EFI_FW_VOL_INSTANCE *FwhInstance = NULL;
UINTN NumOfBlocks;
VA_LIST args;
EFI_LBA StartingLba;
UINTN NumOfLba;
EFI_STATUS Status;
EFI_FW_VOL_BLOCK_DEVICE *FvbDevice;
EFI_FW_VOL_INSTANCE *FwhInstance = NULL;
UINTN NumOfBlocks;
VA_LIST args;
EFI_LBA StartingLba;
UINTN NumOfLba;
EFI_STATUS Status;
FvbDevice = FVB_DEVICE_FROM_THIS (This);
Status = GetFvbInstance (FvbDevice->Instance, mFvbModuleGlobal, &FwhInstance, EfiGoneVirtual ());
Status = GetFvbInstance (FvbDevice->Instance, mFvbModuleGlobal, &FwhInstance, EfiGoneVirtual ());
ASSERT_EFI_ERROR (Status);
NumOfBlocks = FwhInstance->NumOfBlocks;
@ -905,7 +928,7 @@ Returns:
//
// Check input parameters
//
if (NumOfLba == 0 || (StartingLba + NumOfLba) > NumOfBlocks) {
if ((NumOfLba == 0) || ((StartingLba + NumOfLba) > NumOfBlocks)) {
VA_END (args);
return EFI_INVALID_PARAMETER;
}
@ -932,7 +955,6 @@ Returns:
StartingLba++;
NumOfLba--;
}
} while (1);
VA_END (args);
@ -943,12 +965,13 @@ Returns:
EFI_STATUS
EFIAPI
FvbProtocolWrite (
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN EFI_LBA Lba,
IN UINTN Offset,
IN OUT UINTN *NumBytes,
IN UINT8 *Buffer
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN EFI_LBA Lba,
IN UINTN Offset,
IN OUT UINTN *NumBytes,
IN UINT8 *Buffer
)
/*++
Routine Description:
@ -980,8 +1003,7 @@ Returns:
**/
{
EFI_FW_VOL_BLOCK_DEVICE *FvbDevice;
EFI_FW_VOL_BLOCK_DEVICE *FvbDevice;
FvbDevice = FVB_DEVICE_FROM_THIS (This);
@ -991,12 +1013,13 @@ Returns:
EFI_STATUS
EFIAPI
FvbProtocolRead (
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN EFI_LBA Lba,
IN UINTN Offset,
IN OUT UINTN *NumBytes,
IN UINT8 *Buffer
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN EFI_LBA Lba,
IN UINTN Offset,
IN OUT UINTN *NumBytes,
IN UINT8 *Buffer
)
/*++
Routine Description:
@ -1029,17 +1052,18 @@ Returns:
**/
{
EFI_FW_VOL_BLOCK_DEVICE *FvbDevice;
EFI_FW_VOL_BLOCK_DEVICE *FvbDevice;
FvbDevice = FVB_DEVICE_FROM_THIS (This);
return FvbReadBlock (FvbDevice->Instance, Lba, Offset, NumBytes, Buffer, mFvbModuleGlobal, EfiGoneVirtual ());
}
EFI_STATUS
ValidateFvHeader (
EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader
EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader
)
/*++
Routine Description:
@ -1065,17 +1089,19 @@ Returns:
//
if ((FwVolHeader->Revision != EFI_FVH_REVISION) ||
(FwVolHeader->Signature != EFI_FVH_SIGNATURE) ||
(FwVolHeader->FvLength == ((UINTN) -1)) ||
(FwVolHeader->FvLength == ((UINTN)-1)) ||
((FwVolHeader->HeaderLength & 0x01) != 0)
) {
)
{
return EFI_NOT_FOUND;
}
//
// Verify the header checksum
//
HeaderLength = (UINT16) (FwVolHeader->HeaderLength / 2);
Ptr = (UINT16 *) FwVolHeader;
Checksum = 0;
HeaderLength = (UINT16)(FwVolHeader->HeaderLength / 2);
Ptr = (UINT16 *)FwVolHeader;
Checksum = 0;
while (HeaderLength > 0) {
Checksum = Checksum + (*Ptr);
HeaderLength--;
@ -1092,9 +1118,10 @@ Returns:
EFI_STATUS
EFIAPI
FvbInitialize (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
/*++
Routine Description:
@ -1124,7 +1151,7 @@ Returns:
UINTN NumOfBlocks;
EFI_PEI_HOB_POINTERS FvHob;
//
//
// Get the DXE services table
//
DxeServices = gDS;
@ -1136,14 +1163,14 @@ Returns:
Status = gBS->AllocatePool (
EfiRuntimeServicesData,
sizeof (ESAL_FWB_GLOBAL),
(VOID**) &mFvbModuleGlobal
(VOID **)&mFvbModuleGlobal
);
ASSERT_EFI_ERROR (Status);
//
// Calculate the total size for all firmware volume block instances
//
BufferSize = 0;
BufferSize = 0;
FvHob.Raw = GetHobList ();
while ((FvHob.Raw = GetNextHob (EFI_HOB_TYPE_FV, FvHob.Raw)) != NULL) {
@ -1165,7 +1192,7 @@ Returns:
continue;
}
FwVolHeader = (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) BaseAddress;
FwVolHeader = (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)BaseAddress;
Status = ValidateFvHeader (FwVolHeader);
if (EFI_ERROR (Status)) {
//
@ -1179,7 +1206,7 @@ Returns:
}
BufferSize += (sizeof (EFI_FW_VOL_INSTANCE) + FwVolHeader->HeaderLength - sizeof (EFI_FIRMWARE_VOLUME_HEADER));
FvHob.Raw = GET_NEXT_HOB (FvHob);
FvHob.Raw = GET_NEXT_HOB (FvHob);
}
//
@ -1190,18 +1217,18 @@ Returns:
Status = gBS->AllocatePool (
EfiRuntimeServicesData,
BufferSize,
(VOID**) &mFvbModuleGlobal->FvInstance[FVB_PHYSICAL]
(VOID **)&mFvbModuleGlobal->FvInstance[FVB_PHYSICAL]
);
ASSERT_EFI_ERROR (Status);
//
// Make a virtual copy of the FvInstance pointer.
//
FwhInstance = mFvbModuleGlobal->FvInstance[FVB_PHYSICAL];
FwhInstance = mFvbModuleGlobal->FvInstance[FVB_PHYSICAL];
mFvbModuleGlobal->FvInstance[FVB_VIRTUAL] = FwhInstance;
mFvbModuleGlobal->NumFv = 0;
MaxLbaSize = 0;
mFvbModuleGlobal->NumFv = 0;
MaxLbaSize = 0;
FvHob.Raw = GetHobList ();
while (NULL != (FvHob.Raw = GetNextHob (EFI_HOB_TYPE_FV, FvHob.Raw))) {
@ -1223,7 +1250,7 @@ Returns:
continue;
}
FwVolHeader = (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) BaseAddress;
FwVolHeader = (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)BaseAddress;
Status = ValidateFvHeader (FwVolHeader);
if (EFI_ERROR (Status)) {
//
@ -1234,20 +1261,21 @@ Returns:
FvHob.Raw = GET_NEXT_HOB (FvHob);
continue;
}
//
// Write healthy FV header back.
//
CopyMem (
(VOID *) (UINTN) BaseAddress,
(VOID *) FwVolHeader,
(VOID *)(UINTN)BaseAddress,
(VOID *)FwVolHeader,
FwVolHeader->HeaderLength
);
}
FwhInstance->FvBase[FVB_PHYSICAL] = (UINTN) BaseAddress;
FwhInstance->FvBase[FVB_VIRTUAL] = (UINTN) BaseAddress;
FwhInstance->FvBase[FVB_PHYSICAL] = (UINTN)BaseAddress;
FwhInstance->FvBase[FVB_VIRTUAL] = (UINTN)BaseAddress;
CopyMem ((UINTN *) &(FwhInstance->VolumeHeader), (UINTN *) FwVolHeader, FwVolHeader->HeaderLength);
CopyMem ((UINTN *)&(FwhInstance->VolumeHeader), (UINTN *)FwVolHeader, FwVolHeader->HeaderLength);
FwVolHeader = &(FwhInstance->VolumeHeader);
EfiInitializeLock (&(FwhInstance->FvbDevLock), TPL_HIGH_LEVEL);
@ -1265,6 +1293,7 @@ Returns:
NumOfBlocks = NumOfBlocks + PtrBlockMapEntry->NumBlocks;
}
//
// The total number of blocks in the FV.
//
@ -1276,7 +1305,7 @@ Returns:
Status = gBS->AllocatePool (
EfiRuntimeServicesData,
sizeof (EFI_FW_VOL_BLOCK_DEVICE),
(VOID**) &FvbDevice
(VOID **)&FvbDevice
);
ASSERT_EFI_ERROR (Status);
@ -1294,7 +1323,7 @@ Returns:
//
// Find a handle with a matching device path that has supports FW Block protocol
//
TempFwbDevicePath = (EFI_DEVICE_PATH_PROTOCOL *) &TempFvbDevicePathData;
TempFwbDevicePath = (EFI_DEVICE_PATH_PROTOCOL *)&TempFvbDevicePathData;
CopyMem (TempFwbDevicePath, &FvbDevice->DevicePath, sizeof (FV_DEVICE_PATH));
Status = gBS->LocateDevicePath (&gEfiFirmwareVolumeBlockProtocolGuid, &TempFwbDevicePath, &FwbHandle);
if (EFI_ERROR (Status)) {
@ -1302,14 +1331,14 @@ Returns:
// LocateDevicePath fails so install a new interface and device path
//
FwbHandle = NULL;
Status = gBS->InstallMultipleProtocolInterfaces (
&FwbHandle,
&gEfiFirmwareVolumeBlockProtocolGuid,
&FvbDevice->FwVolBlockInstance,
&gEfiDevicePathProtocolGuid,
&FvbDevice->DevicePath,
NULL
);
Status = gBS->InstallMultipleProtocolInterfaces (
&FwbHandle,
&gEfiFirmwareVolumeBlockProtocolGuid,
&FvbDevice->FwVolBlockInstance,
&gEfiDevicePathProtocolGuid,
&FvbDevice->DevicePath,
NULL
);
ASSERT_EFI_ERROR (Status);
} else if (IsDevicePathEnd (TempFwbDevicePath)) {
//
@ -1318,7 +1347,7 @@ Returns:
Status = gBS->HandleProtocol (
FwbHandle,
&gEfiFirmwareVolumeBlockProtocolGuid,
(VOID**)&OldFwbInterface
(VOID **)&OldFwbInterface
);
ASSERT_EFI_ERROR (Status);
@ -1329,7 +1358,6 @@ Returns:
&FvbDevice->FwVolBlockInstance
);
ASSERT_EFI_ERROR (Status);
} else {
//
// There was a FVB protocol on an End Device Path node
@ -1338,10 +1366,10 @@ Returns:
}
FwhInstance = (EFI_FW_VOL_INSTANCE *)
(
(UINTN) ((UINT8 *) FwhInstance) + FwVolHeader->HeaderLength +
(sizeof (EFI_FW_VOL_INSTANCE) - sizeof (EFI_FIRMWARE_VOLUME_HEADER))
);
(
(UINTN)((UINT8 *)FwhInstance) + FwVolHeader->HeaderLength +
(sizeof (EFI_FW_VOL_INSTANCE) - sizeof (EFI_FIRMWARE_VOLUME_HEADER))
);
FvHob.Raw = GET_NEXT_HOB (FvHob);
}

View File

@ -31,14 +31,13 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Library/PcdLib.h>
#include <Library/DevicePathLib.h>
typedef struct {
UINT64 FvLength;
EFI_FIRMWARE_VOLUME_HEADER FvbInfo;
UINT64 FvLength;
EFI_FIRMWARE_VOLUME_HEADER FvbInfo;
//
// EFI_FV_BLOCK_MAP_ENTRY ExtraBlockMap[n];//n=0
//
EFI_FV_BLOCK_MAP_ENTRY End[1];
EFI_FV_BLOCK_MAP_ENTRY End[1];
} EFI_FVB_MEDIA_INFO;
EFI_FVB_MEDIA_INFO mPlatformFvbMediaInfo[] = {
@ -55,10 +54,10 @@ EFI_FVB_MEDIA_INFO mPlatformFvbMediaInfo[] = {
FixedPcdGet32 (PcdEmuFlashFvRecoverySize),
EFI_FVH_SIGNATURE,
EFI_FVB2_READ_ENABLED_CAP |
EFI_FVB2_READ_STATUS |
EFI_FVB2_WRITE_ENABLED_CAP |
EFI_FVB2_WRITE_STATUS |
EFI_FVB2_ERASE_POLARITY,
EFI_FVB2_READ_STATUS |
EFI_FVB2_WRITE_ENABLED_CAP |
EFI_FVB2_WRITE_STATUS |
EFI_FVB2_ERASE_POLARITY,
sizeof (EFI_FIRMWARE_VOLUME_HEADER) + sizeof (EFI_FV_BLOCK_MAP_ENTRY),
0, // CheckSum
0, // ExtHeaderOffset
@ -99,10 +98,10 @@ EFI_FVB_MEDIA_INFO mPlatformFvbMediaInfo[] = {
FixedPcdGet32 (PcdEmuFlashNvStorageEventLogSize),
EFI_FVH_SIGNATURE,
EFI_FVB2_READ_ENABLED_CAP |
EFI_FVB2_READ_STATUS |
EFI_FVB2_WRITE_ENABLED_CAP |
EFI_FVB2_WRITE_STATUS |
EFI_FVB2_ERASE_POLARITY,
EFI_FVB2_READ_STATUS |
EFI_FVB2_WRITE_ENABLED_CAP |
EFI_FVB2_WRITE_STATUS |
EFI_FVB2_ERASE_POLARITY,
sizeof (EFI_FIRMWARE_VOLUME_HEADER) + sizeof (EFI_FV_BLOCK_MAP_ENTRY),
0, // CheckSum
0, // ExtHeaderOffset
@ -113,9 +112,9 @@ EFI_FVB_MEDIA_INFO mPlatformFvbMediaInfo[] = {
{
{
(FixedPcdGet32 (PcdFlashNvStorageVariableSize) + \
FixedPcdGet32 (PcdFlashNvStorageFtwWorkingSize) + \
FixedPcdGet32 (PcdFlashNvStorageFtwSpareSize) + \
FixedPcdGet32 (PcdEmuFlashNvStorageEventLogSize)) / FixedPcdGet32 (PcdEmuFirmwareBlockSize),
FixedPcdGet32 (PcdFlashNvStorageFtwWorkingSize) + \
FixedPcdGet32 (PcdFlashNvStorageFtwSpareSize) + \
FixedPcdGet32 (PcdEmuFlashNvStorageEventLogSize)) / FixedPcdGet32 (PcdEmuFirmwareBlockSize),
FixedPcdGet32 (PcdEmuFirmwareBlockSize),
}
}
@ -131,11 +130,11 @@ EFI_FVB_MEDIA_INFO mPlatformFvbMediaInfo[] = {
EFI_STATUS
GetFvbInfo (
IN UINT64 FvLength,
OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo
IN UINT64 FvLength,
OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo
)
{
UINTN Index;
UINTN Index;
for (Index = 0; Index < sizeof (mPlatformFvbMediaInfo) / sizeof (EFI_FVB_MEDIA_INFO); Index += 1) {
if (mPlatformFvbMediaInfo[Index].FvLength == FvLength) {

View File

@ -17,15 +17,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#define FVB_VIRTUAL 1
typedef struct {
EFI_LOCK FvbDevLock;
UINTN FvBase[2];
UINTN NumOfBlocks;
EFI_FIRMWARE_VOLUME_HEADER VolumeHeader;
EFI_LOCK FvbDevLock;
UINTN FvBase[2];
UINTN NumOfBlocks;
EFI_FIRMWARE_VOLUME_HEADER VolumeHeader;
} EFI_FW_VOL_INSTANCE;
typedef struct {
UINT32 NumFv;
EFI_FW_VOL_INSTANCE *FvInstance[2];
UINT32 NumFv;
EFI_FW_VOL_INSTANCE *FvInstance[2];
} ESAL_FWB_GLOBAL;
//
@ -33,113 +33,112 @@ typedef struct {
//
#define FVB_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, FwVolBlockInstance, FVB_DEVICE_SIGNATURE)
#define FVB_EXTEND_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, FvbExtension, FVB_DEVICE_SIGNATURE)
#define FVB_DEVICE_SIGNATURE SIGNATURE_32 ('F', 'V', 'B', 'N')
#define FVB_DEVICE_SIGNATURE SIGNATURE_32 ('F', 'V', 'B', 'N')
typedef struct {
MEMMAP_DEVICE_PATH MemMapDevPath;
EFI_DEVICE_PATH_PROTOCOL EndDevPath;
MEMMAP_DEVICE_PATH MemMapDevPath;
EFI_DEVICE_PATH_PROTOCOL EndDevPath;
} FV_DEVICE_PATH;
typedef struct {
UINTN Signature;
FV_DEVICE_PATH DevicePath;
UINTN Instance;
EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance;
UINTN Signature;
FV_DEVICE_PATH DevicePath;
UINTN Instance;
EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance;
} EFI_FW_VOL_BLOCK_DEVICE;
EFI_STATUS
GetFvbInfo (
IN UINT64 FvLength,
OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo
IN UINT64 FvLength,
OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo
)
;
EFI_STATUS
FvbReadBlock (
IN UINTN Instance,
IN EFI_LBA Lba,
IN UINTN BlockOffset,
IN OUT UINTN *NumBytes,
IN UINT8 *Buffer,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
IN UINTN Instance,
IN EFI_LBA Lba,
IN UINTN BlockOffset,
IN OUT UINTN *NumBytes,
IN UINT8 *Buffer,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
)
;
EFI_STATUS
FvbWriteBlock (
IN UINTN Instance,
IN EFI_LBA Lba,
IN UINTN BlockOffset,
IN OUT UINTN *NumBytes,
IN UINT8 *Buffer,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
IN UINTN Instance,
IN EFI_LBA Lba,
IN UINTN BlockOffset,
IN OUT UINTN *NumBytes,
IN UINT8 *Buffer,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
)
;
EFI_STATUS
FvbEraseBlock (
IN UINTN Instance,
IN EFI_LBA Lba,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
IN UINTN Instance,
IN EFI_LBA Lba,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
)
;
EFI_STATUS
FvbSetVolumeAttributes (
IN UINTN Instance,
IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
IN UINTN Instance,
IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
)
;
EFI_STATUS
FvbGetVolumeAttributes (
IN UINTN Instance,
OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
IN UINTN Instance,
OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
)
;
EFI_STATUS
FvbGetPhysicalAddress (
IN UINTN Instance,
OUT EFI_PHYSICAL_ADDRESS *Address,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
IN UINTN Instance,
OUT EFI_PHYSICAL_ADDRESS *Address,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
)
;
EFI_STATUS
EFIAPI
FvbInitialize (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
;
VOID
EFIAPI
FvbClassAddressChangeEvent (
IN EFI_EVENT Event,
IN VOID *Context
IN EFI_EVENT Event,
IN VOID *Context
)
;
EFI_STATUS
FvbGetLbaAddress (
IN UINTN Instance,
IN EFI_LBA Lba,
OUT UINTN *LbaAddress,
OUT UINTN *LbaLength,
OUT UINTN *NumOfBlocks,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
IN UINTN Instance,
IN EFI_LBA Lba,
OUT UINTN *LbaAddress,
OUT UINTN *LbaLength,
OUT UINTN *NumOfBlocks,
IN ESAL_FWB_GLOBAL *Global,
IN BOOLEAN Virtual
)
;
@ -149,63 +148,63 @@ FvbGetLbaAddress (
EFI_STATUS
EFIAPI
FvbProtocolGetAttributes (
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
OUT EFI_FVB_ATTRIBUTES_2 *Attributes
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
OUT EFI_FVB_ATTRIBUTES_2 *Attributes
)
;
EFI_STATUS
EFIAPI
FvbProtocolSetAttributes (
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes
)
;
EFI_STATUS
EFIAPI
FvbProtocolGetPhysicalAddress (
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
OUT EFI_PHYSICAL_ADDRESS *Address
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
OUT EFI_PHYSICAL_ADDRESS *Address
)
;
EFI_STATUS
EFIAPI
FvbProtocolGetBlockSize (
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN EFI_LBA Lba,
OUT UINTN *BlockSize,
OUT UINTN *NumOfBlocks
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN EFI_LBA Lba,
OUT UINTN *BlockSize,
OUT UINTN *NumOfBlocks
)
;
EFI_STATUS
EFIAPI
FvbProtocolRead (
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN EFI_LBA Lba,
IN UINTN Offset,
IN OUT UINTN *NumBytes,
IN UINT8 *Buffer
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN EFI_LBA Lba,
IN UINTN Offset,
IN OUT UINTN *NumBytes,
IN UINT8 *Buffer
)
;
EFI_STATUS
EFIAPI
FvbProtocolWrite (
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN EFI_LBA Lba,
IN UINTN Offset,
IN OUT UINTN *NumBytes,
IN UINT8 *Buffer
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN EFI_LBA Lba,
IN UINTN Offset,
IN OUT UINTN *NumBytes,
IN UINT8 *Buffer
)
;
EFI_STATUS
EFIAPI
FvbProtocolEraseBlocks (
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
...
)
;

View File

@ -13,6 +13,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#define EFI_EMU_PHYSICAL_DISK_GUID \
{ 0xf2ba331a, 0x8985, 0x11db, { 0xa4, 0x06, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } }
extern EFI_GUID gEmuPhysicalDisksGuid;
extern EFI_GUID gEmuPhysicalDisksGuid;
#endif

View File

@ -13,18 +13,16 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#define EFI_EMU_SYSTEM_CONFIG_GUID \
{ 0x9C4FB516, 0x3A1E, 0xD847, { 0xA1, 0xA1, 0x70, 0x58, 0xB6, 0x98, 0x67, 0x32 } }
#pragma pack(1)
typedef struct {
//
// Console output mode
//
UINT32 ConOutColumn;
UINT32 ConOutRow;
UINT32 ConOutColumn;
UINT32 ConOutRow;
} EMU_SYSTEM_CONFIGURATION;
#pragma pack()
extern EFI_GUID gEmuSystemConfigGuid;
extern EFI_GUID gEmuSystemConfigGuid;
#endif

View File

@ -13,6 +13,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#define EFI_EMU_VIRTUAL_DISK_GUID \
{ 0xf2ba331a, 0x8985, 0x11db, { 0xa4, 0x06, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } }
extern EFI_GUID gEmuVirtualDisksGuid;
extern EFI_GUID gEmuVirtualDisksGuid;
#endif

View File

@ -18,15 +18,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
typedef struct {
// Used by PEI Core and PEIMs to store the PEI Services pointer.
// Privilege issues prevent using the PI mechanism in the emulator.
CONST EFI_PEI_SERVICES **PeiServicesTablePointer;
CONST EFI_PEI_SERVICES **PeiServicesTablePointer;
// Used by SecPeiServicesLib
EFI_PEI_PPI_DESCRIPTOR *PpiList;
EFI_PEI_PPI_DESCRIPTOR *PpiList;
// Needed by PEI PEI PeCoffLoaderExtraActionLib
EMU_THUNK_PROTOCOL *Thunk;
EMU_THUNK_PROTOCOL *Thunk;
} EMU_MAGIC_PAGE_LAYOUT;
#define EMU_MAGIC_PAGE() ((EMU_MAGIC_PAGE_LAYOUT *)((UINTN)PcdGet64 (PcdPeiServicesTablePage)))
#define EMU_MAGIC_PAGE() ((EMU_MAGIC_PAGE_LAYOUT *)((UINTN)PcdGet64 (PcdPeiServicesTablePage)))
#endif

View File

@ -10,9 +10,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Protocol/EmuThunk.h>
extern EMU_THUNK_PROTOCOL *gEmuThunk;
extern EMU_THUNK_PROTOCOL *gEmuThunk;
/**
Serach the EMU IO Thunk database for a matching EMU IO Thunk
@ -32,5 +30,4 @@ GetIoThunkInstance (
IN UINTN Instance
);
#endif

View File

@ -7,7 +7,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Protocol/SimpleTextInEx.h>
/**
KeyMapMake gets called on key presses.
@ -19,7 +18,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
EFI_STATUS
EFIAPI
KeyMapMake (
IN EFI_KEY_DATA *KeyData
IN EFI_KEY_DATA *KeyData
);
/**
@ -33,5 +32,5 @@ KeyMapMake (
EFI_STATUS
EFIAPI
KeyMapBreak (
IN EFI_KEY_DATA *KeyData
IN EFI_KEY_DATA *KeyData
);

View File

@ -8,8 +8,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#ifndef __PPI_LIST_LIB_H__
#define __PPI_LIST_LIB_H__
extern CONST EFI_PEI_PPI_DESCRIPTOR *gPpiList;
#endif

View File

@ -15,12 +15,10 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <IndustryStandard/SmBios.h>
#include <Protocol/Smbios.h>
///
/// Cache copy of the SMBIOS Protocol pointer
///
extern EFI_SMBIOS_PROTOCOL *gSmbios;
extern EFI_SMBIOS_PROTOCOL *gSmbios;
///
/// Template for SMBIOS table initialization.
@ -38,7 +36,6 @@ typedef struct {
CHAR8 **StringArray;
} SMBIOS_TEMPLATE_ENTRY;
/**
Create an initial SMBIOS Table from an array of SMBIOS_TEMPLATE_ENTRY
entries. SMBIOS_TEMPLATE_ENTRY.NULL indicates the end of the table.
@ -51,11 +48,9 @@ typedef struct {
EFI_STATUS
EFIAPI
SmbiosLibInitializeFromTemplate (
IN SMBIOS_TEMPLATE_ENTRY *Template
IN SMBIOS_TEMPLATE_ENTRY *Template
);
/**
Create SMBIOS record.
@ -88,11 +83,10 @@ SmbiosLibInitializeFromTemplate (
EFI_STATUS
EFIAPI
SmbiosLibCreateEntry (
IN SMBIOS_STRUCTURE *SmbiosEntry,
IN CHAR8 **StringArray
IN SMBIOS_STRUCTURE *SmbiosEntry,
IN CHAR8 **StringArray
);
/**
Update the string associated with an existing SMBIOS record.
@ -111,9 +105,9 @@ SmbiosLibCreateEntry (
EFI_STATUS
EFIAPI
SmbiosLibUpdateString (
IN EFI_SMBIOS_HANDLE SmbiosHandle,
IN SMBIOS_TABLE_STRING StringNumber,
IN CHAR8 *String
IN EFI_SMBIOS_HANDLE SmbiosHandle,
IN SMBIOS_TABLE_STRING StringNumber,
IN CHAR8 *String
);
/**
@ -134,9 +128,9 @@ SmbiosLibUpdateString (
EFI_STATUS
EFIAPI
SmbiosLibUpdateUnicodeString (
IN EFI_SMBIOS_HANDLE SmbiosHandle,
IN SMBIOS_TABLE_STRING StringNumber,
IN CHAR16 *String
IN EFI_SMBIOS_HANDLE SmbiosHandle,
IN SMBIOS_TABLE_STRING StringNumber,
IN CHAR16 *String
);
/**
@ -155,7 +149,6 @@ SmbiosLibReadString (
IN EFI_SMBIOS_STRING StringNumber
);
/**
Allow the caller to discover a specific SMBIOS entry, and patch it if necissary.
@ -169,9 +162,9 @@ SmbiosLibReadString (
SMBIOS_STRUCTURE *
EFIAPI
SmbiosLibGetRecord (
IN EFI_SMBIOS_TYPE Type,
IN UINTN Instance,
OUT EFI_SMBIOS_HANDLE *SmbiosHandle
IN EFI_SMBIOS_TYPE Type,
IN UINTN Instance,
OUT EFI_SMBIOS_HANDLE *SmbiosHandle
);
/**
@ -187,10 +180,7 @@ SmbiosLibGetRecord (
EFI_STATUS
EFIAPI
SmbiosLibRemove (
OUT EFI_SMBIOS_HANDLE SmbiosHandle
OUT EFI_SMBIOS_HANDLE SmbiosHandle
);
#endif

View File

@ -9,13 +9,11 @@
#include <PiPei.h>
EFI_PEI_PPI_DESCRIPTOR *
GetThunkPpiList (
VOID
);
EFI_STATUS
EFIAPI
AddThunkPpi (
@ -23,5 +21,3 @@ AddThunkPpi (
IN EFI_GUID *Guid,
IN VOID *Ppi
);

View File

@ -10,20 +10,17 @@
#include <Uefi.h>
#include <Protocol/EmuIoThunk.h>
EFI_STATUS
EFIAPI
AddThunkProtocol (
IN EMU_IO_THUNK_PROTOCOL *ThunkIo,
IN CHAR16 *ConfigString,
IN BOOLEAN EmuBusDriver
IN EMU_IO_THUNK_PROTOCOL *ThunkIo,
IN CHAR16 *ConfigString,
IN BOOLEAN EmuBusDriver
);
EFI_STATUS
EFIAPI
GetNextThunkProtocol (
IN BOOLEAN EmuBusDriver,
OUT EMU_IO_THUNK_PROTOCOL **Instance
IN BOOLEAN EmuBusDriver,
OUT EMU_IO_THUNK_PROTOCOL **Instance
);

View File

@ -13,8 +13,6 @@
#define EMU_THUNK_PPI_GUID \
{ 0xB958B78C, 0x1D3E, 0xEE40, { 0x8B, 0xF4, 0xF0, 0x63, 0x2D, 0x06, 0x39, 0x16 } }
/*++
Routine Description:
@ -33,13 +31,12 @@ Returns:
**/
typedef
EFI_STATUS
(EFIAPI *EMU_PEI_AUTOSCAN) (
(EFIAPI *EMU_PEI_AUTOSCAN)(
IN UINTN Index,
OUT EFI_PHYSICAL_ADDRESS *MemoryBase,
OUT UINT64 *MemorySize
);
/*++
Routine Description:
@ -59,14 +56,13 @@ Returns:
**/
typedef
EFI_STATUS
(EFIAPI *EMU_PEI_FD_INFORMATION) (
(EFIAPI *EMU_PEI_FD_INFORMATION)(
IN UINTN Index,
IN OUT EFI_PHYSICAL_ADDRESS *FdBase,
IN OUT UINT64 *FdSize,
IN OUT EFI_PHYSICAL_ADDRESS *FixUp
);
/*++
Routine Description:
@ -78,12 +74,10 @@ Returns:
**/
typedef
VOID *
(EFIAPI *EMU_PEI_THUNK_INTERFACE) (
(EFIAPI *EMU_PEI_THUNK_INTERFACE)(
VOID
);
/*++
Routine Description:
@ -102,20 +96,19 @@ Returns:
**/
typedef
EFI_STATUS
(EFIAPI *EMU_PEI_LOAD_FILE) (
(EFIAPI *EMU_PEI_LOAD_FILE)(
VOID *Pe32Data,
EFI_PHYSICAL_ADDRESS *ImageAddress,
UINT64 *ImageSize,
EFI_PHYSICAL_ADDRESS *EntryPoint
);
typedef struct {
EMU_PEI_AUTOSCAN MemoryAutoScan;
EMU_PEI_FD_INFORMATION FirmwareDevices;
EMU_PEI_THUNK_INTERFACE Thunk;
EMU_PEI_AUTOSCAN MemoryAutoScan;
EMU_PEI_FD_INFORMATION FirmwareDevices;
EMU_PEI_THUNK_INTERFACE Thunk;
} EMU_THUNK_PPI;
extern EFI_GUID gEmuThunkPpiGuid;
extern EFI_GUID gEmuThunkPpiGuid;
#endif

View File

@ -19,9 +19,7 @@
#define EMU_BLOCK_IO_PROTOCOL_GUID \
{ 0x6888A4AE, 0xAFCE, 0xE84B, { 0x91, 0x02, 0xF7, 0xB9, 0xDA, 0xE6, 0xA0, 0x30 } }
typedef struct _EMU_BLOCK_IO_PROTOCOL EMU_BLOCK_IO_PROTOCOL;
typedef struct _EMU_BLOCK_IO_PROTOCOL EMU_BLOCK_IO_PROTOCOL;
/**
Reset the block device hardware.
@ -38,7 +36,7 @@ typedef struct _EMU_BLOCK_IO_PROTOCOL EMU_BLOCK_IO_PROTOCOL;
**/
typedef
EFI_STATUS
(EFIAPI *EMU_BLOCK_RESET) (
(EFIAPI *EMU_BLOCK_RESET)(
IN EMU_BLOCK_IO_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
);
@ -78,13 +76,13 @@ EFI_STATUS
**/
typedef
EFI_STATUS
(EFIAPI *EMU_BLOCK_READ) (
(EFIAPI *EMU_BLOCK_READ)(
IN EMU_BLOCK_IO_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA LBA,
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
IN UINTN BufferSize,
OUT VOID *Buffer
OUT VOID *Buffer
);
/**
@ -120,7 +118,7 @@ EFI_STATUS
**/
typedef
EFI_STATUS
(EFIAPI *EMU_BLOCK_WRITE) (
(EFIAPI *EMU_BLOCK_WRITE)(
IN EMU_BLOCK_IO_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA LBA,
@ -153,34 +151,31 @@ EFI_STATUS
**/
typedef
EFI_STATUS
(EFIAPI *EMU_BLOCK_FLUSH) (
(EFIAPI *EMU_BLOCK_FLUSH)(
IN EMU_BLOCK_IO_PROTOCOL *This,
IN OUT EFI_BLOCK_IO2_TOKEN *Token
);
typedef
EFI_STATUS
(EFIAPI *EMU_BLOCK_CREATE_MAPPING) (
(EFIAPI *EMU_BLOCK_CREATE_MAPPING)(
IN EMU_BLOCK_IO_PROTOCOL *This,
IN EFI_BLOCK_IO_MEDIA *Media
);
///
/// The Block I/O2 protocol defines an extension to the Block I/O protocol which
/// enables the ability to read and write data at a block level in a non-blocking
// manner.
///
struct _EMU_BLOCK_IO_PROTOCOL {
EMU_BLOCK_RESET Reset;
EMU_BLOCK_READ ReadBlocks;
EMU_BLOCK_WRITE WriteBlocks;
EMU_BLOCK_FLUSH FlushBlocks;
EMU_BLOCK_CREATE_MAPPING CreateMapping;
EMU_BLOCK_RESET Reset;
EMU_BLOCK_READ ReadBlocks;
EMU_BLOCK_WRITE WriteBlocks;
EMU_BLOCK_FLUSH FlushBlocks;
EMU_BLOCK_CREATE_MAPPING CreateMapping;
};
extern EFI_GUID gEmuBlockIoProtocolGuid;
extern EFI_GUID gEmuBlockIoProtocolGuid;
#endif

View File

@ -55,36 +55,34 @@ EFI_STATUS
typedef
EFI_STATUS
(EFIAPI *EMU_GRAPHICS_WINDOWS_KEY_SET_STATE) (
(EFIAPI *EMU_GRAPHICS_WINDOWS_KEY_SET_STATE)(
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindows,
IN EFI_KEY_TOGGLE_STATE *KeyToggleState
);
typedef
VOID
(EFIAPI *EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK) (
(EFIAPI *EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK)(
IN VOID *Context,
IN EFI_KEY_DATA *KeyData
);
typedef
EFI_STATUS
(EFIAPI *EMU_GRAPHICS_WINDOWS_REGISTER_KEY_NOTIFY) (
(EFIAPI *EMU_GRAPHICS_WINDOWS_REGISTER_KEY_NOTIFY)(
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindows,
IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK CallBack,
IN VOID *Context
);
typedef struct {
UINTN SourceX;
UINTN SourceY;
UINTN DestinationX;
UINTN DestinationY;
UINTN Width;
UINTN Height;
UINTN Delta;
UINTN SourceX;
UINTN SourceY;
UINTN DestinationX;
UINTN DestinationY;
UINTN Width;
UINTN Height;
UINTN Delta;
} EMU_GRAPHICS_WINDOWS__BLT_ARGS;
typedef
@ -98,7 +96,7 @@ EFI_STATUS
typedef
BOOLEAN
(EFIAPI *EMU_GRAPHICS_WINDOWS_IS_KEY_PRESSED) (
(EFIAPI *EMU_GRAPHICS_WINDOWS_IS_KEY_PRESSED)(
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindows,
IN EFI_KEY_DATA *KeyData
);
@ -117,18 +115,17 @@ EFI_STATUS
);
struct _EMU_GRAPHICS_WINDOW_PROTOCOL {
EMU_GRAPHICS_WINDOWS_SIZE Size;
EMU_GRAPHICS_WINDOWS_CHECK_KEY CheckKey;
EMU_GRAPHICS_WINDOWS_KEY_SET_STATE KeySetState;
EMU_GRAPHICS_WINDOWS_GET_KEY GetKey;
EMU_GRAPHICS_WINDOWS_REGISTER_KEY_NOTIFY RegisterKeyNotify;
EMU_GRAPHICS_WINDOWS_BLT Blt;
EMU_GRAPHICS_WINDOWS_IS_KEY_PRESSED IsKeyPressed;
EMU_GRAPHICS_WINDOWS_CHECK_POINTER CheckPointer;
EMU_GRAPHICS_WINDOWS_GET_POINTER_STATE GetPointerState;
EMU_GRAPHICS_WINDOWS_SIZE Size;
EMU_GRAPHICS_WINDOWS_CHECK_KEY CheckKey;
EMU_GRAPHICS_WINDOWS_KEY_SET_STATE KeySetState;
EMU_GRAPHICS_WINDOWS_GET_KEY GetKey;
EMU_GRAPHICS_WINDOWS_REGISTER_KEY_NOTIFY RegisterKeyNotify;
EMU_GRAPHICS_WINDOWS_BLT Blt;
EMU_GRAPHICS_WINDOWS_IS_KEY_PRESSED IsKeyPressed;
EMU_GRAPHICS_WINDOWS_CHECK_POINTER CheckPointer;
EMU_GRAPHICS_WINDOWS_GET_POINTER_STATE GetPointerState;
};
extern EFI_GUID gEmuGraphicsWindowProtocolGuid;
extern EFI_GUID gEmuGraphicsWindowProtocolGuid;
#endif

View File

@ -48,37 +48,35 @@ EFI_STATUS
typedef
EFI_STATUS
(EFIAPI *EMU_GRAPHICS_WINDOWS_KEY_SET_STATE) (
(EFIAPI *EMU_GRAPHICS_WINDOWS_KEY_SET_STATE)(
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindows,
IN EFI_KEY_TOGGLE_STATE *KeyToggleState
);
typedef
VOID
(EFIAPI *EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK) (
(EFIAPI *EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK)(
IN VOID *Context,
IN EFI_KEY_DATA *KeyData
);
typedef
EFI_STATUS
(EFIAPI *EMU_GRAPHICS_WINDOWS_REGISTER_KEY_NOTIFY) (
(EFIAPI *EMU_GRAPHICS_WINDOWS_REGISTER_KEY_NOTIFY)(
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindows,
IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeCallBack,
IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakCallBack,
IN VOID *Context
);
typedef struct {
UINTN SourceX;
UINTN SourceY;
UINTN DestinationX;
UINTN DestinationY;
UINTN Width;
UINTN Height;
UINTN Delta;
UINTN SourceX;
UINTN SourceY;
UINTN DestinationX;
UINTN DestinationY;
UINTN Width;
UINTN Height;
UINTN Delta;
} EMU_GRAPHICS_WINDOWS__BLT_ARGS;
typedef
@ -92,7 +90,7 @@ EFI_STATUS
typedef
BOOLEAN
(EFIAPI *EMU_GRAPHICS_WINDOWS_IS_KEY_PRESSED) (
(EFIAPI *EMU_GRAPHICS_WINDOWS_IS_KEY_PRESSED)(
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindows,
IN EFI_KEY_DATA *KeyData
);
@ -111,18 +109,17 @@ EFI_STATUS
);
struct _EMU_GRAPHICS_WINDOW_PROTOCOL {
EMU_GRAPHICS_WINDOWS_SIZE Size;
EMU_GRAPHICS_WINDOWS_CHECK_KEY CheckKey;
EMU_GRAPHICS_WINDOWS_KEY_SET_STATE KeySetState;
EMU_GRAPHICS_WINDOWS_GET_KEY GetKey;
EMU_GRAPHICS_WINDOWS_REGISTER_KEY_NOTIFY RegisterKeyNotify;
EMU_GRAPHICS_WINDOWS_BLT Blt;
EMU_GRAPHICS_WINDOWS_IS_KEY_PRESSED IsKeyPressed;
EMU_GRAPHICS_WINDOWS_CHECK_POINTER CheckPointer;
EMU_GRAPHICS_WINDOWS_GET_POINTER_STATE GetPointerState;
EMU_GRAPHICS_WINDOWS_SIZE Size;
EMU_GRAPHICS_WINDOWS_CHECK_KEY CheckKey;
EMU_GRAPHICS_WINDOWS_KEY_SET_STATE KeySetState;
EMU_GRAPHICS_WINDOWS_GET_KEY GetKey;
EMU_GRAPHICS_WINDOWS_REGISTER_KEY_NOTIFY RegisterKeyNotify;
EMU_GRAPHICS_WINDOWS_BLT Blt;
EMU_GRAPHICS_WINDOWS_IS_KEY_PRESSED IsKeyPressed;
EMU_GRAPHICS_WINDOWS_CHECK_POINTER CheckPointer;
EMU_GRAPHICS_WINDOWS_GET_POINTER_STATE GetPointerState;
};
extern EFI_GUID gEmuGraphicsWindowProtocolGuid;
extern EFI_GUID gEmuGraphicsWindowProtocolGuid;
#endif

View File

@ -10,36 +10,33 @@
#ifndef __EMU_IO_THUNK__
#define __EMU_IO_THUNK__
#define EMU_IO_THUNK_PROTOCO_GUID \
{ 0x453368F6, 0x7C85, 0x434A, { 0xA9, 0x8A, 0x72, 0xD1, 0xB7, 0xFF, 0xA9, 0x26 } }
typedef struct _EMU_IO_THUNK_PROTOCOL EMU_IO_THUNK_PROTOCOL;
typedef struct _EMU_IO_THUNK_PROTOCOL EMU_IO_THUNK_PROTOCOL;
typedef
EFI_STATUS
(EFIAPI *EMU_IO_THUNK_PROTOCOL_CLOSE_OPEN) (
(EFIAPI *EMU_IO_THUNK_PROTOCOL_CLOSE_OPEN)(
IN EMU_IO_THUNK_PROTOCOL *This
);
typedef
EFI_STATUS
(EFIAPI *EMU_IO_THUNK_PROTOCOL_CLOSE_CLOSE) (
(EFIAPI *EMU_IO_THUNK_PROTOCOL_CLOSE_CLOSE)(
IN EMU_IO_THUNK_PROTOCOL *This
);
struct _EMU_IO_THUNK_PROTOCOL {
EFI_GUID *Protocol;
VOID *Interface; /// Only be valid after Open() is called
CHAR16 *ConfigString;
UINT16 Instance;
EMU_IO_THUNK_PROTOCOL_CLOSE_OPEN Open;
EMU_IO_THUNK_PROTOCOL_CLOSE_CLOSE Close;
VOID *Private; /// Used by implementation
EFI_GUID *Protocol;
VOID *Interface; /// Only be valid after Open() is called
CHAR16 *ConfigString;
UINT16 Instance;
EMU_IO_THUNK_PROTOCOL_CLOSE_OPEN Open;
EMU_IO_THUNK_PROTOCOL_CLOSE_CLOSE Close;
VOID *Private; /// Used by implementation
};
extern EFI_GUID gEmuIoThunkProtocolGuid;
extern EFI_GUID gEmuIoThunkProtocolGuid;
#endif

View File

@ -17,8 +17,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#define EMU_SNP_PROTOCOL_GUID \
{ 0xFD5FBE54, 0x8C35, 0xB345, { 0x8A, 0x0F, 0x7A, 0xC8, 0xA5, 0xFD, 0x05, 0x21 } }
typedef struct _EMU_SNP_PROTOCOL EMU_SNP_PROTOCOL;
typedef struct _EMU_SNP_PROTOCOL EMU_SNP_PROTOCOL;
/**
Register storage for SNP Mode.
@ -37,7 +36,6 @@ EFI_STATUS
IN EFI_SIMPLE_NETWORK_MODE *Mode
);
/**
Changes the state of a network interface from "stopped" to "started".
@ -425,29 +423,29 @@ EFI_STATUS
//
// Revision defined in EFI1.1
//
#define EMU_SNP_INTERFACE_REVISION EMU_SNP_PROTOCOL_REVISION
#define EMU_SNP_INTERFACE_REVISION EMU_SNP_PROTOCOL_REVISION
///
/// The EMU_SNP_PROTOCOL protocol abstracts OS network sercices
/// from the EFI driver that produces EFI Simple Network Protocol.
///
struct _EMU_SNP_PROTOCOL {
EMU_SNP_CREATE_MAPPING CreateMapping;
EMU_SNP_START Start;
EMU_SNP_STOP Stop;
EMU_SNP_INITIALIZE Initialize;
EMU_SNP_RESET Reset;
EMU_SNP_SHUTDOWN Shutdown;
EMU_SNP_RECEIVE_FILTERS ReceiveFilters;
EMU_SNP_STATION_ADDRESS StationAddress;
EMU_SNP_STATISTICS Statistics;
EMU_SNP_MCAST_IP_TO_MAC MCastIpToMac;
EMU_SNP_NVDATA NvData;
EMU_SNP_GET_STATUS GetStatus;
EMU_SNP_TRANSMIT Transmit;
EMU_SNP_RECEIVE Receive;
EMU_SNP_CREATE_MAPPING CreateMapping;
EMU_SNP_START Start;
EMU_SNP_STOP Stop;
EMU_SNP_INITIALIZE Initialize;
EMU_SNP_RESET Reset;
EMU_SNP_SHUTDOWN Shutdown;
EMU_SNP_RECEIVE_FILTERS ReceiveFilters;
EMU_SNP_STATION_ADDRESS StationAddress;
EMU_SNP_STATISTICS Statistics;
EMU_SNP_MCAST_IP_TO_MAC MCastIpToMac;
EMU_SNP_NVDATA NvData;
EMU_SNP_GET_STATUS GetStatus;
EMU_SNP_TRANSMIT Transmit;
EMU_SNP_RECEIVE Receive;
};
extern EFI_GUID gEmuSnpProtocolGuid;
extern EFI_GUID gEmuSnpProtocolGuid;
#endif

View File

@ -11,55 +11,47 @@
#ifndef __EMU_THREAD_THUNK__
#define __EMU_THREAD_THUNK__
typedef struct _EMU_THREAD_THUNK_PROTOCOL EMU_THREAD_THUNK_PROTOCOL;
typedef struct _EMU_THREAD_THUNK_PROTOCOL EMU_THREAD_THUNK_PROTOCOL;
typedef
UINTN
(EFIAPI *THREAD_THUNK_MUTEX_LOCK) (
(EFIAPI *THREAD_THUNK_MUTEX_LOCK)(
IN VOID *Mutex
);
typedef
UINTN
(EFIAPI *THREAD_THUNK_MUTEX_UNLOCK) (
(EFIAPI *THREAD_THUNK_MUTEX_UNLOCK)(
IN VOID *Mutex
);
typedef
UINTN
(EFIAPI *THREAD_THUNK_MUTEX_TRY_LOCK) (
(EFIAPI *THREAD_THUNK_MUTEX_TRY_LOCK)(
IN VOID *Mutex
);
typedef
VOID *
(EFIAPI *THREAD_THUNK_MUTEX_INIT) (
(EFIAPI *THREAD_THUNK_MUTEX_INIT)(
IN VOID
);
typedef
UINTN
(EFIAPI *THREAD_THUNK_MUTEX_DISTROY) (
(EFIAPI *THREAD_THUNK_MUTEX_DISTROY)(
IN VOID *Mutex
);
typedef
VOID *
(EFIAPI *THREAD_THUNK_THREAD_ENTRY) (
(EFIAPI *THREAD_THUNK_THREAD_ENTRY)(
IN VOID *Context
);
typedef
UINTN
(EFIAPI *THREAD_THUNK_CREATE_THREAD) (
(EFIAPI *THREAD_THUNK_CREATE_THREAD)(
IN VOID *Thread,
IN VOID *Attribute,
IN THREAD_THUNK_THREAD_ENTRY Start,
@ -68,30 +60,27 @@ UINTN
typedef
VOID
(EFIAPI *THREAD_THUNK_EXIT_THREAD) (
(EFIAPI *THREAD_THUNK_EXIT_THREAD)(
IN VOID *ValuePtr
);
typedef
UINTN
(EFIAPI *THREAD_THUNK_SELF) (
(EFIAPI *THREAD_THUNK_SELF)(
VOID
);
struct _EMU_THREAD_THUNK_PROTOCOL {
THREAD_THUNK_MUTEX_LOCK MutexLock;
THREAD_THUNK_MUTEX_UNLOCK MutexUnlock;
THREAD_THUNK_MUTEX_TRY_LOCK MutexTryLock;
THREAD_THUNK_MUTEX_INIT MutexInit;
THREAD_THUNK_MUTEX_DISTROY MutexDistroy;
THREAD_THUNK_CREATE_THREAD CreateThread;
THREAD_THUNK_EXIT_THREAD ExitThread;
THREAD_THUNK_SELF Self;
THREAD_THUNK_MUTEX_LOCK MutexLock;
THREAD_THUNK_MUTEX_UNLOCK MutexUnlock;
THREAD_THUNK_MUTEX_TRY_LOCK MutexTryLock;
THREAD_THUNK_MUTEX_INIT MutexInit;
THREAD_THUNK_MUTEX_DISTROY MutexDistroy;
THREAD_THUNK_CREATE_THREAD CreateThread;
THREAD_THUNK_EXIT_THREAD ExitThread;
THREAD_THUNK_SELF Self;
};
extern EFI_GUID gEmuThreadThunkProtocolGuid;
extern EFI_GUID gEmuThreadThunkProtocolGuid;
#endif

View File

@ -21,166 +21,156 @@
#include <Protocol/EmuIoThunk.h>
#include <Protocol/DevicePath.h>
typedef struct {
VENDOR_DEVICE_PATH VendorDevicePath;
UINT32 Instance;
VENDOR_DEVICE_PATH VendorDevicePath;
UINT32 Instance;
} EMU_VENDOR_DEVICE_PATH_NODE;
typedef struct {
EMU_VENDOR_DEVICE_PATH_NODE Vendor;
EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
EMU_VENDOR_DEVICE_PATH_NODE Vendor;
EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
} EMU_THUNK_DEVICE_PATH;
typedef struct _EMU_THUNK_PROTOCOL EMU_THUNK_PROTOCOL;
typedef struct _EMU_THUNK_PROTOCOL EMU_THUNK_PROTOCOL;
typedef
UINTN
(EFIAPI *EMU_WRITE_STD_ERROR) (
(EFIAPI *EMU_WRITE_STD_ERROR)(
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
);
typedef
EFI_STATUS
(EFIAPI *EMU_CONFIG_STD_IN) (
(EFIAPI *EMU_CONFIG_STD_IN)(
VOID
);
typedef
UINTN
(EFIAPI *EMU_WRITE_STD_OUT) (
(EFIAPI *EMU_WRITE_STD_OUT)(
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
);
typedef
UINTN
(EFIAPI *EMU_READ_STD_IN) (
(EFIAPI *EMU_READ_STD_IN)(
OUT UINT8 *Buffer,
IN UINTN NumberOfBytes
);
typedef
BOOLEAN
(EFIAPI *EMU_POLL_STD_IN) (
(EFIAPI *EMU_POLL_STD_IN)(
VOID
);
typedef
VOID *
(EFIAPI *EMU_OS_MALLOC) (
(EFIAPI *EMU_OS_MALLOC)(
IN UINTN Size
);
typedef
VOID *
(EFIAPI *EMU_OS_VMALLOC) (
(EFIAPI *EMU_OS_VMALLOC)(
IN UINTN Size
);
typedef
BOOLEAN
(EFIAPI *EMU_OS_FREE) (
(EFIAPI *EMU_OS_FREE)(
IN VOID *Ptr
);
typedef
EFI_STATUS
(EFIAPI *EMU_PE_COFF_GET_ENTRY_POINT) (
(EFIAPI *EMU_PE_COFF_GET_ENTRY_POINT)(
IN VOID *Pe32Data,
IN OUT VOID **EntryPoint
);
typedef
VOID
(EFIAPI *EMU_PE_COFF_RELOCATE_EXTRA_ACTION) (
(EFIAPI *EMU_PE_COFF_RELOCATE_EXTRA_ACTION)(
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
);
typedef
VOID
(EFIAPI *EMU_PE_COFF_UNLOAD_EXTRA_ACTION) (
(EFIAPI *EMU_PE_COFF_UNLOAD_EXTRA_ACTION)(
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
);
typedef
VOID
(EFIAPI *EMU_ENABLE_INERRUPTS) (
(EFIAPI *EMU_ENABLE_INERRUPTS)(
VOID
);
typedef
VOID
(EFIAPI *EMU_DISABLE_INERRUPTS) (
(EFIAPI *EMU_DISABLE_INERRUPTS)(
VOID
);
typedef
UINT64
(EFIAPI *EMU_QUERY_PERFORMANCE_FREQENCY) (
(EFIAPI *EMU_QUERY_PERFORMANCE_FREQENCY)(
VOID
);
typedef
UINT64
(EFIAPI *EMU_QUERY_PERFORMANCE_COUNTER) (
(EFIAPI *EMU_QUERY_PERFORMANCE_COUNTER)(
VOID
);
typedef
VOID
(EFIAPI *EMU_SLEEP) (
(EFIAPI *EMU_SLEEP)(
IN UINT64 Milliseconds
);
typedef
VOID
(EFIAPI *EMU_CPU_SLEEP) (
(EFIAPI *EMU_CPU_SLEEP)(
VOID
);
typedef
VOID
(EFIAPI *EMU_EXIT) (
(EFIAPI *EMU_EXIT)(
IN UINTN Status
);
typedef
VOID
(EFIAPI *EMU_GET_TIME) (
(EFIAPI *EMU_GET_TIME)(
OUT EFI_TIME *Time,
OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL
);
typedef
VOID
(EFIAPI *EMU_SET_TIME) (
(EFIAPI *EMU_SET_TIME)(
IN EFI_TIME *Time
);
typedef
VOID
(EFIAPI EMU_SET_TIMER_CALLBACK) (
(EFIAPI EMU_SET_TIMER_CALLBACK)(
IN UINT64 DeltaMs
);
typedef
VOID
(EFIAPI *EMU_SET_TIMER) (
(EFIAPI *EMU_SET_TIMER)(
IN UINT64 PeriodMs,
IN EMU_SET_TIMER_CALLBACK CallBack
);
/**
Enumerates the current set of protocol instances that abstract OS services from EFI.
@ -203,56 +193,54 @@ VOID
**/
typedef
EFI_STATUS
(EFIAPI *EMU_GET_NEXT_PROTOCOL) (
(EFIAPI *EMU_GET_NEXT_PROTOCOL)(
IN BOOLEAN EmuBusDriver,
OUT EMU_IO_THUNK_PROTOCOL **Instance OPTIONAL
);
struct _EMU_THUNK_PROTOCOL {
// Used for early debug printing
EMU_WRITE_STD_ERROR WriteStdErr;
EMU_CONFIG_STD_IN ConfigStdIn;
EMU_WRITE_STD_OUT WriteStdOut;
EMU_READ_STD_IN ReadStdIn;
EMU_POLL_STD_IN PollStdIn;
EMU_WRITE_STD_ERROR WriteStdErr;
EMU_CONFIG_STD_IN ConfigStdIn;
EMU_WRITE_STD_OUT WriteStdOut;
EMU_READ_STD_IN ReadStdIn;
EMU_POLL_STD_IN PollStdIn;
//
// Map OS malloc/free so we can use OS based guard malloc
//
EMU_OS_MALLOC Malloc;
EMU_OS_VMALLOC Valloc;
EMU_OS_FREE Free;
EMU_OS_MALLOC Malloc;
EMU_OS_VMALLOC Valloc;
EMU_OS_FREE Free;
///
/// PE/COFF loader hooks to get symbols loaded
///
EMU_PE_COFF_GET_ENTRY_POINT PeCoffGetEntryPoint;
EMU_PE_COFF_RELOCATE_EXTRA_ACTION PeCoffRelocateImageExtraAction;
EMU_PE_COFF_UNLOAD_EXTRA_ACTION PeCoffUnloadImageExtraAction;
EMU_PE_COFF_GET_ENTRY_POINT PeCoffGetEntryPoint;
EMU_PE_COFF_RELOCATE_EXTRA_ACTION PeCoffRelocateImageExtraAction;
EMU_PE_COFF_UNLOAD_EXTRA_ACTION PeCoffUnloadImageExtraAction;
///
/// DXE Architecture Protocol Services
///
EMU_ENABLE_INERRUPTS EnableInterrupt;
EMU_DISABLE_INERRUPTS DisableInterrupt;
EMU_QUERY_PERFORMANCE_FREQENCY QueryPerformanceFrequency;
EMU_QUERY_PERFORMANCE_COUNTER QueryPerformanceCounter;
EMU_ENABLE_INERRUPTS EnableInterrupt;
EMU_DISABLE_INERRUPTS DisableInterrupt;
EMU_QUERY_PERFORMANCE_FREQENCY QueryPerformanceFrequency;
EMU_QUERY_PERFORMANCE_COUNTER QueryPerformanceCounter;
EMU_SLEEP Sleep;
EMU_CPU_SLEEP CpuSleep;
EMU_EXIT Exit;
EMU_GET_TIME GetTime;
EMU_SET_TIME SetTime;
EMU_SET_TIMER SetTimer;
EMU_SLEEP Sleep;
EMU_CPU_SLEEP CpuSleep;
EMU_EXIT Exit;
EMU_GET_TIME GetTime;
EMU_SET_TIME SetTime;
EMU_SET_TIMER SetTimer;
///
/// Generic System Services
///
EMU_GET_NEXT_PROTOCOL GetNextProtocol;
EMU_GET_NEXT_PROTOCOL GetNextProtocol;
};
extern EFI_GUID gEmuThunkProtocolGuid;
extern EFI_GUID gEmuThunkProtocolGuid;
#endif

View File

@ -19,7 +19,6 @@
#include <Library/BaseMemoryLib.h>
#include <Library/DevicePathLib.h>
/**
Converts a Vendor device path structure to its string representative.
@ -52,18 +51,22 @@ DevPathToTextVendorLib (
CatPrint (Str, L"EmuThunk()");
return EFI_SUCCESS;
}
if (CompareGuid (&Vendor->VendorDevicePath.Guid, &gEmuGraphicsWindowProtocolGuid)) {
CatPrint (Str, L"EmuGraphics(%d)", Vendor->Instance);
return EFI_SUCCESS;
}
if (CompareGuid (&Vendor->VendorDevicePath.Guid, &gEfiSimpleFileSystemProtocolGuid)) {
CatPrint (Str, L"EmuFs(%d)", Vendor->Instance);
return EFI_SUCCESS;
}
if (CompareGuid (&Vendor->VendorDevicePath.Guid, &gEmuBlockIoProtocolGuid)) {
CatPrint (Str, L"EmuBlk(%d)", Vendor->Instance);
return EFI_SUCCESS;
}
if (CompareGuid (&Vendor->VendorDevicePath.Guid, &gEmuThreadThunkProtocolGuid)) {
CatPrint (Str, L"EmuThread()");
return EFI_SUCCESS;
@ -82,20 +85,20 @@ DevPathToTextVendorLib (
**/
EFI_DEVICE_PATH_PROTOCOL *
DevPathFromTextEmuThunk (
IN CHAR16 *TextDeviceNode
IN CHAR16 *TextDeviceNode
)
{
CHAR16 *Str;
VENDOR_DEVICE_PATH *Vendor;
Str = GetNextParamStr (&TextDeviceNode);
Vendor = (VENDOR_DEVICE_PATH *) CreateDeviceNode (
HARDWARE_DEVICE_PATH,
HW_VENDOR_DP,
(UINT16) sizeof (VENDOR_DEVICE_PATH)
);
Vendor = (VENDOR_DEVICE_PATH *)CreateDeviceNode (
HARDWARE_DEVICE_PATH,
HW_VENDOR_DP,
(UINT16)sizeof (VENDOR_DEVICE_PATH)
);
CopyGuid (&Vendor->Guid, &gEmuThunkProtocolGuid);
return (EFI_DEVICE_PATH_PROTOCOL *) Vendor;
return (EFI_DEVICE_PATH_PROTOCOL *)Vendor;
}
/**
@ -108,20 +111,20 @@ DevPathFromTextEmuThunk (
**/
EFI_DEVICE_PATH_PROTOCOL *
DevPathFromTextEmuThread (
IN CHAR16 *TextDeviceNode
IN CHAR16 *TextDeviceNode
)
{
CHAR16 *Str;
VENDOR_DEVICE_PATH *Vendor;
Str = GetNextParamStr (&TextDeviceNode);
Vendor = (VENDOR_DEVICE_PATH *) CreateDeviceNode (
HARDWARE_DEVICE_PATH,
HW_VENDOR_DP,
(UINT16) sizeof (VENDOR_DEVICE_PATH)
);
Vendor = (VENDOR_DEVICE_PATH *)CreateDeviceNode (
HARDWARE_DEVICE_PATH,
HW_VENDOR_DP,
(UINT16)sizeof (VENDOR_DEVICE_PATH)
);
CopyGuid (&Vendor->Guid, &gEmuThreadThunkProtocolGuid);
return (EFI_DEVICE_PATH_PROTOCOL *) Vendor;
return (EFI_DEVICE_PATH_PROTOCOL *)Vendor;
}
/**
@ -134,22 +137,22 @@ DevPathFromTextEmuThread (
**/
EFI_DEVICE_PATH_PROTOCOL *
DevPathFromTextEmuFs (
IN CHAR16 *TextDeviceNode
IN CHAR16 *TextDeviceNode
)
{
CHAR16 *Str;
EMU_VENDOR_DEVICE_PATH_NODE *Vendor;
Str = GetNextParamStr (&TextDeviceNode);
Vendor = (EMU_VENDOR_DEVICE_PATH_NODE *) CreateDeviceNode (
HARDWARE_DEVICE_PATH,
HW_VENDOR_DP,
(UINT16) sizeof (EMU_VENDOR_DEVICE_PATH_NODE)
);
Str = GetNextParamStr (&TextDeviceNode);
Vendor = (EMU_VENDOR_DEVICE_PATH_NODE *)CreateDeviceNode (
HARDWARE_DEVICE_PATH,
HW_VENDOR_DP,
(UINT16)sizeof (EMU_VENDOR_DEVICE_PATH_NODE)
);
CopyGuid (&Vendor->VendorDevicePath.Guid, &gEfiSimpleFileSystemProtocolGuid);
Vendor->Instance = (UINT32) StrDecimalToUintn (Str);
Vendor->Instance = (UINT32)StrDecimalToUintn (Str);
return (EFI_DEVICE_PATH_PROTOCOL *) Vendor;
return (EFI_DEVICE_PATH_PROTOCOL *)Vendor;
}
/**

View File

@ -16,8 +16,6 @@
#include <Protocol/Timer.h>
/**
Stalls the CPU for at least the given number of microseconds.
@ -31,13 +29,12 @@
UINTN
EFIAPI
MicroSecondDelay (
IN UINTN MicroSeconds
IN UINTN MicroSeconds
)
{
return NanoSecondDelay (MicroSeconds * 1000);
}
/**
Stalls the CPU for at least the given number of nanoseconds.
@ -51,14 +48,13 @@ MicroSecondDelay (
UINTN
EFIAPI
NanoSecondDelay (
IN UINTN NanoSeconds
IN UINTN NanoSeconds
)
{
gEmuThunk->Sleep (NanoSeconds);
return NanoSeconds;
}
/**
Retrieves the current value of a 64-bit free running performance counter.
@ -105,14 +101,14 @@ GetPerformanceCounter (
UINT64
EFIAPI
GetPerformanceCounterProperties (
OUT UINT64 *StartValue OPTIONAL,
OUT UINT64 *EndValue OPTIONAL
OUT UINT64 *StartValue OPTIONAL,
OUT UINT64 *EndValue OPTIONAL
)
{
if (StartValue != NULL) {
*StartValue = 0ULL;
}
if (EndValue != NULL) {
*EndValue = (UINT64)-1LL;
}
@ -156,9 +152,9 @@ GetTimeInNanoSecond (
// Since 2^29 < 1,000,000,000 = 0x3B9ACA00 < 2^30, Remainder should < 2^(64-30) = 2^34,
// i.e. highest bit set in Remainder should <= 33.
//
Shift = MAX (0, HighBitSet64 (Remainder) - 33);
Remainder = RShiftU64 (Remainder, (UINTN) Shift);
Frequency = RShiftU64 (Frequency, (UINTN) Shift);
Shift = MAX (0, HighBitSet64 (Remainder) - 33);
Remainder = RShiftU64 (Remainder, (UINTN)Shift);
Frequency = RShiftU64 (Frequency, (UINTN)Shift);
NanoSeconds += DivU64x64Remainder (MultU64x32 (Remainder, 1000000000u), Frequency, NULL);
return NanoSeconds;

View File

@ -13,8 +13,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Library/EmuThunkLib.h>
#include <Library/BaseMemoryLib.h>
EMU_THUNK_PROTOCOL *gEmuThunk = NULL;
EMU_THUNK_PROTOCOL *gEmuThunk = NULL;
/**
The constructor function caches the pointer of EMU Thunk protocol.
@ -32,7 +31,7 @@ DxeEmuLibConstructor (
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_HOB_GUID_TYPE *GuidHob;
EFI_HOB_GUID_TYPE *GuidHob;
GuidHob = GetFirstGuidHob (&gEmuThunkProtocolGuid);
ASSERT (GuidHob != NULL);
@ -43,7 +42,6 @@ DxeEmuLibConstructor (
return EFI_SUCCESS;
}
/**
Serach the EMU IO Thunk database for a matching EMU IO Thunk
Protocol instance.
@ -62,8 +60,8 @@ GetIoThunkInstance (
IN UINTN Instance
)
{
EFI_STATUS Status;
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
EFI_STATUS Status;
EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
for (Status = EFI_SUCCESS, EmuIoThunk = NULL; !EFI_ERROR (Status); ) {
Status = gEmuThunk->GetNextProtocol (FALSE, &EmuIoThunk);

View File

@ -23,8 +23,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
//
// Cache of UnixThunk protocol
//
EMU_THUNK_PROTOCOL *mThunk = NULL;
EMU_THUNK_PROTOCOL *mThunk = NULL;
/**
The constructor function gets the pointer of the WinNT thunk functions
@ -40,7 +39,7 @@ DxeEmuPeCoffLibExtraActionConstructor (
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_HOB_GUID_TYPE *GuidHob;
EFI_HOB_GUID_TYPE *GuidHob;
//
// Retrieve EmuThunkProtocol from GUID'ed HOB
@ -73,8 +72,6 @@ PeCoffLoaderRelocateImageExtraAction (
}
}
/**
Performs additional actions just before a PE/COFF image is unloaded. Any resources
that were allocated by PeCoffLoaderRelocateImageExtraAction() must be freed.

View File

@ -8,14 +8,10 @@
**/
#include <PiDxe.h>
#include <Library/SerialPortLib.h>
#include <Library/EmuThunkLib.h>
/**
Initialize the serial device hardware.
@ -56,14 +52,13 @@ SerialPortInitialize (
UINTN
EFIAPI
SerialPortWrite (
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
)
{
return gEmuThunk->WriteStdOut (Buffer, NumberOfBytes);
}
/**
Read data from serial device and save the datas in buffer.
@ -83,8 +78,8 @@ SerialPortWrite (
UINTN
EFIAPI
SerialPortRead (
OUT UINT8 *Buffer,
IN UINTN NumberOfBytes
OUT UINT8 *Buffer,
IN UINTN NumberOfBytes
)
{
return gEmuThunk->ReadStdIn (Buffer, NumberOfBytes);
@ -123,7 +118,7 @@ SerialPortPoll (
RETURN_STATUS
EFIAPI
SerialPortSetControl (
IN UINT32 Control
IN UINT32 Control
)
{
return RETURN_UNSUPPORTED;
@ -142,13 +137,14 @@ SerialPortSetControl (
RETURN_STATUS
EFIAPI
SerialPortGetControl (
OUT UINT32 *Control
OUT UINT32 *Control
)
{
*Control = 0;
if (!SerialPortPoll ()) {
*Control = EFI_SERIAL_INPUT_BUFFER_EMPTY;
}
return RETURN_SUCCESS;
}
@ -188,14 +184,13 @@ 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
)
{
return RETURN_UNSUPPORTED;
}

View File

@ -8,14 +8,10 @@
**/
#include <PiDxe.h>
#include <Library/SerialPortLib.h>
#include <Library/EmuThunkLib.h>
/**
Initialize the serial device hardware.
@ -56,8 +52,8 @@ SerialPortInitialize (
UINTN
EFIAPI
SerialPortWrite (
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
)
{
if (gEmuThunk == NULL) {
@ -67,7 +63,6 @@ SerialPortWrite (
return gEmuThunk->WriteStdErr (Buffer, NumberOfBytes);
}
/**
Read data from serial device and save the datas in buffer.
@ -87,8 +82,8 @@ SerialPortWrite (
UINTN
EFIAPI
SerialPortRead (
OUT UINT8 *Buffer,
IN UINTN NumberOfBytes
OUT UINT8 *Buffer,
IN UINTN NumberOfBytes
)
{
return 0;
@ -113,5 +108,3 @@ SerialPortPoll (
{
return FALSE;
}

View File

@ -16,17 +16,16 @@
#include <Protocol/Timer.h>
STATIC UINT64 gTimerPeriod = 0;
STATIC EFI_TIMER_ARCH_PROTOCOL *gTimerAp = NULL;
STATIC EFI_EVENT gTimerEvent = NULL;
STATIC VOID *gRegistration = NULL;
STATIC UINT64 gTimerPeriod = 0;
STATIC EFI_TIMER_ARCH_PROTOCOL *gTimerAp = NULL;
STATIC EFI_EVENT gTimerEvent = NULL;
STATIC VOID *gRegistration = NULL;
VOID
EFIAPI
RegisterTimerArchProtocol (
IN EFI_EVENT Event,
IN VOID *Context
IN EFI_EVENT Event,
IN VOID *Context
)
{
EFI_STATUS Status;
@ -46,8 +45,6 @@ RegisterTimerArchProtocol (
}
}
/**
Stalls the CPU for at least the given number of microseconds.
@ -61,13 +58,12 @@ RegisterTimerArchProtocol (
UINTN
EFIAPI
MicroSecondDelay (
IN UINTN MicroSeconds
IN UINTN MicroSeconds
)
{
return NanoSecondDelay (MicroSeconds * 1000);
}
/**
Stalls the CPU for at least the given number of nanoseconds.
@ -81,7 +77,7 @@ MicroSecondDelay (
UINTN
EFIAPI
NanoSecondDelay (
IN UINTN NanoSeconds
IN UINTN NanoSeconds
)
{
EFI_STATUS Status;
@ -90,25 +86,25 @@ NanoSecondDelay (
if ((gTimerPeriod != 0) &&
((UINT64)NanoSeconds > gTimerPeriod) &&
(EfiGetCurrentTpl () == TPL_APPLICATION)) {
(EfiGetCurrentTpl () == TPL_APPLICATION))
{
//
// This stall is long, so use gBS->WaitForEvent () to yield CPU to DXE Core
//
HundredNanoseconds = DivU64x32 (NanoSeconds, 100);
Status = gBS->SetTimer (gTimerEvent, TimerRelative, HundredNanoseconds);
Status = gBS->SetTimer (gTimerEvent, TimerRelative, HundredNanoseconds);
ASSERT_EFI_ERROR (Status);
Status = gBS->WaitForEvent (sizeof (gTimerEvent)/sizeof (EFI_EVENT), &gTimerEvent, &Index);
ASSERT_EFI_ERROR (Status);
} else {
gEmuThunk->Sleep (NanoSeconds);
}
return NanoSeconds;
}
/**
Retrieves the current value of a 64-bit free running performance counter.
@ -155,14 +151,14 @@ GetPerformanceCounter (
UINT64
EFIAPI
GetPerformanceCounterProperties (
OUT UINT64 *StartValue OPTIONAL,
OUT UINT64 *EndValue OPTIONAL
OUT UINT64 *StartValue OPTIONAL,
OUT UINT64 *EndValue OPTIONAL
)
{
if (StartValue != NULL) {
*StartValue = 0ULL;
}
if (EndValue != NULL) {
*EndValue = (UINT64)-1LL;
}
@ -170,7 +166,6 @@ GetPerformanceCounterProperties (
return gEmuThunk->QueryPerformanceFrequency ();
}
/**
Register for the Timer AP protocol.
@ -234,9 +229,9 @@ GetTimeInNanoSecond (
// Since 2^29 < 1,000,000,000 = 0x3B9ACA00 < 2^30, Remainder should < 2^(64-30) = 2^34,
// i.e. highest bit set in Remainder should <= 33.
//
Shift = MAX (0, HighBitSet64 (Remainder) - 33);
Remainder = RShiftU64 (Remainder, (UINTN) Shift);
Frequency = RShiftU64 (Frequency, (UINTN) Shift);
Shift = MAX (0, HighBitSet64 (Remainder) - 33);
Remainder = RShiftU64 (Remainder, (UINTN)Shift);
Frequency = RShiftU64 (Frequency, (UINTN)Shift);
NanoSeconds += DivU64x64Remainder (MultU64x32 (Remainder, 1000000000u), Frequency, NULL);
return NanoSeconds;

View File

@ -15,10 +15,8 @@
**/
#include <Uefi.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/BaseMemoryLib.h>
@ -144,14 +142,14 @@ FreePages (
IN UINTN Pages
)
{
EFI_STATUS Status;
EFI_STATUS Status;
ASSERT (Pages != 0);
if (!gEmuThunk->Free (Buffer)) {
// The Free thunk will not free memory allocated in emulated EFI memory.
// The assmuption is this was allocated directly by EFI. We need this as some
// times protocols or EFI BootServices can return dynamically allocated buffers.
Status = gBS->FreePages ((EFI_PHYSICAL_ADDRESS) (UINTN) Buffer, Pages);
Status = gBS->FreePages ((EFI_PHYSICAL_ADDRESS)(UINTN)Buffer, Pages);
ASSERT_EFI_ERROR (Status);
}
}
@ -180,12 +178,12 @@ InternalAllocateAlignedPages (
IN UINTN Alignment
)
{
EFI_STATUS Status;
VOID *Memory;
UINTN AlignedMemory;
UINTN AlignmentMask;
UINTN UnalignedPages;
UINTN RealPages;
EFI_STATUS Status;
VOID *Memory;
UINTN AlignedMemory;
UINTN AlignmentMask;
UINTN UnalignedPages;
UINTN RealPages;
//
// Alignment must be a power of two or zero.
@ -195,12 +193,13 @@ InternalAllocateAlignedPages (
if (Pages == 0) {
return NULL;
}
if (Alignment > EFI_PAGE_SIZE) {
//
// Caculate 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.
//
@ -210,15 +209,17 @@ InternalAllocateAlignedPages (
if (Memory != NULL) {
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).
//
FreePages (Memory, UnalignedPages);
}
Memory = (VOID *) (AlignedMemory + EFI_PAGES_TO_SIZE (Pages));
Memory = (VOID *)(AlignedMemory + EFI_PAGES_TO_SIZE (Pages));
UnalignedPages = RealPages - Pages - UnalignedPages;
if (UnalignedPages > 0) {
//
@ -234,9 +235,11 @@ InternalAllocateAlignedPages (
if (Memory != NULL) {
return NULL;
}
AlignedMemory = (UINTN) Memory;
AlignedMemory = (UINTN)Memory;
}
return (VOID *) AlignedMemory;
return (VOID *)AlignedMemory;
}
/**
@ -458,6 +461,7 @@ InternalAllocateZeroPool (
if (Memory != NULL) {
Memory = ZeroMem (Memory, AllocationSize);
}
return Memory;
}
@ -554,12 +558,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;
}
@ -677,10 +682,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;
}
@ -797,10 +803,10 @@ ReallocateReservedPool (
VOID
EFIAPI
FreePool (
IN VOID *Buffer
IN VOID *Buffer
)
{
EFI_STATUS Status;
EFI_STATUS Status;
if (!gEmuThunk->Free (Buffer)) {
// The Free thunk will not free memory allocated in emulated EFI memory.
@ -810,4 +816,3 @@ FreePool (
ASSERT_EFI_ERROR (Status);
}
}

View File

@ -8,7 +8,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Uefi.h>
#include <Protocol/SimpleTextInEx.h>
/**
KeyMapMake gets called on key presses.
@ -20,7 +19,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
EFI_STATUS
EFIAPI
KeyMapMake (
IN EFI_KEY_DATA *KeyData
IN EFI_KEY_DATA *KeyData
)
{
return EFI_SUCCESS;
@ -37,7 +36,7 @@ KeyMapMake (
EFI_STATUS
EFIAPI
KeyMapBreak (
IN EFI_KEY_DATA *KeyData
IN EFI_KEY_DATA *KeyData
)
{
return EFI_SUCCESS;

View File

@ -29,7 +29,7 @@ CONST EFI_PEI_SERVICES **gPeiServices;
VOID
EFIAPI
SetPeiServicesTablePointer (
IN CONST EFI_PEI_SERVICES ** PeiServicesTablePointer
IN CONST EFI_PEI_SERVICES **PeiServicesTablePointer
)
{
ASSERT (PeiServicesTablePointer != NULL);
@ -58,7 +58,6 @@ GetPeiServicesTablePointer (
return gPeiServices;
}
/**
The constructor function caches the pointer to PEI services.
@ -74,8 +73,8 @@ GetPeiServicesTablePointer (
EFI_STATUS
EFIAPI
PeiServicesTablePointerLibConstructor (
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
)
{
gPeiServices = PeiServices;
@ -108,4 +107,3 @@ MigratePeiServicesTablePointer (
//
return;
}

View File

@ -22,7 +22,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
//
// Cache of UnixThunk protocol
//
EMU_THUNK_PROTOCOL *mThunk = NULL;
EMU_THUNK_PROTOCOL *mThunk = NULL;
/**
The function caches the pointer of the Unix thunk functions
@ -36,22 +36,21 @@ EFIAPI
EmuPeCoffGetThunkStucture (
)
{
EMU_THUNK_PPI *ThunkPpi;
EFI_STATUS Status;
EMU_THUNK_PPI *ThunkPpi;
EFI_STATUS Status;
//
// Locate Unix ThunkPpi for retrieving standard output handle
//
Status = PeiServicesLocatePpi (
&gEmuThunkPpiGuid,
0,
NULL,
(VOID **) &ThunkPpi
);
&gEmuThunkPpiGuid,
0,
NULL,
(VOID **)&ThunkPpi
);
ASSERT_EFI_ERROR (Status);
EMU_MAGIC_PAGE()->Thunk = (EMU_THUNK_PROTOCOL *) ThunkPpi->Thunk ();
EMU_MAGIC_PAGE ()->Thunk = (EMU_THUNK_PROTOCOL *)ThunkPpi->Thunk ();
return EFI_SUCCESS;
}
@ -71,12 +70,12 @@ PeCoffLoaderRelocateImageExtraAction (
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
)
{
if (EMU_MAGIC_PAGE()->Thunk == NULL) {
if (EMU_MAGIC_PAGE ()->Thunk == NULL) {
EmuPeCoffGetThunkStucture ();
}
EMU_MAGIC_PAGE()->Thunk->PeCoffRelocateImageExtraAction (ImageContext);
}
EMU_MAGIC_PAGE ()->Thunk->PeCoffRelocateImageExtraAction (ImageContext);
}
/**
Performs additional actions just before a PE/COFF image is unloaded. Any resources
@ -94,8 +93,9 @@ PeCoffLoaderUnloadImageExtraAction (
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
)
{
if (EMU_MAGIC_PAGE()->Thunk == NULL) {
if (EMU_MAGIC_PAGE ()->Thunk == NULL) {
EmuPeCoffGetThunkStucture ();
}
EMU_MAGIC_PAGE()->Thunk->PeCoffUnloadImageExtraAction (ImageContext);
EMU_MAGIC_PAGE ()->Thunk->PeCoffUnloadImageExtraAction (ImageContext);
}

View File

@ -15,8 +15,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Ppi/EmuThunk.h>
#include <Protocol/EmuThunk.h>
/**
Retrieves and returns a pointer to the entry point to a PE/COFF image that has been loaded
into system memory with the PE/COFF Loader Library functions.
@ -41,22 +39,22 @@ PeCoffLoaderGetEntryPoint (
IN OUT VOID **EntryPoint
)
{
EMU_THUNK_PPI *ThunkPpi;
EFI_STATUS Status;
EMU_THUNK_PROTOCOL *Thunk;
EMU_THUNK_PPI *ThunkPpi;
EFI_STATUS Status;
EMU_THUNK_PROTOCOL *Thunk;
//
// Locate EmuThunkPpi for retrieving standard output handle
//
Status = PeiServicesLocatePpi (
&gEmuThunkPpiGuid,
0,
NULL,
(VOID **) &ThunkPpi
&gEmuThunkPpiGuid,
0,
NULL,
(VOID **)&ThunkPpi
);
ASSERT_EFI_ERROR (Status);
Thunk = (EMU_THUNK_PROTOCOL *)ThunkPpi->Thunk ();
Thunk = (EMU_THUNK_PROTOCOL *)ThunkPpi->Thunk ();
return Thunk->PeCoffGetEntryPoint (Pe32Data, EntryPoint);
}
@ -86,15 +84,14 @@ PeCoffLoaderGetMachineType (
DosHdr = (EFI_IMAGE_DOS_HEADER *)Pe32Data;
if (DosHdr->e_magic == EFI_IMAGE_DOS_SIGNATURE) {
Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINTN) Pe32Data + (UINTN) ((DosHdr->e_lfanew) & 0x0ffff));
Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINTN)Pe32Data + (UINTN)((DosHdr->e_lfanew) & 0x0ffff));
} else {
Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)(Pe32Data);
}
if (Hdr.Te->Signature == EFI_TE_IMAGE_HEADER_SIGNATURE) {
return Hdr.Te->Machine;
} else if (Hdr.Pe32->Signature == EFI_IMAGE_NT_SIGNATURE) {
} else if (Hdr.Pe32->Signature == EFI_IMAGE_NT_SIGNATURE) {
return Hdr.Pe32->FileHeader.Machine;
}
@ -126,15 +123,15 @@ PeCoffLoaderGetPdbPointer (
IN VOID *Pe32Data
)
{
EFI_IMAGE_DOS_HEADER *DosHdr;
EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr;
EFI_IMAGE_DATA_DIRECTORY *DirectoryEntry;
EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *DebugEntry;
UINTN DirCount;
VOID *CodeViewEntryPointer;
INTN TEImageAdjust;
UINT32 NumberOfRvaAndSizes;
UINT16 Magic;
EFI_IMAGE_DOS_HEADER *DosHdr;
EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr;
EFI_IMAGE_DATA_DIRECTORY *DirectoryEntry;
EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *DebugEntry;
UINTN DirCount;
VOID *CodeViewEntryPointer;
INTN TEImageAdjust;
UINT32 NumberOfRvaAndSizes;
UINT16 Magic;
ASSERT (Pe32Data != NULL);
@ -148,7 +145,7 @@ PeCoffLoaderGetPdbPointer (
//
// DOS image header is present, so read the PE header after the DOS image header.
//
Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINTN) Pe32Data + (UINTN) ((DosHdr->e_lfanew) & 0x0ffff));
Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINTN)Pe32Data + (UINTN)((DosHdr->e_lfanew) & 0x0ffff));
} else {
//
// DOS image header is not present, so PE header is at the image base.
@ -158,11 +155,11 @@ PeCoffLoaderGetPdbPointer (
if (Hdr.Te->Signature == EFI_TE_IMAGE_HEADER_SIGNATURE) {
if (Hdr.Te->DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress != 0) {
DirectoryEntry = &Hdr.Te->DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_DEBUG];
TEImageAdjust = sizeof (EFI_TE_IMAGE_HEADER) - Hdr.Te->StrippedSize;
DebugEntry = (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *)((UINTN) Hdr.Te +
Hdr.Te->DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress +
TEImageAdjust);
DirectoryEntry = &Hdr.Te->DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_DEBUG];
TEImageAdjust = sizeof (EFI_TE_IMAGE_HEADER) - Hdr.Te->StrippedSize;
DebugEntry = (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *)((UINTN)Hdr.Te +
Hdr.Te->DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress +
TEImageAdjust);
}
} else if (Hdr.Pe32->Signature == EFI_IMAGE_NT_SIGNATURE) {
//
@ -171,24 +168,24 @@ PeCoffLoaderGetPdbPointer (
// generate PE32+ image with PE32 Magic.
//
switch (Hdr.Pe32->FileHeader.Machine) {
case EFI_IMAGE_MACHINE_IA32:
//
// Assume PE32 image with IA32 Machine field.
//
Magic = EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC;
break;
case EFI_IMAGE_MACHINE_X64:
case EFI_IMAGE_MACHINE_IA64:
//
// Assume PE32+ image with X64 or IA64 Machine field
//
Magic = EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC;
break;
default:
//
// For unknow Machine field, use Magic in optional Header
//
Magic = Hdr.Pe32->OptionalHeader.Magic;
case EFI_IMAGE_MACHINE_IA32:
//
// Assume PE32 image with IA32 Machine field.
//
Magic = EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC;
break;
case EFI_IMAGE_MACHINE_X64:
case EFI_IMAGE_MACHINE_IA64:
//
// Assume PE32+ image with X64 or IA64 Machine field
//
Magic = EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC;
break;
default:
//
// For unknow Machine field, use Magic in optional Header
//
Magic = Hdr.Pe32->OptionalHeader.Magic;
}
if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {
@ -196,42 +193,42 @@ PeCoffLoaderGetPdbPointer (
// Use PE32 offset get Debug Directory Entry
//
NumberOfRvaAndSizes = Hdr.Pe32->OptionalHeader.NumberOfRvaAndSizes;
DirectoryEntry = (EFI_IMAGE_DATA_DIRECTORY *)&(Hdr.Pe32->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG]);
DebugEntry = (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *) ((UINTN) Pe32Data + DirectoryEntry->VirtualAddress);
DirectoryEntry = (EFI_IMAGE_DATA_DIRECTORY *)&(Hdr.Pe32->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG]);
DebugEntry = (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *)((UINTN)Pe32Data + DirectoryEntry->VirtualAddress);
} else if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC) {
//
// Use PE32+ offset get Debug Directory Entry
//
NumberOfRvaAndSizes = Hdr.Pe32Plus->OptionalHeader.NumberOfRvaAndSizes;
DirectoryEntry = (EFI_IMAGE_DATA_DIRECTORY *)&(Hdr.Pe32Plus->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG]);
DebugEntry = (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *) ((UINTN) Pe32Data + DirectoryEntry->VirtualAddress);
DirectoryEntry = (EFI_IMAGE_DATA_DIRECTORY *)&(Hdr.Pe32Plus->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG]);
DebugEntry = (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *)((UINTN)Pe32Data + DirectoryEntry->VirtualAddress);
}
if (NumberOfRvaAndSizes <= EFI_IMAGE_DIRECTORY_ENTRY_DEBUG) {
DirectoryEntry = NULL;
DebugEntry = NULL;
DebugEntry = NULL;
}
} else {
return NULL;
}
if (DebugEntry == NULL || DirectoryEntry == NULL) {
if ((DebugEntry == NULL) || (DirectoryEntry == NULL)) {
return NULL;
}
for (DirCount = 0; DirCount < DirectoryEntry->Size; DirCount += sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY), DebugEntry++) {
if (DebugEntry->Type == EFI_IMAGE_DEBUG_TYPE_CODEVIEW) {
if (DebugEntry->SizeOfData > 0) {
CodeViewEntryPointer = (VOID *) ((UINTN) DebugEntry->RVA + ((UINTN)Pe32Data) + (UINTN)TEImageAdjust);
switch (* (UINT32 *) CodeViewEntryPointer) {
case CODEVIEW_SIGNATURE_NB10:
return (VOID *) ((CHAR8 *)CodeViewEntryPointer + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY));
case CODEVIEW_SIGNATURE_RSDS:
return (VOID *) ((CHAR8 *)CodeViewEntryPointer + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY));
case CODEVIEW_SIGNATURE_MTOC:
return (VOID *) ((CHAR8 *)CodeViewEntryPointer + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_MTOC_ENTRY));
default:
break;
CodeViewEntryPointer = (VOID *)((UINTN)DebugEntry->RVA + ((UINTN)Pe32Data) + (UINTN)TEImageAdjust);
switch (*(UINT32 *)CodeViewEntryPointer) {
case CODEVIEW_SIGNATURE_NB10:
return (VOID *)((CHAR8 *)CodeViewEntryPointer + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY));
case CODEVIEW_SIGNATURE_RSDS:
return (VOID *)((CHAR8 *)CodeViewEntryPointer + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY));
case CODEVIEW_SIGNATURE_MTOC:
return (VOID *)((CHAR8 *)CodeViewEntryPointer + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_MTOC_ENTRY));
default:
break;
}
}
}
@ -240,7 +237,6 @@ PeCoffLoaderGetPdbPointer (
return NULL;
}
/**
Returns the size of the PE/COFF headers
@ -256,12 +252,12 @@ PeCoffLoaderGetPdbPointer (
UINT32
EFIAPI
PeCoffGetSizeOfHeaders (
IN VOID *Pe32Data
IN VOID *Pe32Data
)
{
EFI_IMAGE_DOS_HEADER *DosHdr;
EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr;
UINTN SizeOfHeaders;
EFI_IMAGE_DOS_HEADER *DosHdr;
EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr;
UINTN SizeOfHeaders;
ASSERT (Pe32Data != NULL);
@ -270,7 +266,7 @@ PeCoffGetSizeOfHeaders (
//
// DOS image header is present, so read the PE header after the DOS image header.
//
Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINTN) Pe32Data + (UINTN) ((DosHdr->e_lfanew) & 0x0ffff));
Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINTN)Pe32Data + (UINTN)((DosHdr->e_lfanew) & 0x0ffff));
} else {
//
// DOS image header is not present, so PE header is at the image base.
@ -286,6 +282,5 @@ PeCoffGetSizeOfHeaders (
SizeOfHeaders = 0;
}
return (UINT32) SizeOfHeaders;
return (UINT32)SizeOfHeaders;
}

View File

@ -9,7 +9,6 @@
**/
#include <PiPei.h>
#include <Library/SerialPortLib.h>
#include <Library/PeiServicesLib.h>
@ -17,8 +16,6 @@
#include <Ppi/EmuThunk.h>
#include <Protocol/EmuThunk.h>
/**
Initialize the serial device hardware.
@ -59,32 +56,31 @@ SerialPortInitialize (
UINTN
EFIAPI
SerialPortWrite (
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
)
{
EMU_THUNK_PPI *ThunkPpi;
EFI_STATUS Status;
EMU_THUNK_PROTOCOL *Thunk;
EMU_THUNK_PPI *ThunkPpi;
EFI_STATUS Status;
EMU_THUNK_PROTOCOL *Thunk;
//
// Locate EmuThunkPpi for retrieving standard output handle
//
Status = PeiServicesLocatePpi (
&gEmuThunkPpiGuid,
0,
NULL,
(VOID **) &ThunkPpi
&gEmuThunkPpiGuid,
0,
NULL,
(VOID **)&ThunkPpi
);
if (!EFI_ERROR (Status)) {
Thunk = (EMU_THUNK_PROTOCOL *)ThunkPpi->Thunk ();
Thunk = (EMU_THUNK_PROTOCOL *)ThunkPpi->Thunk ();
return Thunk->WriteStdErr (Buffer, NumberOfBytes);
}
return 0;
}
/**
Read data from serial device and save the datas in buffer.
@ -104,8 +100,8 @@ SerialPortWrite (
UINTN
EFIAPI
SerialPortRead (
OUT UINT8 *Buffer,
IN UINTN NumberOfBytes
OUT UINT8 *Buffer,
IN UINTN NumberOfBytes
)
{
return 0;
@ -130,4 +126,3 @@ SerialPortPoll (
{
return FALSE;
}

View File

@ -16,7 +16,6 @@
#include <Ppi/MemoryDiscovered.h>
CONST EFI_PEI_SERVICES **gPeiServices = NULL;
/**
@ -33,7 +32,7 @@ CONST EFI_PEI_SERVICES **gPeiServices = NULL;
VOID
EFIAPI
SetPeiServicesTablePointer (
IN CONST EFI_PEI_SERVICES ** PeiServicesTablePointer
IN CONST EFI_PEI_SERVICES **PeiServicesTablePointer
)
{
ASSERT (PeiServicesTablePointer != NULL);
@ -64,8 +63,6 @@ GetPeiServicesTablePointer (
return gPeiServices;
}
/**
Notification service to be called when gEmuThunkPpiGuid is installed.
@ -81,9 +78,9 @@ GetPeiServicesTablePointer (
EFI_STATUS
EFIAPI
PeiServicesTablePointerNotifyCallback (
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
IN VOID *Ppi
IN EFI_PEI_SERVICES **PeiServices,
IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
IN VOID *Ppi
)
{
gPeiServices = (CONST EFI_PEI_SERVICES **)PeiServices;
@ -91,14 +88,12 @@ PeiServicesTablePointerNotifyCallback (
return EFI_SUCCESS;
}
EFI_PEI_NOTIFY_DESCRIPTOR mNotifyOnThunkList = {
EFI_PEI_NOTIFY_DESCRIPTOR mNotifyOnThunkList = {
(EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
&gEfiPeiMemoryDiscoveredPpiGuid,
PeiServicesTablePointerNotifyCallback
};
/**
Constructor register notification on when PPI updates. If PPI is
alreay installed registering the notify will cause the handle to
@ -113,11 +108,11 @@ EFI_PEI_NOTIFY_DESCRIPTOR mNotifyOnThunkList = {
EFI_STATUS
EFIAPI
PeiServicesTablePointerLibConstructor (
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_STATUS Status;
gPeiServices = (CONST EFI_PEI_SERVICES **)PeiServices;
@ -153,4 +148,3 @@ MigratePeiServicesTablePointer (
//
return;
}

View File

@ -16,7 +16,6 @@
#include <Library/DebugLib.h>
#include <Library/EmuMagicPageLib.h>
/**
Caches a pointer PEI Services Table.
@ -31,12 +30,12 @@
VOID
EFIAPI
SetPeiServicesTablePointer (
IN CONST EFI_PEI_SERVICES ** PeiServicesTablePointer
IN CONST EFI_PEI_SERVICES **PeiServicesTablePointer
)
{
ASSERT (PeiServicesTablePointer != NULL);
ASSERT (*PeiServicesTablePointer != NULL);
EMU_MAGIC_PAGE()->PeiServicesTablePointer = PeiServicesTablePointer;
EMU_MAGIC_PAGE ()->PeiServicesTablePointer = PeiServicesTablePointer;
}
/**
@ -57,9 +56,9 @@ GetPeiServicesTablePointer (
VOID
)
{
CONST EFI_PEI_SERVICES **PeiServicesTablePointer;
CONST EFI_PEI_SERVICES **PeiServicesTablePointer;
PeiServicesTablePointer = EMU_MAGIC_PAGE()->PeiServicesTablePointer;
PeiServicesTablePointer = EMU_MAGIC_PAGE ()->PeiServicesTablePointer;
ASSERT (PeiServicesTablePointer != NULL);
ASSERT (*PeiServicesTablePointer != NULL);
return PeiServicesTablePointer;
@ -91,5 +90,3 @@ MigratePeiServicesTablePointer (
//
return;
}

View File

@ -28,7 +28,7 @@
UINTN
EFIAPI
MicroSecondDelay (
IN UINTN MicroSeconds
IN UINTN MicroSeconds
)
{
return NanoSecondDelay (MicroSeconds * 1000);
@ -47,24 +47,24 @@ MicroSecondDelay (
UINTN
EFIAPI
NanoSecondDelay (
IN UINTN NanoSeconds
IN UINTN NanoSeconds
)
{
EMU_THUNK_PPI *ThunkPpi;
EFI_STATUS Status;
EMU_THUNK_PROTOCOL *Thunk;
EMU_THUNK_PPI *ThunkPpi;
EFI_STATUS Status;
EMU_THUNK_PROTOCOL *Thunk;
//
// Locate EmuThunkPpi for
//
Status = PeiServicesLocatePpi (
&gEmuThunkPpiGuid,
0,
NULL,
(VOID **) &ThunkPpi
&gEmuThunkPpiGuid,
0,
NULL,
(VOID **)&ThunkPpi
);
if (!EFI_ERROR (Status)) {
Thunk = (EMU_THUNK_PROTOCOL *)ThunkPpi->Thunk ();
Thunk = (EMU_THUNK_PROTOCOL *)ThunkPpi->Thunk ();
Thunk->Sleep (NanoSeconds * 100);
return NanoSeconds;
}
@ -89,22 +89,22 @@ GetPerformanceCounter (
VOID
)
{
EMU_THUNK_PPI *ThunkPpi;
EFI_STATUS Status;
EMU_THUNK_PROTOCOL *Thunk;
EMU_THUNK_PPI *ThunkPpi;
EFI_STATUS Status;
EMU_THUNK_PROTOCOL *Thunk;
//
// Locate EmuThunkPpi for
//
Status = PeiServicesLocatePpi (
&gEmuThunkPpiGuid,
0,
NULL,
(VOID **) &ThunkPpi
&gEmuThunkPpiGuid,
0,
NULL,
(VOID **)&ThunkPpi
);
if (!EFI_ERROR (Status)) {
Thunk = (EMU_THUNK_PROTOCOL *)ThunkPpi->Thunk ();
return Thunk->QueryPerformanceCounter ();
Thunk = (EMU_THUNK_PROTOCOL *)ThunkPpi->Thunk ();
return Thunk->QueryPerformanceCounter ();
}
return 0;
@ -136,33 +136,34 @@ GetPerformanceCounter (
UINT64
EFIAPI
GetPerformanceCounterProperties (
OUT UINT64 *StartValue OPTIONAL,
OUT UINT64 *EndValue OPTIONAL
OUT UINT64 *StartValue OPTIONAL,
OUT UINT64 *EndValue OPTIONAL
)
{
EMU_THUNK_PPI *ThunkPpi;
EFI_STATUS Status;
EMU_THUNK_PROTOCOL *Thunk;
EMU_THUNK_PPI *ThunkPpi;
EFI_STATUS Status;
EMU_THUNK_PROTOCOL *Thunk;
//
// Locate EmuThunkPpi for
//
Status = PeiServicesLocatePpi (
&gEmuThunkPpiGuid,
0,
NULL,
(VOID **) &ThunkPpi
&gEmuThunkPpiGuid,
0,
NULL,
(VOID **)&ThunkPpi
);
if (!EFI_ERROR (Status)) {
if (StartValue != NULL) {
*StartValue = 0ULL;
}
if (EndValue != NULL) {
*EndValue = (UINT64)-1LL;
}
Thunk = (EMU_THUNK_PROTOCOL *)ThunkPpi->Thunk ();
return Thunk->QueryPerformanceFrequency ();
Thunk = (EMU_THUNK_PROTOCOL *)ThunkPpi->Thunk ();
return Thunk->QueryPerformanceFrequency ();
}
return 0;
@ -204,9 +205,9 @@ GetTimeInNanoSecond (
// Since 2^29 < 1,000,000,000 = 0x3B9ACA00 < 2^30, Remainder should < 2^(64-30) = 2^34,
// i.e. highest bit set in Remainder should <= 33.
//
Shift = MAX (0, HighBitSet64 (Remainder) - 33);
Remainder = RShiftU64 (Remainder, (UINTN) Shift);
Frequency = RShiftU64 (Frequency, (UINTN) Shift);
Shift = MAX (0, HighBitSet64 (Remainder) - 33);
Remainder = RShiftU64 (Remainder, (UINTN)Shift);
Frequency = RShiftU64 (Frequency, (UINTN)Shift);
NanoSeconds += DivU64x64Remainder (MultU64x32 (Remainder, 1000000000u), Frequency, NULL);
return NanoSeconds;

View File

@ -8,7 +8,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "PlatformBm.h"
EFI_GUID mBootMenuFile = {
EFI_GUID mBootMenuFile = {
0xEEC25BDC, 0x67F2, 0x4D95, { 0xB1, 0xD5, 0xF8, 0x1B, 0x20, 0x39, 0xD1, 0x1D }
};
@ -20,24 +20,24 @@ SetupVariableInit (
VOID
)
{
EFI_STATUS Status;
UINTN Size;
EMU_SYSTEM_CONFIGURATION SystemConfigData;
EFI_STATUS Status;
UINTN Size;
EMU_SYSTEM_CONFIGURATION SystemConfigData;
Size = sizeof (SystemConfigData);
Size = sizeof (SystemConfigData);
Status = gRT->GetVariable (
L"Setup",
&gEmuSystemConfigGuid,
NULL,
&Size,
(VOID *) &SystemConfigData
(VOID *)&SystemConfigData
);
if (EFI_ERROR (Status)) {
//
// SetupVariable is corrupt
//
SystemConfigData.ConOutRow = PcdGet32 (PcdConOutColumn);
SystemConfigData.ConOutRow = PcdGet32 (PcdConOutColumn);
SystemConfigData.ConOutColumn = PcdGet32 (PcdConOutRow);
Status = gRT->SetVariable (
@ -45,7 +45,7 @@ SetupVariableInit (
&gEmuSystemConfigGuid,
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
sizeof (SystemConfigData),
(VOID *) &SystemConfigData
(VOID *)&SystemConfigData
);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "Failed to save Setup Variable to non-volatile storage, Status = %r\n", Status));
@ -55,10 +55,9 @@ SetupVariableInit (
EFI_DEVICE_PATH *
FvFilePath (
EFI_GUID *FileGuid
EFI_GUID *FileGuid
)
{
EFI_STATUS Status;
EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileNode;
@ -68,12 +67,12 @@ FvFilePath (
Status = gBS->HandleProtocol (
gImageHandle,
&gEfiLoadedImageProtocolGuid,
(VOID **) &LoadedImage
(VOID **)&LoadedImage
);
ASSERT_EFI_ERROR (Status);
return AppendDevicePathNode (
DevicePathFromHandle (LoadedImage->DeviceHandle),
(EFI_DEVICE_PATH_PROTOCOL *) &FileNode
(EFI_DEVICE_PATH_PROTOCOL *)&FileNode
);
}
@ -91,28 +90,28 @@ FvFilePath (
**/
UINTN
RegisterBootManagerMenuAppBootOption (
EFI_GUID *FileGuid,
CHAR16 *Description,
UINTN Position,
BOOLEAN IsBootCategory
EFI_GUID *FileGuid,
CHAR16 *Description,
UINTN Position,
BOOLEAN IsBootCategory
)
{
EFI_STATUS Status;
EFI_BOOT_MANAGER_LOAD_OPTION NewOption;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
UINTN OptionNumber;
EFI_STATUS Status;
EFI_BOOT_MANAGER_LOAD_OPTION NewOption;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
UINTN OptionNumber;
DevicePath = FvFilePath (FileGuid);
Status = EfiBootManagerInitializeLoadOption (
&NewOption,
LoadOptionNumberUnassigned,
LoadOptionTypeBoot,
IsBootCategory ? LOAD_OPTION_ACTIVE : LOAD_OPTION_CATEGORY_APP,
Description,
DevicePath,
NULL,
0
);
Status = EfiBootManagerInitializeLoadOption (
&NewOption,
LoadOptionNumberUnassigned,
LoadOptionTypeBoot,
IsBootCategory ? LOAD_OPTION_ACTIVE : LOAD_OPTION_CATEGORY_APP,
Description,
DevicePath,
NULL,
0
);
ASSERT_EFI_ERROR (Status);
FreePool (DevicePath);
@ -136,16 +135,16 @@ RegisterBootManagerMenuAppBootOption (
**/
BOOLEAN
IsBootManagerMenuAppFilePath (
EFI_DEVICE_PATH_PROTOCOL *DevicePath
)
EFI_DEVICE_PATH_PROTOCOL *DevicePath
)
{
EFI_HANDLE FvHandle;
VOID *NameGuid;
EFI_STATUS Status;
EFI_HANDLE FvHandle;
VOID *NameGuid;
EFI_STATUS Status;
Status = gBS->LocateDevicePath (&gEfiFirmwareVolume2ProtocolGuid, &DevicePath, &FvHandle);
if (!EFI_ERROR (Status)) {
NameGuid = EfiGetNameGuidFromFwVolDevicePathNode ((CONST MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) DevicePath);
NameGuid = EfiGetNameGuidFromFwVolDevicePathNode ((CONST MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)DevicePath);
if (NameGuid != NULL) {
return CompareGuid (NameGuid, &mBootMenuFile);
}
@ -167,10 +166,10 @@ GetBootManagerMenuAppOption (
VOID
)
{
UINTN BootOptionCount;
EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions;
UINTN Index;
UINTN OptionNumber;
UINTN BootOptionCount;
EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions;
UINTN Index;
UINTN OptionNumber;
OptionNumber = 0;
@ -189,7 +188,7 @@ GetBootManagerMenuAppOption (
//
// If not found the BootManagerMenuApp, create it.
//
OptionNumber = (UINT16) RegisterBootManagerMenuAppBootOption (&mBootMenuFile, L"UEFI BootManagerMenuApp", (UINTN) -1, FALSE);
OptionNumber = (UINT16)RegisterBootManagerMenuAppBootOption (&mBootMenuFile, L"UEFI BootManagerMenuApp", (UINTN)-1, FALSE);
}
return OptionNumber;
@ -205,13 +204,13 @@ PlatformBootManagerBeforeConsole (
VOID
)
{
UINTN Index;
UINTN Index;
SetupVariableInit ();
EfiEventGroupSignal (&gEfiEndOfDxeEventGroupGuid);
Index = 0;
Index = 0;
while (gPlatformConsole[Index].DevicePath != NULL) {
//
// Update the console variable with the connect type
@ -256,8 +255,8 @@ PlatformBdsConnectSequence (
**/
VOID
PlatformBdsDiagnostics (
IN EXTENDMEM_COVERAGE_LEVEL MemoryTestLevel,
IN BOOLEAN QuietBoot
IN EXTENDMEM_COVERAGE_LEVEL MemoryTestLevel,
IN BOOLEAN QuietBoot
)
{
EFI_STATUS Status;
@ -317,14 +316,14 @@ PlatformBdsRegisterStaticBootOptions (
F2.ScanCode = SCAN_F2;
F2.UnicodeChar = CHAR_NULL;
EfiBootManagerGetBootManagerMenu (&BootOption);
EfiBootManagerAddKeyOptionVariable (NULL, (UINT16) BootOption.OptionNumber, 0, &F2, NULL);
EfiBootManagerAddKeyOptionVariable (NULL, (UINT16)BootOption.OptionNumber, 0, &F2, NULL);
//
// 3. Boot Device List menu
//
F7.ScanCode = SCAN_F7;
F7.UnicodeChar = CHAR_NULL;
OptionNumber = GetBootManagerMenuAppOption ();
F7.ScanCode = SCAN_F7;
F7.UnicodeChar = CHAR_NULL;
OptionNumber = GetBootManagerMenuAppOption ();
EfiBootManagerAddKeyOptionVariable (NULL, (UINT16)OptionNumber, 0, &F7, NULL);
PrintXY (10, 10, &White, &Black, L"F2 to enter Setup. ");
@ -339,7 +338,7 @@ PlatformBdsRegisterStaticBootOptions (
**/
UINTN
BootOptionPriority (
CONST EFI_BOOT_MANAGER_LOAD_OPTION *BootOption
CONST EFI_BOOT_MANAGER_LOAD_OPTION *BootOption
)
{
//
@ -348,6 +347,7 @@ BootOptionPriority (
if (StrCmp (BootOption->Description, L"UEFI Shell") == 0) {
return 0;
}
return 100;
}
@ -377,37 +377,35 @@ PlatformBootManagerAfterConsole (
VOID
)
{
//
// Go the different platform policy with different boot mode
// Notes: this part code can be change with the table policy
//
switch (GetBootModeHob ()) {
case BOOT_ASSUMING_NO_CONFIGURATION_CHANGES:
case BOOT_WITH_MINIMAL_CONFIGURATION:
PlatformBdsDiagnostics (IGNORE, TRUE);
case BOOT_ASSUMING_NO_CONFIGURATION_CHANGES:
case BOOT_WITH_MINIMAL_CONFIGURATION:
PlatformBdsDiagnostics (IGNORE, TRUE);
//
// Perform some platform specific connect sequence
//
PlatformBdsConnectSequence ();
break;
//
// Perform some platform specific connect sequence
//
PlatformBdsConnectSequence ();
break;
case BOOT_IN_RECOVERY_MODE:
PlatformBdsDiagnostics (EXTENSIVE, FALSE);
break;
case BOOT_IN_RECOVERY_MODE:
PlatformBdsDiagnostics (EXTENSIVE, FALSE);
break;
case BOOT_WITH_FULL_CONFIGURATION:
case BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS:
case BOOT_WITH_DEFAULT_SETTINGS:
default:
PlatformBdsDiagnostics (IGNORE, TRUE);
PlatformBdsRegisterStaticBootOptions ();
PlatformBdsConnectSequence ();
EfiBootManagerRefreshAllBootOption ();
EfiBootManagerSortLoadOptionVariable (LoadOptionTypeBoot, (SORT_COMPARE)CompareBootOption);
break;
case BOOT_WITH_FULL_CONFIGURATION:
case BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS:
case BOOT_WITH_DEFAULT_SETTINGS:
default:
PlatformBdsDiagnostics (IGNORE, TRUE);
PlatformBdsRegisterStaticBootOptions ();
PlatformBdsConnectSequence ();
EfiBootManagerRefreshAllBootOption ();
EfiBootManagerSortLoadOptionVariable (LoadOptionTypeBoot, (SORT_COMPARE)CompareBootOption);
break;
}
}
@ -419,12 +417,12 @@ PlatformBootManagerAfterConsole (
VOID
EFIAPI
PlatformBootManagerWaitCallback (
UINT16 TimeoutRemain
UINT16 TimeoutRemain
)
{
EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION Black;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION White;
UINT16 Timeout;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION Black;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION White;
UINT16 Timeout;
Timeout = PcdGet16 (PcdPlatformBootTimeOut);
@ -456,4 +454,3 @@ PlatformBootManagerUnableToBoot (
{
return;
}

View File

@ -34,14 +34,14 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Library/HobLib.h>
#include <Library/HiiLib.h>
#define CONSOLE_OUT 0x00000001
#define STD_ERROR 0x00000002
#define CONSOLE_IN 0x00000004
#define CONSOLE_ALL (CONSOLE_OUT | CONSOLE_IN | STD_ERROR)
#define CONSOLE_OUT 0x00000001
#define STD_ERROR 0x00000002
#define CONSOLE_IN 0x00000004
#define CONSOLE_ALL (CONSOLE_OUT | CONSOLE_IN | STD_ERROR)
typedef struct {
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
UINTN ConnectType;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
UINTN ConnectType;
} BDS_CONSOLE_CONNECT_ENTRY;
extern BDS_CONSOLE_CONNECT_ENTRY gPlatformConsole[];
@ -56,14 +56,12 @@ extern BDS_CONSOLE_CONNECT_ENTRY gPlatformConsole[];
}\
}
typedef struct {
EMU_VENDOR_DEVICE_PATH_NODE EmuBus;
EMU_VENDOR_DEVICE_PATH_NODE EmuGraphicsWindow;
EFI_DEVICE_PATH_PROTOCOL End;
EMU_VENDOR_DEVICE_PATH_NODE EmuBus;
EMU_VENDOR_DEVICE_PATH_NODE EmuGraphicsWindow;
EFI_DEVICE_PATH_PROTOCOL End;
} EMU_PLATFORM_UGA_DEVICE_PATH;
//
// Platform BDS Functions
//
@ -80,10 +78,9 @@ typedef struct {
**/
EFI_STATUS
PlatformBootManagerMemoryTest (
IN EXTENDMEM_COVERAGE_LEVEL Level
IN EXTENDMEM_COVERAGE_LEVEL Level
);
VOID
PlatformBdsConnectSequence (
VOID

View File

@ -8,17 +8,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "PlatformBm.h"
EMU_PLATFORM_UGA_DEVICE_PATH gGopDevicePath = {
EMU_PLATFORM_UGA_DEVICE_PATH gGopDevicePath = {
{
{
{
HARDWARE_DEVICE_PATH,
HW_VENDOR_DP,
{
(UINT8) (sizeof (EMU_VENDOR_DEVICE_PATH_NODE)),
(UINT8) ((sizeof (EMU_VENDOR_DEVICE_PATH_NODE)) >> 8)
(UINT8)(sizeof (EMU_VENDOR_DEVICE_PATH_NODE)),
(UINT8)((sizeof (EMU_VENDOR_DEVICE_PATH_NODE)) >> 8)
}
},
EMU_THUNK_PROTOCOL_GUID
@ -31,8 +29,8 @@ EMU_PLATFORM_UGA_DEVICE_PATH gGopDevicePath = {
HARDWARE_DEVICE_PATH,
HW_VENDOR_DP,
{
(UINT8) (sizeof (EMU_VENDOR_DEVICE_PATH_NODE)),
(UINT8) ((sizeof (EMU_VENDOR_DEVICE_PATH_NODE)) >> 8)
(UINT8)(sizeof (EMU_VENDOR_DEVICE_PATH_NODE)),
(UINT8)((sizeof (EMU_VENDOR_DEVICE_PATH_NODE)) >> 8)
},
},
EMU_GRAPHICS_WINDOW_PROTOCOL_GUID,
@ -42,15 +40,15 @@ EMU_PLATFORM_UGA_DEVICE_PATH gGopDevicePath = {
gEndEntire
};
EMU_PLATFORM_UGA_DEVICE_PATH gGopDevicePath2 = {
EMU_PLATFORM_UGA_DEVICE_PATH gGopDevicePath2 = {
{
{
{
HARDWARE_DEVICE_PATH,
HW_VENDOR_DP,
{
(UINT8) (sizeof (EMU_VENDOR_DEVICE_PATH_NODE)),
(UINT8) ((sizeof (EMU_VENDOR_DEVICE_PATH_NODE)) >> 8)
(UINT8)(sizeof (EMU_VENDOR_DEVICE_PATH_NODE)),
(UINT8)((sizeof (EMU_VENDOR_DEVICE_PATH_NODE)) >> 8)
}
},
EMU_THUNK_PROTOCOL_GUID
@ -63,8 +61,8 @@ EMU_PLATFORM_UGA_DEVICE_PATH gGopDevicePath2 = {
HARDWARE_DEVICE_PATH,
HW_VENDOR_DP,
{
(UINT8) (sizeof (EMU_VENDOR_DEVICE_PATH_NODE)),
(UINT8) ((sizeof (EMU_VENDOR_DEVICE_PATH_NODE)) >> 8)
(UINT8)(sizeof (EMU_VENDOR_DEVICE_PATH_NODE)),
(UINT8)((sizeof (EMU_VENDOR_DEVICE_PATH_NODE)) >> 8)
},
},
EMU_GRAPHICS_WINDOW_PROTOCOL_GUID,
@ -77,13 +75,13 @@ EMU_PLATFORM_UGA_DEVICE_PATH gGopDevicePath2 = {
//
// Predefined platform default console device path
//
BDS_CONSOLE_CONNECT_ENTRY gPlatformConsole[] = {
BDS_CONSOLE_CONNECT_ENTRY gPlatformConsole[] = {
{
(EFI_DEVICE_PATH_PROTOCOL *) &gGopDevicePath,
(EFI_DEVICE_PATH_PROTOCOL *)&gGopDevicePath,
(CONSOLE_OUT | CONSOLE_IN)
},
{
(EFI_DEVICE_PATH_PROTOCOL *) &gGopDevicePath2,
(EFI_DEVICE_PATH_PROTOCOL *)&gGopDevicePath2,
(CONSOLE_OUT | CONSOLE_IN)
},
{
@ -91,4 +89,3 @@ BDS_CONSOLE_CONNECT_ENTRY gPlatformConsole[] = {
0
}
};

View File

@ -24,7 +24,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
EFI_STATUS
PlatformBootManagerMemoryTest (
IN EXTENDMEM_COVERAGE_LEVEL Level
IN EXTENDMEM_COVERAGE_LEVEL Level
)
{
EFI_STATUS Status;
@ -42,17 +42,17 @@ PlatformBootManagerMemoryTest (
ReturnStatus = EFI_SUCCESS;
ZeroMem (&Key, sizeof (EFI_INPUT_KEY));
TestedMemorySize = 0;
TotalMemorySize = 0;
ErrorOut = FALSE;
TestAbort = FALSE;
TestedMemorySize = 0;
TotalMemorySize = 0;
ErrorOut = FALSE;
TestAbort = FALSE;
RequireSoftECCInit = FALSE;
Status = gBS->LocateProtocol (
&gEfiGenericMemTestProtocolGuid,
NULL,
(VOID **) &GenMemoryTest
(VOID **)&GenMemoryTest
);
if (EFI_ERROR (Status)) {
return EFI_SUCCESS;
@ -88,11 +88,10 @@ PlatformBootManagerMemoryTest (
ASSERT (0);
}
DEBUG ((DEBUG_INFO, "Perform memory test (ESC to skip).\n"));
if (!PcdGetBool (PcdConInConnectOnDemand)) {
KeyStatus = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);
KeyStatus = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);
if (!EFI_ERROR (KeyStatus) && (Key.ScanCode == SCAN_ESC)) {
if (!RequireSoftECCInit) {
Status = GenMemoryTest->Finished (GenMemoryTest);

View File

@ -18,15 +18,15 @@
#include <Guid/GlobalVariable.h>
#include <Guid/ImageAuthentication.h>
BOOLEAN mSecureBootDisabled = FALSE;
BOOLEAN mStopRedfishService = FALSE;
BOOLEAN mSecureBootDisabled = FALSE;
BOOLEAN mStopRedfishService = FALSE;
EFI_STATUS
EFIAPI
LibStopRedfishService (
IN EDKII_REDFISH_CREDENTIAL_PROTOCOL *This,
IN EDKII_REDFISH_CREDENTIAL_STOP_SERVICE_TYPE ServiceStopType
);
IN EDKII_REDFISH_CREDENTIAL_PROTOCOL *This,
IN EDKII_REDFISH_CREDENTIAL_STOP_SERVICE_TYPE ServiceStopType
);
/**
Return the credential for accessing to Redfish servcice.
@ -41,10 +41,10 @@ LibStopRedfishService (
**/
EFI_STATUS
GetRedfishCredential (
OUT EDKII_REDFISH_AUTH_METHOD *AuthMethod,
OUT CHAR8 **UserId,
OUT CHAR8 **Password
)
OUT EDKII_REDFISH_AUTH_METHOD *AuthMethod,
OUT CHAR8 **UserId,
OUT CHAR8 **Password
)
{
UINTN UserIdSize;
UINTN PasswordSize;
@ -59,14 +59,16 @@ GetRedfishCredential (
//
UserIdSize = AsciiStrSize ((CHAR8 *)PcdGetPtr (PcdRedfishServieUserId));
PasswordSize = AsciiStrSize ((CHAR8 *)PcdGetPtr (PcdRedfishServiePassword));
if (UserIdSize == 0 || PasswordSize == 0) {
if ((UserIdSize == 0) || (PasswordSize == 0)) {
DEBUG ((DEBUG_ERROR, "Incorrect string of UserID or Password for REdfish service.\n"));
return EFI_INVALID_PARAMETER;
}
*UserId = AllocateZeroPool (UserIdSize);
if (*UserId == NULL) {
return EFI_OUT_OF_RESOURCES;
}
CopyMem (*UserId, (CHAR8 *)PcdGetPtr (PcdRedfishServieUserId), UserIdSize);
*Password = AllocateZeroPool (PasswordSize);
@ -110,11 +112,11 @@ LibCredentialGetAuthInfo (
OUT EDKII_REDFISH_AUTH_METHOD *AuthMethod,
OUT CHAR8 **UserId,
OUT CHAR8 **Password
)
)
{
EFI_STATUS Status;
EFI_STATUS Status;
if (This == NULL || AuthMethod == NULL || UserId == NULL || Password == NULL) {
if ((This == NULL) || (AuthMethod == NULL) || (UserId == NULL) || (Password == NULL)) {
return EFI_INVALID_PARAMETER;
}
@ -124,7 +126,7 @@ LibCredentialGetAuthInfo (
if (mSecureBootDisabled) {
Status = LibStopRedfishService (This, ServiceStopTypeSecureBootDisabled);
if (EFI_ERROR (Status) && Status != EFI_UNSUPPORTED) {
if (EFI_ERROR (Status) && (Status != EFI_UNSUPPORTED)) {
DEBUG ((DEBUG_ERROR, "SecureBoot has been disabled, but failed to stop RedfishService - %r\n", Status));
return Status;
}
@ -159,9 +161,9 @@ LibCredentialGetAuthInfo (
EFI_STATUS
EFIAPI
LibStopRedfishService (
IN EDKII_REDFISH_CREDENTIAL_PROTOCOL *This,
IN EDKII_REDFISH_CREDENTIAL_STOP_SERVICE_TYPE ServiceStopType
)
IN EDKII_REDFISH_CREDENTIAL_PROTOCOL *This,
IN EDKII_REDFISH_CREDENTIAL_STOP_SERVICE_TYPE ServiceStopType
)
{
if (ServiceStopType >= ServiceStopTypeMax) {
return EFI_INVALID_PARAMETER;
@ -193,8 +195,10 @@ LibStopRedfishService (
mStopRedfishService = TRUE;
DEBUG ((DEBUG_INFO, "EFI Redfish service is stopped without Redfish service stop type!!\n"));
}
return EFI_SUCCESS;
}
/**
Notification of Exit Boot Service.
@ -204,7 +208,7 @@ VOID
EFIAPI
LibCredentialExitBootServicesNotify (
IN EDKII_REDFISH_CREDENTIAL_PROTOCOL *This
)
)
{
LibStopRedfishService (This, ServiceStopTypeExitBootService);
}
@ -218,15 +222,15 @@ VOID
EFIAPI
LibCredentialEndOfDxeNotify (
IN EDKII_REDFISH_CREDENTIAL_PROTOCOL *This
)
)
{
EFI_STATUS Status;
UINT8 *SecureBootVar;
UINT8 *SecureBootVar;
//
// Check Secure Boot status and lock Redfish service if Secure Boot is disabled.
//
Status = GetVariable2 (EFI_SECURE_BOOT_MODE_NAME, &gEfiGlobalVariableGuid, (VOID**)&SecureBootVar, NULL);
Status = GetVariable2 (EFI_SECURE_BOOT_MODE_NAME, &gEfiGlobalVariableGuid, (VOID **)&SecureBootVar, NULL);
if (EFI_ERROR (Status) || (*SecureBootVar != SECURE_BOOT_MODE_ENABLE)) {
//
// Secure Boot is disabled

View File

@ -26,7 +26,7 @@
#define VERBOSE_COLUME_SIZE (16)
REDFISH_OVER_IP_PROTOCOL_DATA *mRedfishOverIpProtocolData;
UINT8 mRedfishProtocolDataSize;
UINT8 mRedfishProtocolDataSize;
/**
Get the MAC address of NIC.
@ -38,22 +38,23 @@ UINT8 mRedfishProtocolDataSize;
**/
EFI_STATUS
GetMacAddressInformation (
OUT EFI_MAC_ADDRESS *MacAddress
OUT EFI_MAC_ADDRESS *MacAddress
)
{
MAC_ADDR_DEVICE_PATH *Mac;
REST_EX_SERVICE_DEVICE_PATH_DATA *RestExServiceDevicePathData;
EFI_DEVICE_PATH_PROTOCOL *RestExServiceDevicePath;
MAC_ADDR_DEVICE_PATH *MacAddressDevicePath;
MAC_ADDR_DEVICE_PATH *Mac;
REST_EX_SERVICE_DEVICE_PATH_DATA *RestExServiceDevicePathData;
EFI_DEVICE_PATH_PROTOCOL *RestExServiceDevicePath;
MAC_ADDR_DEVICE_PATH *MacAddressDevicePath;
Mac = NULL;
RestExServiceDevicePathData = NULL;
RestExServiceDevicePath = NULL;
Mac = NULL;
RestExServiceDevicePathData = NULL;
RestExServiceDevicePath = NULL;
RestExServiceDevicePathData = (REST_EX_SERVICE_DEVICE_PATH_DATA *)PcdGetPtr(PcdRedfishRestExServiceDevicePath);
if (RestExServiceDevicePathData == NULL ||
RestExServiceDevicePathData->DevicePathNum == 0 ||
!IsDevicePathValid (RestExServiceDevicePathData->DevicePath, 0)) {
RestExServiceDevicePathData = (REST_EX_SERVICE_DEVICE_PATH_DATA *)PcdGetPtr (PcdRedfishRestExServiceDevicePath);
if ((RestExServiceDevicePathData == NULL) ||
(RestExServiceDevicePathData->DevicePathNum == 0) ||
!IsDevicePathValid (RestExServiceDevicePathData->DevicePath, 0))
{
return EFI_NOT_FOUND;
}
@ -67,7 +68,8 @@ GetMacAddressInformation (
//
while (!IsDevicePathEnd (RestExServiceDevicePath) &&
((DevicePathType (RestExServiceDevicePath) != MESSAGING_DEVICE_PATH) ||
(DevicePathSubType (RestExServiceDevicePath) != MSG_MAC_ADDR_DP))) {
(DevicePathSubType (RestExServiceDevicePath) != MSG_MAC_ADDR_DP)))
{
RestExServiceDevicePath = NextDevicePathNode (RestExServiceDevicePath);
}
@ -76,6 +78,7 @@ GetMacAddressInformation (
CopyMem ((VOID *)MacAddress, (VOID *)&MacAddressDevicePath->MacAddress, sizeof (EFI_MAC_ADDRESS));
return EFI_SUCCESS;
}
return EFI_NOT_FOUND;
}
@ -91,35 +94,38 @@ GetMacAddressInformation (
**/
EFI_STATUS
RedfishPlatformHostInterfaceDeviceDescriptor (
OUT UINT8 *DeviceType,
OUT UINT8 *DeviceType,
OUT REDFISH_INTERFACE_DATA **DeviceDescriptor
)
)
{
EFI_STATUS Status;
EFI_MAC_ADDRESS MacAddress;
REDFISH_INTERFACE_DATA *RedfishInterfaceData;
PCI_OR_PCIE_INTERFACE_DEVICE_DESCRIPTOR_V2 *ThisDeviceDescriptor;
EFI_STATUS Status;
EFI_MAC_ADDRESS MacAddress;
REDFISH_INTERFACE_DATA *RedfishInterfaceData;
PCI_OR_PCIE_INTERFACE_DEVICE_DESCRIPTOR_V2 *ThisDeviceDescriptor;
RedfishInterfaceData = AllocateZeroPool (sizeof (PCI_OR_PCIE_INTERFACE_DEVICE_DESCRIPTOR_V2) + 1);
if (RedfishInterfaceData == NULL) {
return EFI_OUT_OF_RESOURCES;
}
RedfishInterfaceData->DeviceType = REDFISH_HOST_INTERFACE_DEVICE_TYPE_PCI_PCIE_V2;
//
// Fill up device type information.
//
ThisDeviceDescriptor = (PCI_OR_PCIE_INTERFACE_DEVICE_DESCRIPTOR_V2 *)((UINT8 *)RedfishInterfaceData + 1);
ThisDeviceDescriptor = (PCI_OR_PCIE_INTERFACE_DEVICE_DESCRIPTOR_V2 *)((UINT8 *)RedfishInterfaceData + 1);
ThisDeviceDescriptor->Length = sizeof (PCI_OR_PCIE_INTERFACE_DEVICE_DESCRIPTOR_V2) + 1;
Status = GetMacAddressInformation (&MacAddress);
Status = GetMacAddressInformation (&MacAddress);
if (EFI_ERROR (Status)) {
FreePool (RedfishInterfaceData);
return EFI_NOT_FOUND;
}
CopyMem ((VOID *)&ThisDeviceDescriptor->MacAddress, (VOID *)&MacAddress, sizeof (ThisDeviceDescriptor->MacAddress));
*DeviceType = REDFISH_HOST_INTERFACE_DEVICE_TYPE_PCI_PCIE_V2;
*DeviceType = REDFISH_HOST_INTERFACE_DEVICE_TYPE_PCI_PCIE_V2;
*DeviceDescriptor = RedfishInterfaceData;
return EFI_SUCCESS;
}
/**
Get platform Redfish host interface protocol data.
Caller should pass NULL in ProtocolRecord to retrive the first protocol record.
@ -136,29 +142,32 @@ RedfishPlatformHostInterfaceDeviceDescriptor (
**/
EFI_STATUS
RedfishPlatformHostInterfaceProtocolData (
OUT MC_HOST_INTERFACE_PROTOCOL_RECORD **ProtocolRecord,
IN UINT8 IndexOfProtocolData
)
OUT MC_HOST_INTERFACE_PROTOCOL_RECORD **ProtocolRecord,
IN UINT8 IndexOfProtocolData
)
{
MC_HOST_INTERFACE_PROTOCOL_RECORD *ThisProtocolRecord;
MC_HOST_INTERFACE_PROTOCOL_RECORD *ThisProtocolRecord;
if (mRedfishOverIpProtocolData == 0) {
return EFI_NOT_FOUND;
}
if (IndexOfProtocolData == 0) {
//
// Return the first Redfish protocol data to caller. We only have
// one protocol data in this case.
//
ThisProtocolRecord = (MC_HOST_INTERFACE_PROTOCOL_RECORD *) AllocatePool (mRedfishProtocolDataSize + sizeof (MC_HOST_INTERFACE_PROTOCOL_RECORD) - 1);
ThisProtocolRecord->ProtocolType = MCHostInterfaceProtocolTypeRedfishOverIP;
ThisProtocolRecord = (MC_HOST_INTERFACE_PROTOCOL_RECORD *)AllocatePool (mRedfishProtocolDataSize + sizeof (MC_HOST_INTERFACE_PROTOCOL_RECORD) - 1);
ThisProtocolRecord->ProtocolType = MCHostInterfaceProtocolTypeRedfishOverIP;
ThisProtocolRecord->ProtocolTypeDataLen = mRedfishProtocolDataSize;
CopyMem ((VOID *)&ThisProtocolRecord->ProtocolTypeData, (VOID *)mRedfishOverIpProtocolData, mRedfishProtocolDataSize);
*ProtocolRecord = ThisProtocolRecord;
return EFI_SUCCESS;
}
return EFI_NOT_FOUND;
}
/**
Dump IPv4 address.
@ -166,10 +175,10 @@ RedfishPlatformHostInterfaceProtocolData (
**/
VOID
InternalDumpIp4Addr (
IN EFI_IPv4_ADDRESS *Ip
IN EFI_IPv4_ADDRESS *Ip
)
{
UINTN Index;
UINTN Index;
for (Index = 0; Index < 4; Index++) {
DEBUG ((DEBUG_VERBOSE, "%d", Ip->Addr[Index]));
@ -180,6 +189,7 @@ InternalDumpIp4Addr (
DEBUG ((DEBUG_VERBOSE, "\n"));
}
/**
Dump IPv6 address.
@ -187,15 +197,16 @@ InternalDumpIp4Addr (
**/
VOID
InternalDumpIp6Addr (
IN EFI_IPv6_ADDRESS *Ip
IN EFI_IPv6_ADDRESS *Ip
)
{
UINTN Index;
UINTN Index;
for (Index = 0; Index < 16; Index++) {
if (Ip->Addr[Index] != 0) {
DEBUG ((DEBUG_VERBOSE, "%x", Ip->Addr[Index]));
}
Index++;
if (Index > 15) {
@ -205,14 +216,17 @@ InternalDumpIp6Addr (
if (((Ip->Addr[Index] & 0xf0) == 0) && (Ip->Addr[Index - 1] != 0)) {
DEBUG ((DEBUG_VERBOSE, "0"));
}
DEBUG ((DEBUG_VERBOSE, "%x", Ip->Addr[Index]));
if (Index < 15) {
DEBUG ((DEBUG_VERBOSE, ":"));
}
}
DEBUG ((DEBUG_VERBOSE, "\n"));
}
/**
Dump data
@ -226,10 +240,12 @@ InternalDumpData (
)
{
UINTN Index;
for (Index = 0; Index < Size; Index++) {
DEBUG ((DEBUG_VERBOSE, "%02x ", (UINTN)Data[Index]));
}
}
/**
Dump hex data
@ -242,9 +258,9 @@ InternalDumpHex (
IN UINTN Size
)
{
UINTN Index;
UINTN Count;
UINTN Left;
UINTN Index;
UINTN Count;
UINTN Left;
Count = Size / VERBOSE_COLUME_SIZE;
Left = Size % VERBOSE_COLUME_SIZE;
@ -260,6 +276,7 @@ InternalDumpHex (
DEBUG ((DEBUG_VERBOSE, "\n"));
}
/**
Dump Redfish over IP protocol data
@ -268,14 +285,14 @@ InternalDumpHex (
**/
VOID
DumpRedfishIpProtocolData (
IN REDFISH_OVER_IP_PROTOCOL_DATA *RedfishProtocolData,
IN UINT8 RedfishProtocolDataSize
IN REDFISH_OVER_IP_PROTOCOL_DATA *RedfishProtocolData,
IN UINT8 RedfishProtocolDataSize
)
{
CHAR16 Hostname[16];
CHAR16 Hostname[16];
DEBUG ((DEBUG_VERBOSE, "RedfishProtocolData: \n"));
InternalDumpHex ((UINT8 *) RedfishProtocolData, RedfishProtocolDataSize);
InternalDumpHex ((UINT8 *)RedfishProtocolData, RedfishProtocolDataSize);
DEBUG ((DEBUG_VERBOSE, "Parsing as below: \n"));
@ -287,16 +304,16 @@ DumpRedfishIpProtocolData (
DEBUG ((DEBUG_VERBOSE, "RedfishProtocolData->HostIpAddress: \n"));
if (RedfishProtocolData->HostIpAddressFormat == 0x01) {
InternalDumpIp4Addr ((EFI_IPv4_ADDRESS *) (RedfishProtocolData->HostIpAddress));
InternalDumpIp4Addr ((EFI_IPv4_ADDRESS *)(RedfishProtocolData->HostIpAddress));
} else {
InternalDumpIp6Addr ((EFI_IPv6_ADDRESS *) (RedfishProtocolData->HostIpAddress));
InternalDumpIp6Addr ((EFI_IPv6_ADDRESS *)(RedfishProtocolData->HostIpAddress));
}
DEBUG ((DEBUG_VERBOSE, "RedfishProtocolData->HostIpMask: \n"));
if (RedfishProtocolData->HostIpAddressFormat == 0x01) {
InternalDumpIp4Addr ((EFI_IPv4_ADDRESS *) (RedfishProtocolData->HostIpMask));
InternalDumpIp4Addr ((EFI_IPv4_ADDRESS *)(RedfishProtocolData->HostIpMask));
} else {
InternalDumpIp6Addr ((EFI_IPv6_ADDRESS *) (RedfishProtocolData->HostIpMask));
InternalDumpIp6Addr ((EFI_IPv6_ADDRESS *)(RedfishProtocolData->HostIpMask));
}
DEBUG ((DEBUG_VERBOSE, "RedfishProtocolData->RedfishServiceIpDiscoveryType - %d\n", RedfishProtocolData->RedfishServiceIpDiscoveryType));
@ -305,16 +322,16 @@ DumpRedfishIpProtocolData (
DEBUG ((DEBUG_VERBOSE, "RedfishProtocolData->RedfishServiceIpAddress: \n"));
if (RedfishProtocolData->RedfishServiceIpAddressFormat == 0x01) {
InternalDumpIp4Addr ((EFI_IPv4_ADDRESS *) (RedfishProtocolData->RedfishServiceIpAddress));
InternalDumpIp4Addr ((EFI_IPv4_ADDRESS *)(RedfishProtocolData->RedfishServiceIpAddress));
} else {
InternalDumpIp6Addr ((EFI_IPv6_ADDRESS *) (RedfishProtocolData->RedfishServiceIpAddress));
InternalDumpIp6Addr ((EFI_IPv6_ADDRESS *)(RedfishProtocolData->RedfishServiceIpAddress));
}
DEBUG ((DEBUG_VERBOSE, "RedfishProtocolData->RedfishServiceIpMask: \n"));
if (RedfishProtocolData->RedfishServiceIpAddressFormat == 0x01) {
InternalDumpIp4Addr ((EFI_IPv4_ADDRESS *) (RedfishProtocolData->RedfishServiceIpMask));
InternalDumpIp4Addr ((EFI_IPv4_ADDRESS *)(RedfishProtocolData->RedfishServiceIpMask));
} else {
InternalDumpIp6Addr ((EFI_IPv6_ADDRESS *) (RedfishProtocolData->RedfishServiceIpMask));
InternalDumpIp6Addr ((EFI_IPv6_ADDRESS *)(RedfishProtocolData->RedfishServiceIpMask));
}
DEBUG ((DEBUG_VERBOSE, "RedfishProtocolData->RedfishServiceIpPort - %d\n", RedfishProtocolData->RedfishServiceIpPort));
@ -323,7 +340,7 @@ DumpRedfishIpProtocolData (
DEBUG ((DEBUG_VERBOSE, "RedfishProtocolData->RedfishServiceHostnameLength - %d\n", RedfishProtocolData->RedfishServiceHostnameLength));
AsciiStrToUnicodeStrS((CHAR8 *) RedfishProtocolData->RedfishServiceHostname, Hostname, sizeof (Hostname) / sizeof (Hostname[0]));
AsciiStrToUnicodeStrS ((CHAR8 *)RedfishProtocolData->RedfishServiceHostname, Hostname, sizeof (Hostname) / sizeof (Hostname[0]));
DEBUG ((DEBUG_VERBOSE, "RedfishProtocolData->RedfishServiceHostname - %s\n", Hostname));
}
@ -337,24 +354,24 @@ DumpRedfishIpProtocolData (
**/
EFI_STATUS
GetRedfishRecordFromVariable (
OUT REDFISH_OVER_IP_PROTOCOL_DATA **RedfishProtocolData,
OUT UINT8 *RedfishProtocolDataSize
OUT REDFISH_OVER_IP_PROTOCOL_DATA **RedfishProtocolData,
OUT UINT8 *RedfishProtocolDataSize
)
{
EFI_STATUS Status;
UINT8 HostIpAssignmentType;
UINTN HostIpAssignmentTypeSize;
EFI_IPv4_ADDRESS HostIpAddress;
UINTN IPv4DataSize;
EFI_IPv4_ADDRESS HostIpMask;
EFI_IPv4_ADDRESS RedfishServiceIpAddress;
EFI_IPv4_ADDRESS RedfishServiceIpMask;
UINT16 RedfishServiceIpPort;
UINTN IpPortDataSize;
UINT8 HostNameSize;
CHAR8 RedfishHostName[20];
EFI_STATUS Status;
UINT8 HostIpAssignmentType;
UINTN HostIpAssignmentTypeSize;
EFI_IPv4_ADDRESS HostIpAddress;
UINTN IPv4DataSize;
EFI_IPv4_ADDRESS HostIpMask;
EFI_IPv4_ADDRESS RedfishServiceIpAddress;
EFI_IPv4_ADDRESS RedfishServiceIpMask;
UINT16 RedfishServiceIpPort;
UINTN IpPortDataSize;
UINT8 HostNameSize;
CHAR8 RedfishHostName[20];
if (RedfishProtocolData == NULL || RedfishProtocolDataSize == NULL) {
if ((RedfishProtocolData == NULL) || (RedfishProtocolDataSize == NULL)) {
return EFI_INVALID_PARAMETER;
}
@ -446,7 +463,7 @@ GetRedfishRecordFromVariable (
RedfishServiceIpAddress.Addr[3]
);
HostNameSize = (UINT8) AsciiStrLen (RedfishHostName) + 1;
HostNameSize = (UINT8)AsciiStrLen (RedfishHostName) + 1;
//
// 2. Protocol Data Size.
@ -456,7 +473,7 @@ GetRedfishRecordFromVariable (
//
// 3. Protocol Data.
//
*RedfishProtocolData = (REDFISH_OVER_IP_PROTOCOL_DATA *) AllocateZeroPool (*RedfishProtocolDataSize);
*RedfishProtocolData = (REDFISH_OVER_IP_PROTOCOL_DATA *)AllocateZeroPool (*RedfishProtocolDataSize);
if (*RedfishProtocolData == NULL) {
return EFI_OUT_OF_RESOURCES;
}
@ -464,7 +481,7 @@ GetRedfishRecordFromVariable (
CopyGuid (&(*RedfishProtocolData)->ServiceUuid, &gEmuRedfishServiceGuid);
(*RedfishProtocolData)->HostIpAssignmentType = HostIpAssignmentType;
(*RedfishProtocolData)->HostIpAddressFormat = 1; // Only support IPv4
(*RedfishProtocolData)->HostIpAddressFormat = 1; // Only support IPv4
if (HostIpAssignmentType == 1 ) {
(*RedfishProtocolData)->HostIpAddress[0] = HostIpAddress.Addr[0];
@ -495,7 +512,7 @@ GetRedfishRecordFromVariable (
(*RedfishProtocolData)->RedfishServiceVlanId = 0xffffffff;
(*RedfishProtocolData)->RedfishServiceHostnameLength = HostNameSize;
AsciiStrCpyS ((CHAR8 *) ((*RedfishProtocolData)->RedfishServiceHostname), HostNameSize, RedfishHostName);
AsciiStrCpyS ((CHAR8 *)((*RedfishProtocolData)->RedfishServiceHostname), HostNameSize, RedfishHostName);
return Status;
}
@ -513,16 +530,17 @@ GetRedfishRecordFromVariable (
EFI_STATUS
EFIAPI
RedfishPlatformHostInterfaceConstructor (
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 = GetRedfishRecordFromVariable (&mRedfishOverIpProtocolData, &mRedfishProtocolDataSize);
DEBUG ((DEBUG_INFO, "%a: GetRedfishRecordFromVariable() - %r\n", __FUNCTION__, Status));
if (!EFI_ERROR (Status)) {
DumpRedfishIpProtocolData (mRedfishOverIpProtocolData, mRedfishProtocolDataSize);
}
return EFI_SUCCESS;
}

View File

@ -9,7 +9,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <PiPei.h>
#define GET_OCCUPIED_SIZE(ActualSize, Alignment) \
(ActualSize) + (((Alignment) - ((ActualSize) & ((Alignment) - 1))) & ((Alignment) - 1))
@ -18,6 +17,7 @@ GetFileState (
IN UINT8 ErasePolarity,
IN EFI_FFS_FILE_HEADER *FfsHeader
)
/*++
Routine Description:
@ -39,7 +39,7 @@ Returns:
FileState = FfsHeader->State;
if (ErasePolarity != 0) {
FileState = (EFI_FFS_FILE_STATE)~FileState;
FileState = (EFI_FFS_FILE_STATE) ~FileState;
}
HighestBit = 0x80;
@ -54,6 +54,7 @@ UINT8
CalculateHeaderChecksum (
IN EFI_FFS_FILE_HEADER *FileHeader
)
/*++
Routine Description:
@ -67,41 +68,43 @@ Returns:
**/
{
UINT8 *ptr;
UINTN Index;
UINT8 Sum;
UINT8 *ptr;
UINTN Index;
UINT8 Sum;
Sum = 0;
ptr = (UINT8 *) FileHeader;
ptr = (UINT8 *)FileHeader;
for (Index = 0; Index < sizeof (EFI_FFS_FILE_HEADER) - 3; Index += 4) {
Sum = (UINT8) (Sum + ptr[Index]);
Sum = (UINT8) (Sum + ptr[Index + 1]);
Sum = (UINT8) (Sum + ptr[Index + 2]);
Sum = (UINT8) (Sum + ptr[Index + 3]);
Sum = (UINT8)(Sum + ptr[Index]);
Sum = (UINT8)(Sum + ptr[Index + 1]);
Sum = (UINT8)(Sum + ptr[Index + 2]);
Sum = (UINT8)(Sum + ptr[Index + 3]);
}
for (; Index < sizeof (EFI_FFS_FILE_HEADER); Index++) {
Sum = (UINT8) (Sum + ptr[Index]);
for ( ; Index < sizeof (EFI_FFS_FILE_HEADER); Index++) {
Sum = (UINT8)(Sum + ptr[Index]);
}
//
// State field (since this indicates the different state of file).
//
Sum = (UINT8) (Sum - FileHeader->State);
Sum = (UINT8)(Sum - FileHeader->State);
//
// Checksum field of the file is not part of the header checksum.
//
Sum = (UINT8) (Sum - FileHeader->IntegrityCheck.Checksum.File);
Sum = (UINT8)(Sum - FileHeader->IntegrityCheck.Checksum.File);
return Sum;
}
EFI_STATUS
SecFfsFindNextFile (
IN EFI_FV_FILETYPE SearchType,
IN EFI_PEI_FV_HANDLE FvHandle,
IN OUT EFI_PEI_FILE_HANDLE *FileHandle
IN EFI_FV_FILETYPE SearchType,
IN EFI_PEI_FV_HANDLE FvHandle,
IN OUT EFI_PEI_FILE_HANDLE *FileHandle
)
/*++
Routine Description:
@ -124,20 +127,20 @@ Returns:
**/
{
EFI_FFS_FILE_HEADER *FfsFileHeader;
UINT32 FileLength;
UINT32 FileOccupiedSize;
UINT32 FileOffset;
UINT64 FvLength;
UINT8 ErasePolarity;
UINT8 FileState;
EFI_FFS_FILE_HEADER *FfsFileHeader;
UINT32 FileLength;
UINT32 FileOccupiedSize;
UINT32 FileOffset;
UINT64 FvLength;
UINT8 ErasePolarity;
UINT8 FileState;
EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader;
EFI_FFS_FILE_HEADER **FileHeader;
//
// Convert the handle of FV to FV header for memory-mapped firmware volume
//
FwVolHeader = (EFI_FIRMWARE_VOLUME_HEADER *) FvHandle;
FwVolHeader = (EFI_FIRMWARE_VOLUME_HEADER *)FvHandle;
FileHeader = (EFI_FFS_FILE_HEADER **)FileHandle;
FvLength = FwVolHeader->FvLength;
@ -146,23 +149,24 @@ Returns:
} else {
ErasePolarity = 0;
}
//
// If FileHeader is not specified (NULL) start with the first file in the
// firmware volume. Otherwise, start from the FileHeader.
//
if (*FileHeader == NULL) {
FfsFileHeader = (EFI_FFS_FILE_HEADER *) ((UINT8 *) FwVolHeader + FwVolHeader->HeaderLength);
FfsFileHeader = (EFI_FFS_FILE_HEADER *)((UINT8 *)FwVolHeader + FwVolHeader->HeaderLength);
} else {
//
// Length is 24 bits wide so mask upper 8 bits
// FileLength is adjusted to FileOccupiedSize as it is 8 byte aligned.
//
FileLength = *(UINT32 *) (*FileHeader)->Size & 0x00FFFFFF;
FileOccupiedSize = GET_OCCUPIED_SIZE (FileLength, 8);
FfsFileHeader = (EFI_FFS_FILE_HEADER *) ((UINT8 *) *FileHeader + FileOccupiedSize);
FileLength = *(UINT32 *)(*FileHeader)->Size & 0x00FFFFFF;
FileOccupiedSize = GET_OCCUPIED_SIZE (FileLength, 8);
FfsFileHeader = (EFI_FFS_FILE_HEADER *)((UINT8 *)*FileHeader + FileOccupiedSize);
}
FileOffset = (UINT32) ((UINT8 *) FfsFileHeader - (UINT8 *) FwVolHeader);
FileOffset = (UINT32)((UINT8 *)FfsFileHeader - (UINT8 *)FwVolHeader);
while (FileOffset < (FvLength - sizeof (EFI_FFS_FILE_HEADER))) {
//
@ -171,42 +175,40 @@ Returns:
FileState = GetFileState (ErasePolarity, FfsFileHeader);
switch (FileState) {
case EFI_FILE_HEADER_INVALID:
FileOffset += sizeof (EFI_FFS_FILE_HEADER);
FfsFileHeader = (EFI_FFS_FILE_HEADER *)((UINT8 *)FfsFileHeader + sizeof (EFI_FFS_FILE_HEADER));
break;
case EFI_FILE_HEADER_INVALID:
FileOffset += sizeof (EFI_FFS_FILE_HEADER);
FfsFileHeader = (EFI_FFS_FILE_HEADER *) ((UINT8 *) FfsFileHeader + sizeof (EFI_FFS_FILE_HEADER));
break;
case EFI_FILE_DATA_VALID:
case EFI_FILE_MARKED_FOR_UPDATE:
if (CalculateHeaderChecksum (FfsFileHeader) == 0) {
FileLength = *(UINT32 *)(FfsFileHeader->Size) & 0x00FFFFFF;
FileOccupiedSize = GET_OCCUPIED_SIZE (FileLength, 8);
case EFI_FILE_DATA_VALID:
case EFI_FILE_MARKED_FOR_UPDATE:
if (CalculateHeaderChecksum (FfsFileHeader) == 0) {
FileLength = *(UINT32 *) (FfsFileHeader->Size) & 0x00FFFFFF;
FileOccupiedSize = GET_OCCUPIED_SIZE (FileLength, 8);
if ((SearchType == FfsFileHeader->Type) || (SearchType == EFI_FV_FILETYPE_ALL)) {
*FileHeader = FfsFileHeader;
if ((SearchType == FfsFileHeader->Type) || (SearchType == EFI_FV_FILETYPE_ALL)) {
return EFI_SUCCESS;
}
*FileHeader = FfsFileHeader;
return EFI_SUCCESS;
FileOffset += FileOccupiedSize;
FfsFileHeader = (EFI_FFS_FILE_HEADER *)((UINT8 *)FfsFileHeader + FileOccupiedSize);
} else {
return EFI_NOT_FOUND;
}
FileOffset += FileOccupiedSize;
FfsFileHeader = (EFI_FFS_FILE_HEADER *) ((UINT8 *) FfsFileHeader + FileOccupiedSize);
} else {
break;
case EFI_FILE_DELETED:
FileLength = *(UINT32 *)(FfsFileHeader->Size) & 0x00FFFFFF;
FileOccupiedSize = GET_OCCUPIED_SIZE (FileLength, 8);
FileOffset += FileOccupiedSize;
FfsFileHeader = (EFI_FFS_FILE_HEADER *)((UINT8 *)FfsFileHeader + FileOccupiedSize);
break;
default:
return EFI_NOT_FOUND;
}
break;
case EFI_FILE_DELETED:
FileLength = *(UINT32 *) (FfsFileHeader->Size) & 0x00FFFFFF;
FileOccupiedSize = GET_OCCUPIED_SIZE (FileLength, 8);
FileOffset += FileOccupiedSize;
FfsFileHeader = (EFI_FFS_FILE_HEADER *) ((UINT8 *) FfsFileHeader + FileOccupiedSize);
break;
default:
return EFI_NOT_FOUND;
}
}
@ -215,10 +217,11 @@ Returns:
EFI_STATUS
SecFfsFindSectionData (
IN EFI_SECTION_TYPE SectionType,
IN EFI_FFS_FILE_HEADER *FfsFileHeader,
IN OUT VOID **SectionData
IN EFI_SECTION_TYPE SectionType,
IN EFI_FFS_FILE_HEADER *FfsFileHeader,
IN OUT VOID **SectionData
)
/*++
Routine Description:
@ -237,39 +240,39 @@ Returns:
**/
{
UINT32 FileSize;
EFI_COMMON_SECTION_HEADER *Section;
UINT32 SectionLength;
UINT32 ParsedLength;
UINT32 FileSize;
EFI_COMMON_SECTION_HEADER *Section;
UINT32 SectionLength;
UINT32 ParsedLength;
//
// Size is 24 bits wide so mask upper 8 bits.
// Does not include FfsFileHeader header size
// FileSize is adjusted to FileOccupiedSize as it is 8 byte aligned.
//
Section = (EFI_COMMON_SECTION_HEADER *) (FfsFileHeader + 1);
FileSize = *(UINT32 *) (FfsFileHeader->Size) & 0x00FFFFFF;
Section = (EFI_COMMON_SECTION_HEADER *)(FfsFileHeader + 1);
FileSize = *(UINT32 *)(FfsFileHeader->Size) & 0x00FFFFFF;
FileSize -= sizeof (EFI_FFS_FILE_HEADER);
*SectionData = NULL;
ParsedLength = 0;
*SectionData = NULL;
ParsedLength = 0;
while (ParsedLength < FileSize) {
if (Section->Type == SectionType) {
*SectionData = (VOID *) (Section + 1);
*SectionData = (VOID *)(Section + 1);
return EFI_SUCCESS;
}
//
// Size is 24 bits wide so mask upper 8 bits.
// SectionLength is adjusted it is 4 byte aligned.
// Go to the next section
//
SectionLength = *(UINT32 *) Section->Size & 0x00FFFFFF;
SectionLength = *(UINT32 *)Section->Size & 0x00FFFFFF;
SectionLength = GET_OCCUPIED_SIZE (SectionLength, 4);
ParsedLength += SectionLength;
Section = (EFI_COMMON_SECTION_HEADER *) ((UINT8 *) Section + SectionLength);
Section = (EFI_COMMON_SECTION_HEADER *)((UINT8 *)Section + SectionLength);
}
return EFI_NOT_FOUND;
}

View File

@ -6,30 +6,26 @@
**/
#include <PiPei.h>
#include <Library/EmuMagicPageLib.h>
#include <Library/PeiServicesLib.h>
#include <Library/DebugLib.h>
#include <Library/BaseMemoryLib.h>
EFI_STATUS
SecFfsFindNextFile (
IN EFI_FV_FILETYPE SearchType,
IN EFI_PEI_FV_HANDLE VolumeHandle,
IN OUT EFI_PEI_FILE_HANDLE *FileHandle
IN EFI_FV_FILETYPE SearchType,
IN EFI_PEI_FV_HANDLE VolumeHandle,
IN OUT EFI_PEI_FILE_HANDLE *FileHandle
);
EFI_STATUS
SecFfsFindSectionData (
IN EFI_SECTION_TYPE SectionType,
IN EFI_PEI_FILE_HANDLE FileHandle,
OUT VOID **SectionData
IN EFI_SECTION_TYPE SectionType,
IN EFI_PEI_FILE_HANDLE FileHandle,
OUT VOID **SectionData
);
/**
This service enables a given PEIM to register an interface into the PEI Foundation.
@ -45,7 +41,7 @@ SecFfsFindSectionData (
EFI_STATUS
EFIAPI
PeiServicesInstallPpi (
IN CONST EFI_PEI_PPI_DESCRIPTOR *PpiList
IN CONST EFI_PEI_PPI_DESCRIPTOR *PpiList
)
{
ASSERT (FALSE);
@ -70,8 +66,8 @@ PeiServicesInstallPpi (
EFI_STATUS
EFIAPI
PeiServicesReInstallPpi (
IN CONST EFI_PEI_PPI_DESCRIPTOR *OldPpi,
IN CONST EFI_PEI_PPI_DESCRIPTOR *NewPpi
IN CONST EFI_PEI_PPI_DESCRIPTOR *OldPpi,
IN CONST EFI_PEI_PPI_DESCRIPTOR *NewPpi
)
{
ASSERT (FALSE);
@ -97,26 +93,28 @@ PeiServicesReInstallPpi (
EFI_STATUS
EFIAPI
PeiServicesLocatePpi (
IN CONST EFI_GUID *Guid,
IN UINTN Instance,
IN OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor,
IN OUT VOID **Ppi
IN CONST EFI_GUID *Guid,
IN UINTN Instance,
IN OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor,
IN OUT VOID **Ppi
)
{
EFI_PEI_PPI_DESCRIPTOR *PpiList;
EFI_PEI_PPI_DESCRIPTOR *PpiList;
if (Instance != 0) {
return EFI_NOT_FOUND;
}
for (PpiList = EMU_MAGIC_PAGE()->PpiList; ; PpiList++) {
for (PpiList = EMU_MAGIC_PAGE ()->PpiList; ; PpiList++) {
if (CompareGuid (PpiList->Guid, Guid)) {
if (PpiDescriptor != NULL) {
*PpiDescriptor = PpiList;
}
if (Ppi != NULL) {
*Ppi = PpiList->Ppi;
}
return EFI_SUCCESS;
}
@ -125,7 +123,6 @@ PeiServicesLocatePpi (
}
}
return EFI_NOT_FOUND;
}
@ -166,7 +163,7 @@ PeiServicesNotifyPpi (
EFI_STATUS
EFIAPI
PeiServicesGetBootMode (
OUT EFI_BOOT_MODE *BootMode
OUT EFI_BOOT_MODE *BootMode
)
{
ASSERT (FALSE);
@ -184,7 +181,7 @@ PeiServicesGetBootMode (
EFI_STATUS
EFIAPI
PeiServicesSetBootMode (
IN EFI_BOOT_MODE BootMode
IN EFI_BOOT_MODE BootMode
)
{
ASSERT (FALSE);
@ -204,7 +201,7 @@ PeiServicesSetBootMode (
EFI_STATUS
EFIAPI
PeiServicesGetHobList (
OUT VOID **HobList
OUT VOID **HobList
)
{
ASSERT (FALSE);
@ -226,9 +223,9 @@ PeiServicesGetHobList (
EFI_STATUS
EFIAPI
PeiServicesCreateHob (
IN UINT16 Type,
IN UINT16 Length,
OUT VOID **Hob
IN UINT16 Type,
IN UINT16 Length,
OUT VOID **Hob
)
{
ASSERT (FALSE);
@ -251,8 +248,8 @@ PeiServicesCreateHob (
EFI_STATUS
EFIAPI
PeiServicesFfsFindNextVolume (
IN UINTN Instance,
IN OUT EFI_PEI_FV_HANDLE *VolumeHandle
IN UINTN Instance,
IN OUT EFI_PEI_FV_HANDLE *VolumeHandle
)
{
ASSERT (FALSE);
@ -276,9 +273,9 @@ PeiServicesFfsFindNextVolume (
EFI_STATUS
EFIAPI
PeiServicesFfsFindNextFile (
IN EFI_FV_FILETYPE SearchType,
IN EFI_PEI_FV_HANDLE VolumeHandle,
IN OUT EFI_PEI_FILE_HANDLE *FileHandle
IN EFI_FV_FILETYPE SearchType,
IN EFI_PEI_FV_HANDLE VolumeHandle,
IN OUT EFI_PEI_FILE_HANDLE *FileHandle
)
{
return SecFfsFindNextFile (SearchType, VolumeHandle, FileHandle);
@ -299,9 +296,9 @@ PeiServicesFfsFindNextFile (
EFI_STATUS
EFIAPI
PeiServicesFfsFindSectionData (
IN EFI_SECTION_TYPE SectionType,
IN EFI_PEI_FILE_HANDLE FileHandle,
OUT VOID **SectionData
IN EFI_SECTION_TYPE SectionType,
IN EFI_PEI_FILE_HANDLE FileHandle,
OUT VOID **SectionData
)
{
return SecFfsFindSectionData (SectionType, FileHandle, SectionData);
@ -322,8 +319,8 @@ PeiServicesFfsFindSectionData (
EFI_STATUS
EFIAPI
PeiServicesInstallPeiMemory (
IN EFI_PHYSICAL_ADDRESS MemoryBegin,
IN UINT64 MemoryLength
IN EFI_PHYSICAL_ADDRESS MemoryBegin,
IN UINT64 MemoryLength
)
{
ASSERT (FALSE);
@ -347,9 +344,9 @@ PeiServicesInstallPeiMemory (
EFI_STATUS
EFIAPI
PeiServicesAllocatePages (
IN EFI_MEMORY_TYPE MemoryType,
IN UINTN Pages,
OUT EFI_PHYSICAL_ADDRESS *Memory
IN EFI_MEMORY_TYPE MemoryType,
IN UINTN Pages,
OUT EFI_PHYSICAL_ADDRESS *Memory
)
{
ASSERT (FALSE);
@ -370,8 +367,8 @@ PeiServicesAllocatePages (
EFI_STATUS
EFIAPI
PeiServicesAllocatePool (
IN UINTN Size,
OUT VOID **Buffer
IN UINTN Size,
OUT VOID **Buffer
)
{
ASSERT (FALSE);
@ -415,7 +412,7 @@ PeiServicesResetSystem (
EFI_STATUS
EFIAPI
PeiServicesRegisterForShadow (
IN EFI_PEI_FILE_HANDLE FileHandle
IN EFI_PEI_FILE_HANDLE FileHandle
)
{
ASSERT (FALSE);
@ -443,15 +440,14 @@ PeiServicesRegisterForShadow (
EFI_STATUS
EFIAPI
PeiServicesFfsGetFileInfo (
IN CONST EFI_PEI_FILE_HANDLE FileHandle,
OUT EFI_FV_FILE_INFO *FileInfo
IN CONST EFI_PEI_FILE_HANDLE FileHandle,
OUT EFI_FV_FILE_INFO *FileInfo
)
{
ASSERT (FALSE);
return EFI_OUT_OF_RESOURCES;
}
/**
This service is a wrapper for the PEI Service FfsFindByName(), except the pointer to the PEI Services
Table has been removed. See the Platform Initialization Pre-EFI Initialization Core Interface
@ -476,16 +472,15 @@ PeiServicesFfsGetFileInfo (
EFI_STATUS
EFIAPI
PeiServicesFfsFindFileByName (
IN CONST EFI_GUID *FileName,
IN CONST EFI_PEI_FV_HANDLE VolumeHandle,
OUT EFI_PEI_FILE_HANDLE *FileHandle
IN CONST EFI_GUID *FileName,
IN CONST EFI_PEI_FV_HANDLE VolumeHandle,
OUT EFI_PEI_FILE_HANDLE *FileHandle
)
{
ASSERT (FALSE);
return EFI_OUT_OF_RESOURCES;
}
/**
This service is a wrapper for the PEI Service FfsGetVolumeInfo(), except the pointer to the PEI Services
Table has been removed. See the Platform Initialization Pre-EFI Initialization Core Interface
@ -507,8 +502,8 @@ PeiServicesFfsFindFileByName (
EFI_STATUS
EFIAPI
PeiServicesFfsGetVolumeInfo (
IN EFI_PEI_FV_HANDLE VolumeHandle,
OUT EFI_FV_INFO *VolumeInfo
IN EFI_PEI_FV_HANDLE VolumeHandle,
OUT EFI_FV_INFO *VolumeInfo
)
{
ASSERT (FALSE);
@ -548,11 +543,11 @@ PeiServicesFfsGetVolumeInfo (
VOID
EFIAPI
PeiServicesInstallFvInfoPpi (
IN CONST EFI_GUID *FvFormat OPTIONAL,
IN CONST VOID *FvInfo,
IN UINT32 FvInfoSize,
IN CONST EFI_GUID *ParentFvName OPTIONAL,
IN CONST EFI_GUID *ParentFileName OPTIONAL
IN CONST EFI_GUID *FvFormat OPTIONAL,
IN CONST VOID *FvInfo,
IN UINT32 FvInfoSize,
IN CONST EFI_GUID *ParentFvName OPTIONAL,
IN CONST EFI_GUID *ParentFileName OPTIONAL
)
{
ASSERT (FALSE);

View File

@ -8,4 +8,3 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <PiPei.h>
CONST EFI_PEI_PPI_DESCRIPTOR *gPpiList = NULL;

View File

@ -18,9 +18,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Library/UefiLib.h>
#include <Library/SmbiosLib.h>
EFI_SMBIOS_PROTOCOL *gSmbios = NULL;
EFI_SMBIOS_PROTOCOL *gSmbios = NULL;
/**
Create an initial SMBIOS Table from an array of SMBIOS_TEMPLATE_ENTRY
@ -34,11 +32,11 @@ EFI_SMBIOS_PROTOCOL *gSmbios = NULL;
EFI_STATUS
EFIAPI
SmbiosLibInitializeFromTemplate (
IN SMBIOS_TEMPLATE_ENTRY *Template
IN SMBIOS_TEMPLATE_ENTRY *Template
)
{
EFI_STATUS Status;
UINTN Index;
EFI_STATUS Status;
UINTN Index;
if (Template == NULL) {
return EFI_INVALID_PARAMETER;
@ -53,8 +51,6 @@ SmbiosLibInitializeFromTemplate (
return Status;
}
/**
Create SMBIOS record.
@ -85,17 +81,17 @@ SmbiosLibInitializeFromTemplate (
EFI_STATUS
EFIAPI
SmbiosLibCreateEntry (
IN SMBIOS_STRUCTURE *SmbiosEntry,
IN CHAR8 **StringArray
IN SMBIOS_STRUCTURE *SmbiosEntry,
IN CHAR8 **StringArray
)
{
EFI_STATUS Status;
EFI_SMBIOS_HANDLE SmbiosHandle;
EFI_SMBIOS_TABLE_HEADER *Record;
UINTN Index;
UINTN StringSize;
UINTN Size;
CHAR8 *Str;
EFI_STATUS Status;
EFI_SMBIOS_HANDLE SmbiosHandle;
EFI_SMBIOS_TABLE_HEADER *Record;
UINTN Index;
UINTN StringSize;
UINTN Size;
CHAR8 *Str;
// Calculate the size of the fixed record and optional string pack
Size = SmbiosEntry->Length;
@ -106,8 +102,9 @@ SmbiosLibCreateEntry (
} else {
for (Index = 0; StringArray[Index] != NULL; Index++) {
StringSize = AsciiStrSize (StringArray[Index]);
Size += StringSize;
Size += StringSize;
}
// Don't forget the terminating double null
Size += 1;
}
@ -117,6 +114,7 @@ SmbiosLibCreateEntry (
if (Record == NULL) {
return EFI_OUT_OF_RESOURCES;
}
CopyMem (Record, SmbiosEntry, SmbiosEntry->Length);
if (StringArray != NULL) {
@ -127,23 +125,22 @@ SmbiosLibCreateEntry (
CopyMem (Str, StringArray[Index], StringSize);
Str += StringSize;
}
*Str = 0;
}
SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;
Status = gSmbios->Add (
gSmbios,
gImageHandle,
&SmbiosHandle,
Record
);
Status = gSmbios->Add (
gSmbios,
gImageHandle,
&SmbiosHandle,
Record
);
FreePool (Record);
return Status;
}
/**
Update the string associated with an existing SMBIOS record.
@ -162,12 +159,12 @@ SmbiosLibCreateEntry (
EFI_STATUS
EFIAPI
SmbiosLibUpdateString (
IN EFI_SMBIOS_HANDLE SmbiosHandle,
IN SMBIOS_TABLE_STRING StringNumber,
IN CHAR8 *String
IN EFI_SMBIOS_HANDLE SmbiosHandle,
IN SMBIOS_TABLE_STRING StringNumber,
IN CHAR8 *String
)
{
UINTN StringIndex;
UINTN StringIndex;
if (String == NULL) {
return EFI_INVALID_PARAMETER;
@ -182,7 +179,6 @@ SmbiosLibUpdateString (
return gSmbios->UpdateString (gSmbios, &SmbiosHandle, &StringIndex, String);
}
/**
Update the string associated with an existing SMBIOS record.
@ -201,9 +197,9 @@ SmbiosLibUpdateString (
EFI_STATUS
EFIAPI
SmbiosLibUpdateUnicodeString (
IN EFI_SMBIOS_HANDLE SmbiosHandle,
IN SMBIOS_TABLE_STRING StringNumber,
IN CHAR16 *String
IN EFI_SMBIOS_HANDLE SmbiosHandle,
IN SMBIOS_TABLE_STRING StringNumber,
IN CHAR16 *String
)
{
EFI_STATUS Status;
@ -223,16 +219,16 @@ SmbiosLibUpdateUnicodeString (
if (Ascii == NULL) {
return EFI_OUT_OF_RESOURCES;
}
UnicodeStrToAsciiStrS (String, Ascii, StrSize (String));
StringIndex = StringNumber;
Status = gSmbios->UpdateString (gSmbios, &SmbiosHandle, &StringIndex, Ascii);
Status = gSmbios->UpdateString (gSmbios, &SmbiosHandle, &StringIndex, Ascii);
FreePool (Ascii);
return Status;
}
/**
Allow caller to read a specific SMBIOS string
@ -249,14 +245,15 @@ SmbiosLibReadString (
IN EFI_SMBIOS_STRING StringNumber
)
{
CHAR8 *Data;
UINTN Match;
CHAR8 *Data;
UINTN Match;
Data = (CHAR8 *)Header + Header->Length;
for (Match = 1;!(*Data == 0 && *(Data+1) == 0); ) {
for (Match = 1; !(*Data == 0 && *(Data+1) == 0); ) {
if (StringNumber == Match) {
return Data;
}
Data++;
if (*(Data - 1) == '\0') {
Match++;
@ -266,7 +263,6 @@ SmbiosLibReadString (
return NULL;
}
/**
Allow the caller to discover a specific SMBIOS entry, and patch it if necissary.
@ -280,14 +276,14 @@ SmbiosLibReadString (
SMBIOS_STRUCTURE *
EFIAPI
SmbiosLibGetRecord (
IN EFI_SMBIOS_TYPE Type,
IN UINTN Instance,
OUT EFI_SMBIOS_HANDLE *SmbiosHandle
IN EFI_SMBIOS_TYPE Type,
IN UINTN Instance,
OUT EFI_SMBIOS_HANDLE *SmbiosHandle
)
{
EFI_STATUS Status;
EFI_SMBIOS_TABLE_HEADER *Record;
UINTN Match;
EFI_STATUS Status;
EFI_SMBIOS_TABLE_HEADER *Record;
UINTN Match;
Match = 0;
*SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;
@ -297,6 +293,7 @@ SmbiosLibGetRecord (
if (Match == Instance) {
return (SMBIOS_STRUCTURE *)Record;
}
Match++;
}
} while (!EFI_ERROR (Status));
@ -304,7 +301,6 @@ SmbiosLibGetRecord (
return NULL;
}
/**
Remove an SMBIOS record.
@ -318,14 +314,12 @@ SmbiosLibGetRecord (
EFI_STATUS
EFIAPI
SmbiosLibRemove (
OUT EFI_SMBIOS_HANDLE SmbiosHandle
OUT EFI_SMBIOS_HANDLE SmbiosHandle
)
{
return gSmbios->Remove (gSmbios, SmbiosHandle);
}
/**
@param ImageHandle ImageHandle of the loaded driver.
@ -343,4 +337,3 @@ SmbiosLibConstructor (
{
return gBS->LocateProtocol (&gEfiSmbiosProtocolGuid, NULL, (VOID **)&gSmbios);
}

View File

@ -12,30 +12,26 @@
#include <Library/BaseLib.h>
#include <Library/MemoryAllocationLib.h>
UINTN gThunkPpiListSize = 0;
EFI_PEI_PPI_DESCRIPTOR *gThunkPpiList = NULL;
EFI_PEI_PPI_DESCRIPTOR *gThunkPpiList = NULL;
EFI_PEI_PPI_DESCRIPTOR *
GetThunkPpiList (
VOID
)
{
UINTN Index;
UINTN Index;
if (gThunkPpiList == NULL) {
return NULL;
}
Index = (gThunkPpiListSize/sizeof (EFI_PEI_PPI_DESCRIPTOR)) - 1;
Index = (gThunkPpiListSize/sizeof (EFI_PEI_PPI_DESCRIPTOR)) - 1;
gThunkPpiList[Index].Flags |= EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST;
return gThunkPpiList;
}
EFI_STATUS
EFIAPI
AddThunkPpi (
@ -44,7 +40,7 @@ AddThunkPpi (
IN VOID *Ppi
)
{
UINTN Index;
UINTN Index;
gThunkPpiList = ReallocatePool (
gThunkPpiListSize,
@ -55,16 +51,11 @@ AddThunkPpi (
return EFI_OUT_OF_RESOURCES;
}
Index = (gThunkPpiListSize/sizeof (EFI_PEI_PPI_DESCRIPTOR));
Index = (gThunkPpiListSize/sizeof (EFI_PEI_PPI_DESCRIPTOR));
gThunkPpiList[Index].Flags = Flags;
gThunkPpiList[Index].Guid = Guid;
gThunkPpiList[Index].Ppi = Ppi;
gThunkPpiListSize += sizeof (EFI_PEI_PPI_DESCRIPTOR);
gThunkPpiListSize += sizeof (EFI_PEI_PPI_DESCRIPTOR);
return EFI_SUCCESS;
}

View File

@ -16,25 +16,23 @@
#include <Protocol/EmuIoThunk.h>
#define EMU_IO_THUNK_PROTOCOL_DATA_SIGNATURE SIGNATURE_32('E','m','u','T')
#define EMU_IO_THUNK_PROTOCOL_DATA_SIGNATURE SIGNATURE_32('E','m','u','T')
typedef struct {
UINTN Signature;
EMU_IO_THUNK_PROTOCOL Data;
BOOLEAN EmuBusDriver;
LIST_ENTRY Link;
UINTN Signature;
EMU_IO_THUNK_PROTOCOL Data;
BOOLEAN EmuBusDriver;
LIST_ENTRY Link;
} EMU_IO_THUNK_PROTOCOL_DATA;
LIST_ENTRY mThunkList = INITIALIZE_LIST_HEAD_VARIABLE (mThunkList);
EFI_STATUS
EFIAPI
AddThunkProtocol (
IN EMU_IO_THUNK_PROTOCOL *ThunkIo,
IN CHAR16 *ConfigString,
IN BOOLEAN EmuBusDriver
IN EMU_IO_THUNK_PROTOCOL *ThunkIo,
IN CHAR16 *ConfigString,
IN BOOLEAN EmuBusDriver
)
{
UINTN Size;
@ -47,15 +45,15 @@ AddThunkProtocol (
return EFI_INVALID_PARAMETER;
}
Instance = 0;
Size = StrSize (ConfigString);
Instance = 0;
Size = StrSize (ConfigString);
StartString = AllocatePool (Size);
if (StartString == NULL) {
return EFI_OUT_OF_RESOURCES;
}
StrCpyS (StartString, Size / sizeof (CHAR16), ConfigString);
while (*StartString != '\0') {
//
// Find the end of the sub string
//
@ -77,12 +75,13 @@ AddThunkProtocol (
if (Private == NULL) {
return EFI_OUT_OF_RESOURCES;
}
Private->Signature = EMU_IO_THUNK_PROTOCOL_DATA_SIGNATURE;
Private->EmuBusDriver = EmuBusDriver;
Private->Signature = EMU_IO_THUNK_PROTOCOL_DATA_SIGNATURE;
Private->EmuBusDriver = EmuBusDriver;
CopyMem (&Private->Data, ThunkIo, sizeof (EMU_IO_THUNK_PROTOCOL));
Private->Data.Instance = (UINT16)Instance++;
Private->Data.ConfigString = StartString;
Private->Data.Instance = (UINT16)Instance++;
Private->Data.ConfigString = StartString;
InsertTailList (&mThunkList, &Private->Link);
@ -95,16 +94,15 @@ AddThunkProtocol (
return EFI_SUCCESS;
}
EFI_STATUS
EFIAPI
GetNextThunkProtocol (
IN BOOLEAN EmuBusDriver,
OUT EMU_IO_THUNK_PROTOCOL **Instance OPTIONAL
IN BOOLEAN EmuBusDriver,
OUT EMU_IO_THUNK_PROTOCOL **Instance OPTIONAL
)
{
LIST_ENTRY *Link;
EMU_IO_THUNK_PROTOCOL_DATA *Private;
LIST_ENTRY *Link;
EMU_IO_THUNK_PROTOCOL_DATA *Private;
if (mThunkList.ForwardLink == &mThunkList) {
// Skip parsing an empty list
@ -125,13 +123,12 @@ GetNextThunkProtocol (
if (Link == &mThunkList) {
return EFI_NOT_FOUND;
}
Private = CR (Link, EMU_IO_THUNK_PROTOCOL_DATA, Link, EMU_IO_THUNK_PROTOCOL_DATA_SIGNATURE);
Private = CR (Link, EMU_IO_THUNK_PROTOCOL_DATA, Link, EMU_IO_THUNK_PROTOCOL_DATA_SIGNATURE);
*Instance = &Private->Data;
return EFI_SUCCESS;
}
}
return EFI_NOT_FOUND;
}

View File

@ -17,11 +17,9 @@
#include <Library/SmbiosLib.h>
#include <Library/HobLib.h>
extern SMBIOS_TEMPLATE_ENTRY gSmbiosTemplate[];
extern SMBIOS_TEMPLATE_ENTRY gSmbiosTemplate[];
SMBIOS_TABLE_TYPE19 gSmbiosType19Template = {
SMBIOS_TABLE_TYPE19 gSmbiosType19Template = {
{ EFI_SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS, sizeof (SMBIOS_TABLE_TYPE19), 0 },
0xffffffff, // StartingAddress;
0xffffffff, // EndingAddress;
@ -36,11 +34,11 @@ CreatePlatformSmbiosMemoryRecords (
VOID
)
{
EFI_PEI_HOB_POINTERS HobPtr;
SMBIOS_STRUCTURE_POINTER Smbios16;
SMBIOS_STRUCTURE_POINTER Smbios17;
EFI_SMBIOS_HANDLE PhyscialMemoryArrayHandle;
EFI_SMBIOS_HANDLE SmbiosHandle;
EFI_PEI_HOB_POINTERS HobPtr;
SMBIOS_STRUCTURE_POINTER Smbios16;
SMBIOS_STRUCTURE_POINTER Smbios17;
EFI_SMBIOS_HANDLE PhyscialMemoryArrayHandle;
EFI_SMBIOS_HANDLE SmbiosHandle;
Smbios16.Hdr = SmbiosLibGetRecord (EFI_SMBIOS_TYPE_PHYSICAL_MEMORY_ARRAY, 0, &PhyscialMemoryArrayHandle);
if (Smbios16.Hdr == NULL) {
@ -56,21 +54,21 @@ CreatePlatformSmbiosMemoryRecords (
// Generate Type16 records
gSmbiosType19Template.MemoryArrayHandle = PhyscialMemoryArrayHandle;
HobPtr.Raw = GetHobList ();
HobPtr.Raw = GetHobList ();
while ((HobPtr.Raw = GetNextHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, HobPtr.Raw)) != NULL) {
if (HobPtr.ResourceDescriptor->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) {
gSmbiosType19Template.ExtendedStartingAddress = HobPtr.ResourceDescriptor->PhysicalStart;
gSmbiosType19Template.ExtendedEndingAddress =
gSmbiosType19Template.ExtendedEndingAddress =
HobPtr.ResourceDescriptor->PhysicalStart +
HobPtr.ResourceDescriptor->ResourceLength - 1;
SmbiosLibCreateEntry ((SMBIOS_STRUCTURE *)&gSmbiosType19Template, NULL);
}
HobPtr.Raw = GET_NEXT_HOB (HobPtr);
}
}
/**
Main entry for this driver.
@ -83,13 +81,13 @@ CreatePlatformSmbiosMemoryRecords (
EFI_STATUS
EFIAPI
PlatformSmbiosDriverEntryPoint (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;
EFI_SMBIOS_HANDLE SmbiosHandle;
SMBIOS_STRUCTURE_POINTER Smbios;
EFI_STATUS Status;
EFI_SMBIOS_HANDLE SmbiosHandle;
SMBIOS_STRUCTURE_POINTER Smbios;
// Phase 0 - Patch table to make SMBIOS 2.7 structures smaller to conform
// to an early version of the specification.
@ -108,12 +106,12 @@ PlatformSmbiosDriverEntryPoint (
SmbiosLibUpdateUnicodeString (
SmbiosHandle,
Smbios.Type0->BiosVersion,
(CHAR16 *) PcdGetPtr (PcdFirmwareVersionString)
(CHAR16 *)PcdGetPtr (PcdFirmwareVersionString)
);
SmbiosLibUpdateUnicodeString (
SmbiosHandle,
Smbios.Type0->BiosReleaseDate,
(CHAR16 *) PcdGetPtr (PcdFirmwareReleaseDateString)
(CHAR16 *)PcdGetPtr (PcdFirmwareReleaseDateString)
);
}

View File

@ -23,15 +23,14 @@
#include <Protocol/Smbios.h>
#include <Library/SmbiosLib.h>
SMBIOS_TABLE_TYPE0 gSmbiosType0Template = {
SMBIOS_TABLE_TYPE0 gSmbiosType0Template = {
{ EFI_SMBIOS_TYPE_BIOS_INFORMATION, sizeof (SMBIOS_TABLE_TYPE0), 0 },
1, // Vendor String
2, // BiosVersion String
0xE000, // BiosSegment
3, // BiosReleaseDate String
0x7F, // BiosSize
{ // BiosCharacteristics
{ // BiosCharacteristics
0, // Reserved :2; ///< Bits 0-1.
0, // Unknown :1;
0, // BiosCharacteristicsNotSupported :1;
@ -64,7 +63,7 @@ SMBIOS_TABLE_TYPE0 gSmbiosType0Template = {
0, // CgaMonoIsSupported :1;
0, // NecPc98 :1;
0 // ReservedForVendor :32; ///< Bits 32-63. Bits 32-47 reserved for BIOS vendor
///< and bits 48-63 reserved for System Vendor.
///< and bits 48-63 reserved for System Vendor.
},
{ // BIOSCharacteristicsExtensionBytes[]
0x81, // AcpiIsSupported :1;
@ -75,7 +74,7 @@ SMBIOS_TABLE_TYPE0 gSmbiosType0Template = {
// AtapiZipDriveBootIsSupported :1;
// Boot1394IsSupported :1;
// SmartBatteryIsSupported :1;
// BIOSCharacteristicsExtensionBytes[1]
// BIOSCharacteristicsExtensionBytes[1]
0x0a, // BiosBootSpecIsSupported :1;
// FunctionKeyNetworkBootIsSupported :1;
// TargetContentDistributionEnabled :1;
@ -88,25 +87,26 @@ SMBIOS_TABLE_TYPE0 gSmbiosType0Template = {
0xFF, // EmbeddedControllerFirmwareMajorRelease
0xFF, // EmbeddedControllerFirmwareMinorRelease
};
CHAR8 *gSmbiosType0Strings[] = {
"http://www.tianocore.org/edk2/", // Vendor String
__TIME__, // BiosVersion String
__DATE__, // BiosReleaseDate String
CHAR8 *gSmbiosType0Strings[] = {
"http://www.tianocore.org/edk2/", // Vendor String
__TIME__, // BiosVersion String
__DATE__, // BiosReleaseDate String
NULL
};
SMBIOS_TABLE_TYPE1 gSmbiosType1Template = {
{ EFI_SMBIOS_TYPE_SYSTEM_INFORMATION, sizeof (SMBIOS_TABLE_TYPE1), 0 },
SMBIOS_TABLE_TYPE1 gSmbiosType1Template = {
{ EFI_SMBIOS_TYPE_SYSTEM_INFORMATION, sizeof (SMBIOS_TABLE_TYPE1), 0 },
1, // Manufacturer String
2, // ProductName String
3, // Version String
4, // SerialNumber String
{ 0x25EF0280, 0xEC82, 0x42B0, { 0x8F, 0xB6, 0x10, 0xAD, 0xCC, 0xC6, 0x7C, 0x02 } },
{ 0x25EF0280, 0xEC82, 0x42B0, { 0x8F, 0xB6, 0x10, 0xAD, 0xCC, 0xC6, 0x7C, 0x02}
},
SystemWakeupTypePowerSwitch,
5, // SKUNumber String
6, // Family String
};
CHAR8 *gSmbiosType1Strings[] = {
CHAR8 *gSmbiosType1Strings[] = {
"http://www.tianocore.org/edk2/",
"EmulatorPkg",
"1.0",
@ -124,20 +124,20 @@ SMBIOS_TABLE_TYPE2 gSmbiosType2Template = {
4, // SerialNumber String
5, // AssetTag String
{ // FeatureFlag
1, // Motherboard :1;
0, // RequiresDaughterCard :1;
0, // Removable :1;
0, // Replaceable :1;
0, // HotSwappable :1;
0, // Reserved :3;
1, // Motherboard :1;
0, // RequiresDaughterCard :1;
0, // Removable :1;
0, // Replaceable :1;
0, // HotSwappable :1;
0, // Reserved :3;
},
6, // LocationInChassis String
6, // LocationInChassis String
0, // ChassisHandle;
BaseBoardTypeMotherBoard, // BoardType;
0, // NumberOfContainedObjectHandles;
{ 0 } // ContainedObjectHandles[1];
};
CHAR8 *gSmbiosType2Strings[] = {
CHAR8 *gSmbiosType2Strings[] = {
"http://www.tianocore.org/edk2/",
"EmulatorPkg",
"1.0",
@ -149,23 +149,25 @@ CHAR8 *gSmbiosType2Strings[] = {
SMBIOS_TABLE_TYPE3 gSmbiosType3Template = {
{ EFI_SMBIOS_TYPE_SYSTEM_ENCLOSURE, sizeof (SMBIOS_TABLE_TYPE3), 0 },
1, // Manufacturer String
MiscChassisTypeLapTop, // Type;
2, // Version String
3, // SerialNumber String
4, // AssetTag String
ChassisStateSafe, // BootupState;
ChassisStateSafe, // PowerSupplyState;
ChassisStateSafe, // ThermalState;
ChassisSecurityStatusNone,// SecurityStatus;
{ 0, 0, 0, 0 }, // OemDefined[4];
0, // Height;
0, // NumberofPowerCords;
0, // ContainedElementCount;
0, // ContainedElementRecordLength;
{ { 0 } }, // ContainedElements[1];
1, // Manufacturer String
MiscChassisTypeLapTop, // Type;
2, // Version String
3, // SerialNumber String
4, // AssetTag String
ChassisStateSafe, // BootupState;
ChassisStateSafe, // PowerSupplyState;
ChassisStateSafe, // ThermalState;
ChassisSecurityStatusNone, // SecurityStatus;
{ 0, 0, 0, 0}, // OemDefined[4];
0, // Height;
0, // NumberofPowerCords;
0, // ContainedElementCount;
0, // ContainedElementRecordLength;
{
{ 0 }
}, // ContainedElements[1];
};
CHAR8 *gSmbiosType3Strings[] = {
CHAR8 *gSmbiosType3Strings[] = {
"http://www.tianocore.org/edk2/",
"EmulatorPkg",
"Chassis Board Serial#",
@ -181,7 +183,7 @@ SMBIOS_TABLE_TYPE8 gSmbiosType8Template1 = {
PortConnectorTypeNone, // ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
PortTypeOther, // PortType; ///< The enumeration value from MISC_PORT_TYPE.
};
CHAR8 *gSmbiosType8Strings1[] = {
CHAR8 *gSmbiosType8Strings1[] = {
"Mini DisplayPort",
NULL
};
@ -194,12 +196,11 @@ SMBIOS_TABLE_TYPE8 gSmbiosType8Template2 = {
PortConnectorTypeNone, // ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
PortTypeFireWire, // PortType; ///< The enumeration value from MISC_PORT_TYPE.
};
CHAR8 *gSmbiosType8Strings2[] = {
CHAR8 *gSmbiosType8Strings2[] = {
"FireWire 800",
NULL
};
SMBIOS_TABLE_TYPE8 gSmbiosType8Template3 = {
{ EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, sizeof (SMBIOS_TABLE_TYPE8), 0 },
0, // InternalReferenceDesignator String
@ -208,7 +209,7 @@ SMBIOS_TABLE_TYPE8 gSmbiosType8Template3 = {
PortConnectorTypeRJ45, // ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
PortTypeNetworkPort, // PortType; ///< The enumeration value from MISC_PORT_TYPE.
};
CHAR8 *gSmbiosType8Strings3[] = {
CHAR8 *gSmbiosType8Strings3[] = {
"Ethernet",
NULL
};
@ -221,7 +222,7 @@ SMBIOS_TABLE_TYPE8 gSmbiosType8Template4 = {
PortConnectorTypeUsb, // ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
PortTypeUsb, // PortType; ///< The enumeration value from MISC_PORT_TYPE.
};
CHAR8 *gSmbiosType8Strings4[] = {
CHAR8 *gSmbiosType8Strings4[] = {
"USB0",
NULL
};
@ -234,7 +235,7 @@ SMBIOS_TABLE_TYPE8 gSmbiosType8Template5 = {
PortConnectorTypeUsb, // ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
PortTypeUsb, // PortType; ///< The enumeration value from MISC_PORT_TYPE.
};
CHAR8 *gSmbiosType8Strings5[] = {
CHAR8 *gSmbiosType8Strings5[] = {
"USB1",
NULL
};
@ -247,7 +248,7 @@ SMBIOS_TABLE_TYPE8 gSmbiosType8Template6 = {
PortConnectorTypeUsb, // ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
PortTypeUsb, // PortType; ///< The enumeration value from MISC_PORT_TYPE.
};
CHAR8 *gSmbiosType8Strings6[] = {
CHAR8 *gSmbiosType8Strings6[] = {
"USB2",
NULL
};
@ -260,54 +261,54 @@ SMBIOS_TABLE_TYPE8 gSmbiosType8Template7 = {
PortConnectorTypeUsb, // ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
PortTypeUsb, // PortType; ///< The enumeration value from MISC_PORT_TYPE.
};
CHAR8 *gSmbiosType8Strings7[] = {
CHAR8 *gSmbiosType8Strings7[] = {
"USB3",
NULL
};
SMBIOS_TABLE_TYPE8 gSmbiosType8Template8 = {
{ EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, sizeof (SMBIOS_TABLE_TYPE8), 0 },
0, // InternalReferenceDesignator String
PortConnectorTypeNone, // InternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
1, // ExternalReferenceDesignator String
0, // InternalReferenceDesignator String
PortConnectorTypeNone, // InternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
1, // ExternalReferenceDesignator String
PortConnectorTypeHeadPhoneMiniJack, // ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
PortTypeAudioPort, // PortType; ///< The enumeration value from MISC_PORT_TYPE.
};
CHAR8 *gSmbiosType8Strings8[] = {
CHAR8 *gSmbiosType8Strings8[] = {
"Audio Line In",
NULL
};
SMBIOS_TABLE_TYPE8 gSmbiosType8Template9 = {
{ EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, sizeof (SMBIOS_TABLE_TYPE8), 0 },
0, // InternalReferenceDesignator String
PortConnectorTypeNone, // InternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
1, // ExternalReferenceDesignator String
0, // InternalReferenceDesignator String
PortConnectorTypeNone, // InternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
1, // ExternalReferenceDesignator String
PortConnectorTypeHeadPhoneMiniJack, // ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
PortTypeAudioPort, // PortType; ///< The enumeration value from MISC_PORT_TYPE.
};
CHAR8 *gSmbiosType8Strings9[] = {
CHAR8 *gSmbiosType8Strings9[] = {
"Audio Line Out",
NULL
};
SMBIOS_TABLE_TYPE9 gSmbiosType9Template = {
{ EFI_SMBIOS_TYPE_SYSTEM_SLOTS, sizeof (SMBIOS_TABLE_TYPE9), 0 },
1, // SlotDesignation String
SlotTypeOther, // SlotType; ///< The enumeration value from MISC_SLOT_TYPE.
SlotDataBusWidthOther, // SlotDataBusWidth; ///< The enumeration value from MISC_SLOT_DATA_BUS_WIDTH.
1, // SlotDesignation String
SlotTypeOther, // SlotType; ///< The enumeration value from MISC_SLOT_TYPE.
SlotDataBusWidthOther, // SlotDataBusWidth; ///< The enumeration value from MISC_SLOT_DATA_BUS_WIDTH.
SlotUsageAvailable, // CurrentUsage; ///< The enumeration value from MISC_SLOT_USAGE.
SlotLengthOther, // SlotLength; ///< The enumeration value from MISC_SLOT_LENGTH.
0, // SlotID;
SlotLengthOther, // SlotLength; ///< The enumeration value from MISC_SLOT_LENGTH.
0, // SlotID;
{ // SlotCharacteristics1;
1, // CharacteristicsUnknown :1;
0, // Provides50Volts :1;
0, // Provides33Volts :1;
0, // SharedSlot :1;
0, // PcCard16Supported :1;
0, // CardBusSupported :1;
0, // ZoomVideoSupported :1;
0, // ModemRingResumeSupported:1;
1, // CharacteristicsUnknown :1;
0, // Provides50Volts :1;
0, // Provides33Volts :1;
0, // SharedSlot :1;
0, // PcCard16Supported :1;
0, // CardBusSupported :1;
0, // ZoomVideoSupported :1;
0, // ModemRingResumeSupported:1;
},
{ // SlotCharacteristics2;
0, // PmeSignalSupported :1;
@ -319,31 +320,30 @@ SMBIOS_TABLE_TYPE9 gSmbiosType9Template = {
0, // BusNum;
0, // DevFuncNum;
};
CHAR8 *gSmbiosType9Strings[] = {
CHAR8 *gSmbiosType9Strings[] = {
"SD Card",
NULL
};
SMBIOS_TABLE_TYPE11 gSmbiosType11Template = {
SMBIOS_TABLE_TYPE11 gSmbiosType11Template = {
{ EFI_SMBIOS_TYPE_OEM_STRINGS, sizeof (SMBIOS_TABLE_TYPE11), 0 },
1 // StringCount
};
CHAR8 *gSmbiosType11Strings[] = {
CHAR8 *gSmbiosType11Strings[] = {
"https://svn.code.sf.net/p/edk2/code/trunk/edk2/EmulatorPkg/",
NULL
};
SMBIOS_TABLE_TYPE12 gSmbiosType12Template = {
SMBIOS_TABLE_TYPE12 gSmbiosType12Template = {
{ EFI_SMBIOS_TYPE_SYSTEM_CONFIGURATION_OPTIONS, sizeof (SMBIOS_TABLE_TYPE12), 0 },
1 // StringCount
};
CHAR8 *gSmbiosType12Strings[] = {
CHAR8 *gSmbiosType12Strings[] = {
"https://svn.code.sf.net/p/edk2/code/trunk/edk2/EmulatorPkg/EmulatorPkg.dsc",
NULL
};
SMBIOS_TABLE_TYPE16 gSmbiosType16Template = {
SMBIOS_TABLE_TYPE16 gSmbiosType16Template = {
{ EFI_SMBIOS_TYPE_PHYSICAL_MEMORY_ARRAY, sizeof (SMBIOS_TABLE_TYPE16), 0 },
MemoryArrayLocationSystemBoard, // Location; ///< The enumeration value from MEMORY_ARRAY_LOCATION.
MemoryArrayUseSystemMemory, // Use; ///< The enumeration value from MEMORY_ARRAY_USE.
@ -354,19 +354,19 @@ SMBIOS_TABLE_TYPE16 gSmbiosType16Template = {
0x3fffffffffffffffULL, // ExtendedMaximumCapacity;
};
SMBIOS_TABLE_TYPE17 gSmbiosType17Template = {
SMBIOS_TABLE_TYPE17 gSmbiosType17Template = {
{ EFI_SMBIOS_TYPE_MEMORY_DEVICE, sizeof (SMBIOS_TABLE_TYPE17), 0 },
0, // MemoryArrayHandle;
0xFFFE, // MemoryErrorInformationHandle;
0xFFFF, // TotalWidth;
0xFFFF, // DataWidth;
0xFFFF, // Size;
0, // MemoryArrayHandle;
0xFFFE, // MemoryErrorInformationHandle;
0xFFFF, // TotalWidth;
0xFFFF, // DataWidth;
0xFFFF, // Size;
MemoryFormFactorUnknown, // FormFactor; ///< The enumeration value from MEMORY_FORM_FACTOR.
0xff, // DeviceSet;
1, // DeviceLocator String
2, // BankLocator String
MemoryTypeDram, // MemoryType; ///< The enumeration value from MEMORY_DEVICE_TYPE.
{ // TypeDetail;
0xff, // DeviceSet;
1, // DeviceLocator String
2, // BankLocator String
MemoryTypeDram, // MemoryType; ///< The enumeration value from MEMORY_DEVICE_TYPE.
{ // TypeDetail;
0, // Reserved :1;
0, // Other :1;
1, // Unknown :1;
@ -393,14 +393,14 @@ SMBIOS_TABLE_TYPE17 gSmbiosType17Template = {
0, // ExtendedSize;
0, // ConfiguredMemoryClockSpeed;
};
CHAR8 *gSmbiosType17Strings[] = {
CHAR8 *gSmbiosType17Strings[] = {
"OS Virtual Memory",
"malloc",
"OSV",
NULL
};
SMBIOS_TABLE_TYPE23 gSmbiosType23Template = {
SMBIOS_TABLE_TYPE23 gSmbiosType23Template = {
{ EFI_SMBIOS_TYPE_SYSTEM_BOOT_INFORMATION, sizeof (SMBIOS_TABLE_TYPE23), 0 },
0, // Capabilities;
0, // ResetCount;
@ -409,34 +409,32 @@ SMBIOS_TABLE_TYPE23 gSmbiosType23Template = {
0 // Timeout;
};
SMBIOS_TABLE_TYPE32 gSmbiosType32Template = {
SMBIOS_TABLE_TYPE32 gSmbiosType32Template = {
{ EFI_SMBIOS_TYPE_SYSTEM_BOOT_INFORMATION, sizeof (SMBIOS_TABLE_TYPE32), 0 },
{ 0, 0, 0, 0, 0, 0 }, // Reserved[6];
BootInformationStatusNoError // BootStatus
{ 0, 0, 0, 0, 0, 0}, // Reserved[6];
BootInformationStatusNoError // BootStatus
};
SMBIOS_TEMPLATE_ENTRY gSmbiosTemplate[] = {
{ (SMBIOS_STRUCTURE *)&gSmbiosType0Template, gSmbiosType0Strings },
{ (SMBIOS_STRUCTURE *)&gSmbiosType1Template, gSmbiosType1Strings },
{ (SMBIOS_STRUCTURE *)&gSmbiosType2Template, gSmbiosType2Strings },
{ (SMBIOS_STRUCTURE *)&gSmbiosType3Template, gSmbiosType3Strings },
{ (SMBIOS_STRUCTURE *)&gSmbiosType8Template1, gSmbiosType8Strings1 },
{ (SMBIOS_STRUCTURE *)&gSmbiosType8Template2, gSmbiosType8Strings2 },
{ (SMBIOS_STRUCTURE *)&gSmbiosType8Template3, gSmbiosType8Strings3 },
{ (SMBIOS_STRUCTURE *)&gSmbiosType8Template4, gSmbiosType8Strings4 },
{ (SMBIOS_STRUCTURE *)&gSmbiosType8Template5, gSmbiosType8Strings5 },
{ (SMBIOS_STRUCTURE *)&gSmbiosType8Template6, gSmbiosType8Strings6 },
{ (SMBIOS_STRUCTURE *)&gSmbiosType8Template7, gSmbiosType8Strings7 },
{ (SMBIOS_STRUCTURE *)&gSmbiosType8Template8, gSmbiosType8Strings8 },
{ (SMBIOS_STRUCTURE *)&gSmbiosType8Template9, gSmbiosType8Strings9 },
{ (SMBIOS_STRUCTURE *)&gSmbiosType9Template, gSmbiosType9Strings },
{ (SMBIOS_STRUCTURE *)&gSmbiosType11Template, gSmbiosType11Strings },
{ (SMBIOS_STRUCTURE *)&gSmbiosType12Template, gSmbiosType12Strings },
{ (SMBIOS_STRUCTURE *)&gSmbiosType16Template, NULL },
{ (SMBIOS_STRUCTURE *)&gSmbiosType17Template, gSmbiosType17Strings },
{ (SMBIOS_STRUCTURE *)&gSmbiosType23Template, NULL },
{ (SMBIOS_STRUCTURE *)&gSmbiosType32Template, NULL },
{ NULL, NULL }
SMBIOS_TEMPLATE_ENTRY gSmbiosTemplate[] = {
{ (SMBIOS_STRUCTURE *)&gSmbiosType0Template, gSmbiosType0Strings },
{ (SMBIOS_STRUCTURE *)&gSmbiosType1Template, gSmbiosType1Strings },
{ (SMBIOS_STRUCTURE *)&gSmbiosType2Template, gSmbiosType2Strings },
{ (SMBIOS_STRUCTURE *)&gSmbiosType3Template, gSmbiosType3Strings },
{ (SMBIOS_STRUCTURE *)&gSmbiosType8Template1, gSmbiosType8Strings1 },
{ (SMBIOS_STRUCTURE *)&gSmbiosType8Template2, gSmbiosType8Strings2 },
{ (SMBIOS_STRUCTURE *)&gSmbiosType8Template3, gSmbiosType8Strings3 },
{ (SMBIOS_STRUCTURE *)&gSmbiosType8Template4, gSmbiosType8Strings4 },
{ (SMBIOS_STRUCTURE *)&gSmbiosType8Template5, gSmbiosType8Strings5 },
{ (SMBIOS_STRUCTURE *)&gSmbiosType8Template6, gSmbiosType8Strings6 },
{ (SMBIOS_STRUCTURE *)&gSmbiosType8Template7, gSmbiosType8Strings7 },
{ (SMBIOS_STRUCTURE *)&gSmbiosType8Template8, gSmbiosType8Strings8 },
{ (SMBIOS_STRUCTURE *)&gSmbiosType8Template9, gSmbiosType8Strings9 },
{ (SMBIOS_STRUCTURE *)&gSmbiosType9Template, gSmbiosType9Strings },
{ (SMBIOS_STRUCTURE *)&gSmbiosType11Template, gSmbiosType11Strings },
{ (SMBIOS_STRUCTURE *)&gSmbiosType12Template, gSmbiosType12Strings },
{ (SMBIOS_STRUCTURE *)&gSmbiosType16Template, NULL },
{ (SMBIOS_STRUCTURE *)&gSmbiosType17Template, gSmbiosType17Strings },
{ (SMBIOS_STRUCTURE *)&gSmbiosType23Template, NULL },
{ (SMBIOS_STRUCTURE *)&gSmbiosType32Template, NULL },
{ NULL, NULL }
};

View File

@ -25,27 +25,28 @@ DayValid (
BOOLEAN
IsLeapYear (
IN EFI_TIME *Time
IN EFI_TIME *Time
);
EFI_STATUS
RtcTimeFieldsValid (
IN EFI_TIME *Time
IN EFI_TIME *Time
);
EFI_STATUS
EFIAPI
InitializeRealTimeClock (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
);
EFI_STATUS
EFIAPI
EmuGetTime (
OUT EFI_TIME * Time,
OUT EFI_TIME_CAPABILITIES * Capabilities OPTIONAL
OUT EFI_TIME *Time,
OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL
)
/*++
Routine Description:
@ -67,13 +68,11 @@ Returns:
**/
{
//
// Check parameter for null pointer
//
if (Time == NULL) {
return EFI_INVALID_PARAMETER;
}
gEmuThunk->GetTime (Time, Capabilities);
@ -84,8 +83,9 @@ Returns:
EFI_STATUS
EFIAPI
EmuSetTime (
IN EFI_TIME *Time
IN EFI_TIME *Time
)
/*++
Routine Description:
@ -106,11 +106,12 @@ Returns:
**/
{
EFI_STATUS Status;
EFI_STATUS Status;
if (Time == NULL) {
return EFI_INVALID_PARAMETER;
}
//
// Make sure that the time fields are valid
//
@ -118,16 +119,18 @@ Returns:
if (EFI_ERROR (Status)) {
return Status;
}
return EFI_UNSUPPORTED;
}
EFI_STATUS
EFIAPI
EmuGetWakeupTime (
OUT BOOLEAN *Enabled,
OUT BOOLEAN *Pending,
OUT EFI_TIME *Time
OUT BOOLEAN *Enabled,
OUT BOOLEAN *Pending,
OUT EFI_TIME *Time
)
/*++
Routine Description:
@ -159,9 +162,10 @@ Returns:
EFI_STATUS
EFIAPI
EmuSetWakeupTime (
IN BOOLEAN Enable,
OUT EFI_TIME *Time
IN BOOLEAN Enable,
OUT EFI_TIME *Time
)
/*++
Routine Description:
@ -193,9 +197,10 @@ Returns:
EFI_STATUS
EFIAPI
InitializeRealTimeClock (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
/*++
Routine Description:
@ -231,8 +236,9 @@ Returns:
EFI_STATUS
RtcTimeFieldsValid (
IN EFI_TIME *Time
IN EFI_TIME *Time
)
/*++
Routine Description:
@ -242,18 +248,19 @@ Routine Description:
Returns:
**/
{
if (Time->Year < 1998 ||
Time->Year > 2099 ||
Time->Month < 1 ||
Time->Month > 12 ||
if ((Time->Year < 1998) ||
(Time->Year > 2099) ||
(Time->Month < 1) ||
(Time->Month > 12) ||
(!DayValid (Time)) ||
Time->Hour > 23 ||
Time->Minute > 59 ||
Time->Second > 59 ||
Time->Nanosecond > 999999999 ||
(!(Time->TimeZone == EFI_UNSPECIFIED_TIMEZONE || (Time->TimeZone >= -1440 && Time->TimeZone <= 1440))) ||
(Time->Hour > 23) ||
(Time->Minute > 59) ||
(Time->Second > 59) ||
(Time->Nanosecond > 999999999) ||
(!((Time->TimeZone == EFI_UNSPECIFIED_TIMEZONE) || ((Time->TimeZone >= -1440) && (Time->TimeZone <= 1440)))) ||
(Time->Daylight & (~(EFI_TIME_ADJUST_DAYLIGHT | EFI_TIME_IN_DAYLIGHT)))
) {
)
{
return EFI_INVALID_PARAMETER;
}
@ -265,13 +272,13 @@ DayValid (
IN EFI_TIME *Time
)
{
STATIC const INTN DayOfMonth[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (Time->Day < 1 ||
Time->Day > DayOfMonth[Time->Month - 1] ||
(Time->Month == 2 && (!IsLeapYear (Time) && Time->Day > 28))
) {
if ((Time->Day < 1) ||
(Time->Day > DayOfMonth[Time->Month - 1]) ||
((Time->Month == 2) && (!IsLeapYear (Time) && (Time->Day > 28)))
)
{
return FALSE;
}
@ -280,7 +287,7 @@ DayValid (
BOOLEAN
IsLeapYear (
IN EFI_TIME *Time
IN EFI_TIME *Time
)
{
if (Time->Year % 4 == 0) {

View File

@ -19,14 +19,13 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Protocol/Reset.h>
VOID
EFIAPI
EmuResetSystem (
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
)
{
EFI_STATUS Status;
@ -52,7 +51,6 @@ EmuResetSystem (
gBS->FreePool (HandleBuffer);
}
//
// Discard ResetType, always return 0 as exit code
//
@ -66,14 +64,13 @@ EmuResetSystem (
return;
}
EFI_STATUS
EFIAPI
InitializeEmuReset (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
/*++
Routine Description:
@ -105,4 +102,3 @@ Returns:
return Status;
}

View File

@ -15,26 +15,25 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
VOID
EFIAPI
SecSwitchStack (
UINT32 TemporaryMemoryBase,
UINT32 PermenentMemoryBase
UINT32 TemporaryMemoryBase,
UINT32 PermenentMemoryBase
);
EFI_STATUS
EFIAPI
SecTemporaryRamSupport (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,
IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,
IN UINTN CopySize
IN CONST EFI_PEI_SERVICES **PeiServices,
IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,
IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,
IN UINTN CopySize
)
{
//
// Migrate the whole temporary memory to permanent memory.
//
CopyMem (
(VOID*)(UINTN)PermanentMemoryBase,
(VOID*)(UINTN)TemporaryMemoryBase,
(VOID *)(UINTN)PermanentMemoryBase,
(VOID *)(UINTN)TemporaryMemoryBase,
CopySize
);
@ -43,7 +42,7 @@ SecTemporaryRamSupport (
// immediately, also we need fixup the stack change caused by new call into
// permanent memory.
//
SecSwitchStack ((UINT32) TemporaryMemoryBase, (UINT32) PermanentMemoryBase);
SecSwitchStack ((UINT32)TemporaryMemoryBase, (UINT32)PermanentMemoryBase);
//
// We need *not* fix the return address because currently,
@ -53,7 +52,7 @@ SecTemporaryRamSupport (
//
// Simulate to invalid temporary memory, terminate temporary memory
//
//ZeroMem ((VOID*)(UINTN)TemporaryMemoryBase, CopySize);
// ZeroMem ((VOID*)(UINTN)TemporaryMemoryBase, CopySize);
return EFI_SUCCESS;
}

View File

@ -10,13 +10,10 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "Sec.h"
EFI_PEI_TEMPORARY_RAM_SUPPORT_PPI mSecTemporaryRamSupportPpi = {
EFI_PEI_TEMPORARY_RAM_SUPPORT_PPI mSecTemporaryRamSupportPpi = {
SecTemporaryRamSupport
};
EFI_PEI_PPI_DESCRIPTOR gPrivateDispatchTable[] = {
{
EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
@ -25,8 +22,6 @@ EFI_PEI_PPI_DESCRIPTOR gPrivateDispatchTable[] = {
}
};
/**
The entry point of PE/COFF Image for the PEI Core, that has been hijacked by this
SEC that sits on top of an OS application. So the entry and exit of this module
@ -62,8 +57,8 @@ EFI_PEI_PPI_DESCRIPTOR gPrivateDispatchTable[] = {
VOID
EFIAPI
_ModuleEntryPoint (
IN EFI_SEC_PEI_HAND_OFF *SecCoreData,
IN EFI_PEI_PPI_DESCRIPTOR *PpiList
IN EFI_SEC_PEI_HAND_OFF *SecCoreData,
IN EFI_PEI_PPI_DESCRIPTOR *PpiList
)
{
EFI_STATUS Status;
@ -77,7 +72,7 @@ _ModuleEntryPoint (
UINTN Index;
EFI_PEI_PPI_DESCRIPTOR PpiArray[10];
EMU_MAGIC_PAGE()->PpiList = PpiList;
EMU_MAGIC_PAGE ()->PpiList = PpiList;
ProcessLibraryConstructorList ();
DEBUG ((DEBUG_ERROR, "SEC Has Started\n"));
@ -99,12 +94,12 @@ _ModuleEntryPoint (
// Keep everything on a good alignment
SecReseveredMemorySize = ALIGN_VALUE (SecReseveredMemorySize, CPU_STACK_ALIGNMENT);
#if 0
#if 0
// Tell the PEI Core to not use our buffer in temp RAM
SecPpiList = (EFI_PEI_PPI_DESCRIPTOR *)SecCoreData->PeiTemporaryRamBase;
SecCoreData->PeiTemporaryRamBase = (VOID *)((UINTN)SecCoreData->PeiTemporaryRamBase + SecReseveredMemorySize);
SecPpiList = (EFI_PEI_PPI_DESCRIPTOR *)SecCoreData->PeiTemporaryRamBase;
SecCoreData->PeiTemporaryRamBase = (VOID *)((UINTN)SecCoreData->PeiTemporaryRamBase + SecReseveredMemorySize);
SecCoreData->PeiTemporaryRamSize -= SecReseveredMemorySize;
#else
#else
//
// When I subtrack from SecCoreData->PeiTemporaryRamBase PEI Core crashes? Either there is a bug
// or I don't understand temp RAM correctly?
@ -112,7 +107,7 @@ _ModuleEntryPoint (
SecPpiList = &PpiArray[0];
ASSERT (sizeof (PpiArray) >= SecReseveredMemorySize);
#endif
#endif
// Copy existing list, and append our entries.
CopyMem (SecPpiList, PpiList, sizeof (EFI_PEI_PPI_DESCRIPTOR) * Index);
CopyMem (&SecPpiList[Index], gPrivateDispatchTable, sizeof (gPrivateDispatchTable));
@ -120,7 +115,7 @@ _ModuleEntryPoint (
// Find PEI Core and transfer control
VolumeHandle = (EFI_PEI_FV_HANDLE)(UINTN)SecCoreData->BootFirmwareVolumeBase;
FileHandle = NULL;
Status = PeiServicesFfsFindNextFile (EFI_FV_FILETYPE_PEI_CORE, VolumeHandle, &FileHandle);
Status = PeiServicesFfsFindNextFile (EFI_FV_FILETYPE_PEI_CORE, VolumeHandle, &FileHandle);
ASSERT_EFI_ERROR (Status);
Status = PeiServicesFfsFindSectionData (EFI_SECTION_PE32, FileHandle, &PeCoffImage);

View File

@ -11,7 +11,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#ifndef __SEC_H___
#define __SEC_H___
#include <PiPei.h>
#include <Library/EmuMagicPageLib.h>
#include <Library/DebugLib.h>
@ -21,7 +20,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Ppi/TemporaryRamSupport.h>
//
// I think this should be defined in a MdePkg include file?
//
@ -34,12 +32,10 @@ ProcessLibraryConstructorList (
EFI_STATUS
EFIAPI
SecTemporaryRamSupport (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,
IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,
IN UINTN CopySize
IN CONST EFI_PEI_SERVICES **PeiServices,
IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,
IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,
IN UINTN CopySize
);
#endif

View File

@ -18,14 +18,13 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Ppi/EmuThunk.h>
#include <Protocol/EmuThunk.h>
EFI_STATUS
EFIAPI
PeiInitialzeThunkPpiToProtocolPei (
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
)
/*++
Routine Description:
@ -50,11 +49,11 @@ Returns:
DEBUG ((DEBUG_ERROR, "Emu Thunk PEIM Loaded\n"));
Status = PeiServicesLocatePpi (
&gEmuThunkPpiGuid, // GUID
0, // INSTANCE
&PpiDescriptor, // EFI_PEI_PPI_DESCRIPTOR
(VOID **)&Thunk // PPI
);
&gEmuThunkPpiGuid, // GUID
0, // INSTANCE
&PpiDescriptor, // EFI_PEI_PPI_DESCRIPTOR
(VOID **)&Thunk // PPI
);
ASSERT_EFI_ERROR (Status);
Ptr = Thunk->Thunk ();

View File

@ -27,12 +27,12 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
//
// Pointer to the CPU Architectural Protocol instance
//
EFI_CPU_ARCH_PROTOCOL *mCpu;
EFI_CPU_ARCH_PROTOCOL *mCpu;
//
// The Timer Architectural Protocol that this driver produces
//
EFI_TIMER_ARCH_PROTOCOL mTimer = {
EFI_TIMER_ARCH_PROTOCOL mTimer = {
EmuTimerDriverRegisterHandler,
EmuTimerDriverSetTimerPeriod,
EmuTimerDriverGetTimerPeriod,
@ -42,22 +42,22 @@ EFI_TIMER_ARCH_PROTOCOL mTimer = {
//
// The notification function to call on every timer interrupt
//
EFI_TIMER_NOTIFY mTimerNotifyFunction = NULL;
EFI_TIMER_NOTIFY mTimerNotifyFunction = NULL;
//
// The current period of the timer interrupt
//
UINT64 mTimerPeriodMs;
UINT64 mTimerPeriodMs;
VOID
EFIAPI
TimerCallback (UINT64 DeltaMs)
TimerCallback (
UINT64 DeltaMs
)
{
EFI_TPL OriginalTPL;
EFI_TIMER_NOTIFY CallbackFunction;
OriginalTPL = gBS->RaiseTPL (TPL_HIGH_LEVEL);
if (OriginalTPL < TPL_HIGH_LEVEL) {
@ -73,15 +73,15 @@ TimerCallback (UINT64 DeltaMs)
}
gBS->RestoreTPL (OriginalTPL);
}
EFI_STATUS
EFIAPI
EmuTimerDriverRegisterHandler (
IN EFI_TIMER_ARCH_PROTOCOL *This,
IN EFI_TIMER_NOTIFY NotifyFunction
IN EFI_TIMER_ARCH_PROTOCOL *This,
IN EFI_TIMER_NOTIFY NotifyFunction
)
/*++
Routine Description:
@ -127,11 +127,11 @@ Returns:
//
// Check for invalid parameters
//
if (NotifyFunction == NULL && mTimerNotifyFunction == NULL) {
if ((NotifyFunction == NULL) && (mTimerNotifyFunction == NULL)) {
return EFI_INVALID_PARAMETER;
}
if (NotifyFunction != NULL && mTimerNotifyFunction != NULL) {
if ((NotifyFunction != NULL) && (mTimerNotifyFunction != NULL)) {
return EFI_ALREADY_STARTED;
}
@ -142,6 +142,7 @@ Returns:
/* Enable Timer. */
gEmuThunk->SetTimer (mTimerPeriodMs, TimerCallback);
}
mTimerNotifyFunction = NotifyFunction;
return EFI_SUCCESS;
@ -153,6 +154,7 @@ EmuTimerDriverSetTimerPeriod (
IN EFI_TIMER_ARCH_PROTOCOL *This,
IN UINT64 TimerPeriod
)
/*++
Routine Description:
@ -190,14 +192,14 @@ Returns:
**/
{
//
// If TimerPeriod is 0, then the timer thread should be canceled
// If the TimerPeriod is valid, then create and/or adjust the period of the timer thread
//
if (TimerPeriod == 0
|| ((TimerPeriod > TIMER_MINIMUM_VALUE)
&& (TimerPeriod < TIMER_MAXIMUM_VALUE))) {
if ( (TimerPeriod == 0)
|| ( (TimerPeriod > TIMER_MINIMUM_VALUE)
&& (TimerPeriod < TIMER_MAXIMUM_VALUE)))
{
mTimerPeriodMs = DivU64x32 (TimerPeriod + 5000, 10000);
gEmuThunk->SetTimer (mTimerPeriodMs, TimerCallback);
@ -209,9 +211,10 @@ Returns:
EFI_STATUS
EFIAPI
EmuTimerDriverGetTimerPeriod (
IN EFI_TIMER_ARCH_PROTOCOL *This,
OUT UINT64 *TimerPeriod
IN EFI_TIMER_ARCH_PROTOCOL *This,
OUT UINT64 *TimerPeriod
)
/*++
Routine Description:
@ -250,6 +253,7 @@ EFIAPI
EmuTimerDriverGenerateSoftInterrupt (
IN EFI_TIMER_ARCH_PROTOCOL *This
)
/*++
Routine Description:
@ -283,6 +287,7 @@ EmuTimerDriverInitialize (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
/*++
Routine Description:
@ -341,6 +346,5 @@ Returns:
return Status;
}
return EFI_SUCCESS;
}

View File

@ -13,19 +13,16 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#ifndef _TIMER_H_
#define _TIMER_H_
//
// Legal timer value range in 100 ns units
//
#define TIMER_MINIMUM_VALUE 0
#define TIMER_MAXIMUM_VALUE (0x100000000ULL - 1)
#define TIMER_MINIMUM_VALUE 0
#define TIMER_MAXIMUM_VALUE (0x100000000ULL - 1)
//
// Default timer value in 100 ns units (50 ms)
//
#define DEFAULT_TIMER_TICK_DURATION 500000
#define DEFAULT_TIMER_TICK_DURATION 500000
//
// Function Prototypes
@ -54,8 +51,8 @@ EmuTimerDriverSetTimerPeriod (
EFI_STATUS
EFIAPI
EmuTimerDriverGetTimerPeriod (
IN EFI_TIMER_ARCH_PROTOCOL *This,
OUT UINT64 *TimerPeriod
IN EFI_TIMER_ARCH_PROTOCOL *This,
OUT UINT64 *TimerPeriod
);
EFI_STATUS

View File

@ -11,53 +11,48 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include "Host.h"
#ifdef __APPLE__
#include <Library/NetLib.h>
#include <Library/NetLib.h>
#define EMU_SNP_PRIVATE_SIGNATURE SIGNATURE_32('E', 'M', 's', 'n')
#define EMU_SNP_PRIVATE_SIGNATURE SIGNATURE_32('E', 'M', 's', 'n')
typedef struct {
UINTN Signature;
UINTN Signature;
EMU_IO_THUNK_PROTOCOL *Thunk;
EMU_SNP_PROTOCOL EmuSnp;
EFI_SIMPLE_NETWORK_MODE *Mode;
EMU_IO_THUNK_PROTOCOL *Thunk;
EMU_SNP_PROTOCOL EmuSnp;
EFI_SIMPLE_NETWORK_MODE *Mode;
int BpfFd;
char *InterfaceName;
EFI_MAC_ADDRESS MacAddress;
u_int ReadBufferSize;
VOID *ReadBuffer;
int BpfFd;
char *InterfaceName;
EFI_MAC_ADDRESS MacAddress;
u_int ReadBufferSize;
VOID *ReadBuffer;
//
// Two walking pointers to manage the multiple packets that can be returned
// in a single read.
//
VOID *CurrentReadPointer;
VOID *EndReadPointer;
UINT32 ReceivedPackets;
UINT32 DroppedPackets;
VOID *CurrentReadPointer;
VOID *EndReadPointer;
UINT32 ReceivedPackets;
UINT32 DroppedPackets;
} EMU_SNP_PRIVATE;
#define EMU_SNP_PRIVATE_DATA_FROM_THIS(a) \
CR(a, EMU_SNP_PRIVATE, EmuSnp, EMU_SNP_PRIVATE_SIGNATURE)
//
// Strange, but there doesn't appear to be any structure for the Ethernet header in edk2...
//
typedef struct {
UINT8 DstAddr[NET_ETHER_ADDR_LEN];
UINT8 SrcAddr[NET_ETHER_ADDR_LEN];
UINT16 Type;
UINT8 DstAddr[NET_ETHER_ADDR_LEN];
UINT8 SrcAddr[NET_ETHER_ADDR_LEN];
UINT16 Type;
} ETHERNET_HEADER;
/**
@ -76,7 +71,7 @@ EmuSnpCreateMapping (
IN EFI_SIMPLE_NETWORK_MODE *Mode
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -100,40 +95,38 @@ EmuSnpCreateMapping (
return EFI_SUCCESS;
}
static struct bpf_insn mFilterInstructionTemplate[] = {
static struct bpf_insn mFilterInstructionTemplate[] = {
// Load 4 bytes from the destination MAC address.
BPF_STMT (BPF_LD + BPF_W + BPF_ABS, OFFSET_OF (ETHERNET_HEADER, DstAddr[0])),
BPF_STMT (BPF_LD + BPF_W + BPF_ABS, OFFSET_OF (ETHERNET_HEADER, DstAddr[0])),
// Compare to first 4 bytes of fake MAC address.
BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, 0x12345678, 0, 3 ),
BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, 0x12345678, 0, 3),
// Load remaining 2 bytes from the destination MAC address.
BPF_STMT (BPF_LD + BPF_H + BPF_ABS, OFFSET_OF( ETHERNET_HEADER, DstAddr[4])),
BPF_STMT (BPF_LD + BPF_H + BPF_ABS, OFFSET_OF (ETHERNET_HEADER, DstAddr[4])),
// Compare to remaining 2 bytes of fake MAC address.
BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, 0x9ABC, 5, 0 ),
BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, 0x9ABC, 5, 0),
// Load 4 bytes from the destination MAC address.
BPF_STMT (BPF_LD + BPF_W + BPF_ABS, OFFSET_OF (ETHERNET_HEADER, DstAddr[0])),
BPF_STMT (BPF_LD + BPF_W + BPF_ABS, OFFSET_OF (ETHERNET_HEADER, DstAddr[0])),
// Compare to first 4 bytes of broadcast MAC address.
BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, 0xFFFFFFFF, 0, 2),
BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, 0xFFFFFFFF, 0, 2),
// Load remaining 2 bytes from the destination MAC address.
BPF_STMT (BPF_LD + BPF_H + BPF_ABS, OFFSET_OF( ETHERNET_HEADER, DstAddr[4])),
BPF_STMT (BPF_LD + BPF_H + BPF_ABS, OFFSET_OF (ETHERNET_HEADER, DstAddr[4])),
// Compare to remaining 2 bytes of broadcast MAC address.
BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, 0xFFFF, 1, 0),
BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, 0xFFFF, 1, 0),
// Reject packet.
BPF_STMT (BPF_RET + BPF_K, 0),
BPF_STMT (BPF_RET + BPF_K, 0),
// Receive entire packet.
BPF_STMT (BPF_RET + BPF_K, -1)
BPF_STMT (BPF_RET + BPF_K, -1)
};
EFI_STATUS
OpenBpfFileDescriptor (
IN EMU_SNP_PRIVATE *Private,
@ -171,7 +164,6 @@ OpenBpfFileDescriptor (
return EFI_OUT_OF_RESOURCES;
}
/**
Changes the state of a network interface from "stopped" to "started".
@ -189,15 +181,15 @@ EmuSnpStart (
IN EMU_SNP_PROTOCOL *This
)
{
EFI_STATUS Status;
EMU_SNP_PRIVATE *Private;
struct ifreq BoundIf;
struct bpf_program BpfProgram;
struct bpf_insn *FilterProgram;
EFI_STATUS Status;
EMU_SNP_PRIVATE *Private;
struct ifreq BoundIf;
struct bpf_program BpfProgram;
struct bpf_insn *FilterProgram;
u_int Value;
u_int ReadBufferSize;
UINT16 Temp16;
UINT32 Temp32;
UINT16 Temp16;
UINT32 Temp32;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -215,7 +207,7 @@ EmuSnpStart (
break;
}
Status = EFI_SUCCESS;
Status = EFI_SUCCESS;
Private->ReadBuffer = NULL;
if (Private->BpfFd == 0) {
Status = OpenBpfFileDescriptor (Private, &Private->BpfFd);
@ -282,7 +274,7 @@ EmuSnpStart (
// Allocate read buffer.
//
Private->ReadBufferSize = ReadBufferSize;
Private->ReadBuffer = malloc (Private->ReadBufferSize);
Private->ReadBuffer = malloc (Private->ReadBufferSize);
if (Private->ReadBuffer == NULL) {
goto ErrorExit;
}
@ -293,7 +285,7 @@ EmuSnpStart (
// Install our packet filter: successful reads should only produce broadcast or unicast
// packets directed to our fake MAC address.
//
FilterProgram = malloc (sizeof (mFilterInstructionTemplate)) ;
FilterProgram = malloc (sizeof (mFilterInstructionTemplate));
if ( FilterProgram == NULL ) {
goto ErrorExit;
}
@ -308,7 +300,7 @@ EmuSnpStart (
CopyMem (&Temp16, &Private->Mode->CurrentAddress.Addr[4], sizeof (UINT16));
FilterProgram[3].k = NTOHS (Temp16);
BpfProgram.bf_len = sizeof (mFilterInstructionTemplate) / sizeof (struct bpf_insn);
BpfProgram.bf_len = sizeof (mFilterInstructionTemplate) / sizeof (struct bpf_insn);
BpfProgram.bf_insns = FilterProgram;
if (ioctl (Private->BpfFd, BIOCSETF, &BpfProgram) < 0) {
@ -324,7 +316,6 @@ EmuSnpStart (
goto DeviceErrorExit;
}
Private->Mode->State = EfiSimpleNetworkStarted;
}
@ -337,10 +328,10 @@ ErrorExit:
free (Private->ReadBuffer);
Private->ReadBuffer = NULL;
}
return Status;
}
/**
Changes the state of a network interface from "started" to "stopped".
@ -358,7 +349,7 @@ EmuSnpStop (
IN EMU_SNP_PROTOCOL *This
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -381,7 +372,7 @@ EmuSnpStop (
}
if (Private->ReadBuffer != NULL) {
free (Private->ReadBuffer );
free (Private->ReadBuffer);
Private->CurrentReadPointer = Private->EndReadPointer = Private->ReadBuffer = NULL;
}
@ -390,7 +381,6 @@ EmuSnpStop (
return EFI_SUCCESS;
}
/**
Resets a network adapter and allocates the transmit and receive buffers
required by the network interface; optionally, also requests allocation
@ -419,12 +409,12 @@ EmuSnpStop (
**/
EFI_STATUS
EmuSnpInitialize (
IN EMU_SNP_PROTOCOL *This,
IN UINTN ExtraRxBufferSize OPTIONAL,
IN UINTN ExtraTxBufferSize OPTIONAL
IN EMU_SNP_PROTOCOL *This,
IN UINTN ExtraRxBufferSize OPTIONAL,
IN UINTN ExtraTxBufferSize OPTIONAL
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -441,7 +431,7 @@ EmuSnpInitialize (
break;
}
Private->Mode->MCastFilterCount = 0;
Private->Mode->MCastFilterCount = 0;
Private->Mode->ReceiveFilterSetting = 0;
ZeroMem (Private->Mode->MCastFilter, sizeof (Private->Mode->MCastFilter));
@ -450,7 +440,6 @@ EmuSnpInitialize (
return EFI_SUCCESS;
}
/**
Resets a network adapter and re-initializes it with the parameters that were
provided in the previous call to Initialize().
@ -469,11 +458,11 @@ EmuSnpInitialize (
**/
EFI_STATUS
EmuSnpReset (
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -493,7 +482,6 @@ EmuSnpReset (
return EFI_SUCCESS;
}
/**
Resets a network adapter and leaves it in a state that is safe for
another driver to initialize.
@ -512,7 +500,7 @@ EmuSnpShutdown (
IN EMU_SNP_PROTOCOL *This
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -532,7 +520,7 @@ EmuSnpShutdown (
Private->Mode->State = EfiSimpleNetworkStarted;
Private->Mode->ReceiveFilterSetting = 0;
Private->Mode->MCastFilterCount = 0;
Private->Mode->MCastFilterCount = 0;
ZeroMem (Private->Mode->MCastFilter, sizeof (Private->Mode->MCastFilter));
if (Private->BpfFd != 0) {
@ -574,15 +562,15 @@ EmuSnpShutdown (
**/
EFI_STATUS
EmuSnpReceiveFilters (
IN EMU_SNP_PROTOCOL *This,
IN UINT32 Enable,
IN UINT32 Disable,
IN BOOLEAN ResetMCastFilter,
IN UINTN MCastFilterCnt OPTIONAL,
IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL
IN EMU_SNP_PROTOCOL *This,
IN UINT32 Enable,
IN UINT32 Disable,
IN BOOLEAN ResetMCastFilter,
IN UINTN MCastFilterCnt OPTIONAL,
IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -590,7 +578,6 @@ EmuSnpReceiveFilters (
return EFI_SUCCESS;
}
/**
Modifies or resets the current station address, if supported.
@ -608,19 +595,18 @@ EmuSnpReceiveFilters (
**/
EFI_STATUS
EmuSnpStationAddress (
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN Reset,
IN EFI_MAC_ADDRESS *New OPTIONAL
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN Reset,
IN EFI_MAC_ADDRESS *New OPTIONAL
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
return EFI_UNSUPPORTED;
}
/**
Resets or collects the statistics on a network interface.
@ -644,20 +630,19 @@ EmuSnpStationAddress (
**/
EFI_STATUS
EmuSnpStatistics (
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN Reset,
IN OUT UINTN *StatisticsSize OPTIONAL,
OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN Reset,
IN OUT UINTN *StatisticsSize OPTIONAL,
OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
return EFI_UNSUPPORTED;
}
/**
Converts a multicast IP address to a multicast HW MAC address.
@ -681,20 +666,19 @@ EmuSnpStatistics (
**/
EFI_STATUS
EmuSnpMCastIpToMac (
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN IPv6,
IN EFI_IP_ADDRESS *IP,
OUT EFI_MAC_ADDRESS *MAC
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN IPv6,
IN EFI_IP_ADDRESS *IP,
OUT EFI_MAC_ADDRESS *MAC
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
return EFI_UNSUPPORTED;
}
/**
Performs read and write operations on the NVRAM device attached to a
network interface.
@ -717,14 +701,14 @@ EmuSnpMCastIpToMac (
**/
EFI_STATUS
EmuSnpNvData (
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN ReadWrite,
IN UINTN Offset,
IN UINTN BufferSize,
IN OUT VOID *Buffer
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN ReadWrite,
IN UINTN Offset,
IN UINTN BufferSize,
IN OUT VOID *Buffer
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -758,12 +742,12 @@ EmuSnpNvData (
**/
EFI_STATUS
EmuSnpGetStatus (
IN EMU_SNP_PROTOCOL *This,
OUT UINT32 *InterruptStatus OPTIONAL,
OUT VOID **TxBuf OPTIONAL
IN EMU_SNP_PROTOCOL *This,
OUT UINT32 *InterruptStatus OPTIONAL,
OUT VOID **TxBuf OPTIONAL
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -774,7 +758,6 @@ EmuSnpGetStatus (
return EFI_SUCCESS;
}
/**
Places a packet in the transmit queue of a network interface.
@ -810,17 +793,17 @@ EmuSnpGetStatus (
**/
EFI_STATUS
EmuSnpTransmit (
IN EMU_SNP_PROTOCOL *This,
IN UINTN HeaderSize,
IN UINTN BufferSize,
IN VOID *Buffer,
IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
IN EFI_MAC_ADDRESS *DestAddr OPTIONAL,
IN UINT16 *Protocol OPTIONAL
IN EMU_SNP_PROTOCOL *This,
IN UINTN HeaderSize,
IN UINTN BufferSize,
IN VOID *Buffer,
IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
IN EFI_MAC_ADDRESS *DestAddr OPTIONAL,
IN UINT16 *Protocol OPTIONAL
)
{
EMU_SNP_PRIVATE *Private;
ETHERNET_HEADER *EnetHeader;
EMU_SNP_PRIVATE *Private;
ETHERNET_HEADER *EnetHeader;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -837,15 +820,15 @@ EmuSnpTransmit (
SrcAddr = &Private->Mode->CurrentAddress;
}
EnetHeader = (ETHERNET_HEADER *) Buffer;
EnetHeader = (ETHERNET_HEADER *)Buffer;
CopyMem (EnetHeader->DstAddr, DestAddr, NET_ETHER_ADDR_LEN);
CopyMem (EnetHeader->SrcAddr, SrcAddr, NET_ETHER_ADDR_LEN);
EnetHeader->Type = HTONS(*Protocol);
EnetHeader->Type = HTONS (*Protocol);
}
if (write (Private->BpfFd, Buffer, BufferSize) < 0) {
if (write (Private->BpfFd, Buffer, BufferSize) < 0) {
return EFI_DEVICE_ERROR;
}
@ -886,20 +869,20 @@ EmuSnpTransmit (
**/
EFI_STATUS
EmuSnpReceive (
IN EMU_SNP_PROTOCOL *This,
OUT UINTN *HeaderSize OPTIONAL,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer,
OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL,
OUT UINT16 *Protocol OPTIONAL
IN EMU_SNP_PROTOCOL *This,
OUT UINTN *HeaderSize OPTIONAL,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer,
OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL,
OUT UINT16 *Protocol OPTIONAL
)
{
EMU_SNP_PRIVATE *Private;
struct bpf_hdr *BpfHeader;
struct bpf_stat BpfStats;
ETHERNET_HEADER *EnetHeader;
ssize_t Result;
EMU_SNP_PRIVATE *Private;
struct bpf_hdr *BpfHeader;
struct bpf_stat BpfStats;
ETHERNET_HEADER *EnetHeader;
ssize_t Result;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -907,7 +890,7 @@ EmuSnpReceive (
return EFI_NOT_STARTED;
}
ZeroMem (&BpfStats, sizeof( BpfStats));
ZeroMem (&BpfStats, sizeof (BpfStats));
if (ioctl (Private->BpfFd, BIOCGSTATS, &BpfStats) == 0) {
Private->ReceivedPackets += BpfStats.bs_recv;
@ -936,10 +919,10 @@ EmuSnpReceive (
}
Private->CurrentReadPointer = Private->ReadBuffer;
Private->EndReadPointer = Private->CurrentReadPointer + Result;
Private->EndReadPointer = Private->CurrentReadPointer + Result;
}
BpfHeader = Private->CurrentReadPointer;
BpfHeader = Private->CurrentReadPointer;
EnetHeader = Private->CurrentReadPointer + BpfHeader->bh_hdrlen;
if (BpfHeader->bh_caplen > *BufferSize) {
@ -972,8 +955,7 @@ EmuSnpReceive (
return EFI_SUCCESS;
}
EMU_SNP_PROTOCOL gEmuSnpProtocol = {
EMU_SNP_PROTOCOL gEmuSnpProtocol = {
GasketSnpCreateMapping,
GasketSnpStart,
GasketSnpStop,
@ -992,7 +974,7 @@ EMU_SNP_PROTOCOL gEmuSnpProtocol = {
EFI_STATUS
GetInterfaceMacAddr (
EMU_SNP_PRIVATE *Private
EMU_SNP_PRIVATE *Private
)
{
EFI_STATUS Status;
@ -1020,12 +1002,12 @@ GetInterfaceMacAddr (
);
Status = EFI_NOT_FOUND;
If = IfAddrs;
If = IfAddrs;
while (If != NULL) {
IfSdl = (struct sockaddr_dl *)If->ifa_addr;
if (IfSdl->sdl_family == AF_LINK) {
if (!AsciiStrCmp( Private->InterfaceName, If->ifa_name)) {
if (!AsciiStrCmp (Private->InterfaceName, If->ifa_name)) {
CopyMem (&Private->MacAddress, LLADDR (IfSdl), NET_ETHER_ADDR_LEN);
Status = EFI_SUCCESS;
@ -1041,10 +1023,9 @@ Exit:
return Status;
}
EFI_STATUS
EmuSnpThunkOpen (
IN EMU_IO_THUNK_PROTOCOL *This
IN EMU_IO_THUNK_PROTOCOL *This
)
{
EMU_SNP_PRIVATE *Private;
@ -1062,7 +1043,6 @@ EmuSnpThunkOpen (
return EFI_OUT_OF_RESOURCES;
}
Private->Signature = EMU_SNP_PRIVATE_SIGNATURE;
Private->Thunk = This;
CopyMem (&Private->EmuSnp, &gEmuSnpProtocol, sizeof (gEmuSnpProtocol));
@ -1073,10 +1053,9 @@ EmuSnpThunkOpen (
return EFI_SUCCESS;
}
EFI_STATUS
EmuSnpThunkClose (
IN EMU_IO_THUNK_PROTOCOL *This
IN EMU_IO_THUNK_PROTOCOL *This
)
{
EMU_SNP_PRIVATE *Private;
@ -1091,9 +1070,7 @@ EmuSnpThunkClose (
return EFI_SUCCESS;
}
EMU_IO_THUNK_PROTOCOL gSnpThunkIo = {
EMU_IO_THUNK_PROTOCOL gSnpThunkIo = {
&gEmuSnpProtocolGuid,
NULL,
NULL,

View File

@ -7,41 +7,37 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "Host.h"
#define EMU_BLOCK_IO_PRIVATE_SIGNATURE SIGNATURE_32 ('E', 'M', 'b', 'k')
#define EMU_BLOCK_IO_PRIVATE_SIGNATURE SIGNATURE_32 ('E', 'M', 'b', 'k')
typedef struct {
UINTN Signature;
UINTN Signature;
EMU_IO_THUNK_PROTOCOL *Thunk;
EMU_IO_THUNK_PROTOCOL *Thunk;
char *Filename;
UINTN ReadMode;
UINTN Mode;
char *Filename;
UINTN ReadMode;
UINTN Mode;
int fd;
int fd;
BOOLEAN RemovableMedia;
BOOLEAN WriteProtected;
BOOLEAN RemovableMedia;
BOOLEAN WriteProtected;
UINT64 NumberOfBlocks;
UINT32 BlockSize;
EMU_BLOCK_IO_PROTOCOL EmuBlockIo;
EFI_BLOCK_IO_MEDIA *Media;
UINT64 NumberOfBlocks;
UINT32 BlockSize;
EMU_BLOCK_IO_PROTOCOL EmuBlockIo;
EFI_BLOCK_IO_MEDIA *Media;
} EMU_BLOCK_IO_PRIVATE;
#define EMU_BLOCK_IO_PRIVATE_DATA_FROM_THIS(a) \
CR(a, EMU_BLOCK_IO_PRIVATE, EmuBlockIo, EMU_BLOCK_IO_PRIVATE_SIGNATURE)
EFI_STATUS
EmuBlockIoReset (
IN EMU_BLOCK_IO_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
IN EMU_BLOCK_IO_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
);
/*++
This function extends the capability of SetFilePointer to accept 64 bit parameters
@ -49,18 +45,18 @@ This function extends the capability of SetFilePointer to accept 64 bit paramete
**/
EFI_STATUS
SetFilePointer64 (
IN EMU_BLOCK_IO_PRIVATE *Private,
IN INT64 DistanceToMove,
OUT UINT64 *NewFilePointer,
IN INT32 MoveMethod
IN EMU_BLOCK_IO_PRIVATE *Private,
IN INT64 DistanceToMove,
OUT UINT64 *NewFilePointer,
IN INT32 MoveMethod
)
{
EFI_STATUS Status;
off_t res;
off_t offset = DistanceToMove;
EFI_STATUS Status;
off_t res;
off_t offset = DistanceToMove;
Status = EFI_SUCCESS;
res = lseek (Private->fd, offset, (int)MoveMethod);
res = lseek (Private->fd, offset, (int)MoveMethod);
if (res == -1) {
Status = EFI_INVALID_PARAMETER;
}
@ -72,16 +68,14 @@ SetFilePointer64 (
return Status;
}
EFI_STATUS
EmuBlockIoOpenDevice (
IN EMU_BLOCK_IO_PRIVATE *Private
IN EMU_BLOCK_IO_PRIVATE *Private
)
{
EFI_STATUS Status;
UINT64 FileSize;
struct statfs buf;
EFI_STATUS Status;
UINT64 FileSize;
struct statfs buf;
//
// If the device is already opened, close it
@ -95,9 +89,9 @@ EmuBlockIoOpenDevice (
//
Private->fd = open (Private->Filename, Private->Mode, 0644);
if (Private->fd < 0) {
printf ("EmuOpenBlock: Could not open %s: %s\n", Private->Filename, strerror(errno));
Private->Media->MediaPresent = FALSE;
Status = EFI_NO_MEDIA;
printf ("EmuOpenBlock: Could not open %s: %s\n", Private->Filename, strerror (errno));
Private->Media->MediaPresent = FALSE;
Status = EFI_NO_MEDIA;
goto Done;
}
@ -120,13 +114,14 @@ EmuBlockIoOpenDevice (
if (FileSize == 0) {
// lseek fails on a real device. ioctl calls are OS specific
#if __APPLE__
#if __APPLE__
{
UINT32 BlockSize;
UINT32 BlockSize;
if (ioctl (Private->fd, DKIOCGETBLOCKSIZE, &BlockSize) == 0) {
Private->Media->BlockSize = BlockSize;
}
if (ioctl (Private->fd, DKIOCGETBLOCKCOUNT, &Private->NumberOfBlocks) == 0) {
if ((Private->NumberOfBlocks == 0) && (BlockSize == 0x800)) {
// A DVD is ~ 4.37 GB so make up a number
@ -135,34 +130,35 @@ EmuBlockIoOpenDevice (
Private->Media->LastBlock = Private->NumberOfBlocks - 1;
}
}
ioctl (Private->fd, DKIOCGETMAXBLOCKCOUNTWRITE, &Private->Media->OptimalTransferLengthGranularity);
}
#else
#else
{
size_t BlockSize;
UINT64 DiskSize;
size_t BlockSize;
UINT64 DiskSize;
if (ioctl (Private->fd, BLKSSZGET, &BlockSize) == 0) {
Private->Media->BlockSize = BlockSize;
}
if (ioctl (Private->fd, BLKGETSIZE64, &DiskSize) == 0) {
Private->NumberOfBlocks = DivU64x32 (DiskSize, (UINT32)BlockSize);
Private->NumberOfBlocks = DivU64x32 (DiskSize, (UINT32)BlockSize);
Private->Media->LastBlock = Private->NumberOfBlocks - 1;
}
}
#endif
#endif
} else {
Private->Media->BlockSize = Private->BlockSize;
Private->NumberOfBlocks = DivU64x32 (FileSize, Private->Media->BlockSize);
Private->NumberOfBlocks = DivU64x32 (FileSize, Private->Media->BlockSize);
Private->Media->LastBlock = Private->NumberOfBlocks - 1;
if (fstatfs (Private->fd, &buf) == 0) {
#if __APPLE__
#if __APPLE__
Private->Media->OptimalTransferLengthGranularity = buf.f_iosize/buf.f_bsize;
#else
#else
Private->Media->OptimalTransferLengthGranularity = buf.f_bsize/buf.f_bsize;
#endif
#endif
}
}
@ -179,15 +175,14 @@ Done:
return Status;
}
EFI_STATUS
EmuBlockIoCreateMapping (
IN EMU_BLOCK_IO_PROTOCOL *This,
IN EFI_BLOCK_IO_MEDIA *Media
IN EMU_BLOCK_IO_PROTOCOL *This,
IN EFI_BLOCK_IO_MEDIA *Media
)
{
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
Private = EMU_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This);
@ -206,66 +201,61 @@ EmuBlockIoCreateMapping (
Media->LowestAlignedLba = 0;
Media->LogicalBlocksPerPhysicalBlock = 0;
// EFI_BLOCK_IO_PROTOCOL_REVISION3
Media->OptimalTransferLengthGranularity = 0;
Status = EmuBlockIoOpenDevice (Private);
return Status;
}
EFI_STATUS
EmuBlockIoError (
IN EMU_BLOCK_IO_PRIVATE *Private
IN EMU_BLOCK_IO_PRIVATE *Private
)
{
EFI_STATUS Status;
BOOLEAN ReinstallBlockIoFlag;
EFI_STATUS Status;
BOOLEAN ReinstallBlockIoFlag;
switch (errno) {
case EAGAIN:
Status = EFI_NO_MEDIA;
Private->Media->ReadOnly = FALSE;
Private->Media->MediaPresent = FALSE;
ReinstallBlockIoFlag = FALSE;
break;
case EAGAIN:
Status = EFI_NO_MEDIA;
Private->Media->ReadOnly = FALSE;
Private->Media->MediaPresent = FALSE;
ReinstallBlockIoFlag = FALSE;
break;
case EACCES:
Private->Media->ReadOnly = FALSE;
Private->Media->MediaPresent = TRUE;
Private->Media->MediaId += 1;
ReinstallBlockIoFlag = TRUE;
Status = EFI_MEDIA_CHANGED;
break;
case EACCES:
Private->Media->ReadOnly = FALSE;
Private->Media->MediaPresent = TRUE;
Private->Media->MediaId += 1;
ReinstallBlockIoFlag = TRUE;
Status = EFI_MEDIA_CHANGED;
break;
case EROFS:
Private->Media->ReadOnly = TRUE;
ReinstallBlockIoFlag = FALSE;
Status = EFI_WRITE_PROTECTED;
break;
case EROFS:
Private->Media->ReadOnly = TRUE;
ReinstallBlockIoFlag = FALSE;
Status = EFI_WRITE_PROTECTED;
break;
default:
ReinstallBlockIoFlag = FALSE;
Status = EFI_DEVICE_ERROR;
break;
default:
ReinstallBlockIoFlag = FALSE;
Status = EFI_DEVICE_ERROR;
break;
}
return Status;
}
EFI_STATUS
EmuBlockIoReadWriteCommon (
IN EMU_BLOCK_IO_PRIVATE *Private,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN UINTN BufferSize,
IN VOID *Buffer,
IN CHAR8 *CallerName
IN EMU_BLOCK_IO_PRIVATE *Private,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN UINTN BufferSize,
IN VOID *Buffer,
IN CHAR8 *CallerName
)
{
EFI_STATUS Status;
@ -290,7 +280,7 @@ EmuBlockIoReadWriteCommon (
return EFI_MEDIA_CHANGED;
}
if ((UINTN) Buffer % Private->Media->IoAlign != 0) {
if ((UINTN)Buffer % Private->Media->IoAlign != 0) {
return EFI_INVALID_PARAMETER;
}
@ -313,11 +303,12 @@ EmuBlockIoReadWriteCommon (
DEBUG ((DEBUG_INIT, "ReadBlocks: Attempted to read off end of device\n"));
return EFI_INVALID_PARAMETER;
}
//
// Seek to End of File
//
DistanceToMove = MultU64x32 (Lba, BlockSize);
Status = SetFilePointer64 (Private, DistanceToMove, &DistanceMoved, SEEK_SET);
Status = SetFilePointer64 (Private, DistanceToMove, &DistanceMoved, SEEK_SET);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_INIT, "WriteBlocks: SetFilePointer failed\n"));
@ -327,7 +318,6 @@ EmuBlockIoReadWriteCommon (
return EFI_SUCCESS;
}
/**
Read BufferSize bytes from Lba into Buffer.
@ -368,16 +358,16 @@ EmuBlockIoReadBlocks (
IN EFI_LBA LBA,
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
IN UINTN BufferSize,
OUT VOID *Buffer
OUT VOID *Buffer
)
{
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
ssize_t len;
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
ssize_t len;
Private = EMU_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This);
Status = EmuBlockIoReadWriteCommon (Private, MediaId, LBA, BufferSize, Buffer, "UnixReadBlocks");
Status = EmuBlockIoReadWriteCommon (Private, MediaId, LBA, BufferSize, Buffer, "UnixReadBlocks");
if (EFI_ERROR (Status)) {
goto Done;
}
@ -393,7 +383,7 @@ EmuBlockIoReadBlocks (
// If we read then media is present.
//
Private->Media->MediaPresent = TRUE;
Status = EFI_SUCCESS;
Status = EFI_SUCCESS;
Done:
if (Token != NULL) {
@ -403,10 +393,10 @@ Done:
return EFI_SUCCESS;
}
}
return Status;
}
/**
Write BufferSize bytes from Lba into Buffer.
@ -448,14 +438,13 @@ EmuBlockIoWriteBlocks (
IN VOID *Buffer
)
{
EMU_BLOCK_IO_PRIVATE *Private;
ssize_t len;
EFI_STATUS Status;
EMU_BLOCK_IO_PRIVATE *Private;
ssize_t len;
EFI_STATUS Status;
Private = EMU_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This);
Status = EmuBlockIoReadWriteCommon (Private, MediaId, LBA, BufferSize, Buffer, "UnixWriteBlocks");
Status = EmuBlockIoReadWriteCommon (Private, MediaId, LBA, BufferSize, Buffer, "UnixWriteBlocks");
if (EFI_ERROR (Status)) {
goto Done;
}
@ -472,7 +461,7 @@ EmuBlockIoWriteBlocks (
//
Private->Media->MediaPresent = TRUE;
Private->Media->ReadOnly = FALSE;
Status = EFI_SUCCESS;
Status = EFI_SUCCESS;
Done:
if (Token != NULL) {
@ -486,7 +475,6 @@ Done:
return Status;
}
/**
Flush the Block Device.
@ -511,22 +499,21 @@ Done:
**/
EFI_STATUS
EmuBlockIoFlushBlocks (
IN EMU_BLOCK_IO_PROTOCOL *This,
IN OUT EFI_BLOCK_IO2_TOKEN *Token
IN EMU_BLOCK_IO_PROTOCOL *This,
IN OUT EFI_BLOCK_IO2_TOKEN *Token
)
{
EMU_BLOCK_IO_PRIVATE *Private;
EMU_BLOCK_IO_PRIVATE *Private;
Private = EMU_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This);
if (Private->fd >= 0) {
fsync (Private->fd);
#if __APPLE__
#if __APPLE__
fcntl (Private->fd, F_FULLFSYNC);
#endif
#endif
}
if (Token != NULL) {
if (Token->Event != NULL) {
// Caller is responsible for signaling EFI Event
@ -538,7 +525,6 @@ EmuBlockIoFlushBlocks (
return EFI_SUCCESS;
}
/**
Reset the block device hardware.
@ -554,11 +540,11 @@ EmuBlockIoFlushBlocks (
**/
EFI_STATUS
EmuBlockIoReset (
IN EMU_BLOCK_IO_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
IN EMU_BLOCK_IO_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
)
{
EMU_BLOCK_IO_PRIVATE *Private;
EMU_BLOCK_IO_PRIVATE *Private;
Private = EMU_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This);
@ -570,17 +556,16 @@ EmuBlockIoReset (
return EFI_SUCCESS;
}
char *
StdDupUnicodeToAscii (
IN CHAR16 *Str
IN CHAR16 *Str
)
{
UINTN Size;
char *Ascii;
char *Ptr;
UINTN Size;
char *Ascii;
char *Ptr;
Size = StrLen (Str) + 1;
Size = StrLen (Str) + 1;
Ascii = malloc (Size);
if (Ascii == NULL) {
return NULL;
@ -589,13 +574,13 @@ StdDupUnicodeToAscii (
for (Ptr = Ascii; *Str != '\0'; Ptr++, Str++) {
*Ptr = *Str;
}
*Ptr = 0;
return Ascii;
}
EMU_BLOCK_IO_PROTOCOL gEmuBlockIoProtocol = {
EMU_BLOCK_IO_PROTOCOL gEmuBlockIoProtocol = {
GasketEmuBlockIoReset,
GasketEmuBlockIoReadBlocks,
GasketEmuBlockIoWriteBlocks,
@ -605,7 +590,7 @@ EMU_BLOCK_IO_PROTOCOL gEmuBlockIoProtocol = {
EFI_STATUS
EmuBlockIoThunkOpen (
IN EMU_IO_THUNK_PROTOCOL *This
IN EMU_IO_THUNK_PROTOCOL *This
)
{
EMU_BLOCK_IO_PRIVATE *Private;
@ -624,7 +609,6 @@ EmuBlockIoThunkOpen (
return EFI_OUT_OF_RESOURCES;
}
Private->Signature = EMU_BLOCK_IO_PRIVATE_SIGNATURE;
Private->Thunk = This;
CopyMem (&Private->EmuBlockIo, &gEmuBlockIoProtocol, sizeof (gEmuBlockIoProtocol));
@ -642,12 +626,14 @@ EmuBlockIoThunkOpen (
Private->WriteProtected = FALSE;
} else {
for (*Str++ = '\0'; *Str != 0; Str++) {
if (*Str == 'R' || *Str == 'F') {
Private->RemovableMedia = (BOOLEAN) (*Str == 'R');
if ((*Str == 'R') || (*Str == 'F')) {
Private->RemovableMedia = (BOOLEAN)(*Str == 'R');
}
if (*Str == 'O' || *Str == 'W') {
Private->WriteProtected = (BOOLEAN) (*Str == 'O');
if ((*Str == 'O') || (*Str == 'W')) {
Private->WriteProtected = (BOOLEAN)(*Str == 'O');
}
if (*Str == ':') {
Private->BlockSize = strtol (++Str, NULL, 0);
break;
@ -662,10 +648,9 @@ EmuBlockIoThunkOpen (
return EFI_SUCCESS;
}
EFI_STATUS
EmuBlockIoThunkClose (
IN EMU_IO_THUNK_PROTOCOL *This
IN EMU_IO_THUNK_PROTOCOL *This
)
{
EMU_BLOCK_IO_PRIVATE *Private;
@ -680,6 +665,7 @@ EmuBlockIoThunkClose (
if (Private->Filename != NULL) {
free (Private->Filename);
}
free (This->Private);
This->Private = NULL;
}
@ -687,9 +673,7 @@ EmuBlockIoThunkClose (
return EFI_SUCCESS;
}
EMU_IO_THUNK_PROTOCOL gBlockIoThunkIo = {
EMU_IO_THUNK_PROTOCOL gBlockIoThunkIo = {
&gEmuBlockIoProtocolGuid,
NULL,
NULL,

View File

@ -18,43 +18,41 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "Host.h"
#ifdef __APPLE__
#define DebugAssert _Mangle__DebugAssert
#define DebugAssert _Mangle__DebugAssert
#include <assert.h>
#include <CoreServices/CoreServices.h>
#include <mach/mach.h>
#include <mach/mach_time.h>
#include <assert.h>
#include <CoreServices/CoreServices.h>
#include <mach/mach.h>
#include <mach/mach_time.h>
#undef DebugAssert
#undef DebugAssert
#endif
int settimer_initialized;
struct timeval settimer_timeval;
UINTN settimer_callback = 0;
BOOLEAN gEmulatorInterruptEnabled = FALSE;
int settimer_initialized;
struct timeval settimer_timeval;
UINTN settimer_callback = 0;
BOOLEAN gEmulatorInterruptEnabled = FALSE;
UINTN
SecWriteStdErr (
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
)
{
ssize_t Return;
ssize_t Return;
Return = write (STDERR_FILENO, (const void *)Buffer, (size_t)NumberOfBytes);
return (Return == -1) ? 0 : Return;
}
EFI_STATUS
SecConfigStdIn (
VOID
)
{
struct termios tty;
struct termios tty;
//
// Need to turn off line buffering, ECHO, and make it unbuffered.
@ -63,7 +61,7 @@ SecConfigStdIn (
tty.c_lflag &= ~(ICANON | ECHO);
tcsetattr (STDIN_FILENO, TCSANOW, &tty);
// setvbuf (STDIN_FILENO, NULL, _IONBF, 0);
// setvbuf (STDIN_FILENO, NULL, _IONBF, 0);
// now ioctl FIONREAD will do what we need
return EFI_SUCCESS;
@ -71,11 +69,11 @@ SecConfigStdIn (
UINTN
SecWriteStdOut (
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
)
{
ssize_t Return;
ssize_t Return;
Return = write (STDOUT_FILENO, (const void *)Buffer, (size_t)NumberOfBytes);
@ -84,11 +82,11 @@ SecWriteStdOut (
UINTN
SecReadStdIn (
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
)
{
ssize_t Return;
ssize_t Return;
Return = read (STDIN_FILENO, Buffer, (size_t)NumberOfBytes);
@ -100,8 +98,8 @@ SecPollStdIn (
VOID
)
{
int Result;
int Bytes;
int Result;
int Bytes;
Result = ioctl (STDIN_FILENO, FIONREAD, &Bytes);
if (Result == -1) {
@ -111,10 +109,9 @@ SecPollStdIn (
return (BOOLEAN)(Bytes > 0);
}
VOID *
SecMalloc (
IN UINTN Size
IN UINTN Size
)
{
return malloc ((size_t)Size);
@ -122,7 +119,7 @@ SecMalloc (
VOID *
SecValloc (
IN UINTN Size
IN UINTN Size
)
{
return valloc ((size_t)Size);
@ -130,7 +127,7 @@ SecValloc (
BOOLEAN
SecFree (
IN VOID *Ptr
IN VOID *Ptr
)
{
if (EfiSystemMemoryRange (Ptr)) {
@ -143,17 +140,18 @@ SecFree (
return TRUE;
}
void
settimer_handler (int sig)
settimer_handler (
int sig
)
{
struct timeval timeval;
UINT64 delta;
struct timeval timeval;
UINT64 delta;
gettimeofday (&timeval, NULL);
delta = ((UINT64)timeval.tv_sec * 1000) + (timeval.tv_usec / 1000)
- ((UINT64)settimer_timeval.tv_sec * 1000)
- (settimer_timeval.tv_usec / 1000);
- ((UINT64)settimer_timeval.tv_sec * 1000)
- (settimer_timeval.tv_usec / 1000);
settimer_timeval = timeval;
if (settimer_callback) {
@ -167,37 +165,39 @@ SecSetTimer (
IN EMU_SET_TIMER_CALLBACK CallBack
)
{
struct itimerval timerval;
UINT32 remainder;
struct itimerval timerval;
UINT32 remainder;
if (!settimer_initialized) {
struct sigaction act;
struct sigaction act;
settimer_initialized = 1;
act.sa_handler = settimer_handler;
act.sa_flags = 0;
act.sa_handler = settimer_handler;
act.sa_flags = 0;
sigemptyset (&act.sa_mask);
gEmulatorInterruptEnabled = TRUE;
if (sigaction (SIGALRM, &act, NULL) != 0) {
printf ("SetTimer: sigaction error %s\n", strerror (errno));
}
if (gettimeofday (&settimer_timeval, NULL) != 0) {
printf ("SetTimer: gettimeofday error %s\n", strerror (errno));
}
}
timerval.it_value.tv_sec = DivU64x32(PeriodMs, 1000);
DivU64x32Remainder(PeriodMs, 1000, &remainder);
timerval.it_value.tv_sec = DivU64x32 (PeriodMs, 1000);
DivU64x32Remainder (PeriodMs, 1000, &remainder);
timerval.it_value.tv_usec = remainder * 1000;
timerval.it_value.tv_sec = DivU64x32(PeriodMs, 1000);
timerval.it_interval = timerval.it_value;
timerval.it_value.tv_sec = DivU64x32 (PeriodMs, 1000);
timerval.it_interval = timerval.it_value;
if (setitimer (ITIMER_REAL, &timerval, NULL) != 0) {
printf ("SetTimer: setitimer error %s\n", strerror (errno));
}
settimer_callback = (UINTN)CallBack;
}
VOID
SecEnableInterrupt (
VOID
@ -213,7 +213,6 @@ SecEnableInterrupt (
pthread_sigmask (SIG_UNBLOCK, &sigset, NULL);
}
VOID
SecDisableInterrupt (
VOID
@ -229,14 +228,14 @@ SecDisableInterrupt (
gEmulatorInterruptEnabled = FALSE;
}
BOOLEAN
SecInterruptEanbled (void)
SecInterruptEanbled (
void
)
{
return gEmulatorInterruptEnabled;
}
UINT64
QueryPerformanceFrequency (
VOID
@ -251,10 +250,9 @@ QueryPerformanceCounter (
VOID
)
{
#if __APPLE__
UINT64 Start;
static mach_timebase_info_data_t sTimebaseInfo;
#if __APPLE__
UINT64 Start;
static mach_timebase_info_data_t sTimebaseInfo;
Start = mach_absolute_time ();
@ -266,29 +264,27 @@ QueryPerformanceCounter (
// denominator is a fraction.
if ( sTimebaseInfo.denom == 0 ) {
(void) mach_timebase_info(&sTimebaseInfo);
(void)mach_timebase_info (&sTimebaseInfo);
}
// Do the maths. We hope that the multiplication doesn't
// overflow; the price you pay for working in fixed point.
return (Start * sTimebaseInfo.numer) / sTimebaseInfo.denom;
#else
#else
// Need to figure out what to do for Linux?
return 0;
#endif
#endif
}
VOID
SecSleep (
IN UINT64 Nanoseconds
IN UINT64 Nanoseconds
)
{
struct timespec rq, rm;
struct timeval start, end;
unsigned long MicroSec;
struct timespec rq, rm;
struct timeval start, end;
unsigned long MicroSec;
rq.tv_sec = DivU64x32 (Nanoseconds, 1000000000);
rq.tv_nsec = ModU64x32 (Nanoseconds, 1000000000);
@ -299,7 +295,7 @@ SecSleep (
//
gettimeofday (&start, NULL);
end.tv_sec = start.tv_sec + rq.tv_sec;
MicroSec = (start.tv_usec + rq.tv_nsec/1000);
MicroSec = (start.tv_usec + rq.tv_nsec/1000);
end.tv_usec = MicroSec % 1000000;
if (MicroSec > 1000000) {
end.tv_sec++;
@ -309,23 +305,26 @@ SecSleep (
if (errno != EINTR) {
break;
}
gettimeofday (&start, NULL);
if (start.tv_sec > end.tv_sec) {
break;
} if ((start.tv_sec == end.tv_sec) && (start.tv_usec > end.tv_usec)) {
}
if ((start.tv_sec == end.tv_sec) && (start.tv_usec > end.tv_usec)) {
break;
}
rq = rm;
}
}
VOID
SecCpuSleep (
VOID
)
{
struct timespec rq, rm;
struct timespec rq, rm;
// nanosleep gets interrupted by the timer tic
rq.tv_sec = 1;
@ -334,51 +333,47 @@ SecCpuSleep (
nanosleep (&rq, &rm);
}
VOID
SecExit (
UINTN Status
UINTN Status
)
{
exit (Status);
}
VOID
SecGetTime (
OUT EFI_TIME *Time,
OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL
OUT EFI_TIME *Time,
OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL
)
{
struct tm *tm;
time_t t;
struct tm *tm;
time_t t;
t = time (NULL);
t = time (NULL);
tm = localtime (&t);
Time->Year = 1900 + tm->tm_year;
Time->Month = tm->tm_mon + 1;
Time->Day = tm->tm_mday;
Time->Hour = tm->tm_hour;
Time->Minute = tm->tm_min;
Time->Second = tm->tm_sec;
Time->Year = 1900 + tm->tm_year;
Time->Month = tm->tm_mon + 1;
Time->Day = tm->tm_mday;
Time->Hour = tm->tm_hour;
Time->Minute = tm->tm_min;
Time->Second = tm->tm_sec;
Time->Nanosecond = 0;
Time->TimeZone = timezone / 60;
Time->Daylight = (daylight ? EFI_TIME_ADJUST_DAYLIGHT : 0)
| (tm->tm_isdst > 0 ? EFI_TIME_IN_DAYLIGHT : 0);
Time->TimeZone = timezone / 60;
Time->Daylight = (daylight ? EFI_TIME_ADJUST_DAYLIGHT : 0)
| (tm->tm_isdst > 0 ? EFI_TIME_IN_DAYLIGHT : 0);
if (Capabilities != NULL) {
Capabilities->Resolution = 1;
Capabilities->Accuracy = 50000000;
Capabilities->SetsToZero = FALSE;
Capabilities->Resolution = 1;
Capabilities->Accuracy = 50000000;
Capabilities->SetsToZero = FALSE;
}
}
VOID
SecSetTime (
IN EFI_TIME *Time
IN EFI_TIME *Time
)
{
// Don't change the time on the system
@ -386,18 +381,16 @@ SecSetTime (
return;
}
EFI_STATUS
SecGetNextProtocol (
IN BOOLEAN EmuBusDriver,
OUT EMU_IO_THUNK_PROTOCOL **Instance OPTIONAL
IN BOOLEAN EmuBusDriver,
OUT EMU_IO_THUNK_PROTOCOL **Instance OPTIONAL
)
{
return GetNextThunkProtocol (EmuBusDriver, Instance);
}
EMU_THUNK_PROTOCOL gEmuThunkProtocol = {
EMU_THUNK_PROTOCOL gEmuThunkProtocol = {
GasketSecWriteStdErr,
GasketSecConfigStdIn,
GasketSecWriteStdOut,
@ -422,7 +415,6 @@ EMU_THUNK_PROTOCOL gEmuThunkProtocol = {
GasketSecGetNextProtocol
};
VOID
SecInitThunkProtocol (
VOID
@ -431,4 +423,3 @@ SecInitThunkProtocol (
// timezone and daylight lib globals depend on tzset be called 1st.
tzset ();
}

View File

@ -17,8 +17,8 @@
UINTN
EFIAPI
GasketSecWriteStdErr (
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
);
EFI_STATUS
@ -30,15 +30,15 @@ GasketSecConfigStdIn (
UINTN
EFIAPI
GasketSecWriteStdOut (
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
);
UINTN
EFIAPI
GasketSecReadStdIn (
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
);
BOOLEAN
@ -50,22 +50,21 @@ GasketSecPollStdIn (
VOID *
EFIAPI
GasketSecMalloc (
IN UINTN Size
IN UINTN Size
);
VOID *
EFIAPI
GasketSecValloc (
IN UINTN Size
IN UINTN Size
);
BOOLEAN
EFIAPI
GasketSecFree (
IN VOID *Ptr
IN VOID *Ptr
);
RETURN_STATUS
EFIAPI
GasketSecPeCoffGetEntryPoint (
@ -116,11 +115,10 @@ GasketQueryPerformanceCounter (
VOID
);
VOID
EFIAPI
GasketSecSleep (
IN UINT64 Nanoseconds
IN UINT64 Nanoseconds
);
VOID
@ -132,33 +130,31 @@ GasketSecCpuSleep (
VOID
EFIAPI
GasketSecExit (
UINTN Status
UINTN Status
);
VOID
EFIAPI
GasketSecGetTime (
OUT EFI_TIME *Time,
OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL
OUT EFI_TIME *Time,
OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL
);
VOID
EFIAPI
GasketSecSetTime (
IN EFI_TIME *Time
IN EFI_TIME *Time
);
EFI_STATUS
EFIAPI
GasketSecGetNextProtocol (
IN BOOLEAN EmuBusDriver,
OUT EMU_IO_THUNK_PROTOCOL **Instance OPTIONAL
IN BOOLEAN EmuBusDriver,
OUT EMU_IO_THUNK_PROTOCOL **Instance OPTIONAL
);
// PPIs produced by SEC
EFI_STATUS
EFIAPI
GasketSecUnixPeiAutoScan (
@ -173,7 +169,6 @@ GasketSecEmuThunkAddress (
VOID
);
EFI_STATUS
EFIAPI
GasketSecUnixUnixFwhAddress (
@ -181,55 +176,52 @@ GasketSecUnixUnixFwhAddress (
IN OUT EFI_PHYSICAL_ADDRESS *FwhBase
);
//
// Reverse (UNIX to EFIAPI) gaskets
//
typedef
void
(EFIAPI *CALL_BACK) (
(EFIAPI *CALL_BACK)(
UINT64 Delta
);
UINTN
ReverseGasketUint64 (
UINTN CallBack,
UINT64 a
UINTN CallBack,
UINT64 a
);
UINTN
ReverseGasketUint64Uint64 (
VOID *CallBack,
VOID *Context,
VOID *Key
VOID *CallBack,
VOID *Context,
VOID *Key
);
//
// Gasket functions for EFI_EMU_UGA_IO_PROTOCOL
//
EFI_STATUS
EFIAPI
GasketX11Size (
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo,
UINT32 Width,
UINT32 Height
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo,
UINT32 Width,
UINT32 Height
);
EFI_STATUS
EFIAPI
GasketX11CheckKey (
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo
);
EFI_STATUS
EFIAPI
GasketX11GetKey (
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo,
EFI_KEY_DATA *key
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo,
EFI_KEY_DATA *key
);
EFI_STATUS
@ -242,45 +234,44 @@ GasketX11KeySetState (
EFI_STATUS
EFIAPI
GasketX11RegisterKeyNotify (
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo,
IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeCallBack,
IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakCallBack,
IN VOID *Context
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo,
IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeCallBack,
IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakCallBack,
IN VOID *Context
);
EFI_STATUS
EFIAPI
GasketX11Blt (
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindows,
IN EFI_UGA_PIXEL *BltBuffer OPTIONAL,
IN EFI_UGA_BLT_OPERATION BltOperation,
IN EMU_GRAPHICS_WINDOWS__BLT_ARGS *Args
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindows,
IN EFI_UGA_PIXEL *BltBuffer OPTIONAL,
IN EFI_UGA_BLT_OPERATION BltOperation,
IN EMU_GRAPHICS_WINDOWS__BLT_ARGS *Args
);
EFI_STATUS
EFIAPI
GasketX11CheckPointer (
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo
);
EFI_STATUS
EFIAPI
GasketX11GetPointerState (
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo,
EFI_SIMPLE_POINTER_STATE *state
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo,
EFI_SIMPLE_POINTER_STATE *state
);
EFI_STATUS
EFIAPI
GasketX11GraphicsWindowOpen (
IN EMU_IO_THUNK_PROTOCOL *This
IN EMU_IO_THUNK_PROTOCOL *This
);
EFI_STATUS
EFIAPI
GasketX11GraphicsWindowClose (
IN EMU_IO_THUNK_PROTOCOL *This
IN EMU_IO_THUNK_PROTOCOL *This
);
// Pthreads
@ -288,55 +279,48 @@ GasketX11GraphicsWindowClose (
UINTN
EFIAPI
GasketPthreadMutexLock (
IN VOID *Mutex
IN VOID *Mutex
);
UINTN
EFIAPI
GasketPthreadMutexUnLock (
IN VOID *Mutex
IN VOID *Mutex
);
UINTN
EFIAPI
GasketPthreadMutexTryLock (
IN VOID *Mutex
IN VOID *Mutex
);
VOID *
EFIAPI
GasketPthreadMutexInit (
IN VOID
);
UINTN
EFIAPI
GasketPthreadMutexDestroy (
IN VOID *Mutex
IN VOID *Mutex
);
UINTN
EFIAPI
GasketPthreadCreate (
IN VOID *Thread,
IN VOID *Attribute,
IN THREAD_THUNK_THREAD_ENTRY Start,
IN VOID *Context
IN VOID *Thread,
IN VOID *Attribute,
IN THREAD_THUNK_THREAD_ENTRY Start,
IN VOID *Context
);
VOID
EFIAPI
GasketPthreadExit (
IN VOID *ValuePtr
IN VOID *ValuePtr
);
UINTN
EFIAPI
GasketPthreadSelf (
@ -346,33 +330,32 @@ GasketPthreadSelf (
EFI_STATUS
EFIAPI
GasketPthreadOpen (
IN EMU_IO_THUNK_PROTOCOL *This
IN EMU_IO_THUNK_PROTOCOL *This
);
EFI_STATUS
EFIAPI
GasketPthreadClose (
IN EMU_IO_THUNK_PROTOCOL *This
IN EMU_IO_THUNK_PROTOCOL *This
);
// PosixFileSystem
EFI_STATUS
EFIAPI
GasketPosixOpenVolume (
IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This,
OUT EFI_FILE_PROTOCOL **Root
IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This,
OUT EFI_FILE_PROTOCOL **Root
);
EFI_STATUS
EFIAPI
GasketPosixFileOpen (
IN EFI_FILE_PROTOCOL *This,
OUT EFI_FILE_PROTOCOL **NewHandle,
IN CHAR16 *FileName,
IN UINT64 OpenMode,
IN UINT64 Attributes
IN EFI_FILE_PROTOCOL *This,
OUT EFI_FILE_PROTOCOL **NewHandle,
IN CHAR16 *FileName,
IN UINT64 OpenMode,
IN UINT64 Attributes
);
EFI_STATUS
@ -390,49 +373,49 @@ GasketPosixFileDelete (
EFI_STATUS
EFIAPI
GasketPosixFileRead (
IN EFI_FILE_PROTOCOL *This,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer
IN EFI_FILE_PROTOCOL *This,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer
);
EFI_STATUS
EFIAPI
GasketPosixFileWrite (
IN EFI_FILE_PROTOCOL *This,
IN OUT UINTN *BufferSize,
IN VOID *Buffer
IN EFI_FILE_PROTOCOL *This,
IN OUT UINTN *BufferSize,
IN VOID *Buffer
);
EFI_STATUS
EFIAPI
GasketPosixFileSetPossition (
IN EFI_FILE_PROTOCOL *This,
IN UINT64 Position
IN EFI_FILE_PROTOCOL *This,
IN UINT64 Position
);
EFI_STATUS
EFIAPI
GasketPosixFileGetPossition (
IN EFI_FILE_PROTOCOL *This,
OUT UINT64 *Position
IN EFI_FILE_PROTOCOL *This,
OUT UINT64 *Position
);
EFI_STATUS
EFIAPI
GasketPosixFileGetInfo (
IN EFI_FILE_PROTOCOL *This,
IN EFI_GUID *InformationType,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer
IN EFI_FILE_PROTOCOL *This,
IN EFI_GUID *InformationType,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer
);
EFI_STATUS
EFIAPI
GasketPosixFileSetInfo (
IN EFI_FILE_PROTOCOL *This,
IN EFI_GUID *InformationType,
IN UINTN BufferSize,
IN VOID *Buffer
IN EFI_FILE_PROTOCOL *This,
IN EFI_GUID *InformationType,
IN UINTN BufferSize,
IN VOID *Buffer
);
EFI_STATUS
@ -444,20 +427,20 @@ GasketPosixFileFlush (
EFI_STATUS
EFIAPI
GasketPosixFileSystmeThunkOpen (
IN EMU_IO_THUNK_PROTOCOL *This
IN EMU_IO_THUNK_PROTOCOL *This
);
EFI_STATUS
EFIAPI
GasketPosixFileSystmeThunkClose (
IN EMU_IO_THUNK_PROTOCOL *This
IN EMU_IO_THUNK_PROTOCOL *This
);
EFI_STATUS
EFIAPI
GasketEmuBlockIoReset (
IN EMU_BLOCK_IO_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
IN EMU_BLOCK_IO_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
);
EFI_STATUS
@ -468,7 +451,7 @@ GasketEmuBlockIoReadBlocks (
IN EFI_LBA LBA,
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
IN UINTN BufferSize,
OUT VOID *Buffer
OUT VOID *Buffer
);
EFI_STATUS
@ -485,39 +468,39 @@ GasketEmuBlockIoWriteBlocks (
EFI_STATUS
EFIAPI
GasketEmuBlockIoFlushBlocks (
IN EMU_BLOCK_IO_PROTOCOL *This,
IN OUT EFI_BLOCK_IO2_TOKEN *Token
IN EMU_BLOCK_IO_PROTOCOL *This,
IN OUT EFI_BLOCK_IO2_TOKEN *Token
);
EFI_STATUS
EFIAPI
GasketEmuBlockIoCreateMapping (
IN EMU_BLOCK_IO_PROTOCOL *This,
IN EFI_BLOCK_IO_MEDIA *Media
IN EMU_BLOCK_IO_PROTOCOL *This,
IN EFI_BLOCK_IO_MEDIA *Media
);
EFI_STATUS
EFIAPI
GasketBlockIoThunkOpen (
IN EMU_IO_THUNK_PROTOCOL *This
IN EMU_IO_THUNK_PROTOCOL *This
);
EFI_STATUS
EFIAPI
GasketBlockIoThunkClose (
IN EMU_IO_THUNK_PROTOCOL *This
IN EMU_IO_THUNK_PROTOCOL *This
);
EFI_STATUS
EFIAPI
GasketSnpThunkOpen (
IN EMU_IO_THUNK_PROTOCOL *This
IN EMU_IO_THUNK_PROTOCOL *This
);
EFI_STATUS
EFIAPI
GasketSnpThunkClose (
IN EMU_IO_THUNK_PROTOCOL *This
IN EMU_IO_THUNK_PROTOCOL *This
);
EFI_STATUS
@ -542,16 +525,16 @@ GasketSnpStop (
EFI_STATUS
EFIAPI
GasketSnpInitialize (
IN EMU_SNP_PROTOCOL *This,
IN UINTN ExtraRxBufferSize OPTIONAL,
IN UINTN ExtraTxBufferSize OPTIONAL
IN EMU_SNP_PROTOCOL *This,
IN UINTN ExtraRxBufferSize OPTIONAL,
IN UINTN ExtraTxBufferSize OPTIONAL
);
EFI_STATUS
EFIAPI
GasketSnpReset (
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
);
EFI_STATUS
@ -563,83 +546,80 @@ GasketSnpShutdown (
EFI_STATUS
EFIAPI
GasketSnpReceiveFilters (
IN EMU_SNP_PROTOCOL *This,
IN UINT32 Enable,
IN UINT32 Disable,
IN BOOLEAN ResetMCastFilter,
IN UINTN MCastFilterCnt OPTIONAL,
IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL
IN EMU_SNP_PROTOCOL *This,
IN UINT32 Enable,
IN UINT32 Disable,
IN BOOLEAN ResetMCastFilter,
IN UINTN MCastFilterCnt OPTIONAL,
IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL
);
EFI_STATUS
EFIAPI
GasketSnpStationAddress (
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN Reset,
IN EFI_MAC_ADDRESS *New OPTIONAL
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN Reset,
IN EFI_MAC_ADDRESS *New OPTIONAL
);
EFI_STATUS
EFIAPI
GasketSnpStatistics (
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN Reset,
IN OUT UINTN *StatisticsSize OPTIONAL,
OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN Reset,
IN OUT UINTN *StatisticsSize OPTIONAL,
OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL
);
EFI_STATUS
EFIAPI
GasketSnpMCastIpToMac (
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN IPv6,
IN EFI_IP_ADDRESS *IP,
OUT EFI_MAC_ADDRESS *MAC
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN IPv6,
IN EFI_IP_ADDRESS *IP,
OUT EFI_MAC_ADDRESS *MAC
);
EFI_STATUS
EFIAPI
GasketSnpNvData (
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN ReadWrite,
IN UINTN Offset,
IN UINTN BufferSize,
IN OUT VOID *Buffer
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN ReadWrite,
IN UINTN Offset,
IN UINTN BufferSize,
IN OUT VOID *Buffer
);
EFI_STATUS
EFIAPI
GasketSnpGetStatus (
IN EMU_SNP_PROTOCOL *This,
OUT UINT32 *InterruptStatus OPTIONAL,
OUT VOID **TxBuf OPTIONAL
IN EMU_SNP_PROTOCOL *This,
OUT UINT32 *InterruptStatus OPTIONAL,
OUT VOID **TxBuf OPTIONAL
);
EFI_STATUS
EFIAPI
GasketSnpTransmit (
IN EMU_SNP_PROTOCOL *This,
IN UINTN HeaderSize,
IN UINTN BufferSize,
IN VOID *Buffer,
IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
IN EFI_MAC_ADDRESS *DestAddr OPTIONAL,
IN UINT16 *Protocol OPTIONAL
IN EMU_SNP_PROTOCOL *This,
IN UINTN HeaderSize,
IN UINTN BufferSize,
IN VOID *Buffer,
IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
IN EFI_MAC_ADDRESS *DestAddr OPTIONAL,
IN UINT16 *Protocol OPTIONAL
);
EFI_STATUS
EFIAPI
GasketSnpReceive (
IN EMU_SNP_PROTOCOL *This,
OUT UINTN *HeaderSize OPTIONAL,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer,
OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL,
OUT UINT16 *Protocol OPTIONAL
IN EMU_SNP_PROTOCOL *This,
OUT UINTN *HeaderSize OPTIONAL,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer,
OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL,
OUT UINT16 *Protocol OPTIONAL
);
#endif

View File

@ -9,23 +9,21 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "Host.h"
#ifdef __APPLE__
#define MAP_ANONYMOUS MAP_ANON
#define MAP_ANONYMOUS MAP_ANON
#endif
//
// Globals
//
EMU_THUNK_PPI mSecEmuThunkPpi = {
EMU_THUNK_PPI mSecEmuThunkPpi = {
GasketSecUnixPeiAutoScan,
GasketSecUnixFdAddress,
GasketSecEmuThunkAddress
};
char *gGdbWorkingFileName = NULL;
unsigned int mScriptSymbolChangesCount = 0;
char *gGdbWorkingFileName = NULL;
unsigned int mScriptSymbolChangesCount = 0;
//
// Default information about where the FD is located.
@ -34,8 +32,8 @@ unsigned int mScriptSymbolChangesCount = 0;
// The number of array elements is allocated base on parsing
// EFI_FIRMWARE_VOLUMES and the memory is never freed.
//
UINTN gFdInfoCount = 0;
EMU_FD_INFO *gFdInfo;
UINTN gFdInfoCount = 0;
EMU_FD_INFO *gFdInfo;
//
// Array that supports separate memory ranges.
@ -46,16 +44,12 @@ EMU_FD_INFO *gFdInfo;
UINTN gSystemMemoryCount = 0;
EMU_SYSTEM_MEMORY *gSystemMemory;
UINTN mImageContextModHandleArraySize = 0;
IMAGE_CONTEXT_TO_MOD_HANDLE *mImageContextModHandleArray = NULL;
IMAGE_CONTEXT_TO_MOD_HANDLE *mImageContextModHandleArray = NULL;
EFI_PEI_PPI_DESCRIPTOR *gPpiList;
int gInXcode = 0;
int gInXcode = 0;
/*++
Breakpoint target for Xcode project. Set in the Xcode XML
@ -71,8 +65,6 @@ SecGdbConfigBreak (
{
}
/*++
Routine Description:
@ -121,8 +113,8 @@ main (
// If dlopen doesn't work, then we build a gdb script to allow the
// symbols to be loaded.
//
Index = strlen (*Argv);
gGdbWorkingFileName = AllocatePool (Index + strlen(".gdb") + 1);
Index = strlen (*Argv);
gGdbWorkingFileName = AllocatePool (Index + strlen (".gdb") + 1);
strcpy (gGdbWorkingFileName, *Argv);
strcat (gGdbWorkingFileName, ".gdb");
@ -139,8 +131,8 @@ main (
setbuf (stdout, 0);
setbuf (stderr, 0);
MemorySizeStr = (CHAR16 *) PcdGetPtr (PcdEmuMemorySize);
FirmwareVolumesStr = (CHAR16 *) PcdGetPtr (PcdEmuFirmwareVolume);
MemorySizeStr = (CHAR16 *)PcdGetPtr (PcdEmuMemorySize);
FirmwareVolumesStr = (CHAR16 *)PcdGetPtr (PcdEmuFirmwareVolume);
//
// PPIs pased into PEI_CORE
@ -169,17 +161,18 @@ main (
//
// Allocate space for gSystemMemory Array
//
gSystemMemoryCount = CountSeparatorsInString (MemorySizeStr, '!') + 1;
gSystemMemory = AllocateZeroPool (gSystemMemoryCount * sizeof (EMU_SYSTEM_MEMORY));
gSystemMemoryCount = CountSeparatorsInString (MemorySizeStr, '!') + 1;
gSystemMemory = AllocateZeroPool (gSystemMemoryCount * sizeof (EMU_SYSTEM_MEMORY));
if (gSystemMemory == NULL) {
printf ("ERROR : Can not allocate memory for system. Exiting.\n");
exit (1);
}
//
// Allocate space for gSystemMemory Array
//
gFdInfoCount = CountSeparatorsInString (FirmwareVolumesStr, '!') + 1;
gFdInfo = AllocateZeroPool (gFdInfoCount * sizeof (EMU_FD_INFO));
gFdInfoCount = CountSeparatorsInString (FirmwareVolumesStr, '!') + 1;
gFdInfo = AllocateZeroPool (gFdInfoCount * sizeof (EMU_FD_INFO));
if (gFdInfo == NULL) {
printf ("ERROR : Can not allocate memory for fd info. Exiting.\n");
exit (1);
@ -192,31 +185,35 @@ main (
// on a real platform this would be SRAM, or using the cache as RAM.
// Set InitialStackMemory to zero so UnixOpenFile will allocate a new mapping
//
InitialStackMemorySize = STACK_SIZE;
InitialStackMemory = (UINTN)MapMemory (
0, (UINT32) InitialStackMemorySize,
PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANONYMOUS | MAP_PRIVATE
);
InitialStackMemorySize = STACK_SIZE;
InitialStackMemory = (UINTN)MapMemory (
0,
(UINT32)InitialStackMemorySize,
PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_ANONYMOUS | MAP_PRIVATE
);
if (InitialStackMemory == 0) {
printf ("ERROR : Can not open SecStack Exiting\n");
exit (1);
}
printf (" OS Emulator passing in %u KB of temp RAM at 0x%08lx to SEC\n",
printf (
" OS Emulator passing in %u KB of temp RAM at 0x%08lx to SEC\n",
(unsigned int)(InitialStackMemorySize / 1024),
(unsigned long)InitialStackMemory
);
for (StackPointer = (UINTN*) (UINTN) InitialStackMemory;
StackPointer < (UINTN*)(UINTN)((UINTN) InitialStackMemory + (UINT64) InitialStackMemorySize);
StackPointer ++) {
for (StackPointer = (UINTN *)(UINTN)InitialStackMemory;
StackPointer < (UINTN *)(UINTN)((UINTN)InitialStackMemory + (UINT64)InitialStackMemorySize);
StackPointer++)
{
*StackPointer = 0x5AA55AA5;
}
//
// Open All the firmware volumes and remember the info in the gFdInfo global
//
FileName = (CHAR8 *) AllocatePool (StrLen (FirmwareVolumesStr) + 1);
FileName = (CHAR8 *)AllocatePool (StrLen (FirmwareVolumesStr) + 1);
if (FileName == NULL) {
printf ("ERROR : Can not allocate memory for firmware volume string\n");
exit (1);
@ -225,39 +222,43 @@ main (
Index2 = 0;
for (Done = FALSE, Index = 0, PeiIndex = 0, SecFile = NULL;
FirmwareVolumesStr[Index2] != 0;
Index++) {
Index++)
{
for (Index1 = 0; (FirmwareVolumesStr[Index2] != '!') && (FirmwareVolumesStr[Index2] != 0); Index2++) {
FileName[Index1++] = FirmwareVolumesStr[Index2];
}
if (FirmwareVolumesStr[Index2] == '!') {
Index2++;
}
FileName[Index1] = '\0';
FileName[Index1] = '\0';
if (Index == 0) {
// Map FV Recovery Read Only and other areas Read/Write
Status = MapFd0 (
FileName,
&gFdInfo[0].Address,
&gFdInfo[0].Size
);
FileName,
&gFdInfo[0].Address,
&gFdInfo[0].Size
);
} else {
//
// Open the FD and remember where it got mapped into our processes address space
// Maps Read Only
//
Status = MapFile (
FileName,
&gFdInfo[Index].Address,
&gFdInfo[Index].Size
);
FileName,
&gFdInfo[Index].Address,
&gFdInfo[Index].Size
);
}
if (EFI_ERROR (Status)) {
printf ("ERROR : Can not open Firmware Device File %s (%x). Exiting.\n", FileName, (unsigned int)Status);
exit (1);
}
printf (" FD loaded from %s at 0x%08lx",FileName, (unsigned long)gFdInfo[Index].Address);
printf (" FD loaded from %s at 0x%08lx", FileName, (unsigned long)gFdInfo[Index].Address);
if (SecFile == NULL) {
//
@ -265,11 +266,11 @@ main (
// Load the first one we find.
//
FileHandle = NULL;
Status = PeiServicesFfsFindNextFile (
EFI_FV_FILETYPE_SECURITY_CORE,
(EFI_PEI_FV_HANDLE)(UINTN)gFdInfo[Index].Address,
&FileHandle
);
Status = PeiServicesFfsFindNextFile (
EFI_FV_FILETYPE_SECURITY_CORE,
(EFI_PEI_FV_HANDLE)(UINTN)gFdInfo[Index].Address,
&FileHandle
);
if (!EFI_ERROR (Status)) {
Status = PeiServicesFfsFindSectionData (EFI_SECTION_PE32, FileHandle, &SecFile);
if (!EFI_ERROR (Status)) {
@ -293,9 +294,9 @@ main (
// map this memory into the SEC process memory space.
//
Index1 = 0;
Index = 0;
Index = 0;
while (1) {
UINTN val = 0;
UINTN val = 0;
//
// Save the size of the memory.
//
@ -303,10 +304,12 @@ main (
val = val * 10 + MemorySizeStr[Index1] - '0';
Index1++;
}
gSystemMemory[Index++].Size = val * 0x100000;
if (MemorySizeStr[Index1] == 0) {
break;
}
Index1++;
}
@ -315,7 +318,7 @@ main (
//
// Hand off to SEC
//
SecLoadFromCore ((UINTN) InitialStackMemory, (UINTN) InitialStackMemorySize, (UINTN) gFdInfo[0].Address, SecFile);
SecLoadFromCore ((UINTN)InitialStackMemory, (UINTN)InitialStackMemorySize, (UINTN)gFdInfo[0].Address, SecFile);
//
// If we get here, then the SEC Core returned. This is an error as SEC should
@ -325,40 +328,40 @@ main (
exit (1);
}
EFI_PHYSICAL_ADDRESS *
MapMemory (
IN INTN fd,
IN UINT64 length,
IN INTN prot,
IN INTN flags
IN INTN fd,
IN UINT64 length,
IN INTN prot,
IN INTN flags
)
{
STATIC UINTN base = 0x40000000;
CONST UINTN align = (1 << 24);
VOID *res = NULL;
BOOLEAN isAligned = 0;
STATIC UINTN base = 0x40000000;
CONST UINTN align = (1 << 24);
VOID *res = NULL;
BOOLEAN isAligned = 0;
//
// Try to get an aligned block somewhere in the address space of this
// process.
//
while((!isAligned) && (base != 0)) {
while ((!isAligned) && (base != 0)) {
res = mmap ((void *)base, length, prot, flags, fd, 0);
if (res == MAP_FAILED) {
return NULL;
}
if ((((UINTN)res) & ~(align-1)) == (UINTN)res) {
isAligned=1;
isAligned = 1;
} else {
munmap(res, length);
munmap (res, length);
base += align;
}
}
return res;
}
/*++
Routine Description:
@ -389,16 +392,16 @@ MapFile (
OUT UINT64 *Length
)
{
int fd;
VOID *res;
UINTN FileSize;
int fd;
VOID *res;
UINTN FileSize;
fd = open (FileName, O_RDWR);
if (fd < 0) {
return EFI_NOT_FOUND;
}
FileSize = lseek (fd, 0, SEEK_END);
FileSize = lseek (fd, 0, SEEK_END);
res = MapMemory (fd, FileSize, PROT_READ | PROT_EXEC, MAP_PRIVATE);
@ -409,8 +412,8 @@ MapFile (
return EFI_DEVICE_ERROR;
}
*Length = (UINT64) FileSize;
*BaseAddress = (EFI_PHYSICAL_ADDRESS) (UINTN) res;
*Length = (UINT64)FileSize;
*BaseAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)res;
return EFI_SUCCESS;
}
@ -422,16 +425,17 @@ MapFd0 (
OUT UINT64 *Length
)
{
int fd;
void *res, *res2, *res3;
UINTN FileSize;
UINTN FvSize;
void *EmuMagicPage;
int fd;
void *res, *res2, *res3;
UINTN FileSize;
UINTN FvSize;
void *EmuMagicPage;
fd = open (FileName, O_RDWR);
if (fd < 0) {
return EFI_NOT_FOUND;
}
FileSize = lseek (fd, 0, SEEK_END);
FvSize = FixedPcdGet64 (PcdEmuFlashFvRecoverySize);
@ -469,13 +473,13 @@ MapFd0 (
// Map the rest of the FD as read/write
res2 = mmap (
(void *)(UINTN)(FixedPcdGet64 (PcdEmuFlashFvRecoveryBase) + FvSize),
FileSize - FvSize,
PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_SHARED,
fd,
FvSize
);
(void *)(UINTN)(FixedPcdGet64 (PcdEmuFlashFvRecoveryBase) + FvSize),
FileSize - FvSize,
PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_SHARED,
fd,
FvSize
);
close (fd);
if (res2 == MAP_FAILED) {
perror ("MapFd0() Failed res2 =");
@ -504,13 +508,12 @@ MapFd0 (
}
}
*Length = (UINT64) FileSize;
*BaseAddress = (EFI_PHYSICAL_ADDRESS) (UINTN) res;
*Length = (UINT64)FileSize;
*BaseAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)res;
return EFI_SUCCESS;
}
/*++
Routine Description:
@ -528,24 +531,24 @@ Returns:
**/
VOID
SecLoadFromCore (
IN UINTN LargestRegion,
IN UINTN LargestRegionSize,
IN UINTN BootFirmwareVolumeBase,
IN VOID *PeiCorePe32File
IN UINTN LargestRegion,
IN UINTN LargestRegionSize,
IN UINTN BootFirmwareVolumeBase,
IN VOID *PeiCorePe32File
)
{
EFI_STATUS Status;
EFI_PHYSICAL_ADDRESS TopOfMemory;
VOID *TopOfStack;
EFI_PHYSICAL_ADDRESS PeiCoreEntryPoint;
EFI_SEC_PEI_HAND_OFF *SecCoreData;
UINTN PeiStackSize;
EFI_STATUS Status;
EFI_PHYSICAL_ADDRESS TopOfMemory;
VOID *TopOfStack;
EFI_PHYSICAL_ADDRESS PeiCoreEntryPoint;
EFI_SEC_PEI_HAND_OFF *SecCoreData;
UINTN PeiStackSize;
//
// Compute Top Of Memory for Stack and PEI Core Allocations
//
TopOfMemory = LargestRegion + LargestRegionSize;
PeiStackSize = (UINTN)RShiftU64((UINT64)STACK_SIZE,1);
PeiStackSize = (UINTN)RShiftU64 ((UINT64)STACK_SIZE, 1);
//
// |-----------| <---- TemporaryRamBase + TemporaryRamSize
@ -562,22 +565,21 @@ SecLoadFromCore (
//
// Reservet space for storing PeiCore's parament in stack.
//
TopOfStack = (VOID *)((UINTN)TopOfStack - sizeof (EFI_SEC_PEI_HAND_OFF) - CPU_STACK_ALIGNMENT);
TopOfStack = ALIGN_POINTER (TopOfStack, CPU_STACK_ALIGNMENT);
TopOfStack = (VOID *)((UINTN)TopOfStack - sizeof (EFI_SEC_PEI_HAND_OFF) - CPU_STACK_ALIGNMENT);
TopOfStack = ALIGN_POINTER (TopOfStack, CPU_STACK_ALIGNMENT);
//
// Bind this information into the SEC hand-off state
//
SecCoreData = (EFI_SEC_PEI_HAND_OFF*)(UINTN) TopOfStack;
SecCoreData->DataSize = sizeof(EFI_SEC_PEI_HAND_OFF);
SecCoreData->BootFirmwareVolumeBase = (VOID*)BootFirmwareVolumeBase;
SecCoreData = (EFI_SEC_PEI_HAND_OFF *)(UINTN)TopOfStack;
SecCoreData->DataSize = sizeof (EFI_SEC_PEI_HAND_OFF);
SecCoreData->BootFirmwareVolumeBase = (VOID *)BootFirmwareVolumeBase;
SecCoreData->BootFirmwareVolumeSize = PcdGet32 (PcdEmuFirmwareFdSize);
SecCoreData->TemporaryRamBase = (VOID*)(UINTN)LargestRegion;
SecCoreData->TemporaryRamBase = (VOID *)(UINTN)LargestRegion;
SecCoreData->TemporaryRamSize = STACK_SIZE;
SecCoreData->StackBase = SecCoreData->TemporaryRamBase;
SecCoreData->StackSize = PeiStackSize;
SecCoreData->PeiTemporaryRamBase = (VOID*) ((UINTN) SecCoreData->TemporaryRamBase + PeiStackSize);
SecCoreData->PeiTemporaryRamBase = (VOID *)((UINTN)SecCoreData->TemporaryRamBase + PeiStackSize);
SecCoreData->PeiTemporaryRamSize = STACK_SIZE - PeiStackSize;
//
@ -585,14 +587,14 @@ SecLoadFromCore (
//
Status = SecPeCoffGetEntryPoint (PeiCorePe32File, (VOID **)&PeiCoreEntryPoint);
if (EFI_ERROR (Status)) {
return ;
return;
}
//
// Transfer control to the SEC Core
//
PeiSwitchStacks (
(SWITCH_STACK_ENTRY_POINT) (UINTN) PeiCoreEntryPoint,
(SWITCH_STACK_ENTRY_POINT)(UINTN)PeiCoreEntryPoint,
SecCoreData,
(VOID *)gPpiList,
TopOfStack
@ -600,10 +602,9 @@ SecLoadFromCore (
//
// If we get here, then the SEC Core returned. This is an error
//
return ;
return;
}
/*++
Routine Description:
@ -631,29 +632,30 @@ SecUnixPeiAutoScan (
OUT UINT64 *MemorySize
)
{
void *res;
void *res;
if (Index >= gSystemMemoryCount) {
return EFI_UNSUPPORTED;
}
*MemoryBase = 0;
res = MapMemory (
0, gSystemMemory[Index].Size,
PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_PRIVATE | MAP_ANONYMOUS
);
res = MapMemory (
0,
gSystemMemory[Index].Size,
PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_PRIVATE | MAP_ANONYMOUS
);
if (res == MAP_FAILED) {
return EFI_DEVICE_ERROR;
}
*MemorySize = gSystemMemory[Index].Size;
*MemoryBase = (UINTN)res;
*MemorySize = gSystemMemory[Index].Size;
*MemoryBase = (UINTN)res;
gSystemMemory[Index].Memory = *MemoryBase;
return EFI_SUCCESS;
}
/*++
Routine Description:
@ -675,7 +677,7 @@ Returns:
**/
BOOLEAN
EfiSystemMemoryRange (
IN VOID *MemoryAddress
IN VOID *MemoryAddress
)
{
UINTN Index;
@ -684,7 +686,8 @@ EfiSystemMemoryRange (
MemoryBase = (EFI_PHYSICAL_ADDRESS)(UINTN)MemoryAddress;
for (Index = 0; Index < gSystemMemoryCount; Index++) {
if ((MemoryBase >= gSystemMemory[Index].Memory) &&
(MemoryBase < (gSystemMemory[Index].Memory + gSystemMemory[Index].Size)) ) {
(MemoryBase < (gSystemMemory[Index].Memory + gSystemMemory[Index].Size)))
{
return TRUE;
}
}
@ -692,7 +695,6 @@ EfiSystemMemoryRange (
return FALSE;
}
/*++
Routine Description:
@ -715,8 +717,6 @@ SecEmuThunkAddress (
return &gEmuThunkProtocol;
}
RETURN_STATUS
EFIAPI
SecPeCoffGetEntryPoint (
@ -728,10 +728,10 @@ SecPeCoffGetEntryPoint (
PE_COFF_LOADER_IMAGE_CONTEXT ImageContext;
ZeroMem (&ImageContext, sizeof (ImageContext));
ImageContext.Handle = Pe32Data;
ImageContext.ImageRead = (PE_COFF_LOADER_READ_FILE) SecImageRead;
ImageContext.Handle = Pe32Data;
ImageContext.ImageRead = (PE_COFF_LOADER_READ_FILE)SecImageRead;
Status = PeCoffLoaderGetImageInfo (&ImageContext);
Status = PeCoffLoaderGetImageInfo (&ImageContext);
if (EFI_ERROR (Status)) {
return Status;
}
@ -741,7 +741,7 @@ SecPeCoffGetEntryPoint (
// Relocate image to match the address where it resides
//
ImageContext.ImageAddress = (UINTN)Pe32Data;
Status = PeCoffLoaderLoadImage (&ImageContext);
Status = PeCoffLoaderLoadImage (&ImageContext);
if (EFI_ERROR (Status)) {
return Status;
}
@ -755,10 +755,11 @@ SecPeCoffGetEntryPoint (
// Or just return image entry point
//
ImageContext.PdbPointer = PeCoffLoaderGetPdbPointer (Pe32Data);
Status = PeCoffLoaderGetEntryPoint (Pe32Data, EntryPoint);
Status = PeCoffLoaderGetEntryPoint (Pe32Data, EntryPoint);
if (EFI_ERROR (Status)) {
return Status;
}
ImageContext.EntryPoint = (UINTN)*EntryPoint;
}
@ -769,8 +770,6 @@ SecPeCoffGetEntryPoint (
return Status;
}
/*++
Routine Description:
@ -804,7 +803,7 @@ SecUnixFdAddress (
*FdSize = gFdInfo[Index].Size;
*FixUp = 0;
if (*FdBase == 0 && *FdSize == 0) {
if ((*FdBase == 0) && (*FdSize == 0)) {
return EFI_UNSUPPORTED;
}
@ -820,7 +819,6 @@ SecUnixFdAddress (
return EFI_SUCCESS;
}
/*++
Routine Description:
@ -836,11 +834,11 @@ Returns:
**/
UINTN
CountSeparatorsInString (
IN const CHAR16 *String,
IN CHAR16 Separator
IN const CHAR16 *String,
IN CHAR16 Separator
)
{
UINTN Count;
UINTN Count;
for (Count = 0; *String != '\0'; String++) {
if (*String == Separator) {
@ -851,15 +849,15 @@ CountSeparatorsInString (
return Count;
}
EFI_STATUS
EFIAPI
SecImageRead (
IN VOID *FileHandle,
IN UINTN FileOffset,
IN OUT UINTN *ReadSize,
OUT VOID *Buffer
IN VOID *FileHandle,
IN UINTN FileOffset,
IN OUT UINTN *ReadSize,
OUT VOID *Buffer
)
/*++
Routine Description:
@ -876,13 +874,13 @@ Returns:
**/
{
CHAR8 *Destination8;
CHAR8 *Source8;
UINTN Length;
CHAR8 *Destination8;
CHAR8 *Source8;
UINTN Length;
Destination8 = Buffer;
Source8 = (CHAR8 *) ((UINTN) FileHandle + FileOffset);
Length = *ReadSize;
Destination8 = Buffer;
Source8 = (CHAR8 *)((UINTN)FileHandle + FileOffset);
Length = *ReadSize;
while (Length--) {
*(Destination8++) = *(Source8++);
}
@ -890,7 +888,6 @@ Returns:
return EFI_SUCCESS;
}
/*++
Routine Description:
@ -909,14 +906,13 @@ Returns:
**/
EFI_STATUS
AddHandle (
IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
IN VOID *ModHandle
IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
IN VOID *ModHandle
)
{
UINTN Index;
IMAGE_CONTEXT_TO_MOD_HANDLE *Array;
UINTN PreviousSize;
UINTN Index;
IMAGE_CONTEXT_TO_MOD_HANDLE *Array;
UINTN PreviousSize;
Array = mImageContextModHandleArray;
for (Index = 0; Index < mImageContextModHandleArraySize; Index++, Array++) {
@ -936,7 +932,7 @@ AddHandle (
// copy the old values to the new location. But it does
// not zero the new memory area.
//
PreviousSize = mImageContextModHandleArraySize * sizeof (IMAGE_CONTEXT_TO_MOD_HANDLE);
PreviousSize = mImageContextModHandleArraySize * sizeof (IMAGE_CONTEXT_TO_MOD_HANDLE);
mImageContextModHandleArraySize += MAX_IMAGE_CONTEXT_TO_MOD_HANDLE_ARRAY_SIZE;
mImageContextModHandleArray = ReallocatePool (
@ -954,7 +950,6 @@ AddHandle (
return AddHandle (ImageContext, ModHandle);
}
/*++
Routine Description:
@ -971,7 +966,7 @@ Returns:
**/
VOID *
RemoveHandle (
IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
)
{
UINTN Index;
@ -998,60 +993,60 @@ RemoveHandle (
return NULL;
}
BOOLEAN
IsPdbFile (
IN CHAR8 *PdbFileName
IN CHAR8 *PdbFileName
)
{
UINTN Len;
UINTN Len;
if (PdbFileName == NULL) {
return FALSE;
}
Len = strlen (PdbFileName);
if ((Len < 5)|| (PdbFileName[Len - 4] != '.')) {
if ((Len < 5) || (PdbFileName[Len - 4] != '.')) {
return FALSE;
}
if ((PdbFileName[Len - 3] == 'P' || PdbFileName[Len - 3] == 'p') &&
(PdbFileName[Len - 2] == 'D' || PdbFileName[Len - 2] == 'd') &&
(PdbFileName[Len - 1] == 'B' || PdbFileName[Len - 1] == 'b')) {
if (((PdbFileName[Len - 3] == 'P') || (PdbFileName[Len - 3] == 'p')) &&
((PdbFileName[Len - 2] == 'D') || (PdbFileName[Len - 2] == 'd')) &&
((PdbFileName[Len - 1] == 'B') || (PdbFileName[Len - 1] == 'b')))
{
return TRUE;
}
return FALSE;
}
#define MAX_SPRINT_BUFFER_SIZE 0x200
#define MAX_SPRINT_BUFFER_SIZE 0x200
void
PrintLoadAddress (
IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
)
{
if (ImageContext->PdbPointer == NULL) {
fprintf (stderr,
fprintf (
stderr,
"0x%08lx Loading NO DEBUG with entry point 0x%08lx\n",
(unsigned long)(ImageContext->ImageAddress),
(unsigned long)ImageContext->EntryPoint
);
} else {
fprintf (stderr,
fprintf (
stderr,
"0x%08lx Loading %s with entry point 0x%08lx\n",
(unsigned long)(ImageContext->ImageAddress + ImageContext->SizeOfHeaders),
ImageContext->PdbPointer,
(unsigned long)ImageContext->EntryPoint
);
}
// Keep output synced up
fflush (stderr);
}
/**
Loads the image using dlopen so symbols will be automatically
loaded by gdb.
@ -1064,18 +1059,17 @@ PrintLoadAddress (
**/
BOOLEAN
DlLoadImage (
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
)
{
#ifdef __APPLE__
#ifdef __APPLE__
return FALSE;
#else
#else
void *Handle = NULL;
void *Entry = NULL;
void *Handle = NULL;
void *Entry = NULL;
if (ImageContext->PdbPointer == NULL) {
return FALSE;
@ -1086,19 +1080,19 @@ DlLoadImage (
}
fprintf (
stderr,
"Loading %s 0x%08lx - entry point 0x%08lx\n",
ImageContext->PdbPointer,
(unsigned long)ImageContext->ImageAddress,
(unsigned long)ImageContext->EntryPoint
);
stderr,
"Loading %s 0x%08lx - entry point 0x%08lx\n",
ImageContext->PdbPointer,
(unsigned long)ImageContext->ImageAddress,
(unsigned long)ImageContext->EntryPoint
);
Handle = dlopen (ImageContext->PdbPointer, RTLD_NOW);
if (Handle != NULL) {
Entry = dlsym (Handle, "_ModuleEntryPoint");
AddHandle (ImageContext, Handle);
} else {
printf("%s\n", dlerror());
printf ("%s\n", dlerror ());
}
if (Entry != NULL) {
@ -1109,25 +1103,23 @@ DlLoadImage (
return FALSE;
}
#endif
#endif
}
#ifdef __APPLE__
__attribute__((noinline))
__attribute__ ((noinline))
#endif
VOID
SecGdbScriptBreak (
char *FileName,
int FileNameLength,
long unsigned int LoadAddress,
int AddSymbolFlag
char *FileName,
int FileNameLength,
long unsigned int LoadAddress,
int AddSymbolFlag
)
{
return;
}
/**
Adds the image to a gdb script so its symbols can be loaded.
The AddFirmwareSymbolFile helper macro is used.
@ -1137,18 +1129,17 @@ SecGdbScriptBreak (
**/
VOID
GdbScriptAddImage (
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
)
{
PrintLoadAddress (ImageContext);
if (ImageContext->PdbPointer != NULL && !IsPdbFile (ImageContext->PdbPointer)) {
if ((ImageContext->PdbPointer != NULL) && !IsPdbFile (ImageContext->PdbPointer)) {
FILE *GdbTempFile;
if (FeaturePcdGet (PcdEmulatorLazyLoadSymbols)) {
GdbTempFile = fopen (gGdbWorkingFileName, "a");
if (GdbTempFile != NULL) {
long unsigned int SymbolsAddr = (long unsigned int)(ImageContext->ImageAddress + ImageContext->SizeOfHeaders);
long unsigned int SymbolsAddr = (long unsigned int)(ImageContext->ImageAddress + ImageContext->SizeOfHeaders);
mScriptSymbolChangesCount++;
fprintf (
GdbTempFile,
@ -1188,11 +1179,10 @@ GdbScriptAddImage (
}
}
VOID
EFIAPI
SecPeCoffRelocateImageExtraAction (
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
)
{
if (!DlLoadImage (ImageContext)) {
@ -1200,7 +1190,6 @@ SecPeCoffRelocateImageExtraAction (
}
}
/**
Adds the image to a gdb script so its symbols can be unloaded.
The RemoveFirmwareSymbolFile helper macro is used.
@ -1210,7 +1199,7 @@ SecPeCoffRelocateImageExtraAction (
**/
VOID
GdbScriptRemoveImage (
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
)
{
FILE *GdbTempFile;
@ -1257,27 +1246,24 @@ GdbScriptRemoveImage (
}
}
VOID
EFIAPI
SecPeCoffUnloadImageExtraAction (
IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
)
{
VOID *Handle;
VOID *Handle;
//
// Check to see if the image symbols were loaded with gdb script, or dlopen
//
Handle = RemoveHandle (ImageContext);
if (Handle != NULL) {
#ifndef __APPLE__
#ifndef __APPLE__
dlclose (Handle);
#endif
#endif
return;
}
GdbScriptRemoveImage (ImageContext);
}

View File

@ -30,9 +30,9 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <sys/time.h>
#if __CYGWIN__
#include <sys/dirent.h>
#include <sys/dirent.h>
#else
#include <sys/dir.h>
#include <sys/dir.h>
#endif
#include <sys/mman.h>
@ -56,19 +56,19 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <ifaddrs.h>
#ifdef __APPLE__
#include <net/if_dl.h>
#include <net/bpf.h>
#include <sys/param.h>
#include <sys/mount.h>
#include <sys/disk.h>
#include <net/if_dl.h>
#include <net/bpf.h>
#include <sys/param.h>
#include <sys/mount.h>
#include <sys/disk.h>
#define _XOPEN_SOURCE
#ifndef _Bool
#define _Bool char // for clang debug
#endif
#ifndef _Bool
#define _Bool char // for clang debug
#endif
#else
#include <termio.h>
#include <sys/vfs.h>
#include <linux/fs.h>
#include <termio.h>
#include <sys/vfs.h>
#include <linux/fs.h>
#endif
#include <utime.h>
@ -120,31 +120,27 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Guid/FileSystemInfo.h>
#include <Guid/FileSystemVolumeLabelInfo.h>
#include "Gasket.h"
#define STACK_SIZE 0x20000
#define STACK_SIZE 0x20000
typedef struct {
EFI_PHYSICAL_ADDRESS Address;
UINT64 Size;
EFI_PHYSICAL_ADDRESS Address;
UINT64 Size;
} EMU_FD_INFO;
typedef struct {
EFI_PHYSICAL_ADDRESS Memory;
UINT64 Size;
EFI_PHYSICAL_ADDRESS Memory;
UINT64 Size;
} EMU_SYSTEM_MEMORY;
#define MAX_IMAGE_CONTEXT_TO_MOD_HANDLE_ARRAY_SIZE 0x100
#define MAX_IMAGE_CONTEXT_TO_MOD_HANDLE_ARRAY_SIZE 0x100
typedef struct {
PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext;
VOID *ModHandle;
PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext;
VOID *ModHandle;
} IMAGE_CONTEXT_TO_MOD_HANDLE;
EFI_STATUS
EFIAPI
SecUnixPeiLoadFile (
@ -163,18 +159,18 @@ main (
VOID
SecLoadFromCore (
IN UINTN LargestRegion,
IN UINTN LargestRegionSize,
IN UINTN BootFirmwareVolumeBase,
IN VOID *PeiCoreFile
IN UINTN LargestRegion,
IN UINTN LargestRegionSize,
IN UINTN BootFirmwareVolumeBase,
IN VOID *PeiCoreFile
);
EFI_STATUS
SecLoadFile (
IN VOID *Pe32Data,
IN EFI_PHYSICAL_ADDRESS *ImageAddress,
IN UINT64 *ImageSize,
IN EFI_PHYSICAL_ADDRESS *EntryPoint
IN VOID *Pe32Data,
IN EFI_PHYSICAL_ADDRESS *ImageAddress,
IN UINT64 *ImageSize,
IN EFI_PHYSICAL_ADDRESS *EntryPoint
);
EFI_STATUS
@ -192,23 +188,23 @@ SecFfsFindNextFile (
EFI_STATUS
SecFfsFindSectionData (
IN EFI_SECTION_TYPE SectionType,
IN EFI_FFS_FILE_HEADER *FfsFileHeader,
IN OUT VOID **SectionData
IN EFI_SECTION_TYPE SectionType,
IN EFI_FFS_FILE_HEADER *FfsFileHeader,
IN OUT VOID **SectionData
);
EFI_STATUS
EFIAPI
SecUnixPeCoffLoaderLoadAsDll (
IN CHAR8 *PdbFileName,
IN VOID **ImageEntryPoint,
OUT VOID **ModHandle
IN CHAR8 *PdbFileName,
IN VOID **ImageEntryPoint,
OUT VOID **ModHandle
);
EFI_STATUS
EFIAPI
SecUnixPeCoffLoaderFreeLibrary (
OUT VOID *ModHandle
OUT VOID *ModHandle
);
EFI_STATUS
@ -230,53 +226,51 @@ GasketSecUnixFdAddress (
)
;
EFI_STATUS
GetImageReadFunction (
IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
IN EFI_PHYSICAL_ADDRESS *TopOfMemory
IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
IN EFI_PHYSICAL_ADDRESS *TopOfMemory
);
EFI_STATUS
EFIAPI
SecImageRead (
IN VOID *FileHandle,
IN UINTN FileOffset,
IN OUT UINTN *ReadSize,
OUT VOID *Buffer
IN VOID *FileHandle,
IN UINTN FileOffset,
IN OUT UINTN *ReadSize,
OUT VOID *Buffer
);
CHAR16 *
AsciiToUnicode (
IN CHAR8 *Ascii,
IN UINTN *StrLen OPTIONAL
IN CHAR8 *Ascii,
IN UINTN *StrLen OPTIONAL
);
UINTN
CountSeparatorsInString (
IN const CHAR16 *String,
IN CHAR16 Separator
IN const CHAR16 *String,
IN CHAR16 Separator
);
EFI_STATUS
EFIAPI
SecTemporaryRamSupport (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,
IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,
IN UINTN CopySize
IN CONST EFI_PEI_SERVICES **PeiServices,
IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,
IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,
IN UINTN CopySize
);
EFI_STATUS
EFIAPI
GasketSecTemporaryRamSupport (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,
IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,
IN UINTN CopySize
IN CONST EFI_PEI_SERVICES **PeiServices,
IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,
IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,
IN UINTN CopySize
);
RETURN_STATUS
EFIAPI
SecPeCoffGetEntryPoint (
@ -296,7 +290,6 @@ SecPeCoffLoaderUnloadImageExtraAction (
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
);
VOID
PeiSwitchStacks (
IN SWITCH_STACK_ENTRY_POINT EntryPoint,
@ -310,13 +303,13 @@ SecInitThunkProtocol (
VOID
);
EFI_PHYSICAL_ADDRESS *
MapMemory (
INTN fd,
UINT64 length,
INTN prot,
INTN flags);
INTN fd,
UINT64 length,
INTN prot,
INTN flags
);
EFI_STATUS
MapFile (
@ -334,21 +327,34 @@ MapFd0 (
BOOLEAN
EfiSystemMemoryRange (
IN VOID *MemoryAddress
IN VOID *MemoryAddress
);
VOID
SecSleep (
UINT64 Nanoseconds
);
VOID SecSleep (UINT64 Nanoseconds);
VOID SecEnableInterrupt (VOID);
VOID SecDisableInterrupt (VOID);
BOOLEAN SecInterruptEanbled (VOID);
VOID
SecEnableInterrupt (
VOID
);
VOID
SecDisableInterrupt (
VOID
);
extern EMU_THUNK_PROTOCOL gEmuThunkProtocol;
extern EMU_IO_THUNK_PROTOCOL gX11ThunkIo;
extern EMU_IO_THUNK_PROTOCOL gPosixFileSystemThunkIo;
extern EMU_IO_THUNK_PROTOCOL gPthreadThunkIo;
extern EMU_IO_THUNK_PROTOCOL gBlockIoThunkIo;
extern EMU_IO_THUNK_PROTOCOL gSnpThunkIo;
BOOLEAN
SecInterruptEanbled (
VOID
);
extern EMU_THUNK_PROTOCOL gEmuThunkProtocol;
extern EMU_IO_THUNK_PROTOCOL gX11ThunkIo;
extern EMU_IO_THUNK_PROTOCOL gPosixFileSystemThunkIo;
extern EMU_IO_THUNK_PROTOCOL gPthreadThunkIo;
extern EMU_IO_THUNK_PROTOCOL gBlockIoThunkIo;
extern EMU_IO_THUNK_PROTOCOL gSnpThunkIo;
#endif

View File

@ -9,7 +9,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "Host.h"
/**
Transfers control to a function starting with a new stack.
@ -49,15 +48,14 @@ PeiSwitchStacks (
//
ASSERT (((UINTN)NewStack & (CPU_STACK_ALIGNMENT - 1)) == 0);
JumpBuffer.Eip = (UINTN)EntryPoint;
JumpBuffer.Esp = (UINTN)NewStack - sizeof (VOID*);
JumpBuffer.Esp -= sizeof (Context1) + sizeof (Context2);
((VOID**)JumpBuffer.Esp)[1] = Context1;
((VOID**)JumpBuffer.Esp)[2] = Context2;
JumpBuffer.Eip = (UINTN)EntryPoint;
JumpBuffer.Esp = (UINTN)NewStack - sizeof (VOID *);
JumpBuffer.Esp -= sizeof (Context1) + sizeof (Context2);
((VOID **)JumpBuffer.Esp)[1] = Context1;
((VOID **)JumpBuffer.Esp)[2] = Context2;
LongJump (&JumpBuffer, (UINTN)-1);
//
// PeiSwitchStacks () will never return
//

View File

@ -12,21 +12,18 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include "Host.h"
#ifndef __APPLE__
#define EMU_SNP_PRIVATE_SIGNATURE SIGNATURE_32('E', 'M', 's', 'n')
#define EMU_SNP_PRIVATE_SIGNATURE SIGNATURE_32('E', 'M', 's', 'n')
typedef struct {
UINTN Signature;
UINTN Signature;
EMU_IO_THUNK_PROTOCOL *Thunk;
EMU_SNP_PROTOCOL EmuSnp;
EFI_SIMPLE_NETWORK_MODE *Mode;
EMU_IO_THUNK_PROTOCOL *Thunk;
EMU_SNP_PROTOCOL EmuSnp;
EFI_SIMPLE_NETWORK_MODE *Mode;
} EMU_SNP_PRIVATE;
#define EMU_SNP_PRIVATE_DATA_FROM_THIS(a) \
@ -48,7 +45,7 @@ EmuSnpCreateMapping (
IN EFI_SIMPLE_NETWORK_MODE *Mode
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -74,7 +71,7 @@ EmuSnpStart (
IN EMU_SNP_PROTOCOL *This
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -98,7 +95,7 @@ EmuSnpStop (
IN EMU_SNP_PROTOCOL *This
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -133,12 +130,12 @@ EmuSnpStop (
**/
EFI_STATUS
EmuSnpInitialize (
IN EMU_SNP_PROTOCOL *This,
IN UINTN ExtraRxBufferSize OPTIONAL,
IN UINTN ExtraTxBufferSize OPTIONAL
IN EMU_SNP_PROTOCOL *This,
IN UINTN ExtraRxBufferSize OPTIONAL,
IN UINTN ExtraTxBufferSize OPTIONAL
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -163,11 +160,11 @@ EmuSnpInitialize (
**/
EFI_STATUS
EmuSnpReset (
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -192,7 +189,7 @@ EmuSnpShutdown (
IN EMU_SNP_PROTOCOL *This
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -225,15 +222,15 @@ EmuSnpShutdown (
**/
EFI_STATUS
EmuSnpReceiveFilters (
IN EMU_SNP_PROTOCOL *This,
IN UINT32 Enable,
IN UINT32 Disable,
IN BOOLEAN ResetMCastFilter,
IN UINTN MCastFilterCnt OPTIONAL,
IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL
IN EMU_SNP_PROTOCOL *This,
IN UINT32 Enable,
IN UINT32 Disable,
IN BOOLEAN ResetMCastFilter,
IN UINTN MCastFilterCnt OPTIONAL,
IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -257,12 +254,12 @@ EmuSnpReceiveFilters (
**/
EFI_STATUS
EmuSnpStationAddress (
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN Reset,
IN EFI_MAC_ADDRESS *New OPTIONAL
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN Reset,
IN EFI_MAC_ADDRESS *New OPTIONAL
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -292,13 +289,13 @@ EmuSnpStationAddress (
**/
EFI_STATUS
EmuSnpStatistics (
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN Reset,
IN OUT UINTN *StatisticsSize OPTIONAL,
OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN Reset,
IN OUT UINTN *StatisticsSize OPTIONAL,
OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -328,13 +325,13 @@ EmuSnpStatistics (
**/
EFI_STATUS
EmuSnpMCastIpToMac (
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN IPv6,
IN EFI_IP_ADDRESS *IP,
OUT EFI_MAC_ADDRESS *MAC
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN IPv6,
IN EFI_IP_ADDRESS *IP,
OUT EFI_MAC_ADDRESS *MAC
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -363,14 +360,14 @@ EmuSnpMCastIpToMac (
**/
EFI_STATUS
EmuSnpNvData (
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN ReadWrite,
IN UINTN Offset,
IN UINTN BufferSize,
IN OUT VOID *Buffer
IN EMU_SNP_PROTOCOL *This,
IN BOOLEAN ReadWrite,
IN UINTN Offset,
IN UINTN BufferSize,
IN OUT VOID *Buffer
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -404,12 +401,12 @@ EmuSnpNvData (
**/
EFI_STATUS
EmuSnpGetStatus (
IN EMU_SNP_PROTOCOL *This,
OUT UINT32 *InterruptStatus OPTIONAL,
OUT VOID **TxBuf OPTIONAL
IN EMU_SNP_PROTOCOL *This,
OUT UINT32 *InterruptStatus OPTIONAL,
OUT VOID **TxBuf OPTIONAL
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -451,16 +448,16 @@ EmuSnpGetStatus (
**/
EFI_STATUS
EmuSnpTransmit (
IN EMU_SNP_PROTOCOL *This,
IN UINTN HeaderSize,
IN UINTN BufferSize,
IN VOID *Buffer,
IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
IN EFI_MAC_ADDRESS *DestAddr OPTIONAL,
IN UINT16 *Protocol OPTIONAL
IN EMU_SNP_PROTOCOL *This,
IN UINTN HeaderSize,
IN UINTN BufferSize,
IN VOID *Buffer,
IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
IN EFI_MAC_ADDRESS *DestAddr OPTIONAL,
IN UINT16 *Protocol OPTIONAL
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
@ -501,24 +498,23 @@ EmuSnpTransmit (
**/
EFI_STATUS
EmuSnpReceive (
IN EMU_SNP_PROTOCOL *This,
OUT UINTN *HeaderSize OPTIONAL,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer,
OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL,
OUT UINT16 *Protocol OPTIONAL
IN EMU_SNP_PROTOCOL *This,
OUT UINTN *HeaderSize OPTIONAL,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer,
OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL,
OUT UINT16 *Protocol OPTIONAL
)
{
EMU_SNP_PRIVATE *Private;
EMU_SNP_PRIVATE *Private;
Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This);
return EFI_UNSUPPORTED;
}
EMU_SNP_PROTOCOL gEmuSnpProtocol = {
EMU_SNP_PROTOCOL gEmuSnpProtocol = {
GasketSnpCreateMapping,
GasketSnpStart,
GasketSnpStop,
@ -537,7 +533,7 @@ EMU_SNP_PROTOCOL gEmuSnpProtocol = {
EFI_STATUS
EmuSnpThunkOpen (
IN EMU_IO_THUNK_PROTOCOL *This
IN EMU_IO_THUNK_PROTOCOL *This
)
{
EMU_SNP_PRIVATE *Private;
@ -555,7 +551,6 @@ EmuSnpThunkOpen (
return EFI_OUT_OF_RESOURCES;
}
Private->Signature = EMU_SNP_PRIVATE_SIGNATURE;
Private->Thunk = This;
CopyMem (&Private->EmuSnp, &gEmuSnpProtocol, sizeof (gEmuSnpProtocol));
@ -565,10 +560,9 @@ EmuSnpThunkOpen (
return EFI_SUCCESS;
}
EFI_STATUS
EmuSnpThunkClose (
IN EMU_IO_THUNK_PROTOCOL *This
IN EMU_IO_THUNK_PROTOCOL *This
)
{
EMU_SNP_PRIVATE *Private;
@ -583,9 +577,7 @@ EmuSnpThunkClose (
return EFI_SUCCESS;
}
EMU_IO_THUNK_PROTOCOL gSnpThunkIo = {
EMU_IO_THUNK_PROTOCOL gSnpThunkIo = {
&gEmuSnpProtocolGuid,
NULL,
NULL,

View File

@ -30,10 +30,9 @@ AllocatePool (
IN UINTN AllocationSize
)
{
return (VOID*) malloc (AllocationSize);
return (VOID *)malloc (AllocationSize);
}
/**
Allocates and zeros a buffer of type EfiBootServicesData.
@ -53,7 +52,7 @@ AllocateZeroPool (
IN UINTN AllocationSize
)
{
VOID *Buffer;
VOID *Buffer;
Buffer = AllocatePool (AllocationSize);
if (Buffer == NULL) {
@ -65,7 +64,6 @@ AllocateZeroPool (
return Buffer;
}
/**
Reallocates a buffer of type EfiBootServicesData.
@ -95,7 +93,7 @@ ReallocatePool (
IN VOID *OldBuffer OPTIONAL
)
{
VOID *NewBuffer;
VOID *NewBuffer;
NewBuffer = AllocatePool (NewSize);
if (NewBuffer == NULL) {
@ -113,7 +111,6 @@ ReallocatePool (
return NewBuffer;
}
/**
Frees a buffer that was previously allocated with one of the pool allocation functions in the
Memory Allocation Library.
@ -131,9 +128,8 @@ ReallocatePool (
VOID
EFIAPI
FreePool (
IN VOID *Buffer
IN VOID *Buffer
)
{
free ((void *) Buffer);
free ((void *)Buffer);
}

File diff suppressed because it is too large Load Diff

View File

@ -12,48 +12,43 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "Host.h"
#include <pthread.h>
UINTN
EFIAPI
PthreadMutexLock (
IN VOID *Mutex
IN VOID *Mutex
)
{
return (UINTN)pthread_mutex_lock ((pthread_mutex_t *)Mutex);
}
UINTN
EFIAPI
PthreadMutexUnLock (
IN VOID *Mutex
IN VOID *Mutex
)
{
return (UINTN)pthread_mutex_unlock ((pthread_mutex_t *)Mutex);
}
UINTN
EFIAPI
PthreadMutexTryLock (
IN VOID *Mutex
IN VOID *Mutex
)
{
return (UINTN)pthread_mutex_trylock ((pthread_mutex_t *)Mutex);
}
VOID *
PthreadMutexInit (
IN VOID
)
{
pthread_mutex_t *Mutex;
int err;
pthread_mutex_t *Mutex;
int err;
Mutex = malloc (sizeof (pthread_mutex_t));
err = pthread_mutex_init (Mutex, NULL);
err = pthread_mutex_init (Mutex, NULL);
if (err == 0) {
return Mutex;
}
@ -61,10 +56,9 @@ PthreadMutexInit (
return NULL;
}
UINTN
PthreadMutexDestroy (
IN VOID *Mutex
IN VOID *Mutex
)
{
if (Mutex != NULL) {
@ -76,11 +70,11 @@ PthreadMutexDestroy (
// Can't store this data on PthreadCreate stack so we need a global
typedef struct {
pthread_mutex_t Mutex;
THREAD_THUNK_THREAD_ENTRY Start;
pthread_mutex_t Mutex;
THREAD_THUNK_THREAD_ENTRY Start;
} THREAD_MANGLE;
THREAD_MANGLE mThreadMangle = {
THREAD_MANGLE mThreadMangle = {
PTHREAD_MUTEX_INITIALIZER,
NULL
};
@ -90,11 +84,11 @@ SecFakePthreadStart (
VOID *Context
)
{
THREAD_THUNK_THREAD_ENTRY Start;
sigset_t SigMask;
THREAD_THUNK_THREAD_ENTRY Start;
sigset_t SigMask;
// Save global on the stack before we unlock
Start = mThreadMangle.Start;
Start = mThreadMangle.Start;
pthread_mutex_unlock (&mThreadMangle.Mutex);
// Mask all signals to the APs
@ -109,19 +103,19 @@ SecFakePthreadStart (
// This is a great example of how all problems in computer
// science can be solved by adding another level of indirection
//
return (VOID *)ReverseGasketUint64 ((UINTN)Start, (UINTN)Context);
return (VOID *)ReverseGasketUint64 ((UINTN)Start, (UINTN)Context);
}
UINTN
PthreadCreate (
IN VOID *Thread,
IN VOID *Attribute,
IN THREAD_THUNK_THREAD_ENTRY Start,
IN VOID *Context
IN VOID *Thread,
IN VOID *Attribute,
IN THREAD_THUNK_THREAD_ENTRY Start,
IN VOID *Context
)
{
int err;
BOOLEAN EnabledOnEntry;
int err;
BOOLEAN EnabledOnEntry;
//
// Threads inherit interrupt state so disable interrupts before we start thread
@ -135,7 +129,7 @@ PthreadCreate (
// Acquire lock for global, SecFakePthreadStart runs in a different thread.
pthread_mutex_lock (&mThreadMangle.Mutex);
mThreadMangle.Start = Start;
mThreadMangle.Start = Start;
err = pthread_create (Thread, Attribute, SecFakePthreadStart, Context);
if (err != 0) {
@ -151,17 +145,15 @@ PthreadCreate (
return err;
}
VOID
PthreadExit (
IN VOID *ValuePtr
IN VOID *ValuePtr
)
{
pthread_exit (ValuePtr);
return;
}
UINTN
PthreadSelf (
VOID
@ -173,8 +165,7 @@ PthreadSelf (
return (UINTN)pthread_self ();
}
EMU_THREAD_THUNK_PROTOCOL gPthreadThunk = {
EMU_THREAD_THUNK_PROTOCOL gPthreadThunk = {
GasketPthreadMutexLock,
GasketPthreadMutexUnLock,
GasketPthreadMutexTryLock,
@ -185,10 +176,9 @@ EMU_THREAD_THUNK_PROTOCOL gPthreadThunk = {
GasketPthreadSelf
};
EFI_STATUS
PthreadOpen (
IN EMU_IO_THUNK_PROTOCOL *This
IN EMU_IO_THUNK_PROTOCOL *This
)
{
if (This->Instance != 0) {
@ -206,17 +196,15 @@ PthreadOpen (
return EFI_SUCCESS;
}
EFI_STATUS
PthreadClose (
IN EMU_IO_THUNK_PROTOCOL *This
IN EMU_IO_THUNK_PROTOCOL *This
)
{
return EFI_SUCCESS;
}
EMU_IO_THUNK_PROTOCOL gPthreadThunkIo = {
EMU_IO_THUNK_PROTOCOL gPthreadThunkIo = {
&gEmuThreadThunkProtocolGuid,
NULL,
NULL,
@ -225,5 +213,3 @@ EMU_IO_THUNK_PROTOCOL gPthreadThunkIo = {
GasketPthreadClose,
NULL
};

File diff suppressed because it is too large Load Diff

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