summaryrefslogtreecommitdiff
path: root/usr/src/uts/sun/sys/obpdefs.h
blob: 2a9fb15989d08566fcf5f4222419666916a1f0be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef	_SYS_OBPDEFS_H
#define	_SYS_OBPDEFS_H

#pragma ident	"%Z%%M%	%I%	%E% SMI"

#ifdef	__cplusplus
extern "C" {
#endif

#define	OBP_PSEUDO_ROMVEC_VERSION	5555

typedef	int		ihandle_t;
typedef	int		phandle_t;
typedef	phandle_t	pnode_t;

/*
 * Device type matching
 */

#define	OBP_NONODE	((pnode_t)0)
#define	OBP_BADNODE	((pnode_t)-1)

/*
 * Property Defines
 */

#define	OBP_NAME		"name"
#define	OBP_REG			"reg"
#define	OBP_INTR		"intr"
#define	OBP_RANGES		"ranges"
#define	OBP_INTERRUPTS		"interrupts"
#define	OBP_COMPATIBLE		"compatible"
#define	OBP_STATUS		"status"
#define	OBP_BOARDNUM		"board#"

#define	OBP_MAC_ADDR		"mac-address"
#define	OBP_STDINPATH		"stdin-path"
#define	OBP_STDOUTPATH		"stdout-path"
#define	OBP_IDPROM		"idprom"

#define	OBP_DEVICETYPE		"device_type"
#define	OBP_DISPLAY		"display"
#define	OBP_DISPLAY_CONSOLE	"console"
#define	OBP_NETWORK		"network"
#define	OBP_BYTE		"byte"
#define	OBP_BLOCK		"block"
#define	OBP_SERIAL		"serial"
#define	OBP_HIERARCHICAL	"hierarchical"
#define	OBP_IPI			"ipi3"
#define	OBP_CPU			"cpu"
#define	OBP_ADDRESS		"address"
#define	OBP_SIZE		"size"
#define	OBP_ALLOCSIZE		"alloc-size"

/*
 * OBP status values defines
 */
#define	OBP_ST_OKAY		"okay"
#define	OBP_ST_DISABLED		"disabled"
#define	OBP_ST_FAIL		"fail"

/*
 * Max size of a path component and a property name (not value)
 * These are standard definitions.
 */
#define	OBP_MAXDRVNAME		32	/* defined in P1275 */
#define	OBP_MAXPROPNAME		32	/* defined in P1275 */

/*
 * NB: Max pathname length is a platform-dependent parameter.
 * Also note that this parameter is used to define the crpconfig
 * structure in cpr.h. The cprconfig structure is currently
 * consumed by other consolidations. Care should be take before
 * changing this parameter value.
 */
#define	OBP_MAXPATHLEN		256	/* Platform dependent */

/*
 *  Every OBP node must have a `/' followed by at least 2 chars,
 *  so we can deduce the maxdepth of any OBP tree to be
 *  OBP_MAXPATHNAME/3.  This is a good first swag.
 */

#define	OBP_STACKDEPTH		(OBP_MAXPATHLEN/3)

#define	ROMVEC_BLKSIZE		512	/* XXX */

/*
 *  OBP Module mailbox messages for MP's
 *
 *	00..7F	: power-on self test
 *
 *	80..8F	: active in boot prom (at the "ok" prompt)
 *
 *	90..EF  : idle in boot prom
 *
 *	F0	: active in application
 *
 *	F1..FA	: reserved for future use
 *
 *	FB	: One processor exited to the PROM via op_exit(),
 *		  call to prom_stopcpu() requested.
 *
 *	FC	: One processor entered the PROM via op_enter(),
 *		  call to prom_idlecpu() requested.
 *
 *	FD	: One processor hit a BREAKPOINT,
 *		  call to prom_idlecpu() requested.
 *
 *	FE	: One processor got a WATCHDOG RESET
 *		  call to prom_stopcpu() requested.
 *
 *	FF	: This processor not available.
 *
 */

#define	OBP_MB_IDLE_LOW		((unsigned char)(0x90))
#define	OBP_MB_IDLE_HIGH	((unsigned char)(0xef))

#define	OBP_MB_IS_IDLE(s)	(((s) >= OBP_MB_IDLE_LOW) && \
				    ((s) <= OBP_MB_IDLE_HIGH))

#define	OBP_MB_ACTIVE		((unsigned char)(0xf0))
#define	OBP_MB_EXIT_STOP	((unsigned char)(0xfb))
#define	OBP_MB_ENTER_IDLE	((unsigned char)(0xfc))
#define	OBP_MB_BRKPT_IDLE	((unsigned char)(0xfd))
#define	OBP_MB_WATCHDOG_STOP	((unsigned char)(0xfe))

/*
 * The possible values for "*romp->v_insource" and "*romp->v_outsink" are
 * listed below.  These may be extended in the future.  Your program should
 * cope with this gracefully (e.g. by continuing to vector through the ROM
 * I/O routines if these are set in a way you don't understand).
 */
#define	INKEYB		0	/* Input from parallel keyboard. */
#define	INUARTA		1	/* Input or output to Uart A.	*/
#define	INUARTB		2	/* Input or output to Uart B.	*/
#define	INUARTC		3	/* Input or output to Uart C.	*/
#define	INUARTD		4	/* Input or output to Uart D.	*/
#define	OUTSCREEN	0	/* Output to frame buffer.	*/
#define	OUTUARTA	1	/* Input or output to Uart A.	*/
#define	OUTUARTB	2	/* Input or output to Uart B.	*/
#define	OUTUARTC	3	/* Input or output to Uart C.	*/
#define	OUTUARTD	4	/* Input or output to Uart D.	*/

/*
 * Structure set up by the boot command to pass arguments to the booted
 * program.
 */
struct bootparam {
	char	*bp_argv[8];	/* String arguments.			*/
	char	bp_strings[100]; /* String table for string arguments.	*/
	char	bp_dev[2];	/* Device name.				*/
	int	bp_ctlr;	/* Controller Number.			*/
	int	bp_unit;	/* Unit Number.				*/
	int	bp_part;	/* Partition/file Number.		*/
	char	*bp_name;	/* File name.  Points into "bp_strings"	*/
	struct boottab *bp_boottab; /* Points to table entry for device	*/
};

#ifdef	__cplusplus
}
#endif

#endif	/* _SYS_OBPDEFS_H */