1fcf3ce44SJohn Forte /* 2fcf3ce44SJohn Forte * CDDL HEADER START 3fcf3ce44SJohn Forte * 4fcf3ce44SJohn Forte * The contents of this file are subject to the terms of the 5fcf3ce44SJohn Forte * Common Development and Distribution License (the "License"). 6fcf3ce44SJohn Forte * You may not use this file except in compliance with the License. 7fcf3ce44SJohn Forte * 8*8f23e9faSHans Rosenfeld * You can obtain a copy of the license at 9*8f23e9faSHans Rosenfeld * http://www.opensource.org/licenses/cddl1.txt. 10fcf3ce44SJohn Forte * See the License for the specific language governing permissions 11fcf3ce44SJohn Forte * and limitations under the License. 12fcf3ce44SJohn Forte * 13fcf3ce44SJohn Forte * When distributing Covered Code, include this CDDL HEADER in each 14fcf3ce44SJohn Forte * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15fcf3ce44SJohn Forte * If applicable, add the following below this CDDL HEADER, with the 16fcf3ce44SJohn Forte * fields enclosed by brackets "[]" replaced with your own identifying 17fcf3ce44SJohn Forte * information: Portions Copyright [yyyy] [name of copyright owner] 18fcf3ce44SJohn Forte * 19fcf3ce44SJohn Forte * CDDL HEADER END 20fcf3ce44SJohn Forte */ 21fcf3ce44SJohn Forte 22fcf3ce44SJohn Forte /* 23*8f23e9faSHans Rosenfeld * Copyright (c) 2004-2012 Emulex. All rights reserved. 2482527734SSukumar Swaminathan * Use is subject to license terms. 25fcf3ce44SJohn Forte */ 26fcf3ce44SJohn Forte 27fcf3ce44SJohn Forte #ifndef _EMLXS_FCIO_H 28fcf3ce44SJohn Forte #define _EMLXS_FCIO_H 29fcf3ce44SJohn Forte 30fcf3ce44SJohn Forte #ifdef __cplusplus 31fcf3ce44SJohn Forte extern "C" { 32fcf3ce44SJohn Forte #endif 33fcf3ce44SJohn Forte 34fcf3ce44SJohn Forte /* 35fcf3ce44SJohn Forte * FCIO_REV: 1 - Initial implementation 2 - Added EMLXS_GET_FCIO_REV support 36fcf3ce44SJohn Forte */ 37291a2b48SSukumar Swaminathan #define FCIO_REV 2 38fcf3ce44SJohn Forte 39fcf3ce44SJohn Forte 40fcf3ce44SJohn Forte /* Emulex ULP Diag Codes */ 41fcf3ce44SJohn Forte #define EMLXS_DIAG ('E'<< 8) 42fcf3ce44SJohn Forte 43fcf3ce44SJohn Forte #define EMLXS_DIAG_BIU (EMLXS_DIAG | 100) 44fcf3ce44SJohn Forte #define EMLXS_DIAG_POST (EMLXS_DIAG | 101) 45fcf3ce44SJohn Forte #define EMLXS_DIAG_ECHO (EMLXS_DIAG | 102) 46fcf3ce44SJohn Forte 47fcf3ce44SJohn Forte #define EMLXS_PARM_GET_NUM (EMLXS_DIAG | 200) 48fcf3ce44SJohn Forte #define EMLXS_PARM_GET_LIST (EMLXS_DIAG | 201) 49fcf3ce44SJohn Forte #define EMLXS_PARM_GET (EMLXS_DIAG | 202) 50fcf3ce44SJohn Forte #define EMLXS_PARM_SET (EMLXS_DIAG | 203) 51fcf3ce44SJohn Forte #define EMLXS_GET_BOOT_REV (EMLXS_DIAG | 204) 52fcf3ce44SJohn Forte #define EMLXS_DOWNLOAD_BOOT (EMLXS_DIAG | 205) 53fcf3ce44SJohn Forte #define EMLXS_DOWNLOAD_CFL (EMLXS_DIAG | 206) 54291a2b48SSukumar Swaminathan #define EMLXS_VPD_GET (EMLXS_DIAG | 207) 55291a2b48SSukumar Swaminathan #define EMLXS_GET_FCIO_REV (EMLXS_DIAG | 208) 56fcf3ce44SJohn Forte #define EMLXS_SET_BOOT_STATE_old (EMLXS_DIAG | 209) 57fcf3ce44SJohn Forte #define EMLXS_GET_BOOT_STATE_old (EMLXS_DIAG | 210) 58fcf3ce44SJohn Forte #define EMLXS_DFC_COMMAND (EMLXS_DIAG | 211) 59fcf3ce44SJohn Forte #define EMLXS_SET_BOOT_STATE (EMLXS_DIAG | 212) 60fcf3ce44SJohn Forte #define EMLXS_GET_BOOT_STATE (EMLXS_DIAG | 213) 61*8f23e9faSHans Rosenfeld #define EMLXS_GET_DFC_REV (EMLXS_DIAG | 214) 62*8f23e9faSHans Rosenfeld #define EMLXS_PHY_GET (EMLXS_DIAG | 215) 63*8f23e9faSHans Rosenfeld #define EMLXS_SET_THROTTLE (EMLXS_DIAG | 216) 64*8f23e9faSHans Rosenfeld #define EMLXS_GET_THROTTLE (EMLXS_DIAG | 217) 65*8f23e9faSHans Rosenfeld #define EMLXS_VPD_GET_V2 (EMLXS_DIAG | 218) 66fcf3ce44SJohn Forte 6782527734SSukumar Swaminathan #define EMLXS_BAR_IO (EMLXS_DIAG | 253) 68291a2b48SSukumar Swaminathan #define EMLXS_TEST_CODE (EMLXS_DIAG | 254) 69291a2b48SSukumar Swaminathan #define EMLXS_HW_ERROR_TEST (EMLXS_DIAG | 255) 70a9800bebSGarrett D'Amore #define EMLXS_MB_TIMEOUT_TEST (EMLXS_DIAG | 256) 71fcf3ce44SJohn Forte 72fcf3ce44SJohn Forte #define EMLXS_LOG_GET (EMLXS_DIAG | 300) 73fcf3ce44SJohn Forte 74fcf3ce44SJohn Forte 75291a2b48SSukumar Swaminathan /* DUMP file ids */ 76291a2b48SSukumar Swaminathan #define EMLXS_TXT_FILE_ID 1 77291a2b48SSukumar Swaminathan #define EMLXS_DMP_FILE_ID 2 78291a2b48SSukumar Swaminathan #define EMLXS_CEE_FILE_ID 3 7982527734SSukumar Swaminathan #define EMLXS_FAT_FILE_ID 4 80291a2b48SSukumar Swaminathan 81fcf3ce44SJohn Forte 82fcf3ce44SJohn Forte /* Emulex specific error codes */ 83fcf3ce44SJohn Forte #define EMLXS_ERRNO_START 0x100 84291a2b48SSukumar Swaminathan #define EMLXS_TEST_FAILED (EMLXS_ERRNO_START + 0) /* Diagnostic */ 85291a2b48SSukumar Swaminathan /* test fail */ 86291a2b48SSukumar Swaminathan #define EMLXS_IMAGE_BAD (EMLXS_ERRNO_START + 1) /* Image has */ 87291a2b48SSukumar Swaminathan /* bad data */ 88291a2b48SSukumar Swaminathan #define EMLXS_IMAGE_INCOMPATIBLE (EMLXS_ERRNO_START + 2) /* Image not */ 89291a2b48SSukumar Swaminathan /* compatible */ 90291a2b48SSukumar Swaminathan /* with H/W */ 91291a2b48SSukumar Swaminathan #define EMLXS_IMAGE_FAILED (EMLXS_ERRNO_START + 3) /* Image */ 92291a2b48SSukumar Swaminathan /* download */ 93291a2b48SSukumar Swaminathan /* failed */ 94291a2b48SSukumar Swaminathan #define EMLXS_OFFLINE_FAILED (EMLXS_ERRNO_START + 4) /* Unable to */ 95291a2b48SSukumar Swaminathan /* take HBA */ 96291a2b48SSukumar Swaminathan /* offline */ 97291a2b48SSukumar Swaminathan #define EMLXS_NO_BOOT_CODE (EMLXS_ERRNO_START + 5) /* No boot */ 98291a2b48SSukumar Swaminathan /* code image */ 99fe199829SSukumar Swaminathan #define EMLXS_OP_NOT_SUP (EMLXS_ERRNO_START + 6) /* Operation */ 100fe199829SSukumar Swaminathan /* not supp */ 101*8f23e9faSHans Rosenfeld #define EMLXS_REBOOT_REQUIRED (EMLXS_ERRNO_START + 7) /* Reboot */ 102*8f23e9faSHans Rosenfeld /* required */ 103*8f23e9faSHans Rosenfeld #define EMLXS_ERRNO_END (EMLXS_ERRNO_START + 7) 104fcf3ce44SJohn Forte 105fcf3ce44SJohn Forte 106291a2b48SSukumar Swaminathan typedef struct emlxs_parm 107291a2b48SSukumar Swaminathan { 108291a2b48SSukumar Swaminathan char label[32]; 109291a2b48SSukumar Swaminathan uint32_t min; 110291a2b48SSukumar Swaminathan uint32_t max; 111291a2b48SSukumar Swaminathan uint32_t def; 112291a2b48SSukumar Swaminathan uint32_t current; 113291a2b48SSukumar Swaminathan uint32_t flags; 114291a2b48SSukumar Swaminathan char help[128]; 115fcf3ce44SJohn Forte } emlxs_parm_t; 116fcf3ce44SJohn Forte 117fcf3ce44SJohn Forte /* emlxs_parm_t flags */ 118291a2b48SSukumar Swaminathan #define PARM_DYNAMIC 0x00000001 /* Reboot not required */ 119291a2b48SSukumar Swaminathan #define PARM_BOOLEAN 0x00000002 120291a2b48SSukumar Swaminathan #define PARM_HEX 0x00000004 121fcf3ce44SJohn Forte 122fcf3ce44SJohn Forte /* PARM_DYNAMIC subtypes */ 123fcf3ce44SJohn Forte #define PARM_DYNAMIC_RESET (PARM_DYNAMIC | 0x00000010) /* Hard reset */ 124291a2b48SSukumar Swaminathan /* required */ 125fcf3ce44SJohn Forte #define PARM_DYNAMIC_LINK (PARM_DYNAMIC | 0x00000020) /* Link reset */ 126291a2b48SSukumar Swaminathan /* required */ 127291a2b48SSukumar Swaminathan 128291a2b48SSukumar Swaminathan typedef struct emlxs_vpd_desc 129291a2b48SSukumar Swaminathan { 130291a2b48SSukumar Swaminathan char id[80]; 131291a2b48SSukumar Swaminathan char part_num[32]; 132291a2b48SSukumar Swaminathan char eng_change[32]; 133291a2b48SSukumar Swaminathan char manufacturer[80]; 134291a2b48SSukumar Swaminathan char serial_num[32]; 135291a2b48SSukumar Swaminathan char model[32]; 136291a2b48SSukumar Swaminathan char model_desc[80]; 137291a2b48SSukumar Swaminathan char port_num[4]; 138291a2b48SSukumar Swaminathan char prog_types[80]; 139fcf3ce44SJohn Forte } emlxs_vpd_desc_t; 140fcf3ce44SJohn Forte 141*8f23e9faSHans Rosenfeld typedef struct emlxs_vpd_desc_v2 142*8f23e9faSHans Rosenfeld { 143*8f23e9faSHans Rosenfeld char id[256]; 144*8f23e9faSHans Rosenfeld char part_num[256]; 145*8f23e9faSHans Rosenfeld char eng_change[256]; 146*8f23e9faSHans Rosenfeld char manufacturer[256]; 147*8f23e9faSHans Rosenfeld char serial_num[256]; 148*8f23e9faSHans Rosenfeld char model[256]; 149*8f23e9faSHans Rosenfeld char model_desc[256]; 150*8f23e9faSHans Rosenfeld char port_num[256]; 151*8f23e9faSHans Rosenfeld char prog_types[256]; 152*8f23e9faSHans Rosenfeld } emlxs_vpd_desc_v2_t; 153*8f23e9faSHans Rosenfeld 154*8f23e9faSHans Rosenfeld typedef struct emlxs_phy_desc 155*8f23e9faSHans Rosenfeld { 156*8f23e9faSHans Rosenfeld uint32_t phy_type; 157*8f23e9faSHans Rosenfeld uint32_t interface_type; 158*8f23e9faSHans Rosenfeld uint32_t misc_params; 159*8f23e9faSHans Rosenfeld uint32_t rsvd[4]; 160*8f23e9faSHans Rosenfeld 161*8f23e9faSHans Rosenfeld } emlxs_phy_desc_t; 162*8f23e9faSHans Rosenfeld 163*8f23e9faSHans Rosenfeld typedef struct emlxs_throttle_desc 164*8f23e9faSHans Rosenfeld { 165*8f23e9faSHans Rosenfeld uint8_t wwpn[8]; 166*8f23e9faSHans Rosenfeld uint32_t throttle; 167*8f23e9faSHans Rosenfeld 168*8f23e9faSHans Rosenfeld } emlxs_throttle_desc_t; 169*8f23e9faSHans Rosenfeld 170291a2b48SSukumar Swaminathan typedef struct emlxs_log_req 171291a2b48SSukumar Swaminathan { 172291a2b48SSukumar Swaminathan uint32_t first; /* First msg id requested */ 173291a2b48SSukumar Swaminathan uint32_t count; /* Maximum number of messages */ 174291a2b48SSukumar Swaminathan /* capable of receiving */ 175291a2b48SSukumar Swaminathan /* This value can be set to zero */ 176291a2b48SSukumar Swaminathan /* to receive just log stats */ 177fcf3ce44SJohn Forte } emlxs_log_req_t; 178fcf3ce44SJohn Forte 179fcf3ce44SJohn Forte 180291a2b48SSukumar Swaminathan typedef struct emlxs_log_resp 181291a2b48SSukumar Swaminathan { 182291a2b48SSukumar Swaminathan uint32_t first; /* Actual starting msg id in resp buffer */ 183291a2b48SSukumar Swaminathan /* This represents the first available */ 184291a2b48SSukumar Swaminathan /* msg id >= first id requested */ 185291a2b48SSukumar Swaminathan uint32_t last; /* Current last msg id in log file */ 186291a2b48SSukumar Swaminathan uint32_t count; /* Total number of messages in resp buffer */ 187291a2b48SSukumar Swaminathan /* This value will be <= the max count */ 188291a2b48SSukumar Swaminathan /* requested */ 189291a2b48SSukumar Swaminathan 190291a2b48SSukumar Swaminathan /* If count > 0, then the response buffer */ 191291a2b48SSukumar Swaminathan /* will immediately follow this structure */ 192291a2b48SSukumar Swaminathan /* The response buffer will be an array of */ 193291a2b48SSukumar Swaminathan /* string buffers MAX_MSG_LENGTH in size */ 194fcf3ce44SJohn Forte #define MAX_LOG_MSG_LENGTH 160 195fcf3ce44SJohn Forte } emlxs_log_resp_t; 196fcf3ce44SJohn Forte 197*8f23e9faSHans Rosenfeld typedef struct FCIO_EQ_DESC 198*8f23e9faSHans Rosenfeld { 199*8f23e9faSHans Rosenfeld uint32_t host_index; 200*8f23e9faSHans Rosenfeld uint32_t max_index; 201*8f23e9faSHans Rosenfeld uint32_t qid; 202*8f23e9faSHans Rosenfeld uint32_t msix_vector; 203*8f23e9faSHans Rosenfeld 204*8f23e9faSHans Rosenfeld uint32_t phys; /* specifies physical buffer pointer */ 205*8f23e9faSHans Rosenfeld uint32_t virt; /* specifies virtual buffer pointer */ 206*8f23e9faSHans Rosenfeld uint32_t virt_hi; /* specifies virtual buffer pointer */ 207*8f23e9faSHans Rosenfeld 208*8f23e9faSHans Rosenfeld /* Statistics */ 209*8f23e9faSHans Rosenfeld uint32_t max_proc; 210*8f23e9faSHans Rosenfeld uint32_t isr_count; 211*8f23e9faSHans Rosenfeld uint32_t num_proc; 212*8f23e9faSHans Rosenfeld } FCIO_EQ_DESC_t; 213*8f23e9faSHans Rosenfeld 214*8f23e9faSHans Rosenfeld 215*8f23e9faSHans Rosenfeld typedef struct FCIO_CQ_DESC 216*8f23e9faSHans Rosenfeld { 217*8f23e9faSHans Rosenfeld uint32_t host_index; 218*8f23e9faSHans Rosenfeld uint32_t max_index; 219*8f23e9faSHans Rosenfeld uint32_t qid; 220*8f23e9faSHans Rosenfeld uint32_t eqid; 221*8f23e9faSHans Rosenfeld uint32_t type; 222*8f23e9faSHans Rosenfeld 223*8f23e9faSHans Rosenfeld uint32_t phys; /* specifies physical buffer pointer */ 224*8f23e9faSHans Rosenfeld uint32_t virt; /* specifies virtual buffer pointer */ 225*8f23e9faSHans Rosenfeld uint32_t virt_hi; /* specifies virtual buffer pointer */ 226*8f23e9faSHans Rosenfeld 227*8f23e9faSHans Rosenfeld /* Statistics */ 228*8f23e9faSHans Rosenfeld uint32_t max_proc; 229*8f23e9faSHans Rosenfeld uint32_t isr_count; 230*8f23e9faSHans Rosenfeld uint32_t num_proc; 231*8f23e9faSHans Rosenfeld uint32_t rsvd; 232*8f23e9faSHans Rosenfeld } FCIO_CQ_DESC_t; 233*8f23e9faSHans Rosenfeld 234*8f23e9faSHans Rosenfeld 235*8f23e9faSHans Rosenfeld typedef struct FCIO_WQ_DESC 236*8f23e9faSHans Rosenfeld { 237*8f23e9faSHans Rosenfeld uint32_t host_index; 238*8f23e9faSHans Rosenfeld uint32_t max_index; 239*8f23e9faSHans Rosenfeld uint32_t port_index; 240*8f23e9faSHans Rosenfeld uint32_t release_depth; 241*8f23e9faSHans Rosenfeld uint32_t qid; 242*8f23e9faSHans Rosenfeld uint32_t cqid; 243*8f23e9faSHans Rosenfeld 244*8f23e9faSHans Rosenfeld uint32_t phys; /* specifies physical buffer pointer */ 245*8f23e9faSHans Rosenfeld uint32_t virt; /* specifies virtual buffer pointer */ 246*8f23e9faSHans Rosenfeld uint32_t virt_hi; /* specifies virtual buffer pointer */ 247*8f23e9faSHans Rosenfeld 248*8f23e9faSHans Rosenfeld /* Statistics */ 249*8f23e9faSHans Rosenfeld uint32_t num_proc; 250*8f23e9faSHans Rosenfeld uint32_t num_busy; 251*8f23e9faSHans Rosenfeld uint32_t rsvd; 252*8f23e9faSHans Rosenfeld } FCIO_WQ_DESC_t; 253*8f23e9faSHans Rosenfeld 254*8f23e9faSHans Rosenfeld 255*8f23e9faSHans Rosenfeld typedef struct FCIO_RQ_DESC 256*8f23e9faSHans Rosenfeld { 257*8f23e9faSHans Rosenfeld uint32_t host_index; 258*8f23e9faSHans Rosenfeld uint32_t max_index; 259*8f23e9faSHans Rosenfeld uint32_t qid; 260*8f23e9faSHans Rosenfeld uint32_t cqid; 261*8f23e9faSHans Rosenfeld 262*8f23e9faSHans Rosenfeld uint32_t phys; /* specifies physical buffer pointer */ 263*8f23e9faSHans Rosenfeld uint32_t virt; /* specifies virtual buffer pointer */ 264*8f23e9faSHans Rosenfeld uint32_t virt_hi; /* specifies virtual buffer pointer */ 265*8f23e9faSHans Rosenfeld 266*8f23e9faSHans Rosenfeld /* Statistics */ 267*8f23e9faSHans Rosenfeld uint32_t num_proc; 268*8f23e9faSHans Rosenfeld } FCIO_RQ_DESC_t; 269*8f23e9faSHans Rosenfeld 270*8f23e9faSHans Rosenfeld 271*8f23e9faSHans Rosenfeld #define FCIO_MSI_MAX_INTRS 8 272*8f23e9faSHans Rosenfeld #define FCIO_MAX_WQS_PER_EQ 4 273*8f23e9faSHans Rosenfeld #define FCIO_MAX_EQS FCIO_MSI_MAX_INTRS 274*8f23e9faSHans Rosenfeld #define FCIO_MAX_WQS FCIO_MAX_WQS_PER_EQ * FCIO_MAX_EQS 275*8f23e9faSHans Rosenfeld #define FCIO_MAX_RQS 2 /* ONLY 1 pair is allowed */ 276*8f23e9faSHans Rosenfeld 277*8f23e9faSHans Rosenfeld /* One CQ for each WQ & (RQ pair) plus one for the MQ */ 278*8f23e9faSHans Rosenfeld #define FCIO_MAX_CQS (FCIO_MAX_WQS + (FCIO_MAX_RQS/2) + 1) 279*8f23e9faSHans Rosenfeld 280*8f23e9faSHans Rosenfeld typedef struct FCIO_Q_STAT 281*8f23e9faSHans Rosenfeld { 282*8f23e9faSHans Rosenfeld FCIO_EQ_DESC_t eq[FCIO_MAX_EQS]; 283*8f23e9faSHans Rosenfeld FCIO_CQ_DESC_t cq[FCIO_MAX_CQS]; 284*8f23e9faSHans Rosenfeld FCIO_WQ_DESC_t wq[FCIO_MAX_WQS]; 285*8f23e9faSHans Rosenfeld FCIO_RQ_DESC_t rq[FCIO_MAX_RQS]; 286*8f23e9faSHans Rosenfeld uint32_t que_start_timer; 287*8f23e9faSHans Rosenfeld uint32_t que_current_timer; 288*8f23e9faSHans Rosenfeld uint32_t intr_count; 289*8f23e9faSHans Rosenfeld } FCIO_Q_STAT_t; 290*8f23e9faSHans Rosenfeld 291*8f23e9faSHans Rosenfeld 292fcf3ce44SJohn Forte #ifdef __cplusplus 293fcf3ce44SJohn Forte } 294fcf3ce44SJohn Forte #endif 295fcf3ce44SJohn Forte 296fcf3ce44SJohn Forte #endif /* _EMLXS_FCIO_H */ 297