summaryrefslogtreecommitdiffstats
path: root/PrmPkg/Samples/PrmSamplePrintModule/PrmSamplePrintModule.c
blob: 85e8eb28a2316c7a1e88752fd9633914daf62de5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
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;
}