1 /*******************************************************************************
3 Copyright (c) 2013 - 2015, Intel Corporation
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions are met:
9 1. Redistributions of source code must retain the above copyright notice,
10 this list of conditions and the following disclaimer.
12 2. Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
16 3. Neither the name of the Intel Corporation nor the names of its
17 contributors may be used to endorse or promote products derived from
18 this software without specific prior written permission.
20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 POSSIBILITY OF SUCH DAMAGE.
32 ***************************************************************************/
34 #ifndef _FM10K_TYPE_H_
35 #define _FM10K_TYPE_H_
37 /* forward declaration */
40 #include "fm10k_osdep.h"
41 #include "fm10k_mbx.h"
43 #define FM10K_INTEL_VENDOR_ID 0x8086
44 #define FM10K_DEV_ID_PF 0x15A4
45 #define FM10K_DEV_ID_VF 0x15A5
46 #ifdef BOULDER_RAPIDS_HW
47 #define FM10K_DEV_ID_SDI_FM10420_QDA2 0x15D0
48 #endif /* BOULDER_RAPIDS_HW */
49 #ifdef ATWOOD_CHANNEL_HW
50 #define FM10K_DEV_ID_SDI_FM10420_DA2 0x15D5
51 #endif /* ATWOOD_CHANNEL_HW */
55 #define BIT(a) (1UL << (a))
57 #endif /* LINUX_MACROS */
59 #define FM10K_MAX_QUEUES 256
60 #define FM10K_MAX_QUEUES_PF 128
61 #define FM10K_MAX_QUEUES_POOL 16
63 #define FM10K_48_BIT_MASK 0x0000FFFFFFFFFFFFull
64 #define FM10K_STAT_VALID 0x80000000
67 #define FM10K_PCIE_LINK_CAP 0x7C
68 #define FM10K_PCIE_LINK_STATUS 0x82
69 #define FM10K_PCIE_LINK_WIDTH 0x3F0
70 #define FM10K_PCIE_LINK_WIDTH_1 0x10
71 #define FM10K_PCIE_LINK_WIDTH_2 0x20
72 #define FM10K_PCIE_LINK_WIDTH_4 0x40
73 #define FM10K_PCIE_LINK_WIDTH_8 0x80
74 #define FM10K_PCIE_LINK_SPEED 0xF
75 #define FM10K_PCIE_LINK_SPEED_2500 0x1
76 #define FM10K_PCIE_LINK_SPEED_5000 0x2
77 #define FM10K_PCIE_LINK_SPEED_8000 0x3
79 /* PCIe payload size */
80 #define FM10K_PCIE_DEV_CAP 0x74
81 #define FM10K_PCIE_DEV_CAP_PAYLOAD 0x07
82 #define FM10K_PCIE_DEV_CAP_PAYLOAD_128 0x00
83 #define FM10K_PCIE_DEV_CAP_PAYLOAD_256 0x01
84 #define FM10K_PCIE_DEV_CAP_PAYLOAD_512 0x02
85 #define FM10K_PCIE_DEV_CTRL 0x78
86 #define FM10K_PCIE_DEV_CTRL_PAYLOAD 0xE0
87 #define FM10K_PCIE_DEV_CTRL_PAYLOAD_128 0x00
88 #define FM10K_PCIE_DEV_CTRL_PAYLOAD_256 0x20
89 #define FM10K_PCIE_DEV_CTRL_PAYLOAD_512 0x40
91 /* PCIe MSI-X Capability info */
92 #define FM10K_PCI_MSIX_MSG_CTRL 0xB2
93 #define FM10K_PCI_MSIX_MSG_CTRL_TBL_SZ_MASK 0x7FF
94 #define FM10K_MAX_MSIX_VECTORS 256
95 #define FM10K_MAX_VECTORS_PF 256
96 #define FM10K_MAX_VECTORS_POOL 32
98 /* PCIe SR-IOV Info */
99 #define FM10K_PCIE_SRIOV_CTRL 0x190
100 #define FM10K_PCIE_SRIOV_CTRL_VFARI 0x10
102 #define FM10K_SUCCESS 0
103 #define FM10K_ERR_DEVICE_NOT_SUPPORTED -1
104 #define FM10K_ERR_PARAM -2
105 #define FM10K_ERR_NO_RESOURCES -3
106 #define FM10K_ERR_REQUESTS_PENDING -4
107 #define FM10K_ERR_RESET_REQUESTED -5
108 #define FM10K_ERR_DMA_PENDING -6
109 #define FM10K_ERR_RESET_FAILED -7
110 #define FM10K_ERR_INVALID_MAC_ADDR -8
111 #define FM10K_ERR_INVALID_VALUE -9
112 #define FM10K_NOT_IMPLEMENTED 0x7FFFFFFF
114 #define UNREFERENCED_XPARAMETER
115 #define UNREFERENCED_1PARAMETER(_p) (_p)
116 #define UNREFERENCED_2PARAMETER(_p, _q) do { (_p); (_q); } while (0)
117 #define UNREFERENCED_3PARAMETER(_p, _q, _r) do { (_p); (_q); (_r); } while (0)
119 /* Start of PF registers */
120 #define FM10K_CTRL 0x0000
121 #define FM10K_CTRL_BAR4_ALLOWED 0x00000004
123 #define FM10K_CTRL_EXT 0x0001
124 #define FM10K_CTRL_EXT_NS_DIS 0x00000001
125 #define FM10K_CTRL_EXT_RO_DIS 0x00000002
126 #define FM10K_CTRL_EXT_SWITCH_LOOPBACK 0x00000004
127 #define FM10K_EXVET 0x0002
128 #define FM10K_EXVET_ETHERTYPE_MASK 0x000000FF
129 #define FM10K_EXVET_TAG_SIZE_SHIFT 16
130 #define FM10K_EXVET_AFTER_VLAN 0x00040000
131 #define FM10K_GCR 0x0003
132 #define FM10K_FACTPS 0x0004
133 #define FM10K_GCR_EXT 0x0005
135 /* Interrupt control registers */
136 #define FM10K_EICR 0x0006
137 #define FM10K_EICR_PCA_FAULT 0x00000001
138 #define FM10K_EICR_THI_FAULT 0x00000004
139 #define FM10K_EICR_FUM_FAULT 0x00000020
140 #define FM10K_EICR_FAULT_MASK 0x0000003F
141 #define FM10K_EICR_MAILBOX 0x00000040
142 #define FM10K_EICR_SWITCHREADY 0x00000080
143 #define FM10K_EICR_SWITCHNOTREADY 0x00000100
144 #define FM10K_EICR_SWITCHINTERRUPT 0x00000200
145 #define FM10K_EICR_SRAMERROR 0x00000400
146 #define FM10K_EICR_VFLR 0x00000800
147 #define FM10K_EICR_MAXHOLDTIME 0x00001000
148 #define FM10K_EIMR 0x0007
149 #define FM10K_EIMR_PCA_FAULT 0x00000001
150 #define FM10K_EIMR_THI_FAULT 0x00000010
151 #define FM10K_EIMR_FUM_FAULT 0x00000400
152 #define FM10K_EIMR_MAILBOX 0x00001000
153 #define FM10K_EIMR_SWITCHREADY 0x00004000
154 #define FM10K_EIMR_SWITCHNOTREADY 0x00010000
155 #define FM10K_EIMR_SWITCHINTERRUPT 0x00040000
156 #define FM10K_EIMR_SRAMERROR 0x00100000
157 #define FM10K_EIMR_VFLR 0x00400000
158 #define FM10K_EIMR_MAXHOLDTIME 0x01000000
159 #define FM10K_EIMR_ALL 0x55555555
160 #define FM10K_EIMR_DISABLE(NAME) ((FM10K_EIMR_ ## NAME) << 0)
161 #define FM10K_EIMR_ENABLE(NAME) ((FM10K_EIMR_ ## NAME) << 1)
162 #define FM10K_FAULT_ADDR_LO 0x0
163 #define FM10K_FAULT_ADDR_HI 0x1
164 #define FM10K_FAULT_SPECINFO 0x2
165 #define FM10K_FAULT_FUNC 0x3
166 #define FM10K_FAULT_SIZE 0x4
167 #define FM10K_FAULT_FUNC_VALID 0x00008000
168 #define FM10K_FAULT_FUNC_PF 0x00004000
169 #define FM10K_FAULT_FUNC_VF_MASK 0x00003F00
170 #define FM10K_FAULT_FUNC_VF_SHIFT 8
171 #define FM10K_FAULT_FUNC_TYPE_MASK 0x000000FF
173 #define FM10K_PCA_FAULT 0x0008
174 #define FM10K_THI_FAULT 0x0010
175 #define FM10K_FUM_FAULT 0x001C
177 /* Rx queue timeout indicator */
178 #define FM10K_MAXHOLDQ(_n) ((_n) + 0x0020)
180 /* Switch Manager info */
181 #define FM10K_SM_AREA(_n) ((_n) + 0x0028)
183 /* GLORT mapping registers */
184 #define FM10K_DGLORTMAP(_n) ((_n) + 0x0030)
185 #define FM10K_DGLORT_COUNT 8
186 #define FM10K_DGLORTMAP_MASK_SHIFT 16
187 #define FM10K_DGLORTMAP_ANY 0x00000000
188 #define FM10K_DGLORTMAP_NONE 0x0000FFFF
189 #define FM10K_DGLORTMAP_ZERO 0xFFFF0000
190 #define FM10K_DGLORTDEC(_n) ((_n) + 0x0038)
191 #define FM10K_DGLORTDEC_VSILENGTH_SHIFT 4
192 #define FM10K_DGLORTDEC_VSIBASE_SHIFT 7
193 #define FM10K_DGLORTDEC_PCLENGTH_SHIFT 14
194 #define FM10K_DGLORTDEC_QBASE_SHIFT 16
195 #define FM10K_DGLORTDEC_RSSLENGTH_SHIFT 24
196 #define FM10K_DGLORTDEC_INNERRSS_ENABLE 0x08000000
197 #define FM10K_TUNNEL_CFG 0x0040
198 #define FM10K_TUNNEL_CFG_NVGRE_SHIFT 16
199 #define FM10K_TUNNEL_CFG_GENEVE 0x0041
200 #define FM10K_SWPRI_MAP(_n) ((_n) + 0x0050)
201 #define FM10K_SWPRI_MAX 16
202 #define FM10K_RSSRK(_n, _m) (((_n) * 0x10) + (_m) + 0x0800)
203 #define FM10K_RSSRK_SIZE 10
204 #define FM10K_RSSRK_ENTRIES_PER_REG 4
205 #define FM10K_RETA(_n, _m) (((_n) * 0x20) + (_m) + 0x1000)
206 #define FM10K_RETA_SIZE 32
207 #define FM10K_RETA_ENTRIES_PER_REG 4
208 #define FM10K_MAX_RSS_INDICES 128
210 /* Rate limiting registers */
211 #define FM10K_TC_CREDIT(_n) ((_n) + 0x2000)
212 #define FM10K_TC_CREDIT_CREDIT_MASK 0x001FFFFF
213 #define FM10K_TC_MAXCREDIT(_n) ((_n) + 0x2040)
214 #define FM10K_TC_MAXCREDIT_64K 0x00010000
215 #define FM10K_TC_RATE(_n) ((_n) + 0x2080)
216 #define FM10K_TC_RATE_QUANTA_MASK 0x0000FFFF
217 #define FM10K_TC_RATE_INTERVAL_4US_GEN1 0x00020000
218 #define FM10K_TC_RATE_INTERVAL_4US_GEN2 0x00040000
219 #define FM10K_TC_RATE_INTERVAL_4US_GEN3 0x00080000
220 #define FM10K_TC_RATE_STATUS 0x20C0
221 #define FM10K_PAUSE 0x20C2
223 /* DMA control registers */
224 #define FM10K_DMA_CTRL 0x20C3
225 #define FM10K_DMA_CTRL_TX_ENABLE 0x00000001
226 #define FM10K_DMA_CTRL_TX_HOST_PENDING 0x00000002
227 #define FM10K_DMA_CTRL_TX_DATA 0x00000004
228 #define FM10K_DMA_CTRL_TX_ACTIVE 0x00000008
229 #define FM10K_DMA_CTRL_RX_ENABLE 0x00000010
230 #define FM10K_DMA_CTRL_RX_HOST_PENDING 0x00000020
231 #define FM10K_DMA_CTRL_RX_DATA 0x00000040
232 #define FM10K_DMA_CTRL_RX_ACTIVE 0x00000080
233 #define FM10K_DMA_CTRL_RX_DESC_SIZE 0x00000100
234 #define FM10K_DMA_CTRL_MINMSS_SHIFT 9
235 #define FM10K_DMA_CTRL_MINMSS_64 0x00008000
236 #define FM10K_DMA_CTRL_MAX_HOLD_TIME_SHIFT 23
237 #define FM10K_DMA_CTRL_MAX_HOLD_1US_GEN3 0x04800000
238 #define FM10K_DMA_CTRL_MAX_HOLD_1US_GEN2 0x04000000
239 #define FM10K_DMA_CTRL_MAX_HOLD_1US_GEN1 0x03800000
240 #define FM10K_DMA_CTRL_DATAPATH_RESET 0x20000000
241 #define FM10K_DMA_CTRL_MAXNUMOFQ_MASK 0xC0000000
242 #define FM10K_DMA_CTRL_32_DESC 0x00000000
243 #define FM10K_DMA_CTRL_64_DESC 0x40000000
244 #define FM10K_DMA_CTRL_128_DESC 0x80000000
246 #define FM10K_DMA_CTRL2 0x20C4
247 #define FM10K_DMA_CTRL2_TX_FRAME_SPACING_SHIFT 5
248 #define FM10K_DMA_CTRL2_SWITCH_READY 0x00002000
249 #define FM10K_DMA_CTRL2_RX_DESC_READ_PRIO_SHIFT 14
250 #define FM10K_DMA_CTRL2_TX_DESC_READ_PRIO_SHIFT 17
251 #define FM10K_DMA_CTRL2_TX_DATA_READ_PRIO_SHIFT 20
253 /* TSO flags configuration
254 * First packet contains all flags except for fin and psh
255 * Middle packet contains only urg and ack
256 * Last packet contains urg, ack, fin, and psh
258 #define FM10K_TSO_FLAGS_LOW 0x00300FF6
259 #define FM10K_TSO_FLAGS_HI 0x00000039
260 #define FM10K_DTXTCPFLGL 0x20C5
261 #define FM10K_DTXTCPFLGH 0x20C6
263 #define FM10K_TPH_CTRL 0x20C7
264 #define FM10K_TPH_CTRL_DISABLE_READ_HINT 0x00000080
265 #define FM10K_MRQC(_n) ((_n) + 0x2100)
266 #define FM10K_MRQC_TCP_IPV4 0x00000001
267 #define FM10K_MRQC_IPV4 0x00000002
268 #define FM10K_MRQC_IPV6 0x00000010
269 #define FM10K_MRQC_TCP_IPV6 0x00000020
270 #define FM10K_MRQC_UDP_IPV4 0x00000040
271 #define FM10K_MRQC_UDP_IPV6 0x00000080
273 #define FM10K_TQMAP(_n) ((_n) + 0x2800)
274 #define FM10K_TQMAP_TABLE_SIZE 2048
275 #define FM10K_RQMAP(_n) ((_n) + 0x3000)
276 #define FM10K_RQMAP_TABLE_SIZE 2048
278 /* Hardware Statistics */
279 #define FM10K_STATS_TIMEOUT 0x3800
280 #define FM10K_STATS_UR 0x3801
281 #define FM10K_STATS_CA 0x3802
282 #define FM10K_STATS_UM 0x3803
283 #define FM10K_STATS_XEC 0x3804
284 #define FM10K_STATS_VLAN_DROP 0x3805
285 #define FM10K_STATS_LOOPBACK_DROP 0x3806
286 #define FM10K_STATS_NODESC_DROP 0x3807
288 /* Timesync registers */
289 #define FM10K_RRTIME_CFG 0x3808
290 #define FM10K_RRTIME_LIMIT(_n) ((_n) + 0x380C)
291 #define FM10K_RRTIME_COUNT(_n) ((_n) + 0x3810)
292 #define FM10K_SYSTIME 0x3814
293 #define FM10K_SYSTIME0 0x3816
294 #define FM10K_SYSTIME_CFG 0x3818
295 #define FM10K_SYSTIME_CFG_STEP_MASK 0x0000000F
297 /* PCIe state registers */
298 #define FM10K_PFVFBME(_n) ((_n) + 0x381A)
299 #define FM10K_PHYADDR 0x381C
301 /* Rx ring registers */
302 #define FM10K_RDBAL(_n) ((0x40 * (_n)) + 0x4000)
303 #define FM10K_RDBAH(_n) ((0x40 * (_n)) + 0x4001)
304 #define FM10K_RDLEN(_n) ((0x40 * (_n)) + 0x4002)
305 #define FM10K_TPH_RXCTRL(_n) ((0x40 * (_n)) + 0x4003)
306 #define FM10K_TPH_RXCTRL_DESC_TPHEN 0x00000020
307 #define FM10K_TPH_RXCTRL_HDR_TPHEN 0x00000040
308 #define FM10K_TPH_RXCTRL_DATA_TPHEN 0x00000080
309 #define FM10K_TPH_RXCTRL_DESC_RROEN 0x00000200
310 #define FM10K_TPH_RXCTRL_DATA_WROEN 0x00002000
311 #define FM10K_TPH_RXCTRL_HDR_WROEN 0x00008000
312 #define FM10K_RDH(_n) ((0x40 * (_n)) + 0x4004)
313 #define FM10K_RDT(_n) ((0x40 * (_n)) + 0x4005)
314 #define FM10K_RXQCTL(_n) ((0x40 * (_n)) + 0x4006)
315 #define FM10K_RXQCTL_ENABLE 0x00000001
316 #define FM10K_RXQCTL_PF 0x000000FC
317 #define FM10K_RXQCTL_VF_SHIFT 2
318 #define FM10K_RXQCTL_VF 0x00000100
319 #define FM10K_RXQCTL_ID_MASK (FM10K_RXQCTL_PF | FM10K_RXQCTL_VF)
320 #define FM10K_RXDCTL(_n) ((0x40 * (_n)) + 0x4007)
321 #define FM10K_RXDCTL_WRITE_BACK_MIN_DELAY 0x00000001
322 #define FM10K_RXDCTL_WRITE_BACK_IMM 0x00000100
323 #define FM10K_RXDCTL_DROP_ON_EMPTY 0x00000200
324 #define FM10K_RXINT(_n) ((0x40 * (_n)) + 0x4008)
325 #define FM10K_RXINT_TIMER_SHIFT 8
326 #define FM10K_SRRCTL(_n) ((0x40 * (_n)) + 0x4009)
327 #define FM10K_SRRCTL_BSIZEPKT_SHIFT 8 /* shift _right_ */
328 #define FM10K_SRRCTL_BSIZEHDR_SHIFT 2 /* shift _left_ */
329 #define FM10K_SRRCTL_BSIZEHDR_MASK 0x00003F00
330 #define FM10K_SRRCTL_DESCTYPE_HDR_SPLIT 0x00004000
331 #define FM10K_SRRCTL_DESCTYPE_SIZE_SPLIT 0x00008000
332 #define FM10K_SRRCTL_PSRTYPE_INNER_TCPHDR 0x00010000
333 #define FM10K_SRRCTL_PSRTYPE_INNER_UDPHDR 0x00020000
334 #define FM10K_SRRCTL_PSRTYPE_INNER_IPV4HDR 0x00040000
335 #define FM10K_SRRCTL_PSRTYPE_INNER_IPV6HDR 0x00080000
336 #define FM10K_SRRCTL_PSRTYPE_INNER_L2HDR 0x00100000
337 #define FM10K_SRRCTL_PSRTYPE_ENCAPHDR 0x00200000
338 #define FM10K_SRRCTL_PSRTYPE_TCPHDR 0x00400000
339 #define FM10K_SRRCTL_PSRTYPE_UDPHDR 0x00800000
340 #define FM10K_SRRCTL_PSRTYPE_IPV4HDR 0x01000000
341 #define FM10K_SRRCTL_PSRTYPE_IPV6HDR 0x02000000
342 #define FM10K_SRRCTL_PSRTYPE_L2HDR 0x04000000
343 #define FM10K_SRRCTL_LOOPBACK_SUPPRESS 0x40000000
344 #define FM10K_SRRCTL_BUFFER_CHAINING_EN 0x80000000
347 #define FM10K_QPRC(_n) ((0x40 * (_n)) + 0x400A)
348 #define FM10K_QPRDC(_n) ((0x40 * (_n)) + 0x400B)
349 #define FM10K_QBRC_L(_n) ((0x40 * (_n)) + 0x400C)
350 #define FM10K_QBRC_H(_n) ((0x40 * (_n)) + 0x400D)
352 /* Rx GLORT register */
353 #define FM10K_RX_SGLORT(_n) ((0x40 * (_n)) + 0x400E)
355 /* Tx ring registers */
356 #define FM10K_TDBAL(_n) ((0x40 * (_n)) + 0x8000)
357 #define FM10K_TDBAH(_n) ((0x40 * (_n)) + 0x8001)
358 #define FM10K_TDLEN(_n) ((0x40 * (_n)) + 0x8002)
359 /* When fist initialized, VFs need to know the Interrupt Throttle Rate (ITR)
360 * scale which is based on the PCIe speed but the speed information in the PCI
361 * configuration space may not be accurate. The PF already knows the ITR scale
362 * but there is no defined method to pass that information from the PF to the
363 * VF. This is accomplished during VF initialization by temporarily co-opting
364 * the yet-to-be-used TDLEN register to have the PF store the ITR shift for
365 * the VF to retrieve before the VF needs to use the TDLEN register for its
366 * intended purpose, i.e. before the Tx resources are allocated.
368 #define FM10K_TDLEN_ITR_SCALE_SHIFT 9
369 #define FM10K_TDLEN_ITR_SCALE_MASK 0x00000E00
370 #define FM10K_TDLEN_ITR_SCALE_GEN1 2
371 #define FM10K_TDLEN_ITR_SCALE_GEN2 1
372 #define FM10K_TDLEN_ITR_SCALE_GEN3 0
373 #define FM10K_TPH_TXCTRL(_n) ((0x40 * (_n)) + 0x8003)
374 #define FM10K_TPH_TXCTRL_DESC_TPHEN 0x00000020
375 #define FM10K_TPH_TXCTRL_DESC_RROEN 0x00000200
376 #define FM10K_TPH_TXCTRL_DESC_WROEN 0x00000800
377 #define FM10K_TPH_TXCTRL_DATA_RROEN 0x00002000
378 #define FM10K_TDH(_n) ((0x40 * (_n)) + 0x8004)
379 #define FM10K_TDT(_n) ((0x40 * (_n)) + 0x8005)
380 #define FM10K_TXDCTL(_n) ((0x40 * (_n)) + 0x8006)
381 #define FM10K_TXDCTL_ENABLE 0x00004000
382 #define FM10K_TXDCTL_MAX_TIME_SHIFT 16
383 #define FM10K_TXDCTL_PUSH_DESC 0x10000000
384 #define FM10K_TXQCTL(_n) ((0x40 * (_n)) + 0x8007)
385 #define FM10K_TXQCTL_PF 0x0000003F
386 #define FM10K_TXQCTL_VF 0x00000040
387 #define FM10K_TXQCTL_ID_MASK (FM10K_TXQCTL_PF | FM10K_TXQCTL_VF)
388 #define FM10K_TXQCTL_PC_SHIFT 7
389 #define FM10K_TXQCTL_PC_MASK 0x00000380
390 #define FM10K_TXQCTL_TC_SHIFT 10
391 #define FM10K_TXQCTL_TC_MASK 0x0000FC00
392 #define FM10K_TXQCTL_VID_SHIFT 16
393 #define FM10K_TXQCTL_VID_MASK 0x0FFF0000
394 #define FM10K_TXQCTL_UNLIMITED_BW 0x10000000
395 #define FM10K_TXQCTL_PUSHMODEDIS 0x20000000
396 #define FM10K_TXINT(_n) ((0x40 * (_n)) + 0x8008)
397 #define FM10K_TXINT_TIMER_SHIFT 8
400 #define FM10K_QPTC(_n) ((0x40 * (_n)) + 0x8009)
401 #define FM10K_QBTC_L(_n) ((0x40 * (_n)) + 0x800A)
402 #define FM10K_QBTC_H(_n) ((0x40 * (_n)) + 0x800B)
404 /* Tx Push registers */
405 #define FM10K_TQDLOC(_n) ((0x40 * (_n)) + 0x800C)
406 #define FM10K_TQDLOC_BASE_32_DESC 0x08
407 #define FM10K_TQDLOC_BASE_64_DESC 0x10
408 #define FM10K_TQDLOC_BASE_128_DESC 0x20
409 #define FM10K_TQDLOC_SIZE_32_DESC 0x00050000
410 #define FM10K_TQDLOC_SIZE_64_DESC 0x00060000
411 #define FM10K_TQDLOC_SIZE_128_DESC 0x00070000
412 #define FM10K_TQDLOC_SIZE_SHIFT 16
413 #define FM10K_TX_DCACHE(_n, _m) ((0x400 * (_n)) + (0x4 * (_m)) + 0x40000)
415 /* Tx GLORT registers */
416 #define FM10K_TX_SGLORT(_n) ((0x40 * (_n)) + 0x800D)
417 #define FM10K_PFVTCTL(_n) ((0x40 * (_n)) + 0x800E)
418 #define FM10K_PFVTCTL_FTAG_DESC_ENABLE 0x00000001
420 /* Interrupt moderation and control registers */
421 #define FM10K_PBACL(_n) ((_n) + 0x10000)
422 #define FM10K_INT_MAP(_n) ((_n) + 0x10080)
423 #define FM10K_INT_MAP_TIMER0 0x00000000
424 #define FM10K_INT_MAP_TIMER1 0x00000100
425 #define FM10K_INT_MAP_IMMEDIATE 0x00000200
426 #define FM10K_INT_MAP_DISABLE 0x00000300
427 #define FM10K_MSIX_VECTOR_ADDR_LO(_n) ((0x4 * (_n)) + 0x11000)
428 #define FM10K_MSIX_VECTOR_ADDR_HI(_n) ((0x4 * (_n)) + 0x11001)
429 #define FM10K_MSIX_VECTOR_DATA(_n) ((0x4 * (_n)) + 0x11002)
430 #define FM10K_MSIX_VECTOR_MASK(_n) ((0x4 * (_n)) + 0x11003)
431 #define FM10K_INT_CTRL 0x12000
432 #define FM10K_INT_CTRL_ENABLEMODERATOR 0x00000400
433 #define FM10K_ITR(_n) ((_n) + 0x12400)
434 #define FM10K_ITR_INTERVAL1_SHIFT 12
435 #define FM10K_ITR_TIMER0_EXPIRED 0x01000000
436 #define FM10K_ITR_TIMER1_EXPIRED 0x02000000
437 #define FM10K_ITR_PENDING0 0x04000000
438 #define FM10K_ITR_PENDING1 0x08000000
439 #define FM10K_ITR_PENDING2 0x10000000
440 #define FM10K_ITR_AUTOMASK 0x20000000
441 #define FM10K_ITR_MASK_SET 0x40000000
442 #define FM10K_ITR_MASK_CLEAR 0x80000000
443 #define FM10K_ITR2(_n) ((0x2 * (_n)) + 0x12800)
444 #define FM10K_ITR2_LP(_n) ((0x2 * (_n)) + 0x12801)
445 #define FM10K_ITR_REG_COUNT 768
446 #define FM10K_ITR_REG_COUNT_PF 256
448 /* Switch manager interrupt registers */
449 #define FM10K_IP 0x13000
450 #define FM10K_IP_HOT_RESET 0x00000001
451 #define FM10K_IP_DEVICE_STATE_CHANGE 0x00000002
452 #define FM10K_IP_MAILBOX 0x00000004
453 #define FM10K_IP_VPD_REQUEST 0x00000008
454 #define FM10K_IP_SRAMERROR 0x00000010
455 #define FM10K_IP_PFLR 0x00000020
456 #define FM10K_IP_DATAPATHRESET 0x00000040
457 #define FM10K_IP_OUTOFRESET 0x00000080
458 #define FM10K_IP_NOTINRESET 0x00000100
459 #define FM10K_IP_TIMEOUT 0x00000200
460 #define FM10K_IP_VFLR 0x00000400
461 #define FM10K_IM 0x13001
462 #define FM10K_IB 0x13002
463 #define FM10K_SRAM_IP 0x13003
464 #define FM10K_SRAM_IM 0x13004
467 #define FM10K_VLAN_TABLE(_n, _m) ((0x80 * (_n)) + (_m) + 0x14000)
468 #define FM10K_VLAN_TABLE_SIZE 128
470 /* VLAN specific message offsets */
471 #define FM10K_VLAN_TABLE_VID_MAX 4096
472 #define FM10K_VLAN_TABLE_VSI_MAX 64
473 #define FM10K_VLAN_LENGTH_SHIFT 16
474 #define FM10K_VLAN_CLEAR BIT(15)
475 #define FM10K_VLAN_ALL \
476 ((FM10K_VLAN_TABLE_VID_MAX - 1) << FM10K_VLAN_LENGTH_SHIFT)
478 /* VF FLR event notification registers */
479 #define FM10K_PFVFLRE(_n) ((0x1 * (_n)) + 0x18844)
480 #define FM10K_PFVFLREC(_n) ((0x1 * (_n)) + 0x18846)
482 /* Defines for size of uncacheable and write-combining memories */
483 #define FM10K_UC_ADDR_START 0x000000 /* start of standard regs */
484 #define FM10K_WC_ADDR_START 0x100000 /* start of Tx Desc Cache */
485 #define FM10K_DBI_ADDR_START 0x200000 /* start of debug registers */
486 #define FM10K_UC_ADDR_SIZE (FM10K_WC_ADDR_START - FM10K_UC_ADDR_START)
487 #define FM10K_WC_ADDR_SIZE (FM10K_DBI_ADDR_START - FM10K_WC_ADDR_START)
489 /* Define timeouts for resets and disables */
490 #define FM10K_QUEUE_DISABLE_TIMEOUT 100
491 #define FM10K_RESET_TIMEOUT 150
493 /* Maximum supported combined inner and outer header length for encapsulation */
494 #define FM10K_TUNNEL_HEADER_LENGTH 184
497 #define FM10K_VFCTRL 0x00000
498 #define FM10K_VFCTRL_RST 0x00000008
499 #define FM10K_VFINT_MAP 0x00030
500 #define FM10K_VFSYSTIME 0x00040
501 #define FM10K_VFITR(_n) ((_n) + 0x00060)
502 #define FM10K_VFPBACL(_n) ((_n) + 0x00008)
504 /* Registers contained in BAR 4 for Switch management */
505 #define FM10K_SW_SYSTIME_CFG 0x0224C
506 #define FM10K_SW_SYSTIME_CFG_STEP_SHIFT 4
507 #define FM10K_SW_SYSTIME_CFG_ADJUST_MASK 0xFF000000
508 #define FM10K_SW_SYSTIME_ADJUST 0x0224D
509 #define FM10K_SW_SYSTIME_ADJUST_MASK 0x3FFFFFFF
510 #define FM10K_SW_SYSTIME_ADJUST_DIR_POSITIVE 0x80000000
511 #define FM10K_SW_SYSTIME_PULSE(_n) ((_n) + 0x02252)
515 #endif /* ETH_ALEN */
517 #ifndef FM10K_IS_ZERO_ETHER_ADDR
518 /* make certain address is not 0 */
519 #define FM10K_IS_ZERO_ETHER_ADDR(addr) \
520 (!((addr)[0] | (addr)[1] | (addr)[2] | (addr)[3] | (addr)[4] | (addr)[5]))
523 #ifndef FM10K_IS_MULTICAST_ETHER_ADDR
524 #define FM10K_IS_MULTICAST_ETHER_ADDR(addr) ((addr)[0] & 0x1)
527 #ifndef FM10K_IS_VALID_ETHER_ADDR
528 /* make certain address is not multicast or 0 */
529 #define FM10K_IS_VALID_ETHER_ADDR(addr) \
530 (!FM10K_IS_MULTICAST_ETHER_ADDR(addr) && !FM10K_IS_ZERO_ETHER_ADDR(addr))
533 enum fm10k_int_source {
534 fm10k_int_mailbox = 0,
535 fm10k_int_pcie_fault = 1,
536 fm10k_int_switch_up_down = 2,
537 fm10k_int_switch_event = 3,
540 fm10k_int_max_hold_time = 6,
541 fm10k_int_sources_max_pf
544 /* PCIe bus speeds */
545 enum fm10k_bus_speed {
546 fm10k_bus_speed_unknown = 0,
547 fm10k_bus_speed_2500 = 2500,
548 fm10k_bus_speed_5000 = 5000,
549 fm10k_bus_speed_8000 = 8000,
550 fm10k_bus_speed_reserved
553 /* PCIe bus widths */
554 enum fm10k_bus_width {
555 fm10k_bus_width_unknown = 0,
556 fm10k_bus_width_pcie_x1 = 1,
557 fm10k_bus_width_pcie_x2 = 2,
558 fm10k_bus_width_pcie_x4 = 4,
559 fm10k_bus_width_pcie_x8 = 8,
560 fm10k_bus_width_reserved
563 /* PCIe payload sizes */
564 enum fm10k_bus_payload {
565 fm10k_bus_payload_unknown = 0,
566 fm10k_bus_payload_128 = 1,
567 fm10k_bus_payload_256 = 2,
568 fm10k_bus_payload_512 = 3,
569 fm10k_bus_payload_reserved
573 struct fm10k_bus_info {
574 enum fm10k_bus_speed speed;
575 enum fm10k_bus_width width;
576 enum fm10k_bus_payload payload;
579 /* Statistics related declarations */
580 struct fm10k_hw_stat {
586 struct fm10k_hw_stats_q {
587 struct fm10k_hw_stat tx_bytes;
588 struct fm10k_hw_stat tx_packets;
589 #define tx_stats_idx tx_packets.base_h
590 struct fm10k_hw_stat rx_bytes;
591 struct fm10k_hw_stat rx_packets;
592 #define rx_stats_idx rx_packets.base_h
593 struct fm10k_hw_stat rx_drops;
596 struct fm10k_hw_stats {
597 struct fm10k_hw_stat timeout;
598 #define stats_idx timeout.base_h
599 struct fm10k_hw_stat ur;
600 struct fm10k_hw_stat ca;
601 struct fm10k_hw_stat um;
602 struct fm10k_hw_stat xec;
603 struct fm10k_hw_stat vlan_drop;
604 struct fm10k_hw_stat loopback_drop;
605 struct fm10k_hw_stat nodesc_drop;
606 struct fm10k_hw_stats_q q[FM10K_MAX_QUEUES_PF];
609 /* Establish DGLORT feature priority */
610 enum fm10k_dglortdec_idx {
611 fm10k_dglort_default = 0,
612 fm10k_dglort_vf_rsvd0 = 1,
613 fm10k_dglort_vf_rss = 2,
614 fm10k_dglort_pf_rsvd0 = 3,
615 fm10k_dglort_pf_queue = 4,
616 fm10k_dglort_pf_vsi = 5,
617 fm10k_dglort_pf_rsvd1 = 6,
618 fm10k_dglort_pf_rss = 7
621 struct fm10k_dglort_cfg {
622 u16 glort; /* GLORT base */
623 u16 queue_b; /* Base value for queue */
624 u8 vsi_b; /* Base value for VSI */
625 u8 idx; /* index of DGLORTDEC entry */
626 u8 rss_l; /* RSS indices */
627 u8 pc_l; /* Priority Class indices */
628 u8 vsi_l; /* Number of bits from GLORT used to determine VSI */
629 u8 queue_l; /* Number of bits from GLORT used to determine queue */
630 u8 shared_l; /* Ignored bits from GLORT resulting in shared VSI */
631 u8 inner_rss; /* Boolean value if inner header is used for RSS */
634 enum fm10k_pca_fault {
645 enum fm10k_thi_fault {
651 enum fm10k_fum_fault {
668 u64 address; /* Address at the time fault was detected */
669 u32 specinfo; /* Extra info on this fault (fault dependent) */
670 u8 type; /* Fault value dependent on subunit */
671 u8 func; /* Function number of the fault */
674 struct fm10k_mac_ops {
675 /* basic bring-up and tear-down */
676 s32 (*reset_hw)(struct fm10k_hw *);
677 s32 (*init_hw)(struct fm10k_hw *);
678 s32 (*start_hw)(struct fm10k_hw *);
679 s32 (*stop_hw)(struct fm10k_hw *);
680 s32 (*get_bus_info)(struct fm10k_hw *);
681 s32 (*get_host_state)(struct fm10k_hw *, bool *);
682 bool (*is_slot_appropriate)(struct fm10k_hw *);
683 s32 (*update_vlan)(struct fm10k_hw *, u32, u8, bool);
684 s32 (*read_mac_addr)(struct fm10k_hw *);
685 s32 (*update_uc_addr)(struct fm10k_hw *, u16, const u8 *,
687 s32 (*update_mc_addr)(struct fm10k_hw *, u16, const u8 *, u16, bool);
688 s32 (*update_xcast_mode)(struct fm10k_hw *, u16, u8);
689 void (*update_int_moderator)(struct fm10k_hw *);
690 s32 (*update_lport_state)(struct fm10k_hw *, u16, u16, bool);
691 void (*update_hw_stats)(struct fm10k_hw *, struct fm10k_hw_stats *);
692 void (*rebind_hw_stats)(struct fm10k_hw *, struct fm10k_hw_stats *);
693 s32 (*configure_dglort_map)(struct fm10k_hw *,
694 struct fm10k_dglort_cfg *);
695 void (*set_dma_mask)(struct fm10k_hw *, u64);
696 s32 (*get_fault)(struct fm10k_hw *, int, struct fm10k_fault *);
697 void (*request_lport_map)(struct fm10k_hw *);
698 s32 (*adjust_systime)(struct fm10k_hw *, s32 ppb);
699 s32 (*notify_offset)(struct fm10k_hw *, u64 offset);
700 u64 (*read_systime)(struct fm10k_hw *);
703 enum fm10k_mac_type {
704 fm10k_mac_unknown = 0,
710 struct fm10k_mac_info {
711 struct fm10k_mac_ops ops;
712 enum fm10k_mac_type type;
714 u8 perm_addr[ETH_ALEN];
716 u16 max_msix_vectors;
725 struct fm10k_swapi_table_info {
730 struct fm10k_swapi_info {
732 struct fm10k_swapi_table_info mac;
733 struct fm10k_swapi_table_info nexthop;
734 struct fm10k_swapi_table_info ffu;
737 enum fm10k_xcast_modes {
738 FM10K_XCAST_MODE_ALLMULTI = 0,
739 FM10K_XCAST_MODE_MULTI = 1,
740 FM10K_XCAST_MODE_PROMISC = 2,
741 FM10K_XCAST_MODE_NONE = 3,
742 FM10K_XCAST_MODE_DISABLE = 4
745 enum fm10k_timestamp_modes {
746 FM10K_TIMESTAMP_MODE_NONE = 0,
747 FM10K_TIMESTAMP_MODE_PEP_TO_PEP = 1,
748 FM10K_TIMESTAMP_MODE_PEP_TO_ANY = 2,
751 #define FM10K_VF_TC_MAX 100000 /* 100,000 Mb/s aka 100Gb/s */
752 #define FM10K_VF_TC_MIN 1 /* 1 Mb/s is the slowest rate */
754 struct fm10k_vf_info {
755 /* mbx must be first field in struct unless all default IOV message
756 * handlers are redone as the assumption is that vf_info starts
757 * at the same offset as the mailbox
759 struct fm10k_mbx_info mbx; /* PF side of VF mailbox */
760 int rate; /* Tx BW cap as defined by OS */
761 u16 glort; /* resource tag for this VF */
762 u16 sw_vid; /* Switch API assigned VLAN */
763 u16 pf_vid; /* PF assigned Default VLAN */
764 u8 mac[ETH_ALEN]; /* PF Default MAC address */
765 u8 vsi; /* VSI identifier */
766 u8 vf_idx; /* which VF this is */
767 u8 vf_flags; /* flags indicating what modes
768 * are supported for the port
772 #define FM10K_VF_FLAG_ALLMULTI_CAPABLE (u8)(BIT(FM10K_XCAST_MODE_ALLMULTI))
773 #define FM10K_VF_FLAG_MULTI_CAPABLE (u8)(BIT(FM10K_XCAST_MODE_MULTI))
774 #define FM10K_VF_FLAG_PROMISC_CAPABLE (u8)(BIT(FM10K_XCAST_MODE_PROMISC))
775 #define FM10K_VF_FLAG_NONE_CAPABLE (u8)(BIT(FM10K_XCAST_MODE_NONE))
776 #define FM10K_VF_FLAG_CAPABLE(vf_info) ((vf_info)->vf_flags & (u8)0xF)
777 #define FM10K_VF_FLAG_ENABLED(vf_info) ((vf_info)->vf_flags >> 4)
778 #define FM10K_VF_FLAG_SET_MODE(mode) ((u8)0x10 << (mode))
779 #define FM10K_VF_FLAG_ENABLED_MODE_SHIFT 4
780 #define FM10K_VF_FLAG_SET_MODE_MASK ((u8)0xF0)
781 #define FM10K_VF_FLAG_SET_MODE_NONE \
782 FM10K_VF_FLAG_SET_MODE(FM10K_XCAST_MODE_NONE)
783 #define FM10K_VF_FLAG_MULTI_ENABLED \
784 (FM10K_VF_FLAG_SET_MODE(FM10K_XCAST_MODE_ALLMULTI) | \
785 FM10K_VF_FLAG_SET_MODE(FM10K_XCAST_MODE_MULTI) | \
786 FM10K_VF_FLAG_SET_MODE(FM10K_XCAST_MODE_PROMISC))
788 struct fm10k_iov_ops {
789 /* IOV related bring-up and tear-down */
790 s32 (*assign_resources)(struct fm10k_hw *, u16, u16);
791 s32 (*configure_tc)(struct fm10k_hw *, u16, int);
792 s32 (*assign_int_moderator)(struct fm10k_hw *, u16);
793 s32 (*assign_default_mac_vlan)(struct fm10k_hw *,
794 struct fm10k_vf_info *);
795 s32 (*reset_resources)(struct fm10k_hw *,
796 struct fm10k_vf_info *);
797 s32 (*set_lport)(struct fm10k_hw *, struct fm10k_vf_info *, u16, u8);
798 void (*reset_lport)(struct fm10k_hw *, struct fm10k_vf_info *);
799 void (*update_stats)(struct fm10k_hw *, struct fm10k_hw_stats_q *, u16);
800 void (*notify_offset)(struct fm10k_hw *, struct fm10k_vf_info*, u64);
803 struct fm10k_iov_info {
804 struct fm10k_iov_ops ops;
814 struct fm10k_mac_info mac;
815 struct fm10k_bus_info bus;
816 struct fm10k_bus_info bus_caps;
817 struct fm10k_iov_info iov;
818 struct fm10k_mbx_info mbx;
819 struct fm10k_swapi_info swapi;
822 u16 subsystem_device_id;
823 u16 subsystem_vendor_id;
826 #define FM10K_HW_FLAG_CLOCK_OWNER BIT(0)
829 /* Number of Transmit and Receive Descriptors must be a multiple of 8 */
830 #define FM10K_REQ_TX_DESCRIPTOR_MULTIPLE 8
831 #define FM10K_REQ_RX_DESCRIPTOR_MULTIPLE 8
833 /* Transmit Descriptor */
834 struct fm10k_tx_desc {
835 __le64 buffer_addr; /* Address of the descriptor's data buffer */
836 __le16 buflen; /* Length of data to be DMAed */
837 __le16 vlan; /* VLAN_ID and VPRI to be inserted in FTAG */
838 __le16 mss; /* MSS for segmentation offload */
839 u8 hdrlen; /* Header size for segmentation offload */
840 u8 flags; /* Status and offload request flags */
843 /* Transmit Descriptor Cache Structure */
844 struct fm10k_tx_desc_cache {
845 struct fm10k_tx_desc tx_desc[256];
848 #define FM10K_TXD_FLAG_INT 0x01
849 #define FM10K_TXD_FLAG_TIME 0x02
850 #define FM10K_TXD_FLAG_CSUM 0x04
851 #define FM10K_TXD_FLAG_CSUM2 0x08
852 #define FM10K_TXD_FLAG_FTAG 0x10
853 #define FM10K_TXD_FLAG_RS 0x20
854 #define FM10K_TXD_FLAG_LAST 0x40
855 #define FM10K_TXD_FLAG_DONE 0x80
857 #define FM10K_TXD_VLAN_PRI_SHIFT 12
859 /* These macros are meant to enable optimal placement of the RS and INT
860 * bits. It will point us to the last descriptor in the cache for either the
861 * start of the packet, or the end of the packet. If the index is actually
862 * at the start of the FIFO it will point to the offset for the last index
863 * in the FIFO to prevent an unnecessary write.
865 #define FM10K_TXD_WB_FIFO_SIZE 4
866 #define FM10K_TXD_WB_IDX(idx) \
867 (((idx) - 1) | (FM10K_TXD_WB_FIFO_SIZE - 1))
869 /* Receive Descriptor - 32B */
870 union fm10k_rx_desc {
872 __le64 pkt_addr; /* Packet buffer address */
873 __le64 hdr_addr; /* Header buffer address */
874 __le64 reserved; /* Empty space, RSS hash */
876 } q; /* Read, Writeback, 64b quad-words */
878 __le32 data; /* RSS and header data */
879 __le32 rss; /* RSS Hash */
882 __le32 glort; /* sglort/dglort */
883 } d; /* Writeback, 32b double-words */
885 __le16 pkt_info; /* RSS, Pkt type */
886 __le16 hdr_info; /* Splithdr, hdrlen, xC */
889 __le16 status; /* status/error */
890 __le16 csum_err; /* checksum or extended error value */
891 __le16 length; /* Packet length */
892 __le16 vlan; /* VLAN tag */
895 } w; /* Writeback, 16b words */
898 #define FM10K_RXD_RSSTYPE_MASK 0x000F
899 enum fm10k_rdesc_rss_type {
900 FM10K_RSSTYPE_NONE = 0x0,
901 FM10K_RSSTYPE_IPV4_TCP = 0x1,
902 FM10K_RSSTYPE_IPV4 = 0x2,
903 FM10K_RSSTYPE_IPV6_TCP = 0x3,
905 FM10K_RSSTYPE_IPV6 = 0x5,
907 FM10K_RSSTYPE_IPV4_UDP = 0x7,
908 FM10K_RSSTYPE_IPV6_UDP = 0x8
909 /* Reserved 0x9 - 0xF */
912 #define FM10K_RXD_PKTTYPE_MASK 0x03F0
913 #define FM10K_RXD_PKTTYPE_MASK_L3 0x0070
914 #define FM10K_RXD_PKTTYPE_MASK_L4 0x0380
915 #define FM10K_RXD_PKTTYPE_SHIFT 4
916 #define FM10K_RXD_PKTTYPE_INNER_MASK_L3 0x1C00
917 #define FM10K_RXD_PKTTYPE_INNER_MASK_L4 0xE000
918 #define FM10K_RXD_PKTTYPE_INNER_SHIFT 10
919 enum fm10k_rdesc_pkt_type {
921 FM10K_PKTTYPE_OTHER = 0x00,
922 FM10K_PKTTYPE_IPV4 = 0x01,
923 FM10K_PKTTYPE_IPV4_EX = 0x02,
924 FM10K_PKTTYPE_IPV6 = 0x03,
925 FM10K_PKTTYPE_IPV6_EX = 0x04,
928 FM10K_PKTTYPE_TCP = 0x08,
929 FM10K_PKTTYPE_UDP = 0x10,
930 FM10K_PKTTYPE_GRE = 0x18,
931 FM10K_PKTTYPE_VXLAN = 0x20,
932 FM10K_PKTTYPE_NVGRE = 0x28,
933 FM10K_PKTTYPE_GENEVE = 0x30
936 #define FM10K_RXD_HDR_INFO_XC_MASK 0x0006
937 enum fm10k_rxdesc_xc {
938 FM10K_XC_UNICAST = 0x0,
939 FM10K_XC_MULTICAST = 0x4,
940 FM10K_XC_BROADCAST = 0x6
943 #define FM10K_RXD_HDR_INFO_LEN_SHIFT 5
944 #define FM10K_RXD_HDR_INFO_SPH 0x8000
946 #define FM10K_RXD_STATUS_DD 0x0001 /* Descriptor done */
947 #define FM10K_RXD_STATUS_EOP 0x0002 /* End of packet */
948 #define FM10K_RXD_STATUS_VEXT 0x0004 /* A VLAN tag is present */
949 #define FM10K_RXD_STATUS_IPCS 0x0008 /* Indicates IPv4 csum */
950 #define FM10K_RXD_STATUS_L4CS 0x0010 /* Indicates an L4 csum */
951 #define FM10K_RXD_STATUS_IPCS2 0x0020 /* Inner header IPv4 csum */
952 #define FM10K_RXD_STATUS_L4CS2 0x0040 /* Inner header L4 csum */
953 #define FM10K_RXD_STATUS_IPFRAG_MASK 0x0180 /* Fragment mask */
954 #define FM10K_RXD_STATUS_IPFRAG_CSUM 0x0100 /* Fragment w/ CSUM field */
955 #define FM10K_RXD_STATUS_VEXT2 0x0200 /* A custom tag is present */
956 #define FM10K_RXD_STATUS_HBO 0x0400 /* header buffer overrun */
957 #define FM10K_RXD_STATUS_L4E2 0x0800 /* Inner header L4 csum err */
958 #define FM10K_RXD_STATUS_IPE2 0x1000 /* Inner header IPv4 csum err */
959 #define FM10K_RXD_STATUS_RXE 0x2000 /* Generic Rx error */
960 #define FM10K_RXD_STATUS_L4E 0x4000 /* L4 csum error */
961 #define FM10K_RXD_STATUS_IPE 0x8000 /* IPv4 csum error */
963 #define FM10K_RXD_ERR_SWITCH_ERROR 0x0001 /* Switch found bad packet */
964 #define FM10K_RXD_ERR_NO_DESCRIPTOR 0x0002 /* No descriptor available */
965 #define FM10K_RXD_ERR_PP_ERROR 0x0004 /* RAM error during processing */
966 #define FM10K_RXD_ERR_SWITCH_READY 0x0008 /* Link transition mid-packet */
967 #define FM10K_RXD_ERR_TOO_BIG 0x0010 /* Pkt too big for single buf */
969 #define FM10K_RXD_VLAN_ID_MASK 0x0FFF
970 #define FM10K_RXD_VLAN_PRI_SHIFT FM10K_TXD_VLAN_PRI_SHIFT
973 __be16 swpri_type_user;
979 #endif /* _FM10K_TYPE_H */