From: Michael Kubacki <michael.kuba...@microsoft.com>

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 <af...@apple.com>
Cc: Kang Gao <kang....@intel.com>
Cc: Michael D Kinney <michael.d.kin...@intel.com>
Cc: Michael Kubacki <michael.kuba...@microsoft.com>
Cc: Leif Lindholm <l...@nuviainc.com>
Cc: Benjamin You <benjamin....@intel.com>
Cc: Liu Yun <yun.y....@intel.com>
Cc: Ankit Sinha <ankit.si...@intel.com>
Cc: Nate DeSimone <nathaniel.l.desim...@intel.com>
Signed-off-by: Michael Kubacki <michael.kuba...@microsoft.com>
---
 PrmPkg/Samples/PrmSamplePrintModule/PrmSamplePrintModule.c   | 157 
++++++++++++++++++++
 PrmPkg/Samples/PrmSamplePrintModule/PrmSamplePrintModule.inf |  39 +++++
 2 files changed, 196 insertions(+)

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



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87847): https://edk2.groups.io/g/devel/message/87847
Mute This Topic: https://groups.io/mt/89955960/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to