.. | .. |
---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0-only */ |
---|
1 | 2 | /* |
---|
2 | 3 | * Huawei HiNIC PCI Express Linux driver |
---|
3 | 4 | * Copyright(c) 2017 Huawei Technologies Co., Ltd |
---|
4 | | - * |
---|
5 | | - * This program is free software; you can redistribute it and/or modify it |
---|
6 | | - * under the terms and conditions of the GNU General Public License, |
---|
7 | | - * version 2, as published by the Free Software Foundation. |
---|
8 | | - * |
---|
9 | | - * This program is distributed in the hope it will be useful, but WITHOUT |
---|
10 | | - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
---|
11 | | - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
---|
12 | | - * for more details. |
---|
13 | | - * |
---|
14 | 5 | */ |
---|
15 | 6 | |
---|
16 | 7 | #ifndef HINIC_HW_WQE_H |
---|
.. | .. |
---|
62 | 53 | (((val) >> HINIC_CMDQ_WQE_HEADER_##member##_SHIFT) \ |
---|
63 | 54 | & HINIC_CMDQ_WQE_HEADER_##member##_MASK) |
---|
64 | 55 | |
---|
65 | | -#define HINIC_SQ_CTRL_BUFDESC_SECT_LEN_SHIFT 0 |
---|
66 | | -#define HINIC_SQ_CTRL_TASKSECT_LEN_SHIFT 16 |
---|
67 | | -#define HINIC_SQ_CTRL_DATA_FORMAT_SHIFT 22 |
---|
68 | | -#define HINIC_SQ_CTRL_LEN_SHIFT 29 |
---|
| 56 | +#define HINIC_SQ_CTRL_BUFDESC_SECT_LEN_SHIFT 0 |
---|
| 57 | +#define HINIC_SQ_CTRL_TASKSECT_LEN_SHIFT 16 |
---|
| 58 | +#define HINIC_SQ_CTRL_DATA_FORMAT_SHIFT 22 |
---|
| 59 | +#define HINIC_SQ_CTRL_LEN_SHIFT 29 |
---|
69 | 60 | |
---|
70 | | -#define HINIC_SQ_CTRL_BUFDESC_SECT_LEN_MASK 0xFF |
---|
71 | | -#define HINIC_SQ_CTRL_TASKSECT_LEN_MASK 0x1F |
---|
72 | | -#define HINIC_SQ_CTRL_DATA_FORMAT_MASK 0x1 |
---|
73 | | -#define HINIC_SQ_CTRL_LEN_MASK 0x3 |
---|
| 61 | +#define HINIC_SQ_CTRL_BUFDESC_SECT_LEN_MASK 0xFF |
---|
| 62 | +#define HINIC_SQ_CTRL_TASKSECT_LEN_MASK 0x1F |
---|
| 63 | +#define HINIC_SQ_CTRL_DATA_FORMAT_MASK 0x1 |
---|
| 64 | +#define HINIC_SQ_CTRL_LEN_MASK 0x3 |
---|
74 | 65 | |
---|
75 | | -#define HINIC_SQ_CTRL_QUEUE_INFO_MSS_SHIFT 13 |
---|
| 66 | +#define HINIC_SQ_CTRL_QUEUE_INFO_PLDOFF_SHIFT 2 |
---|
| 67 | +#define HINIC_SQ_CTRL_QUEUE_INFO_UFO_SHIFT 10 |
---|
| 68 | +#define HINIC_SQ_CTRL_QUEUE_INFO_TSO_SHIFT 11 |
---|
| 69 | +#define HINIC_SQ_CTRL_QUEUE_INFO_TCPUDP_CS_SHIFT 12 |
---|
| 70 | +#define HINIC_SQ_CTRL_QUEUE_INFO_MSS_SHIFT 13 |
---|
| 71 | +#define HINIC_SQ_CTRL_QUEUE_INFO_SCTP_SHIFT 27 |
---|
| 72 | +#define HINIC_SQ_CTRL_QUEUE_INFO_UC_SHIFT 28 |
---|
| 73 | +#define HINIC_SQ_CTRL_QUEUE_INFO_PRI_SHIFT 29 |
---|
76 | 74 | |
---|
77 | | -#define HINIC_SQ_CTRL_QUEUE_INFO_MSS_MASK 0x3FFF |
---|
| 75 | +#define HINIC_SQ_CTRL_QUEUE_INFO_PLDOFF_MASK 0xFF |
---|
| 76 | +#define HINIC_SQ_CTRL_QUEUE_INFO_UFO_MASK 0x1 |
---|
| 77 | +#define HINIC_SQ_CTRL_QUEUE_INFO_TSO_MASK 0x1 |
---|
| 78 | +#define HINIC_SQ_CTRL_QUEUE_INFO_TCPUDP_CS_MASK 0x1 |
---|
| 79 | +#define HINIC_SQ_CTRL_QUEUE_INFO_MSS_MASK 0x3FFF |
---|
| 80 | +#define HINIC_SQ_CTRL_QUEUE_INFO_SCTP_MASK 0x1 |
---|
| 81 | +#define HINIC_SQ_CTRL_QUEUE_INFO_UC_MASK 0x1 |
---|
| 82 | +#define HINIC_SQ_CTRL_QUEUE_INFO_PRI_MASK 0x7 |
---|
78 | 83 | |
---|
79 | 84 | #define HINIC_SQ_CTRL_SET(val, member) \ |
---|
80 | 85 | (((u32)(val) & HINIC_SQ_CTRL_##member##_MASK) \ |
---|
.. | .. |
---|
83 | 88 | #define HINIC_SQ_CTRL_GET(val, member) \ |
---|
84 | 89 | (((val) >> HINIC_SQ_CTRL_##member##_SHIFT) \ |
---|
85 | 90 | & HINIC_SQ_CTRL_##member##_MASK) |
---|
| 91 | + |
---|
| 92 | +#define HINIC_SQ_CTRL_CLEAR(val, member) \ |
---|
| 93 | + ((u32)(val) & (~(HINIC_SQ_CTRL_##member##_MASK \ |
---|
| 94 | + << HINIC_SQ_CTRL_##member##_SHIFT))) |
---|
86 | 95 | |
---|
87 | 96 | #define HINIC_SQ_TASK_INFO0_L2HDR_LEN_SHIFT 0 |
---|
88 | 97 | #define HINIC_SQ_TASK_INFO0_L4_OFFLOAD_SHIFT 8 |
---|
.. | .. |
---|
108 | 117 | |
---|
109 | 118 | /* 8 bits reserved */ |
---|
110 | 119 | #define HINIC_SQ_TASK_INFO1_MEDIA_TYPE_SHIFT 8 |
---|
111 | | -#define HINIC_SQ_TASK_INFO1_INNER_L4_LEN_SHIFT 16 |
---|
112 | | -#define HINIC_SQ_TASK_INFO1_INNER_L3_LEN_SHIFT 24 |
---|
| 120 | +#define HINIC_SQ_TASK_INFO1_INNER_L4LEN_SHIFT 16 |
---|
| 121 | +#define HINIC_SQ_TASK_INFO1_INNER_L3LEN_SHIFT 24 |
---|
113 | 122 | |
---|
114 | 123 | /* 8 bits reserved */ |
---|
115 | 124 | #define HINIC_SQ_TASK_INFO1_MEDIA_TYPE_MASK 0xFF |
---|
116 | | -#define HINIC_SQ_TASK_INFO1_INNER_L4_LEN_MASK 0xFF |
---|
117 | | -#define HINIC_SQ_TASK_INFO1_INNER_L3_LEN_MASK 0xFF |
---|
| 125 | +#define HINIC_SQ_TASK_INFO1_INNER_L4LEN_MASK 0xFF |
---|
| 126 | +#define HINIC_SQ_TASK_INFO1_INNER_L3LEN_MASK 0xFF |
---|
118 | 127 | |
---|
119 | 128 | #define HINIC_SQ_TASK_INFO1_SET(val, member) \ |
---|
120 | 129 | (((u32)(val) & HINIC_SQ_TASK_INFO1_##member##_MASK) << \ |
---|
121 | 130 | HINIC_SQ_TASK_INFO1_##member##_SHIFT) |
---|
122 | 131 | |
---|
123 | | -#define HINIC_SQ_TASK_INFO2_TUNNEL_L4_LEN_SHIFT 0 |
---|
124 | | -#define HINIC_SQ_TASK_INFO2_OUTER_L3_LEN_SHIFT 12 |
---|
125 | | -#define HINIC_SQ_TASK_INFO2_TUNNEL_L4TYPE_SHIFT 19 |
---|
| 132 | +#define HINIC_SQ_TASK_INFO2_TUNNEL_L4LEN_SHIFT 0 |
---|
| 133 | +#define HINIC_SQ_TASK_INFO2_OUTER_L3LEN_SHIFT 8 |
---|
| 134 | +#define HINIC_SQ_TASK_INFO2_TUNNEL_L4TYPE_SHIFT 16 |
---|
126 | 135 | /* 1 bit reserved */ |
---|
127 | | -#define HINIC_SQ_TASK_INFO2_OUTER_L3TYPE_SHIFT 22 |
---|
| 136 | +#define HINIC_SQ_TASK_INFO2_OUTER_L3TYPE_SHIFT 24 |
---|
128 | 137 | /* 8 bits reserved */ |
---|
129 | 138 | |
---|
130 | | -#define HINIC_SQ_TASK_INFO2_TUNNEL_L4_LEN_MASK 0xFFF |
---|
131 | | -#define HINIC_SQ_TASK_INFO2_OUTER_L3_LEN_MASK 0x7F |
---|
132 | | -#define HINIC_SQ_TASK_INFO2_TUNNEL_L4TYPE_MASK 0x3 |
---|
| 139 | +#define HINIC_SQ_TASK_INFO2_TUNNEL_L4LEN_MASK 0xFF |
---|
| 140 | +#define HINIC_SQ_TASK_INFO2_OUTER_L3LEN_MASK 0xFF |
---|
| 141 | +#define HINIC_SQ_TASK_INFO2_TUNNEL_L4TYPE_MASK 0x7 |
---|
133 | 142 | /* 1 bit reserved */ |
---|
134 | 143 | #define HINIC_SQ_TASK_INFO2_OUTER_L3TYPE_MASK 0x3 |
---|
135 | 144 | /* 8 bits reserved */ |
---|
.. | .. |
---|
151 | 160 | #define HINIC_RQ_CQE_STATUS_RXDONE_SHIFT 31 |
---|
152 | 161 | |
---|
153 | 162 | #define HINIC_RQ_CQE_STATUS_RXDONE_MASK 0x1 |
---|
| 163 | + |
---|
| 164 | +#define HINIC_RQ_CQE_STATUS_CSUM_ERR_SHIFT 0 |
---|
| 165 | + |
---|
| 166 | +#define HINIC_RQ_CQE_STATUS_CSUM_ERR_MASK 0xFFFFU |
---|
154 | 167 | |
---|
155 | 168 | #define HINIC_RQ_CQE_STATUS_GET(val, member) \ |
---|
156 | 169 | (((val) >> HINIC_RQ_CQE_STATUS_##member##_SHIFT) & \ |
---|
.. | .. |
---|
187 | 200 | sizeof(struct hinic_sq_task) + \ |
---|
188 | 201 | (nr_sges) * sizeof(struct hinic_sq_bufdesc)) |
---|
189 | 202 | |
---|
190 | | -#define HINIC_SCMD_DATA_LEN 16 |
---|
| 203 | +#define HINIC_SCMD_DATA_LEN 16 |
---|
191 | 204 | |
---|
192 | | -#define HINIC_MAX_SQ_BUFDESCS 17 |
---|
| 205 | +#define HINIC_MAX_SQ_BUFDESCS 17 |
---|
193 | 206 | |
---|
194 | | -#define HINIC_SQ_WQE_MAX_SIZE 320 |
---|
195 | | -#define HINIC_RQ_WQE_SIZE 32 |
---|
| 207 | +#define HINIC_SQ_WQE_MAX_SIZE 320 |
---|
| 208 | +#define HINIC_RQ_WQE_SIZE 32 |
---|
| 209 | + |
---|
| 210 | +#define HINIC_MSS_DEFAULT 0x3E00 |
---|
| 211 | +#define HINIC_MSS_MIN 0x50 |
---|
| 212 | + |
---|
| 213 | +#define RQ_CQE_STATUS_NUM_LRO_SHIFT 16 |
---|
| 214 | +#define RQ_CQE_STATUS_NUM_LRO_MASK 0xFFU |
---|
| 215 | + |
---|
| 216 | +#define RQ_CQE_STATUS_GET(val, member) (((val) >> \ |
---|
| 217 | + RQ_CQE_STATUS_##member##_SHIFT) & \ |
---|
| 218 | + RQ_CQE_STATUS_##member##_MASK) |
---|
| 219 | + |
---|
| 220 | +#define HINIC_GET_RX_NUM_LRO(status) \ |
---|
| 221 | + RQ_CQE_STATUS_GET(status, NUM_LRO) |
---|
| 222 | + |
---|
| 223 | +#define RQ_CQE_OFFOLAD_TYPE_PKT_TYPE_SHIFT 0 |
---|
| 224 | +#define RQ_CQE_OFFOLAD_TYPE_PKT_TYPE_MASK 0xFFFU |
---|
| 225 | +#define RQ_CQE_OFFOLAD_TYPE_VLAN_EN_SHIFT 21 |
---|
| 226 | +#define RQ_CQE_OFFOLAD_TYPE_VLAN_EN_MASK 0x1U |
---|
| 227 | + |
---|
| 228 | +#define RQ_CQE_OFFOLAD_TYPE_GET(val, member) (((val) >> \ |
---|
| 229 | + RQ_CQE_OFFOLAD_TYPE_##member##_SHIFT) & \ |
---|
| 230 | + RQ_CQE_OFFOLAD_TYPE_##member##_MASK) |
---|
| 231 | + |
---|
| 232 | +#define HINIC_GET_RX_PKT_TYPE(offload_type) \ |
---|
| 233 | + RQ_CQE_OFFOLAD_TYPE_GET(offload_type, PKT_TYPE) |
---|
| 234 | + |
---|
| 235 | +#define HINIC_GET_RX_VLAN_OFFLOAD_EN(offload_type) \ |
---|
| 236 | + RQ_CQE_OFFOLAD_TYPE_GET(offload_type, VLAN_EN) |
---|
| 237 | + |
---|
| 238 | +#define RQ_CQE_SGE_VLAN_MASK 0xFFFFU |
---|
| 239 | +#define RQ_CQE_SGE_VLAN_SHIFT 0 |
---|
| 240 | + |
---|
| 241 | +#define RQ_CQE_SGE_GET(val, member) (((val) >> \ |
---|
| 242 | + RQ_CQE_SGE_##member##_SHIFT) & \ |
---|
| 243 | + RQ_CQE_SGE_##member##_MASK) |
---|
| 244 | + |
---|
| 245 | +#define HINIC_GET_RX_VLAN_TAG(vlan_len) \ |
---|
| 246 | + RQ_CQE_SGE_GET(vlan_len, VLAN) |
---|
| 247 | + |
---|
| 248 | +#define HINIC_RSS_TYPE_VALID_SHIFT 23 |
---|
| 249 | +#define HINIC_RSS_TYPE_TCP_IPV6_EXT_SHIFT 24 |
---|
| 250 | +#define HINIC_RSS_TYPE_IPV6_EXT_SHIFT 25 |
---|
| 251 | +#define HINIC_RSS_TYPE_TCP_IPV6_SHIFT 26 |
---|
| 252 | +#define HINIC_RSS_TYPE_IPV6_SHIFT 27 |
---|
| 253 | +#define HINIC_RSS_TYPE_TCP_IPV4_SHIFT 28 |
---|
| 254 | +#define HINIC_RSS_TYPE_IPV4_SHIFT 29 |
---|
| 255 | +#define HINIC_RSS_TYPE_UDP_IPV6_SHIFT 30 |
---|
| 256 | +#define HINIC_RSS_TYPE_UDP_IPV4_SHIFT 31 |
---|
| 257 | + |
---|
| 258 | +#define HINIC_RSS_TYPE_SET(val, member) \ |
---|
| 259 | + (((u32)(val) & 0x1) << HINIC_RSS_TYPE_##member##_SHIFT) |
---|
| 260 | + |
---|
| 261 | +#define HINIC_RSS_TYPE_GET(val, member) \ |
---|
| 262 | + (((u32)(val) >> HINIC_RSS_TYPE_##member##_SHIFT) & 0x1) |
---|
196 | 263 | |
---|
197 | 264 | enum hinic_l4offload_type { |
---|
198 | 265 | HINIC_L4_OFF_DISABLE = 0, |
---|
.. | .. |
---|
209 | 276 | enum hinic_pkt_parsed { |
---|
210 | 277 | HINIC_PKT_NOT_PARSED = 0, |
---|
211 | 278 | HINIC_PKT_PARSED = 1, |
---|
| 279 | +}; |
---|
| 280 | + |
---|
| 281 | +enum hinic_l3_offload_type { |
---|
| 282 | + L3TYPE_UNKNOWN = 0, |
---|
| 283 | + IPV6_PKT = 1, |
---|
| 284 | + IPV4_PKT_NO_CHKSUM_OFFLOAD = 2, |
---|
| 285 | + IPV4_PKT_WITH_CHKSUM_OFFLOAD = 3, |
---|
| 286 | +}; |
---|
| 287 | + |
---|
| 288 | +enum hinic_l4_offload_type { |
---|
| 289 | + OFFLOAD_DISABLE = 0, |
---|
| 290 | + TCP_OFFLOAD_ENABLE = 1, |
---|
| 291 | + SCTP_OFFLOAD_ENABLE = 2, |
---|
| 292 | + UDP_OFFLOAD_ENABLE = 3, |
---|
| 293 | +}; |
---|
| 294 | + |
---|
| 295 | +enum hinic_l4_tunnel_type { |
---|
| 296 | + NOT_TUNNEL, |
---|
| 297 | + TUNNEL_UDP_NO_CSUM, |
---|
| 298 | + TUNNEL_UDP_CSUM, |
---|
212 | 299 | }; |
---|
213 | 300 | |
---|
214 | 301 | enum hinic_outer_l3type { |
---|
.. | .. |
---|
327 | 414 | u32 status; |
---|
328 | 415 | u32 len; |
---|
329 | 416 | |
---|
330 | | - u32 rsvd2; |
---|
| 417 | + u32 offload_type; |
---|
331 | 418 | u32 rsvd3; |
---|
332 | 419 | u32 rsvd4; |
---|
333 | 420 | u32 rsvd5; |
---|