mirror of
https://github.com/Dasharo/edk2.git
synced 2026-06-13 10:16:24 -07:00
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:
committed by
mergify[bot]
parent
e7108d0e96
commit
a550d468a6
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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)
|
||||
);
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
//
|
||||
|
||||
@@ -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)
|
||||
);
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
//
|
||||
|
||||
+54
-61
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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:
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user