1 /** @file
2   IPMI 2.0 definitions from the IPMI Specification Version 2.0, Revision 1.1.
3 
4   This file contains all NetFn Chassis commands, including:
5     Chassis Commands (Chapter 28)
6 
7   See IPMI specification, Appendix G, Command Assignments
8   and Appendix H, Sub-function Assignments.
9 
10   Copyright (c) 1999 - 2015, Intel Corporation. All rights reserved.<BR>
11   This program and the accompanying materials
12   are licensed and made available under the terms and conditions of the BSD License
13   which accompanies this distribution.  The full text of the license may be found at
14   http://opensource.org/licenses/bsd-license.php
15 
16   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
17   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
18 **/
19 
20 #ifndef _IPMI_NET_FN_CHASSIS_H_
21 #define _IPMI_NET_FN_CHASSIS_H_
22 
23 #pragma pack (1)
24 //
25 // Net function definition for Chassis command
26 //
27 #define IPMI_NETFN_CHASSIS  0x00
28 
29 //
30 //  Below is Definitions for Chassis commands (Chapter 28)
31 //
32 
33 //
34 //  Definitions for Get Chassis Capabilities command
35 //
36 #define IPMI_CHASSIS_GET_CAPABILITIES  0x00
37 
38 //
39 //  Constants and Structure definitions for "Get Chassis Capabilities" command to follow here
40 //
41 
42 //
43 //  Definitions for Get Chassis Status command
44 //
45 #define IPMI_CHASSIS_GET_STATUS  0x01
46 
47 //
48 //  Constants and Structure definitions for "Get Chassis Status" command to follow here
49 //
50 
51 //
52 //  Definitions for Chassis Control command
53 //
54 #define IPMI_CHASSIS_CONTROL 0x02
55 
56 //
57 //  Constants and Structure definitions for "Chassis Control" command to follow here
58 //
59 
60 //
61 //  Definitions for Chassis Reset command
62 //
63 #define IPMI_CHASSIS_RESET 0x03
64 
65 //
66 //  Constants and Structure definitions for "Chassis Reset" command to follow here
67 //
68 
69 //
70 //  Definitions for Chassis Identify command
71 //
72 #define IPMI_CHASSIS_IDENTIFY  0x04
73 
74 //
75 //  Constants and Structure definitions for "Chassis Identify" command to follow here
76 //
77 
78 //
79 //  Definitions for Set Chassis Capabilities command
80 //
81 #define IPMI_CHASSIS_SET_CAPABILITIES  0x05
82 
83 //
84 //  Constants and Structure definitions for "Set Chassis Capabilities" command to follow here
85 //
86 
87 //
88 //  Definitions for Set Power Restore Policy command
89 //
90 #define IPMI_CHASSIS_SET_POWER_RESTORE_POLICY  0x06
91 
92 //
93 //  Constants and Structure definitions for "Set Power Restore Policy" command to follow here
94 //
95 
96 //
97 //  Definitions for Get System Restart Cause command
98 //
99 #define IPMI_CHASSIS_GET_SYSTEM_RESTART_CAUSE  0x07
100 
101 //
102 //  Constants and Structure definitions for "Get System Restart Cause" command to follow here
103 //
104 typedef enum {
105   Unknown,
106   ChassisControlCommand,
107   ResetViaPushButton,
108   PowerupViaPowerButton,
109   WatchdogExpiration,
110   Oem,
111   AutoPowerOnAlwaysRestore,
112   AutoPowerOnRestorePrevious,
113   ResetViaPef,
114   PowerCycleViaPef,
115   SoftReset,
116   PowerUpViaRtc
117 } IPMI_SYSTEM_RESTART_CAUSE;
118 
119 typedef struct {
120   UINT8  CompletionCode;
121   UINT8  Cause:4;
122   UINT8  Reserved:4;
123   UINT8  ChannelNumber;
124 } IPMI_GET_SYSTEM_RESTART_CAUSE_RESPONSE;
125 
126 //
127 //  Definitions for Set System BOOT options command
128 //
129 #define IPMI_CHASSIS_SET_SYSTEM_BOOT_OPTIONS 0x08
130 
131 //
132 //  Constants and Structure definitions for "Set System boot options" command to follow here
133 //
134 typedef struct {
135   UINT8    ParameterSelector:7;
136   UINT8    MarkParameterInvalid:1;
137   UINT8    ParameterData[1];
138 } IPMI_SET_BOOT_OPTIONS_REQUEST;
139 
140 //
141 //  Definitions for Get System BOOT options command
142 //
143 #define IPMI_CHASSIS_GET_SYSTEM_BOOT_OPTIONS 0x09
144 
145 //
146 //  Constants and Structure definitions for "Get System boot options" command to follow here
147 //
148 typedef struct {
149   UINT8    ParameterSelector:7;
150   UINT8    Reserved:1;
151   UINT8    SetSelector;
152   UINT8    BlockSelector;
153 } IPMI_GET_BOOT_OPTIONS_REQUEST;
154 
155 typedef struct {
156   UINT8 Parameter;
157   UINT8 Valid;
158   UINT8 Data1;
159   UINT8 Data2;
160   UINT8 Data3;
161   UINT8 Data4;
162   UINT8 Data5;
163 } IPMI_GET_THE_SYSTEM_BOOT_OPTIONS;
164 
165 typedef struct {
166   UINT8   ParameterVersion;
167   UINT8   ParameterValid;
168   UINT8   ChannelNumber;
169   UINT32  SessionId;
170   UINT32  TimeStamp;
171   UINT8   Reserved[3];
172 } IPMI_BOOT_INITIATOR;
173 
174 //
175 // Response Parameters for IPMI Get Boot Options
176 //
177 typedef struct {
178   UINT8   SetInProgress: 2;
179   UINT8   Reserved: 6;
180 } IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_0;
181 
182 typedef struct {
183   UINT8   ServicePartitionSelector;
184 } IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_1;
185 
186 typedef struct {
187   UINT8   ServicePartitionDiscovered:1;
188   UINT8   ServicePartitionScanRequest:1;
189   UINT8   Reserved: 5;
190 } IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_2;
191 
192 typedef struct {
193   UINT8   BmcBootFlagValid: 5;
194   UINT8   Reserved: 3;
195 } IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_3;
196 
197 typedef struct {
198   UINT8   WriteMask;
199   UINT8   BootInitiatorAcknowledgeData;
200 } IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_4;
201 
202 #define BOOT_OPTION_HANDLED_BY_BIOS 0x01
203 
204 typedef struct {
205   //
206   // Data 1
207   //
208   UINT8   Reserved0:6;
209   UINT8   PersistentOptions:1;
210   UINT8   BootFlagValid:1;
211   //
212   // Data 2
213   //
214   UINT8   LockReset:1;
215   UINT8   ScreenBlank:1;
216   UINT8   BootDeviceSelector:4;
217   UINT8   LockKeyboard:1;
218   UINT8   CmosClear:1;
219   //
220   //
221   // Data 3
222   UINT8   ConsoleRedirection:2;
223   UINT8   LockSleep:1;
224   UINT8   UserPasswordBypass:1;
225   UINT8   ForceProgressEventTrap:1;
226   UINT8   BiosVerbosity:2;
227   UINT8   LockPower:1;
228   //
229   // Data 4
230   //
231   UINT8   BiosMuxControlOverride:2;
232   UINT8   BiosSharedModeOverride:1;
233   UINT8   Reserved1:4;
234 } IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_5;
235 
236 typedef struct {
237   UINT8   ChannelNumber:4;
238   UINT8   Reserved:4;
239   UINT8   SessionId[4];
240   UINT8   BootInfoTimeStamp[4];
241 } IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_6;
242 
243 typedef struct {
244   UINT8   SetSelector;
245   UINT8   BlockData[16];
246 } IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_7;
247 
248 typedef union {
249   IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_0   Parm0;
250   IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_1   Parm1;
251   IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_2   Parm2;
252   IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_3   Parm3;
253   IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_4   Parm4;
254   IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_5   Parm5;
255   IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_6   Parm6;
256   IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_7   Parm7;
257 } IPMI_BOOT_OPTIONS_PARAMETERS;
258 
259 typedef struct {
260   UINT8    CompletionCode;
261   UINT8    ParameterVersion:4;
262   UINT8    Reserved:4;
263   UINT8    ParameterSelector:7;
264   UINT8    ParameterValid:1;
265   UINT8    ParameterData[1];
266 } IPMI_GET_BOOT_OPTIONS_RESPONSE;
267 
268 //
269 //  Definitions for Set front panel button enables command
270 //
271 #define IPMI_CHASSIS_SET_FRONT_PANEL_BUTTON_ENABLES 0x0A
272 
273 typedef struct {
274   UINT8    DisablePoweroffButton:1;
275   UINT8    DisableResetButton:1;
276   UINT8    DisableDiagnosticInterruptButton:1;
277   UINT8    DisableStandbyButton:1;
278   UINT8    Reserved:4;
279 } IPMI_CHASSIS_SET_FRONT_PANEL_BUTTON_ENABLES_REQUEST;
280 
281 //
282 //  Constants and Structure definitions for "Set front panel button enables" command to follow here
283 //
284 
285 //
286 //  Definitions for Set Power Cycle Interval command
287 //
288 #define IPMI_CHASSIS_SET_POWER_CYCLE_INTERVALS 0x0B
289 
290 //
291 //  Constants and Structure definitions for "Set Power Cycle Interval" command to follow here
292 //
293 
294 //
295 //  Definitions for Get POH Counter command
296 //
297 #define IPMI_CHASSIS_GET_POH_COUNTER 0x0F
298 
299 //
300 //  Constants and Structure definitions for "Get POH Counter" command to follow here
301 //
302 #pragma pack()
303 #endif
304