]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/IndustryStandard/IpmiNetFnApp.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdePkg / Include / IndustryStandard / IpmiNetFnApp.h
index c0865dae41bdb711c41610b99734a93a1b005144..a5835ba08c00bfcc4cf6366147a48d91614aeb9c 100644 (file)
   See IPMI specification, Appendix G, Command Assignments\r
   and Appendix H, Sub-function Assignments.\r
 \r
-  Copyright (c) 1999 - 2015, Intel Corporation. All rights reserved.<BR>\r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  Copyright (c) 1999 - 2018, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 **/\r
 \r
 #ifndef _IPMI_NET_FN_APP_H_\r
 //\r
 //  Definitions for Get Device ID command\r
 //\r
-#define IPMI_APP_GET_DEVICE_ID 0x1\r
+#define IPMI_APP_GET_DEVICE_ID  0x1\r
 \r
 //\r
 //  Constants and Structure definitions for "Get Device ID" command to follow here\r
 //\r
-typedef struct {\r
-  UINT8   DeviceId;\r
-  UINT8   DeviceRevision : 4;\r
-  UINT8   Reserved : 3;\r
-  UINT8   DeviceSdr : 1;\r
-  UINT8   MajorFirmwareRev : 7;\r
-  UINT8   UpdateMode : 1;\r
-  UINT8   MinorFirmwareRev;\r
-  UINT8   SpecificationVersion;\r
-  UINT8   SensorDeviceSupport : 1;\r
-  UINT8   SdrRepositorySupport : 1;\r
-  UINT8   SelDeviceSupport : 1;\r
-  UINT8   FruInventorySupport : 1;\r
-  UINT8   IpmbMessageReceiver : 1;\r
-  UINT8   IpmbMessageGenerator : 1;\r
-  UINT8   BridgeSupport : 1;\r
-  UINT8   ChassisSupport : 1;\r
-  UINT8   ManufacturerId[3];\r
-  UINT16  ProductId;\r
-  UINT32  AuxFirmwareRevInfo;\r
-} IPMI_MSG_GET_DEVICE_ID_RSP;\r
+typedef union {\r
+  struct {\r
+    UINT8    DeviceRevision : 4;\r
+    UINT8    Reserved       : 3;\r
+    UINT8    DeviceSdr      : 1;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_GET_DEVICE_ID_DEVICE_REV;\r
+\r
+typedef union {\r
+  struct {\r
+    UINT8    MajorFirmwareRev : 7;\r
+    UINT8    UpdateMode       : 1;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_GET_DEVICE_ID_FIRMWARE_REV_1;\r
+\r
+typedef union {\r
+  struct {\r
+    UINT8    SensorDeviceSupport  : 1;\r
+    UINT8    SdrRepositorySupport : 1;\r
+    UINT8    SelDeviceSupport     : 1;\r
+    UINT8    FruInventorySupport  : 1;\r
+    UINT8    IpmbMessageReceiver  : 1;\r
+    UINT8    IpmbMessageGenerator : 1;\r
+    UINT8    BridgeSupport        : 1;\r
+    UINT8    ChassisSupport       : 1;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_GET_DEVICE_ID_DEVICE_SUPPORT;\r
 \r
+typedef struct {\r
+  UINT8                                CompletionCode;\r
+  UINT8                                DeviceId;\r
+  IPMI_GET_DEVICE_ID_DEVICE_REV        DeviceRevision;\r
+  IPMI_GET_DEVICE_ID_FIRMWARE_REV_1    FirmwareRev1;\r
+  UINT8                                MinorFirmwareRev;\r
+  UINT8                                SpecificationVersion;\r
+  IPMI_GET_DEVICE_ID_DEVICE_SUPPORT    DeviceSupport;\r
+  UINT8                                ManufacturerId[3];\r
+  UINT16                               ProductId;\r
+  UINT32                               AuxFirmwareRevInfo;\r
+} IPMI_GET_DEVICE_ID_RESPONSE;\r
 \r
 //\r
 //  Definitions for Cold Reset command\r
@@ -89,30 +105,31 @@ typedef struct {
 #define IPMI_APP_GET_SELFTEST_RESULTS  0x4\r
 \r
 //\r
-//  Constants and Structure definitions for "Get Self Results" command to follow here\r
+//  Constants and Structure definitions for "Get Self Test Results" command to follow here\r
 //\r
 typedef struct {\r
-  UINT8  Result;\r
-  UINT8  Param;\r
-} IPMI_MSG_SELFTEST_RESULT_RSP;\r
-\r
-#define IPMI_APP_SELFTEST_NO_ERROR             0x55\r
-#define IPMI_APP_SELFTEST_NOT_IMPLEMENTED      0x56\r
-#define IPMI_APP_SELFTEST_ERROR                0x57\r
-#define IPMI_APP_SELFTEST_FATAL_HW_ERROR       0x58\r
-#define IPMI_APP_SELFTEST_INACCESSIBLE_SEL     0x80\r
-#define IPMI_APP_SELFTEST_INACCESSIBLE_SDR     0x40\r
-#define IPMI_APP_SELFTEST_INACCESSIBLE_FRU     0x20\r
-#define IPMI_APP_SELFTEST_IPMB_SIGNAL_FAIL     0x10\r
-#define IPMI_APP_SELFTEST_SDR_REPOSITORY_EMPTY 0x08\r
-#define IPMI_APP_SELFTEST_FRU_CORRUPT          0x04\r
-#define IPMI_APP_SELFTEST_FW_BOOTBLOCK_CORRUPT 0x02\r
-#define IPMI_APP_SELFTEST_FW_CORRUPT           0x01\r
+  UINT8    CompletionCode;\r
+  UINT8    Result;\r
+  UINT8    Param;\r
+} IPMI_SELF_TEST_RESULT_RESPONSE;\r
+\r
+#define IPMI_APP_SELFTEST_NO_ERROR              0x55\r
+#define IPMI_APP_SELFTEST_NOT_IMPLEMENTED       0x56\r
+#define IPMI_APP_SELFTEST_ERROR                 0x57\r
+#define IPMI_APP_SELFTEST_FATAL_HW_ERROR        0x58\r
+#define IPMI_APP_SELFTEST_INACCESSIBLE_SEL      0x80\r
+#define IPMI_APP_SELFTEST_INACCESSIBLE_SDR      0x40\r
+#define IPMI_APP_SELFTEST_INACCESSIBLE_FRU      0x20\r
+#define IPMI_APP_SELFTEST_IPMB_SIGNAL_FAIL      0x10\r
+#define IPMI_APP_SELFTEST_SDR_REPOSITORY_EMPTY  0x08\r
+#define IPMI_APP_SELFTEST_FRU_CORRUPT           0x04\r
+#define IPMI_APP_SELFTEST_FW_BOOTBLOCK_CORRUPT  0x02\r
+#define IPMI_APP_SELFTEST_FW_CORRUPT            0x01\r
 \r
 //\r
 //  Definitions for Manufacturing Test ON command\r
 //\r
-#define IPMI_APP_MANUFACTURING_TEST_ON 0x5\r
+#define IPMI_APP_MANUFACTURING_TEST_ON  0x5\r
 \r
 //\r
 //  Constants and Structure definitions for "Manufacturing Test ON" command to follow here\r
@@ -121,22 +138,65 @@ typedef struct {
 //\r
 //  Definitions for Set ACPI Power State command\r
 //\r
-#define IPMI_APP_SET_ACPI_POWERSTATE 0x6\r
+#define IPMI_APP_SET_ACPI_POWERSTATE  0x6\r
 \r
 //\r
 //  Constants and Structure definitions for "Set ACPI Power State" command to follow here\r
 //\r
-typedef struct {\r
-  UINT8 SystemPowerState : 7;\r
-  UINT8 SystemStateChange : 1;\r
-  UINT8 DevicePowerState : 7;\r
-  UINT8 DeviceStateChange : 1;\r
+\r
+//\r
+//  Definitions for System Power State\r
+//\r
+// Working\r
+#define IPMI_SYSTEM_POWER_STATE_S0_G0  0x0\r
+#define IPMI_SYSTEM_POWER_STATE_S1     0x1\r
+#define IPMI_SYSTEM_POWER_STATE_S2     0x2\r
+#define IPMI_SYSTEM_POWER_STATE_S3     0x3\r
+#define IPMI_SYSTEM_POWER_STATE_S4     0x4\r
+// Soft off\r
+#define IPMI_SYSTEM_POWER_STATE_S5_G2  0x5\r
+// Sent when message source cannot differentiate between S4 and S5\r
+#define IPMI_SYSTEM_POWER_STATE_S4_S5  0x6\r
+// Mechanical off\r
+#define IPMI_SYSTEM_POWER_STATE_G3  0x7\r
+// Sleeping - cannot differentiate between S1-S3\r
+#define IPMI_SYSTEM_POWER_STATE_SLEEPING  0x8\r
+// Sleeping - cannot differentiate between S1-S4\r
+#define IPMI_SYSTEM_POWER_STATE_G1_SLEEPING  0x9\r
+// S5 entered by override\r
+#define IPMI_SYSTEM_POWER_STATE_OVERRIDE    0xA\r
+#define IPMI_SYSTEM_POWER_STATE_LEGACY_ON   0x20\r
+#define IPMI_SYSTEM_POWER_STATE_LEGACY_OFF  0x21\r
+#define IPMI_SYSTEM_POWER_STATE_UNKNOWN     0x2A\r
+#define IPMI_SYSTEM_POWER_STATE_NO_CHANGE   0x7F\r
+\r
+//\r
+//  Definitions for Device Power State\r
+//\r
+#define IPMI_DEVICE_POWER_STATE_D0         0x0\r
+#define IPMI_DEVICE_POWER_STATE_D1         0x1\r
+#define IPMI_DEVICE_POWER_STATE_D2         0x2\r
+#define IPMI_DEVICE_POWER_STATE_D3         0x3\r
+#define IPMI_DEVICE_POWER_STATE_UNKNOWN    0x2A\r
+#define IPMI_DEVICE_POWER_STATE_NO_CHANGE  0x7F\r
+\r
+typedef union {\r
+  struct {\r
+    UINT8    PowerState  : 7;\r
+    UINT8    StateChange : 1;\r
+  } Bits;\r
+  UINT8    Uint8;\r
 } IPMI_ACPI_POWER_STATE;\r
 \r
+typedef struct {\r
+  IPMI_ACPI_POWER_STATE    SystemPowerState;\r
+  IPMI_ACPI_POWER_STATE    DevicePowerState;\r
+} IPMI_SET_ACPI_POWER_STATE_REQUEST;\r
+\r
 //\r
 //  Definitions for Get ACPI Power State command\r
 //\r
-#define IPMI_APP_GET_ACPI_POWERSTATE 0x7\r
+#define IPMI_APP_GET_ACPI_POWERSTATE  0x7\r
 \r
 //\r
 //  Constants and Structure definitions for "Get ACPI Power State" command to follow here\r
@@ -145,7 +205,7 @@ typedef struct {
 //\r
 //  Definitions for Get Device GUID command\r
 //\r
-#define IPMI_APP_GET_DEVICE_GUID 0x8\r
+#define IPMI_APP_GET_DEVICE_GUID  0x8\r
 \r
 //\r
 //  Constants and Structure definitions for "Get Device GUID" command to follow here\r
@@ -154,8 +214,9 @@ typedef struct {
 //  Message structure definition for "Get Device Guid" IPMI command\r
 //\r
 typedef struct {\r
-  UINT8 Guid[16];\r
-} IPMI_MSG_GET_DEVICE_GUID_RSP;\r
+  UINT8    CompletionCode;\r
+  UINT8    Guid[16];\r
+} IPMI_GET_DEVICE_GUID_RESPONSE;\r
 \r
 //\r
 //  Below is Definitions for BMC Watchdog Timer Commands (Chapter 27)\r
@@ -167,30 +228,81 @@ typedef struct {
 #define IPMI_APP_RESET_WATCHDOG_TIMER  0x22\r
 \r
 //\r
-//  Constants and Structure definitions for "Reset WatchDog Timer" command to follow here\r
+//  Definitions for Set WatchDog Timer command\r
 //\r
-typedef struct {\r
-  UINT8 TimerUse : 3;\r
-  UINT8 Reserved : 3;\r
-  UINT8 TimerRunning : 1;\r
-  UINT8 TimerUseExpirationFlagLog : 1;\r
+#define IPMI_APP_SET_WATCHDOG_TIMER  0x24\r
+\r
+//\r
+//  Constants and Structure definitions for "Set WatchDog Timer" command to follow here\r
+//\r
+\r
+//\r
+// Definitions for watchdog timer use\r
+//\r
+#define IPMI_WATCHDOG_TIMER_BIOS_FRB2  0x1\r
+#define IPMI_WATCHDOG_TIMER_BIOS_POST  0x2\r
+#define IPMI_WATCHDOG_TIMER_OS_LOADER  0x3\r
+#define IPMI_WATCHDOG_TIMER_SMS        0x4\r
+#define IPMI_WATCHDOG_TIMER_OEM        0x5\r
+\r
+//\r
+//  Structure definition for timer Use\r
+//\r
+typedef union {\r
+  struct {\r
+    UINT8    TimerUse                  : 3;\r
+    UINT8    Reserved                  : 3;\r
+    UINT8    TimerRunning              : 1;\r
+    UINT8    TimerUseExpirationFlagLog : 1;\r
+  } Bits;\r
+  UINT8    Uint8;\r
 } IPMI_WATCHDOG_TIMER_USE;\r
 \r
 //\r
-//  Definitions for Set WatchDog Timer command\r
+//  Definitions for watchdog timeout action\r
 //\r
-#define IPMI_APP_SET_WATCHDOG_TIMER  0x24\r
+#define IPMI_WATCHDOG_TIMER_ACTION_NO_ACTION    0x0\r
+#define IPMI_WATCHDOG_TIMER_ACTION_HARD_RESET   0x1\r
+#define IPMI_WATCHDOG_TIMER_ACTION_POWER_DONW   0x2\r
+#define IPMI_WATCHDOG_TIMER_ACTION_POWER_CYCLE  0x3\r
 \r
 //\r
-//  Constants and Structure definitions for "Set WatchDog Timer" command to follow here\r
+//  Definitions for watchdog pre-timeout interrupt\r
+//\r
+#define IPMI_WATCHDOG_PRE_TIMEOUT_INTERRUPT_NONE       0x0\r
+#define IPMI_WATCHDOG_PRE_TIMEOUT_INTERRUPT_SMI        0x1\r
+#define IPMI_WATCHDOG_PRE_TIMEOUT_INTERRUPT_NMI        0x2\r
+#define IPMI_WATCHDOG_PRE_TIMEOUT_INTERRUPT_MESSAGING  0x3\r
+\r
+//\r
+//  Structure definitions for Timer Actions\r
 //\r
+typedef union {\r
+  struct {\r
+    UINT8    TimeoutAction       : 3;\r
+    UINT8    Reserved1           : 1;\r
+    UINT8    PreTimeoutInterrupt : 3;\r
+    UINT8    Reserved2           : 1;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_WATCHDOG_TIMER_ACTIONS;\r
+\r
+//\r
+//  Bit definitions for Timer use expiration flags\r
+//\r
+#define IPMI_WATCHDOG_TIMER_EXPIRATION_FLAG_BIOS_FRB2  BIT1\r
+#define IPMI_WATCHDOG_TIMER_EXPIRATION_FLAG_BIOS_POST  BIT2\r
+#define IPMI_WATCHDOG_TIMER_EXPIRATION_FLAG_OS_LOAD    BIT3\r
+#define IPMI_WATCHDOG_TIMER_EXPIRATION_FLAG_SMS_OS     BIT4\r
+#define IPMI_WATCHDOG_TIMER_EXPIRATION_FLAG_OEM        BIT5\r
+\r
 typedef struct {\r
-  IPMI_WATCHDOG_TIMER_USE         TimerUse;\r
-  UINT8                           TimerActions;\r
-  UINT8                           PretimeoutInterval;\r
-  UINT8                           TimerUseExpirationFlagsClear;\r
-  UINT16                          InitialCountdownValue;\r
-} IPMI_SET_WATCHDOG_TIMER;\r
+  IPMI_WATCHDOG_TIMER_USE        TimerUse;\r
+  IPMI_WATCHDOG_TIMER_ACTIONS    TimerActions;\r
+  UINT8                          PretimeoutInterval;\r
+  UINT8                          TimerUseExpirationFlagsClear;\r
+  UINT16                         InitialCountdownValue;\r
+} IPMI_SET_WATCHDOG_TIMER_REQUEST;\r
 \r
 //\r
 //  Definitions for Get WatchDog Timer command\r
@@ -201,13 +313,14 @@ typedef struct {
 //  Constants and Structure definitions for "Get WatchDog Timer" command to follow here\r
 //\r
 typedef struct {\r
-  IPMI_WATCHDOG_TIMER_USE         TimerUse;\r
-  UINT8                           TimerActions;\r
-  UINT8                           PretimeoutInterval;\r
-  UINT8                           TimerUseExpirationFlagsClear;\r
-  UINT16                          InitialCountdownValue;\r
-  UINT16                          PresentCountdownValue;\r
-} IPMI_GET_WATCHDOG_TIMER;\r
+  UINT8                          CompletionCode;\r
+  IPMI_WATCHDOG_TIMER_USE        TimerUse;\r
+  IPMI_WATCHDOG_TIMER_ACTIONS    TimerActions;\r
+  UINT8                          PretimeoutInterval;\r
+  UINT8                          TimerUseExpirationFlagsClear;\r
+  UINT16                         InitialCountdownValue;\r
+  UINT16                         PresentCountdownValue;\r
+} IPMI_GET_WATCHDOG_TIMER_RESPONSE;\r
 \r
 //\r
 //  Below is Definitions for IPMI Messaging Support Commands (Chapter 22)\r
@@ -221,6 +334,23 @@ typedef struct {
 //\r
 //  Constants and Structure definitions for "Set BMC Global Enables " command to follow here\r
 //\r
+typedef union {\r
+  struct {\r
+    UINT8    ReceiveMessageQueueInterrupt    : 1;\r
+    UINT8    EventMessageBufferFullInterrupt : 1;\r
+    UINT8    EventMessageBuffer              : 1;\r
+    UINT8    SystemEventLogging              : 1;\r
+    UINT8    Reserved                        : 1;\r
+    UINT8    Oem0Enable                      : 1;\r
+    UINT8    Oem1Enable                      : 1;\r
+    UINT8    Oem2Enable                      : 1;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_BMC_GLOBAL_ENABLES;\r
+\r
+typedef struct {\r
+  IPMI_BMC_GLOBAL_ENABLES    SetEnables;\r
+} IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST;\r
 \r
 //\r
 //  Definitions for Get BMC Global Enables command\r
@@ -230,24 +360,49 @@ typedef struct {
 //\r
 //  Constants and Structure definitions for "Get BMC Global Enables " command to follow here\r
 //\r
+typedef struct {\r
+  UINT8                      CompletionCode;\r
+  IPMI_BMC_GLOBAL_ENABLES    GetEnables;\r
+} IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE;\r
 \r
 //\r
 //  Definitions for Clear Message Flags command\r
 //\r
-#define IPMI_APP_CLEAR_MESSAGE_FLAGS 0x30\r
+#define IPMI_APP_CLEAR_MESSAGE_FLAGS  0x30\r
 \r
 //\r
 //  Constants and Structure definitions for "Clear Message Flags" command to follow here\r
 //\r
+typedef union {\r
+  struct {\r
+    UINT8    ReceiveMessageQueue         : 1;\r
+    UINT8    EventMessageBuffer          : 1;\r
+    UINT8    Reserved1                   : 1;\r
+    UINT8    WatchdogPerTimeoutInterrupt : 1;\r
+    UINT8    Reserved2                   : 1;\r
+    UINT8    Oem0                        : 1;\r
+    UINT8    Oem1                        : 1;\r
+    UINT8    Oem2                        : 1;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_MESSAGE_FLAGS;\r
+\r
+typedef struct {\r
+  IPMI_MESSAGE_FLAGS    ClearFlags;\r
+} IPMI_CLEAR_MESSAGE_FLAGS_REQUEST;\r
 \r
 //\r
 //  Definitions for Get Message Flags command\r
 //\r
-#define IPMI_APP_GET_MESSAGE_FLAGS 0x31\r
+#define IPMI_APP_GET_MESSAGE_FLAGS  0x31\r
 \r
 //\r
 //  Constants and Structure definitions for "Get Message Flags" command to follow here\r
 //\r
+typedef struct {\r
+  UINT8                 CompletionCode;\r
+  IPMI_MESSAGE_FLAGS    GetFlags;\r
+} IPMI_GET_MESSAGE_FLAGS_RESPONSE;\r
 \r
 //\r
 //  Definitions for Enable Message Channel Receive command\r
@@ -261,11 +416,24 @@ typedef struct {
 //\r
 //  Definitions for Get Message command\r
 //\r
-#define IPMI_APP_GET_MESSAGE 0x33\r
+#define IPMI_APP_GET_MESSAGE  0x33\r
 \r
 //\r
 //  Constants and Structure definitions for "Get Message" command to follow here\r
 //\r
+typedef union {\r
+  struct {\r
+    UINT8    ChannelNumber          : 4;\r
+    UINT8    InferredPrivilegeLevel : 4;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_GET_MESSAGE_CHANNEL_NUMBER;\r
+\r
+typedef struct {\r
+  UINT8                              CompletionCode;\r
+  IPMI_GET_MESSAGE_CHANNEL_NUMBER    ChannelNumber;\r
+  UINT8                              MessageData[0];\r
+} IPMI_GET_MESSAGE_RESPONSE;\r
 \r
 //\r
 //  Definitions for Send Message command\r
@@ -275,11 +443,31 @@ typedef struct {
 //\r
 //  Constants and Structure definitions for "Send Message" command to follow here\r
 //\r
+typedef union {\r
+  struct {\r
+    UINT8    ChannelNumber  : 4;\r
+    UINT8    Authentication : 1;\r
+    UINT8    Encryption     : 1;\r
+    UINT8    Tracking       : 2;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_SEND_MESSAGE_CHANNEL_NUMBER;\r
+\r
+typedef struct {\r
+  UINT8                               CompletionCode;\r
+  IPMI_SEND_MESSAGE_CHANNEL_NUMBER    ChannelNumber;\r
+  UINT8                               MessageData[0];\r
+} IPMI_SEND_MESSAGE_REQUEST;\r
+\r
+typedef struct {\r
+  UINT8    CompletionCode;\r
+  UINT8    ResponseData[0];\r
+} IPMI_SEND_MESSAGE_RESPONSE;\r
 \r
 //\r
 //  Definitions for Read Event Message Buffer command\r
 //\r
-#define IPMI_APP_READ_EVENT_MSG_BUFFER 0x35\r
+#define IPMI_APP_READ_EVENT_MSG_BUFFER  0x35\r
 \r
 //\r
 //  Constants and Structure definitions for "Read Event Message Buffer" command to follow here\r
@@ -288,7 +476,7 @@ typedef struct {
 //\r
 //  Definitions for Get BT Interface Capabilities command\r
 //\r
-#define IPMI_APP_GET_BT_INTERFACE_CAPABILITY 0x36\r
+#define IPMI_APP_GET_BT_INTERFACE_CAPABILITY  0x36\r
 \r
 //\r
 //  Constants and Structure definitions for "Get BT Interface Capabilities" command to follow here\r
@@ -297,7 +485,12 @@ typedef struct {
 //\r
 //  Definitions for Get System GUID command\r
 //\r
-#define IPMI_APP_GET_SYSTEM_GUID 0x37\r
+#define IPMI_APP_GET_SYSTEM_GUID  0x37\r
+\r
+typedef struct {\r
+  UINT8       CompletionCode;\r
+  EFI_GUID    SystemUuid;\r
+} IPMI_GET_SYSTEM_UUID_RESPONSE;\r
 \r
 //\r
 //  Constants and Structure definitions for "Get System GUID" command to follow here\r
@@ -306,7 +499,7 @@ typedef struct {
 //\r
 //  Definitions for Get Channel Authentication Capabilities command\r
 //\r
-#define IPMI_APP_GET_CHANNEL_AUTHENTICATION_CAPABILITIES 0x38\r
+#define IPMI_APP_GET_CHANNEL_AUTHENTICATION_CAPABILITIES  0x38\r
 \r
 //\r
 //  Constants and Structure definitions for "Get Channel Authentication Capabilities" command to follow here\r
@@ -315,7 +508,7 @@ typedef struct {
 //\r
 //  Definitions for Get Session Challenge command\r
 //\r
-#define IPMI_APP_GET_SESSION_CHALLENGE 0x39\r
+#define IPMI_APP_GET_SESSION_CHALLENGE  0x39\r
 \r
 //\r
 //  Constants and Structure definitions for "Get Session Challenge" command to follow here\r
@@ -333,7 +526,7 @@ typedef struct {
 //\r
 //  Definitions for Set Session Privelege Level command\r
 //\r
-#define IPMI_APP_SET_SESSION_PRIVELEGE_LEVEL 0x3B\r
+#define IPMI_APP_SET_SESSION_PRIVELEGE_LEVEL  0x3B\r
 \r
 //\r
 //  Constants and Structure definitions for "Set Session Privelege Level" command to follow here\r
@@ -342,7 +535,7 @@ typedef struct {
 //\r
 //  Definitions for Close Session command\r
 //\r
-#define IPMI_APP_CLOSE_SESSION 0x3C\r
+#define IPMI_APP_CLOSE_SESSION  0x3C\r
 \r
 //\r
 //  Constants and Structure definitions for "Close Session" command to follow here\r
@@ -383,21 +576,65 @@ typedef struct {
 //\r
 //  Constants and Structure definitions for "Get Channel Access" command to follow here\r
 //\r
+\r
+//\r
+//  Definitions for channel access memory type in Get Channel Access command request\r
+//\r
+#define IPMI_CHANNEL_ACCESS_MEMORY_TYPE_NON_VOLATILE              0x1\r
+#define IPMI_CHANNEL_ACCESS_MEMORY_TYPE_PRESENT_VOLATILE_SETTING  0x2\r
+\r
+//\r
+//  Definitions for channel access modes in Get Channel Access command response\r
+//\r
+#define IPMI_CHANNEL_ACCESS_MODES_DISABLED          0x0\r
+#define IPMI_CHANNEL_ACCESS_MODES_PRE_BOOT_ONLY     0x1\r
+#define IPMI_CHANNEL_ACCESS_MODES_ALWAYS_AVAILABLE  0x2\r
+#define IPMI_CHANNEL_ACCESS_MODES_SHARED            0x3\r
+\r
+typedef union {\r
+  struct {\r
+    UINT8    ChannelNo : 4;\r
+    UINT8    Reserved  : 4;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_GET_CHANNEL_ACCESS_CHANNEL_NUMBER;\r
+\r
+typedef union {\r
+  struct {\r
+    UINT8    Reserved   : 6;\r
+    UINT8    MemoryType : 2;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_GET_CHANNEL_ACCESS_TYPE;\r
+\r
 typedef struct {\r
-  UINT8 ChannelNo : 4;\r
-  UINT8 Reserve1 : 4;\r
-  UINT8 Reserve2 : 6;\r
-  UINT8 MemoryType : 2;\r
-} IPMI_GET_CHANNEL_ACCESS_COMMAND;\r
+  IPMI_GET_CHANNEL_ACCESS_CHANNEL_NUMBER    ChannelNumber;\r
+  IPMI_GET_CHANNEL_ACCESS_TYPE              AccessType;\r
+} IPMI_GET_CHANNEL_ACCESS_REQUEST;\r
+\r
+typedef union {\r
+  struct {\r
+    UINT8    AccessMode           : 3;\r
+    UINT8    UserLevelAuthEnabled : 1;\r
+    UINT8    MessageAuthEnable    : 1;\r
+    UINT8    Alert                : 1;\r
+    UINT8    Reserved             : 2;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_GET_CHANNEL_ACCESS_CHANNEL_ACCESS;\r
+\r
+typedef union {\r
+  struct {\r
+    UINT8    ChannelPriviledgeLimit : 4;\r
+    UINT8    Reserved               : 4;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_GET_CHANNEL_ACCESS_PRIVILEGE_LIMIT;\r
 \r
 typedef struct {\r
-  UINT8 AccessMode : 3;\r
-  UINT8 UserLevelAuthEnabled : 1;\r
-  UINT8 MessageAuthEnable : 1;\r
-  UINT8 Alert : 1;\r
-  UINT8 Reserve1 : 2;\r
-  UINT8 ChannelPriviledgeLimit : 4;\r
-  UINT8 Reserve2 : 4;\r
+  UINT8                                      CompletionCode;\r
+  IPMI_GET_CHANNEL_ACCESS_CHANNEL_ACCESS     ChannelAccess;\r
+  IPMI_GET_CHANNEL_ACCESS_PRIVILEGE_LIMIT    PrivilegeLimit;\r
 } IPMI_GET_CHANNEL_ACCESS_RESPONSE;\r
 \r
 //\r
@@ -408,24 +645,107 @@ typedef struct {
 //\r
 //  Constants and Structure definitions for "Get Channel Info" command to follow here\r
 //\r
-typedef struct {\r
-  UINT8   ChannelNo : 4;\r
-  UINT8   Reserve1 : 4;\r
-  UINT8   ChannelMediumType : 7;\r
-  UINT8   Reserve2 : 1;\r
-  UINT8   ChannelProtocolType : 5;\r
-  UINT8   Reserve3 : 3;\r
-  UINT8   ActiveSessionCount : 6;\r
-  UINT8   SessionSupport : 2;\r
-  UINT32  VendorId : 24;\r
-  UINT16  AuxChannelInfo : 16;\r
-  UINT8   Dummy;\r
-} IPMI_CHANNEL_INFO;\r
 \r
 //\r
-//  Definitions for Get Channel Info command\r
-//\r
-#define IPMI_APP_GET_CHANNEL_INFO  0x42\r
+//  Definitions for channel media type\r
+//\r
+// IPMB (I2C)\r
+#define IPMI_CHANNEL_MEDIA_TYPE_IPMB  0x1\r
+// ICMB v1.0\r
+#define IPMI_CHANNEL_MEDIA_TYPE_ICMB_1_0  0x2\r
+// ICMB v0.9\r
+#define IPMI_CHANNEL_MEDIA_TYPE_ICMB_0_9  0x3\r
+// 802.3 LAN\r
+#define IPMI_CHANNEL_MEDIA_TYPE_802_3_LAN  0x4\r
+// Asynch. Serial/Modem (RS-232)\r
+#define IPMI_CHANNEL_MEDIA_TYPE_RS_232  0x5\r
+// Other LAN\r
+#define IPMI_CHANNEL_MEDIA_TYPE_OTHER_LAN  0x6\r
+// PCI SMBus\r
+#define IPMI_CHANNEL_MEDIA_TYPE_PCI_SM_BUS  0x7\r
+// SMBus v1.0/1.1\r
+#define IPMI_CHANNEL_MEDIA_TYPE_SM_BUS_V1  0x8\r
+// SMBus v2.0\r
+#define IPMI_CHANNEL_MEDIA_TYPE_SM_BUS_V2  0x9\r
+// USB 1.x\r
+#define IPMI_CHANNEL_MEDIA_TYPE_USB1  0xA\r
+// USB 2.x\r
+#define IPMI_CHANNEL_MEDIA_TYPE_USB2  0xB\r
+// System Interface (KCS, SMIC, or BT)\r
+#define IPMI_CHANNEL_MEDIA_TYPE_SYSTEM_INTERFACE  0xC\r
+// OEM\r
+#define IPMI_CHANNEL_MEDIA_TYPE_OEM_START  0x60\r
+#define IPMI_CHANNEL_MEDIA_TYPE_OEM_END    0x7F\r
+\r
+//\r
+//  Definitions for channel protocol type\r
+//\r
+// Not available\r
+#define IPMI_CHANNEL_PROTOCOL_TYPE_NA  0x00\r
+// IPMB-1.0\r
+#define IPMI_CHANNEL_PROTOCOL_TYPE_IPMB_1_0  0x01\r
+// ICMB-1.0\r
+#define IPMI_CHANNEL_PROTOCOL_TYPE_ICMB_1_0  0x02\r
+// Reserved\r
+#define IPMI_CHANNEL_PROTOCOL_TYPE_RESERVED  0x03\r
+// IPMI SMBUS\r
+#define IPMI_CHANNEL_PROTOCOL_TYPE_IPMI_SMBUS  0x04\r
+// KCS\r
+#define IPMI_CHANNEL_PROTOCOL_TYPE_KCS  0x05\r
+// SMIC\r
+#define IPMI_CHANNEL_PROTOCOL_TYPE_SMIC  0x06\r
+// BT-10\r
+#define IPMI_CHANNEL_PROTOCOL_TYPE_BT_10  0x07\r
+// BT-15\r
+#define IPMI_CHANNEL_PROTOCOL_TYPE_BT_15  0x08\r
+// TMode\r
+#define IPMI_CHANNEL_PROTOCOL_TYPE_TMODE  0x09\r
+\r
+typedef union {\r
+  struct {\r
+    UINT8    ChannelNo : 4;\r
+    UINT8    Reserved  : 4;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_CHANNEL_INFO_CHANNEL_NUMBER;\r
+\r
+typedef union {\r
+  struct {\r
+    UINT8    ChannelMediumType : 7;\r
+    UINT8    Reserved          : 1;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_CHANNEL_INFO_MEDIUM_TYPE;\r
+\r
+typedef union {\r
+  struct {\r
+    UINT8    ChannelProtocolType : 5;\r
+    UINT8    Reserved            : 3;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_CHANNEL_INFO_PROTOCOL_TYPE;\r
+\r
+typedef union {\r
+  struct {\r
+    UINT8    ActiveSessionCount : 6;\r
+    UINT8    SessionSupport     : 2;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_CHANNEL_INFO_SESSION_SUPPORT;\r
+\r
+typedef struct {\r
+  UINT8                                CompletionCode;\r
+  IPMI_CHANNEL_INFO_CHANNEL_NUMBER     ChannelNumber;\r
+  IPMI_CHANNEL_INFO_MEDIUM_TYPE        MediumType;\r
+  IPMI_CHANNEL_INFO_PROTOCOL_TYPE      ProtocolType;\r
+  IPMI_CHANNEL_INFO_SESSION_SUPPORT    SessionSupport;\r
+  UINT8                                VendorId[3];\r
+  UINT16                               AuxChannelInfo;\r
+} IPMI_GET_CHANNEL_INFO_RESPONSE;\r
+\r
+typedef struct {\r
+  IPMI_CHANNEL_INFO_CHANNEL_NUMBER    ChannelNumber;\r
+} IPMI_GET_CHANNEL_INFO_REQUEST;\r
 \r
 //\r
 //  Constants and Structure definitions for "Get Channel Info" command to follow here\r
@@ -434,7 +754,7 @@ typedef struct {
 //\r
 //  Definitions for Set User Access command\r
 //\r
-#define IPMI_APP_SET_USER_ACCESS 0x43\r
+#define IPMI_APP_SET_USER_ACCESS  0x43\r
 \r
 //\r
 //  Constants and Structure definitions for "Set User Access" command to follow here\r
@@ -443,39 +763,151 @@ typedef struct {
 //\r
 //  Definitions for Get User Access command\r
 //\r
-#define IPMI_APP_GET_USER_ACCESS 0x44\r
+#define IPMI_APP_GET_USER_ACCESS  0x44\r
 \r
 //\r
 //  Constants and Structure definitions for "Get User Access" command to follow here\r
 //\r
+typedef union {\r
+  struct {\r
+    UINT8    ChannelNo : 4;\r
+    UINT8    Reserved  : 4;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_GET_USER_ACCESS_CHANNEL_NUMBER;\r
+\r
+typedef union {\r
+  struct {\r
+    UINT8    UserId   : 6;\r
+    UINT8    Reserved : 2;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_USER_ID;\r
+\r
+typedef struct {\r
+  IPMI_GET_USER_ACCESS_CHANNEL_NUMBER    ChannelNumber;\r
+  IPMI_USER_ID                           UserId;\r
+} IPMI_GET_USER_ACCESS_REQUEST;\r
+\r
+typedef union {\r
+  struct {\r
+    UINT8    MaxUserId : 6;\r
+    UINT8    Reserved  : 2;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_GET_USER_ACCESS_MAX_USER_ID;\r
+\r
+typedef union {\r
+  struct {\r
+    UINT8    CurrentUserId      : 6;\r
+    UINT8    UserIdEnableStatus : 2;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_GET_USER_ACCESS_CURRENT_USER;\r
+\r
+typedef union {\r
+  struct {\r
+    UINT8    FixedUserId : 6;\r
+    UINT8    Reserved    : 2;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_GET_USER_ACCESS_FIXED_NAME_USER;\r
+\r
+typedef union {\r
+  struct {\r
+    UINT8    UserPrivilegeLimit          : 4;\r
+    UINT8    EnableIpmiMessaging         : 1;\r
+    UINT8    EnableUserLinkAuthetication : 1;\r
+    UINT8    UserAccessAvailable         : 1;\r
+    UINT8    Reserved                    : 1;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_GET_USER_ACCESS_CHANNEL_ACCESS;\r
+\r
+typedef struct {\r
+  UINT8                                   CompletionCode;\r
+  IPMI_GET_USER_ACCESS_MAX_USER_ID        MaxUserId;\r
+  IPMI_GET_USER_ACCESS_CURRENT_USER       CurrentUser;\r
+  IPMI_GET_USER_ACCESS_FIXED_NAME_USER    FixedNameUser;\r
+  IPMI_GET_USER_ACCESS_CHANNEL_ACCESS     ChannelAccess;\r
+} IPMI_GET_USER_ACCESS_RESPONSE;\r
 \r
 //\r
 //  Definitions for Set User Name command\r
 //\r
-#define IPMI_APP_SET_USER_NAME 0x45\r
+#define IPMI_APP_SET_USER_NAME  0x45\r
 \r
 //\r
 //  Constants and Structure definitions for "Set User Name" command to follow here\r
 //\r
+typedef struct {\r
+  IPMI_USER_ID    UserId;\r
+  UINT8           UserName[16];\r
+} IPMI_SET_USER_NAME_REQUEST;\r
 \r
 //\r
 //  Definitions for Get User Name command\r
 //\r
-#define IPMI_APP_GET_USER_NAME 0x46\r
+#define IPMI_APP_GET_USER_NAME  0x46\r
 \r
 //\r
 //  Constants and Structure definitions for "Get User Name" command to follow here\r
 //\r
+typedef struct {\r
+  IPMI_USER_ID    UserId;\r
+} IPMI_GET_USER_NAME_REQUEST;\r
+\r
+typedef struct {\r
+  UINT8    CompletionCode;\r
+  UINT8    UserName[16];\r
+} IPMI_GET_USER_NAME_RESPONSE;\r
 \r
 //\r
 //  Definitions for Set User Password command\r
 //\r
-#define IPMI_APP_SET_USER_PASSWORD 0x47\r
+#define IPMI_APP_SET_USER_PASSWORD  0x47\r
 \r
 //\r
 //  Constants and Structure definitions for "Set User Password" command to follow here\r
 //\r
 \r
+//\r
+//  Definitions for Set User password command operation type\r
+//\r
+#define IPMI_SET_USER_PASSWORD_OPERATION_TYPE_DISABLE_USER   0x0\r
+#define IPMI_SET_USER_PASSWORD_OPERATION_TYPE_ENABLE_USER    0x1\r
+#define IPMI_SET_USER_PASSWORD_OPERATION_TYPE_SET_PASSWORD   0x2\r
+#define IPMI_SET_USER_PASSWORD_OPERATION_TYPE_TEST_PASSWORD  0x3\r
+\r
+//\r
+//  Definitions for Set user password command password size\r
+//\r
+#define IPMI_SET_USER_PASSWORD_PASSWORD_SIZE_16  0x0\r
+#define IPMI_SET_USER_PASSWORD_PASSWORD_SIZE_20  0x1\r
+\r
+typedef union {\r
+  struct {\r
+    UINT8    UserId       : 6;\r
+    UINT8    Reserved     : 1;\r
+    UINT8    PasswordSize : 1;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_SET_USER_PASSWORD_USER_ID;\r
+\r
+typedef union {\r
+  struct {\r
+    UINT8    Operation : 2;\r
+    UINT8    Reserved  : 6;\r
+  } Bits;\r
+  UINT8    Uint8;\r
+} IPMI_SET_USER_PASSWORD_OPERATION;\r
+\r
+typedef struct {\r
+  IPMI_SET_USER_PASSWORD_USER_ID      UserId;\r
+  IPMI_SET_USER_PASSWORD_OPERATION    Operation;\r
+  UINT8                               PasswordData[0]; // 16 or 20 bytes, depending on the 'PasswordSize' field\r
+} IPMI_SET_USER_PASSWORD_REQUEST;\r
+\r
 //\r
 //  Below is Definitions for RMCP+ Support and Payload Commands (Chapter 24)\r
 //\r
@@ -501,7 +933,7 @@ typedef struct {
 //\r
 //  Definitions for Get Payload activation Status command\r
 //\r
-#define IPMI_APP_GET_PAYLOAD_ACTIVATION_STATUS 0x4a\r
+#define IPMI_APP_GET_PAYLOAD_ACTIVATION_STATUS  0x4a\r
 \r
 //\r
 //  Constants and Structure definitions for "Get Payload activation Status" command to follow here\r
@@ -510,7 +942,7 @@ typedef struct {
 //\r
 //  Definitions for Get Payload Instance Info command\r
 //\r
-#define IPMI_APP_GET_PAYLOAD_INSTANCE_INFO 0x4b\r
+#define IPMI_APP_GET_PAYLOAD_INSTANCE_INFO  0x4b\r
 \r
 //\r
 //  Constants and Structure definitions for "Get Payload Instance Info" command to follow here\r
@@ -519,7 +951,7 @@ typedef struct {
 //\r
 //  Definitions for Set User Payload Access command\r
 //\r
-#define IPMI_APP_SET_USER_PAYLOAD_ACCESS 0x4C\r
+#define IPMI_APP_SET_USER_PAYLOAD_ACCESS  0x4C\r
 \r
 //\r
 //  Constants and Structure definitions for "Set User Payload Access" command to follow here\r
@@ -528,7 +960,7 @@ typedef struct {
 //\r
 //  Definitions for Get User Payload Access command\r
 //\r
-#define IPMI_APP_GET_USER_PAYLOAD_ACCESS 0x4D\r
+#define IPMI_APP_GET_USER_PAYLOAD_ACCESS  0x4D\r
 \r
 //\r
 //  Constants and Structure definitions for "Get User Payload Access" command to follow here\r
@@ -537,7 +969,7 @@ typedef struct {
 //\r
 //  Definitions for Get Channel Payload Support command\r
 //\r
-#define IPMI_APP_GET_CHANNEL_PAYLOAD_SUPPORT 0x4E\r
+#define IPMI_APP_GET_CHANNEL_PAYLOAD_SUPPORT  0x4E\r
 \r
 //\r
 //  Constants and Structure definitions for "Get Channel Payload Support" command to follow here\r
@@ -546,7 +978,7 @@ typedef struct {
 //\r
 //  Definitions for Get Channel Payload Version command\r
 //\r
-#define IPMI_APP_GET_CHANNEL_PAYLOAD_VERSION 0x4F\r
+#define IPMI_APP_GET_CHANNEL_PAYLOAD_VERSION  0x4F\r
 \r
 //\r
 //  Constants and Structure definitions for "Get Channel Payload Version" command to follow here\r
@@ -564,7 +996,7 @@ typedef struct {
 //\r
 //  Definitions for  Master Write-Read command\r
 //\r
-#define IPMI_APP_MASTER_WRITE_READ 0x52\r
+#define IPMI_APP_MASTER_WRITE_READ  0x52\r
 \r
 //\r
 //  Constants and Structure definitions for "Master Write Read" command to follow here\r
@@ -573,7 +1005,7 @@ typedef struct {
 //\r
 //  Definitions for  Get Channel Cipher Suites command\r
 //\r
-#define IPMI_APP_GET_CHANNEL_CIPHER_SUITES 0x54\r
+#define IPMI_APP_GET_CHANNEL_CIPHER_SUITES  0x54\r
 \r
 //\r
 //  Constants and Structure definitions for "Get Channel Cipher Suites" command to follow here\r
@@ -586,7 +1018,7 @@ typedef struct {
 //\r
 //  Definitions for  Suspend-Resume Payload Encryption command\r
 //\r
-#define IPMI_APP_SUSPEND_RESUME_PAYLOAD_ENCRYPTION 0x55\r
+#define IPMI_APP_SUSPEND_RESUME_PAYLOAD_ENCRYPTION  0x55\r
 \r
 //\r
 //  Constants and Structure definitions for "Suspend-Resume Payload Encryption" command to follow here\r
@@ -599,7 +1031,7 @@ typedef struct {
 //\r
 //  Definitions for  Set Channel Security Keys command\r
 //\r
-#define IPMI_APP_SET_CHANNEL_SECURITY_KEYS 0x56\r
+#define IPMI_APP_SET_CHANNEL_SECURITY_KEYS  0x56\r
 \r
 //\r
 //  Constants and Structure definitions for "Set Channel Security Keys" command to follow here\r
@@ -608,11 +1040,18 @@ typedef struct {
 //\r
 //  Definitions for  Get System Interface Capabilities command\r
 //\r
-#define IPMI_APP_GET_SYSTEM_INTERFACE_CAPABILITIES 0x57\r
+#define IPMI_APP_GET_SYSTEM_INTERFACE_CAPABILITIES  0x57\r
 \r
 //\r
 //  Constants and Structure definitions for "Get System Interface Capabilities" command to follow here\r
 //\r
 \r
+//\r
+//  Definitions for Get System Interface Capabilities command SSIF transaction support\r
+//\r
+#define IPMI_GET_SYSTEM_INTERFACE_CAPABILITIES_SSIF_TRANSACTION_SUPPORT_SINGLE_PARTITION_RW             0x0\r
+#define IPMI_GET_SYSTEM_INTERFACE_CAPABILITIES_SSIF_TRANSACTION_SUPPORT_MULTI_PARTITION_RW              0x1\r
+#define IPMI_GET_SYSTEM_INTERFACE_CAPABILITIES_SSIF_TRANSACTION_SUPPORT_MULTI_PARTITION_RW_WITH_MIDDLE  0x2\r
+\r
 #pragma pack()\r
 #endif\r