xref: /openbsd-src/sys/arch/i386/i386/esmreg.h (revision 268ac660699d572024a6e94257bfd969f7967d5c)
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