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, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef	_PICLDEVTREE_H
28 #define	_PICLDEVTREE_H
29 
30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
31 
32 #ifdef	__cplusplus
33 extern "C" {
34 #endif
35 
36 #include "picldefs.h"
37 
38 #define	DEVICE_TYPE_BLOCK	"block"
39 #define	DEVICE_TYPE_BYTE	"byte"
40 #define	DEVICE_TYPE_DISK	"disk"
41 #define	DEVICE_TYPE_SES		"ses"
42 #define	DEVICE_TYPE_FP		"fp"
43 
44 #define	HASH_TABLE_SIZE		64
45 #define	HASH_INDEX(s, x)	((int)((x) & ((s) - 1)))
46 
47 #define	MAX_NAMEVAL_SIZE	80
48 #define	CONFFILE_LINELEN_MAX	1024
49 
50 #define	KSTAT_STATE_BEGIN	"state_begin"
51 #define	KSTAT_CPU_INFO		"cpu_info"
52 #define	ASR_DISABLED		"disabled"
53 #define	ASR_FAILED		"failed"
54 
55 #define	DEVTREE_CONFFILE_NAME		"picldevtree.conf"
56 #define	ASRTREE_CONFFILE_NAME		"picl_asr.conf"
57 #define	CONFFILE_COMMENT_CHAR		'#'
58 
59 /*
60  * Constants
61  */
62 #define	FFB_MANUF_BUFSIZE	256
63 #define	SUPPORTED_NUM_CELL_SIZE	2	/* #size-cells */
64 #define	MAX_STATE_SIZE			32
65 
66 /*
67  * Hash table structure
68  */
69 typedef struct hash_elem {
70 	picl_nodehdl_t		hdl;
71 	struct hash_elem	*next;
72 } hash_elem_t;
73 
74 typedef struct {
75 	int			hash_size;
76 	hash_elem_t		**tbl;
77 } hash_t;
78 
79 /*
80  * name to class map entries in the conf file
81  */
82 typedef struct conf_entries {
83 	char			*name;
84 	char			*piclclass;
85 	struct conf_entries	*next;
86 } conf_entries_t;
87 
88 /*
89  * name to address to class map for asr2
90  */
91 typedef struct asr_conf_entries {
92 	char			*name;
93 	char			*piclclass;
94 	char			*status;
95 	char			*address;
96 	char			*props;
97 	struct asr_conf_entries	*next;
98 } asr_conf_entries_t;
99 
100 /*
101  * type, name, val property triplet for asr2
102  */
103 typedef struct asr_prop_triplet {
104 	char			*proptype;
105 	char			*propname;
106 	char			*propval;
107 } asr_prop_triplet_t;
108 
109 /*
110  * built-in name to class mapping table
111  */
112 typedef struct {
113 	char	name[MAX_NAMEVAL_SIZE];
114 	char	piclclass[PICL_CLASSNAMELEN_MAX];
115 } builtin_map_t;
116 
117 /*
118  * property name to type mapping table
119  */
120 typedef struct {
121 	char	pname[PICL_PROPNAMELEN_MAX];
122 	int	type;
123 } pname_type_map_t;
124 
125 /* known values for manufacturer's JED code */
126 #define	MANF_BROOKTREE		214
127 #define	MANF_MITSUBISHI		28
128 #define	FFB_NAME		"ffb"
129 #define	FFBIOC			('F' << 8)
130 #define	FFB_SYS_INFO		(FFBIOC| 80)
131 
132 /* FFB strap reg union */
133 typedef union {
134 	struct {
135 		uint32_t	unused:24;
136 		uint32_t	afb_flag:1;
137 		uint32_t	major_rev:2;
138 		uint32_t	board_rev:2;
139 		uint32_t	board_mem:1;
140 		uint32_t	cbuf:1;
141 		uint32_t	bbuf:1;
142 	} fld;
143 	uint32_t		ffb_strap_bits;
144 } strap_un_t;
145 
146 /* FFB mnufacturer union */
147 typedef union {
148 	struct {
149 		uint32_t	version:4;	/* version of part number */
150 		uint32_t	partno:16;	/* part number */
151 		uint32_t	manf:11;	/* manufacturer's JED code */
152 		uint32_t	one:1;		/* always set to '1' */
153 	} fld;
154 	uint32_t		encoded_id;
155 } manuf_t;
156 
157 typedef struct ffb_sys_info {
158 	strap_un_t	ffb_strap_bits;	/* ffb_strapping register	*/
159 	manuf_t		fbc_version;	/* revision of FBC chip		*/
160 	manuf_t		dac_version;	/* revision of DAC chip		*/
161 	manuf_t		fbram_version;	/* revision of FBRAMs chip	*/
162 	uint32_t	flags;		/* miscellaneous flags		*/
163 	uint32_t	afb_nfloats;	/* no. of Float asics in AFB	*/
164 	uint32_t	pad[58];	/* padding for AFB chips & misc. */
165 } ffb_sys_info_t;
166 
167 typedef struct memspecs {
168 	uint32_t physlo;
169 	uint32_t physhi;
170 	uint64_t size;
171 } memspecs_t;
172 
173 /*
174  * UnitAddress property related constants and data structures
175  */
176 
177 #define	DEFAULT_ADDRESS_CELLS		2
178 #define	MAX_UNIT_ADDRESS_LEN		256
179 
180 typedef int unitaddr_func_t(char *, int, uint32_t *, uint_t);
181 
182 typedef struct {
183 	char		*class;		/* class name */
184 	unitaddr_func_t	*func;		/* function to encode unit address */
185 	int		addrcellcnt;	/* #addrcell expected, if non-zero */
186 } unitaddr_map_t;
187 
188 #ifdef	__cplusplus
189 }
190 #endif
191 
192 #endif	/* _PICLDEVTREE_H */
193