/** @file Generic Definations for Server Management Header File. @copyright Copyright 1999 - 2021 Intel Corporation.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _SERVER_MANAGEMENT_H_ #define _SERVER_MANAGEMENT_H_ // // Defines // #define PRIM_IPMB_CHANNEL 0x0 #define BMC_LUN 0x0 #define PRESENT_INTERFACE 0xE #define SYSTEM_INTERFACE 0xF #define COMPLETE_SEL_RECORD 0xFF #define IPMI_UNSPECIFIED_ERROR 0xFF // // Net Function Defines. // #define SM_CHASSIS 0x0 #define SM_BRIDGE 0x2 #define SM_SENSOR_EVENT 0x4 #define SM_APPLICATION 0x6 #define SM_FIRMWARE 0x8 #define SM_STORAGE 0xA #define SM_TRANSPORT 0xC #define SM_GROUP_EXT 0x2C #define SM_OEM_GROUP 0x2E #define SM_INTEL_OEM 0x30 #define SM_SOL_OEM 0x34 // // IPMI Command Definations. // #define IPMI_GET_DEVICE_ID 1 #define IPMI_COLD_RESET 2 #define IPMI_WARM_RESET 3 #define IPMI_GET_SELF_TEST_RESULTS 4 #define IPMI_MFG_MODE_ON 5 #define IPMI_SET_ACPI_POWER_STATE 6 #define IPMI_GET_ACPI_POWER_STATE 7 #define IPMI_GET_DEVICE_GUID 8 #define IPMI_GET_MESSAGE_FLAGS 0x31 #define IPMI_GET_MESSAGE 0x33 #define IPMI_SEND_MESSAGE 0x34 #define RESERVE_SEL_ENTRY 0x42 #define ADD_SEL_ENTRY 0x44 #define GET_SEL_ENTRY 0x43 #define DELETE_SEL_ENTRY 0x46 #define CLEAR_SEL_ENTRY 0x47 #define SET_BMC_GLOBALS 0x2E #define GET_BMC_GLOBALS 0x2F #define SET_SEL_TIME 0x49 #define GET_SELF_TEST_RESULTS 0x4 #define NMI_ENABLE_DISABLE 0xF7 // // Controller Attributes // #define IPMI_SENSOR_DEVICE_SUPPORT 0x1 #define IPMB_SDR_REPOSITORY_SUPPORT 0x2 #define IPMI_SEL_DEVICE_SUPPORT 0x4 #define IPMI_FRU_INVENTORY_SUPPORT 0x8 #define IPMB_EVENT_RECEIVER_SUPPORT 0x10 #define IPMB_EVENT_GENERATOR_SUPPORT 0x20 #define ICMB_BRIDGE_SUPPORT 0x40 #define ICMB_CHASSIS_DEVICE_SUPPORT 0x80 #define SM_TCP_SUPPORT 0x100 #define SM_UDP_SUPPORT 0x200 #define SM_IPV4_SUPPORT 0x400 #define SM_IPV6_SUPPORT 0x800 #define SM_RS232_SUPPORT 0x1000 // // Sensor Type Definations // typedef enum { SensorReserved, SensorTemperature, SensorVoltage, SensorCurrent, SensorFan, SensorPhysicalSecurity, SensorPlatformSecurityViolationAttempt, SensorProcessor, SensorPowerSupply, SensorPowerUnit, SensorCoolingDevice, SensorOtherUnits, SensorMemory, SensorDriveSlot, SensorPOSTMemoryResize, SensorSystemFirmwareProgress, SensorEventLoggingDisabled, SensorWatchdog1, SensorSystemEvent, SensorCriticalInterrupt, SensorButton, SensorModuleBoard, SensorMicrocontrollerCoprocessor, SensorAddinCard, SensorChassis, SensorChipSet, SensorOtherFRU, SensorCableInterconnect, SensorTerminator, SensorSystemBootInitiated, SensorBootError, SensorOSBoot, SensorOSCriticalStop, SensorSlotConnector, SensorSystemACPIPowerState, SensorWatchdog2, SensorPlatformAlert, SensorEntityPresence, SensorMonitorASIC, SensorLAN, SensorManagementSubsystemHealth } SM_SENSOR_TYPE; // // Sensor Event Type Code // #define SENSOR_THRESHOLD_EVENT_TYPE 1 #define SENSOR_SPECIFIC_EVENT_TYPE 0x6F // // THRESHOLD SENSOR TYPE BIT MASK // #define LOWER_NON_CRITICAL_GOING_LOW 0x1 #define LOWER_NON_CRITICAL_GOING_HI 0x2 #define LOWER_CRITICAL_GOING_LOW 0x4 #define LOWER_CRITICAL_GOING_HI 0x8 #define LOWER_NON_RECOVER_GOING_LOW 0x10 #define LOWER_NON_RECOVER_GOING_HI 0x20 #define UPPER_NON_CRITICAL_GOING_LOW 0x40 #define UPPER_NON_CRITICAL_GOING_HI 0x80 #define UPPER_CRITICAL_GOING_LOW 0x100 #define UPPER_CRITICAL_GOING_HI 0x200 #define UPPER_NON_RECOVER_GOING_LOW 0x400 #define UPPER_NON_RECOVER_GOING_HI 0x800 // // Server Management COM Addressing types // typedef enum { SmReserved, SmIpmb, SmIcmb1_0, SmIcmb0_9, Sm802_3_Lan, SmRs_232, SmOtherLan, SmPciSmBus, SmSmBus1_0, SmSmBus2_0, SmUsb1_x, SmUsb2_x, SmBmc } SM_CHANNEL_MEDIA_TYPE; typedef enum { SmTcp, SmUdp, SmIcmp, SmIpmi } SM_PROTOCOL_TYPE; typedef enum { SmMessage, SmRawData } SM_DATA_TYPE; typedef struct { BOOLEAN IpAddressType; UINT16 IpPort; UINT8 IpAddress[16]; } SM_IP_ADDRESS; typedef struct { UINT8 SlaveAddress; UINT8 LunAddress; UINT8 NetFunction; UINT8 ChannelAddress; } SM_IPMI_ADDRESS; typedef struct { UINT8 SerialPortNumber; } SM_SERIAL_ADDRESS; typedef union { SM_IP_ADDRESS IpAddress; SM_IPMI_ADDRESS BmcAddress; SM_SERIAL_ADDRESS SerialAddress; } SM_COM_ADDRESS_TYPE; typedef struct { SM_CHANNEL_MEDIA_TYPE ChannelType; SM_COM_ADDRESS_TYPE Address; } SM_COM_ADDRESS; #pragma pack(1) // // Sensor Reading Data // typedef enum { DataLinear, // Linear DataNaturalLog, // Ln(x) DataLog10, // Log10(x) DataLog2, // Log2(x) Datae, // e DataExp10, // Exp 10 DataExp2, // Exp 2 DataInverse, // 1/x DataSqr, // Sqr DataCube, // Cube DataSqrt, // Square Root DataCubeInverse // Cube-1 (x) } LINERIZATION_TYPE; typedef union { UINT8 SensorUint8Data[2]; UINT16 SensorUint16Data; } SENSOR_SPLIT_DATA; typedef struct { LINERIZATION_TYPE Linearization; // L UINT8 Tolerance; // Tolerance UINT8 AdditiveOffsetExp; // k1 UINT8 AccuracyExp; // Accuracy Exponential UINT8 ResultExponent; // k2 SENSOR_SPLIT_DATA IntegerConstantMultiplier; // M SENSOR_SPLIT_DATA AdditiveOffset; // B SENSOR_SPLIT_DATA Accuracy; // Accuracy } SENSOR_CONVERSION_DATA; // // Server Management Controller Information // 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; } SM_CTRL_INFO; 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; } FRU_DATA_INFO; #pragma pack() typedef enum { Unicode, BcdPlus, Ascii6BitPacked, AsciiLatin1 } SENSOR_ID_STRING_TYPE; // // SENSOR Structures // typedef struct { BOOLEAN Valid; // Data is Valid SENSOR_CONVERSION_DATA ConversionParam; // Conversion Parameters UINT8 UpperNonRec; // Upper Non Recoverable UINT8 UpperCritical; // Upper Critical UINT8 UpperNonCritical; // Upper Non Critical UINT8 LowerNonRec; // Lower Non Recoverable UINT8 LowerCritical; // Lower Critical UINT8 LowerNonCritical; // Lower Non Critical } SENSOR_THRESHOLD_STRUCT; typedef struct { BOOLEAN Valid; // Structure Valid SENSOR_CONVERSION_DATA ConversionParam; // Conversion Parameters SENSOR_ID_STRING_TYPE SensorIdStringType; // Sensor ID String type UINT8 NominalReading; // Nominal Reading of the Sensor UINT8 SensorId[16]; // Sensor Description } SENSOR_READING_STRUCT; // // IPMI HOB // typedef struct { UINT16 IoBasePort; } IPMI_HOB_DATA; // // COM Layer Callback // typedef EFI_STATUS (EFIAPI *SM_CALLBACK_PROC) ( OUT EFI_STATUS Status, IN VOID *UserContext ); typedef struct { SM_CALLBACK_PROC SmCallback; VOID *UserContext; } SM_CALLBACK; #endif // _SERVER_MANAGEMENT_H_