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 (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   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.
  12  *
  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]
  18  *
  19  * CDDL HEADER END
  20  */
  21 
  22 /* Copyright 2009 QLogic Corporation */
  23 
  24 /*
  25  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  26  * Use is subject to license terms.
  27  */
  28 
  29 #ifndef _QL_APPS_H
  30 #define _QL_APPS_H
  31 
  32 /*
  33  * ISP2xxx Solaris Fibre Channel Adapter (FCA) driver header file.
  34  *
  35  * ***********************************************************************
  36  * *                                                                    **
  37  * *                            NOTICE                                  **
  38  * *            COPYRIGHT (C) 1996-2009 QLOGIC CORPORATION              **
  39  * *                    ALL RIGHTS RESERVED                             **
  40  * *                                                                    **
  41  * ***********************************************************************
  42  *
  43  */
  44 
  45 #ifdef  __cplusplus
  46 extern "C" {
  47 #endif
  48 
  49 #include <sys/scsi/scsi_types.h>
  50 
  51 /* f/w trace sizes */
  52 #define FWEXTSIZE               (0x4000 * 4)    /* bytes - 16kb multiples */
  53 #define FWFCESIZE               (0x4000 * 4)    /* bytes - 16kb multiples */
  54 
  55 /*
  56  * ISP8100 Extended Initialization Control Block
  57  */
  58 typedef struct ql_ext_icb_8100 {
  59         uint8_t version[2];
  60         /*
  61          * BIT 0 = FCF VLAN ID Match
  62          * BIT 1 = FCF Fabric Name Match
  63          * BIT 2-7 = Reserved
  64          */
  65         uint8_t fcf_vlan_match;
  66         uint8_t reserved_6[3];
  67         uint8_t fcf_vlan_id[2];
  68         uint8_t fcf_fabric_name[8];
  69         uint8_t reserved_7[14];
  70         uint8_t spma_proposed_mac_address[6];
  71         uint8_t reserved_8[28];
  72 } ql_ext_icb_8100_t;
  73 
  74 /*
  75  * Name:        Adapter Revsion Level Structure
  76  *
  77  * Purpose:     Supply various revision levels of h/w and driver
  78  *
  79  * Used by:
  80  *              qlctest utility
  81  *
  82  */
  83 typedef struct ql_adapter_revlvl {
  84         uint16_t isp2200;                       /* 2200 chip rev level */
  85         uint16_t risc;                          /* risc rev level */
  86         uint16_t frmbfr;                        /* frame buffer rev level */
  87         uint16_t riscrom;                       /* risc rom rev level */
  88         char qlddv[16];                         /* ql driver version string */
  89 } ql_adapter_revlvl_t;
  90 
  91 /*
  92  * Name:        Application Mailbox Interface Structure
  93  *
  94  * Purpose:     Used to pass mailbox data between app and driver.
  95  *
  96  * Used by:
  97  *              qlctest utility
  98  *
  99  */
 100 typedef struct app_mbx_cmd {
 101         uint16_t        mb[32];
 102         uint8_t         reserved1[32];
 103 } app_mbx_cmd_t;
 104 
 105 /*
 106  * Name:        Diagnostic Loopback Parameter Structure
 107  *
 108  * Purpose:     Used for loopback parameter data
 109  *
 110  * Used by:
 111  *              qlctest utility
 112  *
 113  */
 114 #ifndef apps_64bit
 115 typedef struct lbp {
 116         uint16_t  options;
 117         uint32_t  transfer_count;
 118         uint16_t  transfer_segment_count;
 119         uint16_t  receive_segment_count;
 120         uint32_t  transfer_data_address;
 121         uint32_t  receive_data_address;
 122         uint32_t  iteration_count;
 123 } lbp_t;
 124 #else
 125 typedef struct lbp {
 126         uint16_t  options;
 127         uint32_t  transfer_count;
 128         uint16_t  transfer_segment_count;
 129         uint16_t  receive_segment_count;
 130         uint64_t  transfer_data_address;
 131         uint64_t  receive_data_address;
 132         uint32_t  iteration_count;
 133 } lbp_t;
 134 #endif
 135 
 136 /*
 137  * Defines used by:
 138  *                      qlctest utility
 139  *
 140  * Prupose:
 141  *      diag switch clause hooks provided for requested diagnostic
 142  *      functionality (Check command Queue, Revision Level, Firmwware
 143  *      Checksum, Self Test, Loopback Mailbox, Loopback Data, Execute
 144  *      Firmware and send ECHO.
 145  */
 146 #define QL_DIAG_CHKCMDQUE               0
 147 #define QL_DIAG_FMWCHKSUM               1
 148 #define QL_DIAG_SLFTST                  2
 149 #define QL_DIAG_REVLVL                  3
 150 #define QL_DIAG_LPBMBX                  4
 151 #define QL_DIAG_LPBDTA                  5
 152 #define QL_DIAG_EXEFMW                  6
 153 #define QL_GET_ADAPTER_FEATURE_BITS     7
 154 #define QL_SET_ADAPTER_FEATURE_BITS     8
 155 #define QL_SET_ADAPTER_NVRAM_DEFAULTS   9
 156 #define QL_DIAG_ECHO                    10
 157 
 158 /*
 159  * Defines used for:
 160  *                      qladm utility
 161  *                      qlctest utility
 162  *
 163  * Purpose:
 164  *      Driver IOCTL numbers for nvram dump/load, and driverop
 165  *      functions. NB: 300 --> 399 are reserved for qla2x00 foapi's
 166  */
 167 #define QL_UTIL_LOAD    100
 168 #define QL_UTIL_DUMP    101
 169 #define QL_FOAPI_START  300
 170 #define QL_FOAPI_END    399
 171 #define QL_ADM_OP       402
 172 
 173 /*
 174  * Purpose:
 175  *      QLA_ADM_OP command definitions
 176  *
 177  * Used by:
 178  *              qladm utility
 179  *              qlctest utility
 180  */
 181 typedef enum ql_adm_cmd  {
 182         QL_EXTENDED_LOGGING,
 183         QL_ADAPTER_INFO,
 184         QL_DEVICE_LIST,
 185         QL_LOOP_RESET,
 186         QL_FW_DUMP,
 187         QL_NVRAM_LOAD,
 188         QL_NVRAM_DUMP,
 189         QL_FLASH_LOAD,
 190         QL_PROP_UPDATE_INT,
 191         QL_UPDATE_PROPERTIES,
 192         QL_VPD_LOAD,
 193         QL_VPD_DUMP,
 194         QL_VPD_GETTAG,
 195         QL_UPD_FWMODULE
 196 } ql_adm_cmd_t;
 197 
 198 /*
 199  * Purpose:
 200  *      QLA_ADM_OP Parameter Interface Structure
 201  *
 202  * Used by:
 203  *              qladm utility
 204  *              qlctest utility
 205  */
 206 typedef struct ql_adm_op {
 207         uint64_t        buffer;
 208         uint32_t        length;
 209         uint32_t        option;
 210         ql_adm_cmd_t    cmd;    /* driver_op command */
 211 } ql_adm_op_t;
 212 
 213 /*
 214  * Purpose:
 215  *      QLA_ADM_OP parameter data structure
 216  *
 217  * Used by:
 218  *              qladm utility
 219  *              qlctest utility
 220  */
 221 #define MAX_PROP_LENGTH 256
 222 typedef struct ql_adapter_info {
 223         uint8_t         wwpn[8];
 224         uint32_t        d_id;
 225         uint32_t        flash_size;
 226         uint16_t        device_id;
 227         char            fw_ver[MAX_PROP_LENGTH];
 228         char            fcode_ver[MAX_PROP_LENGTH];
 229         char            driver_ver[MAX_PROP_LENGTH];
 230 } ql_adapter_info_t;
 231 
 232 /*
 233  * Purpose:
 234  *      QLA_ADM_OP data types (Fibre channel port types)
 235  *
 236  * Used by:
 237  *              qladm utility
 238  *              qlctest utility
 239  */
 240 typedef enum ql_port_type {
 241         FCT_UNKNOWN,
 242         FCT_TAPE,
 243         FCT_INITIATOR,
 244         FCT_TARGET
 245 } ql_port_type_t;
 246 
 247 /*
 248  * Purpose:
 249  *      QLA_ADM_OP Device Information Structure
 250  *
 251  * Used by:
 252  *              qladm utility
 253  *              qlctest utility
 254  */
 255 typedef struct ql_device_info {
 256         uint8_t         wwpn[8];
 257         uint32_t        address;
 258         ql_port_type_t  type;
 259         uint16_t        loop_id;
 260 } ql_device_info_t;
 261 
 262 #ifdef  __cplusplus
 263 }
 264 #endif
 265 
 266 #endif /* _QL_APPS_H */