/* // Copyright (c) 2018 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. */ #pragma once #include <ipmid/api-types.hpp> #include <user_channel/user_layer.hpp> namespace ipmi { namespace intel { static constexpr NetFn netFnGeneral = netFnOemOne; static constexpr NetFn netFnPlatform = netFnOemTwo; static constexpr NetFn netFnApp = netFnOemEight; namespace general { static constexpr Cmd cmdGetBmcVersionString = 0x01; static constexpr Cmd cmdRestoreConfiguration = 0x02; static constexpr Cmd cmdGetSmSignal = 0x14; static constexpr Cmd cmdSetSmSignal = 0x15; static constexpr Cmd cmdSetBIOSID = 0x26; static constexpr Cmd cmdGetOEMDeviceInfo = 0x27; static constexpr Cmd cmdSetColdRedundancyConfig = 0x2d; static constexpr Cmd cmdGetColdRedundancyConfig = 0x2e; static constexpr Cmd cmdGetAICSlotFRUIDSlotPosRecords = 0x31; static constexpr Cmd cmdGetMultiNodeRole = 0x33; static constexpr Cmd cmdGetMultiNodeId = 0x36; static constexpr Cmd cmdSetSystemGUID = 0x41; static constexpr Cmd cmdDisableBMCSystemReset = 0x42; static constexpr Cmd cmdGetBMCResetDisables = 0x43; static constexpr Cmd cmdSendEmbeddedFWUpdStatus = 0x44; static constexpr Cmd cmdSlotI2CControllerWriteRead = 0x52; static constexpr Cmd cmdSetPowerRestoreDelay = 0x54; static constexpr Cmd cmdGetPowerRestoreDelay = 0x55; static constexpr Cmd cmdSetFaultIndication = 0x57; static constexpr Cmd cmdSetOEMUser2Activation = 0x5A; static constexpr Cmd cmdSetSpecialUserPassword = 0x5F; static constexpr Cmd cmdSetShutdownPolicy = 0x60; static constexpr Cmd cmdGetShutdownPolicy = 0x62; static constexpr Cmd cmdGetMultiNodePresence = 0x63; static constexpr Cmd cmdGetBufferSize = 0x66; static constexpr Cmd cmdSetFanConfig = 0x89; static constexpr Cmd cmdGetFanConfig = 0x8a; static constexpr Cmd cmdSetFanSpeedOffset = 0x8c; static constexpr Cmd cmdGetFanSpeedOffset = 0x8d; static constexpr Cmd cmdSetDimmOffset = 0x8e; static constexpr Cmd cmdGetDimmOffset = 0x8f; static constexpr Cmd cmdSetFscParameter = 0x90; static constexpr Cmd cmdGetFscParameter = 0x91; static constexpr Cmd cmdGetChassisIdentifier = 0x92; static constexpr Cmd cmdReadBaseBoardProductId = 0x93; static constexpr Cmd cmdGetProcessorErrConfig = 0x9A; static constexpr Cmd cmdSetProcessorErrConfig = 0x9B; static constexpr Cmd cmdSetManufacturingData = 0xA1; static constexpr Cmd cmdGetManufacturingData = 0xA2; static constexpr Cmd cmdSetFITcLayout = 0xA3; static constexpr Cmd cmdMTMBMCFeatureControl = 0xA4; static constexpr Cmd cmdGetLEDStatus = 0xB0; static constexpr Cmd cmdControlBmcServices = 0xB1; static constexpr Cmd cmdGetBmcServiceStatus = 0xB2; static constexpr Cmd cmdGetSecurityMode = 0xB3; static constexpr Cmd cmdSetSecurityMode = 0xB4; static constexpr Cmd cmdMtmKeepAlive = 0xB5; static constexpr Cmd cmdOEMGetReading = 0xE2; static constexpr Cmd cmdSetBIOSCap = 0xD3; static constexpr Cmd cmdGetBIOSCap = 0xD4; static constexpr Cmd cmdSetPayload = 0xD5; static constexpr Cmd cmdGetPayload = 0xD6; static constexpr Cmd cmdSetBIOSPwdHashInfo = 0xD7; static constexpr Cmd cmdGetBIOSPwdHash = 0xD8; static constexpr Cmd cmdGetNmiStatus = 0xE5; static constexpr Cmd cmdSetEfiBootOptions = 0xEA; static constexpr Cmd cmdGetEfiBootOptions = 0xEB; static constexpr Cmd cmdSetNmiStatus = 0xED; static constexpr Cmd cmdGetPSUVersion = 0xEF; } // namespace general namespace platform { static constexpr Cmd cmdCfgHostSerialPortSpeed = 0x90; static constexpr Cmd cmdClearCMOS = 0x91; } // namespace platform namespace app { static constexpr Cmd cmdMdrStatus = 0x20; static constexpr Cmd cmdMdrComplete = 0x21; static constexpr Cmd cmdMdrEvent = 0x22; static constexpr Cmd cmdMdrRead = 0x23; static constexpr Cmd cmdMdrWrite = 0x24; static constexpr Cmd cmdMdrLock = 0x25; static constexpr Cmd cmdMdrIIAgentStatus = 0x30; static constexpr Cmd cmdMdrIIGetDir = 0x31; static constexpr Cmd cmdMdrIIGetDataInfo = 0x32; static constexpr Cmd cmdMdrIILockData = 0x33; static constexpr Cmd cmdMdrIIUnlockData = 0X34; static constexpr Cmd cmdMdrIIGetDataBlock = 0x35; static constexpr Cmd cmdMdrIISendDir = 0x38; static constexpr Cmd cmdMdrIISendDataInfoOffer = 0x39; static constexpr Cmd cmdMdrIISendDataInfo = 0x3a; static constexpr Cmd cmdMdrIIDataStart = 0x3b; static constexpr Cmd cmdMdrIIDataDone = 0x3c; static constexpr Cmd cmdMdrIISendDataBlock = 0x3d; static constexpr Cmd cmdSlotIpmb = 0x51; static constexpr Cmd cmdPFRMailboxRead = 0x84; } // namespace app } // namespace intel } // namespace ipmi // FIXME: put these in the cpp files that use them enum class IPMIIntelOEMReturnCodes { ipmiCCPayloadActive = 0x80, ipmiCCInvalidPCIESlotID = 0x80, ipmiCCParameterNotSupported = 0x80, ipmiCCPayloadAlreadyDeactivated = 0x80, ipmiCCSetInProcess = 0x81, ipmiCCPayloadDisable = 0x81, ipmiCCLostArbitration = 0x81, ipmiCCInvalidCablePortIndex = 0x81, ipmiCCHealthStatusNotAvailable = 0x81, ipmiCCBusError = 0x82, ipmiCCReadOnly = 0x82, ipmiCCWriteOnly = 0x82, ipmiCCNoCablePresent = 0x82, ipmiCCDataCollectionInProgress = 0x82, ipmiCCPayloadActivationLimitReached = 0x82, ipmiCCNACKOnWrite = 0x83, ipmiCCDataCollectionFailed = 0x83, ipmiCCCanNotActivateWithEncrption = 0x83, ipmiCCCanNotActivateWithoutEncryption = 0x84, ipmiCCInvalidChecksum = 0x85, ipmiCCNoCabledPCIEPortsAvailable = 0xC2, }; enum class IPMIReturnCodeExt { ipmiCCInvalidLUN = 0xC2, ipmiCCTimeout = 0xC3, ipmiCCStorageLeak = 0xC4, ipmiCCRequestDataTruncated = 0xC6, ipmiCCRequestDataFieldLengthLimitExceeded = 0xC8, ipmiCCCanNotReturnNumberOfRequestedDataBytes = 0xCA, ipmiCCRequestSensorDataRecordNotFound = 0xCB, ipmiCCDestinationUnavailable = 0xD3, ipmiCCParamterNotSupportInPresentState = 0xD5, }; static constexpr const uint8_t maxBIOSIDLength = 0xFF; static constexpr const uint8_t maxCPUNum = 4; static constexpr const char* biosActiveObjPath = "/xyz/openbmc_project/software/bios_active"; static constexpr const char* biosVersionIntf = "xyz.openbmc_project.Software.Version"; static constexpr const char* biosVersionProp = "Version"; static constexpr const char* powerRestoreDelayObjPath = "/xyz/openbmc_project/control/host0/power_restore_policy"; static constexpr const char* powerRestoreDelayIntf = "xyz.openbmc_project.Control.Power.RestorePolicy"; static constexpr const char* powerRestoreDelayProp = "PowerRestoreDelay"; static constexpr const char* processorErrConfigObjPath = "/xyz/openbmc_project/control/processor_error_config"; static constexpr const char* processorErrConfigIntf = "xyz.openbmc_project.Control.Processor.ErrConfig"; static constexpr const char* bmcResetDisablesPath = "/xyz/openbmc_project/control/bmc_reset_disables"; static constexpr const char* bmcResetDisablesIntf = "xyz.openbmc_project.Control.ResetDisables"; static constexpr const char* identifyLEDObjPath = "/xyz/openbmc_project/led/physical/identify"; static constexpr const char* ledIntf = "xyz.openbmc_project.Led.Physical"; static constexpr const char* statusAmberObjPath = "/xyz/openbmc_project/led/physical/status_amber"; static constexpr const char* statusGreenObjPath = "/xyz/openbmc_project/led/physical/status_green"; static constexpr const uint8_t noShutdownOnOCOT = 0; static constexpr const uint8_t shutdownOnOCOT = 1; static constexpr const uint8_t noShutdownPolicySupported = 0; static constexpr const uint8_t shutdownPolicySupported = 1; static constexpr const char* oemShutdownPolicyIntf = "com.intel.Control.OCOTShutdownPolicy"; static constexpr const char* oemShutdownPolicyObjPath = "/com/intel/control/ocotshutdown_policy_config"; static constexpr const char* oemShutdownPolicyObjPathProp = "OCOTPolicy"; static constexpr const char* fwGetEnvCmd = "/sbin/fw_printenv"; static constexpr const char* fwSetEnvCmd = "/sbin/fw_setenv"; static constexpr const char* fwHostSerailCfgEnvName = "hostserialcfg"; constexpr const char* settingsBusName = "xyz.openbmc_project.Settings"; static constexpr const uint8_t getHostSerialCfgCmd = 0; static constexpr const uint8_t setHostSerialCfgCmd = 1; // parameters: // 0: host serial port 1 and 2 normal speed // 1: host serial port 1 high spend, port 2 normal speed // 2: host serial port 1 normal spend, port 2 high speed // 3: host serial port 1 and 2 high speed static constexpr const uint8_t HostSerialCfgParamMax = 3; static constexpr uint8_t ipmiDefaultUserId = 2; static constexpr const uint8_t selEvtTargetMask = 0xF0; static constexpr const uint8_t selEvtTargetShift = 4; static constexpr const uint8_t targetInstanceMask = 0x0E; static constexpr const uint8_t targetInstanceShift = 1; enum class IPMINetfnIntelOEMAppCmd { mdrStatus = 0x20, mdrComplete = 0x21, mdrEvent = 0x22, mdrRead = 0x23, mdrWrite = 0x24, mdrLock = 0x25, mdr2AgentStatus = 0x30, mdr2GetDir = 0x31, mdr2GetDataInfo = 0x32, mdr2LockData = 0x33, mdr2UnlockData = 0x34, mdr2GetDataBlock = 0x35, mdr2SendDir = 0x38, mdr2SendDataInfoOffer = 0x39, mdr2SendDataInfo = 0x3a, mdr2DataStart = 0x3b, mdr2DataDone = 0x3c, mdr2SendDataBlock = 0x3d, }; enum class OEMDevEntityType { biosId, devVer, sdrVer, }; enum class FWUpdateTarget : uint8_t { targetBMC = 0x0, targetBIOS = 0x1, targetME = 0x2, targetOEMEWS = 0x4, }; enum class CPUStatus { disabled = 0x0, enabled = 0x1, notPresent = 0x3, }; #pragma pack(push, 1) struct GUIDData { uint8_t node1; uint8_t node2; uint8_t node3; uint8_t node4; uint8_t node5; uint8_t node6; uint8_t clock1; uint8_t clock2; uint8_t timeHigh1; uint8_t timeHigh2; uint8_t timeMid1; uint8_t timeMid2; uint8_t timeLow1; uint8_t timeLow2; uint8_t timeLow3; uint8_t timeLow4; }; struct DeviceInfo { uint8_t biosIDLength; uint8_t biosId[maxBIOSIDLength]; }; struct SetPowerRestoreDelayReq { uint8_t byteMSB; uint8_t byteLSB; }; struct GetPowerRestoreDelayRes { uint8_t byteMSB; uint8_t byteLSB; }; struct GetOemDeviceInfoRes { uint8_t resDatalen; uint8_t data[maxBIOSIDLength]; }; struct GetOEMShutdownPolicyRes { uint8_t policy; uint8_t policySupport; }; struct CfgHostSerialReq { uint8_t command; uint8_t parameter; }; #pragma pack(pop) // // Fault type enumeration // enum class RemoteFaultType { fan, // 0 temperature, // 1 power, // 2 driveslot, // 3 software, // 4 memory, // 5 max = 6 // 6 }; // Enumeration for remote fault states as required by the HSC // enum class RemoteFaultState { // fault indicators fanLEDs, cpu1DimmLeds, cpu2DimmLeds, cpu3DimmLeds, cpu4DimmLeds, maxFaultState, }; enum class DimmFaultType { cpu1cpu2Dimm, cpu3cpu4Dimm, maxFaultGroup, }; enum class setFscParamFlags : uint8_t { tcontrol = 0x1, pwmOffset = 0x2, maxPwm = 0x3, cfm = 0x4 }; enum class dimmOffsetTypes : uint8_t { staticCltt = 0x0, dimmPower = 0x2 }; // FIXME: this stuff needs to be rewritten enum IPMI_INTEL_OEM_RETURN_CODES { IPMI_CC_OEM_PAYLOAD_ACTIVE = 0x80, IPMI_CC_OEM_INVALID_PCIE_SLOTID = 0x80, IPMI_CC_OEM_PARAMETER_NOT_SUPPORTED = 0x80, IPMI_CC_OEM_PAYLOAD_ALREADY_DEACTIVATED = 0x80, IPMI_CC_OEM_SET_IN_PROCESS = 0x81, IPMI_CC_OEM_PAYLOAD_DISABLE = 0x81, IPMI_CC_OEM_LOST_ARBITRATION = 0x81, IPMI_CC_OEM_INVALID_CABLE_PORT_INDEX = 0x81, IPMI_CC_OEM_HEALTH_STATUS_NOT_AVAILABLE = 0x81, IPMI_CC_OEM_BUS_ERROR = 0x82, IPMI_CC_OEM_READ_ONLY = 0x82, IPMI_CC_OEM_WRITE_ONLY = 0x82, IPMI_CC_OEM_NO_CABLE_PRESENT = 0x82, IPMI_CC_OEM_DATA_COLLECTION_IN_PROGRESS = 0x82, IPMI_CC_OEM_PAYLOAD_ACTIVATION_LIMIT_REACH = 0x82, IPMI_CC_OEM_NACK_ON_WRITE = 0x83, IPMI_CC_OEM_DATA_COLLECTION_FAILED = 0x83, IPMI_CC_OEM_CAN_NOT_ACTIVATE_WITH_ENCRYPTION = 0x83, IPMI_CC_OEM_CAN_NOT_ACTIVATE_WITHOUT_ENCRYPTION = 0x84, IPMI_CC_OEM_INVALID_CHECKSUM = 0x85, IPMI_CC_OEM_NO_CABLED_PCIE_PORTS_AVAILABLE = 0xC2, }; enum IPMI_RETURN_CODE_EXT { IPMI_CC_INVALID_LUN = 0xC2, IPMI_CC_STORGE_LEAK = 0xC4, IPMI_CC_REQUEST_DATA_TRUNCATED = 0xC6, IPMI_CC_REQUEST_DATA_FIELD_LENGTH_LIMIT_EXCEEDED = 0xC8, IPMI_CC_CANNOT_RETURN_NUMBER_OF_REQUESTED_DATA_BYTES = 0xCA, IPMI_CC_REQUEST_SENSOR_DATA_RECORD_NOT_FOUND = 0xCB, IPMI_CC_DESTINATION_UNAVAILABLE = 0xD3, IPMI_CC_PARAMETER_NOT_SUPPORT_IN_PRESENT_STATE = 0xD5, };