19113a79cSeschrock /* 29113a79cSeschrock * CDDL HEADER START 39113a79cSeschrock * 49113a79cSeschrock * The contents of this file are subject to the terms of the 59113a79cSeschrock * Common Development and Distribution License (the "License"). 69113a79cSeschrock * You may not use this file except in compliance with the License. 79113a79cSeschrock * 89113a79cSeschrock * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 99113a79cSeschrock * or http://www.opensolaris.org/os/licensing. 109113a79cSeschrock * See the License for the specific language governing permissions 119113a79cSeschrock * and limitations under the License. 129113a79cSeschrock * 139113a79cSeschrock * When distributing Covered Code, include this CDDL HEADER in each 149113a79cSeschrock * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 159113a79cSeschrock * If applicable, add the following below this CDDL HEADER, with the 169113a79cSeschrock * fields enclosed by brackets "[]" replaced with your own identifying 179113a79cSeschrock * information: Portions Copyright [yyyy] [name of copyright owner] 189113a79cSeschrock * 199113a79cSeschrock * CDDL HEADER END 209113a79cSeschrock */ 219113a79cSeschrock /* 22aec67356SRobert Johnston * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. 23*989f2807SJerry Jelinek * Copyright (c) 2012, Joyent, Inc. All rights reserved. 249113a79cSeschrock */ 259113a79cSeschrock 269113a79cSeschrock #ifndef _LIBIPMI_H 279113a79cSeschrock #define _LIBIPMI_H 289113a79cSeschrock 299113a79cSeschrock #include <sys/byteorder.h> 3081d9f076SRobert Johnston #include <sys/nvpair.h> 312c32020fSeschrock #include <sys/sysmacros.h> 329113a79cSeschrock 339113a79cSeschrock /* 349113a79cSeschrock * Private interfaces for communicating with attached services over IPMI. This 35*989f2807SJerry Jelinek * library is designed for system software communicating with Illumos-supported 36*989f2807SJerry Jelinek * service processors over /dev/ipmi0. It is not a generic IPMI library. 379113a79cSeschrock * 389113a79cSeschrock * Documentation references refer to "Intelligent Platform Management Interface 399113a79cSeschrock * Specification Second Generation v2.0", document revision 1.0 with Februrary 409113a79cSeschrock * 15, 2006 Markup from "IPMI v2.0 Addenda, Errata, and Clarifications Revision 419113a79cSeschrock * 3". 429113a79cSeschrock */ 439113a79cSeschrock 449113a79cSeschrock #ifdef __cplusplus 459113a79cSeschrock extern "C" { 469113a79cSeschrock #endif 479113a79cSeschrock 489113a79cSeschrock typedef struct ipmi_handle ipmi_handle_t; 499113a79cSeschrock 509113a79cSeschrock #pragma pack(1) 519113a79cSeschrock 529113a79cSeschrock /* 539113a79cSeschrock * Basic netfn definitions. See section 5.1. 549113a79cSeschrock */ 55*989f2807SJerry Jelinek #define IPMI_NETFN_CHASSIS 0x0 56*989f2807SJerry Jelinek #define IPMI_NETFN_BRIDGE 0x2 57*989f2807SJerry Jelinek #define IPMI_NETFN_SE 0x4 58*989f2807SJerry Jelinek #define IPMI_NETFN_APP 0x6 59*989f2807SJerry Jelinek #define IPMI_NETFN_FIRMWARE 0x8 60*989f2807SJerry Jelinek #define IPMI_NETFN_STORAGE 0xa 61283bfb4dSEric Schrock #define IPMI_NETFN_TRANSPORT 0x0C 629113a79cSeschrock #define IPMI_NETFN_OEM 0x2e 639113a79cSeschrock 649113a79cSeschrock /* 659113a79cSeschrock * Error definitions 669113a79cSeschrock */ 679113a79cSeschrock #define EIPMI_BASE 2000 689113a79cSeschrock 692eeaed14Srobj typedef enum { 709113a79cSeschrock EIPMI_NOMEM = EIPMI_BASE, /* memory allocation failure */ 71*989f2807SJerry Jelinek EIPMI_BMC_OPEN_FAILED, /* failed to open /dev/ipmi0 */ 72*989f2807SJerry Jelinek EIPMI_BMC_PUTMSG, /* failed to send message to /dev/ipmi0 */ 73*989f2807SJerry Jelinek EIPMI_BMC_GETMSG, /* failed to read response from /dev/ipmi0 */ 74*989f2807SJerry Jelinek EIPMI_BMC_RESPONSE, /* response from /dev/ipmi0 failed */ 759113a79cSeschrock EIPMI_INVALID_COMMAND, /* invalid command */ 769113a79cSeschrock EIPMI_COMMAND_TIMEOUT, /* command timeout */ 779113a79cSeschrock EIPMI_DATA_LENGTH_EXCEEDED, /* maximum data length exceeded */ 789113a79cSeschrock EIPMI_SEND_FAILED, /* failed to send BMC request */ 792eeaed14Srobj EIPMI_UNSPECIFIED, /* unspecified BMC error */ 809113a79cSeschrock EIPMI_UNKNOWN, /* unknown error */ 819113a79cSeschrock EIPMI_BAD_RESPONSE, /* received unexpected response */ 829113a79cSeschrock EIPMI_BAD_RESPONSE_LENGTH, /* unexpected response length */ 832eeaed14Srobj EIPMI_INVALID_RESERVATION, /* invalid or cancelled reservation */ 849113a79cSeschrock EIPMI_NOT_PRESENT, /* requested entity not present */ 852eeaed14Srobj EIPMI_INVALID_REQUEST, /* malformed request data */ 862eeaed14Srobj EIPMI_BUSY, /* service processor is busy */ 872eeaed14Srobj EIPMI_NOSPACE, /* service processor is out of space */ 882eeaed14Srobj EIPMI_UNAVAILABLE, /* service processor is unavailable */ 89283bfb4dSEric Schrock EIPMI_ACCESS, /* insufficient privileges */ 90283bfb4dSEric Schrock EIPMI_BADPARAM, /* parameter is not supported */ 91283bfb4dSEric Schrock EIPMI_READONLY, /* attempt to write read-only param */ 9281d9f076SRobert Johnston EIPMI_WRITEONLY, /* attempt to read write-only param */ 9381d9f076SRobert Johnston EIPMI_LAN_OPEN_FAILED, /* failed to open socket */ 9481d9f076SRobert Johnston EIPMI_LAN_PING_FAILED, /* RMCP Ping message failed */ 9581d9f076SRobert Johnston EIPMI_LAN_PASSWD_NOTSUP, /* password authentication not supported */ 9681d9f076SRobert Johnston EIPMI_LAN_CHALLENGE, /* failure getting challenge */ 9781d9f076SRobert Johnston EIPMI_LAN_SESSION, /* failure activating session */ 9881d9f076SRobert Johnston EIPMI_LAN_SETPRIV /* failure setting session privs */ 992eeaed14Srobj } ipmi_errno_t; 1009113a79cSeschrock 1019113a79cSeschrock /* 1029113a79cSeschrock * Basic library functions. 1039113a79cSeschrock * 1049113a79cSeschrock * The ipmi_handle is the primary interface to the library. The library itself 1059113a79cSeschrock * is not MT-safe, but it is safe within a single handle. Multithreaded clients 1069113a79cSeschrock * should either open multiple handles, or otherwise synchronize access to the 1079113a79cSeschrock * same handle. 1089113a79cSeschrock * 1099113a79cSeschrock * There is a single command response buffer that is stored with the handle, to 1109113a79cSeschrock * simplify memory management in the caller. The memory referenced by a command 1119113a79cSeschrock * response is only valid until the next command is issued. The caller is 1129113a79cSeschrock * responsible for making a copy of the response if it is needed. 1139113a79cSeschrock */ 11481d9f076SRobert Johnston extern ipmi_handle_t *ipmi_open(int *, char **, uint_t xport_type, nvlist_t *); 11581d9f076SRobert Johnston 11681d9f076SRobert Johnston /* 11781d9f076SRobert Johnston * Constants for nvpair names for the params nvlist that is passed to 11881d9f076SRobert Johnston * ipmi_open(). If the IPMI_TRANSPORT_BMC is desired, then it is sufficient 11981d9f076SRobert Johnston * to just specify NULL for the params nvlist. 12081d9f076SRobert Johnston * 12181d9f076SRobert Johnston * For IPMI_TRANSPORT_LAN, the params nvlist must contain the following 12281d9f076SRobert Johnston * nvpairs: 12381d9f076SRobert Johnston * 12481d9f076SRobert Johnston * IPMI_LAN_HOST, IPMI_LAN_USER, IPMI_LAN_PASSWD 12581d9f076SRobert Johnston * 12681d9f076SRobert Johnston * IPMI_LAN_PORT is optional and will default to 623 12781d9f076SRobert Johnston * IPMI_LAN_PRIVLVL is optional and will default to admin 12881d9f076SRobert Johnston * IPMI_LAN_TIMEOUT is optional and will default to 3 seconds 12981d9f076SRobert Johnston * IPMI_LAN_NUM_RETIES is optional and will default to 5 13081d9f076SRobert Johnston */ 13181d9f076SRobert Johnston #define IPMI_TRANSPORT_TYPE "transport-type" 13281d9f076SRobert Johnston #define IPMI_TRANSPORT_BMC 0x01 13381d9f076SRobert Johnston #define IPMI_TRANSPORT_LAN 0x02 13481d9f076SRobert Johnston 13581d9f076SRobert Johnston #define IPMI_LAN_HOST "lan-host" 13681d9f076SRobert Johnston #define IPMI_LAN_PORT "lan-port" 13781d9f076SRobert Johnston #define IPMI_LAN_USER "lan-user" 13881d9f076SRobert Johnston #define IPMI_LAN_PASSWD "lan-passwd" 13981d9f076SRobert Johnston #define IPMI_LAN_PRIVLVL "lan-privlvl" 14081d9f076SRobert Johnston #define IPMI_LAN_TIMEOUT "lan-timeout" 14181d9f076SRobert Johnston #define IPMI_LAN_NUM_RETRIES "lan-num-retries" 14281d9f076SRobert Johnston 1439113a79cSeschrock extern void ipmi_close(ipmi_handle_t *); 1449113a79cSeschrock 1459113a79cSeschrock extern int ipmi_errno(ipmi_handle_t *); 1469113a79cSeschrock extern const char *ipmi_errmsg(ipmi_handle_t *); 1479113a79cSeschrock 1489113a79cSeschrock /* 1499113a79cSeschrock * Raw requests. See section 5. 1509113a79cSeschrock */ 1519113a79cSeschrock typedef struct ipmi_cmd { 1529113a79cSeschrock uint8_t ic_netfn:6; 1539113a79cSeschrock uint8_t ic_lun:2; 1549113a79cSeschrock uint8_t ic_cmd; 1559113a79cSeschrock uint16_t ic_dlen; 1569113a79cSeschrock void *ic_data; 1579113a79cSeschrock } ipmi_cmd_t; 1589113a79cSeschrock 1599113a79cSeschrock extern ipmi_cmd_t *ipmi_send(ipmi_handle_t *, ipmi_cmd_t *); 1609113a79cSeschrock 1619113a79cSeschrock /* 1629113a79cSeschrock * Retrieve basic information about the IPMI device. See section 20.1 "Get 1639113a79cSeschrock * Device ID Command". 1649113a79cSeschrock */ 1659113a79cSeschrock #define IPMI_CMD_GET_DEVICEID 0x01 1669113a79cSeschrock 1679113a79cSeschrock typedef struct ipmi_deviceid { 1689113a79cSeschrock uint8_t id_devid; 1692c32020fSeschrock DECL_BITFIELD3( 1702c32020fSeschrock id_dev_rev :4, 1712c32020fSeschrock __reserved :3, 1722c32020fSeschrock id_dev_sdrs :1); 1732c32020fSeschrock DECL_BITFIELD2( 1742c32020fSeschrock id_firm_major :7, 1752c32020fSeschrock id_dev_available :1); 1769113a79cSeschrock uint8_t id_firm_minor; 1779113a79cSeschrock uint8_t id_ipmi_rev; 1789113a79cSeschrock uint8_t id_dev_support; 1799113a79cSeschrock uint8_t id_manufacturer[3]; 18081d9f076SRobert Johnston uint8_t id_product[2]; 1819113a79cSeschrock } ipmi_deviceid_t; 1829113a79cSeschrock 1839113a79cSeschrock #define IPMI_OEM_SUN 0x2a 1842eeaed14Srobj #define IPMI_PROD_SUN_ILOM 0x4701 1859113a79cSeschrock 1869113a79cSeschrock ipmi_deviceid_t *ipmi_get_deviceid(ipmi_handle_t *); 1879113a79cSeschrock 1889113a79cSeschrock #define ipmi_devid_manufacturer(dp) \ 1899113a79cSeschrock ((dp)->id_manufacturer[0] | \ 1909113a79cSeschrock ((dp)->id_manufacturer[1] << 8) | \ 1919113a79cSeschrock ((dp)->id_manufacturer[2] << 16)) 1929113a79cSeschrock 19381d9f076SRobert Johnston #define ipmi_devid_product(dp) \ 19481d9f076SRobert Johnston ((dp)->id_product[0] | \ 19581d9f076SRobert Johnston ((dp)->id_product[1] << 8)) 19681d9f076SRobert Johnston 1972eeaed14Srobj const char *ipmi_firmware_version(ipmi_handle_t *); 1982eeaed14Srobj 1992eeaed14Srobj /* 20081d9f076SRobert Johnston * Get Channel Auth Caps. See section 22.13. 20181d9f076SRobert Johnston */ 20281d9f076SRobert Johnston typedef struct ipmi_channel_auth_caps { 20381d9f076SRobert Johnston uint8_t cap_channel; 20481d9f076SRobert Johnston DECL_BITFIELD3( 20581d9f076SRobert Johnston cap_authtype :6, 20681d9f076SRobert Johnston __reserved1 :1, 20781d9f076SRobert Johnston cap_ipmirev2 :1); 20881d9f076SRobert Johnston DECL_BITFIELD5( 20981d9f076SRobert Johnston cap_anon :3, 21081d9f076SRobert Johnston cap_peruser :1, 21181d9f076SRobert Johnston cap_permesg :1, 21281d9f076SRobert Johnston cap_kgstatus :1, 21381d9f076SRobert Johnston __reserved2 :2); 21481d9f076SRobert Johnston uint8_t cap_ext; 21581d9f076SRobert Johnston uint8_t cap_oemid[3]; 21681d9f076SRobert Johnston uint8_t cap_oemaux; 21781d9f076SRobert Johnston } ipmi_channel_auth_caps_t; 21881d9f076SRobert Johnston 21981d9f076SRobert Johnston #define IPMI_CMD_GET_CHANNEL_AUTH_CAPS 0x38 22081d9f076SRobert Johnston extern ipmi_channel_auth_caps_t *ipmi_get_channel_auth_caps(ipmi_handle_t *, 22181d9f076SRobert Johnston uint8_t, uint8_t); 22281d9f076SRobert Johnston 22381d9f076SRobert Johnston /* 224283bfb4dSEric Schrock * Get Channel Info. See section 22.24. 225283bfb4dSEric Schrock */ 226283bfb4dSEric Schrock typedef struct ipmi_channel_info { 227283bfb4dSEric Schrock DECL_BITFIELD2( 228283bfb4dSEric Schrock ici_number :4, 229283bfb4dSEric Schrock __reserved1 :4); 230283bfb4dSEric Schrock DECL_BITFIELD2( 231283bfb4dSEric Schrock ici_medium :7, 232283bfb4dSEric Schrock __reserved2 :1); 233283bfb4dSEric Schrock DECL_BITFIELD2( 234283bfb4dSEric Schrock ici_protocol :5, 235283bfb4dSEric Schrock __reserved3 :3); 236283bfb4dSEric Schrock DECL_BITFIELD3( 237283bfb4dSEric Schrock ici_session_count :6, 238283bfb4dSEric Schrock ici_single_session :1, 239283bfb4dSEric Schrock ici_multi_Session :1); 240283bfb4dSEric Schrock uint8_t ici_vendor[3]; 241283bfb4dSEric Schrock uint8_t ici_auxinfo[2]; 242283bfb4dSEric Schrock } ipmi_channel_info_t; 243283bfb4dSEric Schrock 244283bfb4dSEric Schrock #define IPMI_CMD_GET_CHANNEL_INFO 0x42 245283bfb4dSEric Schrock 246283bfb4dSEric Schrock /* 247283bfb4dSEric Schrock * Channel Numbers. See section 6.3. 248283bfb4dSEric Schrock */ 249283bfb4dSEric Schrock #define IPMI_CHANNEL_PRIMARY 0x0 250283bfb4dSEric Schrock #define IPMI_CHANNEL_MIN 0x1 251283bfb4dSEric Schrock #define IPMI_CHANNEL_MAX 0xB 252283bfb4dSEric Schrock #define IPMI_CHANNEL_CURRENT 0xE 253283bfb4dSEric Schrock #define IPMI_CHANNEL_SYSTEM 0xF 254283bfb4dSEric Schrock 255283bfb4dSEric Schrock extern ipmi_channel_info_t *ipmi_get_channel_info(ipmi_handle_t *, int); 256283bfb4dSEric Schrock 257283bfb4dSEric Schrock /* 258283bfb4dSEric Schrock * Channel Protocol Types. See section 6.4. 259283bfb4dSEric Schrock */ 260283bfb4dSEric Schrock #define IPMI_PROTOCOL_IPMB 0x1 261283bfb4dSEric Schrock #define IPMI_PROTOCOL_ICMB 0x2 262283bfb4dSEric Schrock #define IPMI_PROTOCOL_SMBUS 0x4 263283bfb4dSEric Schrock #define IPMI_PROTOCOL_KCS 0x5 264283bfb4dSEric Schrock #define IPMI_PROTOCOL_SMIC 0x6 265283bfb4dSEric Schrock #define IPMI_PROTOCOL_BT10 0x7 266283bfb4dSEric Schrock #define IPMI_PROTOCOL_BT15 0x8 267283bfb4dSEric Schrock #define IPMI_PROTOCOL_TMODE 0x9 268283bfb4dSEric Schrock #define IPMI_PROTOCOL_OEM1 0xC 269283bfb4dSEric Schrock #define IPMI_PROTOCOL_OEM2 0xD 270283bfb4dSEric Schrock #define IPMI_PROTOCOL_OEM3 0xE 271283bfb4dSEric Schrock #define IPMI_PROTOCOL_OEM4 0xF 272283bfb4dSEric Schrock 273283bfb4dSEric Schrock /* 274283bfb4dSEric Schrock * Channel Medium Types. See section 6.5. 275283bfb4dSEric Schrock */ 276283bfb4dSEric Schrock #define IPMI_MEDIUM_IPMB 0x1 277283bfb4dSEric Schrock #define IPMI_MEDIUM_ICMB10 0x2 278283bfb4dSEric Schrock #define IPMI_MEDIUM_ICMB09 0x3 279283bfb4dSEric Schrock #define IPMI_MEDIUM_8023LAN 0x4 280283bfb4dSEric Schrock #define IPMI_MEDIUM_RS232 0x5 281283bfb4dSEric Schrock #define IPMI_MEDIUM_OTHERLAN 0x6 282283bfb4dSEric Schrock #define IPMI_MEDIUM_PCISMBUS 0x7 283283bfb4dSEric Schrock #define IPMI_MEDIUM_SMBUS10 0x8 284283bfb4dSEric Schrock #define IPMI_MEDIUM_SMBUS20 0x9 285283bfb4dSEric Schrock #define IPMI_MEDIUM_USB1 0xA 286283bfb4dSEric Schrock #define IPMI_MEDIUM_USB2 0xB 287283bfb4dSEric Schrock #define IPMI_MEDIUM_SYSTEM 0xC 288283bfb4dSEric Schrock 289283bfb4dSEric Schrock /* 290283bfb4dSEric Schrock * LAN Configuration. See section 23. While the underlying mechanism is 291283bfb4dSEric Schrock * implemented via a sequence of get/set parameter commands, we assume that 292283bfb4dSEric Schrock * consumers prefer to get and set information in chunks, and therefore expose 293283bfb4dSEric Schrock * the configuration as a structure, with some of the less useful fields 294283bfb4dSEric Schrock * removed. When making changes, the consumer specifies which fields to apply 295283bfb4dSEric Schrock * along with the structure the library takes care of the rest of the work. 296283bfb4dSEric Schrock * 297283bfb4dSEric Schrock * This can be expanded in the future as needed. 298283bfb4dSEric Schrock */ 299283bfb4dSEric Schrock 300283bfb4dSEric Schrock typedef struct ipmi_lan_config { 301283bfb4dSEric Schrock boolean_t ilc_set_in_progress; 302283bfb4dSEric Schrock uint32_t ilc_ipaddr; 303283bfb4dSEric Schrock uint8_t ilc_ipaddr_source; 304283bfb4dSEric Schrock uint8_t ilc_macaddr[6]; 305283bfb4dSEric Schrock uint32_t ilc_subnet; 306283bfb4dSEric Schrock uint32_t ilc_gateway_addr; 307283bfb4dSEric Schrock } ipmi_lan_config_t; 308283bfb4dSEric Schrock 309283bfb4dSEric Schrock #define IPMI_LAN_SRC_UNSPECIFIED 0x0 310283bfb4dSEric Schrock #define IPMI_LAN_SRC_STATIC 0x1 311283bfb4dSEric Schrock #define IPMI_LAN_SRC_DHCP 0x2 312283bfb4dSEric Schrock #define IPMI_LAN_SRC_BIOS 0x3 313283bfb4dSEric Schrock #define IPMI_LAN_SRC_OTHER 0x4 314283bfb4dSEric Schrock 315283bfb4dSEric Schrock #define IPMI_LAN_SET_IPADDR 0x01 316283bfb4dSEric Schrock #define IPMI_LAN_SET_IPADDR_SOURCE 0x02 317283bfb4dSEric Schrock #define IPMI_LAN_SET_MACADDR 0x04 318283bfb4dSEric Schrock #define IPMI_LAN_SET_SUBNET 0x08 319283bfb4dSEric Schrock #define IPMI_LAN_SET_GATEWAY_ADDR 0x10 320283bfb4dSEric Schrock 321283bfb4dSEric Schrock #define IPMI_CMD_SET_LAN_CONFIG 0x01 322283bfb4dSEric Schrock #define IPMI_CMD_GET_LAN_CONFIG 0x02 323283bfb4dSEric Schrock 324283bfb4dSEric Schrock extern int ipmi_lan_get_config(ipmi_handle_t *, int, 325283bfb4dSEric Schrock ipmi_lan_config_t *); 326283bfb4dSEric Schrock extern int ipmi_lan_set_config(ipmi_handle_t *, int, ipmi_lan_config_t *, int); 327283bfb4dSEric Schrock 328283bfb4dSEric Schrock /* 3292eeaed14Srobj * SEL (System Event Log) commands. Currently the library only provides 3302eeaed14Srobj * commands for reading the SEL. 3312eeaed14Srobj */ 3322eeaed14Srobj 3332eeaed14Srobj /* 3342eeaed14Srobj * 31.2 Get SEL Info Command 3352eeaed14Srobj */ 3362eeaed14Srobj #define IPMI_CMD_GET_SEL_INFO 0x40 3372eeaed14Srobj 3382eeaed14Srobj typedef struct ipmi_sel_info { 3392eeaed14Srobj uint8_t isel_version; 3402eeaed14Srobj uint16_t isel_entries; 3412eeaed14Srobj uint16_t isel_free; 3422eeaed14Srobj uint32_t isel_add_ts; 3432eeaed14Srobj uint32_t isel_erase_ts; 3442eeaed14Srobj DECL_BITFIELD6( 3452eeaed14Srobj isel_supp_allocation :1, 3462eeaed14Srobj isel_supp_reserve :1, 3472eeaed14Srobj isel_supp_partial :1, 3482eeaed14Srobj isel_supp_delete :1, 3492eeaed14Srobj __reserved :3, 3502eeaed14Srobj isel_overflow :1); 3512eeaed14Srobj } ipmi_sel_info_t; 3522eeaed14Srobj 3532eeaed14Srobj extern ipmi_sel_info_t *ipmi_sel_get_info(ipmi_handle_t *); 3542eeaed14Srobj extern boolean_t ipmi_sdr_changed(ipmi_handle_t *); 3552eeaed14Srobj extern int ipmi_sdr_refresh(ipmi_handle_t *); 3562eeaed14Srobj 3572eeaed14Srobj /* 3582eeaed14Srobj * 32.1 SEL Event Records 3592eeaed14Srobj */ 3602eeaed14Srobj typedef struct ipmi_sel_event { 3612eeaed14Srobj uint16_t isel_ev_next; 3622eeaed14Srobj uint16_t isel_ev_recid; 3632eeaed14Srobj uint8_t isel_ev_rectype; 3642eeaed14Srobj uint32_t isel_ev_ts; 3652eeaed14Srobj DECL_BITFIELD2( 3662eeaed14Srobj isel_ev_software :1, 3672eeaed14Srobj isel_ev_addr_or_id :7); 3682eeaed14Srobj DECL_BITFIELD3( 3692eeaed14Srobj isel_ev_lun :2, 3702eeaed14Srobj __reserved :2, 3712eeaed14Srobj isel_ev_channel :4); 3722eeaed14Srobj uint8_t isel_ev_rev; 3732eeaed14Srobj uint8_t isel_ev_sensor_type; 3742eeaed14Srobj uint8_t isel_ev_sensor_number; 3752eeaed14Srobj DECL_BITFIELD2( 3762eeaed14Srobj isel_ev_type :7, 3772eeaed14Srobj isel_ev_dir :1); 3782eeaed14Srobj uint8_t isel_ev_data[3]; 3792eeaed14Srobj } ipmi_sel_event_t; 3802eeaed14Srobj 3812eeaed14Srobj #define IPMI_EV_REV15 0x04 3822eeaed14Srobj #define IPMI_EV_REV1 0x03 3832eeaed14Srobj 3842eeaed14Srobj #define IPMI_SEL_SYSTEM 0x02 3852eeaed14Srobj #define IPMI_SEL_OEMTS_LO 0xC0 3862eeaed14Srobj #define IPMI_SEL_OEMTS_HI 0xDF 3872eeaed14Srobj #define IPMI_SEL_OEM_LO 0xE0 3882eeaed14Srobj #define IPMI_SEL_OEM_HI 0xFF 3892eeaed14Srobj 3902eeaed14Srobj #define IPMI_EV_ASSERT 0x0 3912eeaed14Srobj #define IPMI_EV_DEASSERT 0x1 3922eeaed14Srobj 3932eeaed14Srobj /* 3942eeaed14Srobj * 32.2 OEM SEL Record (with timestamp) 3952eeaed14Srobj */ 3962eeaed14Srobj typedef struct ipmi_sel_oem_ts { 3972eeaed14Srobj uint16_t isel_oem_next; 3982eeaed14Srobj uint16_t isel_oem_id; 3992eeaed14Srobj uint8_t isel_oem_type; 4002eeaed14Srobj uint32_t isel_oem_ts; 4012eeaed14Srobj uint8_t isel_oem_devid[3]; 4022eeaed14Srobj uint8_t isel_oem_data[6]; 4032eeaed14Srobj } ipmi_sel_oem_ts_t; 4042eeaed14Srobj 4052eeaed14Srobj /* 4062eeaed14Srobj * 32.3 OEM SEL Record (no timestamp) 4072eeaed14Srobj */ 4082eeaed14Srobj typedef struct ipmi_sel_oem { 4092eeaed14Srobj uint16_t isel_oem_next; 4102eeaed14Srobj uint16_t isel_oem_id; 4112eeaed14Srobj uint8_t isel_oem_type; 4122eeaed14Srobj uint8_t isel_oem_data[13]; 4132eeaed14Srobj } ipmi_sel_oem_t; 4142eeaed14Srobj 4152eeaed14Srobj /* 416283bfb4dSEric Schrock * 29.3 Platform Event Message Command. 417283bfb4dSEric Schrock */ 418283bfb4dSEric Schrock typedef struct ipmi_platform_event_message { 419283bfb4dSEric Schrock uint8_t ipem_generator; 420283bfb4dSEric Schrock uint8_t ipem_rev; 421283bfb4dSEric Schrock uint8_t ipem_sensor_type; 422283bfb4dSEric Schrock uint8_t ipem_sensor_num; 423283bfb4dSEric Schrock DECL_BITFIELD2( 424283bfb4dSEric Schrock ipem_event_type :7, 425283bfb4dSEric Schrock ipem_event_dir :1); 426283bfb4dSEric Schrock uint8_t ipem_event_data[3]; 427283bfb4dSEric Schrock } ipmi_platform_event_message_t; 428283bfb4dSEric Schrock 429283bfb4dSEric Schrock #define IPMI_CMD_PLATFORM_EVENT_MESSAGE 0x02 430283bfb4dSEric Schrock 431283bfb4dSEric Schrock extern int ipmi_event_platform_message(ipmi_handle_t *, 432283bfb4dSEric Schrock ipmi_platform_event_message_t *); 433283bfb4dSEric Schrock 434283bfb4dSEric Schrock /* 4352eeaed14Srobj * 29.7 Event Data Field Formats. Consumers can cast the data field of the 4362eeaed14Srobj * event record to the appropriate type depending on the sensor class. 4372eeaed14Srobj */ 4382eeaed14Srobj 4392eeaed14Srobj typedef struct ipmi_event_threshold { 4402eeaed14Srobj DECL_BITFIELD3( 4412eeaed14Srobj iev_offset :4, 4422eeaed14Srobj iev_desc_byte3 :2, 4432eeaed14Srobj iev_desc_byte2 :2); 4442eeaed14Srobj uint8_t iev_reading; 4452eeaed14Srobj uint8_t iev_threshold; 4462eeaed14Srobj } ipmi_event_threshold_t; 4472eeaed14Srobj 4482eeaed14Srobj #define IPMI_EV_DESC_UNSPECIFIED 0x00 4492eeaed14Srobj #define IPMI_EV_DESC_TRIGGER 0x01 4502eeaed14Srobj #define IPMI_EV_DESC_OEM 0x02 4512eeaed14Srobj #define IPMI_EV_DESC_SPECIFIC 0x03 4522eeaed14Srobj 4532eeaed14Srobj typedef struct ipmi_event_discrete { 4542eeaed14Srobj DECL_BITFIELD3( 4552eeaed14Srobj iev_offset :4, 4562eeaed14Srobj iev_desc_byte3 :2, 4572eeaed14Srobj iev_desc_byte2 :2); 4582eeaed14Srobj DECL_BITFIELD2( 4592eeaed14Srobj iev_offset_type :4, 4602eeaed14Srobj iev_offset_severity :4); 4612eeaed14Srobj uint8_t iev_oem_code; 4622eeaed14Srobj } ipmi_event_discrete_t; 4632eeaed14Srobj 4642eeaed14Srobj #define IPMI_EV_DESC_PREVSTATE 0x01 4652eeaed14Srobj #define IPMI_EV_DESC_SPECIFIC 0x03 4662eeaed14Srobj 4672eeaed14Srobj typedef struct ipmi_event_oem { 4682eeaed14Srobj DECL_BITFIELD3( 4692eeaed14Srobj iev_offset :4, 4702eeaed14Srobj iev_desc_byte3 :2, 4712eeaed14Srobj iev_desc_byte2 :2); 4722eeaed14Srobj DECL_BITFIELD2( 4732eeaed14Srobj iev_offset_type :4, 4742eeaed14Srobj iev_offset_severity :4); 4752eeaed14Srobj uint8_t iev_oem_code; 4762eeaed14Srobj } ipmi_event_oem_t; 4772eeaed14Srobj 4782eeaed14Srobj /* 4792eeaed14Srobj * Get SEL Entry Command. See section 31.5. We don't support partial reads, so 4802eeaed14Srobj * this interface is quite a bit simpler than in the spec. We default to 4812eeaed14Srobj * returning event records, though the consumer should check the type field and 4822eeaed14Srobj * cast it to the appropriate type if it is no IPMI_SEL_SYSTEM. 4832eeaed14Srobj */ 4842eeaed14Srobj #define IPMI_CMD_GET_SEL_ENTRY 0x43 4852eeaed14Srobj 4862eeaed14Srobj extern ipmi_sel_event_t *ipmi_sel_get_entry(ipmi_handle_t *, uint16_t); 4872eeaed14Srobj 4882eeaed14Srobj #define IPMI_SEL_FIRST_ENTRY 0x0000 4892eeaed14Srobj #define IPMI_SEL_LAST_ENTRY 0xFFFF 4902eeaed14Srobj 4912eeaed14Srobj /* 4922eeaed14Srobj * SEL time management. See sections 31.10 and 31.11. 4932eeaed14Srobj */ 4942eeaed14Srobj #define IPMI_CMD_GET_SEL_TIME 0x48 4952eeaed14Srobj #define IPMI_CMD_SET_SEL_TIME 0x49 4962eeaed14Srobj #define IPMI_CMD_GET_SEL_UTC_OFFSET 0x5C 4972eeaed14Srobj #define IPMI_CMD_SET_SEL_UTC_OFFSET 0x5D 4982eeaed14Srobj 4992eeaed14Srobj extern int ipmi_sel_get_time(ipmi_handle_t *, uint32_t *); 5002eeaed14Srobj extern int ipmi_sel_set_time(ipmi_handle_t *, uint32_t); 5012eeaed14Srobj extern int ipmi_sel_get_utc_offset(ipmi_handle_t *, int *); 5022eeaed14Srobj extern int ipmi_sel_set_utc_offset(ipmi_handle_t *, int); 5032eeaed14Srobj 5049113a79cSeschrock /* 5059113a79cSeschrock * SDR (Sensor Device Record) requests. A cache of the current SDR repository 5062eeaed14Srobj * is kept as part of the IPMI handle and updated when necessary. This does the 5072eeaed14Srobj * work of processing the SDR names and providing an easy way to lookup 5082eeaed14Srobj * individual records and iterate over all records. 5099113a79cSeschrock */ 5109113a79cSeschrock 5119113a79cSeschrock /* 5122eeaed14Srobj * Get SDR Repository Info Command. See section 33.9. 5132eeaed14Srobj */ 5142eeaed14Srobj #define IPMI_CMD_GET_SDR_INFO 0x20 5152eeaed14Srobj 5162eeaed14Srobj typedef struct ipmi_sdr_info { 5172eeaed14Srobj uint8_t isi_version; 5182eeaed14Srobj uint16_t isi_record_count; 5192eeaed14Srobj uint16_t isi_free_space; 5202eeaed14Srobj uint32_t isi_add_ts; 5212eeaed14Srobj uint32_t isi_erase_ts; 5222eeaed14Srobj DECL_BITFIELD7( 5232eeaed14Srobj isi_supp_allocation :1, 5242eeaed14Srobj isi_supp_reserve :1, 5252eeaed14Srobj isi_supp_partial :1, 5262eeaed14Srobj isi_supp_delete :1, 5272eeaed14Srobj __reserved :1, 5282eeaed14Srobj isi_modal :2, 5292eeaed14Srobj isi_overflow :1); 5302eeaed14Srobj } ipmi_sdr_info_t; 5312eeaed14Srobj 5322eeaed14Srobj extern ipmi_sdr_info_t *ipmi_sdr_get_info(ipmi_handle_t *); 5332eeaed14Srobj 5342eeaed14Srobj /* 5359113a79cSeschrock * Reserve repository command. See section 33.11. 5369113a79cSeschrock */ 5379113a79cSeschrock #define IPMI_CMD_RESERVE_SDR_REPOSITORY 0x22 5389113a79cSeschrock 5399113a79cSeschrock /* 5409113a79cSeschrock * Get SDR command. See section 33.12. This command accesses the raw SDR 5419113a79cSeschrock * repository. Clients can also use the lookup functions to retrieve a 5429113a79cSeschrock * particular SDR record by name. 5439113a79cSeschrock * 5449113a79cSeschrock * The list of possible types is indicated in the sub-chapters of section 43. 5459113a79cSeschrock */ 5469113a79cSeschrock typedef struct ipmi_sdr { 5479113a79cSeschrock uint16_t is_id; 5489113a79cSeschrock uint8_t is_version; 5499113a79cSeschrock uint8_t is_type; 5509113a79cSeschrock uint8_t is_length; 5519113a79cSeschrock uint8_t is_record[1]; 5529113a79cSeschrock } ipmi_sdr_t; 5539113a79cSeschrock #define IPMI_CMD_GET_SDR 0x23 5549113a79cSeschrock 5559113a79cSeschrock #define IPMI_SDR_FIRST 0x0000 5569113a79cSeschrock #define IPMI_SDR_LAST 0xFFFF 5579113a79cSeschrock 5589113a79cSeschrock extern ipmi_sdr_t *ipmi_sdr_get(ipmi_handle_t *, uint16_t, uint16_t *); 5599113a79cSeschrock 5609113a79cSeschrock /* 5612eeaed14Srobj * Full Sensor Record. See 43.1 5622eeaed14Srobj */ 5632eeaed14Srobj #define IPMI_SDR_TYPE_FULL_SENSOR 0x01 5642eeaed14Srobj 5652eeaed14Srobj typedef struct ipmi_sdr_full_sensor { 5662eeaed14Srobj /* RECORD KEY BYTES */ 5672eeaed14Srobj uint8_t is_fs_owner; 5682eeaed14Srobj DECL_BITFIELD3( 5692eeaed14Srobj is_fs_sensor_lun :2, 5702eeaed14Srobj __reserved1 :2, 5712eeaed14Srobj is_fs_channel :4); 5722eeaed14Srobj uint8_t is_fs_number; 5732eeaed14Srobj /* RECORD BODY BYTES */ 5742eeaed14Srobj uint8_t is_fs_entity_id; 5752eeaed14Srobj DECL_BITFIELD2( 5762eeaed14Srobj is_fs_entity_instance :7, 5772eeaed14Srobj is_fs_entity_logical :1); 5782eeaed14Srobj DECL_BITFIELD8( 5792eeaed14Srobj is_fs_sensor_scanning_enabled :1, 5802eeaed14Srobj is_fs_event_generation_enabled :1, 5812eeaed14Srobj is_fs_init_sensor_type :1, 5822eeaed14Srobj is_fs_init_hysteresis :1, 5832eeaed14Srobj is_fs_init_thresholds :1, 5842eeaed14Srobj is_fs_init_events :1, 5852eeaed14Srobj is_fs_init_scanning :1, 5862eeaed14Srobj is_fs_settable :1); 5872eeaed14Srobj DECL_BITFIELD5( 5882eeaed14Srobj is_fs_event_support :2, 5892eeaed14Srobj is_fs_threshold_support :2, 5902eeaed14Srobj is_fs_hysteresis_support :2, 5912eeaed14Srobj is_fs_rearm_support :1, 5922eeaed14Srobj is_fs_ignore :1); 5932eeaed14Srobj uint8_t is_fs_type; 5942eeaed14Srobj uint8_t is_fs_reading_type; 5952eeaed14Srobj uint16_t is_fs_assert_mask; 5962eeaed14Srobj uint16_t is_fs_deassert_mask; 5972eeaed14Srobj uint16_t is_fs_reading_mask; 5982eeaed14Srobj DECL_BITFIELD4( 5992eeaed14Srobj is_fs_units_isprcnt :1, 6002eeaed14Srobj is_fs_mod_unit :2, 6012eeaed14Srobj is_fs_rate_unit :3, 6022eeaed14Srobj is_fs_analog_fmt :2); 6032eeaed14Srobj uint8_t is_fs_unit2; 6042eeaed14Srobj uint8_t is_fs_unit3; 6052eeaed14Srobj /* Linearization */ 6062eeaed14Srobj DECL_BITFIELD2( 6072eeaed14Srobj is_fs_sensor_linear_type :7, 6082eeaed14Srobj __reserved2 :1); 6092eeaed14Srobj /* M, Tolerance */ 6102eeaed14Srobj uint16_t is_fs_mtol; 6112eeaed14Srobj /* B, Accuracy, R exp, B exp */ 6122eeaed14Srobj uint32_t is_fs_bacc; 6132eeaed14Srobj DECL_BITFIELD4( 6142eeaed14Srobj is_fs_nominal_reading_spec :1, 6152eeaed14Srobj is_fs_normal_max_spec :1, 6162eeaed14Srobj is_fs_normal_min_spec :1, 6172eeaed14Srobj __reserved3 :5); 6182eeaed14Srobj uint8_t is_fs_nominal_reading; 6192eeaed14Srobj uint8_t is_fs_normal_maximum; 6202eeaed14Srobj uint8_t is_fs_normal_minimum; 6212eeaed14Srobj uint8_t is_fs_max; 6222eeaed14Srobj uint8_t is_fs_min; 6232eeaed14Srobj uint8_t is_fs_upper_nonrecov; 6242eeaed14Srobj uint8_t is_fs_upper_critical; 6252eeaed14Srobj uint8_t is_fs_upper_noncrit; 6262eeaed14Srobj uint8_t is_fs_lower_nonrecov; 6272eeaed14Srobj uint8_t is_fs_lower_critical; 6282eeaed14Srobj uint8_t is_fs_lower_noncrit; 6292eeaed14Srobj uint8_t is_fs_hysteresis_positive; 6302eeaed14Srobj uint8_t is_fs_hysteresis_negative; 6312eeaed14Srobj uint16_t __reserved4; 6322eeaed14Srobj uint8_t is_fs_oem; 6332eeaed14Srobj DECL_BITFIELD3( 6342eeaed14Srobj is_fs_idlen :5, 6352eeaed14Srobj __reserved5 :1, 6362eeaed14Srobj is_fs_idtype :2); 6372eeaed14Srobj char is_fs_idstring[1]; 6382eeaed14Srobj } ipmi_sdr_full_sensor_t; 6392eeaed14Srobj 6402eeaed14Srobj #define IPMI_SDR_TYPE_COMPACT_SENSOR 0x02 6412eeaed14Srobj 6422eeaed14Srobj /* 6432eeaed14Srobj * Compact Sensor Record. See section 43.2 6442eeaed14Srobj */ 6452eeaed14Srobj typedef struct ipmi_sdr_compact_sensor { 6462eeaed14Srobj /* RECORD KEY BYTES */ 6472eeaed14Srobj uint8_t is_cs_owner; 6482eeaed14Srobj DECL_BITFIELD3( 6492eeaed14Srobj is_cs_sensor_lun :2, 6502eeaed14Srobj is_cs_fru_lun :2, 6512eeaed14Srobj is_cs_channel :4); 6522eeaed14Srobj uint8_t is_cs_number; 6532eeaed14Srobj /* RECORD BODY BYTES */ 6542eeaed14Srobj uint8_t is_cs_entity_id; 6552eeaed14Srobj DECL_BITFIELD2( 6562eeaed14Srobj is_cs_entity_instance :7, 6572eeaed14Srobj is_cs_entity_logical :1); 6582eeaed14Srobj DECL_BITFIELD8( 6592eeaed14Srobj is_cs_sensor_scanning_enabled :1, 6602eeaed14Srobj is_cs_event_generation_enabled :1, 6612eeaed14Srobj is_cs_init_sensor_type :1, 6622eeaed14Srobj is_cs_init_hysteresis :1, 6632eeaed14Srobj __reserved1 :1, 6642eeaed14Srobj is_cs_init_events :1, 6652eeaed14Srobj is_cs_init_scanning :1, 6662eeaed14Srobj is_cs_settable :1); 6672eeaed14Srobj DECL_BITFIELD5( 6682eeaed14Srobj is_cs_event_support :2, 6692eeaed14Srobj is_cs_threshold_support :2, 6702eeaed14Srobj is_cs_hysteresis_support :2, 6712eeaed14Srobj is_cs_rearm_support :1, 6722eeaed14Srobj is_cs_ignore :1); 6732eeaed14Srobj uint8_t is_cs_type; 6742eeaed14Srobj uint8_t is_cs_reading_type; 6752eeaed14Srobj uint16_t is_cs_assert_mask; 6762eeaed14Srobj uint16_t is_cs_deassert_mask; 6772eeaed14Srobj uint16_t is_cs_reading_mask; 6782eeaed14Srobj DECL_BITFIELD4( 6792eeaed14Srobj is_cs_units_isprcnt :1, 6802eeaed14Srobj is_cs_mod_unit :2, 6812eeaed14Srobj is_cs_rate_unit :3, 6822eeaed14Srobj __reserved2 :2); 6832eeaed14Srobj uint8_t is_cs_unit2; 6842eeaed14Srobj uint8_t is_cs_unit3; 6852eeaed14Srobj DECL_BITFIELD3( 6862eeaed14Srobj is_cs_share_count :4, 6872eeaed14Srobj is_cs_modifier_type :2, 6882eeaed14Srobj is_cs_direction :2); 6892eeaed14Srobj DECL_BITFIELD2( 6902eeaed14Srobj is_cs_modifier_offset :7, 6912eeaed14Srobj is_cs_sharing :1); 6922eeaed14Srobj uint8_t is_cs_hysteresis_positive; 6932eeaed14Srobj uint8_t is_cs_hysteresis_negative; 6942eeaed14Srobj uint16_t __reserved3; 6952eeaed14Srobj uint8_t __reserved4; 6962eeaed14Srobj uint8_t is_cs_oem; 6972eeaed14Srobj DECL_BITFIELD3( 6982eeaed14Srobj is_cs_idlen :5, 6992eeaed14Srobj __reserved5 :1, 7002eeaed14Srobj is_cs_idtype :2); 7012eeaed14Srobj char is_cs_idstring[1]; 7022eeaed14Srobj } ipmi_sdr_compact_sensor_t; 7032eeaed14Srobj 7042eeaed14Srobj /* 7052eeaed14Srobj * Threshold sensor masks for is_cs_assert_mask and is_cs_deassert_mask. 7062eeaed14Srobj */ 7072eeaed14Srobj #define IPMI_SENSOR_RETURN_NONRECOV 0x4000 7082eeaed14Srobj #define IPMI_SENSOR_RETURN_CRIT 0x2000 7092eeaed14Srobj #define IPMI_SENSOR_RETURN_NONCRIT 0x1000 7102eeaed14Srobj 7112eeaed14Srobj #define IPMI_SENSOR_MASK_UPPER_NONRECOV_HI 0x0800 7122eeaed14Srobj #define IPMI_SENSOR_MASK_UPPER_NONRECOV_LO 0x0400 7132eeaed14Srobj #define IPMI_SENSOR_MASK_UPPER_CRIT_HI 0x0200 7142eeaed14Srobj #define IPMI_SENSOR_MASK_UPPER_CRIT_LO 0x0100 7152eeaed14Srobj #define IPMI_SENSOR_MASK_UPPER_NONCRIT_HI 0x0080 7162eeaed14Srobj #define IPMI_SENSOR_MASK_UPPER_NONCRIT_LO 0x0040 7172eeaed14Srobj #define IPMI_SENSOR_MASK_LOWER_NONRECOV_HI 0x0020 7182eeaed14Srobj #define IPMI_SENSOR_MASK_LOWER_NONRECOV_LO 0x0010 7192eeaed14Srobj #define IPMI_SENSOR_MASK_LOWER_CRIT_HI 0x0008 7202eeaed14Srobj #define IPMI_SENSOR_MASK_LOWER_CRIT_LO 0x0004 7212eeaed14Srobj #define IPMI_SENSOR_MASK_LOWER_NONCRIT_HI 0x0002 7222eeaed14Srobj #define IPMI_SENSOR_MASK_LOWER_NONCRIT_LO 0x0001 7232eeaed14Srobj 7242eeaed14Srobj /* 7252eeaed14Srobj * Threshold sensor masks for is_cs_reading_mask. 7262eeaed14Srobj */ 7272eeaed14Srobj #define IPMI_SENSOR_SETTABLE_UPPER_NONRECOV 0x2000 7282eeaed14Srobj #define IPMI_SENSOR_SETTABLE_UPPER_CRIT 0x1000 7292eeaed14Srobj #define IPMI_SENSOR_SETTABLE_UPPER_NONCRIT 0x0800 7302eeaed14Srobj #define IPMI_SENSOR_SETTABLE_LOWER_NONRECOV 0x0400 7312eeaed14Srobj #define IPMI_SENSOR_SETTABLE_LOWER_CRIT 0x0200 7322eeaed14Srobj #define IPMI_SENSOR_SETTABLE_LOWER_NONCRIT 0x0100 7332eeaed14Srobj #define IPMI_SENSOR_READABLE_UPPER_NONRECOV 0x0020 7342eeaed14Srobj #define IPMI_SENSOR_READABLE_UPPER_CRIT 0x0010 7352eeaed14Srobj #define IPMI_SENSOR_READABLE_UPPER_NONCRIT 0x0008 7362eeaed14Srobj #define IPMI_SENSOR_READABLE_LOWER_NONRECOV 0x0004 7372eeaed14Srobj #define IPMI_SENSOR_READABLE_LOWER_CRIT 0x0002 7382eeaed14Srobj #define IPMI_SENSOR_READABLE_LOWER_NONCRIT 0x0001 7392eeaed14Srobj 7402eeaed14Srobj /* 7412eeaed14Srobj * Values for is_cs_reading_type. See table 42-2. 7422eeaed14Srobj */ 7432eeaed14Srobj #define IPMI_RT_THRESHOLD 0x01 7442eeaed14Srobj #define IPMI_RT_USAGE 0x02 7452eeaed14Srobj #define IPMI_RT_STATE 0x03 7462eeaed14Srobj #define IPMI_RT_PREDFAIL 0x04 7472eeaed14Srobj #define IPMI_RT_LIMIT 0x05 7482eeaed14Srobj #define IPMI_RT_PERFORMANCE 0x06 7492eeaed14Srobj #define IPMI_RT_SEVERITY 0x07 7502eeaed14Srobj #define IPMI_RT_PRESENT 0x08 7512eeaed14Srobj #define IPMI_RT_ENABLED 0x09 7522eeaed14Srobj #define IPMI_RT_AVAILABILITY 0x0A 7532eeaed14Srobj #define IPMI_RT_REDUNDANCY 0x0B 7542eeaed14Srobj #define IPMI_RT_ACPI 0x0C 7552eeaed14Srobj #define IPMI_RT_SPECIFIC 0x6F 7562eeaed14Srobj 7572eeaed14Srobj /* 7582eeaed14Srobj * Bitmasks based on above reading types. See table 42-2 7592eeaed14Srobj */ 7602eeaed14Srobj #define IPMI_SR_THRESHOLD_LOWER_NONCRIT_LOW 0x0001 7612eeaed14Srobj #define IPMI_SR_THRESHOLD_LOWER_NONCRIT_HIGH 0x0002 7622eeaed14Srobj #define IPMI_SR_THRESHOLD_LOWER_CRIT_LOW 0x0004 7632eeaed14Srobj #define IPMI_SR_THRESHOLD_LOWER_CRIT_HIGH 0x0008 7642eeaed14Srobj #define IPMI_SR_THRESHOLD_LOWER_NONRECOV_LOW 0x0010 7652eeaed14Srobj #define IPMI_SR_THRESHOLD_LOWER_NONRECOV_HIGH 0x0020 7662eeaed14Srobj #define IPMI_SR_THRESHOLD_UPPER_NONCRIT_LOW 0x0040 7672eeaed14Srobj #define IPMI_SR_THRESHOLD_UPPER_NONCRIT_HIGH 0x0080 7682eeaed14Srobj #define IPMI_SR_THRESHOLD_UPPER_CRIT_LOW 0x0100 7692eeaed14Srobj #define IPMI_SR_THRESHOLD_UPPER_CRIT_HIGH 0x0200 7702eeaed14Srobj #define IPMI_SR_THRESHOLD_UPPER_NONRECOV_LOW 0x0400 7712eeaed14Srobj #define IPMI_SR_THRESHOLD_UPPER_NONRECOV_HIGH 0x0800 7722eeaed14Srobj 7732eeaed14Srobj #define IPMI_SR_USAGE_IDLE 0x0001 7742eeaed14Srobj #define IPMI_SR_USAGE_ACTIVE 0x0002 7752eeaed14Srobj #define IPMI_SR_USAGE_BUSY 0x0004 7762eeaed14Srobj 7772eeaed14Srobj #define IPMI_SR_STATE_DEASSERT 0x0001 7782eeaed14Srobj #define IPMI_SR_STATE_ASSERT 0x0002 7792eeaed14Srobj 7802eeaed14Srobj #define IPMI_SR_PREDFAIL_DEASSERT 0x0001 7812eeaed14Srobj #define IPMI_SR_PREDFAIL_ASSERT 0x0002 7822eeaed14Srobj 7832eeaed14Srobj #define IPMI_SR_LIMIT_NOTEXCEEDED 0x0001 7842eeaed14Srobj #define IPMI_SR_LIMIT_EXCEEDED 0x0002 7852eeaed14Srobj 7862eeaed14Srobj #define IPMI_SR_PERFORMANCE_MET 0x0001 7872eeaed14Srobj #define IPMI_SR_PERFORMANCE_LAGS 0x0002 7882eeaed14Srobj 7892eeaed14Srobj #define IPMI_SR_SEVERITY_TO_OK 0x0001 7902eeaed14Srobj #define IPMI_SR_SEVERITY_OK_TO_NONCRIT 0x0002 7912eeaed14Srobj #define IPMI_SR_SEVERITY_LESS_TO_CRIT 0x0004 7922eeaed14Srobj #define IPMI_SR_SEVERITY_LESS_TO_NONRECOV 0x0008 7932eeaed14Srobj #define IPMI_SR_SEVERITY_MORE_TO_NONCRIT 0x0010 7942eeaed14Srobj #define IPMI_SR_SEVERITY_NONRECOV_TO_CRIT 0x0020 7952eeaed14Srobj #define IPMI_SR_SEVERITY_TO_NONRECOV 0x0040 7962eeaed14Srobj #define IPMI_SR_SEVERITY_MONITOR 0x0080 7972eeaed14Srobj #define IPMI_SR_SEVERITY_INFO 0x0100 7982eeaed14Srobj 7992eeaed14Srobj #define IPMI_SR_PRESENT_DEASSERT 0x0001 8002eeaed14Srobj #define IPMI_SR_PRESENT_ASSERT 0x0002 8012eeaed14Srobj 8022eeaed14Srobj #define IPMI_SR_ENABLED_DEASSERT 0x0001 8032eeaed14Srobj #define IPMI_SR_ENABLED_ASSERT 0x0002 8042eeaed14Srobj 8052eeaed14Srobj #define IPMI_SR_AVAILABILITY_RUNNING 0x0001 8062eeaed14Srobj #define IPMI_SR_AVAILABILITY_INTEST 0x0002 8072eeaed14Srobj #define IPMI_SR_AVAILABILITY_POWEROFF 0x0004 8082eeaed14Srobj #define IPMI_SR_AVAILABILITY_ONLINE 0x0008 8092eeaed14Srobj #define IPMI_SR_AVAILABILITY_OFFLINE 0x0010 8102eeaed14Srobj #define IPMI_SR_AVAILABILITY_OFFDUTY 0x0020 8112eeaed14Srobj #define IPMI_SR_AVAILABILITY_DEGRADED 0x0040 8122eeaed14Srobj #define IPMI_SR_AVAILABILITY_POWERSAVE 0x0080 8132eeaed14Srobj #define IPMI_SR_AVAILABILITY_INSTALLERR 0x0100 8142eeaed14Srobj 8152eeaed14Srobj #define IPMI_SR_REDUNDANCY_FULL 0x0001 8162eeaed14Srobj #define IPMI_SR_REDUNDANCY_LOST 0x0002 8172eeaed14Srobj #define IPMI_SR_REDUNDANCY_DEGRADED 0x0004 8182eeaed14Srobj #define IPMI_SR_REDUNDANCY_NONE_MINIMAL 0x0008 8192eeaed14Srobj #define IPMI_SR_REDUNDANCY_NONE_REGAINED 0x0010 8202eeaed14Srobj #define IPMI_SR_REDUNDANCY_NONE_INSUFFFICIENT 0x0020 8212eeaed14Srobj #define IPMI_SR_REDUNDANCY_DEG_FROM_FULL 0x0040 8222eeaed14Srobj #define IPMI_SR_REDUNDANCY_DEG_FROM_NON 0x0080 8232eeaed14Srobj 8242eeaed14Srobj #define IPMI_SR_ACPI_DO 0x0001 8252eeaed14Srobj #define IPMI_SR_ACPI_D1 0x0002 8262eeaed14Srobj #define IPMI_SR_ACPI_D2 0x0004 8272eeaed14Srobj #define IPMI_SR_ACPI_D3 0x0008 8282eeaed14Srobj 8292eeaed14Srobj /* 8302eeaed14Srobj * Bitmasks for sensor-specific reading type (0x6F). See section 42.2. 8312eeaed14Srobj */ 8322eeaed14Srobj #define IPMI_ST_RESERVED 0x00 8332eeaed14Srobj #define IPMI_ST_TEMP 0x01 8342eeaed14Srobj #define IPMI_ST_VOLTAGE 0x02 8352eeaed14Srobj #define IPMI_ST_CURRENT 0x03 8362eeaed14Srobj #define IPMI_ST_FAN 0x04 8372eeaed14Srobj #define IPMI_ST_PHYSICAL 0x05 8382eeaed14Srobj 8392eeaed14Srobj #define IPMI_EV_PHYSICAL_GENERAL 0x0001 8402eeaed14Srobj #define IPMI_EV_PHYSICAL_BAY 0x0002 8412eeaed14Srobj #define IPMI_EV_PHYSICAL_CARD 0x0004 8422eeaed14Srobj #define IPMI_EV_PHYSICAL_PROCESSOR 0x0008 8432eeaed14Srobj #define IPMI_EV_PHYSICAL_LAN 0x0010 8442eeaed14Srobj #define IPMI_EV_PHYSICAL_DOCK 0x0020 8452eeaed14Srobj #define IPMI_EV_PHYSICAL_FAN 0x0040 8462eeaed14Srobj 8472eeaed14Srobj #define IPMI_ST_PLATFORM 0x06 8482eeaed14Srobj 8492eeaed14Srobj #define IPMI_EV_PLATFORM_SECURE 0x0001 8502eeaed14Srobj #define IPMI_EV_PLATFORM_USER_PASS 0x0002 8512eeaed14Srobj #define IPMI_EV_PLATFORM_SETUP_PASS 0x0004 8522eeaed14Srobj #define IPMI_EV_PLATFORM_NETWORK_PASS 0x0008 8532eeaed14Srobj #define IPMI_EV_PLATFORM_OTHER_PASS 0x0010 8542eeaed14Srobj #define IPMI_EV_PLATFORM_OUT_OF_BAND 0x0020 8552eeaed14Srobj 8562eeaed14Srobj #define IPMI_ST_PROCESSOR 0x07 8572eeaed14Srobj 8582eeaed14Srobj #define IPMI_EV_PROCESSOR_IERR 0x0001 8592eeaed14Srobj #define IPMI_EV_PROCESSOR_THERMAL 0x0002 8602eeaed14Srobj #define IPMI_EV_PROCESSOR_FRB1 0x0004 8612eeaed14Srobj #define IPMI_EV_PROCESSOR_FRB2 0x0008 8622eeaed14Srobj #define IPMI_EV_PROCESSOR_FRB3 0x0010 8632eeaed14Srobj #define IPMI_EV_PROCESSOR_CONFIG 0x0020 8642eeaed14Srobj #define IPMI_EV_PROCESSOR_SMBIOS 0x0040 8652eeaed14Srobj #define IPMI_EV_PROCESSOR_PRESENT 0x0080 8662eeaed14Srobj #define IPMI_EV_PROCESSOR_DISABLED 0x0100 8672eeaed14Srobj #define IPMI_EV_PROCESSOR_TERMINATOR 0x0200 8682eeaed14Srobj #define IPMI_EV_PROCESSOR_THROTTLED 0x0400 8692eeaed14Srobj 8702eeaed14Srobj #define IPMI_ST_POWER_SUPPLY 0x08 8712eeaed14Srobj 8722eeaed14Srobj #define IPMI_EV_POWER_SUPPLY_PRESENT 0x0001 8732eeaed14Srobj #define IPMI_EV_POWER_SUPPLY_FAILURE 0x0002 8742eeaed14Srobj #define IPMI_EV_POWER_SUPPLY_PREDFAIL 0x0004 8752eeaed14Srobj #define IPMI_EV_POWER_SUPPLY_INPUT_LOST 0x0008 8762eeaed14Srobj #define IPMI_EV_POWER_SUPPLY_INPUT_RANGE 0x0010 8772eeaed14Srobj #define IPMI_EV_POWER_SUPPLY_INPUT_RANGE_PRES 0x0020 8782eeaed14Srobj #define IPMI_EV_POWER_SUPPLY_CONFIG_ERR 0x0040 8792eeaed14Srobj 8802eeaed14Srobj #define IPMI_ST_POWER_UNIT 0x09 8812eeaed14Srobj 8822eeaed14Srobj #define IPMI_EV_POWER_UNIT_OFF 0x0001 8832eeaed14Srobj #define IPMI_EV_POWER_UNIT_CYCLE 0x0002 8842eeaed14Srobj #define IPMI_EV_POWER_UNIT_240_DOWN 0x0004 8852eeaed14Srobj #define IPMI_EV_POWER_UNIT_INTERLOCK_DOWN 0x0008 8862eeaed14Srobj #define IPMI_EV_POWER_UNIT_AC_LOST 0x0010 8872eeaed14Srobj #define IPMI_EV_POWER_UNIT_SOFT_FAILURE 0x0020 8882eeaed14Srobj #define IPMI_EV_POWER_UNIT_FAIL 0x0040 8892eeaed14Srobj #define IPMI_EV_POWER_UNIT_PREDFAIL 0x0080 8902eeaed14Srobj 8912eeaed14Srobj #define IPMI_ST_COOLING 0x0A 8922eeaed14Srobj #define IPMI_ST_OTHER 0x0B 8932eeaed14Srobj #define IPMI_ST_MEMORY 0x0C 8942eeaed14Srobj 8952eeaed14Srobj #define IPMI_EV_MEMORY_CE 0x0001 8962eeaed14Srobj #define IPMI_EV_MEMORY_UE 0x0002 8972eeaed14Srobj #define IPMI_EV_MEMORY_PARITY 0x0004 8982eeaed14Srobj #define IPMI_EV_MEMORY_SCRUB_FAIL 0x0008 8992eeaed14Srobj #define IPMI_EV_MEMORY_DISABLED 0x0010 9002eeaed14Srobj #define IPMI_EV_MEMORY_CE_LOG_LIMIT 0x0020 9012eeaed14Srobj #define IPMI_EV_MEMORY_PRESENT 0x0040 9022eeaed14Srobj #define IPMI_EV_MEMORY_CONFIG_ERR 0x0080 9032eeaed14Srobj #define IPMI_EV_MEMORY_SPARE 0x0100 9042eeaed14Srobj #define IPMI_EV_MEMORY_THROTTLED 0x0200 9052eeaed14Srobj #define IPMI_EV_MEMORY_OVERTEMP 0x0400 9062eeaed14Srobj 9072eeaed14Srobj #define IPMI_ST_BAY 0x0D 9082eeaed14Srobj 9092eeaed14Srobj #define IPMI_EV_BAY_PRESENT 0x0001 9102eeaed14Srobj #define IPMI_EV_BAY_FAULT 0x0002 9112eeaed14Srobj #define IPMI_EV_BAY_PREDFAIL 0x0004 9122eeaed14Srobj #define IPMI_EV_BAY_SPARE 0x0008 9132eeaed14Srobj #define IPMI_EV_BAY_CHECK 0x0010 9142eeaed14Srobj #define IPMI_EV_BAY_CRITICAL 0x0020 9152eeaed14Srobj #define IPMI_EV_BAY_FAILED 0x0040 9162eeaed14Srobj #define IPMI_EV_BAY_REBUILDING 0x0080 9172eeaed14Srobj #define IPMI_EV_BAY_ABORTED 0x0100 9182eeaed14Srobj 9192eeaed14Srobj #define IPMI_ST_POST_RESIZE 0x0E 9202eeaed14Srobj #define IPMI_ST_FIRMWARE 0x0F 9212eeaed14Srobj 9222eeaed14Srobj #define IPMI_EV_FIRMWARE_ERROR 0x0001 9232eeaed14Srobj #define IPMI_EV_FIRMWARE_HANG 0x0002 9242eeaed14Srobj #define IPMI_EV_FIRMWARE_PROGRESS 0x0004 9252eeaed14Srobj 9262eeaed14Srobj #define IPMI_ST_EVENT_LOG 0x10 9272eeaed14Srobj 9282eeaed14Srobj #define IPMI_EV_EVENT_LOG_CE 0x0001 9292eeaed14Srobj #define IPMI_EV_EVENT_LOG_TYPE 0x0002 9302eeaed14Srobj #define IPMI_EV_EVENT_LOG_RESET 0x0004 9312eeaed14Srobj #define IPMI_EV_EVENT_LOG_ALL 0x0008 9322eeaed14Srobj #define IPMI_EV_EVENT_LOG_FULL 0x0010 9332eeaed14Srobj #define IPMI_EV_EVENT_LOG_ALMOST_FULL 0x0020 9342eeaed14Srobj 9352eeaed14Srobj #define IPMI_ST_WATCHDOG1 0x11 9362eeaed14Srobj 9372eeaed14Srobj #define IPMI_EV_WATCHDOG_BIOS_RESET 0x0001 9382eeaed14Srobj #define IPMI_EV_WATCHDOG_OS_RESET 0x0002 9392eeaed14Srobj #define IPMI_EV_WATCHDOG_OS_SHUTDOWN 0x0004 9402eeaed14Srobj #define IPMI_EV_WATCHDOG_OS_PWR_DOWN 0x0008 9412eeaed14Srobj #define IPMI_EV_WATCHDOG_OS_PWR_CYCLE 0x0010 9422eeaed14Srobj #define IPMI_EV_WATCHDOG_OS_NMI_DIAG 0x0020 9432eeaed14Srobj #define IPMI_EV_WATCHDOG_EXPIRED 0x0040 9442eeaed14Srobj #define IPMI_EV_WATCHDOG_PRE_TIMEOUT_INT 0x0080 9452eeaed14Srobj 9462eeaed14Srobj #define IPMI_ST_SYSTEM 0x12 9472eeaed14Srobj 9482eeaed14Srobj #define IPMI_EV_STSTEM_RECONF 0x0001 9492eeaed14Srobj #define IPMI_EV_STSTEM_BOOT 0x0002 9502eeaed14Srobj #define IPMI_EV_STSTEM_UNKNOWN_HW_FAILURE 0x0004 9512eeaed14Srobj #define IPMI_EV_STSTEM_AUX_LOG_UPDATED 0x0008 9522eeaed14Srobj #define IPMI_EV_STSTEM_PEF_ACTION 0x0010 9532eeaed14Srobj #define IPMI_EV_SYSTEM_TIMETAMP_CLOCKSYNC 0x0020 9542eeaed14Srobj 9552eeaed14Srobj #define IPMI_ST_CRITICAL 0x13 9562eeaed14Srobj 9572eeaed14Srobj #define IPMI_EV_CRITICAL_EXT_NMI 0x0001 9582eeaed14Srobj #define IPMI_EV_CRITICAL_BUS_TIMOEOUT 0x0002 9592eeaed14Srobj #define IPMI_EV_CRITICAL_IO_NMI 0x0004 9602eeaed14Srobj #define IPMI_EV_CRITICAL_SW_NMI 0x0008 9612eeaed14Srobj #define IPMI_EV_CRITICAL_PCI_PERR 0x0010 9622eeaed14Srobj #define IPMI_EV_CRITICAL_PCI_SERR 0x0020 9632eeaed14Srobj #define IPMI_EV_CRITICAL_EISA_FAILSAFE 0x0040 9642eeaed14Srobj #define IPMI_EV_CRITICAL_BUS_CE 0x0080 9652eeaed14Srobj #define IPMI_EV_CRITICAL_BUS_UE 0x0100 9662eeaed14Srobj #define IPMI_EV_CRITICAL_FATAL_NMI 0x0200 9672eeaed14Srobj #define IPMI_EV_CRITICAL_BUS_FATAL_ERR 0x0400 9682eeaed14Srobj #define IPMI_EV_CRITICAL_BUS_DEGRADED 0x0800 9692eeaed14Srobj 9702eeaed14Srobj #define IPMI_ST_BUTTON 0x14 9712eeaed14Srobj 9722eeaed14Srobj #define IPMI_EV_BUTTON_PWR 0x0001 9732eeaed14Srobj #define IPMI_EV_BUTTON_SLEEP 0x0002 9742eeaed14Srobj #define IPMI_EV_BUTTON_RESET 0x0004 9752eeaed14Srobj #define IPMI_EV_BUTTON_FRU_LATCH 0x0008 9762eeaed14Srobj #define IPMI_EV_BUTTON_FRU_SERVICE 0x0010 9772eeaed14Srobj 9782eeaed14Srobj #define IPMI_ST_MODULE 0x15 9792eeaed14Srobj #define IPMI_ST_MICROCONTROLLER 0x16 9802eeaed14Srobj #define IPMI_ST_CARD 0x17 9812eeaed14Srobj #define IPMI_ST_CHASSIS 0x18 9822eeaed14Srobj 9832eeaed14Srobj #define IPMI_ST_CHIPSET 0x19 9842eeaed14Srobj 9852eeaed14Srobj #define IPMI_EV_CHIPSET_PWR_CTL_FAIL 0x0001 9862eeaed14Srobj 9872eeaed14Srobj #define IPMI_ST_FRU 0x1A 9882eeaed14Srobj #define IPMI_ST_CABLE 0x1B 9892eeaed14Srobj 9902eeaed14Srobj #define IPMI_EV_CABLE_CONNECTED 0x0001 9912eeaed14Srobj #define IPMI_EV_CABLE_CONFIG_ERR 0x0002 9922eeaed14Srobj 9932eeaed14Srobj #define IPMI_ST_TERMINATOR 0x1C 9942eeaed14Srobj 9952eeaed14Srobj #define IPMI_ST_BOOT 0x1D 9962eeaed14Srobj 9972eeaed14Srobj #define IPMI_EV_BOOT_BIOS_PWR_UP 0x0001 9982eeaed14Srobj #define IPMI_EV_BOOT_BIOS_HARD_RESET 0x0002 9992eeaed14Srobj #define IPMI_EV_BOOT_BIOS_WARM_RESET 0x0004 10002eeaed14Srobj #define IPMI_EV_BOOT_PXE_BOOT 0x0008 10012eeaed14Srobj #define IPMI_EV_BOOT_DIAG_BOOT 0x0010 10022eeaed14Srobj #define IPMI_EV_BOOT_OS_HARD_RESET 0x0020 10032eeaed14Srobj #define IPMI_EV_BOOT_OS_WARM_RESET 0x0040 10042eeaed14Srobj #define IPMI_EV_BOOT_SYS_RESTART 0x0080 10052eeaed14Srobj 10062eeaed14Srobj #define IPMI_ST_BOOT_ERROR 0x1E 10072eeaed14Srobj 10082eeaed14Srobj #define IPMI_EV_BOOT_ERROR_NOMEDIA 0x0001 10092eeaed14Srobj #define IPMI_EV_BOOT_ERROR_NON_BOOTABLE_DISK 0x0002 10102eeaed14Srobj #define IPMI_EV_BOOT_ERROR_NO_PXE_SERVER 0x0004 10112eeaed14Srobj #define IPMI_EV_BOOT_ERROR_INV_BOOT_SECT 0x0008 10122eeaed14Srobj #define IPMI_EV_BOOT_ERROR_USR_SELECT_TIMEOUT 0x0010 10132eeaed14Srobj 10142eeaed14Srobj #define IPMI_ST_BOOT_OS 0x1F 10152eeaed14Srobj 10162eeaed14Srobj #define IPMI_EV_BOOT_OS_A_DRV_BOOT_COMPLETE 0x0001 10172eeaed14Srobj #define IPMI_EV_BOOT_OS_C_DRV_BOOT_COMPLETE 0x0002 10182eeaed14Srobj #define IPMI_EV_BOOT_OS_PXE_BOOT_COMPLETE 0x0004 10192eeaed14Srobj #define IPMI_EV_BOOT_OS_DIAG_BOOT_COMPLETE 0x0008 10202eeaed14Srobj #define IPMI_EV_BOOT_OS_CDROM_BOOT_COMPLETE 0x0010 10212eeaed14Srobj #define IPMI_EV_BOOT_OS_ROM_BOOT_COMPLETE 0x0020 10222eeaed14Srobj #define IPMI_EV_BOOT_OS_UNSPEC_BOOT_COMPLETE 0x0040 10232eeaed14Srobj 10242eeaed14Srobj #define IPMI_ST_OS_SHUTDOWN 0x20 10252eeaed14Srobj 10262eeaed14Srobj #define IPMI_EV_OS_SHUTDOWN_LOADING 0x0001 10272eeaed14Srobj #define IPMI_EV_OS_SHUTDOWN_CRASH 0x0002 10282eeaed14Srobj #define IPMI_EV_OS_STOP_GRACEFUL 0x0004 10292eeaed14Srobj #define IPMI_EV_OS_SHUTDOWN_GRACEFUL 0x0008 10302eeaed14Srobj #define IPMI_EV_OS_SHUTDOWN_PEF 0x0010 10312eeaed14Srobj #define IPMI_EV_OS_SHUTDOWN_BMC 0x0020 10322eeaed14Srobj 10332eeaed14Srobj #define IPMI_ST_SLOT 0x21 10342eeaed14Srobj 10352eeaed14Srobj #define IPMI_EV_SLOT_FAULT_ASSERTED 0x0001 10362eeaed14Srobj #define IPMI_EV_SLOT_IDENTIFY_ASSERTED 0x0002 10372eeaed14Srobj #define IPMI_EV_SLOT_CONNECTED 0x0004 10382eeaed14Srobj #define IPMI_EV_SLOT_INSTALL_READY 0x0008 10392eeaed14Srobj #define IPMI_EV_SLOT_REMOVE_READY 0x0010 10402eeaed14Srobj #define IPMI_EV_SLOT_PWR_OFF 0x0020 10412eeaed14Srobj #define IPMI_EV_SLOT_REMOVED 0x0040 10422eeaed14Srobj #define IPMI_EV_SLOT_INTERLOCK_ASSERTED 0x0080 10432eeaed14Srobj #define IPMI_EV_SLOT_DISABLED 0x0100 10442eeaed14Srobj #define IPMI_EV_SLOT_SPARE_DEVICE 0x0200 10452eeaed14Srobj 10462eeaed14Srobj #define IPMI_ST_ACPI 0x22 10472eeaed14Srobj 10482eeaed14Srobj #define IPMI_EV_ACPI_PSTATE_S0_G0 0x0001 10492eeaed14Srobj #define IPMI_EV_ACPI_PSTATE_S1 0x0002 10502eeaed14Srobj #define IPMI_EV_ACPI_PSTATE_S2 0x0004 10512eeaed14Srobj #define IPMI_EV_ACPI_PSTATE_S3 0x0008 10522eeaed14Srobj #define IPMI_EV_ACPI_PSTATE_S4 0x0010 10532eeaed14Srobj #define IPMI_EV_ACPI_PSTATE_S5_G2_SOFT_OFF 0x0020 10542eeaed14Srobj #define IPMI_EV_ACPI_PSTATE_S4_S5_SOFT_OFF 0x0040 10552eeaed14Srobj #define IPMI_EV_ACPI_PSATTE_G3_MECH_OFF 0x0080 10562eeaed14Srobj #define IPMI_EV_ACPI_PSTATE_S1_S2_S3_SLEEP 0x0100 10572eeaed14Srobj #define IPMI_EV_ACPI_PSTATE_G1_SLEEP 0x0200 10582eeaed14Srobj #define IPMI_EV_ACPI_PSTATE_S5_OVERRIDE 0x0400 10592eeaed14Srobj #define IPMI_EV_ACPI_PSTATE_LEGACY_ON 0x0800 10602eeaed14Srobj #define IPMI_EV_ACPI_PSTATE_LEGACY_OFF 0x1000 10612eeaed14Srobj #define IPMI_EV_ACPI_PSTATE_UNKNOWN 0x2000 10622eeaed14Srobj 10632eeaed14Srobj #define IPMI_ST_WATCHDOG2 0x23 10642eeaed14Srobj 10652eeaed14Srobj #define IPMI_EV_WATCHDOG2_EXPIRED 0x0001 10662eeaed14Srobj #define IPMI_EV_WATCHDOG2_HARD_RESET 0x0002 10672eeaed14Srobj #define IPMI_EV_WATCHDOG2_PWR_DOWN 0x0004 10682eeaed14Srobj #define IPMI_EV_WATCHDOG2_PWR_CYCLE 0x0008 10692eeaed14Srobj #define IPMI_EV_WATCHDOG2_RESERVED1 0x0010 10702eeaed14Srobj #define IPMI_EV_WATCHDOG2_RESERVED2 0x0020 10712eeaed14Srobj #define IPMI_EV_WATCHDOG2_RESERVED3 0x0040 10722eeaed14Srobj #define IPMI_EV_WATCHDOG2_RESERVED4 0x0080 10732eeaed14Srobj #define IPMI_EV_WATCHDOG2_TIMEOUT_INT 0x0100 10742eeaed14Srobj 10752eeaed14Srobj #define IPMI_ST_ALERT 0x24 10762eeaed14Srobj 10772eeaed14Srobj #define IPMI_EV_ALERT_PLAT_PAGE 0x0001 10782eeaed14Srobj #define IPMI_EV_ALERT_PLAT_LAN_ALERT 0x0002 10792eeaed14Srobj #define IPMI_EV_ALERT_PLAT_EVT_TRAP 0x0004 10802eeaed14Srobj #define IPMI_EV_ALERT_PLAT_SNMP_TRAP 0x0008 10812eeaed14Srobj 10822eeaed14Srobj #define IPMI_ST_PRESENCE 0x25 10832eeaed14Srobj 10842eeaed14Srobj #define IPMI_EV_PRESENCE_PRESENT 0x0001 10852eeaed14Srobj #define IPMI_EV_PRESENCE_ABSENT 0x0002 10862eeaed14Srobj #define IPMI_EV_PRESENCE_DISABLED 0x0004 10872eeaed14Srobj 10882eeaed14Srobj #define IPMI_ST_ASIC 0x26 10892eeaed14Srobj 10902eeaed14Srobj #define IPMI_ST_LAN 0x27 10912eeaed14Srobj 10922eeaed14Srobj #define IPMI_EV_LAN_HEARTBEAT_LOST 0x0001 10932eeaed14Srobj #define IPMI_EV_LAN_HEARTBEAT 0x0002 10942eeaed14Srobj 10952eeaed14Srobj #define IPMI_ST_HEALTH 0x28 10962eeaed14Srobj 10972eeaed14Srobj #define IPMI_EV_HEALTH_SENSOR_ACC_DEGRADED 0x0001 10982eeaed14Srobj #define IPMI_EV_HEALTH_CNTLR_ACC_DEGRADED 0x0002 10992eeaed14Srobj #define IPMI_EV_HEALTH_CNTLR_OFFLINE 0x0004 11002eeaed14Srobj #define IPMI_EV_HEALTH_CNTLR_UNAVAIL 0x0008 11012eeaed14Srobj #define IPMI_EV_HEALTH_SENSOR_FAILURE 0x0010 11022eeaed14Srobj #define IPMI_EV_HEALTH_FRU_FAILURE 0x0020 11032eeaed14Srobj 11042eeaed14Srobj #define IPMI_ST_BATTERY 0x29 11052eeaed14Srobj 11062eeaed14Srobj #define IPMI_EV_BATTERY_LOW 0x0001 11072eeaed14Srobj #define IPMI_EV_BATTERY_FAILED 0x0002 11082eeaed14Srobj #define IPMI_EV_BATTERY_PRESENCE 0x0004 11092eeaed14Srobj 11102eeaed14Srobj #define IPMI_ST_AUDIT 0x2A 11112eeaed14Srobj 11122eeaed14Srobj #define IPMI_EV_AUDIT_SESSION_ACTIVATED 0x0001 11132eeaed14Srobj #define IPMI_EV_AUDIT_SESSION_DEACTIVATED 0x0002 11142eeaed14Srobj 11152eeaed14Srobj #define IPMI_ST_VERSION 0x2B 11162eeaed14Srobj 11172eeaed14Srobj #define IPMI_EV_VERSION_HW_CHANGE 0x0001 11182eeaed14Srobj #define IPMI_EV_VERSION_SW_CHANGE 0x0002 11192eeaed14Srobj #define IPMI_EV_VERSION_HW_INCOMPATIBLE 0x0004 11202eeaed14Srobj #define IPMI_EV_VERSION_SW_INCOMPATIBLE 0x0008 11212eeaed14Srobj #define IPMI_EV_VERSION_HW_INVAL 0x0010 11222eeaed14Srobj #define IPMI_EV_VERSION_SW_INVAL 0x0020 11232eeaed14Srobj #define IPMI_EV_VERSION_HW_CHANGE_SUCCESS 0x0040 11242eeaed14Srobj #define IPMI_EV_VERSION_SW_CHANGE_SUCCESS 0x0080 11252eeaed14Srobj 11262eeaed14Srobj #define IPMI_ST_FRU_STATE 0x2C 11272eeaed14Srobj 11282eeaed14Srobj #define IPMI_EV_FRU_STATE_NOT_INSTALLED 0x0001 11292eeaed14Srobj #define IPMI_EV_FRU_STATE_INACTIVE 0x0002 11302eeaed14Srobj #define IPMI_EV_FRU_STATE_ACT_REQ 0x0004 11312eeaed14Srobj #define IPMI_EV_FRU_STATE_ACT_INPROGRESS 0x0008 11322eeaed14Srobj #define IPMI_EV_FRU_STATE_ACTIVE 0x0010 11332eeaed14Srobj #define IPMI_EV_FRU_STATE_DEACT_REQ 0x0020 11342eeaed14Srobj #define IPMI_EV_FRU_STATE_DEACT_INPROGRESS 0x0040 11352eeaed14Srobj #define IPMI_EV_FRU_STATE_COMM_LOST 0x0080 11362eeaed14Srobj 11372eeaed14Srobj /* 11382eeaed14Srobj * Constants for unit type codes. See Table 43-15. 11392eeaed14Srobj */ 11402eeaed14Srobj #define IPMI_UNITS_UNSPECIFIED 0x00 11412eeaed14Srobj #define IPMI_UNITS_DEGREES_C 0x01 11422eeaed14Srobj #define IPMI_UNITS_DEGREES_F 0x02 11432eeaed14Srobj #define IPMI_UNITS_DEGREES_K 0x03 11442eeaed14Srobj #define IPMI_UNITS_VOLTS 0x04 11452eeaed14Srobj #define IPMI_UNITS_AMPS 0x05 11462eeaed14Srobj #define IPMI_UNITS_WATTS 0x06 11472eeaed14Srobj #define IPMI_UNITS_JOULES 0x07 11482eeaed14Srobj #define IPMI_UNITS_COULOMBS 0x08 11492eeaed14Srobj #define IPMI_UNITS_VA 0x09 11502eeaed14Srobj #define IPMI_UNITS_NITS 0x0A 11512eeaed14Srobj #define IPMI_UNITS_LUMEN 0x0B 11522eeaed14Srobj #define IPMI_UNITS_LUX 0x0C 11532eeaed14Srobj #define IPMI_UNITS_CANDELA 0x0D 11542eeaed14Srobj #define IPMI_UNITS_KPA 0x0E 11552eeaed14Srobj #define IPMI_UNITS_PSI 0x0F 11562eeaed14Srobj 11572eeaed14Srobj #define IPMI_UNITS_NEWTON 0x10 11582eeaed14Srobj #define IPMI_UNITS_CFM 0x11 11592eeaed14Srobj #define IPMI_UNITS_RPM 0x12 11602eeaed14Srobj #define IPMI_UNITS_HZ 0x13 11612eeaed14Srobj #define IPMI_UNITS_MICROSEC 0x14 11622eeaed14Srobj #define IPMI_UNITS_MILLISEC 0x15 11632eeaed14Srobj #define IPMI_UNITS_SECS 0x16 11642eeaed14Srobj #define IPMI_UNITS_MIN 0x17 11652eeaed14Srobj #define IPMI_UNITS_HOUR 0x18 11662eeaed14Srobj #define IPMI_UNITS_DAY 0x19 11672eeaed14Srobj #define IPMI_UNITS_WEEK 0x1A 11682eeaed14Srobj #define IPMI_UNITS_MIL 0x1B 11692eeaed14Srobj #define IPMI_UNITS_INCHES 0x1C 11702eeaed14Srobj #define IPMI_UNITS_FEET 0x1D 11712eeaed14Srobj #define IPMI_UNITS_CUB_INCH 0x1E 11722eeaed14Srobj #define IPMI_UNITS_CUB_FEET 0x1F 11732eeaed14Srobj 11742eeaed14Srobj #define IPMI_UNITS_MM 0x20 11752eeaed14Srobj #define IPMI_UNITS_CM 0x21 11762eeaed14Srobj #define IPMI_UNITS_METERS 0x22 11772eeaed14Srobj #define IPMI_UNITS_CUB_CM 0x23 11782eeaed14Srobj #define IPMI_UNITS_CUB_METER 0x24 11792eeaed14Srobj #define IPMI_UNITS_LITERS 0x25 11802eeaed14Srobj #define IPMI_UNITS_FLUID_OUNCE 0x26 11812eeaed14Srobj #define IPMI_UNITS_RADIANS 0x27 11822eeaed14Srobj #define IPMI_UNITS_STERADIANS 0x28 11832eeaed14Srobj #define IPMI_UNITS_REVOLUTIONS 0x29 11842eeaed14Srobj #define IPMI_UNITS_CYCLES 0x2A 11852eeaed14Srobj #define IPMI_UNITS_GRAVITIES 0x2B 11862eeaed14Srobj #define IPMI_UNITS_OUNCE 0x2C 11872eeaed14Srobj #define IPMI_UNITS_POUND 0x2D 11882eeaed14Srobj #define IPMI_UNITS_FOOT_POUND 0x2E 11892eeaed14Srobj #define IPMI_UNITS_OZ_INCH 0x2F 11902eeaed14Srobj 11912eeaed14Srobj #define IPMI_UNITS_GAUSS 0x30 11922eeaed14Srobj #define IPMI_UNITS_GILBERTS 0x31 11932eeaed14Srobj #define IPMI_UNITS_HENRY 0x32 11942eeaed14Srobj #define IPMI_UNITS_MILHENRY 0x33 11952eeaed14Srobj #define IPMI_UNITS_FARAD 0x34 11962eeaed14Srobj #define IPMI_UNITS_MICROFARAD 0x35 11972eeaed14Srobj #define IPMI_UNITS_OHMS 0x36 11982eeaed14Srobj #define IPMI_UNITS_SIEMENS 0x37 11992eeaed14Srobj #define IPMI_UNITS_MOLE 0x38 12002eeaed14Srobj #define IPMI_UNITS_BECQUEREL 0x39 12012eeaed14Srobj #define IPMI_UNITS_PPM 0x3A 12022eeaed14Srobj /* 0x3B is reserved */ 12032eeaed14Srobj #define IPMI_UNITS_DECIBELS 0x3C 12042eeaed14Srobj #define IPMI_UNITS_DBA 0x3D 12052eeaed14Srobj #define IPMI_UNITS_DBC 0x3E 12062eeaed14Srobj #define IPMI_UNITS_GRAY 0x3F 12072eeaed14Srobj 12082eeaed14Srobj #define IPMI_UNITS_SIEVERT 0x40 12092eeaed14Srobj #define IPMI_UNITS_COLOR_TEMP_K 0x41 12102eeaed14Srobj #define IPMI_UNITS_BIT 0x42 12112eeaed14Srobj #define IPMI_UNITS_KILOBIT 0x43 12122eeaed14Srobj #define IPMI_UNITS_MEGABIT 0x44 12132eeaed14Srobj #define IPMI_UNITS_GIGABIT 0x45 12142eeaed14Srobj #define IPMI_UNITS_BYTE 0x46 12152eeaed14Srobj #define IPMI_UNITS_KILOBYTE 0x47 12162eeaed14Srobj #define IPMI_UNITS_MEGABYTE 0x48 12172eeaed14Srobj #define IPMI_UNITS_GIGABYTE 0x49 12182eeaed14Srobj #define IPMI_UNITS_WORD 0x4A 12192eeaed14Srobj #define IPMI_UNITS_DWORD 0x4B 12202eeaed14Srobj #define IPMI_UNITS_QWORD 0x4C 12212eeaed14Srobj #define IPMI_UNITS_MEMLINE 0x4D 12222eeaed14Srobj #define IPMI_UNITS_HIT 0x4E 12232eeaed14Srobj #define IPMI_UNITS_MISS 0x4F 12242eeaed14Srobj 12252eeaed14Srobj #define IPMI_UNITS_RETRY 0x50 12262eeaed14Srobj #define IPMI_UNITS_RESET 0x51 12272eeaed14Srobj #define IPMI_UNITS_OVERFLOW 0x52 12282eeaed14Srobj #define IPMI_UNITS_UNDERRUN 0x53 12292eeaed14Srobj #define IPMI_UNITS_COLLISION 0x54 12302eeaed14Srobj #define IPMI_UNITS_PACKETS 0x55 12312eeaed14Srobj #define IPMI_UNITS_MESSAGES 0x56 12322eeaed14Srobj #define IPMI_UNITS_CHARACTERS 0x57 12332eeaed14Srobj #define IPMI_UNITS_ERROR 0x58 12342eeaed14Srobj #define IPMI_UNITS_CE 0x59 12352eeaed14Srobj #define IPMI_UNITS_UE 0x5A 12362eeaed14Srobj #define IPMI_UNITS_FATAL_ERROR 0x5B 12372eeaed14Srobj #define IPMI_UNITS_GRAMS 0x5C 12382eeaed14Srobj 12392eeaed14Srobj /* 12402eeaed14Srobj * Event-Only Record. See section 43.3. 12412eeaed14Srobj */ 12422eeaed14Srobj 12432eeaed14Srobj #define IPMI_SDR_TYPE_EVENT_ONLY 0x03 12442eeaed14Srobj 12452eeaed14Srobj typedef struct ipmi_sdr_event_only { 12462eeaed14Srobj /* RECORD KEY BYTES */ 12472eeaed14Srobj uint8_t is_eo_owner; 12482eeaed14Srobj DECL_BITFIELD3( 12492eeaed14Srobj is_eo_sensor_lun :2, 12502eeaed14Srobj is_eo_fru_lun :2, 12512eeaed14Srobj is_eo_channel :4); 12522eeaed14Srobj uint8_t is_eo_number; 12532eeaed14Srobj /* RECORD BODY BYTES */ 12542eeaed14Srobj uint8_t is_eo_entity_id; 12552eeaed14Srobj DECL_BITFIELD2( 12562eeaed14Srobj is_eo_entity_instance :7, 12572eeaed14Srobj is_eo_entity_logical :1); 12582eeaed14Srobj uint8_t is_eo_sensor_type; 12592eeaed14Srobj uint8_t is_eo_reading_type; 12602eeaed14Srobj DECL_BITFIELD3( 12612eeaed14Srobj is_eo_share_count :4, 12622eeaed14Srobj is_eo_modifier_type :2, 12632eeaed14Srobj is_eo_direction :2); 12642eeaed14Srobj DECL_BITFIELD2( 12652eeaed14Srobj is_eo_modifier_offset :7, 12662eeaed14Srobj is_eo_sharing :1); 12672eeaed14Srobj uint8_t __reserved; 12682eeaed14Srobj uint8_t is_eo_oem; 12692eeaed14Srobj DECL_BITFIELD3( 12702eeaed14Srobj is_eo_idlen :5, 12712eeaed14Srobj __reserved1 :1, 12722eeaed14Srobj is_eo_idtype :2); 12732eeaed14Srobj char is_eo_idstring[1]; 12742eeaed14Srobj } ipmi_sdr_event_only_t; 12752eeaed14Srobj 12762eeaed14Srobj /* 12772eeaed14Srobj * Entity Association Record. See section 43.4. 12782eeaed14Srobj */ 12792eeaed14Srobj 12802eeaed14Srobj #define IPMI_SDR_TYPE_ENTITY_ASSOCIATION 0x08 12812eeaed14Srobj 12822eeaed14Srobj typedef struct ipmi_sdr_entity_association { 12832eeaed14Srobj /* RECORD KEY BYTES */ 12842eeaed14Srobj uint8_t is_ea_entity_id; 12852eeaed14Srobj uint8_t is_ea_entity_instance; 12862eeaed14Srobj DECL_BITFIELD4( 12872eeaed14Srobj __reserved :5, 12882eeaed14Srobj is_ea_presence :1, 12892eeaed14Srobj is_ea_record_link :1, 12902eeaed14Srobj is_ea_range :1); 12912eeaed14Srobj /* RECORD BODY BYTES */ 12922eeaed14Srobj struct { 12932eeaed14Srobj uint8_t is_ea_sub_id; 12942eeaed14Srobj uint8_t is_ea_sub_instance; 12952eeaed14Srobj } is_ea_sub[4]; 12962eeaed14Srobj } ipmi_sdr_entity_association_t; 12972eeaed14Srobj 12982eeaed14Srobj /* 12992eeaed14Srobj * Device-relative Entity Association Record. See section 43.5. 13002eeaed14Srobj */ 13012eeaed14Srobj 13022eeaed14Srobj #define IPMI_SDR_TYPE_DEVICE_RELATIVE 0x09 13032eeaed14Srobj 13042eeaed14Srobj typedef struct ipmi_sdr_device_relative { 13052eeaed14Srobj /* RECORD KEY BYTES */ 13062eeaed14Srobj uint8_t is_dr_entity_id; 13072eeaed14Srobj uint8_t is_dr_entity_instance; 13082eeaed14Srobj DECL_BITFIELD2( 13092eeaed14Srobj __reserved1 :1, 13102eeaed14Srobj is_dr_slaveaddr :7); 13112eeaed14Srobj DECL_BITFIELD2( 13122eeaed14Srobj __reserved2 :4, 13132eeaed14Srobj is_dr_channel :4); 13142eeaed14Srobj DECL_BITFIELD4( 13152eeaed14Srobj __reserved :5, 13162eeaed14Srobj is_dr_presence :1, 13172eeaed14Srobj is_dr_record_link :1, 13182eeaed14Srobj is_dr_range :1); 13192eeaed14Srobj /* RECORD BODY BYTES */ 13202eeaed14Srobj struct { 13212eeaed14Srobj DECL_BITFIELD2( 13222eeaed14Srobj __reserved3 :1, 13232eeaed14Srobj is_dr_sub_slaveaddr :7); 13242eeaed14Srobj DECL_BITFIELD2( 13252eeaed14Srobj __reserved4 :4, 13262eeaed14Srobj is_dr_sub_channel :4); 13272eeaed14Srobj uint8_t is_ea_sub_id; 13282eeaed14Srobj uint8_t is_ea_sub_instance; 13292eeaed14Srobj } is_ea_sub[4]; 13302eeaed14Srobj } ipmi_sdr_device_relative_t; 13312eeaed14Srobj 13322eeaed14Srobj /* 13339113a79cSeschrock * Generic Device Locator Record. See section 43.7. 13349113a79cSeschrock */ 13359113a79cSeschrock 13369113a79cSeschrock #define IPMI_SDR_TYPE_GENERIC_LOCATOR 0x10 13379113a79cSeschrock 13389113a79cSeschrock typedef struct ipmi_sdr_generic_locator { 13399113a79cSeschrock /* RECORD KEY BYTES */ 13402c32020fSeschrock DECL_BITFIELD2( 13412c32020fSeschrock __reserved1 :1, 13422c32020fSeschrock is_gl_accessaddr :7); 13432c32020fSeschrock DECL_BITFIELD2( 13442c32020fSeschrock is_gl_channel_msb :1, 13452c32020fSeschrock is_gl_slaveaddr :7); 13462c32020fSeschrock DECL_BITFIELD3( 13472c32020fSeschrock is_gl_bus :3, 13482c32020fSeschrock is_gl_lun :2, 13492c32020fSeschrock is_gl_channel :3); 13509113a79cSeschrock /* RECORD BODY BYTES */ 13512c32020fSeschrock DECL_BITFIELD2( 13522c32020fSeschrock is_gl_span :3, 13532c32020fSeschrock __reserved2 :5); 13549113a79cSeschrock uint8_t __reserved3; 13559113a79cSeschrock uint8_t is_gl_type; 13569113a79cSeschrock uint8_t is_gl_modifier; 13579113a79cSeschrock uint8_t is_gl_entity; 13589113a79cSeschrock uint8_t is_gl_instance; 13599113a79cSeschrock uint8_t is_gl_oem; 13602eeaed14Srobj DECL_BITFIELD3( 13612eeaed14Srobj is_gl_idlen :5, 13622eeaed14Srobj __reserved4 :1, 13632c32020fSeschrock is_gl_idtype :2); 13649113a79cSeschrock char is_gl_idstring[1]; 13659113a79cSeschrock } ipmi_sdr_generic_locator_t; 13669113a79cSeschrock 13679113a79cSeschrock /* 13689113a79cSeschrock * FRU Device Locator Record. See section 43.8. 13699113a79cSeschrock */ 13709113a79cSeschrock 13719113a79cSeschrock #define IPMI_SDR_TYPE_FRU_LOCATOR 0x11 13729113a79cSeschrock 13739113a79cSeschrock typedef struct ipmi_sdr_fru_locator { 13749113a79cSeschrock /* RECORD KEY BYTES */ 13752c32020fSeschrock DECL_BITFIELD2( 13762c32020fSeschrock __reserved1 :1, 13772c32020fSeschrock is_fl_accessaddr :7); 13789113a79cSeschrock union { 13799113a79cSeschrock struct { 13809113a79cSeschrock uint8_t _is_fl_devid; 13819113a79cSeschrock } _logical; 13829113a79cSeschrock struct { 13832c32020fSeschrock DECL_BITFIELD2( 13842c32020fSeschrock __reserved :1, 13852c32020fSeschrock _is_fl_slaveaddr :7); 13869113a79cSeschrock } _nonintelligent; 13879113a79cSeschrock } _devid_or_slaveaddr; 13882c32020fSeschrock DECL_BITFIELD4( 13892c32020fSeschrock is_fl_bus :3, 13902c32020fSeschrock is_fl_lun :2, 13912c32020fSeschrock __reserved2 :2, 13922c32020fSeschrock is_fl_logical :1); 13932c32020fSeschrock DECL_BITFIELD2( 13942c32020fSeschrock __reserved3 :4, 13952c32020fSeschrock is_fl_channel :4); 13969113a79cSeschrock /* RECORD BODY BYTES */ 13979113a79cSeschrock uint8_t __reserved4; 13989113a79cSeschrock uint8_t is_fl_type; 13999113a79cSeschrock uint8_t is_fl_modifier; 14009113a79cSeschrock uint8_t is_fl_entity; 14019113a79cSeschrock uint8_t is_fl_instance; 14029113a79cSeschrock uint8_t is_fl_oem; 14032eeaed14Srobj DECL_BITFIELD3( 14042eeaed14Srobj is_fl_idlen :5, 14052eeaed14Srobj __reserved5 :1, 14062c32020fSeschrock is_fl_idtype :2); 14079113a79cSeschrock char is_fl_idstring[1]; 14089113a79cSeschrock } ipmi_sdr_fru_locator_t; 14099113a79cSeschrock 14109113a79cSeschrock #define is_fl_devid _devid_or_slaveaddr._logical._is_fl_devid 14119113a79cSeschrock #define is_fl_slaveaddr _devid_or_slaveaddr._nonintelligent._is_fl_slaveaddr 14129113a79cSeschrock 14139113a79cSeschrock /* 14142eeaed14Srobj * Management Controller Device Locator Record. See section 43.9 14159113a79cSeschrock */ 14162eeaed14Srobj 14172eeaed14Srobj #define IPMI_SDR_TYPE_MANAGEMENT_LOCATOR 0x12 14182eeaed14Srobj 14192eeaed14Srobj typedef struct ipmi_sdr_management_locator { 14202eeaed14Srobj /* RECORD KEY BYTES */ 14212eeaed14Srobj DECL_BITFIELD2( 14222eeaed14Srobj __reserved1 :1, 14232eeaed14Srobj is_ml_devaddr :7); 14242eeaed14Srobj DECL_BITFIELD2( 14252eeaed14Srobj is_ml_channel :4, 14262eeaed14Srobj __reserved2 :4); 14272eeaed14Srobj /* RECORD BODY BYTES */ 14282eeaed14Srobj DECL_BITFIELD7( 14292eeaed14Srobj is_ml_init_message :2, 14302eeaed14Srobj is_ml_init_log :1, 14312eeaed14Srobj is_ml_init_controller_log :1, 14322eeaed14Srobj __reserved3 :1, 14332eeaed14Srobj is_ml_static :1, 14342eeaed14Srobj is_ml_acpi_device :1, 14352eeaed14Srobj is_ml_acpi_system :1); 14362eeaed14Srobj DECL_BITFIELD8( 14372eeaed14Srobj is_ml_supp_sensor :1, 14382eeaed14Srobj is_ml_supp_sdr :1, 14392eeaed14Srobj is_ml_supp_sel :1, 14402eeaed14Srobj is_ml_supp_fru :1, 14412eeaed14Srobj is_ml_supp_event_receiver :1, 14422eeaed14Srobj is_ml_supp_event_generator :1, 14432eeaed14Srobj is_ml_supp_bridge :1, 14442eeaed14Srobj is_ml_supp_chassis :1); 14452eeaed14Srobj uint8_t __reserved4; 14462eeaed14Srobj uint16_t __reserved5; 14472eeaed14Srobj uint8_t is_ml_entity_id; 14482eeaed14Srobj uint8_t is_ml_entity_instance; 14492eeaed14Srobj uint8_t is_ml_oem; 14502eeaed14Srobj DECL_BITFIELD3( 14512eeaed14Srobj is_ml_idlen :5, 14522eeaed14Srobj __reserved6 :1, 14532eeaed14Srobj is_ml_idtype :2); 14542eeaed14Srobj char is_ml_idstring[1]; 14552eeaed14Srobj } ipmi_sdr_management_locator_t; 14562eeaed14Srobj 14572eeaed14Srobj #define IPMI_MESSAGE_INIT_ENABLE 0x0 14582eeaed14Srobj #define IPMI_MESSAGE_INIT_DISABLE 0x1 14592eeaed14Srobj #define IPMI_MESSAGE_INIT_NONE 0x2 14602eeaed14Srobj 14612eeaed14Srobj /* 14622eeaed14Srobj * Management Controller Confirmation Record. See section 43.10 14632eeaed14Srobj */ 14642eeaed14Srobj 14659113a79cSeschrock #define IPMI_SDR_TYPE_MANAGEMENT_CONFIRMATION 0x13 14662eeaed14Srobj 14672eeaed14Srobj typedef struct ipmi_sdr_management_confirmation { 14682eeaed14Srobj /* RECORD KEY BYTES */ 14692eeaed14Srobj DECL_BITFIELD2( 14702eeaed14Srobj __reserved1 :1, 14712eeaed14Srobj is_mc_slaveaddr :7); 14722eeaed14Srobj uint8_t is_mc_deviceid; 14732eeaed14Srobj DECL_BITFIELD2( 14742eeaed14Srobj is_mc_dev_revision :4, 14752eeaed14Srobj is_mc_channel :4); 14762eeaed14Srobj /* RECORD BODY BYTES */ 14772eeaed14Srobj DECL_BITFIELD2( 14782eeaed14Srobj is_mc_major_rev :7, 14792eeaed14Srobj __reserved2 :1); 14802eeaed14Srobj uint8_t is_mc_minor_rev; 14812eeaed14Srobj uint8_t is_mc_impi_ver; 14822eeaed14Srobj uint8_t is_mc_manufacturer[3]; 14832eeaed14Srobj uint16_t is_mc_product; 14842eeaed14Srobj uint8_t is_mc_guid[16]; 14852eeaed14Srobj } ipmi_sdr_management_confirmation_t; 14862eeaed14Srobj 14872eeaed14Srobj /* 14882eeaed14Srobj * BMC Message Channel Info Record. See esction 43.11. 14892eeaed14Srobj */ 14902eeaed14Srobj 14919113a79cSeschrock #define IPMI_SDR_TYPE_BMC_MESSAGE_CHANNEL 0x14 14922eeaed14Srobj 14932eeaed14Srobj typedef struct ipmi_sdr_bmc_channel { 14942eeaed14Srobj /* RECORD BODY BYTES */ 14952eeaed14Srobj struct { 14962eeaed14Srobj DECL_BITFIELD3( 14972eeaed14Srobj is_bc_protocol :4, 14982eeaed14Srobj is_bc_receive_lun :3, 14992eeaed14Srobj is_bc_transmit :1); 15002eeaed14Srobj } is_bc_channel[8]; 15012eeaed14Srobj uint8_t is_bc_interrupt_type; 15022eeaed14Srobj uint8_t is_bc_buffer_type; 15032eeaed14Srobj uint8_t __reserved; 15042eeaed14Srobj } ipmi_sdr_bmc_channel_t; 15052eeaed14Srobj 15062eeaed14Srobj /* 15072eeaed14Srobj * OEM Record. See ction 43.12. 15082eeaed14Srobj */ 15092eeaed14Srobj 15109113a79cSeschrock #define IPMI_SDR_TYPE_OEM 0xC0 15119113a79cSeschrock 15122eeaed14Srobj typedef struct ipmi_sdr_oem { 15132eeaed14Srobj uint8_t is_oem_manufacturer[3]; 15142eeaed14Srobj uint8_t is_oem_data[1]; 15152eeaed14Srobj } ipmi_sdr_oem_t; 15162eeaed14Srobj 15172eeaed14Srobj /* 15182eeaed14Srobj * Iterate over the SDR repository. This function does the work of parsing the 15192eeaed14Srobj * name when available, and keeping the repository in a consistent state. 15202eeaed14Srobj */ 15212eeaed14Srobj extern int ipmi_sdr_iter(ipmi_handle_t *, 15222eeaed14Srobj int (*)(ipmi_handle_t *, const char *, ipmi_sdr_t *, void *), void *); 15232eeaed14Srobj 15249113a79cSeschrock /* 15259113a79cSeschrock * Lookup the given sensor type by name. These functions automatically read in 15269113a79cSeschrock * and cache the complete SDR repository. 15279113a79cSeschrock */ 15282eeaed14Srobj extern ipmi_sdr_t *ipmi_sdr_lookup(ipmi_handle_t *, const char *); 15299113a79cSeschrock extern ipmi_sdr_fru_locator_t *ipmi_sdr_lookup_fru(ipmi_handle_t *, 15309113a79cSeschrock const char *); 15319113a79cSeschrock extern ipmi_sdr_generic_locator_t *ipmi_sdr_lookup_generic(ipmi_handle_t *, 15329113a79cSeschrock const char *); 15332eeaed14Srobj extern ipmi_sdr_compact_sensor_t *ipmi_sdr_lookup_compact_sensor( 15342eeaed14Srobj ipmi_handle_t *, const char *); 15352eeaed14Srobj extern ipmi_sdr_full_sensor_t *ipmi_sdr_lookup_full_sensor( 15362eeaed14Srobj ipmi_handle_t *, const char *); 15372eeaed14Srobj 15382eeaed14Srobj /* 15392eeaed14Srobj * Entity ID codes. See table 43.13. 15402eeaed14Srobj */ 15412eeaed14Srobj #define IPMI_ET_UNSPECIFIED 0x00 15422eeaed14Srobj #define IPMI_ET_OTHER 0x01 15432eeaed14Srobj #define IPMI_ET_UNKNOWN 0x02 15442eeaed14Srobj #define IPMI_ET_PROCESSOR 0x03 15452eeaed14Srobj #define IPMI_ET_DISK 0x04 15462eeaed14Srobj #define IPMI_ET_PERIPHERAL 0x05 15472eeaed14Srobj #define IPMI_ET_MANAGEMENT_MODULE 0x06 15482eeaed14Srobj #define IPMI_ET_MOTHERBOARD 0x07 15492eeaed14Srobj #define IPMI_ET_MEMORY_MODULE 0x08 15502eeaed14Srobj #define IPMI_ET_PROCESSOR_MODULE 0x09 15512eeaed14Srobj #define IPMI_ET_PSU 0x0A 15522eeaed14Srobj #define IPMI_ET_CARD 0x0B 15532eeaed14Srobj #define IPMI_ET_FRONT_PANEL 0x0C 15542eeaed14Srobj #define IPMI_ET_BACK_PANEL 0x0D 15552eeaed14Srobj #define IPMI_ET_POWER_BOARD 0x0E 15562eeaed14Srobj #define IPMI_ET_BACKPLANE 0x0F 15572eeaed14Srobj #define IPMI_ET_EXPANSION_BOARD 0x10 15582eeaed14Srobj #define IPMI_ET_OTHER_BOARD 0x11 15592eeaed14Srobj #define IPMI_ET_PROCESSOR_BOARD 0x12 15602eeaed14Srobj #define IPMI_ET_POWER_DOMAIN 0x13 15612eeaed14Srobj #define IPMI_ET_POWER_CONVERTER 0x14 15622eeaed14Srobj #define IPMI_ET_POWER_MANAGEMENT 0x15 15632eeaed14Srobj #define IPMI_ET_BACK_CHASSIS 0x16 15642eeaed14Srobj #define IPMI_ET_SYSTEM_CHASSIS 0x17 15652eeaed14Srobj #define IPMI_ET_SUB_CHASSIS 0x18 15662eeaed14Srobj #define IPMI_ET_OTHER_CHASSIS 0x19 15672eeaed14Srobj #define IPMI_ET_DISK_BAY 0x1A 15682eeaed14Srobj #define IPMI_ET_PERIPHERAL_BAY 0x1B 15692eeaed14Srobj #define IPMI_ET_DEVICE_BAY 0x1C 15702eeaed14Srobj #define IPMI_ET_FAN 0x1D 15712eeaed14Srobj #define IPMI_ET_COOLING_DOMAIN 0x1E 15722eeaed14Srobj #define IPMI_ET_CABLE 0x1F 15732eeaed14Srobj #define IPMI_ET_MEMORY_DEVICE 0x20 15742eeaed14Srobj #define IPMI_ET_MANAGEMENT_SOFTWARE 0x21 15752eeaed14Srobj #define IPMI_ET_SYSTEM_FIRMWARE 0x22 15762eeaed14Srobj #define IPMI_ET_OS 0x23 15772eeaed14Srobj #define IPMI_ET_SYSTEM_BUS 0x24 15782eeaed14Srobj #define IPMI_ET_GROUP 0x25 15792eeaed14Srobj #define IPMI_ET_REMOTE 0x26 15802eeaed14Srobj #define IPMI_ET_ENVIRONMENT 0x27 15812eeaed14Srobj #define IPMI_ET_BATTERY 0x28 15822eeaed14Srobj #define IPMI_ET_BLADE 0x29 15832eeaed14Srobj #define IPMI_ET_SWITCH 0x2A 15842eeaed14Srobj #define IPMI_ET_PROCMEM_MODULE 0x2B 15852eeaed14Srobj #define IPMI_ET_IO_MODULE 0x2C 15862eeaed14Srobj #define IPMI_ET_PROCIO_MODULE 0x2D 15872eeaed14Srobj #define IPMI_ET_CONTROLLER_FIRMWARE 0x2E 15882eeaed14Srobj #define IPMI_ET_CHANNEL 0x2F 15892eeaed14Srobj #define IPMI_ET_PCI 0x30 15902eeaed14Srobj #define IPMI_ET_PCIE 0x31 15912eeaed14Srobj #define IPMI_ET_SCSI 0x32 15922eeaed14Srobj #define IPMI_ET_SATA_SAS 0x33 15932eeaed14Srobj #define IPMI_ET_FSB 0x34 15942eeaed14Srobj #define IPMI_ET_RTC 0x35 15959113a79cSeschrock 15969113a79cSeschrock /* 15979113a79cSeschrock * Get Sensor Reading. See section 35.14. 15989113a79cSeschrock */ 15999113a79cSeschrock 16009113a79cSeschrock #define IPMI_CMD_GET_SENSOR_READING 0x2d 16019113a79cSeschrock 16029113a79cSeschrock typedef struct ipmi_sensor_reading { 16039113a79cSeschrock uint8_t isr_reading; 16042c32020fSeschrock DECL_BITFIELD4( 16052c32020fSeschrock __reserved1 :5, 16062c32020fSeschrock isr_state_unavailable :1, 16072eeaed14Srobj isr_scanning_enabled :1, 16082eeaed14Srobj isr_event_enabled :1); 16099113a79cSeschrock uint16_t isr_state; 16109113a79cSeschrock } ipmi_sensor_reading_t; 16119113a79cSeschrock 16122eeaed14Srobj #define IPMI_SENSOR_THRESHOLD_LOWER_NONCRIT 0x0001 16132eeaed14Srobj #define IPMI_SENSOR_THRESHOLD_LOWER_CRIT 0x0002 16142eeaed14Srobj #define IPMI_SENSOR_THRESHOLD_LOWER_NONRECOV 0x0004 16152eeaed14Srobj #define IPMI_SENSOR_THRESHOLD_UPPER_NONCRIT 0x0008 16162eeaed14Srobj #define IPMI_SENSOR_THRESHOLD_UPPER_CRIT 0x0010 16172eeaed14Srobj #define IPMI_SENSOR_THRESHOLD_UPPER_NONRECOV 0x0020 16182eeaed14Srobj 16199113a79cSeschrock extern ipmi_sensor_reading_t *ipmi_get_sensor_reading(ipmi_handle_t *, uint8_t); 1620825ba0f2Srobj extern int ipmi_sdr_conv_reading(ipmi_sdr_full_sensor_t *, uint8_t, 1621825ba0f2Srobj double *); 16229113a79cSeschrock /* 16239113a79cSeschrock * Set Sensor Reading. See section 35.14. 16249113a79cSeschrock */ 16259113a79cSeschrock #define IPMI_CMD_SET_SENSOR_READING 0x30 16269113a79cSeschrock 16279113a79cSeschrock #define IPMI_SENSOR_OP_CLEAR 0x3 /* clear '0' bits */ 16289113a79cSeschrock #define IPMI_SENSOR_OP_SET 0x2 /* set '1' bits */ 16299113a79cSeschrock #define IPMI_SENSOR_OP_EXACT 0x1 /* set bits exactly */ 16309113a79cSeschrock 16319113a79cSeschrock typedef struct ipmi_set_sensor_reading { 16329113a79cSeschrock uint8_t iss_id; 16332c32020fSeschrock DECL_BITFIELD5( 16342c32020fSeschrock iss_set_reading :1, 16352c32020fSeschrock __reserved :1, 16362c32020fSeschrock iss_deassrt_op :2, 16372c32020fSeschrock iss_assert_op :2, 16382c32020fSeschrock iss_data_bytes :2); 16399113a79cSeschrock uint8_t iss_sensor_reading; 16409113a79cSeschrock uint16_t iss_assert_state; /* optional */ 16419113a79cSeschrock uint16_t iss_deassert_state; /* optional */ 16429113a79cSeschrock uint8_t iss_event_data1; /* optional */ 16439113a79cSeschrock uint8_t iss_event_data2; /* optional */ 16449113a79cSeschrock uint8_t iss_event_data3; /* optional */ 16459113a79cSeschrock } ipmi_set_sensor_reading_t; 16469113a79cSeschrock 16479113a79cSeschrock extern int ipmi_set_sensor_reading(ipmi_handle_t *, 16489113a79cSeschrock ipmi_set_sensor_reading_t *); 16499113a79cSeschrock 16509113a79cSeschrock /* 16514557a2a1Srobj * These IPMI message id/opcodes are documented in Appendix G in the IPMI spec. 16524557a2a1Srobj * 16534557a2a1Srobj * Payloads for these two commands are described in Sections 34.1 and 34.2 of 16544557a2a1Srobj * the spec, respectively. 16554557a2a1Srobj */ 16564557a2a1Srobj #define IPMI_CMD_GET_FRU_INV_AREA 0x10 16574557a2a1Srobj #define IPMI_CMD_READ_FRU_DATA 0x11 16584557a2a1Srobj 16594557a2a1Srobj /* 16604557a2a1Srobj * Structs to hold the FRU Common Header and the FRU Product Info Area, as 16614557a2a1Srobj * described in the IPMI Platform Management FRU Information Storage 16624557a2a1Srobj * Definition (v1.1). 16634557a2a1Srobj */ 16644557a2a1Srobj typedef struct ipmi_fru_hdr 16654557a2a1Srobj { 16664557a2a1Srobj uint8_t ifh_format; 16674557a2a1Srobj uint8_t ifh_int_use_off; 16684557a2a1Srobj uint8_t ifh_chassis_info_off; 16694557a2a1Srobj uint8_t ifh_board_info_off; 16704557a2a1Srobj uint8_t ifh_product_info_off; 16714557a2a1Srobj uint8_t ifh_multi_rec_off; 16724557a2a1Srobj uint8_t ifh_pad; 16734557a2a1Srobj uint8_t ifh_chksum; 16744557a2a1Srobj } ipmi_fru_hdr_t; 16754557a2a1Srobj 16764557a2a1Srobj /* 16774557a2a1Srobj * Because only 6 bits are used to specify the length of each field in the FRU 16784557a2a1Srobj * product and board info areas, the biggest string we would ever need to hold 16794557a2a1Srobj * would be 63 chars plus a NULL. 16804557a2a1Srobj */ 16814557a2a1Srobj #define FRU_INFO_MAXLEN 64 16824557a2a1Srobj 16834557a2a1Srobj typedef struct ipmi_fru_brd_info 16844557a2a1Srobj { 16854557a2a1Srobj char ifbi_manuf_date[3]; 16864557a2a1Srobj char ifbi_manuf_name[FRU_INFO_MAXLEN]; 16874557a2a1Srobj char ifbi_board_name[FRU_INFO_MAXLEN]; 16884557a2a1Srobj char ifbi_product_serial[FRU_INFO_MAXLEN]; 16894557a2a1Srobj char ifbi_part_number[FRU_INFO_MAXLEN]; 16904557a2a1Srobj } ipmi_fru_brd_info_t; 16914557a2a1Srobj 16924557a2a1Srobj typedef struct ipmi_fru_prod_info 16934557a2a1Srobj { 16944557a2a1Srobj char ifpi_manuf_name[FRU_INFO_MAXLEN]; 16954557a2a1Srobj char ifpi_product_name[FRU_INFO_MAXLEN]; 16964557a2a1Srobj char ifpi_part_number[FRU_INFO_MAXLEN]; 16974557a2a1Srobj char ifpi_product_version[FRU_INFO_MAXLEN]; 16984557a2a1Srobj char ifpi_product_serial[FRU_INFO_MAXLEN]; 16994557a2a1Srobj char ifpi_asset_tag[FRU_INFO_MAXLEN]; 17004557a2a1Srobj } ipmi_fru_prod_info_t; 17014557a2a1Srobj 17022eeaed14Srobj extern int ipmi_fru_read(ipmi_handle_t *, ipmi_sdr_fru_locator_t *, char **); 17032eeaed14Srobj extern int ipmi_fru_parse_board(ipmi_handle_t *, char *, ipmi_fru_brd_info_t *); 17042eeaed14Srobj extern int ipmi_fru_parse_product(ipmi_handle_t *, char *, 17052eeaed14Srobj ipmi_fru_prod_info_t *); 17062eeaed14Srobj 17072eeaed14Srobj /* 17082eeaed14Srobj * Routines to convert from entity and sensors defines into text strings. 17092eeaed14Srobj */ 17102eeaed14Srobj void ipmi_entity_name(uint8_t, char *, size_t); 17112eeaed14Srobj void ipmi_sensor_type_name(uint8_t, char *, size_t); 1712825ba0f2Srobj void ipmi_sensor_units_name(uint8_t, char *, size_t); 17132eeaed14Srobj void ipmi_sensor_reading_name(uint8_t, uint8_t, char *, size_t); 17142eeaed14Srobj 17152eeaed14Srobj /* 17162eeaed14Srobj * Entity management. IPMI has a notion of 'entities', but these are not 17172eeaed14Srobj * directly accessible from any commands. Instead, their existence is inferred 17182eeaed14Srobj * from examining the SDR repository. Since this is rather unwieldy, and 17192eeaed14Srobj * iterating over entities is a common operation, libipmi provides an entity 17202eeaed14Srobj * abstraction that hides the implementation details. This handles entity 17212eeaed14Srobj * groupings as well as SDR associations. 17222eeaed14Srobj */ 17232eeaed14Srobj typedef struct ipmi_entity { 17242eeaed14Srobj uint8_t ie_type; 17252eeaed14Srobj uint8_t ie_instance; 17262eeaed14Srobj uint8_t ie_children; 17272eeaed14Srobj boolean_t ie_logical; 17282eeaed14Srobj } ipmi_entity_t; 17292eeaed14Srobj 17302eeaed14Srobj extern int ipmi_entity_iter(ipmi_handle_t *, int (*)(ipmi_handle_t *, 17312eeaed14Srobj ipmi_entity_t *, void *), void *); 17322eeaed14Srobj extern int ipmi_entity_iter_sdr(ipmi_handle_t *, ipmi_entity_t *, 17332eeaed14Srobj int (*)(ipmi_handle_t *, ipmi_entity_t *, const char *, ipmi_sdr_t *, 17342eeaed14Srobj void *), void *); 17352eeaed14Srobj extern int ipmi_entity_iter_children(ipmi_handle_t *, ipmi_entity_t *, 17362eeaed14Srobj int (*)(ipmi_handle_t *, ipmi_entity_t *, void *), void *); 17372eeaed14Srobj extern ipmi_entity_t *ipmi_entity_lookup(ipmi_handle_t *, uint8_t, 17382eeaed14Srobj uint8_t); 17392eeaed14Srobj extern ipmi_entity_t *ipmi_entity_lookup_sdr(ipmi_handle_t *, const char *); 17402eeaed14Srobj extern ipmi_entity_t *ipmi_entity_parent(ipmi_handle_t *, ipmi_entity_t *); 17412eeaed14Srobj extern int ipmi_entity_present(ipmi_handle_t *, ipmi_entity_t *, boolean_t *); 17422eeaed14Srobj extern int ipmi_entity_present_sdr(ipmi_handle_t *, ipmi_sdr_t *, boolean_t *); 17434557a2a1Srobj 17444557a2a1Srobj /* 17451af98250Seschrock * User management. The raw functions are private to libipmi, and only the 17461af98250Seschrock * higher level abstraction (ipmi_user_t) is exported to consumers of the 17471af98250Seschrock * library. 17481af98250Seschrock */ 17491af98250Seschrock 17501af98250Seschrock #define IPMI_USER_PRIV_CALLBACK 0x1 17511af98250Seschrock #define IPMI_USER_PRIV_USER 0x2 17521af98250Seschrock #define IPMI_USER_PRIV_OPERATOR 0x3 17531af98250Seschrock #define IPMI_USER_PRIV_ADMIN 0x4 17541af98250Seschrock #define IPMI_USER_PRIV_OEM 0x5 17551af98250Seschrock #define IPMI_USER_PRIV_NONE 0xf 17561af98250Seschrock 17571af98250Seschrock typedef struct ipmi_user { 17581af98250Seschrock uint8_t iu_uid; 17591af98250Seschrock char *iu_name; 17601af98250Seschrock boolean_t iu_enabled; 17611af98250Seschrock boolean_t iu_ipmi_msg_enable; 17621af98250Seschrock boolean_t iu_link_auth_enable; 17631af98250Seschrock uint8_t iu_priv; 17641af98250Seschrock } ipmi_user_t; 17651af98250Seschrock 17661af98250Seschrock extern int ipmi_user_iter(ipmi_handle_t *, 17671af98250Seschrock int (*)(ipmi_user_t *, void *), void *); 17681af98250Seschrock extern ipmi_user_t *ipmi_user_lookup_name(ipmi_handle_t *, const char *); 17691af98250Seschrock extern ipmi_user_t *ipmi_user_lookup_id(ipmi_handle_t *, uint8_t); 17701af98250Seschrock extern int ipmi_user_set_password(ipmi_handle_t *, uint8_t, const char *); 17711af98250Seschrock 17721af98250Seschrock /* 17739113a79cSeschrock * The remaining functions are private to the implementation of the Sun ILOM 17749113a79cSeschrock * service processor. These function first check the manufacturer from the IPMI 17759113a79cSeschrock * device ID, and will return EIPMI_NOT_SUPPORTED if attempted for non-Sun 17769113a79cSeschrock * devices. 17779113a79cSeschrock */ 177881d9f076SRobert Johnston boolean_t ipmi_is_sun_ilom(ipmi_deviceid_t *); 17799113a79cSeschrock 17809113a79cSeschrock /* 17819113a79cSeschrock * Sun OEM LED requests. 17829113a79cSeschrock */ 17839113a79cSeschrock 17849113a79cSeschrock #define IPMI_SUNOEM_LED_MODE_OFF 0 17859113a79cSeschrock #define IPMI_SUNOEM_LED_MODE_ON 1 17869113a79cSeschrock #define IPMI_SUNOEM_LED_MODE_STANDBY 2 17879113a79cSeschrock #define IPMI_SUNOEM_LED_MODE_SLOW 3 17889113a79cSeschrock #define IPMI_SUNOEM_LED_MODE_FAST 4 17899113a79cSeschrock 17909113a79cSeschrock /* 17919113a79cSeschrock * These functions take a SDR record and construct the appropriate form of the 17929113a79cSeschrock * above commands. 17939113a79cSeschrock */ 17949113a79cSeschrock extern int ipmi_sunoem_led_set(ipmi_handle_t *, 17959113a79cSeschrock ipmi_sdr_generic_locator_t *, uint8_t); 17969113a79cSeschrock extern int ipmi_sunoem_led_get(ipmi_handle_t *, 17979113a79cSeschrock ipmi_sdr_generic_locator_t *, uint8_t *); 17989113a79cSeschrock 17999113a79cSeschrock /* 18009113a79cSeschrock * Sun OEM uptime. Note that the underlying command returns the uptime in big 18019113a79cSeschrock * endian form. This wrapper automatically converts to the appropriate native 18029113a79cSeschrock * form. 18039113a79cSeschrock */ 18049113a79cSeschrock 18059113a79cSeschrock #define IPMI_CMD_SUNOEM_UPTIME 0x08 18069113a79cSeschrock 18079113a79cSeschrock extern int ipmi_sunoem_uptime(ipmi_handle_t *, uint32_t *, uint32_t *); 18089113a79cSeschrock 18099113a79cSeschrock /* 18109113a79cSeschrock * Sun OEM FRU update. The FRU information is managed through a generic 18119113a79cSeschrock * identifier, and then a type-specific data portion. The wrapper function will 18129113a79cSeschrock * automatically fill in the data length field according to which type is 18139113a79cSeschrock * specified. 18149113a79cSeschrock */ 18159113a79cSeschrock 18169113a79cSeschrock #define IPMI_CMD_SUNOEM_FRU_UPDATE 0x16 18179113a79cSeschrock 18189113a79cSeschrock #define IPMI_SUNOEM_FRU_DIMM 0x00 18199113a79cSeschrock #define IPMI_SUNOEM_FRU_CPU 0x01 18209113a79cSeschrock #define IPMI_SUNOEM_FRU_BIOS 0x02 18219113a79cSeschrock #define IPMI_SUNOEM_FRU_DISK 0x03 18229113a79cSeschrock 18239113a79cSeschrock typedef struct ipmi_sunoem_fru { 18249113a79cSeschrock uint8_t isf_type; 18259113a79cSeschrock uint8_t isf_id; 18269113a79cSeschrock uint8_t isf_datalen; 18279113a79cSeschrock union { 18289113a79cSeschrock struct { 18299113a79cSeschrock uint8_t isf_data[128]; 18309113a79cSeschrock } dimm; 18319113a79cSeschrock struct { 18329113a79cSeschrock uint32_t isf_thermtrip; 18339113a79cSeschrock uint32_t isf_eax; 18349113a79cSeschrock char isf_product[48]; 18359113a79cSeschrock } cpu; 18369113a79cSeschrock struct { 18379113a79cSeschrock char isf_part[16]; 18389113a79cSeschrock char isf_version[16]; 18399113a79cSeschrock } bios; 18409113a79cSeschrock struct { 18419113a79cSeschrock char isf_manufacturer[16]; 18429113a79cSeschrock char isf_model[28]; 18439113a79cSeschrock char isf_serial[20]; 18449113a79cSeschrock char isf_version[8]; 18459113a79cSeschrock char isf_capacity[16]; 18469113a79cSeschrock } disk; 18479113a79cSeschrock } isf_data; 18489113a79cSeschrock } ipmi_sunoem_fru_t; 18499113a79cSeschrock 18509113a79cSeschrock int ipmi_sunoem_update_fru(ipmi_handle_t *, ipmi_sunoem_fru_t *); 18519113a79cSeschrock 1852aec67356SRobert Johnston #define IPMI_CMD_CHASSIS_IDENTIFY 0x04 1853aec67356SRobert Johnston int ipmi_chassis_identify(ipmi_handle_t *, boolean_t); 1854aec67356SRobert Johnston 18559113a79cSeschrock #pragma pack() 18569113a79cSeschrock 18579113a79cSeschrock #ifdef __cplusplus 18589113a79cSeschrock } 18599113a79cSeschrock #endif 18609113a79cSeschrock 18619113a79cSeschrock #endif /* _LIBIPMI_H */ 1862