blob: 84f6520107cc7f48cdebe3e16705fe7edd9c10bb [file] [log] [blame]
Ram Amraniec72fce2016-10-10 13:15:31 +03001/* QLogic qedr NIC Driver
2 * Copyright (c) 2015-2016 QLogic Corporation
3 *
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:
9 *
10 * Redistribution and use in source and binary forms, with or
11 * without modification, are permitted provided that the following
12 * conditions are met:
13 *
14 * - Redistributions of source code must retain the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer.
17 *
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.
22 *
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
30 * SOFTWARE.
31 */
32#ifndef __QED_HSI_RDMA__
33#define __QED_HSI_RDMA__
34
35#include <linux/qed/rdma_common.h>
36
37/* rdma completion notification queue element */
38struct rdma_cnqe {
39 struct regpair cq_handle;
40};
41
42struct rdma_cqe_responder {
43 struct regpair srq_wr_id;
44 struct regpair qp_handle;
45 __le32 imm_data_or_inv_r_Key;
46 __le32 length;
47 __le32 imm_data_hi;
48 __le16 rq_cons;
49 u8 flags;
Ram Amrania7efd772016-10-10 13:15:33 +030050#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
62 u8 status;
Ram Amraniec72fce2016-10-10 13:15:31 +030063};
64
65struct rdma_cqe_requester {
66 __le16 sq_cons;
67 __le16 reserved0;
68 __le32 reserved1;
69 struct regpair qp_handle;
70 struct regpair reserved2;
71 __le32 reserved3;
72 __le16 reserved4;
73 u8 flags;
Ram Amrania7efd772016-10-10 13:15:33 +030074#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
Ram Amraniec72fce2016-10-10 13:15:31 +030080 u8 status;
81};
82
83struct rdma_cqe_common {
84 struct regpair reserved0;
85 struct regpair qp_handle;
86 __le16 reserved1[7];
87 u8 flags;
Ram Amrania7efd772016-10-10 13:15:33 +030088#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
Ram Amraniec72fce2016-10-10 13:15:31 +030094 u8 status;
95};
96
97/* rdma completion queue element */
98union rdma_cqe {
99 struct rdma_cqe_responder resp;
100 struct rdma_cqe_requester req;
101 struct rdma_cqe_common cmn;
102};
103
Ram Amrania7efd772016-10-10 13:15:33 +0300104/* * CQE requester status enumeration */
105enum rdma_cqe_requester_status_enum {
106 RDMA_CQE_REQ_STS_OK,
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
119};
120
121/* CQE responder status enumeration */
122enum 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
132};
133
134/* CQE type enumeration */
135enum rdma_cqe_type {
136 RDMA_CQE_TYPE_REQUESTER,
137 RDMA_CQE_TYPE_RESPONDER_RQ,
138 RDMA_CQE_TYPE_RESPONDER_SRQ,
139 RDMA_CQE_TYPE_INVALID,
140 MAX_RDMA_CQE_TYPE
141};
142
Ram Amraniec72fce2016-10-10 13:15:31 +0300143struct rdma_sq_sge {
144 __le32 length;
145 struct regpair addr;
146 __le32 l_key;
147};
148
149struct rdma_rq_sge {
150 struct regpair addr;
151 __le32 length;
152 __le32 flags;
153};
154
155struct rdma_srq_sge {
156 struct regpair addr;
157 __le32 length;
158 __le32 l_key;
159};
Ram Amrania7efd772016-10-10 13:15:33 +0300160
161/* Rdma doorbell data for CQ */
162struct rdma_pwm_val32_data {
163 __le16 icid;
164 u8 agg_flags;
165 u8 params;
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
172 __le32 value;
173};
174
Ram Amraniec72fce2016-10-10 13:15:31 +0300175#endif /* __QED_HSI_RDMA__ */