NOTE: this patches is for testing temporary.
So it should be ignore when adding to main tree.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Chen Fan <[email protected]>
---
UefiCpuPkg/CpuDxe/CpuDxe.c | 2 +
UefiCpuPkg/CpuDxe/CpuDxe.inf | 1 +
UefiCpuPkg/CpuDxe/CpuMp.h | 9 ++++
UefiCpuPkg/CpuDxe/CpuMpTest.c | 97 +++++++++++++++++++++++++++++++++++++++++++
4 files changed, 109 insertions(+)
create mode 100644 UefiCpuPkg/CpuDxe/CpuMpTest.c
diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.c b/UefiCpuPkg/CpuDxe/CpuDxe.c
index c9df4e1..16e6bcc 100644
--- a/UefiCpuPkg/CpuDxe/CpuDxe.c
+++ b/UefiCpuPkg/CpuDxe/CpuDxe.c
@@ -900,6 +900,8 @@ InitializeCpu (
InitializeMpSupport ();
+ AddTestMpService ();
+
return Status;
}
diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.inf b/UefiCpuPkg/CpuDxe/CpuDxe.inf
index 6761e91..6983e62 100644
--- a/UefiCpuPkg/CpuDxe/CpuDxe.inf
+++ b/UefiCpuPkg/CpuDxe/CpuDxe.inf
@@ -52,6 +52,7 @@
CpuGdt.h
CpuMp.c
CpuMp.h
+ CpuMpTest.c
[Sources.IA32]
Ia32/CpuAsm.asm | MSFT
diff --git a/UefiCpuPkg/CpuDxe/CpuMp.h b/UefiCpuPkg/CpuDxe/CpuMp.h
index d812561..d32a4aa 100644
--- a/UefiCpuPkg/CpuDxe/CpuMp.h
+++ b/UefiCpuPkg/CpuDxe/CpuMp.h
@@ -636,5 +636,14 @@ ResetApStackless (
IN UINT32 ProcessorId
);
+/**
+ Initialize Mp Service Testing.
+
+**/
+VOID
+AddTestMpService (
+ VOID
+ );
+
#endif // _CPU_MP_H_
diff --git a/UefiCpuPkg/CpuDxe/CpuMpTest.c b/UefiCpuPkg/CpuDxe/CpuMpTest.c
new file mode 100644
index 0000000..416849e
--- /dev/null
+++ b/UefiCpuPkg/CpuDxe/CpuMpTest.c
@@ -0,0 +1,97 @@
+#include "CpuDxe.h"
+#include "CpuMp.h"
+
+VOID
+EFIAPI
+CheckTaskComplete (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ DEBUG ((DEBUG_INFO, "All Client Task finished.\n"));
+}
+
+VOID
+EFIAPI
+ClientTask(
+ IN VOID* parameter
+ )
+{
+ DEBUG ((DEBUG_INFO, "I am Client Task!!!\n"));
+}
+
+VOID
+EFIAPI
+ClientTask1(
+ IN VOID* parameter
+ )
+{
+ DEBUG ((DEBUG_INFO, "I am Client Task with timeout!!!\n"));
+ while (1);
+}
+
+
+/**
+ Initialize Mp Service Testing
+
+**/
+VOID
+AddTestMpService (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ EFI_MP_SERVICES_PROTOCOL *MpService;
+ UINTN WhoAmI;
+ UINTN NumberOfProcessors;
+ UINTN NumberOfEnabledProcessors;
+ EFI_EVENT WaitEvent;
+
+ Status = gBS->LocateProtocol(&gEfiMpServiceProtocolGuid,
+ NULL,
+ (void **) &MpService);
+ if (EFI_ERROR(Status)) {
+ DEBUG ((DEBUG_ERROR, "Install Mp Service fails\n"));
+ return;
+ }
+
+ Status = MpService->WhoAmI(MpService, &WhoAmI);
+ if (!EFI_ERROR(Status)) {
+ DEBUG ((DEBUG_INFO, "WhoAmI is : %d\n", WhoAmI));
+ }
+
+ Status = MpService->GetNumberOfProcessors (MpService,
+ &NumberOfProcessors,
+ &NumberOfEnabledProcessors
+ );
+ if (!EFI_ERROR(Status)) {
+ DEBUG ((DEBUG_INFO, "GetNumberOfProcessors : %d enabled: %d\n",
+ NumberOfProcessors, NumberOfEnabledProcessors));
+ }
+
+ gBS->CreateEvent (
+ EVT_NOTIFY_SIGNAL,
+ TPL_CALLBACK,
+ CheckTaskComplete,
+ NULL,
+ &WaitEvent
+ );
+
+ Status = MpService->StartupThisAP (MpService, ClientTask1, 1, WaitEvent,
+ 1000, NULL, NULL);
+ if (EFI_ERROR(Status)) {
+ DEBUG ((DEBUG_ERROR, "FAILED.\n"));
+ }
+
+ do {
+ Status = gBS->CheckEvent(WaitEvent);
+ } while (EFI_ERROR(Status));
+
+ /*
+ Status = MpService->StartupAllAPs (MpService, ClientTask, TRUE, WaitEvent,
+ 0, NULL, NULL);
+ if (EFI_ERROR(Status)) {
+ DEBUG ((DEBUG_ERROR, "FAILED.\n"));
+ }*/
+
+}
--
1.9.3
------------------------------------------------------------------------------
Comprehensive Server Monitoring with Site24x7.
Monitor 10 servers for $9/Month.
Get alerted through email, SMS, voice calls or mobile push notifications.
Take corrective actions from your mobile device.
http://p.sf.net/sfu/Zoho
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel