summaryrefslogtreecommitdiff
path: root/usr/src/cmd/luxadm/common.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd/luxadm/common.h')
-rw-r--r--usr/src/cmd/luxadm/common.h495
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 */