enic: move to drivers/net/
[dpdk.git] / lib / librte_pmd_fm10k / base / fm10k_type.h
1 /*******************************************************************************
2
3 Copyright (c) 2013 - 2015, Intel Corporation
4 All rights reserved.
5
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions are met:
8
9  1. Redistributions of source code must retain the above copyright notice,
10     this list of conditions and the following disclaimer.
11
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.
15
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.
19
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.
31
32 ***************************************************************************/
33
34 #ifndef _FM10K_TYPE_H_
35 #define _FM10K_TYPE_H_
36
37 /* forward declaration */
38 struct fm10k_hw;
39
40 #include "fm10k_osdep.h"
41 #include "fm10k_mbx.h"
42
43 #define FM10K_INTEL_VENDOR_ID           0x8086
44 #define FM10K_DEV_ID_PF                 0x15A4
45 #define FM10K_DEV_ID_VF                 0x15A5
46
47 #define FM10K_MAX_QUEUES                256
48 #define FM10K_MAX_QUEUES_PF             128
49 #define FM10K_MAX_QUEUES_POOL           16
50
51 #define FM10K_48_BIT_MASK               0x0000FFFFFFFFFFFFull
52 #define FM10K_STAT_VALID                0x80000000
53
54 /* PCI Bus Info */
55 #define FM10K_PCIE_LINK_CAP             0x7C
56 #define FM10K_PCIE_LINK_STATUS          0x82
57 #define FM10K_PCIE_LINK_WIDTH           0x3F0
58 #define FM10K_PCIE_LINK_WIDTH_1         0x10
59 #define FM10K_PCIE_LINK_WIDTH_2         0x20
60 #define FM10K_PCIE_LINK_WIDTH_4         0x40
61 #define FM10K_PCIE_LINK_WIDTH_8         0x80
62 #define FM10K_PCIE_LINK_SPEED           0xF
63 #define FM10K_PCIE_LINK_SPEED_2500      0x1
64 #define FM10K_PCIE_LINK_SPEED_5000      0x2
65 #define FM10K_PCIE_LINK_SPEED_8000      0x3
66
67 /* PCIe payload size */
68 #define FM10K_PCIE_DEV_CAP                      0x74
69 #define FM10K_PCIE_DEV_CAP_PAYLOAD              0x07
70 #define FM10K_PCIE_DEV_CAP_PAYLOAD_128          0x00
71 #define FM10K_PCIE_DEV_CAP_PAYLOAD_256          0x01
72 #define FM10K_PCIE_DEV_CAP_PAYLOAD_512          0x02
73 #define FM10K_PCIE_DEV_CTRL                     0x78
74 #define FM10K_PCIE_DEV_CTRL_PAYLOAD             0xE0
75 #define FM10K_PCIE_DEV_CTRL_PAYLOAD_128         0x00
76 #define FM10K_PCIE_DEV_CTRL_PAYLOAD_256         0x20
77 #define FM10K_PCIE_DEV_CTRL_PAYLOAD_512         0x40
78
79 /* PCIe MSI-X Capability info */
80 #define FM10K_PCI_MSIX_MSG_CTRL                 0xB2
81 #define FM10K_PCI_MSIX_MSG_CTRL_TBL_SZ_MASK     0x7FF
82 #define FM10K_MAX_MSIX_VECTORS                  256
83 #define FM10K_MAX_VECTORS_PF                    256
84 #define FM10K_MAX_VECTORS_POOL                  32
85
86 /* PCIe SR-IOV Info */
87 #define FM10K_PCIE_SRIOV_CTRL                   0x190
88 #define FM10K_PCIE_SRIOV_CTRL_VFARI             0x10
89
90 #define FM10K_SUCCESS                           0
91 #define FM10K_ERR_DEVICE_NOT_SUPPORTED          -1
92 #define FM10K_ERR_PARAM                         -2
93 #define FM10K_ERR_NO_RESOURCES                  -3
94 #define FM10K_ERR_REQUESTS_PENDING              -4
95 #define FM10K_ERR_RESET_REQUESTED               -5
96 #define FM10K_ERR_DMA_PENDING                   -6
97 #define FM10K_ERR_RESET_FAILED                  -7
98 #define FM10K_ERR_INVALID_MAC_ADDR              -8
99 #define FM10K_ERR_INVALID_VALUE                 -9
100 #define FM10K_NOT_IMPLEMENTED                   0x7FFFFFFF
101
102 #define UNREFERENCED_XPARAMETER
103 #define UNREFERENCED_1PARAMETER(_p) (_p)
104 #define UNREFERENCED_2PARAMETER(_p, _q)     do { (_p); (_q); } while (0)
105 #define UNREFERENCED_3PARAMETER(_p, _q, _r) do { (_p); (_q); (_r); } while (0)
106
107 /* Start of PF registers */
108 #define FM10K_CTRL              0x0000
109 #define FM10K_CTRL_BAR4_ALLOWED                 0x00000004
110
111 #define FM10K_CTRL_EXT          0x0001
112 #define FM10K_CTRL_EXT_NS_DIS                   0x00000001
113 #define FM10K_CTRL_EXT_RO_DIS                   0x00000002
114 #define FM10K_CTRL_EXT_SWITCH_LOOPBACK          0x00000004
115 #define FM10K_EXVET             0x0002
116 #define FM10K_EXVET_ETHERTYPE_MASK              0x000000FF
117 #define FM10K_EXVET_TAG_SIZE_SHIFT              16
118 #define FM10K_EXVET_AFTER_VLAN                  0x00040000
119 #define FM10K_GCR               0x0003
120 #define FM10K_FACTPS            0x0004
121 #define FM10K_GCR_EXT           0x0005
122
123 /* Interrupt control registers */
124 #define FM10K_EICR              0x0006
125 #define FM10K_EICR_PCA_FAULT                    0x00000001
126 #define FM10K_EICR_THI_FAULT                    0x00000004
127 #define FM10K_EICR_FUM_FAULT                    0x00000020
128 #define FM10K_EICR_FAULT_MASK                   0x0000003F
129 #define FM10K_EICR_MAILBOX                      0x00000040
130 #define FM10K_EICR_SWITCHREADY                  0x00000080
131 #define FM10K_EICR_SWITCHNOTREADY               0x00000100
132 #define FM10K_EICR_SWITCHINTERRUPT              0x00000200
133 #define FM10K_EICR_SRAMERROR                    0x00000400
134 #define FM10K_EICR_VFLR                         0x00000800
135 #define FM10K_EICR_MAXHOLDTIME                  0x00001000
136 #define FM10K_EIMR              0x0007
137 #define FM10K_EIMR_PCA_FAULT                    0x00000001
138 #define FM10K_EIMR_THI_FAULT                    0x00000010
139 #define FM10K_EIMR_FUM_FAULT                    0x00000400
140 #define FM10K_EIMR_MAILBOX                      0x00001000
141 #define FM10K_EIMR_SWITCHREADY                  0x00004000
142 #define FM10K_EIMR_SWITCHNOTREADY               0x00010000
143 #define FM10K_EIMR_SWITCHINTERRUPT              0x00040000
144 #define FM10K_EIMR_SRAMERROR                    0x00100000
145 #define FM10K_EIMR_VFLR                         0x00400000
146 #define FM10K_EIMR_MAXHOLDTIME                  0x01000000
147 #define FM10K_EIMR_ALL                          0x55555555
148 #define FM10K_EIMR_DISABLE(NAME)                ((FM10K_EIMR_ ## NAME) << 0)
149 #define FM10K_EIMR_ENABLE(NAME)                 ((FM10K_EIMR_ ## NAME) << 1)
150 #define FM10K_FAULT_ADDR_LO             0x0
151 #define FM10K_FAULT_ADDR_HI             0x1
152 #define FM10K_FAULT_SPECINFO            0x2
153 #define FM10K_FAULT_FUNC                0x3
154 #define FM10K_FAULT_SIZE                0x4
155 #define FM10K_FAULT_FUNC_VALID                  0x00008000
156 #define FM10K_FAULT_FUNC_PF                     0x00004000
157 #define FM10K_FAULT_FUNC_VF_MASK                0x00003F00
158 #define FM10K_FAULT_FUNC_VF_SHIFT               8
159 #define FM10K_FAULT_FUNC_TYPE_MASK              0x000000FF
160
161 #define FM10K_PCA_FAULT         0x0008
162 #define FM10K_THI_FAULT         0x0010
163 #define FM10K_FUM_FAULT         0x001C
164
165 /* Rx queue timeout indicator */
166 #define FM10K_MAXHOLDQ(_n)      ((_n) + 0x0020)
167
168 /* Switch Manager info */
169 #define FM10K_SM_AREA(_n)       ((_n) + 0x0028)
170
171 /* GLORT mapping registers */
172 #define FM10K_DGLORTMAP(_n)     ((_n) + 0x0030)
173 #define FM10K_DGLORT_COUNT                      8
174 #define FM10K_DGLORTMAP_MASK_SHIFT              16
175 #define FM10K_DGLORTMAP_ANY                     0x00000000
176 #define FM10K_DGLORTMAP_NONE                    0x0000FFFF
177 #define FM10K_DGLORTMAP_ZERO                    0xFFFF0000
178 #define FM10K_DGLORTDEC(_n)     ((_n) + 0x0038)
179 #define FM10K_DGLORTDEC_VSILENGTH_SHIFT         4
180 #define FM10K_DGLORTDEC_VSIBASE_SHIFT           7
181 #define FM10K_DGLORTDEC_PCLENGTH_SHIFT          14
182 #define FM10K_DGLORTDEC_QBASE_SHIFT             16
183 #define FM10K_DGLORTDEC_RSSLENGTH_SHIFT         24
184 #define FM10K_DGLORTDEC_INNERRSS_ENABLE         0x08000000
185 #define FM10K_TUNNEL_CFG        0x0040
186 #define FM10K_TUNNEL_CFG_NVGRE_SHIFT            16
187 #define FM10K_TUNNEL_CFG_GENEVE 0x0041
188 #define FM10K_SWPRI_MAP(_n)     ((_n) + 0x0050)
189 #define FM10K_SWPRI_MAX         16
190 #define FM10K_RSSRK(_n, _m)     (((_n) * 0x10) + (_m) + 0x0800)
191 #define FM10K_RSSRK_SIZE        10
192 #define FM10K_RSSRK_ENTRIES_PER_REG             4
193 #define FM10K_RETA(_n, _m)      (((_n) * 0x20) + (_m) + 0x1000)
194 #define FM10K_RETA_SIZE         32
195 #define FM10K_RETA_ENTRIES_PER_REG              4
196 #define FM10K_MAX_RSS_INDICES   128
197
198 /* Rate limiting registers */
199 #define FM10K_TC_CREDIT(_n)     ((_n) + 0x2000)
200 #define FM10K_TC_CREDIT_CREDIT_MASK             0x001FFFFF
201 #define FM10K_TC_MAXCREDIT(_n)  ((_n) + 0x2040)
202 #define FM10K_TC_MAXCREDIT_64K                  0x00010000
203 #define FM10K_TC_RATE(_n)       ((_n) + 0x2080)
204 #define FM10K_TC_RATE_QUANTA_MASK               0x0000FFFF
205 #define FM10K_TC_RATE_INTERVAL_4US_GEN1         0x00020000
206 #define FM10K_TC_RATE_INTERVAL_4US_GEN2         0x00040000
207 #define FM10K_TC_RATE_INTERVAL_4US_GEN3         0x00080000
208 #define FM10K_TC_RATE_STATUS    0x20C0
209 #define FM10K_PAUSE             0x20C2
210
211 /* DMA control registers */
212 #define FM10K_DMA_CTRL          0x20C3
213 #define FM10K_DMA_CTRL_TX_ENABLE                0x00000001
214 #define FM10K_DMA_CTRL_TX_HOST_PENDING          0x00000002
215 #define FM10K_DMA_CTRL_TX_DATA                  0x00000004
216 #define FM10K_DMA_CTRL_TX_ACTIVE                0x00000008
217 #define FM10K_DMA_CTRL_RX_ENABLE                0x00000010
218 #define FM10K_DMA_CTRL_RX_HOST_PENDING          0x00000020
219 #define FM10K_DMA_CTRL_RX_DATA                  0x00000040
220 #define FM10K_DMA_CTRL_RX_ACTIVE                0x00000080
221 #define FM10K_DMA_CTRL_RX_DESC_SIZE             0x00000100
222 #define FM10K_DMA_CTRL_MINMSS_SHIFT             9
223 #define FM10K_DMA_CTRL_MINMSS_64                0x00008000
224 #define FM10K_DMA_CTRL_MAX_HOLD_TIME_SHIFT      23
225 #define FM10K_DMA_CTRL_MAX_HOLD_1US_GEN3        0x04800000
226 #define FM10K_DMA_CTRL_MAX_HOLD_1US_GEN2        0x04000000
227 #define FM10K_DMA_CTRL_MAX_HOLD_1US_GEN1        0x03800000
228 #define FM10K_DMA_CTRL_DATAPATH_RESET           0x20000000
229 #define FM10K_DMA_CTRL_MAXNUMOFQ_MASK           0xC0000000
230 #define FM10K_DMA_CTRL_32_DESC                  0x00000000
231 #define FM10K_DMA_CTRL_64_DESC                  0x40000000
232 #define FM10K_DMA_CTRL_128_DESC                 0x80000000
233
234 #define FM10K_DMA_CTRL2         0x20C4
235 #define FM10K_DMA_CTRL2_TX_FRAME_SPACING_SHIFT  5
236 #define FM10K_DMA_CTRL2_SWITCH_READY            0x00002000
237 #define FM10K_DMA_CTRL2_RX_DESC_READ_PRIO_SHIFT 14
238 #define FM10K_DMA_CTRL2_TX_DESC_READ_PRIO_SHIFT 17
239 #define FM10K_DMA_CTRL2_TX_DATA_READ_PRIO_SHIFT 20
240
241 /* TSO flags configuration
242  * First packet contains all flags except for fin and psh
243  * Middle packet contains only urg and ack
244  * Last packet contains urg, ack, fin, and psh
245  */
246 #define FM10K_TSO_FLAGS_LOW             0x00300FF6
247 #define FM10K_TSO_FLAGS_HI              0x00000039
248 #define FM10K_DTXTCPFLGL        0x20C5
249 #define FM10K_DTXTCPFLGH        0x20C6
250
251 #define FM10K_TPH_CTRL          0x20C7
252 #define FM10K_TPH_CTRL_DISABLE_READ_HINT        0x00000080
253 #define FM10K_MRQC(_n)          ((_n) + 0x2100)
254 #define FM10K_MRQC_TCP_IPV4                     0x00000001
255 #define FM10K_MRQC_IPV4                         0x00000002
256 #define FM10K_MRQC_IPV6                         0x00000010
257 #define FM10K_MRQC_TCP_IPV6                     0x00000020
258 #define FM10K_MRQC_UDP_IPV4                     0x00000040
259 #define FM10K_MRQC_UDP_IPV6                     0x00000080
260
261 #define FM10K_TQMAP(_n)         ((_n) + 0x2800)
262 #define FM10K_TQMAP_TABLE_SIZE                  2048
263 #define FM10K_RQMAP(_n)         ((_n) + 0x3000)
264 #define FM10K_RQMAP_TABLE_SIZE                  2048
265
266 /* Hardware Statistics */
267 #define FM10K_STATS_TIMEOUT             0x3800
268 #define FM10K_STATS_UR                  0x3801
269 #define FM10K_STATS_CA                  0x3802
270 #define FM10K_STATS_UM                  0x3803
271 #define FM10K_STATS_XEC                 0x3804
272 #define FM10K_STATS_VLAN_DROP           0x3805
273 #define FM10K_STATS_LOOPBACK_DROP       0x3806
274 #define FM10K_STATS_NODESC_DROP         0x3807
275
276 /* Timesync registers */
277 #define FM10K_RRTIME_CFG        0x3808
278 #define FM10K_RRTIME_LIMIT(_n)  ((_n) + 0x380C)
279 #define FM10K_RRTIME_COUNT(_n)  ((_n) + 0x3810)
280 #define FM10K_SYSTIME           0x3814
281 #define FM10K_SYSTIME0          0x3816
282 #define FM10K_SYSTIME_CFG       0x3818
283 #define FM10K_SYSTIME_CFG_STEP_MASK             0x0000000F
284
285 /* PCIe state registers */
286 #define FM10K_PFVFBME(_n)       ((_n) + 0x381A)
287 #define FM10K_PHYADDR           0x381C
288
289 /* Rx ring registers */
290 #define FM10K_RDBAL(_n)         ((0x40 * (_n)) + 0x4000)
291 #define FM10K_RDBAH(_n)         ((0x40 * (_n)) + 0x4001)
292 #define FM10K_RDLEN(_n)         ((0x40 * (_n)) + 0x4002)
293 #define FM10K_TPH_RXCTRL(_n)    ((0x40 * (_n)) + 0x4003)
294 #define FM10K_TPH_RXCTRL_DESC_TPHEN             0x00000020
295 #define FM10K_TPH_RXCTRL_HDR_TPHEN              0x00000040
296 #define FM10K_TPH_RXCTRL_DATA_TPHEN             0x00000080
297 #define FM10K_TPH_RXCTRL_DESC_RROEN             0x00000200
298 #define FM10K_TPH_RXCTRL_DATA_WROEN             0x00002000
299 #define FM10K_TPH_RXCTRL_HDR_WROEN              0x00008000
300 #define FM10K_RDH(_n)           ((0x40 * (_n)) + 0x4004)
301 #define FM10K_RDT(_n)           ((0x40 * (_n)) + 0x4005)
302 #define FM10K_RXQCTL(_n)        ((0x40 * (_n)) + 0x4006)
303 #define FM10K_RXQCTL_ENABLE                     0x00000001
304 #define FM10K_RXQCTL_PF                         0x000000FC
305 #define FM10K_RXQCTL_VF_SHIFT                   2
306 #define FM10K_RXQCTL_VF                         0x00000100
307 #define FM10K_RXQCTL_ID_MASK    (FM10K_RXQCTL_PF | FM10K_RXQCTL_VF)
308 #define FM10K_RXDCTL(_n)        ((0x40 * (_n)) + 0x4007)
309 #define FM10K_RXDCTL_WRITE_BACK_MIN_DELAY       0x00000001
310 #define FM10K_RXDCTL_WRITE_BACK_IMM             0x00000100
311 #define FM10K_RXDCTL_DROP_ON_EMPTY              0x00000200
312 #define FM10K_RXINT(_n)         ((0x40 * (_n)) + 0x4008)
313 #define FM10K_RXINT_TIMER_SHIFT                 8
314 #define FM10K_SRRCTL(_n)        ((0x40 * (_n)) + 0x4009)
315 #define FM10K_SRRCTL_BSIZEPKT_SHIFT             8 /* shift _right_ */
316 #define FM10K_SRRCTL_BSIZEHDR_SHIFT             2 /* shift _left_ */
317 #define FM10K_SRRCTL_BSIZEHDR_MASK              0x00003F00
318 #define FM10K_SRRCTL_DESCTYPE_HDR_SPLIT         0x00004000
319 #define FM10K_SRRCTL_DESCTYPE_SIZE_SPLIT        0x00008000
320 #define FM10K_SRRCTL_PSRTYPE_INNER_TCPHDR       0x00010000
321 #define FM10K_SRRCTL_PSRTYPE_INNER_UDPHDR       0x00020000
322 #define FM10K_SRRCTL_PSRTYPE_INNER_IPV4HDR      0x00040000
323 #define FM10K_SRRCTL_PSRTYPE_INNER_IPV6HDR      0x00080000
324 #define FM10K_SRRCTL_PSRTYPE_INNER_L2HDR        0x00100000
325 #define FM10K_SRRCTL_PSRTYPE_ENCAPHDR           0x00200000
326 #define FM10K_SRRCTL_PSRTYPE_TCPHDR             0x00400000
327 #define FM10K_SRRCTL_PSRTYPE_UDPHDR             0x00800000
328 #define FM10K_SRRCTL_PSRTYPE_IPV4HDR            0x01000000
329 #define FM10K_SRRCTL_PSRTYPE_IPV6HDR            0x02000000
330 #define FM10K_SRRCTL_PSRTYPE_L2HDR              0x04000000
331 #define FM10K_SRRCTL_LOOPBACK_SUPPRESS          0x40000000
332 #define FM10K_SRRCTL_BUFFER_CHAINING_EN         0x80000000
333
334 /* Rx Statistics */
335 #define FM10K_QPRC(_n)          ((0x40 * (_n)) + 0x400A)
336 #define FM10K_QPRDC(_n)         ((0x40 * (_n)) + 0x400B)
337 #define FM10K_QBRC_L(_n)        ((0x40 * (_n)) + 0x400C)
338 #define FM10K_QBRC_H(_n)        ((0x40 * (_n)) + 0x400D)
339
340 /* Rx GLORT register */
341 #define FM10K_RX_SGLORT(_n)             ((0x40 * (_n)) + 0x400E)
342
343 /* Tx ring registers */
344 #define FM10K_TDBAL(_n)         ((0x40 * (_n)) + 0x8000)
345 #define FM10K_TDBAH(_n)         ((0x40 * (_n)) + 0x8001)
346 #define FM10K_TDLEN(_n)         ((0x40 * (_n)) + 0x8002)
347 #define FM10K_TPH_TXCTRL(_n)    ((0x40 * (_n)) + 0x8003)
348 #define FM10K_TPH_TXCTRL_DESC_TPHEN             0x00000020
349 #define FM10K_TPH_TXCTRL_DESC_RROEN             0x00000200
350 #define FM10K_TPH_TXCTRL_DESC_WROEN             0x00000800
351 #define FM10K_TPH_TXCTRL_DATA_RROEN             0x00002000
352 #define FM10K_TDH(_n)           ((0x40 * (_n)) + 0x8004)
353 #define FM10K_TDT(_n)           ((0x40 * (_n)) + 0x8005)
354 #define FM10K_TXDCTL(_n)        ((0x40 * (_n)) + 0x8006)
355 #define FM10K_TXDCTL_ENABLE                     0x00004000
356 #define FM10K_TXDCTL_MAX_TIME_SHIFT             16
357 #define FM10K_TXDCTL_PUSH_DESC                  0x10000000
358 #define FM10K_TXQCTL(_n)        ((0x40 * (_n)) + 0x8007)
359 #define FM10K_TXQCTL_PF                         0x0000003F
360 #define FM10K_TXQCTL_VF                         0x00000040
361 #define FM10K_TXQCTL_ID_MASK    (FM10K_TXQCTL_PF | FM10K_TXQCTL_VF)
362 #define FM10K_TXQCTL_PC_SHIFT                   7
363 #define FM10K_TXQCTL_PC_MASK                    0x00000380
364 #define FM10K_TXQCTL_TC_SHIFT                   10
365 #define FM10K_TXQCTL_TC_MASK                    0x0000FC00
366 #define FM10K_TXQCTL_VID_SHIFT                  16
367 #define FM10K_TXQCTL_VID_MASK                   0x0FFF0000
368 #define FM10K_TXQCTL_UNLIMITED_BW               0x10000000
369 #define FM10K_TXQCTL_PUSHMODEDIS                0x20000000
370 #define FM10K_TXINT(_n)         ((0x40 * (_n)) + 0x8008)
371 #define FM10K_TXINT_TIMER_SHIFT                 8
372
373 /* Tx Statistics */
374 #define FM10K_QPTC(_n)          ((0x40 * (_n)) + 0x8009)
375 #define FM10K_QBTC_L(_n)        ((0x40 * (_n)) + 0x800A)
376 #define FM10K_QBTC_H(_n)        ((0x40 * (_n)) + 0x800B)
377
378 /* Tx Push registers */
379 #define FM10K_TQDLOC(_n)        ((0x40 * (_n)) + 0x800C)
380 #define FM10K_TQDLOC_BASE_32_DESC               0x08
381 #define FM10K_TQDLOC_BASE_64_DESC               0x10
382 #define FM10K_TQDLOC_BASE_128_DESC              0x20
383 #define FM10K_TQDLOC_SIZE_32_DESC               0x00050000
384 #define FM10K_TQDLOC_SIZE_64_DESC               0x00060000
385 #define FM10K_TQDLOC_SIZE_128_DESC              0x00070000
386 #define FM10K_TQDLOC_SIZE_SHIFT                 16
387 #define FM10K_TX_DCACHE(_n, _m) ((0x400 * (_n)) + (0x4 * (_m)) + 0x40000)
388
389 /* Tx GLORT registers */
390 #define FM10K_TX_SGLORT(_n)     ((0x40 * (_n)) + 0x800D)
391 #define FM10K_PFVTCTL(_n)       ((0x40 * (_n)) + 0x800E)
392 #define FM10K_PFVTCTL_FTAG_DESC_ENABLE          0x00000001
393
394 /* Interrupt moderation and control registers */
395 #define FM10K_PBACL(_n)         ((_n) + 0x10000)
396 #define FM10K_INT_MAP(_n)       ((_n) + 0x10080)
397 #define FM10K_INT_MAP_TIMER0                    0x00000000
398 #define FM10K_INT_MAP_TIMER1                    0x00000100
399 #define FM10K_INT_MAP_IMMEDIATE                 0x00000200
400 #define FM10K_INT_MAP_DISABLE                   0x00000300
401 #define FM10K_MSIX_VECTOR_ADDR_LO(_n)   ((0x4 * (_n)) + 0x11000)
402 #define FM10K_MSIX_VECTOR_ADDR_HI(_n)   ((0x4 * (_n)) + 0x11001)
403 #define FM10K_MSIX_VECTOR_DATA(_n)      ((0x4 * (_n)) + 0x11002)
404 #define FM10K_MSIX_VECTOR_MASK(_n)      ((0x4 * (_n)) + 0x11003)
405 #define FM10K_INT_CTRL          0x12000
406 #define FM10K_INT_CTRL_ENABLEMODERATOR          0x00000400
407 #define FM10K_ITR(_n)           ((_n) + 0x12400)
408 #define FM10K_ITR_INTERVAL1_SHIFT               12
409 #define FM10K_ITR_TIMER0_EXPIRED                0x01000000
410 #define FM10K_ITR_TIMER1_EXPIRED                0x02000000
411 #define FM10K_ITR_PENDING0                      0x04000000
412 #define FM10K_ITR_PENDING1                      0x08000000
413 #define FM10K_ITR_PENDING2                      0x10000000
414 #define FM10K_ITR_AUTOMASK                      0x20000000
415 #define FM10K_ITR_MASK_SET                      0x40000000
416 #define FM10K_ITR_MASK_CLEAR                    0x80000000
417 #define FM10K_ITR2(_n)          ((0x2 * (_n)) + 0x12800)
418 #define FM10K_ITR2_LP(_n)       ((0x2 * (_n)) + 0x12801)
419 #define FM10K_ITR_REG_COUNT                     768
420 #define FM10K_ITR_REG_COUNT_PF                  256
421
422 /* Switch manager interrupt registers */
423 #define FM10K_IP                0x13000
424 #define FM10K_IP_HOT_RESET                      0x00000001
425 #define FM10K_IP_DEVICE_STATE_CHANGE            0x00000002
426 #define FM10K_IP_MAILBOX                        0x00000004
427 #define FM10K_IP_VPD_REQUEST                    0x00000008
428 #define FM10K_IP_SRAMERROR                      0x00000010
429 #define FM10K_IP_PFLR                           0x00000020
430 #define FM10K_IP_DATAPATHRESET                  0x00000040
431 #define FM10K_IP_OUTOFRESET                     0x00000080
432 #define FM10K_IP_NOTINRESET                     0x00000100
433 #define FM10K_IP_TIMEOUT                        0x00000200
434 #define FM10K_IP_VFLR                           0x00000400
435 #define FM10K_IM                0x13001
436 #define FM10K_IB                0x13002
437 #define FM10K_SRAM_IP           0x13003
438 #define FM10K_SRAM_IM           0x13004
439
440 /* VLAN registers */
441 #define FM10K_VLAN_TABLE(_n, _m)        ((0x80 * (_n)) + (_m) + 0x14000)
442 #define FM10K_VLAN_TABLE_SIZE                   128
443
444 /* VLAN specific message offsets */
445 #define FM10K_VLAN_TABLE_VID_MAX                4096
446 #define FM10K_VLAN_TABLE_VSI_MAX                64
447 #define FM10K_VLAN_LENGTH_SHIFT                 16
448 #define FM10K_VLAN_CLEAR                        (1 << 15)
449 #define FM10K_VLAN_ALL \
450         ((FM10K_VLAN_TABLE_VID_MAX - 1) << FM10K_VLAN_LENGTH_SHIFT)
451
452 /* VF FLR event notification registers */
453 #define FM10K_PFVFLRE(_n)       ((0x1 * (_n)) + 0x18844)
454 #define FM10K_PFVFLREC(_n)      ((0x1 * (_n)) + 0x18846)
455
456 /* Defines for size of uncacheable and write-combining memories */
457 #define FM10K_UC_ADDR_START     0x000000        /* start of standard regs */
458 #define FM10K_WC_ADDR_START     0x100000        /* start of Tx Desc Cache */
459 #define FM10K_DBI_ADDR_START    0x200000        /* start of debug registers */
460 #define FM10K_UC_ADDR_SIZE      (FM10K_WC_ADDR_START - FM10K_UC_ADDR_START)
461 #define FM10K_WC_ADDR_SIZE      (FM10K_DBI_ADDR_START - FM10K_WC_ADDR_START)
462
463 /* Define timeouts for resets and disables */
464 #define FM10K_QUEUE_DISABLE_TIMEOUT             100
465 #define FM10K_RESET_TIMEOUT                     150
466
467 /* Maximum supported combined inner and outer header length for encapsulation */
468 #define FM10K_TUNNEL_HEADER_LENGTH      184
469
470 /* VF registers */
471 #define FM10K_VFCTRL            0x00000
472 #define FM10K_VFCTRL_RST                        0x00000008
473 #define FM10K_VFINT_MAP         0x00030
474 #define FM10K_VFSYSTIME         0x00040
475 #define FM10K_VFITR(_n)         ((_n) + 0x00060)
476 #define FM10K_VFPBACL(_n)       ((_n) + 0x00008)
477
478 /* Registers contained in BAR 4 for Switch management */
479 #define FM10K_SW_SYSTIME_CFG    0x0224C
480 #define FM10K_SW_SYSTIME_CFG_STEP_SHIFT         4
481 #define FM10K_SW_SYSTIME_CFG_ADJUST_MASK        0xFF000000
482 #define FM10K_SW_SYSTIME_ADJUST 0x0224D
483 #define FM10K_SW_SYSTIME_ADJUST_MASK            0x3FFFFFFF
484 #define FM10K_SW_SYSTIME_ADJUST_DIR_NEGATIVE    0x80000000
485 #define FM10K_SW_SYSTIME_PULSE(_n)      ((_n) + 0x02252)
486
487 #ifndef ETH_ALEN
488 #define ETH_ALEN        6
489 #endif /* ETH_ALEN */
490
491
492
493
494 enum fm10k_int_source {
495         fm10k_int_Mailbox       = 0,
496         fm10k_int_PCIeFault     = 1,
497         fm10k_int_SwitchUpDown  = 2,
498         fm10k_int_SwitchEvent   = 3,
499         fm10k_int_SRAM          = 4,
500         fm10k_int_VFLR          = 5,
501         fm10k_int_MaxHoldTime   = 6,
502         fm10k_int_sources_max_pf
503 };
504
505 /* PCIe bus speeds */
506 enum fm10k_bus_speed {
507         fm10k_bus_speed_unknown = 0,
508         fm10k_bus_speed_2500    = 2500,
509         fm10k_bus_speed_5000    = 5000,
510         fm10k_bus_speed_8000    = 8000,
511         fm10k_bus_speed_reserved
512 };
513
514 /* PCIe bus widths */
515 enum fm10k_bus_width {
516         fm10k_bus_width_unknown = 0,
517         fm10k_bus_width_pcie_x1 = 1,
518         fm10k_bus_width_pcie_x2 = 2,
519         fm10k_bus_width_pcie_x4 = 4,
520         fm10k_bus_width_pcie_x8 = 8,
521         fm10k_bus_width_reserved
522 };
523
524 /* PCIe payload sizes */
525 enum fm10k_bus_payload {
526         fm10k_bus_payload_unknown = 0,
527         fm10k_bus_payload_128     = 1,
528         fm10k_bus_payload_256     = 2,
529         fm10k_bus_payload_512     = 3,
530         fm10k_bus_payload_reserved
531 };
532
533 /* Bus parameters */
534 struct fm10k_bus_info {
535         enum fm10k_bus_speed speed;
536         enum fm10k_bus_width width;
537         enum fm10k_bus_payload payload;
538 };
539
540 /* Statistics related declarations */
541 struct fm10k_hw_stat {
542         u64 count;
543         u32 base_l;
544         u32 base_h;
545 };
546
547 struct fm10k_hw_stats_q {
548         struct fm10k_hw_stat tx_bytes;
549         struct fm10k_hw_stat tx_packets;
550 #define tx_stats_idx    tx_packets.base_h
551         struct fm10k_hw_stat rx_bytes;
552         struct fm10k_hw_stat rx_packets;
553 #define rx_stats_idx    rx_packets.base_h
554         struct fm10k_hw_stat rx_drops;
555 };
556
557 struct fm10k_hw_stats {
558         struct fm10k_hw_stat    timeout;
559 #define stats_idx       timeout.base_h
560         struct fm10k_hw_stat    ur;
561         struct fm10k_hw_stat    ca;
562         struct fm10k_hw_stat    um;
563         struct fm10k_hw_stat    xec;
564         struct fm10k_hw_stat    vlan_drop;
565         struct fm10k_hw_stat    loopback_drop;
566         struct fm10k_hw_stat    nodesc_drop;
567         struct fm10k_hw_stats_q q[FM10K_MAX_QUEUES_PF];
568 };
569
570 /* Establish DGLORT feature priority */
571 enum fm10k_dglortdec_idx {
572         fm10k_dglort_default    = 0,
573         fm10k_dglort_vf_rsvd0   = 1,
574         fm10k_dglort_vf_rss     = 2,
575         fm10k_dglort_pf_rsvd0   = 3,
576         fm10k_dglort_pf_queue   = 4,
577         fm10k_dglort_pf_vsi     = 5,
578         fm10k_dglort_pf_rsvd1   = 6,
579         fm10k_dglort_pf_rss     = 7
580 };
581
582 struct fm10k_dglort_cfg {
583         u16 glort;      /* GLORT base */
584         u16 queue_b;    /* Base value for queue */
585         u8  vsi_b;      /* Base value for VSI */
586         u8  idx;        /* index of DGLORTDEC entry */
587         u8  rss_l;      /* RSS indices */
588         u8  pc_l;       /* Priority Class indices */
589         u8  vsi_l;      /* Number of bits from GLORT used to determine VSI */
590         u8  queue_l;    /* Number of bits from GLORT used to determine queue */
591         u8  shared_l;   /* Ignored bits from GLORT resulting in shared VSI */
592         u8  inner_rss;  /* Boolean value if inner header is used for RSS */
593 };
594
595 enum fm10k_pca_fault {
596         PCA_NO_FAULT,
597         PCA_UNMAPPED_ADDR,
598         PCA_BAD_QACCESS_PF,
599         PCA_BAD_QACCESS_VF,
600         PCA_MALICIOUS_REQ,
601         PCA_POISONED_TLP,
602         PCA_TLP_ABORT,
603         __PCA_MAX
604 };
605
606 enum fm10k_thi_fault {
607         THI_NO_FAULT,
608         THI_MAL_DIS_Q_FAULT,
609         __THI_MAX
610 };
611
612 enum fm10k_fum_fault {
613         FUM_NO_FAULT,
614         FUM_UNMAPPED_ADDR,
615         FUM_POISONED_TLP,
616         FUM_BAD_VF_QACCESS,
617         FUM_ADD_DECODE_ERR,
618         FUM_RO_ERROR,
619         FUM_QPRC_CRC_ERROR,
620         FUM_CSR_TIMEOUT,
621         FUM_INVALID_TYPE,
622         FUM_INVALID_LENGTH,
623         FUM_INVALID_BE,
624         FUM_INVALID_ALIGN,
625         __FUM_MAX
626 };
627
628 struct fm10k_fault {
629         u64 address;    /* Address at the time fault was detected */
630         u32 specinfo;   /* Extra info on this fault (fault dependent) */
631         u8 type;        /* Fault value dependent on subunit */
632         u8 func;        /* Function number of the fault */
633 };
634
635 struct fm10k_mac_ops {
636         /* basic bring-up and tear-down */
637         s32 (*reset_hw)(struct fm10k_hw *);
638         s32 (*init_hw)(struct fm10k_hw *);
639         s32 (*start_hw)(struct fm10k_hw *);
640         s32 (*stop_hw)(struct fm10k_hw *);
641         s32 (*get_bus_info)(struct fm10k_hw *);
642         s32 (*get_host_state)(struct fm10k_hw *, bool *);
643         bool (*is_slot_appropriate)(struct fm10k_hw *);
644         s32 (*update_vlan)(struct fm10k_hw *, u32, u8, bool);
645         s32 (*read_mac_addr)(struct fm10k_hw *);
646         s32 (*update_uc_addr)(struct fm10k_hw *, u16, const u8 *,
647                               u16, bool, u8);
648         s32 (*update_mc_addr)(struct fm10k_hw *, u16, const u8 *, u16, bool);
649         s32 (*update_xcast_mode)(struct fm10k_hw *, u16, u8);
650         void (*update_int_moderator)(struct fm10k_hw *);
651         s32  (*update_lport_state)(struct fm10k_hw *, u16, u16, bool);
652         void (*update_hw_stats)(struct fm10k_hw *, struct fm10k_hw_stats *);
653         void (*rebind_hw_stats)(struct fm10k_hw *, struct fm10k_hw_stats *);
654         s32 (*configure_dglort_map)(struct fm10k_hw *,
655                                     struct fm10k_dglort_cfg *);
656         void (*set_dma_mask)(struct fm10k_hw *, u64);
657         s32 (*get_fault)(struct fm10k_hw *, int, struct fm10k_fault *);
658         void (*request_lport_map)(struct fm10k_hw *);
659         s32 (*adjust_systime)(struct fm10k_hw *, s32 ppb);
660         u64 (*read_systime)(struct fm10k_hw *);
661         s32 (*request_tx_timestamp_mode)(struct fm10k_hw *, u16, u8);
662 };
663
664 enum fm10k_mac_type {
665         fm10k_mac_unknown = 0,
666         fm10k_mac_pf,
667         fm10k_mac_vf,
668         fm10k_num_macs
669 };
670
671 struct fm10k_mac_info {
672         struct fm10k_mac_ops ops;
673         enum fm10k_mac_type type;
674         u8 addr[ETH_ALEN];
675         u8 perm_addr[ETH_ALEN];
676         u16 default_vid;
677         u16 max_msix_vectors;
678         u16 max_queues;
679         bool vlan_override;
680         bool get_host_state;
681         bool tx_ready;
682         u32 dglort_map;
683 };
684
685 struct fm10k_swapi_table_info {
686         u32 used;
687         u32 avail;
688 };
689
690 struct fm10k_swapi_info {
691         u32 status;
692         struct fm10k_swapi_table_info mac;
693         struct fm10k_swapi_table_info nexthop;
694         struct fm10k_swapi_table_info ffu;
695 };
696
697 enum fm10k_xcast_modes {
698         FM10K_XCAST_MODE_ALLMULTI       = 0,
699         FM10K_XCAST_MODE_MULTI          = 1,
700         FM10K_XCAST_MODE_PROMISC        = 2,
701         FM10K_XCAST_MODE_NONE           = 3,
702         FM10K_XCAST_MODE_DISABLE        = 4
703 };
704
705 enum fm10k_timestamp_modes {
706         FM10K_TIMESTAMP_MODE_NONE       = 0,
707         FM10K_TIMESTAMP_MODE_PEP_TO_PEP = 1,
708         FM10K_TIMESTAMP_MODE_PEP_TO_ANY = 2,
709 };
710
711 #define FM10K_VF_TC_MAX         100000  /* 100,000 Mb/s aka 100Gb/s */
712 #define FM10K_VF_TC_MIN         1       /* 1 Mb/s is the slowest rate */
713
714 struct fm10k_vf_info {
715         /* mbx must be first field in struct unless all default IOV message
716          * handlers are redone as the assumption is that vf_info starts
717          * at the same offset as the mailbox
718          */
719         struct fm10k_mbx_info   mbx;            /* PF side of VF mailbox */
720         int                     rate;           /* Tx BW cap as defined by OS */
721         u16                     glort;          /* resource tag for this VF */
722         u16                     sw_vid;         /* Switch API assigned VLAN */
723         u16                     pf_vid;         /* PF assigned Default VLAN */
724         u8                      mac[ETH_ALEN];  /* PF Default MAC address */
725         u8                      vsi;            /* VSI identifier */
726         u8                      vf_idx;         /* which VF this is */
727         u8                      vf_flags;       /* flags indicating what modes
728                                                  * are supported for the port
729                                                  */
730 };
731
732 #define FM10K_VF_FLAG_ALLMULTI_CAPABLE  ((u8)1 << FM10K_XCAST_MODE_ALLMULTI)
733 #define FM10K_VF_FLAG_MULTI_CAPABLE     ((u8)1 << FM10K_XCAST_MODE_MULTI)
734 #define FM10K_VF_FLAG_PROMISC_CAPABLE   ((u8)1 << FM10K_XCAST_MODE_PROMISC)
735 #define FM10K_VF_FLAG_NONE_CAPABLE      ((u8)1 << FM10K_XCAST_MODE_NONE)
736 #define FM10K_VF_FLAG_CAPABLE(vf_info)  ((vf_info)->vf_flags & (u8)0xF)
737 #define FM10K_VF_FLAG_ENABLED(vf_info)  ((vf_info)->vf_flags >> 4)
738 #define FM10K_VF_FLAG_SET_MODE(mode)    ((u8)0x10 << (mode))
739 #define FM10K_VF_FLAG_ENABLED_MODE_SHIFT        4
740 #define FM10K_VF_FLAG_SET_MODE_MASK     ((u8)0xF0)
741 #define FM10K_VF_FLAG_SET_MODE_NONE \
742         FM10K_VF_FLAG_SET_MODE(FM10K_XCAST_MODE_NONE)
743 #define FM10K_VF_FLAG_MULTI_ENABLED \
744         (FM10K_VF_FLAG_SET_MODE(FM10K_XCAST_MODE_ALLMULTI) | \
745          FM10K_VF_FLAG_SET_MODE(FM10K_XCAST_MODE_MULTI) | \
746          FM10K_VF_FLAG_SET_MODE(FM10K_XCAST_MODE_PROMISC))
747
748 struct fm10k_iov_ops {
749         /* IOV related bring-up and tear-down */
750         s32 (*assign_resources)(struct fm10k_hw *, u16, u16);
751         s32 (*configure_tc)(struct fm10k_hw *, u16, int);
752         s32 (*assign_int_moderator)(struct fm10k_hw *, u16);
753         s32 (*assign_default_mac_vlan)(struct fm10k_hw *,
754                                        struct fm10k_vf_info *);
755         s32 (*reset_resources)(struct fm10k_hw *,
756                                struct fm10k_vf_info *);
757         s32 (*set_lport)(struct fm10k_hw *, struct fm10k_vf_info *, u16, u8);
758         void (*reset_lport)(struct fm10k_hw *, struct fm10k_vf_info *);
759         void (*update_stats)(struct fm10k_hw *, struct fm10k_hw_stats_q *, u16);
760         s32 (*report_timestamp)(struct fm10k_hw *, struct fm10k_vf_info *, u64);
761 };
762
763 struct fm10k_iov_info {
764         struct fm10k_iov_ops ops;
765         u16 total_vfs;
766         u16 num_vfs;
767         u16 num_pools;
768 };
769
770 struct fm10k_hw {
771         u32 *hw_addr;
772         u32 *sw_addr;
773         void *back;
774         struct fm10k_mac_info mac;
775         struct fm10k_bus_info bus;
776         struct fm10k_bus_info bus_caps;
777         struct fm10k_iov_info iov;
778         struct fm10k_mbx_info mbx;
779         struct fm10k_swapi_info swapi;
780         u16 device_id;
781         u16 vendor_id;
782         u16 subsystem_device_id;
783         u16 subsystem_vendor_id;
784         u8 revision_id;
785 };
786
787 /* Number of Transmit and Receive Descriptors must be a multiple of 8 */
788 #define FM10K_REQ_TX_DESCRIPTOR_MULTIPLE        8
789 #define FM10K_REQ_RX_DESCRIPTOR_MULTIPLE        8
790
791 /* Transmit Descriptor */
792 struct fm10k_tx_desc {
793         __le64 buffer_addr;     /* Address of the descriptor's data buffer */
794         __le16 buflen;          /* Length of data to be DMAed */
795         __le16 vlan;            /* VLAN_ID and VPRI to be inserted in FTAG */
796         __le16 mss;             /* MSS for segmentation offload */
797         u8 hdrlen;              /* Header size for segmentation offload */
798         u8 flags;               /* Status and offload request flags */
799 };
800
801 /* Transmit Descriptor Cache Structure */
802 struct fm10k_tx_desc_cache {
803         struct fm10k_tx_desc tx_desc[256];
804 };
805
806 #define FM10K_TXD_FLAG_INT      0x01
807 #define FM10K_TXD_FLAG_TIME     0x02
808 #define FM10K_TXD_FLAG_CSUM     0x04
809 #define FM10K_TXD_FLAG_CSUM2    0x08
810 #define FM10K_TXD_FLAG_FTAG     0x10
811 #define FM10K_TXD_FLAG_RS       0x20
812 #define FM10K_TXD_FLAG_LAST     0x40
813 #define FM10K_TXD_FLAG_DONE     0x80
814
815 #define FM10K_TXD_VLAN_PRI_SHIFT        12
816
817 /* These macros are meant to enable optimal placement of the RS and INT
818  * bits.  It will point us to the last descriptor in the cache for either the
819  * start of the packet, or the end of the packet.  If the index is actually
820  * at the start of the FIFO it will point to the offset for the last index
821  * in the FIFO to prevent an unnecessary write.
822  */
823 #define FM10K_TXD_WB_FIFO_SIZE  4
824 #define FM10K_TXD_WB_IDX(idx) \
825         (((idx) - 1) | (FM10K_TXD_WB_FIFO_SIZE - 1))
826
827 /* Receive Descriptor - 32B */
828 union fm10k_rx_desc {
829         struct {
830                 __le64 pkt_addr; /* Packet buffer address */
831                 __le64 hdr_addr; /* Header buffer address */
832                 __le64 reserved; /* Empty space, RSS hash */
833                 __le64 timestamp;
834         } q; /* Read, Writeback, 64b quad-words */
835         struct {
836                 __le32 data; /* RSS and header data */
837                 __le32 rss;  /* RSS Hash */
838                 __le32 staterr;
839                 __le32 vlan_len;
840                 __le32 glort; /* sglort/dglort */
841         } d; /* Writeback, 32b double-words */
842         struct {
843                 __le16 pkt_info; /* RSS, Pkt type */
844                 __le16 hdr_info; /* Splithdr, hdrlen, xC */
845                 __le16 rss_lower;
846                 __le16 rss_upper;
847                 __le16 status; /* status/error */
848                 __le16 csum_err; /* checksum or extended error value */
849                 __le16 length; /* Packet length */
850                 __le16 vlan; /* VLAN tag */
851                 __le16 dglort;
852                 __le16 sglort;
853         } w; /* Writeback, 16b words */
854 };
855
856 #define FM10K_RXD_RSSTYPE_MASK          0x000F
857 enum fm10k_rdesc_rss_type {
858         FM10K_RSSTYPE_NONE      = 0x0,
859         FM10K_RSSTYPE_IPV4_TCP  = 0x1,
860         FM10K_RSSTYPE_IPV4      = 0x2,
861         FM10K_RSSTYPE_IPV6_TCP  = 0x3,
862         /* Reserved 0x4 */
863         FM10K_RSSTYPE_IPV6      = 0x5,
864         /* Reserved 0x6 */
865         FM10K_RSSTYPE_IPV4_UDP  = 0x7,
866         FM10K_RSSTYPE_IPV6_UDP  = 0x8
867         /* Reserved 0x9 - 0xF */
868 };
869
870 #define FM10K_RXD_PKTTYPE_MASK          0x03F0
871 #define FM10K_RXD_PKTTYPE_MASK_L3       0x0070
872 #define FM10K_RXD_PKTTYPE_MASK_L4       0x0380
873 #define FM10K_RXD_PKTTYPE_SHIFT         4
874 #define FM10K_RXD_PKTTYPE_INNER_MASK_L3 0x1C00
875 #define FM10K_RXD_PKTTYPE_INNER_MASK_L4 0xE000
876 #define FM10K_RXD_PKTTYPE_INNER_SHIFT   10
877 enum fm10k_rdesc_pkt_type {
878         /* L3 type */
879         FM10K_PKTTYPE_OTHER     = 0x00,
880         FM10K_PKTTYPE_IPV4      = 0x01,
881         FM10K_PKTTYPE_IPV4_EX   = 0x02,
882         FM10K_PKTTYPE_IPV6      = 0x03,
883         FM10K_PKTTYPE_IPV6_EX   = 0x04,
884
885         /* L4 type */
886         FM10K_PKTTYPE_TCP       = 0x08,
887         FM10K_PKTTYPE_UDP       = 0x10,
888         FM10K_PKTTYPE_GRE       = 0x18,
889         FM10K_PKTTYPE_VXLAN     = 0x20,
890         FM10K_PKTTYPE_NVGRE     = 0x28,
891         FM10K_PKTTYPE_GENEVE    = 0x30
892 };
893
894 #define FM10K_RXD_HDR_INFO_XC_MASK      0x0006
895 enum fm10k_rxdesc_xc {
896         FM10K_XC_UNICAST        = 0x0,
897         FM10K_XC_MULTICAST      = 0x4,
898         FM10K_XC_BROADCAST      = 0x6
899 };
900
901 #define FM10K_RXD_HDR_INFO_LEN_SHIFT    5
902 #define FM10K_RXD_HDR_INFO_SPH          0x8000
903
904 #define FM10K_RXD_STATUS_DD             0x0001 /* Descriptor done */
905 #define FM10K_RXD_STATUS_EOP            0x0002 /* End of packet */
906 #define FM10K_RXD_STATUS_VEXT           0x0004 /* A VLAN tag is present */
907 #define FM10K_RXD_STATUS_IPCS           0x0008 /* Indicates IPv4 csum */
908 #define FM10K_RXD_STATUS_L4CS           0x0010 /* Indicates an L4 csum */
909 #define FM10K_RXD_STATUS_IPCS2          0x0020 /* Inner header IPv4 csum */
910 #define FM10K_RXD_STATUS_L4CS2          0x0040 /* Inner header L4 csum */
911 #define FM10K_RXD_STATUS_IPFRAG_MASK    0x0180 /* Fragment mask */
912 #define FM10K_RXD_STATUS_IPFRAG_CSUM    0x0100 /* Fragment w/ CSUM field */
913 #define FM10K_RXD_STATUS_VEXT2          0x0200 /* A custom tag is present */
914 #define FM10K_RXD_STATUS_HBO            0x0400 /* header buffer overrun */
915 #define FM10K_RXD_STATUS_L4E2           0x0800 /* Inner header L4 csum err */
916 #define FM10K_RXD_STATUS_IPE2           0x1000 /* Inner header IPv4 csum err */
917 #define FM10K_RXD_STATUS_RXE            0x2000 /* Generic Rx error */
918 #define FM10K_RXD_STATUS_L4E            0x4000 /* L4 csum error */
919 #define FM10K_RXD_STATUS_IPE            0x8000 /* IPv4 csum error */
920
921 #define FM10K_RXD_ERR_SWITCH_ERROR      0x0001 /* Switch found bad packet */
922 #define FM10K_RXD_ERR_NO_DESCRIPTOR     0x0002 /* No descriptor available */
923 #define FM10K_RXD_ERR_PP_ERROR          0x0004 /* RAM error during processing */
924 #define FM10K_RXD_ERR_SWITCH_READY      0x0008 /* Link transition mid-packet */
925 #define FM10K_RXD_ERR_TOO_BIG           0x0010 /* Pkt too big for single buf */
926
927 #define FM10K_RXD_VLAN_ID_MASK          0x0FFF
928 #define FM10K_RXD_VLAN_PRI_SHIFT        FM10K_TXD_VLAN_PRI_SHIFT
929
930 struct fm10k_ftag {
931         __be16 swpri_type_user;
932         __be16 vlan;
933         __be16 sglort;
934         __be16 dglort;
935 };
936
937 #endif /* _FM10K_TYPE_H */