common/mlx5: move to formal ASO action API
[dpdk.git] / drivers / net / octeontx2 / otx2_tx.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2019 Marvell International Ltd.
3  */
4
5 #ifndef __OTX2_TX_H__
6 #define __OTX2_TX_H__
7
8 #define NIX_TX_OFFLOAD_NONE             (0)
9 #define NIX_TX_OFFLOAD_L3_L4_CSUM_F     BIT(0)
10 #define NIX_TX_OFFLOAD_OL3_OL4_CSUM_F   BIT(1)
11 #define NIX_TX_OFFLOAD_VLAN_QINQ_F      BIT(2)
12 #define NIX_TX_OFFLOAD_MBUF_NOFF_F      BIT(3)
13 #define NIX_TX_OFFLOAD_TSTAMP_F         BIT(4)
14 #define NIX_TX_OFFLOAD_TSO_F            BIT(5)
15 #define NIX_TX_OFFLOAD_SECURITY_F       BIT(6)
16
17 /* Flags to control xmit_prepare function.
18  * Defining it from backwards to denote its been
19  * not used as offload flags to pick function
20  */
21 #define NIX_TX_MULTI_SEG_F              BIT(15)
22
23 #define NIX_TX_NEED_SEND_HDR_W1 \
24         (NIX_TX_OFFLOAD_L3_L4_CSUM_F | NIX_TX_OFFLOAD_OL3_OL4_CSUM_F |  \
25          NIX_TX_OFFLOAD_VLAN_QINQ_F | NIX_TX_OFFLOAD_TSO_F)
26
27 #define NIX_TX_NEED_EXT_HDR \
28         (NIX_TX_OFFLOAD_VLAN_QINQ_F | NIX_TX_OFFLOAD_TSTAMP_F | \
29          NIX_TX_OFFLOAD_TSO_F)
30
31 #define NIX_UDP_TUN_BITMASK \
32         ((1ull << (PKT_TX_TUNNEL_VXLAN >> 45)) | \
33          (1ull << (PKT_TX_TUNNEL_GENEVE >> 45)))
34
35 #define NIX_LSO_FORMAT_IDX_TSOV4        (0)
36 #define NIX_LSO_FORMAT_IDX_TSOV6        (1)
37
38 /* Function to determine no of tx subdesc required in case ext
39  * sub desc is enabled.
40  */
41 static __rte_always_inline int
42 otx2_nix_tx_ext_subs(const uint16_t flags)
43 {
44         return (flags & NIX_TX_OFFLOAD_TSTAMP_F) ? 2 :
45                 ((flags & (NIX_TX_OFFLOAD_VLAN_QINQ_F | NIX_TX_OFFLOAD_TSO_F)) ?
46                  1 : 0);
47 }
48
49 static __rte_always_inline void
50 otx2_nix_xmit_prepare_tstamp(uint64_t *cmd,  const uint64_t *send_mem_desc,
51                              const uint64_t ol_flags, const uint16_t no_segdw,
52                              const uint16_t flags)
53 {
54         if (flags & NIX_TX_OFFLOAD_TSTAMP_F) {
55                 struct nix_send_mem_s *send_mem;
56                 uint16_t off = (no_segdw - 1) << 1;
57                 const uint8_t is_ol_tstamp = !(ol_flags & PKT_TX_IEEE1588_TMST);
58
59                 send_mem = (struct nix_send_mem_s *)(cmd + off);
60                 if (flags & NIX_TX_MULTI_SEG_F) {
61                         /* Retrieving the default desc values */
62                         cmd[off] = send_mem_desc[6];
63
64                         /* Using compiler barier to avoid voilation of C
65                          * aliasing rules.
66                          */
67                         rte_compiler_barrier();
68                 }
69
70                 /* Packets for which PKT_TX_IEEE1588_TMST is not set, tx tstamp
71                  * should not be recorded, hence changing the alg type to
72                  * NIX_SENDMEMALG_SET and also changing send mem addr field to
73                  * next 8 bytes as it corrpt the actual tx tstamp registered
74                  * address.
75                  */
76                 send_mem->alg = NIX_SENDMEMALG_SETTSTMP - (is_ol_tstamp);
77
78                 send_mem->addr = (rte_iova_t)((uint64_t *)send_mem_desc[7] +
79                                               (is_ol_tstamp));
80         }
81 }
82
83 static __rte_always_inline uint64_t
84 otx2_pktmbuf_detach(struct rte_mbuf *m)
85 {
86         struct rte_mempool *mp = m->pool;
87         uint32_t mbuf_size, buf_len;
88         struct rte_mbuf *md;
89         uint16_t priv_size;
90         uint16_t refcount;
91
92         /* Update refcount of direct mbuf */
93         md = rte_mbuf_from_indirect(m);
94         refcount = rte_mbuf_refcnt_update(md, -1);
95
96         priv_size = rte_pktmbuf_priv_size(mp);
97         mbuf_size = (uint32_t)(sizeof(struct rte_mbuf) + priv_size);
98         buf_len = rte_pktmbuf_data_room_size(mp);
99
100         m->priv_size = priv_size;
101         m->buf_addr = (char *)m + mbuf_size;
102         m->buf_iova = rte_mempool_virt2iova(m) + mbuf_size;
103         m->buf_len = (uint16_t)buf_len;
104         rte_pktmbuf_reset_headroom(m);
105         m->data_len = 0;
106         m->ol_flags = 0;
107         m->next = NULL;
108         m->nb_segs = 1;
109
110         /* Now indirect mbuf is safe to free */
111         rte_pktmbuf_free(m);
112
113         if (refcount == 0) {
114                 rte_mbuf_refcnt_set(md, 1);
115                 md->data_len = 0;
116                 md->ol_flags = 0;
117                 md->next = NULL;
118                 md->nb_segs = 1;
119                 return 0;
120         } else {
121                 return 1;
122         }
123 }
124
125 static __rte_always_inline uint64_t
126 otx2_nix_prefree_seg(struct rte_mbuf *m)
127 {
128         if (likely(rte_mbuf_refcnt_read(m) == 1)) {
129                 if (!RTE_MBUF_DIRECT(m))
130                         return otx2_pktmbuf_detach(m);
131
132                 m->next = NULL;
133                 m->nb_segs = 1;
134                 return 0;
135         } else if (rte_mbuf_refcnt_update(m, -1) == 0) {
136                 if (!RTE_MBUF_DIRECT(m))
137                         return otx2_pktmbuf_detach(m);
138
139                 rte_mbuf_refcnt_set(m, 1);
140                 m->next = NULL;
141                 m->nb_segs = 1;
142                 return 0;
143         }
144
145         /* Mbuf is having refcount more than 1 so need not to be freed */
146         return 1;
147 }
148
149 static __rte_always_inline void
150 otx2_nix_xmit_prepare_tso(struct rte_mbuf *m, const uint64_t flags)
151 {
152         uint64_t mask, ol_flags = m->ol_flags;
153
154         if (flags & NIX_TX_OFFLOAD_TSO_F &&
155             (ol_flags & PKT_TX_TCP_SEG)) {
156                 uintptr_t mdata = rte_pktmbuf_mtod(m, uintptr_t);
157                 uint16_t *iplen, *oiplen, *oudplen;
158                 uint16_t lso_sb, paylen;
159
160                 mask = -!!(ol_flags & (PKT_TX_OUTER_IPV4 | PKT_TX_OUTER_IPV6));
161                 lso_sb = (mask & (m->outer_l2_len + m->outer_l3_len)) +
162                         m->l2_len + m->l3_len + m->l4_len;
163
164                 /* Reduce payload len from base headers */
165                 paylen = m->pkt_len - lso_sb;
166
167                 /* Get iplen position assuming no tunnel hdr */
168                 iplen = (uint16_t *)(mdata + m->l2_len +
169                                      (2 << !!(ol_flags & PKT_TX_IPV6)));
170                 /* Handle tunnel tso */
171                 if ((flags & NIX_TX_OFFLOAD_OL3_OL4_CSUM_F) &&
172                     (ol_flags & PKT_TX_TUNNEL_MASK)) {
173                         const uint8_t is_udp_tun = (NIX_UDP_TUN_BITMASK >>
174                                 ((ol_flags & PKT_TX_TUNNEL_MASK) >> 45)) & 0x1;
175
176                         oiplen = (uint16_t *)(mdata + m->outer_l2_len +
177                                 (2 << !!(ol_flags & PKT_TX_OUTER_IPV6)));
178                         *oiplen = rte_cpu_to_be_16(rte_be_to_cpu_16(*oiplen) -
179                                                    paylen);
180
181                         /* Update format for UDP tunneled packet */
182                         if (is_udp_tun) {
183                                 oudplen = (uint16_t *)(mdata + m->outer_l2_len +
184                                                        m->outer_l3_len + 4);
185                                 *oudplen =
186                                 rte_cpu_to_be_16(rte_be_to_cpu_16(*oudplen) -
187                                                  paylen);
188                         }
189
190                         /* Update iplen position to inner ip hdr */
191                         iplen = (uint16_t *)(mdata + lso_sb - m->l3_len -
192                                 m->l4_len + (2 << !!(ol_flags & PKT_TX_IPV6)));
193                 }
194
195                 *iplen = rte_cpu_to_be_16(rte_be_to_cpu_16(*iplen) - paylen);
196         }
197 }
198
199 static __rte_always_inline void
200 otx2_nix_xmit_prepare(struct rte_mbuf *m, uint64_t *cmd, const uint16_t flags)
201 {
202         struct nix_send_ext_s *send_hdr_ext;
203         struct nix_send_hdr_s *send_hdr;
204         uint64_t ol_flags = 0, mask;
205         union nix_send_hdr_w1_u w1;
206         union nix_send_sg_s *sg;
207
208         send_hdr = (struct nix_send_hdr_s *)cmd;
209         if (flags & NIX_TX_NEED_EXT_HDR) {
210                 send_hdr_ext = (struct nix_send_ext_s *)(cmd + 2);
211                 sg = (union nix_send_sg_s *)(cmd + 4);
212                 /* Clear previous markings */
213                 send_hdr_ext->w0.lso = 0;
214                 send_hdr_ext->w1.u = 0;
215         } else {
216                 sg = (union nix_send_sg_s *)(cmd + 2);
217         }
218
219         if (flags & NIX_TX_NEED_SEND_HDR_W1) {
220                 ol_flags = m->ol_flags;
221                 w1.u = 0;
222         }
223
224         if (!(flags & NIX_TX_MULTI_SEG_F)) {
225                 send_hdr->w0.total = m->data_len;
226                 send_hdr->w0.aura =
227                         npa_lf_aura_handle_to_aura(m->pool->pool_id);
228         }
229
230         /*
231          * L3type:  2 => IPV4
232          *          3 => IPV4 with csum
233          *          4 => IPV6
234          * L3type and L3ptr needs to be set for either
235          * L3 csum or L4 csum or LSO
236          *
237          */
238
239         if ((flags & NIX_TX_OFFLOAD_OL3_OL4_CSUM_F) &&
240             (flags & NIX_TX_OFFLOAD_L3_L4_CSUM_F)) {
241                 const uint8_t csum = !!(ol_flags & PKT_TX_OUTER_UDP_CKSUM);
242                 const uint8_t ol3type =
243                         ((!!(ol_flags & PKT_TX_OUTER_IPV4)) << 1) +
244                         ((!!(ol_flags & PKT_TX_OUTER_IPV6)) << 2) +
245                         !!(ol_flags & PKT_TX_OUTER_IP_CKSUM);
246
247                 /* Outer L3 */
248                 w1.ol3type = ol3type;
249                 mask = 0xffffull << ((!!ol3type) << 4);
250                 w1.ol3ptr = ~mask & m->outer_l2_len;
251                 w1.ol4ptr = ~mask & (w1.ol3ptr + m->outer_l3_len);
252
253                 /* Outer L4 */
254                 w1.ol4type = csum + (csum << 1);
255
256                 /* Inner L3 */
257                 w1.il3type = ((!!(ol_flags & PKT_TX_IPV4)) << 1) +
258                         ((!!(ol_flags & PKT_TX_IPV6)) << 2);
259                 w1.il3ptr = w1.ol4ptr + m->l2_len;
260                 w1.il4ptr = w1.il3ptr + m->l3_len;
261                 /* Increment it by 1 if it is IPV4 as 3 is with csum */
262                 w1.il3type = w1.il3type + !!(ol_flags & PKT_TX_IP_CKSUM);
263
264                 /* Inner L4 */
265                 w1.il4type =  (ol_flags & PKT_TX_L4_MASK) >> 52;
266
267                 /* In case of no tunnel header use only
268                  * shift IL3/IL4 fields a bit to use
269                  * OL3/OL4 for header checksum
270                  */
271                 mask = !ol3type;
272                 w1.u = ((w1.u & 0xFFFFFFFF00000000) >> (mask << 3)) |
273                         ((w1.u & 0X00000000FFFFFFFF) >> (mask << 4));
274
275         } else if (flags & NIX_TX_OFFLOAD_OL3_OL4_CSUM_F) {
276                 const uint8_t csum = !!(ol_flags & PKT_TX_OUTER_UDP_CKSUM);
277                 const uint8_t outer_l2_len = m->outer_l2_len;
278
279                 /* Outer L3 */
280                 w1.ol3ptr = outer_l2_len;
281                 w1.ol4ptr = outer_l2_len + m->outer_l3_len;
282                 /* Increment it by 1 if it is IPV4 as 3 is with csum */
283                 w1.ol3type = ((!!(ol_flags & PKT_TX_OUTER_IPV4)) << 1) +
284                         ((!!(ol_flags & PKT_TX_OUTER_IPV6)) << 2) +
285                         !!(ol_flags & PKT_TX_OUTER_IP_CKSUM);
286
287                 /* Outer L4 */
288                 w1.ol4type = csum + (csum << 1);
289
290         } else if (flags & NIX_TX_OFFLOAD_L3_L4_CSUM_F) {
291                 const uint8_t l2_len = m->l2_len;
292
293                 /* Always use OLXPTR and OLXTYPE when only
294                  * when one header is present
295                  */
296
297                 /* Inner L3 */
298                 w1.ol3ptr = l2_len;
299                 w1.ol4ptr = l2_len + m->l3_len;
300                 /* Increment it by 1 if it is IPV4 as 3 is with csum */
301                 w1.ol3type = ((!!(ol_flags & PKT_TX_IPV4)) << 1) +
302                         ((!!(ol_flags & PKT_TX_IPV6)) << 2) +
303                         !!(ol_flags & PKT_TX_IP_CKSUM);
304
305                 /* Inner L4 */
306                 w1.ol4type =  (ol_flags & PKT_TX_L4_MASK) >> 52;
307         }
308
309         if (flags & NIX_TX_NEED_EXT_HDR &&
310             flags & NIX_TX_OFFLOAD_VLAN_QINQ_F) {
311                 send_hdr_ext->w1.vlan1_ins_ena = !!(ol_flags & PKT_TX_VLAN);
312                 /* HW will update ptr after vlan0 update */
313                 send_hdr_ext->w1.vlan1_ins_ptr = 12;
314                 send_hdr_ext->w1.vlan1_ins_tci = m->vlan_tci;
315
316                 send_hdr_ext->w1.vlan0_ins_ena = !!(ol_flags & PKT_TX_QINQ);
317                 /* 2B before end of l2 header */
318                 send_hdr_ext->w1.vlan0_ins_ptr = 12;
319                 send_hdr_ext->w1.vlan0_ins_tci = m->vlan_tci_outer;
320         }
321
322         if (flags & NIX_TX_OFFLOAD_TSO_F &&
323             (ol_flags & PKT_TX_TCP_SEG)) {
324                 uint16_t lso_sb;
325                 uint64_t mask;
326
327                 mask = -(!w1.il3type);
328                 lso_sb = (mask & w1.ol4ptr) + (~mask & w1.il4ptr) + m->l4_len;
329
330                 send_hdr_ext->w0.lso_sb = lso_sb;
331                 send_hdr_ext->w0.lso = 1;
332                 send_hdr_ext->w0.lso_mps = m->tso_segsz;
333                 send_hdr_ext->w0.lso_format =
334                         NIX_LSO_FORMAT_IDX_TSOV4 + !!(ol_flags & PKT_TX_IPV6);
335                 w1.ol4type = NIX_SENDL4TYPE_TCP_CKSUM;
336
337                 /* Handle tunnel tso */
338                 if ((flags & NIX_TX_OFFLOAD_OL3_OL4_CSUM_F) &&
339                     (ol_flags & PKT_TX_TUNNEL_MASK)) {
340                         const uint8_t is_udp_tun = (NIX_UDP_TUN_BITMASK >>
341                                 ((ol_flags & PKT_TX_TUNNEL_MASK) >> 45)) & 0x1;
342
343                         w1.il4type = NIX_SENDL4TYPE_TCP_CKSUM;
344                         w1.ol4type = is_udp_tun ? NIX_SENDL4TYPE_UDP_CKSUM : 0;
345                         /* Update format for UDP tunneled packet */
346                         send_hdr_ext->w0.lso_format += is_udp_tun ? 2 : 6;
347
348                         send_hdr_ext->w0.lso_format +=
349                                 !!(ol_flags & PKT_TX_OUTER_IPV6) << 1;
350                 }
351         }
352
353         if (flags & NIX_TX_NEED_SEND_HDR_W1)
354                 send_hdr->w1.u = w1.u;
355
356         if (!(flags & NIX_TX_MULTI_SEG_F)) {
357                 sg->seg1_size = m->data_len;
358                 *(rte_iova_t *)(++sg) = rte_mbuf_data_iova(m);
359
360                 if (flags & NIX_TX_OFFLOAD_MBUF_NOFF_F) {
361                         /* DF bit = 1 if refcount of current mbuf or parent mbuf
362                          *              is greater than 1
363                          * DF bit = 0 otherwise
364                          */
365                         send_hdr->w0.df = otx2_nix_prefree_seg(m);
366                         /* Ensuring mbuf fields which got updated in
367                          * otx2_nix_prefree_seg are written before LMTST.
368                          */
369                         rte_io_wmb();
370                 }
371                 /* Mark mempool object as "put" since it is freed by NIX */
372                 if (!send_hdr->w0.df)
373                         __mempool_check_cookies(m->pool, (void **)&m, 1, 0);
374         }
375 }
376
377
378 static __rte_always_inline void
379 otx2_nix_xmit_one(uint64_t *cmd, void *lmt_addr,
380                   const rte_iova_t io_addr, const uint32_t flags)
381 {
382         uint64_t lmt_status;
383
384         do {
385                 otx2_lmt_mov(lmt_addr, cmd, otx2_nix_tx_ext_subs(flags));
386                 lmt_status = otx2_lmt_submit(io_addr);
387         } while (lmt_status == 0);
388 }
389
390 static __rte_always_inline void
391 otx2_nix_xmit_prep_lmt(uint64_t *cmd, void *lmt_addr, const uint32_t flags)
392 {
393         otx2_lmt_mov(lmt_addr, cmd, otx2_nix_tx_ext_subs(flags));
394 }
395
396 static __rte_always_inline uint64_t
397 otx2_nix_xmit_submit_lmt(const rte_iova_t io_addr)
398 {
399         return otx2_lmt_submit(io_addr);
400 }
401
402 static __rte_always_inline uint64_t
403 otx2_nix_xmit_submit_lmt_release(const rte_iova_t io_addr)
404 {
405         return otx2_lmt_submit_release(io_addr);
406 }
407
408 static __rte_always_inline uint16_t
409 otx2_nix_prepare_mseg(struct rte_mbuf *m, uint64_t *cmd, const uint16_t flags)
410 {
411         struct nix_send_hdr_s *send_hdr;
412         union nix_send_sg_s *sg;
413         struct rte_mbuf *m_next;
414         uint64_t *slist, sg_u;
415         uint64_t nb_segs;
416         uint64_t segdw;
417         uint8_t off, i;
418
419         send_hdr = (struct nix_send_hdr_s *)cmd;
420         send_hdr->w0.total = m->pkt_len;
421         send_hdr->w0.aura = npa_lf_aura_handle_to_aura(m->pool->pool_id);
422
423         if (flags & NIX_TX_NEED_EXT_HDR)
424                 off = 2;
425         else
426                 off = 0;
427
428         sg = (union nix_send_sg_s *)&cmd[2 + off];
429         /* Clear sg->u header before use */
430         sg->u &= 0xFC00000000000000;
431         sg_u = sg->u;
432         slist = &cmd[3 + off];
433
434         i = 0;
435         nb_segs = m->nb_segs;
436
437         /* Fill mbuf segments */
438         do {
439                 m_next = m->next;
440                 sg_u = sg_u | ((uint64_t)m->data_len << (i << 4));
441                 *slist = rte_mbuf_data_iova(m);
442                 /* Set invert df if buffer is not to be freed by H/W */
443                 if (flags & NIX_TX_OFFLOAD_MBUF_NOFF_F) {
444                         sg_u |= (otx2_nix_prefree_seg(m) << (i + 55));
445                         /* Commit changes to mbuf */
446                         rte_io_wmb();
447                 }
448                 /* Mark mempool object as "put" since it is freed by NIX */
449 #ifdef RTE_LIBRTE_MEMPOOL_DEBUG
450                 if (!(sg_u & (1ULL << (i + 55))))
451                         __mempool_check_cookies(m->pool, (void **)&m, 1, 0);
452                 rte_io_wmb();
453 #endif
454                 slist++;
455                 i++;
456                 nb_segs--;
457                 if (i > 2 && nb_segs) {
458                         i = 0;
459                         /* Next SG subdesc */
460                         *(uint64_t *)slist = sg_u & 0xFC00000000000000;
461                         sg->u = sg_u;
462                         sg->segs = 3;
463                         sg = (union nix_send_sg_s *)slist;
464                         sg_u = sg->u;
465                         slist++;
466                 }
467                 m = m_next;
468         } while (nb_segs);
469
470         sg->u = sg_u;
471         sg->segs = i;
472         segdw = (uint64_t *)slist - (uint64_t *)&cmd[2 + off];
473         /* Roundup extra dwords to multiple of 2 */
474         segdw = (segdw >> 1) + (segdw & 0x1);
475         /* Default dwords */
476         segdw += (off >> 1) + 1 + !!(flags & NIX_TX_OFFLOAD_TSTAMP_F);
477         send_hdr->w0.sizem1 = segdw - 1;
478
479         return segdw;
480 }
481
482 static __rte_always_inline void
483 otx2_nix_xmit_mseg_prep_lmt(uint64_t *cmd, void *lmt_addr, uint16_t segdw)
484 {
485         otx2_lmt_mov_seg(lmt_addr, (const void *)cmd, segdw);
486 }
487
488 static __rte_always_inline void
489 otx2_nix_xmit_mseg_one(uint64_t *cmd, void *lmt_addr,
490                        rte_iova_t io_addr, uint16_t segdw)
491 {
492         uint64_t lmt_status;
493
494         do {
495                 otx2_lmt_mov_seg(lmt_addr, (const void *)cmd, segdw);
496                 lmt_status = otx2_lmt_submit(io_addr);
497         } while (lmt_status == 0);
498 }
499
500 static __rte_always_inline void
501 otx2_nix_xmit_mseg_one_release(uint64_t *cmd, void *lmt_addr,
502                        rte_iova_t io_addr, uint16_t segdw)
503 {
504         uint64_t lmt_status;
505
506         rte_io_wmb();
507         do {
508                 otx2_lmt_mov_seg(lmt_addr, (const void *)cmd, segdw);
509                 lmt_status = otx2_lmt_submit(io_addr);
510         } while (lmt_status == 0);
511 }
512
513 #define L3L4CSUM_F   NIX_TX_OFFLOAD_L3_L4_CSUM_F
514 #define OL3OL4CSUM_F NIX_TX_OFFLOAD_OL3_OL4_CSUM_F
515 #define VLAN_F       NIX_TX_OFFLOAD_VLAN_QINQ_F
516 #define NOFF_F       NIX_TX_OFFLOAD_MBUF_NOFF_F
517 #define TSP_F        NIX_TX_OFFLOAD_TSTAMP_F
518 #define TSO_F        NIX_TX_OFFLOAD_TSO_F
519 #define TX_SEC_F     NIX_TX_OFFLOAD_SECURITY_F
520
521 /* [SEC] [TSO] [TSTMP] [NOFF] [VLAN] [OL3OL4CSUM] [L3L4CSUM] */
522 #define NIX_TX_FASTPATH_MODES                                           \
523 T(no_offload,                           0, 0, 0, 0, 0, 0, 0,    4,      \
524                 NIX_TX_OFFLOAD_NONE)                                    \
525 T(l3l4csum,                             0, 0, 0, 0, 0, 0, 1,    4,      \
526                 L3L4CSUM_F)                                             \
527 T(ol3ol4csum,                           0, 0, 0, 0, 0, 1, 0,    4,      \
528                 OL3OL4CSUM_F)                                           \
529 T(ol3ol4csum_l3l4csum,                  0, 0, 0, 0, 0, 1, 1,    4,      \
530                 OL3OL4CSUM_F | L3L4CSUM_F)                              \
531 T(vlan,                                 0, 0, 0, 0, 1, 0, 0,    6,      \
532                 VLAN_F)                                                 \
533 T(vlan_l3l4csum,                        0, 0, 0, 0, 1, 0, 1,    6,      \
534                 VLAN_F | L3L4CSUM_F)                                    \
535 T(vlan_ol3ol4csum,                      0, 0, 0, 0, 1, 1, 0,    6,      \
536                 VLAN_F | OL3OL4CSUM_F)                                  \
537 T(vlan_ol3ol4csum_l3l4csum,             0, 0, 0, 0, 1, 1, 1,    6,      \
538                 VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)                     \
539 T(noff,                                 0, 0, 0, 1, 0, 0, 0,    4,      \
540                 NOFF_F)                                                 \
541 T(noff_l3l4csum,                        0, 0, 0, 1, 0, 0, 1,    4,      \
542                 NOFF_F | L3L4CSUM_F)                                    \
543 T(noff_ol3ol4csum,                      0, 0, 0, 1, 0, 1, 0,    4,      \
544                 NOFF_F | OL3OL4CSUM_F)                                  \
545 T(noff_ol3ol4csum_l3l4csum,             0, 0, 0, 1, 0, 1, 1,    4,      \
546                 NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)                     \
547 T(noff_vlan,                            0, 0, 0, 1, 1, 0, 0,    6,      \
548                 NOFF_F | VLAN_F)                                        \
549 T(noff_vlan_l3l4csum,                   0, 0, 0, 1, 1, 0, 1,    6,      \
550                 NOFF_F | VLAN_F | L3L4CSUM_F)                           \
551 T(noff_vlan_ol3ol4csum,                 0, 0, 0, 1, 1, 1, 0,    6,      \
552                 NOFF_F | VLAN_F | OL3OL4CSUM_F)                         \
553 T(noff_vlan_ol3ol4csum_l3l4csum,        0, 0, 0, 1, 1, 1, 1,    6,      \
554                 NOFF_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)            \
555 T(ts,                                   0, 0, 1, 0, 0, 0, 0,    8,      \
556                 TSP_F)                                                  \
557 T(ts_l3l4csum,                          0, 0, 1, 0, 0, 0, 1,    8,      \
558                 TSP_F | L3L4CSUM_F)                                     \
559 T(ts_ol3ol4csum,                        0, 0, 1, 0, 0, 1, 0,    8,      \
560                 TSP_F | OL3OL4CSUM_F)                                   \
561 T(ts_ol3ol4csum_l3l4csum,               0, 0, 1, 0, 0, 1, 1,    8,      \
562                 TSP_F | OL3OL4CSUM_F | L3L4CSUM_F)                      \
563 T(ts_vlan,                              0, 0, 1, 0, 1, 0, 0,    8,      \
564                 TSP_F | VLAN_F)                                         \
565 T(ts_vlan_l3l4csum,                     0, 0, 1, 0, 1, 0, 1,    8,      \
566                 TSP_F | VLAN_F | L3L4CSUM_F)                            \
567 T(ts_vlan_ol3ol4csum,                   0, 0, 1, 0, 1, 1, 0,    8,      \
568                 TSP_F | VLAN_F | OL3OL4CSUM_F)                          \
569 T(ts_vlan_ol3ol4csum_l3l4csum,          0, 0, 1, 0, 1, 1, 1,    8,      \
570                 TSP_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)             \
571 T(ts_noff,                              0, 0, 1, 1, 0, 0, 0,    8,      \
572                 TSP_F | NOFF_F)                                         \
573 T(ts_noff_l3l4csum,                     0, 0, 1, 1, 0, 0, 1,    8,      \
574                 TSP_F | NOFF_F | L3L4CSUM_F)                            \
575 T(ts_noff_ol3ol4csum,                   0, 0, 1, 1, 0, 1, 0,    8,      \
576                 TSP_F | NOFF_F | OL3OL4CSUM_F)                          \
577 T(ts_noff_ol3ol4csum_l3l4csum,          0, 0, 1, 1, 0, 1, 1,    8,      \
578                 TSP_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)             \
579 T(ts_noff_vlan,                         0, 0, 1, 1, 1, 0, 0,    8,      \
580                 TSP_F | NOFF_F | VLAN_F)                                \
581 T(ts_noff_vlan_l3l4csum,                0, 0, 1, 1, 1, 0, 1,    8,      \
582                 TSP_F | NOFF_F | VLAN_F | L3L4CSUM_F)                   \
583 T(ts_noff_vlan_ol3ol4csum,              0, 0, 1, 1, 1, 1, 0,    8,      \
584                 TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F)                 \
585 T(ts_noff_vlan_ol3ol4csum_l3l4csum,     0, 0, 1, 1, 1, 1, 1,    8,      \
586                 TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)    \
587                                                                         \
588 T(tso,                                  0, 1, 0, 0, 0, 0, 0,    6,      \
589                 TSO_F)                                                  \
590 T(tso_l3l4csum,                         0, 1, 0, 0, 0, 0, 1,    6,      \
591                 TSO_F | L3L4CSUM_F)                                     \
592 T(tso_ol3ol4csum,                       0, 1, 0, 0, 0, 1, 0,    6,      \
593                 TSO_F | OL3OL4CSUM_F)                                   \
594 T(tso_ol3ol4csum_l3l4csum,              0, 1, 0, 0, 0, 1, 1,    6,      \
595                 TSO_F | OL3OL4CSUM_F | L3L4CSUM_F)                      \
596 T(tso_vlan,                             0, 1, 0, 0, 1, 0, 0,    6,      \
597                 TSO_F | VLAN_F)                                         \
598 T(tso_vlan_l3l4csum,                    0, 1, 0, 0, 1, 0, 1,    6,      \
599                 TSO_F | VLAN_F | L3L4CSUM_F)                            \
600 T(tso_vlan_ol3ol4csum,                  0, 1, 0, 0, 1, 1, 0,    6,      \
601                 TSO_F | VLAN_F | OL3OL4CSUM_F)                          \
602 T(tso_vlan_ol3ol4csum_l3l4csum,         0, 1, 0, 0, 1, 1, 1,    6,      \
603                 TSO_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)             \
604 T(tso_noff,                             0, 1, 0, 1, 0, 0, 0,    6,      \
605                 TSO_F | NOFF_F)                                         \
606 T(tso_noff_l3l4csum,                    0, 1, 0, 1, 0, 0, 1,    6,      \
607                 TSO_F | NOFF_F | L3L4CSUM_F)                            \
608 T(tso_noff_ol3ol4csum,                  0, 1, 0, 1, 0, 1, 0,    6,      \
609                 TSO_F | NOFF_F | OL3OL4CSUM_F)                          \
610 T(tso_noff_ol3ol4csum_l3l4csum,         0, 1, 0, 1, 0, 1, 1,    6,      \
611                 TSO_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)             \
612 T(tso_noff_vlan,                        0, 1, 0, 1, 1, 0, 0,    6,      \
613                 TSO_F | NOFF_F | VLAN_F)                                \
614 T(tso_noff_vlan_l3l4csum,               0, 1, 0, 1, 1, 0, 1,    6,      \
615                 TSO_F | NOFF_F | VLAN_F | L3L4CSUM_F)                   \
616 T(tso_noff_vlan_ol3ol4csum,             0, 1, 0, 1, 1, 1, 0,    6,      \
617                 TSO_F | NOFF_F | VLAN_F | OL3OL4CSUM_F)                 \
618 T(tso_noff_vlan_ol3ol4csum_l3l4csum,    0, 1, 0, 1, 1, 1, 1,    6,      \
619                 TSO_F | NOFF_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)    \
620 T(tso_ts,                               0, 1, 1, 0, 0, 0, 0,    8,      \
621                 TSO_F | TSP_F)                                          \
622 T(tso_ts_l3l4csum,                      0, 1, 1, 0, 0, 0, 1,    8,      \
623                 TSO_F | TSP_F | L3L4CSUM_F)                             \
624 T(tso_ts_ol3ol4csum,                    0, 1, 1, 0, 0, 1, 0,    8,      \
625                 TSO_F | TSP_F | OL3OL4CSUM_F)                           \
626 T(tso_ts_ol3ol4csum_l3l4csum,           0, 1, 1, 0, 0, 1, 1,    8,      \
627                 TSO_F | TSP_F | OL3OL4CSUM_F | L3L4CSUM_F)              \
628 T(tso_ts_vlan,                          0, 1, 1, 0, 1, 0, 0,    8,      \
629                 TSO_F | TSP_F | VLAN_F)                                 \
630 T(tso_ts_vlan_l3l4csum,                 0, 1, 1, 0, 1, 0, 1,    8,      \
631                 TSO_F | TSP_F | VLAN_F | L3L4CSUM_F)                    \
632 T(tso_ts_vlan_ol3ol4csum,               0, 1, 1, 0, 1, 1, 0,    8,      \
633                 TSO_F | TSP_F | VLAN_F | OL3OL4CSUM_F)                  \
634 T(tso_ts_vlan_ol3ol4csum_l3l4csum,      0, 1, 1, 0, 1, 1, 1,    8,      \
635                 TSO_F | TSP_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)     \
636 T(tso_ts_noff,                          0, 1, 1, 1, 0, 0, 0,    8,      \
637                 TSO_F | TSP_F | NOFF_F)                                 \
638 T(tso_ts_noff_l3l4csum,                 0, 1, 1, 1, 0, 0, 1,    8,      \
639                 TSO_F | TSP_F | NOFF_F | L3L4CSUM_F)                    \
640 T(tso_ts_noff_ol3ol4csum,               0, 1, 1, 1, 0, 1, 0,    8,      \
641                 TSO_F | TSP_F | NOFF_F | OL3OL4CSUM_F)                  \
642 T(tso_ts_noff_ol3ol4csum_l3l4csum,      0, 1, 1, 1, 0, 1, 1,    8,      \
643                 TSO_F | TSP_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)     \
644 T(tso_ts_noff_vlan,                     0, 1, 1, 1, 1, 0, 0,    8,      \
645                 TSO_F | TSP_F | NOFF_F | VLAN_F)                        \
646 T(tso_ts_noff_vlan_l3l4csum,            0, 1, 1, 1, 1, 0, 1,    8,      \
647                 TSO_F | TSP_F | NOFF_F | VLAN_F | L3L4CSUM_F)           \
648 T(tso_ts_noff_vlan_ol3ol4csum,          0, 1, 1, 1, 1, 1, 0,    8,      \
649                 TSO_F | TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F)         \
650 T(tso_ts_noff_vlan_ol3ol4csum_l3l4csum, 0, 1, 1, 1, 1, 1, 1,    8,      \
651                 TSO_F | TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F |        \
652                 L3L4CSUM_F)                                             \
653 T(sec,                                  1, 0, 0, 0, 0, 0, 0,    8,      \
654                 TX_SEC_F)                                               \
655 T(sec_l3l4csum,                         1, 0, 0, 0, 0, 0, 1,    8,      \
656                 TX_SEC_F | L3L4CSUM_F)                                  \
657 T(sec_ol3ol4csum,                       1, 0, 0, 0, 0, 1, 0,    8,      \
658                 TX_SEC_F | OL3OL4CSUM_F)                                \
659 T(sec_ol3ol4csum_l3l4csum,              1, 0, 0, 0, 0, 1, 1,    8,      \
660                 TX_SEC_F | OL3OL4CSUM_F | L3L4CSUM_F)                   \
661 T(sec_vlan,                             1, 0, 0, 0, 1, 0, 0,    8,      \
662                 TX_SEC_F | VLAN_F)                                      \
663 T(sec_vlan_l3l4csum,                    1, 0, 0, 0, 1, 0, 1,    8,      \
664                 TX_SEC_F | VLAN_F | L3L4CSUM_F)                         \
665 T(sec_vlan_ol3ol4csum,                  1, 0, 0, 0, 1, 1, 0,    8,      \
666                 TX_SEC_F | VLAN_F | OL3OL4CSUM_F)                       \
667 T(sec_vlan_ol3ol4csum_l3l4csum,         1, 0, 0, 0, 1, 1, 1,    8,      \
668                 TX_SEC_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)          \
669 T(sec_noff,                             1, 0, 0, 1, 0, 0, 0,    8,      \
670                 TX_SEC_F | NOFF_F)                                      \
671 T(sec_noff_l3l4csum,                    1, 0, 0, 1, 0, 0, 1,    8,      \
672                 TX_SEC_F | NOFF_F | L3L4CSUM_F)                         \
673 T(sec_noff_ol3ol4csum,                  1, 0, 0, 1, 0, 1, 0,    8,      \
674                 TX_SEC_F | NOFF_F | OL3OL4CSUM_F)                       \
675 T(sec_noff_ol3ol4csum_l3l4csum,         1, 0, 0, 1, 0, 1, 1,    8,      \
676                 TX_SEC_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)          \
677 T(sec_noff_vlan,                        1, 0, 0, 1, 1, 0, 0,    8,      \
678                 TX_SEC_F | NOFF_F | VLAN_F)                             \
679 T(sec_noff_vlan_l3l4csum,               1, 0, 0, 1, 1, 0, 1,    8,      \
680                 TX_SEC_F | NOFF_F | VLAN_F | L3L4CSUM_F)                \
681 T(sec_noff_vlan_ol3ol4csum,             1, 0, 0, 1, 1, 1, 0,    8,      \
682                 TX_SEC_F | NOFF_F | VLAN_F | OL3OL4CSUM_F)              \
683 T(sec_noff_vlan_ol3ol4csum_l3l4csum,    1, 0, 0, 1, 1, 1, 1,    8,      \
684                 TX_SEC_F | NOFF_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F) \
685 T(sec_ts,                               1, 0, 1, 0, 0, 0, 0,    8,      \
686                 TX_SEC_F | TSP_F)                                       \
687 T(sec_ts_l3l4csum,                      1, 0, 1, 0, 0, 0, 1,    8,      \
688                 TX_SEC_F | TSP_F | L3L4CSUM_F)                          \
689 T(sec_ts_ol3ol4csum,                    1, 0, 1, 0, 0, 1, 0,    8,      \
690                 TX_SEC_F | TSP_F | OL3OL4CSUM_F)                        \
691 T(sec_ts_ol3ol4csum_l3l4csum,           1, 0, 1, 0, 0, 1, 1,    8,      \
692                 TX_SEC_F | TSP_F | OL3OL4CSUM_F | L3L4CSUM_F)           \
693 T(sec_ts_vlan,                          1, 0, 1, 0, 1, 0, 0,    8,      \
694                 TX_SEC_F | TSP_F | VLAN_F)                              \
695 T(sec_ts_vlan_l3l4csum,                 1, 0, 1, 0, 1, 0, 1,    8,      \
696                 TX_SEC_F | TSP_F | VLAN_F | L3L4CSUM_F)                 \
697 T(sec_ts_vlan_ol3ol4csum,               1, 0, 1, 0, 1, 1, 0,    8,      \
698                 TX_SEC_F | TSP_F | VLAN_F | OL3OL4CSUM_F)               \
699 T(sec_ts_vlan_ol3ol4csum_l3l4csum,      1, 0, 1, 0, 1, 1, 1,    8,      \
700                 TX_SEC_F | TSP_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)  \
701 T(sec_ts_noff,                          1, 0, 1, 1, 0, 0, 0,    8,      \
702                 TX_SEC_F | TSP_F | NOFF_F)                              \
703 T(sec_ts_noff_l3l4csum,                 1, 0, 1, 1, 0, 0, 1,    8,      \
704                 TX_SEC_F | TSP_F | NOFF_F | L3L4CSUM_F)                 \
705 T(sec_ts_noff_ol3ol4csum,               1, 0, 1, 1, 0, 1, 0,    8,      \
706                 TX_SEC_F | TSP_F | NOFF_F | OL3OL4CSUM_F)               \
707 T(sec_ts_noff_ol3ol4csum_l3l4csum,      1, 0, 1, 1, 0, 1, 1,    8,      \
708                 TX_SEC_F | TSP_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)  \
709 T(sec_ts_noff_vlan,                     1, 0, 1, 1, 1, 0, 0,    8,      \
710                 TX_SEC_F | TSP_F | NOFF_F | VLAN_F)                     \
711 T(sec_ts_noff_vlan_l3l4csum,            1, 0, 1, 1, 1, 0, 1,    8,      \
712                 TX_SEC_F | TSP_F | NOFF_F | VLAN_F | L3L4CSUM_F)        \
713 T(sec_ts_noff_vlan_ol3ol4csum,          1, 0, 1, 1, 1, 1, 0,    8,      \
714                 TX_SEC_F | TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F)      \
715 T(sec_ts_noff_vlan_ol3ol4csum_l3l4csum, 1, 0, 1, 1, 1, 1, 1,    8,      \
716                 TX_SEC_F | TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F |     \
717                 L3L4CSUM_F)                                             \
718 T(sec_tso,                              1, 1, 0, 0, 0, 0, 0,    8,      \
719                 TX_SEC_F | TSO_F)                                       \
720 T(sec_tso_l3l4csum,                     1, 1, 0, 0, 0, 0, 1,    8,      \
721                 TX_SEC_F | TSO_F | L3L4CSUM_F)                          \
722 T(sec_tso_ol3ol4csum,                   1, 1, 0, 0, 0, 1, 0,    8,      \
723                 TX_SEC_F | TSO_F | OL3OL4CSUM_F)                        \
724 T(sec_tso_ol3ol4csum_l3l4csum,          1, 1, 0, 0, 0, 1, 1,    8,      \
725                 TX_SEC_F | TSO_F | OL3OL4CSUM_F | L3L4CSUM_F)           \
726 T(sec_tso_vlan,                         1, 1, 0, 0, 1, 0, 0,    8,      \
727                 TX_SEC_F | TSO_F | VLAN_F)                              \
728 T(sec_tso_vlan_l3l4csum,                1, 1, 0, 0, 1, 0, 1,    8,      \
729                 TX_SEC_F | TSO_F | VLAN_F | L3L4CSUM_F)                 \
730 T(sec_tso_vlan_ol3ol4csum,              1, 1, 0, 0, 1, 1, 0,    8,      \
731                 TX_SEC_F | TSO_F | VLAN_F | OL3OL4CSUM_F)               \
732 T(sec_tso_vlan_ol3ol4csum_l3l4csum,     1, 1, 0, 0, 1, 1, 1,    8,      \
733                 TX_SEC_F | TSO_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)  \
734 T(sec_tso_noff,                         1, 1, 0, 1, 0, 0, 0,    8,      \
735                 TX_SEC_F | TSO_F | NOFF_F)                              \
736 T(sec_tso_noff_l3l4csum,                1, 1, 0, 1, 0, 0, 1,    8,      \
737                 TX_SEC_F | TSO_F | NOFF_F | L3L4CSUM_F)                 \
738 T(sec_tso_noff_ol3ol4csum,              1, 1, 0, 1, 0, 1, 0,    8,      \
739                 TX_SEC_F | TSO_F | NOFF_F | OL3OL4CSUM_F)               \
740 T(sec_tso_noff_ol3ol4csum_l3l4csum,     1, 1, 0, 1, 0, 1, 1,    8,      \
741                 TX_SEC_F | TSO_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)  \
742 T(sec_tso_noff_vlan,                    1, 1, 0, 1, 1, 0, 0,    8,      \
743                 TX_SEC_F | TSO_F | NOFF_F | VLAN_F)                     \
744 T(sec_tso_noff_vlan_l3l4csum,           1, 1, 0, 1, 1, 0, 1,    8,      \
745                 TX_SEC_F | TSO_F | NOFF_F | VLAN_F | L3L4CSUM_F)        \
746 T(sec_tso_noff_vlan_ol3ol4csum,         1, 1, 0, 1, 1, 1, 0,    8,      \
747                 TX_SEC_F | TSO_F | NOFF_F | VLAN_F | OL3OL4CSUM_F)      \
748 T(sec_tso_noff_vlan_ol3ol4csum_l3l4csum,                                \
749                                         1, 1, 0, 1, 1, 1, 1,    8,      \
750                 TX_SEC_F | TSO_F | NOFF_F | VLAN_F | OL3OL4CSUM_F |     \
751                 L3L4CSUM_F)                                             \
752 T(sec_tso_ts,                           1, 1, 1, 0, 0, 0, 0,    8,      \
753                 TX_SEC_F | TSO_F | TSP_F)                               \
754 T(sec_tso_ts_l3l4csum,                  1, 1, 1, 0, 0, 0, 1,    8,      \
755                 TX_SEC_F | TSO_F | TSP_F | L3L4CSUM_F)                  \
756 T(sec_tso_ts_ol3ol4csum,                1, 1, 1, 0, 0, 1, 0,    8,      \
757                 TX_SEC_F | TSO_F | TSP_F | OL3OL4CSUM_F)                \
758 T(sec_tso_ts_ol3ol4csum_l3l4csum,       1, 1, 1, 0, 0, 1, 1,    8,      \
759                 TX_SEC_F | TSO_F | TSP_F | OL3OL4CSUM_F | L3L4CSUM_F)   \
760 T(sec_tso_ts_vlan,                      1, 1, 1, 0, 1, 0, 0,    8,      \
761                 TX_SEC_F | TSO_F | TSP_F | VLAN_F)                      \
762 T(sec_tso_ts_vlan_l3l4csum,             1, 1, 1, 0, 1, 0, 1,    8,      \
763                 TX_SEC_F | TSO_F | TSP_F | VLAN_F | L3L4CSUM_F)         \
764 T(sec_tso_ts_vlan_ol3ol4csum,           1, 1, 1, 0, 1, 1, 0,    8,      \
765                 TX_SEC_F | TSO_F | TSP_F | VLAN_F | OL3OL4CSUM_F)       \
766 T(sec_tso_ts_vlan_ol3ol4csum_l3l4csum,  1, 1, 1, 0, 1, 1, 1,    8,      \
767                 TX_SEC_F | TSO_F | TSP_F | VLAN_F | OL3OL4CSUM_F |      \
768                 L3L4CSUM_F)                                             \
769 T(sec_tso_ts_noff,                      1, 1, 1, 1, 0, 0, 0,    8,      \
770                 TX_SEC_F | TSO_F | TSP_F | NOFF_F)                      \
771 T(sec_tso_ts_noff_l3l4csum,             1, 1, 1, 1, 0, 0, 1,    8,      \
772                 TX_SEC_F | TSO_F | TSP_F | NOFF_F | L3L4CSUM_F)         \
773 T(sec_tso_ts_noff_ol3ol4csum,           1, 1, 1, 1, 0, 1, 0,    8,      \
774                 TX_SEC_F | TSO_F | TSP_F | NOFF_F | OL3OL4CSUM_F)       \
775 T(sec_tso_ts_noff_ol3ol4csum_l3l4csum,  1, 1, 1, 1, 0, 1, 1,    8,      \
776                 TX_SEC_F | TSO_F | TSP_F | NOFF_F | OL3OL4CSUM_F |      \
777                 L3L4CSUM_F)                                             \
778 T(sec_tso_ts_noff_vlan,                 1, 1, 1, 1, 1, 0, 0,    8,      \
779                 TX_SEC_F | TSO_F | TSP_F | NOFF_F | VLAN_F)             \
780 T(sec_tso_ts_noff_vlan_l3l4csum,        1, 1, 1, 1, 1, 0, 1,    8,      \
781                 TX_SEC_F | TSO_F | TSP_F | NOFF_F | VLAN_F | L3L4CSUM_F)\
782 T(sec_tso_ts_noff_vlan_ol3ol4csum,      1, 1, 1, 1, 1, 1, 0,    8,      \
783                 TX_SEC_F | TSO_F | TSP_F | NOFF_F | VLAN_F |            \
784                 OL3OL4CSUM_F)                                           \
785 T(sec_tso_ts_noff_vlan_ol3ol4csum_l3l4csum,                             \
786                                         1, 1, 1, 1, 1, 1, 1,    8,      \
787                 TX_SEC_F | TSO_F | TSP_F | NOFF_F | VLAN_F |            \
788                 OL3OL4CSUM_F | L3L4CSUM_F)
789 #endif /* __OTX2_TX_H__ */