common/ipmi/include/ipmi.h (200 lines of code) (raw):

#ifndef IPMI_H #define IPMI_H #include <string.h> #include "ipmb.h" #define WW_IANA_ID 0x009c9c #define IPMI_THREAD_STACK_SIZE 4000 #define ipmi_buf_len 10 extern uint8_t IPMB_inf_index_map[]; extern uint8_t isPwOn; extern struct k_msgq ipmi_msgq; typedef enum ipmi_error { ipmi_error_success = 0, /**< Generic no-error flag */ ipmi_error_mutex_timeout, /**< Fail to get mutex in time*/ } ipmi_error; struct ipmi_request { uint8_t netfn; uint8_t cmd; uint8_t data[0]; }; struct ipmi_response { uint8_t netfn; uint8_t cmd; uint8_t cmplt_code; uint8_t data[0]; }; static inline void pack_ipmi_resp(struct ipmi_response *resp, ipmi_msg *ipmi_resp) { resp->netfn = (ipmi_resp->netfn + 1) << 2; // ipmi netfn response package resp->cmd = ipmi_resp->cmd; resp->cmplt_code = ipmi_resp->completion_code; if (ipmi_resp->data_len != 0) { memcpy(resp->data, ipmi_resp->data, ipmi_resp->data_len); } } void ipmi_init(void); void IPMI_handler(void *arug0, void *arug1, void *arug2); // IPMI CHASSIS void pal_CHASSIS_GET_CHASSIS_STATUS(ipmi_msg *msg); // IPMI SENSOR void pal_SENSOR_GET_SENSOR_READING(ipmi_msg *msg); // IPMI APP void pal_APP_GET_DEVICE_ID(ipmi_msg *msg); void pal_APP_COLD_RESET(ipmi_msg *msg); void pal_APP_WARM_RESET(ipmi_msg *msg); void pal_APP_GET_SELFTEST_RESULTS(ipmi_msg *msg); void pal_APP_GET_SYSTEM_GUID(ipmi_msg *msg); void pal_APP_MASTER_WRITE_READ(ipmi_msg *msg); // IPMI STORAGE void pal_STORAGE_GET_FRUID_INFO(ipmi_msg *msg); void pal_STORAGE_READ_FRUID_DATA(ipmi_msg *msg); void pal_STORAGE_WRITE_FRUID_DATA(ipmi_msg *msg); void pal_STORAGE_RSV_SDR(ipmi_msg *msg); void pal_STORAGE_GET_SDR(ipmi_msg *msg); // IPMI OEM void pal_OEM_SENSOR_READ(ipmi_msg *msg); void pal_OEM_SET_SYSTEM_GUID(ipmi_msg *msg); void pal_OEM_GET_MB_INDEX(ipmi_msg *msg); void pal_OEM_SET_FAN_DUTY_MANUAL(ipmi_msg *msg); void pal_OEM_GET_SET_FAN_CTRL_MODE(ipmi_msg *msg); // IPMI OEM 1S void pal_OEM_1S_MSG_OUT(ipmi_msg *msg); void pal_OEM_1S_GET_GPIO(ipmi_msg *msg); void pal_OEM_1S_SET_GPIO(ipmi_msg *msg); void pal_OEM_1S_SEND_INTERRUPT_TO_BMC(ipmi_msg *msg); void pal_OEM_1S_SENSOR_POLL_EN(ipmi_msg *msg); void pal_OEM_1S_FW_UPDATE(ipmi_msg *msg); void pal_OEM_1S_GET_FW_VERSION(ipmi_msg *msg); void pal_OEM_1S_GET_POST_CODE(ipmi_msg *msg); void pal_OEM_1S_SET_VR_MONITOR_STATUS(ipmi_msg *msg); void pal_OEM_1S_GET_VR_MONITOR_STATUS(ipmi_msg *msg); void pal_OEM_1S_RESET_BMC(ipmi_msg *msg); void pal_OEM_1S_PECIaccess(ipmi_msg *msg); void pal_OEM_1S_ASD_INIT(ipmi_msg *msg); void pal_OEM_1S_GET_SET_GPIO(ipmi_msg *msg); void pal_OEM_1S_ACCURACY_SENSOR_READING(ipmi_msg *msg); void pal_OEM_1S_I2C_DEV_SCAN(ipmi_msg *msg); void pal_OEM_1S_SET_JTAG_TAP_STA(ipmi_msg *msg); void pal_OEM_1S_JTAG_DATA_SHIFT(ipmi_msg *msg); void pal_OEM_1S_GET_BIC_STATUS(ipmi_msg *msg); void pal_OEM_1S_RESET_BIC(ipmi_msg *msg); void pal_OEM_1S_12V_CYCLE_SLOT(ipmi_msg *msg); void pal_OEM_1S_READ_BIC_REGISTER(ipmi_msg *msg); void pal_OEM_1S_WRITE_BIC_REGISTER(ipmi_msg *msg); void pal_OEM_1S_SET_FAN_DUTY_AUTO(ipmi_msg *msg); void pal_OEM_1S_GET_FAN_DUTY(ipmi_msg *msg); void pal_OEM_1S_GET_FAN_RPM(ipmi_msg *msg); enum { CC_SUCCESS = 0x00, CC_INVALID_PARAM = 0x80, CC_FRU_DEV_BUSY = 0x81, CC_BRIDGE_MSG_ERR = 0x82, CC_I2C_BUS_ERROR = 0x83, CC_INVALID_IANA = 0x84, CC_NODE_BUSY = 0xC0, CC_INVALID_CMD = 0xC1, CC_INVALID_LUN = 0xC2, CC_TIMEOUT = 0xC3, CC_OUT_OF_SPACE = 0xC4, CC_INVALID_RESERVATION = 0xC5, CC_DATA_TRUNCATED = 0xC6, CC_INVALID_LENGTH = 0xC7, CC_LENGTH_EXCEEDED = 0xC8, CC_PARAM_OUT_OF_RANGE = 0xC9, CC_SENSOR_NOT_PRESENT = 0xCB, CC_INVALID_DATA_FIELD = 0xCC, CC_CAN_NOT_RESPOND = 0xCE, CC_NOT_SUPP_IN_CURR_STATE = 0xD5, CC_UNSPECIFIED_ERROR = 0xFF, }; // Network Function Codes (IPMI/Section 5.1) enum { NETFN_CHASSIS_REQ = 0x00, NETFN_CHASSIS_RES, NETFN_BRIDGE_REQ, NETFN_BRIDGE_RES, NETFN_SENSOR_REQ, NETFN_SENSOR_RES, NETFN_APP_REQ, NETFN_APP_RES, NETFN_FIRMWARE_REQ, NETFN_FIRMWARE_RES, NETFN_STORAGE_REQ, NETFN_STORAGE_RES, NETFN_TRANSPORT_REQ, NETFN_TRANSPORT_RES, NETFN_DCMI_REQ = 0x2C, NETFN_DCMI_RES = 0x2D, NETFN_NM_REQ = 0x2E, NETFN_NM_RES = 0x2F, NETFN_OEM_REQ = 0x30, NETFN_OEM_RES = 0x31, NETFN_OEM_STORAGE_REQ = 0x32, NETFN_OEM_STORAGE_RES = 0x33, NETFN_OEM_Q_REQ = 0x36, NETFN_OEM_Q_RES = 0x37, NETFN_OEM_1S_REQ = 0x38, NETFN_OEM_1S_RES = 0x39, NETFN_OEM_ZION_REQ = 0x3A, NETFN_OEM_ZION_RES = 0x3B, NETFN_OEM_USB_DBG_REQ = 0x3C, NETFN_OEM_USB_DBG_RES = 0x3D, }; // Application Command Codes enum { CMD_APP_GET_DEVICE_ID = 0x01, CMD_APP_COLD_RESET = 0x02, CMD_APP_WARM_RESET = 0x03, CMD_APP_GET_SELFTEST_RESULTS = 0x04, CMD_APP_GET_SYSTEM_GUID = 0x37, CMD_APP_MASTER_WRITE_READ = 0x52, }; // Chassis Command Codes enum { CMD_CHASSIS_GET_CHASSIS_STATUS = 0x01, }; // Sensor Command Codes enum { CMD_SENSOR_GET_SENSOR_READING = 0x2D, }; // Storage Command Codes enum { CMD_STORAGE_GET_FRUID_INFO = 0x10, CMD_STORAGE_READ_FRUID_DATA = 0x11, CMD_STORAGE_WRITE_FRUID_DATA = 0x12, CMD_STORAGE_RSV_SDR = 0x22, CMD_STORAGE_GET_SDR = 0x23, CMD_STORAGE_GET_SEL_INFO = 0x40, CMD_STORAGE_RSV_SEL = 0x42, CMD_STORAGE_GET_SEL = 0x43, CMD_STORAGE_ADD_SEL = 0x44, }; // OEM Command Codes enum { CMD_OEM_SENSOR_READ = 0xE2, CMD_OEM_SET_SYSTEM_GUID = 0xEF, CMD_OEM_GET_MB_INDEX = 0xF0, CMD_OEM_SET_FAN_DUTY_MANUAL = 0xF1, CMD_OEM_GET_SET_FAN_CTRL_MODE = 0xF2, }; // OEM 1S Command Codes enum { CMD_OEM_1S_MSG_IN = 0x1, CMD_OEM_1S_MSG_OUT = 0x2, CMD_OEM_1S_GET_GPIO = 0x3, CMD_OEM_1S_SET_GPIO = 0x4, CMD_OEM_1S_GET_GPIO_CONFIG = 0x5, CMD_OEM_1S_SET_GPIO_CONFIG = 0x6, CMD_OEM_1S_SEND_INTERRUPT_TO_BMC = 0x7, CMD_OEM_1S_SEND_POST_CODE_TO_BMC = 0x8, CMD_OEM_1S_FW_UPDATE = 0x9, CMD_OEM_1S_GET_FW_VERSION = 0xB, CMD_OEM_1S_GET_POST_CODE = 0x12, CMD_OEM_1S_SET_VR_MONITOR_STATUS = 0x14, CMD_OEM_1S_GET_VR_MONITOR_STATUS = 0x15, CMD_OEM_1S_RESET_BMC = 0x16, CMD_OEM_1S_SET_JTAG_TAP_STA = 0x21, CMD_OEM_1S_JTAG_DATA_SHIFT = 0x22, CMD_OEM_1S_ACCURACY_SENSOR_READING = 0x23, CMD_OEM_1S_ASD_INIT = 0x28, CMD_OEM_1S_PECIaccess = 0x29, CMD_OEM_1S_SENSOR_POLL_EN = 0x30, CMD_OEM_1S_GET_BIC_STATUS = 0x31, CMD_OEM_1S_RESET_BIC = 0x32, CMD_OEM_1S_GET_SET_GPIO = 0x41, CMD_OEM_1S_SET_FAN_DUTY_AUTO = 0x50, CMD_OEM_1S_GET_FAN_DUTY = 0x51, CMD_OEM_1S_GET_FAN_RPM = 0x52, // Debug command CMD_OEM_1S_I2C_DEV_SCAN = 0x60, CMD_OEM_1S_12V_CYCLE_SLOT = 0x64, CMD_OEM_1S_READ_BIC_REGISTER = 0x68, CMD_OEM_1S_WRITE_BIC_REGISTER = 0x69 }; #endif