blob: 39e2a2ac247197d67e1489dfefe608409a821706 [file] [log] [blame]
Yuval Mintzfe56b9e2015-10-26 11:02:25 +02001/* QLogic qed NIC Driver
Mintz, Yuvale8f1cb52017-01-01 13:57:00 +02002 * Copyright (c) 2015-2016 QLogic Corporation
Yuval Mintzfe56b9e2015-10-26 11:02:25 +02003 *
Mintz, Yuvale8f1cb52017-01-01 13:57:00 +02004 * 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.
Yuval Mintzfe56b9e2015-10-26 11:02:25 +020031 */
Mintz, Yuvale8f1cb52017-01-01 13:57:00 +020032
Yuval Mintz05fafbf2016-08-19 09:33:31 +030033#ifndef _COMMON_HSI_H
34#define _COMMON_HSI_H
35#include <linux/types.h>
36#include <asm/byteorder.h>
37#include <linux/bitops.h>
38#include <linux/slab.h>
39
40/* dma_addr_t manip */
Kalderon, Michal456a5842017-07-02 10:29:27 +030041#define PTR_LO(x) ((u32)(((uintptr_t)(x)) & 0xffffffff))
42#define PTR_HI(x) ((u32)((((uintptr_t)(x)) >> 16) >> 16))
Yuval Mintzf1ff8662016-08-23 07:19:50 +030043#define DMA_LO_LE(x) cpu_to_le32(lower_32_bits(x))
44#define DMA_HI_LE(x) cpu_to_le32(upper_32_bits(x))
45#define DMA_REGPAIR_LE(x, val) do { \
46 (x).hi = DMA_HI_LE((val)); \
47 (x).lo = DMA_LO_LE((val)); \
48 } while (0)
Yuval Mintz05fafbf2016-08-19 09:33:31 +030049
50#define HILO_GEN(hi, lo, type) ((((type)(hi)) << 32) + (lo))
Yuval Mintzf1ff8662016-08-23 07:19:50 +030051#define HILO_64(hi, lo) HILO_GEN((le32_to_cpu(hi)), (le32_to_cpu(lo)), u64)
Yuval Mintz05fafbf2016-08-19 09:33:31 +030052#define HILO_64_REGPAIR(regpair) (HILO_64(regpair.hi, regpair.lo))
Yuval Mintzf1ff8662016-08-23 07:19:50 +030053#define HILO_DMA_REGPAIR(regpair) ((dma_addr_t)HILO_64_REGPAIR(regpair))
Yuval Mintzfe56b9e2015-10-26 11:02:25 +020054
55#ifndef __COMMON_HSI__
56#define __COMMON_HSI__
57
Tomer Tayar76a9a362015-12-07 06:25:57 -050058
Yuval Mintzfc48b7a2016-02-15 13:22:35 -050059#define X_FINAL_CLEANUP_AGG_INT 1
Yuval Mintz05fafbf2016-08-19 09:33:31 +030060
61#define EVENT_RING_PAGE_SIZE_BYTES 4096
62
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030063#define NUM_OF_GLOBAL_QUEUES 128
Yuval Mintz05fafbf2016-08-19 09:33:31 +030064#define COMMON_QUEUE_ENTRY_MAX_BYTE_SIZE 64
65
66#define ISCSI_CDU_TASK_SEG_TYPE 0
Arun Easi1e128c82017-02-15 06:28:22 -080067#define FCOE_CDU_TASK_SEG_TYPE 0
Yuval Mintz05fafbf2016-08-19 09:33:31 +030068#define RDMA_CDU_TASK_SEG_TYPE 1
69
70#define FW_ASSERT_GENERAL_ATTN_IDX 32
71
72#define MAX_PINNED_CCFC 32
Yuval Mintzfc48b7a2016-02-15 13:22:35 -050073
Yuval Mintz351a4ded2016-06-02 10:23:29 +030074/* Queue Zone sizes in bytes */
75#define TSTORM_QZONE_SIZE 8
Yuval Mintz05fafbf2016-08-19 09:33:31 +030076#define MSTORM_QZONE_SIZE 16
Yuval Mintz351a4ded2016-06-02 10:23:29 +030077#define USTORM_QZONE_SIZE 8
78#define XSTORM_QZONE_SIZE 8
79#define YSTORM_QZONE_SIZE 0
80#define PSTORM_QZONE_SIZE 0
81
Yuval Mintz05fafbf2016-08-19 09:33:31 +030082#define MSTORM_VF_ZONE_DEFAULT_SIZE_LOG 7
83#define ETH_MAX_NUM_RX_QUEUES_PER_VF_DEFAULT 16
84#define ETH_MAX_NUM_RX_QUEUES_PER_VF_DOUBLE 48
85#define ETH_MAX_NUM_RX_QUEUES_PER_VF_QUAD 112
86
87/********************************/
88/* CORE (LIGHT L2) FW CONSTANTS */
89/********************************/
90
91#define CORE_LL2_MAX_RAMROD_PER_CON 8
92#define CORE_LL2_TX_BD_PAGE_SIZE_BYTES 4096
93#define CORE_LL2_RX_BD_PAGE_SIZE_BYTES 4096
94#define CORE_LL2_RX_CQE_PAGE_SIZE_BYTES 4096
95#define CORE_LL2_RX_NUM_NEXT_PAGE_BDS 1
96
97#define CORE_LL2_TX_MAX_BDS_PER_PACKET 12
98
99#define CORE_SPQE_PAGE_SIZE_BYTES 4096
100
Mintz, Yuval7b6859f2017-05-18 19:41:04 +0300101#define MAX_NUM_LL2_RX_QUEUES 48
102#define MAX_NUM_LL2_TX_STATS_COUNTERS 48
Yuval Mintz351a4ded2016-06-02 10:23:29 +0300103
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200104#define FW_MAJOR_VERSION 8
Mintz, Yuval7b6859f2017-05-18 19:41:04 +0300105#define FW_MINOR_VERSION 20
106#define FW_REVISION_VERSION 0
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200107#define FW_ENGINEERING_VERSION 0
108
109/***********************/
110/* COMMON HW CONSTANTS */
111/***********************/
112
113/* PCI functions */
114#define MAX_NUM_PORTS_K2 (4)
115#define MAX_NUM_PORTS_BB (2)
116#define MAX_NUM_PORTS (MAX_NUM_PORTS_K2)
117
118#define MAX_NUM_PFS_K2 (16)
119#define MAX_NUM_PFS_BB (8)
120#define MAX_NUM_PFS (MAX_NUM_PFS_K2)
121#define MAX_NUM_OF_PFS_IN_CHIP (16) /* On both engines */
122
123#define MAX_NUM_VFS_K2 (192)
124#define MAX_NUM_VFS_BB (120)
125#define MAX_NUM_VFS (MAX_NUM_VFS_K2)
126
127#define MAX_NUM_FUNCTIONS_BB (MAX_NUM_PFS_BB + MAX_NUM_VFS_BB)
128#define MAX_NUM_FUNCTIONS (MAX_NUM_PFS + MAX_NUM_VFS)
129
130#define MAX_FUNCTION_NUMBER_BB (MAX_NUM_PFS + MAX_NUM_VFS_BB)
131#define MAX_FUNCTION_NUMBER (MAX_NUM_PFS + MAX_NUM_VFS)
132
133#define MAX_NUM_VPORTS_K2 (208)
134#define MAX_NUM_VPORTS_BB (160)
135#define MAX_NUM_VPORTS (MAX_NUM_VPORTS_K2)
136
137#define MAX_NUM_L2_QUEUES_K2 (320)
138#define MAX_NUM_L2_QUEUES_BB (256)
139#define MAX_NUM_L2_QUEUES (MAX_NUM_L2_QUEUES_K2)
140
141/* Traffic classes in network-facing blocks (PBF, BTB, NIG, BRB, PRS and QM) */
142#define NUM_PHYS_TCS_4PORT_K2 (4)
143#define NUM_OF_PHYS_TCS (8)
144
145#define NUM_TCS_4PORT_K2 (NUM_PHYS_TCS_4PORT_K2 + 1)
146#define NUM_OF_TCS (NUM_OF_PHYS_TCS + 1)
147
148#define LB_TC (NUM_OF_PHYS_TCS)
149
150/* Num of possible traffic priority values */
151#define NUM_OF_PRIO (8)
152
153#define MAX_NUM_VOQS_K2 (NUM_TCS_4PORT_K2 * MAX_NUM_PORTS_K2)
154#define MAX_NUM_VOQS_BB (NUM_OF_TCS * MAX_NUM_PORTS_BB)
155#define MAX_NUM_VOQS (MAX_NUM_VOQS_K2)
156#define MAX_PHYS_VOQS (NUM_OF_PHYS_TCS * MAX_NUM_PORTS_BB)
157
158/* CIDs */
159#define NUM_OF_CONNECTION_TYPES (8)
160#define NUM_OF_LCIDS (320)
161#define NUM_OF_LTIDS (320)
162
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300163/* Clock values */
164#define MASTER_CLK_FREQ_E4 (375e6)
165#define STORM_CLK_FREQ_E4 (1000e6)
166#define CLK25M_CLK_FREQ_E4 (25e6)
167
168/* Global PXP windows (GTT) */
169#define NUM_OF_GTT 19
170#define GTT_DWORD_SIZE_BITS 10
171#define GTT_BYTE_SIZE_BITS (GTT_DWORD_SIZE_BITS + 2)
172#define GTT_DWORD_SIZE BIT(GTT_DWORD_SIZE_BITS)
173
Tomer Tayarc965db42016-09-07 16:36:24 +0300174/* Tools Version */
175#define TOOLS_VERSION 10
176
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200177/*****************/
178/* CDU CONSTANTS */
179/*****************/
180
181#define CDU_SEG_TYPE_OFFSET_REG_TYPE_SHIFT (17)
182#define CDU_SEG_TYPE_OFFSET_REG_OFFSET_MASK (0x1ffff)
183
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300184#define CDU_VF_FL_SEG_TYPE_OFFSET_REG_TYPE_SHIFT (12)
185#define CDU_VF_FL_SEG_TYPE_OFFSET_REG_OFFSET_MASK (0xfff)
Mintz, Yuval7b6859f2017-05-18 19:41:04 +0300186
187#define CDU_CONTEXT_VALIDATION_CFG_ENABLE_SHIFT (0)
188#define CDU_CONTEXT_VALIDATION_CFG_VALIDATION_TYPE_SHIFT (1)
189#define CDU_CONTEXT_VALIDATION_CFG_USE_TYPE (2)
190#define CDU_CONTEXT_VALIDATION_CFG_USE_REGION (3)
191#define CDU_CONTEXT_VALIDATION_CFG_USE_CID (4)
192#define CDU_CONTEXT_VALIDATION_CFG_USE_ACTIVE (5)
193
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200194/*****************/
195/* DQ CONSTANTS */
196/*****************/
197
198/* DEMS */
199#define DQ_DEMS_LEGACY 0
Mintz, Yuvalbe086e72017-03-11 18:39:18 +0200200#define DQ_DEMS_TOE_MORE_TO_SEND 3
201#define DQ_DEMS_TOE_LOCAL_ADV_WND 4
202#define DQ_DEMS_ROCE_CQ_CONS 7
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200203
204/* XCM agg val selection */
205#define DQ_XCM_AGG_VAL_SEL_WORD2 0
206#define DQ_XCM_AGG_VAL_SEL_WORD3 1
207#define DQ_XCM_AGG_VAL_SEL_WORD4 2
208#define DQ_XCM_AGG_VAL_SEL_WORD5 3
209#define DQ_XCM_AGG_VAL_SEL_REG3 4
210#define DQ_XCM_AGG_VAL_SEL_REG4 5
211#define DQ_XCM_AGG_VAL_SEL_REG5 6
212#define DQ_XCM_AGG_VAL_SEL_REG6 7
213
214/* XCM agg val selection */
Yuval Mintz351a4ded2016-06-02 10:23:29 +0300215#define DQ_XCM_CORE_TX_BD_CONS_CMD DQ_XCM_AGG_VAL_SEL_WORD3
216#define DQ_XCM_CORE_TX_BD_PROD_CMD DQ_XCM_AGG_VAL_SEL_WORD4
217#define DQ_XCM_CORE_SPQ_PROD_CMD DQ_XCM_AGG_VAL_SEL_WORD4
218#define DQ_XCM_ETH_EDPM_NUM_BDS_CMD DQ_XCM_AGG_VAL_SEL_WORD2
219#define DQ_XCM_ETH_TX_BD_CONS_CMD DQ_XCM_AGG_VAL_SEL_WORD3
220#define DQ_XCM_ETH_TX_BD_PROD_CMD DQ_XCM_AGG_VAL_SEL_WORD4
221#define DQ_XCM_ETH_GO_TO_BD_CONS_CMD DQ_XCM_AGG_VAL_SEL_WORD5
Arun Easi1e128c82017-02-15 06:28:22 -0800222#define DQ_XCM_FCOE_SQ_CONS_CMD DQ_XCM_AGG_VAL_SEL_WORD3
223#define DQ_XCM_FCOE_SQ_PROD_CMD DQ_XCM_AGG_VAL_SEL_WORD4
224#define DQ_XCM_FCOE_X_FERQ_PROD_CMD DQ_XCM_AGG_VAL_SEL_WORD5
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300225#define DQ_XCM_ISCSI_SQ_CONS_CMD DQ_XCM_AGG_VAL_SEL_WORD3
226#define DQ_XCM_ISCSI_SQ_PROD_CMD DQ_XCM_AGG_VAL_SEL_WORD4
227#define DQ_XCM_ISCSI_MORE_TO_SEND_SEQ_CMD DQ_XCM_AGG_VAL_SEL_REG3
228#define DQ_XCM_ISCSI_EXP_STAT_SN_CMD DQ_XCM_AGG_VAL_SEL_REG6
229#define DQ_XCM_ROCE_SQ_PROD_CMD DQ_XCM_AGG_VAL_SEL_WORD4
Mintz, Yuvalbe086e72017-03-11 18:39:18 +0200230#define DQ_XCM_TOE_TX_BD_PROD_CMD DQ_XCM_AGG_VAL_SEL_WORD4
231#define DQ_XCM_TOE_MORE_TO_SEND_SEQ_CMD DQ_XCM_AGG_VAL_SEL_REG3
232#define DQ_XCM_TOE_LOCAL_ADV_WND_SEQ_CMD DQ_XCM_AGG_VAL_SEL_REG4
Yuval Mintz351a4ded2016-06-02 10:23:29 +0300233
234/* UCM agg val selection (HW) */
235#define DQ_UCM_AGG_VAL_SEL_WORD0 0
236#define DQ_UCM_AGG_VAL_SEL_WORD1 1
237#define DQ_UCM_AGG_VAL_SEL_WORD2 2
238#define DQ_UCM_AGG_VAL_SEL_WORD3 3
239#define DQ_UCM_AGG_VAL_SEL_REG0 4
240#define DQ_UCM_AGG_VAL_SEL_REG1 5
241#define DQ_UCM_AGG_VAL_SEL_REG2 6
242#define DQ_UCM_AGG_VAL_SEL_REG3 7
243
244/* UCM agg val selection (FW) */
245#define DQ_UCM_ETH_PMD_TX_CONS_CMD DQ_UCM_AGG_VAL_SEL_WORD2
246#define DQ_UCM_ETH_PMD_RX_CONS_CMD DQ_UCM_AGG_VAL_SEL_WORD3
247#define DQ_UCM_ROCE_CQ_CONS_CMD DQ_UCM_AGG_VAL_SEL_REG0
248#define DQ_UCM_ROCE_CQ_PROD_CMD DQ_UCM_AGG_VAL_SEL_REG2
249
250/* TCM agg val selection (HW) */
251#define DQ_TCM_AGG_VAL_SEL_WORD0 0
252#define DQ_TCM_AGG_VAL_SEL_WORD1 1
253#define DQ_TCM_AGG_VAL_SEL_WORD2 2
254#define DQ_TCM_AGG_VAL_SEL_WORD3 3
255#define DQ_TCM_AGG_VAL_SEL_REG1 4
256#define DQ_TCM_AGG_VAL_SEL_REG2 5
257#define DQ_TCM_AGG_VAL_SEL_REG6 6
258#define DQ_TCM_AGG_VAL_SEL_REG9 7
259
260/* TCM agg val selection (FW) */
261#define DQ_TCM_L2B_BD_PROD_CMD \
262 DQ_TCM_AGG_VAL_SEL_WORD1
263#define DQ_TCM_ROCE_RQ_PROD_CMD \
264 DQ_TCM_AGG_VAL_SEL_WORD0
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200265
266/* XCM agg counter flag selection */
Yuval Mintz351a4ded2016-06-02 10:23:29 +0300267#define DQ_XCM_AGG_FLG_SHIFT_BIT14 0
268#define DQ_XCM_AGG_FLG_SHIFT_BIT15 1
269#define DQ_XCM_AGG_FLG_SHIFT_CF12 2
270#define DQ_XCM_AGG_FLG_SHIFT_CF13 3
271#define DQ_XCM_AGG_FLG_SHIFT_CF18 4
272#define DQ_XCM_AGG_FLG_SHIFT_CF19 5
273#define DQ_XCM_AGG_FLG_SHIFT_CF22 6
274#define DQ_XCM_AGG_FLG_SHIFT_CF23 7
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200275
276/* XCM agg counter flag selection */
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300277#define DQ_XCM_CORE_DQ_CF_CMD BIT(DQ_XCM_AGG_FLG_SHIFT_CF18)
278#define DQ_XCM_CORE_TERMINATE_CMD BIT(DQ_XCM_AGG_FLG_SHIFT_CF19)
279#define DQ_XCM_CORE_SLOW_PATH_CMD BIT(DQ_XCM_AGG_FLG_SHIFT_CF22)
280#define DQ_XCM_ETH_DQ_CF_CMD BIT(DQ_XCM_AGG_FLG_SHIFT_CF18)
281#define DQ_XCM_ETH_TERMINATE_CMD BIT(DQ_XCM_AGG_FLG_SHIFT_CF19)
282#define DQ_XCM_ETH_SLOW_PATH_CMD BIT(DQ_XCM_AGG_FLG_SHIFT_CF22)
283#define DQ_XCM_ETH_TPH_EN_CMD BIT(DQ_XCM_AGG_FLG_SHIFT_CF23)
Arun Easi1e128c82017-02-15 06:28:22 -0800284#define DQ_XCM_FCOE_SLOW_PATH_CMD BIT(DQ_XCM_AGG_FLG_SHIFT_CF22)
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300285#define DQ_XCM_ISCSI_DQ_FLUSH_CMD BIT(DQ_XCM_AGG_FLG_SHIFT_CF19)
286#define DQ_XCM_ISCSI_SLOW_PATH_CMD BIT(DQ_XCM_AGG_FLG_SHIFT_CF22)
287#define DQ_XCM_ISCSI_PROC_ONLY_CLEANUP_CMD BIT(DQ_XCM_AGG_FLG_SHIFT_CF23)
Mintz, Yuvalbe086e72017-03-11 18:39:18 +0200288#define DQ_XCM_TOE_DQ_FLUSH_CMD BIT(DQ_XCM_AGG_FLG_SHIFT_CF19)
289#define DQ_XCM_TOE_SLOW_PATH_CMD BIT(DQ_XCM_AGG_FLG_SHIFT_CF22)
Yuval Mintz351a4ded2016-06-02 10:23:29 +0300290
291/* UCM agg counter flag selection (HW) */
292#define DQ_UCM_AGG_FLG_SHIFT_CF0 0
293#define DQ_UCM_AGG_FLG_SHIFT_CF1 1
294#define DQ_UCM_AGG_FLG_SHIFT_CF3 2
295#define DQ_UCM_AGG_FLG_SHIFT_CF4 3
296#define DQ_UCM_AGG_FLG_SHIFT_CF5 4
297#define DQ_UCM_AGG_FLG_SHIFT_CF6 5
298#define DQ_UCM_AGG_FLG_SHIFT_RULE0EN 6
299#define DQ_UCM_AGG_FLG_SHIFT_RULE1EN 7
300
301/* UCM agg counter flag selection (FW) */
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300302#define DQ_UCM_ETH_PMD_TX_ARM_CMD BIT(DQ_UCM_AGG_FLG_SHIFT_CF4)
303#define DQ_UCM_ETH_PMD_RX_ARM_CMD BIT(DQ_UCM_AGG_FLG_SHIFT_CF5)
304#define DQ_UCM_ROCE_CQ_ARM_SE_CF_CMD BIT(DQ_UCM_AGG_FLG_SHIFT_CF4)
305#define DQ_UCM_ROCE_CQ_ARM_CF_CMD BIT(DQ_UCM_AGG_FLG_SHIFT_CF5)
Mintz, Yuvalbe086e72017-03-11 18:39:18 +0200306#define DQ_UCM_TOE_TIMER_STOP_ALL_CMD BIT(DQ_UCM_AGG_FLG_SHIFT_CF3)
307#define DQ_UCM_TOE_SLOW_PATH_CF_CMD BIT(DQ_UCM_AGG_FLG_SHIFT_CF4)
308#define DQ_UCM_TOE_DQ_CF_CMD BIT(DQ_UCM_AGG_FLG_SHIFT_CF5)
Yuval Mintz351a4ded2016-06-02 10:23:29 +0300309
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300310/* TCM agg counter flag selection (HW) */
311#define DQ_TCM_AGG_FLG_SHIFT_CF0 0
312#define DQ_TCM_AGG_FLG_SHIFT_CF1 1
313#define DQ_TCM_AGG_FLG_SHIFT_CF2 2
314#define DQ_TCM_AGG_FLG_SHIFT_CF3 3
315#define DQ_TCM_AGG_FLG_SHIFT_CF4 4
316#define DQ_TCM_AGG_FLG_SHIFT_CF5 5
317#define DQ_TCM_AGG_FLG_SHIFT_CF6 6
318#define DQ_TCM_AGG_FLG_SHIFT_CF7 7
319/* TCM agg counter flag selection (FW) */
Arun Easi1e128c82017-02-15 06:28:22 -0800320#define DQ_TCM_FCOE_FLUSH_Q0_CMD BIT(DQ_TCM_AGG_FLG_SHIFT_CF1)
321#define DQ_TCM_FCOE_DUMMY_TIMER_CMD BIT(DQ_TCM_AGG_FLG_SHIFT_CF2)
322#define DQ_TCM_FCOE_TIMER_STOP_ALL_CMD BIT(DQ_TCM_AGG_FLG_SHIFT_CF3)
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300323#define DQ_TCM_ISCSI_FLUSH_Q0_CMD BIT(DQ_TCM_AGG_FLG_SHIFT_CF1)
324#define DQ_TCM_ISCSI_TIMER_STOP_ALL_CMD BIT(DQ_TCM_AGG_FLG_SHIFT_CF3)
Mintz, Yuvalbe086e72017-03-11 18:39:18 +0200325#define DQ_TCM_TOE_FLUSH_Q0_CMD BIT(DQ_TCM_AGG_FLG_SHIFT_CF1)
326#define DQ_TCM_TOE_TIMER_STOP_ALL_CMD BIT(DQ_TCM_AGG_FLG_SHIFT_CF3)
327#define DQ_TCM_IWARP_POST_RQ_CF_CMD BIT(DQ_TCM_AGG_FLG_SHIFT_CF1)
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300328
329/* PWM address mapping */
330#define DQ_PWM_OFFSET_DPM_BASE 0x0
331#define DQ_PWM_OFFSET_DPM_END 0x27
332#define DQ_PWM_OFFSET_XCM16_BASE 0x40
333#define DQ_PWM_OFFSET_XCM32_BASE 0x44
334#define DQ_PWM_OFFSET_UCM16_BASE 0x48
335#define DQ_PWM_OFFSET_UCM32_BASE 0x4C
336#define DQ_PWM_OFFSET_UCM16_4 0x50
337#define DQ_PWM_OFFSET_TCM16_BASE 0x58
338#define DQ_PWM_OFFSET_TCM32_BASE 0x5C
339#define DQ_PWM_OFFSET_XCM_FLAGS 0x68
340#define DQ_PWM_OFFSET_UCM_FLAGS 0x69
341#define DQ_PWM_OFFSET_TCM_FLAGS 0x6B
342
343#define DQ_PWM_OFFSET_XCM_RDMA_SQ_PROD (DQ_PWM_OFFSET_XCM16_BASE + 2)
344#define DQ_PWM_OFFSET_UCM_RDMA_CQ_CONS_32BIT (DQ_PWM_OFFSET_UCM32_BASE)
345#define DQ_PWM_OFFSET_UCM_RDMA_CQ_CONS_16BIT (DQ_PWM_OFFSET_UCM16_4)
346#define DQ_PWM_OFFSET_UCM_RDMA_INT_TIMEOUT (DQ_PWM_OFFSET_UCM16_BASE + 2)
347#define DQ_PWM_OFFSET_UCM_RDMA_ARM_FLAGS (DQ_PWM_OFFSET_UCM_FLAGS)
348#define DQ_PWM_OFFSET_TCM_ROCE_RQ_PROD (DQ_PWM_OFFSET_TCM16_BASE + 1)
349#define DQ_PWM_OFFSET_TCM_IWARP_RQ_PROD (DQ_PWM_OFFSET_TCM16_BASE + 3)
Yuval Mintz351a4ded2016-06-02 10:23:29 +0300350#define DQ_REGION_SHIFT (12)
351
352/* DPM */
353#define DQ_DPM_WQE_BUFF_SIZE (320)
354
355/* Conn type ranges */
356#define DQ_CONN_TYPE_RANGE_SHIFT (4)
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200357
358/*****************/
359/* QM CONSTANTS */
360/*****************/
361
362/* number of TX queues in the QM */
363#define MAX_QM_TX_QUEUES_K2 512
364#define MAX_QM_TX_QUEUES_BB 448
365#define MAX_QM_TX_QUEUES MAX_QM_TX_QUEUES_K2
366
367/* number of Other queues in the QM */
368#define MAX_QM_OTHER_QUEUES_BB 64
369#define MAX_QM_OTHER_QUEUES_K2 128
370#define MAX_QM_OTHER_QUEUES MAX_QM_OTHER_QUEUES_K2
371
372/* number of queues in a PF queue group */
373#define QM_PF_QUEUE_GROUP_SIZE 8
374
Yuval Mintzfc48b7a2016-02-15 13:22:35 -0500375/* the size of a single queue element in bytes */
376#define QM_PQ_ELEMENT_SIZE 4
377
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200378/* base number of Tx PQs in the CM PQ representation.
379 * should be used when storing PQ IDs in CM PQ registers and context
380 */
381#define CM_TX_PQ_BASE 0x200
382
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300383/* number of global Vport/QCN rate limiters */
384#define MAX_QM_GLOBAL_RLS 256
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200385/* QM registers data */
386#define QM_LINE_CRD_REG_WIDTH 16
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300387#define QM_LINE_CRD_REG_SIGN_BIT BIT((QM_LINE_CRD_REG_WIDTH - 1))
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200388#define QM_BYTE_CRD_REG_WIDTH 24
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300389#define QM_BYTE_CRD_REG_SIGN_BIT BIT((QM_BYTE_CRD_REG_WIDTH - 1))
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200390#define QM_WFQ_CRD_REG_WIDTH 32
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300391#define QM_WFQ_CRD_REG_SIGN_BIT BIT((QM_WFQ_CRD_REG_WIDTH - 1))
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200392#define QM_RL_CRD_REG_WIDTH 32
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300393#define QM_RL_CRD_REG_SIGN_BIT BIT((QM_RL_CRD_REG_WIDTH - 1))
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200394
395/*****************/
396/* CAU CONSTANTS */
397/*****************/
398
399#define CAU_FSM_ETH_RX 0
400#define CAU_FSM_ETH_TX 1
401
402/* Number of Protocol Indices per Status Block */
403#define PIS_PER_SB 12
404
405#define CAU_HC_STOPPED_STATE 3
406#define CAU_HC_DISABLE_STATE 4
407#define CAU_HC_ENABLE_STATE 0
408
409/*****************/
410/* IGU CONSTANTS */
411/*****************/
412
413#define MAX_SB_PER_PATH_K2 (368)
414#define MAX_SB_PER_PATH_BB (288)
415#define MAX_TOT_SB_PER_PATH \
416 MAX_SB_PER_PATH_K2
417
418#define MAX_SB_PER_PF_MIMD 129
419#define MAX_SB_PER_PF_SIMD 64
420#define MAX_SB_PER_VF 64
421
422/* Memory addresses on the BAR for the IGU Sub Block */
423#define IGU_MEM_BASE 0x0000
424
425#define IGU_MEM_MSIX_BASE 0x0000
426#define IGU_MEM_MSIX_UPPER 0x0101
427#define IGU_MEM_MSIX_RESERVED_UPPER 0x01ff
428
429#define IGU_MEM_PBA_MSIX_BASE 0x0200
430#define IGU_MEM_PBA_MSIX_UPPER 0x0202
431#define IGU_MEM_PBA_MSIX_RESERVED_UPPER 0x03ff
432
433#define IGU_CMD_INT_ACK_BASE 0x0400
434#define IGU_CMD_INT_ACK_UPPER (IGU_CMD_INT_ACK_BASE + \
435 MAX_TOT_SB_PER_PATH - \
436 1)
437#define IGU_CMD_INT_ACK_RESERVED_UPPER 0x05ff
438
439#define IGU_CMD_ATTN_BIT_UPD_UPPER 0x05f0
440#define IGU_CMD_ATTN_BIT_SET_UPPER 0x05f1
441#define IGU_CMD_ATTN_BIT_CLR_UPPER 0x05f2
442
443#define IGU_REG_SISR_MDPC_WMASK_UPPER 0x05f3
444#define IGU_REG_SISR_MDPC_WMASK_LSB_UPPER 0x05f4
445#define IGU_REG_SISR_MDPC_WMASK_MSB_UPPER 0x05f5
446#define IGU_REG_SISR_MDPC_WOMASK_UPPER 0x05f6
447
448#define IGU_CMD_PROD_UPD_BASE 0x0600
449#define IGU_CMD_PROD_UPD_UPPER (IGU_CMD_PROD_UPD_BASE +\
450 MAX_TOT_SB_PER_PATH - \
451 1)
452#define IGU_CMD_PROD_UPD_RESERVED_UPPER 0x07ff
453
454/*****************/
455/* PXP CONSTANTS */
456/*****************/
457
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300458/* Bars for Blocks */
459#define PXP_BAR_GRC 0
460#define PXP_BAR_TSDM 0
461#define PXP_BAR_USDM 0
462#define PXP_BAR_XSDM 0
463#define PXP_BAR_MSDM 0
464#define PXP_BAR_YSDM 0
465#define PXP_BAR_PSDM 0
466#define PXP_BAR_IGU 0
467#define PXP_BAR_DQ 1
468
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200469/* PTT and GTT */
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200470#define PXP_PER_PF_ENTRY_SIZE 8
471#define PXP_NUM_GLOBAL_WINDOWS 243
472#define PXP_GLOBAL_ENTRY_SIZE 4
473#define PXP_ADMIN_WINDOW_ALLOWED_LENGTH 4
474#define PXP_PF_WINDOW_ADMIN_START 0
475#define PXP_PF_WINDOW_ADMIN_LENGTH 0x1000
476#define PXP_PF_WINDOW_ADMIN_END (PXP_PF_WINDOW_ADMIN_START + \
477 PXP_PF_WINDOW_ADMIN_LENGTH - 1)
478#define PXP_PF_WINDOW_ADMIN_PER_PF_START 0
479#define PXP_PF_WINDOW_ADMIN_PER_PF_LENGTH (PXP_NUM_PF_WINDOWS * \
480 PXP_PER_PF_ENTRY_SIZE)
481#define PXP_PF_WINDOW_ADMIN_PER_PF_END (PXP_PF_WINDOW_ADMIN_PER_PF_START + \
482 PXP_PF_WINDOW_ADMIN_PER_PF_LENGTH - 1)
483#define PXP_PF_WINDOW_ADMIN_GLOBAL_START 0x200
484#define PXP_PF_WINDOW_ADMIN_GLOBAL_LENGTH (PXP_NUM_GLOBAL_WINDOWS * \
485 PXP_GLOBAL_ENTRY_SIZE)
486#define PXP_PF_WINDOW_ADMIN_GLOBAL_END \
487 (PXP_PF_WINDOW_ADMIN_GLOBAL_START + \
488 PXP_PF_WINDOW_ADMIN_GLOBAL_LENGTH - 1)
489#define PXP_PF_GLOBAL_PRETEND_ADDR 0x1f0
490#define PXP_PF_ME_OPAQUE_MASK_ADDR 0xf4
491#define PXP_PF_ME_OPAQUE_ADDR 0x1f8
492#define PXP_PF_ME_CONCRETE_ADDR 0x1fc
493
Mintz, Yuval7b6859f2017-05-18 19:41:04 +0300494#define PXP_NUM_PF_WINDOWS 12
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200495#define PXP_EXTERNAL_BAR_PF_WINDOW_START 0x1000
496#define PXP_EXTERNAL_BAR_PF_WINDOW_NUM PXP_NUM_PF_WINDOWS
497#define PXP_EXTERNAL_BAR_PF_WINDOW_SINGLE_SIZE 0x1000
498#define PXP_EXTERNAL_BAR_PF_WINDOW_LENGTH \
499 (PXP_EXTERNAL_BAR_PF_WINDOW_NUM * \
500 PXP_EXTERNAL_BAR_PF_WINDOW_SINGLE_SIZE)
501#define PXP_EXTERNAL_BAR_PF_WINDOW_END \
502 (PXP_EXTERNAL_BAR_PF_WINDOW_START + \
503 PXP_EXTERNAL_BAR_PF_WINDOW_LENGTH - 1)
504
505#define PXP_EXTERNAL_BAR_GLOBAL_WINDOW_START \
506 (PXP_EXTERNAL_BAR_PF_WINDOW_END + 1)
507#define PXP_EXTERNAL_BAR_GLOBAL_WINDOW_NUM PXP_NUM_GLOBAL_WINDOWS
508#define PXP_EXTERNAL_BAR_GLOBAL_WINDOW_SINGLE_SIZE 0x1000
509#define PXP_EXTERNAL_BAR_GLOBAL_WINDOW_LENGTH \
510 (PXP_EXTERNAL_BAR_GLOBAL_WINDOW_NUM * \
511 PXP_EXTERNAL_BAR_GLOBAL_WINDOW_SINGLE_SIZE)
512#define PXP_EXTERNAL_BAR_GLOBAL_WINDOW_END \
513 (PXP_EXTERNAL_BAR_GLOBAL_WINDOW_START + \
514 PXP_EXTERNAL_BAR_GLOBAL_WINDOW_LENGTH - 1)
515
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300516/* PF BAR */
517#define PXP_BAR0_START_GRC 0x0000
518#define PXP_BAR0_GRC_LENGTH 0x1C00000
519#define PXP_BAR0_END_GRC (PXP_BAR0_START_GRC + \
520 PXP_BAR0_GRC_LENGTH - 1)
521
522#define PXP_BAR0_START_IGU 0x1C00000
523#define PXP_BAR0_IGU_LENGTH 0x10000
524#define PXP_BAR0_END_IGU (PXP_BAR0_START_IGU + \
525 PXP_BAR0_IGU_LENGTH - 1)
526
527#define PXP_BAR0_START_TSDM 0x1C80000
528#define PXP_BAR0_SDM_LENGTH 0x40000
529#define PXP_BAR0_SDM_RESERVED_LENGTH 0x40000
530#define PXP_BAR0_END_TSDM (PXP_BAR0_START_TSDM + \
531 PXP_BAR0_SDM_LENGTH - 1)
532
533#define PXP_BAR0_START_MSDM 0x1D00000
534#define PXP_BAR0_END_MSDM (PXP_BAR0_START_MSDM + \
535 PXP_BAR0_SDM_LENGTH - 1)
536
537#define PXP_BAR0_START_USDM 0x1D80000
538#define PXP_BAR0_END_USDM (PXP_BAR0_START_USDM + \
539 PXP_BAR0_SDM_LENGTH - 1)
540
541#define PXP_BAR0_START_XSDM 0x1E00000
542#define PXP_BAR0_END_XSDM (PXP_BAR0_START_XSDM + \
543 PXP_BAR0_SDM_LENGTH - 1)
544
545#define PXP_BAR0_START_YSDM 0x1E80000
546#define PXP_BAR0_END_YSDM (PXP_BAR0_START_YSDM + \
547 PXP_BAR0_SDM_LENGTH - 1)
548
549#define PXP_BAR0_START_PSDM 0x1F00000
550#define PXP_BAR0_END_PSDM (PXP_BAR0_START_PSDM + \
551 PXP_BAR0_SDM_LENGTH - 1)
552
553#define PXP_BAR0_FIRST_INVALID_ADDRESS (PXP_BAR0_END_PSDM + 1)
554
555/* VF BAR */
556#define PXP_VF_BAR0 0
557
558#define PXP_VF_BAR0_START_GRC 0x3E00
559#define PXP_VF_BAR0_GRC_LENGTH 0x200
560#define PXP_VF_BAR0_END_GRC (PXP_VF_BAR0_START_GRC + \
561 PXP_VF_BAR0_GRC_LENGTH - 1)
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200562
Yuval Mintz1408cc1f2016-05-11 16:36:14 +0300563#define PXP_VF_BAR0_START_IGU 0
564#define PXP_VF_BAR0_IGU_LENGTH 0x3000
565#define PXP_VF_BAR0_END_IGU (PXP_VF_BAR0_START_IGU + \
566 PXP_VF_BAR0_IGU_LENGTH - 1)
567
568#define PXP_VF_BAR0_START_DQ 0x3000
569#define PXP_VF_BAR0_DQ_LENGTH 0x200
570#define PXP_VF_BAR0_DQ_OPAQUE_OFFSET 0
571#define PXP_VF_BAR0_ME_OPAQUE_ADDRESS (PXP_VF_BAR0_START_DQ + \
572 PXP_VF_BAR0_DQ_OPAQUE_OFFSET)
573#define PXP_VF_BAR0_ME_CONCRETE_ADDRESS (PXP_VF_BAR0_ME_OPAQUE_ADDRESS \
574 + 4)
575#define PXP_VF_BAR0_END_DQ (PXP_VF_BAR0_START_DQ + \
576 PXP_VF_BAR0_DQ_LENGTH - 1)
577
578#define PXP_VF_BAR0_START_TSDM_ZONE_B 0x3200
579#define PXP_VF_BAR0_SDM_LENGTH_ZONE_B 0x200
580#define PXP_VF_BAR0_END_TSDM_ZONE_B (PXP_VF_BAR0_START_TSDM_ZONE_B \
581 + \
582 PXP_VF_BAR0_SDM_LENGTH_ZONE_B \
583 - 1)
584
585#define PXP_VF_BAR0_START_MSDM_ZONE_B 0x3400
586#define PXP_VF_BAR0_END_MSDM_ZONE_B (PXP_VF_BAR0_START_MSDM_ZONE_B \
587 + \
588 PXP_VF_BAR0_SDM_LENGTH_ZONE_B \
589 - 1)
590
591#define PXP_VF_BAR0_START_USDM_ZONE_B 0x3600
592#define PXP_VF_BAR0_END_USDM_ZONE_B (PXP_VF_BAR0_START_USDM_ZONE_B \
593 + \
594 PXP_VF_BAR0_SDM_LENGTH_ZONE_B \
595 - 1)
596
597#define PXP_VF_BAR0_START_XSDM_ZONE_B 0x3800
598#define PXP_VF_BAR0_END_XSDM_ZONE_B (PXP_VF_BAR0_START_XSDM_ZONE_B \
599 + \
600 PXP_VF_BAR0_SDM_LENGTH_ZONE_B \
601 - 1)
602
603#define PXP_VF_BAR0_START_YSDM_ZONE_B 0x3a00
604#define PXP_VF_BAR0_END_YSDM_ZONE_B (PXP_VF_BAR0_START_YSDM_ZONE_B \
605 + \
606 PXP_VF_BAR0_SDM_LENGTH_ZONE_B \
607 - 1)
608
609#define PXP_VF_BAR0_START_PSDM_ZONE_B 0x3c00
610#define PXP_VF_BAR0_END_PSDM_ZONE_B (PXP_VF_BAR0_START_PSDM_ZONE_B \
611 + \
612 PXP_VF_BAR0_SDM_LENGTH_ZONE_B \
613 - 1)
614
615#define PXP_VF_BAR0_START_SDM_ZONE_A 0x4000
616#define PXP_VF_BAR0_END_SDM_ZONE_A 0x10000
617
618#define PXP_VF_BAR0_GRC_WINDOW_LENGTH 32
619
Yuval Mintz351a4ded2016-06-02 10:23:29 +0300620#define PXP_ILT_PAGE_SIZE_NUM_BITS_MIN 12
621#define PXP_ILT_BLOCK_FACTOR_MULTIPLIER 1024
622
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200623/* ILT Records */
624#define PXP_NUM_ILT_RECORDS_BB 7600
625#define PXP_NUM_ILT_RECORDS_K2 11000
626#define MAX_NUM_ILT_RECORDS MAX(PXP_NUM_ILT_RECORDS_BB, PXP_NUM_ILT_RECORDS_K2)
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300627#define PXP_QUEUES_ZONE_MAX_NUM 320
628/*****************/
629/* PRM CONSTANTS */
630/*****************/
Mintz, Yuval7b6859f2017-05-18 19:41:04 +0300631#define PRM_DMA_PAD_BYTES_NUM 2
632/*****************/
633/* SDMs CONSTANTS */
634/*****************/
635
636#define SDM_OP_GEN_TRIG_NONE 0
637#define SDM_OP_GEN_TRIG_WAKE_THREAD 1
638#define SDM_OP_GEN_TRIG_AGG_INT 2
639#define SDM_OP_GEN_TRIG_LOADER 4
640#define SDM_OP_GEN_TRIG_INDICATE_ERROR 6
641#define SDM_OP_GEN_TRIG_INC_ORDER_CNT 9
642
643/********************/
644/* Completion types */
645/********************/
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200646
Yuval Mintzfc48b7a2016-02-15 13:22:35 -0500647#define SDM_COMP_TYPE_NONE 0
648#define SDM_COMP_TYPE_WAKE_THREAD 1
649#define SDM_COMP_TYPE_AGG_INT 2
650#define SDM_COMP_TYPE_CM 3
651#define SDM_COMP_TYPE_LOADER 4
652#define SDM_COMP_TYPE_PXP 5
653#define SDM_COMP_TYPE_INDICATE_ERROR 6
654#define SDM_COMP_TYPE_RELEASE_THREAD 7
655#define SDM_COMP_TYPE_RAM 8
Mintz, Yuval7b6859f2017-05-18 19:41:04 +0300656#define SDM_COMP_TYPE_INC_ORDER_CNT 9
Yuval Mintzfc48b7a2016-02-15 13:22:35 -0500657
Mintz, Yuval7b6859f2017-05-18 19:41:04 +0300658/*****************/
659/* PBF Constants */
660/*****************/
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200661
662/* Number of PBF command queue lines. Each line is 32B. */
663#define PBF_MAX_CMD_LINES 3328
664
665/* Number of BTB blocks. Each block is 256B. */
666#define BTB_MAX_BLOCKS 1440
667
668/*****************/
669/* PRS CONSTANTS */
670/*****************/
671
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300672#define PRS_GFT_CAM_LINES_NO_MATCH 31
673
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200674/* Async data KCQ CQE */
675struct async_data {
676 __le32 cid;
677 __le16 itid;
678 u8 error_code;
679 u8 fw_debug_param;
680};
681
Yuval Mintz351a4ded2016-06-02 10:23:29 +0300682struct coalescing_timeset {
683 u8 value;
684#define COALESCING_TIMESET_TIMESET_MASK 0x7F
685#define COALESCING_TIMESET_TIMESET_SHIFT 0
686#define COALESCING_TIMESET_VALID_MASK 0x1
687#define COALESCING_TIMESET_VALID_SHIFT 7
688};
689
Yuval Mintz351a4ded2016-06-02 10:23:29 +0300690struct common_queue_zone {
691 __le16 ring_drv_data_consumer;
692 __le16 reserved;
693};
694
695struct eth_rx_prod_data {
696 __le16 bd_prod;
697 __le16 cqe_prod;
698};
699
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200700struct regpair {
701 __le32 lo;
702 __le32 hi;
703};
704
Yuval Mintz37bff2b2016-05-11 16:36:13 +0300705struct vf_pf_channel_eqe_data {
706 struct regpair msg_addr;
707};
708
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300709struct iscsi_eqe_data {
710 __le32 cid;
711 __le16 conn_id;
712 u8 error_code;
713 u8 error_pdu_opcode_reserved;
714#define ISCSI_EQE_DATA_ERROR_PDU_OPCODE_MASK 0x3F
715#define ISCSI_EQE_DATA_ERROR_PDU_OPCODE_SHIFT 0
716#define ISCSI_EQE_DATA_ERROR_PDU_OPCODE_VALID_MASK 0x1
717#define ISCSI_EQE_DATA_ERROR_PDU_OPCODE_VALID_SHIFT 6
718#define ISCSI_EQE_DATA_RESERVED0_MASK 0x1
719#define ISCSI_EQE_DATA_RESERVED0_SHIFT 7
720};
721
Mintz, Yuvalbe086e72017-03-11 18:39:18 +0200722struct rdma_eqe_destroy_qp {
723 __le32 cid;
724 u8 reserved[4];
725};
726
727union rdma_eqe_data {
728 struct regpair async_handle;
729 struct rdma_eqe_destroy_qp rdma_destroy_qp_data;
730};
731
Yuval Mintz351a4ded2016-06-02 10:23:29 +0300732struct malicious_vf_eqe_data {
733 u8 vf_id;
734 u8 err_id;
735 __le16 reserved[3];
736};
737
738struct initial_cleanup_eqe_data {
739 u8 vf_id;
740 u8 reserved[7];
741};
742
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200743/* Event Data Union */
744union event_ring_data {
Yuval Mintz351a4ded2016-06-02 10:23:29 +0300745 u8 bytes[8];
746 struct vf_pf_channel_eqe_data vf_pf_channel;
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300747 struct iscsi_eqe_data iscsi_info;
Mintz, Yuvalbe086e72017-03-11 18:39:18 +0200748 union rdma_eqe_data rdma_data;
Yuval Mintz351a4ded2016-06-02 10:23:29 +0300749 struct malicious_vf_eqe_data malicious_vf;
750 struct initial_cleanup_eqe_data vf_init_cleanup;
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200751};
752
753/* Event Ring Entry */
754struct event_ring_entry {
755 u8 protocol_id;
756 u8 opcode;
757 __le16 reserved0;
758 __le16 echo;
759 u8 fw_return_code;
760 u8 flags;
761#define EVENT_RING_ENTRY_ASYNC_MASK 0x1
762#define EVENT_RING_ENTRY_ASYNC_SHIFT 0
763#define EVENT_RING_ENTRY_RESERVED1_MASK 0x7F
764#define EVENT_RING_ENTRY_RESERVED1_SHIFT 1
765 union event_ring_data data;
766};
767
768/* Multi function mode */
769enum mf_mode {
Yuval Mintzfc48b7a2016-02-15 13:22:35 -0500770 ERROR_MODE /* Unsupported mode */,
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200771 MF_OVLAN,
772 MF_NPAR,
773 MAX_MF_MODE
774};
775
776/* Per-protocol connection types */
777enum protocol_type {
Yuval Mintzc5ac9312016-06-03 14:35:34 +0300778 PROTOCOLID_ISCSI,
Arun Easi1e128c82017-02-15 06:28:22 -0800779 PROTOCOLID_FCOE,
Yuval Mintzc5ac9312016-06-03 14:35:34 +0300780 PROTOCOLID_ROCE,
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200781 PROTOCOLID_CORE,
782 PROTOCOLID_ETH,
Kalderon, Michalc851a9d2017-07-02 10:29:21 +0300783 PROTOCOLID_IWARP,
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200784 PROTOCOLID_RESERVED5,
785 PROTOCOLID_PREROCE,
786 PROTOCOLID_COMMON,
787 PROTOCOLID_RESERVED6,
788 MAX_PROTOCOL_TYPE
789};
790
Yuval Mintz351a4ded2016-06-02 10:23:29 +0300791struct ustorm_eth_queue_zone {
792 struct coalescing_timeset int_coalescing_timeset;
793 u8 reserved[3];
794};
795
796struct ustorm_queue_zone {
797 struct ustorm_eth_queue_zone eth;
798 struct common_queue_zone common;
799};
800
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200801/* status block structure */
802struct cau_pi_entry {
803 u32 prod;
804#define CAU_PI_ENTRY_PROD_VAL_MASK 0xFFFF
805#define CAU_PI_ENTRY_PROD_VAL_SHIFT 0
806#define CAU_PI_ENTRY_PI_TIMESET_MASK 0x7F
807#define CAU_PI_ENTRY_PI_TIMESET_SHIFT 16
808#define CAU_PI_ENTRY_FSM_SEL_MASK 0x1
809#define CAU_PI_ENTRY_FSM_SEL_SHIFT 23
810#define CAU_PI_ENTRY_RESERVED_MASK 0xFF
811#define CAU_PI_ENTRY_RESERVED_SHIFT 24
812};
813
814/* status block structure */
815struct cau_sb_entry {
816 u32 data;
817#define CAU_SB_ENTRY_SB_PROD_MASK 0xFFFFFF
818#define CAU_SB_ENTRY_SB_PROD_SHIFT 0
819#define CAU_SB_ENTRY_STATE0_MASK 0xF
820#define CAU_SB_ENTRY_STATE0_SHIFT 24
821#define CAU_SB_ENTRY_STATE1_MASK 0xF
822#define CAU_SB_ENTRY_STATE1_SHIFT 28
823 u32 params;
824#define CAU_SB_ENTRY_SB_TIMESET0_MASK 0x7F
825#define CAU_SB_ENTRY_SB_TIMESET0_SHIFT 0
826#define CAU_SB_ENTRY_SB_TIMESET1_MASK 0x7F
827#define CAU_SB_ENTRY_SB_TIMESET1_SHIFT 7
828#define CAU_SB_ENTRY_TIMER_RES0_MASK 0x3
829#define CAU_SB_ENTRY_TIMER_RES0_SHIFT 14
830#define CAU_SB_ENTRY_TIMER_RES1_MASK 0x3
831#define CAU_SB_ENTRY_TIMER_RES1_SHIFT 16
832#define CAU_SB_ENTRY_VF_NUMBER_MASK 0xFF
833#define CAU_SB_ENTRY_VF_NUMBER_SHIFT 18
834#define CAU_SB_ENTRY_VF_VALID_MASK 0x1
835#define CAU_SB_ENTRY_VF_VALID_SHIFT 26
836#define CAU_SB_ENTRY_PF_NUMBER_MASK 0xF
837#define CAU_SB_ENTRY_PF_NUMBER_SHIFT 27
838#define CAU_SB_ENTRY_TPH_MASK 0x1
839#define CAU_SB_ENTRY_TPH_SHIFT 31
840};
841
842/* core doorbell data */
843struct core_db_data {
844 u8 params;
845#define CORE_DB_DATA_DEST_MASK 0x3
846#define CORE_DB_DATA_DEST_SHIFT 0
847#define CORE_DB_DATA_AGG_CMD_MASK 0x3
848#define CORE_DB_DATA_AGG_CMD_SHIFT 2
849#define CORE_DB_DATA_BYPASS_EN_MASK 0x1
850#define CORE_DB_DATA_BYPASS_EN_SHIFT 4
851#define CORE_DB_DATA_RESERVED_MASK 0x1
852#define CORE_DB_DATA_RESERVED_SHIFT 5
853#define CORE_DB_DATA_AGG_VAL_SEL_MASK 0x3
854#define CORE_DB_DATA_AGG_VAL_SEL_SHIFT 6
855 u8 agg_flags;
856 __le16 spq_prod;
857};
858
859/* Enum of doorbell aggregative command selection */
860enum db_agg_cmd_sel {
861 DB_AGG_CMD_NOP,
862 DB_AGG_CMD_SET,
863 DB_AGG_CMD_ADD,
864 DB_AGG_CMD_MAX,
865 MAX_DB_AGG_CMD_SEL
866};
867
868/* Enum of doorbell destination */
869enum db_dest {
870 DB_DEST_XCM,
871 DB_DEST_UCM,
872 DB_DEST_TCM,
873 DB_NUM_DESTINATIONS,
874 MAX_DB_DEST
875};
876
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300877/* Enum of doorbell DPM types */
878enum db_dpm_type {
879 DPM_LEGACY,
Mintz, Yuval7b6859f2017-05-18 19:41:04 +0300880 DPM_RDMA,
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300881 DPM_L2_INLINE,
882 DPM_L2_BD,
883 MAX_DB_DPM_TYPE
884};
885
886/* Structure for doorbell data, in L2 DPM mode, for 1st db in a DPM burst */
887struct db_l2_dpm_data {
888 __le16 icid;
889 __le16 bd_prod;
890 __le32 params;
891#define DB_L2_DPM_DATA_SIZE_MASK 0x3F
892#define DB_L2_DPM_DATA_SIZE_SHIFT 0
893#define DB_L2_DPM_DATA_DPM_TYPE_MASK 0x3
894#define DB_L2_DPM_DATA_DPM_TYPE_SHIFT 6
895#define DB_L2_DPM_DATA_NUM_BDS_MASK 0xFF
896#define DB_L2_DPM_DATA_NUM_BDS_SHIFT 8
897#define DB_L2_DPM_DATA_PKT_SIZE_MASK 0x7FF
898#define DB_L2_DPM_DATA_PKT_SIZE_SHIFT 16
899#define DB_L2_DPM_DATA_RESERVED0_MASK 0x1
900#define DB_L2_DPM_DATA_RESERVED0_SHIFT 27
901#define DB_L2_DPM_DATA_SGE_NUM_MASK 0x7
902#define DB_L2_DPM_DATA_SGE_NUM_SHIFT 28
Mintz, Yuval7b6859f2017-05-18 19:41:04 +0300903#define DB_L2_DPM_DATA_GFS_SRC_EN_MASK 0x1
904#define DB_L2_DPM_DATA_GFS_SRC_EN_SHIFT 31
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300905};
906
907/* Structure for SGE in a DPM doorbell of type DPM_L2_BD */
908struct db_l2_dpm_sge {
909 struct regpair addr;
910 __le16 nbytes;
911 __le16 bitfields;
912#define DB_L2_DPM_SGE_TPH_ST_INDEX_MASK 0x1FF
913#define DB_L2_DPM_SGE_TPH_ST_INDEX_SHIFT 0
914#define DB_L2_DPM_SGE_RESERVED0_MASK 0x3
915#define DB_L2_DPM_SGE_RESERVED0_SHIFT 9
916#define DB_L2_DPM_SGE_ST_VALID_MASK 0x1
917#define DB_L2_DPM_SGE_ST_VALID_SHIFT 11
918#define DB_L2_DPM_SGE_RESERVED1_MASK 0xF
919#define DB_L2_DPM_SGE_RESERVED1_SHIFT 12
920 __le32 reserved2;
921};
922
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200923/* Structure for doorbell address, in legacy mode */
924struct db_legacy_addr {
925 __le32 addr;
926#define DB_LEGACY_ADDR_RESERVED0_MASK 0x3
927#define DB_LEGACY_ADDR_RESERVED0_SHIFT 0
928#define DB_LEGACY_ADDR_DEMS_MASK 0x7
929#define DB_LEGACY_ADDR_DEMS_SHIFT 2
930#define DB_LEGACY_ADDR_ICID_MASK 0x7FFFFFF
931#define DB_LEGACY_ADDR_ICID_SHIFT 5
932};
933
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300934/* Structure for doorbell address, in PWM mode */
935struct db_pwm_addr {
936 __le32 addr;
937#define DB_PWM_ADDR_RESERVED0_MASK 0x7
938#define DB_PWM_ADDR_RESERVED0_SHIFT 0
939#define DB_PWM_ADDR_OFFSET_MASK 0x7F
940#define DB_PWM_ADDR_OFFSET_SHIFT 3
941#define DB_PWM_ADDR_WID_MASK 0x3
942#define DB_PWM_ADDR_WID_SHIFT 10
943#define DB_PWM_ADDR_DPI_MASK 0xFFFF
944#define DB_PWM_ADDR_DPI_SHIFT 12
945#define DB_PWM_ADDR_RESERVED1_MASK 0xF
946#define DB_PWM_ADDR_RESERVED1_SHIFT 28
947};
948
949/* Parameters to RoCE firmware, passed in EDPM doorbell */
Mintz, Yuval7b6859f2017-05-18 19:41:04 +0300950struct db_rdma_dpm_params {
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300951 __le32 params;
Mintz, Yuval7b6859f2017-05-18 19:41:04 +0300952#define DB_RDMA_DPM_PARAMS_SIZE_MASK 0x3F
953#define DB_RDMA_DPM_PARAMS_SIZE_SHIFT 0
954#define DB_RDMA_DPM_PARAMS_DPM_TYPE_MASK 0x3
955#define DB_RDMA_DPM_PARAMS_DPM_TYPE_SHIFT 6
956#define DB_RDMA_DPM_PARAMS_OPCODE_MASK 0xFF
957#define DB_RDMA_DPM_PARAMS_OPCODE_SHIFT 8
958#define DB_RDMA_DPM_PARAMS_WQE_SIZE_MASK 0x7FF
959#define DB_RDMA_DPM_PARAMS_WQE_SIZE_SHIFT 16
960#define DB_RDMA_DPM_PARAMS_RESERVED0_MASK 0x1
961#define DB_RDMA_DPM_PARAMS_RESERVED0_SHIFT 27
962#define DB_RDMA_DPM_PARAMS_COMPLETION_FLG_MASK 0x1
963#define DB_RDMA_DPM_PARAMS_COMPLETION_FLG_SHIFT 28
964#define DB_RDMA_DPM_PARAMS_S_FLG_MASK 0x1
965#define DB_RDMA_DPM_PARAMS_S_FLG_SHIFT 29
966#define DB_RDMA_DPM_PARAMS_RESERVED1_MASK 0x1
967#define DB_RDMA_DPM_PARAMS_RESERVED1_SHIFT 30
968#define DB_RDMA_DPM_PARAMS_CONN_TYPE_IS_IWARP_MASK 0x1
969#define DB_RDMA_DPM_PARAMS_CONN_TYPE_IS_IWARP_SHIFT 31
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300970};
971
972/* Structure for doorbell data, in ROCE DPM mode, for 1st db in a DPM burst */
Mintz, Yuval7b6859f2017-05-18 19:41:04 +0300973struct db_rdma_dpm_data {
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300974 __le16 icid;
975 __le16 prod_val;
Mintz, Yuval7b6859f2017-05-18 19:41:04 +0300976 struct db_rdma_dpm_params params;
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300977};
978
Yuval Mintzfe56b9e2015-10-26 11:02:25 +0200979/* Igu interrupt command */
980enum igu_int_cmd {
981 IGU_INT_ENABLE = 0,
982 IGU_INT_DISABLE = 1,
983 IGU_INT_NOP = 2,
984 IGU_INT_NOP2 = 3,
985 MAX_IGU_INT_CMD
986};
987
988/* IGU producer or consumer update command */
989struct igu_prod_cons_update {
990 u32 sb_id_and_flags;
991#define IGU_PROD_CONS_UPDATE_SB_INDEX_MASK 0xFFFFFF
992#define IGU_PROD_CONS_UPDATE_SB_INDEX_SHIFT 0
993#define IGU_PROD_CONS_UPDATE_UPDATE_FLAG_MASK 0x1
994#define IGU_PROD_CONS_UPDATE_UPDATE_FLAG_SHIFT 24
995#define IGU_PROD_CONS_UPDATE_ENABLE_INT_MASK 0x3
996#define IGU_PROD_CONS_UPDATE_ENABLE_INT_SHIFT 25
997#define IGU_PROD_CONS_UPDATE_SEGMENT_ACCESS_MASK 0x1
998#define IGU_PROD_CONS_UPDATE_SEGMENT_ACCESS_SHIFT 27
999#define IGU_PROD_CONS_UPDATE_TIMER_MASK_MASK 0x1
1000#define IGU_PROD_CONS_UPDATE_TIMER_MASK_SHIFT 28
1001#define IGU_PROD_CONS_UPDATE_RESERVED0_MASK 0x3
1002#define IGU_PROD_CONS_UPDATE_RESERVED0_SHIFT 29
1003#define IGU_PROD_CONS_UPDATE_COMMAND_TYPE_MASK 0x1
1004#define IGU_PROD_CONS_UPDATE_COMMAND_TYPE_SHIFT 31
1005 u32 reserved1;
1006};
1007
1008/* Igu segments access for default status block only */
1009enum igu_seg_access {
1010 IGU_SEG_ACCESS_REG = 0,
1011 IGU_SEG_ACCESS_ATTN = 1,
1012 MAX_IGU_SEG_ACCESS
1013};
1014
1015struct parsing_and_err_flags {
1016 __le16 flags;
1017#define PARSING_AND_ERR_FLAGS_L3TYPE_MASK 0x3
1018#define PARSING_AND_ERR_FLAGS_L3TYPE_SHIFT 0
1019#define PARSING_AND_ERR_FLAGS_L4PROTOCOL_MASK 0x3
1020#define PARSING_AND_ERR_FLAGS_L4PROTOCOL_SHIFT 2
1021#define PARSING_AND_ERR_FLAGS_IPV4FRAG_MASK 0x1
1022#define PARSING_AND_ERR_FLAGS_IPV4FRAG_SHIFT 4
1023#define PARSING_AND_ERR_FLAGS_TAG8021QEXIST_MASK 0x1
1024#define PARSING_AND_ERR_FLAGS_TAG8021QEXIST_SHIFT 5
1025#define PARSING_AND_ERR_FLAGS_L4CHKSMWASCALCULATED_MASK 0x1
1026#define PARSING_AND_ERR_FLAGS_L4CHKSMWASCALCULATED_SHIFT 6
1027#define PARSING_AND_ERR_FLAGS_TIMESYNCPKT_MASK 0x1
1028#define PARSING_AND_ERR_FLAGS_TIMESYNCPKT_SHIFT 7
1029#define PARSING_AND_ERR_FLAGS_TIMESTAMPRECORDED_MASK 0x1
1030#define PARSING_AND_ERR_FLAGS_TIMESTAMPRECORDED_SHIFT 8
1031#define PARSING_AND_ERR_FLAGS_IPHDRERROR_MASK 0x1
1032#define PARSING_AND_ERR_FLAGS_IPHDRERROR_SHIFT 9
1033#define PARSING_AND_ERR_FLAGS_L4CHKSMERROR_MASK 0x1
1034#define PARSING_AND_ERR_FLAGS_L4CHKSMERROR_SHIFT 10
1035#define PARSING_AND_ERR_FLAGS_TUNNELEXIST_MASK 0x1
1036#define PARSING_AND_ERR_FLAGS_TUNNELEXIST_SHIFT 11
1037#define PARSING_AND_ERR_FLAGS_TUNNEL8021QTAGEXIST_MASK 0x1
1038#define PARSING_AND_ERR_FLAGS_TUNNEL8021QTAGEXIST_SHIFT 12
1039#define PARSING_AND_ERR_FLAGS_TUNNELIPHDRERROR_MASK 0x1
1040#define PARSING_AND_ERR_FLAGS_TUNNELIPHDRERROR_SHIFT 13
1041#define PARSING_AND_ERR_FLAGS_TUNNELL4CHKSMWASCALCULATED_MASK 0x1
1042#define PARSING_AND_ERR_FLAGS_TUNNELL4CHKSMWASCALCULATED_SHIFT 14
1043#define PARSING_AND_ERR_FLAGS_TUNNELL4CHKSMERROR_MASK 0x1
1044#define PARSING_AND_ERR_FLAGS_TUNNELL4CHKSMERROR_SHIFT 15
1045};
1046
Mintz, Yuval7b6859f2017-05-18 19:41:04 +03001047struct parsing_err_flags {
1048 __le16 flags;
1049#define PARSING_ERR_FLAGS_MAC_ERROR_MASK 0x1
1050#define PARSING_ERR_FLAGS_MAC_ERROR_SHIFT 0
1051#define PARSING_ERR_FLAGS_TRUNC_ERROR_MASK 0x1
1052#define PARSING_ERR_FLAGS_TRUNC_ERROR_SHIFT 1
1053#define PARSING_ERR_FLAGS_PKT_TOO_SMALL_MASK 0x1
1054#define PARSING_ERR_FLAGS_PKT_TOO_SMALL_SHIFT 2
1055#define PARSING_ERR_FLAGS_ANY_HDR_MISSING_TAG_MASK 0x1
1056#define PARSING_ERR_FLAGS_ANY_HDR_MISSING_TAG_SHIFT 3
1057#define PARSING_ERR_FLAGS_ANY_HDR_IP_VER_MISMTCH_MASK 0x1
1058#define PARSING_ERR_FLAGS_ANY_HDR_IP_VER_MISMTCH_SHIFT 4
1059#define PARSING_ERR_FLAGS_ANY_HDR_IP_V4_HDR_LEN_TOO_SMALL_MASK 0x1
1060#define PARSING_ERR_FLAGS_ANY_HDR_IP_V4_HDR_LEN_TOO_SMALL_SHIFT 5
1061#define PARSING_ERR_FLAGS_ANY_HDR_IP_BAD_TOTAL_LEN_MASK 0x1
1062#define PARSING_ERR_FLAGS_ANY_HDR_IP_BAD_TOTAL_LEN_SHIFT 6
1063#define PARSING_ERR_FLAGS_IP_V4_CHKSM_ERROR_MASK 0x1
1064#define PARSING_ERR_FLAGS_IP_V4_CHKSM_ERROR_SHIFT 7
1065#define PARSING_ERR_FLAGS_ANY_HDR_L4_IP_LEN_MISMTCH_MASK 0x1
1066#define PARSING_ERR_FLAGS_ANY_HDR_L4_IP_LEN_MISMTCH_SHIFT 8
1067#define PARSING_ERR_FLAGS_ZERO_UDP_IP_V6_CHKSM_MASK 0x1
1068#define PARSING_ERR_FLAGS_ZERO_UDP_IP_V6_CHKSM_SHIFT 9
1069#define PARSING_ERR_FLAGS_INNER_L4_CHKSM_ERROR_MASK 0x1
1070#define PARSING_ERR_FLAGS_INNER_L4_CHKSM_ERROR_SHIFT 10
1071#define PARSING_ERR_FLAGS_ANY_HDR_ZERO_TTL_OR_HOP_LIM_MASK 0x1
1072#define PARSING_ERR_FLAGS_ANY_HDR_ZERO_TTL_OR_HOP_LIM_SHIFT 11
1073#define PARSING_ERR_FLAGS_NON_8021Q_TAG_EXISTS_IN_BOTH_HDRS_MASK 0x1
1074#define PARSING_ERR_FLAGS_NON_8021Q_TAG_EXISTS_IN_BOTH_HDRS_SHIFT 12
1075#define PARSING_ERR_FLAGS_GENEVE_OPTION_OVERSIZED_MASK 0x1
1076#define PARSING_ERR_FLAGS_GENEVE_OPTION_OVERSIZED_SHIFT 13
1077#define PARSING_ERR_FLAGS_TUNNEL_IP_V4_CHKSM_ERROR_MASK 0x1
1078#define PARSING_ERR_FLAGS_TUNNEL_IP_V4_CHKSM_ERROR_SHIFT 14
1079#define PARSING_ERR_FLAGS_TUNNEL_L4_CHKSM_ERROR_MASK 0x1
1080#define PARSING_ERR_FLAGS_TUNNEL_L4_CHKSM_ERROR_SHIFT 15
1081};
1082
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001083struct pb_context {
1084 __le32 crc[4];
1085};
1086
Yuval Mintzfe56b9e2015-10-26 11:02:25 +02001087struct pxp_concrete_fid {
1088 __le16 fid;
1089#define PXP_CONCRETE_FID_PFID_MASK 0xF
1090#define PXP_CONCRETE_FID_PFID_SHIFT 0
1091#define PXP_CONCRETE_FID_PORT_MASK 0x3
1092#define PXP_CONCRETE_FID_PORT_SHIFT 4
1093#define PXP_CONCRETE_FID_PATH_MASK 0x1
1094#define PXP_CONCRETE_FID_PATH_SHIFT 6
1095#define PXP_CONCRETE_FID_VFVALID_MASK 0x1
1096#define PXP_CONCRETE_FID_VFVALID_SHIFT 7
1097#define PXP_CONCRETE_FID_VFID_MASK 0xFF
1098#define PXP_CONCRETE_FID_VFID_SHIFT 8
1099};
1100
1101struct pxp_pretend_concrete_fid {
1102 __le16 fid;
1103#define PXP_PRETEND_CONCRETE_FID_PFID_MASK 0xF
1104#define PXP_PRETEND_CONCRETE_FID_PFID_SHIFT 0
1105#define PXP_PRETEND_CONCRETE_FID_RESERVED_MASK 0x7
1106#define PXP_PRETEND_CONCRETE_FID_RESERVED_SHIFT 4
1107#define PXP_PRETEND_CONCRETE_FID_VFVALID_MASK 0x1
1108#define PXP_PRETEND_CONCRETE_FID_VFVALID_SHIFT 7
1109#define PXP_PRETEND_CONCRETE_FID_VFID_MASK 0xFF
1110#define PXP_PRETEND_CONCRETE_FID_VFID_SHIFT 8
1111};
1112
1113union pxp_pretend_fid {
1114 struct pxp_pretend_concrete_fid concrete_fid;
1115 __le16 opaque_fid;
1116};
1117
1118/* Pxp Pretend Command Register. */
1119struct pxp_pretend_cmd {
1120 union pxp_pretend_fid fid;
1121 __le16 control;
1122#define PXP_PRETEND_CMD_PATH_MASK 0x1
1123#define PXP_PRETEND_CMD_PATH_SHIFT 0
1124#define PXP_PRETEND_CMD_USE_PORT_MASK 0x1
1125#define PXP_PRETEND_CMD_USE_PORT_SHIFT 1
1126#define PXP_PRETEND_CMD_PORT_MASK 0x3
1127#define PXP_PRETEND_CMD_PORT_SHIFT 2
1128#define PXP_PRETEND_CMD_RESERVED0_MASK 0xF
1129#define PXP_PRETEND_CMD_RESERVED0_SHIFT 4
1130#define PXP_PRETEND_CMD_RESERVED1_MASK 0xF
1131#define PXP_PRETEND_CMD_RESERVED1_SHIFT 8
1132#define PXP_PRETEND_CMD_PRETEND_PATH_MASK 0x1
1133#define PXP_PRETEND_CMD_PRETEND_PATH_SHIFT 12
1134#define PXP_PRETEND_CMD_PRETEND_PORT_MASK 0x1
1135#define PXP_PRETEND_CMD_PRETEND_PORT_SHIFT 13
1136#define PXP_PRETEND_CMD_PRETEND_FUNCTION_MASK 0x1
1137#define PXP_PRETEND_CMD_PRETEND_FUNCTION_SHIFT 14
1138#define PXP_PRETEND_CMD_IS_CONCRETE_MASK 0x1
1139#define PXP_PRETEND_CMD_IS_CONCRETE_SHIFT 15
1140};
1141
1142/* PTT Record in PXP Admin Window. */
1143struct pxp_ptt_entry {
1144 __le32 offset;
1145#define PXP_PTT_ENTRY_OFFSET_MASK 0x7FFFFF
1146#define PXP_PTT_ENTRY_OFFSET_SHIFT 0
1147#define PXP_PTT_ENTRY_RESERVED0_MASK 0x1FF
1148#define PXP_PTT_ENTRY_RESERVED0_SHIFT 23
1149 struct pxp_pretend_cmd pretend;
1150};
1151
Yuval Mintz05fafbf2016-08-19 09:33:31 +03001152/* VF Zone A Permission Register. */
1153struct pxp_vf_zone_a_permission {
1154 __le32 control;
1155#define PXP_VF_ZONE_A_PERMISSION_VFID_MASK 0xFF
1156#define PXP_VF_ZONE_A_PERMISSION_VFID_SHIFT 0
1157#define PXP_VF_ZONE_A_PERMISSION_VALID_MASK 0x1
1158#define PXP_VF_ZONE_A_PERMISSION_VALID_SHIFT 8
1159#define PXP_VF_ZONE_A_PERMISSION_RESERVED0_MASK 0x7F
1160#define PXP_VF_ZONE_A_PERMISSION_RESERVED0_SHIFT 9
1161#define PXP_VF_ZONE_A_PERMISSION_RESERVED1_MASK 0xFFFF
1162#define PXP_VF_ZONE_A_PERMISSION_RESERVED1_SHIFT 16
1163};
1164
Yuval Mintzfe56b9e2015-10-26 11:02:25 +02001165/* RSS hash type */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001166struct rdif_task_context {
1167 __le32 initial_ref_tag;
1168 __le16 app_tag_value;
1169 __le16 app_tag_mask;
1170 u8 flags0;
1171#define RDIF_TASK_CONTEXT_IGNOREAPPTAG_MASK 0x1
1172#define RDIF_TASK_CONTEXT_IGNOREAPPTAG_SHIFT 0
1173#define RDIF_TASK_CONTEXT_INITIALREFTAGVALID_MASK 0x1
1174#define RDIF_TASK_CONTEXT_INITIALREFTAGVALID_SHIFT 1
1175#define RDIF_TASK_CONTEXT_HOSTGUARDTYPE_MASK 0x1
1176#define RDIF_TASK_CONTEXT_HOSTGUARDTYPE_SHIFT 2
1177#define RDIF_TASK_CONTEXT_SETERRORWITHEOP_MASK 0x1
1178#define RDIF_TASK_CONTEXT_SETERRORWITHEOP_SHIFT 3
1179#define RDIF_TASK_CONTEXT_PROTECTIONTYPE_MASK 0x3
1180#define RDIF_TASK_CONTEXT_PROTECTIONTYPE_SHIFT 4
1181#define RDIF_TASK_CONTEXT_CRC_SEED_MASK 0x1
1182#define RDIF_TASK_CONTEXT_CRC_SEED_SHIFT 6
1183#define RDIF_TASK_CONTEXT_KEEPREFTAGCONST_MASK 0x1
1184#define RDIF_TASK_CONTEXT_KEEPREFTAGCONST_SHIFT 7
1185 u8 partial_dif_data[7];
1186 __le16 partial_crc_value;
1187 __le16 partial_checksum_value;
1188 __le32 offset_in_io;
1189 __le16 flags1;
1190#define RDIF_TASK_CONTEXT_VALIDATEGUARD_MASK 0x1
1191#define RDIF_TASK_CONTEXT_VALIDATEGUARD_SHIFT 0
1192#define RDIF_TASK_CONTEXT_VALIDATEAPPTAG_MASK 0x1
1193#define RDIF_TASK_CONTEXT_VALIDATEAPPTAG_SHIFT 1
1194#define RDIF_TASK_CONTEXT_VALIDATEREFTAG_MASK 0x1
1195#define RDIF_TASK_CONTEXT_VALIDATEREFTAG_SHIFT 2
1196#define RDIF_TASK_CONTEXT_FORWARDGUARD_MASK 0x1
1197#define RDIF_TASK_CONTEXT_FORWARDGUARD_SHIFT 3
1198#define RDIF_TASK_CONTEXT_FORWARDAPPTAG_MASK 0x1
1199#define RDIF_TASK_CONTEXT_FORWARDAPPTAG_SHIFT 4
1200#define RDIF_TASK_CONTEXT_FORWARDREFTAG_MASK 0x1
1201#define RDIF_TASK_CONTEXT_FORWARDREFTAG_SHIFT 5
1202#define RDIF_TASK_CONTEXT_INTERVALSIZE_MASK 0x7
1203#define RDIF_TASK_CONTEXT_INTERVALSIZE_SHIFT 6
1204#define RDIF_TASK_CONTEXT_HOSTINTERFACE_MASK 0x3
1205#define RDIF_TASK_CONTEXT_HOSTINTERFACE_SHIFT 9
1206#define RDIF_TASK_CONTEXT_DIFBEFOREDATA_MASK 0x1
1207#define RDIF_TASK_CONTEXT_DIFBEFOREDATA_SHIFT 11
1208#define RDIF_TASK_CONTEXT_RESERVED0_MASK 0x1
1209#define RDIF_TASK_CONTEXT_RESERVED0_SHIFT 12
1210#define RDIF_TASK_CONTEXT_NETWORKINTERFACE_MASK 0x1
1211#define RDIF_TASK_CONTEXT_NETWORKINTERFACE_SHIFT 13
1212#define RDIF_TASK_CONTEXT_FORWARDAPPTAGWITHMASK_MASK 0x1
1213#define RDIF_TASK_CONTEXT_FORWARDAPPTAGWITHMASK_SHIFT 14
1214#define RDIF_TASK_CONTEXT_FORWARDREFTAGWITHMASK_MASK 0x1
1215#define RDIF_TASK_CONTEXT_FORWARDREFTAGWITHMASK_SHIFT 15
1216 __le16 state;
1217#define RDIF_TASK_CONTEXT_RECEIVEDDIFBYTESLEFT_MASK 0xF
1218#define RDIF_TASK_CONTEXT_RECEIVEDDIFBYTESLEFT_SHIFT 0
1219#define RDIF_TASK_CONTEXT_TRANSMITEDDIFBYTESLEFT_MASK 0xF
1220#define RDIF_TASK_CONTEXT_TRANSMITEDDIFBYTESLEFT_SHIFT 4
1221#define RDIF_TASK_CONTEXT_ERRORINIO_MASK 0x1
1222#define RDIF_TASK_CONTEXT_ERRORINIO_SHIFT 8
1223#define RDIF_TASK_CONTEXT_CHECKSUMOVERFLOW_MASK 0x1
1224#define RDIF_TASK_CONTEXT_CHECKSUMOVERFLOW_SHIFT 9
1225#define RDIF_TASK_CONTEXT_REFTAGMASK_MASK 0xF
1226#define RDIF_TASK_CONTEXT_REFTAGMASK_SHIFT 10
1227#define RDIF_TASK_CONTEXT_RESERVED1_MASK 0x3
1228#define RDIF_TASK_CONTEXT_RESERVED1_SHIFT 14
1229 __le32 reserved2;
1230};
1231
Yuval Mintz05fafbf2016-08-19 09:33:31 +03001232/* RSS hash type */
Yuval Mintzfe56b9e2015-10-26 11:02:25 +02001233enum rss_hash_type {
1234 RSS_HASH_TYPE_DEFAULT = 0,
1235 RSS_HASH_TYPE_IPV4 = 1,
1236 RSS_HASH_TYPE_TCP_IPV4 = 2,
1237 RSS_HASH_TYPE_IPV6 = 3,
1238 RSS_HASH_TYPE_TCP_IPV6 = 4,
1239 RSS_HASH_TYPE_UDP_IPV4 = 5,
1240 RSS_HASH_TYPE_UDP_IPV6 = 6,
1241 MAX_RSS_HASH_TYPE
1242};
1243
1244/* status block structure */
1245struct status_block {
1246 __le16 pi_array[PIS_PER_SB];
1247 __le32 sb_num;
1248#define STATUS_BLOCK_SB_NUM_MASK 0x1FF
1249#define STATUS_BLOCK_SB_NUM_SHIFT 0
1250#define STATUS_BLOCK_ZERO_PAD_MASK 0x7F
1251#define STATUS_BLOCK_ZERO_PAD_SHIFT 9
1252#define STATUS_BLOCK_ZERO_PAD2_MASK 0xFFFF
1253#define STATUS_BLOCK_ZERO_PAD2_SHIFT 16
1254 __le32 prod_index;
1255#define STATUS_BLOCK_PROD_INDEX_MASK 0xFFFFFF
1256#define STATUS_BLOCK_PROD_INDEX_SHIFT 0
1257#define STATUS_BLOCK_ZERO_PAD3_MASK 0xFF
1258#define STATUS_BLOCK_ZERO_PAD3_SHIFT 24
1259};
1260
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001261struct tdif_task_context {
1262 __le32 initial_ref_tag;
1263 __le16 app_tag_value;
1264 __le16 app_tag_mask;
1265 __le16 partial_crc_valueB;
1266 __le16 partial_checksum_valueB;
1267 __le16 stateB;
1268#define TDIF_TASK_CONTEXT_RECEIVEDDIFBYTESLEFTB_MASK 0xF
1269#define TDIF_TASK_CONTEXT_RECEIVEDDIFBYTESLEFTB_SHIFT 0
1270#define TDIF_TASK_CONTEXT_TRANSMITEDDIFBYTESLEFTB_MASK 0xF
1271#define TDIF_TASK_CONTEXT_TRANSMITEDDIFBYTESLEFTB_SHIFT 4
1272#define TDIF_TASK_CONTEXT_ERRORINIOB_MASK 0x1
1273#define TDIF_TASK_CONTEXT_ERRORINIOB_SHIFT 8
1274#define TDIF_TASK_CONTEXT_CHECKSUMOVERFLOW_MASK 0x1
1275#define TDIF_TASK_CONTEXT_CHECKSUMOVERFLOW_SHIFT 9
1276#define TDIF_TASK_CONTEXT_RESERVED0_MASK 0x3F
1277#define TDIF_TASK_CONTEXT_RESERVED0_SHIFT 10
1278 u8 reserved1;
1279 u8 flags0;
1280#define TDIF_TASK_CONTEXT_IGNOREAPPTAG_MASK 0x1
1281#define TDIF_TASK_CONTEXT_IGNOREAPPTAG_SHIFT 0
1282#define TDIF_TASK_CONTEXT_INITIALREFTAGVALID_MASK 0x1
1283#define TDIF_TASK_CONTEXT_INITIALREFTAGVALID_SHIFT 1
1284#define TDIF_TASK_CONTEXT_HOSTGUARDTYPE_MASK 0x1
1285#define TDIF_TASK_CONTEXT_HOSTGUARDTYPE_SHIFT 2
1286#define TDIF_TASK_CONTEXT_SETERRORWITHEOP_MASK 0x1
1287#define TDIF_TASK_CONTEXT_SETERRORWITHEOP_SHIFT 3
1288#define TDIF_TASK_CONTEXT_PROTECTIONTYPE_MASK 0x3
1289#define TDIF_TASK_CONTEXT_PROTECTIONTYPE_SHIFT 4
1290#define TDIF_TASK_CONTEXT_CRC_SEED_MASK 0x1
1291#define TDIF_TASK_CONTEXT_CRC_SEED_SHIFT 6
1292#define TDIF_TASK_CONTEXT_RESERVED2_MASK 0x1
1293#define TDIF_TASK_CONTEXT_RESERVED2_SHIFT 7
1294 __le32 flags1;
1295#define TDIF_TASK_CONTEXT_VALIDATEGUARD_MASK 0x1
1296#define TDIF_TASK_CONTEXT_VALIDATEGUARD_SHIFT 0
1297#define TDIF_TASK_CONTEXT_VALIDATEAPPTAG_MASK 0x1
1298#define TDIF_TASK_CONTEXT_VALIDATEAPPTAG_SHIFT 1
1299#define TDIF_TASK_CONTEXT_VALIDATEREFTAG_MASK 0x1
1300#define TDIF_TASK_CONTEXT_VALIDATEREFTAG_SHIFT 2
1301#define TDIF_TASK_CONTEXT_FORWARDGUARD_MASK 0x1
1302#define TDIF_TASK_CONTEXT_FORWARDGUARD_SHIFT 3
1303#define TDIF_TASK_CONTEXT_FORWARDAPPTAG_MASK 0x1
1304#define TDIF_TASK_CONTEXT_FORWARDAPPTAG_SHIFT 4
1305#define TDIF_TASK_CONTEXT_FORWARDREFTAG_MASK 0x1
1306#define TDIF_TASK_CONTEXT_FORWARDREFTAG_SHIFT 5
1307#define TDIF_TASK_CONTEXT_INTERVALSIZE_MASK 0x7
1308#define TDIF_TASK_CONTEXT_INTERVALSIZE_SHIFT 6
1309#define TDIF_TASK_CONTEXT_HOSTINTERFACE_MASK 0x3
1310#define TDIF_TASK_CONTEXT_HOSTINTERFACE_SHIFT 9
1311#define TDIF_TASK_CONTEXT_DIFBEFOREDATA_MASK 0x1
1312#define TDIF_TASK_CONTEXT_DIFBEFOREDATA_SHIFT 11
1313#define TDIF_TASK_CONTEXT_RESERVED3_MASK 0x1
1314#define TDIF_TASK_CONTEXT_RESERVED3_SHIFT 12
1315#define TDIF_TASK_CONTEXT_NETWORKINTERFACE_MASK 0x1
1316#define TDIF_TASK_CONTEXT_NETWORKINTERFACE_SHIFT 13
1317#define TDIF_TASK_CONTEXT_RECEIVEDDIFBYTESLEFTA_MASK 0xF
1318#define TDIF_TASK_CONTEXT_RECEIVEDDIFBYTESLEFTA_SHIFT 14
1319#define TDIF_TASK_CONTEXT_TRANSMITEDDIFBYTESLEFTA_MASK 0xF
1320#define TDIF_TASK_CONTEXT_TRANSMITEDDIFBYTESLEFTA_SHIFT 18
1321#define TDIF_TASK_CONTEXT_ERRORINIOA_MASK 0x1
1322#define TDIF_TASK_CONTEXT_ERRORINIOA_SHIFT 22
1323#define TDIF_TASK_CONTEXT_CHECKSUMOVERFLOWA_MASK 0x1
1324#define TDIF_TASK_CONTEXT_CHECKSUMOVERFLOWA_SHIFT 23
1325#define TDIF_TASK_CONTEXT_REFTAGMASK_MASK 0xF
1326#define TDIF_TASK_CONTEXT_REFTAGMASK_SHIFT 24
1327#define TDIF_TASK_CONTEXT_FORWARDAPPTAGWITHMASK_MASK 0x1
1328#define TDIF_TASK_CONTEXT_FORWARDAPPTAGWITHMASK_SHIFT 28
1329#define TDIF_TASK_CONTEXT_FORWARDREFTAGWITHMASK_MASK 0x1
1330#define TDIF_TASK_CONTEXT_FORWARDREFTAGWITHMASK_SHIFT 29
1331#define TDIF_TASK_CONTEXT_KEEPREFTAGCONST_MASK 0x1
1332#define TDIF_TASK_CONTEXT_KEEPREFTAGCONST_SHIFT 30
1333#define TDIF_TASK_CONTEXT_RESERVED4_MASK 0x1
1334#define TDIF_TASK_CONTEXT_RESERVED4_SHIFT 31
1335 __le32 offset_in_iob;
1336 __le16 partial_crc_value_a;
1337 __le16 partial_checksum_valuea_;
1338 __le32 offset_in_ioa;
1339 u8 partial_dif_data_a[8];
1340 u8 partial_dif_data_b[8];
1341};
1342
1343struct timers_context {
Yuval Mintz05fafbf2016-08-19 09:33:31 +03001344 __le32 logical_client_0;
Mintz, Yuval7b6859f2017-05-18 19:41:04 +03001345#define TIMERS_CONTEXT_EXPIRATIONTIMELC0_MASK 0x7FFFFFF
1346#define TIMERS_CONTEXT_EXPIRATIONTIMELC0_SHIFT 0
1347#define TIMERS_CONTEXT_RESERVED0_MASK 0x1
1348#define TIMERS_CONTEXT_RESERVED0_SHIFT 27
1349#define TIMERS_CONTEXT_VALIDLC0_MASK 0x1
1350#define TIMERS_CONTEXT_VALIDLC0_SHIFT 28
1351#define TIMERS_CONTEXT_ACTIVELC0_MASK 0x1
1352#define TIMERS_CONTEXT_ACTIVELC0_SHIFT 29
1353#define TIMERS_CONTEXT_RESERVED1_MASK 0x3
1354#define TIMERS_CONTEXT_RESERVED1_SHIFT 30
Yuval Mintz05fafbf2016-08-19 09:33:31 +03001355 __le32 logical_client_1;
Mintz, Yuval7b6859f2017-05-18 19:41:04 +03001356#define TIMERS_CONTEXT_EXPIRATIONTIMELC1_MASK 0x7FFFFFF
1357#define TIMERS_CONTEXT_EXPIRATIONTIMELC1_SHIFT 0
1358#define TIMERS_CONTEXT_RESERVED2_MASK 0x1
1359#define TIMERS_CONTEXT_RESERVED2_SHIFT 27
1360#define TIMERS_CONTEXT_VALIDLC1_MASK 0x1
1361#define TIMERS_CONTEXT_VALIDLC1_SHIFT 28
1362#define TIMERS_CONTEXT_ACTIVELC1_MASK 0x1
1363#define TIMERS_CONTEXT_ACTIVELC1_SHIFT 29
1364#define TIMERS_CONTEXT_RESERVED3_MASK 0x3
1365#define TIMERS_CONTEXT_RESERVED3_SHIFT 30
Yuval Mintz05fafbf2016-08-19 09:33:31 +03001366 __le32 logical_client_2;
Mintz, Yuval7b6859f2017-05-18 19:41:04 +03001367#define TIMERS_CONTEXT_EXPIRATIONTIMELC2_MASK 0x7FFFFFF
1368#define TIMERS_CONTEXT_EXPIRATIONTIMELC2_SHIFT 0
1369#define TIMERS_CONTEXT_RESERVED4_MASK 0x1
1370#define TIMERS_CONTEXT_RESERVED4_SHIFT 27
1371#define TIMERS_CONTEXT_VALIDLC2_MASK 0x1
1372#define TIMERS_CONTEXT_VALIDLC2_SHIFT 28
1373#define TIMERS_CONTEXT_ACTIVELC2_MASK 0x1
1374#define TIMERS_CONTEXT_ACTIVELC2_SHIFT 29
1375#define TIMERS_CONTEXT_RESERVED5_MASK 0x3
1376#define TIMERS_CONTEXT_RESERVED5_SHIFT 30
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001377 __le32 host_expiration_fields;
Mintz, Yuval7b6859f2017-05-18 19:41:04 +03001378#define TIMERS_CONTEXT_HOSTEXPRIRATIONVALUE_MASK 0x7FFFFFF
1379#define TIMERS_CONTEXT_HOSTEXPRIRATIONVALUE_SHIFT 0
1380#define TIMERS_CONTEXT_RESERVED6_MASK 0x1
1381#define TIMERS_CONTEXT_RESERVED6_SHIFT 27
1382#define TIMERS_CONTEXT_HOSTEXPRIRATIONVALID_MASK 0x1
1383#define TIMERS_CONTEXT_HOSTEXPRIRATIONVALID_SHIFT 28
1384#define TIMERS_CONTEXT_RESERVED7_MASK 0x7
1385#define TIMERS_CONTEXT_RESERVED7_SHIFT 29
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001386};
Mintz, Yuval7b6859f2017-05-18 19:41:04 +03001387
1388enum tunnel_next_protocol {
1389 e_unknown = 0,
1390 e_l2 = 1,
1391 e_ipv4 = 2,
1392 e_ipv6 = 3,
1393 MAX_TUNNEL_NEXT_PROTOCOL
1394};
1395
Yuval Mintzfe56b9e2015-10-26 11:02:25 +02001396#endif /* __COMMON_HSI__ */
Yuval Mintz05fafbf2016-08-19 09:33:31 +03001397#endif