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] -=-=-=-=-=-=-=-=-=-=-=-