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