Hi Zhizhao, The new add files don't have copyright info, is it ok?
Thanks, Eric > -----Original Message----- > From: Gao, Zhichao > Sent: Tuesday, July 9, 2019 4:40 PM > To: devel@edk2.groups.io > Cc: Sean Brogan <sean.bro...@microsoft.com>; Dong, Eric > <eric.d...@intel.com>; Ni, Ray <ray...@intel.com>; Laszlo Ersek > <ler...@redhat.com>; Gao, Liming <liming....@intel.com>; Michael Turner > <michael.tur...@microsoft.com>; Bret Barkelew > <bret.barke...@microsoft.com> > Subject: [PATCH V2 2/4] UefiCpuPkg/CpuDxe: Implement Cpu2 protocol > > From: Sean Brogan <sean.bro...@microsoft.com> > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1400 > > Implement Cp2 protocol: it has one interface to enable the interrupt and put > cpu to sleep and wait for an interrupt. > > Cc: Eric Dong <eric.d...@intel.com> > Cc: Ray Ni <ray...@intel.com> > Cc: Laszlo Ersek <ler...@redhat.com> > Cc: Liming Gao <liming....@intel.com> > Cc: Sean Brogan <sean.bro...@microsoft.com> > Cc: Michael Turner <michael.tur...@microsoft.com> > Cc: Bret Barkelew <bret.barke...@microsoft.com> > Signed-off-by: Zhichao Gao <zhichao....@intel.com> > --- > UefiCpuPkg/CpuDxe/CpuDxe.c | 38 +++++++++++++++++++ > UefiCpuPkg/CpuDxe/CpuDxe.h | 25 ++++++++++++ > UefiCpuPkg/CpuDxe/CpuDxe.inf | 3 ++ > .../CpuDxe/Ia32/EnableInterruptsAndSleep.c | 24 ++++++++++++ > .../CpuDxe/X64/EnableInterruptsAndSleep.nasm | 31 +++++++++++++++ > 5 files changed, 121 insertions(+) > create mode 100644 UefiCpuPkg/CpuDxe/Ia32/EnableInterruptsAndSleep.c > create mode 100644 > UefiCpuPkg/CpuDxe/X64/EnableInterruptsAndSleep.nasm > > diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.c b/UefiCpuPkg/CpuDxe/CpuDxe.c > index 7d7270e10b..2eeffcf426 100644 > --- a/UefiCpuPkg/CpuDxe/CpuDxe.c > +++ b/UefiCpuPkg/CpuDxe/CpuDxe.c > @@ -18,6 +18,7 @@ > // > BOOLEAN InterruptState = FALSE; > EFI_HANDLE mCpuHandle = NULL; > +EFI_HANDLE mCpu2Handle = NULL; > BOOLEAN mIsFlushingGCD; > BOOLEAN mIsAllocatingPageTable = FALSE; > UINT64 mValidMtrrAddressMask; > @@ -96,6 +97,10 @@ EFI_CPU_ARCH_PROTOCOL gCpu = { > 4 // DmaBufferAlignment > }; > > +EDKII_CPU2_PROTOCOL gCpu2 = { > + CpuEnableAndWaitForInterrupt > +}; > + > // > // CPU Arch Protocol Functions > // > @@ -499,6 +504,28 @@ CpuSetMemoryAttributes ( > return AssignMemoryPageAttributes (NULL, BaseAddress, Length, > MemoryAttributes, NULL); } > > +// > +// CPU2 Protocol Functions > +// > +/** > + This function enables CPU interrupts and then waits for an interrupt to > arrive. > + > + @param This The EFI_CPU2_PROTOCOL instance. > + > + @retval EFI_SUCCESS Interrupts are enabled on the processor. > + @retval EFI_DEVICE_ERROR Interrupts could not be enabled on the > processor. > + > +**/ > +EFI_STATUS > +CpuEnableAndWaitForInterrupt ( > + IN EDKII_CPU2_PROTOCOL *This > + ) > +{ > + EnableInterruptsAndSleep (); > + > + return EFI_SUCCESS; > +} > + > /** > Initializes the valid bits mask and valid address mask for MTRRs. > > @@ -1211,6 +1238,17 @@ InitializeCpu ( > ); > ASSERT_EFI_ERROR (Status); > > + // > + // Install CPU2 Protocol > + // > + Status = gBS->InstallMultipleProtocolInterfaces ( > + &mCpu2Handle, > + &gEdkiiCpu2ProtocolGuid, > + &gCpu2, > + NULL > + ); > + ASSERT_EFI_ERROR (Status); > + > InitializeMpSupport (); > > return Status; > diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.h b/UefiCpuPkg/CpuDxe/CpuDxe.h > index b029be430b..c1398830ba 100644 > --- a/UefiCpuPkg/CpuDxe/CpuDxe.h > +++ b/UefiCpuPkg/CpuDxe/CpuDxe.h > @@ -12,6 +12,7 @@ > #include <PiDxe.h> > > #include <Protocol/Cpu.h> > +#include <Protocol/Cpu2.h> > #include <Protocol/MpService.h> > #include <Register/Msr.h> > > @@ -305,6 +306,30 @@ PageFaultExceptionHandler ( > IN EFI_SYSTEM_CONTEXT SystemContext > ); > > +/** > + This function enables CPU interrupts and then waits for an interrupt to > arrive. > + > + @param This The EFI_CPU2_PROTOCOL instance. > + > + @retval EFI_SUCCESS Interrupts are enabled on the processor. > + @retval EFI_DEVICE_ERROR Interrupts could not be enabled on the > processor. > + > +**/ > +EFI_STATUS > +CpuEnableAndWaitForInterrupt ( > + IN EDKII_CPU2_PROTOCOL *This > + ); > + > +/** > + Enables CPU interrupts and then waits for an interrupt to arrive. > + > +**/ > +VOID > +EFIAPI > +EnableInterruptsAndSleep ( > + VOID > + ); > + > extern BOOLEAN mIsAllocatingPageTable; > extern UINTN mNumberOfProcessors; > > diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.inf > b/UefiCpuPkg/CpuDxe/CpuDxe.inf index 57381dbc85..334ddb142f 100644 > --- a/UefiCpuPkg/CpuDxe/CpuDxe.inf > +++ b/UefiCpuPkg/CpuDxe/CpuDxe.inf > @@ -54,14 +54,17 @@ > > [Sources.IA32] > Ia32/CpuAsm.nasm > + Ia32/EnableInterruptsAndSleep.c > > [Sources.X64] > X64/CpuAsm.nasm > + X64/EnableInterruptsAndSleep.nasm > > [Protocols] > gEfiCpuArchProtocolGuid ## PRODUCES > gEfiMpServiceProtocolGuid ## PRODUCES > gEfiSmmBase2ProtocolGuid ## SOMETIMES_CONSUMES > + gEdkiiCpu2ProtocolGuid ## PRODUCES > > [Guids] > gIdleLoopEventGuid ## CONSUMES ## > Event > diff --git a/UefiCpuPkg/CpuDxe/Ia32/EnableInterruptsAndSleep.c > b/UefiCpuPkg/CpuDxe/Ia32/EnableInterruptsAndSleep.c > new file mode 100644 > index 0000000000..dda76139ab > --- /dev/null > +++ b/UefiCpuPkg/CpuDxe/Ia32/EnableInterruptsAndSleep.c > @@ -0,0 +1,24 @@ > +/** @file > + EnableInterruptsAndSleep function > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > + > + > +/** > + Enables CPU interrupts and then sleep. > + > +**/ > +VOID > +EFIAPI > +EnableInterruptsAndSleep ( > + VOID > + ) > +{ > + _asm { > + sti > + hlt > + } > +} > diff --git a/UefiCpuPkg/CpuDxe/X64/EnableInterruptsAndSleep.nasm > b/UefiCpuPkg/CpuDxe/X64/EnableInterruptsAndSleep.nasm > new file mode 100644 > index 0000000000..2d93ecb4bb > --- /dev/null > +++ b/UefiCpuPkg/CpuDxe/X64/EnableInterruptsAndSleep.nasm > @@ -0,0 +1,31 @@ > +;---------------------------------------------------------------------- > +-------- > +; > +; SPDX-License-Identifier: BSD-2-Clause-Patent ; ; Module Name: > +; > +; EnableInterruptsAndSleep.nasm > +; > +; Abstract: > +; > +; EnableInterruptsAndSleep function > +; > +; Notes: > +; > +;---------------------------------------------------------------------- > +-------- > + > + DEFAULT REL > + SECTION .text > + > +;---------------------------------------------------------------------- > +-------- > +; VOID > +; EFIAPI > +; EnableInterruptsAndSleep ( > +; VOID > +; ); > +;---------------------------------------------------------------------- > +-------- global ASM_PFX(EnableInterruptsAndSleep) > +ASM_PFX(EnableInterruptsAndSleep): > + sti > + hlt > + ret > -- > 2.21.0.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#43548): https://edk2.groups.io/g/devel/message/43548 Mute This Topic: https://groups.io/mt/32403450/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-