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
33extern "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 */
69typedef struct hash_elem {
70	picl_nodehdl_t		hdl;
71	struct hash_elem	*next;
72} hash_elem_t;
73
74typedef 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 */
82typedef 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 */
91typedef 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 */
103typedef 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 */
112typedef 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 */
120typedef 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 */
133typedef 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 */
147typedef 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
157typedef 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
167typedef 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
180typedef int unitaddr_func_t(char *, int, uint32_t *, uint_t);
181
182typedef 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