2016-10-10 13:15:31 +03:00
/* QLogic qedr NIC Driver
* Copyright ( c ) 2015 - 2016 QLogic Corporation
*
* This software is available to you under a choice of one of two
* licenses . You may choose to be licensed under the terms of the GNU
* General Public License ( GPL ) Version 2 , available from the file
* COPYING in the main directory of this source tree , or the
* OpenIB . org BSD license below :
*
* Redistribution and use in source and binary forms , with or
* without modification , are permitted provided that the following
* conditions are met :
*
* - Redistributions of source code must retain the above
* copyright notice , this list of conditions and the following
* disclaimer .
*
* - Redistributions in binary form must reproduce the above
* copyright notice , this list of conditions and the following
* disclaimer in the documentation and / or other materials
* provided with the distribution .
*
* THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND ,
* EXPRESS OR IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY , FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT . IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER LIABILITY , WHETHER IN AN
* ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING FROM , OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE .
*/
# ifndef __QED_HSI_RDMA__
# define __QED_HSI_RDMA__
# include <linux/qed/rdma_common.h>
/* rdma completion notification queue element */
struct rdma_cnqe {
struct regpair cq_handle ;
} ;
struct rdma_cqe_responder {
struct regpair srq_wr_id ;
struct regpair qp_handle ;
__le32 imm_data_or_inv_r_Key ;
__le32 length ;
__le32 imm_data_hi ;
__le16 rq_cons ;
u8 flags ;
2016-10-10 13:15:33 +03:00
# define RDMA_CQE_RESPONDER_TOGGLE_BIT_MASK 0x1
# define RDMA_CQE_RESPONDER_TOGGLE_BIT_SHIFT 0
# define RDMA_CQE_RESPONDER_TYPE_MASK 0x3
# define RDMA_CQE_RESPONDER_TYPE_SHIFT 1
# define RDMA_CQE_RESPONDER_INV_FLG_MASK 0x1
# define RDMA_CQE_RESPONDER_INV_FLG_SHIFT 3
# define RDMA_CQE_RESPONDER_IMM_FLG_MASK 0x1
# define RDMA_CQE_RESPONDER_IMM_FLG_SHIFT 4
# define RDMA_CQE_RESPONDER_RDMA_FLG_MASK 0x1
# define RDMA_CQE_RESPONDER_RDMA_FLG_SHIFT 5
# define RDMA_CQE_RESPONDER_RESERVED2_MASK 0x3
# define RDMA_CQE_RESPONDER_RESERVED2_SHIFT 6
u8 status ;
2016-10-10 13:15:31 +03:00
} ;
struct rdma_cqe_requester {
__le16 sq_cons ;
__le16 reserved0 ;
__le32 reserved1 ;
struct regpair qp_handle ;
struct regpair reserved2 ;
__le32 reserved3 ;
__le16 reserved4 ;
u8 flags ;
2016-10-10 13:15:33 +03:00
# define RDMA_CQE_REQUESTER_TOGGLE_BIT_MASK 0x1
# define RDMA_CQE_REQUESTER_TOGGLE_BIT_SHIFT 0
# define RDMA_CQE_REQUESTER_TYPE_MASK 0x3
# define RDMA_CQE_REQUESTER_TYPE_SHIFT 1
# define RDMA_CQE_REQUESTER_RESERVED5_MASK 0x1F
# define RDMA_CQE_REQUESTER_RESERVED5_SHIFT 3
2016-10-10 13:15:31 +03:00
u8 status ;
} ;
struct rdma_cqe_common {
struct regpair reserved0 ;
struct regpair qp_handle ;
__le16 reserved1 [ 7 ] ;
u8 flags ;
2016-10-10 13:15:33 +03:00
# define RDMA_CQE_COMMON_TOGGLE_BIT_MASK 0x1
# define RDMA_CQE_COMMON_TOGGLE_BIT_SHIFT 0
# define RDMA_CQE_COMMON_TYPE_MASK 0x3
# define RDMA_CQE_COMMON_TYPE_SHIFT 1
# define RDMA_CQE_COMMON_RESERVED2_MASK 0x1F
# define RDMA_CQE_COMMON_RESERVED2_SHIFT 3
2016-10-10 13:15:31 +03:00
u8 status ;
} ;
/* rdma completion queue element */
union rdma_cqe {
struct rdma_cqe_responder resp ;
struct rdma_cqe_requester req ;
struct rdma_cqe_common cmn ;
} ;
2016-10-10 13:15:33 +03:00
/* * CQE requester status enumeration */
enum rdma_cqe_requester_status_enum {
RDMA_CQE_REQ_STS_OK ,
RDMA_CQE_REQ_STS_BAD_RESPONSE_ERR ,
RDMA_CQE_REQ_STS_LOCAL_LENGTH_ERR ,
RDMA_CQE_REQ_STS_LOCAL_QP_OPERATION_ERR ,
RDMA_CQE_REQ_STS_LOCAL_PROTECTION_ERR ,
RDMA_CQE_REQ_STS_MEMORY_MGT_OPERATION_ERR ,
RDMA_CQE_REQ_STS_REMOTE_INVALID_REQUEST_ERR ,
RDMA_CQE_REQ_STS_REMOTE_ACCESS_ERR ,
RDMA_CQE_REQ_STS_REMOTE_OPERATION_ERR ,
RDMA_CQE_REQ_STS_RNR_NAK_RETRY_CNT_ERR ,
RDMA_CQE_REQ_STS_TRANSPORT_RETRY_CNT_ERR ,
RDMA_CQE_REQ_STS_WORK_REQUEST_FLUSHED_ERR ,
MAX_RDMA_CQE_REQUESTER_STATUS_ENUM
} ;
/* CQE responder status enumeration */
enum rdma_cqe_responder_status_enum {
RDMA_CQE_RESP_STS_OK ,
RDMA_CQE_RESP_STS_LOCAL_ACCESS_ERR ,
RDMA_CQE_RESP_STS_LOCAL_LENGTH_ERR ,
RDMA_CQE_RESP_STS_LOCAL_QP_OPERATION_ERR ,
RDMA_CQE_RESP_STS_LOCAL_PROTECTION_ERR ,
RDMA_CQE_RESP_STS_MEMORY_MGT_OPERATION_ERR ,
RDMA_CQE_RESP_STS_REMOTE_INVALID_REQUEST_ERR ,
RDMA_CQE_RESP_STS_WORK_REQUEST_FLUSHED_ERR ,
MAX_RDMA_CQE_RESPONDER_STATUS_ENUM
} ;
/* CQE type enumeration */
enum rdma_cqe_type {
RDMA_CQE_TYPE_REQUESTER ,
RDMA_CQE_TYPE_RESPONDER_RQ ,
RDMA_CQE_TYPE_RESPONDER_SRQ ,
RDMA_CQE_TYPE_INVALID ,
MAX_RDMA_CQE_TYPE
} ;
2016-10-10 13:15:31 +03:00
struct rdma_sq_sge {
__le32 length ;
struct regpair addr ;
__le32 l_key ;
} ;
struct rdma_rq_sge {
struct regpair addr ;
__le32 length ;
__le32 flags ;
} ;
struct rdma_srq_sge {
struct regpair addr ;
__le32 length ;
__le32 l_key ;
} ;
2016-10-10 13:15:33 +03:00
/* Rdma doorbell data for CQ */
struct rdma_pwm_val32_data {
__le16 icid ;
u8 agg_flags ;
u8 params ;
# define RDMA_PWM_VAL32_DATA_AGG_CMD_MASK 0x3
# define RDMA_PWM_VAL32_DATA_AGG_CMD_SHIFT 0
# define RDMA_PWM_VAL32_DATA_BYPASS_EN_MASK 0x1
# define RDMA_PWM_VAL32_DATA_BYPASS_EN_SHIFT 2
# define RDMA_PWM_VAL32_DATA_RESERVED_MASK 0x1F
# define RDMA_PWM_VAL32_DATA_RESERVED_SHIFT 3
__le32 value ;
} ;
2016-10-10 13:15:31 +03:00
# endif /* __QED_HSI_RDMA__ */