xref: /illumos-gate/usr/src/lib/cfgadm_plugins/sbd/common/ap.h (revision 4db555a5389470c6f15aa8b50a38ca5d533d0641)
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	_CFGA_SBD_H
28 #define	_CFGA_SBD_H
29 
30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
31 
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35 
36 #define	DEVDIR	"/devices"
37 
38 #ifdef	SBD_DEBUG
39 #define	DBG	dbg
40 void dbg(char *, ...);
41 #else
42 #define	DBG
43 #endif
44 
45 typedef struct {
46 	int flags;
47 	int code;
48 	char *mid;
49 	char *platform;
50 	int skip;
51 	int err;
52 } ap_opts_t;
53 
54 /*
55  * Command options.
56  *
57  * Some of the options are provided for testing purpose and
58  * will not published (e.g. err,code,mid).
59  */
60 #define	OPT_UNASSIGN		0
61 #define	OPT_SKIP		1
62 #define	OPT_PARSABLE		2
63 #define	OPT_NOPOWEROFF		3
64 #define	OPT_CODE		4
65 #define	OPT_MID			5
66 #define	OPT_ERR			6
67 #define	OPT_PLATFORM		7
68 #define	OPT_SIM			8
69 #define	OPT_SUSPEND_OK		9
70 #define	OPT_LIST_ALL		29
71 #define	OPT_FORCE		30
72 #define	OPT_VERBOSE		31
73 
74 #define	ap_getopt(a, o)	((a)->opts.flags &  ((uint_t)1 << (o)))
75 #define	ap_setopt(a, o)	((a)->opts.flags |= ((uint_t)1 << (o)))
76 
77 typedef enum {
78 	AP_NONE = 0,
79 	AP_BOARD,
80 	AP_CPU,
81 	AP_MEM,
82 	AP_IO,
83 	AP_CMP
84 } ap_target_t;
85 
86 #define	AP_NCLASS	6
87 
88 /*
89  * Attachment point descriptor.
90  *
91  * All commands are processed as follows:
92  *
93  * . allocate a command descriptor
94  * . parse the physical ap_id
95  * . parse the command and its options.
96  * . sequence if necessary (state change commands)
97  * . execute
98  *
99  */
100 typedef struct {
101 	int fd;
102 	int bnum;
103 	int cnum;
104 	int ncm;
105 	int inst;
106 	int norcm;
107 	int statonly;
108 	const char *class;
109 	const char *apid;
110 	char *drv;
111 	char *path;
112 	char *target;
113 	char *minor;
114 	char *cid;
115 	char *cname;
116 	char *options;
117 	char **errstring;
118 	ap_opts_t opts;
119 	ap_target_t tgt;
120 	struct cfga_msg *msgp;
121 	struct cfga_confirm *confp;
122 	void *ctl;
123 	void *stat;
124 	void *cmstat;
125 	void *rcm;
126 } apd_t;
127 
128 /*
129  * Command definitions.
130  *
131  * The command order is significant.  The sequenced (-c) commands
132  * are sorted in execution order. The configure command starts from
133  * assign and ends with online.  The disconnect command starts
134  * from offline and goes to unassign.  Steps in the sequencing may
135  * be optionally skipped.
136  */
137 #define	CMD_ASSIGN		0
138 #define	CMD_POWERON		1
139 #define	CMD_TEST		2
140 #define	CMD_CONNECT		3
141 #define	CMD_CONFIGURE		4
142 #define	CMD_RCM_ONLINE		5
143 #define	CMD_RCM_CAP_ADD		6
144 #define	CMD_SUSPEND_CHECK	7
145 #define	CMD_RCM_SUSPEND		8
146 #define	CMD_RCM_CAP_DEL		9
147 #define	CMD_RCM_OFFLINE		10
148 #define	CMD_UNCONFIGURE		11
149 #define	CMD_RCM_REMOVE		12
150 #define	CMD_RCM_CAP_NOTIFY	13
151 #define	CMD_DISCONNECT		14
152 #define	CMD_POWEROFF		15
153 #define	CMD_UNASSIGN		16
154 #define	CMD_RCM_RESUME		17
155 #define	CMD_STATUS		18
156 #define	CMD_GETNCM		19
157 #define	CMD_PASSTHRU		20
158 #define	CMD_HELP		21
159 #define	CMD_ERRTEST		22
160 #define	CMD_NONE		23
161 
162 /*
163  * Error messages.
164  */
165 #define	ERR_CMD_INVAL		0
166 #define	ERR_CMD_FAIL		1
167 #define	ERR_CMD_NACK		2
168 #define	ERR_CMD_NOTSUPP		3
169 #define	ERR_CMD_ABORT		4
170 #define	ERR_OPT_INVAL		5
171 #define	ERR_OPT_NOVAL		6
172 #define	ERR_OPT_VAL		7
173 #define	ERR_OPT_BADVAL		8
174 #define	ERR_AP_INVAL		9
175 #define	ERR_CM_INVAL		10
176 #define	ERR_TRANS_INVAL		11
177 #define	ERR_SIG_CHANGE		12
178 #define	ERR_RCM_HANDLE		13
179 #define	ERR_RCM_CMD		14
180 #define	ERR_RCM_INFO		15
181 #define	ERR_LIB_OPEN		16
182 #define	ERR_LIB_SYM		17
183 #define	ERR_STAT		18
184 #define	ERR_NOMEM		19
185 #define	ERR_PLUGIN		20
186 #define	ERR_NONE		21
187 
188 #define	MSG_ISSUE		0
189 #define	MSG_SKIP		1
190 #define	MSG_SUSPEND		2
191 #define	MSG_ABORT		3
192 #define	MSG_DONE		4
193 #define	MSG_FAIL		5
194 #define	MSG_NORCM		6
195 #define	MSG_NONE		7
196 
197 #define	s_free(x)	(((x) != NULL) ? (free(x), (x) = NULL) : (void *)0)
198 #define	str_valid(p)	((p) != NULL && *(p) != '\0')
199 #define	mask(x)		((uint_t)1 << (x))
200 
201 #define	CM_DFLT		-1	/* default (current) component */
202 
203 int ap_cnt(apd_t *);
204 int ap_parse(apd_t *, const char *);
205 int ap_confirm(apd_t *);
206 int ap_state_cmd(cfga_cmd_t, int *);
207 int ap_symid(apd_t *, char *, char *, size_t);
208 char *ap_sys_err(apd_t *, char **);
209 char *ap_cmd_name(int);
210 char *ap_opt_name(int);
211 char *ap_logid(apd_t *, char *);
212 void ap_err(apd_t *, ...);
213 void ap_msg(apd_t *, ...);
214 void ap_info(apd_t *, cfga_info_t, ap_target_t);
215 void ap_init(apd_t *, cfga_list_data_t *);
216 void ap_state(apd_t *, cfga_stat_t *, cfga_stat_t *);
217 cfga_err_t ap_stat(apd_t *a, int);
218 cfga_err_t ap_ioctl(apd_t *, int);
219 cfga_err_t ap_help(struct cfga_msg *, const char *, cfga_flags_t);
220 cfga_err_t ap_cmd_exec(apd_t *, int);
221 cfga_err_t ap_cmd_seq(apd_t *, int);
222 cfga_err_t ap_suspend_query(apd_t *, int, int *);
223 cfga_err_t ap_platopts_check(apd_t *, int, int);
224 cfga_err_t ap_cmd_parse(apd_t *, const char *, const char *, int *);
225 cfga_err_t ap_test_err(apd_t *, const char *);
226 
227 int ap_cm_capacity(apd_t *, int, void *, int *, cfga_stat_t *);
228 int ap_cm_ncap(apd_t *, int);
229 void ap_cm_id(apd_t *, int, char *, size_t);
230 void ap_cm_init(apd_t *, cfga_list_data_t *, int);
231 char *ap_cm_devpath(apd_t *, int);
232 ap_target_t ap_cm_type(apd_t *, int);
233 
234 cfga_err_t ap_rcm_init(apd_t *);
235 void ap_rcm_fini(apd_t *);
236 cfga_err_t ap_rcm_ctl(apd_t *, int);
237 int ap_rcm_info(apd_t *, char **);
238 
239 apd_t *apd_alloc(const char *, cfga_flags_t, char **,
240 	struct cfga_msg *, struct cfga_confirm *);
241 void apd_free(apd_t *a);
242 cfga_err_t apd_init(apd_t *, int);
243 
244 int debugging();
245 
246 #ifdef __cplusplus
247 }
248 #endif
249 
250 #endif	/* _CFGA_SBD_H */
251