182527734SSukumar Swaminathan /* 282527734SSukumar Swaminathan * CDDL HEADER START 382527734SSukumar Swaminathan * 482527734SSukumar Swaminathan * The contents of this file are subject to the terms of the 582527734SSukumar Swaminathan * Common Development and Distribution License (the "License"). 682527734SSukumar Swaminathan * You may not use this file except in compliance with the License. 782527734SSukumar Swaminathan * 8*8f23e9faSHans Rosenfeld * You can obtain a copy of the license at 9*8f23e9faSHans Rosenfeld * http://www.opensource.org/licenses/cddl1.txt. 1082527734SSukumar Swaminathan * See the License for the specific language governing permissions 1182527734SSukumar Swaminathan * and limitations under the License. 1282527734SSukumar Swaminathan * 1382527734SSukumar Swaminathan * When distributing Covered Code, include this CDDL HEADER in each 1482527734SSukumar Swaminathan * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1582527734SSukumar Swaminathan * If applicable, add the following below this CDDL HEADER, with the 1682527734SSukumar Swaminathan * fields enclosed by brackets "[]" replaced with your own identifying 1782527734SSukumar Swaminathan * information: Portions Copyright [yyyy] [name of copyright owner] 1882527734SSukumar Swaminathan * 1982527734SSukumar Swaminathan * CDDL HEADER END 2082527734SSukumar Swaminathan */ 2182527734SSukumar Swaminathan 2282527734SSukumar Swaminathan /* 23*8f23e9faSHans Rosenfeld * Copyright (c) 2004-2011 Emulex. All rights reserved. 2482527734SSukumar Swaminathan * Use is subject to license terms. 2582527734SSukumar Swaminathan */ 2682527734SSukumar Swaminathan 2782527734SSukumar Swaminathan #ifndef _EMLXS_IOCB_H 2882527734SSukumar Swaminathan #define _EMLXS_IOCB_H 2982527734SSukumar Swaminathan 3082527734SSukumar Swaminathan #ifdef __cplusplus 3182527734SSukumar Swaminathan extern "C" { 3282527734SSukumar Swaminathan #endif 3382527734SSukumar Swaminathan 3482527734SSukumar Swaminathan /* ==== IOCB Commands ==== */ 3582527734SSukumar Swaminathan 3682527734SSukumar Swaminathan #define CMD_RCV_SEQUENCE_CX 0x01 3782527734SSukumar Swaminathan #define CMD_XMIT_SEQUENCE_CR 0x02 3882527734SSukumar Swaminathan #define CMD_XMIT_SEQUENCE_CX 0x03 3982527734SSukumar Swaminathan #define CMD_XMIT_BCAST_CN 0x04 4082527734SSukumar Swaminathan #define CMD_XMIT_BCAST_CX 0x05 4182527734SSukumar Swaminathan #define CMD_QUE_RING_BUF_CN 0x06 4282527734SSukumar Swaminathan #define CMD_QUE_XRI_BUF_CX 0x07 4382527734SSukumar Swaminathan #define CMD_IOCB_CONTINUE_CN 0x08 4482527734SSukumar Swaminathan #define CMD_RET_XRI_BUF_CX 0x09 4582527734SSukumar Swaminathan #define CMD_ELS_REQUEST_CR 0x0A 4682527734SSukumar Swaminathan #define CMD_ELS_REQUEST_CX 0x0B 4782527734SSukumar Swaminathan #define CMD_RCV_ELS_REQ_CX 0x0D 4882527734SSukumar Swaminathan #define CMD_ABORT_XRI_CN 0x0E 4982527734SSukumar Swaminathan #define CMD_ABORT_XRI_CX 0x0F 5082527734SSukumar Swaminathan #define CMD_CLOSE_XRI_CN 0x10 5182527734SSukumar Swaminathan #define CMD_CLOSE_XRI_CX 0x11 5282527734SSukumar Swaminathan #define CMD_CREATE_XRI_CR 0x12 5382527734SSukumar Swaminathan #define CMD_CREATE_XRI_CX 0x13 5482527734SSukumar Swaminathan #define CMD_GET_RPI_CN 0x14 5582527734SSukumar Swaminathan #define CMD_XMIT_ELS_RSP_CX 0x15 5682527734SSukumar Swaminathan #define CMD_GET_RPI_CR 0x16 5782527734SSukumar Swaminathan #define CMD_XRI_ABORTED_CX 0x17 5882527734SSukumar Swaminathan #define CMD_FCP_IWRITE_CR 0x18 5982527734SSukumar Swaminathan #define CMD_FCP_IWRITE_CX 0x19 6082527734SSukumar Swaminathan #define CMD_FCP_IREAD_CR 0x1A 6182527734SSukumar Swaminathan #define CMD_FCP_IREAD_CX 0x1B 6282527734SSukumar Swaminathan #define CMD_FCP_ICMND_CR 0x1C 6382527734SSukumar Swaminathan #define CMD_FCP_ICMND_CX 0x1D 6482527734SSukumar Swaminathan #define CMD_FCP_TSEND_CX 0x1F /* FCP_TARGET_MODE */ 6582527734SSukumar Swaminathan #define CMD_ADAPTER_MSG 0x20 6682527734SSukumar Swaminathan #define CMD_FCP_TRECEIVE_CX 0x21 /* FCP_TARGET_MODE */ 6782527734SSukumar Swaminathan #define CMD_ADAPTER_DUMP 0x22 6882527734SSukumar Swaminathan #define CMD_FCP_TRSP_CX 0x23 /* FCP_TARGET_MODE */ 6982527734SSukumar Swaminathan #define CMD_FCP_AUTO_TRSP_CX 0x29 /* FCP_TARGET_MODE */ 7082527734SSukumar Swaminathan 7182527734SSukumar Swaminathan /* LP3000 gasket IOCB Command Set */ 7282527734SSukumar Swaminathan 7382527734SSukumar Swaminathan #define CMD_BPL_IWRITE_CR 0x48 7482527734SSukumar Swaminathan #define CMD_BPL_IWRITE_CX 0x49 7582527734SSukumar Swaminathan #define CMD_BPL_IREAD_CR 0x4A 7682527734SSukumar Swaminathan #define CMD_BPL_IREAD_CX 0x4B 7782527734SSukumar Swaminathan #define CMD_BPL_ICMND_CR 0x4C 7882527734SSukumar Swaminathan #define CMD_BPL_ICMND_CX 0x4D 7982527734SSukumar Swaminathan 8082527734SSukumar Swaminathan #define CMD_ASYNC_STATUS 0x7C 8182527734SSukumar Swaminathan 8282527734SSukumar Swaminathan /* SLI_2 IOCB Command Set */ 8382527734SSukumar Swaminathan #define CMD_RCV_SEQUENCE64_CX 0x81 8482527734SSukumar Swaminathan #define CMD_XMIT_SEQUENCE64_CR 0x82 8582527734SSukumar Swaminathan #define CMD_XMIT_SEQUENCE64_CX 0x83 8682527734SSukumar Swaminathan #define CMD_XMIT_BCAST64_CN 0x84 8782527734SSukumar Swaminathan #define CMD_XMIT_BCAST64_CX 0x85 8882527734SSukumar Swaminathan #define CMD_QUE_RING_BUF64_CN 0x86 8982527734SSukumar Swaminathan #define CMD_QUE_XRI_BUF64_CX 0x87 9082527734SSukumar Swaminathan #define CMD_IOCB_CONTINUE64_CN 0x88 9182527734SSukumar Swaminathan #define CMD_RET_XRI_BUF64_CX 0x89 9282527734SSukumar Swaminathan #define CMD_ELS_REQUEST64_CR 0x8A 9382527734SSukumar Swaminathan #define CMD_ELS_REQUEST64_CX 0x8B 9482527734SSukumar Swaminathan #define CMD_RCV_ELS_REQ64_CX 0x8D 9582527734SSukumar Swaminathan #define CMD_XMIT_ELS_RSP64_CX 0x95 9682527734SSukumar Swaminathan #define CMD_XMIT_BLS_RSP64_CX 0x97 9782527734SSukumar Swaminathan #define CMD_FCP_IWRITE64_CR 0x98 9882527734SSukumar Swaminathan #define CMD_FCP_IWRITE64_CX 0x99 9982527734SSukumar Swaminathan #define CMD_FCP_IREAD64_CR 0x9A 10082527734SSukumar Swaminathan #define CMD_FCP_IREAD64_CX 0x9B 10182527734SSukumar Swaminathan #define CMD_FCP_ICMND64_CR 0x9C 10282527734SSukumar Swaminathan #define CMD_FCP_ICMND64_CX 0x9D 10382527734SSukumar Swaminathan #define CMD_FCP_TSEND64_CX 0x9F /* FCP_TARGET_MODE */ 10482527734SSukumar Swaminathan #define CMD_FCP_TRECEIVE64_CX 0xA1 /* FCP_TARGET_MODE */ 10582527734SSukumar Swaminathan #define CMD_FCP_TRSP64_CX 0xA3 /* FCP_TARGET_MODE */ 10682527734SSukumar Swaminathan #define CMD_RCV_SEQ64_CX 0xB5 /* SLI3 */ 10782527734SSukumar Swaminathan #define CMD_RCV_ELS64_CX 0xB7 /* SLI3 */ 10882527734SSukumar Swaminathan #define CMD_RCV_CONT64_CX 0xBB /* SLI3 */ 10982527734SSukumar Swaminathan #define CMD_RCV_SEQ_LIST64_CX 0xC1 11082527734SSukumar Swaminathan #define CMD_GEN_REQUEST64_CR 0xC2 11182527734SSukumar Swaminathan #define CMD_GEN_REQUEST64_CX 0xC3 11282527734SSukumar Swaminathan #define CMD_QUE_RING_LIST64_CN 0xC6 11382527734SSukumar Swaminathan 11482527734SSukumar Swaminathan 11582527734SSukumar Swaminathan /* 11682527734SSukumar Swaminathan * Begin Structure Definitions for IOCB Commands 11782527734SSukumar Swaminathan */ 11882527734SSukumar Swaminathan 11982527734SSukumar Swaminathan typedef struct 12082527734SSukumar Swaminathan { 12182527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 12282527734SSukumar Swaminathan uint8_t statAction; 12382527734SSukumar Swaminathan uint8_t statRsn; 12482527734SSukumar Swaminathan uint8_t statBaExp; 12582527734SSukumar Swaminathan uint8_t statLocalError; 12682527734SSukumar Swaminathan #endif 12782527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 12882527734SSukumar Swaminathan uint8_t statLocalError; 12982527734SSukumar Swaminathan uint8_t statBaExp; 13082527734SSukumar Swaminathan uint8_t statRsn; 13182527734SSukumar Swaminathan uint8_t statAction; 13282527734SSukumar Swaminathan #endif 13382527734SSukumar Swaminathan /* statAction FBSY reason codes */ 13482527734SSukumar Swaminathan #define FBSY_RSN_MASK 0xF0 /* Rsn stored in upper nibble */ 13582527734SSukumar Swaminathan #define FBSY_FABRIC_BSY 0x10 /* F_bsy due to Fabric BSY */ 13682527734SSukumar Swaminathan #define FBSY_NPORT_BSY 0x30 /* F_bsy due to N_port BSY */ 13782527734SSukumar Swaminathan 13882527734SSukumar Swaminathan /* statAction PBSY action codes */ 13982527734SSukumar Swaminathan #define PBSY_ACTION1 0x01 /* Sequence terminated - retry */ 14082527734SSukumar Swaminathan #define PBSY_ACTION2 0x02 /* Sequence active - retry */ 14182527734SSukumar Swaminathan 14282527734SSukumar Swaminathan /* statAction P/FRJT action codes */ 14382527734SSukumar Swaminathan #define RJT_RETRYABLE 0x01 /* Retryable class of error */ 14482527734SSukumar Swaminathan #define RJT_NO_RETRY 0x02 /* Non-Retryable class of error */ 14582527734SSukumar Swaminathan 14682527734SSukumar Swaminathan /* statRsn LS_RJT reason codes defined in LS_RJT structure */ 14782527734SSukumar Swaminathan 14882527734SSukumar Swaminathan /* statRsn P_BSY reason codes */ 14982527734SSukumar Swaminathan #define PBSY_NPORT_BSY 0x01 /* Physical N_port BSY */ 15082527734SSukumar Swaminathan #define PBSY_RESRCE_BSY 0x03 /* N_port resource BSY */ 15182527734SSukumar Swaminathan #define PBSY_VU_BSY 0xFF /* See VU field for rsn */ 15282527734SSukumar Swaminathan 15382527734SSukumar Swaminathan /* statRsn P/F_RJT reason codes */ 15482527734SSukumar Swaminathan #define RJT_BAD_D_ID 0x01 /* Invalid D_ID field */ 15582527734SSukumar Swaminathan #define RJT_BAD_S_ID 0x02 /* Invalid S_ID field */ 15682527734SSukumar Swaminathan #define RJT_UNAVAIL_TEMP 0x03 /* N_Port unavailable temp. */ 15782527734SSukumar Swaminathan #define RJT_UNAVAIL_PERM 0x04 /* N_Port unavailable perm. */ 15882527734SSukumar Swaminathan #define RJT_UNSUP_CLASS 0x05 /* Class not supported */ 15982527734SSukumar Swaminathan #define RJT_DELIM_ERR 0x06 /* Delimiter usage error */ 16082527734SSukumar Swaminathan #define RJT_UNSUP_TYPE 0x07 /* Type not supported */ 16182527734SSukumar Swaminathan #define RJT_BAD_CONTROL 0x08 /* Invalid link conrtol */ 16282527734SSukumar Swaminathan #define RJT_BAD_RCTL 0x09 /* R_CTL invalid */ 16382527734SSukumar Swaminathan #define RJT_BAD_FCTL 0x0A /* F_CTL invalid */ 16482527734SSukumar Swaminathan #define RJT_BAD_OXID 0x0B /* OX_ID invalid */ 16582527734SSukumar Swaminathan #define RJT_BAD_RXID 0x0C /* RX_ID invalid */ 16682527734SSukumar Swaminathan #define RJT_BAD_SEQID 0x0D /* SEQ_ID invalid */ 16782527734SSukumar Swaminathan #define RJT_BAD_DFCTL 0x0E /* DF_CTL invalid */ 16882527734SSukumar Swaminathan #define RJT_BAD_SEQCNT 0x0F /* SEQ_CNT invalid */ 16982527734SSukumar Swaminathan #define RJT_BAD_PARM 0x10 /* Param. field invalid */ 17082527734SSukumar Swaminathan #define RJT_XCHG_ERR 0x11 /* Exchange error */ 17182527734SSukumar Swaminathan #define RJT_PROT_ERR 0x12 /* Protocol error */ 17282527734SSukumar Swaminathan #define RJT_BAD_LENGTH 0x13 /* Invalid Length */ 17382527734SSukumar Swaminathan #define RJT_UNEXPECTED_ACK 0x14 /* Unexpected ACK */ 17482527734SSukumar Swaminathan #define RJT_LOGIN_REQUIRED 0x16 /* Login required */ 17582527734SSukumar Swaminathan #define RJT_TOO_MANY_SEQ 0x17 /* Excessive sequences */ 17682527734SSukumar Swaminathan #define RJT_XCHG_NOT_STRT 0x18 /* Exchange not started */ 17782527734SSukumar Swaminathan #define RJT_UNSUP_SEC_HDR 0x19 /* Security hdr not supported */ 17882527734SSukumar Swaminathan #define RJT_UNAVAIL_PATH 0x1A /* Fabric Path not available */ 17982527734SSukumar Swaminathan #define RJT_VENDOR_UNIQUE 0xFF /* Vendor unique error */ 18082527734SSukumar Swaminathan 18182527734SSukumar Swaminathan /* statRsn BA_RJT reason codes */ 18282527734SSukumar Swaminathan #define BARJT_BAD_CMD_CODE 0x01 /* Invalid command code */ 18382527734SSukumar Swaminathan #define BARJT_LOGICAL_ERR 0x03 /* Logical error */ 18482527734SSukumar Swaminathan #define BARJT_LOGICAL_BSY 0x05 /* Logical busy */ 18582527734SSukumar Swaminathan #define BARJT_PROTOCOL_ERR 0x07 /* Protocol error */ 18682527734SSukumar Swaminathan #define BARJT_VU_ERR 0xFF /* Vendor unique error */ 18782527734SSukumar Swaminathan 18882527734SSukumar Swaminathan /* LS_RJT reason explanation defined in LS_RJT structure */ 18982527734SSukumar Swaminathan 19082527734SSukumar Swaminathan /* BA_RJT reason explanation */ 19182527734SSukumar Swaminathan #define BARJT_EXP_INVALID_ID 0x01 /* Invalid OX_ID/RX_ID */ 19282527734SSukumar Swaminathan #define BARJT_EXP_ABORT_SEQ 0x05 /* Abort SEQ, no more info */ 19382527734SSukumar Swaminathan 19482527734SSukumar Swaminathan /* Local Reject errors */ 19582527734SSukumar Swaminathan #define IOERR_SUCCESS 0x00 19682527734SSukumar Swaminathan #define IOERR_MISSING_CONTINUE 0x01 19782527734SSukumar Swaminathan #define IOERR_SEQUENCE_TIMEOUT 0x02 19882527734SSukumar Swaminathan #define IOERR_INTERNAL_ERROR 0x03 19982527734SSukumar Swaminathan #define IOERR_INVALID_RPI 0x04 20082527734SSukumar Swaminathan #define IOERR_NO_XRI 0x05 20182527734SSukumar Swaminathan #define IOERR_ILLEGAL_COMMAND 0x06 20282527734SSukumar Swaminathan #define IOERR_XCHG_DROPPED 0x07 20382527734SSukumar Swaminathan #define IOERR_ILLEGAL_FIELD 0x08 20482527734SSukumar Swaminathan /* RESERVED 0x09 */ 20582527734SSukumar Swaminathan /* RESERVED 0x0A */ 20682527734SSukumar Swaminathan #define IOERR_RCV_BUFFER_WAITING 0x0B 20782527734SSukumar Swaminathan /* RESERVED 0x0C */ 20882527734SSukumar Swaminathan #define IOERR_TX_DMA_FAILED 0x0D 20982527734SSukumar Swaminathan #define IOERR_RX_DMA_FAILED 0x0E 21082527734SSukumar Swaminathan #define IOERR_ILLEGAL_FRAME 0x0F 21182527734SSukumar Swaminathan 21282527734SSukumar Swaminathan /* RESERVED 0x10 */ 21382527734SSukumar Swaminathan #define IOERR_NO_RESOURCES 0x11 21482527734SSukumar Swaminathan /* RESERVED 0x12 */ 21582527734SSukumar Swaminathan #define IOERR_ILLEGAL_LENGTH 0x13 21682527734SSukumar Swaminathan #define IOERR_UNSUPPORTED_FEATURE 0x14 21782527734SSukumar Swaminathan #define IOERR_ABORT_IN_PROGRESS 0x15 21882527734SSukumar Swaminathan #define IOERR_ABORT_REQUESTED 0x16 21982527734SSukumar Swaminathan #define IOERR_RCV_BUFFER_TIMEOUT 0x17 22082527734SSukumar Swaminathan #define IOERR_LOOP_OPEN_FAILURE 0x18 22182527734SSukumar Swaminathan #define IOERR_RING_RESET 0x19 22282527734SSukumar Swaminathan #define IOERR_LINK_DOWN 0x1A 22382527734SSukumar Swaminathan #define IOERR_CORRUPTED_DATA 0x1B 22482527734SSukumar Swaminathan #define IOERR_CORRUPTED_RPI 0x1C 22582527734SSukumar Swaminathan #define IOERR_OUT_OF_ORDER_DATA 0x1D 22682527734SSukumar Swaminathan #define IOERR_OUT_OF_ORDER_ACK 0x1E 22782527734SSukumar Swaminathan #define IOERR_DUP_FRAME 0x1F 22882527734SSukumar Swaminathan 22982527734SSukumar Swaminathan #define IOERR_LINK_CONTROL_FRAME 0x20 /* ACK_N received */ 23082527734SSukumar Swaminathan #define IOERR_BAD_HOST_ADDRESS 0x21 23182527734SSukumar Swaminathan #define IOERR_RCV_HDRBUF_WAITING 0x22 23282527734SSukumar Swaminathan #define IOERR_MISSING_HDR_BUFFER 0x23 23382527734SSukumar Swaminathan #define IOERR_MSEQ_CHAIN_CORRUPTED 0x24 23482527734SSukumar Swaminathan #define IOERR_ABORTMULT_REQUESTED 0x25 23582527734SSukumar Swaminathan /* RESERVED 0x26 */ 23682527734SSukumar Swaminathan /* RESERVED 0x27 */ 23782527734SSukumar Swaminathan #define IOERR_BUFFER_SHORTAGE 0x28 23882527734SSukumar Swaminathan #define IOERR_XRIBUF_WAITING 0x29 23982527734SSukumar Swaminathan /* RESERVED 0x2A */ 24082527734SSukumar Swaminathan #define IOERR_MISSING_HBQ_ENTRY 0x2B 24182527734SSukumar Swaminathan #define IOERR_ABORT_EXT_REQ 0x2C 24282527734SSukumar Swaminathan #define IOERR_CLOSE_EXT_REQ 0x2D 243*8f23e9faSHans Rosenfeld #define IOERR_INVALID_VPI 0x2E 24482527734SSukumar Swaminathan /* RESERVED 0x2F */ 24582527734SSukumar Swaminathan 24682527734SSukumar Swaminathan #define IOERR_XRIBUF_MISSING 0x30 24782527734SSukumar Swaminathan #define IOERR_ASSI_RSP_SUPPRESSED 0x31 24882527734SSukumar Swaminathan /* RESERVED 0x32 - 0x3F */ 24982527734SSukumar Swaminathan 25082527734SSukumar Swaminathan #define IOERR_ROFFSET_INVAL 0x40 25182527734SSukumar Swaminathan #define IOERR_ROFFSET_MISSING 0x41 25282527734SSukumar Swaminathan #define IOERR_INSUF_BUFFER 0x42 25382527734SSukumar Swaminathan #define IOERR_MISSING_SI 0x43 25482527734SSukumar Swaminathan #define IOERR_MISSING_ES 0x44 25582527734SSukumar Swaminathan #define IOERR_INCOMP_XFER 0x45 25682527734SSukumar Swaminathan /* RESERVED 0x46 - 0xFF */ 25782527734SSukumar Swaminathan 25882527734SSukumar Swaminathan /* Driver defined */ 25982527734SSukumar Swaminathan #define IOERR_ABORT_TIMEOUT 0xF0 26082527734SSukumar Swaminathan } PARM_ERR; 26182527734SSukumar Swaminathan 26282527734SSukumar Swaminathan typedef union 26382527734SSukumar Swaminathan { 26482527734SSukumar Swaminathan struct 26582527734SSukumar Swaminathan { 26682527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 26782527734SSukumar Swaminathan uint8_t Rctl; /* R_CTL field */ 26882527734SSukumar Swaminathan uint8_t Type; /* TYPE field */ 26982527734SSukumar Swaminathan uint8_t Dfctl; /* DF_CTL field */ 27082527734SSukumar Swaminathan uint8_t Fctl; /* Bits 0-7 of IOCB word 5 */ 27182527734SSukumar Swaminathan #endif 27282527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 27382527734SSukumar Swaminathan uint8_t Fctl; /* Bits 0-7 of IOCB word 5 */ 27482527734SSukumar Swaminathan uint8_t Dfctl; /* DF_CTL field */ 27582527734SSukumar Swaminathan uint8_t Type; /* TYPE field */ 27682527734SSukumar Swaminathan uint8_t Rctl; /* R_CTL field */ 27782527734SSukumar Swaminathan #endif 27882527734SSukumar Swaminathan #define FCP_RTYPE 0x08 /* FCP_TARGET_MODE Type - Rctl */ 27982527734SSukumar Swaminathan 28082527734SSukumar Swaminathan #define BC 0x02 /* Broadcast Received - Fctl */ 28182527734SSukumar Swaminathan #define SI 0x04 /* Sequence Initiative */ 28282527734SSukumar Swaminathan #define LA 0x08 /* Ignore Link Attention state */ 28382527734SSukumar Swaminathan #define FSEQ 0x40 /* First Sequence */ 28482527734SSukumar Swaminathan #define LSEQ 0x80 /* Last Sequence */ 28582527734SSukumar Swaminathan } hcsw; 28682527734SSukumar Swaminathan uint32_t reserved; 28782527734SSukumar Swaminathan } WORD5; 28882527734SSukumar Swaminathan 28982527734SSukumar Swaminathan 29082527734SSukumar Swaminathan /* IOCB Command template for a generic response */ 29182527734SSukumar Swaminathan typedef struct 29282527734SSukumar Swaminathan { 29382527734SSukumar Swaminathan uint32_t reserved[4]; 29482527734SSukumar Swaminathan PARM_ERR perr; 29582527734SSukumar Swaminathan } GENERIC_RSP; 29682527734SSukumar Swaminathan 29782527734SSukumar Swaminathan 29882527734SSukumar Swaminathan /* IOCB Command template for XMIT / XMIT_BCAST / RCV_SEQUENCE / XMIT_ELS */ 29982527734SSukumar Swaminathan typedef struct 30082527734SSukumar Swaminathan { 30182527734SSukumar Swaminathan ULP_BDE xrsqbde[2]; 30282527734SSukumar Swaminathan uint32_t xrsqRo; /* Starting Relative Offset */ 30382527734SSukumar Swaminathan WORD5 w5; /* Header control/status word */ 30482527734SSukumar Swaminathan } XR_SEQ_FIELDS; 30582527734SSukumar Swaminathan 30682527734SSukumar Swaminathan /* IOCB Command template for ELS_REQUEST */ 30782527734SSukumar Swaminathan typedef struct 30882527734SSukumar Swaminathan { 30982527734SSukumar Swaminathan ULP_BDE elsReq; 31082527734SSukumar Swaminathan ULP_BDE elsRsp; 31182527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 31282527734SSukumar Swaminathan uint32_t word4Rsvd:7; 31382527734SSukumar Swaminathan uint32_t fl:1; 31482527734SSukumar Swaminathan uint32_t myID:24; 31582527734SSukumar Swaminathan 31682527734SSukumar Swaminathan uint32_t word5Rsvd:8; 31782527734SSukumar Swaminathan uint32_t remoteID:24; 31882527734SSukumar Swaminathan #endif 31982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 32082527734SSukumar Swaminathan uint32_t myID:24; 32182527734SSukumar Swaminathan uint32_t fl:1; 32282527734SSukumar Swaminathan uint32_t word4Rsvd:7; 32382527734SSukumar Swaminathan 32482527734SSukumar Swaminathan uint32_t remoteID:24; 32582527734SSukumar Swaminathan uint32_t word5Rsvd:8; 32682527734SSukumar Swaminathan #endif 32782527734SSukumar Swaminathan } ELS_REQUEST; 32882527734SSukumar Swaminathan 32982527734SSukumar Swaminathan /* IOCB Command template for RCV_ELS_REQ */ 33082527734SSukumar Swaminathan typedef struct 33182527734SSukumar Swaminathan { 33282527734SSukumar Swaminathan ULP_BDE elsReq[2]; 33382527734SSukumar Swaminathan uint32_t parmRo; 33482527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 33582527734SSukumar Swaminathan uint32_t word5Rsvd:8; 33682527734SSukumar Swaminathan uint32_t remoteID:24; 33782527734SSukumar Swaminathan #endif 33882527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 33982527734SSukumar Swaminathan uint32_t remoteID:24; 34082527734SSukumar Swaminathan uint32_t word5Rsvd:8; 34182527734SSukumar Swaminathan #endif 34282527734SSukumar Swaminathan } RCV_ELS_REQ; 34382527734SSukumar Swaminathan 34482527734SSukumar Swaminathan /* IOCB Command template for ABORT / CLOSE_XRI */ 34582527734SSukumar Swaminathan typedef struct 34682527734SSukumar Swaminathan { 34782527734SSukumar Swaminathan uint32_t rsvd[3]; 34882527734SSukumar Swaminathan uint32_t abortType; 34982527734SSukumar Swaminathan #define ABORT_TYPE_ABTX 0x00000000 35082527734SSukumar Swaminathan #define ABORT_TYPE_ABTS 0x00000001 35182527734SSukumar Swaminathan uint32_t parm; 35282527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 35382527734SSukumar Swaminathan uint16_t abortContextTag; /* ulpContext from command to */ 35482527734SSukumar Swaminathan /* abort/close */ 35582527734SSukumar Swaminathan uint16_t abortIoTag; /* ulpIoTag from command to */ 35682527734SSukumar Swaminathan /* abort/close */ 35782527734SSukumar Swaminathan #endif 35882527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 35982527734SSukumar Swaminathan uint16_t abortIoTag; /* ulpIoTag from command to */ 36082527734SSukumar Swaminathan /* abort/close */ 36182527734SSukumar Swaminathan uint16_t abortContextTag; /* ulpContext from command to */ 36282527734SSukumar Swaminathan /* abort/close */ 36382527734SSukumar Swaminathan #endif 36482527734SSukumar Swaminathan } AC_XRI; 36582527734SSukumar Swaminathan 36682527734SSukumar Swaminathan /* IOCB Command template for GET_RPI */ 36782527734SSukumar Swaminathan typedef struct 36882527734SSukumar Swaminathan { 36982527734SSukumar Swaminathan uint32_t rsvd[4]; 37082527734SSukumar Swaminathan uint32_t parmRo; 37182527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 37282527734SSukumar Swaminathan uint32_t word5Rsvd:8; 37382527734SSukumar Swaminathan uint32_t remoteID:24; 37482527734SSukumar Swaminathan #endif 37582527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 37682527734SSukumar Swaminathan uint32_t remoteID:24; 37782527734SSukumar Swaminathan uint32_t word5Rsvd:8; 37882527734SSukumar Swaminathan #endif 37982527734SSukumar Swaminathan } GET_RPI; 38082527734SSukumar Swaminathan 38182527734SSukumar Swaminathan /* IOCB Command template for all FCP Initiator commands */ 38282527734SSukumar Swaminathan typedef struct 38382527734SSukumar Swaminathan { 38482527734SSukumar Swaminathan ULP_BDE fcpi_cmnd; /* FCP_CMND payload descriptor */ 38582527734SSukumar Swaminathan ULP_BDE fcpi_rsp; /* Rcv buffer */ 38682527734SSukumar Swaminathan uint32_t fcpi_parm; 38782527734SSukumar Swaminathan uint32_t fcpi_XRdy; /* transfer ready for IWRITE */ 38882527734SSukumar Swaminathan } FCPI_FIELDS; 38982527734SSukumar Swaminathan 39082527734SSukumar Swaminathan /* IOCB Command template for all FCP Target commands */ 39182527734SSukumar Swaminathan typedef struct 39282527734SSukumar Swaminathan { 39382527734SSukumar Swaminathan ULP_BDE fcpt_Buffer[2]; /* FCP_CMND payload descriptor */ 39482527734SSukumar Swaminathan uint32_t fcpt_Offset; 39582527734SSukumar Swaminathan uint32_t fcpt_Length; /* transfer ready for IWRITE */ 39682527734SSukumar Swaminathan } FCPT_FIELDS; 39782527734SSukumar Swaminathan 39882527734SSukumar Swaminathan /* SLI-2 IOCB structure definitions */ 39982527734SSukumar Swaminathan 40082527734SSukumar Swaminathan /* IOCB Command template for 64 bit XMIT / XMIT_BCAST / XMIT_ELS */ 40182527734SSukumar Swaminathan typedef struct 40282527734SSukumar Swaminathan { 40382527734SSukumar Swaminathan ULP_BDL bdl; 40482527734SSukumar Swaminathan uint32_t xrsqRo; /* Starting Relative Offset */ 40582527734SSukumar Swaminathan WORD5 w5; /* Header control/status word */ 40682527734SSukumar Swaminathan } XMT_SEQ_FIELDS64; 40782527734SSukumar Swaminathan 40882527734SSukumar Swaminathan 40982527734SSukumar Swaminathan /* IOCB Command template for 64 bit RCV_SEQUENCE64 */ 41082527734SSukumar Swaminathan typedef struct 41182527734SSukumar Swaminathan { 41282527734SSukumar Swaminathan ULP_BDE64 rcvBde; 41382527734SSukumar Swaminathan uint32_t rsvd1; 41482527734SSukumar Swaminathan uint32_t xrsqRo; /* Starting Relative Offset */ 41582527734SSukumar Swaminathan WORD5 w5; /* Header control/status word */ 41682527734SSukumar Swaminathan } RCV_SEQ_FIELDS64; 41782527734SSukumar Swaminathan 41882527734SSukumar Swaminathan /* IOCB Command template for ELS_REQUEST64 */ 41982527734SSukumar Swaminathan typedef struct 42082527734SSukumar Swaminathan { 42182527734SSukumar Swaminathan ULP_BDL bdl; 42282527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 42382527734SSukumar Swaminathan uint32_t word4Rsvd:7; 42482527734SSukumar Swaminathan uint32_t fl:1; 42582527734SSukumar Swaminathan uint32_t myID:24; 42682527734SSukumar Swaminathan 42782527734SSukumar Swaminathan uint32_t word5Rsvd:8; 42882527734SSukumar Swaminathan uint32_t remoteID:24; 42982527734SSukumar Swaminathan #endif 43082527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 43182527734SSukumar Swaminathan uint32_t myID:24; 43282527734SSukumar Swaminathan uint32_t fl:1; 43382527734SSukumar Swaminathan uint32_t word4Rsvd:7; 43482527734SSukumar Swaminathan 43582527734SSukumar Swaminathan uint32_t remoteID:24; 43682527734SSukumar Swaminathan uint32_t word5Rsvd:8; 43782527734SSukumar Swaminathan #endif 43882527734SSukumar Swaminathan } ELS_REQUEST64; 43982527734SSukumar Swaminathan 44082527734SSukumar Swaminathan 44182527734SSukumar Swaminathan /* IOCB Command template for ASYNC_STATUS */ 44282527734SSukumar Swaminathan typedef struct 44382527734SSukumar Swaminathan { 44482527734SSukumar Swaminathan ULP_BDL resv; 44582527734SSukumar Swaminathan uint32_t parameter; 44682527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 44782527734SSukumar Swaminathan uint16_t EventCode; 44882527734SSukumar Swaminathan uint16_t SubContext; 44982527734SSukumar Swaminathan #endif 45082527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 45182527734SSukumar Swaminathan uint16_t SubContext; 45282527734SSukumar Swaminathan uint16_t EventCode; 45382527734SSukumar Swaminathan #endif 45482527734SSukumar Swaminathan } ASYNC_STATUS; 45582527734SSukumar Swaminathan 45682527734SSukumar Swaminathan 45782527734SSukumar Swaminathan /* IOCB Command template for QUE_RING_LIST64 */ 45882527734SSukumar Swaminathan typedef struct 45982527734SSukumar Swaminathan { 46082527734SSukumar Swaminathan ULP_BDL bdl; 46182527734SSukumar Swaminathan uint32_t rsvd1; 46282527734SSukumar Swaminathan uint32_t rsvd2; 46382527734SSukumar Swaminathan } QUE_RING_LIST64; 46482527734SSukumar Swaminathan 46582527734SSukumar Swaminathan 46682527734SSukumar Swaminathan /* IOCB Command template for GEN_REQUEST64 */ 46782527734SSukumar Swaminathan typedef struct 46882527734SSukumar Swaminathan { 46982527734SSukumar Swaminathan ULP_BDL bdl; 47082527734SSukumar Swaminathan uint32_t param; /* Starting Relative Offset */ 47182527734SSukumar Swaminathan WORD5 w5; /* Header control/status word */ 47282527734SSukumar Swaminathan } GEN_REQUEST64; 47382527734SSukumar Swaminathan 47482527734SSukumar Swaminathan /* IOCB Command template for RCV_ELS_REQ64 */ 47582527734SSukumar Swaminathan typedef struct 47682527734SSukumar Swaminathan { 47782527734SSukumar Swaminathan ULP_BDE64 elsReq; 47882527734SSukumar Swaminathan uint32_t rsvd1; 47982527734SSukumar Swaminathan uint32_t parmRo; 48082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 48182527734SSukumar Swaminathan uint32_t word5Rsvd:8; 48282527734SSukumar Swaminathan uint32_t remoteID:24; 48382527734SSukumar Swaminathan #endif 48482527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 48582527734SSukumar Swaminathan uint32_t remoteID:24; 48682527734SSukumar Swaminathan uint32_t word5Rsvd:8; 48782527734SSukumar Swaminathan #endif 48882527734SSukumar Swaminathan } RCV_ELS_REQ64; 48982527734SSukumar Swaminathan 49082527734SSukumar Swaminathan /* IOCB Command template for all 64 bit FCP Initiator commands */ 49182527734SSukumar Swaminathan typedef struct 49282527734SSukumar Swaminathan { 49382527734SSukumar Swaminathan ULP_BDL bdl; 49482527734SSukumar Swaminathan uint32_t fcpi_parm; 49582527734SSukumar Swaminathan uint32_t fcpi_XRdy; /* transfer ready for IWRITE */ 49682527734SSukumar Swaminathan } FCPI_FIELDS64; 49782527734SSukumar Swaminathan 49882527734SSukumar Swaminathan /* IOCB Command template for all 64 bit FCP Target commands */ 49982527734SSukumar Swaminathan typedef struct 50082527734SSukumar Swaminathan { 50182527734SSukumar Swaminathan ULP_BDL bdl; 50282527734SSukumar Swaminathan uint32_t fcpt_Offset; 50382527734SSukumar Swaminathan uint32_t fcpt_Length; /* transfer ready for IWRITE */ 50482527734SSukumar Swaminathan } FCPT_FIELDS64; 50582527734SSukumar Swaminathan 50682527734SSukumar Swaminathan /* IOCB Command template for all 64 bit FCP Target commands */ 50782527734SSukumar Swaminathan typedef struct 50882527734SSukumar Swaminathan { 50982527734SSukumar Swaminathan uint32_t rsp_length; 51082527734SSukumar Swaminathan uint32_t rsvd1; 51182527734SSukumar Swaminathan uint32_t rsvd2; 51282527734SSukumar Swaminathan uint32_t iotag32; 51382527734SSukumar Swaminathan uint32_t status; 51482527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 51582527734SSukumar Swaminathan uint32_t rsvd:30; 51682527734SSukumar Swaminathan uint32_t lnk:1; 51782527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */ 51882527734SSukumar Swaminathan 51982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 52082527734SSukumar Swaminathan uint32_t lnk:1; 52182527734SSukumar Swaminathan uint32_t rsvd:30; 52282527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */ 52382527734SSukumar Swaminathan } AUTO_TRSP; 52482527734SSukumar Swaminathan 52582527734SSukumar Swaminathan 52682527734SSukumar Swaminathan typedef struct 52782527734SSukumar Swaminathan { 52882527734SSukumar Swaminathan uint32_t io_tag64_low; /* Word 8 */ 52982527734SSukumar Swaminathan uint32_t io_tag64_high; /* Word 9 */ 53082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 53182527734SSukumar Swaminathan uint32_t cs_ctl:8; /* Word 10, bit 31:24 */ 53282527734SSukumar Swaminathan uint32_t cs_en:1; /* Word 10, bit 23 */ 53382527734SSukumar Swaminathan uint32_t rsv:15; /* Word 10, bit 22:8 */ 53482527734SSukumar Swaminathan uint32_t ebde_count:8; /* Word 10, bit 7:0 */ 53582527734SSukumar Swaminathan #endif 53682527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 53782527734SSukumar Swaminathan uint32_t ebde_count:8; /* Word 10, bit 7:0 */ 53882527734SSukumar Swaminathan uint32_t rsv:15; /* Word 10, bit 22:8 */ 53982527734SSukumar Swaminathan uint32_t cs_en:1; /* Word 10, bit 23 */ 54082527734SSukumar Swaminathan uint32_t cs_ctl:8; /* Word 10, bit 31:24 */ 54182527734SSukumar Swaminathan #endif 54282527734SSukumar Swaminathan uint32_t rsplen; /* Word 11 */ 54382527734SSukumar Swaminathan ULP_BDE64 ebde1; /* Word 12:14 */ 54482527734SSukumar Swaminathan ULP_BDE64 ebde2; /* Word 15:17 */ 54582527734SSukumar Swaminathan ULP_BDE64 ebde3; /* Word 18:20 */ 54682527734SSukumar Swaminathan ULP_BDE64 ebde4; /* Word 21:23 */ 54782527734SSukumar Swaminathan ULP_BDE64 ebde5; /* Word 24:26 */ 54882527734SSukumar Swaminathan ULP_BDE64 ebde6; /* Word 27:29 */ 54982527734SSukumar Swaminathan } GENERIC_EXT_IOCB; 55082527734SSukumar Swaminathan 55182527734SSukumar Swaminathan /* 55282527734SSukumar Swaminathan * IOCB Command Extension template for 55382527734SSukumar Swaminathan * CMD_RCV_ELS64_CX (0xB7) or CMD_RCV_SEQ64_CX (0xB5) 55482527734SSukumar Swaminathan */ 55582527734SSukumar Swaminathan 55682527734SSukumar Swaminathan typedef struct 55782527734SSukumar Swaminathan { 55882527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 559*8f23e9faSHans Rosenfeld uint16_t oxid; /* word 8 */ 560*8f23e9faSHans Rosenfeld uint16_t seq_cnt; 561*8f23e9faSHans Rosenfeld 56282527734SSukumar Swaminathan uint16_t vpi; /* word 9 */ 56382527734SSukumar Swaminathan uint16_t buddy_xri; 56482527734SSukumar Swaminathan 56582527734SSukumar Swaminathan uint32_t ccp:8; /* word 10 */ 56682527734SSukumar Swaminathan uint32_t ccpe:1; 56782527734SSukumar Swaminathan uint32_t rsvd:23; 56882527734SSukumar Swaminathan #endif 56982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 570*8f23e9faSHans Rosenfeld uint16_t seq_cnt; /* word 8 */ 571*8f23e9faSHans Rosenfeld uint16_t oxid; 572*8f23e9faSHans Rosenfeld 57382527734SSukumar Swaminathan uint16_t buddy_xri; /* word 9 */ 57482527734SSukumar Swaminathan uint16_t vpi; 57582527734SSukumar Swaminathan 57682527734SSukumar Swaminathan uint32_t rsvd:23; /* word 10 */ 57782527734SSukumar Swaminathan uint32_t ccpe:1; 57882527734SSukumar Swaminathan uint32_t ccp:8; 57982527734SSukumar Swaminathan #endif 58082527734SSukumar Swaminathan uint32_t seq_len; /* received sequence length */ 58182527734SSukumar Swaminathan ULP_BDL bde2; /* total 4 words */ 58282527734SSukumar Swaminathan } RCV_SEQ_ELS_64_SLI3_EXT; 58382527734SSukumar Swaminathan 58482527734SSukumar Swaminathan 58582527734SSukumar Swaminathan typedef volatile struct emlxs_iocb 58682527734SSukumar Swaminathan { /* IOCB structure */ 58782527734SSukumar Swaminathan union 58882527734SSukumar Swaminathan { 58982527734SSukumar Swaminathan GENERIC_RSP grsp; /* Generic response */ 59082527734SSukumar Swaminathan XR_SEQ_FIELDS xrseq; /* XMIT/BCAST/RCV_SEQ */ 59182527734SSukumar Swaminathan ULP_BDE cont[3]; /* up to 3 cont BDEs */ 59282527734SSukumar Swaminathan ELS_REQUEST elsreq; /* ELS_REQ template */ 59382527734SSukumar Swaminathan RCV_ELS_REQ rcvels; /* RCV_ELS_REQ */ 59482527734SSukumar Swaminathan /* template */ 59582527734SSukumar Swaminathan AC_XRI acxri; /* ABORT/CLOSE_XRI */ 59682527734SSukumar Swaminathan /* template */ 59782527734SSukumar Swaminathan GET_RPI getrpi; /* GET_RPI template */ 59882527734SSukumar Swaminathan FCPI_FIELDS fcpi; /* FCP Initiator */ 59982527734SSukumar Swaminathan /* template */ 60082527734SSukumar Swaminathan FCPT_FIELDS fcpt; /* FCP target */ 60182527734SSukumar Swaminathan /* template */ 60282527734SSukumar Swaminathan 60382527734SSukumar Swaminathan /* SLI-2 structures */ 60482527734SSukumar Swaminathan 60582527734SSukumar Swaminathan ULP_BDE64 cont64[2]; /* up to 2 64 bit */ 60682527734SSukumar Swaminathan /* cont BDE_64s */ 60782527734SSukumar Swaminathan ELS_REQUEST64 elsreq64; /* ELS_REQ64 template */ 60882527734SSukumar Swaminathan QUE_RING_LIST64 qringlist64; /* QUE RING LIST64 */ 60982527734SSukumar Swaminathan /* template */ 61082527734SSukumar Swaminathan GEN_REQUEST64 genreq64; /* GEN_REQUEST64 */ 61182527734SSukumar Swaminathan /* template */ 61282527734SSukumar Swaminathan RCV_ELS_REQ64 rcvels64; /* RCV_ELS_REQ */ 61382527734SSukumar Swaminathan /* template */ 61482527734SSukumar Swaminathan XMT_SEQ_FIELDS64 xseq64; /* XMIT / BCAST cmd */ 61582527734SSukumar Swaminathan FCPI_FIELDS64 fcpi64; /* FCP 64 bit */ 61682527734SSukumar Swaminathan /* Initiator template */ 61782527734SSukumar Swaminathan FCPT_FIELDS64 fcpt64; /* FCP 64 bit target */ 61882527734SSukumar Swaminathan /* template */ 61982527734SSukumar Swaminathan AUTO_TRSP atrsp; /* FCP 64 bit target */ 62082527734SSukumar Swaminathan /* template */ 62182527734SSukumar Swaminathan 62282527734SSukumar Swaminathan RCV_SEQ_FIELDS64 rcvseq64; 62382527734SSukumar Swaminathan ASYNC_STATUS astat; 62482527734SSukumar Swaminathan 62582527734SSukumar Swaminathan uint32_t ulpWord[6]; /* generic 6 'words' */ 62682527734SSukumar Swaminathan } un; 62782527734SSukumar Swaminathan union 62882527734SSukumar Swaminathan { 62982527734SSukumar Swaminathan struct 63082527734SSukumar Swaminathan { 63182527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 63282527734SSukumar Swaminathan uint16_t ulpContext; /* High order bits */ 63382527734SSukumar Swaminathan /* word6 */ 63482527734SSukumar Swaminathan uint16_t ulpIoTag; /* Low order bits */ 63582527734SSukumar Swaminathan /* word6 */ 63682527734SSukumar Swaminathan #endif 63782527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 63882527734SSukumar Swaminathan uint16_t ulpIoTag; /* Low order bits */ 63982527734SSukumar Swaminathan /* word6 */ 64082527734SSukumar Swaminathan uint16_t ulpContext; /* High order bits */ 64182527734SSukumar Swaminathan /* word6 */ 64282527734SSukumar Swaminathan #endif 64382527734SSukumar Swaminathan } t1; 64482527734SSukumar Swaminathan struct 64582527734SSukumar Swaminathan { 64682527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 64782527734SSukumar Swaminathan uint16_t ulpContext; /* High order bits */ 64882527734SSukumar Swaminathan /* word6 */ 64982527734SSukumar Swaminathan uint16_t ulpIoTag1:2; /* Low order bits */ 65082527734SSukumar Swaminathan /* word6 */ 65182527734SSukumar Swaminathan uint16_t ulpIoTag0:14; /* Low order bits */ 65282527734SSukumar Swaminathan /* word6 */ 65382527734SSukumar Swaminathan #endif 65482527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 65582527734SSukumar Swaminathan uint16_t ulpIoTag0:14; /* Low order bits */ 65682527734SSukumar Swaminathan /* word6 */ 65782527734SSukumar Swaminathan uint16_t ulpIoTag1:2; /* Low order bits */ 65882527734SSukumar Swaminathan /* word6 */ 65982527734SSukumar Swaminathan uint16_t ulpContext; /* High order bits */ 66082527734SSukumar Swaminathan /* word6 */ 66182527734SSukumar Swaminathan #endif 66282527734SSukumar Swaminathan } t2; 66382527734SSukumar Swaminathan 66482527734SSukumar Swaminathan uint32_t ulpWord; 66582527734SSukumar Swaminathan } un1; 66682527734SSukumar Swaminathan #define ULPCONTEXT un1.t1.ulpContext 66782527734SSukumar Swaminathan #define ULPIOTAG un1.t1.ulpIoTag 66882527734SSukumar Swaminathan #define ULPIOTAG0 un1.t2.ulpIoTag0 66982527734SSukumar Swaminathan #define ULPDELAYXMIT un1.t2.ulpIoTag1 67082527734SSukumar Swaminathan 67182527734SSukumar Swaminathan #define IOCB_DELAYXMIT_MSK 0x3000 67282527734SSukumar Swaminathan 67382527734SSukumar Swaminathan 67482527734SSukumar Swaminathan union 67582527734SSukumar Swaminathan { 67682527734SSukumar Swaminathan struct 67782527734SSukumar Swaminathan { 67882527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 67982527734SSukumar Swaminathan uint32_t ulpRsvdByte:8; 68082527734SSukumar Swaminathan uint32_t ulpXS:1; 68182527734SSukumar Swaminathan uint32_t ulpFCP2Rcvy:1; 68282527734SSukumar Swaminathan uint32_t ulpPU:2; 68382527734SSukumar Swaminathan uint32_t ulpIr:1; 68482527734SSukumar Swaminathan uint32_t ulpClass:3; 68582527734SSukumar Swaminathan uint32_t ulpCommand:8; 68682527734SSukumar Swaminathan uint32_t ulpStatus:4; 68782527734SSukumar Swaminathan uint32_t ulpBdeCount:2; 68882527734SSukumar Swaminathan uint32_t ulpLe:1; 68982527734SSukumar Swaminathan uint32_t ulpOwner:1; /* Low order bit */ 69082527734SSukumar Swaminathan /* word 7 */ 69182527734SSukumar Swaminathan #endif 69282527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 69382527734SSukumar Swaminathan uint32_t ulpOwner:1; /* Low order bit */ 69482527734SSukumar Swaminathan /* word 7 */ 69582527734SSukumar Swaminathan uint32_t ulpLe:1; 69682527734SSukumar Swaminathan uint32_t ulpBdeCount:2; 69782527734SSukumar Swaminathan uint32_t ulpStatus:4; 69882527734SSukumar Swaminathan uint32_t ulpCommand:8; 69982527734SSukumar Swaminathan uint32_t ulpClass:3; 70082527734SSukumar Swaminathan uint32_t ulpIr:1; 70182527734SSukumar Swaminathan uint32_t ulpPU:2; 70282527734SSukumar Swaminathan uint32_t ulpFCP2Rcvy:1; 70382527734SSukumar Swaminathan uint32_t ulpXS:1; 70482527734SSukumar Swaminathan uint32_t ulpRsvdByte:8; 70582527734SSukumar Swaminathan #endif 70682527734SSukumar Swaminathan } t1; 70782527734SSukumar Swaminathan 70882527734SSukumar Swaminathan struct 70982527734SSukumar Swaminathan { 71082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 71182527734SSukumar Swaminathan uint32_t ulpRsvdByte:8; 71282527734SSukumar Swaminathan uint32_t ulpCT:2; 71382527734SSukumar Swaminathan uint32_t ulpPU:2; 71482527734SSukumar Swaminathan uint32_t ulpIr:1; 71582527734SSukumar Swaminathan uint32_t ulpClass:3; 71682527734SSukumar Swaminathan uint32_t ulpCommand:8; 71782527734SSukumar Swaminathan uint32_t ulpStatus:4; 71882527734SSukumar Swaminathan uint32_t ulpBdeCount:2; 71982527734SSukumar Swaminathan uint32_t ulpLe:1; 72082527734SSukumar Swaminathan uint32_t ulpOwner:1; /* Low order bit */ 72182527734SSukumar Swaminathan /* word 7 */ 72282527734SSukumar Swaminathan #endif 72382527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 72482527734SSukumar Swaminathan uint32_t ulpOwner:1; /* Low order bit */ 72582527734SSukumar Swaminathan /* word 7 */ 72682527734SSukumar Swaminathan uint32_t ulpLe:1; 72782527734SSukumar Swaminathan uint32_t ulpBdeCount:2; 72882527734SSukumar Swaminathan uint32_t ulpStatus:4; 72982527734SSukumar Swaminathan uint32_t ulpCommand:8; 73082527734SSukumar Swaminathan uint32_t ulpClass:3; 73182527734SSukumar Swaminathan uint32_t ulpIr:1; 73282527734SSukumar Swaminathan uint32_t ulpPU:2; 73382527734SSukumar Swaminathan uint32_t ulpCT:2; 73482527734SSukumar Swaminathan uint32_t ulpRsvdByte:8; 73582527734SSukumar Swaminathan #endif 73682527734SSukumar Swaminathan } t2; 73782527734SSukumar Swaminathan 73882527734SSukumar Swaminathan uint32_t ulpWord; 73982527734SSukumar Swaminathan } un2; 74082527734SSukumar Swaminathan 74182527734SSukumar Swaminathan #define ULPCT un2.t2.ulpCT 74282527734SSukumar Swaminathan #define ULPRSVDBYTE un2.t1.ulpRsvdByte 74382527734SSukumar Swaminathan #define ULPXS un2.t1.ulpXS 74482527734SSukumar Swaminathan #define ULPFCP2RCVY un2.t1.ulpFCP2Rcvy 74582527734SSukumar Swaminathan #define ULPPU un2.t1.ulpPU 74682527734SSukumar Swaminathan #define ULPIR un2.t1.ulpIr 74782527734SSukumar Swaminathan #define ULPCLASS un2.t1.ulpClass 74882527734SSukumar Swaminathan #define ULPCOMMAND un2.t1.ulpCommand 74982527734SSukumar Swaminathan #define ULPSTATUS un2.t1.ulpStatus 75082527734SSukumar Swaminathan #define ULPBDECOUNT un2.t1.ulpBdeCount 75182527734SSukumar Swaminathan #define ULPLE un2.t1.ulpLe 75282527734SSukumar Swaminathan #define ULPOWNER un2.t1.ulpOwner 75382527734SSukumar Swaminathan /* 32 bytes at this point */ 75482527734SSukumar Swaminathan 75582527734SSukumar Swaminathan /* SLI4 */ 75682527734SSukumar Swaminathan #define RXFCHDR un.ulpWord 75782527734SSukumar Swaminathan #define RXSEQCNT un1.ulpWord 75882527734SSukumar Swaminathan #define RXSEQLEN un2.ulpWord 75982527734SSukumar Swaminathan 76082527734SSukumar Swaminathan union 76182527734SSukumar Swaminathan { 76282527734SSukumar Swaminathan GENERIC_EXT_IOCB ext_iocb; 76382527734SSukumar Swaminathan RCV_SEQ_ELS_64_SLI3_EXT ext_rcv; 76482527734SSukumar Swaminathan uint32_t sli3Words[24]; /* 96 extra bytes */ 76582527734SSukumar Swaminathan /* for SLI-3 */ 76682527734SSukumar Swaminathan } unsli3; 76782527734SSukumar Swaminathan /* 128 bytes at this point */ 76882527734SSukumar Swaminathan 76982527734SSukumar Swaminathan #define IOCB_FCP 1 /* IOCB is used for */ 77082527734SSukumar Swaminathan /* FCP ELS cmds - ulpRsvByte */ 77182527734SSukumar Swaminathan #define IOCB_IP 2 /* IOCB is used for IP ELS cmds */ 77282527734SSukumar Swaminathan #define PARM_UNUSED 0 /* PU field (Word 4) not used */ 77382527734SSukumar Swaminathan #define PARM_REL_OFF 1 /* PU field (Word 4) = R. O. */ 774*8f23e9faSHans Rosenfeld #define PARM_XFER_CHECK 2 /* PU field (Word 4) = Data Xfer Len */ 77582527734SSukumar Swaminathan #define CLASS1 0 /* Class 1 */ 77682527734SSukumar Swaminathan #define CLASS2 1 /* Class 2 */ 77782527734SSukumar Swaminathan #define CLASS3 2 /* Class 3 */ 77882527734SSukumar Swaminathan #define CLASS_FCP_INTERMIX 7 /* FCP Data->Cls 1, all else->Cls 2 */ 77982527734SSukumar Swaminathan 78082527734SSukumar Swaminathan #define IOSTAT_SUCCESS 0x0 /* ulpStatus */ 78182527734SSukumar Swaminathan #define IOSTAT_FCP_RSP_ERROR 0x1 78282527734SSukumar Swaminathan #define IOSTAT_REMOTE_STOP 0x2 78382527734SSukumar Swaminathan #define IOSTAT_LOCAL_REJECT 0x3 78482527734SSukumar Swaminathan #define IOSTAT_NPORT_RJT 0x4 78582527734SSukumar Swaminathan #define IOSTAT_FABRIC_RJT 0x5 78682527734SSukumar Swaminathan #define IOSTAT_NPORT_BSY 0x6 78782527734SSukumar Swaminathan #define IOSTAT_FABRIC_BSY 0x7 78882527734SSukumar Swaminathan #define IOSTAT_INTERMED_RSP 0x8 78982527734SSukumar Swaminathan #define IOSTAT_LS_RJT 0x9 79082527734SSukumar Swaminathan #define IOSTAT_RESERVED_A 0xA 79182527734SSukumar Swaminathan #define IOSTAT_CMD_REJECT 0xB 79282527734SSukumar Swaminathan #define IOSTAT_FCP_TGT_LENCHK 0xC 79382527734SSukumar Swaminathan #define IOSTAT_RESERVED_D 0xD 79482527734SSukumar Swaminathan #define IOSTAT_RESERVED_E 0xE 79582527734SSukumar Swaminathan #define IOSTAT_NEED_BUFF_ENTRY 0xF 79682527734SSukumar Swaminathan 79782527734SSukumar Swaminathan /* Special error codes */ 79882527734SSukumar Swaminathan #define IOSTAT_DATA_OVERRUN 0x10 /* Added for resid handling */ 79982527734SSukumar Swaminathan #define IOSTAT_DATA_UNDERRUN 0x11 /* Added for resid handling */ 800*8f23e9faSHans Rosenfeld #define IOSTAT_RSP_INVALID 0x12 /* Added for resp checking */ 80182527734SSukumar Swaminathan } emlxs_iocb_t; 80282527734SSukumar Swaminathan typedef emlxs_iocb_t IOCB; 80382527734SSukumar Swaminathan 80482527734SSukumar Swaminathan 80582527734SSukumar Swaminathan typedef struct emlxs_iocbq 80682527734SSukumar Swaminathan { 80782527734SSukumar Swaminathan emlxs_iocb_t iocb; 80882527734SSukumar Swaminathan emlxs_wqe_t wqe; /* SLI4 */ 80982527734SSukumar Swaminathan 81082527734SSukumar Swaminathan struct emlxs_iocbq *next; 81182527734SSukumar Swaminathan 812a9800bebSGarrett D'Amore void *bp; /* ptr to data buffer structure */ 81382527734SSukumar Swaminathan void *port; /* Board info pointer */ 81482527734SSukumar Swaminathan void *channel; /* IO Channel pointer */ 81582527734SSukumar Swaminathan void *node; /* Node pointer */ 81682527734SSukumar Swaminathan void *sbp; /* Pkt pointer */ 81782527734SSukumar Swaminathan uint32_t flag; 81882527734SSukumar Swaminathan 81982527734SSukumar Swaminathan #define IOCB_POOL_ALLOCATED 0x00000001 82082527734SSukumar Swaminathan #define IOCB_PRIORITY 0x00000002 82182527734SSukumar Swaminathan #define IOCB_SPECIAL 0x00000004 82282527734SSukumar Swaminathan #define IOCB_FCP_CMD 0x00000008 82382527734SSukumar Swaminathan #define IOCB_FCT_DATA 0x00000020 /* tgt-mode */ 82482527734SSukumar Swaminathan 82582527734SSukumar Swaminathan } emlxs_iocbq_t; 82682527734SSukumar Swaminathan typedef emlxs_iocbq_t IOCBQ; 82782527734SSukumar Swaminathan 82882527734SSukumar Swaminathan 82982527734SSukumar Swaminathan #ifdef __cplusplus 83082527734SSukumar Swaminathan } 83182527734SSukumar Swaminathan #endif 83282527734SSukumar Swaminathan 83382527734SSukumar Swaminathan #endif /* _EMLXS_IOCB_H */ 834