/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ /* * PHOTON CONFIGURATION MANAGER * Common definitions */ /* * I18N message number ranges * This file: 12500 - 12999 * Shared common messages: 1 - 1999 */ #ifndef _COMMON_H #define _COMMON_H /* * Include any headers you depend on. */ #include #include #ifdef __cplusplus extern "C" { #endif /*#ifdef _BIG_ENDIAN #define htonll(x) (x) #define ntohll(x) (x) #else #define htonll(x) ((((unsigned long long)htonl(x)) << 32) + htonl(x >> 32)) #define ntohll(x) ((((unsigned long long)ntohl(x)) << 32) + ntohl(x >> 32)) #endif*/ extern char *p_error_msg_ptr; #ifdef __x86 #include extern nl_catd l_catd; #define L_SET1 1 /* catalog set number */ #define MSGSTR(Num, Str) catgets(l_catd, L_SET1, Num, Str) #endif /* Defines */ #define USEAGE() {(void) fprintf(stderr, MSGSTR(12500, \ "Usage: %s [-v] subcommand [option...]" \ " {enclosure[,dev]... | pathname...}\n"), \ whoami); \ (void) fflush(stderr); } #define E_USEAGE() {(void) fprintf(stderr, MSGSTR(12501, \ "Usage: %s [-v] -e subcommand [option...]" \ " {enclosure[,dev]... | pathname...}\n"), \ whoami); \ (void) fflush(stderr); } #define VERBPRINT if (Options & PVERBOSE) (void) printf #define L_ERR_PRINT \ if (p_error_msg_ptr == NULL) { \ perror(MSGSTR(12502, "Error")); \ } else { \ (void) fprintf(stderr, MSGSTR(12503, "Error: %s"), p_error_msg_ptr); \ } \ p_error_msg_ptr = NULL; #define P_ERR_PRINT if (p_error_msg_ptr == NULL) { \ perror(whoami); \ } else { \ (void) fprintf(stderr, MSGSTR(12504, "Error: %s"), p_error_msg_ptr); \ } \ p_error_msg_ptr = NULL; /* Display extended mode page information. */ #ifndef MODEPAGE_CACHING #undef MODEPAGE_CACHING #define MODEPAGE_CACHING 0x08 #endif /* Primary commands */ #define ENCLOSURE_NAMES 100 #define DISPLAY 101 #define DOWNLOAD 102 #define FAST_WRITE 400 /* SSA */ #define FAILOVER 500 #define FC_UPDATE 401 /* SSA */ #define FCAL_UPDATE 103 /* Update the Fcode on Sbus soc card */ #define FCODE_UPDATE 117 /* Update the Fcode on all cards */ #define QLGC_UPDATE 116 /* Update the Fcode on PCI card(s) */ #define INQUIRY 105 #define LED 107 #define LED_ON 108 #define LED_OFF 109 #define LED_BLINK 110 #define NVRAM_DATA 402 /* SSA */ #define POWER_OFF 403 /* SSA */ #define POWER_ON 111 #define PASSWORD 112 #define PURGE 404 /* SSA */ #define PERF_STATISTICS 405 /* SSA */ #define PROBE 113 #define RELEASE 210 #define RESERVE 211 #define START 213 #define STOP 214 #define SYNC_CACHE 406 /* SSA */ #define SET_BOOT_DEV 115 /* Set the boot-device variable in nvram */ #define INSERT_DEVICE 106 /* Hot plug */ #define REMOVE_DEVICE 114 /* hot plug */ /* Device hotplugging */ #define REPLACE_DEVICE 150 #define DEV_ONLINE 155 #define DEV_OFFLINE 156 #define DEV_GETSTATE 157 #define DEV_RESET 158 #define BUS_QUIESCE 160 #define BUS_UNQUIESCE 161 #define BUS_GETSTATE 162 #define BUS_RESET 163 #define BUS_RESETALL 164 #define SKIP 111 #define QUIT 222 #define L_LED_STATUS 0x00 #define L_LED_RQST_IDENTIFY 0x01 #define L_LED_ON 0x02 #define L_LED_OFF 0x04 /* Enclosure Specific */ #define ALARM 407 /* SSA */ #define ALARM_OFF 408 /* SSA */ #define ALARM_ON 409 /* SSA */ #define ALARM_SET 410 /* SSA */ #define ENV_DISPLAY 411 /* SSA */ /* Expert commands */ #define RDLS 215 #define P_BYPASS 218 #define P_ENABLE 219 #define BYPASS 220 #define ENABLE 221 #define FORCELIP 222 #define LUX_P_OFFLINE 223 #define LUX_P_ONLINE 224 #define EXT_LOOPBACK 225 #define INT_LOOPBACK 226 #define NO_LOOPBACK 227 #define CREATE_FAB 228 /* Undocumented commands */ #define DUMP 300 #define CHECK_FILE 301 /* Undocumented - Check download file */ #define DUMP_MAP 302 /* Dump map of loop */ #define VERSION 303 /* undocumented */ #define AU 304 /* undocumented */ #define PORT 305 /* undocumented */ /* Undocumented diagnostic subcommands */ #define SYSDUMP 350 /* SSA - for adm_download */ /* #define SSAFIRMWARE_FILE "/usr/lib/firmware/ssa/ssafirmware" */ /* Global variables */ extern char *whoami; extern int Options; extern const int OPTION_A; extern const int OPTION_B; extern const int OPTION_C; extern const int OPTION_D; extern const int OPTION_E; extern const int OPTION_F; extern const int OPTION_L; extern const int OPTION_P; extern const int OPTION_R; extern const int OPTION_T; extern const int OPTION_V; extern const int OPTION_Z; extern const int OPTION_Y; extern const int OPTION_CAPF; extern const int PVERBOSE; extern const int SAVE; extern const int EXPERT; #define TARGET_ID(box_id, f_r, slot) \ ((box_id | ((f_r == 'f' ? 0 : 1) << 4)) | (slot + 2)) #define NEWER(time1, time2) (time1.tv_sec > time2.tv_sec) /* used to set the behavior of get_slash_devices_from_osDevName. */ #define STANDARD_DEVNAME_HANDLING 1 #define NOT_IGNORE_DANGLING_LINK 2 #include #ifndef __x86 #include #include #include #include #include #include #else typedef struct l_inquiry_inq_2 { #if defined(_BIT_FIELDS_HTOL) uchar_t inq_2_reladdr : 1, /* relative addressing */ inq_wbus32 : 1, /* 32 bit wide data xfers */ inq_wbus16 : 1, /* 16 bit wide data xfers */ inq_sync : 1, /* synchronous data xfers */ inq_linked : 1, /* linked commands */ inq_res1 : 1, /* reserved */ inq_cmdque : 1, /* command queueing */ inq_sftre : 1; /* Soft Reset option */ #else uchar_t inq_sftre : 1, /* Soft Reset option */ inq_cmdque : 1, /* command queueing */ inq_res1 : 1, /* reserved */ inq_linked : 1, /* linked commands */ inq_sync : 1, /* synchronous data xfers */ inq_wbus16 : 1, /* 16 bit wide data xfers */ inq_wbus32 : 1, /* 32 bit wide data xfers */ inq_2_reladdr : 1; /* relative addressing */ #endif /* _BIT_FIELDS_HTOL */ } L_inq_2; typedef struct l_inquiry_inq_3 { #if defined(_BIT_FIELDS_HTOL) uchar_t inq_3_reladdr : 1, /* relative addressing */ inq_SIP_2 : 3, /* Interlocked Protocol */ inq_3_linked : 1, /* linked commands */ inq_trandis : 1, /* Transfer Disable */ inq_3_cmdque : 1, /* command queueing */ inq_SIP_3 : 1; /* Interlocked Protocol */ #else uchar_t inq_SIP_3 : 1, /* Interlocked Protocol */ inq_3_cmdque : 1, /* command queueing */ inq_trandis : 1, /* Transfer Disable */ inq_3_linked : 1, /* linked commands */ inq_SIP_2 : 3, /* Interlocked Protocol */ inq_3_reladdr : 1; /* relative addressing */ #endif /* _BIT_FIELDS_HTOL */ } L_inq_3; typedef struct l_inquiry_struct { /* * byte 0 * * Bits 7-5 are the Peripheral Device Qualifier * Bits 4-0 are the Peripheral Device Type * */ uchar_t inq_dtype; /* byte 1 */ #if defined(_BIT_FIELDS_HTOL) uchar_t inq_rmb : 1, /* removable media */ inq_qual : 7; /* device type qualifier */ #else uchar_t inq_qual : 7, /* device type qualifier */ inq_rmb : 1; /* removable media */ #endif /* _BIT_FIELDS_HTOL */ /* byte 2 */ #if defined(_BIT_FIELDS_HTOL) uchar_t inq_iso : 2, /* ISO version */ inq_ecma : 3, /* ECMA version */ inq_ansi : 3; /* ANSI version */ #else uchar_t inq_ansi : 3, /* ANSI version */ inq_ecma : 3, /* ECMA version */ inq_iso : 2; /* ISO version */ #endif /* _BIT_FIELDS_HTOL */ /* byte 3 */ #define inq_aerc inq_aenc /* SCSI-3 */ #if defined(_BIT_FIELDS_HTOL) uchar_t inq_aenc : 1, /* async event notification cap. */ inq_trmiop : 1, /* supports TERMINATE I/O PROC msg */ inq_normaca : 1, /* Normal ACA Supported */ : 1, /* reserved */ inq_rdf : 4; /* response data format */ #else uchar_t inq_rdf : 4, /* response data format */ : 1, /* reserved */ inq_normaca : 1, /* Normal ACA Supported */ inq_trmiop : 1, /* supports TERMINATE I/O PROC msg */ inq_aenc : 1; /* async event notification cap. */ #endif /* _BIT_FIELDS_HTOL */ /* bytes 4-7 */ uchar_t inq_len; /* additional length */ uchar_t : 8; /* reserved */ #if defined(_BIT_FIELDS_HTOL) uchar_t : 2, /* reserved */ inq_port : 1, /* Only defined when dual_p set */ inq_dual_p : 1, /* Dual Port */ inq_mchngr : 1, /* Medium Changer */ inq_SIP_1 : 3; /* Interlocked Protocol */ #else uchar_t inq_SIP_1 : 3, /* Interlocked Protocol */ inq_mchngr : 1, /* Medium Changer */ inq_dual_p : 1, /* Dual Port */ inq_port : 1, /* Only defined when dual_p set */ : 2; /* reserved */ #endif /* _BIT_FIELDS_HTOL */ union { L_inq_2 inq_2; L_inq_3 inq_3; } ui; /* bytes 8-35 */ uchar_t inq_vid[8]; /* vendor ID */ uchar_t inq_pid[16]; /* product ID */ uchar_t inq_revision[4]; /* product revision level */ /* * Bytes 36-55 are vendor-specific parameter bytes */ /* SSA specific definitions */ /* bytes 36 - 39 */ #define inq_ven_specific_1 inq_firmware_rev uchar_t inq_firmware_rev[4]; /* firmware revision level */ /* bytes 40 - 51 */ uchar_t inq_serial[12]; /* serial number, not used any more */ /* bytes 52-53 */ uchar_t inq_res2[2]; /* byte 54, 55 */ uchar_t inq_ssa_ports; /* number of ports */ uchar_t inq_ssa_tgts; /* number of targets */ /* * Bytes 56-95 are reserved. */ uchar_t inq_res3[40]; /* * 96 to 'n' are vendor-specific parameter bytes */ uchar_t inq_box_name[32]; uchar_t inq_avu[256]; } L_inquiry; #define HEX_ONLY 0 /* Print Hex only */ #define HEX_ASCII 1 /* Print Hex and Ascii */ #define WWN_SIZE 8 /* # of bytes to dump per line */ /* NOTE: These command op codes are not defined in commands.h */ #define SCMD_SYNC_CACHE 0x35 #define SCMD_LOG_SENSE 0x4d #define SCMD_PERS_RESERV_IN 0x5e #define SCMD_PERS_RESERV_OUT 0x5f typedef struct rls_payload { uint_t rls_portno; uint_t rls_linkfail; uint_t rls_syncfail; uint_t rls_sigfail; uint_t rls_primitiverr; uint_t rls_invalidword; uint_t rls_invalidcrc; } rls_payload_t; typedef struct l_inquiry00_struct { #if defined(_BIT_FIELDS_LTOH) uchar_t qual :3, dtype :5; #else uchar_t dtype :5, qual :3; #endif /* _BIT_FIELDS_LTOH */ uchar_t page_code; uchar_t reserved; uchar_t len; uchar_t page_list[251]; } L_inquiry00; #define MIN(a, b) (a < b ? a : b) #define ER_DPRINTF if (getenv("_LUX_ER_DEBUG") != NULL) (void) printf #define O_DPRINTF if (getenv("_LUX_O_DEBUG") != NULL) (void) printf #define P_DPRINTF if (getenv("_LUX_P_DEBUG") != NULL) (void) printf #define R_DPRINTF if (getenv("_LUX_R_DEBUG") != NULL) (void) printf #define I_DPRINTF if (getenv("_LUX_I_DEBUG") != NULL) (void) printf #define S_DPRINTF if (getenv("_LUX_S_DEBUG") != NULL) (void) printf #define RETRY_FCIO_IOCTL 360 #define WAIT_FCIO_IOCTL 250000 /* 1/4 of a second */ #endif /* __x86 */ int adm_display_config(char **argv); void adm_download(char **argv, char *file_name); void up_encl_name(char **argv, int argc); void adm_failover(char **argv); void pho_probe(); void non_encl_probe(); void adm_led(char **argv, int led_action); void up_password(char **argv); int adm_start(char **argv); int adm_stop(char **argv); int adm_power_off(char **argv, int off_flag); int adm_forcelip(char **argv); void adm_bypass_enable(char **argv, int bypass_flag); int adm_port_offline_online(char *argv[], int flag); void display_link_status(char **argv); int read_repos_file(char *repos_filename); int adm_check_file(char **argv, int flag); void dump(char **argv); void dump_map(char **argv); int adm_port_loopback(char *portpath, int flag); int adm_inquiry(char **argv); int adm_display_port(int verbose); int adm_reserve(char *path); int adm_release(char *path); void i18n_catopen(); void dump_hex_data(char *, uchar_t *, int, int); void print_errString(int, char *); void print_chars(uchar_t *, int, int); void print_inq_data(char *, char *, L_inquiry, uchar_t *, size_t); void print_fabric_dtype_prop(uchar_t *hba_port_wwn, uchar_t *port_wwn, uchar_t dtype_prop); void print_private_loop_dtype_prop(uchar_t *hba_port_wwn, uchar_t *port_wwn, uchar_t dtype_prop); char *get_errString(int errornum); int cmp_raw_wwn(uchar_t *wwn_1, uchar_t *wwn_2); /* routines in fchba*.c files */ int fchba_display_port(int verbose); int fchba_display_config(char **argv, int option_t_input, int argc); char *get_slash_devices_from_osDevName(char *osDevName, int flag); int get_scsi_vhci_pathinfo(char *dev_path, sv_iocdata_t *ioc, int *path_count); int get_mode_page(char *path, uchar_t **pg_buf); int scsi_mode_sense_cmd(int fd, uchar_t *buf_ptr, int buf_len, uchar_t pc, uchar_t page_code); int scsi_release(char *path); int scsi_reserve(char *path); int is_path(char *arg); int is_wwn(char *arg); int loadLibrary(); uint32_t getNumberOfAdapters(); int getAdapterAttrs(HBA_HANDLE handle, char *name, HBA_ADAPTERATTRIBUTES *attrs); int getAdapterPortAttrs(HBA_HANDLE handle, char *name, int portIndex, HBA_PORTATTRIBUTES *attrs); HBA_STATUS fetch_mappings(HBA_HANDLE handle, HBA_WWN pwwn, HBA_FCPTARGETMAPPINGV2 **map); int match_mappings(char *compare, HBA_FCPTARGETMAPPINGV2 *map); uint64_t wwnConversion(uchar_t *wwn); #ifdef __cplusplus } #endif #endif /* _COMMON_H */