1 /** @file
2   IPMI Command - NetFnApp.
3 
4 Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6 
7 **/
8 
9 #include <PiPei.h>
10 #include <Library/BaseMemoryLib.h>
11 #include <Library/DebugLib.h>
12 #include <Library/IpmiLib.h>
13 
14 #include <IndustryStandard/Ipmi.h>
15 
16 EFI_STATUS
17 EFIAPI
IpmiGetDeviceId(OUT IPMI_GET_DEVICE_ID_RESPONSE * DeviceId)18 IpmiGetDeviceId (
19   OUT IPMI_GET_DEVICE_ID_RESPONSE  *DeviceId
20   )
21 {
22   EFI_STATUS                   Status;
23   UINT32                       DataSize;
24 
25   DataSize = sizeof(*DeviceId);
26   Status = IpmiSubmitCommand (
27              IPMI_NETFN_APP,
28              IPMI_APP_GET_DEVICE_ID,
29              NULL,
30              0,
31              (VOID *)DeviceId,
32              &DataSize
33              );
34   return Status;
35 }
36 
37 EFI_STATUS
38 EFIAPI
IpmiGetSelfTestResult(OUT IPMI_SELF_TEST_RESULT_RESPONSE * SelfTestResult)39 IpmiGetSelfTestResult (
40   OUT IPMI_SELF_TEST_RESULT_RESPONSE   *SelfTestResult
41   )
42 {
43   EFI_STATUS                   Status;
44   UINT32                       DataSize;
45 
46   DataSize = sizeof(*SelfTestResult);
47   Status = IpmiSubmitCommand (
48              IPMI_NETFN_APP,
49              IPMI_APP_GET_SELFTEST_RESULTS,
50              NULL,
51              0,
52              (VOID *)SelfTestResult,
53              &DataSize
54              );
55   return Status;
56 }
57 
58 EFI_STATUS
59 EFIAPI
IpmiResetWatchdogTimer(OUT UINT8 * CompletionCode)60 IpmiResetWatchdogTimer (
61   OUT UINT8                            *CompletionCode
62   )
63 {
64   EFI_STATUS                   Status;
65   UINT32                       DataSize;
66 
67   DataSize = sizeof(*CompletionCode);
68   Status = IpmiSubmitCommand (
69              IPMI_NETFN_APP,
70              IPMI_APP_RESET_WATCHDOG_TIMER,
71              NULL,
72              0,
73              (VOID *)CompletionCode,
74              &DataSize
75              );
76   return Status;
77 }
78 
79 EFI_STATUS
80 EFIAPI
IpmiSetWatchdogTimer(IN IPMI_SET_WATCHDOG_TIMER_REQUEST * SetWatchdogTimer,OUT UINT8 * CompletionCode)81 IpmiSetWatchdogTimer (
82   IN  IPMI_SET_WATCHDOG_TIMER_REQUEST  *SetWatchdogTimer,
83   OUT UINT8                            *CompletionCode
84   )
85 {
86   EFI_STATUS                   Status;
87   UINT32                       DataSize;
88 
89   DataSize = sizeof(*CompletionCode);
90   Status = IpmiSubmitCommand (
91              IPMI_NETFN_APP,
92              IPMI_APP_SET_WATCHDOG_TIMER,
93              (VOID *)SetWatchdogTimer,
94              sizeof(*SetWatchdogTimer),
95              (VOID *)CompletionCode,
96              &DataSize
97              );
98   return Status;
99 }
100 
101 EFI_STATUS
102 EFIAPI
IpmiGetWatchdogTimer(OUT IPMI_GET_WATCHDOG_TIMER_RESPONSE * GetWatchdogTimer)103 IpmiGetWatchdogTimer (
104   OUT IPMI_GET_WATCHDOG_TIMER_RESPONSE *GetWatchdogTimer
105   )
106 {
107   EFI_STATUS                   Status;
108   UINT32                       DataSize;
109 
110   DataSize = sizeof(*GetWatchdogTimer);
111   Status = IpmiSubmitCommand (
112              IPMI_NETFN_APP,
113              IPMI_APP_GET_WATCHDOG_TIMER,
114              NULL,
115              0,
116              (VOID *)GetWatchdogTimer,
117              &DataSize
118              );
119   return Status;
120 }
121 
122 EFI_STATUS
123 EFIAPI
IpmiSetBmcGlobalEnables(IN IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST * SetBmcGlobalEnables,OUT UINT8 * CompletionCode)124 IpmiSetBmcGlobalEnables (
125   IN  IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST  *SetBmcGlobalEnables,
126   OUT UINT8                                *CompletionCode
127   )
128 {
129   EFI_STATUS                   Status;
130   UINT32                       DataSize;
131 
132   DataSize = sizeof(*CompletionCode);
133   Status = IpmiSubmitCommand (
134              IPMI_NETFN_APP,
135              IPMI_APP_SET_BMC_GLOBAL_ENABLES,
136              (VOID *)SetBmcGlobalEnables,
137              sizeof(*SetBmcGlobalEnables),
138              (VOID *)CompletionCode,
139              &DataSize
140              );
141   return Status;
142 }
143 
144 EFI_STATUS
145 EFIAPI
IpmiGetBmcGlobalEnables(OUT IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE * GetBmcGlobalEnables)146 IpmiGetBmcGlobalEnables (
147   OUT IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE *GetBmcGlobalEnables
148   )
149 {
150   EFI_STATUS                   Status;
151   UINT32                       DataSize;
152 
153   DataSize = sizeof(*GetBmcGlobalEnables);
154   Status = IpmiSubmitCommand (
155              IPMI_NETFN_APP,
156              IPMI_APP_GET_BMC_GLOBAL_ENABLES,
157              NULL,
158              0,
159              (VOID *)GetBmcGlobalEnables,
160              &DataSize
161              );
162   return Status;
163 }
164 
165 EFI_STATUS
166 EFIAPI
IpmiClearMessageFlags(IN IPMI_CLEAR_MESSAGE_FLAGS_REQUEST * ClearMessageFlagsRequest,OUT UINT8 * CompletionCode)167 IpmiClearMessageFlags (
168   IN  IPMI_CLEAR_MESSAGE_FLAGS_REQUEST  *ClearMessageFlagsRequest,
169   OUT UINT8                             *CompletionCode
170   )
171 {
172   EFI_STATUS                   Status;
173   UINT32                       DataSize;
174 
175   DataSize = sizeof(*CompletionCode);
176   Status = IpmiSubmitCommand (
177              IPMI_NETFN_APP,
178              IPMI_APP_CLEAR_MESSAGE_FLAGS,
179              (VOID *)ClearMessageFlagsRequest,
180              sizeof(*ClearMessageFlagsRequest),
181              (VOID *)CompletionCode,
182              &DataSize
183              );
184   return Status;
185 }
186 
187 EFI_STATUS
188 EFIAPI
IpmiGetMessageFlags(OUT IPMI_GET_MESSAGE_FLAGS_RESPONSE * GetMessageFlagsResponse)189 IpmiGetMessageFlags (
190   OUT IPMI_GET_MESSAGE_FLAGS_RESPONSE *GetMessageFlagsResponse
191   )
192 {
193   EFI_STATUS                   Status;
194   UINT32                       DataSize;
195 
196   DataSize = sizeof(*GetMessageFlagsResponse);
197   Status = IpmiSubmitCommand (
198              IPMI_NETFN_APP,
199              IPMI_APP_GET_MESSAGE_FLAGS,
200              NULL,
201              0,
202              (VOID *)GetMessageFlagsResponse,
203              &DataSize
204              );
205   return Status;
206 }
207 
208 EFI_STATUS
209 EFIAPI
IpmiGetMessage(OUT IPMI_GET_MESSAGE_RESPONSE * GetMessageResponse,IN OUT UINT32 * GetMessageResponseSize)210 IpmiGetMessage (
211   OUT IPMI_GET_MESSAGE_RESPONSE *GetMessageResponse,
212   IN OUT UINT32                 *GetMessageResponseSize
213   )
214 {
215   EFI_STATUS                   Status;
216 
217   Status = IpmiSubmitCommand (
218              IPMI_NETFN_APP,
219              IPMI_APP_GET_MESSAGE,
220              NULL,
221              0,
222              (VOID *)GetMessageResponse,
223              GetMessageResponseSize
224              );
225   return Status;
226 }
227 
228 EFI_STATUS
229 EFIAPI
IpmiSendMessage(IN IPMI_SEND_MESSAGE_REQUEST * SendMessageRequest,IN UINT32 SendMessageRequestSize,OUT IPMI_SEND_MESSAGE_RESPONSE * SendMessageResponse,IN OUT UINT32 * SendMessageResponseSize)230 IpmiSendMessage (
231   IN  IPMI_SEND_MESSAGE_REQUEST  *SendMessageRequest,
232   IN  UINT32                     SendMessageRequestSize,
233   OUT IPMI_SEND_MESSAGE_RESPONSE *SendMessageResponse,
234   IN OUT UINT32                  *SendMessageResponseSize
235   )
236 {
237   EFI_STATUS                   Status;
238 
239   Status = IpmiSubmitCommand (
240              IPMI_NETFN_APP,
241              IPMI_APP_SEND_MESSAGE,
242              (VOID *)SendMessageRequest,
243              SendMessageRequestSize,
244              (VOID *)SendMessageResponse,
245              SendMessageResponseSize
246              );
247   return Status;
248 }
249