summaryrefslogtreecommitdiffstats
path: root/PrmPkg/Samples/PrmSampleAcpiParameterBufferModule/PrmSampleAcpiParameterBufferModule.c
diff options
context:
space:
mode:
Diffstat (limited to 'PrmPkg/Samples/PrmSampleAcpiParameterBufferModule/PrmSampleAcpiParameterBufferModule.c')
-rw-r--r--PrmPkg/Samples/PrmSampleAcpiParameterBufferModule/PrmSampleAcpiParameterBufferModule.c79
1 files changed, 79 insertions, 0 deletions
diff --git a/PrmPkg/Samples/PrmSampleAcpiParameterBufferModule/PrmSampleAcpiParameterBufferModule.c b/PrmPkg/Samples/PrmSampleAcpiParameterBufferModule/PrmSampleAcpiParameterBufferModule.c
new file mode 100644
index 0000000000..ebb5ba01a3
--- /dev/null
+++ b/PrmPkg/Samples/PrmSampleAcpiParameterBufferModule/PrmSampleAcpiParameterBufferModule.c
@@ -0,0 +1,79 @@
+/** @file
+
+ This PRM Module demonstrates how to define an ACPI parameter buffer that is used by a PRM handler.
+
+ Copyright (c) Microsoft Corporation
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <PrmModule.h>
+
+#include <Library/BaseLib.h>
+#include <Library/UefiLib.h>
+
+// TEMP
+#include <Library/DebugLib.h>
+
+#define PARAM_BUFFER_TEST_SIGNATURE SIGNATURE_32('T','E','S','T')
+
+//
+// PRM Handler GUIDs
+//
+
+// {2e4f2d13-6240-4ed0-a401-c723fbdc34e8}
+#define CHECK_PARAM_BUFFER_PRM_HANDLER_GUID {0x2e4f2d13, 0x6240, 0x4ed0, {0xa4, 0x01, 0xc7, 0x23, 0xfb, 0xdc, 0x34, 0xe8}}
+
+/**
+ A sample Platform Runtime Mechanism (PRM) handler.
+
+ This sample handler checks if a parameter buffer is provided with the data signature
+ ('T', 'E', 'S', 'T') at the beginning of the buffer.
+
+ The contents are expected to be updated by ACPI code at OS runtime.
+
+ @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.
+
+**/
+PRM_HANDLER_EXPORT (CheckParamBufferPrmHandler)
+{
+ if (ParameterBuffer == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ if (*((UINT32 *) ParameterBuffer) == PARAM_BUFFER_TEST_SIGNATURE) {
+ return EFI_SUCCESS;
+ }
+
+ return EFI_NOT_FOUND;
+}
+
+//
+// Register the PRM export information for this PRM Module
+//
+PRM_MODULE_EXPORT (
+ PRM_HANDLER_EXPORT_ENTRY (CHECK_PARAM_BUFFER_PRM_HANDLER_GUID, CheckParamBufferPrmHandler)
+ );
+
+/**
+ Module entry point.
+
+ @param[in] ImageHandle The image handle.
+ @param[in] SystemTable A pointer to the system table.
+
+ @retval EFI_SUCCESS This function always returns success.
+
+**/
+EFI_STATUS
+EFIAPI
+PrmSampleAcpiParameterBufferModuleInit (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ return EFI_SUCCESS;
+}