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-2012 Emulex. All rights reserved. 2482527734SSukumar Swaminathan * Use is subject to license terms. 2582527734SSukumar Swaminathan */ 2682527734SSukumar Swaminathan 2782527734SSukumar Swaminathan #ifndef _EMLXS_QUEUE_H 2882527734SSukumar Swaminathan #define _EMLXS_QUEUE_H 2982527734SSukumar Swaminathan 3082527734SSukumar Swaminathan #ifdef __cplusplus 3182527734SSukumar Swaminathan extern "C" { 3282527734SSukumar Swaminathan #endif 3382527734SSukumar Swaminathan 3482527734SSukumar Swaminathan 3582527734SSukumar Swaminathan /* Queue entry defines */ 3682527734SSukumar Swaminathan 3782527734SSukumar Swaminathan /* EQ entries */ 3882527734SSukumar Swaminathan typedef struct EQE 3982527734SSukumar Swaminathan { 4082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 4182527734SSukumar Swaminathan uint32_t CQId: 16; 4282527734SSukumar Swaminathan uint32_t MinorCode: 12; 4382527734SSukumar Swaminathan uint32_t MajorCode: 3; 4482527734SSukumar Swaminathan uint32_t Valid: 1; 4582527734SSukumar Swaminathan #endif 4682527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 4782527734SSukumar Swaminathan uint32_t Valid: 1; 4882527734SSukumar Swaminathan uint32_t MajorCode: 3; 4982527734SSukumar Swaminathan uint32_t MinorCode: 12; 5082527734SSukumar Swaminathan uint32_t CQId: 16; 5182527734SSukumar Swaminathan #endif 5282527734SSukumar Swaminathan 5382527734SSukumar Swaminathan } EQE_t; 5482527734SSukumar Swaminathan 5582527734SSukumar Swaminathan typedef union 5682527734SSukumar Swaminathan { 5782527734SSukumar Swaminathan uint32_t word; 5882527734SSukumar Swaminathan EQE_t entry; 5982527734SSukumar Swaminathan 6082527734SSukumar Swaminathan } EQE_u; 6182527734SSukumar Swaminathan 6282527734SSukumar Swaminathan #define EQE_VALID 0x00000001 /* Mask for EQE valid */ 6382527734SSukumar Swaminathan #define EQE_CQID 0xFFFF0000 /* Mask for EQE CQID */ 6482527734SSukumar Swaminathan 6582527734SSukumar Swaminathan /* CQ entries */ 6682527734SSukumar Swaminathan typedef struct CQE_CmplWQ 6782527734SSukumar Swaminathan { 6882527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 6982527734SSukumar Swaminathan uint16_t RequestTag; /* Word 0 */ 7082527734SSukumar Swaminathan uint8_t Status; 7182527734SSukumar Swaminathan uint8_t hw_status; 7282527734SSukumar Swaminathan 7382527734SSukumar Swaminathan uint32_t CmdSpecific; /* Word 1 */ 7482527734SSukumar Swaminathan uint32_t Parameter; /* Word 2 */ 7582527734SSukumar Swaminathan 7682527734SSukumar Swaminathan uint32_t Valid: 1; /* Word 3 */ 7782527734SSukumar Swaminathan uint32_t Rsvd1: 2; 7882527734SSukumar Swaminathan uint32_t XB: 1; 7982527734SSukumar Swaminathan uint32_t PV: 1; 8082527734SSukumar Swaminathan uint32_t Priority: 3; 8182527734SSukumar Swaminathan uint32_t Code: 8; 8282527734SSukumar Swaminathan uint32_t Rsvd2: 16; 8382527734SSukumar Swaminathan #endif 8482527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 8582527734SSukumar Swaminathan uint8_t hw_status; 8682527734SSukumar Swaminathan uint8_t Status; 8782527734SSukumar Swaminathan uint16_t RequestTag; /* Word 0 */ 8882527734SSukumar Swaminathan 8982527734SSukumar Swaminathan uint32_t CmdSpecific; /* Word 1 */ 9082527734SSukumar Swaminathan uint32_t Parameter; /* Word 2 */ 9182527734SSukumar Swaminathan 9282527734SSukumar Swaminathan uint32_t Rsvd2: 16; 9382527734SSukumar Swaminathan uint32_t Code: 8; 9482527734SSukumar Swaminathan uint32_t Priority: 3; 9582527734SSukumar Swaminathan uint32_t PV: 1; 9682527734SSukumar Swaminathan uint32_t XB: 1; 9782527734SSukumar Swaminathan uint32_t Rsvd1: 2; 9882527734SSukumar Swaminathan uint32_t Valid: 1; /* Word 3 */ 9982527734SSukumar Swaminathan #endif 10082527734SSukumar Swaminathan } CQE_CmplWQ_t; 10182527734SSukumar Swaminathan 10282527734SSukumar Swaminathan typedef struct CQE_RelWQ 10382527734SSukumar Swaminathan { 10482527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 10582527734SSukumar Swaminathan uint32_t Reserved1; /* Word 0 */ 10682527734SSukumar Swaminathan uint32_t Reserved2; /* Word 1 */ 10782527734SSukumar Swaminathan 10882527734SSukumar Swaminathan uint16_t WQid; /* Word 2 */ 10982527734SSukumar Swaminathan uint16_t WQindex; 11082527734SSukumar Swaminathan 11182527734SSukumar Swaminathan uint32_t Valid: 1; /* Word 3 */ 11282527734SSukumar Swaminathan uint32_t Rsvd1: 7; 11382527734SSukumar Swaminathan uint32_t Code: 8; 11482527734SSukumar Swaminathan uint32_t Rsvd2: 16; 11582527734SSukumar Swaminathan #endif 11682527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 11782527734SSukumar Swaminathan uint32_t Reserved1; /* Word 0 */ 11882527734SSukumar Swaminathan uint32_t Reserved2; /* Word 1 */ 11982527734SSukumar Swaminathan 12082527734SSukumar Swaminathan uint16_t WQindex; 12182527734SSukumar Swaminathan uint16_t WQid; /* Word 2 */ 12282527734SSukumar Swaminathan 12382527734SSukumar Swaminathan uint32_t Rsvd2: 16; 12482527734SSukumar Swaminathan uint32_t Code: 8; 12582527734SSukumar Swaminathan uint32_t Rsvd1: 7; 12682527734SSukumar Swaminathan uint32_t Valid: 1; /* Word 3 */ 12782527734SSukumar Swaminathan #endif 12882527734SSukumar Swaminathan } CQE_RelWQ_t; 12982527734SSukumar Swaminathan 13082527734SSukumar Swaminathan typedef struct CQE_UnsolRcv 13182527734SSukumar Swaminathan { 13282527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 13382527734SSukumar Swaminathan uint16_t RQindex; /* Word 0 */ 13482527734SSukumar Swaminathan uint8_t Status; 13582527734SSukumar Swaminathan uint8_t Rsvd1; 13682527734SSukumar Swaminathan 13782527734SSukumar Swaminathan uint32_t Rsvd2; /* Word 1 */ 13882527734SSukumar Swaminathan 13982527734SSukumar Swaminathan uint32_t data_size: 16; /* Word 2 */ 14082527734SSukumar Swaminathan uint32_t RQid: 10; 14182527734SSukumar Swaminathan uint32_t FCFId: 6; 14282527734SSukumar Swaminathan 14382527734SSukumar Swaminathan uint32_t Valid: 1; /* Word 3 */ 144*8f23e9faSHans Rosenfeld uint32_t Rsvd3: 1; 14582527734SSukumar Swaminathan uint32_t hdr_size: 6; 14682527734SSukumar Swaminathan uint32_t Code: 8; 14782527734SSukumar Swaminathan uint32_t eof: 8; 14882527734SSukumar Swaminathan uint32_t sof: 8; 14982527734SSukumar Swaminathan #endif 15082527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 15182527734SSukumar Swaminathan uint8_t Rsvd1; 15282527734SSukumar Swaminathan uint8_t Status; 15382527734SSukumar Swaminathan uint16_t RQindex; /* Word 0 */ 15482527734SSukumar Swaminathan 15582527734SSukumar Swaminathan uint32_t Rsvd2; /* Word 1 */ 15682527734SSukumar Swaminathan 15782527734SSukumar Swaminathan uint32_t FCFId: 6; 15882527734SSukumar Swaminathan uint32_t RQid: 10; 15982527734SSukumar Swaminathan uint32_t data_size: 16; /* Word 2 */ 16082527734SSukumar Swaminathan 16182527734SSukumar Swaminathan uint32_t sof: 8; 16282527734SSukumar Swaminathan uint32_t eof: 8; 16382527734SSukumar Swaminathan uint32_t Code: 8; 16482527734SSukumar Swaminathan uint32_t hdr_size: 6; 165*8f23e9faSHans Rosenfeld uint32_t Rsvd3: 1; 16682527734SSukumar Swaminathan uint32_t Valid: 1; /* Word 3 */ 16782527734SSukumar Swaminathan #endif 16882527734SSukumar Swaminathan } CQE_UnsolRcv_t; 16982527734SSukumar Swaminathan 170*8f23e9faSHans Rosenfeld 171*8f23e9faSHans Rosenfeld typedef struct CQE_UnsolRcvV1 172*8f23e9faSHans Rosenfeld { 173*8f23e9faSHans Rosenfeld #ifdef EMLXS_BIG_ENDIAN 174*8f23e9faSHans Rosenfeld uint16_t RQindex; /* Word 0 */ 175*8f23e9faSHans Rosenfeld uint8_t Status; 176*8f23e9faSHans Rosenfeld uint8_t Rsvd1; 177*8f23e9faSHans Rosenfeld 178*8f23e9faSHans Rosenfeld uint32_t Rsvd2: 26; /* Word 1 */ 179*8f23e9faSHans Rosenfeld uint32_t FCFId: 6; 180*8f23e9faSHans Rosenfeld 181*8f23e9faSHans Rosenfeld uint16_t data_size; /* Word 2 */ 182*8f23e9faSHans Rosenfeld uint16_t RQid; 183*8f23e9faSHans Rosenfeld 184*8f23e9faSHans Rosenfeld uint32_t Valid: 1; /* Word 3 */ 185*8f23e9faSHans Rosenfeld uint32_t Rsvd3: 1; 186*8f23e9faSHans Rosenfeld uint32_t hdr_size: 6; 187*8f23e9faSHans Rosenfeld uint32_t Code: 8; 188*8f23e9faSHans Rosenfeld uint32_t eof: 8; 189*8f23e9faSHans Rosenfeld uint32_t sof: 8; 190*8f23e9faSHans Rosenfeld #endif 191*8f23e9faSHans Rosenfeld #ifdef EMLXS_LITTLE_ENDIAN 192*8f23e9faSHans Rosenfeld uint8_t Rsvd1; 193*8f23e9faSHans Rosenfeld uint8_t Status; 194*8f23e9faSHans Rosenfeld uint16_t RQindex; /* Word 0 */ 195*8f23e9faSHans Rosenfeld 196*8f23e9faSHans Rosenfeld uint32_t FCFId: 6; 197*8f23e9faSHans Rosenfeld uint32_t Rsvd2: 26; /* Word 1 */ 198*8f23e9faSHans Rosenfeld 199*8f23e9faSHans Rosenfeld uint16_t RQid; 200*8f23e9faSHans Rosenfeld uint16_t data_size; /* Word 2 */ 201*8f23e9faSHans Rosenfeld 202*8f23e9faSHans Rosenfeld uint32_t sof: 8; 203*8f23e9faSHans Rosenfeld uint32_t eof: 8; 204*8f23e9faSHans Rosenfeld uint32_t Code: 8; 205*8f23e9faSHans Rosenfeld uint32_t hdr_size: 6; 206*8f23e9faSHans Rosenfeld uint32_t Rsvd3: 1; 207*8f23e9faSHans Rosenfeld uint32_t Valid: 1; /* Word 3 */ 208*8f23e9faSHans Rosenfeld #endif 209*8f23e9faSHans Rosenfeld } CQE_UnsolRcvV1_t; 210*8f23e9faSHans Rosenfeld 21182527734SSukumar Swaminathan /* Status defines */ 21282527734SSukumar Swaminathan #define RQ_STATUS_SUCCESS 0x10 21382527734SSukumar Swaminathan #define RQ_STATUS_BUFLEN_EXCEEDED 0x11 21482527734SSukumar Swaminathan #define RQ_STATUS_NEED_BUFFER 0x12 21582527734SSukumar Swaminathan #define RQ_STATUS_FRAME_DISCARDED 0x13 21682527734SSukumar Swaminathan 21782527734SSukumar Swaminathan 21882527734SSukumar Swaminathan typedef struct CQE_XRI_Abort 21982527734SSukumar Swaminathan { 22082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 22182527734SSukumar Swaminathan uint16_t Rsvd1; /* Word 0 */ 22282527734SSukumar Swaminathan uint8_t Status; 22382527734SSukumar Swaminathan uint8_t Rsvd2; 22482527734SSukumar Swaminathan 22582527734SSukumar Swaminathan uint32_t rjtStatus; /* Word 1 */ 22682527734SSukumar Swaminathan 22782527734SSukumar Swaminathan uint16_t RemoteXID; /* Word 2 */ 22882527734SSukumar Swaminathan uint16_t XRI; 22982527734SSukumar Swaminathan 23082527734SSukumar Swaminathan uint32_t Valid: 1; /* Word 3 */ 23182527734SSukumar Swaminathan uint32_t IA: 1; 23282527734SSukumar Swaminathan uint32_t BR: 1; 23382527734SSukumar Swaminathan uint32_t EO: 1; 23482527734SSukumar Swaminathan uint32_t Rsvd3: 4; 23582527734SSukumar Swaminathan uint32_t Code: 8; 23682527734SSukumar Swaminathan uint32_t Rsvd4: 16; 23782527734SSukumar Swaminathan #endif 23882527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 23982527734SSukumar Swaminathan uint8_t Rsvd2; 24082527734SSukumar Swaminathan uint8_t Status; 24182527734SSukumar Swaminathan uint16_t Rsvd1; /* Word 0 */ 24282527734SSukumar Swaminathan 24382527734SSukumar Swaminathan uint32_t rjtStatus; /* Word 1 */ 24482527734SSukumar Swaminathan 24582527734SSukumar Swaminathan uint16_t XRI; 24682527734SSukumar Swaminathan uint16_t RemoteXID; /* Word 2 */ 24782527734SSukumar Swaminathan 24882527734SSukumar Swaminathan uint32_t Rsvd4: 16; 24982527734SSukumar Swaminathan uint32_t Code: 8; 25082527734SSukumar Swaminathan uint32_t Rsvd3: 4; 25182527734SSukumar Swaminathan uint32_t EO: 1; 25282527734SSukumar Swaminathan uint32_t BR: 1; 25382527734SSukumar Swaminathan uint32_t IA: 1; 25482527734SSukumar Swaminathan uint32_t Valid: 1; /* Word 3 */ 25582527734SSukumar Swaminathan #endif 25682527734SSukumar Swaminathan } CQE_XRI_Abort_t; 25782527734SSukumar Swaminathan 25882527734SSukumar Swaminathan 25982527734SSukumar Swaminathan 26082527734SSukumar Swaminathan #define CQE_VALID 0x80000000 /* Mask for CQE valid */ 26182527734SSukumar Swaminathan 26282527734SSukumar Swaminathan /* Defines for CQE Codes */ 26382527734SSukumar Swaminathan #define CQE_TYPE_WQ_COMPLETION 1 26482527734SSukumar Swaminathan #define CQE_TYPE_RELEASE_WQE 2 26582527734SSukumar Swaminathan #define CQE_TYPE_UNSOL_RCV 4 26682527734SSukumar Swaminathan #define CQE_TYPE_XRI_ABORTED 5 267*8f23e9faSHans Rosenfeld #define CQE_TYPE_UNSOL_RCV_V1 9 26882527734SSukumar Swaminathan 26982527734SSukumar Swaminathan 27082527734SSukumar Swaminathan typedef struct CQE_ASYNC_FCOE 27182527734SSukumar Swaminathan { 27282527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 27382527734SSukumar Swaminathan uint32_t ref_index; /* Word 0 */ 27482527734SSukumar Swaminathan 27582527734SSukumar Swaminathan uint16_t evt_type; /* Word 1 */ 27682527734SSukumar Swaminathan uint16_t fcf_count; 27782527734SSukumar Swaminathan 27882527734SSukumar Swaminathan uint32_t event_tag; /* Word 2 */ 27982527734SSukumar Swaminathan #endif 28082527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 28182527734SSukumar Swaminathan uint32_t ref_index; /* Word 0 */ 28282527734SSukumar Swaminathan 28382527734SSukumar Swaminathan uint16_t fcf_count; 28482527734SSukumar Swaminathan uint16_t evt_type; /* Word 1 */ 28582527734SSukumar Swaminathan 28682527734SSukumar Swaminathan uint32_t event_tag; /* Word 2 */ 28782527734SSukumar Swaminathan #endif 28882527734SSukumar Swaminathan } CQE_ASYNC_FCOE_t; 28982527734SSukumar Swaminathan 290a9800bebSGarrett D'Amore typedef struct CQE_ASYNC_LINK_STATE 29182527734SSukumar Swaminathan { 29282527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 29382527734SSukumar Swaminathan uint8_t port_speed; /* Word 0 */ 29482527734SSukumar Swaminathan uint8_t port_duplex; 29582527734SSukumar Swaminathan uint8_t link_status; 29682527734SSukumar Swaminathan uint8_t phys_port; 29782527734SSukumar Swaminathan 298b3660a96SSukumar Swaminathan uint16_t qos_link_speed; /* Word 1 */ 299b3660a96SSukumar Swaminathan uint8_t Rsvd1; 300b3660a96SSukumar Swaminathan uint8_t port_fault; 30182527734SSukumar Swaminathan 30282527734SSukumar Swaminathan uint32_t event_tag; /* Word 2 */ 30382527734SSukumar Swaminathan #endif 30482527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 30582527734SSukumar Swaminathan uint8_t phys_port; 30682527734SSukumar Swaminathan uint8_t link_status; 30782527734SSukumar Swaminathan uint8_t port_duplex; 30882527734SSukumar Swaminathan uint8_t port_speed; /* Word 0 */ 30982527734SSukumar Swaminathan 310b3660a96SSukumar Swaminathan uint8_t port_fault; /* Word 1 */ 311b3660a96SSukumar Swaminathan uint8_t Rsvd1; 312b3660a96SSukumar Swaminathan uint16_t qos_link_speed; 31382527734SSukumar Swaminathan 31482527734SSukumar Swaminathan uint32_t event_tag; /* Word 2 */ 315a9800bebSGarrett D'Amore #endif 316a9800bebSGarrett D'Amore } CQE_ASYNC_LINK_STATE_t; 317a9800bebSGarrett D'Amore 318a9800bebSGarrett D'Amore typedef struct CQE_ASYNC_GRP_5_QOS 319a9800bebSGarrett D'Amore { 320a9800bebSGarrett D'Amore #ifdef EMLXS_BIG_ENDIAN 321a9800bebSGarrett D'Amore uint8_t Rsvd2; 322a9800bebSGarrett D'Amore uint8_t Rsvd1; 323a9800bebSGarrett D'Amore uint8_t Rsvd0; 324a9800bebSGarrett D'Amore uint8_t phys_port; /* Word 0 */ 325a9800bebSGarrett D'Amore 326a9800bebSGarrett D'Amore uint16_t qos_link_speed; 327a9800bebSGarrett D'Amore uint8_t Rsvd4; 328a9800bebSGarrett D'Amore uint8_t Rsvd3; /* Word 1 */ 329a9800bebSGarrett D'Amore 330a9800bebSGarrett D'Amore uint32_t event_tag; /* Word 2 */ 331a9800bebSGarrett D'Amore #endif 332a9800bebSGarrett D'Amore #ifdef EMLXS_LITTLE_ENDIAN 333a9800bebSGarrett D'Amore uint8_t phys_port; 334a9800bebSGarrett D'Amore uint8_t Rsvd0; 335a9800bebSGarrett D'Amore uint8_t Rsvd1; 336a9800bebSGarrett D'Amore uint8_t Rsvd2; /* Word 0 */ 337a9800bebSGarrett D'Amore 338a9800bebSGarrett D'Amore uint8_t Rsvd3; 339a9800bebSGarrett D'Amore uint8_t Rsvd4; 340a9800bebSGarrett D'Amore uint16_t qos_link_speed; /* Word 1 */ 341a9800bebSGarrett D'Amore 342a9800bebSGarrett D'Amore uint32_t event_tag; /* Word 2 */ 343a9800bebSGarrett D'Amore #endif 344a9800bebSGarrett D'Amore } CQE_ASYNC_GRP_5_QOS_t; 34582527734SSukumar Swaminathan 346*8f23e9faSHans Rosenfeld 347*8f23e9faSHans Rosenfeld typedef struct CQE_ASYNC_FC_LINK_ATT 348*8f23e9faSHans Rosenfeld { 349*8f23e9faSHans Rosenfeld #ifdef EMLXS_BIG_ENDIAN 350*8f23e9faSHans Rosenfeld uint8_t port_speed; /* Word 0 */ 351*8f23e9faSHans Rosenfeld uint8_t topology; 352*8f23e9faSHans Rosenfeld uint8_t att_type; 353*8f23e9faSHans Rosenfeld uint8_t link_number; 354*8f23e9faSHans Rosenfeld 355*8f23e9faSHans Rosenfeld uint16_t link_speed; /* Word 1 */ 356*8f23e9faSHans Rosenfeld uint8_t shared_link_status; 357*8f23e9faSHans Rosenfeld uint8_t port_fault; 358*8f23e9faSHans Rosenfeld 359*8f23e9faSHans Rosenfeld uint32_t event_tag; /* Word 2 */ 360*8f23e9faSHans Rosenfeld #endif 361*8f23e9faSHans Rosenfeld #ifdef EMLXS_LITTLE_ENDIAN 362*8f23e9faSHans Rosenfeld uint8_t link_number; 363*8f23e9faSHans Rosenfeld uint8_t att_type; 364*8f23e9faSHans Rosenfeld uint8_t topology; 365*8f23e9faSHans Rosenfeld uint8_t port_speed; /* Word 0 */ 366*8f23e9faSHans Rosenfeld 367*8f23e9faSHans Rosenfeld uint8_t port_fault; 368*8f23e9faSHans Rosenfeld uint8_t shared_link_status; 369*8f23e9faSHans Rosenfeld uint16_t link_speed; /* Word 1 */ 370*8f23e9faSHans Rosenfeld 371*8f23e9faSHans Rosenfeld uint32_t event_tag; /* Word 2 */ 372*8f23e9faSHans Rosenfeld #endif 373*8f23e9faSHans Rosenfeld } CQE_ASYNC_FC_LINK_ATT_t; 374*8f23e9faSHans Rosenfeld 375*8f23e9faSHans Rosenfeld typedef struct CQE_ASYNC_PORT 376*8f23e9faSHans Rosenfeld { 377*8f23e9faSHans Rosenfeld uint8_t link_status[4]; 378*8f23e9faSHans Rosenfeld uint32_t data_word2; 379*8f23e9faSHans Rosenfeld uint32_t Rsvd; 380*8f23e9faSHans Rosenfeld } CQE_ASYNC_PORT_t; 381*8f23e9faSHans Rosenfeld 382*8f23e9faSHans Rosenfeld /* topology */ 383*8f23e9faSHans Rosenfeld #define TOPOLOGY_UNKNOWN 0 384*8f23e9faSHans Rosenfeld #define TOPOLOGY_NPORT 1 385*8f23e9faSHans Rosenfeld #define TOPOLOGY_LPORT 2 386*8f23e9faSHans Rosenfeld #define TOPOLOGY_INTERNAL_LB 3 387*8f23e9faSHans Rosenfeld #define TOPOLOGY_SERDES_LB 4 388*8f23e9faSHans Rosenfeld 389*8f23e9faSHans Rosenfeld /* att_type */ 390*8f23e9faSHans Rosenfeld #define ATT_TYPE_LINK_UP 1 391*8f23e9faSHans Rosenfeld #define ATT_TYPE_LINK_DOWN 2 392*8f23e9faSHans Rosenfeld #define ATT_TYPE_NO_HARD_ALPA 3 393*8f23e9faSHans Rosenfeld 394*8f23e9faSHans Rosenfeld /* shared_link_status */ 395*8f23e9faSHans Rosenfeld #define SHARED_STATUS_NONE 0 396*8f23e9faSHans Rosenfeld #define SHARED_STATUS_LD_UNUSABLE 1 397*8f23e9faSHans Rosenfeld #define SHARED_STATUS_LD_TRAN_FAULT 2 398*8f23e9faSHans Rosenfeld #define SHARED_STATUS_LD_NO_SIGNAL 3 399*8f23e9faSHans Rosenfeld #define SHARED_STATUS_LD_MGMT_DISABLED 4 400*8f23e9faSHans Rosenfeld #define SHARED_STATUS_LU_FAILED_P2P 5 401*8f23e9faSHans Rosenfeld #define SHARED_STATUS_LU_FAILED_FLOGI_TMO 6 402*8f23e9faSHans Rosenfeld #define SHARED_STATUS_LU_FAILED_NO_FPORT 7 403*8f23e9faSHans Rosenfeld #define SHARED_STATUS_LU_FAILED_NO_NPIV 8 404*8f23e9faSHans Rosenfeld #define SHARED_STATUS_LU_FAILED_FLOGO 9 405*8f23e9faSHans Rosenfeld #define SHARED_STATUS_LU_LOOPBACK 20 406*8f23e9faSHans Rosenfeld #define SHARED_STATUS_LU_NORMAL 40 407*8f23e9faSHans Rosenfeld 408*8f23e9faSHans Rosenfeld /* port_fault */ 409*8f23e9faSHans Rosenfeld #define PORT_FAULT_NONE 0 410*8f23e9faSHans Rosenfeld #define PORT_FAULT_LOCAL 1 411*8f23e9faSHans Rosenfeld #define PORT_FAULT_REMOTE 2 412*8f23e9faSHans Rosenfeld 413a9800bebSGarrett D'Amore typedef struct CQE_ASYNC 414a9800bebSGarrett D'Amore { 415a9800bebSGarrett D'Amore /* Words 0-2 */ 416a9800bebSGarrett D'Amore union 417a9800bebSGarrett D'Amore { 418a9800bebSGarrett D'Amore CQE_ASYNC_LINK_STATE_t link; 419a9800bebSGarrett D'Amore CQE_ASYNC_FCOE_t fcoe; 420a9800bebSGarrett D'Amore CQE_ASYNC_GRP_5_QOS_t qos; 421*8f23e9faSHans Rosenfeld CQE_ASYNC_FC_LINK_ATT_t fc; 422*8f23e9faSHans Rosenfeld CQE_ASYNC_PORT_t port; 423a9800bebSGarrett D'Amore } un; 424a9800bebSGarrett D'Amore 425a9800bebSGarrett D'Amore #ifdef EMLXS_BIG_ENDIAN 426a9800bebSGarrett D'Amore uint32_t valid: 1; 427a9800bebSGarrett D'Amore uint32_t async_evt: 1; 428a9800bebSGarrett D'Amore uint32_t Rsvd2: 6; 429a9800bebSGarrett D'Amore uint32_t event_type: 8; 430a9800bebSGarrett D'Amore uint32_t event_code: 8; 431a9800bebSGarrett D'Amore uint32_t Rsvd3: 8; /* Word 3 */ 432a9800bebSGarrett D'Amore #endif 433a9800bebSGarrett D'Amore #ifdef EMLXS_LITTLE_ENDIAN 43482527734SSukumar Swaminathan uint32_t Rsvd3: 8; 43582527734SSukumar Swaminathan uint32_t event_code: 8; 43682527734SSukumar Swaminathan uint32_t event_type: 8; 43782527734SSukumar Swaminathan uint32_t Rsvd2: 6; 43882527734SSukumar Swaminathan uint32_t async_evt: 1; 43982527734SSukumar Swaminathan uint32_t valid: 1; /* Word 3 */ 44082527734SSukumar Swaminathan #endif 44182527734SSukumar Swaminathan } CQE_ASYNC_t; 44282527734SSukumar Swaminathan 44382527734SSukumar Swaminathan /* port_speed defines */ 44482527734SSukumar Swaminathan #define PHY_1GHZ_LINK 3 44582527734SSukumar Swaminathan #define PHY_10GHZ_LINK 4 44682527734SSukumar Swaminathan 44782527734SSukumar Swaminathan /* event_code defines */ 448*8f23e9faSHans Rosenfeld #define ASYNC_EVENT_CODE_FCOE_LINK_STATE 0x01 449*8f23e9faSHans Rosenfeld #define ASYNC_EVENT_CODE_FCOE_FIP 0x02 450*8f23e9faSHans Rosenfeld #define ASYNC_EVENT_CODE_DCBX 0x03 451*8f23e9faSHans Rosenfeld #define ASYNC_EVENT_CODE_ISCSI 0x04 452*8f23e9faSHans Rosenfeld #define ASYNC_EVENT_CODE_GRP_5 0x05 453*8f23e9faSHans Rosenfeld #define ASYNC_EVENT_CODE_FC_EVENT 0x10 454*8f23e9faSHans Rosenfeld #define ASYNC_EVENT_CODE_PORT 0x11 455*8f23e9faSHans Rosenfeld #define ASYNC_EVENT_CODE_VF 0x12 456*8f23e9faSHans Rosenfeld #define ASYNC_EVENT_CODE_MR 0x13 457*8f23e9faSHans Rosenfeld 458*8f23e9faSHans Rosenfeld /* FC Event */ 459*8f23e9faSHans Rosenfeld #define ASYNC_EVENT_FC_LINK_ATT 1 460*8f23e9faSHans Rosenfeld #define ASYNC_EVENT_FC_SHARED_LINK_ATT 2 46182527734SSukumar Swaminathan 46282527734SSukumar Swaminathan /* LINK_STATE - link_status defines */ 46382527734SSukumar Swaminathan #define ASYNC_EVENT_PHYS_LINK_DOWN 0 46482527734SSukumar Swaminathan #define ASYNC_EVENT_PHYS_LINK_UP 1 46582527734SSukumar Swaminathan #define ASYNC_EVENT_LOGICAL_LINK_DOWN 2 46682527734SSukumar Swaminathan #define ASYNC_EVENT_LOGICAL_LINK_UP 3 46782527734SSukumar Swaminathan 46882527734SSukumar Swaminathan /* FCOE_FIP - evt_type defines */ 46982527734SSukumar Swaminathan #define ASYNC_EVENT_NEW_FCF_DISC 1 47082527734SSukumar Swaminathan #define ASYNC_EVENT_FCF_TABLE_FULL 2 47182527734SSukumar Swaminathan #define ASYNC_EVENT_FCF_DEAD 3 47282527734SSukumar Swaminathan #define ASYNC_EVENT_VIRT_LINK_CLEAR 4 473a9800bebSGarrett D'Amore #define ASYNC_EVENT_FCF_MODIFIED 5 474a9800bebSGarrett D'Amore 475a9800bebSGarrett D'Amore /* GRP_5 - evt_type defines */ 476a9800bebSGarrett D'Amore #define ASYNC_EVENT_QOS_SPEED 1 47782527734SSukumar Swaminathan 478*8f23e9faSHans Rosenfeld /* PORT - evt_type defines */ 479*8f23e9faSHans Rosenfeld #define ASYNC_EVENT_MISCONFIG_PORT 9 480*8f23e9faSHans Rosenfeld 48182527734SSukumar Swaminathan typedef struct CQE_MBOX 48282527734SSukumar Swaminathan { 48382527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 48482527734SSukumar Swaminathan uint16_t extend_status; /* Word 0 */ 48582527734SSukumar Swaminathan uint16_t cmpl_status; 48682527734SSukumar Swaminathan 48782527734SSukumar Swaminathan uint32_t tag_low; /* Word 1 */ 48882527734SSukumar Swaminathan uint32_t tag_high; /* Word 2 */ 48982527734SSukumar Swaminathan 49082527734SSukumar Swaminathan uint32_t valid: 1; /* Word 3 */ 49182527734SSukumar Swaminathan uint32_t async_evt: 1; 49282527734SSukumar Swaminathan uint32_t hpi: 1; 49382527734SSukumar Swaminathan uint32_t completed: 1; 49482527734SSukumar Swaminathan uint32_t consumed: 1; 49582527734SSukumar Swaminathan uint32_t Rsvd1: 27; 49682527734SSukumar Swaminathan #endif 49782527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 49882527734SSukumar Swaminathan uint16_t cmpl_status; 49982527734SSukumar Swaminathan uint16_t extend_status; /* Word 0 */ 50082527734SSukumar Swaminathan 50182527734SSukumar Swaminathan uint32_t tag_low; /* Word 1 */ 50282527734SSukumar Swaminathan uint32_t tag_high; /* Word 2 */ 50382527734SSukumar Swaminathan 50482527734SSukumar Swaminathan uint32_t Rsvd1: 27; 50582527734SSukumar Swaminathan uint32_t consumed: 1; 50682527734SSukumar Swaminathan uint32_t completed: 1; 50782527734SSukumar Swaminathan uint32_t hpi: 1; 50882527734SSukumar Swaminathan uint32_t async_evt: 1; 50982527734SSukumar Swaminathan uint32_t valid: 1; /* Word 3 */ 51082527734SSukumar Swaminathan #endif 51182527734SSukumar Swaminathan } CQE_MBOX_t; 51282527734SSukumar Swaminathan 51382527734SSukumar Swaminathan typedef union 51482527734SSukumar Swaminathan { 51582527734SSukumar Swaminathan uint32_t word[4]; 51682527734SSukumar Swaminathan 51782527734SSukumar Swaminathan /* Group 1 types */ 51882527734SSukumar Swaminathan CQE_ASYNC_t cqAsyncEntry; 51982527734SSukumar Swaminathan CQE_ASYNC_FCOE_t cqAsyncFCOEEntry; 52082527734SSukumar Swaminathan CQE_MBOX_t cqMboxEntry; 52182527734SSukumar Swaminathan 52282527734SSukumar Swaminathan /* Group 2 types */ 52382527734SSukumar Swaminathan CQE_CmplWQ_t cqCmplEntry; 52482527734SSukumar Swaminathan CQE_RelWQ_t cqRelEntry; 52582527734SSukumar Swaminathan CQE_UnsolRcv_t cqUnsolRcvEntry; 526*8f23e9faSHans Rosenfeld CQE_UnsolRcvV1_t cqUnsolRcvEntryV1; 52782527734SSukumar Swaminathan CQE_XRI_Abort_t cqXRIEntry; 52882527734SSukumar Swaminathan } CQE_u; 52982527734SSukumar Swaminathan 53082527734SSukumar Swaminathan /* RQ entries */ 53182527734SSukumar Swaminathan typedef struct RQE 53282527734SSukumar Swaminathan { 53382527734SSukumar Swaminathan uint32_t AddrHi; 53482527734SSukumar Swaminathan uint32_t AddrLo; 53582527734SSukumar Swaminathan 53682527734SSukumar Swaminathan } RQE_t; 53782527734SSukumar Swaminathan 53882527734SSukumar Swaminathan 53982527734SSukumar Swaminathan /* Definitions for WQEs */ 54082527734SSukumar Swaminathan typedef struct 54182527734SSukumar Swaminathan { 542*8f23e9faSHans Rosenfeld /* Word 0 - 2 */ 54382527734SSukumar Swaminathan ULP_BDE64 Payload; 544*8f23e9faSHans Rosenfeld 545*8f23e9faSHans Rosenfeld /* Word 3 */ 54682527734SSukumar Swaminathan uint32_t PayloadLength; 54782527734SSukumar Swaminathan 54882527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 549*8f23e9faSHans Rosenfeld /* Word 4 */ 55082527734SSukumar Swaminathan uint32_t Rsvd1: 6; 55182527734SSukumar Swaminathan uint32_t VF: 1; 55282527734SSukumar Swaminathan uint32_t SP: 1; 55382527734SSukumar Swaminathan uint32_t LocalId: 24; 55482527734SSukumar Swaminathan 555*8f23e9faSHans Rosenfeld /* Word 5 */ 55682527734SSukumar Swaminathan uint32_t Rsvd2: 8; 55782527734SSukumar Swaminathan uint32_t RemoteId: 24; 55882527734SSukumar Swaminathan #endif 55982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 560*8f23e9faSHans Rosenfeld /* Word 4 */ 56182527734SSukumar Swaminathan uint32_t LocalId: 24; 56282527734SSukumar Swaminathan uint32_t SP: 1; 56382527734SSukumar Swaminathan uint32_t VF: 1; 56482527734SSukumar Swaminathan uint32_t Rsvd1: 6; 56582527734SSukumar Swaminathan 566*8f23e9faSHans Rosenfeld /* Word 5 */ 56782527734SSukumar Swaminathan uint32_t RemoteId: 24; 56882527734SSukumar Swaminathan uint32_t Rsvd2: 8; 56982527734SSukumar Swaminathan #endif 57082527734SSukumar Swaminathan 57182527734SSukumar Swaminathan } ELS_REQ_WQE; 57282527734SSukumar Swaminathan 57382527734SSukumar Swaminathan typedef struct 57482527734SSukumar Swaminathan { 575*8f23e9faSHans Rosenfeld /* Word 0 - 2 */ 57682527734SSukumar Swaminathan ULP_BDE64 Payload; 577*8f23e9faSHans Rosenfeld 578*8f23e9faSHans Rosenfeld /* Word 3 */ 579*8f23e9faSHans Rosenfeld uint32_t PayloadLength; 580*8f23e9faSHans Rosenfeld 581*8f23e9faSHans Rosenfeld /* Word 4 */ 582*8f23e9faSHans Rosenfeld uint32_t Rsvd1; 58382527734SSukumar Swaminathan 58482527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 585*8f23e9faSHans Rosenfeld /* Word 5 */ 58682527734SSukumar Swaminathan uint32_t Rsvd2: 8; 58782527734SSukumar Swaminathan uint32_t RemoteId: 24; 58882527734SSukumar Swaminathan #endif 58982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 590*8f23e9faSHans Rosenfeld /* Word 5 */ 59182527734SSukumar Swaminathan uint32_t RemoteId: 24; 59282527734SSukumar Swaminathan uint32_t Rsvd2: 8; 59382527734SSukumar Swaminathan #endif 59482527734SSukumar Swaminathan 59582527734SSukumar Swaminathan } ELS_RSP_WQE; 59682527734SSukumar Swaminathan 59782527734SSukumar Swaminathan typedef struct 59882527734SSukumar Swaminathan { 599*8f23e9faSHans Rosenfeld /* Word 0 - 2 */ 60082527734SSukumar Swaminathan ULP_BDE64 Payload; 601*8f23e9faSHans Rosenfeld 602*8f23e9faSHans Rosenfeld /* Word 3 */ 60382527734SSukumar Swaminathan uint32_t PayloadLength; 60482527734SSukumar Swaminathan 605*8f23e9faSHans Rosenfeld /* Word 4 */ 60682527734SSukumar Swaminathan uint32_t Parameter; 60782527734SSukumar Swaminathan 60882527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 609*8f23e9faSHans Rosenfeld /* Word 5 */ 61082527734SSukumar Swaminathan uint32_t Rctl: 8; 61182527734SSukumar Swaminathan uint32_t Type: 8; 61282527734SSukumar Swaminathan uint32_t DFctl: 8; 61382527734SSukumar Swaminathan uint32_t Rsvd1: 4; 61482527734SSukumar Swaminathan uint32_t la: 1; 61582527734SSukumar Swaminathan uint32_t Rsvd2: 3; 61682527734SSukumar Swaminathan #endif 61782527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 618*8f23e9faSHans Rosenfeld /* Word 5 */ 61982527734SSukumar Swaminathan uint32_t Rsvd2: 3; 62082527734SSukumar Swaminathan uint32_t la: 1; 62182527734SSukumar Swaminathan uint32_t Rsvd1: 4; 62282527734SSukumar Swaminathan uint32_t DFctl: 8; 62382527734SSukumar Swaminathan uint32_t Type: 8; 62482527734SSukumar Swaminathan uint32_t Rctl: 8; 62582527734SSukumar Swaminathan #endif 62682527734SSukumar Swaminathan 62782527734SSukumar Swaminathan } GEN_REQ_WQE; 62882527734SSukumar Swaminathan 62982527734SSukumar Swaminathan typedef struct 63082527734SSukumar Swaminathan { 631*8f23e9faSHans Rosenfeld /* Word 0 - 2 */ 63282527734SSukumar Swaminathan ULP_BDE64 Payload; 63382527734SSukumar Swaminathan 634*8f23e9faSHans Rosenfeld /* Word 3 */ 635*8f23e9faSHans Rosenfeld uint32_t Rsvd0; 636*8f23e9faSHans Rosenfeld 637*8f23e9faSHans Rosenfeld /* Word 4 */ 63882527734SSukumar Swaminathan uint32_t Parameter; 63982527734SSukumar Swaminathan 64082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 641*8f23e9faSHans Rosenfeld /* Word 5 */ 64282527734SSukumar Swaminathan uint32_t Rctl: 8; 64382527734SSukumar Swaminathan uint32_t Type: 8; 64482527734SSukumar Swaminathan uint32_t DFctl: 8; 64582527734SSukumar Swaminathan uint32_t ls: 1; 646*8f23e9faSHans Rosenfeld uint32_t xo: 1; 647*8f23e9faSHans Rosenfeld uint32_t Rsvd1: 2; 648*8f23e9faSHans Rosenfeld uint32_t ft: 1; 64982527734SSukumar Swaminathan uint32_t si: 1; 65082527734SSukumar Swaminathan uint32_t Rsvd2: 2; 65182527734SSukumar Swaminathan #endif 65282527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 653*8f23e9faSHans Rosenfeld /* Word 5 */ 65482527734SSukumar Swaminathan uint32_t Rsvd2: 2; 65582527734SSukumar Swaminathan uint32_t si: 1; 656*8f23e9faSHans Rosenfeld uint32_t ft: 1; 657*8f23e9faSHans Rosenfeld uint32_t Rsvd1: 2; 658*8f23e9faSHans Rosenfeld uint32_t xo: 1; 65982527734SSukumar Swaminathan uint32_t ls: 1; 66082527734SSukumar Swaminathan uint32_t DFctl: 8; 66182527734SSukumar Swaminathan uint32_t Type: 8; 66282527734SSukumar Swaminathan uint32_t Rctl: 8; 66382527734SSukumar Swaminathan #endif 66482527734SSukumar Swaminathan 66582527734SSukumar Swaminathan } XMIT_SEQ_WQE; 66682527734SSukumar Swaminathan 66782527734SSukumar Swaminathan typedef struct 66882527734SSukumar Swaminathan { 669*8f23e9faSHans Rosenfeld /* Word 0 - 2 */ 670*8f23e9faSHans Rosenfeld ULP_BDE64 Payload; 671*8f23e9faSHans Rosenfeld 672*8f23e9faSHans Rosenfeld /* Word 3 */ 673*8f23e9faSHans Rosenfeld uint32_t PayloadLength; 67482527734SSukumar Swaminathan 675*8f23e9faSHans Rosenfeld /* Word 4 */ 67682527734SSukumar Swaminathan uint32_t TotalTransferCount; 677*8f23e9faSHans Rosenfeld 678*8f23e9faSHans Rosenfeld /* Word 5 */ 67982527734SSukumar Swaminathan uint32_t Rsvd1; 68082527734SSukumar Swaminathan 68182527734SSukumar Swaminathan } FCP_WQE; 68282527734SSukumar Swaminathan 68382527734SSukumar Swaminathan 68482527734SSukumar Swaminathan typedef struct 68582527734SSukumar Swaminathan { 686*8f23e9faSHans Rosenfeld /* Word 0 - 2 */ 68782527734SSukumar Swaminathan uint32_t Rsvd1[3]; 68882527734SSukumar Swaminathan 68982527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 690*8f23e9faSHans Rosenfeld /* Word 3 */ 69182527734SSukumar Swaminathan uint32_t Rsvd2: 16; 69282527734SSukumar Swaminathan uint32_t Criteria: 8; 69382527734SSukumar Swaminathan uint32_t Rsvd3: 7; 69482527734SSukumar Swaminathan uint32_t IA: 1; 69582527734SSukumar Swaminathan #endif 69682527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 697*8f23e9faSHans Rosenfeld /* Word 3 */ 69882527734SSukumar Swaminathan uint32_t IA: 1; 69982527734SSukumar Swaminathan uint32_t Rsvd3: 7; 70082527734SSukumar Swaminathan uint32_t Criteria: 8; 70182527734SSukumar Swaminathan uint32_t Rsvd2: 16; 70282527734SSukumar Swaminathan #endif 70382527734SSukumar Swaminathan 704*8f23e9faSHans Rosenfeld /* Word 4 - 5 */ 70582527734SSukumar Swaminathan uint32_t Rsvd4[2]; 70682527734SSukumar Swaminathan 70782527734SSukumar Swaminathan } ABORT_WQE; 70882527734SSukumar Swaminathan 70982527734SSukumar Swaminathan #define ABORT_XRI_TAG 1 /* Abort tag is a XRITag */ 71082527734SSukumar Swaminathan #define ABORT_ABT_TAG 2 /* Abort tag is a AbortTag */ 71182527734SSukumar Swaminathan #define ABORT_REQ_TAG 3 /* Abort tag is a RequestTag */ 71282527734SSukumar Swaminathan 71382527734SSukumar Swaminathan typedef struct 71482527734SSukumar Swaminathan { 71582527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 716*8f23e9faSHans Rosenfeld /* Word 0 */ 71782527734SSukumar Swaminathan uint8_t Payload0; 71882527734SSukumar Swaminathan uint8_t Payload1; 71982527734SSukumar Swaminathan uint8_t Payload2; 72082527734SSukumar Swaminathan uint8_t Payload3; 72182527734SSukumar Swaminathan 722*8f23e9faSHans Rosenfeld /* Word 1 */ 72382527734SSukumar Swaminathan uint32_t OXId: 16; 72482527734SSukumar Swaminathan uint32_t RXId: 16; 72582527734SSukumar Swaminathan 726*8f23e9faSHans Rosenfeld /* Word 2 */ 72782527734SSukumar Swaminathan uint32_t SeqCntLow: 16; 72882527734SSukumar Swaminathan uint32_t SeqCntHigh: 16; 729*8f23e9faSHans Rosenfeld 730*8f23e9faSHans Rosenfeld /* Word 3 */ 731*8f23e9faSHans Rosenfeld uint32_t Rsvd1; 732*8f23e9faSHans Rosenfeld 733*8f23e9faSHans Rosenfeld /* Word 4 */ 734*8f23e9faSHans Rosenfeld uint32_t Rsvd2: 8; 735*8f23e9faSHans Rosenfeld uint32_t LocalId: 24; 736*8f23e9faSHans Rosenfeld 737*8f23e9faSHans Rosenfeld /* Word 5 */ 738*8f23e9faSHans Rosenfeld uint32_t XO: 1; 739*8f23e9faSHans Rosenfeld uint32_t AR: 1; 740*8f23e9faSHans Rosenfeld uint32_t Rsvd3: 6; 741*8f23e9faSHans Rosenfeld uint32_t RemoteId: 24; 74282527734SSukumar Swaminathan #endif 74382527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 744*8f23e9faSHans Rosenfeld /* Word 0 */ 74582527734SSukumar Swaminathan uint8_t Payload3; 74682527734SSukumar Swaminathan uint8_t Payload2; 74782527734SSukumar Swaminathan uint8_t Payload1; 74882527734SSukumar Swaminathan uint8_t Payload0; 74982527734SSukumar Swaminathan 750*8f23e9faSHans Rosenfeld /* Word 1 */ 75182527734SSukumar Swaminathan uint32_t RXId: 16; 75282527734SSukumar Swaminathan uint32_t OXId: 16; 75382527734SSukumar Swaminathan 754*8f23e9faSHans Rosenfeld /* Word 2 */ 75582527734SSukumar Swaminathan uint32_t SeqCntHigh: 16; 75682527734SSukumar Swaminathan uint32_t SeqCntLow: 16; 757*8f23e9faSHans Rosenfeld 758*8f23e9faSHans Rosenfeld /* Word 3 */ 759*8f23e9faSHans Rosenfeld uint32_t Rsvd1; 760*8f23e9faSHans Rosenfeld 761*8f23e9faSHans Rosenfeld /* Word 4 */ 762*8f23e9faSHans Rosenfeld uint32_t LocalId: 24; 763*8f23e9faSHans Rosenfeld uint32_t Rsvd2: 8; 764*8f23e9faSHans Rosenfeld 765*8f23e9faSHans Rosenfeld /* Word 5 */ 76682527734SSukumar Swaminathan uint32_t RemoteId: 24; 767*8f23e9faSHans Rosenfeld uint32_t Rsvd3: 6; 76882527734SSukumar Swaminathan uint32_t AR: 1; 76982527734SSukumar Swaminathan uint32_t XO: 1; 77082527734SSukumar Swaminathan #endif 77182527734SSukumar Swaminathan 77282527734SSukumar Swaminathan } BLS_WQE; 77382527734SSukumar Swaminathan 77482527734SSukumar Swaminathan 77582527734SSukumar Swaminathan typedef struct 77682527734SSukumar Swaminathan { 777*8f23e9faSHans Rosenfeld /* Word 0 - 4 */ 77882527734SSukumar Swaminathan uint32_t Rsvd1[5]; 77982527734SSukumar Swaminathan 78082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 781*8f23e9faSHans Rosenfeld /* Word 5 */ 78282527734SSukumar Swaminathan uint32_t XO: 1; 783*8f23e9faSHans Rosenfeld uint32_t Rsvd2: 31; 78482527734SSukumar Swaminathan #endif 78582527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 786*8f23e9faSHans Rosenfeld /* Word 5 */ 787*8f23e9faSHans Rosenfeld uint32_t Rsvd2: 31; 78882527734SSukumar Swaminathan uint32_t XO: 1; 78982527734SSukumar Swaminathan #endif 79082527734SSukumar Swaminathan 79182527734SSukumar Swaminathan } CREATE_XRI_WQE; 79282527734SSukumar Swaminathan 79382527734SSukumar Swaminathan typedef struct emlxs_wqe 79482527734SSukumar Swaminathan { 79582527734SSukumar Swaminathan /* Words 0-5 */ 79682527734SSukumar Swaminathan union 79782527734SSukumar Swaminathan { 79882527734SSukumar Swaminathan uint32_t word[6]; /* Words 0-5: cmd specific */ 79982527734SSukumar Swaminathan ELS_REQ_WQE ElsCmd; /* ELS command overlay */ 80082527734SSukumar Swaminathan GEN_REQ_WQE GenReq; /* CT command overlay */ 80182527734SSukumar Swaminathan FCP_WQE FcpCmd; /* FCP command overlay */ 80282527734SSukumar Swaminathan ELS_RSP_WQE ElsRsp; /* ELS response overlay */ 80382527734SSukumar Swaminathan ABORT_WQE Abort; /* Abort overlay */ 80482527734SSukumar Swaminathan BLS_WQE BlsRsp; /* BLS overlay */ 80582527734SSukumar Swaminathan CREATE_XRI_WQE CreateXri; /* Create XRI */ 80682527734SSukumar Swaminathan XMIT_SEQ_WQE XmitSeq; /* Xmit Sequence */ 80782527734SSukumar Swaminathan } un; 80882527734SSukumar Swaminathan 80982527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 81082527734SSukumar Swaminathan /* Word 6 */ 81182527734SSukumar Swaminathan uint16_t ContextTag; /* Context Tag */ 81282527734SSukumar Swaminathan uint16_t XRITag; /* XRItag */ 81382527734SSukumar Swaminathan /* Word 7 */ 81482527734SSukumar Swaminathan uint32_t Timer: 8; /* TOV */ 815*8f23e9faSHans Rosenfeld uint32_t Rsvd1: 1; 81682527734SSukumar Swaminathan uint32_t ERP: 1; /* ERP */ 81782527734SSukumar Swaminathan uint32_t PU: 2; /* PU */ 818*8f23e9faSHans Rosenfeld uint32_t AR: 1; /* Auto Response */ 81982527734SSukumar Swaminathan uint32_t Class: 3; /* COS */ 82082527734SSukumar Swaminathan uint32_t Command: 8; /* Command Code */ 821*8f23e9faSHans Rosenfeld uint32_t Rsvd0: 1; 822*8f23e9faSHans Rosenfeld uint32_t BsType: 3; /* DIF Block Size type */ 82382527734SSukumar Swaminathan uint32_t ContextType: 2; /* Context Type */ 824*8f23e9faSHans Rosenfeld uint32_t DIF: 2; 82582527734SSukumar Swaminathan /* Word 8 */ 82682527734SSukumar Swaminathan uint32_t AbortTag; /* Abort Tag */ 82782527734SSukumar Swaminathan /* Word 9 */ 82882527734SSukumar Swaminathan uint16_t OXId; /* OXId on xmitted rsp */ 82982527734SSukumar Swaminathan uint16_t RequestTag; /* Request Tag */ 83082527734SSukumar Swaminathan /* Word 10 */ 83182527734SSukumar Swaminathan uint32_t CCP: 8; /* CCP */ 83282527734SSukumar Swaminathan uint32_t CCPE: 1; /* CCPEnabled */ 833*8f23e9faSHans Rosenfeld uint32_t CMD: 1; 83482527734SSukumar Swaminathan uint32_t XC: 1; /* Exchange Create */ 83582527734SSukumar Swaminathan uint32_t Rsvd5: 1; 83682527734SSukumar Swaminathan uint32_t PV: 1; /* PRIValid */ 83782527734SSukumar Swaminathan uint32_t PRI: 3; /* PRI */ 838*8f23e9faSHans Rosenfeld /* The following 16 bits may be */ 839*8f23e9faSHans Rosenfeld /* overwritten by PHWQ */ 840*8f23e9faSHans Rosenfeld uint32_t WQES: 1; /* WQE specify XBL */ 841*8f23e9faSHans Rosenfeld uint32_t DBDE: 1; /* Data type for BDE 0 */ 842*8f23e9faSHans Rosenfeld uint32_t IOd: 1; /* IO direction */ 843*8f23e9faSHans Rosenfeld uint32_t Rsvd4: 1; 844*8f23e9faSHans Rosenfeld uint32_t XBL: 1; /* Explicit Buffer List */ 845*8f23e9faSHans Rosenfeld uint32_t Rsvd3: 1; 846*8f23e9faSHans Rosenfeld uint32_t QOSd: 1; /* QOS disable */ 847*8f23e9faSHans Rosenfeld uint32_t LenLoc: 2; /* Length Location */ 848*8f23e9faSHans Rosenfeld uint32_t Rsvd2: 3; 849*8f23e9faSHans Rosenfeld uint32_t EBDEcnt: 4; /* Extended BDE cnt */ 85082527734SSukumar Swaminathan /* Word 11 */ 851*8f23e9faSHans Rosenfeld uint32_t CQId: 16; /* CompletionQueueID */ 85282527734SSukumar Swaminathan uint32_t Rsvd8: 8; 85382527734SSukumar Swaminathan uint32_t WQEC: 1; /* Request WQE consumed CQE */ 854*8f23e9faSHans Rosenfeld uint32_t ELSId: 3; 85582527734SSukumar Swaminathan uint32_t CmdType: 4; /* Command Type */ 85682527734SSukumar Swaminathan #endif 85782527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 85882527734SSukumar Swaminathan /* Word 6 */ 85982527734SSukumar Swaminathan uint16_t XRITag; /* XRItag */ 86082527734SSukumar Swaminathan uint16_t ContextTag; /* Context Tag */ 86182527734SSukumar Swaminathan /* Word 7 */ 862*8f23e9faSHans Rosenfeld uint32_t DIF: 2; 86382527734SSukumar Swaminathan uint32_t ContextType: 2; /* Context Type */ 864*8f23e9faSHans Rosenfeld uint32_t BsType: 3; /* DIF Block Size type */ 865*8f23e9faSHans Rosenfeld uint32_t Rsvd0: 1; 86682527734SSukumar Swaminathan uint32_t Command: 8; /* Command Code */ 86782527734SSukumar Swaminathan uint32_t Class: 3; /* COS */ 868*8f23e9faSHans Rosenfeld uint32_t AR: 1; /* Auto Response */ 86982527734SSukumar Swaminathan uint32_t PU: 2; /* PU */ 87082527734SSukumar Swaminathan uint32_t ERP: 1; /* ERP */ 871*8f23e9faSHans Rosenfeld uint32_t Rsvd1: 1; 87282527734SSukumar Swaminathan uint32_t Timer: 8; /* TOV */ 87382527734SSukumar Swaminathan /* Word 8 */ 87482527734SSukumar Swaminathan uint32_t AbortTag; /* Abort Tag */ 87582527734SSukumar Swaminathan /* Word 9 */ 87682527734SSukumar Swaminathan uint16_t RequestTag; /* Request Tag */ 87782527734SSukumar Swaminathan uint16_t OXId; /* OXId on xmitted rsp */ 87882527734SSukumar Swaminathan /* Word 10 */ 879*8f23e9faSHans Rosenfeld /* The following 16 bits may be */ 880*8f23e9faSHans Rosenfeld /* overwritten by PHWQ */ 881*8f23e9faSHans Rosenfeld uint32_t EBDEcnt: 4; /* Extended BDE cnt */ 882*8f23e9faSHans Rosenfeld uint32_t Rsvd2: 3; 883*8f23e9faSHans Rosenfeld uint32_t LenLoc: 2; /* Length Location */ 884*8f23e9faSHans Rosenfeld uint32_t QOSd: 1; /* QOS disable */ 885*8f23e9faSHans Rosenfeld uint32_t Rsvd3: 1; 886*8f23e9faSHans Rosenfeld uint32_t XBL: 1; /* Explicit Buffer List */ 887*8f23e9faSHans Rosenfeld uint32_t Rsvd4: 1; 888*8f23e9faSHans Rosenfeld uint32_t IOd: 1; /* IO direction */ 889*8f23e9faSHans Rosenfeld uint32_t DBDE: 1; /* Data type for BDE 0 */ 890*8f23e9faSHans Rosenfeld uint32_t WQES: 1; /* WQE specify XBL */ 89182527734SSukumar Swaminathan uint32_t PRI: 3; /* PRI */ 89282527734SSukumar Swaminathan uint32_t PV: 1; /* PRIValid */ 89382527734SSukumar Swaminathan uint32_t Rsvd5: 1; 89482527734SSukumar Swaminathan uint32_t XC: 1; /* Exchange Create */ 895*8f23e9faSHans Rosenfeld uint32_t CMD: 1; 89682527734SSukumar Swaminathan uint32_t CCPE: 1; /* CCPEnabled */ 89782527734SSukumar Swaminathan uint32_t CCP: 8; /* CCP */ 89882527734SSukumar Swaminathan /* Word 11 */ 89982527734SSukumar Swaminathan uint32_t CmdType: 4; /* Command Type */ 900*8f23e9faSHans Rosenfeld uint32_t ELSId: 3; 90182527734SSukumar Swaminathan uint32_t WQEC: 1; /* Request WQE consumed CQE */ 90282527734SSukumar Swaminathan uint32_t Rsvd8: 8; 903*8f23e9faSHans Rosenfeld uint32_t CQId: 16; /* CompletionQueueID */ 90482527734SSukumar Swaminathan #endif 90582527734SSukumar Swaminathan 906*8f23e9faSHans Rosenfeld /* Words 12 */ 907*8f23e9faSHans Rosenfeld uint32_t CmdSpecific; /* Command specific information */ 908*8f23e9faSHans Rosenfeld 909*8f23e9faSHans Rosenfeld /* Words 13-15 */ 910*8f23e9faSHans Rosenfeld ULP_BDE64 FirstData; 91182527734SSukumar Swaminathan } emlxs_wqe_t; 91282527734SSukumar Swaminathan 913*8f23e9faSHans Rosenfeld /* Used if PHWQ is enabled */ 914*8f23e9faSHans Rosenfeld #ifdef EMLXS_BIG_ENDIAN 915*8f23e9faSHans Rosenfeld #define WQE_PHWQ_WQID(wqe, qid) *(((uint16_t *)(wqe)) + 21) = \ 916*8f23e9faSHans Rosenfeld ((qid << 1) & 0xfffe); 917*8f23e9faSHans Rosenfeld #endif 918*8f23e9faSHans Rosenfeld #ifdef EMLXS_LITTLE_ENDIAN 919*8f23e9faSHans Rosenfeld #define WQE_PHWQ_WQID(wqe, qid) *(((uint16_t *)(wqe)) + 20) = \ 920*8f23e9faSHans Rosenfeld ((qid << 1) & 0xfffe); 921*8f23e9faSHans Rosenfeld #endif 922*8f23e9faSHans Rosenfeld 92382527734SSukumar Swaminathan /* Defines for ContextType */ 92482527734SSukumar Swaminathan #define WQE_RPI_CONTEXT 0 92582527734SSukumar Swaminathan #define WQE_VPI_CONTEXT 1 92682527734SSukumar Swaminathan #define WQE_VFI_CONTEXT 2 92782527734SSukumar Swaminathan #define WQE_FCFI_CONTEXT 3 92882527734SSukumar Swaminathan 92982527734SSukumar Swaminathan /* Defines for CmdType */ 93082527734SSukumar Swaminathan #define WQE_TYPE_FCP_DATA_IN 0x00 93182527734SSukumar Swaminathan #define WQE_TYPE_FCP_DATA_OUT 0x01 932*8f23e9faSHans Rosenfeld #define WQE_TYPE_TRECEIVE 0x02 933*8f23e9faSHans Rosenfeld #define WQE_TYPE_TRSP 0x03 934*8f23e9faSHans Rosenfeld #define WQE_TYPE_SRR_RSP 0x06 935*8f23e9faSHans Rosenfeld #define WQE_TYPE_TSEND 0x07 93682527734SSukumar Swaminathan #define WQE_TYPE_GEN 0x08 93782527734SSukumar Swaminathan #define WQE_TYPE_ABORT 0x08 938*8f23e9faSHans Rosenfeld #define WQE_TYPE_ELS 0x0C 93982527734SSukumar Swaminathan #define WQE_TYPE_MASK_FIP 0x01 94082527734SSukumar Swaminathan 94182527734SSukumar Swaminathan /* Defines for ELSId */ 942*8f23e9faSHans Rosenfeld #define WQE_ELSID_PLOGI 0x04 94382527734SSukumar Swaminathan #define WQE_ELSID_FLOGI 0x03 94482527734SSukumar Swaminathan #define WQE_ELSID_FDISC 0x02 94582527734SSukumar Swaminathan #define WQE_ELSID_LOGO 0x01 946*8f23e9faSHans Rosenfeld #define WQE_ELSID_CMD 0x00 94782527734SSukumar Swaminathan 94882527734SSukumar Swaminathan /* RQB */ 94982527734SSukumar Swaminathan #define RQB_HEADER_SIZE 32 95082527734SSukumar Swaminathan #define RQB_DATA_SIZE 2048 95182527734SSukumar Swaminathan #define RQB_COUNT 256 95282527734SSukumar Swaminathan 95382527734SSukumar Swaminathan #define EMLXS_NUM_WQ_PAGES 4 954*8f23e9faSHans Rosenfeld #define WQE_SIZE 64 955*8f23e9faSHans Rosenfeld 956*8f23e9faSHans Rosenfeld #define EMLXS_NUM_CQ_PAGES_V2 4 957*8f23e9faSHans Rosenfeld #define CQE_SIZE 16 95882527734SSukumar Swaminathan 95982527734SSukumar Swaminathan #define EQ_DEPTH 1024 96082527734SSukumar Swaminathan #define CQ_DEPTH 256 961*8f23e9faSHans Rosenfeld #define CQ_DEPTH_V2 ((4096/CQE_SIZE) * EMLXS_NUM_CQ_PAGES_V2) /* 1024 */ 962*8f23e9faSHans Rosenfeld #define WQ_DEPTH ((4096/WQE_SIZE) * EMLXS_NUM_WQ_PAGES) /* 256 */ 96382527734SSukumar Swaminathan #define MQ_DEPTH 16 96482527734SSukumar Swaminathan #define RQ_DEPTH 512 /* Multiple of RQB_COUNT */ 96582527734SSukumar Swaminathan #define RQ_DEPTH_EXPONENT 9 96682527734SSukumar Swaminathan 967*8f23e9faSHans Rosenfeld #define EMLXS_MAX_WQS_PER_EQ 4 968*8f23e9faSHans Rosenfeld 96982527734SSukumar Swaminathan 97082527734SSukumar Swaminathan /* Principal doorbell register layouts */ 97182527734SSukumar Swaminathan typedef struct emlxs_rqdb 97282527734SSukumar Swaminathan { 97382527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 97482527734SSukumar Swaminathan uint32_t Rsvd2:2; 97582527734SSukumar Swaminathan uint32_t NumPosted:14; /* Number of entries posted */ 97682527734SSukumar Swaminathan uint32_t Rsvd1:6; 97782527734SSukumar Swaminathan uint32_t Qid:10; /* RQ id for posted RQE */ 97882527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */ 97982527734SSukumar Swaminathan 98082527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 98182527734SSukumar Swaminathan uint32_t Qid:10; /* RQ id for posted RQE */ 98282527734SSukumar Swaminathan uint32_t Rsvd1:6; 98382527734SSukumar Swaminathan uint32_t NumPosted:14; /* Number of entries posted */ 98482527734SSukumar Swaminathan uint32_t Rsvd2:2; 98582527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */ 98682527734SSukumar Swaminathan 98782527734SSukumar Swaminathan } emlxs_rqdb_t; 98882527734SSukumar Swaminathan 98982527734SSukumar Swaminathan 99082527734SSukumar Swaminathan typedef union emlxs_rqdbu 99182527734SSukumar Swaminathan { 99282527734SSukumar Swaminathan uint32_t word; 99382527734SSukumar Swaminathan emlxs_rqdb_t db; 99482527734SSukumar Swaminathan 99582527734SSukumar Swaminathan } emlxs_rqdbu_t; 99682527734SSukumar Swaminathan 99782527734SSukumar Swaminathan 99882527734SSukumar Swaminathan typedef struct emlxs_wqdb 99982527734SSukumar Swaminathan { 100082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 100182527734SSukumar Swaminathan uint32_t NumPosted:8; /* Number of entries posted */ 100282527734SSukumar Swaminathan uint32_t Index:8; /* Queue index for posted command */ 100382527734SSukumar Swaminathan uint32_t Rsvd1:6; 100482527734SSukumar Swaminathan uint32_t Qid:10; /* WQ id for posted WQE */ 100582527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */ 100682527734SSukumar Swaminathan 100782527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 100882527734SSukumar Swaminathan uint32_t Qid:10; /* WQ id for posted WQE */ 100982527734SSukumar Swaminathan uint32_t Rsvd1:6; 101082527734SSukumar Swaminathan uint32_t Index:8; /* Queue index for posted command */ 101182527734SSukumar Swaminathan uint32_t NumPosted:8; /* Number of entries posted */ 101282527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */ 101382527734SSukumar Swaminathan 101482527734SSukumar Swaminathan } emlxs_wqdb_t; 101582527734SSukumar Swaminathan 101682527734SSukumar Swaminathan 101782527734SSukumar Swaminathan typedef union emlxs_wqdbu 101882527734SSukumar Swaminathan { 101982527734SSukumar Swaminathan uint32_t word; 102082527734SSukumar Swaminathan emlxs_wqdb_t db; 102182527734SSukumar Swaminathan 102282527734SSukumar Swaminathan } emlxs_wqdbu_t; 102382527734SSukumar Swaminathan 102482527734SSukumar Swaminathan 102582527734SSukumar Swaminathan typedef struct emlxs_cqdb 102682527734SSukumar Swaminathan { 102782527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 102882527734SSukumar Swaminathan uint32_t NumPosted:2; /* Number of entries posted */ 102982527734SSukumar Swaminathan uint32_t Rearm:1; /* Rearm CQ */ 103082527734SSukumar Swaminathan uint32_t NumPopped:13; /* Number of CQ entries processed */ 103182527734SSukumar Swaminathan uint32_t Rsvd1:5; 103282527734SSukumar Swaminathan uint32_t Event:1; /* 1 if processed entry is EQE */ 103382527734SSukumar Swaminathan /* 0 if processed entry is CQE */ 103482527734SSukumar Swaminathan uint32_t Qid:10; /* CQ id for posted CQE */ 103582527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */ 103682527734SSukumar Swaminathan 103782527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 103882527734SSukumar Swaminathan uint32_t Qid:10; /* CQ id for posted CQE */ 103982527734SSukumar Swaminathan uint32_t Event:1; /* 1 if processed entry is EQE */ 104082527734SSukumar Swaminathan /* 0 if processed entry is CQE */ 104182527734SSukumar Swaminathan uint32_t Rsvd1:5; 104282527734SSukumar Swaminathan uint32_t NumPopped:13; /* Number of CQ entries processed */ 104382527734SSukumar Swaminathan uint32_t Rearm:1; /* Rearm CQ */ 104482527734SSukumar Swaminathan uint32_t NumPosted:2; /* Number of entries posted */ 104582527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */ 104682527734SSukumar Swaminathan 104782527734SSukumar Swaminathan } emlxs_cqdb_t; 104882527734SSukumar Swaminathan 104982527734SSukumar Swaminathan 105082527734SSukumar Swaminathan typedef union emlxs_cqdbu 105182527734SSukumar Swaminathan { 105282527734SSukumar Swaminathan uint32_t word; 105382527734SSukumar Swaminathan emlxs_cqdb_t db; 105482527734SSukumar Swaminathan 105582527734SSukumar Swaminathan } emlxs_cqdbu_t; 105682527734SSukumar Swaminathan 105782527734SSukumar Swaminathan typedef struct emlxs_eqdb 105882527734SSukumar Swaminathan { 105982527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 106082527734SSukumar Swaminathan uint32_t Rsvd2:2; 106182527734SSukumar Swaminathan uint32_t Rearm:1; /* Rearm EQ */ 106282527734SSukumar Swaminathan uint32_t NumPopped:13; /* Number of CQ entries processed */ 106382527734SSukumar Swaminathan uint32_t Rsvd1:5; 106482527734SSukumar Swaminathan uint32_t Event:1; /* True iff processed entry is EQE */ 106582527734SSukumar Swaminathan uint32_t Clear:1; /* clears EQ interrupt when set */ 106682527734SSukumar Swaminathan uint32_t Qid:9; /* EQ id for posted EQE */ 106782527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */ 106882527734SSukumar Swaminathan 106982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 107082527734SSukumar Swaminathan uint32_t Qid:9; /* EQ id for posted EQE */ 107182527734SSukumar Swaminathan uint32_t Clear:1; /* clears EQ interrupt when set */ 107282527734SSukumar Swaminathan uint32_t Event:1; /* True iff processed entry is EQE */ 107382527734SSukumar Swaminathan uint32_t Rsvd1:5; 107482527734SSukumar Swaminathan uint32_t NumPopped:13; /* Number of CQ entries processed */ 107582527734SSukumar Swaminathan uint32_t Rearm:1; /* Rearm EQ */ 107682527734SSukumar Swaminathan uint32_t Rsvd2:2; 107782527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */ 107882527734SSukumar Swaminathan 107982527734SSukumar Swaminathan } emlxs_eqdb_t; 108082527734SSukumar Swaminathan 108182527734SSukumar Swaminathan 108282527734SSukumar Swaminathan typedef union emlxs_eqdbu 108382527734SSukumar Swaminathan { 108482527734SSukumar Swaminathan uint32_t word; 108582527734SSukumar Swaminathan emlxs_eqdb_t db; 108682527734SSukumar Swaminathan 108782527734SSukumar Swaminathan } emlxs_eqdbu_t; 108882527734SSukumar Swaminathan 108982527734SSukumar Swaminathan 109082527734SSukumar Swaminathan typedef struct emlxs_mqdb 109182527734SSukumar Swaminathan { 109282527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 109382527734SSukumar Swaminathan uint32_t Rsvd2:2; 109482527734SSukumar Swaminathan uint32_t NumPosted:14; /* Number of entries posted */ 109582527734SSukumar Swaminathan uint32_t Rsvd1:5; 109682527734SSukumar Swaminathan uint32_t Qid:11; /* MQ id for posted MQE */ 109782527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */ 109882527734SSukumar Swaminathan 109982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 110082527734SSukumar Swaminathan uint32_t Qid:11; /* MQ id for posted MQE */ 110182527734SSukumar Swaminathan uint32_t Rsvd1:5; 110282527734SSukumar Swaminathan uint32_t NumPosted:14; /* Number of entries posted */ 110382527734SSukumar Swaminathan uint32_t Rsvd2:2; 110482527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */ 110582527734SSukumar Swaminathan 110682527734SSukumar Swaminathan } emlxs_mqdb_t; 110782527734SSukumar Swaminathan 110882527734SSukumar Swaminathan 110982527734SSukumar Swaminathan typedef union emlxs_mqdbu 111082527734SSukumar Swaminathan { 111182527734SSukumar Swaminathan uint32_t word; 111282527734SSukumar Swaminathan emlxs_mqdb_t db; 111382527734SSukumar Swaminathan 111482527734SSukumar Swaminathan } emlxs_mqdbu_t; 111582527734SSukumar Swaminathan 111682527734SSukumar Swaminathan 111782527734SSukumar Swaminathan #ifdef __cplusplus 111882527734SSukumar Swaminathan } 111982527734SSukumar Swaminathan #endif 112082527734SSukumar Swaminathan 112182527734SSukumar Swaminathan #endif /* _EMLXS_QUEUE_H */ 1122