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 2005 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef _CFGA_IB_H
28 #define	_CFGA_IB_H
29 
30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
31 
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35 
36 #include <stdlib.h>
37 #include <strings.h>
38 #include <fcntl.h>
39 #include <ctype.h>
40 #include <unistd.h>
41 #include <libintl.h>
42 #include <sys/types32.h>
43 #include <sys/varargs.h>
44 #include <sys/ib/ibnex/ibnex_devctl.h>
45 #include <libdevinfo.h>
46 #include <libdevice.h>
47 #include <librcm.h>
48 #include <synch.h>
49 #include <thread.h>
50 #include <assert.h>
51 
52 #define	CFGA_PLUGIN_LIB
53 #include <config_admin.h>
54 
55 
56 /*
57  * Debug stuff.
58  */
59 #ifdef	DEBUG
60 #define	DPRINTF	printf
61 #else
62 #define	DPRINTF 0 &&
63 #endif /* DEBUG */
64 
65 
66 /* for walking links */
67 typedef struct walk_link {
68 	char *path;
69 	char len;
70 	char **linkpp;
71 } walk_link_t;
72 
73 
74 /*
75  * Stuff carried over for the routines borrowed from cfgadm/SCSI.
76  */
77 #define	MATCH_MINOR_NAME	1
78 #define	S_FREE(x)	(((x) != NULL) ? (free(x), (x) = NULL) : (void *)0)
79 
80 /* Return/error codes */
81 typedef enum {
82 	ICFGA_ERR = -2,
83 	ICFGA_LIB_ERR,
84 	ICFGA_OK,
85 	ICFGA_BUSY,
86 	ICFGA_NO_REC
87 } icfga_ret_t;
88 
89 
90 /* Error Messages */
91 typedef struct {
92 	int		intl;		/* Flag: if 1, internationalize */
93 	cfga_err_t	cfga_err;	/* Error code for libcfgadm */
94 	const char	*msgstr;
95 } msgcvt_t;
96 
97 /* "intl" defines */
98 #define	NO_CVT			0
99 #define	CVT			1
100 
101 #define	MSG_TBL_SZ(table)	(sizeof ((table)) / sizeof (msgcvt_t))
102 
103 
104 /* Error message ids (and indices into ib_error_msgs) "cfga_err values " */
105 typedef enum {
106 	CFGA_IB_OK = 0,			/* Plugin Related Errors */
107 	CFGA_IB_UNKNOWN,
108 	CFGA_IB_INTERNAL_ERR,
109 	CFGA_IB_INVAL_ARG_ERR,
110 	CFGA_IB_OPTIONS_ERR,
111 	CFGA_IB_AP_ERR,
112 	CFGA_IB_DEVCTL_ERR,
113 	CFGA_IB_NOT_CONNECTED,
114 	CFGA_IB_NOT_CONFIGURED,
115 	CFGA_IB_ALREADY_CONNECTED,
116 	CFGA_IB_ALREADY_CONFIGURED,
117 	CFGA_IB_CONFIG_OP_ERR,
118 	CFGA_IB_UNCONFIG_OP_ERR,
119 	CFGA_IB_OPEN_ERR,
120 	CFGA_IB_IOCTL_ERR,
121 	CFGA_IB_BUSY_ERR,
122 	CFGA_IB_ALLOC_FAIL,
123 	CFGA_IB_OPNOTSUPP,
124 	CFGA_IB_INVAL_APID_ERR,
125 	CFGA_IB_DEVLINK_ERR,
126 	CFGA_IB_PRIV_ERR,
127 	CFGA_IB_NVLIST_ERR,
128 	CFGA_IB_HCA_LIST_ERR,
129 	CFGA_IB_HCA_UNCONFIG_ERR,
130 	CFGA_IB_UPD_PKEY_TBLS_ERR,
131 	CFGA_IB_CONFIG_FILE_ERR,
132 	CFGA_IB_LOCK_FILE_ERR,
133 	CFGA_IB_UNLOCK_FILE_ERR,
134 	CFGA_IB_COMM_INVAL_ERR,
135 	CFGA_IB_SVC_INVAL_ERR,
136 	CFGA_IB_SVC_LEN_ERR,
137 	CFGA_IB_SVC_EXISTS_ERR,
138 	CFGA_IB_SVC_NO_EXIST_ERR,
139 	CFGA_IB_UCFG_CLNTS_ERR,
140 	CFGA_IB_INVALID_OP_ERR,
141 
142 	CFGA_IB_RCM_HANDLE_ERR,		/* Plugin's RCM Related Errors */
143 	CFGA_IB_RCM_ONLINE_ERR,
144 	CFGA_IB_RCM_OFFLINE_ERR
145 } cfga_ib_ret_t;
146 
147 
148 /*
149  * Given an error msg index, look up the associated string, and
150  * convert it to the current locale if required.
151  */
152 #define	ERR_STR(msg_idx) \
153 	    (ib_get_msg((msg_idx), ib_error_msgs, MSG_TBL_SZ(ib_error_msgs)))
154 
155 /* Defines for "usage" */
156 #define	CFGA_IB_HELP_HEADER	1	/* Header only */
157 #define	CFGA_IB_HELP_CONFIG	2	/* -c usage help */
158 #define	CFGA_IB_HELP_LIST	3	/* -x list_clients usage help */
159 #define	CFGA_IB_HELP_UPD_PKEY	4	/* -x update_pkey_tbls usage help */
160 #define	CFGA_IB_HELP_CONF_FILE1	5	/* -x [add_service|delete_service] */
161 #define	CFGA_IB_HELP_CONF_FILE2	6	/* -x list_services help */
162 #define	CFGA_IB_HELP_UPD_IOC_CONF	\
163 				7	/* -x update_ioc_config help */
164 #define	CFGA_IB_HELP_UNCFG_CLNTS \
165 				8	/* -x unconfig_clients usage help */
166 #define	CFGA_IB_HELP_UNKNOWN	9	/* unknown help */
167 
168 #define	IB_RETRY_DEVPATH	12	/* devicepath show up: retry count */
169 #define	IB_MAX_DEVPATH_DELAY	6	/* sleep for 6 seconds */
170 #define	IB_NUM_NVPAIRS		6	/* for "info", "ap_id" etc. */
171 
172 /* Misc text strings */
173 #define	CFGA_DEV_DIR			"/dev/cfg"
174 #define	IB_STATIC_APID			"/dev/cfg/ib"
175 #define	MINOR_SEP			":"
176 #define	IB_APID				"apid"
177 #define	IB_CFGADM_DEFAULT_AP_TYPE	"unknown"
178 #define	IB_PORT_TYPE			"IB-PORT"
179 #define	IB_FABRIC_INFO			"InfiniBand Fabric"
180 #define	IB_HCA_TYPE			"IB-HCA"
181 #define	IB_IOC_TYPE			"IB-IOC"
182 #define	IB_VPPA_TYPE			"IB-VPPA"
183 #define	IB_HCASVC_TYPE			"IB-HCA_SVC"
184 #define	IB_PSEUDO_TYPE			"IB-PSEUDO"
185 #define	IB_FABRIC_TYPE			"IB-Fabric"
186 #define	IB_FABRIC_APID_STR		"ib:fabric"
187 
188 /* -x commands */
189 #define	IB_LIST_HCA_CLIENTS		"list_clients"		/* list HCA's */
190 								/* clients */
191 #define	IB_UNCONFIG_HCA_CLIENTS		"unconfig_clients"	/* unconfig */
192 								/* HCA's */
193 								/* clients */
194 #define	IB_UPDATE_PKEY_TBLS		"update_pkey_tbls"	/* re-read */
195 								/* P_Keys */
196 #define	IB_ADD_SERVICE			"add_service"		/* add svc */
197 #define	IB_DELETE_SERVICE		"delete_service"	/* delete svc */
198 #define	IB_LIST_SERVICES		"list_services"		/* list svcs */
199 #define	IB_UPDATE_IOC_CONF		"update_ioc_config"	/* update IOC */
200 								/* config */
201 
202 /* for confirm operation */
203 #define	IB_CONFIRM0	"the device: "
204 #define	IB_CONFIRM1 \
205 	"This operation will suspend activity on the IB device\nContinue"
206 #define	IB_CONFIRM2	"Unconfigure Clients of HCA"
207 #define	IB_CONFIRM3 \
208 	"This operation will unconfigure IB clients of this HCA\nContinue"
209 #define	IB_CONFIRM4 \
210 	"This operation will update P_Key tables for all ports of all HCAs"
211 #define	IB_CONFIRM5 \
212 	"This operation can update properties of IOC devices."
213 
214 /*
215  * Export "node_type"s from ibnex_node_type_t (see ibnex.h) to
216  * cfgadm in user land. NOTE: If ibnex_node_type_t changes in
217  * ibnex.h; do not forget to update these values here as well.
218  */
219 #define	IBNEX_PORT_NODE_TYPE		0
220 #define	IBNEX_VPPA_NODE_TYPE		1
221 #define	IBNEX_HCASVC_NODE_TYPE		2
222 #define	IBNEX_IOC_NODE_TYPE		3
223 #define	IBNEX_PSEUDO_NODE_TYPE		4
224 
225 /* for ib.conf file support */
226 #define	IBCONF_ADD_ENTRY		1
227 #define	IBCONF_DELETE_ENTRY		2
228 
229 #ifdef __cplusplus
230 }
231 #endif
232 
233 #endif /* _CFGA_IB_H */
234