diff options
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/lib/libipmi/common/ipmi_misc.c | 34 | ||||
-rw-r--r-- | usr/src/lib/libipmi/common/libipmi.h | 56 | ||||
-rw-r--r-- | usr/src/lib/libipmi/common/mapfile-vers | 5 |
3 files changed, 93 insertions, 2 deletions
diff --git a/usr/src/lib/libipmi/common/ipmi_misc.c b/usr/src/lib/libipmi/common/ipmi_misc.c index f83e9e1802..221093e630 100644 --- a/usr/src/lib/libipmi/common/ipmi_misc.c +++ b/usr/src/lib/libipmi/common/ipmi_misc.c @@ -20,8 +20,8 @@ */ /* * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, Joyent, Inc. */ - #include <libipmi.h> #include <stdio.h> #include <string.h> @@ -222,3 +222,35 @@ ipmi_chassis_identify(ipmi_handle_t *ihp, boolean_t enable) return (0); } + +/* + * calller is responsible for free'ing returned structure + */ +ipmi_chassis_status_t * +ipmi_chassis_status(ipmi_handle_t *ihp) +{ + ipmi_cmd_t cmd, *rsp; + ipmi_chassis_status_t *chs; + + cmd.ic_netfn = IPMI_NETFN_CHASSIS; + cmd.ic_lun = 0; + cmd.ic_cmd = IPMI_CMD_GET_CHASSIS_STATUS; + cmd.ic_data = NULL; + cmd.ic_dlen = 0; + + if ((rsp = ipmi_send(ihp, &cmd)) == NULL) + return (NULL); + + if (rsp->ic_dlen < sizeof (ipmi_chassis_status_t)) { + (void) ipmi_set_error(ihp, EIPMI_BAD_RESPONSE_LENGTH, NULL); + return (NULL); + } + + if ((chs = ipmi_alloc(ihp, sizeof (ipmi_chassis_status_t))) == NULL) { + /* ipmi errno set */ + return (NULL); + } + + (void) memcpy(chs, rsp->ic_data, sizeof (ipmi_chassis_status_t)); + return (chs); +} diff --git a/usr/src/lib/libipmi/common/libipmi.h b/usr/src/lib/libipmi/common/libipmi.h index af8a1f6351..8552585405 100644 --- a/usr/src/lib/libipmi/common/libipmi.h +++ b/usr/src/lib/libipmi/common/libipmi.h @@ -20,7 +20,7 @@ */ /* * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2012, Joyent, Inc. All rights reserved. + * Copyright (c) 2017, Joyent, Inc. All rights reserved. */ #ifndef _LIBIPMI_H @@ -1849,6 +1849,60 @@ typedef struct ipmi_sunoem_fru { int ipmi_sunoem_update_fru(ipmi_handle_t *, ipmi_sunoem_fru_t *); +/* + * See section 28.2 + */ +#define IPMI_CMD_GET_CHASSIS_STATUS 0x01 + +/* + * flags for ichs_current_pwr_state field + */ +#define IPMI_CURR_PWR_STATE_ON 0x01 +#define IPMI_CURR_PWR_STATE_OVERLOAD 0x02 +#define IPMI_CURR_PWR_STATE_INTERLOCK 0x04 +#define IPMI_CURR_PWR_STATE_FAULT 0x08 +#define IPMI_CURR_PWR_STATE_CNTL_FAULT 0x10 + +/* + * flags for ichs_last_pwr_state field + */ +#define IPMI_LAST_PWR_STATE_ACFAILED 0x01 +#define IPMI_LAST_PWR_STATE_OVERLOAD 0x02 +#define IPMI_LAST_PWR_STATE_INTERLOCK 0x04 +#define IPMI_LAST_PWR_STATE_FAULT 0x08 +#define IPMI_LAST_PWR_STATE_CMD_ON 0x10 + +/* + * flags for the ichs_pwr_restore_policy field + */ +#define IPMI_PWR_POLICY_REMAIN_OFF 0x0 +#define IPMI_PWR_POLICY_RESTORE 0x1 +#define IPMI_PWR_POLICY_POWER_ON 0x2 +#define IPMI_PWR_POLICY_UNKNOWN 0x3 + +typedef struct ipmi_chassis_status { + DECL_BITFIELD3( + ichs_current_pwr_state :5, + ichs_pwr_restore_policy :2, + __reserved1 :1); + DECL_BITFIELD2( + ichs_last_pwr_state :5, + __reserved2 :3); + DECL_BITFIELD7( + ichs_intrusion_asserted :1, + ichs_front_panel_disabled :1, + ichs_drive_fault_asserted :1, + ichs_fan_fault_asserted :1, + ichs_identify_state :2, + ichs_identify_supported :1, + __reserved3 :1); +} ipmi_chassis_status_t; + +extern ipmi_chassis_status_t *ipmi_chassis_status(ipmi_handle_t *); + +/* + * See section 28.5 + */ #define IPMI_CMD_CHASSIS_IDENTIFY 0x04 int ipmi_chassis_identify(ipmi_handle_t *, boolean_t); diff --git a/usr/src/lib/libipmi/common/mapfile-vers b/usr/src/lib/libipmi/common/mapfile-vers index 1f432b9a80..85526ddd84 100644 --- a/usr/src/lib/libipmi/common/mapfile-vers +++ b/usr/src/lib/libipmi/common/mapfile-vers @@ -23,6 +23,10 @@ # # +# Copyright (c) 2017, Joyent, Inc. +# + +# # MAPFILE HEADER START # # WARNING: STOP NOW. DO NOT MODIFY THIS FILE. @@ -41,6 +45,7 @@ $mapfile_version 2 SYMBOL_VERSION SUNWprivate_1.1 { global: ipmi_chassis_identify; + ipmi_chassis_status; ipmi_close; ipmi_entity_iter; ipmi_entity_iter_children; |