1*268ac660Sdlg /* $OpenBSD: esmreg.h,v 1.10 2005/12/13 02:31:45 dlg Exp $ */ 2c842391bSjordan 3c842391bSjordan /* 48559ad04Smarco * Copyright (c) 2005 Jordan Hargrave <jordan@openbsd.org> 5c842391bSjordan * Copyright (c) 2005 David Gwynne <dlg@openbsd.org> 6c842391bSjordan * 7c842391bSjordan * Permission to use, copy, modify, and distribute this software for any 8c842391bSjordan * purpose with or without fee is hereby granted, provided that the above 9c842391bSjordan * copyright notice and this permission notice appear in all copies. 10c842391bSjordan * 11c842391bSjordan * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12c842391bSjordan * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13c842391bSjordan * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14c842391bSjordan * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15c842391bSjordan * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16c842391bSjordan * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17c842391bSjordan * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18c842391bSjordan */ 19c842391bSjordan 20c842391bSjordan #define ESM2_BASE_PORT 0xe0 21c842391bSjordan 22b47d5ff8Sjordan #define ESM2_CTRL_REG 4 23b47d5ff8Sjordan #define ESM2_DATA_REG 5 24b47d5ff8Sjordan #define ESM2_INTMASK_REG 6 25c842391bSjordan 26c842391bSjordan #define ESM2_TC_CLR_WPTR (1L << 0) 27c842391bSjordan #define ESM2_TC_CLR_RPTR (1L << 1) 28c842391bSjordan #define ESM2_TC_H2ECDB (1L << 2) 29c842391bSjordan #define ESM2_TC_EC2HDB (1L << 3) 30c842391bSjordan #define ESM2_TC_EVENTDB (1L << 4) 31c842391bSjordan #define ESM2_TC_HBDB (1L << 5) 32c842391bSjordan #define ESM2_TC_HOSTBUSY (1L << 6) 33c842391bSjordan #define ESM2_TC_ECBUSY (1L << 7) 34c842391bSjordan #define ESM2_TC_READY (ESM2_TC_EC2HDB | ESM2_TC_H2ECDB | \ 35c842391bSjordan ESM2_TC_ECBUSY) 36c842391bSjordan #define ESM2_TC_POWER_UP_BITS (ESM2_TC_CLR_WPTR | ESM2_TC_CLR_RPTR | \ 37c842391bSjordan ESM2_TC_EC2HDB | ESM2_TC_EVENTDB) 38c842391bSjordan 39c842391bSjordan #define ESM2_TIM_HIRQ_PEND (1L << 1) 40c842391bSjordan #define ESM2_TIM_SCI_EN (1L << 2) 41c842391bSjordan #define ESM2_TIM_SMI_EN (1L << 3) 42c842391bSjordan #define ESM2_TIM_NMI2SMI (1L << 4) 43c842391bSjordan #define ESM2_TIM_POWER_UP_BITS (ESM2_TIM_HIRQ_PEND) 44c842391bSjordan 45c842391bSjordan #define ESM2_CMD_NOOP 0x00 46c842391bSjordan #define ESM2_CMD_ECHO 0x01 47c842391bSjordan #define ESM2_CMD_DEVICEMAP 0x03 48dfd5af39Sjordan #define ESM2_DEVICEMAP_READ 0x00 49dfd5af39Sjordan 50dfd5af39Sjordan #define ESM2_CMD_HWDC 0x05 /* Host Watch Dog Control */ 51dfd5af39Sjordan #define ESM2_HWDC_WRITE_STATE 0x01 52dfd5af39Sjordan #define ESM2_HWDC_READ_PROPERTY 0x02 53dfd5af39Sjordan #define ESM2_HWDC_WRITE_PROPERTY 0x03 54c842391bSjordan 55c842391bSjordan #define ESM2_CMD_SMB_BUF 0x20 56c842391bSjordan #define ESM2_CMD_SMB_BUF_XMIT_RECV 0x21 57c842391bSjordan #define ESM2_CMD_SMB_XMIT_RECV 0x22 58c842391bSjordan #define ESM2_SMB_SENSOR_VALUE 0x04 59c842391bSjordan #define ESM2_SMB_SENSOR_THRESHOLDS 0x19 60c842391bSjordan 61c842391bSjordan #define ESM2_MAX_CMD_LEN 0x20 62c842391bSjordan #define ESM2_UUID_LEN 0x08 63c842391bSjordan 647792cc01Sjordan #define DELL_SYSSTR_ADDR 0xFE076L 657792cc01Sjordan #define DELL_SYSID_ADDR 0xFE840L 66dfd5af39Sjordan 677792cc01Sjordan #define DELL_SYSID_2300 0x81 687792cc01Sjordan #define DELL_SYSID_4300 0x7C 697792cc01Sjordan #define DELL_SYSID_4350 0x84 707792cc01Sjordan #define DELL_SYSID_6300 0x7F 717792cc01Sjordan #define DELL_SYSID_6350 0x83 727792cc01Sjordan #define DELL_SYSID_2400 0x9B 737792cc01Sjordan #define DELL_SYSID_2450 0xA6 747792cc01Sjordan #define DELL_SYSID_4400 0x9A 757792cc01Sjordan #define DELL_SYSID_6400 0x9C 767792cc01Sjordan #define DELL_SYSID_6450 0xA2 777792cc01Sjordan #define DELL_SYSID_2500 0xD9 787792cc01Sjordan #define DELL_SYSID_2550 0xD1 79b47d5ff8Sjordan #define DELL_SYSID_PV530F 0xCD 80b47d5ff8Sjordan #define DELL_SYSID_PV735N 0xE2 81b47d5ff8Sjordan #define DELL_SYSID_PV750N 0xEE 82b47d5ff8Sjordan #define DELL_SYSID_PV755N 0xEF 83b47d5ff8Sjordan #define DELL_SYSID_PA200 0xCB 847792cc01Sjordan #define DELL_SYSID_EXT 0xFE 857792cc01Sjordan 864be2e5d1Sdlg struct dell_sysid { 874be2e5d1Sdlg u_int16_t ext_id; 884be2e5d1Sdlg u_int8_t bios_ver[3]; 894be2e5d1Sdlg u_int8_t sys_id; 907792cc01Sjordan } __packed; 917792cc01Sjordan 92dfd5af39Sjordan struct esm_wdog_prop { 93c842391bSjordan u_int8_t cmd; 94c842391bSjordan u_int8_t reserved; 95c842391bSjordan u_int8_t subcmd; 96c842391bSjordan u_int8_t action; 97c842391bSjordan u_int32_t time; 98c842391bSjordan } __packed; 99c842391bSjordan 100dfd5af39Sjordan #define ESM_WDOG_DISABLE 0x00 101dfd5af39Sjordan #define ESM_WDOG_PWROFF (1L << 1) 102dfd5af39Sjordan #define ESM_WDOG_PWRCYCLE (1L << 2) 103dfd5af39Sjordan #define ESM_WDOG_RESET (1L << 3) 104dfd5af39Sjordan #define ESM_WDOG_NOTIFY (1L << 4) 105dfd5af39Sjordan 106dfd5af39Sjordan struct esm_wdog_state { 107c842391bSjordan u_int8_t cmd; 108c842391bSjordan u_int8_t reserved; 109c842391bSjordan u_int8_t subcmd; 110c842391bSjordan u_int8_t state; 111c842391bSjordan } __packed; 112c842391bSjordan 113c842391bSjordan struct esm_devmap { 114c842391bSjordan u_int8_t index; 115c842391bSjordan u_int8_t dev_major; 116c842391bSjordan u_int8_t dev_minor; 117c842391bSjordan u_int8_t rev_major; 118c842391bSjordan u_int8_t rev_minor; 119c842391bSjordan u_int8_t rev_rom; 120c842391bSjordan u_int8_t smb_addr; 121c842391bSjordan u_int8_t status; 122c842391bSjordan u_int8_t monitor_type; 123c842391bSjordan u_int8_t pollcycle; 124c842391bSjordan u_int8_t uniqueid[ESM2_UUID_LEN]; 125c842391bSjordan } __packed; 126c842391bSjordan 127c842391bSjordan struct esm_devmap_req { 128c842391bSjordan u_int8_t cmd; 129c842391bSjordan u_int8_t initiator; 130c842391bSjordan u_int8_t action; 131c842391bSjordan u_int8_t index; 132c842391bSjordan u_int8_t ndev; 133c842391bSjordan } __packed; 134c842391bSjordan 135c842391bSjordan struct esm_devmap_resp { 136c842391bSjordan u_int8_t status; 137c842391bSjordan u_int8_t ndev; 138c842391bSjordan struct esm_devmap devmap[1]; /* request one map at a time */ 139c842391bSjordan } __packed; 140c842391bSjordan 141c842391bSjordan /* ESM SMB requests */ 142c842391bSjordan 143c842391bSjordan struct esm_smb_req_val { 144c842391bSjordan u_int8_t v_cmd; 145c842391bSjordan u_int8_t v_initiator; 146c842391bSjordan u_int8_t v_sensor; 147c842391bSjordan } __packed; 148c842391bSjordan 1491193e5a5Sdlg struct esm_smb_req_thr { 1501193e5a5Sdlg u_int8_t t_cmd; 1511193e5a5Sdlg u_int8_t t_sensor; 1521193e5a5Sdlg } __packed; 1531193e5a5Sdlg 154c842391bSjordan struct esm_smb_req { 155c842391bSjordan struct { 156c842391bSjordan u_int8_t _cmd; 157c842391bSjordan u_int8_t _dev; 158c842391bSjordan u_int8_t _txlen; 159c842391bSjordan u_int8_t _rxlen; 160c842391bSjordan } __packed hdr; 161c842391bSjordan #define h_cmd hdr._cmd 162c842391bSjordan #define h_dev hdr._dev 163c842391bSjordan #define h_txlen hdr._txlen 164c842391bSjordan #define h_rxlen hdr._rxlen 165c842391bSjordan 166c842391bSjordan union { 167c842391bSjordan struct esm_smb_req_val _val; 1681193e5a5Sdlg struct esm_smb_req_thr _thr; 169c842391bSjordan } __packed _; 170c842391bSjordan #define req_val _._val 1711193e5a5Sdlg #define req_thr _._thr 172c842391bSjordan 173c842391bSjordan } __packed; 174c842391bSjordan 175c842391bSjordan /* ESM SMB responses */ 176c842391bSjordan 177c842391bSjordan struct esm_smb_resp_val { 178c842391bSjordan u_int16_t v_reading; 179c842391bSjordan u_int8_t v_status; 180c842391bSjordan u_int8_t v_checksum; 181c842391bSjordan } __packed; 182c842391bSjordan 1831193e5a5Sdlg struct esm_smb_resp_thr { 1841193e5a5Sdlg u_int8_t t_sensor; 1851193e5a5Sdlg u_int16_t t_lo_fail; 1861193e5a5Sdlg u_int16_t t_hi_fail; 1871193e5a5Sdlg u_int16_t t_lo_warn; 1881193e5a5Sdlg u_int16_t t_hi_warn; 1891193e5a5Sdlg u_int16_t t_hysterisis; 1901193e5a5Sdlg u_int8_t t_checksum; 1911193e5a5Sdlg } __packed; 1921193e5a5Sdlg 193c842391bSjordan struct esm_smb_resp { 194c842391bSjordan struct { 195c842391bSjordan u_int8_t _status; 196c842391bSjordan u_int8_t _i2csts; 197c842391bSjordan u_int8_t _procsts; 198c842391bSjordan u_int8_t _tx; 199c842391bSjordan u_int8_t _rx; 200c842391bSjordan } __packed hdr; 201c842391bSjordan #define h_status hdr._status 202c842391bSjordan #define h_i2csts hdr._i2csts 203c842391bSjordan #define h_procsts hdr._procsts 204c842391bSjordan #define h_tx hdr._tx 205c842391bSjordan #define h_rx hdr._rx 206c842391bSjordan 207c842391bSjordan union { 208c842391bSjordan struct esm_smb_resp_val _val; 2091193e5a5Sdlg struct esm_smb_resp_thr _thr; 210c842391bSjordan } __packed _; 211c842391bSjordan #define resp_val _._val 2121193e5a5Sdlg #define resp_thr _._thr 213c842391bSjordan } __packed; 214c842391bSjordan 215*268ac660Sdlg /* esm_smb_resp_val drive values */ 216*268ac660Sdlg #define ESM2_V_DRV_EMPTY 1 217*268ac660Sdlg #define ESM2_V_DRV_READY 2 218*268ac660Sdlg #define ESM2_V_DRV_POWERUP 3 219*268ac660Sdlg #define ESM2_V_DRV_ONLINE 4 220*268ac660Sdlg #define ESM2_V_DRV_IDLE 5 221*268ac660Sdlg #define ESM2_V_DRV_ACTIVE 6 222*268ac660Sdlg #define ESM2_V_DRV_REBUILD 7 223*268ac660Sdlg #define ESM2_V_DRV_POWERDOWN 8 224*268ac660Sdlg #define ESM2_V_DRV_FAIL 9 225*268ac660Sdlg #define ESM2_V_DRV_PFAIL 10 226c842391bSjordan 227*268ac660Sdlg /* esm_smb_resp_val powersupply values */ 228*268ac660Sdlg #define ESM2_V_PSU_ID(x) ((x)>>8 & 0xff) 229*268ac660Sdlg #define ESM2_V_PSU_AC (1<<0) 230*268ac660Sdlg #define ESM2_V_PSU_SW (1<<1) 231*268ac660Sdlg #define ESM2_V_PSU_OK (1<<2) 232*268ac660Sdlg #define ESM2_V_PSU_ON (1<<3) 233*268ac660Sdlg #define ESM2_V_PSU_FFAN (1<<4) 234*268ac660Sdlg #define ESM2_V_PSU_OTMP (1<<5) 235*268ac660Sdlg 236*268ac660Sdlg /* esm_smb_resp_val status */ 237*268ac660Sdlg #define ESM2_VS_VALID (1<<2) 238*268ac660Sdlg /* the powersupplies have a special status field */ 239*268ac660Sdlg #define ESM2_VS_PSU_INST (1<<0) 240*268ac660Sdlg #define ESM2_VS_PSU_PSON (1<<1) 241*268ac660Sdlg #define ESM2_VS_PSU_FAIL (1<<2) 242*268ac660Sdlg #define ESM2_VS_PSU_PSDB (1<<3) 243c842391bSjordan 244c842391bSjordan enum esm_dev_type { 245c842391bSjordan ESM2_DEV_ESM2 = 1, 246c842391bSjordan ESM2_DEV_DRACII, 247c842391bSjordan ESM2_DEV_FRONT_PANEL, 248c842391bSjordan ESM2_DEV_BACKPLANE2, 249c842391bSjordan ESM2_DEV_POWERUNIT2, 250c842391bSjordan ESM2_DEV_ENCL2_BACKPLANE, 251c842391bSjordan ESM2_DEV_ENCL2_POWERUNIT, 252c842391bSjordan ESM2_DEV_ENCL1_BACKPLANE, 253c842391bSjordan ESM2_DEV_ENCL1_POWERUNIT, 254c842391bSjordan ESM2_DEV_HPPCI, 255c842391bSjordan ESM2_DEV_BACKPLANE3 256c842391bSjordan }; 257c842391bSjordan 258c842391bSjordan enum esm_dev_esm2_type { 259c842391bSjordan ESM2_DEV_ESM2_2300 = 0, 260c842391bSjordan ESM2_DEV_ESM2_4300, 261c842391bSjordan ESM2_DEV_ESM2_6300, 262c842391bSjordan ESM2_DEV_ESM2_6400, 263c842391bSjordan ESM2_DEV_ESM2_2550, 264c842391bSjordan ESM2_DEV_ESM2_4350, 265c842391bSjordan ESM2_DEV_ESM2_6350, 266c842391bSjordan ESM2_DEV_ESM2_6450, 267c842391bSjordan ESM2_DEV_ESM2_2400, 268c842391bSjordan ESM2_DEV_ESM2_4400, 269c842391bSjordan ESM2_DEV_ESM2_R0, /* reserved */ 270c842391bSjordan ESM2_DEV_ESM2_2500, 271c842391bSjordan ESM2_DEV_ESM2_2450, 272c842391bSjordan ESM2_DEV_ESM2_R1, /* reserved */ 273c842391bSjordan ESM2_DEV_ESM2_R2, /* reserved */ 274c842391bSjordan ESM2_DEV_ESM2_2400EX, 275c842391bSjordan ESM2_DEV_ESM2_2450EX 276c842391bSjordan }; 277c842391bSjordan 278