1 /** @file
2   IPMI Command - NetFnChassis.
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 
17 EFI_STATUS
18 EFIAPI
IpmiGetChassisCapabilities(OUT IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE * GetChassisCapabilitiesResponse)19 IpmiGetChassisCapabilities (
20   OUT IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE  *GetChassisCapabilitiesResponse
21   )
22 {
23   EFI_STATUS                   Status;
24   UINT32                       DataSize;
25 
26   DataSize = sizeof(*GetChassisCapabilitiesResponse);
27   Status = IpmiSubmitCommand (
28              IPMI_NETFN_CHASSIS,
29              IPMI_CHASSIS_GET_CAPABILITIES,
30              NULL,
31              0,
32              (VOID *)GetChassisCapabilitiesResponse,
33              &DataSize
34              );
35   return Status;
36 }
37 
38 EFI_STATUS
39 EFIAPI
IpmiGetChassisStatus(OUT IPMI_GET_CHASSIS_STATUS_RESPONSE * GetChassisStatusResponse)40 IpmiGetChassisStatus (
41   OUT IPMI_GET_CHASSIS_STATUS_RESPONSE  *GetChassisStatusResponse
42   )
43 {
44   EFI_STATUS                   Status;
45   UINT32                       DataSize;
46 
47   DataSize = sizeof(*GetChassisStatusResponse);
48   Status = IpmiSubmitCommand (
49              IPMI_NETFN_CHASSIS,
50              IPMI_CHASSIS_GET_STATUS,
51              NULL,
52              0,
53              (VOID *)GetChassisStatusResponse,
54              &DataSize
55              );
56   return Status;
57 }
58 
59 EFI_STATUS
60 EFIAPI
IpmiChassisControl(IN IPMI_CHASSIS_CONTROL_REQUEST * ChassisControlRequest,OUT UINT8 * CompletionCode)61 IpmiChassisControl (
62   IN IPMI_CHASSIS_CONTROL_REQUEST  *ChassisControlRequest,
63   OUT UINT8                        *CompletionCode
64   )
65 {
66   EFI_STATUS                   Status;
67   UINT32                       DataSize;
68 
69   DataSize = sizeof(*CompletionCode);
70   Status = IpmiSubmitCommand (
71              IPMI_NETFN_CHASSIS,
72              IPMI_CHASSIS_CONTROL,
73              (VOID *)ChassisControlRequest,
74              sizeof(*ChassisControlRequest),
75              (VOID *)CompletionCode,
76              &DataSize
77              );
78   return Status;
79 }
80 
81 EFI_STATUS
82 EFIAPI
IpmiSetPowerRestorePolicy(IN IPMI_SET_POWER_RESTORE_POLICY_REQUEST * ChassisControlRequest,OUT IPMI_SET_POWER_RESTORE_POLICY_RESPONSE * ChassisControlResponse)83 IpmiSetPowerRestorePolicy (
84   IN  IPMI_SET_POWER_RESTORE_POLICY_REQUEST  *ChassisControlRequest,
85   OUT IPMI_SET_POWER_RESTORE_POLICY_RESPONSE *ChassisControlResponse
86   )
87 {
88   EFI_STATUS                   Status;
89   UINT32                       DataSize;
90 
91   DataSize = sizeof(*ChassisControlResponse);
92   Status = IpmiSubmitCommand (
93              IPMI_NETFN_CHASSIS,
94              IPMI_CHASSIS_SET_POWER_RESTORE_POLICY,
95              (VOID *)ChassisControlRequest,
96              sizeof(*ChassisControlRequest),
97              (VOID *)ChassisControlResponse,
98              &DataSize
99              );
100   return Status;
101 }
102