From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mx.groups.io with SMTP id smtpd.web12.12070.1647966038873164614 for ; Tue, 22 Mar 2022 09:20:39 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@linux.microsoft.com header.s=default header.b=UxYb0VmX; spf=pass (domain: linux.microsoft.com, ip: 13.77.154.182, mailfrom: mikuback@linux.microsoft.com) Received: from localhost.localdomain (unknown [47.202.59.224]) by linux.microsoft.com (Postfix) with ESMTPSA id 54BB420DE498; Tue, 22 Mar 2022 09:20:37 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 54BB420DE498 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1647966038; bh=eHDccaFKEh+3mJqHnvmlIUC5j5r7USdMSPQ1gDL4T4s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UxYb0VmXPYpCGr9rIr1DxLWqLH26b2i33lytp/UJCRYc0CdRuYsrcdnKpRBFBPwlz kqQ8rCqQP3oPkRfExqeQuZ/fC2jewC4nVIada+oXfABuTose8MJQDxwCS7RjuJdKKC w44cFQ1V7I5wR2xPZHtiqi1ArOMxmRjUGK/IrioY= From: "Michael Kubacki" To: devel@edk2.groups.io Cc: Andrew Fish , Kang Gao , Michael D Kinney , Michael Kubacki , Leif Lindholm , Benjamin You , Liu Yun , Ankit Sinha , Nate DeSimone Subject: [PATCH v1 05/41] PrmPkg: Add initial PrmSamplePrintModule Date: Tue, 22 Mar 2022 12:19:11 -0400 Message-Id: <20220322161947.9319-6-mikuback@linux.microsoft.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20220322161947.9319-1-mikuback@linux.microsoft.com> References: <20220322161947.9319-1-mikuback@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Michael Kubacki REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3D3812 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 Cc: Kang Gao Cc: Michael D Kinney Cc: Michael Kubacki Cc: Leif Lindholm Cc: Benjamin You Cc: Liu Yun Cc: Ankit Sinha Cc: Nate DeSimone Signed-off-by: Michael Kubacki --- 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 han= dlers that simply take a DEBUG print + function from the OS and invoke it with a debug message internal the P= RM handler. + + Copyright (c) Microsoft Corporation + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include + +#include +#include + +// +// PRM Handler GUIDs +// + +// {d5f2ad5f-a347-4d3e-87bc-c2ce63029cc8} +#define PRM_HANDLER_1_GUID {0xd5f2ad5f, 0xa347, 0x4d3e, {0x87, 0xbc, 0xc= 2, 0xce, 0x63, 0x02, 0x9c, 0xc8}} + +// {a9e7adc3-8cd0-429a-8915-10946ebde318} +#define PRM_HANDLER_2_GUID {0xa9e7adc3, 0x8cd0, 0x429a, {0x89, 0x15, 0x= 10, 0x94, 0x6e, 0xbd, 0xe3, 0x18}} + +// {b688c214-4081-4eeb-8d26-1eb5a3bcf11a} +#define PRM_HANDLER_N_GUID {0xb688c214, 0x4081, 0x4eeb, {0x8d, 0x26, 0x1= e, 0xb5, 0xa3, 0xbc, 0xf1, 0x1a}} + +/** + A sample Platform Runtime Mechanism (PRM) handler. + + This sample handler currently uses the OS_SERVICES to write a debug me= ssage + 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 b= uffer + + @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 =3D=3D NULL) { + return EFI_INVALID_PARAMETER; + } + + // In the POC, the OS debug print service is assumed to be at the begi= nning of ParameterBuffer + OsServiceDebugPrint =3D *((PRM_OS_SERVICE_DEBUG_PRINT *) ParameterBuff= er); + if (OsServiceDebugPrint =3D=3D 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 me= ssage + 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 bu= ffer + + @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 =3D=3D NULL) { + return EFI_INVALID_PARAMETER; + } + + // In the POC, the OS debug print service is assumed to be at the begi= nning of ParameterBuffer + OsServiceDebugPrint =3D *((PRM_OS_SERVICE_DEBUG_PRINT *) ParameterBuff= er); + if (OsServiceDebugPrint =3D=3D 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 me= ssage + 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 bu= ffer + + @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 =3D=3D NULL) { + return EFI_INVALID_PARAMETER; + } + + // In the POC, the OS debug print service is assumed to be at the begi= nning of ParameterBuffer + OsServiceDebugPrint =3D *((PRM_OS_SERVICE_DEBUG_PRINT *) ParameterBuff= er); + if (OsServiceDebugPrint =3D=3D 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 un= ique +# debug message. +# +# Copyright (c) Microsoft Corporation +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D PrmSamplePrintModule + FILE_GUID =3D 1652B3C2-A7A1-46AC-AF93-DD6DEE44666= 9 + MODULE_TYPE =3D DXE_RUNTIME_DRIVER + VERSION_STRING =3D 1.0 + ENTRY_POINT =3D 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 =3D /DLL /SUBSYSTEM:CONSOLE --=20 2.28.0.windows.1