]> git.proxmox.com Git - mirror_edk2.git/commitdiff
PrmPkg: Add initial PrmSamplePrintModule
authorMichael Kubacki <michael.kubacki@microsoft.com>
Tue, 7 Apr 2020 18:28:36 +0000 (11:28 -0700)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Tue, 5 Apr 2022 00:42:38 +0000 (00:42 +0000)
REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3812

Adds a simple sample PRM module that demonstrates:
  1. How to write a PRM module
  2. How to use multiple PRM handlers in a module
  3. How to use a basic PRM OS service

Cc: Andrew Fish <afish@apple.com>
Cc: Kang Gao <kang.gao@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Michael Kubacki <michael.kubacki@microsoft.com>
Cc: Leif Lindholm <leif@nuviainc.com>
Cc: Benjamin You <benjamin.you@intel.com>
Cc: Liu Yun <yun.y.liu@intel.com>
Cc: Ankit Sinha <ankit.sinha@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
Acked-by: Michael D Kinney <michael.d.kinney@intel.com>
Acked-by: Liming Gao <gaoliming@byosoft.com.cn>
Acked-by: Leif Lindholm <quic_llindhol@quicinc.com>
Reviewed-by: Ankit Sinha <ankit.sinha@intel.com>
PrmPkg/Samples/PrmSamplePrintModule/PrmSamplePrintModule.c [new file with mode: 0644]
PrmPkg/Samples/PrmSamplePrintModule/PrmSamplePrintModule.inf [new file with mode: 0644]

