diff --git a/MdePkg/Include/IndustryStandard/IpmiFruInformationStorage.h b/MdePkg/Include/IndustryStandard/IpmiFruInformationStorage.h index 2b58cbf0b4..1aef4b14f2 100644 --- a/MdePkg/Include/IndustryStandard/IpmiFruInformationStorage.h +++ b/MdePkg/Include/IndustryStandard/IpmiFruInformationStorage.h @@ -26,31 +26,57 @@ #pragma pack(1) // -// Structure definition for FRU Common Header +// Structure definitions for FRU Common Header // +typedef union { + /// + /// Individual bit fields + /// + struct { + UINT8 FormatVersionNumber:4; + UINT8 Reserved:4; + } Bits; + /// + /// All bit fields as a 8-bit value + /// + UINT8 Uint8; +} IPMI_FRU_COMMON_HEADER_FORMAT_VERSION; + typedef struct { - UINT8 FormatVersionNumber:4; - UINT8 Reserved:4; - UINT8 InternalUseStartingOffset; - UINT8 ChassisInfoStartingOffset; - UINT8 BoardAreaStartingOffset; - UINT8 ProductInfoStartingOffset; - UINT8 MultiRecInfoStartingOffset; - UINT8 Pad; - UINT8 Checksum; + IPMI_FRU_COMMON_HEADER_FORMAT_VERSION FormatVersion; + UINT8 InternalUseStartingOffset; + UINT8 ChassisInfoStartingOffset; + UINT8 BoardAreaStartingOffset; + UINT8 ProductInfoStartingOffset; + UINT8 MultiRecInfoStartingOffset; + UINT8 Pad; + UINT8 Checksum; } IPMI_FRU_COMMON_HEADER; // // Structure definition for FRU MultiRecord Header // +typedef union { + /// + /// Individual bit fields + /// + struct { + UINT8 RecordFormatVersion:4; + UINT8 Reserved:3; + UINT8 EndofList:1; + } Bits; + /// + /// All bit fields as a 8-bit value + /// + UINT8 Uint8; +} IPMI_FRU_MULTI_RECORD_HEADER_FORMAT_VERSION; + typedef struct { - UINT8 RecordTypeId; - UINT8 RecordFormatVersion:4; - UINT8 Reserved:3; - UINT8 EndofList:1; - UINT8 RecordLength; - UINT8 RecordChecksum; - UINT8 HeaderChecksum; + UINT8 RecordTypeId; + IPMI_FRU_MULTI_RECORD_HEADER_FORMAT_VERSION FormatVersion; + UINT8 RecordLength; + UINT8 RecordChecksum; + UINT8 HeaderChecksum; } IPMI_FRU_MULTI_RECORD_HEADER; // diff --git a/MdePkg/Include/IndustryStandard/IpmiNetFnApp.h b/MdePkg/Include/IndustryStandard/IpmiNetFnApp.h index cdd3f07c65..15eeefee15 100644 --- a/MdePkg/Include/IndustryStandard/IpmiNetFnApp.h +++ b/MdePkg/Include/IndustryStandard/IpmiNetFnApp.h @@ -42,27 +42,48 @@ // // Constants and Structure definitions for "Get Device ID" command to follow here // +typedef union { + struct { + UINT8 DeviceRevision : 4; + UINT8 Reserved : 3; + UINT8 DeviceSdr : 1; + } Bits; + UINT8 Uint8; +} IPMI_GET_DEVICE_ID_DEVICE_REV; + +typedef union { + struct { + UINT8 MajorFirmwareRev : 7; + UINT8 UpdateMode : 1; + } Bits; + UINT8 Uint8; +} IPMI_GET_DEVICE_ID_FIRMWARE_REV_1; + +typedef union { + struct { + UINT8 SensorDeviceSupport : 1; + UINT8 SdrRepositorySupport : 1; + UINT8 SelDeviceSupport : 1; + UINT8 FruInventorySupport : 1; + UINT8 IpmbMessageReceiver : 1; + UINT8 IpmbMessageGenerator : 1; + UINT8 BridgeSupport : 1; + UINT8 ChassisSupport : 1; + } Bits; + UINT8 Uint8; +} IPMI_GET_DEVICE_ID_DEVICE_SUPPORT; + typedef struct { - UINT8 CompletionCode; - UINT8 DeviceId; - UINT8 DeviceRevision : 4; - UINT8 Reserved : 3; - UINT8 DeviceSdr : 1; - UINT8 MajorFirmwareRev : 7; - UINT8 UpdateMode : 1; - UINT8 MinorFirmwareRev; - UINT8 SpecificationVersion; - UINT8 SensorDeviceSupport : 1; - UINT8 SdrRepositorySupport : 1; - UINT8 SelDeviceSupport : 1; - UINT8 FruInventorySupport : 1; - UINT8 IpmbMessageReceiver : 1; - UINT8 IpmbMessageGenerator : 1; - UINT8 BridgeSupport : 1; - UINT8 ChassisSupport : 1; - UINT8 ManufacturerId[3]; - UINT16 ProductId; - UINT32 AuxFirmwareRevInfo; + UINT8 CompletionCode; + UINT8 DeviceId; + IPMI_GET_DEVICE_ID_DEVICE_REV DeviceRevision; + IPMI_GET_DEVICE_ID_FIRMWARE_REV_1 FirmwareRev1; + UINT8 MinorFirmwareRev; + UINT8 SpecificationVersion; + IPMI_GET_DEVICE_ID_DEVICE_SUPPORT DeviceSupport; + UINT8 ManufacturerId[3]; + UINT16 ProductId; + UINT32 AuxFirmwareRevInfo; } IPMI_GET_DEVICE_ID_RESPONSE; @@ -165,11 +186,17 @@ typedef struct { #define IPMI_DEVICE_POWER_STATE_UNKNOWN 0x2A #define IPMI_DEVICE_POWER_STATE_NO_CHANGE 0x7F +typedef union { + struct { + UINT8 PowerState : 7; + UINT8 StateChange : 1; + } Bits; + UINT8 Uint8; +} IPMI_ACPI_POWER_STATE; + typedef struct { - UINT8 AcpiSystemPowerState : 7; - UINT8 AcpiSystemStateChange : 1; - UINT8 AcpiDevicePowerState : 7; - UINT8 AcpiDeviceStateChange : 1; + IPMI_ACPI_POWER_STATE SystemPowerState; + IPMI_ACPI_POWER_STATE DevicePowerState; } IPMI_SET_ACPI_POWER_STATE_REQUEST; // @@ -227,11 +254,14 @@ typedef struct { // // Structure definition for timer Use // -typedef struct { - UINT8 TimerUse : 3; - UINT8 Reserved : 3; - UINT8 TimerRunning : 1; - UINT8 TimerUseExpirationFlagLog : 1; +typedef union { + struct { + UINT8 TimerUse : 3; + UINT8 Reserved : 3; + UINT8 TimerRunning : 1; + UINT8 TimerUseExpirationFlagLog : 1; + } Bits; + UINT8 Uint8; } IPMI_WATCHDOG_TIMER_USE; // @@ -253,11 +283,14 @@ typedef struct { // // Structure definitions for Timer Actions // -typedef struct { - UINT8 TimeoutAction : 3; - UINT8 Reserved1 : 1; - UINT8 PreTimeoutInterrupt : 3; - UINT8 Reserved2 : 1; +typedef union { + struct { + UINT8 TimeoutAction : 3; + UINT8 Reserved1 : 1; + UINT8 PreTimeoutInterrupt : 3; + UINT8 Reserved2 : 1; + } Bits; + UINT8 Uint8; } IPMI_WATCHDOG_TIMER_ACTIONS; // @@ -307,15 +340,22 @@ typedef struct { // // Constants and Structure definitions for "Set BMC Global Enables " command to follow here // +typedef union { + struct { + UINT8 ReceiveMessageQueueInterrupt : 1; + UINT8 EventMessageBufferFullInterrupt : 1; + UINT8 EventMessageBuffer : 1; + UINT8 SystemEventLogging : 1; + UINT8 Reserved : 1; + UINT8 Oem0Enable : 1; + UINT8 Oem1Enable : 1; + UINT8 Oem2Enable : 1; + } Bits; + UINT8 Uint8; +} IPMI_BMC_GLOBAL_ENABLES; + typedef struct { - UINT8 EnableReceiveMessageQueueInterrupt : 1; - UINT8 EnableEventMessageBufferFullInterrupt : 1; - UINT8 EnableEventMessageBuffer : 1; - UINT8 EnableSystemEventLogging : 1; - UINT8 Reserved : 1; - UINT8 Oem0Enable : 1; - UINT8 Oem1Enable : 1; - UINT8 Oem2Enable : 1; + IPMI_BMC_GLOBAL_ENABLES SetEnables; } IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST; // @@ -327,15 +367,8 @@ typedef struct { // Constants and Structure definitions for "Get BMC Global Enables " command to follow here // typedef struct { - UINT8 CompletionCode; - UINT8 ReceiveMessageQueueInterrupt : 1; - UINT8 EventMessageBufferFullInterrupt : 1; - UINT8 EventMessageBuffer : 1; - UINT8 SystemEventLogging : 1; - UINT8 Reserved : 1; - UINT8 Oem0Enable : 1; - UINT8 Oem1Enable : 1; - UINT8 Oem2Enable : 1; + UINT8 CompletionCode; + IPMI_BMC_GLOBAL_ENABLES GetEnables; } IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE; // @@ -346,15 +379,22 @@ typedef struct { // // Constants and Structure definitions for "Clear Message Flags" command to follow here // +typedef union { + struct { + UINT8 ReceiveMessageQueue : 1; + UINT8 EventMessageBuffer : 1; + UINT8 Reserved1 : 1; + UINT8 WatchdogPerTimeoutInterrupt : 1; + UINT8 Reserved2 : 1; + UINT8 Oem0 : 1; + UINT8 Oem1 : 1; + UINT8 Oem2 : 1; + } Bits; + UINT8 Uint8; +} IPMI_MESSAGE_FLAGS; + typedef struct { - UINT8 ClearReceiveMessageQueue : 1; - UINT8 ClearEventMessageBuffer : 1; - UINT8 Reserved0 : 1; - UINT8 ClearWatchdogPerTimeoutInterruptFlag : 1; - UINT8 Reserved : 1; - UINT8 ClearOem0Enable : 1; - UINT8 ClearOem1Enable : 1; - UINT8 ClearOem2Enable : 1; + IPMI_MESSAGE_FLAGS ClearFlags; } IPMI_CLEAR_MESSAGE_FLAGS_REQUEST; // @@ -366,15 +406,8 @@ typedef struct { // Constants and Structure definitions for "Get Message Flags" command to follow here // typedef struct { - UINT8 CompletionCode; - UINT8 ReceiveMessageAvailable : 1; - UINT8 EventMessageBufferFull : 1; - UINT8 Reserved0 : 1; - UINT8 WatchdogPerTimeoutInterruptOccurred : 1; - UINT8 Reserved : 1; - UINT8 Oem0DataAvailable : 1; - UINT8 Oem1DataAvailable : 1; - UINT8 Oem2DataAvailable : 1; + UINT8 CompletionCode; + IPMI_MESSAGE_FLAGS GetFlags; } IPMI_GET_MESSAGE_FLAGS_RESPONSE; // @@ -394,11 +427,18 @@ typedef struct { // // Constants and Structure definitions for "Get Message" command to follow here // +typedef union { + struct { + UINT8 ChannelNumber : 4; + UINT8 InferredPrivilegeLevel : 4; + } Bits; + UINT8 Uint8; +} IPMI_GET_MESSAGE_CHANNEL_NUMBER; + typedef struct { - UINT8 CompletionCode; - UINT8 ChannelNumber : 4; - UINT8 InferredPrivilegeLevel : 4; - UINT8 MessageData[0]; + UINT8 CompletionCode; + IPMI_GET_MESSAGE_CHANNEL_NUMBER ChannelNumber; + UINT8 MessageData[0]; } IPMI_GET_MESSAGE_RESPONSE; // @@ -409,13 +449,20 @@ typedef struct { // // Constants and Structure definitions for "Send Message" command to follow here // +typedef union { + struct { + UINT8 ChannelNumber : 4; + UINT8 Authentication : 1; + UINT8 Encryption : 1; + UINT8 Tracking : 2; + } Bits; + UINT8 Uint8; +} IPMI_SEND_MESSAGE_CHANNEL_NUMBER; + typedef struct { - UINT8 CompletionCode; - UINT8 ChannelNumber : 4; - UINT8 Authentication : 1; - UINT8 Encryption : 1; - UINT8 Tracking : 2; - UINT8 MessageData[0]; + UINT8 CompletionCode; + IPMI_SEND_MESSAGE_CHANNEL_NUMBER ChannelNumber; + UINT8 MessageData[0]; } IPMI_SEND_MESSAGE_REQUEST; typedef struct { @@ -545,22 +592,50 @@ typedef struct { #define IPMI_CHANNEL_ACCESS_MODES_ALWAYS_AVAILABLE 0x2 #define IPMI_CHANNEL_ACCESS_MODES_SHARED 0x3 -typedef struct { - UINT8 ChannelNo : 4; - UINT8 Reserve1 : 4; - UINT8 Reserve2 : 6; - UINT8 MemoryType : 2; -} IPMI_GET_CHANNEL_ACCESS_REQUEST; +typedef union { + struct { + UINT8 ChannelNo : 4; + UINT8 Reserved : 4; + } Bits; + UINT8 Uint8; +} IPMI_GET_CHANNEL_ACCESS_CHANNEL_NUMBER; + +typedef union { + struct { + UINT8 Reserved : 6; + UINT8 MemoryType : 2; + } Bits; + UINT8 Uint8; +} IPMI_GET_CHANNEL_ACCESS_TYPE; typedef struct { - UINT8 CompletionCode; - UINT8 AccessMode : 3; - UINT8 UserLevelAuthEnabled : 1; - UINT8 MessageAuthEnable : 1; - UINT8 Alert : 1; - UINT8 Reserve1 : 2; - UINT8 ChannelPriviledgeLimit : 4; - UINT8 Reserve2 : 4; + IPMI_GET_CHANNEL_ACCESS_CHANNEL_NUMBER ChannelNumber; + IPMI_GET_CHANNEL_ACCESS_TYPE AccessType; +} IPMI_GET_CHANNEL_ACCESS_REQUEST; + +typedef union { + struct { + UINT8 AccessMode : 3; + UINT8 UserLevelAuthEnabled : 1; + UINT8 MessageAuthEnable : 1; + UINT8 Alert : 1; + UINT8 Reserved : 2; + } Bits; + UINT8 Uint8; +} IPMI_GET_CHANNEL_ACCESS_CHANNEL_ACCESS; + +typedef union { + struct { + UINT8 ChannelPriviledgeLimit : 4; + UINT8 Reserved : 4; + } Bits; + UINT8 Uint8; +} IPMI_GET_CHANNEL_ACCESS_PRIVILEGE_LIMIT; + +typedef struct { + UINT8 CompletionCode; + IPMI_GET_CHANNEL_ACCESS_CHANNEL_ACCESS ChannelAccess; + IPMI_GET_CHANNEL_ACCESS_PRIVILEGE_LIMIT PrivilegeLimit; } IPMI_GET_CHANNEL_ACCESS_RESPONSE; // @@ -603,18 +678,46 @@ typedef struct { #define IPMI_CHANNEL_MEDIA_TYPE_OEM_START 0x60 #define IPMI_CHANNEL_MEDIA_TYPE_OEM_END 0x7F +typedef union { + struct { + UINT8 ChannelNo : 4; + UINT8 Reserved : 4; + } Bits; + UINT8 Uint8; +} IPMI_CHANNEL_INFO_CHANNEL_NUMBER; + +typedef union { + struct { + UINT8 ChannelMediumType : 7; + UINT8 Reserved : 1; + } Bits; + UINT8 Uint8; +} IPMI_CHANNEL_INFO_MEDIUM_TYPE; + +typedef union { + struct { + UINT8 ChannelProtocolType : 5; + UINT8 Reserved : 3; + } Bits; + UINT8 Uint8; +} IPMI_CHANNEL_INFO_PROTOCOL_TYPE; + +typedef union { + struct { + UINT8 ActiveSessionCount : 6; + UINT8 SessionSupport : 2; + } Bits; + UINT8 Uint8; +} IPMI_CHANNEL_INFO_SESSION_SUPPORT; + typedef struct { UINT8 CompletionCode; - UINT8 ChannelNo : 4; - UINT8 Reserve1 : 4; - UINT8 ChannelMediumType : 7; - UINT8 Reserve2 : 1; - UINT8 ChannelProtocolType : 5; - UINT8 Reserve3 : 3; - UINT8 ActiveSessionCount : 6; - UINT8 SessionSupport : 2; - UINT8 VendorId[3]; - UINT16 AuxChannelInfo; + IPMI_CHANNEL_INFO_CHANNEL_NUMBER ChannelNumber; + IPMI_CHANNEL_INFO_MEDIUM_TYPE MediumType; + IPMI_CHANNEL_INFO_PROTOCOL_TYPE ProtocolType; + IPMI_CHANNEL_INFO_SESSION_SUPPORT SessionSupport; + UINT8 VendorId[3]; + UINT16 AuxChannelInfo; } IPMI_GET_CHANNEL_INFO_RESPONSE; // @@ -643,26 +746,68 @@ typedef struct { // // Constants and Structure definitions for "Get User Access" command to follow here // -typedef struct { - UINT8 ChannelNo : 4; - UINT8 Reserved1 : 4; - UINT8 UserId : 6; - UINT8 Reserved2 : 2; -} IPMI_GET_USER_ACCESS_REQUEST; +typedef union { + struct { + UINT8 ChannelNo : 4; + UINT8 Reserved : 4; + } Bits; + UINT8 Uint8; +} IPMI_GET_USER_ACCESS_CHANNEL_NUMBER; + +typedef union { + struct { + UINT8 UserId : 6; + UINT8 Reserved : 2; + } Bits; + UINT8 Uint8; +} IPMI_USER_ID; typedef struct { - UINT8 CompletionCode; - UINT8 MaxUserId : 6; - UINT8 Reserved1 : 2; - UINT8 CurrentUserId : 6; - UINT8 UserIdEnableStatus : 2; - UINT8 FixedUserId : 6; - UINT8 Reserved2 : 2; - UINT8 UserPrivilegeLimit : 4; - UINT8 EnableIpmiMessaging : 1; - UINT8 EnableUserLinkAuthetication : 1; - UINT8 UserAccessAvailable : 1; - UINT8 Reserved3 : 1; + IPMI_GET_USER_ACCESS_CHANNEL_NUMBER ChannelNumber; + IPMI_USER_ID UserId; +} IPMI_GET_USER_ACCESS_REQUEST; + +typedef union { + struct { + UINT8 MaxUserId : 6; + UINT8 Reserved : 2; + } Bits; + UINT8 Uint8; +} IPMI_GET_USER_ACCESS_MAX_USER_ID; + +typedef union { + struct { + UINT8 CurrentUserId : 6; + UINT8 UserIdEnableStatus : 2; + } Bits; + UINT8 Uint8; +} IPMI_GET_USER_ACCESS_CURRENT_USER; + +typedef union { + struct { + UINT8 FixedUserId : 6; + UINT8 Reserved : 2; + } Bits; + UINT8 Uint8; +} IPMI_GET_USER_ACCESS_FIXED_NAME_USER; + +typedef union { + struct { + UINT8 UserPrivilegeLimit : 4; + UINT8 EnableIpmiMessaging : 1; + UINT8 EnableUserLinkAuthetication : 1; + UINT8 UserAccessAvailable : 1; + UINT8 Reserved : 1; + } Bits; + UINT8 Uint8; +} IPMI_GET_USER_ACCESS_CHANNEL_ACCESS; + +typedef struct { + UINT8 CompletionCode; + IPMI_GET_USER_ACCESS_MAX_USER_ID MaxUserId; + IPMI_GET_USER_ACCESS_CURRENT_USER CurrentUser; + IPMI_GET_USER_ACCESS_FIXED_NAME_USER FixedNameUser; + IPMI_GET_USER_ACCESS_CHANNEL_ACCESS ChannelAccess; } IPMI_GET_USER_ACCESS_RESPONSE; // @@ -674,9 +819,8 @@ typedef struct { // Constants and Structure definitions for "Set User Name" command to follow here // typedef struct { - UINT8 UserId : 6; - UINT8 Reserved : 2; - UINT8 UserName[16]; + IPMI_USER_ID UserId; + UINT8 UserName[16]; } IPMI_SET_USER_NAME_REQUEST; // @@ -688,8 +832,7 @@ typedef struct { // Constants and Structure definitions for "Get User Name" command to follow here // typedef struct { - UINT8 UserId : 6; - UINT8 Reserved : 2; + IPMI_USER_ID UserId; } IPMI_GET_USER_NAME_REQUEST; typedef struct { @@ -720,13 +863,27 @@ typedef struct { #define IPMI_SET_USER_PASSWORD_PASSWORD_SIZE_16 0x0 #define IPMI_SET_USER_PASSWORD_PASSWORD_SIZE_20 0x1 +typedef union { + struct { + UINT8 UserId : 6; + UINT8 Reserved : 1; + UINT8 PasswordSize : 1; + } Bits; + UINT8 Uint8; +} IPMI_SET_USER_PASSWORD_USER_ID; + +typedef union { + struct { + UINT8 Operation : 2; + UINT8 Reserved : 6; + } Bits; + UINT8 Uint8; +} IPMI_SET_USER_PASSWORD_OPERATION; + typedef struct { - UINT8 UserId : 6; - UINT8 Reserved1 : 1; - UINT8 PasswordSize : 1; - UINT8 Operation : 2; - UINT8 Reserved2 : 6; - UINT8 PasswordData[0]; // 16 or 20 bytes, depending on the 'PasswordSize' field + IPMI_SET_USER_PASSWORD_USER_ID UserId; + IPMI_SET_USER_PASSWORD_OPERATION Operation; + UINT8 PasswordData[0]; // 16 or 20 bytes, depending on the 'PasswordSize' field } IPMI_SET_USER_PASSWORD_REQUEST; // diff --git a/MdePkg/Include/IndustryStandard/IpmiNetFnChassis.h b/MdePkg/Include/IndustryStandard/IpmiNetFnChassis.h index b77413f4ce..6e65abe55f 100644 --- a/MdePkg/Include/IndustryStandard/IpmiNetFnChassis.h +++ b/MdePkg/Include/IndustryStandard/IpmiNetFnChassis.h @@ -72,9 +72,16 @@ typedef struct { // // Constants and Structure definitions for "Chassis Control" command to follow here // +typedef union { + struct { + UINT8 ChassisControl:4; + UINT8 Reserved:4; + } Bits; + UINT8 Uint8; +} IPMI_CHASSIS_CONTROL_CHASSIS_CONTROL; + typedef struct { - UINT8 ChassisControl:4; - UINT8 Reserved:4; + IPMI_CHASSIS_CONTROL_CHASSIS_CONTROL ChassisControl; } IPMI_CHASSIS_CONTROL_REQUEST; // @@ -112,9 +119,16 @@ typedef struct { // // Constants and Structure definitions for "Set Power Restore Policy" command to follow here // +typedef union { + struct { + UINT8 PowerRestorePolicy : 3; + UINT8 Reserved : 5; + } Bits; + UINT8 Uint8; +} IPMI_POWER_RESTORE_POLICY; + typedef struct { - UINT8 PowerRestorePolicy:3; - UINT8 Reserved:5; + IPMI_POWER_RESTORE_POLICY PowerRestorePolicy; } IPMI_SET_POWER_RESTORE_POLICY_REQUEST; typedef struct { @@ -130,26 +144,31 @@ typedef struct { // // Constants and Structure definitions for "Get System Restart Cause" command to follow here // -typedef enum { - Unknown, - ChassisControlCommand, - ResetViaPushButton, - PowerupViaPowerButton, - WatchdogExpiration, - Oem, - AutoPowerOnAlwaysRestore, - AutoPowerOnRestorePrevious, - ResetViaPef, - PowerCycleViaPef, - SoftReset, - PowerUpViaRtc +#define IPMI_SYSTEM_RESTART_CAUSE_UNKNOWN 0x0 +#define IPMI_SYSTEM_RESTART_CAUSE_CHASSIS_CONTROL_COMMAND 0x1 +#define IPMI_SYSTEM_RESTART_CAUSE_PUSHBUTTON_RESET 0x2 +#define IPMI_SYSTEM_RESTART_CAUSE_PUSHBUTTON_POWERUP 0x3 +#define IPMI_SYSTEM_RESTART_CAUSE_WATCHDOG_EXPIRE 0x4 +#define IPMI_SYSTEM_RESTART_CAUSE_OEM 0x5 +#define IPMI_SYSTEM_RESTART_CAUSE_AUTO_POWER_ALWAYS_RESTORE 0x6 +#define IPMI_SYSTEM_RESTART_CAUSE_AUTO_POWER_RESTORE_PREV 0x7 +#define IPMI_SYSTEM_RESTART_CAUSE_PEF_RESET 0x8 +#define IPMI_SYSTEM_RESTART_CAUSE_PEF_POWERCYCLE 0x9 +#define IPMI_SYSTEM_RESTART_CAUSE_SOFT_RESET 0xA +#define IPMI_SYSTEM_RESTART_CAUSE_RTC_POWERUP 0xB + +typedef union { + struct { + UINT8 Cause:4; + UINT8 Reserved:4; + } Bits; + UINT8 Uint8; } IPMI_SYSTEM_RESTART_CAUSE; typedef struct { - UINT8 CompletionCode; - UINT8 Cause:4; - UINT8 Reserved:4; - UINT8 ChannelNumber; + UINT8 CompletionCode; + IPMI_SYSTEM_RESTART_CAUSE RestartCause; + UINT8 ChannelNumber; } IPMI_GET_SYSTEM_RESTART_CAUSE_RESPONSE; // @@ -160,10 +179,17 @@ typedef struct { // // Constants and Structure definitions for "Set System boot options" command to follow here // +typedef union { + struct { + UINT8 ParameterSelector:7; + UINT8 MarkParameterInvalid:1; + } Bits; + UINT8 Uint8; +} IPMI_SET_BOOT_OPTIONS_PARAMETER_VALID; + typedef struct { - UINT8 ParameterSelector:7; - UINT8 MarkParameterInvalid:1; - UINT8 ParameterData[1]; + IPMI_SET_BOOT_OPTIONS_PARAMETER_VALID ParameterValid; + UINT8 ParameterData[0]; } IPMI_SET_BOOT_OPTIONS_REQUEST; // @@ -174,11 +200,18 @@ typedef struct { // // Constants and Structure definitions for "Get System boot options" command to follow here // +typedef union { + struct { + UINT8 ParameterSelector:7; + UINT8 Reserved:1; + } Bits; + UINT8 Uint8; +} IPMI_GET_BOOT_OPTIONS_PARAMETER_SELECTOR; + typedef struct { - UINT8 ParameterSelector:7; - UINT8 Reserved:1; - UINT8 SetSelector; - UINT8 BlockSelector; + IPMI_GET_BOOT_OPTIONS_PARAMETER_SELECTOR ParameterSelector; + UINT8 SetSelector; + UINT8 BlockSelector; } IPMI_GET_BOOT_OPTIONS_REQUEST; typedef struct { @@ -217,24 +250,33 @@ typedef struct { // // Response Parameters for IPMI Get Boot Options // -typedef struct { - UINT8 SetInProgress: 2; - UINT8 Reserved: 6; +typedef union { + struct { + UINT8 SetInProgress : 2; + UINT8 Reserved : 6; + } Bits; + UINT8 Uint8; } IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_0; typedef struct { UINT8 ServicePartitionSelector; } IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_1; -typedef struct { - UINT8 ServicePartitionDiscovered:1; - UINT8 ServicePartitionScanRequest:1; - UINT8 Reserved: 6; +typedef union { + struct { + UINT8 ServicePartitionDiscovered : 1; + UINT8 ServicePartitionScanRequest : 1; + UINT8 Reserved: 6; + } Bits; + UINT8 Uint8; } IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_2; -typedef struct { - UINT8 BmcBootFlagValid: 5; - UINT8 Reserved: 3; +typedef union { + struct { + UINT8 BmcBootFlagValid : 5; + UINT8 Reserved : 3; + } Bits; + UINT8 Uint8; } IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_3; typedef struct { @@ -267,49 +309,76 @@ typedef struct { #define BIOS_MUX_CONTROL_OVERRIDE_FORCE_TO_BMC 0x01 #define BIOS_MUX_CONTROL_OVERRIDE_FORCE_TO_SYSTEM 0x02 -typedef struct { - // - // Data 1 - // - UINT8 Reserved0:5; - UINT8 BiosBootType:1; - UINT8 PersistentOptions:1; - UINT8 BootFlagValid:1; - // - // Data 2 - // - UINT8 LockReset:1; - UINT8 ScreenBlank:1; - UINT8 BootDeviceSelector:4; - UINT8 LockKeyboard:1; - UINT8 CmosClear:1; - // - // Data 3 - // - UINT8 ConsoleRedirection:2; - UINT8 LockSleep:1; - UINT8 UserPasswordBypass:1; - UINT8 ForceProgressEventTrap:1; - UINT8 BiosVerbosity:2; - UINT8 LockPower:1; - // - // Data 4 - // - UINT8 BiosMuxControlOverride:3; - UINT8 BiosSharedModeOverride:1; - UINT8 Reserved1:4; - // - // Data 5 - // - UINT8 DeviceInstanceSelector:5; - UINT8 Reserved2:3; -} IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_5; +typedef union { + struct { + UINT8 Reserved:5; + UINT8 BiosBootType:1; + UINT8 PersistentOptions:1; + UINT8 BootFlagValid:1; + } Bits; + UINT8 Uint8; +} IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_5_DATA_1; + +typedef union { + struct { + UINT8 LockReset:1; + UINT8 ScreenBlank:1; + UINT8 BootDeviceSelector:4; + UINT8 LockKeyboard:1; + UINT8 CmosClear:1; + } Bits; + UINT8 Uint8; +} IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_5_DATA_2; + +typedef union { + struct { + UINT8 ConsoleRedirection:2; + UINT8 LockSleep:1; + UINT8 UserPasswordBypass:1; + UINT8 ForceProgressEventTrap:1; + UINT8 BiosVerbosity:2; + UINT8 LockPower:1; + } Bits; + UINT8 Uint8; +} IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_5_DATA_3; + +typedef union { + struct { + UINT8 BiosMuxControlOverride:3; + UINT8 BiosSharedModeOverride:1; + UINT8 Reserved:4; + } Bits; + UINT8 Uint8; +} IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_5_DATA_4; + +typedef union { + struct { + UINT8 DeviceInstanceSelector:5; + UINT8 Reserved:3; + } Bits; + UINT8 Uint8; +} IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_5_DATA_5; typedef struct { - UINT8 ChannelNumber:4; - UINT8 Reserved:4; - UINT8 SessionId[4]; - UINT8 BootInfoTimeStamp[4]; + IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_5_DATA_1 Data1; + IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_5_DATA_2 Data2; + IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_5_DATA_3 Data3; + IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_5_DATA_4 Data4; + IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_5_DATA_5 Data5; +} IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_5; + +typedef union { + struct { + UINT8 ChannelNumber:4; + UINT8 Reserved:4; + } Bits; + UINT8 Uint8; +} IPMI_BOOT_OPTIONS_CHANNEL_NUMBER; + +typedef struct { + IPMI_BOOT_OPTIONS_CHANNEL_NUMBER ChannelNumber; + UINT8 SessionId[4]; + UINT8 BootInfoTimeStamp[4]; } IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_6; typedef struct { @@ -328,13 +397,27 @@ typedef union { IPMI_BOOT_OPTIONS_RESPONSE_PARAMETER_7 Parm7; } IPMI_BOOT_OPTIONS_PARAMETERS; +typedef union { + struct { + UINT8 ParameterVersion:4; + UINT8 Reserved:4; + } Bits; + UINT8 Uint8; +} IPMI_GET_BOOT_OPTIONS_PARAMETER_VERSION; + +typedef union { + struct { + UINT8 ParameterSelector:7; + UINT8 ParameterValid:1; + } Bits; + UINT8 Uint8; +} IPMI_GET_BOOT_OPTIONS_PARAMETER_VALID; + typedef struct { - UINT8 CompletionCode; - UINT8 ParameterVersion:4; - UINT8 Reserved:4; - UINT8 ParameterSelector:7; - UINT8 ParameterValid:1; - UINT8 ParameterData[1]; + UINT8 CompletionCode; + IPMI_GET_BOOT_OPTIONS_PARAMETER_VERSION ParameterVersion; + IPMI_GET_BOOT_OPTIONS_PARAMETER_VALID ParameterValid; + UINT8 ParameterData[0]; } IPMI_GET_BOOT_OPTIONS_RESPONSE; // @@ -342,17 +425,23 @@ typedef struct { // #define IPMI_CHASSIS_SET_FRONT_PANEL_BUTTON_ENABLES 0x0A -typedef struct { - UINT8 DisablePoweroffButton:1; - UINT8 DisableResetButton:1; - UINT8 DisableDiagnosticInterruptButton:1; - UINT8 DisableStandbyButton:1; - UINT8 Reserved:4; -} IPMI_CHASSIS_SET_FRONT_PANEL_BUTTON_ENABLES_REQUEST; - // // Constants and Structure definitions for "Set front panel button enables" command to follow here // +typedef union { + struct { + UINT8 DisablePoweroffButton:1; + UINT8 DisableResetButton:1; + UINT8 DisableDiagnosticInterruptButton:1; + UINT8 DisableStandbyButton:1; + UINT8 Reserved:4; + } Bits; + UINT8 Uint8; +} IPMI_FRONT_PANEL_BUTTON_ENABLES; + +typedef struct { + IPMI_FRONT_PANEL_BUTTON_ENABLES FrontPanelButtonEnables; +} IPMI_CHASSIS_SET_FRONT_PANEL_BUTTON_ENABLES_REQUEST; // // Definitions for Set Power Cycle Interval command diff --git a/MdePkg/Include/IndustryStandard/IpmiNetFnStorage.h b/MdePkg/Include/IndustryStandard/IpmiNetFnStorage.h index fe5ed38179..548339286f 100644 --- a/MdePkg/Include/IndustryStandard/IpmiNetFnStorage.h +++ b/MdePkg/Include/IndustryStandard/IpmiNetFnStorage.h @@ -121,20 +121,27 @@ typedef struct { // // Constants and Structure definitions for "Get SDR Repository Info" command to follow here // +typedef union { + struct { + UINT8 SdrRepAllocInfoCmd : 1; + UINT8 SdrRepReserveCmd : 1; + UINT8 PartialAddSdrCmd : 1; + UINT8 DeleteSdrRepCmd : 1; + UINT8 Reserved : 1; + UINT8 SdrRepUpdateOp : 2; + UINT8 Overflow : 1; + } Bits; + UINT8 Uint8; +} IPMI_SDR_OPERATION_SUPPORT; + typedef struct { - UINT8 CompletionCode; - UINT8 Version; - UINT16 RecordCount; - UINT16 FreeSpace; - UINT32 RecentAdditionTimeStamp; - UINT32 RecentEraseTimeStamp; - UINT8 SdrRepAllocInfoCmd : 1; - UINT8 SdrRepReserveCmd : 1; - UINT8 PartialAddSdrCmd : 1; - UINT8 DeleteSdrRepCmd : 1; - UINT8 Reserved : 1; - UINT8 SdrRepUpdateOp : 2; - UINT8 Overflow : 1; + UINT8 CompletionCode; + UINT8 Version; + UINT16 RecordCount; + UINT16 FreeSpace; + UINT32 RecentAdditionTimeStamp; + UINT32 RecentEraseTimeStamp; + IPMI_SDR_OPERATION_SUPPORT OperationSupport; } IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE; // @@ -167,125 +174,179 @@ typedef struct { // // Constants and Structure definitions for "Get SDR" command to follow here // +typedef union { + struct { + UINT8 EventScanningEnabled : 1; + UINT8 EventScanningDisabled : 1; + UINT8 InitSensorType : 1; + UINT8 InitHysteresis : 1; + UINT8 InitThresholds : 1; + UINT8 InitEvent : 1; + UINT8 InitScanning : 1; + UINT8 SettableSensor : 1; + } Bits; + UINT8 Uint8; +} IPMI_SDR_RECORD_SENSOR_INIT; + +typedef union { + struct { + UINT8 EventMessageControl : 2; + UINT8 ThresholdAccessSupport : 2; + UINT8 HysteresisSupport : 2; + UINT8 ReArmSupport : 1; + UINT8 IgnoreSensor : 1; + } Bits; + UINT8 Uint8; +} IPMI_SDR_RECORD_SENSOR_CAP; + +typedef union { + struct { + UINT8 Linearization : 7; + UINT8 Reserved : 1; + } Bits; + UINT8 Uint8; +} IPMI_SDR_RECORD_LINEARIZATION; + +typedef union { + struct { + UINT8 Toleremce : 6; + UINT8 MHi : 2; + } Bits; + UINT8 Uint8; +} IPMI_SDR_RECORD_M_TOLERANCE; + +typedef union { + struct { + UINT8 AccuracyLow : 6; + UINT8 BHi : 2; + } Bits; + UINT8 Uint8; +} IPMI_SDR_RECORD_B_ACCURACY; + +typedef union { + struct { + UINT8 Reserved : 2; + UINT8 AccuracyExp : 2; + UINT8 AccuracyHi : 4; + } Bits; + UINT8 Uint8; +} IPMI_SDR_RECORD_ACCURACY_SENSOR_DIR; + +typedef union { + struct { + UINT8 BExp : 4; + UINT8 RExp : 4; + } Bits; + UINT8 Uint8; +} IPMI_SDR_RECORD_R_EXP_B_EXP; + +typedef union { + struct { + UINT8 NominalReadingSpscified : 1; + UINT8 NominalMaxSpscified : 1; + UINT8 NominalMinSpscified : 1; + UINT8 Reserved : 5; + } Bits; + UINT8 Uint8; +} IPMI_SDR_RECORD_ANALOG_FLAGS; typedef struct { - UINT16 RecordId; // 1 - UINT8 Version; // 3 - UINT8 RecordType; // 4 - UINT8 RecordLength; // 5 - UINT8 OwnerId; // 6 - UINT8 OwnerLun; // 7 - UINT8 SensorNumber; // 8 - UINT8 EntityId; // 9 - UINT8 EntityInstance; // 10 - UINT8 EventScanningEnabled : 1; // 11 - UINT8 EventScanningDisabled : 1; // 11 - UINT8 InitSensorType : 1; // 11 - UINT8 InitHysteresis : 1; // 11 - UINT8 InitThresholds : 1; // 11 - UINT8 InitEvent : 1; // 11 - UINT8 InitScanning : 1; // 11 - UINT8 Reserved : 1; // 11 - UINT8 EventMessageControl : 2; // 12 - UINT8 ThresholdAccessSupport : 2; // 12 - UINT8 HysteresisSupport : 2; // 12 - UINT8 ReArmSupport : 1; // 12 - UINT8 IgnoreSensor : 1; // 12 - UINT8 SensorType; // 13 - UINT8 EventType; // 14 - UINT8 Reserved1[7]; // 15 - UINT8 UnitType; // 22 - UINT8 Reserved2; // 23 - UINT8 Linearization : 7; // 24 - UINT8 Reserved3 : 1; // 24 - UINT8 MLo; // 25 - UINT8 Toleremce : 6; // 26 - UINT8 MHi : 2; // 26 - UINT8 BLo; // 27 - UINT8 AccuracyLow : 6; // 28 - UINT8 BHi : 2; // 28 - UINT8 Reserved4 : 2; // 29 - UINT8 AccuracyExp : 2; // 29 - UINT8 AccuracyHi : 4; // 29 - UINT8 BExp : 4; // 30 - UINT8 RExp : 4; // 30 - UINT8 NominalReadingSpscified : 1; // 31 - UINT8 NominalMaxSpscified : 1; // 31 - UINT8 NominalMinSpscified : 1; // 31 - UINT8 Reserved5 : 5; // 31 - UINT8 NominalReading; // 32 - UINT8 Reserved6[4]; // 33 - UINT8 UpperNonRecoverThreshold; // 37 - UINT8 UpperCriticalThreshold; // 38 - UINT8 UpperNonCriticalThreshold; // 39 - UINT8 LowerNonRecoverThreshold; // 40 - UINT8 LowerCriticalThreshold; // 41 - UINT8 LowerNonCriticalThreshold; // 42 - UINT8 Reserved7[5]; // 43 - UINT8 IdStringLength; // 48 - UINT8 AsciiIdString[16]; // 49 - 64 + UINT16 RecordId; // 1 + UINT8 Version; // 3 + UINT8 RecordType; // 4 + UINT8 RecordLength; // 5 + UINT8 OwnerId; // 6 + UINT8 OwnerLun; // 7 + UINT8 SensorNumber; // 8 + UINT8 EntityId; // 9 + UINT8 EntityInstance; // 10 + IPMI_SDR_RECORD_SENSOR_INIT SensorInitialization; // 11 + IPMI_SDR_RECORD_SENSOR_CAP SensorCapabilities; // 12 + UINT8 SensorType; // 13 + UINT8 EventType; // 14 + UINT8 Reserved1[7]; // 15 + UINT8 UnitType; // 22 + UINT8 Reserved2; // 23 + IPMI_SDR_RECORD_LINEARIZATION Linearization; // 24 + UINT8 MLo; // 25 + IPMI_SDR_RECORD_M_TOLERANCE MHiTolerance; // 26 + UINT8 BLo; // 27 + IPMI_SDR_RECORD_B_ACCURACY BHiAccuracyLo; // 28 + IPMI_SDR_RECORD_ACCURACY_SENSOR_DIR AccuracySensorDirection; // 29 + IPMI_SDR_RECORD_R_EXP_B_EXP RExpBExp; // 30 + IPMI_SDR_RECORD_ANALOG_FLAGS AnalogFlags; // 31 + UINT8 NominalReading; // 32 + UINT8 Reserved3[4]; // 33 + UINT8 UpperNonRecoverThreshold; // 37 + UINT8 UpperCriticalThreshold; // 38 + UINT8 UpperNonCriticalThreshold; // 39 + UINT8 LowerNonRecoverThreshold; // 40 + UINT8 LowerCriticalThreshold; // 41 + UINT8 LowerNonCriticalThreshold; // 42 + UINT8 Reserved4[5]; // 43 + UINT8 IdStringLength; // 48 + UINT8 AsciiIdString[16]; // 49 - 64 } IPMI_SDR_RECORD_STRUCT_1; typedef struct { - UINT16 RecordId; // 1 - UINT8 Version; // 3 - UINT8 RecordType; // 4 - UINT8 RecordLength; // 5 - UINT8 OwnerId; // 6 - UINT8 OwnerLun; // 7 - UINT8 SensorNumber; // 8 - UINT8 EntityId; // 9 - UINT8 EntityInstance; // 10 - UINT8 SensorScanning : 1; // 11 - UINT8 EventScanning : 1; // 11 - UINT8 InitSensorType : 1; // 11 - UINT8 InitHysteresis : 1; // 11 - UINT8 InitThresholds : 1; // 11 - UINT8 InitEvent : 1; // 11 - UINT8 InitScanning : 1; // 11 - UINT8 Reserved : 1; // 11 - UINT8 EventMessageControl : 2; // 12 - UINT8 ThresholdAccessSupport : 2; // 12 - UINT8 HysteresisSupport : 2; // 12 - UINT8 ReArmSupport : 1; // 12 - UINT8 IgnoreSensor : 1; // 12 - UINT8 SensorType; // 13 - UINT8 EventType; // 14 - UINT8 Reserved1[7]; // 15 - UINT8 UnitType; // 22 - UINT8 Reserved2[9]; // 23 - UINT8 IdStringLength; // 32 - UINT8 AsciiIdString[16]; // 33 - 48 + UINT16 RecordId; // 1 + UINT8 Version; // 3 + UINT8 RecordType; // 4 + UINT8 RecordLength; // 5 + UINT8 OwnerId; // 6 + UINT8 OwnerLun; // 7 + UINT8 SensorNumber; // 8 + UINT8 EntityId; // 9 + UINT8 EntityInstance; // 10 + IPMI_SDR_RECORD_SENSOR_INIT SensorInitialization; // 11 + IPMI_SDR_RECORD_SENSOR_CAP SensorCapabilities; // 12 + UINT8 SensorType; // 13 + UINT8 EventType; // 14 + UINT8 Reserved1[7]; // 15 + UINT8 UnitType; // 22 + UINT8 Reserved2[9]; // 23 + UINT8 IdStringLength; // 32 + UINT8 AsciiIdString[16]; // 33 - 48 } IPMI_SDR_RECORD_STRUCT_2; -typedef struct { - UINT8 Reserved1 : 1; - UINT8 ControllerSlaveAddress : 7; - UINT8 FruDeviceId; - UINT8 BusId : 3; - UINT8 Lun : 2; - UINT8 Reserved : 2; - UINT8 LogicalFruDevice : 1; - UINT8 Reserved3 : 4; - UINT8 ChannelNumber : 4; +typedef union { + struct { + UINT8 Reserved1 : 1; + UINT8 ControllerSlaveAddress : 7; + UINT8 FruDeviceId; + UINT8 BusId : 3; + UINT8 Lun : 2; + UINT8 Reserved2 : 2; + UINT8 LogicalFruDevice : 1; + UINT8 Reserved3 : 4; + UINT8 ChannelNumber : 4; + } Bits; + UINT32 Uint32; } IPMI_FRU_DATA_INFO; +typedef union { + struct { + UINT8 Length : 4; + UINT8 Reserved : 1; + UINT8 StringType : 3; + } Bits; + UINT8 Uint8; +} IPMI_SDR_RECORD_DEV_ID_STR_TYPE_LENGTH; + typedef struct { - UINT16 RecordId; // 1 - UINT8 Version; // 3 - UINT8 RecordType; // 4 - UINT8 RecordLength; // 5 - IPMI_FRU_DATA_INFO FruDeviceData; // 6 - UINT8 Reserved1; // 10 - UINT8 DeviceType; // 11 - UINT8 DeviceTypeModifier; // 12 - UINT8 FruEntityId; // 13 - UINT8 FruEntityInstance; // 14 - UINT8 OemReserved; // 15 - UINT8 Length : 4; // 16 - UINT8 Reserved2 : 1; // 16 - UINT8 StringType : 3; // 16 - UINT8 String[16]; // 17 + UINT16 RecordId; // 1 + UINT8 Version; // 3 + UINT8 RecordType; // 4 + UINT8 RecordLength; // 5 + IPMI_FRU_DATA_INFO FruDeviceData; // 6 + UINT8 Reserved; // 10 + UINT8 DeviceType; // 11 + UINT8 DeviceTypeModifier; // 12 + UINT8 FruEntityId; // 13 + UINT8 FruEntityInstance; // 14 + UINT8 OemReserved; // 15 + IPMI_SDR_RECORD_DEV_ID_STR_TYPE_LENGTH StringTypeLength; // 16 + UINT8 String[16]; // 17 } IPMI_SDR_RECORD_STRUCT_11; typedef struct { diff --git a/MdePkg/Include/IndustryStandard/IpmiNetFnTransport.h b/MdePkg/Include/IndustryStandard/IpmiNetFnTransport.h index 28ede2f63a..4b381f07e1 100644 --- a/MdePkg/Include/IndustryStandard/IpmiNetFnTransport.h +++ b/MdePkg/Include/IndustryStandard/IpmiNetFnTransport.h @@ -109,23 +109,29 @@ typedef enum { IpmiOem2 } IPMI_LAN_DEST_TYPE_DEST_TYPE; -typedef struct { - UINT8 NoAuth : 1; - UINT8 MD2Auth : 1; - UINT8 MD5Auth : 1; - UINT8 Reserved1 : 1; - UINT8 StraightPswd : 1; - UINT8 OemType : 1; - UINT8 Reserved2 : 2; +typedef union { + struct { + UINT8 NoAuth : 1; + UINT8 MD2Auth : 1; + UINT8 MD5Auth : 1; + UINT8 Reserved1 : 1; + UINT8 StraightPswd : 1; + UINT8 OemType : 1; + UINT8 Reserved2 : 2; + } Bits; + UINT8 Uint8; } IPMI_LAN_AUTH_TYPE; typedef struct { UINT8 IpAddress[4]; } IPMI_LAN_IP_ADDRESS; -typedef struct { - UINT8 AddressSrc : 4; - UINT8 Reserved : 4; +typedef union { + struct { + UINT8 AddressSrc : 4; + UINT8 Reserved : 4; + } Bits; + UINT8 Uint8; } IPMI_LAN_IP_ADDRESS_SRC; typedef struct { @@ -136,13 +142,27 @@ typedef struct { UINT8 IpAddress[4]; } IPMI_LAN_SUBNET_MASK; +typedef union { + struct { + UINT8 IpFlag : 3; + UINT8 Reserved : 5; + } Bits; + UINT8 Uint8; +} IPMI_LAN_IPV4_HDR_PARAM_DATA_2; + +typedef union { + struct { + UINT8 Precedence : 3; + UINT8 Reserved : 1; + UINT8 ServiceType : 4; + } Bits; + UINT8 Uint8; +} IPMI_LAN_IPV4_HDR_PARAM_DATA_3; + typedef struct { - UINT8 TimeToLive; - UINT8 IpFlag : 3; - UINT8 Reserved1 : 5; - UINT8 Precedence : 3; - UINT8 Reserved2 : 1; - UINT8 ServiceType : 4; + UINT8 TimeToLive; + IPMI_LAN_IPV4_HDR_PARAM_DATA_2 Data2; + IPMI_LAN_IPV4_HDR_PARAM_DATA_3 Data3; } IPMI_LAN_IPV4_HDR_PARAM; typedef struct { @@ -150,10 +170,13 @@ typedef struct { UINT8 RcmpPortLsb; } IPMI_LAN_RCMP_PORT; -typedef struct { - UINT8 EnableBmcArpResponse : 1; - UINT8 EnableBmcGratuitousArp : 1; - UINT8 Reserved : 6; +typedef union { + struct { + UINT8 EnableBmcArpResponse : 1; + UINT8 EnableBmcGratuitousArp : 1; + UINT8 Reserved : 6; + } Bits; + UINT8 Uint8; } IPMI_LAN_BMC_GENERATED_ARP_CONTROL; typedef struct { @@ -164,23 +187,50 @@ typedef struct { UINT8 Data[18]; } IPMI_LAN_COMMUNITY_STRING; -typedef struct { - UINT8 DestinationSelector : 4; - UINT8 Reserved2 : 4; - UINT8 DestinationType : 3; - UINT8 Reserved1 : 4; - UINT8 AlertAcknowledged : 1; -} IPMI_LAN_DEST_TYPE; +typedef union { + struct { + UINT8 DestinationSelector : 4; + UINT8 Reserved : 4; + } Bits; + UINT8 Uint8; +} IPMI_LAN_SET_SELECTOR; + +typedef union { + struct { + UINT8 DestinationType : 3; + UINT8 Reserved : 4; + UINT8 AlertAcknowledged : 1; + } Bits; + UINT8 Uint8; +} IPMI_LAN_DEST_TYPE_DESTINATION_TYPE; typedef struct { - UINT8 DestinationSelector : 4; - UINT8 Reserved1 : 4; - UINT8 AlertingIpAddressSelector : 4; - UINT8 AddressFormat : 4; - UINT8 UseDefaultGateway : 1; - UINT8 Reserved2 : 7; - IPMI_LAN_IP_ADDRESS AlertingIpAddress; - IPMI_LAN_MAC_ADDRESS AlertingMacAddress; + IPMI_LAN_SET_SELECTOR SetSelector; + IPMI_LAN_DEST_TYPE_DESTINATION_TYPE DestinationType; +} IPMI_LAN_DEST_TYPE; + +typedef union { + struct { + UINT8 AlertingIpAddressSelector : 4; + UINT8 AddressFormat : 4; + } Bits; + UINT8 Uint8; +} IPMI_LAN_ADDRESS_FORMAT; + +typedef union { + struct { + UINT8 UseDefaultGateway : 1; + UINT8 Reserved2 : 7; + } Bits; + UINT8 Uint8; +} IPMI_LAN_GATEWAY_SELECTOR; + +typedef struct { + IPMI_LAN_SET_SELECTOR SetSelector; + IPMI_LAN_ADDRESS_FORMAT AddressFormat; + IPMI_LAN_GATEWAY_SELECTOR GatewaySelector; + IPMI_LAN_IP_ADDRESS AlertingIpAddress; + IPMI_LAN_MAC_ADDRESS AlertingMacAddress; } IPMI_LAN_DEST_ADDRESS; typedef union { @@ -198,30 +248,46 @@ typedef union { IPMI_LAN_DEST_ADDRESS IpmiLanDestAddress; } IPMI_LAN_OPTIONS; +typedef union { + struct { + UINT8 AddressSourceType : 4; + UINT8 Reserved : 3; + UINT8 EnableStatus : 1; + } Bits; + UINT8 Uint8; +} IPMI_LAN_IPV6_ADDRESS_SOURCE_TYPE; + typedef struct { - UINT8 SetSelector; - UINT8 AddressSourceType : 4; - UINT8 Reserved : 3; - UINT8 EnableStatus : 1; - UINT8 Ipv6Address[16]; - UINT8 AddressPrefixLen; - UINT8 AddressStatus; + UINT8 SetSelector; + IPMI_LAN_IPV6_ADDRESS_SOURCE_TYPE AddressSourceType; + UINT8 Ipv6Address[16]; + UINT8 AddressPrefixLen; + UINT8 AddressStatus; } IPMI_LAN_IPV6_STATIC_ADDRESS; // // Set in progress parameter // -typedef struct { - UINT8 SetInProgress:2; - UINT8 Reserved:6; +typedef union { + struct { + UINT8 SetInProgress:2; + UINT8 Reserved:6; + } Bits; + UINT8 Uint8; } IPMI_LAN_SET_IN_PROGRESS; +typedef union { + struct { + UINT8 ChannelNo : 4; + UINT8 Reserved : 4; + } Bits; + UINT8 Uint8; +} IPMI_SET_LAN_CONFIG_CHANNEL_NUM; typedef struct { - UINT8 ChannelNo : 4; - UINT8 Reserved : 4; - UINT8 ParameterSelector; - UINT8 ParameterData[0]; + IPMI_SET_LAN_CONFIG_CHANNEL_NUM ChannelNumber; + UINT8 ParameterSelector; + UINT8 ParameterData[0]; } IPMI_SET_LAN_CONFIGURATION_PARAMETERS_COMMAND_REQUEST; // @@ -232,13 +298,20 @@ typedef struct { // // Constants and Structure definitions for "Get Lan Configuration Parameters" command to follow here // +typedef union { + struct { + UINT8 ChannelNo : 4; + UINT8 Reserved : 3; + UINT8 GetParameter : 1; + } Bits; + UINT8 Uint8; +} IPMI_GET_LAN_CONFIG_CHANNEL_NUM; + typedef struct { - UINT8 ChannelNo : 4; - UINT8 Reserved : 3; - UINT8 GetParameter : 1; - UINT8 ParameterSelector; - UINT8 SetSelector; - UINT8 BlockSelector; + IPMI_GET_LAN_CONFIG_CHANNEL_NUM ChannelNumber; + UINT8 ParameterSelector; + UINT8 SetSelector; + UINT8 BlockSelector; } IPMI_GET_LAN_CONFIGURATION_PARAMETERS_REQUEST; typedef struct { @@ -281,67 +354,100 @@ typedef struct { // // EMP OPTION DATA // -typedef struct { - UINT8 NoAuthentication : 1; - UINT8 MD2Authentication : 1; - UINT8 MD5Authentication : 1; - UINT8 Reserved1 : 1; - UINT8 StraightPassword : 1; - UINT8 OemProprietary : 1; - UINT8 Reservd2 : 2; +typedef union { + struct { + UINT8 NoAuthentication : 1; + UINT8 MD2Authentication : 1; + UINT8 MD5Authentication : 1; + UINT8 Reserved1 : 1; + UINT8 StraightPassword : 1; + UINT8 OemProprietary : 1; + UINT8 Reservd2 : 2; + } Bits; + UINT8 Uint8; } IPMI_EMP_AUTH_TYPE; -typedef struct { - UINT8 EnableBasicMode : 1; - UINT8 EnablePPPMode : 1; - UINT8 EnableTerminalMode : 1; - UINT8 Reserved1 : 2; - UINT8 SnoopOsPPPNegotiation : 1; - UINT8 Reserved2 : 1; - UINT8 DirectConnect : 1; +typedef union { + struct { + UINT8 EnableBasicMode : 1; + UINT8 EnablePPPMode : 1; + UINT8 EnableTerminalMode : 1; + UINT8 Reserved1 : 2; + UINT8 SnoopOsPPPNegotiation : 1; + UINT8 Reserved2 : 1; + UINT8 DirectConnect : 1; + } Bits; + UINT8 Uint8; } IPMI_EMP_CONNECTION_TYPE; -typedef struct { - UINT8 InactivityTimeout : 4; - UINT8 Reserved : 4; +typedef union { + struct { + UINT8 InactivityTimeout : 4; + UINT8 Reserved : 4; + } Bits; + UINT8 Uint8; } IPMI_EMP_INACTIVITY_TIMEOUT; +typedef union { + struct { + UINT8 IpmiCallback : 1; + UINT8 CBCPCallback : 1; + UINT8 Reserved : 6; + } Bits; + UINT8 Uint8; +} IPMI_CHANNEL_CALLBACK_CONTROL_ENABLE; + +typedef union { + struct { + UINT8 CbcpEnableNoCallback : 1; + UINT8 CbcpEnablePreSpecifiedNumber : 1; + UINT8 CbcpEnableUserSpecifiedNumber : 1; + UINT8 CbcpEnableCallbackFromList : 1; + UINT8 Reserved : 4; + } Bits; + UINT8 Uint8; +} IPMI_CHANNEL_CALLBACK_CONTROL_CBCP; + typedef struct { - UINT8 IpmiCallback : 1; - UINT8 CBCPCallback : 1; - UINT8 Reserved1 : 6; - UINT8 CbcpEnableNoCallback : 1; - UINT8 CbcpEnablePreSpecifiedNumber : 1; - UINT8 CbcpEnableUserSpecifiedNumber : 1; - UINT8 CbcpEnableCallbackFromList : 1; - UINT8 Reserved : 4; - UINT8 CallbackDestination1; - UINT8 CallbackDestination2; - UINT8 CallbackDestination3; + IPMI_CHANNEL_CALLBACK_CONTROL_ENABLE CallbackEnable; + IPMI_CHANNEL_CALLBACK_CONTROL_CBCP CBCPNegotiation; + UINT8 CallbackDestination1; + UINT8 CallbackDestination2; + UINT8 CallbackDestination3; } IPMI_EMP_CHANNEL_CALLBACK_CONTROL; -typedef struct { - UINT8 CloseSessionOnDCDLoss : 1; - UINT8 EnableSessionInactivityTimeout : 1; - UINT8 Reserved : 6; +typedef union { + struct { + UINT8 CloseSessionOnDCDLoss : 1; + UINT8 EnableSessionInactivityTimeout : 1; + UINT8 Reserved : 6; + } Bits; + UINT8 Uint8; } IPMI_EMP_SESSION_TERMINATION; -typedef struct { - UINT8 Reserved1 : 5; - UINT8 EnableDtrHangup : 1; - UINT8 FlowControl : 2; - UINT8 BitRate : 4; - UINT8 Reserved2 : 4; - UINT8 SaveSetting : 1; - UINT8 SetComPort : 1; - UINT8 Reserved3 : 6; +typedef union { + struct { + UINT8 Reserved1 : 5; + UINT8 EnableDtrHangup : 1; + UINT8 FlowControl : 2; + UINT8 BitRate : 4; + UINT8 Reserved2 : 4; + UINT8 SaveSetting : 1; + UINT8 SetComPort : 1; + UINT8 Reserved3 : 6; + } Bits; + UINT8 Uint8; + UINT16 Uint16; } IPMI_EMP_MESSAGING_COM_SETTING; -typedef struct { - UINT8 RingDurationInterval : 6; - UINT8 Reserved1 : 2; - UINT8 RingDeadTime : 4; - UINT8 Reserved : 4; +typedef union { + struct { + UINT8 RingDurationInterval : 6; + UINT8 Reserved1 : 2; + UINT8 RingDeadTime : 4; + UINT8 Reserved2 : 4; + } Bits; + UINT8 Uint8; } IPMI_EMP_MODEM_RING_TIME; typedef struct { @@ -369,14 +475,20 @@ typedef struct { UINT8 CommunityString[18]; } IPMI_EMP_COMMUNITY_STRING; -typedef struct { - UINT8 Reserved5 : 4; - UINT8 DialStringSelector : 4; +typedef union { + struct { + UINT8 Reserved : 4; + UINT8 DialStringSelector : 4; + } Bits; + UINT8 Uint8; } IPMI_DIAL_PAGE_DESTINATION; -typedef struct { - UINT8 TapAccountSelector : 4; - UINT8 Reserved : 4; +typedef union { + struct { + UINT8 TapAccountSelector : 4; + UINT8 Reserved : 4; + } Bits; + UINT8 Uint8; } IPMI_TAP_PAGE_DESTINATION; typedef struct { @@ -390,40 +502,78 @@ typedef union { IPMI_PPP_ALERT_DESTINATION PppAlertDestination; } IPMI_DEST_TYPE_SPECIFIC; +typedef union { + struct { + UINT8 DestinationSelector : 4; + UINT8 Reserved : 4; + } Bits; + UINT8 Uint8; +} IPMI_EMP_DESTINATION_SELECTOR; + +typedef union { + struct { + UINT8 DestinationType : 4; + UINT8 Reserved : 3; + UINT8 AlertAckRequired : 1; + } Bits; + UINT8 Uint8; +} IPMI_EMP_DESTINATION_TYPE; + +typedef union { + struct { + UINT8 NumRetriesCall : 3; + UINT8 Reserved1 : 1; + UINT8 NumRetryAlert : 3; + UINT8 Reserved2 : 1; + } Bits; + UINT8 Uint8; +} IPMI_EMP_RETRIES; + typedef struct { - UINT8 DestinationSelector : 4; - UINT8 Reserved1 : 4; - UINT8 DestinationType : 4; - UINT8 Reserved2 : 3; - UINT8 AlertAckRequired : 1; - UINT8 AlertAckTimeoutSeconds; - UINT8 NumRetriesCall : 3; - UINT8 Reserved3 : 1; - UINT8 NumRetryAlert : 3; - UINT8 Reserved4 : 1; - IPMI_DEST_TYPE_SPECIFIC DestinationTypeSpecific; + IPMI_EMP_DESTINATION_SELECTOR DestinationSelector; + IPMI_EMP_DESTINATION_TYPE DestinationType; + UINT8 AlertAckTimeoutSeconds; + IPMI_EMP_RETRIES Retries; + IPMI_DEST_TYPE_SPECIFIC DestinationTypeSpecific; } IPMI_EMP_DESTINATION_INFO; -typedef struct { - UINT8 DestinationSelector : 4; - UINT8 Reserved1 : 4; - UINT8 Parity : 3; - UINT8 CharacterSize : 1; - UINT8 StopBit : 1; - UINT8 DtrHangup : 1; - UINT8 FlowControl : 2; - UINT8 BitRate : 4; - UINT8 Reserved2 : 4; - UINT8 SaveSetting : 1; - UINT8 SetComPort : 1; - UINT8 Reserved3 : 6; -} IPMI_EMP_DESTINATION_COM_SETTING; +typedef union { + struct { + UINT8 Parity : 3; + UINT8 CharacterSize : 1; + UINT8 StopBit : 1; + UINT8 DtrHangup : 1; + UINT8 FlowControl : 2; + } Bits; + UINT8 Uint8; +} IPMI_EMP_DESTINATION_COM_SETTING_DATA_2; + +typedef union { + struct { + UINT8 BitRate : 4; + UINT8 Reserved : 4; + } Bits; + UINT8 Uint8; +} IPMI_EMP_BIT_RATE; typedef struct { - UINT8 DialStringSelector : 4; - UINT8 Reserved1 : 4; - UINT8 Reserved2; - UINT8 DialString[48]; + IPMI_EMP_DESTINATION_SELECTOR DestinationSelector; + IPMI_EMP_DESTINATION_COM_SETTING_DATA_2 Data2; + IPMI_EMP_BIT_RATE BitRate; +} IPMI_EMP_DESTINATION_COM_SETTING; + +typedef union { + struct { + UINT8 DialStringSelector : 4; + UINT8 Reserved : 4; + } Bits; + UINT8 Uint8; +} IPMI_DIAL_STRING_SELECTOR; + +typedef struct { + IPMI_DIAL_STRING_SELECTOR DestinationSelector; + UINT8 Reserved; + UINT8 DialString[48]; } IPMI_DESTINATION_DIAL_STRING; typedef union { @@ -431,16 +581,31 @@ typedef union { UINT8 IpAddress[4]; } IPMI_PPP_IP_ADDRESS; -typedef struct { - UINT8 IpAddressSelector : 4; - UINT8 Reserved1 : 4; - IPMI_PPP_IP_ADDRESS PppIpAddress; -} IPMI_DESTINATION_IP_ADDRESS; +typedef union { + struct { + UINT8 IpAddressSelector : 4; + UINT8 Reserved : 4; + } Bits; + UINT8 Uint8; +} IPMI_DESTINATION_IP_ADDRESS_SELECTOR; typedef struct { - UINT8 TapSelector; - UINT8 TapServiceSelector : 4; - UINT8 TapDialStringSelector : 4; + IPMI_DESTINATION_IP_ADDRESS_SELECTOR DestinationSelector; + IPMI_PPP_IP_ADDRESS PppIpAddress; +} IPMI_DESTINATION_IP_ADDRESS; + +typedef union { + struct { + UINT8 TapServiceSelector : 4; + UINT8 TapDialStringSelector : 4; + } Bits; + UINT8 Uint8; +} IPMI_TAP_DIAL_STRING_SERVICE_SELECTOR; + + +typedef struct { + UINT8 TapSelector; + IPMI_TAP_DIAL_STRING_SERVICE_SELECTOR TapDialStringServiceSelector; } IPMI_DESTINATION_TAP_ACCOUNT; typedef struct { @@ -509,22 +674,43 @@ typedef union { #define IPMI_MUX_SETTING_BLOCK_REQUEST_MUX_TO_BMC 0x7 #define IPMI_MUX_SETTING_ALLOW_REQUEST_MUX_TO_BMC 0x8 -typedef struct { - UINT8 ChannelNo : 4; - UINT8 Reserved1 : 4; - UINT8 MuxSetting : 4; - UINT8 Reserved2 : 4; -} IPMI_SET_SERIAL_MODEM_MUX_COMMAND_REQUEST; +typedef union { + struct { + UINT8 ChannelNo : 4; + UINT8 Reserved : 4; + } Bits; + UINT8 Uint8; +} IPMI_MUX_CHANNEL_NUM; + +typedef union { + struct { + UINT8 MuxSetting : 4; + UINT8 Reserved : 4; + } Bits; + UINT8 Uint8; +} IPMI_MUX_SETTING_REQUEST; typedef struct { - UINT8 CompletionCode; - UINT8 MuxSetToBmc : 1; - UINT8 CommandStatus : 1; - UINT8 MessagingSessionActive : 1; - UINT8 AlertInProgress : 1; - UINT8 Reserved2 : 2; - UINT8 MuxToBmcAllowed : 1; - UINT8 MuxToSystemBlocked : 1; + IPMI_MUX_CHANNEL_NUM ChannelNumber; + IPMI_MUX_SETTING_REQUEST MuxSetting; +} IPMI_SET_SERIAL_MODEM_MUX_COMMAND_REQUEST; + +typedef union { + struct { + UINT8 MuxSetToBmc : 1; + UINT8 CommandStatus : 1; + UINT8 MessagingSessionActive : 1; + UINT8 AlertInProgress : 1; + UINT8 Reserved : 2; + UINT8 MuxToBmcAllowed : 1; + UINT8 MuxToSystemBlocked : 1; + } Bits; + UINT8 Uint8; +} IPMI_MUX_SETTING_PRESENT_STATE; + +typedef struct { + UINT8 CompletionCode; + IPMI_MUX_SETTING_PRESENT_STATE MuxSetting; } IPMI_SET_SERIAL_MODEM_MUX_COMMAND_RESPONSE; // @@ -620,12 +806,19 @@ typedef struct { // // Constants and Structure definitions for "SOL activating" command to follow here // +typedef union { + struct { + UINT8 SessionState : 4; + UINT8 Reserved : 4; + } Bits; + UINT8 Uint8; +} IPMI_SOL_SESSION_STATE; + typedef struct { - UINT8 SessionState : 4; - UINT8 Reserved : 4; - UINT8 PayloadInstance; - UINT8 FormatVersionMajor; // 1 - UINT8 FormatVersionMinor; // 0 + IPMI_SOL_SESSION_STATE SessionState; + UINT8 PayloadInstance; + UINT8 FormatVersionMajor; // 1 + UINT8 FormatVersionMinor; // 0 } IPMI_SOL_ACTIVATING_REQUEST; // @@ -650,11 +843,18 @@ typedef struct { #define IPMI_SOL_CONFIGURATION_PARAMETER_SOL_PAYLOAD_CHANNEL 7 #define IPMI_SOL_CONFIGURATION_PARAMETER_SOL_PAYLOAD_PORT 8 +typedef union { + struct { + UINT8 ChannelNumber : 4; + UINT8 Reserved : 4; + } Bits; + UINT8 Uint8; +} IPMI_SET_SOL_CONFIG_PARAM_CHANNEL_NUM; + typedef struct { - UINT8 ChannelNumber : 4; - UINT8 Reserved : 4; - UINT8 ParameterSelector; - UINT8 ParameterData[0]; + IPMI_SET_SOL_CONFIG_PARAM_CHANNEL_NUM ChannelNumber; + UINT8 ParameterSelector; + UINT8 ParameterData[0]; } IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST; // @@ -665,13 +865,20 @@ typedef struct { // // Constants and Structure definitions for "Get SOL Configuration Parameters" command to follow here // +typedef union { + struct { + UINT8 ChannelNumber : 4; + UINT8 Reserved : 3; + UINT8 GetParameter : 1; + } Bits; + UINT8 Uint8; +} IPMI_GET_SOL_CONFIG_PARAM_CHANNEL_NUM; + typedef struct { - UINT8 ChannelNumber : 4; - UINT8 Reserved : 3; - UINT8 GetParameter : 1; - UINT8 ParameterSelector; - UINT8 SetSelector; - UINT8 BlockSelector; + IPMI_GET_SOL_CONFIG_PARAM_CHANNEL_NUM ChannelNumber; + UINT8 ParameterSelector; + UINT8 SetSelector; + UINT8 BlockSelector; } IPMI_GET_SOL_CONFIGURATION_PARAMETERS_REQUEST; typedef struct {