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 * 882527734SSukumar Swaminathan * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 982527734SSukumar Swaminathan * or http://www.opensolaris.org/os/licensing. 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 /* 2382527734SSukumar Swaminathan * Copyright 2009 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 */ 14482527734SSukumar Swaminathan uint32_t port: 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; 16582527734SSukumar Swaminathan uint32_t port: 1; 16682527734SSukumar Swaminathan uint32_t Valid: 1; /* Word 3 */ 16782527734SSukumar Swaminathan #endif 16882527734SSukumar Swaminathan } CQE_UnsolRcv_t; 16982527734SSukumar Swaminathan 17082527734SSukumar Swaminathan /* Status defines */ 17182527734SSukumar Swaminathan #define RQ_STATUS_SUCCESS 0x10 17282527734SSukumar Swaminathan #define RQ_STATUS_BUFLEN_EXCEEDED 0x11 17382527734SSukumar Swaminathan #define RQ_STATUS_NEED_BUFFER 0x12 17482527734SSukumar Swaminathan #define RQ_STATUS_FRAME_DISCARDED 0x13 17582527734SSukumar Swaminathan 17682527734SSukumar Swaminathan 17782527734SSukumar Swaminathan typedef struct CQE_XRI_Abort 17882527734SSukumar Swaminathan { 17982527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 18082527734SSukumar Swaminathan uint16_t Rsvd1; /* Word 0 */ 18182527734SSukumar Swaminathan uint8_t Status; 18282527734SSukumar Swaminathan uint8_t Rsvd2; 18382527734SSukumar Swaminathan 18482527734SSukumar Swaminathan uint32_t rjtStatus; /* Word 1 */ 18582527734SSukumar Swaminathan 18682527734SSukumar Swaminathan uint16_t RemoteXID; /* Word 2 */ 18782527734SSukumar Swaminathan uint16_t XRI; 18882527734SSukumar Swaminathan 18982527734SSukumar Swaminathan uint32_t Valid: 1; /* Word 3 */ 19082527734SSukumar Swaminathan uint32_t IA: 1; 19182527734SSukumar Swaminathan uint32_t BR: 1; 19282527734SSukumar Swaminathan uint32_t EO: 1; 19382527734SSukumar Swaminathan uint32_t Rsvd3: 4; 19482527734SSukumar Swaminathan uint32_t Code: 8; 19582527734SSukumar Swaminathan uint32_t Rsvd4: 16; 19682527734SSukumar Swaminathan #endif 19782527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 19882527734SSukumar Swaminathan uint8_t Rsvd2; 19982527734SSukumar Swaminathan uint8_t Status; 20082527734SSukumar Swaminathan uint16_t Rsvd1; /* Word 0 */ 20182527734SSukumar Swaminathan 20282527734SSukumar Swaminathan uint32_t rjtStatus; /* Word 1 */ 20382527734SSukumar Swaminathan 20482527734SSukumar Swaminathan uint16_t XRI; 20582527734SSukumar Swaminathan uint16_t RemoteXID; /* Word 2 */ 20682527734SSukumar Swaminathan 20782527734SSukumar Swaminathan uint32_t Rsvd4: 16; 20882527734SSukumar Swaminathan uint32_t Code: 8; 20982527734SSukumar Swaminathan uint32_t Rsvd3: 4; 21082527734SSukumar Swaminathan uint32_t EO: 1; 21182527734SSukumar Swaminathan uint32_t BR: 1; 21282527734SSukumar Swaminathan uint32_t IA: 1; 21382527734SSukumar Swaminathan uint32_t Valid: 1; /* Word 3 */ 21482527734SSukumar Swaminathan #endif 21582527734SSukumar Swaminathan } CQE_XRI_Abort_t; 21682527734SSukumar Swaminathan 21782527734SSukumar Swaminathan 21882527734SSukumar Swaminathan 21982527734SSukumar Swaminathan #define CQE_VALID 0x80000000 /* Mask for CQE valid */ 22082527734SSukumar Swaminathan 22182527734SSukumar Swaminathan /* Defines for CQE Codes */ 22282527734SSukumar Swaminathan #define CQE_TYPE_WQ_COMPLETION 1 22382527734SSukumar Swaminathan #define CQE_TYPE_RELEASE_WQE 2 22482527734SSukumar Swaminathan #define CQE_TYPE_UNSOL_RCV 4 22582527734SSukumar Swaminathan #define CQE_TYPE_XRI_ABORTED 5 22682527734SSukumar Swaminathan 22782527734SSukumar Swaminathan 22882527734SSukumar Swaminathan typedef struct CQE_ASYNC_FCOE 22982527734SSukumar Swaminathan { 23082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 23182527734SSukumar Swaminathan uint32_t ref_index; /* Word 0 */ 23282527734SSukumar Swaminathan 23382527734SSukumar Swaminathan uint16_t evt_type; /* Word 1 */ 23482527734SSukumar Swaminathan uint16_t fcf_count; 23582527734SSukumar Swaminathan 23682527734SSukumar Swaminathan uint32_t event_tag; /* Word 2 */ 23782527734SSukumar Swaminathan 23882527734SSukumar Swaminathan uint32_t valid: 1; /* Word 3 */ 23982527734SSukumar Swaminathan uint32_t async_evt: 1; 24082527734SSukumar Swaminathan uint32_t Rsvd2: 6; 24182527734SSukumar Swaminathan uint32_t event_type: 8; 24282527734SSukumar Swaminathan uint32_t event_code: 8; 24382527734SSukumar Swaminathan uint32_t Rsvd3: 8; 24482527734SSukumar Swaminathan #endif 24582527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 24682527734SSukumar Swaminathan uint32_t ref_index; /* Word 0 */ 24782527734SSukumar Swaminathan 24882527734SSukumar Swaminathan uint16_t fcf_count; 24982527734SSukumar Swaminathan uint16_t evt_type; /* Word 1 */ 25082527734SSukumar Swaminathan 25182527734SSukumar Swaminathan uint32_t event_tag; /* Word 2 */ 25282527734SSukumar Swaminathan 25382527734SSukumar Swaminathan uint32_t Rsvd3: 8; 25482527734SSukumar Swaminathan uint32_t event_code: 8; 25582527734SSukumar Swaminathan uint32_t event_type: 8; 25682527734SSukumar Swaminathan uint32_t Rsvd2: 6; 25782527734SSukumar Swaminathan uint32_t async_evt: 1; 25882527734SSukumar Swaminathan uint32_t valid: 1; /* Word 3 */ 25982527734SSukumar Swaminathan #endif 26082527734SSukumar Swaminathan } CQE_ASYNC_FCOE_t; 26182527734SSukumar Swaminathan 26282527734SSukumar Swaminathan typedef struct CQE_ASYNC 26382527734SSukumar Swaminathan { 26482527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 26582527734SSukumar Swaminathan uint8_t port_speed; /* Word 0 */ 26682527734SSukumar Swaminathan uint8_t port_duplex; 26782527734SSukumar Swaminathan uint8_t link_status; 26882527734SSukumar Swaminathan uint8_t phys_port; 26982527734SSukumar Swaminathan 270*b3660a96SSukumar Swaminathan uint16_t qos_link_speed; /* Word 1 */ 271*b3660a96SSukumar Swaminathan uint8_t Rsvd1; 272*b3660a96SSukumar Swaminathan uint8_t port_fault; 27382527734SSukumar Swaminathan 27482527734SSukumar Swaminathan uint32_t event_tag; /* Word 2 */ 27582527734SSukumar Swaminathan 27682527734SSukumar Swaminathan uint32_t valid: 1; /* Word 3 */ 27782527734SSukumar Swaminathan uint32_t async_evt: 1; 27882527734SSukumar Swaminathan uint32_t Rsvd2: 6; 27982527734SSukumar Swaminathan uint32_t event_type: 8; 28082527734SSukumar Swaminathan uint32_t event_code: 8; 28182527734SSukumar Swaminathan uint32_t Rsvd3: 8; 28282527734SSukumar Swaminathan #endif 28382527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 28482527734SSukumar Swaminathan uint8_t phys_port; 28582527734SSukumar Swaminathan uint8_t link_status; 28682527734SSukumar Swaminathan uint8_t port_duplex; 28782527734SSukumar Swaminathan uint8_t port_speed; /* Word 0 */ 28882527734SSukumar Swaminathan 289*b3660a96SSukumar Swaminathan uint8_t port_fault; /* Word 1 */ 290*b3660a96SSukumar Swaminathan uint8_t Rsvd1; 291*b3660a96SSukumar Swaminathan uint16_t qos_link_speed; 29282527734SSukumar Swaminathan 29382527734SSukumar Swaminathan uint32_t event_tag; /* Word 2 */ 29482527734SSukumar Swaminathan 29582527734SSukumar Swaminathan uint32_t Rsvd3: 8; 29682527734SSukumar Swaminathan uint32_t event_code: 8; 29782527734SSukumar Swaminathan uint32_t event_type: 8; 29882527734SSukumar Swaminathan uint32_t Rsvd2: 6; 29982527734SSukumar Swaminathan uint32_t async_evt: 1; 30082527734SSukumar Swaminathan uint32_t valid: 1; /* Word 3 */ 30182527734SSukumar Swaminathan #endif 30282527734SSukumar Swaminathan } CQE_ASYNC_t; 30382527734SSukumar Swaminathan 30482527734SSukumar Swaminathan /* port_speed defines */ 30582527734SSukumar Swaminathan #define PHY_1GHZ_LINK 3 30682527734SSukumar Swaminathan #define PHY_10GHZ_LINK 4 30782527734SSukumar Swaminathan 30882527734SSukumar Swaminathan /* event_code defines */ 30982527734SSukumar Swaminathan #define ASYNC_EVENT_CODE_LINK_STATE 1 31082527734SSukumar Swaminathan #define ASYNC_EVENT_CODE_FCOE_FIP 2 31182527734SSukumar Swaminathan #define ASYNC_EVENT_CODE_DCBX 3 31282527734SSukumar Swaminathan 31382527734SSukumar Swaminathan /* LINK_STATE - link_status defines */ 31482527734SSukumar Swaminathan #define ASYNC_EVENT_PHYS_LINK_DOWN 0 31582527734SSukumar Swaminathan #define ASYNC_EVENT_PHYS_LINK_UP 1 31682527734SSukumar Swaminathan #define ASYNC_EVENT_LOGICAL_LINK_DOWN 2 31782527734SSukumar Swaminathan #define ASYNC_EVENT_LOGICAL_LINK_UP 3 31882527734SSukumar Swaminathan 31982527734SSukumar Swaminathan /* FCOE_FIP - evt_type defines */ 32082527734SSukumar Swaminathan #define ASYNC_EVENT_NEW_FCF_DISC 1 32182527734SSukumar Swaminathan #define ASYNC_EVENT_FCF_TABLE_FULL 2 32282527734SSukumar Swaminathan #define ASYNC_EVENT_FCF_DEAD 3 32382527734SSukumar Swaminathan #define ASYNC_EVENT_VIRT_LINK_CLEAR 4 32482527734SSukumar Swaminathan 32582527734SSukumar Swaminathan typedef struct CQE_MBOX 32682527734SSukumar Swaminathan { 32782527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 32882527734SSukumar Swaminathan uint16_t extend_status; /* Word 0 */ 32982527734SSukumar Swaminathan uint16_t cmpl_status; 33082527734SSukumar Swaminathan 33182527734SSukumar Swaminathan uint32_t tag_low; /* Word 1 */ 33282527734SSukumar Swaminathan uint32_t tag_high; /* Word 2 */ 33382527734SSukumar Swaminathan 33482527734SSukumar Swaminathan uint32_t valid: 1; /* Word 3 */ 33582527734SSukumar Swaminathan uint32_t async_evt: 1; 33682527734SSukumar Swaminathan uint32_t hpi: 1; 33782527734SSukumar Swaminathan uint32_t completed: 1; 33882527734SSukumar Swaminathan uint32_t consumed: 1; 33982527734SSukumar Swaminathan uint32_t Rsvd1: 27; 34082527734SSukumar Swaminathan #endif 34182527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 34282527734SSukumar Swaminathan uint16_t cmpl_status; 34382527734SSukumar Swaminathan uint16_t extend_status; /* Word 0 */ 34482527734SSukumar Swaminathan 34582527734SSukumar Swaminathan uint32_t tag_low; /* Word 1 */ 34682527734SSukumar Swaminathan uint32_t tag_high; /* Word 2 */ 34782527734SSukumar Swaminathan 34882527734SSukumar Swaminathan uint32_t Rsvd1: 27; 34982527734SSukumar Swaminathan uint32_t consumed: 1; 35082527734SSukumar Swaminathan uint32_t completed: 1; 35182527734SSukumar Swaminathan uint32_t hpi: 1; 35282527734SSukumar Swaminathan uint32_t async_evt: 1; 35382527734SSukumar Swaminathan uint32_t valid: 1; /* Word 3 */ 35482527734SSukumar Swaminathan #endif 35582527734SSukumar Swaminathan } CQE_MBOX_t; 35682527734SSukumar Swaminathan 35782527734SSukumar Swaminathan typedef union 35882527734SSukumar Swaminathan { 35982527734SSukumar Swaminathan uint32_t word[4]; 36082527734SSukumar Swaminathan 36182527734SSukumar Swaminathan /* Group 1 types */ 36282527734SSukumar Swaminathan CQE_ASYNC_t cqAsyncEntry; 36382527734SSukumar Swaminathan CQE_ASYNC_FCOE_t cqAsyncFCOEEntry; 36482527734SSukumar Swaminathan CQE_MBOX_t cqMboxEntry; 36582527734SSukumar Swaminathan 36682527734SSukumar Swaminathan /* Group 2 types */ 36782527734SSukumar Swaminathan CQE_CmplWQ_t cqCmplEntry; 36882527734SSukumar Swaminathan CQE_RelWQ_t cqRelEntry; 36982527734SSukumar Swaminathan CQE_UnsolRcv_t cqUnsolRcvEntry; 37082527734SSukumar Swaminathan CQE_XRI_Abort_t cqXRIEntry; 37182527734SSukumar Swaminathan } CQE_u; 37282527734SSukumar Swaminathan 37382527734SSukumar Swaminathan /* RQ entries */ 37482527734SSukumar Swaminathan typedef struct RQE 37582527734SSukumar Swaminathan { 37682527734SSukumar Swaminathan uint32_t AddrHi; 37782527734SSukumar Swaminathan uint32_t AddrLo; 37882527734SSukumar Swaminathan 37982527734SSukumar Swaminathan } RQE_t; 38082527734SSukumar Swaminathan 38182527734SSukumar Swaminathan 38282527734SSukumar Swaminathan /* Definitions for WQEs */ 38382527734SSukumar Swaminathan typedef struct 38482527734SSukumar Swaminathan { 38582527734SSukumar Swaminathan ULP_BDE64 Payload; 38682527734SSukumar Swaminathan uint32_t PayloadLength; 38782527734SSukumar Swaminathan 38882527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 38982527734SSukumar Swaminathan uint32_t Rsvd1: 6; 39082527734SSukumar Swaminathan uint32_t VF: 1; 39182527734SSukumar Swaminathan uint32_t SP: 1; 39282527734SSukumar Swaminathan uint32_t LocalId: 24; 39382527734SSukumar Swaminathan 39482527734SSukumar Swaminathan uint32_t Rsvd2: 8; 39582527734SSukumar Swaminathan uint32_t RemoteId: 24; 39682527734SSukumar Swaminathan #endif 39782527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 39882527734SSukumar Swaminathan uint32_t LocalId: 24; 39982527734SSukumar Swaminathan uint32_t SP: 1; 40082527734SSukumar Swaminathan uint32_t VF: 1; 40182527734SSukumar Swaminathan uint32_t Rsvd1: 6; 40282527734SSukumar Swaminathan 40382527734SSukumar Swaminathan uint32_t RemoteId: 24; 40482527734SSukumar Swaminathan uint32_t Rsvd2: 8; 40582527734SSukumar Swaminathan #endif 40682527734SSukumar Swaminathan 40782527734SSukumar Swaminathan } ELS_REQ_WQE; 40882527734SSukumar Swaminathan 40982527734SSukumar Swaminathan typedef struct 41082527734SSukumar Swaminathan { 41182527734SSukumar Swaminathan ULP_BDE64 Payload; 41282527734SSukumar Swaminathan uint32_t Rsvd1[2]; 41382527734SSukumar Swaminathan 41482527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 41582527734SSukumar Swaminathan uint32_t Rsvd2: 8; 41682527734SSukumar Swaminathan uint32_t RemoteId: 24; 41782527734SSukumar Swaminathan #endif 41882527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 41982527734SSukumar Swaminathan uint32_t RemoteId: 24; 42082527734SSukumar Swaminathan uint32_t Rsvd2: 8; 42182527734SSukumar Swaminathan #endif 42282527734SSukumar Swaminathan 42382527734SSukumar Swaminathan } ELS_RSP_WQE; 42482527734SSukumar Swaminathan 42582527734SSukumar Swaminathan typedef struct 42682527734SSukumar Swaminathan { 42782527734SSukumar Swaminathan ULP_BDE64 Payload; 42882527734SSukumar Swaminathan uint32_t PayloadLength; 42982527734SSukumar Swaminathan 43082527734SSukumar Swaminathan uint32_t Parameter; 43182527734SSukumar Swaminathan 43282527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 43382527734SSukumar Swaminathan uint32_t Rctl: 8; 43482527734SSukumar Swaminathan uint32_t Type: 8; 43582527734SSukumar Swaminathan uint32_t DFctl: 8; 43682527734SSukumar Swaminathan uint32_t Rsvd1: 4; 43782527734SSukumar Swaminathan uint32_t la: 1; 43882527734SSukumar Swaminathan uint32_t Rsvd2: 3; 43982527734SSukumar Swaminathan #endif 44082527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 44182527734SSukumar Swaminathan uint32_t Rsvd2: 3; 44282527734SSukumar Swaminathan uint32_t la: 1; 44382527734SSukumar Swaminathan uint32_t Rsvd1: 4; 44482527734SSukumar Swaminathan uint32_t DFctl: 8; 44582527734SSukumar Swaminathan uint32_t Type: 8; 44682527734SSukumar Swaminathan uint32_t Rctl: 8; 44782527734SSukumar Swaminathan #endif 44882527734SSukumar Swaminathan 44982527734SSukumar Swaminathan } GEN_REQ_WQE; 45082527734SSukumar Swaminathan 45182527734SSukumar Swaminathan typedef struct 45282527734SSukumar Swaminathan { 45382527734SSukumar Swaminathan ULP_BDE64 Payload; 45482527734SSukumar Swaminathan uint32_t PayloadLength; 45582527734SSukumar Swaminathan 45682527734SSukumar Swaminathan uint32_t Parameter; 45782527734SSukumar Swaminathan 45882527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 45982527734SSukumar Swaminathan uint32_t Rctl: 8; 46082527734SSukumar Swaminathan uint32_t Type: 8; 46182527734SSukumar Swaminathan uint32_t DFctl: 8; 46282527734SSukumar Swaminathan uint32_t ls: 1; 46382527734SSukumar Swaminathan uint32_t Rsvd1: 3; 46482527734SSukumar Swaminathan uint32_t la: 1; 46582527734SSukumar Swaminathan uint32_t si: 1; 46682527734SSukumar Swaminathan uint32_t Rsvd2: 2; 46782527734SSukumar Swaminathan #endif 46882527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 46982527734SSukumar Swaminathan uint32_t Rsvd2: 2; 47082527734SSukumar Swaminathan uint32_t si: 1; 47182527734SSukumar Swaminathan uint32_t la: 1; 47282527734SSukumar Swaminathan uint32_t Rsvd1: 3; 47382527734SSukumar Swaminathan uint32_t ls: 1; 47482527734SSukumar Swaminathan uint32_t DFctl: 8; 47582527734SSukumar Swaminathan uint32_t Type: 8; 47682527734SSukumar Swaminathan uint32_t Rctl: 8; 47782527734SSukumar Swaminathan #endif 47882527734SSukumar Swaminathan 47982527734SSukumar Swaminathan } XMIT_SEQ_WQE; 48082527734SSukumar Swaminathan 48182527734SSukumar Swaminathan typedef struct 48282527734SSukumar Swaminathan { 48382527734SSukumar Swaminathan ULP_BDE64 Payload; 48482527734SSukumar Swaminathan uint32_t PayloadLength; 48582527734SSukumar Swaminathan 48682527734SSukumar Swaminathan uint32_t TotalTransferCount; 48782527734SSukumar Swaminathan uint32_t Rsvd1; 48882527734SSukumar Swaminathan 48982527734SSukumar Swaminathan } FCP_WQE; 49082527734SSukumar Swaminathan 49182527734SSukumar Swaminathan 49282527734SSukumar Swaminathan typedef struct 49382527734SSukumar Swaminathan { 49482527734SSukumar Swaminathan uint32_t Rsvd1[3]; 49582527734SSukumar Swaminathan 49682527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 49782527734SSukumar Swaminathan uint32_t Rsvd2: 16; 49882527734SSukumar Swaminathan uint32_t Criteria: 8; 49982527734SSukumar Swaminathan uint32_t Rsvd3: 7; 50082527734SSukumar Swaminathan uint32_t IA: 1; 50182527734SSukumar Swaminathan #endif 50282527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 50382527734SSukumar Swaminathan uint32_t IA: 1; 50482527734SSukumar Swaminathan uint32_t Rsvd3: 7; 50582527734SSukumar Swaminathan uint32_t Criteria: 8; 50682527734SSukumar Swaminathan uint32_t Rsvd2: 16; 50782527734SSukumar Swaminathan #endif 50882527734SSukumar Swaminathan 50982527734SSukumar Swaminathan uint32_t Rsvd4[2]; 51082527734SSukumar Swaminathan 51182527734SSukumar Swaminathan } ABORT_WQE; 51282527734SSukumar Swaminathan 51382527734SSukumar Swaminathan #define ABORT_XRI_TAG 1 /* Abort tag is a XRITag */ 51482527734SSukumar Swaminathan #define ABORT_ABT_TAG 2 /* Abort tag is a AbortTag */ 51582527734SSukumar Swaminathan #define ABORT_REQ_TAG 3 /* Abort tag is a RequestTag */ 51682527734SSukumar Swaminathan 51782527734SSukumar Swaminathan typedef struct 51882527734SSukumar Swaminathan { 51982527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 52082527734SSukumar Swaminathan uint8_t Payload0; 52182527734SSukumar Swaminathan uint8_t Payload1; 52282527734SSukumar Swaminathan uint8_t Payload2; 52382527734SSukumar Swaminathan uint8_t Payload3; 52482527734SSukumar Swaminathan 52582527734SSukumar Swaminathan uint32_t OXId: 16; 52682527734SSukumar Swaminathan uint32_t RXId: 16; 52782527734SSukumar Swaminathan 52882527734SSukumar Swaminathan uint32_t SeqCntLow: 16; 52982527734SSukumar Swaminathan uint32_t SeqCntHigh: 16; 53082527734SSukumar Swaminathan #endif 53182527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 53282527734SSukumar Swaminathan uint8_t Payload3; 53382527734SSukumar Swaminathan uint8_t Payload2; 53482527734SSukumar Swaminathan uint8_t Payload1; 53582527734SSukumar Swaminathan uint8_t Payload0; 53682527734SSukumar Swaminathan 53782527734SSukumar Swaminathan uint32_t RXId: 16; 53882527734SSukumar Swaminathan uint32_t OXId: 16; 53982527734SSukumar Swaminathan 54082527734SSukumar Swaminathan uint32_t SeqCntHigh: 16; 54182527734SSukumar Swaminathan uint32_t SeqCntLow: 16; 54282527734SSukumar Swaminathan #endif 54382527734SSukumar Swaminathan uint32_t Rsvd1[2]; 54482527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 54582527734SSukumar Swaminathan uint32_t XO: 1; 54682527734SSukumar Swaminathan uint32_t AR: 1; 54782527734SSukumar Swaminathan uint32_t PT: 1; 54882527734SSukumar Swaminathan uint32_t Rsvd2: 5; 54982527734SSukumar Swaminathan uint32_t RemoteId: 24; 55082527734SSukumar Swaminathan #endif 55182527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 55282527734SSukumar Swaminathan uint32_t RemoteId: 24; 55382527734SSukumar Swaminathan uint32_t Rsvd2: 5; 55482527734SSukumar Swaminathan uint32_t PT: 1; 55582527734SSukumar Swaminathan uint32_t AR: 1; 55682527734SSukumar Swaminathan uint32_t XO: 1; 55782527734SSukumar Swaminathan #endif 55882527734SSukumar Swaminathan 55982527734SSukumar Swaminathan } BLS_WQE; 56082527734SSukumar Swaminathan 56182527734SSukumar Swaminathan 56282527734SSukumar Swaminathan typedef struct 56382527734SSukumar Swaminathan { 56482527734SSukumar Swaminathan uint32_t Rsvd1[5]; 56582527734SSukumar Swaminathan 56682527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 56782527734SSukumar Swaminathan uint32_t XO: 1; 56882527734SSukumar Swaminathan uint32_t Rsvd2: 7; 56982527734SSukumar Swaminathan uint32_t RemoteId: 24; 57082527734SSukumar Swaminathan #endif 57182527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 57282527734SSukumar Swaminathan uint32_t RemoteId: 24; 57382527734SSukumar Swaminathan uint32_t Rsvd2: 7; 57482527734SSukumar Swaminathan uint32_t XO: 1; 57582527734SSukumar Swaminathan #endif 57682527734SSukumar Swaminathan 57782527734SSukumar Swaminathan } CREATE_XRI_WQE; 57882527734SSukumar Swaminathan 57982527734SSukumar Swaminathan typedef struct emlxs_wqe 58082527734SSukumar Swaminathan { 58182527734SSukumar Swaminathan /* Words 0-5 */ 58282527734SSukumar Swaminathan union 58382527734SSukumar Swaminathan { 58482527734SSukumar Swaminathan uint32_t word[6]; /* Words 0-5: cmd specific */ 58582527734SSukumar Swaminathan ELS_REQ_WQE ElsCmd; /* ELS command overlay */ 58682527734SSukumar Swaminathan GEN_REQ_WQE GenReq; /* CT command overlay */ 58782527734SSukumar Swaminathan FCP_WQE FcpCmd; /* FCP command overlay */ 58882527734SSukumar Swaminathan ELS_RSP_WQE ElsRsp; /* ELS response overlay */ 58982527734SSukumar Swaminathan ABORT_WQE Abort; /* Abort overlay */ 59082527734SSukumar Swaminathan BLS_WQE BlsRsp; /* BLS overlay */ 59182527734SSukumar Swaminathan CREATE_XRI_WQE CreateXri; /* Create XRI */ 59282527734SSukumar Swaminathan XMIT_SEQ_WQE XmitSeq; /* Xmit Sequence */ 59382527734SSukumar Swaminathan } un; 59482527734SSukumar Swaminathan 59582527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 59682527734SSukumar Swaminathan /* Word 6 */ 59782527734SSukumar Swaminathan uint16_t ContextTag; /* Context Tag */ 59882527734SSukumar Swaminathan uint16_t XRITag; /* XRItag */ 59982527734SSukumar Swaminathan /* Word 7 */ 60082527734SSukumar Swaminathan uint32_t Timer: 8; /* TOV */ 60182527734SSukumar Swaminathan uint32_t Rsvd2: 1; 60282527734SSukumar Swaminathan uint32_t ERP: 1; /* ERP */ 60382527734SSukumar Swaminathan uint32_t PU: 2; /* PU */ 60482527734SSukumar Swaminathan uint32_t Rsvd1: 1; 60582527734SSukumar Swaminathan uint32_t Class: 3; /* COS */ 60682527734SSukumar Swaminathan uint32_t Command: 8; /* Command Code */ 60782527734SSukumar Swaminathan uint32_t Status: 4; /* Final Status */ 60882527734SSukumar Swaminathan uint32_t ContextType: 2; /* Context Type */ 60982527734SSukumar Swaminathan uint32_t Rsvd0: 2; 61082527734SSukumar Swaminathan /* Word 8 */ 61182527734SSukumar Swaminathan uint32_t AbortTag; /* Abort Tag */ 61282527734SSukumar Swaminathan /* Word 9 */ 61382527734SSukumar Swaminathan uint16_t OXId; /* OXId on xmitted rsp */ 61482527734SSukumar Swaminathan uint16_t RequestTag; /* Request Tag */ 61582527734SSukumar Swaminathan /* Word 10 */ 61682527734SSukumar Swaminathan uint32_t CCP: 8; /* CCP */ 61782527734SSukumar Swaminathan uint32_t CCPE: 1; /* CCPEnabled */ 61882527734SSukumar Swaminathan uint32_t Rsvd6: 1; 61982527734SSukumar Swaminathan uint32_t XC: 1; /* Exchange Create */ 62082527734SSukumar Swaminathan uint32_t Rsvd5: 1; 62182527734SSukumar Swaminathan uint32_t PV: 1; /* PRIValid */ 62282527734SSukumar Swaminathan uint32_t PRI: 3; /* PRI */ 62382527734SSukumar Swaminathan uint32_t Rsvd4: 16; 62482527734SSukumar Swaminathan /* Word 11 */ 62582527734SSukumar Swaminathan uint32_t Rsvd9: 6; 62682527734SSukumar Swaminathan uint32_t CQId: 10; /* CompletionQueueID */ 62782527734SSukumar Swaminathan uint32_t Rsvd8: 8; 62882527734SSukumar Swaminathan uint32_t WQEC: 1; /* Request WQE consumed CQE */ 62982527734SSukumar Swaminathan uint32_t Rsvd7: 1; 63082527734SSukumar Swaminathan uint32_t ELSId: 2; 63182527734SSukumar Swaminathan uint32_t CmdType: 4; /* Command Type */ 63282527734SSukumar Swaminathan #endif 63382527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 63482527734SSukumar Swaminathan /* Word 6 */ 63582527734SSukumar Swaminathan uint16_t XRITag; /* XRItag */ 63682527734SSukumar Swaminathan uint16_t ContextTag; /* Context Tag */ 63782527734SSukumar Swaminathan /* Word 7 */ 63882527734SSukumar Swaminathan uint32_t Rsvd0: 2; 63982527734SSukumar Swaminathan uint32_t ContextType: 2; /* Context Type */ 64082527734SSukumar Swaminathan uint32_t Status: 4; /* Final Status */ 64182527734SSukumar Swaminathan uint32_t Command: 8; /* Command Code */ 64282527734SSukumar Swaminathan uint32_t Class: 3; /* COS */ 64382527734SSukumar Swaminathan uint32_t Rsvd1: 1; 64482527734SSukumar Swaminathan uint32_t PU: 2; /* PU */ 64582527734SSukumar Swaminathan uint32_t ERP: 1; /* ERP */ 64682527734SSukumar Swaminathan uint32_t Rsvd2: 1; 64782527734SSukumar Swaminathan uint32_t Timer: 8; /* TOV */ 64882527734SSukumar Swaminathan /* Word 8 */ 64982527734SSukumar Swaminathan uint32_t AbortTag; /* Abort Tag */ 65082527734SSukumar Swaminathan /* Word 9 */ 65182527734SSukumar Swaminathan uint16_t RequestTag; /* Request Tag */ 65282527734SSukumar Swaminathan uint16_t OXId; /* OXId on xmitted rsp */ 65382527734SSukumar Swaminathan /* Word 10 */ 65482527734SSukumar Swaminathan uint32_t Rsvd4: 16; 65582527734SSukumar Swaminathan uint32_t PRI: 3; /* PRI */ 65682527734SSukumar Swaminathan uint32_t PV: 1; /* PRIValid */ 65782527734SSukumar Swaminathan uint32_t Rsvd5: 1; 65882527734SSukumar Swaminathan uint32_t XC: 1; /* Exchange Create */ 65982527734SSukumar Swaminathan uint32_t Rsvd6: 1; 66082527734SSukumar Swaminathan uint32_t CCPE: 1; /* CCPEnabled */ 66182527734SSukumar Swaminathan uint32_t CCP: 8; /* CCP */ 66282527734SSukumar Swaminathan /* Word 11 */ 66382527734SSukumar Swaminathan uint32_t CmdType: 4; /* Command Type */ 66482527734SSukumar Swaminathan uint32_t ELSId: 2; 66582527734SSukumar Swaminathan uint32_t Rsvd7: 1; 66682527734SSukumar Swaminathan uint32_t WQEC: 1; /* Request WQE consumed CQE */ 66782527734SSukumar Swaminathan uint32_t Rsvd8: 8; 66882527734SSukumar Swaminathan uint32_t CQId: 10; /* CompletionQueueID */ 66982527734SSukumar Swaminathan uint32_t Rsvd9: 6; 67082527734SSukumar Swaminathan #endif 67182527734SSukumar Swaminathan 67282527734SSukumar Swaminathan /* Words 12-15 */ 67382527734SSukumar Swaminathan uint32_t CmdSpecific[4]; /* Word12-15: commandspecific */ 67482527734SSukumar Swaminathan } emlxs_wqe_t; 67582527734SSukumar Swaminathan 67682527734SSukumar Swaminathan /* Defines for ContextType */ 67782527734SSukumar Swaminathan #define WQE_RPI_CONTEXT 0 67882527734SSukumar Swaminathan #define WQE_VPI_CONTEXT 1 67982527734SSukumar Swaminathan #define WQE_VFI_CONTEXT 2 68082527734SSukumar Swaminathan #define WQE_FCFI_CONTEXT 3 68182527734SSukumar Swaminathan 68282527734SSukumar Swaminathan /* Defines for CmdType */ 68382527734SSukumar Swaminathan #define WQE_TYPE_FCP_DATA_IN 0x00 68482527734SSukumar Swaminathan #define WQE_TYPE_FCP_DATA_OUT 0x01 68582527734SSukumar Swaminathan #define WQE_TYPE_ELS 0x0C 68682527734SSukumar Swaminathan #define WQE_TYPE_GEN 0x08 68782527734SSukumar Swaminathan #define WQE_TYPE_ABORT 0x08 68882527734SSukumar Swaminathan #define WQE_TYPE_MASK_FIP 0x01 68982527734SSukumar Swaminathan 69082527734SSukumar Swaminathan /* Defines for ELSId */ 69182527734SSukumar Swaminathan #define WQE_ELSID_FLOGI 0x03 69282527734SSukumar Swaminathan #define WQE_ELSID_FDISC 0x02 69382527734SSukumar Swaminathan #define WQE_ELSID_LOGO 0x01 69482527734SSukumar Swaminathan #define WQE_ELSID_CMD 0x0 69582527734SSukumar Swaminathan 69682527734SSukumar Swaminathan /* RQB */ 69782527734SSukumar Swaminathan #define RQB_HEADER_SIZE 32 69882527734SSukumar Swaminathan #define RQB_DATA_SIZE 2048 69982527734SSukumar Swaminathan #define RQB_COUNT 256 70082527734SSukumar Swaminathan 70182527734SSukumar Swaminathan #define EMLXS_NUM_WQ_PAGES 4 70282527734SSukumar Swaminathan 70382527734SSukumar Swaminathan #define EQ_DEPTH 1024 70482527734SSukumar Swaminathan #define CQ_DEPTH 256 70582527734SSukumar Swaminathan #define WQ_DEPTH (64 * EMLXS_NUM_WQ_PAGES) 70682527734SSukumar Swaminathan #define MQ_DEPTH 16 70782527734SSukumar Swaminathan #define RQ_DEPTH 512 /* Multiple of RQB_COUNT */ 70882527734SSukumar Swaminathan #define RQ_DEPTH_EXPONENT 9 70982527734SSukumar Swaminathan 71082527734SSukumar Swaminathan 71182527734SSukumar Swaminathan /* Principal doorbell register layouts */ 71282527734SSukumar Swaminathan typedef struct emlxs_rqdb 71382527734SSukumar Swaminathan { 71482527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 71582527734SSukumar Swaminathan uint32_t Rsvd2:2; 71682527734SSukumar Swaminathan uint32_t NumPosted:14; /* Number of entries posted */ 71782527734SSukumar Swaminathan uint32_t Rsvd1:6; 71882527734SSukumar Swaminathan uint32_t Qid:10; /* RQ id for posted RQE */ 71982527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */ 72082527734SSukumar Swaminathan 72182527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 72282527734SSukumar Swaminathan uint32_t Qid:10; /* RQ id for posted RQE */ 72382527734SSukumar Swaminathan uint32_t Rsvd1:6; 72482527734SSukumar Swaminathan uint32_t NumPosted:14; /* Number of entries posted */ 72582527734SSukumar Swaminathan uint32_t Rsvd2:2; 72682527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */ 72782527734SSukumar Swaminathan 72882527734SSukumar Swaminathan } emlxs_rqdb_t; 72982527734SSukumar Swaminathan 73082527734SSukumar Swaminathan 73182527734SSukumar Swaminathan typedef union emlxs_rqdbu 73282527734SSukumar Swaminathan { 73382527734SSukumar Swaminathan uint32_t word; 73482527734SSukumar Swaminathan emlxs_rqdb_t db; 73582527734SSukumar Swaminathan 73682527734SSukumar Swaminathan } emlxs_rqdbu_t; 73782527734SSukumar Swaminathan 73882527734SSukumar Swaminathan 73982527734SSukumar Swaminathan typedef struct emlxs_wqdb 74082527734SSukumar Swaminathan { 74182527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 74282527734SSukumar Swaminathan uint32_t NumPosted:8; /* Number of entries posted */ 74382527734SSukumar Swaminathan uint32_t Index:8; /* Queue index for posted command */ 74482527734SSukumar Swaminathan uint32_t Rsvd1:6; 74582527734SSukumar Swaminathan uint32_t Qid:10; /* WQ id for posted WQE */ 74682527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */ 74782527734SSukumar Swaminathan 74882527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 74982527734SSukumar Swaminathan uint32_t Qid:10; /* WQ id for posted WQE */ 75082527734SSukumar Swaminathan uint32_t Rsvd1:6; 75182527734SSukumar Swaminathan uint32_t Index:8; /* Queue index for posted command */ 75282527734SSukumar Swaminathan uint32_t NumPosted:8; /* Number of entries posted */ 75382527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */ 75482527734SSukumar Swaminathan 75582527734SSukumar Swaminathan } emlxs_wqdb_t; 75682527734SSukumar Swaminathan 75782527734SSukumar Swaminathan 75882527734SSukumar Swaminathan typedef union emlxs_wqdbu 75982527734SSukumar Swaminathan { 76082527734SSukumar Swaminathan uint32_t word; 76182527734SSukumar Swaminathan emlxs_wqdb_t db; 76282527734SSukumar Swaminathan 76382527734SSukumar Swaminathan } emlxs_wqdbu_t; 76482527734SSukumar Swaminathan 76582527734SSukumar Swaminathan 76682527734SSukumar Swaminathan typedef struct emlxs_cqdb 76782527734SSukumar Swaminathan { 76882527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 76982527734SSukumar Swaminathan uint32_t NumPosted:2; /* Number of entries posted */ 77082527734SSukumar Swaminathan uint32_t Rearm:1; /* Rearm CQ */ 77182527734SSukumar Swaminathan uint32_t NumPopped:13; /* Number of CQ entries processed */ 77282527734SSukumar Swaminathan uint32_t Rsvd1:5; 77382527734SSukumar Swaminathan uint32_t Event:1; /* 1 if processed entry is EQE */ 77482527734SSukumar Swaminathan /* 0 if processed entry is CQE */ 77582527734SSukumar Swaminathan uint32_t Qid:10; /* CQ id for posted CQE */ 77682527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */ 77782527734SSukumar Swaminathan 77882527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 77982527734SSukumar Swaminathan uint32_t Qid:10; /* CQ id for posted CQE */ 78082527734SSukumar Swaminathan uint32_t Event:1; /* 1 if processed entry is EQE */ 78182527734SSukumar Swaminathan /* 0 if processed entry is CQE */ 78282527734SSukumar Swaminathan uint32_t Rsvd1:5; 78382527734SSukumar Swaminathan uint32_t NumPopped:13; /* Number of CQ entries processed */ 78482527734SSukumar Swaminathan uint32_t Rearm:1; /* Rearm CQ */ 78582527734SSukumar Swaminathan uint32_t NumPosted:2; /* Number of entries posted */ 78682527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */ 78782527734SSukumar Swaminathan 78882527734SSukumar Swaminathan } emlxs_cqdb_t; 78982527734SSukumar Swaminathan 79082527734SSukumar Swaminathan 79182527734SSukumar Swaminathan typedef union emlxs_cqdbu 79282527734SSukumar Swaminathan { 79382527734SSukumar Swaminathan uint32_t word; 79482527734SSukumar Swaminathan emlxs_cqdb_t db; 79582527734SSukumar Swaminathan 79682527734SSukumar Swaminathan } emlxs_cqdbu_t; 79782527734SSukumar Swaminathan 79882527734SSukumar Swaminathan typedef struct emlxs_eqdb 79982527734SSukumar Swaminathan { 80082527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 80182527734SSukumar Swaminathan uint32_t Rsvd2:2; 80282527734SSukumar Swaminathan uint32_t Rearm:1; /* Rearm EQ */ 80382527734SSukumar Swaminathan uint32_t NumPopped:13; /* Number of CQ entries processed */ 80482527734SSukumar Swaminathan uint32_t Rsvd1:5; 80582527734SSukumar Swaminathan uint32_t Event:1; /* True iff processed entry is EQE */ 80682527734SSukumar Swaminathan uint32_t Clear:1; /* clears EQ interrupt when set */ 80782527734SSukumar Swaminathan uint32_t Qid:9; /* EQ id for posted EQE */ 80882527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */ 80982527734SSukumar Swaminathan 81082527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 81182527734SSukumar Swaminathan uint32_t Qid:9; /* EQ id for posted EQE */ 81282527734SSukumar Swaminathan uint32_t Clear:1; /* clears EQ interrupt when set */ 81382527734SSukumar Swaminathan uint32_t Event:1; /* True iff processed entry is EQE */ 81482527734SSukumar Swaminathan uint32_t Rsvd1:5; 81582527734SSukumar Swaminathan uint32_t NumPopped:13; /* Number of CQ entries processed */ 81682527734SSukumar Swaminathan uint32_t Rearm:1; /* Rearm EQ */ 81782527734SSukumar Swaminathan uint32_t Rsvd2:2; 81882527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */ 81982527734SSukumar Swaminathan 82082527734SSukumar Swaminathan } emlxs_eqdb_t; 82182527734SSukumar Swaminathan 82282527734SSukumar Swaminathan 82382527734SSukumar Swaminathan typedef union emlxs_eqdbu 82482527734SSukumar Swaminathan { 82582527734SSukumar Swaminathan uint32_t word; 82682527734SSukumar Swaminathan emlxs_eqdb_t db; 82782527734SSukumar Swaminathan 82882527734SSukumar Swaminathan } emlxs_eqdbu_t; 82982527734SSukumar Swaminathan 83082527734SSukumar Swaminathan 83182527734SSukumar Swaminathan typedef struct emlxs_mqdb 83282527734SSukumar Swaminathan { 83382527734SSukumar Swaminathan #ifdef EMLXS_BIG_ENDIAN 83482527734SSukumar Swaminathan uint32_t Rsvd2:2; 83582527734SSukumar Swaminathan uint32_t NumPosted:14; /* Number of entries posted */ 83682527734SSukumar Swaminathan uint32_t Rsvd1:5; 83782527734SSukumar Swaminathan uint32_t Qid:11; /* MQ id for posted MQE */ 83882527734SSukumar Swaminathan #endif /* EMLXS_BIG_ENDIAN */ 83982527734SSukumar Swaminathan 84082527734SSukumar Swaminathan #ifdef EMLXS_LITTLE_ENDIAN 84182527734SSukumar Swaminathan uint32_t Qid:11; /* MQ id for posted MQE */ 84282527734SSukumar Swaminathan uint32_t Rsvd1:5; 84382527734SSukumar Swaminathan uint32_t NumPosted:14; /* Number of entries posted */ 84482527734SSukumar Swaminathan uint32_t Rsvd2:2; 84582527734SSukumar Swaminathan #endif /* EMLXS_LITTLE_ENDIAN */ 84682527734SSukumar Swaminathan 84782527734SSukumar Swaminathan } emlxs_mqdb_t; 84882527734SSukumar Swaminathan 84982527734SSukumar Swaminathan 85082527734SSukumar Swaminathan typedef union emlxs_mqdbu 85182527734SSukumar Swaminathan { 85282527734SSukumar Swaminathan uint32_t word; 85382527734SSukumar Swaminathan emlxs_mqdb_t db; 85482527734SSukumar Swaminathan 85582527734SSukumar Swaminathan } emlxs_mqdbu_t; 85682527734SSukumar Swaminathan 85782527734SSukumar Swaminathan 85882527734SSukumar Swaminathan #ifdef __cplusplus 85982527734SSukumar Swaminathan } 86082527734SSukumar Swaminathan #endif 86182527734SSukumar Swaminathan 86282527734SSukumar Swaminathan #endif /* _EMLXS_QUEUE_H */ 863