diff --git a/PrmPkg/Samples/PrmSamplePrintModule/PrmSamplePrintModule.c b/PrmPkg/Samples/PrmSamplePrintModule/PrmSamplePrintModule.c
new file mode 100644 (file)
index 0000000..85e8eb2
--- /dev/null
@@ -0,0 +1,157 @@
+/** @file\r
+\r
+  A sample PRM Module implementation. This PRM Module provides 3 PRM handlers that simply take a DEBUG print\r
+  function from the OS and invoke it with a debug message internal the PRM handler.\r
+\r
+  Copyright (c) Microsoft Corporation\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#include <PrmModule.h>\r
+\r
+#include <Library/BaseLib.h>\r
+#include <Library/UefiLib.h>\r
+\r
+//\r
+// PRM Handler GUIDs\r
+//\r
+\r
+// {d5f2ad5f-a347-4d3e-87bc-c2ce63029cc8}\r
+#define PRM_HANDLER_1_GUID {0xd5f2ad5f, 0xa347, 0x4d3e, {0x87, 0xbc, 0xc2, 0xce, 0x63, 0x02, 0x9c, 0xc8}}\r
+\r
+// {a9e7adc3-8cd0-429a-8915-10946ebde318}\r
+#define PRM_HANDLER_2_GUID  {0xa9e7adc3, 0x8cd0, 0x429a, {0x89, 0x15, 0x10, 0x94, 0x6e, 0xbd, 0xe3, 0x18}}\r
+\r
+// {b688c214-4081-4eeb-8d26-1eb5a3bcf11a}\r
+#define PRM_HANDLER_N_GUID {0xb688c214, 0x4081, 0x4eeb, {0x8d, 0x26, 0x1e, 0xb5, 0xa3, 0xbc, 0xf1, 0x1a}}\r
+\r
+/**\r
+  A sample Platform Runtime Mechanism (PRM) handler.\r
+\r
+  This sample handler currently uses the OS_SERVICES to write a debug message\r
+  indicating this is PRM handler 1.\r
+\r
+  @param[in]  ParameterBuffer     A pointer to the PRM handler parameter buffer\r
+  @param[in]  ContextBUffer       A pointer to the PRM handler context buffer\r
+\r
+  @retval EFI_STATUS              The PRM handler executed successfully.\r
+  @retval Others                  An error occurred in the PRM handler.\r
+\r
+**/\r
+EFI_STATUS\r
+PRM_EXPORT_API\r
+EFIAPI\r
+PrmHandler1 (\r
+  IN VOID                         *ParameterBuffer,\r
+  IN PRM_CONTEXT_BUFFER           *ContextBUffer\r
+  )\r
+{\r
+  PRM_OS_SERVICE_DEBUG_PRINT      OsServiceDebugPrint;\r
+\r
+  if (ParameterBuffer == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  // In the POC, the OS debug print service is assumed to be at the beginning of ParameterBuffer\r
+  OsServiceDebugPrint = *((PRM_OS_SERVICE_DEBUG_PRINT *) ParameterBuffer);\r
+  if (OsServiceDebugPrint == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+  OsServiceDebugPrint ("PRM1 handler sample message!\n");\r
+\r
+  return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+  A sample Platform Runtime Mechanism (PRM) handler.\r
+\r
+  This sample handler currently uses the OS_SERVICES to write a debug message\r
+  indicating this is PRM handler 2.\r
+\r
+  @param[in]  ParameterBuffer    A pointer to the PRM handler parameter buffer\r
+  @param[in]  ContextBUffer      A pointer to the PRM handler context buffer\r
+\r
+  @retval EFI_STATUS             The PRM handler executed successfully.\r
+  @retval Others                 An error occurred in the PRM handler.\r
+\r
+**/\r
+EFI_STATUS\r
+PRM_EXPORT_API\r
+EFIAPI\r
+PrmHandler2 (\r
+  IN VOID                         *ParameterBuffer,\r
+  IN PRM_CONTEXT_BUFFER           *ContextBUffer\r
+  )\r
+{\r
+  PRM_OS_SERVICE_DEBUG_PRINT      OsServiceDebugPrint;\r
+\r
+  if (ParameterBuffer == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  // In the POC, the OS debug print service is assumed to be at the beginning of ParameterBuffer\r
+  OsServiceDebugPrint = *((PRM_OS_SERVICE_DEBUG_PRINT *) ParameterBuffer);\r
+  if (OsServiceDebugPrint == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+  OsServiceDebugPrint ("PRM2 handler sample message!\n");\r
+\r
+  return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+  A sample Platform Runtime Mechanism (PRM) handler.\r
+\r
+  This sample handler currently uses the OS_SERVICES to write a debug message\r
+  indicating this is PRM handler N.\r
+\r
+  @param[in]  ParameterBuffer    A pointer to the PRM handler parameter buffer\r
+  @param[in]  ContextBUffer      A pointer to the PRM handler context buffer\r
+\r
+  @retval EFI_STATUS             The PRM handler executed successfully.\r
+  @retval Others                 An error occurred in the PRM handler.\r
+\r
+**/\r
+EFI_STATUS\r
+PRM_EXPORT_API\r
+EFIAPI\r
+PrmHandlerN (\r
+  IN VOID                         *ParameterBuffer,\r
+  IN PRM_CONTEXT_BUFFER           *ContextBUffer\r
+  )\r
+{\r
+  PRM_OS_SERVICE_DEBUG_PRINT      OsServiceDebugPrint;\r
+\r
+  if (ParameterBuffer == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  // In the POC, the OS debug print service is assumed to be at the beginning of ParameterBuffer\r
+  OsServiceDebugPrint = *((PRM_OS_SERVICE_DEBUG_PRINT *) ParameterBuffer);\r
+  if (OsServiceDebugPrint == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+  OsServiceDebugPrint ("PRMN handler sample message!\n");\r
+\r
+  return EFI_SUCCESS;\r
+}\r
+\r
+//\r
+// Register the PRM export information for this PRM Module\r
+//\r
+PRM_MODULE_EXPORT (\r
+  PRM_HANDLER_EXPORT_ENTRY (PRM_HANDLER_1_GUID, PrmHandler1),\r
+  PRM_HANDLER_EXPORT_ENTRY (PRM_HANDLER_2_GUID, PrmHandler2),\r
+  PRM_HANDLER_EXPORT_ENTRY (PRM_HANDLER_N_GUID, PrmHandlerN)\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+PrmSamplePrintModuleInit (\r
+  IN  EFI_HANDLE                  ImageHandle,\r
+  IN  EFI_SYSTEM_TABLE            *SystemTable\r
+  )\r
+{\r
+  return EFI_SUCCESS;\r
+}\r
diff --git a/PrmPkg/Samples/PrmSamplePrintModule/PrmSamplePrintModule.inf b/PrmPkg/Samples/PrmSamplePrintModule/PrmSamplePrintModule.inf
new file mode 100644 (file)
index 0000000..d685bf8
--- /dev/null
@@ -0,0 +1,39 @@
+## @file\r
+#  Sample PRM Driver\r
+#\r
+#  This driver simply uses an OS-provided debug message print service to write\r
+#  a debug message. Three PRM handlers are provided that each print a unique\r
+#  debug message.\r
+#\r
+#  Copyright (c) Microsoft Corporation\r
+#\r
+#  SPDX-License-Identifier: BSD-2-Clause-Patent\r
+#\r
+##\r
+\r
+[Defines]\r
+  INF_VERSION                    = 0x00010005\r
+  BASE_NAME                      = PrmSamplePrintModule\r
+  FILE_GUID                      = 1652B3C2-A7A1-46AC-AF93-DD6DEE446669\r
+  MODULE_TYPE                    = DXE_RUNTIME_DRIVER\r
+  VERSION_STRING                 = 1.0\r
+  ENTRY_POINT                    = PrmSamplePrintModuleInit\r
+\r
+[Sources]\r
+  PrmSamplePrintModule.c\r
+\r
+[Packages]\r
+  MdePkg/MdePkg.dec\r
+  MdeModulePkg/MdeModulePkg.dec\r
+  PrmPkg/PrmPkg.dec\r
+\r
+[LibraryClasses]\r
+  BaseLib\r
+  UefiDriverEntryPoint\r
+  UefiLib\r
+\r
+[Depex]\r
+  TRUE\r
+\r
+[BuildOptions.common]\r
+  MSFT:*_*_*_DLINK_FLAGS  = /DLL /SUBSYSTEM:CONSOLE\r