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