1*82527734SSukumar Swaminathan /* 2*82527734SSukumar Swaminathan * CDDL HEADER START 3*82527734SSukumar Swaminathan * 4*82527734SSukumar Swaminathan * The contents of this file are subject to the terms of the 5*82527734SSukumar Swaminathan * Common Development and Distribution License (the "License"). 6*82527734SSukumar Swaminathan * You may not use this file except in compliance with the License. 7*82527734SSukumar Swaminathan * 8*82527734SSukumar Swaminathan * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*82527734SSukumar Swaminathan * or http://www.opensolaris.org/os/licensing. 10*82527734SSukumar Swaminathan * See the License for the specific language governing permissions 11*82527734SSukumar Swaminathan * and limitations under the License. 12*82527734SSukumar Swaminathan * 13*82527734SSukumar Swaminathan * When distributing Covered Code, include this CDDL HEADER in each 14*82527734SSukumar Swaminathan * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*82527734SSukumar Swaminathan * If applicable, add the following below this CDDL HEADER, with the 16*82527734SSukumar Swaminathan * fields enclosed by brackets "[]" replaced with your own identifying 17*82527734SSukumar Swaminathan * information: Portions Copyright [yyyy] [name of copyright owner] 18*82527734SSukumar Swaminathan * 19*82527734SSukumar Swaminathan * CDDL HEADER END 20*82527734SSukumar Swaminathan */ 21*82527734SSukumar Swaminathan 22*82527734SSukumar Swaminathan /* 23*82527734SSukumar Swaminathan * Copyright 2009 Emulex. All rights reserved. 24*82527734SSukumar Swaminathan * Use is subject to license terms. 25*82527734SSukumar Swaminathan */ 26*82527734SSukumar Swaminathan 27*82527734SSukumar Swaminathan #ifndef _EMLXS_IOCB_H 28*82527734SSukumar Swaminathan #define _EMLXS_IOCB_H 29*82527734SSukumar Swaminathan 30*82527734SSukumar Swaminathan #ifdef __cplusplus 31*82527734SSukumar Swaminathan extern "C" { 32*82527734SSukumar Swaminathan #endif 33*82527734SSukumar Swaminathan 34*82527734SSukumar Swaminathan /* ==== IOCB Commands ==== */ 35*82527734SSukumar Swaminathan 36*82527734SSukumar Swaminathan #define CMD_RCV_SEQUENCE_CX 0x01 37*82527734SSukumar Swaminathan #define CMD_XMIT_SEQUENCE_CR 0x02 38*82527734SSukumar Swaminathan #define CMD_XMIT_SEQUENCE_CX 0x03 39*82527734SSukumar Swaminathan #define CMD_XMIT_BCAST_CN 0x04 40*82527734SSukumar Swaminathan #define CMD_XMIT_BCAST_CX 0x05 41*82527734SSukumar Swaminathan #define CMD_QUE_RING_BUF_CN 0x06 42*82527734SSukumar Swaminathan #define CMD_QUE_XRI_BUF_CX 0x07 43*82527734SSukumar Swaminathan #define CMD_IOCB_CONTINUE_CN 0x08 44*82527734SSukumar Swaminathan #define CMD_RET_XRI_BUF_CX 0x09 45*82527734SSukumar Swaminathan #define CMD_ELS_REQUEST_CR 0x0A 46*82527734SSukumar Swaminathan #define CMD_ELS_REQUEST_CX 0x0B 47*82527734SSukumar Swaminathan #define CMD_RCV_ELS_REQ_CX 0x0D 48*82527734SSukumar Swaminathan #define CMD_ABORT_XRI_CN 0x0E 49*82527734SSukumar Swaminathan #define CMD_ABORT_XRI_CX 0x0F 50*82527734SSukumar Swaminathan #define CMD_CLOSE_XRI_CN 0x10 51*82527734SSukumar Swaminathan #define CMD_CLOSE_XRI_CX 0x11 52*82527734SSukumar Swaminathan #define CMD_CREATE_XRI_CR 0x12 53*82527734SSukumar Swaminathan #define CMD_CREATE_XRI_CX 0x13 54*82527734SSukumar Swaminathan #define CMD_GET_RPI_CN 0x14 55*82527734SSukumar Swaminathan #define CMD_XMIT_ELS_RSP_CX 0x15 56*82527734SSukumar Swaminathan #define CMD_GET_RPI_CR 0x16 57*82527734SSukumar Swaminathan #define CMD_XRI_ABORTED_CX 0x17 58*82527734SSukumar Swaminathan #define CMD_FCP_IWRITE_CR 0x18 59*82527734SSukumar Swaminathan #define CMD_FCP_IWRITE_CX 0x19 60*82527734SSukumar Swaminathan #define CMD_FCP_IREAD_CR 0x1A 61*82527734SSukumar Swaminathan #define CMD_FCP_IREAD_CX 0x1B 62*82527734SSukumar Swaminathan #define CMD_FCP_ICMND_CR 0x1C 63*82527734SSukumar Swaminathan #define CMD_FCP_ICMND_CX 0x1D 64*82527734SSukumar Swaminathan #define CMD_FCP_TSEND_CX 0x1F /* FCP_TARGET_MODE */ 65*82527734SSukumar Swaminathan #define CMD_ADAPTER_MSG 0x20 66*82527734SSukumar Swaminathan #define CMD_FCP_TRECEIVE_CX 0x21 /* FCP_TARGET_MODE */ 67*82527734SSukumar Swaminathan #define CMD_ADAPTER_DUMP 0x22 68*82527734SSukumar Swaminathan #define CMD_FCP_TRSP_CX 0x23 /* FCP_TARGET_MODE */ 69*82527734SSukumar Swaminathan #define CMD_FCP_AUTO_TRSP_CX 0x29 /* FCP_TARGET_MODE */ 70*82527734SSukumar Swaminathan 71*82527734SSukumar Swaminathan /* LP3000 gasket IOCB Command Set */ 72*82527734SSukumar Swaminathan 73*82527734SSukumar Swaminathan #define CMD_BPL_IWRITE_CR 0x48 74*82527734SSukumar Swaminathan #define CMD_BPL_IWRITE_CX 0x49 75*82527734SSukumar Swaminathan #define CMD_BPL_IREAD_CR 0x4A 76*82527734SSukumar Swaminathan #define CMD_BPL_IREAD_CX 0x4B 77*82527734SSukumar Swaminathan #define CMD_BPL_ICMND_CR 0x4C 78*82527734SSukumar Swaminathan #define CMD_BPL_ICMND_CX 0x4D 79*82527734SSukumar Swaminathan 80*82527734SSukumar Swaminathan #define CMD_ASYNC_STATUS 0x7C 81*82527734SSukumar Swaminathan 82*82527734SSukumar Swaminathan /* SLI_2 IOCB Command Set */ 83*82527734SSukumar Swaminathan #define CMD_RCV_SEQUENCE64_CX 0x81 84*82527734SSukumar Swaminathan #define CMD_XMIT_SEQUENCE64_CR 0x82 85*82527734SSukumar Swaminathan #define CMD_XMIT_SEQUENCE64_CX 0x83 86*82527734SSukumar Swaminathan #define CMD_XMIT_BCAST64_CN 0x84 87*82527734SSukumar Swaminathan #define CMD_XMIT_BCAST64_CX 0x85 88*82527734SSukumar Swaminathan #define CMD_QUE_RING_BUF64_CN 0x86 89*82527734SSukumar Swaminathan #define CMD_QUE_XRI_BUF64_CX 0x87 90*82527734SSukumar Swaminathan #define CMD_IOCB_CONTINUE64_CN 0x88 91*82527734SSukumar Swaminathan #define CMD_RET_XRI_BUF64_CX 0x89 92*82527734SSukumar Swaminathan #define CMD_ELS_REQUEST64_CR 0x8A 93*82527734SSukumar Swaminathan #define CMD_ELS_REQUEST64_CX 0x8B 94*82527734SSukumar Swaminathan #define CMD_RCV_ELS_REQ64_CX 0x8D 95*82527734SSukumar Swaminathan #define CMD_XMIT_ELS_RSP64_CX 0x95 96*82527734SSukumar Swaminathan #define CMD_XMIT_BLS_RSP64_CX 0x97 97*82527734SSukumar Swaminathan #define CMD_FCP_IWRITE64_CR 0x98 98*82527734SSukumar Swaminathan #define CMD_FCP_IWRITE64_CX 0x99 99*82527734SSukumar Swaminathan #define CMD_FCP_IREAD64_CR 0x9A 100*82527734SSukumar Swaminathan #define CMD_FCP_IREAD64_CX 0x9B 101*82527734SSukumar Swaminathan #define CMD_FCP_ICMND64_CR 0x9C 102*82527734SSukumar Swaminathan #define CMD_FCP_ICMND64_CX 0x9D 103*82527734SSukumar Swaminathan #define CMD_FCP_TSEND64_CX 0x9F /* FCP_TARGET_MODE */ 104*82527734SSukumar Swaminathan #define CMD_FCP_TRECEIVE64_CX 0xA1 /* FCP_TARGET_MODE */ 105*82527734SSukumar Swaminathan #define CMD_FCP_TRSP64_CX 0xA3 /* FCP_TARGET_MODE */ 106*82527734SSukumar Swaminathan #define CMD_RCV_SEQ64_CX 0xB5 /* SLI3 */ 107*82527734SSukumar Swaminathan #define CMD_RCV_ELS64_CX 0xB7 /* SLI3 */ 108*82527734SSukumar Swaminathan #define CMD_RCV_CONT64_CX 0xBB /* SLI3 */ 109*82527734SSukumar Swaminathan #define CMD_RCV_SEQ_LIST64_CX 0xC1 110*82527734SSukumar Swaminathan #define CMD_GEN_REQUEST64_CR 0xC2 111*82527734SSukumar Swaminathan #define CMD_GEN_REQUEST64_CX 0xC3 112*82527734SSukumar Swaminathan #define CMD_QUE_RING_LIST64_CN 0xC6 113*82527734SSukumar Swaminathan 114*82527734SSukumar Swaminathan 115*82527734SSukumar Swaminathan /* 116*82527734SSukumar Swaminathan * Begin Structure Definitions for IOCB Commands 117*82527734SSukumar Swaminathan */ 118*82527734SSukumar Swaminathan 119*82527734SSukumar Swaminathan typedef struct 120*82527734SSukumar Swaminathan { 121*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 122*82527734SSukumar Swaminathan uint8_t statAction; 123*82527734SSukumar Swaminathan uint8_t statRsn; 124*82527734SSukumar Swaminathan uint8_t statBaExp; 125*82527734SSukumar Swaminathan uint8_t statLocalError; 126*82527734SSukumar Swaminathan #endif 127*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 128*82527734SSukumar Swaminathan uint8_t statLocalError; 129*82527734SSukumar Swaminathan uint8_t statBaExp; 130*82527734SSukumar Swaminathan uint8_t statRsn; 131*82527734SSukumar Swaminathan uint8_t statAction; 132*82527734SSukumar Swaminathan #endif 133*82527734SSukumar Swaminathan /* statAction FBSY reason codes */ 134*82527734SSukumar Swaminathan #define FBSY_RSN_MASK 0xF0 /* Rsn stored in upper nibble */ 135*82527734SSukumar Swaminathan #define FBSY_FABRIC_BSY 0x10 /* F_bsy due to Fabric BSY */ 136*82527734SSukumar Swaminathan #define FBSY_NPORT_BSY 0x30 /* F_bsy due to N_port BSY */ 137*82527734SSukumar Swaminathan 138*82527734SSukumar Swaminathan /* statAction PBSY action codes */ 139*82527734SSukumar Swaminathan #define PBSY_ACTION1 0x01 /* Sequence terminated - retry */ 140*82527734SSukumar Swaminathan #define PBSY_ACTION2 0x02 /* Sequence active - retry */ 141*82527734SSukumar Swaminathan 142*82527734SSukumar Swaminathan /* statAction P/FRJT action codes */ 143*82527734SSukumar Swaminathan #define RJT_RETRYABLE 0x01 /* Retryable class of error */ 144*82527734SSukumar Swaminathan #define RJT_NO_RETRY 0x02 /* Non-Retryable class of error */ 145*82527734SSukumar Swaminathan 146*82527734SSukumar Swaminathan /* statRsn LS_RJT reason codes defined in LS_RJT structure */ 147*82527734SSukumar Swaminathan 148*82527734SSukumar Swaminathan /* statRsn P_BSY reason codes */ 149*82527734SSukumar Swaminathan #define PBSY_NPORT_BSY 0x01 /* Physical N_port BSY */ 150*82527734SSukumar Swaminathan #define PBSY_RESRCE_BSY 0x03 /* N_port resource BSY */ 151*82527734SSukumar Swaminathan #define PBSY_VU_BSY 0xFF /* See VU field for rsn */ 152*82527734SSukumar Swaminathan 153*82527734SSukumar Swaminathan /* statRsn P/F_RJT reason codes */ 154*82527734SSukumar Swaminathan #define RJT_BAD_D_ID 0x01 /* Invalid D_ID field */ 155*82527734SSukumar Swaminathan #define RJT_BAD_S_ID 0x02 /* Invalid S_ID field */ 156*82527734SSukumar Swaminathan #define RJT_UNAVAIL_TEMP 0x03 /* N_Port unavailable temp. */ 157*82527734SSukumar Swaminathan #define RJT_UNAVAIL_PERM 0x04 /* N_Port unavailable perm. */ 158*82527734SSukumar Swaminathan #define RJT_UNSUP_CLASS 0x05 /* Class not supported */ 159*82527734SSukumar Swaminathan #define RJT_DELIM_ERR 0x06 /* Delimiter usage error */ 160*82527734SSukumar Swaminathan #define RJT_UNSUP_TYPE 0x07 /* Type not supported */ 161*82527734SSukumar Swaminathan #define RJT_BAD_CONTROL 0x08 /* Invalid link conrtol */ 162*82527734SSukumar Swaminathan #define RJT_BAD_RCTL 0x09 /* R_CTL invalid */ 163*82527734SSukumar Swaminathan #define RJT_BAD_FCTL 0x0A /* F_CTL invalid */ 164*82527734SSukumar Swaminathan #define RJT_BAD_OXID 0x0B /* OX_ID invalid */ 165*82527734SSukumar Swaminathan #define RJT_BAD_RXID 0x0C /* RX_ID invalid */ 166*82527734SSukumar Swaminathan #define RJT_BAD_SEQID 0x0D /* SEQ_ID invalid */ 167*82527734SSukumar Swaminathan #define RJT_BAD_DFCTL 0x0E /* DF_CTL invalid */ 168*82527734SSukumar Swaminathan #define RJT_BAD_SEQCNT 0x0F /* SEQ_CNT invalid */ 169*82527734SSukumar Swaminathan #define RJT_BAD_PARM 0x10 /* Param. field invalid */ 170*82527734SSukumar Swaminathan #define RJT_XCHG_ERR 0x11 /* Exchange error */ 171*82527734SSukumar Swaminathan #define RJT_PROT_ERR 0x12 /* Protocol error */ 172*82527734SSukumar Swaminathan #define RJT_BAD_LENGTH 0x13 /* Invalid Length */ 173*82527734SSukumar Swaminathan #define RJT_UNEXPECTED_ACK 0x14 /* Unexpected ACK */ 174*82527734SSukumar Swaminathan #define RJT_LOGIN_REQUIRED 0x16 /* Login required */ 175*82527734SSukumar Swaminathan #define RJT_TOO_MANY_SEQ 0x17 /* Excessive sequences */ 176*82527734SSukumar Swaminathan #define RJT_XCHG_NOT_STRT 0x18 /* Exchange not started */ 177*82527734SSukumar Swaminathan #define RJT_UNSUP_SEC_HDR 0x19 /* Security hdr not supported */ 178*82527734SSukumar Swaminathan #define RJT_UNAVAIL_PATH 0x1A /* Fabric Path not available */ 179*82527734SSukumar Swaminathan #define RJT_VENDOR_UNIQUE 0xFF /* Vendor unique error */ 180*82527734SSukumar Swaminathan 181*82527734SSukumar Swaminathan /* statRsn BA_RJT reason codes */ 182*82527734SSukumar Swaminathan #define BARJT_BAD_CMD_CODE 0x01 /* Invalid command code */ 183*82527734SSukumar Swaminathan #define BARJT_LOGICAL_ERR 0x03 /* Logical error */ 184*82527734SSukumar Swaminathan #define BARJT_LOGICAL_BSY 0x05 /* Logical busy */ 185*82527734SSukumar Swaminathan #define BARJT_PROTOCOL_ERR 0x07 /* Protocol error */ 186*82527734SSukumar Swaminathan #define BARJT_VU_ERR 0xFF /* Vendor unique error */ 187*82527734SSukumar Swaminathan 188*82527734SSukumar Swaminathan /* LS_RJT reason explanation defined in LS_RJT structure */ 189*82527734SSukumar Swaminathan 190*82527734SSukumar Swaminathan /* BA_RJT reason explanation */ 191*82527734SSukumar Swaminathan #define BARJT_EXP_INVALID_ID 0x01 /* Invalid OX_ID/RX_ID */ 192*82527734SSukumar Swaminathan #define BARJT_EXP_ABORT_SEQ 0x05 /* Abort SEQ, no more info */ 193*82527734SSukumar Swaminathan 194*82527734SSukumar Swaminathan /* Local Reject errors */ 195*82527734SSukumar Swaminathan #define IOERR_SUCCESS 0x00 196*82527734SSukumar Swaminathan #define IOERR_MISSING_CONTINUE 0x01 197*82527734SSukumar Swaminathan #define IOERR_SEQUENCE_TIMEOUT 0x02 198*82527734SSukumar Swaminathan #define IOERR_INTERNAL_ERROR 0x03 199*82527734SSukumar Swaminathan #define IOERR_INVALID_RPI 0x04 200*82527734SSukumar Swaminathan #define IOERR_NO_XRI 0x05 201*82527734SSukumar Swaminathan #define IOERR_ILLEGAL_COMMAND 0x06 202*82527734SSukumar Swaminathan #define IOERR_XCHG_DROPPED 0x07 203*82527734SSukumar Swaminathan #define IOERR_ILLEGAL_FIELD 0x08 204*82527734SSukumar Swaminathan /* RESERVED 0x09 */ 205*82527734SSukumar Swaminathan /* RESERVED 0x0A */ 206*82527734SSukumar Swaminathan #define IOERR_RCV_BUFFER_WAITING 0x0B 207*82527734SSukumar Swaminathan /* RESERVED 0x0C */ 208*82527734SSukumar Swaminathan #define IOERR_TX_DMA_FAILED 0x0D 209*82527734SSukumar Swaminathan #define IOERR_RX_DMA_FAILED 0x0E 210*82527734SSukumar Swaminathan #define IOERR_ILLEGAL_FRAME 0x0F 211*82527734SSukumar Swaminathan 212*82527734SSukumar Swaminathan /* RESERVED 0x10 */ 213*82527734SSukumar Swaminathan #define IOERR_NO_RESOURCES 0x11 214*82527734SSukumar Swaminathan /* RESERVED 0x12 */ 215*82527734SSukumar Swaminathan #define IOERR_ILLEGAL_LENGTH 0x13 216*82527734SSukumar Swaminathan #define IOERR_UNSUPPORTED_FEATURE 0x14 217*82527734SSukumar Swaminathan #define IOERR_ABORT_IN_PROGRESS 0x15 218*82527734SSukumar Swaminathan #define IOERR_ABORT_REQUESTED 0x16 219*82527734SSukumar Swaminathan #define IOERR_RCV_BUFFER_TIMEOUT 0x17 220*82527734SSukumar Swaminathan #define IOERR_LOOP_OPEN_FAILURE 0x18 221*82527734SSukumar Swaminathan #define IOERR_RING_RESET 0x19 222*82527734SSukumar Swaminathan #define IOERR_LINK_DOWN 0x1A 223*82527734SSukumar Swaminathan #define IOERR_CORRUPTED_DATA 0x1B 224*82527734SSukumar Swaminathan #define IOERR_CORRUPTED_RPI 0x1C 225*82527734SSukumar Swaminathan #define IOERR_OUT_OF_ORDER_DATA 0x1D 226*82527734SSukumar Swaminathan #define IOERR_OUT_OF_ORDER_ACK 0x1E 227*82527734SSukumar Swaminathan #define IOERR_DUP_FRAME 0x1F 228*82527734SSukumar Swaminathan 229*82527734SSukumar Swaminathan #define IOERR_LINK_CONTROL_FRAME 0x20 /* ACK_N received */ 230*82527734SSukumar Swaminathan #define IOERR_BAD_HOST_ADDRESS 0x21 231*82527734SSukumar Swaminathan #define IOERR_RCV_HDRBUF_WAITING 0x22 232*82527734SSukumar Swaminathan #define IOERR_MISSING_HDR_BUFFER 0x23 233*82527734SSukumar Swaminathan #define IOERR_MSEQ_CHAIN_CORRUPTED 0x24 234*82527734SSukumar Swaminathan #define IOERR_ABORTMULT_REQUESTED 0x25 235*82527734SSukumar Swaminathan /* RESERVED 0x26 */ 236*82527734SSukumar Swaminathan /* RESERVED 0x27 */ 237*82527734SSukumar Swaminathan #define IOERR_BUFFER_SHORTAGE 0x28 238*82527734SSukumar Swaminathan #define IOERR_XRIBUF_WAITING 0x29 239*82527734SSukumar Swaminathan /* RESERVED 0x2A */ 240*82527734SSukumar Swaminathan #define IOERR_MISSING_HBQ_ENTRY 0x2B 241*82527734SSukumar Swaminathan #define IOERR_ABORT_EXT_REQ 0x2C 242*82527734SSukumar Swaminathan #define IOERR_CLOSE_EXT_REQ 0x2D 243*82527734SSukumar Swaminathan /* RESERVED 0x2E */ 244*82527734SSukumar Swaminathan /* RESERVED 0x2F */ 245*82527734SSukumar Swaminathan 246*82527734SSukumar Swaminathan #define IOERR_XRIBUF_MISSING 0x30 247*82527734SSukumar Swaminathan #define IOERR_ASSI_RSP_SUPPRESSED 0x31 248*82527734SSukumar Swaminathan /* RESERVED 0x32 - 0x3F */ 249*82527734SSukumar Swaminathan 250*82527734SSukumar Swaminathan #define IOERR_ROFFSET_INVAL 0x40 251*82527734SSukumar Swaminathan #define IOERR_ROFFSET_MISSING 0x41 252*82527734SSukumar Swaminathan #define IOERR_INSUF_BUFFER 0x42 253*82527734SSukumar Swaminathan #define IOERR_MISSING_SI 0x43 254*82527734SSukumar Swaminathan #define IOERR_MISSING_ES 0x44 255*82527734SSukumar Swaminathan #define IOERR_INCOMP_XFER 0x45 256*82527734SSukumar Swaminathan /* RESERVED 0x46 - 0xFF */ 257*82527734SSukumar Swaminathan 258*82527734SSukumar Swaminathan /* Driver defined */ 259*82527734SSukumar Swaminathan #define IOERR_ABORT_TIMEOUT 0xF0 260*82527734SSukumar Swaminathan } PARM_ERR; 261*82527734SSukumar Swaminathan 262*82527734SSukumar Swaminathan typedef union 263*82527734SSukumar Swaminathan { 264*82527734SSukumar Swaminathan struct 265*82527734SSukumar Swaminathan { 266*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 267*82527734SSukumar Swaminathan uint8_t Rctl; /* R_CTL field */ 268*82527734SSukumar Swaminathan uint8_t Type; /* TYPE field */ 269*82527734SSukumar Swaminathan uint8_t Dfctl; /* DF_CTL field */ 270*82527734SSukumar Swaminathan uint8_t Fctl; /* Bits 0-7 of IOCB word 5 */ 271*82527734SSukumar Swaminathan #endif 272*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 273*82527734SSukumar Swaminathan uint8_t Fctl; /* Bits 0-7 of IOCB word 5 */ 274*82527734SSukumar Swaminathan uint8_t Dfctl; /* DF_CTL field */ 275*82527734SSukumar Swaminathan uint8_t Type; /* TYPE field */ 276*82527734SSukumar Swaminathan uint8_t Rctl; /* R_CTL field */ 277*82527734SSukumar Swaminathan #endif 278*82527734SSukumar Swaminathan #define FCP_RTYPE 0x08 /* FCP_TARGET_MODE Type - Rctl */ 279*82527734SSukumar Swaminathan 280*82527734SSukumar Swaminathan #define BC 0x02 /* Broadcast Received - Fctl */ 281*82527734SSukumar Swaminathan #define SI 0x04 /* Sequence Initiative */ 282*82527734SSukumar Swaminathan #define LA 0x08 /* Ignore Link Attention state */ 283*82527734SSukumar Swaminathan #define FSEQ 0x40 /* First Sequence */ 284*82527734SSukumar Swaminathan #define LSEQ 0x80 /* Last Sequence */ 285*82527734SSukumar Swaminathan } hcsw; 286*82527734SSukumar Swaminathan uint32_t reserved; 287*82527734SSukumar Swaminathan } WORD5; 288*82527734SSukumar Swaminathan 289*82527734SSukumar Swaminathan 290*82527734SSukumar Swaminathan /* IOCB Command template for a generic response */ 291*82527734SSukumar Swaminathan typedef struct 292*82527734SSukumar Swaminathan { 293*82527734SSukumar Swaminathan uint32_t reserved[4]; 294*82527734SSukumar Swaminathan PARM_ERR perr; 295*82527734SSukumar Swaminathan } GENERIC_RSP; 296*82527734SSukumar Swaminathan 297*82527734SSukumar Swaminathan 298*82527734SSukumar Swaminathan /* IOCB Command template for XMIT / XMIT_BCAST / RCV_SEQUENCE / XMIT_ELS */ 299*82527734SSukumar Swaminathan typedef struct 300*82527734SSukumar Swaminathan { 301*82527734SSukumar Swaminathan ULP_BDE xrsqbde[2]; 302*82527734SSukumar Swaminathan uint32_t xrsqRo; /* Starting Relative Offset */ 303*82527734SSukumar Swaminathan WORD5 w5; /* Header control/status word */ 304*82527734SSukumar Swaminathan } XR_SEQ_FIELDS; 305*82527734SSukumar Swaminathan 306*82527734SSukumar Swaminathan /* IOCB Command template for ELS_REQUEST */ 307*82527734SSukumar Swaminathan typedef struct 308*82527734SSukumar Swaminathan { 309*82527734SSukumar Swaminathan ULP_BDE elsReq; 310*82527734SSukumar Swaminathan ULP_BDE elsRsp; 311*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 312*82527734SSukumar Swaminathan uint32_t word4Rsvd:7; 313*82527734SSukumar Swaminathan uint32_t fl:1; 314*82527734SSukumar Swaminathan uint32_t myID:24; 315*82527734SSukumar Swaminathan 316*82527734SSukumar Swaminathan uint32_t word5Rsvd:8; 317*82527734SSukumar Swaminathan uint32_t remoteID:24; 318*82527734SSukumar Swaminathan #endif 319*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 320*82527734SSukumar Swaminathan uint32_t myID:24; 321*82527734SSukumar Swaminathan uint32_t fl:1; 322*82527734SSukumar Swaminathan uint32_t word4Rsvd:7; 323*82527734SSukumar Swaminathan 324*82527734SSukumar Swaminathan uint32_t remoteID:24; 325*82527734SSukumar Swaminathan uint32_t word5Rsvd:8; 326*82527734SSukumar Swaminathan #endif 327*82527734SSukumar Swaminathan } ELS_REQUEST; 328*82527734SSukumar Swaminathan 329*82527734SSukumar Swaminathan /* IOCB Command template for RCV_ELS_REQ */ 330*82527734SSukumar Swaminathan typedef struct 331*82527734SSukumar Swaminathan { 332*82527734SSukumar Swaminathan ULP_BDE elsReq[2]; 333*82527734SSukumar Swaminathan uint32_t parmRo; 334*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 335*82527734SSukumar Swaminathan uint32_t word5Rsvd:8; 336*82527734SSukumar Swaminathan uint32_t remoteID:24; 337*82527734SSukumar Swaminathan #endif 338*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 339*82527734SSukumar Swaminathan uint32_t remoteID:24; 340*82527734SSukumar Swaminathan uint32_t word5Rsvd:8; 341*82527734SSukumar Swaminathan #endif 342*82527734SSukumar Swaminathan } RCV_ELS_REQ; 343*82527734SSukumar Swaminathan 344*82527734SSukumar Swaminathan /* IOCB Command template for ABORT / CLOSE_XRI */ 345*82527734SSukumar Swaminathan typedef struct 346*82527734SSukumar Swaminathan { 347*82527734SSukumar Swaminathan uint32_t rsvd[3]; 348*82527734SSukumar Swaminathan uint32_t abortType; 349*82527734SSukumar Swaminathan #define ABORT_TYPE_ABTX 0x00000000 350*82527734SSukumar Swaminathan #define ABORT_TYPE_ABTS 0x00000001 351*82527734SSukumar Swaminathan uint32_t parm; 352*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 353*82527734SSukumar Swaminathan uint16_t abortContextTag; /* ulpContext from command to */ 354*82527734SSukumar Swaminathan /* abort/close */ 355*82527734SSukumar Swaminathan uint16_t abortIoTag; /* ulpIoTag from command to */ 356*82527734SSukumar Swaminathan /* abort/close */ 357*82527734SSukumar Swaminathan #endif 358*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 359*82527734SSukumar Swaminathan uint16_t abortIoTag; /* ulpIoTag from command to */ 360*82527734SSukumar Swaminathan /* abort/close */ 361*82527734SSukumar Swaminathan uint16_t abortContextTag; /* ulpContext from command to */ 362*82527734SSukumar Swaminathan /* abort/close */ 363*82527734SSukumar Swaminathan #endif 364*82527734SSukumar Swaminathan } AC_XRI; 365*82527734SSukumar Swaminathan 366*82527734SSukumar Swaminathan /* IOCB Command template for GET_RPI */ 367*82527734SSukumar Swaminathan typedef struct 368*82527734SSukumar Swaminathan { 369*82527734SSukumar Swaminathan uint32_t rsvd[4]; 370*82527734SSukumar Swaminathan uint32_t parmRo; 371*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 372*82527734SSukumar Swaminathan uint32_t word5Rsvd:8; 373*82527734SSukumar Swaminathan uint32_t remoteID:24; 374*82527734SSukumar Swaminathan #endif 375*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 376*82527734SSukumar Swaminathan uint32_t remoteID:24; 377*82527734SSukumar Swaminathan uint32_t word5Rsvd:8; 378*82527734SSukumar Swaminathan #endif 379*82527734SSukumar Swaminathan } GET_RPI; 380*82527734SSukumar Swaminathan 381*82527734SSukumar Swaminathan /* IOCB Command template for all FCP Initiator commands */ 382*82527734SSukumar Swaminathan typedef struct 383*82527734SSukumar Swaminathan { 384*82527734SSukumar Swaminathan ULP_BDE fcpi_cmnd; /* FCP_CMND payload descriptor */ 385*82527734SSukumar Swaminathan ULP_BDE fcpi_rsp; /* Rcv buffer */ 386*82527734SSukumar Swaminathan uint32_t fcpi_parm; 387*82527734SSukumar Swaminathan uint32_t fcpi_XRdy; /* transfer ready for IWRITE */ 388*82527734SSukumar Swaminathan } FCPI_FIELDS; 389*82527734SSukumar Swaminathan 390*82527734SSukumar Swaminathan /* IOCB Command template for all FCP Target commands */ 391*82527734SSukumar Swaminathan typedef struct 392*82527734SSukumar Swaminathan { 393*82527734SSukumar Swaminathan ULP_BDE fcpt_Buffer[2]; /* FCP_CMND payload descriptor */ 394*82527734SSukumar Swaminathan uint32_t fcpt_Offset; 395*82527734SSukumar Swaminathan uint32_t fcpt_Length; /* transfer ready for IWRITE */ 396*82527734SSukumar Swaminathan } FCPT_FIELDS; 397*82527734SSukumar Swaminathan 398*82527734SSukumar Swaminathan /* SLI-2 IOCB structure definitions */ 399*82527734SSukumar Swaminathan 400*82527734SSukumar Swaminathan /* IOCB Command template for 64 bit XMIT / XMIT_BCAST / XMIT_ELS */ 401*82527734SSukumar Swaminathan typedef struct 402*82527734SSukumar Swaminathan { 403*82527734SSukumar Swaminathan ULP_BDL bdl; 404*82527734SSukumar Swaminathan uint32_t xrsqRo; /* Starting Relative Offset */ 405*82527734SSukumar Swaminathan WORD5 w5; /* Header control/status word */ 406*82527734SSukumar Swaminathan } XMT_SEQ_FIELDS64; 407*82527734SSukumar Swaminathan 408*82527734SSukumar Swaminathan 409*82527734SSukumar Swaminathan /* IOCB Command template for 64 bit RCV_SEQUENCE64 */ 410*82527734SSukumar Swaminathan typedef struct 411*82527734SSukumar Swaminathan { 412*82527734SSukumar Swaminathan ULP_BDE64 rcvBde; 413*82527734SSukumar Swaminathan uint32_t rsvd1; 414*82527734SSukumar Swaminathan uint32_t xrsqRo; /* Starting Relative Offset */ 415*82527734SSukumar Swaminathan WORD5 w5; /* Header control/status word */ 416*82527734SSukumar Swaminathan } RCV_SEQ_FIELDS64; 417*82527734SSukumar Swaminathan 418*82527734SSukumar Swaminathan /* IOCB Command template for ELS_REQUEST64 */ 419*82527734SSukumar Swaminathan typedef struct 420*82527734SSukumar Swaminathan { 421*82527734SSukumar Swaminathan ULP_BDL bdl; 422*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 423*82527734SSukumar Swaminathan uint32_t word4Rsvd:7; 424*82527734SSukumar Swaminathan uint32_t fl:1; 425*82527734SSukumar Swaminathan uint32_t myID:24; 426*82527734SSukumar Swaminathan 427*82527734SSukumar Swaminathan uint32_t word5Rsvd:8; 428*82527734SSukumar Swaminathan uint32_t remoteID:24; 429*82527734SSukumar Swaminathan #endif 430*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 431*82527734SSukumar Swaminathan uint32_t myID:24; 432*82527734SSukumar Swaminathan uint32_t fl:1; 433*82527734SSukumar Swaminathan uint32_t word4Rsvd:7; 434*82527734SSukumar Swaminathan 435*82527734SSukumar Swaminathan uint32_t remoteID:24; 436*82527734SSukumar Swaminathan uint32_t word5Rsvd:8; 437*82527734SSukumar Swaminathan #endif 438*82527734SSukumar Swaminathan } ELS_REQUEST64; 439*82527734SSukumar Swaminathan 440*82527734SSukumar Swaminathan 441*82527734SSukumar Swaminathan /* IOCB Command template for ASYNC_STATUS */ 442*82527734SSukumar Swaminathan typedef struct 443*82527734SSukumar Swaminathan { 444*82527734SSukumar Swaminathan ULP_BDL resv; 445*82527734SSukumar Swaminathan uint32_t parameter; 446*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 447*82527734SSukumar Swaminathan uint16_t EventCode; 448*82527734SSukumar Swaminathan uint16_t SubContext; 449*82527734SSukumar Swaminathan #endif 450*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 451*82527734SSukumar Swaminathan uint16_t SubContext; 452*82527734SSukumar Swaminathan uint16_t EventCode; 453*82527734SSukumar Swaminathan #endif 454*82527734SSukumar Swaminathan } ASYNC_STATUS; 455*82527734SSukumar Swaminathan 456*82527734SSukumar Swaminathan 457*82527734SSukumar Swaminathan /* IOCB Command template for QUE_RING_LIST64 */ 458*82527734SSukumar Swaminathan typedef struct 459*82527734SSukumar Swaminathan { 460*82527734SSukumar Swaminathan ULP_BDL bdl; 461*82527734SSukumar Swaminathan uint32_t rsvd1; 462*82527734SSukumar Swaminathan uint32_t rsvd2; 463*82527734SSukumar Swaminathan } QUE_RING_LIST64; 464*82527734SSukumar Swaminathan 465*82527734SSukumar Swaminathan 466*82527734SSukumar Swaminathan /* IOCB Command template for GEN_REQUEST64 */ 467*82527734SSukumar Swaminathan typedef struct 468*82527734SSukumar Swaminathan { 469*82527734SSukumar Swaminathan ULP_BDL bdl; 470*82527734SSukumar Swaminathan uint32_t param; /* Starting Relative Offset */ 471*82527734SSukumar Swaminathan WORD5 w5; /* Header control/status word */ 472*82527734SSukumar Swaminathan } GEN_REQUEST64; 473*82527734SSukumar Swaminathan 474*82527734SSukumar Swaminathan /* IOCB Command template for RCV_ELS_REQ64 */ 475*82527734SSukumar Swaminathan typedef struct 476*82527734SSukumar Swaminathan { 477*82527734SSukumar Swaminathan ULP_BDE64 elsReq; 478*82527734SSukumar Swaminathan uint32_t rsvd1; 479*82527734SSukumar Swaminathan uint32_t parmRo; 480*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 481*82527734SSukumar Swaminathan uint32_t word5Rsvd:8; 482*82527734SSukumar Swaminathan uint32_t remoteID:24; 483*82527734SSukumar Swaminathan #endif 484*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 485*82527734SSukumar Swaminathan uint32_t remoteID:24; 486*82527734SSukumar Swaminathan uint32_t word5Rsvd:8; 487*82527734SSukumar Swaminathan #endif 488*82527734SSukumar Swaminathan } RCV_ELS_REQ64; 489*82527734SSukumar Swaminathan 490*82527734SSukumar Swaminathan /* IOCB Command template for all 64 bit FCP Initiator commands */ 491*82527734SSukumar Swaminathan typedef struct 492*82527734SSukumar Swaminathan { 493*82527734SSukumar Swaminathan ULP_BDL bdl; 494*82527734SSukumar Swaminathan uint32_t fcpi_parm; 495*82527734SSukumar Swaminathan uint32_t fcpi_XRdy; /* transfer ready for IWRITE */ 496*82527734SSukumar Swaminathan } FCPI_FIELDS64; 497*82527734SSukumar Swaminathan 498*82527734SSukumar Swaminathan /* IOCB Command template for all 64 bit FCP Target commands */ 499*82527734SSukumar Swaminathan typedef struct 500*82527734SSukumar Swaminathan { 501*82527734SSukumar Swaminathan ULP_BDL bdl; 502*82527734SSukumar Swaminathan uint32_t fcpt_Offset; 503*82527734SSukumar Swaminathan uint32_t fcpt_Length; /* transfer ready for IWRITE */ 504*82527734SSukumar Swaminathan } FCPT_FIELDS64; 505*82527734SSukumar Swaminathan 506*82527734SSukumar Swaminathan /* IOCB Command template for all 64 bit FCP Target commands */ 507*82527734SSukumar Swaminathan typedef struct 508*82527734SSukumar Swaminathan { 509*82527734SSukumar Swaminathan uint32_t rsp_length; 510*82527734SSukumar Swaminathan uint32_t rsvd1; 511*82527734SSukumar Swaminathan uint32_t rsvd2; 512*82527734SSukumar Swaminathan uint32_t iotag32; 513*82527734SSukumar Swaminathan uint32_t status; 514*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 515*82527734SSukumar Swaminathan uint32_t rsvd:30; 516*82527734SSukumar Swaminathan uint32_t lnk:1; 517*82527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */ 518*82527734SSukumar Swaminathan 519*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 520*82527734SSukumar Swaminathan uint32_t lnk:1; 521*82527734SSukumar Swaminathan uint32_t rsvd:30; 522*82527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */ 523*82527734SSukumar Swaminathan } AUTO_TRSP; 524*82527734SSukumar Swaminathan 525*82527734SSukumar Swaminathan 526*82527734SSukumar Swaminathan typedef struct 527*82527734SSukumar Swaminathan { 528*82527734SSukumar Swaminathan uint32_t io_tag64_low; /* Word 8 */ 529*82527734SSukumar Swaminathan uint32_t io_tag64_high; /* Word 9 */ 530*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 531*82527734SSukumar Swaminathan uint32_t cs_ctl:8; /* Word 10, bit 31:24 */ 532*82527734SSukumar Swaminathan uint32_t cs_en:1; /* Word 10, bit 23 */ 533*82527734SSukumar Swaminathan uint32_t rsv:15; /* Word 10, bit 22:8 */ 534*82527734SSukumar Swaminathan uint32_t ebde_count:8; /* Word 10, bit 7:0 */ 535*82527734SSukumar Swaminathan #endif 536*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 537*82527734SSukumar Swaminathan uint32_t ebde_count:8; /* Word 10, bit 7:0 */ 538*82527734SSukumar Swaminathan uint32_t rsv:15; /* Word 10, bit 22:8 */ 539*82527734SSukumar Swaminathan uint32_t cs_en:1; /* Word 10, bit 23 */ 540*82527734SSukumar Swaminathan uint32_t cs_ctl:8; /* Word 10, bit 31:24 */ 541*82527734SSukumar Swaminathan #endif 542*82527734SSukumar Swaminathan uint32_t rsplen; /* Word 11 */ 543*82527734SSukumar Swaminathan ULP_BDE64 ebde1; /* Word 12:14 */ 544*82527734SSukumar Swaminathan ULP_BDE64 ebde2; /* Word 15:17 */ 545*82527734SSukumar Swaminathan ULP_BDE64 ebde3; /* Word 18:20 */ 546*82527734SSukumar Swaminathan ULP_BDE64 ebde4; /* Word 21:23 */ 547*82527734SSukumar Swaminathan ULP_BDE64 ebde5; /* Word 24:26 */ 548*82527734SSukumar Swaminathan ULP_BDE64 ebde6; /* Word 27:29 */ 549*82527734SSukumar Swaminathan } GENERIC_EXT_IOCB; 550*82527734SSukumar Swaminathan 551*82527734SSukumar Swaminathan /* 552*82527734SSukumar Swaminathan * IOCB Command Extension template for 553*82527734SSukumar Swaminathan * CMD_RCV_ELS64_CX (0xB7) or CMD_RCV_SEQ64_CX (0xB5) 554*82527734SSukumar Swaminathan */ 555*82527734SSukumar Swaminathan 556*82527734SSukumar Swaminathan typedef struct 557*82527734SSukumar Swaminathan { 558*82527734SSukumar Swaminathan uint32_t hdr3; /* word 8 */ 559*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 560*82527734SSukumar Swaminathan uint16_t vpi; /* word 9 */ 561*82527734SSukumar Swaminathan uint16_t buddy_xri; 562*82527734SSukumar Swaminathan 563*82527734SSukumar Swaminathan uint32_t ccp:8; /* word 10 */ 564*82527734SSukumar Swaminathan uint32_t ccpe:1; 565*82527734SSukumar Swaminathan uint32_t rsvd:23; 566*82527734SSukumar Swaminathan #endif 567*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 568*82527734SSukumar Swaminathan uint16_t buddy_xri; /* word 9 */ 569*82527734SSukumar Swaminathan uint16_t vpi; 570*82527734SSukumar Swaminathan 571*82527734SSukumar Swaminathan uint32_t rsvd:23; /* word 10 */ 572*82527734SSukumar Swaminathan uint32_t ccpe:1; 573*82527734SSukumar Swaminathan uint32_t ccp:8; 574*82527734SSukumar Swaminathan #endif 575*82527734SSukumar Swaminathan uint32_t seq_len; /* received sequence length */ 576*82527734SSukumar Swaminathan ULP_BDL bde2; /* total 4 words */ 577*82527734SSukumar Swaminathan } RCV_SEQ_ELS_64_SLI3_EXT; 578*82527734SSukumar Swaminathan 579*82527734SSukumar Swaminathan 580*82527734SSukumar Swaminathan 581*82527734SSukumar Swaminathan typedef volatile struct emlxs_iocb 582*82527734SSukumar Swaminathan { /* IOCB structure */ 583*82527734SSukumar Swaminathan union 584*82527734SSukumar Swaminathan { 585*82527734SSukumar Swaminathan GENERIC_RSP grsp; /* Generic response */ 586*82527734SSukumar Swaminathan XR_SEQ_FIELDS xrseq; /* XMIT/BCAST/RCV_SEQ */ 587*82527734SSukumar Swaminathan ULP_BDE cont[3]; /* up to 3 cont BDEs */ 588*82527734SSukumar Swaminathan ELS_REQUEST elsreq; /* ELS_REQ template */ 589*82527734SSukumar Swaminathan RCV_ELS_REQ rcvels; /* RCV_ELS_REQ */ 590*82527734SSukumar Swaminathan /* template */ 591*82527734SSukumar Swaminathan AC_XRI acxri; /* ABORT/CLOSE_XRI */ 592*82527734SSukumar Swaminathan /* template */ 593*82527734SSukumar Swaminathan GET_RPI getrpi; /* GET_RPI template */ 594*82527734SSukumar Swaminathan FCPI_FIELDS fcpi; /* FCP Initiator */ 595*82527734SSukumar Swaminathan /* template */ 596*82527734SSukumar Swaminathan FCPT_FIELDS fcpt; /* FCP target */ 597*82527734SSukumar Swaminathan /* template */ 598*82527734SSukumar Swaminathan 599*82527734SSukumar Swaminathan /* SLI-2 structures */ 600*82527734SSukumar Swaminathan 601*82527734SSukumar Swaminathan ULP_BDE64 cont64[2]; /* up to 2 64 bit */ 602*82527734SSukumar Swaminathan /* cont BDE_64s */ 603*82527734SSukumar Swaminathan ELS_REQUEST64 elsreq64; /* ELS_REQ64 template */ 604*82527734SSukumar Swaminathan QUE_RING_LIST64 qringlist64; /* QUE RING LIST64 */ 605*82527734SSukumar Swaminathan /* template */ 606*82527734SSukumar Swaminathan GEN_REQUEST64 genreq64; /* GEN_REQUEST64 */ 607*82527734SSukumar Swaminathan /* template */ 608*82527734SSukumar Swaminathan RCV_ELS_REQ64 rcvels64; /* RCV_ELS_REQ */ 609*82527734SSukumar Swaminathan /* template */ 610*82527734SSukumar Swaminathan XMT_SEQ_FIELDS64 xseq64; /* XMIT / BCAST cmd */ 611*82527734SSukumar Swaminathan FCPI_FIELDS64 fcpi64; /* FCP 64 bit */ 612*82527734SSukumar Swaminathan /* Initiator template */ 613*82527734SSukumar Swaminathan FCPT_FIELDS64 fcpt64; /* FCP 64 bit target */ 614*82527734SSukumar Swaminathan /* template */ 615*82527734SSukumar Swaminathan AUTO_TRSP atrsp; /* FCP 64 bit target */ 616*82527734SSukumar Swaminathan /* template */ 617*82527734SSukumar Swaminathan 618*82527734SSukumar Swaminathan RCV_SEQ_FIELDS64 rcvseq64; 619*82527734SSukumar Swaminathan ASYNC_STATUS astat; 620*82527734SSukumar Swaminathan 621*82527734SSukumar Swaminathan uint32_t ulpWord[6]; /* generic 6 'words' */ 622*82527734SSukumar Swaminathan } un; 623*82527734SSukumar Swaminathan union 624*82527734SSukumar Swaminathan { 625*82527734SSukumar Swaminathan struct 626*82527734SSukumar Swaminathan { 627*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 628*82527734SSukumar Swaminathan uint16_t ulpContext; /* High order bits */ 629*82527734SSukumar Swaminathan /* word6 */ 630*82527734SSukumar Swaminathan uint16_t ulpIoTag; /* Low order bits */ 631*82527734SSukumar Swaminathan /* word6 */ 632*82527734SSukumar Swaminathan #endif 633*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 634*82527734SSukumar Swaminathan uint16_t ulpIoTag; /* Low order bits */ 635*82527734SSukumar Swaminathan /* word6 */ 636*82527734SSukumar Swaminathan uint16_t ulpContext; /* High order bits */ 637*82527734SSukumar Swaminathan /* word6 */ 638*82527734SSukumar Swaminathan #endif 639*82527734SSukumar Swaminathan } t1; 640*82527734SSukumar Swaminathan struct 641*82527734SSukumar Swaminathan { 642*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 643*82527734SSukumar Swaminathan uint16_t ulpContext; /* High order bits */ 644*82527734SSukumar Swaminathan /* word6 */ 645*82527734SSukumar Swaminathan uint16_t ulpIoTag1:2; /* Low order bits */ 646*82527734SSukumar Swaminathan /* word6 */ 647*82527734SSukumar Swaminathan uint16_t ulpIoTag0:14; /* Low order bits */ 648*82527734SSukumar Swaminathan /* word6 */ 649*82527734SSukumar Swaminathan #endif 650*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 651*82527734SSukumar Swaminathan uint16_t ulpIoTag0:14; /* Low order bits */ 652*82527734SSukumar Swaminathan /* word6 */ 653*82527734SSukumar Swaminathan uint16_t ulpIoTag1:2; /* Low order bits */ 654*82527734SSukumar Swaminathan /* word6 */ 655*82527734SSukumar Swaminathan uint16_t ulpContext; /* High order bits */ 656*82527734SSukumar Swaminathan /* word6 */ 657*82527734SSukumar Swaminathan #endif 658*82527734SSukumar Swaminathan } t2; 659*82527734SSukumar Swaminathan 660*82527734SSukumar Swaminathan uint32_t ulpWord; 661*82527734SSukumar Swaminathan } un1; 662*82527734SSukumar Swaminathan #define ULPCONTEXT un1.t1.ulpContext 663*82527734SSukumar Swaminathan #define ULPIOTAG un1.t1.ulpIoTag 664*82527734SSukumar Swaminathan #define ULPIOTAG0 un1.t2.ulpIoTag0 665*82527734SSukumar Swaminathan #define ULPDELAYXMIT un1.t2.ulpIoTag1 666*82527734SSukumar Swaminathan 667*82527734SSukumar Swaminathan #define IOCB_DELAYXMIT_MSK 0x3000 668*82527734SSukumar Swaminathan 669*82527734SSukumar Swaminathan 670*82527734SSukumar Swaminathan union 671*82527734SSukumar Swaminathan { 672*82527734SSukumar Swaminathan struct 673*82527734SSukumar Swaminathan { 674*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 675*82527734SSukumar Swaminathan uint32_t ulpRsvdByte:8; 676*82527734SSukumar Swaminathan uint32_t ulpXS:1; 677*82527734SSukumar Swaminathan uint32_t ulpFCP2Rcvy:1; 678*82527734SSukumar Swaminathan uint32_t ulpPU:2; 679*82527734SSukumar Swaminathan uint32_t ulpIr:1; 680*82527734SSukumar Swaminathan uint32_t ulpClass:3; 681*82527734SSukumar Swaminathan uint32_t ulpCommand:8; 682*82527734SSukumar Swaminathan uint32_t ulpStatus:4; 683*82527734SSukumar Swaminathan uint32_t ulpBdeCount:2; 684*82527734SSukumar Swaminathan uint32_t ulpLe:1; 685*82527734SSukumar Swaminathan uint32_t ulpOwner:1; /* Low order bit */ 686*82527734SSukumar Swaminathan /* word 7 */ 687*82527734SSukumar Swaminathan #endif 688*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 689*82527734SSukumar Swaminathan uint32_t ulpOwner:1; /* Low order bit */ 690*82527734SSukumar Swaminathan /* word 7 */ 691*82527734SSukumar Swaminathan uint32_t ulpLe:1; 692*82527734SSukumar Swaminathan uint32_t ulpBdeCount:2; 693*82527734SSukumar Swaminathan uint32_t ulpStatus:4; 694*82527734SSukumar Swaminathan uint32_t ulpCommand:8; 695*82527734SSukumar Swaminathan uint32_t ulpClass:3; 696*82527734SSukumar Swaminathan uint32_t ulpIr:1; 697*82527734SSukumar Swaminathan uint32_t ulpPU:2; 698*82527734SSukumar Swaminathan uint32_t ulpFCP2Rcvy:1; 699*82527734SSukumar Swaminathan uint32_t ulpXS:1; 700*82527734SSukumar Swaminathan uint32_t ulpRsvdByte:8; 701*82527734SSukumar Swaminathan #endif 702*82527734SSukumar Swaminathan } t1; 703*82527734SSukumar Swaminathan 704*82527734SSukumar Swaminathan struct 705*82527734SSukumar Swaminathan { 706*82527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 707*82527734SSukumar Swaminathan uint32_t ulpRsvdByte:8; 708*82527734SSukumar Swaminathan uint32_t ulpCT:2; 709*82527734SSukumar Swaminathan uint32_t ulpPU:2; 710*82527734SSukumar Swaminathan uint32_t ulpIr:1; 711*82527734SSukumar Swaminathan uint32_t ulpClass:3; 712*82527734SSukumar Swaminathan uint32_t ulpCommand:8; 713*82527734SSukumar Swaminathan uint32_t ulpStatus:4; 714*82527734SSukumar Swaminathan uint32_t ulpBdeCount:2; 715*82527734SSukumar Swaminathan uint32_t ulpLe:1; 716*82527734SSukumar Swaminathan uint32_t ulpOwner:1; /* Low order bit */ 717*82527734SSukumar Swaminathan /* word 7 */ 718*82527734SSukumar Swaminathan #endif 719*82527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 720*82527734SSukumar Swaminathan uint32_t ulpOwner:1; /* Low order bit */ 721*82527734SSukumar Swaminathan /* word 7 */ 722*82527734SSukumar Swaminathan uint32_t ulpLe:1; 723*82527734SSukumar Swaminathan uint32_t ulpBdeCount:2; 724*82527734SSukumar Swaminathan uint32_t ulpStatus:4; 725*82527734SSukumar Swaminathan uint32_t ulpCommand:8; 726*82527734SSukumar Swaminathan uint32_t ulpClass:3; 727*82527734SSukumar Swaminathan uint32_t ulpIr:1; 728*82527734SSukumar Swaminathan uint32_t ulpPU:2; 729*82527734SSukumar Swaminathan uint32_t ulpCT:2; 730*82527734SSukumar Swaminathan uint32_t ulpRsvdByte:8; 731*82527734SSukumar Swaminathan #endif 732*82527734SSukumar Swaminathan } t2; 733*82527734SSukumar Swaminathan 734*82527734SSukumar Swaminathan uint32_t ulpWord; 735*82527734SSukumar Swaminathan } un2; 736*82527734SSukumar Swaminathan 737*82527734SSukumar Swaminathan #define ULPCT un2.t2.ulpCT 738*82527734SSukumar Swaminathan #define ULPRSVDBYTE un2.t1.ulpRsvdByte 739*82527734SSukumar Swaminathan #define ULPXS un2.t1.ulpXS 740*82527734SSukumar Swaminathan #define ULPFCP2RCVY un2.t1.ulpFCP2Rcvy 741*82527734SSukumar Swaminathan #define ULPPU un2.t1.ulpPU 742*82527734SSukumar Swaminathan #define ULPIR un2.t1.ulpIr 743*82527734SSukumar Swaminathan #define ULPCLASS un2.t1.ulpClass 744*82527734SSukumar Swaminathan #define ULPCOMMAND un2.t1.ulpCommand 745*82527734SSukumar Swaminathan #define ULPSTATUS un2.t1.ulpStatus 746*82527734SSukumar Swaminathan #define ULPBDECOUNT un2.t1.ulpBdeCount 747*82527734SSukumar Swaminathan #define ULPLE un2.t1.ulpLe 748*82527734SSukumar Swaminathan #define ULPOWNER un2.t1.ulpOwner 749*82527734SSukumar Swaminathan /* 32 bytes at this point */ 750*82527734SSukumar Swaminathan 751*82527734SSukumar Swaminathan /* SLI4 */ 752*82527734SSukumar Swaminathan #define RXFCHDR un.ulpWord 753*82527734SSukumar Swaminathan #define RXSEQCNT un1.ulpWord 754*82527734SSukumar Swaminathan #define RXSEQLEN un2.ulpWord 755*82527734SSukumar Swaminathan 756*82527734SSukumar Swaminathan union 757*82527734SSukumar Swaminathan { 758*82527734SSukumar Swaminathan GENERIC_EXT_IOCB ext_iocb; 759*82527734SSukumar Swaminathan RCV_SEQ_ELS_64_SLI3_EXT ext_rcv; 760*82527734SSukumar Swaminathan uint32_t sli3Words[24]; /* 96 extra bytes */ 761*82527734SSukumar Swaminathan /* for SLI-3 */ 762*82527734SSukumar Swaminathan } unsli3; 763*82527734SSukumar Swaminathan /* 128 bytes at this point */ 764*82527734SSukumar Swaminathan 765*82527734SSukumar Swaminathan #define IOCB_FCP 1 /* IOCB is used for */ 766*82527734SSukumar Swaminathan /* FCP ELS cmds - ulpRsvByte */ 767*82527734SSukumar Swaminathan #define IOCB_IP 2 /* IOCB is used for IP ELS cmds */ 768*82527734SSukumar Swaminathan #define PARM_UNUSED 0 /* PU field (Word 4) not used */ 769*82527734SSukumar Swaminathan #define PARM_REL_OFF 1 /* PU field (Word 4) = R. O. */ 770*82527734SSukumar Swaminathan #define PARM_READ_CHECK 2 /* PU field (Word 4) = Data Xfer Len */ 771*82527734SSukumar Swaminathan #define CLASS1 0 /* Class 1 */ 772*82527734SSukumar Swaminathan #define CLASS2 1 /* Class 2 */ 773*82527734SSukumar Swaminathan #define CLASS3 2 /* Class 3 */ 774*82527734SSukumar Swaminathan #define CLASS_FCP_INTERMIX 7 /* FCP Data->Cls 1, all else->Cls 2 */ 775*82527734SSukumar Swaminathan 776*82527734SSukumar Swaminathan #define IOSTAT_SUCCESS 0x0 /* ulpStatus */ 777*82527734SSukumar Swaminathan #define IOSTAT_FCP_RSP_ERROR 0x1 778*82527734SSukumar Swaminathan #define IOSTAT_REMOTE_STOP 0x2 779*82527734SSukumar Swaminathan #define IOSTAT_LOCAL_REJECT 0x3 780*82527734SSukumar Swaminathan #define IOSTAT_NPORT_RJT 0x4 781*82527734SSukumar Swaminathan #define IOSTAT_FABRIC_RJT 0x5 782*82527734SSukumar Swaminathan #define IOSTAT_NPORT_BSY 0x6 783*82527734SSukumar Swaminathan #define IOSTAT_FABRIC_BSY 0x7 784*82527734SSukumar Swaminathan #define IOSTAT_INTERMED_RSP 0x8 785*82527734SSukumar Swaminathan #define IOSTAT_LS_RJT 0x9 786*82527734SSukumar Swaminathan #define IOSTAT_RESERVED_A 0xA 787*82527734SSukumar Swaminathan #define IOSTAT_CMD_REJECT 0xB 788*82527734SSukumar Swaminathan #define IOSTAT_FCP_TGT_LENCHK 0xC 789*82527734SSukumar Swaminathan #define IOSTAT_RESERVED_D 0xD 790*82527734SSukumar Swaminathan #define IOSTAT_RESERVED_E 0xE 791*82527734SSukumar Swaminathan #define IOSTAT_NEED_BUFF_ENTRY 0xF 792*82527734SSukumar Swaminathan 793*82527734SSukumar Swaminathan /* Special error codes */ 794*82527734SSukumar Swaminathan #define IOSTAT_DATA_OVERRUN 0x10 /* Added for resid handling */ 795*82527734SSukumar Swaminathan #define IOSTAT_DATA_UNDERRUN 0x11 /* Added for resid handling */ 796*82527734SSukumar Swaminathan } emlxs_iocb_t; 797*82527734SSukumar Swaminathan typedef emlxs_iocb_t IOCB; 798*82527734SSukumar Swaminathan 799*82527734SSukumar Swaminathan 800*82527734SSukumar Swaminathan typedef struct emlxs_iocbq 801*82527734SSukumar Swaminathan { 802*82527734SSukumar Swaminathan emlxs_iocb_t iocb; 803*82527734SSukumar Swaminathan emlxs_wqe_t wqe; /* SLI4 */ 804*82527734SSukumar Swaminathan 805*82527734SSukumar Swaminathan struct emlxs_iocbq *next; 806*82527734SSukumar Swaminathan 807*82527734SSukumar Swaminathan uint8_t *bp; /* ptr to data buffer structure */ 808*82527734SSukumar Swaminathan void *port; /* Board info pointer */ 809*82527734SSukumar Swaminathan void *channel; /* IO Channel pointer */ 810*82527734SSukumar Swaminathan void *node; /* Node pointer */ 811*82527734SSukumar Swaminathan void *sbp; /* Pkt pointer */ 812*82527734SSukumar Swaminathan uint32_t flag; 813*82527734SSukumar Swaminathan 814*82527734SSukumar Swaminathan #define IOCB_POOL_ALLOCATED 0x00000001 815*82527734SSukumar Swaminathan #define IOCB_PRIORITY 0x00000002 816*82527734SSukumar Swaminathan #define IOCB_SPECIAL 0x00000004 817*82527734SSukumar Swaminathan #define IOCB_FCP_CMD 0x00000008 818*82527734SSukumar Swaminathan #define IOCB_FCT_DATA 0x00000020 /* tgt-mode */ 819*82527734SSukumar Swaminathan 820*82527734SSukumar Swaminathan } emlxs_iocbq_t; 821*82527734SSukumar Swaminathan typedef emlxs_iocbq_t IOCBQ; 822*82527734SSukumar Swaminathan 823*82527734SSukumar Swaminathan 824*82527734SSukumar Swaminathan #ifdef __cplusplus 825*82527734SSukumar Swaminathan } 826*82527734SSukumar Swaminathan #endif 827*82527734SSukumar Swaminathan 828*82527734SSukumar Swaminathan #endif /* _EMLXS_IOCB_H */ 829