diff options
Diffstat (limited to 'usr/src/cmd/luxadm/common.h')
-rw-r--r-- | usr/src/cmd/luxadm/common.h | 495 |
1 files changed, 495 insertions, 0 deletions
diff --git a/usr/src/cmd/luxadm/common.h b/usr/src/cmd/luxadm/common.h new file mode 100644 index 0000000000..1a96198d25 --- /dev/null +++ b/usr/src/cmd/luxadm/common.h @@ -0,0 +1,495 @@ +/* + * 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 <sys/types.h> +#include <sys/scsi/adapters/scsi_vhci.h> + +#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 <nl_types.h> +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 <hbaapi.h> +#ifndef __x86 +#include <sys/scsi/generic/mode.h> +#include <sys/scsi/generic/sense.h> +#include <sys/scsi/impl/uscsi.h> +#include <g_state.h> +#include <stgcom.h> +#include <l_common.h> +#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 */ |