xref: /titanic_50/usr/src/uts/sun4u/sys/rmc_comm_hproto.h (revision 02e56f3f1bfc8d9977bafb8cb5202f576dcded27)
1 /*
2  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
3  * Use is subject to license terms.
4  */
5 
6 #ifndef	_SYS_RMC_COMM_HPROTO_H
7 #define	_SYS_RMC_COMM_HPROTO_H
8 
9 #pragma ident	"%Z%%M%	%I%	%E% SMI"
10 
11 #ifdef	__cplusplus
12 extern "C" {
13 #endif
14 
15 /*
16  * data types used in the data protocol fields
17  */
18 
19 typedef unsigned char rsci8;
20 typedef unsigned short rsci16;
21 
22 typedef short rscis16;
23 
24 #ifdef _LP64
25 typedef unsigned int rsci32;
26 typedef unsigned long rsci64;
27 #else
28 typedef unsigned long rsci32;
29 typedef unsigned long long rsci64;
30 #endif
31 
32 /*
33  * handle definition. Handles are used in the high-level data protocol
34  * to identify FRU, sensors (temperature, voltage), and so on.
35  */
36 
37 typedef rsci16 dp_handle_t;
38 
39 #define	DP_NULL_HANDLE		0xffff
40 
41 #define	DP_MAX_HANDLE_NAME	32
42 
43 #define	DP_NULL_MSG		0x00
44 
45 /*
46  * Supported message types and associated data types:
47  */
48 
49 #define	DP_RESET_RSC		0x7A
50 
51 #define	DP_RESET_RSC_R		0x5A
52 
53 #define	DP_UPDATE_FLASH		0x66
54 
55 #define	DP_UPDATE_FLASH_R	0x46
56 typedef struct dp_update_flash_r {
57 	rsci32	status;		/* completion code */
58 } dp_update_flash_r_t;
59 
60 #define	DP_RUN_TEST		0x74
61 typedef struct dp_run_test {
62 	rsci32	testno;		/* test number to run; see below. */
63 	rsci32	param_len;	/* # bytes in test parameter data. */
64 } dp_run_test_t;
65 /* followed by test parameters; see individual tests below. */
66 
67 #define	DP_RUN_TEST_R		0x54
68 typedef struct dp_run_test_r {
69 	rsci32	status;		/* 0 = test passed, otherwise see failure */
70 				/* codes below. */
71 	rsci32	idatalen;	/* # items in input data array */
72 	rsci32	odatalen;	/* # items in output data array */
73 #define	DP_MAX_RUN_TEST_DATALEN (DP_MAX_MSGLEN-32)/2
74 	rsci8	idata[DP_MAX_RUN_TEST_DATALEN];	/* input data array */
75 	rsci8	odata[DP_MAX_RUN_TEST_DATALEN];	/* output data array */
76 } dp_run_test_r_t;
77 
78 #define	RSC_TEST_PASSED		0
79 #define	RSC_TEST_SW_FAILURE	1
80 #define	RSC_TEST_BAD_DATA	2
81 #define	RSC_TEST_NO_RESPONSE	3
82 #define	RSC_TEST_BAD_CRC	4
83 #define	RSC_TEST_BAD_PARAMS	5
84 #define	RSC_TEST_NO_DEVICE	6
85 #define	RSC_TEST_DEV_SETUP_FAIL	7
86 #define	RSC_TEST_MEM_ALLOC_FAIL	8
87 #define	RSC_TEST_ENET_ADDR_FAIL	9
88 #define	RSC_TEST_DEV_INFO_FAIL	10
89 #define	RSC_TEST_NYI		255
90 
91 #define	DP_RSC_STATUS		0x73
92 
93 #define	DP_RSC_STATUS_R		0x53
94 typedef struct dp_rsc_status_r {
95 /* The first six fields here must not be changed to ensure that they  */
96 /* are the same in all versions of RSC, most notably when compared to */
97 /* 1.x. New fields must be added to the end of the structure. */
98 	rsci16	main_rev_major;
99 	rsci16	main_rev_minor;
100 	rsci16	bootmon_rev_major;
101 	rsci16	bootmon_rev_minor;
102 	rsci16	post_status;
103 	rsci16	nusers;		/* number of users currently logged in to */
104 				/* CLI.  */
105 /* Any new fields in the structure may be added after this point ONLY! */
106 	rsci16	release_rev_major;
107 	rsci16	release_rev_minor;
108 	rsci16	release_rev_micro;
109 	rsci16	main_rev_micro;
110 	rsci16	bootmon_rev_micro;
111 	rsci16	hardware_rev;
112 
113 	rsci32 bm_cksum;
114 	rsci8  rsc_build;
115 	char creationDate[256];
116 	rsci32 fw_cksum;
117 	rsci32 sys_mem;
118 	rsci32 nvram_version;
119 
120 } dp_rsc_status_r_t;
121 
122 #define	DP_SET_CFGVAR		0x76
123 typedef struct dp_set_cfgvar {
124 	rsci32	hidden;		/* boolean */
125 } dp_set_cfgvar_t;
126 
127 /* Data is variable name & new value as zero-terminated ascii strings. */
128 
129 #define	DP_SET_CFGVAR_R		0x56
130 typedef struct dp_set_cfgvar_r {
131 	rsci32	status;		/* completion code */
132 } dp_set_cfgvar_r_t;
133 
134 #define	DP_GET_CFGVAR		0x67
135 /* Data is variable name as zero-terminated ascii string. */
136 
137 #define	DP_GET_CFGVAR_R		0x47
138 typedef struct dp_get_cfgvar_r {
139 	rsci32	status;		/* completion code */
140 } dp_get_cfgvar_r_t;
141 /* followed by value of variable as a zero-terminated ascii string. */
142 
143 #define	DP_GET_CFGVAR_NAME	0x6E
144 /*
145  * Data is variable name as zero-terminated ascii string.  A zero-length
146  * string means 'return the name of the "first" variable.'
147  */
148 
149 #define	DP_GET_CFGVAR_NAME_R	0x4E
150 typedef struct dp_get_cfgvar_name_r {
151 	rsci32	status;		/* completion code */
152 } dp_get_cfgvar_name_r_t;
153 /* followed by name of "next" variable as a zero-terminated ascii string. */
154 
155 #define	DP_SET_DATE_TIME		0x64
156 #define	DP_SET_DATE_TIME_IGNORE_FIELD	0xFFFF
157 typedef struct dp_set_date_time {
158 	rsci32	year;		/* Full year, IE 1997 */
159 	rsci32	month;		/* 1 = Jan, 2 = Feb, etc. */
160 	rsci32	day;		/* Day of the month, 1 to 31. */
161 	rsci32	hour;		/* 0 to 23 */
162 	rsci32	minute;		/* 0 to 59 */
163 	rsci32	second;		/* 0 to 59 */
164 } dp_set_date_time_t;
165 
166 #define	DP_SET_DATE_TIME_R	0x44
167 typedef struct dp_set_date_time_r {
168 	rsci32	status;		/* 0 - succes, non-zero - fail. */
169 } dp_set_date_time_r_t;
170 
171 #define	DP_GET_DATE_TIME	0x65
172 #define	DP_GET_DATE_TIME_R	0x45
173 typedef struct dp_get_date_time_r {
174 	rsci32	status;		/* completion code */
175 	rsci32	current_datetime; /* in Unix format */
176 } dp_get_date_time_r_t;
177 /* followed by the date represented as a zero-terminated ascii string. */
178 
179 
180 #define	DP_SEND_ALERT		0x61
181 typedef struct dp_send_alert {
182 	rsci32	critical; /* boolean */
183 } dp_send_alert_t;
184 
185 #define	DP_SEND_ALERT_R		0x41
186 typedef struct dp_send_alert_r {
187 	rsci32	status;		/* completion code */
188 } dp_send_alert_r_t;
189 
190 #define	DP_GET_TEMP		0x78
191 
192 #define	DP_GET_TEMP_R		0x58
193 typedef struct dp_get_temp_r {
194 	rsci32	status;
195 	rsci32	current_temp;
196 } dp_get_temp_r_t;
197 
198 #define	DP_GET_SDP_VERSION	0x7B
199 
200 #define	DP_GET_SDP_VERSION_R	0x5B
201 typedef struct dp_get_sdp_version_r {
202 	rsci32	version;
203 } dp_get_sdp_version_r_t;
204 
205 #define	DP_GET_TOD_CLOCK	0x7C
206 
207 #define	DP_GET_TOD_CLOCK_R	0x5C
208 typedef struct dp_get_tod_clock_r {
209 	rsci32	current_tod;
210 } dp_get_tod_clock_r_t;
211 
212 #define	DP_MAX_LOGSIZE		(DP_MAX_MSGLEN-24)
213 
214 #define	DP_GET_EVENT_LOG	0x7D
215 
216 #define	DP_GET_EVENT_LOG_R	0x5D
217 typedef struct dp_get_event_log_r {
218 	rsci32	entry_count;
219 	rsci8	data[DP_MAX_LOGSIZE];
220 } dp_get_event_log_r_t;
221 
222 typedef struct dp_event_log_entry {
223 	rsci32	eventTime;
224 	rsci32	eventId;
225 	rsci32	paramLen;
226 	char	param[256];
227 } dp_event_log_entry_t;
228 
229 #define	DP_GET_PCMCIA_INFO	0x7E
230 
231 #define	DP_GET_PCMCIA_INFO_R	0x5E
232 typedef struct dp_get_pcmcia_info_r {
233 	rsci32	card_present;	/* true=present, false=no card */
234 	rsci32	idInfoLen;
235 	rsci8	idInfo[256];
236 } dp_get_pcmcia_info_r_t;
237 
238 
239 #define	DP_USER_MAX		16
240 #define	DP_USER_NAME_SIZE	16
241 
242 /* User sub-commands */
243 #define	DP_USER_CMD_ADD		0x1
244 #define	DP_USER_CMD_DEL		0x2
245 #define	DP_USER_CMD_SHOW	0x3
246 #define	DP_USER_CMD_PASSWORD	0x4
247 #define	DP_USER_CMD_PERM	0x5
248 
249 /*
250  * The following fields are used to set the user permissions.
251  * Each must be represented as a single bit in the parm field.
252  */
253 #define	DP_USER_PERM_C		0x1
254 #define	DP_USER_PERM_U		0x2
255 #define	DP_USER_PERM_A		0x4
256 #define	DP_USER_PERM_R		0x8
257 
258 /*
259  * values for parm for CMD_SHOW.  Anything other than 0 will show
260  * the user # up to and including DP_USER_MAX
261  */
262 #define	DP_USER_SHOW_USERNAME	0x0
263 
264 /* Error values for status */
265 #define	DP_ERR_USER_FULL	0x1  /* No free user slots */
266 #define	DP_ERR_USER_NONE	0x2  /* User does not exist */
267 #define	DP_ERR_USER_BAD		0x3  /* Malformed username */
268 #define	DP_ERR_USER_NACT	0x4  /* user # not activated */
269 #define	DP_ERR_USER_THERE	0x5  /* user already registered */
270 #define	DP_ERR_USER_PASSWD	0x6  /* invalid password */
271 #define	DP_ERR_USER_WARNING	0x7  /* Malformed username warning */
272 #define	DP_ERR_USER_NYI		0xFD /* Not yet implemented */
273 #define	DP_ERR_USER_UNDEF	0xFE /* Undefine error */
274 #define	DP_ERR_USER_CMD		0xFF /* Invalid Command */
275 
276 #define	DP_USER_ADM		0x50
277 /*
278  * The parm field is used by the permission command to set specific
279  *  permissions.  The parm field is also used by the show command to
280  * indicate if the user name is specified or not.
281  */
282 typedef struct dp_user_adm {
283 	rsci32	command;
284 	rsci32	parm;
285 } dp_user_adm_t;
286 /*
287  * followed by zero-terminated ascii strings.  All user commands
288  * are followed by the username. The password command is also
289  * followed by the password.
290  */
291 
292 #define	DP_USER_ADM_R		0x51
293 /*
294  * the response field is used to return the user permissions
295  * for the user permissions command. The response is also used
296  * to echo back the user selection for the show command.
297  */
298 typedef struct dp_user_adm_r {
299 	rsci32	status;		/* completion code */
300 	rsci32  command;	/* echo back adm command */
301 	rsci32	response;
302 } dp_user_adm_r_t;
303 /* followed by a zero-terminated ascii string for the show command.  */
304 
305 
306 #define	DP_MODEM_PASS		0
307 #define	DP_MODEM_FAIL		-1
308 
309 /* Commands used for rscadm modem_setup */
310 #define	DP_MODEM_CONNECT	0x30
311 #define	DP_MODEM_CONNECT_R	0x31
312 typedef struct dp_modem_connect_r {
313 	rsci32	status;
314 } dp_modem_connect_r_t;
315 
316 /* There is no reponse to a modem_data command */
317 /* The modem data command goes in both directions */
318 #define	DP_MODEM_DATA		0x32
319 /* followed by a zero-terminated ascii string */
320 
321 #define	DP_MODEM_DISCONNECT	0x34
322 #define	DP_MODEM_DISCONNECT_R	0x35
323 typedef struct dp_modem_disconnect_r {
324 	rsci32	status;
325 } dp_modem_disconnect_r_t;
326 
327 
328 #define	DP_GET_TICKCNT		0x22
329 #define	DP_GET_TICKCNT_R	0x23
330 typedef struct dp_get_tickcnt_r {
331 	rsci32	upper;		/* MSW of 64 bit tick count */
332 	rsci32	lower;		/* LSW of 64 bit tick count */
333 } dp_get_tickcnt_r_t;
334 
335 
336 #define	DP_SET_DEFAULT_CFG	0x72
337 
338 #define	DP_SET_DEFAULT_CFG_R	0x52
339 typedef struct dp_set_default_cfg_r {
340 	rsci32	status;
341 } dp_set_default_cfg_r_t;
342 
343 
344 #define	DP_GET_NETWORK_CFG	0x59
345 
346 #define	DP_GET_NETWORK_CFG_R	0x79
347 typedef struct dp_get_network_cfg_r {
348 	rsci32	status;
349 	char	ipMode[7];
350 	char	ipAddr[16];
351 	char	ipMask[16];
352 	char	ipGateway[16];
353 	char	ethAddr[18];
354 	char	ipDHCPServer[16];
355 } dp_get_network_cfg_r_t;
356 
357 
358 /*
359  * Parameters for DP_RUN_TEST message:
360  */
361 
362 /*
363  * Test routines need to know what the low-level protocol sync
364  * character is.
365  */
366 
367 #define	RSC_TEST_SERIAL		0
368 typedef struct rsc_serial_test {
369 	rsci32	testtype;
370 #define	RSC_SERIAL_TTYC_LB	0
371 #define	RSC_SERIAL_TTYC_LB_OFF	1
372 #define	RSC_SERIAL_TTYD_LB	2
373 #define	RSC_SERIAL_TTYD_LB_OFF	3
374 #define	RSC_SERIAL_TTYCD_LB	4
375 #define	RSC_SERIAL_TTYCD_LB_OFF	5
376 #define	RSC_SERIAL_TTYU_INT_LB	6
377 #define	RSC_SERIAL_TTYU_EXT_LB	7
378 	rsci32	baud;
379 	rsci32	passes;
380 	rsci32	datalen;
381 	rsci8	data[DP_MAX_MSGLEN-32];
382 } rsc_serial_test_t;
383 
384 #define	RSC_TEST_ENET		1
385 typedef struct rsc_enet_test {
386 	rsci32	testtype;
387 #define	RSC_ENET_INT_LB		0
388 #define	RSC_ENET_EXT_LB		1
389 #define	RSC_ENET_PING		2
390 #define	RSC_ENET_INT_PHY_LB	3
391 	rsci8	ip_addr[4];
392 	rsci32	passes;
393 	rsci32	datalen;
394 	rsci8	data[DP_MAX_MSGLEN-32];
395 } rsc_enet_test_t;
396 
397 #define	RSC_TEST_FLASH_CRC	2
398 typedef struct rsc_flash_crcs_r {
399 	rsci32	boot_crc;
400 	rsci32	main_crc;
401 } rsc_flash_crcs_r_t;
402 
403 #define	RSC_TEST_SEEPROM_CRC	3
404 typedef struct rsc_seeprom_crcs_r {
405 	rsci32	hdr_crc;
406 	rsci32	main_crc;
407 } rsc_seeprom_crcs_r_t;
408 
409 #define	RSC_TEST_FRU_SEEPROM_CRC 4
410 typedef struct rsc_fru_crcs_r {
411 	rsci32	ro_hdr_crc;
412 	rsci32	seg_sd_crc;
413 } rsc_fru_crcs_r_t;
414 
415 
416 /*
417  * new commands definitions
418  */
419 
420 #define	DP_GET_SYSINFO		0x20
421 
422 #define	DP_GET_SYSINFO_R	0x21
423 typedef struct dp_get_sysinfo_r {
424 	rsci8 maxTemp;		/* max number of temperature sensors */
425 	rsci8 maxFan;		/* max number of FANs */
426 	rsci8 maxPSU;		/* max number of PSUs slot */
427 	rsci8 maxLED;		/* max number of LEDs */
428 	rsci8 maxVolt;		/* max number of voltage sensors */
429 	rsci8 maxFRU;		/* max number of FRUs (field replac. unit)  */
430 	rsci8 maxCircuitBrks;	/* max number of circuit breakers */
431 	rsci8 keyswitch;	/* key switch setting value */
432 } dp_get_sysinfo_r_t;
433 
434 
435 #define	DP_GET_TEMPERATURES	0x24
436 typedef struct dp_get_temperatures {
437 	dp_handle_t handle;	/* handle of a temperature sensor */
438 				/* or <null handle> (0xffff) */
439 } dp_get_temperatures_t;
440 
441 /* Data is variable name & new value as zero-terminated ascii strings. */
442 
443 #define	DP_GET_TEMPERATURES_R	0x25
444 typedef rscis16		dp_tempr_t;
445 
446 enum sensor_status {
447 	DP_SENSOR_DATA_AVAILABLE = 0,
448 	DP_SENSOR_DATA_UNAVAILABLE,
449 	DP_SENSOR_NOT_PRESENT
450 };
451 
452 typedef struct dp_tempr_status {
453 	dp_handle_t	handle;
454 	rsci8		sensor_status; 	/* tells whether the reading is */
455 					/* available or not */
456 	dp_tempr_t	value;	/* temperature value (celsius). */
457 
458 	dp_tempr_t 	low_warning;
459 	dp_tempr_t 	low_soft_shutdown;
460 	dp_tempr_t 	low_hard_shutdown;
461 	dp_tempr_t 	high_warning;
462 	dp_tempr_t 	high_soft_shutdown;
463 	dp_tempr_t 	high_hard_shutdown;
464 
465 } dp_tempr_status_t;
466 
467 typedef struct dp_get_temperatures_r {
468 	rsci8			num_temps;
469 	dp_tempr_status_t	temp_status[1];
470 
471 } dp_get_temperatures_r_t;
472 
473 
474 #define	DP_GET_FAN_STATUS	0x26
475 typedef struct dp_get_fan_status {
476 	dp_handle_t handle;	/* handle of a temperature sensor */
477 				/* or <null handle> (0xffff) */
478 } dp_get_fan_status_t;
479 
480 #define	DP_GET_FAN_STATUS_R	0x27
481 
482 typedef struct dp_fan_status {
483 	dp_handle_t	handle;
484 	rsci8		sensor_status; 	/* tells whether the reading is */
485 					/* available or not */
486 	rsci8 		flag;
487 
488 #define	DP_FAN_PRESENCE		0x01	/* FAN presence (bit set=FAN present) */
489 #define	DP_FAN_SPEED_VAL_UNIT	0x02	/* speed unit	(bit set=relative, */
490 					/*		bit clear=RPM) */
491 #define	DP_FAN_STATUS		0x04	/* FAN status (bit set=error) */
492 
493 	rsci16		speed;	/* FAN speed. */
494 	rsci16		minspeed; /* minimum FAN speed warning threshold */
495 
496 } dp_fan_status_t;
497 
498 typedef struct dp_get_fan_status_r {
499 	rsci8		num_fans;
500 	dp_fan_status_t	fan_status[1];
501 
502 } dp_get_fan_status_r_t;
503 
504 
505 #define	DP_GET_PSU_STATUS	0x28
506 typedef struct dp_get_psu_status {
507 	dp_handle_t handle;	/* handle of a temperature sensor */
508 				/* or <null handle> (0xffff) */
509 } dp_get_psu_status_t;
510 
511 #define	DP_GET_PSU_STATUS_R	0x29
512 typedef struct dp_psu_status {
513 	dp_handle_t	handle;
514 	rsci8		sensor_status; 	/* tells whether the reading is */
515 					/* available or not */
516 	rsci16 		mask;		/* flag bit mask (feature presence) */
517 	rsci16 		flag;		/* status bits */
518 
519 #define	DP_PSU_PRESENCE			0x0001	/* PSU presence  */
520 #define	DP_PSU_OUTPUT_STATUS		0x0002	/* output status */
521 #define	DP_PSU_INPUT_STATUS		0x0004	/* input status */
522 #define	DP_PSU_SEC_INPUT_STATUS		0x0008	/* secondary input status */
523 #define	DP_PSU_OVERTEMP_FAULT		0x0010	/* over temperature fault */
524 #define	DP_PSU_FAN_FAULT    		0x0020	/* FAN fault */
525 #define	DP_PSU_FAIL_STATUS		0x0040	/* PSU generic fault */
526 #define	DP_PSU_OUTPUT_VLO_STATUS	0x0080	/* output under voltage */
527 #define	DP_PSU_OUTPUT_VHI_STATUS	0x0100	/* output over voltage */
528 #define	DP_PSU_OUTPUT_AHI_STATUS	0x0200	/* output over current */
529 #define	DP_PSU_ALERT_STATUS		0x0400	/* PSU alert indication */
530 #define	DP_PSU_PDCT_FAN			0x0800	/* predicted fan fail */
531 #define	DP_PSU_NR_WARNING		0x1000	/* non-redundancy condition */
532 
533 			/* presence: 	bit clear=not present */
534 			/*		bit set=present */
535 			/* status:	bit clear=ok */
536 			/*		bit set=generic fault */
537 } dp_psu_status_t;
538 
539 typedef struct dp_get_psu_status_r {
540 
541 	rsci8		num_psus;
542 	dp_psu_status_t	psu_status[1];
543 
544 } dp_get_psu_status_r_t;
545 
546 #define	DP_GET_FRU_STATUS	0x2A
547 typedef struct dp_get_fru_status {
548 	dp_handle_t handle;	/* handle of a hot pluggable unit */
549 				/* or <null handle> (0xffff)	  */
550 } dp_get_fru_status_t;
551 
552 
553 #define	DP_GET_FRU_STATUS_R	0x2B
554 typedef struct dp_fru_status {
555 
556 	dp_handle_t	handle;
557 	rsci8		sensor_status; 	/* tells whether the reading is */
558 					/* available or not */
559 	rsci8		presence;	/* 1=FRU present */
560 	rsci8		status;
561 
562 } dp_fru_status_t;
563 
564 enum dp_fru_status_type {
565 	DP_FRU_STATUS_OK = 1,
566 	DP_FRU_STATUS_FAILED,
567 	DP_FRU_STATUS_BLACKLISTED,
568 	DP_FRU_STATUS_UNKNOWN
569 };
570 
571 typedef struct dp_get_fru_status_r {
572 	rsci8		num_frus;
573 	dp_fru_status_t	fru_status[1];
574 
575 } dp_get_fru_status_r_t;
576 
577 /*
578  * DP_GET_DEVICE(_R) command is used to discover I2C devices dynamically
579  * (used by SunVTS)
580  */
581 #define	DP_GET_DEVICE		0x2C
582 
583 typedef struct dp_get_device {
584 	dp_handle_t	handle;	/* handle of a device or */
585 				/* <null handle>(0xffff) */
586 } dp_get_device_t;
587 
588 #define	DP_GET_DEVICE_R		0x2D
589 
590 #define	DP_MAX_DEVICE_TYPE_NAME	32
591 
592 typedef struct dp_device {
593 	dp_handle_t	handle;
594 	rsci8		presence;	/* 0 is not present, 1 is present */
595 	char		device_type[DP_MAX_DEVICE_TYPE_NAME];
596 } dp_device_t;
597 
598 typedef struct dp_get_device_r {
599 	rsci8		num_devices;
600 	dp_device_t	device[1];
601 } dp_get_device_r_t;
602 
603 
604 #define	DP_SET_CPU_SIGNATURE	0x33
605 
606 typedef struct dp_set_cpu_signature {
607 	int		cpu_id;		/* see PSARC 2000/205 for more */
608 	ushort_t	sig; 		/* information on the value/meaning */
609 	uchar_t		states;		/* of these fields */
610 	uchar_t		sub_state;
611 
612 } dp_cpu_signature_t;
613 
614 
615 #define	DP_SET_CPU_NODENAME	0x38
616 
617 #define	DP_MAX_NODENAME		256
618 
619 typedef struct dp_set_nodename {
620 	char		nodename[DP_MAX_NODENAME];
621 } dp_set_nodename_t;
622 
623 
624 #define	DP_GET_LED_STATE	0x3C
625 
626 typedef struct dp_get_led_state {
627 	dp_handle_t handle;	/* handle of a hot pluggable unit */
628 				/* or <null handle> (0xffff) */
629 } dp_get_led_state_t;
630 
631 #define	DP_GET_LED_STATE_R	0x3D
632 
633 typedef struct dp_led_state {
634 	dp_handle_t	handle;
635 	rsci8		sensor_status; 	/* tells whether the reading is */
636 					/* available or not */
637 	rsci8		state;
638 	rsci8		colour;
639 } dp_led_state_t;
640 
641 typedef struct dp_get_led_state_r {
642 	rsci8		num_leds;
643 	dp_led_state_t	led_state[1];
644 } dp_get_led_state_r_t;
645 
646 /* LED states */
647 
648 enum dp_led_states {
649 	DP_LED_OFF = 0,
650 	DP_LED_ON,
651 	DP_LED_FLASHING,
652 	DP_LED_BLINKING
653 };
654 
655 enum dp_led_colours {
656 	DP_LED_COLOUR_NONE = -1,
657 	DP_LED_COLOUR_ANY,
658 	DP_LED_COLOUR_WHITE,
659 	DP_LED_COLOUR_BLUE,
660 	DP_LED_COLOUR_GREEN,
661 	DP_LED_COLOUR_AMBER
662 };
663 
664 
665 #define	DP_SET_LED_STATE	0x3E
666 
667 typedef struct dp_set_led_state {
668 	dp_handle_t	handle;		/* handle of a LED */
669 	rsci8		state;
670 } dp_set_led_state_t;
671 
672 #define	DP_SET_LED_STATE_R	0x3F
673 typedef struct dp_set_led_state_r {
674 	rsci8		status;
675 } dp_set_led_state_r_t;
676 
677 enum dp_set_led_status {
678 	DP_SET_LED_OK = 0,
679 	DP_SET_LED_INVALID_HANDLE,
680 	DP_SET_LED_ERROR
681 };
682 
683 
684 #define	DP_GET_ALARM_STATE	0x68
685 
686 typedef struct dp_get_alarm_state {
687 	dp_handle_t handle;	/* handle of an alarm relay */
688 				/* or <null handle> (0xffff) */
689 } dp_get_alarm_state_t;
690 
691 #define	DP_GET_ALARM_STATE_R	0x69
692 
693 typedef struct dp_alarm_state {
694 	dp_handle_t	handle;
695 	rsci8		sensor_status; 	/* tells whether the reading is */
696 					/* available or not */
697 	rsci8		state;
698 } dp_alarm_state_t;
699 
700 typedef struct dp_get_alarm_state_r {
701 	rsci8		num_alarms;
702 	dp_alarm_state_t	alarm_state[1];
703 } dp_get_alarm_state_r_t;
704 
705 /* ALARM states */
706 
707 enum dp_alarm_states {
708 	DP_ALARM_OFF = 0,
709 	DP_ALARM_ON
710 };
711 
712 #define	DP_SET_ALARM_STATE	0x6A
713 
714 typedef struct dp_set_alarm_state {
715 	dp_handle_t	handle;		/* handle of a ALARM */
716 	rsci8		state;
717 } dp_set_alarm_state_t;
718 
719 #define	DP_SET_ALARM_STATE_R	0x6B
720 typedef struct dp_set_alarm_state_r {
721 	rsci8		status;
722 } dp_set_alarm_state_r_t;
723 
724 enum dp_set_alarm_status {
725 	DP_SET_ALARM_OK = 0,
726 	DP_SET_ALARM_INVALID_HANDLE,
727 	DP_SET_ALARM_ERROR
728 };
729 
730 
731 #define	DP_SET_USER_WATCHDOG	0x60
732 #define	DP_SET_USER_WATCHDOG_R	0x6F
733 #define	DP_GET_USER_WATCHDOG	0x70
734 #define	DP_GET_USER_WATCHDOG_R	0x71
735 
736 #define	DP_USER_WATCHDOG_ENABLE		0x01
737 #define	DP_USER_WATCHDOG_DISABLE	0x00
738 
739 enum dp_user_watchdog_status {
740 	DP_USER_WDT_OK = 0,
741 	DP_USER_WDT_ERROR
742 };
743 
744 typedef struct dp_set_user_watchdog {
745 	rsci8 enable;	/* enable = 1 */
746 } dp_set_user_watchdog_t;
747 
748 typedef struct dp_set_user_watchdog_r {
749 	rsci8 status;
750 } dp_set_user_watchdog_r_t;
751 
752 typedef struct dp_get_user_watchdog_r {
753 	rsci8 enable;
754 } dp_get_user_watchdog_r_t;
755 
756 #define	DP_GET_VOLTS		0x42
757 
758 typedef struct dp_get_volts {
759 	dp_handle_t	handle;		/* handle of a voltage sensor */
760 } dp_get_volts_t;
761 
762 #define	DP_GET_VOLTS_R		0x43
763 
764 typedef rscis16		dp_volt_reading_t;	/* unit in mV */
765 
766 typedef struct dp_volt_status {
767 	dp_handle_t		handle;
768 	rsci8			sensor_status; 	/* tells whether the reading */
769 						/* is available or not */
770 	rsci8			status;		/* 0=ok, 1=error */
771 	dp_volt_reading_t	reading;	/* value in mV. */
772 	dp_volt_reading_t	low_warning;
773 	dp_volt_reading_t	low_soft_shutdown;
774 	dp_volt_reading_t	low_hard_shutdown;
775 	dp_volt_reading_t	high_warning;
776 	dp_volt_reading_t	high_soft_shutdown;
777 	dp_volt_reading_t	high_hard_shutdown;
778 
779 } dp_volt_status_t;
780 
781 typedef struct dp_get_volts_r {
782 	rsci8			num_volts;
783 	dp_volt_status_t	volt_status[1];
784 
785 } dp_get_volts_r_t;
786 
787 
788 #define	DP_GET_CIRCUIT_BRKS	0x62
789 
790 typedef struct dp_get_circuit_brks {
791 	dp_handle_t handle;	/* handle of a circuit breaker */
792 				/* or <null handle> (0xffff) */
793 } dp_get_circuit_brks_t;
794 
795 #define	DP_GET_CIRCUIT_BRKS_R	0x63
796 
797 typedef struct dp_circuit_brk_status {
798 	dp_handle_t	handle;
799 	rsci8		sensor_status; 	/* tells whether the reading is */
800 					/* available or not */
801 	rsci8		status;		/* 0=ok, 1=error */
802 
803 } dp_circuit_brk_status_t;
804 
805 typedef struct dp_get_circuit_brks_r {
806 	rsci8			num_circuit_brks;
807 	dp_circuit_brk_status_t	circuit_brk_status[1];
808 
809 } dp_get_circuit_brks_r_t;
810 
811 
812 #define	DP_SET_HOST_WATCHDOG	0x48
813 
814 typedef struct dp_set_host_watchdog {
815 	rsci8	enable;		/* 0=enable watchdog, 1=disable watchdog */
816 } dp_set_host_watchdog_t;
817 
818 
819 #define	DP_GET_HANDLE_NAME	0x4A
820 
821 typedef struct dp_get_handle_name {
822 	dp_handle_t	handle;
823 } dp_get_handle_name_t;
824 
825 #define	DP_GET_HANDLE_NAME_R	0x4B
826 
827 typedef struct dp_get_handle_name_r {
828 	dp_handle_t	handle;
829 	char 		name[DP_MAX_HANDLE_NAME];
830 } dp_get_handle_name_r_t;
831 
832 
833 #define	DP_GET_HANDLE		0x4C
834 
835 typedef struct dp_get_handle {
836 	char 		name[DP_MAX_HANDLE_NAME];
837 } dp_get_handle_t;
838 
839 #define	DP_GET_HANDLE_R		0x4D
840 
841 typedef struct dp_get_handle_r {
842 	dp_handle_t 	handle;
843 } dp_get_handle_r_t;
844 
845 
846 #define	DP_RMC_EVENTS		0x57
847 
848 typedef rsci16	dp_event_t;
849 
850 /*
851  * list of events
852  */
853 
854 enum rmc_events {
855 	RMC_INIT_EVENT	= 0x01,
856 	RMC_HPU_EVENT,
857 	RMC_ENV_EVENT,
858 	RMC_KEYSWITCH_EVENT,
859 	RMC_LOG_EVENT
860 };
861 
862 /*
863  * event data structures
864  */
865 enum rmc_hpu_events {
866 	RMC_HPU_INSERT_EVENT	= 0x20,
867 	RMC_HPU_REMOVE_EVENT,
868 	RMC_HPU_HWERROR_EVENT
869 };
870 
871 typedef struct dp_hpu_event {
872 	dp_handle_t	hpu_hdl;
873 	dp_event_t	sub_event;
874 
875 } dp_hpu_event_t;
876 
877 
878 enum rmc_env_events {
879 	RMC_ENV_WARNING_THRESHOLD_EVENT = 0x31,
880 	RMC_ENV_SHUTDOWN_THRESHOLD_EVENT,
881 	RMC_ENV_FAULT_EVENT,
882 	RMC_ENV_OK_EVENT
883 };
884 
885 typedef struct dp_env_event {
886 	dp_handle_t	env_hdl;
887 	dp_event_t	sub_event;
888 
889 } dp_env_event_t;
890 
891 
892 enum rmc_keyswitch_pos {
893 	RMC_KEYSWITCH_POS_UNKNOWN	= 0x00,
894 	RMC_KEYSWITCH_POS_NORMAL,
895 	RMC_KEYSWITCH_POS_DIAG,
896 	RMC_KEYSWITCH_POS_LOCKED,
897 	RMC_KEYSWITCH_POS_OFF
898 };
899 
900 typedef struct dp_keyswitch_event {
901 	rsci8	key_position;
902 } dp_keyswitch_event_t;
903 
904 
905 typedef struct dp_rmclog_event {
906 	int	log_record_size;
907 	rsci8	log_record[DP_MAX_LOGSIZE];
908 } dp_rmclog_event_t;
909 
910 typedef union dp_event_info {
911 	dp_hpu_event_t		ev_hpunot;
912 	dp_env_event_t		ev_envnot;
913 	dp_keyswitch_event_t	ev_keysw;
914 	dp_rmclog_event_t	ev_rmclog;
915 } dp_event_info_t;
916 
917 typedef struct dp_event_notification {
918 	dp_event_t	event;
919 	rsci32		event_seqno; 	/* event sequence number */
920 	rsci32		timestamp;	/* timestamp of the event */
921 	dp_event_info_t	event_info;	/* event information */
922 } dp_event_notification_t;
923 
924 #define	DP_RMC_EVENTS_R		0x5F
925 
926 typedef struct dp_event_notification_r {
927 	rsci32		event_seqno; 	/* event sequence number */
928 } dp_event_notification_r_t;
929 
930 #ifdef	__cplusplus
931 }
932 #endif
933 
934 #endif	/* _SYS_RMC_COMM_HPROTO_H */
935