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 * 88f23e9faSHans Rosenfeld * You can obtain a copy of the license at 98f23e9faSHans 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 /* 238f23e9faSHans 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 */ 1448f23e9faSHans 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; 1658f23e9faSHans Rosenfeld uint32_t Rsvd3: 1; 16682527734SSukumar Swaminathan uint32_t Valid: 1; /* Word 3 */ 16782527734SSukumar Swaminathan #endif 16882527734SSukumar Swaminathan } CQE_UnsolRcv_t; 16982527734SSukumar Swaminathan 1708f23e9faSHans Rosenfeld 1718f23e9faSHans Rosenfeld typedef struct CQE_UnsolRcvV1 1728f23e9faSHans Rosenfeld { 1738f23e9faSHans Rosenfeld #ifdef EMLXS_BIG_ENDIAN 1748f23e9faSHans Rosenfeld uint16_t RQindex; /* Word 0 */ 1758f23e9faSHans Rosenfeld uint8_t Status; 1768f23e9faSHans Rosenfeld uint8_t Rsvd1; 1778f23e9faSHans Rosenfeld 1788f23e9faSHans Rosenfeld uint32_t Rsvd2: 26; /* Word 1 */ 1798f23e9faSHans Rosenfeld uint32_t FCFId: 6; 1808f23e9faSHans Rosenfeld 1818f23e9faSHans Rosenfeld uint16_t data_size; /* Word 2 */ 1828f23e9faSHans Rosenfeld uint16_t RQid; 1838f23e9faSHans Rosenfeld 1848f23e9faSHans Rosenfeld uint32_t Valid: 1; /* Word 3 */ 1858f23e9faSHans Rosenfeld uint32_t Rsvd3: 1; 1868f23e9faSHans Rosenfeld uint32_t hdr_size: 6; 1878f23e9faSHans Rosenfeld uint32_t Code: 8; 1888f23e9faSHans Rosenfeld uint32_t eof: 8; 1898f23e9faSHans Rosenfeld uint32_t sof: 8; 1908f23e9faSHans Rosenfeld #endif 1918f23e9faSHans Rosenfeld #ifdef EMLXS_LITTLE_ENDIAN 1928f23e9faSHans Rosenfeld uint8_t Rsvd1; 1938f23e9faSHans Rosenfeld uint8_t Status; 1948f23e9faSHans Rosenfeld uint16_t RQindex; /* Word 0 */ 1958f23e9faSHans Rosenfeld 1968f23e9faSHans Rosenfeld uint32_t FCFId: 6; 1978f23e9faSHans Rosenfeld uint32_t Rsvd2: 26; /* Word 1 */ 1988f23e9faSHans Rosenfeld 1998f23e9faSHans Rosenfeld uint16_t RQid; 2008f23e9faSHans Rosenfeld uint16_t data_size; /* Word 2 */ 2018f23e9faSHans Rosenfeld 2028f23e9faSHans Rosenfeld uint32_t sof: 8; 2038f23e9faSHans Rosenfeld uint32_t eof: 8; 2048f23e9faSHans Rosenfeld uint32_t Code: 8; 2058f23e9faSHans Rosenfeld uint32_t hdr_size: 6; 2068f23e9faSHans Rosenfeld uint32_t Rsvd3: 1; 2078f23e9faSHans Rosenfeld uint32_t Valid: 1; /* Word 3 */ 2088f23e9faSHans Rosenfeld #endif 2098f23e9faSHans Rosenfeld } CQE_UnsolRcvV1_t; 2108f23e9faSHans 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 2678f23e9faSHans 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 3468f23e9faSHans Rosenfeld 3478f23e9faSHans Rosenfeld typedef struct CQE_ASYNC_FC_LINK_ATT 3488f23e9faSHans Rosenfeld { 3498f23e9faSHans Rosenfeld #ifdef EMLXS_BIG_ENDIAN 3508f23e9faSHans Rosenfeld uint8_t port_speed; /* Word 0 */ 3518f23e9faSHans Rosenfeld uint8_t topology; 3528f23e9faSHans Rosenfeld uint8_t att_type; 3538f23e9faSHans Rosenfeld uint8_t link_number; 3548f23e9faSHans Rosenfeld 3558f23e9faSHans Rosenfeld uint16_t link_speed; /* Word 1 */ 3568f23e9faSHans Rosenfeld uint8_t shared_link_status; 3578f23e9faSHans Rosenfeld uint8_t port_fault; 3588f23e9faSHans Rosenfeld 3598f23e9faSHans Rosenfeld uint32_t event_tag; /* Word 2 */ 3608f23e9faSHans Rosenfeld #endif 3618f23e9faSHans Rosenfeld #ifdef EMLXS_LITTLE_ENDIAN 3628f23e9faSHans Rosenfeld uint8_t link_number; 3638f23e9faSHans Rosenfeld uint8_t att_type; 3648f23e9faSHans Rosenfeld uint8_t topology; 3658f23e9faSHans Rosenfeld uint8_t port_speed; /* Word 0 */ 3668f23e9faSHans Rosenfeld 3678f23e9faSHans Rosenfeld uint8_t port_fault; 3688f23e9faSHans Rosenfeld uint8_t shared_link_status; 3698f23e9faSHans Rosenfeld uint16_t link_speed; /* Word 1 */ 3708f23e9faSHans Rosenfeld 3718f23e9faSHans Rosenfeld uint32_t event_tag; /* Word 2 */ 3728f23e9faSHans Rosenfeld #endif 3738f23e9faSHans Rosenfeld } CQE_ASYNC_FC_LINK_ATT_t; 3748f23e9faSHans Rosenfeld 3758f23e9faSHans Rosenfeld typedef struct CQE_ASYNC_PORT 3768f23e9faSHans Rosenfeld { 3778f23e9faSHans Rosenfeld uint8_t link_status[4]; 3788f23e9faSHans Rosenfeld uint32_t data_word2; 3798f23e9faSHans Rosenfeld uint32_t Rsvd; 3808f23e9faSHans Rosenfeld } CQE_ASYNC_PORT_t; 3818f23e9faSHans Rosenfeld 3828f23e9faSHans Rosenfeld /* topology */ 3838f23e9faSHans Rosenfeld #define TOPOLOGY_UNKNOWN 0 3848f23e9faSHans Rosenfeld #define TOPOLOGY_NPORT 1 3858f23e9faSHans Rosenfeld #define TOPOLOGY_LPORT 2 3868f23e9faSHans Rosenfeld #define TOPOLOGY_INTERNAL_LB 3 3878f23e9faSHans Rosenfeld #define TOPOLOGY_SERDES_LB 4 3888f23e9faSHans Rosenfeld 3898f23e9faSHans Rosenfeld /* att_type */ 3908f23e9faSHans Rosenfeld #define ATT_TYPE_LINK_UP 1 3918f23e9faSHans Rosenfeld #define ATT_TYPE_LINK_DOWN 2 3928f23e9faSHans Rosenfeld #define ATT_TYPE_NO_HARD_ALPA 3 3938f23e9faSHans Rosenfeld 3948f23e9faSHans Rosenfeld /* shared_link_status */ 3958f23e9faSHans Rosenfeld #define SHARED_STATUS_NONE 0 3968f23e9faSHans Rosenfeld #define SHARED_STATUS_LD_UNUSABLE 1 3978f23e9faSHans Rosenfeld #define SHARED_STATUS_LD_TRAN_FAULT 2 3988f23e9faSHans Rosenfeld #define SHARED_STATUS_LD_NO_SIGNAL 3 3998f23e9faSHans Rosenfeld #define SHARED_STATUS_LD_MGMT_DISABLED 4 4008f23e9faSHans Rosenfeld #define SHARED_STATUS_LU_FAILED_P2P 5 4018f23e9faSHans Rosenfeld #define SHARED_STATUS_LU_FAILED_FLOGI_TMO 6 4028f23e9faSHans Rosenfeld #define SHARED_STATUS_LU_FAILED_NO_FPORT 7 4038f23e9faSHans Rosenfeld #define SHARED_STATUS_LU_FAILED_NO_NPIV 8 4048f23e9faSHans Rosenfeld #define SHARED_STATUS_LU_FAILED_FLOGO 9 4058f23e9faSHans Rosenfeld #define SHARED_STATUS_LU_LOOPBACK 20 4068f23e9faSHans Rosenfeld #define SHARED_STATUS_LU_NORMAL 40 4078f23e9faSHans Rosenfeld 4088f23e9faSHans Rosenfeld /* port_fault */ 4098f23e9faSHans Rosenfeld #define PORT_FAULT_NONE 0 4108f23e9faSHans Rosenfeld #define PORT_FAULT_LOCAL 1 4118f23e9faSHans Rosenfeld #define PORT_FAULT_REMOTE 2 4128f23e9faSHans 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; 4218f23e9faSHans Rosenfeld CQE_ASYNC_FC_LINK_ATT_t fc; 4228f23e9faSHans 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 */ 4488f23e9faSHans Rosenfeld #define ASYNC_EVENT_CODE_FCOE_LINK_STATE 0x01 4498f23e9faSHans Rosenfeld #define ASYNC_EVENT_CODE_FCOE_FIP 0x02 4508f23e9faSHans Rosenfeld #define ASYNC_EVENT_CODE_DCBX 0x03 4518f23e9faSHans Rosenfeld #define ASYNC_EVENT_CODE_ISCSI 0x04 4528f23e9faSHans Rosenfeld #define ASYNC_EVENT_CODE_GRP_5 0x05 4538f23e9faSHans Rosenfeld #define ASYNC_EVENT_CODE_FC_EVENT 0x10 4548f23e9faSHans Rosenfeld #define ASYNC_EVENT_CODE_PORT 0x11 4558f23e9faSHans Rosenfeld #define ASYNC_EVENT_CODE_VF 0x12 4568f23e9faSHans Rosenfeld #define ASYNC_EVENT_CODE_MR 0x13 4578f23e9faSHans Rosenfeld 4588f23e9faSHans Rosenfeld /* FC Event */ 4598f23e9faSHans Rosenfeld #define ASYNC_EVENT_FC_LINK_ATT 1 4608f23e9faSHans 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 4788f23e9faSHans Rosenfeld /* PORT - evt_type defines */ 479088c6f3fSHans Rosenfeld #define ASYNC_EVENT_PORT_OTEMP 2 480088c6f3fSHans Rosenfeld #define ASYNC_EVENT_PORT_NTEMP 3 4818f23e9faSHans Rosenfeld #define ASYNC_EVENT_MISCONFIG_PORT 9 4828f23e9faSHans Rosenfeld 48382527734SSukumar Swaminathan typedef struct CQE_MBOX 48482527734SSukumar Swaminathan { 48582527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 48682527734SSukumar Swaminathan uint16_t extend_status; /* Word 0 */ 48782527734SSukumar Swaminathan uint16_t cmpl_status; 48882527734SSukumar Swaminathan 48982527734SSukumar Swaminathan uint32_t tag_low; /* Word 1 */ 49082527734SSukumar Swaminathan uint32_t tag_high; /* Word 2 */ 49182527734SSukumar Swaminathan 49282527734SSukumar Swaminathan uint32_t valid: 1; /* Word 3 */ 49382527734SSukumar Swaminathan uint32_t async_evt: 1; 49482527734SSukumar Swaminathan uint32_t hpi: 1; 49582527734SSukumar Swaminathan uint32_t completed: 1; 49682527734SSukumar Swaminathan uint32_t consumed: 1; 49782527734SSukumar Swaminathan uint32_t Rsvd1: 27; 49882527734SSukumar Swaminathan #endif 49982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 50082527734SSukumar Swaminathan uint16_t cmpl_status; 50182527734SSukumar Swaminathan uint16_t extend_status; /* Word 0 */ 50282527734SSukumar Swaminathan 50382527734SSukumar Swaminathan uint32_t tag_low; /* Word 1 */ 50482527734SSukumar Swaminathan uint32_t tag_high; /* Word 2 */ 50582527734SSukumar Swaminathan 50682527734SSukumar Swaminathan uint32_t Rsvd1: 27; 50782527734SSukumar Swaminathan uint32_t consumed: 1; 50882527734SSukumar Swaminathan uint32_t completed: 1; 50982527734SSukumar Swaminathan uint32_t hpi: 1; 51082527734SSukumar Swaminathan uint32_t async_evt: 1; 51182527734SSukumar Swaminathan uint32_t valid: 1; /* Word 3 */ 51282527734SSukumar Swaminathan #endif 51382527734SSukumar Swaminathan } CQE_MBOX_t; 51482527734SSukumar Swaminathan 51582527734SSukumar Swaminathan typedef union 51682527734SSukumar Swaminathan { 51782527734SSukumar Swaminathan uint32_t word[4]; 51882527734SSukumar Swaminathan 51982527734SSukumar Swaminathan /* Group 1 types */ 52082527734SSukumar Swaminathan CQE_ASYNC_t cqAsyncEntry; 52182527734SSukumar Swaminathan CQE_ASYNC_FCOE_t cqAsyncFCOEEntry; 52282527734SSukumar Swaminathan CQE_MBOX_t cqMboxEntry; 52382527734SSukumar Swaminathan 52482527734SSukumar Swaminathan /* Group 2 types */ 52582527734SSukumar Swaminathan CQE_CmplWQ_t cqCmplEntry; 52682527734SSukumar Swaminathan CQE_RelWQ_t cqRelEntry; 52782527734SSukumar Swaminathan CQE_UnsolRcv_t cqUnsolRcvEntry; 5288f23e9faSHans Rosenfeld CQE_UnsolRcvV1_t cqUnsolRcvEntryV1; 52982527734SSukumar Swaminathan CQE_XRI_Abort_t cqXRIEntry; 53082527734SSukumar Swaminathan } CQE_u; 53182527734SSukumar Swaminathan 53282527734SSukumar Swaminathan /* RQ entries */ 53382527734SSukumar Swaminathan typedef struct RQE 53482527734SSukumar Swaminathan { 53582527734SSukumar Swaminathan uint32_t AddrHi; 53682527734SSukumar Swaminathan uint32_t AddrLo; 53782527734SSukumar Swaminathan 53882527734SSukumar Swaminathan } RQE_t; 53982527734SSukumar Swaminathan 54082527734SSukumar Swaminathan 54182527734SSukumar Swaminathan /* Definitions for WQEs */ 54282527734SSukumar Swaminathan typedef struct 54382527734SSukumar Swaminathan { 5448f23e9faSHans Rosenfeld /* Word 0 - 2 */ 54582527734SSukumar Swaminathan ULP_BDE64 Payload; 5468f23e9faSHans Rosenfeld 5478f23e9faSHans Rosenfeld /* Word 3 */ 54882527734SSukumar Swaminathan uint32_t PayloadLength; 54982527734SSukumar Swaminathan 55082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 5518f23e9faSHans Rosenfeld /* Word 4 */ 55282527734SSukumar Swaminathan uint32_t Rsvd1: 6; 55382527734SSukumar Swaminathan uint32_t VF: 1; 55482527734SSukumar Swaminathan uint32_t SP: 1; 55582527734SSukumar Swaminathan uint32_t LocalId: 24; 55682527734SSukumar Swaminathan 5578f23e9faSHans Rosenfeld /* Word 5 */ 55882527734SSukumar Swaminathan uint32_t Rsvd2: 8; 55982527734SSukumar Swaminathan uint32_t RemoteId: 24; 56082527734SSukumar Swaminathan #endif 56182527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 5628f23e9faSHans Rosenfeld /* Word 4 */ 56382527734SSukumar Swaminathan uint32_t LocalId: 24; 56482527734SSukumar Swaminathan uint32_t SP: 1; 56582527734SSukumar Swaminathan uint32_t VF: 1; 56682527734SSukumar Swaminathan uint32_t Rsvd1: 6; 56782527734SSukumar Swaminathan 5688f23e9faSHans Rosenfeld /* Word 5 */ 56982527734SSukumar Swaminathan uint32_t RemoteId: 24; 57082527734SSukumar Swaminathan uint32_t Rsvd2: 8; 57182527734SSukumar Swaminathan #endif 57282527734SSukumar Swaminathan 57382527734SSukumar Swaminathan } ELS_REQ_WQE; 57482527734SSukumar Swaminathan 57582527734SSukumar Swaminathan typedef struct 57682527734SSukumar Swaminathan { 5778f23e9faSHans Rosenfeld /* Word 0 - 2 */ 57882527734SSukumar Swaminathan ULP_BDE64 Payload; 5798f23e9faSHans Rosenfeld 5808f23e9faSHans Rosenfeld /* Word 3 */ 5818f23e9faSHans Rosenfeld uint32_t PayloadLength; 5828f23e9faSHans Rosenfeld 5838f23e9faSHans Rosenfeld /* Word 4 */ 5848f23e9faSHans Rosenfeld uint32_t Rsvd1; 58582527734SSukumar Swaminathan 58682527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 5878f23e9faSHans Rosenfeld /* Word 5 */ 58882527734SSukumar Swaminathan uint32_t Rsvd2: 8; 58982527734SSukumar Swaminathan uint32_t RemoteId: 24; 59082527734SSukumar Swaminathan #endif 59182527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 5928f23e9faSHans Rosenfeld /* Word 5 */ 59382527734SSukumar Swaminathan uint32_t RemoteId: 24; 59482527734SSukumar Swaminathan uint32_t Rsvd2: 8; 59582527734SSukumar Swaminathan #endif 59682527734SSukumar Swaminathan 59782527734SSukumar Swaminathan } ELS_RSP_WQE; 59882527734SSukumar Swaminathan 59982527734SSukumar Swaminathan typedef struct 60082527734SSukumar Swaminathan { 6018f23e9faSHans Rosenfeld /* Word 0 - 2 */ 60282527734SSukumar Swaminathan ULP_BDE64 Payload; 6038f23e9faSHans Rosenfeld 6048f23e9faSHans Rosenfeld /* Word 3 */ 60582527734SSukumar Swaminathan uint32_t PayloadLength; 60682527734SSukumar Swaminathan 6078f23e9faSHans Rosenfeld /* Word 4 */ 60882527734SSukumar Swaminathan uint32_t Parameter; 60982527734SSukumar Swaminathan 61082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 6118f23e9faSHans Rosenfeld /* Word 5 */ 61282527734SSukumar Swaminathan uint32_t Rctl: 8; 61382527734SSukumar Swaminathan uint32_t Type: 8; 61482527734SSukumar Swaminathan uint32_t DFctl: 8; 61582527734SSukumar Swaminathan uint32_t Rsvd1: 4; 61682527734SSukumar Swaminathan uint32_t la: 1; 61782527734SSukumar Swaminathan uint32_t Rsvd2: 3; 61882527734SSukumar Swaminathan #endif 61982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 6208f23e9faSHans Rosenfeld /* Word 5 */ 62182527734SSukumar Swaminathan uint32_t Rsvd2: 3; 62282527734SSukumar Swaminathan uint32_t la: 1; 62382527734SSukumar Swaminathan uint32_t Rsvd1: 4; 62482527734SSukumar Swaminathan uint32_t DFctl: 8; 62582527734SSukumar Swaminathan uint32_t Type: 8; 62682527734SSukumar Swaminathan uint32_t Rctl: 8; 62782527734SSukumar Swaminathan #endif 62882527734SSukumar Swaminathan 62982527734SSukumar Swaminathan } GEN_REQ_WQE; 63082527734SSukumar Swaminathan 63182527734SSukumar Swaminathan typedef struct 63282527734SSukumar Swaminathan { 6338f23e9faSHans Rosenfeld /* Word 0 - 2 */ 63482527734SSukumar Swaminathan ULP_BDE64 Payload; 63582527734SSukumar Swaminathan 6368f23e9faSHans Rosenfeld /* Word 3 */ 6378f23e9faSHans Rosenfeld uint32_t Rsvd0; 6388f23e9faSHans Rosenfeld 6398f23e9faSHans Rosenfeld /* Word 4 */ 64082527734SSukumar Swaminathan uint32_t Parameter; 64182527734SSukumar Swaminathan 64282527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 6438f23e9faSHans Rosenfeld /* Word 5 */ 64482527734SSukumar Swaminathan uint32_t Rctl: 8; 64582527734SSukumar Swaminathan uint32_t Type: 8; 64682527734SSukumar Swaminathan uint32_t DFctl: 8; 64782527734SSukumar Swaminathan uint32_t ls: 1; 6488f23e9faSHans Rosenfeld uint32_t xo: 1; 6498f23e9faSHans Rosenfeld uint32_t Rsvd1: 2; 6508f23e9faSHans Rosenfeld uint32_t ft: 1; 65182527734SSukumar Swaminathan uint32_t si: 1; 65282527734SSukumar Swaminathan uint32_t Rsvd2: 2; 65382527734SSukumar Swaminathan #endif 65482527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 6558f23e9faSHans Rosenfeld /* Word 5 */ 65682527734SSukumar Swaminathan uint32_t Rsvd2: 2; 65782527734SSukumar Swaminathan uint32_t si: 1; 6588f23e9faSHans Rosenfeld uint32_t ft: 1; 6598f23e9faSHans Rosenfeld uint32_t Rsvd1: 2; 6608f23e9faSHans Rosenfeld uint32_t xo: 1; 66182527734SSukumar Swaminathan uint32_t ls: 1; 66282527734SSukumar Swaminathan uint32_t DFctl: 8; 66382527734SSukumar Swaminathan uint32_t Type: 8; 66482527734SSukumar Swaminathan uint32_t Rctl: 8; 66582527734SSukumar Swaminathan #endif 66682527734SSukumar Swaminathan 66782527734SSukumar Swaminathan } XMIT_SEQ_WQE; 66882527734SSukumar Swaminathan 66982527734SSukumar Swaminathan typedef struct 67082527734SSukumar Swaminathan { 6718f23e9faSHans Rosenfeld /* Word 0 - 2 */ 6728f23e9faSHans Rosenfeld ULP_BDE64 Payload; 6738f23e9faSHans Rosenfeld 6748f23e9faSHans Rosenfeld /* Word 3 */ 6758f23e9faSHans Rosenfeld uint32_t PayloadLength; 67682527734SSukumar Swaminathan 6778f23e9faSHans Rosenfeld /* Word 4 */ 67882527734SSukumar Swaminathan uint32_t TotalTransferCount; 6798f23e9faSHans Rosenfeld 6808f23e9faSHans Rosenfeld /* Word 5 */ 68182527734SSukumar Swaminathan uint32_t Rsvd1; 68282527734SSukumar Swaminathan 68382527734SSukumar Swaminathan } FCP_WQE; 68482527734SSukumar Swaminathan 68582527734SSukumar Swaminathan 68682527734SSukumar Swaminathan typedef struct 68782527734SSukumar Swaminathan { 6888f23e9faSHans Rosenfeld /* Word 0 - 2 */ 68982527734SSukumar Swaminathan uint32_t Rsvd1[3]; 69082527734SSukumar Swaminathan 69182527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 6928f23e9faSHans Rosenfeld /* Word 3 */ 69382527734SSukumar Swaminathan uint32_t Rsvd2: 16; 69482527734SSukumar Swaminathan uint32_t Criteria: 8; 69582527734SSukumar Swaminathan uint32_t Rsvd3: 7; 69682527734SSukumar Swaminathan uint32_t IA: 1; 69782527734SSukumar Swaminathan #endif 69882527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 6998f23e9faSHans Rosenfeld /* Word 3 */ 70082527734SSukumar Swaminathan uint32_t IA: 1; 70182527734SSukumar Swaminathan uint32_t Rsvd3: 7; 70282527734SSukumar Swaminathan uint32_t Criteria: 8; 70382527734SSukumar Swaminathan uint32_t Rsvd2: 16; 70482527734SSukumar Swaminathan #endif 70582527734SSukumar Swaminathan 7068f23e9faSHans Rosenfeld /* Word 4 - 5 */ 70782527734SSukumar Swaminathan uint32_t Rsvd4[2]; 70882527734SSukumar Swaminathan 70982527734SSukumar Swaminathan } ABORT_WQE; 71082527734SSukumar Swaminathan 71182527734SSukumar Swaminathan #define ABORT_XRI_TAG 1 /* Abort tag is a XRITag */ 71282527734SSukumar Swaminathan #define ABORT_ABT_TAG 2 /* Abort tag is a AbortTag */ 71382527734SSukumar Swaminathan #define ABORT_REQ_TAG 3 /* Abort tag is a RequestTag */ 71482527734SSukumar Swaminathan 71582527734SSukumar Swaminathan typedef struct 71682527734SSukumar Swaminathan { 71782527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 7188f23e9faSHans Rosenfeld /* Word 0 */ 71982527734SSukumar Swaminathan uint8_t Payload0; 72082527734SSukumar Swaminathan uint8_t Payload1; 72182527734SSukumar Swaminathan uint8_t Payload2; 72282527734SSukumar Swaminathan uint8_t Payload3; 72382527734SSukumar Swaminathan 7248f23e9faSHans Rosenfeld /* Word 1 */ 72582527734SSukumar Swaminathan uint32_t OXId: 16; 72682527734SSukumar Swaminathan uint32_t RXId: 16; 72782527734SSukumar Swaminathan 7288f23e9faSHans Rosenfeld /* Word 2 */ 72982527734SSukumar Swaminathan uint32_t SeqCntLow: 16; 73082527734SSukumar Swaminathan uint32_t SeqCntHigh: 16; 7318f23e9faSHans Rosenfeld 7328f23e9faSHans Rosenfeld /* Word 3 */ 7338f23e9faSHans Rosenfeld uint32_t Rsvd1; 7348f23e9faSHans Rosenfeld 7358f23e9faSHans Rosenfeld /* Word 4 */ 7368f23e9faSHans Rosenfeld uint32_t Rsvd2: 8; 7378f23e9faSHans Rosenfeld uint32_t LocalId: 24; 7388f23e9faSHans Rosenfeld 7398f23e9faSHans Rosenfeld /* Word 5 */ 7408f23e9faSHans Rosenfeld uint32_t XO: 1; 7418f23e9faSHans Rosenfeld uint32_t AR: 1; 7428f23e9faSHans Rosenfeld uint32_t Rsvd3: 6; 7438f23e9faSHans Rosenfeld uint32_t RemoteId: 24; 74482527734SSukumar Swaminathan #endif 74582527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 7468f23e9faSHans Rosenfeld /* Word 0 */ 74782527734SSukumar Swaminathan uint8_t Payload3; 74882527734SSukumar Swaminathan uint8_t Payload2; 74982527734SSukumar Swaminathan uint8_t Payload1; 75082527734SSukumar Swaminathan uint8_t Payload0; 75182527734SSukumar Swaminathan 7528f23e9faSHans Rosenfeld /* Word 1 */ 75382527734SSukumar Swaminathan uint32_t RXId: 16; 75482527734SSukumar Swaminathan uint32_t OXId: 16; 75582527734SSukumar Swaminathan 7568f23e9faSHans Rosenfeld /* Word 2 */ 75782527734SSukumar Swaminathan uint32_t SeqCntHigh: 16; 75882527734SSukumar Swaminathan uint32_t SeqCntLow: 16; 7598f23e9faSHans Rosenfeld 7608f23e9faSHans Rosenfeld /* Word 3 */ 7618f23e9faSHans Rosenfeld uint32_t Rsvd1; 7628f23e9faSHans Rosenfeld 7638f23e9faSHans Rosenfeld /* Word 4 */ 7648f23e9faSHans Rosenfeld uint32_t LocalId: 24; 7658f23e9faSHans Rosenfeld uint32_t Rsvd2: 8; 7668f23e9faSHans Rosenfeld 7678f23e9faSHans Rosenfeld /* Word 5 */ 76882527734SSukumar Swaminathan uint32_t RemoteId: 24; 7698f23e9faSHans Rosenfeld uint32_t Rsvd3: 6; 77082527734SSukumar Swaminathan uint32_t AR: 1; 77182527734SSukumar Swaminathan uint32_t XO: 1; 77282527734SSukumar Swaminathan #endif 77382527734SSukumar Swaminathan 77482527734SSukumar Swaminathan } BLS_WQE; 77582527734SSukumar Swaminathan 77682527734SSukumar Swaminathan 77782527734SSukumar Swaminathan typedef struct 77882527734SSukumar Swaminathan { 7798f23e9faSHans Rosenfeld /* Word 0 - 4 */ 78082527734SSukumar Swaminathan uint32_t Rsvd1[5]; 78182527734SSukumar Swaminathan 78282527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 7838f23e9faSHans Rosenfeld /* Word 5 */ 78482527734SSukumar Swaminathan uint32_t XO: 1; 7858f23e9faSHans Rosenfeld uint32_t Rsvd2: 31; 78682527734SSukumar Swaminathan #endif 78782527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 7888f23e9faSHans Rosenfeld /* Word 5 */ 7898f23e9faSHans Rosenfeld uint32_t Rsvd2: 31; 79082527734SSukumar Swaminathan uint32_t XO: 1; 79182527734SSukumar Swaminathan #endif 79282527734SSukumar Swaminathan 79382527734SSukumar Swaminathan } CREATE_XRI_WQE; 79482527734SSukumar Swaminathan 79582527734SSukumar Swaminathan typedef struct emlxs_wqe 79682527734SSukumar Swaminathan { 79782527734SSukumar Swaminathan /* Words 0-5 */ 79882527734SSukumar Swaminathan union 79982527734SSukumar Swaminathan { 80082527734SSukumar Swaminathan uint32_t word[6]; /* Words 0-5: cmd specific */ 80182527734SSukumar Swaminathan ELS_REQ_WQE ElsCmd; /* ELS command overlay */ 80282527734SSukumar Swaminathan GEN_REQ_WQE GenReq; /* CT command overlay */ 80382527734SSukumar Swaminathan FCP_WQE FcpCmd; /* FCP command overlay */ 80482527734SSukumar Swaminathan ELS_RSP_WQE ElsRsp; /* ELS response overlay */ 80582527734SSukumar Swaminathan ABORT_WQE Abort; /* Abort overlay */ 80682527734SSukumar Swaminathan BLS_WQE BlsRsp; /* BLS overlay */ 80782527734SSukumar Swaminathan CREATE_XRI_WQE CreateXri; /* Create XRI */ 80882527734SSukumar Swaminathan XMIT_SEQ_WQE XmitSeq; /* Xmit Sequence */ 80982527734SSukumar Swaminathan } un; 81082527734SSukumar Swaminathan 81182527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 81282527734SSukumar Swaminathan /* Word 6 */ 81382527734SSukumar Swaminathan uint16_t ContextTag; /* Context Tag */ 81482527734SSukumar Swaminathan uint16_t XRITag; /* XRItag */ 81582527734SSukumar Swaminathan /* Word 7 */ 81682527734SSukumar Swaminathan uint32_t Timer: 8; /* TOV */ 8178f23e9faSHans Rosenfeld uint32_t Rsvd1: 1; 81882527734SSukumar Swaminathan uint32_t ERP: 1; /* ERP */ 81982527734SSukumar Swaminathan uint32_t PU: 2; /* PU */ 8208f23e9faSHans Rosenfeld uint32_t AR: 1; /* Auto Response */ 82182527734SSukumar Swaminathan uint32_t Class: 3; /* COS */ 82282527734SSukumar Swaminathan uint32_t Command: 8; /* Command Code */ 8238f23e9faSHans Rosenfeld uint32_t Rsvd0: 1; 8248f23e9faSHans Rosenfeld uint32_t BsType: 3; /* DIF Block Size type */ 82582527734SSukumar Swaminathan uint32_t ContextType: 2; /* Context Type */ 8268f23e9faSHans Rosenfeld uint32_t DIF: 2; 82782527734SSukumar Swaminathan /* Word 8 */ 82882527734SSukumar Swaminathan uint32_t AbortTag; /* Abort Tag */ 82982527734SSukumar Swaminathan /* Word 9 */ 83082527734SSukumar Swaminathan uint16_t OXId; /* OXId on xmitted rsp */ 83182527734SSukumar Swaminathan uint16_t RequestTag; /* Request Tag */ 83282527734SSukumar Swaminathan /* Word 10 */ 83382527734SSukumar Swaminathan uint32_t CCP: 8; /* CCP */ 83482527734SSukumar Swaminathan uint32_t CCPE: 1; /* CCPEnabled */ 8358f23e9faSHans Rosenfeld uint32_t CMD: 1; 83682527734SSukumar Swaminathan uint32_t XC: 1; /* Exchange Create */ 83782527734SSukumar Swaminathan uint32_t Rsvd5: 1; 83882527734SSukumar Swaminathan uint32_t PV: 1; /* PRIValid */ 83982527734SSukumar Swaminathan uint32_t PRI: 3; /* PRI */ 8408f23e9faSHans Rosenfeld /* The following 16 bits may be */ 8418f23e9faSHans Rosenfeld /* overwritten by PHWQ */ 8428f23e9faSHans Rosenfeld uint32_t WQES: 1; /* WQE specify XBL */ 8438f23e9faSHans Rosenfeld uint32_t DBDE: 1; /* Data type for BDE 0 */ 8448f23e9faSHans Rosenfeld uint32_t IOd: 1; /* IO direction */ 8458f23e9faSHans Rosenfeld uint32_t Rsvd4: 1; 8468f23e9faSHans Rosenfeld uint32_t XBL: 1; /* Explicit Buffer List */ 8478f23e9faSHans Rosenfeld uint32_t Rsvd3: 1; 8488f23e9faSHans Rosenfeld uint32_t QOSd: 1; /* QOS disable */ 8498f23e9faSHans Rosenfeld uint32_t LenLoc: 2; /* Length Location */ 8508f23e9faSHans Rosenfeld uint32_t Rsvd2: 3; 8518f23e9faSHans Rosenfeld uint32_t EBDEcnt: 4; /* Extended BDE cnt */ 85282527734SSukumar Swaminathan /* Word 11 */ 8538f23e9faSHans Rosenfeld uint32_t CQId: 16; /* CompletionQueueID */ 85482527734SSukumar Swaminathan uint32_t Rsvd8: 8; 85582527734SSukumar Swaminathan uint32_t WQEC: 1; /* Request WQE consumed CQE */ 8568f23e9faSHans Rosenfeld uint32_t ELSId: 3; 85782527734SSukumar Swaminathan uint32_t CmdType: 4; /* Command Type */ 85882527734SSukumar Swaminathan #endif 85982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 86082527734SSukumar Swaminathan /* Word 6 */ 86182527734SSukumar Swaminathan uint16_t XRITag; /* XRItag */ 86282527734SSukumar Swaminathan uint16_t ContextTag; /* Context Tag */ 86382527734SSukumar Swaminathan /* Word 7 */ 8648f23e9faSHans Rosenfeld uint32_t DIF: 2; 86582527734SSukumar Swaminathan uint32_t ContextType: 2; /* Context Type */ 8668f23e9faSHans Rosenfeld uint32_t BsType: 3; /* DIF Block Size type */ 8678f23e9faSHans Rosenfeld uint32_t Rsvd0: 1; 86882527734SSukumar Swaminathan uint32_t Command: 8; /* Command Code */ 86982527734SSukumar Swaminathan uint32_t Class: 3; /* COS */ 8708f23e9faSHans Rosenfeld uint32_t AR: 1; /* Auto Response */ 87182527734SSukumar Swaminathan uint32_t PU: 2; /* PU */ 87282527734SSukumar Swaminathan uint32_t ERP: 1; /* ERP */ 8738f23e9faSHans Rosenfeld uint32_t Rsvd1: 1; 87482527734SSukumar Swaminathan uint32_t Timer: 8; /* TOV */ 87582527734SSukumar Swaminathan /* Word 8 */ 87682527734SSukumar Swaminathan uint32_t AbortTag; /* Abort Tag */ 87782527734SSukumar Swaminathan /* Word 9 */ 87882527734SSukumar Swaminathan uint16_t RequestTag; /* Request Tag */ 87982527734SSukumar Swaminathan uint16_t OXId; /* OXId on xmitted rsp */ 88082527734SSukumar Swaminathan /* Word 10 */ 8818f23e9faSHans Rosenfeld /* The following 16 bits may be */ 8828f23e9faSHans Rosenfeld /* overwritten by PHWQ */ 8838f23e9faSHans Rosenfeld uint32_t EBDEcnt: 4; /* Extended BDE cnt */ 8848f23e9faSHans Rosenfeld uint32_t Rsvd2: 3; 8858f23e9faSHans Rosenfeld uint32_t LenLoc: 2; /* Length Location */ 8868f23e9faSHans Rosenfeld uint32_t QOSd: 1; /* QOS disable */ 8878f23e9faSHans Rosenfeld uint32_t Rsvd3: 1; 8888f23e9faSHans Rosenfeld uint32_t XBL: 1; /* Explicit Buffer List */ 8898f23e9faSHans Rosenfeld uint32_t Rsvd4: 1; 8908f23e9faSHans Rosenfeld uint32_t IOd: 1; /* IO direction */ 8918f23e9faSHans Rosenfeld uint32_t DBDE: 1; /* Data type for BDE 0 */ 8928f23e9faSHans Rosenfeld uint32_t WQES: 1; /* WQE specify XBL */ 89382527734SSukumar Swaminathan uint32_t PRI: 3; /* PRI */ 89482527734SSukumar Swaminathan uint32_t PV: 1; /* PRIValid */ 89582527734SSukumar Swaminathan uint32_t Rsvd5: 1; 89682527734SSukumar Swaminathan uint32_t XC: 1; /* Exchange Create */ 8978f23e9faSHans Rosenfeld uint32_t CMD: 1; 89882527734SSukumar Swaminathan uint32_t CCPE: 1; /* CCPEnabled */ 89982527734SSukumar Swaminathan uint32_t CCP: 8; /* CCP */ 90082527734SSukumar Swaminathan /* Word 11 */ 90182527734SSukumar Swaminathan uint32_t CmdType: 4; /* Command Type */ 9028f23e9faSHans Rosenfeld uint32_t ELSId: 3; 90382527734SSukumar Swaminathan uint32_t WQEC: 1; /* Request WQE consumed CQE */ 90482527734SSukumar Swaminathan uint32_t Rsvd8: 8; 9058f23e9faSHans Rosenfeld uint32_t CQId: 16; /* CompletionQueueID */ 90682527734SSukumar Swaminathan #endif 90782527734SSukumar Swaminathan 9088f23e9faSHans Rosenfeld /* Words 12 */ 9098f23e9faSHans Rosenfeld uint32_t CmdSpecific; /* Command specific information */ 9108f23e9faSHans Rosenfeld 9118f23e9faSHans Rosenfeld /* Words 13-15 */ 9128f23e9faSHans Rosenfeld ULP_BDE64 FirstData; 91382527734SSukumar Swaminathan } emlxs_wqe_t; 91482527734SSukumar Swaminathan 9158f23e9faSHans Rosenfeld /* Used if PHWQ is enabled */ 9168f23e9faSHans Rosenfeld #ifdef EMLXS_BIG_ENDIAN 9178f23e9faSHans Rosenfeld #define WQE_PHWQ_WQID(wqe, qid) *(((uint16_t *)(wqe)) + 21) = \ 9188f23e9faSHans Rosenfeld ((qid << 1) & 0xfffe); 9198f23e9faSHans Rosenfeld #endif 9208f23e9faSHans Rosenfeld #ifdef EMLXS_LITTLE_ENDIAN 9218f23e9faSHans Rosenfeld #define WQE_PHWQ_WQID(wqe, qid) *(((uint16_t *)(wqe)) + 20) = \ 9228f23e9faSHans Rosenfeld ((qid << 1) & 0xfffe); 9238f23e9faSHans Rosenfeld #endif 9248f23e9faSHans Rosenfeld 92582527734SSukumar Swaminathan /* Defines for ContextType */ 92682527734SSukumar Swaminathan #define WQE_RPI_CONTEXT 0 92782527734SSukumar Swaminathan #define WQE_VPI_CONTEXT 1 92882527734SSukumar Swaminathan #define WQE_VFI_CONTEXT 2 92982527734SSukumar Swaminathan #define WQE_FCFI_CONTEXT 3 93082527734SSukumar Swaminathan 93182527734SSukumar Swaminathan /* Defines for CmdType */ 93282527734SSukumar Swaminathan #define WQE_TYPE_FCP_DATA_IN 0x00 93382527734SSukumar Swaminathan #define WQE_TYPE_FCP_DATA_OUT 0x01 9348f23e9faSHans Rosenfeld #define WQE_TYPE_TRECEIVE 0x02 9358f23e9faSHans Rosenfeld #define WQE_TYPE_TRSP 0x03 9368f23e9faSHans Rosenfeld #define WQE_TYPE_SRR_RSP 0x06 9378f23e9faSHans Rosenfeld #define WQE_TYPE_TSEND 0x07 93882527734SSukumar Swaminathan #define WQE_TYPE_GEN 0x08 93982527734SSukumar Swaminathan #define WQE_TYPE_ABORT 0x08 9408f23e9faSHans Rosenfeld #define WQE_TYPE_ELS 0x0C 94182527734SSukumar Swaminathan #define WQE_TYPE_MASK_FIP 0x01 94282527734SSukumar Swaminathan 94382527734SSukumar Swaminathan /* Defines for ELSId */ 9448f23e9faSHans Rosenfeld #define WQE_ELSID_PLOGI 0x04 94582527734SSukumar Swaminathan #define WQE_ELSID_FLOGI 0x03 94682527734SSukumar Swaminathan #define WQE_ELSID_FDISC 0x02 94782527734SSukumar Swaminathan #define WQE_ELSID_LOGO 0x01 9488f23e9faSHans Rosenfeld #define WQE_ELSID_CMD 0x00 94982527734SSukumar Swaminathan 95082527734SSukumar Swaminathan /* RQB */ 95182527734SSukumar Swaminathan #define RQB_HEADER_SIZE 32 95282527734SSukumar Swaminathan #define RQB_DATA_SIZE 2048 95382527734SSukumar Swaminathan #define RQB_COUNT 256 95482527734SSukumar Swaminathan 95582527734SSukumar Swaminathan #define EMLXS_NUM_WQ_PAGES 4 9568f23e9faSHans Rosenfeld #define WQE_SIZE 64 9578f23e9faSHans Rosenfeld 9588f23e9faSHans Rosenfeld #define EMLXS_NUM_CQ_PAGES_V2 4 9598f23e9faSHans Rosenfeld #define CQE_SIZE 16 96082527734SSukumar Swaminathan 96182527734SSukumar Swaminathan #define EQ_DEPTH 1024 96282527734SSukumar Swaminathan #define CQ_DEPTH 256 9638f23e9faSHans Rosenfeld #define CQ_DEPTH_V2 ((4096/CQE_SIZE) * EMLXS_NUM_CQ_PAGES_V2) /* 1024 */ 9648f23e9faSHans Rosenfeld #define WQ_DEPTH ((4096/WQE_SIZE) * EMLXS_NUM_WQ_PAGES) /* 256 */ 96582527734SSukumar Swaminathan #define MQ_DEPTH 16 96682527734SSukumar Swaminathan #define RQ_DEPTH 512 /* Multiple of RQB_COUNT */ 96782527734SSukumar Swaminathan #define RQ_DEPTH_EXPONENT 9 96882527734SSukumar Swaminathan 9698f23e9faSHans Rosenfeld #define EMLXS_MAX_WQS_PER_EQ 4 9708f23e9faSHans Rosenfeld 97182527734SSukumar Swaminathan 97282527734SSukumar Swaminathan /* Principal doorbell register layouts */ 97382527734SSukumar Swaminathan typedef struct emlxs_rqdb 97482527734SSukumar Swaminathan { 97582527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 97682527734SSukumar Swaminathan uint32_t Rsvd2:2; 97782527734SSukumar Swaminathan uint32_t NumPosted:14; /* Number of entries posted */ 97882527734SSukumar Swaminathan uint32_t Rsvd1:6; 97982527734SSukumar Swaminathan uint32_t Qid:10; /* RQ id for posted RQE */ 98082527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */ 98182527734SSukumar Swaminathan 98282527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 98382527734SSukumar Swaminathan uint32_t Qid:10; /* RQ id for posted RQE */ 98482527734SSukumar Swaminathan uint32_t Rsvd1:6; 98582527734SSukumar Swaminathan uint32_t NumPosted:14; /* Number of entries posted */ 98682527734SSukumar Swaminathan uint32_t Rsvd2:2; 98782527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */ 98882527734SSukumar Swaminathan 98982527734SSukumar Swaminathan } emlxs_rqdb_t; 99082527734SSukumar Swaminathan 99182527734SSukumar Swaminathan 99282527734SSukumar Swaminathan typedef union emlxs_rqdbu 99382527734SSukumar Swaminathan { 99482527734SSukumar Swaminathan uint32_t word; 99582527734SSukumar Swaminathan emlxs_rqdb_t db; 99682527734SSukumar Swaminathan 99782527734SSukumar Swaminathan } emlxs_rqdbu_t; 99882527734SSukumar Swaminathan 99982527734SSukumar Swaminathan 100082527734SSukumar Swaminathan typedef struct emlxs_wqdb 100182527734SSukumar Swaminathan { 100282527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 100382527734SSukumar Swaminathan uint32_t NumPosted:8; /* Number of entries posted */ 100482527734SSukumar Swaminathan uint32_t Index:8; /* Queue index for posted command */ 100582527734SSukumar Swaminathan uint32_t Rsvd1:6; 100682527734SSukumar Swaminathan uint32_t Qid:10; /* WQ id for posted WQE */ 100782527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */ 100882527734SSukumar Swaminathan 100982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 101082527734SSukumar Swaminathan uint32_t Qid:10; /* WQ id for posted WQE */ 101182527734SSukumar Swaminathan uint32_t Rsvd1:6; 101282527734SSukumar Swaminathan uint32_t Index:8; /* Queue index for posted command */ 101382527734SSukumar Swaminathan uint32_t NumPosted:8; /* Number of entries posted */ 101482527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */ 101582527734SSukumar Swaminathan 101682527734SSukumar Swaminathan } emlxs_wqdb_t; 101782527734SSukumar Swaminathan 101882527734SSukumar Swaminathan 101982527734SSukumar Swaminathan typedef union emlxs_wqdbu 102082527734SSukumar Swaminathan { 102182527734SSukumar Swaminathan uint32_t word; 102282527734SSukumar Swaminathan emlxs_wqdb_t db; 102382527734SSukumar Swaminathan 102482527734SSukumar Swaminathan } emlxs_wqdbu_t; 102582527734SSukumar Swaminathan 102682527734SSukumar Swaminathan 102782527734SSukumar Swaminathan typedef struct emlxs_cqdb 102882527734SSukumar Swaminathan { 102982527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 103082527734SSukumar Swaminathan uint32_t NumPosted:2; /* Number of entries posted */ 103182527734SSukumar Swaminathan uint32_t Rearm:1; /* Rearm CQ */ 103282527734SSukumar Swaminathan uint32_t NumPopped:13; /* Number of CQ entries processed */ 1033*e2d1a434SCarsten Grzemba uint32_t Qid_hi:5; 103482527734SSukumar Swaminathan uint32_t Event:1; /* 1 if processed entry is EQE */ 103582527734SSukumar Swaminathan /* 0 if processed entry is CQE */ 103682527734SSukumar Swaminathan uint32_t Qid:10; /* CQ id for posted CQE */ 103782527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */ 103882527734SSukumar Swaminathan 103982527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 104082527734SSukumar Swaminathan uint32_t Qid:10; /* CQ id for posted CQE */ 104182527734SSukumar Swaminathan uint32_t Event:1; /* 1 if processed entry is EQE */ 104282527734SSukumar Swaminathan /* 0 if processed entry is CQE */ 1043*e2d1a434SCarsten Grzemba uint32_t Qid_hi:5; 104482527734SSukumar Swaminathan uint32_t NumPopped:13; /* Number of CQ entries processed */ 104582527734SSukumar Swaminathan uint32_t Rearm:1; /* Rearm CQ */ 104682527734SSukumar Swaminathan uint32_t NumPosted:2; /* Number of entries posted */ 104782527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */ 104882527734SSukumar Swaminathan 104982527734SSukumar Swaminathan } emlxs_cqdb_t; 105082527734SSukumar Swaminathan 1051*e2d1a434SCarsten Grzemba typedef struct emlxs_cqdb6 1052*e2d1a434SCarsten Grzemba { 1053*e2d1a434SCarsten Grzemba #ifdef EMLXS_BIG_ENDIAN 1054*e2d1a434SCarsten Grzemba uint32_t NumPosted:2; /* Number of entries posted */ 1055*e2d1a434SCarsten Grzemba uint32_t Rearm:1; /* Rearm CQ */ 1056*e2d1a434SCarsten Grzemba uint32_t NumPopped:13; /* Number of CQ entries processed */ 1057*e2d1a434SCarsten Grzemba uint32_t Qid:16; /* CQ id for posted CQE */ 1058*e2d1a434SCarsten Grzemba #endif /* EMLXS_BIG_ENDIAN */ 1059*e2d1a434SCarsten Grzemba 1060*e2d1a434SCarsten Grzemba #ifdef EMLXS_LITTLE_ENDIAN 1061*e2d1a434SCarsten Grzemba uint32_t Qid:16; /* CQ id for posted CQE */ 1062*e2d1a434SCarsten Grzemba uint32_t NumPopped:13; /* Number of CQ entries processed */ 1063*e2d1a434SCarsten Grzemba uint32_t Rearm:1; /* Rearm CQ */ 1064*e2d1a434SCarsten Grzemba uint32_t NumPosted:2; /* Number of entries posted */ 1065*e2d1a434SCarsten Grzemba #endif /* EMLXS_LITTLE_ENDIAN */ 106682527734SSukumar Swaminathan 1067*e2d1a434SCarsten Grzemba } emlxs_cqdb6_t; 1068*e2d1a434SCarsten Grzemba 1069*e2d1a434SCarsten Grzemba typedef union 107082527734SSukumar Swaminathan { 107182527734SSukumar Swaminathan uint32_t word; 1072*e2d1a434SCarsten Grzemba emlxs_cqdb_t db2; /* if_type 0,2 */ 1073*e2d1a434SCarsten Grzemba emlxs_cqdb6_t db6; /* if_type 6 */ 1074*e2d1a434SCarsten Grzemba } emlxs_cqdb_u; 107582527734SSukumar Swaminathan 107682527734SSukumar Swaminathan typedef struct emlxs_eqdb 107782527734SSukumar Swaminathan { 107882527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 107982527734SSukumar Swaminathan uint32_t Rsvd2:2; 108082527734SSukumar Swaminathan uint32_t Rearm:1; /* Rearm EQ */ 108182527734SSukumar Swaminathan uint32_t NumPopped:13; /* Number of CQ entries processed */ 1082*e2d1a434SCarsten Grzemba uint32_t Qid_hi:5; 108382527734SSukumar Swaminathan uint32_t Event:1; /* True iff processed entry is EQE */ 108482527734SSukumar Swaminathan uint32_t Clear:1; /* clears EQ interrupt when set */ 108582527734SSukumar Swaminathan uint32_t Qid:9; /* EQ id for posted EQE */ 108682527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */ 108782527734SSukumar Swaminathan 108882527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 108982527734SSukumar Swaminathan uint32_t Qid:9; /* EQ id for posted EQE */ 109082527734SSukumar Swaminathan uint32_t Clear:1; /* clears EQ interrupt when set */ 1091*e2d1a434SCarsten Grzemba uint32_t Event:1; /* True if processed entry is EQE */ 1092*e2d1a434SCarsten Grzemba uint32_t Qid_hi:5; 1093*e2d1a434SCarsten Grzemba uint32_t NumPopped:13; /* Number of EQ entries processed */ 109482527734SSukumar Swaminathan uint32_t Rearm:1; /* Rearm EQ */ 109582527734SSukumar Swaminathan uint32_t Rsvd2:2; 109682527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */ 109782527734SSukumar Swaminathan 109882527734SSukumar Swaminathan } emlxs_eqdb_t; 109982527734SSukumar Swaminathan 1100*e2d1a434SCarsten Grzemba typedef struct emlxs_eqdb6 1101*e2d1a434SCarsten Grzemba { 1102*e2d1a434SCarsten Grzemba #ifdef EMLXS_BIG_ENDIAN 1103*e2d1a434SCarsten Grzemba uint32_t NumPosted:2; /* Number of entries posted */ 1104*e2d1a434SCarsten Grzemba uint32_t Rearm:1; /* Rearm CQ */ 1105*e2d1a434SCarsten Grzemba uint32_t NumPopped:13; /* Number of CQ entries processed */ 1106*e2d1a434SCarsten Grzemba uint32_t Rsvd1:4; 1107*e2d1a434SCarsten Grzemba uint32_t Qid:12; /* EQ id for posted EQE */ 1108*e2d1a434SCarsten Grzemba #endif /* EMLXS_BIG_ENDIAN */ 1109*e2d1a434SCarsten Grzemba 1110*e2d1a434SCarsten Grzemba #ifdef EMLXS_LITTLE_ENDIAN 1111*e2d1a434SCarsten Grzemba uint32_t Qid:12; /* EQ id for posted EQE */ 1112*e2d1a434SCarsten Grzemba uint32_t Rsvd1:4; 1113*e2d1a434SCarsten Grzemba uint32_t NumPopped:13; /* Number of EQ entries processed */ 1114*e2d1a434SCarsten Grzemba uint32_t Rearm:1; /* Rearm EQ */ 1115*e2d1a434SCarsten Grzemba uint32_t NumPosted:2; /* Number of entries posted */ 1116*e2d1a434SCarsten Grzemba #endif /* EMLXS_LITTLE_ENDIAN */ 111782527734SSukumar Swaminathan 1118*e2d1a434SCarsten Grzemba } emlxs_eqdb6_t; 1119*e2d1a434SCarsten Grzemba 1120*e2d1a434SCarsten Grzemba 1121*e2d1a434SCarsten Grzemba typedef union 112282527734SSukumar Swaminathan { 112382527734SSukumar Swaminathan uint32_t word; 1124*e2d1a434SCarsten Grzemba emlxs_eqdb_t db2; /* if_type 0,2 */ 1125*e2d1a434SCarsten Grzemba emlxs_eqdb6_t db6; /* if_type 6 */ 1126*e2d1a434SCarsten Grzemba } emlxs_eqdb_u; 112782527734SSukumar Swaminathan 112882527734SSukumar Swaminathan 112982527734SSukumar Swaminathan typedef struct emlxs_mqdb 113082527734SSukumar Swaminathan { 113182527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 113282527734SSukumar Swaminathan uint32_t Rsvd2:2; 113382527734SSukumar Swaminathan uint32_t NumPosted:14; /* Number of entries posted */ 113482527734SSukumar Swaminathan uint32_t Rsvd1:5; 113582527734SSukumar Swaminathan uint32_t Qid:11; /* MQ id for posted MQE */ 113682527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */ 113782527734SSukumar Swaminathan 113882527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 113982527734SSukumar Swaminathan uint32_t Qid:11; /* MQ id for posted MQE */ 114082527734SSukumar Swaminathan uint32_t Rsvd1:5; 114182527734SSukumar Swaminathan uint32_t NumPosted:14; /* Number of entries posted */ 114282527734SSukumar Swaminathan uint32_t Rsvd2:2; 114382527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */ 114482527734SSukumar Swaminathan 114582527734SSukumar Swaminathan } emlxs_mqdb_t; 114682527734SSukumar Swaminathan 114782527734SSukumar Swaminathan 114882527734SSukumar Swaminathan typedef union emlxs_mqdbu 114982527734SSukumar Swaminathan { 115082527734SSukumar Swaminathan uint32_t word; 115182527734SSukumar Swaminathan emlxs_mqdb_t db; 115282527734SSukumar Swaminathan 115382527734SSukumar Swaminathan } emlxs_mqdbu_t; 115482527734SSukumar Swaminathan 115582527734SSukumar Swaminathan 115682527734SSukumar Swaminathan #ifdef __cplusplus 115782527734SSukumar Swaminathan } 115882527734SSukumar Swaminathan #endif 115982527734SSukumar Swaminathan 116082527734SSukumar Swaminathan #endif /* _EMLXS_QUEUE_H */ 1161