1 /* QLogic qedr NIC Driver
2 * Copyright (c) 2015-2016 QLogic Corporation
4 * This software is available to you under a choice of one of two
5 * licenses. You may choose to be licensed under the terms of the GNU
6 * General Public License (GPL) Version 2, available from the file
7 * COPYING in the main directory of this source tree, or the
8 * OpenIB.org BSD license below:
10 * Redistribution and use in source and binary forms, with or
11 * without modification, are permitted provided that the following
14 * - Redistributions of source code must retain the above
15 * copyright notice, this list of conditions and the following
18 * - Redistributions in binary form must reproduce the above
19 * copyright notice, this list of conditions and the following
20 * disclaimer in the documentation and /or other materials
21 * provided with the distribution.
23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32 #ifndef __QED_HSI_RDMA__
33 #define __QED_HSI_RDMA__
35 #include <linux/qed/rdma_common.h>
37 /* rdma completion notification queue element */
39 struct regpair cq_handle;
42 struct rdma_cqe_responder {
43 struct regpair srq_wr_id;
44 struct regpair qp_handle;
45 __le32 imm_data_or_inv_r_Key;
50 #define RDMA_CQE_RESPONDER_TOGGLE_BIT_MASK 0x1
51 #define RDMA_CQE_RESPONDER_TOGGLE_BIT_SHIFT 0
52 #define RDMA_CQE_RESPONDER_TYPE_MASK 0x3
53 #define RDMA_CQE_RESPONDER_TYPE_SHIFT 1
54 #define RDMA_CQE_RESPONDER_INV_FLG_MASK 0x1
55 #define RDMA_CQE_RESPONDER_INV_FLG_SHIFT 3
56 #define RDMA_CQE_RESPONDER_IMM_FLG_MASK 0x1
57 #define RDMA_CQE_RESPONDER_IMM_FLG_SHIFT 4
58 #define RDMA_CQE_RESPONDER_RDMA_FLG_MASK 0x1
59 #define RDMA_CQE_RESPONDER_RDMA_FLG_SHIFT 5
60 #define RDMA_CQE_RESPONDER_RESERVED2_MASK 0x3
61 #define RDMA_CQE_RESPONDER_RESERVED2_SHIFT 6
65 struct rdma_cqe_requester {
69 struct regpair qp_handle;
70 struct regpair reserved2;
74 #define RDMA_CQE_REQUESTER_TOGGLE_BIT_MASK 0x1
75 #define RDMA_CQE_REQUESTER_TOGGLE_BIT_SHIFT 0
76 #define RDMA_CQE_REQUESTER_TYPE_MASK 0x3
77 #define RDMA_CQE_REQUESTER_TYPE_SHIFT 1
78 #define RDMA_CQE_REQUESTER_RESERVED5_MASK 0x1F
79 #define RDMA_CQE_REQUESTER_RESERVED5_SHIFT 3
83 struct rdma_cqe_common {
84 struct regpair reserved0;
85 struct regpair qp_handle;
88 #define RDMA_CQE_COMMON_TOGGLE_BIT_MASK 0x1
89 #define RDMA_CQE_COMMON_TOGGLE_BIT_SHIFT 0
90 #define RDMA_CQE_COMMON_TYPE_MASK 0x3
91 #define RDMA_CQE_COMMON_TYPE_SHIFT 1
92 #define RDMA_CQE_COMMON_RESERVED2_MASK 0x1F
93 #define RDMA_CQE_COMMON_RESERVED2_SHIFT 3
97 /* rdma completion queue element */
99 struct rdma_cqe_responder resp;
100 struct rdma_cqe_requester req;
101 struct rdma_cqe_common cmn;
104 /* * CQE requester status enumeration */
105 enum rdma_cqe_requester_status_enum {
107 RDMA_CQE_REQ_STS_BAD_RESPONSE_ERR,
108 RDMA_CQE_REQ_STS_LOCAL_LENGTH_ERR,
109 RDMA_CQE_REQ_STS_LOCAL_QP_OPERATION_ERR,
110 RDMA_CQE_REQ_STS_LOCAL_PROTECTION_ERR,
111 RDMA_CQE_REQ_STS_MEMORY_MGT_OPERATION_ERR,
112 RDMA_CQE_REQ_STS_REMOTE_INVALID_REQUEST_ERR,
113 RDMA_CQE_REQ_STS_REMOTE_ACCESS_ERR,
114 RDMA_CQE_REQ_STS_REMOTE_OPERATION_ERR,
115 RDMA_CQE_REQ_STS_RNR_NAK_RETRY_CNT_ERR,
116 RDMA_CQE_REQ_STS_TRANSPORT_RETRY_CNT_ERR,
117 RDMA_CQE_REQ_STS_WORK_REQUEST_FLUSHED_ERR,
118 MAX_RDMA_CQE_REQUESTER_STATUS_ENUM
121 /* CQE responder status enumeration */
122 enum rdma_cqe_responder_status_enum {
123 RDMA_CQE_RESP_STS_OK,
124 RDMA_CQE_RESP_STS_LOCAL_ACCESS_ERR,
125 RDMA_CQE_RESP_STS_LOCAL_LENGTH_ERR,
126 RDMA_CQE_RESP_STS_LOCAL_QP_OPERATION_ERR,
127 RDMA_CQE_RESP_STS_LOCAL_PROTECTION_ERR,
128 RDMA_CQE_RESP_STS_MEMORY_MGT_OPERATION_ERR,
129 RDMA_CQE_RESP_STS_REMOTE_INVALID_REQUEST_ERR,
130 RDMA_CQE_RESP_STS_WORK_REQUEST_FLUSHED_ERR,
131 MAX_RDMA_CQE_RESPONDER_STATUS_ENUM
134 /* CQE type enumeration */
136 RDMA_CQE_TYPE_REQUESTER,
137 RDMA_CQE_TYPE_RESPONDER_RQ,
138 RDMA_CQE_TYPE_RESPONDER_SRQ,
139 RDMA_CQE_TYPE_INVALID,
155 struct rdma_srq_sge {
161 /* Rdma doorbell data for CQ */
162 struct rdma_pwm_val32_data {
166 #define RDMA_PWM_VAL32_DATA_AGG_CMD_MASK 0x3
167 #define RDMA_PWM_VAL32_DATA_AGG_CMD_SHIFT 0
168 #define RDMA_PWM_VAL32_DATA_BYPASS_EN_MASK 0x1
169 #define RDMA_PWM_VAL32_DATA_BYPASS_EN_SHIFT 2
170 #define RDMA_PWM_VAL32_DATA_RESERVED_MASK 0x1F
171 #define RDMA_PWM_VAL32_DATA_RESERVED_SHIFT 3
175 #endif /* __QED_HSI_RDMA__ */