+++ /dev/null
-/** @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
faster build time. If you would like to just build a single PRM module that can be done by specifying the path to\r
the module INF file with the "-m" argument to `build`. For example, this command builds 32-bit and 64-bit binaries\r
with Visual Studio 2019: \\r
-``build -p PrmPkg/PrmPkg.dsc -m PrmPkg/Samples/PrmSamplePrintModule/PrmSamplePrintModule.inf -a IA32 -a X64 -t VS2019``\r
+``build -p PrmPkg/PrmPkg.dsc -m PrmPkg/Samples/PrmSampleContextBufferModule/PrmSampleContextBufferModule.inf -a IA32 -a X64 -t VS2019``\r
\r
## PRM Sample Module User's Guide\r
\r
and interact with their PRM modules.\r
\r
---\r
-### Module: PRM Sample Print Module\r
->* Name: `PrmSamplePrintModule`\r
->* GUID: `1652b3c2-a7a1-46ac-af93-dd6dee446669`\r
-> * Purpose:\r
-> * Simplest PRM module example\r
-> * Example of a PRM module with multiple PRM handlers\r
-\r
-**Handlers:**\r
-#### Handler: PRM Handler 1\r
-* Name: `PrmHandler1`\r
-* GUID: `d5f2ad5f-a347-4d3e-87bc-c2ce63029cc8`\r
-* Actions:\r
- * Use an OS-provided function pointer (pointer at the beginning of the parameter buffer) to write the message\r
- “PRM1 handler sample message!”\r
-\r
-* Parameter Buffer Required: Yes\r
-* Parameter Buffer Contents:\r
- ```c\r
- typedef struct {\r
-\r
- PRM_OS_SERVICE_DEBUG_PRINT *\r
-\r
- } SAMPLE_OSDEBUGPRINT_PARAMETER_BUFFER;\r
- ```\r
-\r
-* Context Buffer Required: No\r
-\r
-* Runtime MMIO Range(s) Required: No\r
-\r
-#### Handler: PRM Handler 2\r
-* Name: `PrmHandler2`\r
-* GUID: `a9e7adc3-8cd0-429a-8915-10946ebde318`\r
-* Actions:\r
- * Use an OS-provided function pointer (pointer at the beginning of the parameter buffer) to write the message\r
- “PRM2 handler sample message!”\r
-\r
-* Parameter Buffer Required: Yes\r
-* Parameter Buffer Contents:\r
- ```c\r
- typedef struct {\r
-\r
- PRM_OS_SERVICE_DEBUG_PRINT *\r
-\r
- } SAMPLE_OSDEBUGPRINT_PARAMETER_BUFFER;\r
- ```\r
-\r
-* Context Buffer Required: No\r
-\r
-* Runtime MMIO Range(s) Required: No\r
-\r
-#### Handler: PRM Handler N\r
-* Name: `PrmHandlerN`\r
-* GUID: `b688c214-4081-4eeb-8d26-1eb5a3bcf11a`\r
-* Actions:\r
- * Use an OS-provided function pointer (pointer at the beginning of the parameter buffer) to write the message\r
- “PRMN handler sample message!”\r
-\r
-* Parameter Buffer Required: Yes\r
-* Parameter Buffer Contents:\r
- ```c\r
- typedef struct {\r
-\r
- PRM_OS_SERVICE_DEBUG_PRINT *\r
-\r
- } SAMPLE_OSDEBUGPRINT_PARAMETER_BUFFER;\r
- ```\r
-\r
-* Context Buffer Required: No\r
-\r
-* Runtime MMIO Range(s) Required: No\r
-\r
### Module: PRM Sample ACPI Parameter Buffer\r
>* Name: `PrmSampleAcpiParameterBufferModule`\r
>* GUID: `dc2a58a6-5927-4776-b995-d118a27335a2`\r