From aeb6f576258ef18c0debca1d6b908df1799e0d9b Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Sat, 28 Apr 2018 13:48:06 +0800 Subject: [PATCH] MdePkg/IndustryStandard/Ipmi: Use union for bitmap fields This commit enhances the bitmap fields defined in the IPMI header files, union types will be used to provide the users with both the individual bitmap access and the whole byte/word access. Cc: Michael Kinney Cc: Jiewen Yao Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Hao Wu Reviewed-by: Liming Gao --- .../IpmiFruInformationStorage.h | 60 +- .../Include/IndustryStandard/IpmiNetFnApp.h | 411 +++++++++---- .../IndustryStandard/IpmiNetFnChassis.h | 271 ++++++--- .../IndustryStandard/IpmiNetFnStorage.h | 309 ++++++---- .../IndustryStandard/IpmiNetFnTransport.h | 561 ++++++++++++------ 5 files changed, 1076 insertions(+), 536 deletions(-) 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 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 ChannelNo : 4; - UINT8 Reserve1 : 4; - UINT8 Reserve2 : 6; - UINT8 MemoryType : 2; + 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; - UINT8 AccessMode : 3; - UINT8 UserLevelAuthEnabled : 1; - UINT8 MessageAuthEnable : 1; - UINT8 Alert : 1; - UINT8 Reserve1 : 2; - UINT8 ChannelPriviledgeLimit : 4; - UINT8 Reserve2 : 4; + 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 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 ChannelNo : 4; - UINT8 Reserved1 : 4; - UINT8 UserId : 6; - UINT8 Reserved2 : 2; + 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; - 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; + 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 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 { - // - // 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_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 { - UINT8 ChannelNumber:4; - UINT8 Reserved:4; - UINT8 SessionId[4]; - UINT8 BootInfoTimeStamp[4]; + 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 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 +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 + 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 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 +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 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 struct { - UINT8 TimeToLive; - UINT8 IpFlag : 3; - UINT8 Reserved1 : 5; - UINT8 Precedence : 3; - UINT8 Reserved2 : 1; - UINT8 ServiceType : 4; +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; + 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 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 Reserved2 : 4; - UINT8 DestinationType : 3; - UINT8 Reserved1 : 4; - UINT8 AlertAcknowledged : 1; + IPMI_LAN_SET_SELECTOR SetSelector; + IPMI_LAN_DEST_TYPE_DESTINATION_TYPE DestinationType; } IPMI_LAN_DEST_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; +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 struct { - UINT8 SetSelector; - UINT8 AddressSourceType : 4; - UINT8 Reserved : 3; - UINT8 EnableStatus : 1; - UINT8 Ipv6Address[16]; - UINT8 AddressPrefixLen; - UINT8 AddressStatus; +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; + 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 struct { - UINT8 ChannelNo : 4; - UINT8 Reserved : 3; - UINT8 GetParameter : 1; - UINT8 ParameterSelector; - UINT8 SetSelector; - UINT8 BlockSelector; +typedef union { + struct { + UINT8 ChannelNo : 4; + UINT8 Reserved : 3; + UINT8 GetParameter : 1; + } Bits; + UINT8 Uint8; +} IPMI_GET_LAN_CONFIG_CHANNEL_NUM; + +typedef struct { + 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 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; +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 { + 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 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; +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 { + 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 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 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_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 { - UINT8 DialStringSelector : 4; - UINT8 Reserved1 : 4; - UINT8 Reserved2; - UINT8 DialString[48]; + 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 union { + struct { + UINT8 IpAddressSelector : 4; + UINT8 Reserved : 4; + } Bits; + UINT8 Uint8; +} IPMI_DESTINATION_IP_ADDRESS_SELECTOR; + typedef struct { - UINT8 IpAddressSelector : 4; - UINT8 Reserved1 : 4; - IPMI_PPP_IP_ADDRESS PppIpAddress; + 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; - UINT8 TapServiceSelector : 4; - UINT8 TapDialStringSelector : 4; + 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 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 ChannelNo : 4; - UINT8 Reserved1 : 4; - UINT8 MuxSetting : 4; - UINT8 Reserved2 : 4; + IPMI_MUX_CHANNEL_NUM ChannelNumber; + IPMI_MUX_SETTING_REQUEST MuxSetting; } IPMI_SET_SERIAL_MODEM_MUX_COMMAND_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; +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 struct { - UINT8 SessionState : 4; - UINT8 Reserved : 4; - UINT8 PayloadInstance; - UINT8 FormatVersionMajor; // 1 - UINT8 FormatVersionMinor; // 0 +typedef union { + struct { + UINT8 SessionState : 4; + UINT8 Reserved : 4; + } Bits; + UINT8 Uint8; +} IPMI_SOL_SESSION_STATE; + +typedef struct { + 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 struct { - UINT8 ChannelNumber : 4; - UINT8 Reserved : 3; - UINT8 GetParameter : 1; - UINT8 ParameterSelector; - UINT8 SetSelector; - UINT8 BlockSelector; +typedef union { + struct { + UINT8 ChannelNumber : 4; + UINT8 Reserved : 3; + UINT8 GetParameter : 1; + } Bits; + UINT8 Uint8; +} IPMI_GET_SOL_CONFIG_PARAM_CHANNEL_NUM; + +typedef struct { + IPMI_GET_SOL_CONFIG_PARAM_CHANNEL_NUM ChannelNumber; + UINT8 ParameterSelector; + UINT8 SetSelector; + UINT8 BlockSelector; } IPMI_GET_SOL_CONFIGURATION_PARAMETERS_REQUEST; typedef struct { -- 2.39.2