/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_SMC_COMMANDS_H
#define _SYS_SMC_COMMANDS_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
/* Address of BMC on IPMB */
#define BMC_IPMB_ADDR 0x20
#define SMC_CPCI_SLOT0_ADDR 0xB0
#define SMC_CPCI_SLOT_ADDR(X) (SMC_CPCI_SLOT0_ADDR + \
2 * ((X) - 1))
typedef struct ctsmc_code_ent {
uint8_t code;
char *name;
} ctsmc_code_ent_t;
/*
* Definition of Network Function Codes
*/
typedef enum {
SMC_NETFN_CHASSIS_REQ = 0x0,
SMC_NETFN_CHASSIS_RSP = 0x1,
SMC_NETFN_BRIDGE_REQ = 0x2,
SMC_NETFN_BRIDGE_RSP = 0x3,
SMC_NETFN_SENSOR_REQ = 0x4,
SMC_NETFN_SENSOR_RSP = 0x5,
SMC_NETFN_APP_REQ = 0x6,
SMC_NETFN_APP_RSP = 0x7,
SMC_NETFN_FIRMWARE_REQ = 0x8,
SMC_NETFN_FIRMWARE_RSP = 0x9,
SMC_NETFN_STORAGE_REQ = 0xA,
SMC_NETFN_STORAGE_RSP = 0xB
} smc_netfn_t;
/*
* Definition of Completion codes
*/
typedef enum {
SMC_CC_SUCCESS = 0x00,
SMC_CC_NODE_BUSY = 0xC0,
SMC_CC_INVALID_COMMAND = 0xC1,
SMC_CC_INVALID_COMMAND_ON_LUN = 0xC2,
SMC_CC_TIMEOUT = 0xC3,
SMC_CC_RESOURCE_NOTAVAIL = 0xC4,
SMC_CC_RESERVATION = 0xC5,
SMC_CC_REQ_TRUNC = 0xC6,
SMC_CC_REQLEN_NOTVALID = 0xC7,
SMC_CC_REQLEN_EXCEED = 0xC8,
SMC_CC_PARAM_OUT_OF_RANGE = 0xC9,
SMC_CC_REQUEST_BYTES_FAILED = 0xCA,
SMC_CC_NOT_PRESENT = 0xCB,
SMC_CC_INVALID_FIELD = 0xCC,
SMC_CC_ILLEGAL_COMMAND = 0xCD,
SMC_CC_RESPONSE_FAILED = 0xCE,
SMC_CC_DUPLICATE_REQUEST = 0xCF,
SMC_CC_SDR_UPDATE_MODE = 0xD0,
SMC_CC_FIRMWARE_UPDATE_MODE = 0xD1,
SMC_CC_INIT_IN_PROGRESS = 0xD2,
SMC_CC_UNSPECIFIED_ERROR = 0xFF
} smc_cc_t;
typedef enum {
SMC_BMC_LUN,
SMC_OEM1_LUN,
SMC_SMS_LUN,
SMC_OEM2_LUN
} smc_lun_t;
/*
* App command codes for commands/event notifications etc.
*/
typedef enum {
SMC_GET_DEVICE_ID = 0x01,
SMC_COLD_RESET = 0x02,
SMC_WARM_RESET = 0x03,
SMC_GET_SELFTEST_RESULTS = 0x04,
SMC_MANUFACTURING_TEST_ON = 0x05,
SMC_SET_ACPI_POWER_STATE = 0x06,
SMC_GET_ACPI_POWER_STATE = 0x07,
SMC_GET_DEVICE_GUID = 0x08,
SMC_RESET_WATCHDOG_TIMER = 0x22,
SMC_EXPIRED_WATCHDOG_NOTIF = 0x23, /* Sent by driver */
SMC_SET_WATCHDOG_TIMER = 0x24,
SMC_GET_WATCHDOG_TIMER = 0x25,
SMC_SET_GLOBAL_ENABLES = 0x2E,
SMC_GET_GLOBAL_ENABLES = 0x2F,
SMC_CLEAR_MESSAGE_FLAGS = 0x30,
SMC_GET_MESSAGE_FLAGS = 0x31,
SMC_ENABLE_MESSAGE_CHANNEL_RECEIVE = 0x32,
SMC_GET_MESSAGE = 0x33,
SMC_SEND_MESSAGE = 0x34,
SMC_READ_EVENT_MSG_BUFFER = 0x35,
SMC_SEND_TO_EVENT_MSG_BUFFER = 0x36, /* Changed from IPMI */
SMC_MASTER_WR_RD_I2C = 0x52,
SMC_GET_GEOGRAPHICAL_ADDRESS = 0x55,
SMC_GET_BACKPLANE_TYPE = 0x57,
SMC_SELECT_MEMORY_DEVICE = 0x60,
SMC_READ_SELECTED_MEMORY_DEVICE = 0x61,
SMC_READ_MEMORY_DEVICE = 0x62,
SMC_WRITE_SELECTED_MEMORY_DEVICE = 0x63,
SMC_WRITE_MEMORY_DEVICE = 0x64,
SMC_ERASE_SELECTED_MEMORY_DEVICE = 0x65,
SMC_LOCK_UNLOCK_SELECTED_MEMORY = 0x66,
SMC_COMPUTE_CRC16_OF_SELECTED_MEMORY_DEVICE = 0x67,
SMC_COMPUTE_CRC16_OF_MEMORY_DEVICE = 0x68,
SMC_FILL_MEMORY_DEVICE = 0x6a,
SMC_QUERY_FIRMWARE_VERSION = 0x6f,
SMC_RESET_DEVICE = 0x70,
SMC_GET_ROLE_INFO = 0x71,
SMC_GET_FLASH_AND_BOOT_VERSION = 0x72,
SMC_GET_LOCAL_HA_SIGNAL_STATUS = 0x73,
SMC_SELECT_HA_HOTSWAP_MODE = 0x80,
SMC_GET_HA_HOTSWAP_SIGNAL_STATE = 0x81,
SMC_SET_HA_HOTSWAP_SIGNAL_STATE = 0x82,
SMC_NOTIFY_SMC_OF_HOST_HEALTH = 0x83,
SMC_TURN_ON_OFF_BLUE_LED = 0x84,
SMC_GET_EXECUTION_STATE = 0x85,
SMC_GET_SMC_UPTIME = 0x86,
SMC_ENUM_NOTIF = 0x87,
SMC_IPMI_RESPONSE_NOTIF = 0x88,
SMC_SET_INTERFACE_TIMEOUT = 0x89,
SMC_GET_INTERFACE_TIMEOUT = 0x8A,
SMC_SMC_LOCAL_EVENT_NOTIF = 0x8B,
SMC_GET_DEVICE_TABLE_DATA = 0x8C,
SMC_IPMI_MASTER_WR_RD_I2C = 0x90,
SMC_GET_SMC_SELF_TEST_RESULT = 0xA0,
SMC_READ_SMC_PLD_REGISTER = 0xA1,
SMC_WRITE_SMC_PLD_REGISTER = 0xA2,
SMC_SET_ROLE = 0xC0,
SMC_SET_CPCI_INTMASK = 0xC1,
SMC_GET_CPCI_INTMASK = 0xC2,
SMC_EEPROM_WRITE = 0xC3,
SMC_EEPROM_READ = 0xC4,
SMC_SET_STATE = 0xDE,
SMC_GET_STATE = 0xDF,
SMC_SET_DHCP_CLIENT_ID = 0xE1,
SMC_GET_DHCP_CLIENT_ID = 0xE2,
SMC_DEV_SDR_REPOSITORY_RESERVE = 0xE3,
SMC_FRU_INVENTORY_AREA_INFO_GET = 0xE4,
SMC_SET_BANNER = 0xE5,
SMC_GET_BANNER = 0xE6,
SMC_SEND_ASYNC_SEL_CMD_TO_HOST = 0xE7,
SMC_MASTER_WR_RD_I2C_2 = 0xE9,
SMC_GET_BUFFER_BLOCK_ALLOC_TABLE = 0xEA,
SMC_GET_BUFFER_ALLOC_TABLE = 0xEB,
SMC_GET_SFRS = 0xEC,
SMC_GET_PORT_VALUE = 0xED,
SMC_GET_BUFFER_DATA = 0xEE,
SMC_GET_PCB_DATA = 0xEF,
SMC_GET_PCB_BLOCK_ALLOC_TABLE = 0xF0,
SMC_GET_PCB_TABLE = 0xF1,
SMC_DEVICE_SDR_INFO_GET = 0xF2,
SMC_DEVICE_SDR_GET = 0xF3,
SMC_SENSOR_EVENT_ENABLE_GET = 0xF4,
SMC_SENSOR_EVENT_ENABLE_SET = 0xF5,
SMC_GET_CONFIG_BLOCK = 0xF8,
SMC_SET_CONFIG_BLOCK = 0xF9,
SMC_SET_VOLTAGE = 0xFB,
SMC_SENSOR_READING_GET = 0xFC,
SMC_SENSOR_THRESHOLD_GET = 0xFD,
SMC_SENSOR_THRESHOLD_SET = 0xFE,
SMC_CND_OF_CMD_MARKER = 0xFF
} smc_app_command_t;
typedef enum {
SMC_GET_CHASSIS_STATUS = 0x01,
SMC_CHASSIS_CONTROL = 0x02,
SMC_GET_POH_COUNTER = 0x0F
} smc_chassis_command_t;
typedef enum {
SMC_SET_EVENT_RECEIVER = 0x00,
SMC_GET_EVENT_RECEIVER = 0x01,
SMC_PLATFORM_EVENT_MESSAGE = 0x02
} smc_event_command_t;
typedef enum {
SMC_GET_SEL_INFO = 0x40,
SMC_GET_SEL_ALLOCATION_INFO = 0x41,
SMC_RESERVE_SEL = 0x42,
SMC_GET_SEL_ENTRY = 0x43,
SMC_ADD_SEL_ENTRY = 0x44,
SMC_PARTIAL_ADD_SEL_ENTRY = 0x45,
SMC_DELETE_SEL_ENTRY = 0x46,
SMC_CLEAR_SEL = 0x47,
SMC_GET_SEL_TIME = 0x48,
SMC_SET_SEL_TIME = 0x49
} smc_sel_command_t;
typedef enum {
SMC_GET_SDR_REPOSITORY_INFO = 0x20,
SMC_GET_SDR_REPOSITORY_ALLOCATION_INFO = 0x21,
SMC_RESERVE_SDR_REPOSITORY = 0x22,
SMC_GET_SDR = 0x23,
SMC_ADD_SDR = 0x24,
SMC_PARTIAL_ADD_SDR = 0x25,
SMC_DELETE_SDR = 0x26,
SMC_CLEAR_SDR_REPOSITORY = 0x27,
SMC_GET_SDR_REPOSITORY_TIME = 0x28,
SMC_SET_SDR_REPOSITORY_TIME = 0x29,
SMC_ENTER_SDR_REPOSITORY_UPDATE_MODE = 0x2A,
SMC_EXIT_SDR_REPOSITORY_UPDATE_MODE = 0x2B,
SMC_RUN_INITIALIZATION_AGENT = 0x2C
} smc_sdr_repository_command_t;
typedef enum {
SMC_GET_FRU_INVENTORY_AREA_INFO = 0x10,
SMC_READ_FRU_INVENTORY_DATA = 0x11,
SMC_WRITE_FRU_INVENTORY_DATA = 0x12
} smc_fru_inventory_device_command_t;
typedef enum {
SMC_GET_DEVICE_SDR_INFO = 0x20,
SMC_GET_DEVICE_SDR = 0x21,
SMC_RESERVE_DEVICE_SDR_REPOSITORY = 0x22,
SMC_GET_SENSOR_READING_FACTORS = 0x23,
SMC_SET_SENSOR_HYSTERESIS = 0x24,
SMC_GET_SENSOR_HYSTERESIS = 0x25,
SMC_SET_SENSOR_THRESHOLD = 0x26,
SMC_GET_SENSOR_THRESHOLD = 0x27,
SMC_SET_SENSOR_EVENT_ENABLE = 0x28,
SMC_GET_SENSOR_EVENT_ENABLE = 0x29,
SMC_REARM_SENSOR_EVENTS = 0x2A,
SMC_GET_SENSOR_EVENT_STATUS = 0x2B,
/* RESERVED */
SMC_GET_SENSOR_READING = 0x2D,
SMC_SET_SENSOR_TYPE = 0x2E,
SMC_GET_SENSOR_TYPE = 0x2F
} smc_sensor_device_command_t;
#ifdef __cplusplus
}
#endif
#endif /* _SYS_SMC_COMMANDS_H */