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