comm: add -Wall
[unleashed.git] / usr / src / cmd / luxadm / common.h
blob1a96198d253925265ae0d2a89c19bdc585504ff8
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
27 * PHOTON CONFIGURATION MANAGER
28 * Common definitions
32 * I18N message number ranges
33 * This file: 12500 - 12999
34 * Shared common messages: 1 - 1999
37 #ifndef _COMMON_H
38 #define _COMMON_H
44 * Include any headers you depend on.
46 #include <sys/types.h>
47 #include <sys/scsi/adapters/scsi_vhci.h>
49 #ifdef __cplusplus
50 extern "C" {
51 #endif
53 /*#ifdef _BIG_ENDIAN
54 #define htonll(x) (x)
55 #define ntohll(x) (x)
56 #else
57 #define htonll(x) ((((unsigned long long)htonl(x)) << 32) + htonl(x >> 32))
58 #define ntohll(x) ((((unsigned long long)ntohl(x)) << 32) + ntohl(x >> 32))
59 #endif*/
62 extern char *p_error_msg_ptr;
64 #ifdef __x86
65 #include <nl_types.h>
66 extern nl_catd l_catd;
67 #define L_SET1 1 /* catalog set number */
68 #define MSGSTR(Num, Str) catgets(l_catd, L_SET1, Num, Str)
69 #endif
72 /* Defines */
73 #define USEAGE() {(void) fprintf(stderr, MSGSTR(12500, \
74 "Usage: %s [-v] subcommand [option...]" \
75 " {enclosure[,dev]... | pathname...}\n"), \
76 whoami); \
77 (void) fflush(stderr); }
79 #define E_USEAGE() {(void) fprintf(stderr, MSGSTR(12501, \
80 "Usage: %s [-v] -e subcommand [option...]" \
81 " {enclosure[,dev]... | pathname...}\n"), \
82 whoami); \
83 (void) fflush(stderr); }
85 #define VERBPRINT if (Options & PVERBOSE) (void) printf
87 #define L_ERR_PRINT \
88 if (p_error_msg_ptr == NULL) { \
89 perror(MSGSTR(12502, "Error")); \
90 } else { \
91 (void) fprintf(stderr, MSGSTR(12503, "Error: %s"), p_error_msg_ptr); \
92 } \
93 p_error_msg_ptr = NULL;
95 #define P_ERR_PRINT if (p_error_msg_ptr == NULL) { \
96 perror(whoami); \
97 } else { \
98 (void) fprintf(stderr, MSGSTR(12504, "Error: %s"), p_error_msg_ptr); \
99 } \
100 p_error_msg_ptr = NULL;
103 /* Display extended mode page information. */
104 #ifndef MODEPAGE_CACHING
105 #undef MODEPAGE_CACHING
106 #define MODEPAGE_CACHING 0x08
107 #endif
110 /* Primary commands */
111 #define ENCLOSURE_NAMES 100
112 #define DISPLAY 101
113 #define DOWNLOAD 102
114 #define FAST_WRITE 400 /* SSA */
115 #define FAILOVER 500
116 #define FC_UPDATE 401 /* SSA */
117 #define FCAL_UPDATE 103 /* Update the Fcode on Sbus soc card */
118 #define FCODE_UPDATE 117 /* Update the Fcode on all cards */
119 #define QLGC_UPDATE 116 /* Update the Fcode on PCI card(s) */
120 #define INQUIRY 105
121 #define LED 107
122 #define LED_ON 108
123 #define LED_OFF 109
124 #define LED_BLINK 110
125 #define NVRAM_DATA 402 /* SSA */
126 #define POWER_OFF 403 /* SSA */
127 #define POWER_ON 111
128 #define PASSWORD 112
129 #define PURGE 404 /* SSA */
130 #define PERF_STATISTICS 405 /* SSA */
131 #define PROBE 113
132 #define RELEASE 210
133 #define RESERVE 211
134 #define START 213
135 #define STOP 214
136 #define SYNC_CACHE 406 /* SSA */
137 #define SET_BOOT_DEV 115 /* Set the boot-device variable in nvram */
138 #define INSERT_DEVICE 106 /* Hot plug */
139 #define REMOVE_DEVICE 114 /* hot plug */
141 /* Device hotplugging */
142 #define REPLACE_DEVICE 150
143 #define DEV_ONLINE 155
144 #define DEV_OFFLINE 156
145 #define DEV_GETSTATE 157
146 #define DEV_RESET 158
147 #define BUS_QUIESCE 160
148 #define BUS_UNQUIESCE 161
149 #define BUS_GETSTATE 162
150 #define BUS_RESET 163
151 #define BUS_RESETALL 164
153 #define SKIP 111
154 #define QUIT 222
156 #define L_LED_STATUS 0x00
157 #define L_LED_RQST_IDENTIFY 0x01
158 #define L_LED_ON 0x02
159 #define L_LED_OFF 0x04
162 /* Enclosure Specific */
163 #define ALARM 407 /* SSA */
164 #define ALARM_OFF 408 /* SSA */
165 #define ALARM_ON 409 /* SSA */
166 #define ALARM_SET 410 /* SSA */
167 #define ENV_DISPLAY 411 /* SSA */
169 /* Expert commands */
170 #define RDLS 215
171 #define P_BYPASS 218
172 #define P_ENABLE 219
173 #define BYPASS 220
174 #define ENABLE 221
175 #define FORCELIP 222
176 #define LUX_P_OFFLINE 223
177 #define LUX_P_ONLINE 224
178 #define EXT_LOOPBACK 225
179 #define INT_LOOPBACK 226
180 #define NO_LOOPBACK 227
181 #define CREATE_FAB 228
183 /* Undocumented commands */
184 #define DUMP 300
185 #define CHECK_FILE 301 /* Undocumented - Check download file */
186 #define DUMP_MAP 302 /* Dump map of loop */
187 #define VERSION 303 /* undocumented */
188 #define AU 304 /* undocumented */
189 #define PORT 305 /* undocumented */
191 /* Undocumented diagnostic subcommands */
192 #define SYSDUMP 350
195 /* SSA - for adm_download */
196 /* #define SSAFIRMWARE_FILE "/usr/lib/firmware/ssa/ssafirmware" */
198 /* Global variables */
199 extern char *whoami;
200 extern int Options;
201 extern const int OPTION_A;
202 extern const int OPTION_B;
203 extern const int OPTION_C;
204 extern const int OPTION_D;
205 extern const int OPTION_E;
206 extern const int OPTION_F;
207 extern const int OPTION_L;
208 extern const int OPTION_P;
209 extern const int OPTION_R;
210 extern const int OPTION_T;
211 extern const int OPTION_V;
212 extern const int OPTION_Z;
213 extern const int OPTION_Y;
214 extern const int OPTION_CAPF;
215 extern const int PVERBOSE;
216 extern const int SAVE;
217 extern const int EXPERT;
219 #define TARGET_ID(box_id, f_r, slot) \
220 ((box_id | ((f_r == 'f' ? 0 : 1) << 4)) | (slot + 2))
222 #define NEWER(time1, time2) (time1.tv_sec > time2.tv_sec)
224 /* used to set the behavior of get_slash_devices_from_osDevName. */
225 #define STANDARD_DEVNAME_HANDLING 1
226 #define NOT_IGNORE_DANGLING_LINK 2
228 #include <hbaapi.h>
229 #ifndef __x86
230 #include <sys/scsi/generic/mode.h>
231 #include <sys/scsi/generic/sense.h>
232 #include <sys/scsi/impl/uscsi.h>
233 #include <g_state.h>
234 #include <stgcom.h>
235 #include <l_common.h>
236 #else
237 typedef struct l_inquiry_inq_2 {
238 #if defined(_BIT_FIELDS_HTOL)
239 uchar_t inq_2_reladdr : 1, /* relative addressing */
240 inq_wbus32 : 1, /* 32 bit wide data xfers */
241 inq_wbus16 : 1, /* 16 bit wide data xfers */
242 inq_sync : 1, /* synchronous data xfers */
243 inq_linked : 1, /* linked commands */
244 inq_res1 : 1, /* reserved */
245 inq_cmdque : 1, /* command queueing */
246 inq_sftre : 1; /* Soft Reset option */
247 #else
248 uchar_t inq_sftre : 1, /* Soft Reset option */
249 inq_cmdque : 1, /* command queueing */
250 inq_res1 : 1, /* reserved */
251 inq_linked : 1, /* linked commands */
252 inq_sync : 1, /* synchronous data xfers */
253 inq_wbus16 : 1, /* 16 bit wide data xfers */
254 inq_wbus32 : 1, /* 32 bit wide data xfers */
255 inq_2_reladdr : 1; /* relative addressing */
256 #endif /* _BIT_FIELDS_HTOL */
257 } L_inq_2;
259 typedef struct l_inquiry_inq_3 {
260 #if defined(_BIT_FIELDS_HTOL)
261 uchar_t inq_3_reladdr : 1, /* relative addressing */
262 inq_SIP_2 : 3, /* Interlocked Protocol */
263 inq_3_linked : 1, /* linked commands */
264 inq_trandis : 1, /* Transfer Disable */
265 inq_3_cmdque : 1, /* command queueing */
266 inq_SIP_3 : 1; /* Interlocked Protocol */
267 #else
268 uchar_t inq_SIP_3 : 1, /* Interlocked Protocol */
269 inq_3_cmdque : 1, /* command queueing */
270 inq_trandis : 1, /* Transfer Disable */
271 inq_3_linked : 1, /* linked commands */
272 inq_SIP_2 : 3, /* Interlocked Protocol */
273 inq_3_reladdr : 1; /* relative addressing */
274 #endif /* _BIT_FIELDS_HTOL */
275 } L_inq_3;
277 typedef struct l_inquiry_struct {
279 * byte 0
281 * Bits 7-5 are the Peripheral Device Qualifier
282 * Bits 4-0 are the Peripheral Device Type
285 uchar_t inq_dtype;
286 /* byte 1 */
287 #if defined(_BIT_FIELDS_HTOL)
288 uchar_t inq_rmb : 1, /* removable media */
289 inq_qual : 7; /* device type qualifier */
290 #else
291 uchar_t inq_qual : 7, /* device type qualifier */
292 inq_rmb : 1; /* removable media */
293 #endif /* _BIT_FIELDS_HTOL */
295 /* byte 2 */
296 #if defined(_BIT_FIELDS_HTOL)
297 uchar_t inq_iso : 2, /* ISO version */
298 inq_ecma : 3, /* ECMA version */
299 inq_ansi : 3; /* ANSI version */
300 #else
301 uchar_t inq_ansi : 3, /* ANSI version */
302 inq_ecma : 3, /* ECMA version */
303 inq_iso : 2; /* ISO version */
304 #endif /* _BIT_FIELDS_HTOL */
306 /* byte 3 */
307 #define inq_aerc inq_aenc /* SCSI-3 */
308 #if defined(_BIT_FIELDS_HTOL)
309 uchar_t inq_aenc : 1, /* async event notification cap. */
310 inq_trmiop : 1, /* supports TERMINATE I/O PROC msg */
311 inq_normaca : 1, /* Normal ACA Supported */
312 : 1, /* reserved */
313 inq_rdf : 4; /* response data format */
314 #else
315 uchar_t inq_rdf : 4, /* response data format */
316 : 1, /* reserved */
317 inq_normaca : 1, /* Normal ACA Supported */
318 inq_trmiop : 1, /* supports TERMINATE I/O PROC msg */
319 inq_aenc : 1; /* async event notification cap. */
320 #endif /* _BIT_FIELDS_HTOL */
322 /* bytes 4-7 */
323 uchar_t inq_len; /* additional length */
324 uchar_t : 8; /* reserved */
325 #if defined(_BIT_FIELDS_HTOL)
326 uchar_t : 2, /* reserved */
327 inq_port : 1, /* Only defined when dual_p set */
328 inq_dual_p : 1, /* Dual Port */
329 inq_mchngr : 1, /* Medium Changer */
330 inq_SIP_1 : 3; /* Interlocked Protocol */
331 #else
332 uchar_t inq_SIP_1 : 3, /* Interlocked Protocol */
333 inq_mchngr : 1, /* Medium Changer */
334 inq_dual_p : 1, /* Dual Port */
335 inq_port : 1, /* Only defined when dual_p set */
336 : 2; /* reserved */
337 #endif /* _BIT_FIELDS_HTOL */
339 union {
340 L_inq_2 inq_2;
341 L_inq_3 inq_3;
342 } ui;
345 /* bytes 8-35 */
347 uchar_t inq_vid[8]; /* vendor ID */
349 uchar_t inq_pid[16]; /* product ID */
351 uchar_t inq_revision[4]; /* product revision level */
354 * Bytes 36-55 are vendor-specific parameter bytes
357 /* SSA specific definitions */
358 /* bytes 36 - 39 */
359 #define inq_ven_specific_1 inq_firmware_rev
360 uchar_t inq_firmware_rev[4]; /* firmware revision level */
362 /* bytes 40 - 51 */
363 uchar_t inq_serial[12]; /* serial number, not used any more */
365 /* bytes 52-53 */
366 uchar_t inq_res2[2];
368 /* byte 54, 55 */
369 uchar_t inq_ssa_ports; /* number of ports */
370 uchar_t inq_ssa_tgts; /* number of targets */
373 * Bytes 56-95 are reserved.
375 uchar_t inq_res3[40];
377 * 96 to 'n' are vendor-specific parameter bytes
379 uchar_t inq_box_name[32];
380 uchar_t inq_avu[256];
381 } L_inquiry;
382 #define HEX_ONLY 0 /* Print Hex only */
383 #define HEX_ASCII 1 /* Print Hex and Ascii */
384 #define WWN_SIZE 8 /* # of bytes to dump per line */
386 /* NOTE: These command op codes are not defined in commands.h */
387 #define SCMD_SYNC_CACHE 0x35
388 #define SCMD_LOG_SENSE 0x4d
389 #define SCMD_PERS_RESERV_IN 0x5e
390 #define SCMD_PERS_RESERV_OUT 0x5f
392 typedef struct rls_payload {
393 uint_t rls_portno;
394 uint_t rls_linkfail;
395 uint_t rls_syncfail;
396 uint_t rls_sigfail;
397 uint_t rls_primitiverr;
398 uint_t rls_invalidword;
399 uint_t rls_invalidcrc;
400 } rls_payload_t;
402 typedef struct l_inquiry00_struct {
403 #if defined(_BIT_FIELDS_LTOH)
404 uchar_t qual :3,
405 dtype :5;
406 #else
407 uchar_t dtype :5,
408 qual :3;
409 #endif /* _BIT_FIELDS_LTOH */
410 uchar_t page_code;
411 uchar_t reserved;
412 uchar_t len;
413 uchar_t page_list[251];
414 } L_inquiry00;
416 #define MIN(a, b) (a < b ? a : b)
417 #define ER_DPRINTF if (getenv("_LUX_ER_DEBUG") != NULL) (void) printf
418 #define O_DPRINTF if (getenv("_LUX_O_DEBUG") != NULL) (void) printf
419 #define P_DPRINTF if (getenv("_LUX_P_DEBUG") != NULL) (void) printf
420 #define R_DPRINTF if (getenv("_LUX_R_DEBUG") != NULL) (void) printf
421 #define I_DPRINTF if (getenv("_LUX_I_DEBUG") != NULL) (void) printf
422 #define S_DPRINTF if (getenv("_LUX_S_DEBUG") != NULL) (void) printf
423 #define RETRY_FCIO_IOCTL 360
424 #define WAIT_FCIO_IOCTL 250000 /* 1/4 of a second */
426 #endif /* __x86 */
429 int adm_display_config(char **argv);
430 void adm_download(char **argv, char *file_name);
431 void up_encl_name(char **argv, int argc);
432 void adm_failover(char **argv);
433 void pho_probe();
434 void non_encl_probe();
435 void adm_led(char **argv, int led_action);
436 void up_password(char **argv);
437 int adm_start(char **argv);
438 int adm_stop(char **argv);
439 int adm_power_off(char **argv, int off_flag);
440 int adm_forcelip(char **argv);
441 void adm_bypass_enable(char **argv, int bypass_flag);
442 int adm_port_offline_online(char *argv[], int flag);
443 void display_link_status(char **argv);
444 int read_repos_file(char *repos_filename);
445 int adm_check_file(char **argv, int flag);
446 void dump(char **argv);
447 void dump_map(char **argv);
448 int adm_port_loopback(char *portpath, int flag);
449 int adm_inquiry(char **argv);
450 int adm_display_port(int verbose);
452 int adm_reserve(char *path);
453 int adm_release(char *path);
454 void i18n_catopen();
455 void dump_hex_data(char *, uchar_t *, int, int);
456 void print_errString(int, char *);
457 void print_chars(uchar_t *, int, int);
458 void print_inq_data(char *, char *, L_inquiry, uchar_t *, size_t);
459 void print_fabric_dtype_prop(uchar_t *hba_port_wwn, uchar_t *port_wwn,
460 uchar_t dtype_prop);
461 void print_private_loop_dtype_prop(uchar_t *hba_port_wwn, uchar_t *port_wwn,
462 uchar_t dtype_prop);
463 char *get_errString(int errornum);
464 int cmp_raw_wwn(uchar_t *wwn_1, uchar_t *wwn_2);
466 /* routines in fchba*.c files */
467 int fchba_display_port(int verbose);
468 int fchba_display_config(char **argv, int option_t_input, int argc);
469 char *get_slash_devices_from_osDevName(char *osDevName, int flag);
470 int get_scsi_vhci_pathinfo(char *dev_path, sv_iocdata_t *ioc,
471 int *path_count);
472 int get_mode_page(char *path, uchar_t **pg_buf);
473 int scsi_mode_sense_cmd(int fd, uchar_t *buf_ptr, int buf_len, uchar_t pc,
474 uchar_t page_code);
475 int scsi_release(char *path);
476 int scsi_reserve(char *path);
477 int is_path(char *arg);
478 int is_wwn(char *arg);
479 int loadLibrary();
480 uint32_t getNumberOfAdapters();
481 int getAdapterAttrs(HBA_HANDLE handle,
482 char *name, HBA_ADAPTERATTRIBUTES *attrs);
483 int getAdapterPortAttrs(HBA_HANDLE handle, char *name, int portIndex,
484 HBA_PORTATTRIBUTES *attrs);
485 HBA_STATUS fetch_mappings(HBA_HANDLE handle, HBA_WWN pwwn,
486 HBA_FCPTARGETMAPPINGV2 **map);
487 int match_mappings(char *compare, HBA_FCPTARGETMAPPINGV2 *map);
488 uint64_t wwnConversion(uchar_t *wwn);
491 #ifdef __cplusplus
493 #endif
495 #endif /* _COMMON_H */