1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21/*
22 * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
23 * Use is subject to license terms.
24 */
25
26#ifndef	_SBD_IOCTL_H
27#define	_SBD_IOCTL_H
28
29#ifndef	_ASM
30#include <sys/types.h>
31#include <sys/obpdefs.h>
32#include <sys/processor.h>
33#include <sys/param.h>
34#endif
35
36#ifdef	__cplusplus
37extern "C" {
38#endif
39
40#ifndef	_ASM
41typedef enum {
42	SBD_COMP_NONE,
43	SBD_COMP_CPU,
44	SBD_COMP_MEM,
45	SBD_COMP_IO,
46	SBD_COMP_CMP,
47	SBD_COMP_UNKNOWN
48} sbd_comp_type_t;
49
50typedef enum {
51	SBD_STAT_NONE = 0,
52	SBD_STAT_EMPTY,
53	SBD_STAT_DISCONNECTED,
54	SBD_STAT_CONNECTED,
55	SBD_STAT_UNCONFIGURED,
56	SBD_STAT_CONFIGURED
57} sbd_state_t;
58
59typedef enum {
60	SBD_COND_UNKNOWN = 0,
61	SBD_COND_OK,
62	SBD_COND_FAILING,
63	SBD_COND_FAILED,
64	SBD_COND_UNUSABLE
65} sbd_cond_t;
66
67typedef	int	sbd_busy_t;
68
69#define	SBD_MAX_UNSAFE		16
70#define	SBD_TYPE_LEN		12
71#define	SBD_NULL_UNIT		-1
72
73typedef struct {
74	sbd_comp_type_t	c_type;
75	int		c_unit;
76	char		c_name[OBP_MAXPROPNAME];
77} sbd_comp_id_t;
78
79typedef struct {
80	sbd_comp_id_t	c_id;
81	sbd_state_t	c_ostate;
82	sbd_cond_t	c_cond;
83	sbd_busy_t	c_busy;
84	uint_t		c_sflags;
85	time_t		c_time;
86} sbd_cm_stat_t;
87
88#define	ci_type		c_id.c_type
89#define	ci_unit		c_id.c_unit
90#define	ci_name		c_id.c_name
91
92typedef struct {
93	sbd_cm_stat_t	cs_cm;
94	int		cs_isbootproc;
95	processorid_t	cs_cpuid;
96	int		cs_speed;
97	int		cs_ecache;
98} sbd_cpu_stat_t;
99
100#define	cs_type		cs_cm.ci_type
101#define	cs_unit		cs_cm.ci_unit
102#define	cs_name		cs_cm.ci_name
103#define	cs_ostate	cs_cm.c_ostate
104#define	cs_cond		cs_cm.c_cond
105#define	cs_busy		cs_cm.c_busy
106#define	cs_suspend	cs_cm.c_sflags
107#define	cs_time		cs_cm.c_time
108
109typedef struct {
110	sbd_cm_stat_t	ms_cm;
111	int		ms_interleave;
112	pfn_t		ms_basepfn;
113	pgcnt_t		ms_totpages;
114	pgcnt_t		ms_detpages;
115	pgcnt_t		ms_pageslost;
116	pgcnt_t		ms_managed_pages;
117	pgcnt_t		ms_noreloc_pages;
118	pgcnt_t		ms_noreloc_first;
119	pgcnt_t		ms_noreloc_last;
120	int		ms_cage_enabled;
121	int		ms_peer_is_target;	/* else peer is source */
122	char		ms_peer_ap_id[MAXPATHLEN];	/* board's AP name */
123} sbd_mem_stat_t;
124
125#define	ms_type		ms_cm.ci_type
126#define	ms_unit		ms_cm.ci_unit
127#define	ms_name		ms_cm.ci_name
128#define	ms_ostate	ms_cm.c_ostate
129#define	ms_cond		ms_cm.c_cond
130#define	ms_busy		ms_cm.c_busy
131#define	ms_suspend	ms_cm.c_sflags
132#define	ms_time		ms_cm.c_time
133
134typedef struct {
135	sbd_cm_stat_t	is_cm;
136	int		is_referenced;
137	int		is_unsafe_count;
138	int		is_unsafe_list[SBD_MAX_UNSAFE];
139	char		is_pathname[MAXPATHLEN];
140} sbd_io_stat_t;
141
142#define	is_type		is_cm.ci_type
143#define	is_unit		is_cm.ci_unit
144#define	is_name		is_cm.ci_name
145#define	is_ostate	is_cm.c_ostate
146#define	is_cond		is_cm.c_cond
147#define	is_busy		is_cm.c_busy
148#define	is_suspend	is_cm.c_sflags
149#define	is_time		is_cm.c_time
150
151/* This constant must be the max of the max cores on all platforms */
152
153#define	SBD_MAX_CORES_PER_CMP	8
154
155typedef struct {
156	sbd_cm_stat_t	ps_cm;
157	processorid_t	ps_cpuid[SBD_MAX_CORES_PER_CMP];
158	int		ps_ncores;
159	int		ps_speed;
160	int		ps_ecache;
161} sbd_cmp_stat_t;
162
163#define	ps_type		ps_cm.ci_type
164#define	ps_unit		ps_cm.ci_unit
165#define	ps_name		ps_cm.ci_name
166#define	ps_ostate	ps_cm.c_ostate
167#define	ps_cond		ps_cm.c_cond
168#define	ps_busy		ps_cm.c_busy
169#define	ps_suspend	ps_cm.c_sflags
170#define	ps_time		ps_cm.c_time
171
172typedef union {
173	sbd_cm_stat_t	d_cm;
174	sbd_cpu_stat_t	d_cpu;
175	sbd_mem_stat_t	d_mem;
176	sbd_io_stat_t	d_io;
177	sbd_cmp_stat_t	d_cmp;
178} sbd_dev_stat_t;
179
180#define	ds_type		d_cm.ci_type
181#define	ds_unit		d_cm.ci_unit
182#define	ds_name		d_cm.ci_name
183#define	ds_ostate	d_cm.c_ostate
184#define	ds_cond		d_cm.c_cond
185#define	ds_busy		d_cm.c_busy
186#define	ds_suspend	d_cm.c_sflags
187#define	ds_time		d_cm.c_time
188
189#define	SBD_MAX_INFO	64
190
191typedef struct {
192	int		s_board;
193	char		s_type[SBD_TYPE_LEN];
194	char		s_info[SBD_MAX_INFO];
195	sbd_state_t	s_rstate;
196	sbd_state_t	s_ostate;
197	sbd_cond_t	s_cond;
198	sbd_busy_t	s_busy;
199	time_t		s_time;
200	uint_t		s_power:1;
201	uint_t		s_assigned:1;
202	uint_t		s_platopts;
203	int		s_nstat;
204	sbd_dev_stat_t	s_stat[1];
205} sbd_stat_t;
206
207typedef struct {
208	sbd_comp_id_t	c_id;
209	uint_t		c_flags;
210	int		c_len;
211	caddr_t		c_opts;
212} sbd_cm_cmd_t;
213
214typedef struct {
215	sbd_cm_cmd_t	g_cm;
216	int		g_ncm;
217} sbd_getncm_cmd_t;
218
219typedef struct {
220	sbd_cm_cmd_t	s_cm;
221	int		s_nbytes;
222	caddr_t		s_statp;
223} sbd_stat_cmd_t;
224
225typedef union {
226	sbd_cm_cmd_t		cmd_cm;
227	sbd_getncm_cmd_t	cmd_getncm;
228	sbd_stat_cmd_t		cmd_stat;
229} sbd_cmd_t;
230
231typedef struct {
232	int		e_code;
233	char		e_rsc[MAXPATHLEN];
234} sbd_error_t;
235
236typedef struct {
237	sbd_cmd_t	i_cmd;
238	sbd_error_t	i_err;
239} sbd_ioctl_arg_t;
240
241typedef struct {
242	int		t_base;
243	int		t_bnd;
244	char		**t_text;
245} sbd_etab_t;
246
247#define	i_flags		i_cmd.cmd_cm.c_flags
248#define	i_len		i_cmd.cmd_cm.c_len
249#define	i_opts		i_cmd.cmd_cm.c_opts
250#define	ic_type		i_cmd.cmd_cm.ci_type
251#define	ic_name		i_cmd.cmd_cm.ci_name
252#define	ic_unit		i_cmd.cmd_cm.ci_unit
253#define	ie_code		i_err.e_code
254#define	ie_rsc		i_err.e_rsc
255
256#define	_SBD_IOC		(('D' << 16) | ('R' << 8))
257
258#define	SBD_CMD_ASSIGN		(_SBD_IOC | 0x01)
259#define	SBD_CMD_UNASSIGN	(_SBD_IOC | 0x02)
260#define	SBD_CMD_POWERON		(_SBD_IOC | 0x03)
261#define	SBD_CMD_POWEROFF	(_SBD_IOC | 0x04)
262#define	SBD_CMD_TEST		(_SBD_IOC | 0x05)
263#define	SBD_CMD_CONNECT		(_SBD_IOC | 0x06)
264#define	SBD_CMD_CONFIGURE	(_SBD_IOC | 0x07)
265#define	SBD_CMD_UNCONFIGURE	(_SBD_IOC | 0x08)
266#define	SBD_CMD_DISCONNECT	(_SBD_IOC | 0x09)
267#define	SBD_CMD_STATUS		(_SBD_IOC | 0x0a)
268#define	SBD_CMD_GETNCM		(_SBD_IOC | 0x0b)
269#define	SBD_CMD_PASSTHRU	(_SBD_IOC | 0x0c)
270
271#define	SBD_CHECK_SUSPEND(cmd, c_sflags) \
272		(((c_sflags) >> (((cmd) & 0xf) - 1)) & 0x01)
273
274#define	SBD_SET_SUSPEND(cmd, c_sflags) \
275		((c_sflags) |= (0x01 << (((cmd) & 0xf) - 1)))
276
277#define	SBD_CHECK_PLATOPTS(cmd, c_platopts) \
278		(((c_platopts) >> (((cmd) & 0xf) - 1)) & 0x01)
279
280#define	SBD_SET_PLATOPTS(cmd, c_platopts) \
281		((c_platopts) &= ~(0x01 << (((cmd) & 0xf) - 1)))
282
283#define	SBD_FLAG_FORCE		0x1
284#define	SBD_FLAG_ALLCMP		0x2
285#define	SBD_FLAG_QUIESCE_OKAY	0x4
286
287#if defined(_SYSCALL32)
288
289typedef struct {
290	int32_t		c_type;
291	int32_t		c_unit;
292	char		c_name[OBP_MAXPROPNAME];
293} sbd_comp_id32_t;
294
295typedef struct {
296	sbd_comp_id32_t	c_id;
297	int32_t		c_ostate;
298	int32_t		c_cond;
299	int32_t		c_busy;
300	uint32_t	c_sflags;
301	time32_t	c_time;
302} sbd_cm_stat32_t;
303
304typedef struct {
305	sbd_cm_stat32_t	cs_cm;
306	int32_t		cs_isbootproc;
307	int32_t		cs_cpuid;
308	int32_t		cs_speed;
309	int32_t		cs_ecache;
310} sbd_cpu_stat32_t;
311
312typedef struct {
313	sbd_cm_stat32_t	ms_cm;
314	int32_t		ms_interleave;
315	uint32_t	ms_basepfn;
316	uint32_t	ms_totpages;
317	uint32_t	ms_detpages;
318	int32_t		ms_pageslost;
319	uint32_t	ms_managed_pages;
320	uint32_t	ms_noreloc_pages;
321	uint32_t	ms_noreloc_first;
322	uint32_t	ms_noreloc_last;
323	int32_t		ms_cage_enabled;
324	int32_t		ms_peer_is_target;
325	char		ms_peer_ap_id[MAXPATHLEN];
326} sbd_mem_stat32_t;
327
328typedef struct {
329	sbd_cm_stat32_t	is_cm;
330	int32_t		is_referenced;
331	int32_t		is_unsafe_count;
332	int32_t		is_unsafe_list[SBD_MAX_UNSAFE];
333	char		is_pathname[MAXPATHLEN];
334} sbd_io_stat32_t;
335
336typedef struct {
337	sbd_cm_stat32_t	ps_cm;
338	int32_t		ps_cpuid[SBD_MAX_CORES_PER_CMP];
339	int32_t		ps_ncores;
340	int32_t		ps_speed;
341	int32_t		ps_ecache;
342} sbd_cmp_stat32_t;
343
344typedef union {
345	sbd_cm_stat32_t		d_cm;
346	sbd_cpu_stat32_t	d_cpu;
347	sbd_mem_stat32_t	d_mem;
348	sbd_io_stat32_t		d_io;
349	sbd_cmp_stat32_t	d_cmp;
350} sbd_dev_stat32_t;
351
352typedef struct {
353	int32_t			s_board;
354	char			s_type[SBD_TYPE_LEN];
355	char			s_info[SBD_MAX_INFO];
356	int32_t			s_rstate;
357	int32_t			s_ostate;
358	int32_t			s_cond;
359	int32_t			s_busy;
360	time32_t		s_time;
361	uint32_t		s_power:1;
362	uint32_t		s_assigned:1;
363	uint32_t		s_platopts;
364	int32_t			s_nstat;
365	sbd_dev_stat32_t	s_stat[1];
366} sbd_stat32_t;
367
368typedef struct {
369	int32_t			e_code;
370	char			e_rsc[MAXPATHLEN];
371} sbd_error32_t;
372
373typedef struct {
374	sbd_comp_id32_t		c_id;
375	uint32_t		c_flags;
376	int32_t			c_len;
377	caddr32_t		c_opts;
378} sbd_cm_cmd32_t;
379
380typedef struct {
381	sbd_cm_cmd32_t	g_cm;
382	int32_t		g_ncm;
383} sbd_getncm_cmd32_t;
384
385typedef struct {
386	sbd_cm_cmd32_t	s_cm;
387	int32_t		s_nbytes;
388	caddr32_t	s_statp;
389} sbd_stat_cmd32_t;
390
391typedef union {
392	sbd_cm_cmd32_t		cmd_cm;
393	sbd_getncm_cmd32_t	cmd_getncm;
394	sbd_stat_cmd32_t	cmd_stat;
395} sbd_cmd32_t;
396
397typedef struct {
398	sbd_cmd32_t		i_cmd;
399	sbd_error32_t		i_err;
400} sbd_ioctl_arg32_t;
401
402typedef struct {
403	int32_t			t_base;
404	int32_t			t_bnd;
405	char			**t_text;
406} sbd_etab32_t;
407
408#endif	/* _SYSCALL32 */
409#endif	/* _ASM */
410
411/* Common error codes */
412
413#define	ESBD_NOERROR		0	/* no error */
414#define	ESBD_INTERNAL		1	/* Internal error */
415#define	ESBD_NOMEM		2	/* Insufficient memory */
416#define	ESBD_PROTO		3	/* Protocol error */
417#define	ESBD_BUSY		4	/* Device busy */
418#define	ESBD_NODEV		5	/* No such device */
419#define	ESBD_ALREADY		6	/* Operation already in progress */
420#define	ESBD_IO			7	/* I/O error */
421#define	ESBD_FAULT		8	/* Bad address */
422#define	ESBD_EMPTY_BD		9	/* No device(s) on board */
423#define	ESBD_INVAL		10	/* Invalid argument */
424#define	ESBD_STATE		11	/* Invalid state transition */
425#define	ESBD_FATAL_STATE	12	/* Device in fatal state */
426#define	ESBD_OUTSTANDING	13	/* Outstanding error */
427#define	ESBD_SUSPEND		14	/* Device failed to suspend */
428#define	ESBD_RESUME		15	/* Device failed to resume */
429#define	ESBD_UTHREAD		16	/* Cannot stop user thread */
430#define	ESBD_RTTHREAD		17	/* Cannot quiesce realtime thread */
431#define	ESBD_KTHREAD		18	/* Cannot stop kernel thread  */
432#define	ESBD_OFFLINE		19	/* Failed to off-line */
433#define	ESBD_ONLINE		20	/* Failed to on-line */
434#define	ESBD_CPUSTART		21	/* Failed to start CPU */
435#define	ESBD_CPUSTOP		22	/* Failed to stop CPU */
436#define	ESBD_INVAL_COMP		23	/* Invalid component type */
437#define	ESBD_KCAGE_OFF		24	/* Kernel cage is disabled */
438#define	ESBD_NO_TARGET		25	/* No available memory target */
439#define	ESBD_HW_PROGRAM		26	/* Hardware programming error */
440#define	ESBD_MEM_NOTVIABLE	27	/* VM viability test failed */
441#define	ESBD_MEM_REFUSED	28	/* Memory operation refused */
442#define	ESBD_MEM_NONRELOC	29	/* Non-relocatable pages in span */
443#define	ESBD_MEM_CANCELLED	30	/* Memory operation cancelled */
444#define	ESBD_MEMFAIL		31	/* Memory operation failed */
445#define	ESBD_MEMONLINE		32	/* Can't unconfig cpu if mem online */
446#define	ESBD_QUIESCE_REQD	33
447	/* Operator confirmation for quiesce is required */
448#define	ESBD_MEMINTLV		34
449	/* Memory is interleaved across boards */
450#define	ESBD_CPUONLINE		35
451	/* Can't config memory if not all cpus are online */
452#define	ESBD_UNSAFE		36	/* Unsafe driver present */
453#define	ESBD_INVAL_OPT		37	/* option invalid */
454
455/* Starcat error codes */
456
457#define	ESTC_NONE		1000	/* No error */
458#define	ESTC_GETPROP		1001	/* Cannot read property value */
459#define	ESTC_BNUM		1002	/* Invalid board number */
460#define	ESTC_CONFIGBUSY		1003
461	/* Cannot proceed; Board is configured or busy */
462#define	ESTC_PROBE		1004	/* Solaris failed to probe */
463#define	ESTC_DEPROBE		1005	/* Solaris failed to deprobe */
464#define	ESTC_MOVESIGB		1006	/* Firmware move-cpu0 failed */
465#define	ESTC_SUPPORT		1007	/* Operation not supported */
466#define	ESTC_DRVFAIL		1008	/* Device driver failure */
467#define	ESTC_UNKPTCMD		1012	/* Unrecognized platform command */
468#define	ESTC_NOTID		1013
469	/* drmach parameter is not a valid ID */
470#define	ESTC_INAPPROP		1014
471	/* drmach parameter is inappropriate for operation */
472#define	ESTC_INTERNAL		1015	/* Unexpected internal condition */
473#define	ESTC_MBXRQST		1016
474	/* Mailbox framework failure: outgoing */
475#define	ESTC_MBXRPLY		1017
476	/* Mailbox framework failure: incoming */
477#define	ESTC_NOACL		1018	/* Board is not in domain ACL */
478#define	ESTC_NOT_ASSIGNED	1019	/* Board is not assigned to domain */
479#define	ESTC_NOT_ACTIVE		1020	/* Board is not active */
480#define	ESTC_EMPTY_SLOT		1021	/* Slot is empty */
481#define	ESTC_POWER_OFF		1022	/* Board is powered off */
482#define	ESTC_TEST_IN_PROGRESS	1023	/* Board is already being tested */
483#define	ESTC_TESTING_BUSY	1024
484	/* Wait: All SC test resources are in use */
485#define	ESTC_TEST_REQUIRED	1025	/* Board requires test prior to use */
486#define	ESTC_TEST_ABORTED	1026	/* Board test has been aborted */
487#define	ESTC_MBOX_UNKNOWN	1027
488	/* Unknown error type received from SC */
489#define	ESTC_TEST_STATUS_UNKNOWN	1028
490	/* Test completed with unknown status */
491#define	ESTC_TEST_RESULT_UNKNOWN	1029
492	/* Unknown test result returned by SC */
493#define	ESTC_TEST_FAILED	1030
494	/* SMS hpost reported error, see POST log for details */
495#define	ESTC_UNAVAILABLE	1031	/* Slot is unavailable to the domain */
496#define	ESTC_NZ_LPA		1032	/* Nonzero LPA not yet supported */
497#define	ESTC_IOSWITCH		1033
498	/* Cannot unconfigure I/O board: tunnel switch failed */
499#define	ESTC_IOCAGE_NO_CPU_AVAIL	1034
500	/* No CPU available for I/O cage test. */
501#define	ESTC_SMS_ERR_RECOVERABLE	1035
502	/* SMS reported recoverable error: check SMS status and Retry */
503#define	ESTC_SMS_ERR_UNRECOVERABLE	1036
504	/* SMS reported unrecoverable error: Board is Unusable */
505#define	ESTC_NWSWITCH		1037
506	/* Cannot unconfigure I/O board: network switch failed */
507
508/* Starfire error codes */
509
510#define	ESTF_NONE		2000	/* No error */
511#define	ESTF_GETPROP		2001	/* Cannot read property value */
512#define	ESTF_GETPROPLEN		2002	/* Cannot determine property length */
513#define	ESTF_BNUM		2003	/* Invalid board number */
514#define	ESTF_CONFIGBUSY		2004
515	/* Cannot proceed; Board is configured or busy */
516#define	ESTF_NOCPUID		2005	/* No CPU specified for connect */
517#define	ESTF_PROBE		2006	/* Firmware probe failed */
518#define	ESTF_DEPROBE		2007	/* Firmware deprobe failed */
519#define	ESTF_MOVESIGB		2008	/* Firmware move-cpu0 failed */
520#define	ESTF_JUGGLE		2009	/* Cannot move SIGB assignment */
521#define	ESTF_HASSIGB		2010
522	/* Cannot disconnect CPU; SIGB is currently assigned */
523#define	ESTF_SUPPORT		2011	/* Operation not supported */
524#define	ESTF_DRVFAIL		2012	/* Device driver failure */
525#define	ESTF_SETCPUVAL		2013
526	/* Must specify a CPU on the given board */
527#define	ESTF_NODEV		2014	/* No such device */
528#define	ESTF_INTERBOARD		2015
529	/* Memory configured with inter-board interleaving */
530#define	ESTF_UNKPTCMD		2016	/* Unrecognized platform command */
531#define	ESTF_NOTID		2017	/* drmach parameter is not a valid ID */
532#define	ESTF_INAPPROP		2018
533	/* drmach parameter is inappropriate for operation */
534#define	ESTF_INTERNAL		2019	/* Unexpected internal condition */
535
536/* Daktari error codes */
537
538#define	EDAK_NONE		3000	/* no error */
539#define	EDAK_INTERNAL		3001	/* Internal error */
540#define	EDAK_NOFRUINFO		3002	/* Didn't receive fru info */
541#define	EDAK_NONDR_BOARD	3003
542	/* DR is not supported on this board type */
543#define	EDAK_POWERON		3004	/* Power on request failed */
544#define	EDAK_POWEROK		3005	/* Failed to power on */
545#define	EDAK_INTERRUPTED	3006	/* Operation interrupted */
546#define	EDAK_BOARDINIT		3007	/* Board initialization failed */
547#define	EDAK_CPUINIT		3008	/* CPU intialization failed */
548#define	EDAK_MEMFAIL		3009	/* Memory operation failed */
549
550/* Serengeti error codes */
551
552#define	ESGT_NONE		4000	/* no error */
553#define	ESGT_INTERNAL		4001	/* Internal error */
554#define	ESGT_INVAL		4002	/* Invalid argument */
555#define	ESGT_MEMFAIL		4003	/* Memory operation failed */
556#define	ESGT_PROBE		4004	/* Board probe failed */
557#define	ESGT_DEPROBE		4005	/* Board deprobe failed */
558#define	ESGT_JUGGLE_BOOTPROC	4006	/* Failed to juggle bootproc */
559#define	ESGT_NOT_CPUTYPE	4007	/* Not a cpu device */
560#define	ESGT_NO_DEV_TYPE	4008	/* Cannot find device type */
561#define	ESGT_BAD_PORTID		4009	/* Bad port id */
562#define	ESGT_RESUME		4010	/* Failed to resume device */
563#define	ESGT_SUSPEND		4011	/* Failed to suspend device */
564#define	ESGT_KTHREAD		4012	/* failed to stop kernel thd */
565#define	ESGT_UNSAFE		4013	/* unsafe */
566#define	ESGT_RTTHREAD		4014	/* real time threads */
567#define	ESGT_UTHREAD		4015	/* failed to stop user thd */
568#define	ESGT_PROM_ATTACH	4016	/* prom failed attach board */
569#define	ESGT_PROM_DETACH	4017	/* prom failed detach board */
570#define	ESGT_SC_ERR		4018	/* sc return a failure */
571#define	ESGT_GET_BOARD_STAT	4019	/* Failed to obtain board information */
572#define	ESGT_WAKEUPCPU		4020	/* Failed to wake up cpu */
573#define	ESGT_STOPCPU		4021	/* Failed to stop cpu */
574/* Serengeti SC return codes */
575#define	ESGT_HW_FAIL		4022	/* Hardware Failure */
576#define	ESGT_BD_ACCESS		4023	/* Board access denied */
577#define	ESGT_STALE_CMP		4024	/* Stale components */
578#define	ESGT_STALE_OBJ		4025	/* Stale objects */
579#define	ESGT_NO_SEPROM_SPACE	4026	/* No SEPROM space */
580#define	ESGT_NOT_SUPP		4027	/* Operation not supported */
581#define	ESGT_NO_MEM		4028	/* No Memory */
582
583/* OPL error codes */
584
585#define	EOPL_GETPROP		5001	/* Cannot read property value */
586#define	EOPL_BNUM		5002	/* Invalid board number */
587#define	EOPL_CONFIGBUSY		5003
588	/* Cannot proceed; Board is configured or busy */
589#define	EOPL_PROBE		5004	/* Firmware probe failed */
590#define	EOPL_DEPROBE		5005	/* Firmware deprobe failed */
591#define	EOPL_SUPPORT		5006	/* Operation not supported */
592#define	EOPL_DRVFAIL		5007	/* Device driver failure */
593#define	EOPL_UNKPTCMD		5008	/* Unrecognized platform command */
594#define	EOPL_NOTID		5009	/* drmach parameter is not a valid ID */
595#define	EOPL_INAPPROP		5010
596	/* drmach parameter is inappropriate for operation */
597#define	EOPL_INTERNAL		5011	/* Unexpected internal condition */
598#define	EOPL_FINDDEVICE		5012	/* Firmware cannot find node. */
599#define	EOPL_MC_SETUP		5013	/* Cannot setup memory node */
600#define	EOPL_CPU_STATE		5014	/* Invalid CPU/core state */
601#define	EOPL_MC_OPL		5015	/* Cannot find mc-opl interface */
602#define	EOPL_SCF_FMEM		5016	/* Cannot find scf_fmem interface */
603#define	EOPL_FMEM_SETUP		5017	/* Error setting up FMEM buffer */
604#define	EOPL_SCF_FMEM_START	5018	/* scf_fmem_start error */
605#define	EOPL_FMEM_ERROR		5019	/* FMEM error */
606#define	EOPL_SCF_FMEM_CANCEL	5020	/* scf_fmem_cancel error */
607#define	EOPL_FMEM_XC_TIMEOUT	5021	/* xcall timeout */
608#define	EOPL_FMEM_COPY_TIMEOUT	5022	/* DR parellel copy timeout */
609#define	EOPL_FMEM_SCF_BUSY	5023	/* SCF busy */
610#define	EOPL_FMEM_RETRY_OUT	5024	/* SCF IO Retry Error */
611#define	EOPL_FMEM_TIMEOUT	5025	/* FMEM command timeout */
612#define	EOPL_FMEM_HW_ERROR	5026	/* Hardware error */
613#define	EOPL_FMEM_TERMINATE	5027	/* FMEM operation Terminated */
614#define	EOPL_FMEM_COPY_ERROR	5028	/* Memory copy error */
615#define	EOPL_FMEM_SCF_ERR	5029	/* SCF error */
616#define	EOPL_MIXED_CPU		5030
617	/* Cannot add SPARC64-VI to domain booted with all SPARC64-VII CPUs */
618#define	EOPL_FMEM_SCF_OFFLINE	5031	/* SCF OFFLINE */
619
620#ifdef	__cplusplus
621}
622#endif
623
624#endif	/* _SBD_IOCTL_H */
625