EmulatorPkg: Apply uncrustify changes

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

Apply uncrustify changes to .c/.h files in the EmulatorPkg package

Cc: Andrew Fish <afish@apple.com>
Cc: Leif Lindholm <leif@nuviainc.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
This commit is contained in:
Michael Kubacki
2021-12-05 14:53:57 -08:00
committed by mergify[bot]
parent e7108d0e96
commit a550d468a6
111 changed files with 6170 additions and 6345 deletions

View File

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

View File

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

View File

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

View File

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