emlxs_queue.h revision 8f23e9fa8abcb5857661066b954e63400d589b65
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 2004-2012 Emulex. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _EMLXS_QUEUE_H
#define _EMLXS_QUEUE_H
#ifdef __cplusplus
extern "C" {
#endif
/* Queue entry defines */
/* EQ entries */
typedef struct EQE
{
#ifdef EMLXS_BIG_ENDIAN
#endif
#ifdef EMLXS_LITTLE_ENDIAN
#endif
} EQE_t;
typedef union
{
} EQE_u;
/* CQ entries */
typedef struct CQE_CmplWQ
{
#ifdef EMLXS_BIG_ENDIAN
#endif
#ifdef EMLXS_LITTLE_ENDIAN
#endif
} CQE_CmplWQ_t;
typedef struct CQE_RelWQ
{
#ifdef EMLXS_BIG_ENDIAN
#endif
#ifdef EMLXS_LITTLE_ENDIAN
#endif
} CQE_RelWQ_t;
typedef struct CQE_UnsolRcv
{
#ifdef EMLXS_BIG_ENDIAN
#endif
#ifdef EMLXS_LITTLE_ENDIAN
#endif
typedef struct CQE_UnsolRcvV1
{
#ifdef EMLXS_BIG_ENDIAN
#endif
#ifdef EMLXS_LITTLE_ENDIAN
#endif
/* Status defines */
#define RQ_STATUS_SUCCESS 0x10
#define RQ_STATUS_BUFLEN_EXCEEDED 0x11
#define RQ_STATUS_NEED_BUFFER 0x12
#define RQ_STATUS_FRAME_DISCARDED 0x13
typedef struct CQE_XRI_Abort
{
#ifdef EMLXS_BIG_ENDIAN
#endif
#ifdef EMLXS_LITTLE_ENDIAN
#endif
/* Defines for CQE Codes */
#define CQE_TYPE_WQ_COMPLETION 1
#define CQE_TYPE_RELEASE_WQE 2
#define CQE_TYPE_UNSOL_RCV 4
#define CQE_TYPE_XRI_ABORTED 5
#define CQE_TYPE_UNSOL_RCV_V1 9
typedef struct CQE_ASYNC_FCOE
{
#ifdef EMLXS_BIG_ENDIAN
#endif
#ifdef EMLXS_LITTLE_ENDIAN
#endif
typedef struct CQE_ASYNC_LINK_STATE
{
#ifdef EMLXS_BIG_ENDIAN
#endif
#ifdef EMLXS_LITTLE_ENDIAN
#endif
typedef struct CQE_ASYNC_GRP_5_QOS
{
#ifdef EMLXS_BIG_ENDIAN
#endif
#ifdef EMLXS_LITTLE_ENDIAN
#endif
typedef struct CQE_ASYNC_FC_LINK_ATT
{
#ifdef EMLXS_BIG_ENDIAN
#endif
#ifdef EMLXS_LITTLE_ENDIAN
#endif
typedef struct CQE_ASYNC_PORT
{
/* topology */
#define TOPOLOGY_UNKNOWN 0
#define TOPOLOGY_NPORT 1
#define TOPOLOGY_LPORT 2
#define TOPOLOGY_INTERNAL_LB 3
#define TOPOLOGY_SERDES_LB 4
/* att_type */
#define ATT_TYPE_LINK_UP 1
#define ATT_TYPE_LINK_DOWN 2
#define ATT_TYPE_NO_HARD_ALPA 3
/* shared_link_status */
#define SHARED_STATUS_NONE 0
#define SHARED_STATUS_LD_UNUSABLE 1
#define SHARED_STATUS_LD_TRAN_FAULT 2
#define SHARED_STATUS_LD_NO_SIGNAL 3
#define SHARED_STATUS_LD_MGMT_DISABLED 4
#define SHARED_STATUS_LU_FAILED_P2P 5
#define SHARED_STATUS_LU_FAILED_FLOGI_TMO 6
#define SHARED_STATUS_LU_FAILED_NO_FPORT 7
#define SHARED_STATUS_LU_FAILED_NO_NPIV 8
#define SHARED_STATUS_LU_FAILED_FLOGO 9
#define SHARED_STATUS_LU_LOOPBACK 20
#define SHARED_STATUS_LU_NORMAL 40
/* port_fault */
#define PORT_FAULT_NONE 0
#define PORT_FAULT_LOCAL 1
#define PORT_FAULT_REMOTE 2
typedef struct CQE_ASYNC
{
/* Words 0-2 */
union
{
} un;
#ifdef EMLXS_BIG_ENDIAN
#endif
#ifdef EMLXS_LITTLE_ENDIAN
#endif
} CQE_ASYNC_t;
/* port_speed defines */
#define PHY_1GHZ_LINK 3
#define PHY_10GHZ_LINK 4
/* event_code defines */
#define ASYNC_EVENT_CODE_FCOE_LINK_STATE 0x01
#define ASYNC_EVENT_CODE_FCOE_FIP 0x02
#define ASYNC_EVENT_CODE_DCBX 0x03
#define ASYNC_EVENT_CODE_ISCSI 0x04
#define ASYNC_EVENT_CODE_GRP_5 0x05
#define ASYNC_EVENT_CODE_FC_EVENT 0x10
#define ASYNC_EVENT_CODE_PORT 0x11
#define ASYNC_EVENT_CODE_VF 0x12
#define ASYNC_EVENT_CODE_MR 0x13
/* FC Event */
#define ASYNC_EVENT_FC_LINK_ATT 1
#define ASYNC_EVENT_FC_SHARED_LINK_ATT 2
/* LINK_STATE - link_status defines */
#define ASYNC_EVENT_PHYS_LINK_DOWN 0
#define ASYNC_EVENT_PHYS_LINK_UP 1
#define ASYNC_EVENT_LOGICAL_LINK_DOWN 2
#define ASYNC_EVENT_LOGICAL_LINK_UP 3
/* FCOE_FIP - evt_type defines */
#define ASYNC_EVENT_NEW_FCF_DISC 1
#define ASYNC_EVENT_FCF_TABLE_FULL 2
#define ASYNC_EVENT_FCF_DEAD 3
#define ASYNC_EVENT_VIRT_LINK_CLEAR 4
#define ASYNC_EVENT_FCF_MODIFIED 5
/* GRP_5 - evt_type defines */
#define ASYNC_EVENT_QOS_SPEED 1
/* PORT - evt_type defines */
#define ASYNC_EVENT_MISCONFIG_PORT 9
typedef struct CQE_MBOX
{
#ifdef EMLXS_BIG_ENDIAN
#endif
#ifdef EMLXS_LITTLE_ENDIAN
#endif
} CQE_MBOX_t;
typedef union
{
/* Group 1 types */
/* Group 2 types */
} CQE_u;
/* RQ entries */
typedef struct RQE
{
} RQE_t;
/* Definitions for WQEs */
typedef struct
{
/* Word 0 - 2 */
/* Word 3 */
#ifdef EMLXS_BIG_ENDIAN
/* Word 4 */
/* Word 5 */
#endif
#ifdef EMLXS_LITTLE_ENDIAN
/* Word 4 */
/* Word 5 */
#endif
} ELS_REQ_WQE;
typedef struct
{
/* Word 0 - 2 */
/* Word 3 */
/* Word 4 */
#ifdef EMLXS_BIG_ENDIAN
/* Word 5 */
#endif
#ifdef EMLXS_LITTLE_ENDIAN
/* Word 5 */
#endif
} ELS_RSP_WQE;
typedef struct
{
/* Word 0 - 2 */
/* Word 3 */
/* Word 4 */
#ifdef EMLXS_BIG_ENDIAN
/* Word 5 */
#endif
#ifdef EMLXS_LITTLE_ENDIAN
/* Word 5 */
#endif
} GEN_REQ_WQE;
typedef struct
{
/* Word 0 - 2 */
/* Word 3 */
/* Word 4 */
#ifdef EMLXS_BIG_ENDIAN
/* Word 5 */
#endif
#ifdef EMLXS_LITTLE_ENDIAN
/* Word 5 */
#endif
} XMIT_SEQ_WQE;
typedef struct
{
/* Word 0 - 2 */
/* Word 3 */
/* Word 4 */
/* Word 5 */
} FCP_WQE;
typedef struct
{
/* Word 0 - 2 */
#ifdef EMLXS_BIG_ENDIAN
/* Word 3 */
#endif
#ifdef EMLXS_LITTLE_ENDIAN
/* Word 3 */
#endif
/* Word 4 - 5 */
} ABORT_WQE;
typedef struct
{
#ifdef EMLXS_BIG_ENDIAN
/* Word 0 */
/* Word 1 */
/* Word 2 */
/* Word 3 */
/* Word 4 */
/* Word 5 */
#endif
#ifdef EMLXS_LITTLE_ENDIAN
/* Word 0 */
/* Word 1 */
/* Word 2 */
/* Word 3 */
/* Word 4 */
/* Word 5 */
#endif
} BLS_WQE;
typedef struct
{
/* Word 0 - 4 */
#ifdef EMLXS_BIG_ENDIAN
/* Word 5 */
#endif
#ifdef EMLXS_LITTLE_ENDIAN
/* Word 5 */
#endif
typedef struct emlxs_wqe
{
/* Words 0-5 */
union
{
} un;
#ifdef EMLXS_BIG_ENDIAN
/* Word 6 */
/* Word 7 */
/* Word 8 */
/* Word 9 */
/* Word 10 */
/* The following 16 bits may be */
/* overwritten by PHWQ */
/* Word 11 */
#endif
#ifdef EMLXS_LITTLE_ENDIAN
/* Word 6 */
/* Word 7 */
/* Word 8 */
/* Word 9 */
/* Word 10 */
/* The following 16 bits may be */
/* overwritten by PHWQ */
/* Word 11 */
#endif
/* Words 12 */
/* Words 13-15 */
} emlxs_wqe_t;
/* Used if PHWQ is enabled */
#ifdef EMLXS_BIG_ENDIAN
#endif
#ifdef EMLXS_LITTLE_ENDIAN
#endif
/* Defines for ContextType */
#define WQE_RPI_CONTEXT 0
#define WQE_VPI_CONTEXT 1
#define WQE_VFI_CONTEXT 2
#define WQE_FCFI_CONTEXT 3
/* Defines for CmdType */
#define WQE_TYPE_FCP_DATA_IN 0x00
#define WQE_TYPE_FCP_DATA_OUT 0x01
#define WQE_TYPE_TRECEIVE 0x02
#define WQE_TYPE_TRSP 0x03
#define WQE_TYPE_SRR_RSP 0x06
#define WQE_TYPE_TSEND 0x07
#define WQE_TYPE_GEN 0x08
#define WQE_TYPE_ABORT 0x08
#define WQE_TYPE_ELS 0x0C
#define WQE_TYPE_MASK_FIP 0x01
/* Defines for ELSId */
#define WQE_ELSID_PLOGI 0x04
#define WQE_ELSID_FLOGI 0x03
#define WQE_ELSID_FDISC 0x02
#define WQE_ELSID_LOGO 0x01
#define WQE_ELSID_CMD 0x00
/* RQB */
#define RQB_HEADER_SIZE 32
#define RQB_DATA_SIZE 2048
#define RQB_COUNT 256
#define EMLXS_NUM_WQ_PAGES 4
#define WQE_SIZE 64
#define EMLXS_NUM_CQ_PAGES_V2 4
#define CQE_SIZE 16
#define EQ_DEPTH 1024
#define CQ_DEPTH 256
#define MQ_DEPTH 16
#define RQ_DEPTH_EXPONENT 9
#define EMLXS_MAX_WQS_PER_EQ 4
/* Principal doorbell register layouts */
typedef struct emlxs_rqdb
{
#ifdef EMLXS_BIG_ENDIAN
#endif /* EMLXS_BIG_ENDIAN */
#ifdef EMLXS_LITTLE_ENDIAN
#endif /* EMLXS_LITTLE_ENDIAN */
} emlxs_rqdb_t;
typedef union emlxs_rqdbu
{
typedef struct emlxs_wqdb
{
#ifdef EMLXS_BIG_ENDIAN
#endif /* EMLXS_BIG_ENDIAN */
#ifdef EMLXS_LITTLE_ENDIAN
#endif /* EMLXS_LITTLE_ENDIAN */
} emlxs_wqdb_t;
typedef union emlxs_wqdbu
{
typedef struct emlxs_cqdb
{
#ifdef EMLXS_BIG_ENDIAN
/* 0 if processed entry is CQE */
#endif /* EMLXS_BIG_ENDIAN */
#ifdef EMLXS_LITTLE_ENDIAN
/* 0 if processed entry is CQE */
#endif /* EMLXS_LITTLE_ENDIAN */
} emlxs_cqdb_t;
typedef union emlxs_cqdbu
{
typedef struct emlxs_eqdb
{
#ifdef EMLXS_BIG_ENDIAN
#endif /* EMLXS_BIG_ENDIAN */
#ifdef EMLXS_LITTLE_ENDIAN
#endif /* EMLXS_LITTLE_ENDIAN */
} emlxs_eqdb_t;
typedef union emlxs_eqdbu
{
typedef struct emlxs_mqdb
{
#ifdef EMLXS_BIG_ENDIAN
#endif /* EMLXS_BIG_ENDIAN */
#ifdef EMLXS_LITTLE_ENDIAN
#endif /* EMLXS_LITTLE_ENDIAN */
} emlxs_mqdb_t;
typedef union emlxs_mqdbu
{
#ifdef __cplusplus
}
#endif
#endif /* _EMLXS_QUEUE_H */