Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause
2 : : * Copyright(c) 2001-2020 Intel Corporation
3 : : */
4 : :
5 : : #ifndef _I40E_TYPE_H_
6 : : #define _I40E_TYPE_H_
7 : :
8 : : #include "i40e_status.h"
9 : : #include "i40e_osdep.h"
10 : : #include "i40e_register.h"
11 : : #include "i40e_adminq.h"
12 : : #include "i40e_hmc.h"
13 : : #include "i40e_lan_hmc.h"
14 : : #include "i40e_devids.h"
15 : :
16 : : #define UNREFERENCED_XPARAMETER
17 : : #define UNREFERENCED_1PARAMETER(_p) (_p);
18 : : #define UNREFERENCED_2PARAMETER(_p, _q) (_p); (_q);
19 : : #define UNREFERENCED_3PARAMETER(_p, _q, _r) (_p); (_q); (_r);
20 : : #define UNREFERENCED_4PARAMETER(_p, _q, _r, _s) (_p); (_q); (_r); (_s);
21 : : #define UNREFERENCED_5PARAMETER(_p, _q, _r, _s, _t) (_p); (_q); (_r); (_s); (_t);
22 : :
23 : : #ifndef LINUX_MACROS
24 : : #ifndef BIT
25 : : #define BIT(a) (1UL << (a))
26 : : #endif /* BIT */
27 : : #ifndef BIT_ULL
28 : : #define BIT_ULL(a) (1ULL << (a))
29 : : #endif /* BIT_ULL */
30 : : #endif /* LINUX_MACROS */
31 : :
32 : : #ifndef I40E_MASK
33 : : /* I40E_MASK is a macro used on 32 bit registers */
34 : : #define I40E_MASK(mask, shift) (mask << shift)
35 : : #endif
36 : :
37 : : #define I40E_MAX_PF 16
38 : : #define I40E_MAX_PF_VSI 64
39 : : #define I40E_MAX_PF_QP 128
40 : : #define I40E_MAX_VSI_QP 16
41 : : #define I40E_MAX_VF_VSI 4
42 : : #define I40E_MAX_CHAINED_RX_BUFFERS 5
43 : : #define I40E_MAX_PF_UDP_OFFLOAD_PORTS 16
44 : :
45 : : /* something less than 1 minute */
46 : : #define I40E_HEARTBEAT_TIMEOUT (HZ * 50)
47 : :
48 : : /* Max default timeout in ms, */
49 : : #define I40E_MAX_NVM_TIMEOUT 18000
50 : :
51 : : /* Max timeout in ms for the phy to respond */
52 : : #define I40E_MAX_PHY_TIMEOUT 500
53 : :
54 : : /* Check whether address is multicast. */
55 : : #define I40E_IS_MULTICAST(address) (bool)(((u8 *)(address))[0] & ((u8)0x01))
56 : :
57 : : /* Check whether an address is broadcast. */
58 : : #define I40E_IS_BROADCAST(address) \
59 : : ((((u8 *)(address))[0] == ((u8)0xff)) && \
60 : : (((u8 *)(address))[1] == ((u8)0xff)))
61 : :
62 : : /* Switch from ms to the 1usec global time (this is the GTIME resolution) */
63 : : #define I40E_MS_TO_GTIME(time) ((time) * 1000)
64 : :
65 : : /* forward declaration */
66 : : struct i40e_hw;
67 : : typedef void (*I40E_ADMINQ_CALLBACK)(struct i40e_hw *, struct i40e_aq_desc *);
68 : :
69 : : #ifndef ETH_ALEN
70 : : #define ETH_ALEN 6
71 : : #endif
72 : : /* Data type manipulation macros. */
73 : : #define I40E_HI_DWORD(x) ((u32)((((x) >> 16) >> 16) & 0xFFFFFFFF))
74 : : #define I40E_LO_DWORD(x) ((u32)((x) & 0xFFFFFFFF))
75 : :
76 : : #define I40E_HI_WORD(x) ((u16)(((x) >> 16) & 0xFFFF))
77 : : #define I40E_LO_WORD(x) ((u16)((x) & 0xFFFF))
78 : :
79 : : #define I40E_HI_BYTE(x) ((u8)(((x) >> 8) & 0xFF))
80 : : #define I40E_LO_BYTE(x) ((u8)((x) & 0xFF))
81 : :
82 : : /* Number of Transmit Descriptors must be a multiple of 32. */
83 : : #define I40E_REQ_TX_DESCRIPTOR_MULTIPLE 32
84 : : /* Number of Receive Descriptors must be a multiple of 32 if
85 : : * the number of descriptors is greater than 32.
86 : : */
87 : : #define I40E_REQ_RX_DESCRIPTOR_MULTIPLE 32
88 : :
89 : : #define I40E_DESC_UNUSED(R) \
90 : : ((((R)->next_to_clean > (R)->next_to_use) ? 0 : (R)->count) + \
91 : : (R)->next_to_clean - (R)->next_to_use - 1)
92 : :
93 : : /* bitfields for Tx queue mapping in QTX_CTL */
94 : : #define I40E_QTX_CTL_VF_QUEUE 0x0
95 : : #define I40E_QTX_CTL_VM_QUEUE 0x1
96 : : #define I40E_QTX_CTL_PF_QUEUE 0x2
97 : :
98 : : /* debug masks - set these bits in hw->debug_mask to control output */
99 : : enum i40e_debug_mask {
100 : : I40E_DEBUG_INIT = 0x00000001,
101 : : I40E_DEBUG_RELEASE = 0x00000002,
102 : :
103 : : I40E_DEBUG_LINK = 0x00000010,
104 : : I40E_DEBUG_PHY = 0x00000020,
105 : : I40E_DEBUG_HMC = 0x00000040,
106 : : I40E_DEBUG_NVM = 0x00000080,
107 : : I40E_DEBUG_LAN = 0x00000100,
108 : : I40E_DEBUG_FLOW = 0x00000200,
109 : : I40E_DEBUG_DCB = 0x00000400,
110 : : I40E_DEBUG_DIAG = 0x00000800,
111 : : I40E_DEBUG_FD = 0x00001000,
112 : : I40E_DEBUG_PACKAGE = 0x00002000,
113 : :
114 : : I40E_DEBUG_AQ_MESSAGE = 0x01000000,
115 : : I40E_DEBUG_AQ_DESCRIPTOR = 0x02000000,
116 : : I40E_DEBUG_AQ_DESC_BUFFER = 0x04000000,
117 : : I40E_DEBUG_AQ_COMMAND = 0x06000000,
118 : : I40E_DEBUG_AQ = 0x0F000000,
119 : :
120 : : I40E_DEBUG_USER = 0xF0000000,
121 : :
122 : : I40E_DEBUG_ALL = 0xFFFFFFFF
123 : : };
124 : :
125 : : /* PCI Bus Info */
126 : : #define I40E_PCI_LINK_STATUS 0xB2
127 : : #define I40E_PCI_LINK_WIDTH 0x3F0
128 : : #define I40E_PCI_LINK_WIDTH_1 0x10
129 : : #define I40E_PCI_LINK_WIDTH_2 0x20
130 : : #define I40E_PCI_LINK_WIDTH_4 0x40
131 : : #define I40E_PCI_LINK_WIDTH_8 0x80
132 : : #define I40E_PCI_LINK_SPEED 0xF
133 : : #define I40E_PCI_LINK_SPEED_2500 0x1
134 : : #define I40E_PCI_LINK_SPEED_5000 0x2
135 : : #define I40E_PCI_LINK_SPEED_8000 0x3
136 : :
137 : : #define I40E_MDIO_CLAUSE22_STCODE_MASK I40E_MASK(1, \
138 : : I40E_GLGEN_MSCA_STCODE_SHIFT)
139 : : #define I40E_MDIO_CLAUSE22_OPCODE_WRITE_MASK I40E_MASK(1, \
140 : : I40E_GLGEN_MSCA_OPCODE_SHIFT)
141 : : #define I40E_MDIO_CLAUSE22_OPCODE_READ_MASK I40E_MASK(2, \
142 : : I40E_GLGEN_MSCA_OPCODE_SHIFT)
143 : :
144 : : #define I40E_MDIO_CLAUSE45_STCODE_MASK I40E_MASK(0, \
145 : : I40E_GLGEN_MSCA_STCODE_SHIFT)
146 : : #define I40E_MDIO_CLAUSE45_OPCODE_ADDRESS_MASK I40E_MASK(0, \
147 : : I40E_GLGEN_MSCA_OPCODE_SHIFT)
148 : : #define I40E_MDIO_CLAUSE45_OPCODE_WRITE_MASK I40E_MASK(1, \
149 : : I40E_GLGEN_MSCA_OPCODE_SHIFT)
150 : : #define I40E_MDIO_CLAUSE45_OPCODE_READ_INC_ADDR_MASK I40E_MASK(2, \
151 : : I40E_GLGEN_MSCA_OPCODE_SHIFT)
152 : : #define I40E_MDIO_CLAUSE45_OPCODE_READ_MASK I40E_MASK(3, \
153 : : I40E_GLGEN_MSCA_OPCODE_SHIFT)
154 : :
155 : : #define I40E_PHY_COM_REG_PAGE 0x1E
156 : : #define I40E_PHY_LED_LINK_MODE_MASK 0xF0
157 : : #define I40E_PHY_LED_MANUAL_ON 0x100
158 : : #define I40E_PHY_LED_PROV_REG_1 0xC430
159 : : #define I40E_PHY_LED_MODE_MASK 0xFFFF
160 : : #define I40E_PHY_LED_MODE_ORIG 0x80000000
161 : :
162 : : /* Memory types */
163 : : enum i40e_memset_type {
164 : : I40E_NONDMA_MEM = 0,
165 : : I40E_DMA_MEM
166 : : };
167 : :
168 : : /* Memcpy types */
169 : : enum i40e_memcpy_type {
170 : : I40E_NONDMA_TO_NONDMA = 0,
171 : : I40E_NONDMA_TO_DMA,
172 : : I40E_DMA_TO_DMA,
173 : : I40E_DMA_TO_NONDMA
174 : : };
175 : :
176 : : /* These are structs for managing the hardware information and the operations.
177 : : * The structures of function pointers are filled out at init time when we
178 : : * know for sure exactly which hardware we're working with. This gives us the
179 : : * flexibility of using the same main driver code but adapting to slightly
180 : : * different hardware needs as new parts are developed. For this architecture,
181 : : * the Firmware and AdminQ are intended to insulate the driver from most of the
182 : : * future changes, but these structures will also do part of the job.
183 : : */
184 : : enum i40e_mac_type {
185 : : I40E_MAC_UNKNOWN = 0,
186 : : I40E_MAC_XL710,
187 : : I40E_MAC_VF,
188 : : I40E_MAC_X722,
189 : : I40E_MAC_X722_VF,
190 : : I40E_MAC_GENERIC,
191 : : };
192 : :
193 : : enum i40e_media_type {
194 : : I40E_MEDIA_TYPE_UNKNOWN = 0,
195 : : I40E_MEDIA_TYPE_FIBER,
196 : : I40E_MEDIA_TYPE_BASET,
197 : : I40E_MEDIA_TYPE_BACKPLANE,
198 : : I40E_MEDIA_TYPE_CX4,
199 : : I40E_MEDIA_TYPE_DA,
200 : : I40E_MEDIA_TYPE_VIRTUAL
201 : : };
202 : :
203 : : enum i40e_fc_mode {
204 : : I40E_FC_NONE = 0,
205 : : I40E_FC_RX_PAUSE,
206 : : I40E_FC_TX_PAUSE,
207 : : I40E_FC_FULL,
208 : : I40E_FC_PFC,
209 : : I40E_FC_DEFAULT
210 : : };
211 : :
212 : : enum i40e_set_fc_aq_failures {
213 : : I40E_SET_FC_AQ_FAIL_NONE = 0,
214 : : I40E_SET_FC_AQ_FAIL_GET = 1,
215 : : I40E_SET_FC_AQ_FAIL_SET = 2,
216 : : I40E_SET_FC_AQ_FAIL_UPDATE = 4,
217 : : I40E_SET_FC_AQ_FAIL_SET_UPDATE = 6
218 : : };
219 : :
220 : : enum i40e_vsi_type {
221 : : I40E_VSI_MAIN = 0,
222 : : I40E_VSI_VMDQ1 = 1,
223 : : I40E_VSI_VMDQ2 = 2,
224 : : I40E_VSI_CTRL = 3,
225 : : I40E_VSI_FCOE = 4,
226 : : I40E_VSI_MIRROR = 5,
227 : : I40E_VSI_SRIOV = 6,
228 : : I40E_VSI_FDIR = 7,
229 : : I40E_VSI_TYPE_UNKNOWN
230 : : };
231 : :
232 : : enum i40e_queue_type {
233 : : I40E_QUEUE_TYPE_RX = 0,
234 : : I40E_QUEUE_TYPE_TX,
235 : : I40E_QUEUE_TYPE_PE_CEQ,
236 : : I40E_QUEUE_TYPE_UNKNOWN
237 : : };
238 : :
239 : : enum i40e_prt_mac_link_speed {
240 : : I40E_PRT_MAC_LINK_SPEED_100MB = 0,
241 : : I40E_PRT_MAC_LINK_SPEED_1GB,
242 : : I40E_PRT_MAC_LINK_SPEED_10GB,
243 : : I40E_PRT_MAC_LINK_SPEED_40GB,
244 : : I40E_PRT_MAC_LINK_SPEED_20GB
245 : : };
246 : :
247 : : struct i40e_link_status {
248 : : enum i40e_aq_phy_type phy_type;
249 : : enum i40e_aq_link_speed link_speed;
250 : : u8 link_info;
251 : : u8 an_info;
252 : : u8 req_fec_info;
253 : : u8 fec_info;
254 : : u8 ext_info;
255 : : u8 loopback;
256 : : /* is Link Status Event notification to SW enabled */
257 : : bool lse_enable;
258 : : u16 max_frame_size;
259 : : bool crc_enable;
260 : : u8 pacing;
261 : : u8 requested_speeds;
262 : : u8 module_type[3];
263 : : /* 1st byte: module identifier */
264 : : #define I40E_MODULE_TYPE_SFP 0x03
265 : : #define I40E_MODULE_TYPE_QSFP 0x0D
266 : : /* 2nd byte: ethernet compliance codes for 10/40G */
267 : : #define I40E_MODULE_TYPE_40G_ACTIVE 0x01
268 : : #define I40E_MODULE_TYPE_40G_LR4 0x02
269 : : #define I40E_MODULE_TYPE_40G_SR4 0x04
270 : : #define I40E_MODULE_TYPE_40G_CR4 0x08
271 : : #define I40E_MODULE_TYPE_10G_BASE_SR 0x10
272 : : #define I40E_MODULE_TYPE_10G_BASE_LR 0x20
273 : : #define I40E_MODULE_TYPE_10G_BASE_LRM 0x40
274 : : #define I40E_MODULE_TYPE_10G_BASE_ER 0x80
275 : : /* 3rd byte: ethernet compliance codes for 1G */
276 : : #define I40E_MODULE_TYPE_1000BASE_SX 0x01
277 : : #define I40E_MODULE_TYPE_1000BASE_LX 0x02
278 : : #define I40E_MODULE_TYPE_1000BASE_CX 0x04
279 : : #define I40E_MODULE_TYPE_1000BASE_T 0x08
280 : : };
281 : :
282 : : struct i40e_phy_info {
283 : : struct i40e_link_status link_info;
284 : : struct i40e_link_status link_info_old;
285 : : bool get_link_info;
286 : : enum i40e_media_type media_type;
287 : : /* all the phy types the NVM is capable of */
288 : : u64 phy_types;
289 : : };
290 : :
291 : : #define I40E_CAP_PHY_TYPE_SGMII BIT_ULL(I40E_PHY_TYPE_SGMII)
292 : : #define I40E_CAP_PHY_TYPE_1000BASE_KX BIT_ULL(I40E_PHY_TYPE_1000BASE_KX)
293 : : #define I40E_CAP_PHY_TYPE_10GBASE_KX4 BIT_ULL(I40E_PHY_TYPE_10GBASE_KX4)
294 : : #define I40E_CAP_PHY_TYPE_10GBASE_KR BIT_ULL(I40E_PHY_TYPE_10GBASE_KR)
295 : : #define I40E_CAP_PHY_TYPE_40GBASE_KR4 BIT_ULL(I40E_PHY_TYPE_40GBASE_KR4)
296 : : #define I40E_CAP_PHY_TYPE_XAUI BIT_ULL(I40E_PHY_TYPE_XAUI)
297 : : #define I40E_CAP_PHY_TYPE_XFI BIT_ULL(I40E_PHY_TYPE_XFI)
298 : : #define I40E_CAP_PHY_TYPE_SFI BIT_ULL(I40E_PHY_TYPE_SFI)
299 : : #define I40E_CAP_PHY_TYPE_XLAUI BIT_ULL(I40E_PHY_TYPE_XLAUI)
300 : : #define I40E_CAP_PHY_TYPE_XLPPI BIT_ULL(I40E_PHY_TYPE_XLPPI)
301 : : #define I40E_CAP_PHY_TYPE_40GBASE_CR4_CU BIT_ULL(I40E_PHY_TYPE_40GBASE_CR4_CU)
302 : : #define I40E_CAP_PHY_TYPE_10GBASE_CR1_CU BIT_ULL(I40E_PHY_TYPE_10GBASE_CR1_CU)
303 : : #define I40E_CAP_PHY_TYPE_10GBASE_AOC BIT_ULL(I40E_PHY_TYPE_10GBASE_AOC)
304 : : #define I40E_CAP_PHY_TYPE_40GBASE_AOC BIT_ULL(I40E_PHY_TYPE_40GBASE_AOC)
305 : : #define I40E_CAP_PHY_TYPE_100BASE_TX BIT_ULL(I40E_PHY_TYPE_100BASE_TX)
306 : : #define I40E_CAP_PHY_TYPE_1000BASE_T BIT_ULL(I40E_PHY_TYPE_1000BASE_T)
307 : : #define I40E_CAP_PHY_TYPE_10GBASE_T BIT_ULL(I40E_PHY_TYPE_10GBASE_T)
308 : : #define I40E_CAP_PHY_TYPE_10GBASE_SR BIT_ULL(I40E_PHY_TYPE_10GBASE_SR)
309 : : #define I40E_CAP_PHY_TYPE_10GBASE_LR BIT_ULL(I40E_PHY_TYPE_10GBASE_LR)
310 : : #define I40E_CAP_PHY_TYPE_10GBASE_SFPP_CU BIT_ULL(I40E_PHY_TYPE_10GBASE_SFPP_CU)
311 : : #define I40E_CAP_PHY_TYPE_10GBASE_CR1 BIT_ULL(I40E_PHY_TYPE_10GBASE_CR1)
312 : : #define I40E_CAP_PHY_TYPE_40GBASE_CR4 BIT_ULL(I40E_PHY_TYPE_40GBASE_CR4)
313 : : #define I40E_CAP_PHY_TYPE_40GBASE_SR4 BIT_ULL(I40E_PHY_TYPE_40GBASE_SR4)
314 : : #define I40E_CAP_PHY_TYPE_40GBASE_LR4 BIT_ULL(I40E_PHY_TYPE_40GBASE_LR4)
315 : : #define I40E_CAP_PHY_TYPE_1000BASE_SX BIT_ULL(I40E_PHY_TYPE_1000BASE_SX)
316 : : #define I40E_CAP_PHY_TYPE_1000BASE_LX BIT_ULL(I40E_PHY_TYPE_1000BASE_LX)
317 : : #define I40E_CAP_PHY_TYPE_1000BASE_T_OPTICAL \
318 : : BIT_ULL(I40E_PHY_TYPE_1000BASE_T_OPTICAL)
319 : : #define I40E_CAP_PHY_TYPE_20GBASE_KR2 BIT_ULL(I40E_PHY_TYPE_20GBASE_KR2)
320 : : /*
321 : : * Defining the macro I40E_TYPE_OFFSET to implement a bit shift for some
322 : : * PHY types. There is an unused bit (31) in the I40E_CAP_PHY_TYPE_* bit
323 : : * fields but no corresponding gap in the i40e_aq_phy_type enumeration. So,
324 : : * a shift is needed to adjust for this with values larger than 31. The
325 : : * only affected values are I40E_PHY_TYPE_25GBASE_*.
326 : : */
327 : : #define I40E_PHY_TYPE_OFFSET 1
328 : : #define I40E_CAP_PHY_TYPE_25GBASE_KR BIT_ULL(I40E_PHY_TYPE_25GBASE_KR + \
329 : : I40E_PHY_TYPE_OFFSET)
330 : : #define I40E_CAP_PHY_TYPE_25GBASE_CR BIT_ULL(I40E_PHY_TYPE_25GBASE_CR + \
331 : : I40E_PHY_TYPE_OFFSET)
332 : : #define I40E_CAP_PHY_TYPE_25GBASE_SR BIT_ULL(I40E_PHY_TYPE_25GBASE_SR + \
333 : : I40E_PHY_TYPE_OFFSET)
334 : : #define I40E_CAP_PHY_TYPE_25GBASE_LR BIT_ULL(I40E_PHY_TYPE_25GBASE_LR + \
335 : : I40E_PHY_TYPE_OFFSET)
336 : : #define I40E_CAP_PHY_TYPE_25GBASE_AOC BIT_ULL(I40E_PHY_TYPE_25GBASE_AOC + \
337 : : I40E_PHY_TYPE_OFFSET)
338 : : #define I40E_CAP_PHY_TYPE_25GBASE_ACC BIT_ULL(I40E_PHY_TYPE_25GBASE_ACC + \
339 : : I40E_PHY_TYPE_OFFSET)
340 : : #define I40E_CAP_PHY_TYPE_2_5GBASE_T BIT_ULL(I40E_PHY_TYPE_2_5GBASE_T)
341 : : #define I40E_CAP_PHY_TYPE_5GBASE_T BIT_ULL(I40E_PHY_TYPE_5GBASE_T)
342 : : #define I40E_HW_CAP_MAX_GPIO 30
343 : : #define I40E_HW_CAP_MDIO_PORT_MODE_MDIO 0
344 : : #define I40E_HW_CAP_MDIO_PORT_MODE_I2C 1
345 : :
346 : : enum i40e_acpi_programming_method {
347 : : I40E_ACPI_PROGRAMMING_METHOD_HW_FVL = 0,
348 : : I40E_ACPI_PROGRAMMING_METHOD_AQC_FPK = 1
349 : : };
350 : :
351 : : #define I40E_WOL_SUPPORT_MASK 0x1
352 : : #define I40E_ACPI_PROGRAMMING_METHOD_MASK 0x2
353 : : #define I40E_PROXY_SUPPORT_MASK 0x4
354 : :
355 : : /* Capabilities of a PF or a VF or the whole device */
356 : : struct i40e_hw_capabilities {
357 : : u32 switch_mode;
358 : : #define I40E_NVM_IMAGE_TYPE_EVB 0x0
359 : : #define I40E_NVM_IMAGE_TYPE_CLOUD 0x2
360 : : #define I40E_NVM_IMAGE_TYPE_UDP_CLOUD 0x3
361 : :
362 : : /* Cloud filter modes:
363 : : * Mode1: Filter on L4 port only
364 : : * Mode2: Filter for non-tunneled traffic
365 : : * Mode3: Filter for tunnel traffic
366 : : */
367 : : #define I40E_CLOUD_FILTER_MODE1 0x6
368 : : #define I40E_CLOUD_FILTER_MODE2 0x7
369 : : #define I40E_CLOUD_FILTER_MODE3 0x8
370 : : #define I40E_SWITCH_MODE_MASK 0xF
371 : :
372 : : u32 management_mode;
373 : : u32 mng_protocols_over_mctp;
374 : : #define I40E_MNG_PROTOCOL_PLDM 0x2
375 : : #define I40E_MNG_PROTOCOL_OEM_COMMANDS 0x4
376 : : #define I40E_MNG_PROTOCOL_NCSI 0x8
377 : : u32 npar_enable;
378 : : u32 os2bmc;
379 : : u32 valid_functions;
380 : : bool sr_iov_1_1;
381 : : bool vmdq;
382 : : bool evb_802_1_qbg; /* Edge Virtual Bridging */
383 : : bool evb_802_1_qbh; /* Bridge Port Extension */
384 : : bool dcb;
385 : : bool fcoe;
386 : : bool iscsi; /* Indicates iSCSI enabled */
387 : : bool flex10_enable;
388 : : bool flex10_capable;
389 : : u32 flex10_mode;
390 : : #define I40E_FLEX10_MODE_UNKNOWN 0x0
391 : : #define I40E_FLEX10_MODE_DCC 0x1
392 : : #define I40E_FLEX10_MODE_DCI 0x2
393 : :
394 : : u32 flex10_status;
395 : : #define I40E_FLEX10_STATUS_DCC_ERROR 0x1
396 : : #define I40E_FLEX10_STATUS_VC_MODE 0x2
397 : :
398 : : bool sec_rev_disabled;
399 : : bool update_disabled;
400 : : #define I40E_NVM_MGMT_SEC_REV_DISABLED 0x1
401 : : #define I40E_NVM_MGMT_UPDATE_DISABLED 0x2
402 : :
403 : : bool mgmt_cem;
404 : : bool ieee_1588;
405 : : bool iwarp;
406 : : bool fd;
407 : : u32 fd_filters_guaranteed;
408 : : u32 fd_filters_best_effort;
409 : : bool rss;
410 : : u32 rss_table_size;
411 : : u32 rss_table_entry_width;
412 : : bool led[I40E_HW_CAP_MAX_GPIO];
413 : : bool sdp[I40E_HW_CAP_MAX_GPIO];
414 : : u32 nvm_image_type;
415 : : u32 num_flow_director_filters;
416 : : u32 num_vfs;
417 : : u32 vf_base_id;
418 : : u32 num_vsis;
419 : : u32 num_rx_qp;
420 : : u32 num_tx_qp;
421 : : u32 base_queue;
422 : : u32 num_msix_vectors;
423 : : u32 num_msix_vectors_vf;
424 : : u32 led_pin_num;
425 : : u32 sdp_pin_num;
426 : : u32 mdio_port_num;
427 : : u32 mdio_port_mode;
428 : : u8 rx_buf_chain_len;
429 : : u32 enabled_tcmap;
430 : : u32 maxtc;
431 : : u64 wr_csr_prot;
432 : : bool dis_unused_ports;
433 : : bool apm_wol_support;
434 : : enum i40e_acpi_programming_method acpi_prog_method;
435 : : bool proxy_support;
436 : : };
437 : :
438 : : struct i40e_mac_info {
439 : : enum i40e_mac_type type;
440 : : u8 addr[ETH_ALEN];
441 : : u8 perm_addr[ETH_ALEN];
442 : : u8 san_addr[ETH_ALEN];
443 : : u8 port_addr[ETH_ALEN];
444 : : u16 max_fcoeq;
445 : : };
446 : :
447 : : enum i40e_aq_resources_ids {
448 : : I40E_NVM_RESOURCE_ID = 1
449 : : };
450 : :
451 : : enum i40e_aq_resource_access_type {
452 : : I40E_RESOURCE_READ = 1,
453 : : I40E_RESOURCE_WRITE
454 : : };
455 : :
456 : : struct i40e_nvm_info {
457 : : u64 hw_semaphore_timeout; /* usec global time (GTIME resolution) */
458 : : u32 timeout; /* [ms] */
459 : : u16 sr_size; /* Shadow RAM size in words */
460 : : bool blank_nvm_mode; /* is NVM empty (no FW present)*/
461 : : u16 version; /* NVM package version */
462 : : u32 eetrack; /* NVM data version */
463 : : u32 oem_ver; /* OEM version info */
464 : : };
465 : :
466 : : /* definitions used in NVM update support */
467 : :
468 : : enum i40e_nvmupd_cmd {
469 : : I40E_NVMUPD_INVALID,
470 : : I40E_NVMUPD_READ_CON,
471 : : I40E_NVMUPD_READ_SNT,
472 : : I40E_NVMUPD_READ_LCB,
473 : : I40E_NVMUPD_READ_SA,
474 : : I40E_NVMUPD_WRITE_ERA,
475 : : I40E_NVMUPD_WRITE_CON,
476 : : I40E_NVMUPD_WRITE_SNT,
477 : : I40E_NVMUPD_WRITE_LCB,
478 : : I40E_NVMUPD_WRITE_SA,
479 : : I40E_NVMUPD_CSUM_CON,
480 : : I40E_NVMUPD_CSUM_SA,
481 : : I40E_NVMUPD_CSUM_LCB,
482 : : I40E_NVMUPD_STATUS,
483 : : I40E_NVMUPD_EXEC_AQ,
484 : : I40E_NVMUPD_GET_AQ_RESULT,
485 : : I40E_NVMUPD_GET_AQ_EVENT,
486 : : I40E_NVMUPD_FEATURES,
487 : : };
488 : :
489 : : enum i40e_nvmupd_state {
490 : : I40E_NVMUPD_STATE_INIT,
491 : : I40E_NVMUPD_STATE_READING,
492 : : I40E_NVMUPD_STATE_WRITING,
493 : : I40E_NVMUPD_STATE_INIT_WAIT,
494 : : I40E_NVMUPD_STATE_WRITE_WAIT,
495 : : I40E_NVMUPD_STATE_ERROR
496 : : };
497 : :
498 : : /* nvm_access definition and its masks/shifts need to be accessible to
499 : : * application, core driver, and shared code. Where is the right file?
500 : : */
501 : : #define I40E_NVM_READ 0xB
502 : : #define I40E_NVM_WRITE 0xC
503 : :
504 : : #define I40E_NVM_MOD_PNT_MASK 0xFF
505 : :
506 : : #define I40E_NVM_TRANS_SHIFT 8
507 : : #define I40E_NVM_TRANS_MASK (0xf << I40E_NVM_TRANS_SHIFT)
508 : : #define I40E_NVM_PRESERVATION_FLAGS_SHIFT 12
509 : : #define I40E_NVM_PRESERVATION_FLAGS_MASK \
510 : : (0x3 << I40E_NVM_PRESERVATION_FLAGS_SHIFT)
511 : : #define I40E_NVM_PRESERVATION_FLAGS_SELECTED 0x01
512 : : #define I40E_NVM_PRESERVATION_FLAGS_ALL 0x02
513 : : #define I40E_NVM_CON 0x0
514 : : #define I40E_NVM_SNT 0x1
515 : : #define I40E_NVM_LCB 0x2
516 : : #define I40E_NVM_SA (I40E_NVM_SNT | I40E_NVM_LCB)
517 : : #define I40E_NVM_ERA 0x4
518 : : #define I40E_NVM_CSUM 0x8
519 : : #define I40E_NVM_AQE 0xe
520 : : #define I40E_NVM_EXEC 0xf
521 : :
522 : : #define I40E_NVM_EXEC_GET_AQ_RESULT 0x0
523 : : #define I40E_NVM_EXEC_FEATURES 0xe
524 : : #define I40E_NVM_EXEC_STATUS 0xf
525 : :
526 : : #define I40E_NVM_ADAPT_SHIFT 16
527 : : #define I40E_NVM_ADAPT_MASK (0xffffULL << I40E_NVM_ADAPT_SHIFT)
528 : :
529 : : #define I40E_NVMUPD_MAX_DATA 4096
530 : : #define I40E_NVMUPD_IFACE_TIMEOUT 2 /* seconds */
531 : :
532 : : struct i40e_nvm_access {
533 : : u32 command;
534 : : u32 config;
535 : : u32 offset; /* in bytes */
536 : : u32 data_size; /* in bytes */
537 : : u8 data[1];
538 : : };
539 : :
540 : : /* NVMUpdate features API */
541 : : #define I40E_NVMUPD_FEATURES_API_VER_MAJOR 0
542 : : #define I40E_NVMUPD_FEATURES_API_VER_MINOR 14
543 : : #define I40E_NVMUPD_FEATURES_API_FEATURES_ARRAY_LEN 12
544 : :
545 : : #define I40E_NVMUPD_FEATURE_FLAT_NVM_SUPPORT BIT(0)
546 : :
547 : : struct i40e_nvmupd_features {
548 : : u8 major;
549 : : u8 minor;
550 : : u16 size;
551 : : u8 features[I40E_NVMUPD_FEATURES_API_FEATURES_ARRAY_LEN];
552 : : };
553 : :
554 : : /* (Q)SFP module access definitions */
555 : : #define I40E_I2C_EEPROM_DEV_ADDR 0xA0
556 : : #define I40E_I2C_EEPROM_DEV_ADDR2 0xA2
557 : : #define I40E_MODULE_TYPE_ADDR 0x00
558 : : #define I40E_MODULE_REVISION_ADDR 0x01
559 : : #define I40E_MODULE_SFF_8472_COMP 0x5E
560 : : #define I40E_MODULE_SFF_8472_SWAP 0x5C
561 : : #define I40E_MODULE_SFF_ADDR_MODE 0x04
562 : : #define I40E_MODULE_SFF_DIAG_CAPAB 0x40
563 : : #define I40E_MODULE_TYPE_QSFP_PLUS 0x0D
564 : : #define I40E_MODULE_TYPE_QSFP28 0x11
565 : : #define I40E_MODULE_QSFP_MAX_LEN 640
566 : :
567 : : /* PCI bus types */
568 : : enum i40e_bus_type {
569 : : i40e_bus_type_unknown = 0,
570 : : i40e_bus_type_pci,
571 : : i40e_bus_type_pcix,
572 : : i40e_bus_type_pci_express,
573 : : i40e_bus_type_reserved
574 : : };
575 : :
576 : : /* PCI bus speeds */
577 : : enum i40e_bus_speed {
578 : : i40e_bus_speed_unknown = 0,
579 : : i40e_bus_speed_33 = 33,
580 : : i40e_bus_speed_66 = 66,
581 : : i40e_bus_speed_100 = 100,
582 : : i40e_bus_speed_120 = 120,
583 : : i40e_bus_speed_133 = 133,
584 : : i40e_bus_speed_2500 = 2500,
585 : : i40e_bus_speed_5000 = 5000,
586 : : i40e_bus_speed_8000 = 8000,
587 : : i40e_bus_speed_reserved
588 : : };
589 : :
590 : : /* PCI bus widths */
591 : : enum i40e_bus_width {
592 : : i40e_bus_width_unknown = 0,
593 : : i40e_bus_width_pcie_x1 = 1,
594 : : i40e_bus_width_pcie_x2 = 2,
595 : : i40e_bus_width_pcie_x4 = 4,
596 : : i40e_bus_width_pcie_x8 = 8,
597 : : i40e_bus_width_32 = 32,
598 : : i40e_bus_width_64 = 64,
599 : : i40e_bus_width_reserved
600 : : };
601 : :
602 : : /* Bus parameters */
603 : : struct i40e_bus_info {
604 : : enum i40e_bus_speed speed;
605 : : enum i40e_bus_width width;
606 : : enum i40e_bus_type type;
607 : :
608 : : u16 func;
609 : : u16 device;
610 : : u16 lan_id;
611 : : u16 bus_id;
612 : : };
613 : :
614 : : /* Flow control (FC) parameters */
615 : : struct i40e_fc_info {
616 : : enum i40e_fc_mode current_mode; /* FC mode in effect */
617 : : enum i40e_fc_mode requested_mode; /* FC mode requested by caller */
618 : : };
619 : :
620 : : #define I40E_MAX_TRAFFIC_CLASS 8
621 : : #define I40E_MAX_USER_PRIORITY 8
622 : : #define I40E_DCBX_MAX_APPS 32
623 : : #define I40E_LLDPDU_SIZE 1500
624 : : #define I40E_TLV_STATUS_OPER 0x1
625 : : #define I40E_TLV_STATUS_SYNC 0x2
626 : : #define I40E_TLV_STATUS_ERR 0x4
627 : : #define I40E_CEE_OPER_MAX_APPS 3
628 : : #define I40E_APP_PROTOID_FCOE 0x8906
629 : : #define I40E_APP_PROTOID_ISCSI 0x0cbc
630 : : #define I40E_APP_PROTOID_FIP 0x8914
631 : : #define I40E_APP_SEL_ETHTYPE 0x1
632 : : #define I40E_APP_SEL_TCPIP 0x2
633 : : #define I40E_CEE_APP_SEL_ETHTYPE 0x0
634 : : #define I40E_CEE_APP_SEL_TCPIP 0x1
635 : :
636 : : /* CEE or IEEE 802.1Qaz ETS Configuration data */
637 : : struct i40e_dcb_ets_config {
638 : : u8 willing;
639 : : u8 cbs;
640 : : u8 maxtcs;
641 : : u8 prioritytable[I40E_MAX_TRAFFIC_CLASS];
642 : : u8 tcbwtable[I40E_MAX_TRAFFIC_CLASS];
643 : : u8 tsatable[I40E_MAX_TRAFFIC_CLASS];
644 : : };
645 : :
646 : : /* CEE or IEEE 802.1Qaz PFC Configuration data */
647 : : struct i40e_dcb_pfc_config {
648 : : u8 willing;
649 : : u8 mbc;
650 : : u8 pfccap;
651 : : u8 pfcenable;
652 : : };
653 : :
654 : : /* CEE or IEEE 802.1Qaz Application Priority data */
655 : : struct i40e_dcb_app_priority_table {
656 : : u8 priority;
657 : : u8 selector;
658 : : u16 protocolid;
659 : : };
660 : :
661 : : struct i40e_dcbx_config {
662 : : u8 dcbx_mode;
663 : : #define I40E_DCBX_MODE_CEE 0x1
664 : : #define I40E_DCBX_MODE_IEEE 0x2
665 : : u8 app_mode;
666 : : #define I40E_DCBX_APPS_NON_WILLING 0x1
667 : : u32 numapps;
668 : : u32 tlv_status; /* CEE mode TLV status */
669 : : struct i40e_dcb_ets_config etscfg;
670 : : struct i40e_dcb_ets_config etsrec;
671 : : struct i40e_dcb_pfc_config pfc;
672 : : struct i40e_dcb_app_priority_table app[I40E_DCBX_MAX_APPS];
673 : : };
674 : :
675 : : /* Port hardware description */
676 : : struct i40e_hw {
677 : : u8 *hw_addr;
678 : : void *back;
679 : :
680 : : /* subsystem structs */
681 : : struct i40e_phy_info phy;
682 : : struct i40e_mac_info mac;
683 : : struct i40e_bus_info bus;
684 : : struct i40e_nvm_info nvm;
685 : : struct i40e_fc_info fc;
686 : :
687 : : /* switch device is used to get link status when i40e is in ipn3ke */
688 : : struct rte_eth_dev *switch_dev;
689 : :
690 : : /* pci info */
691 : : u16 device_id;
692 : : u16 vendor_id;
693 : : u16 subsystem_device_id;
694 : : u16 subsystem_vendor_id;
695 : : u8 revision_id;
696 : : u8 port;
697 : : bool adapter_stopped;
698 : : bool adapter_closed;
699 : :
700 : : /* capabilities for entire device and PCI func */
701 : : struct i40e_hw_capabilities dev_caps;
702 : : struct i40e_hw_capabilities func_caps;
703 : :
704 : : /* Flow Director shared filter space */
705 : : u16 fdir_shared_filter_count;
706 : :
707 : : /* device profile info */
708 : : u8 pf_id;
709 : : u16 main_vsi_seid;
710 : :
711 : : /* for multi-function MACs */
712 : : u16 partition_id;
713 : : u16 num_partitions;
714 : : u16 num_ports;
715 : :
716 : : /* Closest numa node to the device */
717 : : u16 numa_node;
718 : :
719 : : /* Admin Queue info */
720 : : struct i40e_adminq_info aq;
721 : :
722 : : /* state of nvm update process */
723 : : enum i40e_nvmupd_state nvmupd_state;
724 : : struct i40e_aq_desc nvm_wb_desc;
725 : : struct i40e_aq_desc nvm_aq_event_desc;
726 : : struct i40e_virt_mem nvm_buff;
727 : : bool nvm_release_on_done;
728 : : u16 nvm_wait_opcode;
729 : :
730 : : /* HMC info */
731 : : struct i40e_hmc_info hmc; /* HMC info struct */
732 : :
733 : : /* LLDP/DCBX Status */
734 : : u16 dcbx_status;
735 : :
736 : : /* DCBX info */
737 : : struct i40e_dcbx_config local_dcbx_config; /* Oper/Local Cfg */
738 : : struct i40e_dcbx_config remote_dcbx_config; /* Peer Cfg */
739 : : struct i40e_dcbx_config desired_dcbx_config; /* CEE Desired Cfg */
740 : :
741 : : /* WoL and proxy support */
742 : : u16 num_wol_proxy_filters;
743 : : u16 wol_proxy_vsi_seid;
744 : :
745 : : #define I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE BIT_ULL(0)
746 : : #define I40E_HW_FLAG_802_1AD_CAPABLE BIT_ULL(1)
747 : : #define I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE BIT_ULL(2)
748 : : #define I40E_HW_FLAG_NVM_READ_REQUIRES_LOCK BIT_ULL(3)
749 : : #define I40E_HW_FLAG_FW_LLDP_STOPPABLE BIT_ULL(4)
750 : : #define I40E_HW_FLAG_FW_LLDP_PERSISTENT BIT_ULL(5)
751 : : #define I40E_HW_FLAG_AQ_PHY_ACCESS_EXTENDED BIT_ULL(6)
752 : : #define I40E_HW_FLAG_DROP_MODE BIT_ULL(7)
753 : : #define I40E_HW_FLAG_X722_FEC_REQUEST_CAPABLE BIT_ULL(8)
754 : : u64 flags;
755 : :
756 : : /* Used in set switch config AQ command */
757 : : u16 switch_tag;
758 : : u16 first_tag;
759 : : u16 second_tag;
760 : :
761 : : /* NVMUpdate features */
762 : : struct i40e_nvmupd_features nvmupd_features;
763 : :
764 : : /* debug mask */
765 : : u32 debug_mask;
766 : : char err_str[16];
767 : : };
768 : :
769 : : STATIC INLINE bool i40e_is_vf(struct i40e_hw *hw)
770 : : {
771 [ # # # # : 0 : return (hw->mac.type == I40E_MAC_VF ||
# # # # #
# # # #
# ]
772 : : hw->mac.type == I40E_MAC_X722_VF);
773 : : }
774 : :
775 : : struct i40e_driver_version {
776 : : u8 major_version;
777 : : u8 minor_version;
778 : : u8 build_version;
779 : : u8 subbuild_version;
780 : : u8 driver_string[32];
781 : : };
782 : :
783 : : /* RX Descriptors */
784 : : union i40e_16byte_rx_desc {
785 : : struct {
786 : : __le64 pkt_addr; /* Packet buffer address */
787 : : __le64 hdr_addr; /* Header buffer address */
788 : : } read;
789 : : struct {
790 : : struct {
791 : : struct {
792 : : union {
793 : : __le16 mirroring_status;
794 : : __le16 fcoe_ctx_id;
795 : : } mirr_fcoe;
796 : : __le16 l2tag1;
797 : : } lo_dword;
798 : : union {
799 : : __le32 rss; /* RSS Hash */
800 : : __le32 fd_id; /* Flow director filter id */
801 : : __le32 fcoe_param; /* FCoE DDP Context id */
802 : : } hi_dword;
803 : : } qword0;
804 : : struct {
805 : : /* ext status/error/pktype/length */
806 : : __le64 status_error_len;
807 : : } qword1;
808 : : } wb; /* writeback */
809 : : };
810 : :
811 : : union i40e_32byte_rx_desc {
812 : : struct {
813 : : __le64 pkt_addr; /* Packet buffer address */
814 : : __le64 hdr_addr; /* Header buffer address */
815 : : /* bit 0 of hdr_buffer_addr is DD bit */
816 : : __le64 rsvd1;
817 : : __le64 rsvd2;
818 : : } read;
819 : : struct {
820 : : struct i40e_32b_rx_wb_qw0 {
821 : : struct {
822 : : union {
823 : : __le16 mirroring_status;
824 : : __le16 fcoe_ctx_id;
825 : : } mirr_fcoe;
826 : : __le16 l2tag1;
827 : : } lo_dword;
828 : : union {
829 : : __le32 rss; /* RSS Hash */
830 : : __le32 fcoe_param; /* FCoE DDP Context id */
831 : : /* Flow director filter id in case of
832 : : * Programming status desc WB
833 : : */
834 : : __le32 fd_id;
835 : : } hi_dword;
836 : : } qword0;
837 : : struct {
838 : : /* status/error/pktype/length */
839 : : __le64 status_error_len;
840 : : } qword1;
841 : : struct {
842 : : __le16 ext_status; /* extended status */
843 : : __le16 rsvd;
844 : : __le16 l2tag2_1;
845 : : __le16 l2tag2_2;
846 : : } qword2;
847 : : struct {
848 : : union {
849 : : __le32 flex_bytes_lo;
850 : : __le32 pe_status;
851 : : } lo_dword;
852 : : union {
853 : : __le32 flex_bytes_hi;
854 : : __le32 fd_id;
855 : : } hi_dword;
856 : : } qword3;
857 : : } wb; /* writeback */
858 : : struct {
859 : : u64 qword[4];
860 : : } raw;
861 : : };
862 : :
863 : : #define I40E_RXD_QW0_MIRROR_STATUS_SHIFT 8
864 : : #define I40E_RXD_QW0_MIRROR_STATUS_MASK (0x3FUL << \
865 : : I40E_RXD_QW0_MIRROR_STATUS_SHIFT)
866 : : #define I40E_RXD_QW0_FCOEINDX_SHIFT 0
867 : : #define I40E_RXD_QW0_FCOEINDX_MASK (0xFFFUL << \
868 : : I40E_RXD_QW0_FCOEINDX_SHIFT)
869 : :
870 : : enum i40e_rx_desc_status_bits {
871 : : /* Note: These are predefined bit offsets */
872 : : I40E_RX_DESC_STATUS_DD_SHIFT = 0,
873 : : I40E_RX_DESC_STATUS_EOF_SHIFT = 1,
874 : : I40E_RX_DESC_STATUS_L2TAG1P_SHIFT = 2,
875 : : I40E_RX_DESC_STATUS_L3L4P_SHIFT = 3,
876 : : I40E_RX_DESC_STATUS_CRCP_SHIFT = 4,
877 : : I40E_RX_DESC_STATUS_TSYNINDX_SHIFT = 5, /* 2 BITS */
878 : : I40E_RX_DESC_STATUS_TSYNVALID_SHIFT = 7,
879 : : I40E_RX_DESC_STATUS_EXT_UDP_0_SHIFT = 8,
880 : :
881 : : I40E_RX_DESC_STATUS_UMBCAST_SHIFT = 9, /* 2 BITS */
882 : : I40E_RX_DESC_STATUS_FLM_SHIFT = 11,
883 : : I40E_RX_DESC_STATUS_FLTSTAT_SHIFT = 12, /* 2 BITS */
884 : : I40E_RX_DESC_STATUS_LPBK_SHIFT = 14,
885 : : I40E_RX_DESC_STATUS_IPV6EXADD_SHIFT = 15,
886 : : I40E_RX_DESC_STATUS_RESERVED2_SHIFT = 16, /* 2 BITS */
887 : : I40E_RX_DESC_STATUS_INT_UDP_0_SHIFT = 18,
888 : : I40E_RX_DESC_STATUS_LAST /* this entry must be last!!! */
889 : : };
890 : :
891 : : #define I40E_RXD_QW1_STATUS_SHIFT 0
892 : : #define I40E_RXD_QW1_STATUS_MASK ((BIT(I40E_RX_DESC_STATUS_LAST) - 1) << \
893 : : I40E_RXD_QW1_STATUS_SHIFT)
894 : :
895 : : #define I40E_RXD_QW1_STATUS_TSYNINDX_SHIFT I40E_RX_DESC_STATUS_TSYNINDX_SHIFT
896 : : #define I40E_RXD_QW1_STATUS_TSYNINDX_MASK (0x3UL << \
897 : : I40E_RXD_QW1_STATUS_TSYNINDX_SHIFT)
898 : :
899 : : #define I40E_RXD_QW1_STATUS_TSYNVALID_SHIFT I40E_RX_DESC_STATUS_TSYNVALID_SHIFT
900 : : #define I40E_RXD_QW1_STATUS_TSYNVALID_MASK BIT_ULL(I40E_RXD_QW1_STATUS_TSYNVALID_SHIFT)
901 : :
902 : : #define I40E_RXD_QW1_STATUS_UMBCAST_SHIFT I40E_RX_DESC_STATUS_UMBCAST
903 : : #define I40E_RXD_QW1_STATUS_UMBCAST_MASK (0x3UL << \
904 : : I40E_RXD_QW1_STATUS_UMBCAST_SHIFT)
905 : :
906 : : enum i40e_rx_desc_fltstat_values {
907 : : I40E_RX_DESC_FLTSTAT_NO_DATA = 0,
908 : : I40E_RX_DESC_FLTSTAT_RSV_FD_ID = 1, /* 16byte desc? FD_ID : RSV */
909 : : I40E_RX_DESC_FLTSTAT_RSV = 2,
910 : : I40E_RX_DESC_FLTSTAT_RSS_HASH = 3,
911 : : };
912 : :
913 : : #define I40E_RXD_PACKET_TYPE_UNICAST 0
914 : : #define I40E_RXD_PACKET_TYPE_MULTICAST 1
915 : : #define I40E_RXD_PACKET_TYPE_BROADCAST 2
916 : : #define I40E_RXD_PACKET_TYPE_MIRRORED 3
917 : :
918 : : #define I40E_RXD_QW1_ERROR_SHIFT 19
919 : : #define I40E_RXD_QW1_ERROR_MASK (0xFFUL << I40E_RXD_QW1_ERROR_SHIFT)
920 : :
921 : : enum i40e_rx_desc_error_bits {
922 : : /* Note: These are predefined bit offsets */
923 : : I40E_RX_DESC_ERROR_RXE_SHIFT = 0,
924 : : I40E_RX_DESC_ERROR_RECIPE_SHIFT = 1,
925 : : I40E_RX_DESC_ERROR_HBO_SHIFT = 2,
926 : : I40E_RX_DESC_ERROR_L3L4E_SHIFT = 3, /* 3 BITS */
927 : : I40E_RX_DESC_ERROR_IPE_SHIFT = 3,
928 : : I40E_RX_DESC_ERROR_L4E_SHIFT = 4,
929 : : I40E_RX_DESC_ERROR_EIPE_SHIFT = 5,
930 : : I40E_RX_DESC_ERROR_OVERSIZE_SHIFT = 6,
931 : : I40E_RX_DESC_ERROR_PPRS_SHIFT = 7
932 : : };
933 : :
934 : : enum i40e_rx_desc_error_l3l4e_fcoe_masks {
935 : : I40E_RX_DESC_ERROR_L3L4E_NONE = 0,
936 : : I40E_RX_DESC_ERROR_L3L4E_PROT = 1,
937 : : I40E_RX_DESC_ERROR_L3L4E_FC = 2,
938 : : I40E_RX_DESC_ERROR_L3L4E_DMAC_ERR = 3,
939 : : I40E_RX_DESC_ERROR_L3L4E_DMAC_WARN = 4
940 : : };
941 : :
942 : : #define I40E_RXD_QW1_PTYPE_SHIFT 30
943 : : #define I40E_RXD_QW1_PTYPE_MASK (0xFFULL << I40E_RXD_QW1_PTYPE_SHIFT)
944 : :
945 : : /* Packet type non-ip values */
946 : : enum i40e_rx_l2_ptype {
947 : : I40E_RX_PTYPE_L2_RESERVED = 0,
948 : : I40E_RX_PTYPE_L2_MAC_PAY2 = 1,
949 : : I40E_RX_PTYPE_L2_TIMESYNC_PAY2 = 2,
950 : : I40E_RX_PTYPE_L2_FIP_PAY2 = 3,
951 : : I40E_RX_PTYPE_L2_OUI_PAY2 = 4,
952 : : I40E_RX_PTYPE_L2_MACCNTRL_PAY2 = 5,
953 : : I40E_RX_PTYPE_L2_LLDP_PAY2 = 6,
954 : : I40E_RX_PTYPE_L2_ECP_PAY2 = 7,
955 : : I40E_RX_PTYPE_L2_EVB_PAY2 = 8,
956 : : I40E_RX_PTYPE_L2_QCN_PAY2 = 9,
957 : : I40E_RX_PTYPE_L2_EAPOL_PAY2 = 10,
958 : : I40E_RX_PTYPE_L2_ARP = 11,
959 : : I40E_RX_PTYPE_L2_FCOE_PAY3 = 12,
960 : : I40E_RX_PTYPE_L2_FCOE_FCDATA_PAY3 = 13,
961 : : I40E_RX_PTYPE_L2_FCOE_FCRDY_PAY3 = 14,
962 : : I40E_RX_PTYPE_L2_FCOE_FCRSP_PAY3 = 15,
963 : : I40E_RX_PTYPE_L2_FCOE_FCOTHER_PA = 16,
964 : : I40E_RX_PTYPE_L2_FCOE_VFT_PAY3 = 17,
965 : : I40E_RX_PTYPE_L2_FCOE_VFT_FCDATA = 18,
966 : : I40E_RX_PTYPE_L2_FCOE_VFT_FCRDY = 19,
967 : : I40E_RX_PTYPE_L2_FCOE_VFT_FCRSP = 20,
968 : : I40E_RX_PTYPE_L2_FCOE_VFT_FCOTHER = 21,
969 : : I40E_RX_PTYPE_GRENAT4_MAC_PAY3 = 58,
970 : : I40E_RX_PTYPE_GRENAT4_MACVLAN_IPV6_ICMP_PAY4 = 87,
971 : : I40E_RX_PTYPE_GRENAT6_MAC_PAY3 = 124,
972 : : I40E_RX_PTYPE_GRENAT6_MACVLAN_IPV6_ICMP_PAY4 = 153,
973 : : I40E_RX_PTYPE_PARSER_ABORTED = 255
974 : : };
975 : :
976 : : struct i40e_rx_ptype_decoded {
977 : : u32 ptype:8;
978 : : u32 known:1;
979 : : u32 outer_ip:1;
980 : : u32 outer_ip_ver:1;
981 : : u32 outer_frag:1;
982 : : u32 tunnel_type:3;
983 : : u32 tunnel_end_prot:2;
984 : : u32 tunnel_end_frag:1;
985 : : u32 inner_prot:4;
986 : : u32 payload_layer:3;
987 : : };
988 : :
989 : : enum i40e_rx_ptype_outer_ip {
990 : : I40E_RX_PTYPE_OUTER_L2 = 0,
991 : : I40E_RX_PTYPE_OUTER_IP = 1
992 : : };
993 : :
994 : : enum i40e_rx_ptype_outer_ip_ver {
995 : : I40E_RX_PTYPE_OUTER_NONE = 0,
996 : : I40E_RX_PTYPE_OUTER_IPV4 = 0,
997 : : I40E_RX_PTYPE_OUTER_IPV6 = 1
998 : : };
999 : :
1000 : : enum i40e_rx_ptype_outer_fragmented {
1001 : : I40E_RX_PTYPE_NOT_FRAG = 0,
1002 : : I40E_RX_PTYPE_FRAG = 1
1003 : : };
1004 : :
1005 : : enum i40e_rx_ptype_tunnel_type {
1006 : : I40E_RX_PTYPE_TUNNEL_NONE = 0,
1007 : : I40E_RX_PTYPE_TUNNEL_IP_IP = 1,
1008 : : I40E_RX_PTYPE_TUNNEL_IP_GRENAT = 2,
1009 : : I40E_RX_PTYPE_TUNNEL_IP_GRENAT_MAC = 3,
1010 : : I40E_RX_PTYPE_TUNNEL_IP_GRENAT_MAC_VLAN = 4,
1011 : : };
1012 : :
1013 : : enum i40e_rx_ptype_tunnel_end_prot {
1014 : : I40E_RX_PTYPE_TUNNEL_END_NONE = 0,
1015 : : I40E_RX_PTYPE_TUNNEL_END_IPV4 = 1,
1016 : : I40E_RX_PTYPE_TUNNEL_END_IPV6 = 2,
1017 : : };
1018 : :
1019 : : enum i40e_rx_ptype_inner_prot {
1020 : : I40E_RX_PTYPE_INNER_PROT_NONE = 0,
1021 : : I40E_RX_PTYPE_INNER_PROT_UDP = 1,
1022 : : I40E_RX_PTYPE_INNER_PROT_TCP = 2,
1023 : : I40E_RX_PTYPE_INNER_PROT_SCTP = 3,
1024 : : I40E_RX_PTYPE_INNER_PROT_ICMP = 4,
1025 : : I40E_RX_PTYPE_INNER_PROT_TIMESYNC = 5
1026 : : };
1027 : :
1028 : : enum i40e_rx_ptype_payload_layer {
1029 : : I40E_RX_PTYPE_PAYLOAD_LAYER_NONE = 0,
1030 : : I40E_RX_PTYPE_PAYLOAD_LAYER_PAY2 = 1,
1031 : : I40E_RX_PTYPE_PAYLOAD_LAYER_PAY3 = 2,
1032 : : I40E_RX_PTYPE_PAYLOAD_LAYER_PAY4 = 3,
1033 : : };
1034 : :
1035 : : #define I40E_RX_PTYPE_BIT_MASK 0x0FFFFFFF
1036 : : #define I40E_RX_PTYPE_SHIFT 56
1037 : :
1038 : : #define I40E_RXD_QW1_LENGTH_PBUF_SHIFT 38
1039 : : #define I40E_RXD_QW1_LENGTH_PBUF_MASK (0x3FFFULL << \
1040 : : I40E_RXD_QW1_LENGTH_PBUF_SHIFT)
1041 : :
1042 : : #define I40E_RXD_QW1_LENGTH_HBUF_SHIFT 52
1043 : : #define I40E_RXD_QW1_LENGTH_HBUF_MASK (0x7FFULL << \
1044 : : I40E_RXD_QW1_LENGTH_HBUF_SHIFT)
1045 : :
1046 : : #define I40E_RXD_QW1_LENGTH_SPH_SHIFT 63
1047 : : #define I40E_RXD_QW1_LENGTH_SPH_MASK BIT_ULL(I40E_RXD_QW1_LENGTH_SPH_SHIFT)
1048 : :
1049 : : #define I40E_RXD_QW1_NEXTP_SHIFT 38
1050 : : #define I40E_RXD_QW1_NEXTP_MASK (0x1FFFULL << I40E_RXD_QW1_NEXTP_SHIFT)
1051 : :
1052 : : #define I40E_RXD_QW2_EXT_STATUS_SHIFT 0
1053 : : #define I40E_RXD_QW2_EXT_STATUS_MASK (0xFFFFFUL << \
1054 : : I40E_RXD_QW2_EXT_STATUS_SHIFT)
1055 : :
1056 : : enum i40e_rx_desc_ext_status_bits {
1057 : : /* Note: These are predefined bit offsets */
1058 : : I40E_RX_DESC_EXT_STATUS_L2TAG2P_SHIFT = 0,
1059 : : I40E_RX_DESC_EXT_STATUS_L2TAG3P_SHIFT = 1,
1060 : : I40E_RX_DESC_EXT_STATUS_FLEXBL_SHIFT = 2, /* 2 BITS */
1061 : : I40E_RX_DESC_EXT_STATUS_FLEXBH_SHIFT = 4, /* 2 BITS */
1062 : : I40E_RX_DESC_EXT_STATUS_FDLONGB_SHIFT = 9,
1063 : : I40E_RX_DESC_EXT_STATUS_FCOELONGB_SHIFT = 10,
1064 : : I40E_RX_DESC_EXT_STATUS_PELONGB_SHIFT = 11,
1065 : : };
1066 : :
1067 : : #define I40E_RXD_QW2_L2TAG2_SHIFT 0
1068 : : #define I40E_RXD_QW2_L2TAG2_MASK (0xFFFFUL << I40E_RXD_QW2_L2TAG2_SHIFT)
1069 : :
1070 : : #define I40E_RXD_QW2_L2TAG3_SHIFT 16
1071 : : #define I40E_RXD_QW2_L2TAG3_MASK (0xFFFFUL << I40E_RXD_QW2_L2TAG3_SHIFT)
1072 : :
1073 : : enum i40e_rx_desc_pe_status_bits {
1074 : : /* Note: These are predefined bit offsets */
1075 : : I40E_RX_DESC_PE_STATUS_QPID_SHIFT = 0, /* 18 BITS */
1076 : : I40E_RX_DESC_PE_STATUS_L4PORT_SHIFT = 0, /* 16 BITS */
1077 : : I40E_RX_DESC_PE_STATUS_IPINDEX_SHIFT = 16, /* 8 BITS */
1078 : : I40E_RX_DESC_PE_STATUS_QPIDHIT_SHIFT = 24,
1079 : : I40E_RX_DESC_PE_STATUS_APBVTHIT_SHIFT = 25,
1080 : : I40E_RX_DESC_PE_STATUS_PORTV_SHIFT = 26,
1081 : : I40E_RX_DESC_PE_STATUS_URG_SHIFT = 27,
1082 : : I40E_RX_DESC_PE_STATUS_IPFRAG_SHIFT = 28,
1083 : : I40E_RX_DESC_PE_STATUS_IPOPT_SHIFT = 29
1084 : : };
1085 : :
1086 : : #define I40E_RX_PROG_STATUS_DESC_LENGTH_SHIFT 38
1087 : : #define I40E_RX_PROG_STATUS_DESC_LENGTH 0x2000000
1088 : :
1089 : : #define I40E_RX_PROG_STATUS_DESC_QW1_PROGID_SHIFT 2
1090 : : #define I40E_RX_PROG_STATUS_DESC_QW1_PROGID_MASK (0x7UL << \
1091 : : I40E_RX_PROG_STATUS_DESC_QW1_PROGID_SHIFT)
1092 : :
1093 : : #define I40E_RX_PROG_STATUS_DESC_QW1_STATUS_SHIFT 0
1094 : : #define I40E_RX_PROG_STATUS_DESC_QW1_STATUS_MASK (0x7FFFUL << \
1095 : : I40E_RX_PROG_STATUS_DESC_QW1_STATUS_SHIFT)
1096 : :
1097 : : #define I40E_RX_PROG_STATUS_DESC_QW1_ERROR_SHIFT 19
1098 : : #define I40E_RX_PROG_STATUS_DESC_QW1_ERROR_MASK (0x3FUL << \
1099 : : I40E_RX_PROG_STATUS_DESC_QW1_ERROR_SHIFT)
1100 : :
1101 : : enum i40e_rx_prog_status_desc_status_bits {
1102 : : /* Note: These are predefined bit offsets */
1103 : : I40E_RX_PROG_STATUS_DESC_DD_SHIFT = 0,
1104 : : I40E_RX_PROG_STATUS_DESC_PROG_ID_SHIFT = 2 /* 3 BITS */
1105 : : };
1106 : :
1107 : : enum i40e_rx_prog_status_desc_prog_id_masks {
1108 : : I40E_RX_PROG_STATUS_DESC_FD_FILTER_STATUS = 1,
1109 : : I40E_RX_PROG_STATUS_DESC_FCOE_CTXT_PROG_STATUS = 2,
1110 : : I40E_RX_PROG_STATUS_DESC_FCOE_CTXT_INVL_STATUS = 4,
1111 : : };
1112 : :
1113 : : enum i40e_rx_prog_status_desc_error_bits {
1114 : : /* Note: These are predefined bit offsets */
1115 : : I40E_RX_PROG_STATUS_DESC_FD_TBL_FULL_SHIFT = 0,
1116 : : I40E_RX_PROG_STATUS_DESC_NO_FD_ENTRY_SHIFT = 1,
1117 : : I40E_RX_PROG_STATUS_DESC_FCOE_TBL_FULL_SHIFT = 2,
1118 : : I40E_RX_PROG_STATUS_DESC_FCOE_CONFLICT_SHIFT = 3
1119 : : };
1120 : :
1121 : : #define I40E_TWO_BIT_MASK 0x3
1122 : : #define I40E_THREE_BIT_MASK 0x7
1123 : : #define I40E_FOUR_BIT_MASK 0xF
1124 : : #define I40E_EIGHTEEN_BIT_MASK 0x3FFFF
1125 : :
1126 : : /* TX Descriptor */
1127 : : struct i40e_tx_desc {
1128 : : __le64 buffer_addr; /* Address of descriptor's data buf */
1129 : : __le64 cmd_type_offset_bsz;
1130 : : };
1131 : :
1132 : : #define I40E_TXD_QW1_DTYPE_SHIFT 0
1133 : : #define I40E_TXD_QW1_DTYPE_MASK (0xFUL << I40E_TXD_QW1_DTYPE_SHIFT)
1134 : :
1135 : : enum i40e_tx_desc_dtype_value {
1136 : : I40E_TX_DESC_DTYPE_DATA = 0x0,
1137 : : I40E_TX_DESC_DTYPE_NOP = 0x1, /* same as Context desc */
1138 : : I40E_TX_DESC_DTYPE_CONTEXT = 0x1,
1139 : : I40E_TX_DESC_DTYPE_FCOE_CTX = 0x2,
1140 : : I40E_TX_DESC_DTYPE_FILTER_PROG = 0x8,
1141 : : I40E_TX_DESC_DTYPE_DDP_CTX = 0x9,
1142 : : I40E_TX_DESC_DTYPE_FLEX_DATA = 0xB,
1143 : : I40E_TX_DESC_DTYPE_FLEX_CTX_1 = 0xC,
1144 : : I40E_TX_DESC_DTYPE_FLEX_CTX_2 = 0xD,
1145 : : I40E_TX_DESC_DTYPE_DESC_DONE = 0xF
1146 : : };
1147 : :
1148 : : #define I40E_TXD_QW1_CMD_SHIFT 4
1149 : : #define I40E_TXD_QW1_CMD_MASK (0x3FFUL << I40E_TXD_QW1_CMD_SHIFT)
1150 : :
1151 : : enum i40e_tx_desc_cmd_bits {
1152 : : I40E_TX_DESC_CMD_EOP = 0x0001,
1153 : : I40E_TX_DESC_CMD_RS = 0x0002,
1154 : : I40E_TX_DESC_CMD_ICRC = 0x0004,
1155 : : I40E_TX_DESC_CMD_IL2TAG1 = 0x0008,
1156 : : I40E_TX_DESC_CMD_DUMMY = 0x0010,
1157 : : I40E_TX_DESC_CMD_IIPT_NONIP = 0x0000, /* 2 BITS */
1158 : : I40E_TX_DESC_CMD_IIPT_IPV6 = 0x0020, /* 2 BITS */
1159 : : I40E_TX_DESC_CMD_IIPT_IPV4 = 0x0040, /* 2 BITS */
1160 : : I40E_TX_DESC_CMD_IIPT_IPV4_CSUM = 0x0060, /* 2 BITS */
1161 : : I40E_TX_DESC_CMD_FCOET = 0x0080,
1162 : : I40E_TX_DESC_CMD_L4T_EOFT_UNK = 0x0000, /* 2 BITS */
1163 : : I40E_TX_DESC_CMD_L4T_EOFT_TCP = 0x0100, /* 2 BITS */
1164 : : I40E_TX_DESC_CMD_L4T_EOFT_SCTP = 0x0200, /* 2 BITS */
1165 : : I40E_TX_DESC_CMD_L4T_EOFT_UDP = 0x0300, /* 2 BITS */
1166 : : I40E_TX_DESC_CMD_L4T_EOFT_EOF_N = 0x0000, /* 2 BITS */
1167 : : I40E_TX_DESC_CMD_L4T_EOFT_EOF_T = 0x0100, /* 2 BITS */
1168 : : I40E_TX_DESC_CMD_L4T_EOFT_EOF_NI = 0x0200, /* 2 BITS */
1169 : : I40E_TX_DESC_CMD_L4T_EOFT_EOF_A = 0x0300, /* 2 BITS */
1170 : : };
1171 : :
1172 : : #define I40E_TXD_QW1_OFFSET_SHIFT 16
1173 : : #define I40E_TXD_QW1_OFFSET_MASK (0x3FFFFULL << \
1174 : : I40E_TXD_QW1_OFFSET_SHIFT)
1175 : :
1176 : : enum i40e_tx_desc_length_fields {
1177 : : /* Note: These are predefined bit offsets */
1178 : : I40E_TX_DESC_LENGTH_MACLEN_SHIFT = 0, /* 7 BITS */
1179 : : I40E_TX_DESC_LENGTH_IPLEN_SHIFT = 7, /* 7 BITS */
1180 : : I40E_TX_DESC_LENGTH_L4_FC_LEN_SHIFT = 14 /* 4 BITS */
1181 : : };
1182 : :
1183 : : #define I40E_TXD_QW1_MACLEN_MASK (0x7FUL << I40E_TX_DESC_LENGTH_MACLEN_SHIFT)
1184 : : #define I40E_TXD_QW1_IPLEN_MASK (0x7FUL << I40E_TX_DESC_LENGTH_IPLEN_SHIFT)
1185 : : #define I40E_TXD_QW1_L4LEN_MASK (0xFUL << I40E_TX_DESC_LENGTH_L4_FC_LEN_SHIFT)
1186 : : #define I40E_TXD_QW1_FCLEN_MASK (0xFUL << I40E_TX_DESC_LENGTH_L4_FC_LEN_SHIFT)
1187 : :
1188 : : #define I40E_TXD_QW1_TX_BUF_SZ_SHIFT 34
1189 : : #define I40E_TXD_QW1_TX_BUF_SZ_MASK (0x3FFFULL << \
1190 : : I40E_TXD_QW1_TX_BUF_SZ_SHIFT)
1191 : :
1192 : : #define I40E_TXD_QW1_L2TAG1_SHIFT 48
1193 : : #define I40E_TXD_QW1_L2TAG1_MASK (0xFFFFULL << I40E_TXD_QW1_L2TAG1_SHIFT)
1194 : :
1195 : : /* Context descriptors */
1196 : : struct i40e_tx_context_desc {
1197 : : __le32 tunneling_params;
1198 : : __le16 l2tag2;
1199 : : __le16 rsvd;
1200 : : __le64 type_cmd_tso_mss;
1201 : : };
1202 : :
1203 : : #define I40E_TXD_CTX_QW1_DTYPE_SHIFT 0
1204 : : #define I40E_TXD_CTX_QW1_DTYPE_MASK (0xFUL << I40E_TXD_CTX_QW1_DTYPE_SHIFT)
1205 : :
1206 : : #define I40E_TXD_CTX_QW1_CMD_SHIFT 4
1207 : : #define I40E_TXD_CTX_QW1_CMD_MASK (0xFFFFUL << I40E_TXD_CTX_QW1_CMD_SHIFT)
1208 : :
1209 : : enum i40e_tx_ctx_desc_cmd_bits {
1210 : : I40E_TX_CTX_DESC_TSO = 0x01,
1211 : : I40E_TX_CTX_DESC_TSYN = 0x02,
1212 : : I40E_TX_CTX_DESC_IL2TAG2 = 0x04,
1213 : : I40E_TX_CTX_DESC_IL2TAG2_IL2H = 0x08,
1214 : : I40E_TX_CTX_DESC_SWTCH_NOTAG = 0x00,
1215 : : I40E_TX_CTX_DESC_SWTCH_UPLINK = 0x10,
1216 : : I40E_TX_CTX_DESC_SWTCH_LOCAL = 0x20,
1217 : : I40E_TX_CTX_DESC_SWTCH_VSI = 0x30,
1218 : : I40E_TX_CTX_DESC_SWPE = 0x40
1219 : : };
1220 : :
1221 : : #define I40E_TXD_CTX_QW1_TSO_LEN_SHIFT 30
1222 : : #define I40E_TXD_CTX_QW1_TSO_LEN_MASK (0x3FFFFULL << \
1223 : : I40E_TXD_CTX_QW1_TSO_LEN_SHIFT)
1224 : :
1225 : : #define I40E_TXD_CTX_QW1_MSS_SHIFT 50
1226 : : #define I40E_TXD_CTX_QW1_MSS_MASK (0x3FFFULL << \
1227 : : I40E_TXD_CTX_QW1_MSS_SHIFT)
1228 : :
1229 : : #define I40E_TXD_CTX_QW1_VSI_SHIFT 50
1230 : : #define I40E_TXD_CTX_QW1_VSI_MASK (0x1FFULL << I40E_TXD_CTX_QW1_VSI_SHIFT)
1231 : :
1232 : : #define I40E_TXD_CTX_QW0_EXT_IP_SHIFT 0
1233 : : #define I40E_TXD_CTX_QW0_EXT_IP_MASK (0x3ULL << \
1234 : : I40E_TXD_CTX_QW0_EXT_IP_SHIFT)
1235 : :
1236 : : enum i40e_tx_ctx_desc_eipt_offload {
1237 : : I40E_TX_CTX_EXT_IP_NONE = 0x0,
1238 : : I40E_TX_CTX_EXT_IP_IPV6 = 0x1,
1239 : : I40E_TX_CTX_EXT_IP_IPV4_NO_CSUM = 0x2,
1240 : : I40E_TX_CTX_EXT_IP_IPV4 = 0x3
1241 : : };
1242 : :
1243 : : #define I40E_TXD_CTX_QW0_EXT_IPLEN_SHIFT 2
1244 : : #define I40E_TXD_CTX_QW0_EXT_IPLEN_MASK (0x3FULL << \
1245 : : I40E_TXD_CTX_QW0_EXT_IPLEN_SHIFT)
1246 : :
1247 : : #define I40E_TXD_CTX_QW0_NATT_SHIFT 9
1248 : : #define I40E_TXD_CTX_QW0_NATT_MASK (0x3ULL << I40E_TXD_CTX_QW0_NATT_SHIFT)
1249 : :
1250 : : #define I40E_TXD_CTX_UDP_TUNNELING BIT_ULL(I40E_TXD_CTX_QW0_NATT_SHIFT)
1251 : : #define I40E_TXD_CTX_GRE_TUNNELING (0x2ULL << I40E_TXD_CTX_QW0_NATT_SHIFT)
1252 : :
1253 : : #define I40E_TXD_CTX_QW0_EIP_NOINC_SHIFT 11
1254 : : #define I40E_TXD_CTX_QW0_EIP_NOINC_MASK BIT_ULL(I40E_TXD_CTX_QW0_EIP_NOINC_SHIFT)
1255 : :
1256 : : #define I40E_TXD_CTX_EIP_NOINC_IPID_CONST I40E_TXD_CTX_QW0_EIP_NOINC_MASK
1257 : :
1258 : : #define I40E_TXD_CTX_QW0_NATLEN_SHIFT 12
1259 : : #define I40E_TXD_CTX_QW0_NATLEN_MASK (0X7FULL << \
1260 : : I40E_TXD_CTX_QW0_NATLEN_SHIFT)
1261 : :
1262 : : #define I40E_TXD_CTX_QW0_DECTTL_SHIFT 19
1263 : : #define I40E_TXD_CTX_QW0_DECTTL_MASK (0xFULL << \
1264 : : I40E_TXD_CTX_QW0_DECTTL_SHIFT)
1265 : :
1266 : : #define I40E_TXD_CTX_QW0_L4T_CS_SHIFT 23
1267 : : #define I40E_TXD_CTX_QW0_L4T_CS_MASK BIT_ULL(I40E_TXD_CTX_QW0_L4T_CS_SHIFT)
1268 : : struct i40e_nop_desc {
1269 : : __le64 rsvd;
1270 : : __le64 dtype_cmd;
1271 : : };
1272 : :
1273 : : #define I40E_TXD_NOP_QW1_DTYPE_SHIFT 0
1274 : : #define I40E_TXD_NOP_QW1_DTYPE_MASK (0xFUL << I40E_TXD_NOP_QW1_DTYPE_SHIFT)
1275 : :
1276 : : #define I40E_TXD_NOP_QW1_CMD_SHIFT 4
1277 : : #define I40E_TXD_NOP_QW1_CMD_MASK (0x7FUL << I40E_TXD_NOP_QW1_CMD_SHIFT)
1278 : :
1279 : : enum i40e_tx_nop_desc_cmd_bits {
1280 : : /* Note: These are predefined bit offsets */
1281 : : I40E_TX_NOP_DESC_EOP_SHIFT = 0,
1282 : : I40E_TX_NOP_DESC_RS_SHIFT = 1,
1283 : : I40E_TX_NOP_DESC_RSV_SHIFT = 2 /* 5 bits */
1284 : : };
1285 : :
1286 : : struct i40e_filter_program_desc {
1287 : : __le32 qindex_flex_ptype_vsi;
1288 : : __le32 rsvd;
1289 : : __le32 dtype_cmd_cntindex;
1290 : : __le32 fd_id;
1291 : : };
1292 : : #define I40E_TXD_FLTR_QW0_QINDEX_SHIFT 0
1293 : : #define I40E_TXD_FLTR_QW0_QINDEX_MASK (0x7FFUL << \
1294 : : I40E_TXD_FLTR_QW0_QINDEX_SHIFT)
1295 : : #define I40E_TXD_FLTR_QW0_FLEXOFF_SHIFT 11
1296 : : #define I40E_TXD_FLTR_QW0_FLEXOFF_MASK (0x7UL << \
1297 : : I40E_TXD_FLTR_QW0_FLEXOFF_SHIFT)
1298 : : #define I40E_TXD_FLTR_QW0_PCTYPE_SHIFT 17
1299 : : #define I40E_TXD_FLTR_QW0_PCTYPE_MASK (0x3FUL << \
1300 : : I40E_TXD_FLTR_QW0_PCTYPE_SHIFT)
1301 : :
1302 : : /* Packet Classifier Types for filters */
1303 : : enum i40e_filter_pctype {
1304 : : /* Note: Values 0-28 are reserved for future use.
1305 : : * Value 29, 30, 32 are not supported on XL710 and X710.
1306 : : */
1307 : : I40E_FILTER_PCTYPE_NONF_UNICAST_IPV4_UDP = 29,
1308 : : I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV4_UDP = 30,
1309 : : I40E_FILTER_PCTYPE_NONF_IPV4_UDP = 31,
1310 : : I40E_FILTER_PCTYPE_NONF_IPV4_TCP_SYN_NO_ACK = 32,
1311 : : I40E_FILTER_PCTYPE_NONF_IPV4_TCP = 33,
1312 : : I40E_FILTER_PCTYPE_NONF_IPV4_SCTP = 34,
1313 : : I40E_FILTER_PCTYPE_NONF_IPV4_OTHER = 35,
1314 : : I40E_FILTER_PCTYPE_FRAG_IPV4 = 36,
1315 : : /* Note: Values 37-38 are reserved for future use.
1316 : : * Value 39, 40, 42 are not supported on XL710 and X710.
1317 : : */
1318 : : I40E_FILTER_PCTYPE_NONF_UNICAST_IPV6_UDP = 39,
1319 : : I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV6_UDP = 40,
1320 : : I40E_FILTER_PCTYPE_NONF_IPV6_UDP = 41,
1321 : : I40E_FILTER_PCTYPE_NONF_IPV6_TCP_SYN_NO_ACK = 42,
1322 : : I40E_FILTER_PCTYPE_NONF_IPV6_TCP = 43,
1323 : : I40E_FILTER_PCTYPE_NONF_IPV6_SCTP = 44,
1324 : : I40E_FILTER_PCTYPE_NONF_IPV6_OTHER = 45,
1325 : : I40E_FILTER_PCTYPE_FRAG_IPV6 = 46,
1326 : : /* Note: Value 47 is reserved for future use */
1327 : : I40E_FILTER_PCTYPE_FCOE_OX = 48,
1328 : : I40E_FILTER_PCTYPE_FCOE_RX = 49,
1329 : : I40E_FILTER_PCTYPE_FCOE_OTHER = 50,
1330 : : /* Note: Values 51-62 are reserved for future use */
1331 : : I40E_FILTER_PCTYPE_L2_PAYLOAD = 63,
1332 : : };
1333 : :
1334 : : enum i40e_filter_program_desc_dest {
1335 : : I40E_FILTER_PROGRAM_DESC_DEST_DROP_PACKET = 0x0,
1336 : : I40E_FILTER_PROGRAM_DESC_DEST_DIRECT_PACKET_QINDEX = 0x1,
1337 : : I40E_FILTER_PROGRAM_DESC_DEST_DIRECT_PACKET_OTHER = 0x2,
1338 : : };
1339 : :
1340 : : enum i40e_filter_program_desc_fd_status {
1341 : : I40E_FILTER_PROGRAM_DESC_FD_STATUS_NONE = 0x0,
1342 : : I40E_FILTER_PROGRAM_DESC_FD_STATUS_FD_ID = 0x1,
1343 : : I40E_FILTER_PROGRAM_DESC_FD_STATUS_FD_ID_4FLEX_BYTES = 0x2,
1344 : : I40E_FILTER_PROGRAM_DESC_FD_STATUS_8FLEX_BYTES = 0x3,
1345 : : };
1346 : :
1347 : : #define I40E_TXD_FLTR_QW0_DEST_VSI_SHIFT 23
1348 : : #define I40E_TXD_FLTR_QW0_DEST_VSI_MASK (0x1FFUL << \
1349 : : I40E_TXD_FLTR_QW0_DEST_VSI_SHIFT)
1350 : :
1351 : : #define I40E_TXD_FLTR_QW1_DTYPE_SHIFT 0
1352 : : #define I40E_TXD_FLTR_QW1_DTYPE_MASK (0xFUL << I40E_TXD_FLTR_QW1_DTYPE_SHIFT)
1353 : :
1354 : : #define I40E_TXD_FLTR_QW1_CMD_SHIFT 4
1355 : : #define I40E_TXD_FLTR_QW1_CMD_MASK (0xFFFFULL << \
1356 : : I40E_TXD_FLTR_QW1_CMD_SHIFT)
1357 : :
1358 : : #define I40E_TXD_FLTR_QW1_PCMD_SHIFT (0x0ULL + I40E_TXD_FLTR_QW1_CMD_SHIFT)
1359 : : #define I40E_TXD_FLTR_QW1_PCMD_MASK (0x7ULL << I40E_TXD_FLTR_QW1_PCMD_SHIFT)
1360 : :
1361 : : enum i40e_filter_program_desc_pcmd {
1362 : : I40E_FILTER_PROGRAM_DESC_PCMD_ADD_UPDATE = 0x1,
1363 : : I40E_FILTER_PROGRAM_DESC_PCMD_REMOVE = 0x2,
1364 : : };
1365 : :
1366 : : #define I40E_TXD_FLTR_QW1_DEST_SHIFT (0x3ULL + I40E_TXD_FLTR_QW1_CMD_SHIFT)
1367 : : #define I40E_TXD_FLTR_QW1_DEST_MASK (0x3ULL << I40E_TXD_FLTR_QW1_DEST_SHIFT)
1368 : :
1369 : : #define I40E_TXD_FLTR_QW1_CNT_ENA_SHIFT (0x7ULL + I40E_TXD_FLTR_QW1_CMD_SHIFT)
1370 : : #define I40E_TXD_FLTR_QW1_CNT_ENA_MASK BIT_ULL(I40E_TXD_FLTR_QW1_CNT_ENA_SHIFT)
1371 : :
1372 : : #define I40E_TXD_FLTR_QW1_FD_STATUS_SHIFT (0x9ULL + \
1373 : : I40E_TXD_FLTR_QW1_CMD_SHIFT)
1374 : : #define I40E_TXD_FLTR_QW1_FD_STATUS_MASK (0x3ULL << \
1375 : : I40E_TXD_FLTR_QW1_FD_STATUS_SHIFT)
1376 : :
1377 : : #define I40E_TXD_FLTR_QW1_ATR_SHIFT (0xEULL + \
1378 : : I40E_TXD_FLTR_QW1_CMD_SHIFT)
1379 : : #define I40E_TXD_FLTR_QW1_ATR_MASK BIT_ULL(I40E_TXD_FLTR_QW1_ATR_SHIFT)
1380 : :
1381 : : #define I40E_TXD_FLTR_QW1_CNTINDEX_SHIFT 20
1382 : : #define I40E_TXD_FLTR_QW1_CNTINDEX_MASK (0x1FFUL << \
1383 : : I40E_TXD_FLTR_QW1_CNTINDEX_SHIFT)
1384 : :
1385 : : enum i40e_filter_type {
1386 : : I40E_FLOW_DIRECTOR_FLTR = 0,
1387 : : I40E_PE_QUAD_HASH_FLTR = 1,
1388 : : I40E_ETHERTYPE_FLTR,
1389 : : I40E_FCOE_CTX_FLTR,
1390 : : I40E_MAC_VLAN_FLTR,
1391 : : I40E_HASH_FLTR
1392 : : };
1393 : :
1394 : : struct i40e_vsi_context {
1395 : : u16 seid;
1396 : : u16 uplink_seid;
1397 : : u16 vsi_number;
1398 : : u16 vsis_allocated;
1399 : : u16 vsis_unallocated;
1400 : : u16 flags;
1401 : : u8 pf_num;
1402 : : u8 vf_num;
1403 : : u8 connection_type;
1404 : : struct i40e_aqc_vsi_properties_data info;
1405 : : };
1406 : :
1407 : : struct i40e_veb_context {
1408 : : u16 seid;
1409 : : u16 uplink_seid;
1410 : : u16 veb_number;
1411 : : u16 vebs_allocated;
1412 : : u16 vebs_unallocated;
1413 : : u16 flags;
1414 : : struct i40e_aqc_get_veb_parameters_completion info;
1415 : : };
1416 : :
1417 : : /* Statistics collected by each port, VSI, VEB, and S-channel */
1418 : : struct i40e_eth_stats {
1419 : : u64 rx_bytes; /* gorc */
1420 : : u64 rx_unicast; /* uprc */
1421 : : u64 rx_multicast; /* mprc */
1422 : : u64 rx_broadcast; /* bprc */
1423 : : u64 rx_discards; /* rdpc */
1424 : : u64 rx_unknown_protocol; /* rupp */
1425 : : u64 tx_bytes; /* gotc */
1426 : : u64 tx_unicast; /* uptc */
1427 : : u64 tx_multicast; /* mptc */
1428 : : u64 tx_broadcast; /* bptc */
1429 : : u64 tx_discards; /* tdpc */
1430 : : u64 tx_errors; /* tepc */
1431 : : };
1432 : :
1433 : : /* Statistics collected per VEB per TC */
1434 : : struct i40e_veb_tc_stats {
1435 : : u64 tc_rx_packets[I40E_MAX_TRAFFIC_CLASS];
1436 : : u64 tc_rx_bytes[I40E_MAX_TRAFFIC_CLASS];
1437 : : u64 tc_tx_packets[I40E_MAX_TRAFFIC_CLASS];
1438 : : u64 tc_tx_bytes[I40E_MAX_TRAFFIC_CLASS];
1439 : : };
1440 : :
1441 : : /* Statistics collected per function for FCoE */
1442 : : struct i40e_fcoe_stats {
1443 : : u64 rx_fcoe_packets; /* fcoeprc */
1444 : : u64 rx_fcoe_dwords; /* focedwrc */
1445 : : u64 rx_fcoe_dropped; /* fcoerpdc */
1446 : : u64 tx_fcoe_packets; /* fcoeptc */
1447 : : u64 tx_fcoe_dwords; /* focedwtc */
1448 : : u64 fcoe_bad_fccrc; /* fcoecrc */
1449 : : u64 fcoe_last_error; /* fcoelast */
1450 : : u64 fcoe_ddp_count; /* fcoeddpc */
1451 : : };
1452 : :
1453 : : /* offset to per function FCoE statistics block */
1454 : : #define I40E_FCOE_VF_STAT_OFFSET 0
1455 : : #define I40E_FCOE_PF_STAT_OFFSET 128
1456 : : #define I40E_FCOE_STAT_MAX (I40E_FCOE_PF_STAT_OFFSET + I40E_MAX_PF)
1457 : :
1458 : : /* Statistics collected by the MAC */
1459 : : struct i40e_hw_port_stats {
1460 : : /* eth stats collected by the port */
1461 : : struct i40e_eth_stats eth;
1462 : :
1463 : : /* additional port specific stats */
1464 : : u64 tx_dropped_link_down; /* tdold */
1465 : : u64 crc_errors; /* crcerrs */
1466 : : u64 illegal_bytes; /* illerrc */
1467 : : u64 error_bytes; /* errbc */
1468 : : u64 mac_local_faults; /* mlfc */
1469 : : u64 mac_remote_faults; /* mrfc */
1470 : : u64 rx_length_errors; /* rlec */
1471 : : u64 link_xon_rx; /* lxonrxc */
1472 : : u64 link_xoff_rx; /* lxoffrxc */
1473 : : u64 priority_xon_rx[8]; /* pxonrxc[8] */
1474 : : u64 priority_xoff_rx[8]; /* pxoffrxc[8] */
1475 : : u64 link_xon_tx; /* lxontxc */
1476 : : u64 link_xoff_tx; /* lxofftxc */
1477 : : u64 priority_xon_tx[8]; /* pxontxc[8] */
1478 : : u64 priority_xoff_tx[8]; /* pxofftxc[8] */
1479 : : u64 priority_xon_2_xoff[8]; /* pxon2offc[8] */
1480 : : u64 rx_size_64; /* prc64 */
1481 : : u64 rx_size_127; /* prc127 */
1482 : : u64 rx_size_255; /* prc255 */
1483 : : u64 rx_size_511; /* prc511 */
1484 : : u64 rx_size_1023; /* prc1023 */
1485 : : u64 rx_size_1522; /* prc1522 */
1486 : : u64 rx_size_big; /* prc9522 */
1487 : : u64 rx_undersize; /* ruc */
1488 : : u64 rx_fragments; /* rfc */
1489 : : u64 rx_oversize; /* roc */
1490 : : u64 rx_jabber; /* rjc */
1491 : : u64 tx_size_64; /* ptc64 */
1492 : : u64 tx_size_127; /* ptc127 */
1493 : : u64 tx_size_255; /* ptc255 */
1494 : : u64 tx_size_511; /* ptc511 */
1495 : : u64 tx_size_1023; /* ptc1023 */
1496 : : u64 tx_size_1522; /* ptc1522 */
1497 : : u64 tx_size_big; /* ptc9522 */
1498 : : u64 mac_short_packet_dropped; /* mspdc */
1499 : : u64 checksum_error; /* xec */
1500 : : /* flow director stats */
1501 : : u64 fd_atr_match;
1502 : : u64 fd_sb_match;
1503 : : u64 fd_atr_tunnel_match;
1504 : : u32 fd_atr_status;
1505 : : u32 fd_sb_status;
1506 : : /* EEE LPI */
1507 : : u32 tx_lpi_status;
1508 : : u32 rx_lpi_status;
1509 : : u64 tx_lpi_count; /* etlpic */
1510 : : u64 rx_lpi_count; /* erlpic */
1511 : : u64 tx_lpi_duration;
1512 : : u64 rx_lpi_duration;
1513 : : };
1514 : :
1515 : : /* Checksum and Shadow RAM pointers */
1516 : : #define I40E_SR_NVM_CONTROL_WORD 0x00
1517 : : #define I40E_SR_PCIE_ANALOG_CONFIG_PTR 0x03
1518 : : #define I40E_SR_PHY_ANALOG_CONFIG_PTR 0x04
1519 : : #define I40E_SR_OPTION_ROM_PTR 0x05
1520 : : #define I40E_SR_RO_PCIR_REGS_AUTO_LOAD_PTR 0x06
1521 : : #define I40E_SR_AUTO_GENERATED_POINTERS_PTR 0x07
1522 : : #define I40E_SR_PCIR_REGS_AUTO_LOAD_PTR 0x08
1523 : : #define I40E_SR_EMP_GLOBAL_MODULE_PTR 0x09
1524 : : #define I40E_SR_RO_PCIE_LCB_PTR 0x0A
1525 : : #define I40E_SR_EMP_IMAGE_PTR 0x0B
1526 : : #define I40E_SR_PE_IMAGE_PTR 0x0C
1527 : : #define I40E_SR_CSR_PROTECTED_LIST_PTR 0x0D
1528 : : #define I40E_SR_MNG_CONFIG_PTR 0x0E
1529 : : #define I40E_EMP_MODULE_PTR 0x0F
1530 : : #define I40E_SR_EMP_MODULE_PTR 0x48
1531 : : #define I40E_SR_PBA_FLAGS 0x15
1532 : : #define I40E_SR_PBA_BLOCK_PTR 0x16
1533 : : #define I40E_SR_BOOT_CONFIG_PTR 0x17
1534 : : #define I40E_NVM_OEM_VER_OFF 0x83
1535 : : #define I40E_SR_NVM_DEV_STARTER_VERSION 0x18
1536 : : #define I40E_SR_NVM_WAKE_ON_LAN 0x19
1537 : : #define I40E_SR_ALTERNATE_SAN_MAC_ADDRESS_PTR 0x27
1538 : : #define I40E_SR_PERMANENT_SAN_MAC_ADDRESS_PTR 0x28
1539 : : #define I40E_SR_NVM_MAP_VERSION 0x29
1540 : : #define I40E_SR_NVM_IMAGE_VERSION 0x2A
1541 : : #define I40E_SR_NVM_STRUCTURE_VERSION 0x2B
1542 : : #define I40E_SR_NVM_EETRACK_LO 0x2D
1543 : : #define I40E_SR_NVM_EETRACK_HI 0x2E
1544 : : #define I40E_SR_VPD_PTR 0x2F
1545 : : #define I40E_SR_PXE_SETUP_PTR 0x30
1546 : : #define I40E_SR_PXE_CONFIG_CUST_OPTIONS_PTR 0x31
1547 : : #define I40E_SR_NVM_ORIGINAL_EETRACK_LO 0x34
1548 : : #define I40E_SR_NVM_ORIGINAL_EETRACK_HI 0x35
1549 : : #define I40E_SR_SW_ETHERNET_MAC_ADDRESS_PTR 0x37
1550 : : #define I40E_SR_POR_REGS_AUTO_LOAD_PTR 0x38
1551 : : #define I40E_SR_EMPR_REGS_AUTO_LOAD_PTR 0x3A
1552 : : #define I40E_SR_GLOBR_REGS_AUTO_LOAD_PTR 0x3B
1553 : : #define I40E_SR_CORER_REGS_AUTO_LOAD_PTR 0x3C
1554 : : #define I40E_SR_PHY_ACTIVITY_LIST_PTR 0x3D
1555 : : #define I40E_SR_PCIE_ALT_AUTO_LOAD_PTR 0x3E
1556 : : #define I40E_SR_SW_CHECKSUM_WORD 0x3F
1557 : : #define I40E_SR_1ST_FREE_PROVISION_AREA_PTR 0x40
1558 : : #define I40E_SR_4TH_FREE_PROVISION_AREA_PTR 0x42
1559 : : #define I40E_SR_3RD_FREE_PROVISION_AREA_PTR 0x44
1560 : : #define I40E_SR_2ND_FREE_PROVISION_AREA_PTR 0x46
1561 : : #define I40E_SR_EMP_SR_SETTINGS_PTR 0x48
1562 : : #define I40E_SR_FEATURE_CONFIGURATION_PTR 0x49
1563 : : #define I40E_SR_CONFIGURATION_METADATA_PTR 0x4D
1564 : : #define I40E_SR_IMMEDIATE_VALUES_PTR 0x4E
1565 : : #define I40E_SR_PRESERVATION_RULES_PTR 0x70
1566 : : #define I40E_X722_SR_5TH_FREE_PROVISION_AREA_PTR 0x71
1567 : : #define I40E_SR_6TH_FREE_PROVISION_AREA_PTR 0x71
1568 : :
1569 : : /* Auxiliary field, mask and shift definition for Shadow RAM and NVM Flash */
1570 : : #define I40E_SR_VPD_MODULE_MAX_SIZE 1024
1571 : : #define I40E_SR_PCIE_ALT_MODULE_MAX_SIZE 1024
1572 : : #define I40E_SR_CONTROL_WORD_1_SHIFT 0x06
1573 : : #define I40E_SR_CONTROL_WORD_1_MASK (0x03 << I40E_SR_CONTROL_WORD_1_SHIFT)
1574 : : #define I40E_SR_CONTROL_WORD_1_NVM_BANK_VALID BIT(5)
1575 : : #define I40E_SR_NVM_MAP_STRUCTURE_TYPE BIT(12)
1576 : : #define I40E_PTR_TYPE BIT(15)
1577 : : #define I40E_SR_OCP_CFG_WORD0 0x2B
1578 : : #define I40E_SR_OCP_ENABLED BIT(15)
1579 : :
1580 : : /* Shadow RAM related */
1581 : : #define I40E_SR_SECTOR_SIZE_IN_WORDS 0x800
1582 : : #define I40E_SR_BUF_ALIGNMENT 4096
1583 : : #define I40E_SR_WORDS_IN_1KB 512
1584 : : /* Checksum should be calculated such that after adding all the words,
1585 : : * including the checksum word itself, the sum should be 0xBABA.
1586 : : */
1587 : : #define I40E_SR_SW_CHECKSUM_BASE 0xBABA
1588 : :
1589 : : #define I40E_SRRD_SRCTL_ATTEMPTS 100000
1590 : :
1591 : : /* FCoE Tx context descriptor - Use the i40e_tx_context_desc struct */
1592 : :
1593 : : enum i40E_fcoe_tx_ctx_desc_cmd_bits {
1594 : : I40E_FCOE_TX_CTX_DESC_OPCODE_SINGLE_SEND = 0x00, /* 4 BITS */
1595 : : I40E_FCOE_TX_CTX_DESC_OPCODE_TSO_FC_CLASS2 = 0x01, /* 4 BITS */
1596 : : I40E_FCOE_TX_CTX_DESC_OPCODE_TSO_FC_CLASS3 = 0x05, /* 4 BITS */
1597 : : I40E_FCOE_TX_CTX_DESC_OPCODE_ETSO_FC_CLASS2 = 0x02, /* 4 BITS */
1598 : : I40E_FCOE_TX_CTX_DESC_OPCODE_ETSO_FC_CLASS3 = 0x06, /* 4 BITS */
1599 : : I40E_FCOE_TX_CTX_DESC_OPCODE_DWO_FC_CLASS2 = 0x03, /* 4 BITS */
1600 : : I40E_FCOE_TX_CTX_DESC_OPCODE_DWO_FC_CLASS3 = 0x07, /* 4 BITS */
1601 : : I40E_FCOE_TX_CTX_DESC_OPCODE_DDP_CTX_INVL = 0x08, /* 4 BITS */
1602 : : I40E_FCOE_TX_CTX_DESC_OPCODE_DWO_CTX_INVL = 0x09, /* 4 BITS */
1603 : : I40E_FCOE_TX_CTX_DESC_RELOFF = 0x10,
1604 : : I40E_FCOE_TX_CTX_DESC_CLRSEQ = 0x20,
1605 : : I40E_FCOE_TX_CTX_DESC_DIFENA = 0x40,
1606 : : I40E_FCOE_TX_CTX_DESC_IL2TAG2 = 0x80
1607 : : };
1608 : :
1609 : : /* FCoE DIF/DIX Context descriptor */
1610 : : struct i40e_fcoe_difdix_context_desc {
1611 : : __le64 flags_buff0_buff1_ref;
1612 : : __le64 difapp_msk_bias;
1613 : : };
1614 : :
1615 : : #define I40E_FCOE_DIFDIX_CTX_QW0_FLAGS_SHIFT 0
1616 : : #define I40E_FCOE_DIFDIX_CTX_QW0_FLAGS_MASK (0xFFFULL << \
1617 : : I40E_FCOE_DIFDIX_CTX_QW0_FLAGS_SHIFT)
1618 : :
1619 : : enum i40e_fcoe_difdix_ctx_desc_flags_bits {
1620 : : /* 2 BITS */
1621 : : I40E_FCOE_DIFDIX_CTX_DESC_RSVD = 0x0000,
1622 : : /* 1 BIT */
1623 : : I40E_FCOE_DIFDIX_CTX_DESC_APPTYPE_TAGCHK = 0x0000,
1624 : : /* 1 BIT */
1625 : : I40E_FCOE_DIFDIX_CTX_DESC_APPTYPE_TAGNOTCHK = 0x0004,
1626 : : /* 2 BITS */
1627 : : I40E_FCOE_DIFDIX_CTX_DESC_GTYPE_OPAQUE = 0x0000,
1628 : : /* 2 BITS */
1629 : : I40E_FCOE_DIFDIX_CTX_DESC_GTYPE_CHKINTEGRITY = 0x0008,
1630 : : /* 2 BITS */
1631 : : I40E_FCOE_DIFDIX_CTX_DESC_GTYPE_CHKINTEGRITY_APPTAG = 0x0010,
1632 : : /* 2 BITS */
1633 : : I40E_FCOE_DIFDIX_CTX_DESC_GTYPE_CHKINTEGRITY_APPREFTAG = 0x0018,
1634 : : /* 2 BITS */
1635 : : I40E_FCOE_DIFDIX_CTX_DESC_REFTYPE_CNST = 0x0000,
1636 : : /* 2 BITS */
1637 : : I40E_FCOE_DIFDIX_CTX_DESC_REFTYPE_INC1BLK = 0x0020,
1638 : : /* 2 BITS */
1639 : : I40E_FCOE_DIFDIX_CTX_DESC_REFTYPE_APPTAG = 0x0040,
1640 : : /* 2 BITS */
1641 : : I40E_FCOE_DIFDIX_CTX_DESC_REFTYPE_RSVD = 0x0060,
1642 : : /* 1 BIT */
1643 : : I40E_FCOE_DIFDIX_CTX_DESC_DIXMODE_XSUM = 0x0000,
1644 : : /* 1 BIT */
1645 : : I40E_FCOE_DIFDIX_CTX_DESC_DIXMODE_CRC = 0x0080,
1646 : : /* 2 BITS */
1647 : : I40E_FCOE_DIFDIX_CTX_DESC_DIFHOST_UNTAG = 0x0000,
1648 : : /* 2 BITS */
1649 : : I40E_FCOE_DIFDIX_CTX_DESC_DIFHOST_BUF = 0x0100,
1650 : : /* 2 BITS */
1651 : : I40E_FCOE_DIFDIX_CTX_DESC_DIFHOST_RSVD = 0x0200,
1652 : : /* 2 BITS */
1653 : : I40E_FCOE_DIFDIX_CTX_DESC_DIFHOST_EMBDTAGS = 0x0300,
1654 : : /* 1 BIT */
1655 : : I40E_FCOE_DIFDIX_CTX_DESC_DIFLAN_UNTAG = 0x0000,
1656 : : /* 1 BIT */
1657 : : I40E_FCOE_DIFDIX_CTX_DESC_DIFLAN_TAG = 0x0400,
1658 : : /* 1 BIT */
1659 : : I40E_FCOE_DIFDIX_CTX_DESC_DIFBLK_512B = 0x0000,
1660 : : /* 1 BIT */
1661 : : I40E_FCOE_DIFDIX_CTX_DESC_DIFBLK_4K = 0x0800
1662 : : };
1663 : :
1664 : : #define I40E_FCOE_DIFDIX_CTX_QW0_BUFF0_SHIFT 12
1665 : : #define I40E_FCOE_DIFDIX_CTX_QW0_BUFF0_MASK (0x3FFULL << \
1666 : : I40E_FCOE_DIFDIX_CTX_QW0_BUFF0_SHIFT)
1667 : :
1668 : : #define I40E_FCOE_DIFDIX_CTX_QW0_BUFF1_SHIFT 22
1669 : : #define I40E_FCOE_DIFDIX_CTX_QW0_BUFF1_MASK (0x3FFULL << \
1670 : : I40E_FCOE_DIFDIX_CTX_QW0_BUFF1_SHIFT)
1671 : :
1672 : : #define I40E_FCOE_DIFDIX_CTX_QW0_REF_SHIFT 32
1673 : : #define I40E_FCOE_DIFDIX_CTX_QW0_REF_MASK (0xFFFFFFFFULL << \
1674 : : I40E_FCOE_DIFDIX_CTX_QW0_REF_SHIFT)
1675 : :
1676 : : #define I40E_FCOE_DIFDIX_CTX_QW1_APP_SHIFT 0
1677 : : #define I40E_FCOE_DIFDIX_CTX_QW1_APP_MASK (0xFFFFULL << \
1678 : : I40E_FCOE_DIFDIX_CTX_QW1_APP_SHIFT)
1679 : :
1680 : : #define I40E_FCOE_DIFDIX_CTX_QW1_APP_MSK_SHIFT 16
1681 : : #define I40E_FCOE_DIFDIX_CTX_QW1_APP_MSK_MASK (0xFFFFULL << \
1682 : : I40E_FCOE_DIFDIX_CTX_QW1_APP_MSK_SHIFT)
1683 : :
1684 : : #define I40E_FCOE_DIFDIX_CTX_QW1_REF_BIAS_SHIFT 32
1685 : : #define I40E_FCOE_DIFDIX_CTX_QW0_REF_BIAS_MASK (0xFFFFFFFFULL << \
1686 : : I40E_FCOE_DIFDIX_CTX_QW1_REF_BIAS_SHIFT)
1687 : :
1688 : : /* FCoE DIF/DIX Buffers descriptor */
1689 : : struct i40e_fcoe_difdix_buffers_desc {
1690 : : __le64 buff_addr0;
1691 : : __le64 buff_addr1;
1692 : : };
1693 : :
1694 : : /* FCoE DDP Context descriptor */
1695 : : struct i40e_fcoe_ddp_context_desc {
1696 : : __le64 rsvd;
1697 : : __le64 type_cmd_foff_lsize;
1698 : : };
1699 : :
1700 : : #define I40E_FCOE_DDP_CTX_QW1_DTYPE_SHIFT 0
1701 : : #define I40E_FCOE_DDP_CTX_QW1_DTYPE_MASK (0xFULL << \
1702 : : I40E_FCOE_DDP_CTX_QW1_DTYPE_SHIFT)
1703 : :
1704 : : #define I40E_FCOE_DDP_CTX_QW1_CMD_SHIFT 4
1705 : : #define I40E_FCOE_DDP_CTX_QW1_CMD_MASK (0xFULL << \
1706 : : I40E_FCOE_DDP_CTX_QW1_CMD_SHIFT)
1707 : :
1708 : : enum i40e_fcoe_ddp_ctx_desc_cmd_bits {
1709 : : I40E_FCOE_DDP_CTX_DESC_BSIZE_512B = 0x00, /* 2 BITS */
1710 : : I40E_FCOE_DDP_CTX_DESC_BSIZE_4K = 0x01, /* 2 BITS */
1711 : : I40E_FCOE_DDP_CTX_DESC_BSIZE_8K = 0x02, /* 2 BITS */
1712 : : I40E_FCOE_DDP_CTX_DESC_BSIZE_16K = 0x03, /* 2 BITS */
1713 : : I40E_FCOE_DDP_CTX_DESC_DIFENA = 0x04, /* 1 BIT */
1714 : : I40E_FCOE_DDP_CTX_DESC_LASTSEQH = 0x08, /* 1 BIT */
1715 : : };
1716 : :
1717 : : #define I40E_FCOE_DDP_CTX_QW1_FOFF_SHIFT 16
1718 : : #define I40E_FCOE_DDP_CTX_QW1_FOFF_MASK (0x3FFFULL << \
1719 : : I40E_FCOE_DDP_CTX_QW1_FOFF_SHIFT)
1720 : :
1721 : : #define I40E_FCOE_DDP_CTX_QW1_LSIZE_SHIFT 32
1722 : : #define I40E_FCOE_DDP_CTX_QW1_LSIZE_MASK (0x3FFFULL << \
1723 : : I40E_FCOE_DDP_CTX_QW1_LSIZE_SHIFT)
1724 : :
1725 : : /* FCoE DDP/DWO Queue Context descriptor */
1726 : : struct i40e_fcoe_queue_context_desc {
1727 : : __le64 dmaindx_fbase; /* 0:11 DMAINDX, 12:63 FBASE */
1728 : : __le64 flen_tph; /* 0:12 FLEN, 13:15 TPH */
1729 : : };
1730 : :
1731 : : #define I40E_FCOE_QUEUE_CTX_QW0_DMAINDX_SHIFT 0
1732 : : #define I40E_FCOE_QUEUE_CTX_QW0_DMAINDX_MASK (0xFFFULL << \
1733 : : I40E_FCOE_QUEUE_CTX_QW0_DMAINDX_SHIFT)
1734 : :
1735 : : #define I40E_FCOE_QUEUE_CTX_QW0_FBASE_SHIFT 12
1736 : : #define I40E_FCOE_QUEUE_CTX_QW0_FBASE_MASK (0xFFFFFFFFFFFFFULL << \
1737 : : I40E_FCOE_QUEUE_CTX_QW0_FBASE_SHIFT)
1738 : :
1739 : : #define I40E_FCOE_QUEUE_CTX_QW1_FLEN_SHIFT 0
1740 : : #define I40E_FCOE_QUEUE_CTX_QW1_FLEN_MASK (0x1FFFULL << \
1741 : : I40E_FCOE_QUEUE_CTX_QW1_FLEN_SHIFT)
1742 : :
1743 : : #define I40E_FCOE_QUEUE_CTX_QW1_TPH_SHIFT 13
1744 : : #define I40E_FCOE_QUEUE_CTX_QW1_TPH_MASK (0x7ULL << \
1745 : : I40E_FCOE_QUEUE_CTX_QW1_FLEN_SHIFT)
1746 : :
1747 : : enum i40e_fcoe_queue_ctx_desc_tph_bits {
1748 : : I40E_FCOE_QUEUE_CTX_DESC_TPHRDESC = 0x1,
1749 : : I40E_FCOE_QUEUE_CTX_DESC_TPHDATA = 0x2
1750 : : };
1751 : :
1752 : : #define I40E_FCOE_QUEUE_CTX_QW1_RECIPE_SHIFT 30
1753 : : #define I40E_FCOE_QUEUE_CTX_QW1_RECIPE_MASK (0x3ULL << \
1754 : : I40E_FCOE_QUEUE_CTX_QW1_RECIPE_SHIFT)
1755 : :
1756 : : /* FCoE DDP/DWO Filter Context descriptor */
1757 : : struct i40e_fcoe_filter_context_desc {
1758 : : __le32 param;
1759 : : __le16 seqn;
1760 : :
1761 : : /* 48:51(0:3) RSVD, 52:63(4:15) DMAINDX */
1762 : : __le16 rsvd_dmaindx;
1763 : :
1764 : : /* 0:7 FLAGS, 8:52 RSVD, 53:63 LANQ */
1765 : : __le64 flags_rsvd_lanq;
1766 : : };
1767 : :
1768 : : #define I40E_FCOE_FILTER_CTX_QW0_DMAINDX_SHIFT 4
1769 : : #define I40E_FCOE_FILTER_CTX_QW0_DMAINDX_MASK (0xFFF << \
1770 : : I40E_FCOE_FILTER_CTX_QW0_DMAINDX_SHIFT)
1771 : :
1772 : : enum i40e_fcoe_filter_ctx_desc_flags_bits {
1773 : : I40E_FCOE_FILTER_CTX_DESC_CTYP_DDP = 0x00,
1774 : : I40E_FCOE_FILTER_CTX_DESC_CTYP_DWO = 0x01,
1775 : : I40E_FCOE_FILTER_CTX_DESC_ENODE_INIT = 0x00,
1776 : : I40E_FCOE_FILTER_CTX_DESC_ENODE_RSP = 0x02,
1777 : : I40E_FCOE_FILTER_CTX_DESC_FC_CLASS2 = 0x00,
1778 : : I40E_FCOE_FILTER_CTX_DESC_FC_CLASS3 = 0x04
1779 : : };
1780 : :
1781 : : #define I40E_FCOE_FILTER_CTX_QW1_FLAGS_SHIFT 0
1782 : : #define I40E_FCOE_FILTER_CTX_QW1_FLAGS_MASK (0xFFULL << \
1783 : : I40E_FCOE_FILTER_CTX_QW1_FLAGS_SHIFT)
1784 : :
1785 : : #define I40E_FCOE_FILTER_CTX_QW1_PCTYPE_SHIFT 8
1786 : : #define I40E_FCOE_FILTER_CTX_QW1_PCTYPE_MASK (0x3FULL << \
1787 : : I40E_FCOE_FILTER_CTX_QW1_PCTYPE_SHIFT)
1788 : :
1789 : : #define I40E_FCOE_FILTER_CTX_QW1_LANQINDX_SHIFT 53
1790 : : #define I40E_FCOE_FILTER_CTX_QW1_LANQINDX_MASK (0x7FFULL << \
1791 : : I40E_FCOE_FILTER_CTX_QW1_LANQINDX_SHIFT)
1792 : :
1793 : : enum i40e_switch_element_types {
1794 : : I40E_SWITCH_ELEMENT_TYPE_MAC = 1,
1795 : : I40E_SWITCH_ELEMENT_TYPE_PF = 2,
1796 : : I40E_SWITCH_ELEMENT_TYPE_VF = 3,
1797 : : I40E_SWITCH_ELEMENT_TYPE_EMP = 4,
1798 : : I40E_SWITCH_ELEMENT_TYPE_BMC = 6,
1799 : : I40E_SWITCH_ELEMENT_TYPE_PE = 16,
1800 : : I40E_SWITCH_ELEMENT_TYPE_VEB = 17,
1801 : : I40E_SWITCH_ELEMENT_TYPE_PA = 18,
1802 : : I40E_SWITCH_ELEMENT_TYPE_VSI = 19,
1803 : : };
1804 : :
1805 : : /* Supported EtherType filters */
1806 : : enum i40e_ether_type_index {
1807 : : I40E_ETHER_TYPE_1588 = 0,
1808 : : I40E_ETHER_TYPE_FIP = 1,
1809 : : I40E_ETHER_TYPE_OUI_EXTENDED = 2,
1810 : : I40E_ETHER_TYPE_MAC_CONTROL = 3,
1811 : : I40E_ETHER_TYPE_LLDP = 4,
1812 : : I40E_ETHER_TYPE_EVB_PROTOCOL1 = 5,
1813 : : I40E_ETHER_TYPE_EVB_PROTOCOL2 = 6,
1814 : : I40E_ETHER_TYPE_QCN_CNM = 7,
1815 : : I40E_ETHER_TYPE_8021X = 8,
1816 : : I40E_ETHER_TYPE_ARP = 9,
1817 : : I40E_ETHER_TYPE_RSV1 = 10,
1818 : : I40E_ETHER_TYPE_RSV2 = 11,
1819 : : };
1820 : :
1821 : : /* Filter context base size is 1K */
1822 : : #define I40E_HASH_FILTER_BASE_SIZE 1024
1823 : : /* Supported Hash filter values */
1824 : : enum i40e_hash_filter_size {
1825 : : I40E_HASH_FILTER_SIZE_1K = 0,
1826 : : I40E_HASH_FILTER_SIZE_2K = 1,
1827 : : I40E_HASH_FILTER_SIZE_4K = 2,
1828 : : I40E_HASH_FILTER_SIZE_8K = 3,
1829 : : I40E_HASH_FILTER_SIZE_16K = 4,
1830 : : I40E_HASH_FILTER_SIZE_32K = 5,
1831 : : I40E_HASH_FILTER_SIZE_64K = 6,
1832 : : I40E_HASH_FILTER_SIZE_128K = 7,
1833 : : I40E_HASH_FILTER_SIZE_256K = 8,
1834 : : I40E_HASH_FILTER_SIZE_512K = 9,
1835 : : I40E_HASH_FILTER_SIZE_1M = 10,
1836 : : };
1837 : :
1838 : : /* DMA context base size is 0.5K */
1839 : : #define I40E_DMA_CNTX_BASE_SIZE 512
1840 : : /* Supported DMA context values */
1841 : : enum i40e_dma_cntx_size {
1842 : : I40E_DMA_CNTX_SIZE_512 = 0,
1843 : : I40E_DMA_CNTX_SIZE_1K = 1,
1844 : : I40E_DMA_CNTX_SIZE_2K = 2,
1845 : : I40E_DMA_CNTX_SIZE_4K = 3,
1846 : : I40E_DMA_CNTX_SIZE_8K = 4,
1847 : : I40E_DMA_CNTX_SIZE_16K = 5,
1848 : : I40E_DMA_CNTX_SIZE_32K = 6,
1849 : : I40E_DMA_CNTX_SIZE_64K = 7,
1850 : : I40E_DMA_CNTX_SIZE_128K = 8,
1851 : : I40E_DMA_CNTX_SIZE_256K = 9,
1852 : : };
1853 : :
1854 : : /* Supported Hash look up table (LUT) sizes */
1855 : : enum i40e_hash_lut_size {
1856 : : I40E_HASH_LUT_SIZE_128 = 0,
1857 : : I40E_HASH_LUT_SIZE_512 = 1,
1858 : : };
1859 : :
1860 : : /* Structure to hold a per PF filter control settings */
1861 : : struct i40e_filter_control_settings {
1862 : : /* number of PE Quad Hash filter buckets */
1863 : : enum i40e_hash_filter_size pe_filt_num;
1864 : : /* number of PE Quad Hash contexts */
1865 : : enum i40e_dma_cntx_size pe_cntx_num;
1866 : : /* number of FCoE filter buckets */
1867 : : enum i40e_hash_filter_size fcoe_filt_num;
1868 : : /* number of FCoE DDP contexts */
1869 : : enum i40e_dma_cntx_size fcoe_cntx_num;
1870 : : /* size of the Hash LUT */
1871 : : enum i40e_hash_lut_size hash_lut_size;
1872 : : /* enable FDIR filters for PF and its VFs */
1873 : : bool enable_fdir;
1874 : : /* enable Ethertype filters for PF and its VFs */
1875 : : bool enable_ethtype;
1876 : : /* enable MAC/VLAN filters for PF and its VFs */
1877 : : bool enable_macvlan;
1878 : : };
1879 : :
1880 : : /* Structure to hold device level control filter counts */
1881 : : struct i40e_control_filter_stats {
1882 : : u16 mac_etype_used; /* Used perfect match MAC/EtherType filters */
1883 : : u16 etype_used; /* Used perfect EtherType filters */
1884 : : u16 mac_etype_free; /* Un-used perfect match MAC/EtherType filters */
1885 : : u16 etype_free; /* Un-used perfect EtherType filters */
1886 : : };
1887 : :
1888 : : enum i40e_reset_type {
1889 : : I40E_RESET_POR = 0,
1890 : : I40E_RESET_CORER = 1,
1891 : : I40E_RESET_GLOBR = 2,
1892 : : I40E_RESET_EMPR = 3,
1893 : : };
1894 : :
1895 : : /* IEEE 802.1AB LLDP Agent Variables from NVM */
1896 : : #define I40E_NVM_LLDP_CFG_PTR 0x06
1897 : : #define I40E_SR_LLDP_CFG_PTR 0x31
1898 : : struct i40e_lldp_variables {
1899 : : u16 length;
1900 : : u16 adminstatus;
1901 : : u16 msgfasttx;
1902 : : u16 msgtxinterval;
1903 : : u16 txparams;
1904 : : u16 timers;
1905 : : u16 crc8;
1906 : : };
1907 : :
1908 : : /* Offsets into Alternate Ram */
1909 : : #define I40E_ALT_STRUCT_FIRST_PF_OFFSET 0 /* in dwords */
1910 : : #define I40E_ALT_STRUCT_DWORDS_PER_PF 64 /* in dwords */
1911 : : #define I40E_ALT_STRUCT_OUTER_VLAN_TAG_OFFSET 0xD /* in dwords */
1912 : : #define I40E_ALT_STRUCT_USER_PRIORITY_OFFSET 0xC /* in dwords */
1913 : : #define I40E_ALT_STRUCT_MIN_BW_OFFSET 0xE /* in dwords */
1914 : : #define I40E_ALT_STRUCT_MAX_BW_OFFSET 0xF /* in dwords */
1915 : :
1916 : : /* Alternate Ram Bandwidth Masks */
1917 : : #define I40E_ALT_BW_VALUE_MASK 0xFF
1918 : : #define I40E_ALT_BW_RELATIVE_MASK 0x40000000
1919 : : #define I40E_ALT_BW_VALID_MASK 0x80000000
1920 : :
1921 : : /* RSS Hash Table Size */
1922 : : #define I40E_PFQF_CTL_0_HASHLUTSIZE_512 0x00010000
1923 : :
1924 : : /* INPUT SET MASK for RSS, flow director, and flexible payload */
1925 : : #define I40E_L3_SRC_SHIFT 47
1926 : : #define I40E_L3_SRC_MASK (0x3ULL << I40E_L3_SRC_SHIFT)
1927 : : #define I40E_L3_V6_SRC_SHIFT 43
1928 : : #define I40E_L3_V6_SRC_MASK (0xFFULL << I40E_L3_V6_SRC_SHIFT)
1929 : : #define I40E_L3_DST_SHIFT 35
1930 : : #define I40E_L3_DST_MASK (0x3ULL << I40E_L3_DST_SHIFT)
1931 : : #define I40E_L3_V6_DST_SHIFT 35
1932 : : #define I40E_L3_V6_DST_MASK (0xFFULL << I40E_L3_V6_DST_SHIFT)
1933 : : #define I40E_L4_SRC_SHIFT 34
1934 : : #define I40E_L4_SRC_MASK (0x1ULL << I40E_L4_SRC_SHIFT)
1935 : : #define I40E_L4_DST_SHIFT 33
1936 : : #define I40E_L4_DST_MASK (0x1ULL << I40E_L4_DST_SHIFT)
1937 : : #define I40E_VERIFY_TAG_SHIFT 31
1938 : : #define I40E_VERIFY_TAG_MASK (0x3ULL << I40E_VERIFY_TAG_SHIFT)
1939 : :
1940 : : #define I40E_FLEX_50_SHIFT 13
1941 : : #define I40E_FLEX_50_MASK (0x1ULL << I40E_FLEX_50_SHIFT)
1942 : : #define I40E_FLEX_51_SHIFT 12
1943 : : #define I40E_FLEX_51_MASK (0x1ULL << I40E_FLEX_51_SHIFT)
1944 : : #define I40E_FLEX_52_SHIFT 11
1945 : : #define I40E_FLEX_52_MASK (0x1ULL << I40E_FLEX_52_SHIFT)
1946 : : #define I40E_FLEX_53_SHIFT 10
1947 : : #define I40E_FLEX_53_MASK (0x1ULL << I40E_FLEX_53_SHIFT)
1948 : : #define I40E_FLEX_54_SHIFT 9
1949 : : #define I40E_FLEX_54_MASK (0x1ULL << I40E_FLEX_54_SHIFT)
1950 : : #define I40E_FLEX_55_SHIFT 8
1951 : : #define I40E_FLEX_55_MASK (0x1ULL << I40E_FLEX_55_SHIFT)
1952 : : #define I40E_FLEX_56_SHIFT 7
1953 : : #define I40E_FLEX_56_MASK (0x1ULL << I40E_FLEX_56_SHIFT)
1954 : : #define I40E_FLEX_57_SHIFT 6
1955 : : #define I40E_FLEX_57_MASK (0x1ULL << I40E_FLEX_57_SHIFT)
1956 : :
1957 : : /* Version format for Dynamic Device Personalization(DDP) */
1958 : : struct i40e_ddp_version {
1959 : : u8 major;
1960 : : u8 minor;
1961 : : u8 update;
1962 : : u8 draft;
1963 : : };
1964 : :
1965 : : #define I40E_DDP_NAME_SIZE 32
1966 : :
1967 : : /* Package header */
1968 : : struct i40e_package_header {
1969 : : struct i40e_ddp_version version;
1970 : : u32 segment_count;
1971 : : u32 segment_offset[1];
1972 : : };
1973 : :
1974 : : /* Generic segment header */
1975 : : struct i40e_generic_seg_header {
1976 : : #define SEGMENT_TYPE_METADATA 0x00000001
1977 : : #define SEGMENT_TYPE_NOTES 0x00000002
1978 : : #define SEGMENT_TYPE_I40E 0x00000011
1979 : : #define SEGMENT_TYPE_X722 0x00000012
1980 : : u32 type;
1981 : : struct i40e_ddp_version version;
1982 : : u32 size;
1983 : : char name[I40E_DDP_NAME_SIZE];
1984 : : };
1985 : :
1986 : : struct i40e_metadata_segment {
1987 : : struct i40e_generic_seg_header header;
1988 : : struct i40e_ddp_version version;
1989 : : #define I40E_DDP_TRACKID_RDONLY 0
1990 : : #define I40E_DDP_TRACKID_INVALID 0xFFFFFFFF
1991 : : #define I40E_DDP_TRACKID_GRP_MSK 0x00FF0000
1992 : : #define I40E_DDP_TRACKID_GRP_COMP_ALL 0xFF
1993 : : u32 track_id;
1994 : : char name[I40E_DDP_NAME_SIZE];
1995 : : };
1996 : :
1997 : : struct i40e_device_id_entry {
1998 : : u32 vendor_dev_id;
1999 : : u32 sub_vendor_dev_id;
2000 : : };
2001 : :
2002 : : struct i40e_profile_segment {
2003 : : struct i40e_generic_seg_header header;
2004 : : struct i40e_ddp_version version;
2005 : : char name[I40E_DDP_NAME_SIZE];
2006 : : u32 device_table_count;
2007 : : struct i40e_device_id_entry device_table[1];
2008 : : };
2009 : :
2010 : : struct i40e_section_table {
2011 : : u32 section_count;
2012 : : u32 section_offset[1];
2013 : : };
2014 : :
2015 : : struct i40e_profile_section_header {
2016 : : u16 tbl_size;
2017 : : u16 data_end;
2018 : : struct {
2019 : : #define SECTION_TYPE_INFO 0x00000010
2020 : : #define SECTION_TYPE_MMIO 0x00000800
2021 : : #define SECTION_TYPE_RB_MMIO 0x00001800
2022 : : #define SECTION_TYPE_AQ 0x00000801
2023 : : #define SECTION_TYPE_RB_AQ 0x00001801
2024 : : #define SECTION_TYPE_NOTE 0x80000000
2025 : : #define SECTION_TYPE_NAME 0x80000001
2026 : : #define SECTION_TYPE_PROTO 0x80000002
2027 : : #define SECTION_TYPE_PCTYPE 0x80000003
2028 : : #define SECTION_TYPE_PTYPE 0x80000004
2029 : : u32 type;
2030 : : u32 offset;
2031 : : u32 size;
2032 : : } section;
2033 : : };
2034 : :
2035 : : struct i40e_profile_tlv_section_record {
2036 : : u8 rtype;
2037 : : u8 type;
2038 : : u16 len;
2039 : : u8 data[12];
2040 : : };
2041 : :
2042 : : /* Generic AQ section in proflie */
2043 : : struct i40e_profile_aq_section {
2044 : : u16 opcode;
2045 : : u16 flags;
2046 : : u8 param[16];
2047 : : u16 datalen;
2048 : : u8 data[1];
2049 : : };
2050 : :
2051 : : struct i40e_profile_info {
2052 : : u32 track_id;
2053 : : struct i40e_ddp_version version;
2054 : : u8 op;
2055 : : #define I40E_DDP_ADD_TRACKID 0x01
2056 : : #define I40E_DDP_REMOVE_TRACKID 0x02
2057 : : u8 reserved[7];
2058 : : u8 name[I40E_DDP_NAME_SIZE];
2059 : : };
2060 : :
2061 : : #define I40E_BCM_PHY_PCS_STATUS1_PAGE 0x3
2062 : : #define I40E_BCM_PHY_PCS_STATUS1_REG 0x0001
2063 : : #define I40E_BCM_PHY_PCS_STATUS1_RX_LPI BIT(8)
2064 : : #define I40E_BCM_PHY_PCS_STATUS1_TX_LPI BIT(9)
2065 : :
2066 : : #endif /* _I40E_TYPE_H_ */
|