devtools: add cocci script to rename mbuf offload flags
[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                       const uint64_t lso_tun_fmt)
202 {
203         struct nix_send_ext_s *send_hdr_ext;
204         struct nix_send_hdr_s *send_hdr;
205         uint64_t ol_flags = 0, mask;
206         union nix_send_hdr_w1_u w1;
207         union nix_send_sg_s *sg;
208
209         send_hdr = (struct nix_send_hdr_s *)cmd;
210         if (flags & NIX_TX_NEED_EXT_HDR) {
211                 send_hdr_ext = (struct nix_send_ext_s *)(cmd + 2);
212                 sg = (union nix_send_sg_s *)(cmd + 4);
213                 /* Clear previous markings */
214                 send_hdr_ext->w0.lso = 0;
215                 send_hdr_ext->w1.u = 0;
216         } else {
217                 sg = (union nix_send_sg_s *)(cmd + 2);
218         }
219
220         if (flags & NIX_TX_NEED_SEND_HDR_W1) {
221                 ol_flags = m->ol_flags;
222                 w1.u = 0;
223         }
224
225         if (!(flags & NIX_TX_MULTI_SEG_F)) {
226                 send_hdr->w0.total = m->data_len;
227                 send_hdr->w0.aura =
228                         npa_lf_aura_handle_to_aura(m->pool->pool_id);
229         }
230
231         /*
232          * L3type:  2 => IPV4
233          *          3 => IPV4 with csum
234          *          4 => IPV6
235          * L3type and L3ptr needs to be set for either
236          * L3 csum or L4 csum or LSO
237          *
238          */
239
240         if ((flags & NIX_TX_OFFLOAD_OL3_OL4_CSUM_F) &&
241             (flags & NIX_TX_OFFLOAD_L3_L4_CSUM_F)) {
242                 const uint8_t csum = !!(ol_flags & PKT_TX_OUTER_UDP_CKSUM);
243                 const uint8_t ol3type =
244                         ((!!(ol_flags & PKT_TX_OUTER_IPV4)) << 1) +
245                         ((!!(ol_flags & PKT_TX_OUTER_IPV6)) << 2) +
246                         !!(ol_flags & PKT_TX_OUTER_IP_CKSUM);
247
248                 /* Outer L3 */
249                 w1.ol3type = ol3type;
250                 mask = 0xffffull << ((!!ol3type) << 4);
251                 w1.ol3ptr = ~mask & m->outer_l2_len;
252                 w1.ol4ptr = ~mask & (w1.ol3ptr + m->outer_l3_len);
253
254                 /* Outer L4 */
255                 w1.ol4type = csum + (csum << 1);
256
257                 /* Inner L3 */
258                 w1.il3type = ((!!(ol_flags & PKT_TX_IPV4)) << 1) +
259                         ((!!(ol_flags & PKT_TX_IPV6)) << 2);
260                 w1.il3ptr = w1.ol4ptr + m->l2_len;
261                 w1.il4ptr = w1.il3ptr + m->l3_len;
262                 /* Increment it by 1 if it is IPV4 as 3 is with csum */
263                 w1.il3type = w1.il3type + !!(ol_flags & PKT_TX_IP_CKSUM);
264
265                 /* Inner L4 */
266                 w1.il4type =  (ol_flags & PKT_TX_L4_MASK) >> 52;
267
268                 /* In case of no tunnel header use only
269                  * shift IL3/IL4 fields a bit to use
270                  * OL3/OL4 for header checksum
271                  */
272                 mask = !ol3type;
273                 w1.u = ((w1.u & 0xFFFFFFFF00000000) >> (mask << 3)) |
274                         ((w1.u & 0X00000000FFFFFFFF) >> (mask << 4));
275
276         } else if (flags & NIX_TX_OFFLOAD_OL3_OL4_CSUM_F) {
277                 const uint8_t csum = !!(ol_flags & PKT_TX_OUTER_UDP_CKSUM);
278                 const uint8_t outer_l2_len = m->outer_l2_len;
279
280                 /* Outer L3 */
281                 w1.ol3ptr = outer_l2_len;
282                 w1.ol4ptr = outer_l2_len + m->outer_l3_len;
283                 /* Increment it by 1 if it is IPV4 as 3 is with csum */
284                 w1.ol3type = ((!!(ol_flags & PKT_TX_OUTER_IPV4)) << 1) +
285                         ((!!(ol_flags & PKT_TX_OUTER_IPV6)) << 2) +
286                         !!(ol_flags & PKT_TX_OUTER_IP_CKSUM);
287
288                 /* Outer L4 */
289                 w1.ol4type = csum + (csum << 1);
290
291         } else if (flags & NIX_TX_OFFLOAD_L3_L4_CSUM_F) {
292                 const uint8_t l2_len = m->l2_len;
293
294                 /* Always use OLXPTR and OLXTYPE when only
295                  * when one header is present
296                  */
297
298                 /* Inner L3 */
299                 w1.ol3ptr = l2_len;
300                 w1.ol4ptr = l2_len + m->l3_len;
301                 /* Increment it by 1 if it is IPV4 as 3 is with csum */
302                 w1.ol3type = ((!!(ol_flags & PKT_TX_IPV4)) << 1) +
303                         ((!!(ol_flags & PKT_TX_IPV6)) << 2) +
304                         !!(ol_flags & PKT_TX_IP_CKSUM);
305
306                 /* Inner L4 */
307                 w1.ol4type =  (ol_flags & PKT_TX_L4_MASK) >> 52;
308         }
309
310         if (flags & NIX_TX_NEED_EXT_HDR &&
311             flags & NIX_TX_OFFLOAD_VLAN_QINQ_F) {
312                 send_hdr_ext->w1.vlan1_ins_ena = !!(ol_flags & PKT_TX_VLAN);
313                 /* HW will update ptr after vlan0 update */
314                 send_hdr_ext->w1.vlan1_ins_ptr = 12;
315                 send_hdr_ext->w1.vlan1_ins_tci = m->vlan_tci;
316
317                 send_hdr_ext->w1.vlan0_ins_ena = !!(ol_flags & PKT_TX_QINQ);
318                 /* 2B before end of l2 header */
319                 send_hdr_ext->w1.vlan0_ins_ptr = 12;
320                 send_hdr_ext->w1.vlan0_ins_tci = m->vlan_tci_outer;
321         }
322
323         if (flags & NIX_TX_OFFLOAD_TSO_F &&
324             (ol_flags & PKT_TX_TCP_SEG)) {
325                 uint16_t lso_sb;
326                 uint64_t mask;
327
328                 mask = -(!w1.il3type);
329                 lso_sb = (mask & w1.ol4ptr) + (~mask & w1.il4ptr) + m->l4_len;
330
331                 send_hdr_ext->w0.lso_sb = lso_sb;
332                 send_hdr_ext->w0.lso = 1;
333                 send_hdr_ext->w0.lso_mps = m->tso_segsz;
334                 send_hdr_ext->w0.lso_format =
335                         NIX_LSO_FORMAT_IDX_TSOV4 + !!(ol_flags & PKT_TX_IPV6);
336                 w1.ol4type = NIX_SENDL4TYPE_TCP_CKSUM;
337
338                 /* Handle tunnel tso */
339                 if ((flags & NIX_TX_OFFLOAD_OL3_OL4_CSUM_F) &&
340                     (ol_flags & PKT_TX_TUNNEL_MASK)) {
341                         const uint8_t is_udp_tun = (NIX_UDP_TUN_BITMASK >>
342                                 ((ol_flags & PKT_TX_TUNNEL_MASK) >> 45)) & 0x1;
343                         uint8_t shift = is_udp_tun ? 32 : 0;
344
345                         shift += (!!(ol_flags & PKT_TX_OUTER_IPV6) << 4);
346                         shift += (!!(ol_flags & PKT_TX_IPV6) << 3);
347
348                         w1.il4type = NIX_SENDL4TYPE_TCP_CKSUM;
349                         w1.ol4type = is_udp_tun ? NIX_SENDL4TYPE_UDP_CKSUM : 0;
350                         /* Update format for UDP tunneled packet */
351                         send_hdr_ext->w0.lso_format = (lso_tun_fmt >> shift);
352                 }
353         }
354
355         if (flags & NIX_TX_NEED_SEND_HDR_W1)
356                 send_hdr->w1.u = w1.u;
357
358         if (!(flags & NIX_TX_MULTI_SEG_F)) {
359                 sg->seg1_size = m->data_len;
360                 *(rte_iova_t *)(++sg) = rte_mbuf_data_iova(m);
361
362                 if (flags & NIX_TX_OFFLOAD_MBUF_NOFF_F) {
363                         /* DF bit = 1 if refcount of current mbuf or parent mbuf
364                          *              is greater than 1
365                          * DF bit = 0 otherwise
366                          */
367                         send_hdr->w0.df = otx2_nix_prefree_seg(m);
368                         /* Ensuring mbuf fields which got updated in
369                          * otx2_nix_prefree_seg are written before LMTST.
370                          */
371                         rte_io_wmb();
372                 }
373                 /* Mark mempool object as "put" since it is freed by NIX */
374                 if (!send_hdr->w0.df)
375                         RTE_MEMPOOL_CHECK_COOKIES(m->pool, (void **)&m, 1, 0);
376         }
377 }
378
379
380 static __rte_always_inline void
381 otx2_nix_xmit_one(uint64_t *cmd, void *lmt_addr,
382                   const rte_iova_t io_addr, const uint32_t flags)
383 {
384         uint64_t lmt_status;
385
386         do {
387                 otx2_lmt_mov(lmt_addr, cmd, otx2_nix_tx_ext_subs(flags));
388                 lmt_status = otx2_lmt_submit(io_addr);
389         } while (lmt_status == 0);
390 }
391
392 static __rte_always_inline void
393 otx2_nix_xmit_prep_lmt(uint64_t *cmd, void *lmt_addr, const uint32_t flags)
394 {
395         otx2_lmt_mov(lmt_addr, cmd, otx2_nix_tx_ext_subs(flags));
396 }
397
398 static __rte_always_inline uint64_t
399 otx2_nix_xmit_submit_lmt(const rte_iova_t io_addr)
400 {
401         return otx2_lmt_submit(io_addr);
402 }
403
404 static __rte_always_inline uint64_t
405 otx2_nix_xmit_submit_lmt_release(const rte_iova_t io_addr)
406 {
407         return otx2_lmt_submit_release(io_addr);
408 }
409
410 static __rte_always_inline uint16_t
411 otx2_nix_prepare_mseg(struct rte_mbuf *m, uint64_t *cmd, const uint16_t flags)
412 {
413         struct nix_send_hdr_s *send_hdr;
414         union nix_send_sg_s *sg;
415         struct rte_mbuf *m_next;
416         uint64_t *slist, sg_u;
417         uint64_t nb_segs;
418         uint64_t segdw;
419         uint8_t off, i;
420
421         send_hdr = (struct nix_send_hdr_s *)cmd;
422         send_hdr->w0.total = m->pkt_len;
423         send_hdr->w0.aura = npa_lf_aura_handle_to_aura(m->pool->pool_id);
424
425         if (flags & NIX_TX_NEED_EXT_HDR)
426                 off = 2;
427         else
428                 off = 0;
429
430         sg = (union nix_send_sg_s *)&cmd[2 + off];
431         /* Clear sg->u header before use */
432         sg->u &= 0xFC00000000000000;
433         sg_u = sg->u;
434         slist = &cmd[3 + off];
435
436         i = 0;
437         nb_segs = m->nb_segs;
438
439         /* Fill mbuf segments */
440         do {
441                 m_next = m->next;
442                 sg_u = sg_u | ((uint64_t)m->data_len << (i << 4));
443                 *slist = rte_mbuf_data_iova(m);
444                 /* Set invert df if buffer is not to be freed by H/W */
445                 if (flags & NIX_TX_OFFLOAD_MBUF_NOFF_F) {
446                         sg_u |= (otx2_nix_prefree_seg(m) << (i + 55));
447                         /* Commit changes to mbuf */
448                         rte_io_wmb();
449                 }
450                 /* Mark mempool object as "put" since it is freed by NIX */
451 #ifdef RTE_LIBRTE_MEMPOOL_DEBUG
452                 if (!(sg_u & (1ULL << (i + 55))))
453                         RTE_MEMPOOL_CHECK_COOKIES(m->pool, (void **)&m, 1, 0);
454                 rte_io_wmb();
455 #endif
456                 slist++;
457                 i++;
458                 nb_segs--;
459                 if (i > 2 && nb_segs) {
460                         i = 0;
461                         /* Next SG subdesc */
462                         *(uint64_t *)slist = sg_u & 0xFC00000000000000;
463                         sg->u = sg_u;
464                         sg->segs = 3;
465                         sg = (union nix_send_sg_s *)slist;
466                         sg_u = sg->u;
467                         slist++;
468                 }
469                 m = m_next;
470         } while (nb_segs);
471
472         sg->u = sg_u;
473         sg->segs = i;
474         segdw = (uint64_t *)slist - (uint64_t *)&cmd[2 + off];
475         /* Roundup extra dwords to multiple of 2 */
476         segdw = (segdw >> 1) + (segdw & 0x1);
477         /* Default dwords */
478         segdw += (off >> 1) + 1 + !!(flags & NIX_TX_OFFLOAD_TSTAMP_F);
479         send_hdr->w0.sizem1 = segdw - 1;
480
481         return segdw;
482 }
483
484 static __rte_always_inline void
485 otx2_nix_xmit_mseg_prep_lmt(uint64_t *cmd, void *lmt_addr, uint16_t segdw)
486 {
487         otx2_lmt_mov_seg(lmt_addr, (const void *)cmd, segdw);
488 }
489
490 static __rte_always_inline void
491 otx2_nix_xmit_mseg_one(uint64_t *cmd, void *lmt_addr,
492                        rte_iova_t io_addr, uint16_t segdw)
493 {
494         uint64_t lmt_status;
495
496         do {
497                 otx2_lmt_mov_seg(lmt_addr, (const void *)cmd, segdw);
498                 lmt_status = otx2_lmt_submit(io_addr);
499         } while (lmt_status == 0);
500 }
501
502 static __rte_always_inline void
503 otx2_nix_xmit_mseg_one_release(uint64_t *cmd, void *lmt_addr,
504                        rte_iova_t io_addr, uint16_t segdw)
505 {
506         uint64_t lmt_status;
507
508         rte_io_wmb();
509         do {
510                 otx2_lmt_mov_seg(lmt_addr, (const void *)cmd, segdw);
511                 lmt_status = otx2_lmt_submit(io_addr);
512         } while (lmt_status == 0);
513 }
514
515 #define L3L4CSUM_F   NIX_TX_OFFLOAD_L3_L4_CSUM_F
516 #define OL3OL4CSUM_F NIX_TX_OFFLOAD_OL3_OL4_CSUM_F
517 #define VLAN_F       NIX_TX_OFFLOAD_VLAN_QINQ_F
518 #define NOFF_F       NIX_TX_OFFLOAD_MBUF_NOFF_F
519 #define TSP_F        NIX_TX_OFFLOAD_TSTAMP_F
520 #define TSO_F        NIX_TX_OFFLOAD_TSO_F
521 #define TX_SEC_F     NIX_TX_OFFLOAD_SECURITY_F
522
523 /* [SEC] [TSO] [TSTMP] [NOFF] [VLAN] [OL3OL4CSUM] [L3L4CSUM] */
524 #define NIX_TX_FASTPATH_MODES                                           \
525 T(no_offload,                           0, 0, 0, 0, 0, 0, 0,    4,      \
526                 NIX_TX_OFFLOAD_NONE)                                    \
527 T(l3l4csum,                             0, 0, 0, 0, 0, 0, 1,    4,      \
528                 L3L4CSUM_F)                                             \
529 T(ol3ol4csum,                           0, 0, 0, 0, 0, 1, 0,    4,      \
530                 OL3OL4CSUM_F)                                           \
531 T(ol3ol4csum_l3l4csum,                  0, 0, 0, 0, 0, 1, 1,    4,      \
532                 OL3OL4CSUM_F | L3L4CSUM_F)                              \
533 T(vlan,                                 0, 0, 0, 0, 1, 0, 0,    6,      \
534                 VLAN_F)                                                 \
535 T(vlan_l3l4csum,                        0, 0, 0, 0, 1, 0, 1,    6,      \
536                 VLAN_F | L3L4CSUM_F)                                    \
537 T(vlan_ol3ol4csum,                      0, 0, 0, 0, 1, 1, 0,    6,      \
538                 VLAN_F | OL3OL4CSUM_F)                                  \
539 T(vlan_ol3ol4csum_l3l4csum,             0, 0, 0, 0, 1, 1, 1,    6,      \
540                 VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)                     \
541 T(noff,                                 0, 0, 0, 1, 0, 0, 0,    4,      \
542                 NOFF_F)                                                 \
543 T(noff_l3l4csum,                        0, 0, 0, 1, 0, 0, 1,    4,      \
544                 NOFF_F | L3L4CSUM_F)                                    \
545 T(noff_ol3ol4csum,                      0, 0, 0, 1, 0, 1, 0,    4,      \
546                 NOFF_F | OL3OL4CSUM_F)                                  \
547 T(noff_ol3ol4csum_l3l4csum,             0, 0, 0, 1, 0, 1, 1,    4,      \
548                 NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)                     \
549 T(noff_vlan,                            0, 0, 0, 1, 1, 0, 0,    6,      \
550                 NOFF_F | VLAN_F)                                        \
551 T(noff_vlan_l3l4csum,                   0, 0, 0, 1, 1, 0, 1,    6,      \
552                 NOFF_F | VLAN_F | L3L4CSUM_F)                           \
553 T(noff_vlan_ol3ol4csum,                 0, 0, 0, 1, 1, 1, 0,    6,      \
554                 NOFF_F | VLAN_F | OL3OL4CSUM_F)                         \
555 T(noff_vlan_ol3ol4csum_l3l4csum,        0, 0, 0, 1, 1, 1, 1,    6,      \
556                 NOFF_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)            \
557 T(ts,                                   0, 0, 1, 0, 0, 0, 0,    8,      \
558                 TSP_F)                                                  \
559 T(ts_l3l4csum,                          0, 0, 1, 0, 0, 0, 1,    8,      \
560                 TSP_F | L3L4CSUM_F)                                     \
561 T(ts_ol3ol4csum,                        0, 0, 1, 0, 0, 1, 0,    8,      \
562                 TSP_F | OL3OL4CSUM_F)                                   \
563 T(ts_ol3ol4csum_l3l4csum,               0, 0, 1, 0, 0, 1, 1,    8,      \
564                 TSP_F | OL3OL4CSUM_F | L3L4CSUM_F)                      \
565 T(ts_vlan,                              0, 0, 1, 0, 1, 0, 0,    8,      \
566                 TSP_F | VLAN_F)                                         \
567 T(ts_vlan_l3l4csum,                     0, 0, 1, 0, 1, 0, 1,    8,      \
568                 TSP_F | VLAN_F | L3L4CSUM_F)                            \
569 T(ts_vlan_ol3ol4csum,                   0, 0, 1, 0, 1, 1, 0,    8,      \
570                 TSP_F | VLAN_F | OL3OL4CSUM_F)                          \
571 T(ts_vlan_ol3ol4csum_l3l4csum,          0, 0, 1, 0, 1, 1, 1,    8,      \
572                 TSP_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)             \
573 T(ts_noff,                              0, 0, 1, 1, 0, 0, 0,    8,      \
574                 TSP_F | NOFF_F)                                         \
575 T(ts_noff_l3l4csum,                     0, 0, 1, 1, 0, 0, 1,    8,      \
576                 TSP_F | NOFF_F | L3L4CSUM_F)                            \
577 T(ts_noff_ol3ol4csum,                   0, 0, 1, 1, 0, 1, 0,    8,      \
578                 TSP_F | NOFF_F | OL3OL4CSUM_F)                          \
579 T(ts_noff_ol3ol4csum_l3l4csum,          0, 0, 1, 1, 0, 1, 1,    8,      \
580                 TSP_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)             \
581 T(ts_noff_vlan,                         0, 0, 1, 1, 1, 0, 0,    8,      \
582                 TSP_F | NOFF_F | VLAN_F)                                \
583 T(ts_noff_vlan_l3l4csum,                0, 0, 1, 1, 1, 0, 1,    8,      \
584                 TSP_F | NOFF_F | VLAN_F | L3L4CSUM_F)                   \
585 T(ts_noff_vlan_ol3ol4csum,              0, 0, 1, 1, 1, 1, 0,    8,      \
586                 TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F)                 \
587 T(ts_noff_vlan_ol3ol4csum_l3l4csum,     0, 0, 1, 1, 1, 1, 1,    8,      \
588                 TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)    \
589                                                                         \
590 T(tso,                                  0, 1, 0, 0, 0, 0, 0,    6,      \
591                 TSO_F)                                                  \
592 T(tso_l3l4csum,                         0, 1, 0, 0, 0, 0, 1,    6,      \
593                 TSO_F | L3L4CSUM_F)                                     \
594 T(tso_ol3ol4csum,                       0, 1, 0, 0, 0, 1, 0,    6,      \
595                 TSO_F | OL3OL4CSUM_F)                                   \
596 T(tso_ol3ol4csum_l3l4csum,              0, 1, 0, 0, 0, 1, 1,    6,      \
597                 TSO_F | OL3OL4CSUM_F | L3L4CSUM_F)                      \
598 T(tso_vlan,                             0, 1, 0, 0, 1, 0, 0,    6,      \
599                 TSO_F | VLAN_F)                                         \
600 T(tso_vlan_l3l4csum,                    0, 1, 0, 0, 1, 0, 1,    6,      \
601                 TSO_F | VLAN_F | L3L4CSUM_F)                            \
602 T(tso_vlan_ol3ol4csum,                  0, 1, 0, 0, 1, 1, 0,    6,      \
603                 TSO_F | VLAN_F | OL3OL4CSUM_F)                          \
604 T(tso_vlan_ol3ol4csum_l3l4csum,         0, 1, 0, 0, 1, 1, 1,    6,      \
605                 TSO_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)             \
606 T(tso_noff,                             0, 1, 0, 1, 0, 0, 0,    6,      \
607                 TSO_F | NOFF_F)                                         \
608 T(tso_noff_l3l4csum,                    0, 1, 0, 1, 0, 0, 1,    6,      \
609                 TSO_F | NOFF_F | L3L4CSUM_F)                            \
610 T(tso_noff_ol3ol4csum,                  0, 1, 0, 1, 0, 1, 0,    6,      \
611                 TSO_F | NOFF_F | OL3OL4CSUM_F)                          \
612 T(tso_noff_ol3ol4csum_l3l4csum,         0, 1, 0, 1, 0, 1, 1,    6,      \
613                 TSO_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)             \
614 T(tso_noff_vlan,                        0, 1, 0, 1, 1, 0, 0,    6,      \
615                 TSO_F | NOFF_F | VLAN_F)                                \
616 T(tso_noff_vlan_l3l4csum,               0, 1, 0, 1, 1, 0, 1,    6,      \
617                 TSO_F | NOFF_F | VLAN_F | L3L4CSUM_F)                   \
618 T(tso_noff_vlan_ol3ol4csum,             0, 1, 0, 1, 1, 1, 0,    6,      \
619                 TSO_F | NOFF_F | VLAN_F | OL3OL4CSUM_F)                 \
620 T(tso_noff_vlan_ol3ol4csum_l3l4csum,    0, 1, 0, 1, 1, 1, 1,    6,      \
621                 TSO_F | NOFF_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)    \
622 T(tso_ts,                               0, 1, 1, 0, 0, 0, 0,    8,      \
623                 TSO_F | TSP_F)                                          \
624 T(tso_ts_l3l4csum,                      0, 1, 1, 0, 0, 0, 1,    8,      \
625                 TSO_F | TSP_F | L3L4CSUM_F)                             \
626 T(tso_ts_ol3ol4csum,                    0, 1, 1, 0, 0, 1, 0,    8,      \
627                 TSO_F | TSP_F | OL3OL4CSUM_F)                           \
628 T(tso_ts_ol3ol4csum_l3l4csum,           0, 1, 1, 0, 0, 1, 1,    8,      \
629                 TSO_F | TSP_F | OL3OL4CSUM_F | L3L4CSUM_F)              \
630 T(tso_ts_vlan,                          0, 1, 1, 0, 1, 0, 0,    8,      \
631                 TSO_F | TSP_F | VLAN_F)                                 \
632 T(tso_ts_vlan_l3l4csum,                 0, 1, 1, 0, 1, 0, 1,    8,      \
633                 TSO_F | TSP_F | VLAN_F | L3L4CSUM_F)                    \
634 T(tso_ts_vlan_ol3ol4csum,               0, 1, 1, 0, 1, 1, 0,    8,      \
635                 TSO_F | TSP_F | VLAN_F | OL3OL4CSUM_F)                  \
636 T(tso_ts_vlan_ol3ol4csum_l3l4csum,      0, 1, 1, 0, 1, 1, 1,    8,      \
637                 TSO_F | TSP_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)     \
638 T(tso_ts_noff,                          0, 1, 1, 1, 0, 0, 0,    8,      \
639                 TSO_F | TSP_F | NOFF_F)                                 \
640 T(tso_ts_noff_l3l4csum,                 0, 1, 1, 1, 0, 0, 1,    8,      \
641                 TSO_F | TSP_F | NOFF_F | L3L4CSUM_F)                    \
642 T(tso_ts_noff_ol3ol4csum,               0, 1, 1, 1, 0, 1, 0,    8,      \
643                 TSO_F | TSP_F | NOFF_F | OL3OL4CSUM_F)                  \
644 T(tso_ts_noff_ol3ol4csum_l3l4csum,      0, 1, 1, 1, 0, 1, 1,    8,      \
645                 TSO_F | TSP_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)     \
646 T(tso_ts_noff_vlan,                     0, 1, 1, 1, 1, 0, 0,    8,      \
647                 TSO_F | TSP_F | NOFF_F | VLAN_F)                        \
648 T(tso_ts_noff_vlan_l3l4csum,            0, 1, 1, 1, 1, 0, 1,    8,      \
649                 TSO_F | TSP_F | NOFF_F | VLAN_F | L3L4CSUM_F)           \
650 T(tso_ts_noff_vlan_ol3ol4csum,          0, 1, 1, 1, 1, 1, 0,    8,      \
651                 TSO_F | TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F)         \
652 T(tso_ts_noff_vlan_ol3ol4csum_l3l4csum, 0, 1, 1, 1, 1, 1, 1,    8,      \
653                 TSO_F | TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F |        \
654                 L3L4CSUM_F)                                             \
655 T(sec,                                  1, 0, 0, 0, 0, 0, 0,    8,      \
656                 TX_SEC_F)                                               \
657 T(sec_l3l4csum,                         1, 0, 0, 0, 0, 0, 1,    8,      \
658                 TX_SEC_F | L3L4CSUM_F)                                  \
659 T(sec_ol3ol4csum,                       1, 0, 0, 0, 0, 1, 0,    8,      \
660                 TX_SEC_F | OL3OL4CSUM_F)                                \
661 T(sec_ol3ol4csum_l3l4csum,              1, 0, 0, 0, 0, 1, 1,    8,      \
662                 TX_SEC_F | OL3OL4CSUM_F | L3L4CSUM_F)                   \
663 T(sec_vlan,                             1, 0, 0, 0, 1, 0, 0,    8,      \
664                 TX_SEC_F | VLAN_F)                                      \
665 T(sec_vlan_l3l4csum,                    1, 0, 0, 0, 1, 0, 1,    8,      \
666                 TX_SEC_F | VLAN_F | L3L4CSUM_F)                         \
667 T(sec_vlan_ol3ol4csum,                  1, 0, 0, 0, 1, 1, 0,    8,      \
668                 TX_SEC_F | VLAN_F | OL3OL4CSUM_F)                       \
669 T(sec_vlan_ol3ol4csum_l3l4csum,         1, 0, 0, 0, 1, 1, 1,    8,      \
670                 TX_SEC_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)          \
671 T(sec_noff,                             1, 0, 0, 1, 0, 0, 0,    8,      \
672                 TX_SEC_F | NOFF_F)                                      \
673 T(sec_noff_l3l4csum,                    1, 0, 0, 1, 0, 0, 1,    8,      \
674                 TX_SEC_F | NOFF_F | L3L4CSUM_F)                         \
675 T(sec_noff_ol3ol4csum,                  1, 0, 0, 1, 0, 1, 0,    8,      \
676                 TX_SEC_F | NOFF_F | OL3OL4CSUM_F)                       \
677 T(sec_noff_ol3ol4csum_l3l4csum,         1, 0, 0, 1, 0, 1, 1,    8,      \
678                 TX_SEC_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)          \
679 T(sec_noff_vlan,                        1, 0, 0, 1, 1, 0, 0,    8,      \
680                 TX_SEC_F | NOFF_F | VLAN_F)                             \
681 T(sec_noff_vlan_l3l4csum,               1, 0, 0, 1, 1, 0, 1,    8,      \
682                 TX_SEC_F | NOFF_F | VLAN_F | L3L4CSUM_F)                \
683 T(sec_noff_vlan_ol3ol4csum,             1, 0, 0, 1, 1, 1, 0,    8,      \
684                 TX_SEC_F | NOFF_F | VLAN_F | OL3OL4CSUM_F)              \
685 T(sec_noff_vlan_ol3ol4csum_l3l4csum,    1, 0, 0, 1, 1, 1, 1,    8,      \
686                 TX_SEC_F | NOFF_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F) \
687 T(sec_ts,                               1, 0, 1, 0, 0, 0, 0,    8,      \
688                 TX_SEC_F | TSP_F)                                       \
689 T(sec_ts_l3l4csum,                      1, 0, 1, 0, 0, 0, 1,    8,      \
690                 TX_SEC_F | TSP_F | L3L4CSUM_F)                          \
691 T(sec_ts_ol3ol4csum,                    1, 0, 1, 0, 0, 1, 0,    8,      \
692                 TX_SEC_F | TSP_F | OL3OL4CSUM_F)                        \
693 T(sec_ts_ol3ol4csum_l3l4csum,           1, 0, 1, 0, 0, 1, 1,    8,      \
694                 TX_SEC_F | TSP_F | OL3OL4CSUM_F | L3L4CSUM_F)           \
695 T(sec_ts_vlan,                          1, 0, 1, 0, 1, 0, 0,    8,      \
696                 TX_SEC_F | TSP_F | VLAN_F)                              \
697 T(sec_ts_vlan_l3l4csum,                 1, 0, 1, 0, 1, 0, 1,    8,      \
698                 TX_SEC_F | TSP_F | VLAN_F | L3L4CSUM_F)                 \
699 T(sec_ts_vlan_ol3ol4csum,               1, 0, 1, 0, 1, 1, 0,    8,      \
700                 TX_SEC_F | TSP_F | VLAN_F | OL3OL4CSUM_F)               \
701 T(sec_ts_vlan_ol3ol4csum_l3l4csum,      1, 0, 1, 0, 1, 1, 1,    8,      \
702                 TX_SEC_F | TSP_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)  \
703 T(sec_ts_noff,                          1, 0, 1, 1, 0, 0, 0,    8,      \
704                 TX_SEC_F | TSP_F | NOFF_F)                              \
705 T(sec_ts_noff_l3l4csum,                 1, 0, 1, 1, 0, 0, 1,    8,      \
706                 TX_SEC_F | TSP_F | NOFF_F | L3L4CSUM_F)                 \
707 T(sec_ts_noff_ol3ol4csum,               1, 0, 1, 1, 0, 1, 0,    8,      \
708                 TX_SEC_F | TSP_F | NOFF_F | OL3OL4CSUM_F)               \
709 T(sec_ts_noff_ol3ol4csum_l3l4csum,      1, 0, 1, 1, 0, 1, 1,    8,      \
710                 TX_SEC_F | TSP_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)  \
711 T(sec_ts_noff_vlan,                     1, 0, 1, 1, 1, 0, 0,    8,      \
712                 TX_SEC_F | TSP_F | NOFF_F | VLAN_F)                     \
713 T(sec_ts_noff_vlan_l3l4csum,            1, 0, 1, 1, 1, 0, 1,    8,      \
714                 TX_SEC_F | TSP_F | NOFF_F | VLAN_F | L3L4CSUM_F)        \
715 T(sec_ts_noff_vlan_ol3ol4csum,          1, 0, 1, 1, 1, 1, 0,    8,      \
716                 TX_SEC_F | TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F)      \
717 T(sec_ts_noff_vlan_ol3ol4csum_l3l4csum, 1, 0, 1, 1, 1, 1, 1,    8,      \
718                 TX_SEC_F | TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F |     \
719                 L3L4CSUM_F)                                             \
720 T(sec_tso,                              1, 1, 0, 0, 0, 0, 0,    8,      \
721                 TX_SEC_F | TSO_F)                                       \
722 T(sec_tso_l3l4csum,                     1, 1, 0, 0, 0, 0, 1,    8,      \
723                 TX_SEC_F | TSO_F | L3L4CSUM_F)                          \
724 T(sec_tso_ol3ol4csum,                   1, 1, 0, 0, 0, 1, 0,    8,      \
725                 TX_SEC_F | TSO_F | OL3OL4CSUM_F)                        \
726 T(sec_tso_ol3ol4csum_l3l4csum,          1, 1, 0, 0, 0, 1, 1,    8,      \
727                 TX_SEC_F | TSO_F | OL3OL4CSUM_F | L3L4CSUM_F)           \
728 T(sec_tso_vlan,                         1, 1, 0, 0, 1, 0, 0,    8,      \
729                 TX_SEC_F | TSO_F | VLAN_F)                              \
730 T(sec_tso_vlan_l3l4csum,                1, 1, 0, 0, 1, 0, 1,    8,      \
731                 TX_SEC_F | TSO_F | VLAN_F | L3L4CSUM_F)                 \
732 T(sec_tso_vlan_ol3ol4csum,              1, 1, 0, 0, 1, 1, 0,    8,      \
733                 TX_SEC_F | TSO_F | VLAN_F | OL3OL4CSUM_F)               \
734 T(sec_tso_vlan_ol3ol4csum_l3l4csum,     1, 1, 0, 0, 1, 1, 1,    8,      \
735                 TX_SEC_F | TSO_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)  \
736 T(sec_tso_noff,                         1, 1, 0, 1, 0, 0, 0,    8,      \
737                 TX_SEC_F | TSO_F | NOFF_F)                              \
738 T(sec_tso_noff_l3l4csum,                1, 1, 0, 1, 0, 0, 1,    8,      \
739                 TX_SEC_F | TSO_F | NOFF_F | L3L4CSUM_F)                 \
740 T(sec_tso_noff_ol3ol4csum,              1, 1, 0, 1, 0, 1, 0,    8,      \
741                 TX_SEC_F | TSO_F | NOFF_F | OL3OL4CSUM_F)               \
742 T(sec_tso_noff_ol3ol4csum_l3l4csum,     1, 1, 0, 1, 0, 1, 1,    8,      \
743                 TX_SEC_F | TSO_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)  \
744 T(sec_tso_noff_vlan,                    1, 1, 0, 1, 1, 0, 0,    8,      \
745                 TX_SEC_F | TSO_F | NOFF_F | VLAN_F)                     \
746 T(sec_tso_noff_vlan_l3l4csum,           1, 1, 0, 1, 1, 0, 1,    8,      \
747                 TX_SEC_F | TSO_F | NOFF_F | VLAN_F | L3L4CSUM_F)        \
748 T(sec_tso_noff_vlan_ol3ol4csum,         1, 1, 0, 1, 1, 1, 0,    8,      \
749                 TX_SEC_F | TSO_F | NOFF_F | VLAN_F | OL3OL4CSUM_F)      \
750 T(sec_tso_noff_vlan_ol3ol4csum_l3l4csum,                                \
751                                         1, 1, 0, 1, 1, 1, 1,    8,      \
752                 TX_SEC_F | TSO_F | NOFF_F | VLAN_F | OL3OL4CSUM_F |     \
753                 L3L4CSUM_F)                                             \
754 T(sec_tso_ts,                           1, 1, 1, 0, 0, 0, 0,    8,      \
755                 TX_SEC_F | TSO_F | TSP_F)                               \
756 T(sec_tso_ts_l3l4csum,                  1, 1, 1, 0, 0, 0, 1,    8,      \
757                 TX_SEC_F | TSO_F | TSP_F | L3L4CSUM_F)                  \
758 T(sec_tso_ts_ol3ol4csum,                1, 1, 1, 0, 0, 1, 0,    8,      \
759                 TX_SEC_F | TSO_F | TSP_F | OL3OL4CSUM_F)                \
760 T(sec_tso_ts_ol3ol4csum_l3l4csum,       1, 1, 1, 0, 0, 1, 1,    8,      \
761                 TX_SEC_F | TSO_F | TSP_F | OL3OL4CSUM_F | L3L4CSUM_F)   \
762 T(sec_tso_ts_vlan,                      1, 1, 1, 0, 1, 0, 0,    8,      \
763                 TX_SEC_F | TSO_F | TSP_F | VLAN_F)                      \
764 T(sec_tso_ts_vlan_l3l4csum,             1, 1, 1, 0, 1, 0, 1,    8,      \
765                 TX_SEC_F | TSO_F | TSP_F | VLAN_F | L3L4CSUM_F)         \
766 T(sec_tso_ts_vlan_ol3ol4csum,           1, 1, 1, 0, 1, 1, 0,    8,      \
767                 TX_SEC_F | TSO_F | TSP_F | VLAN_F | OL3OL4CSUM_F)       \
768 T(sec_tso_ts_vlan_ol3ol4csum_l3l4csum,  1, 1, 1, 0, 1, 1, 1,    8,      \
769                 TX_SEC_F | TSO_F | TSP_F | VLAN_F | OL3OL4CSUM_F |      \
770                 L3L4CSUM_F)                                             \
771 T(sec_tso_ts_noff,                      1, 1, 1, 1, 0, 0, 0,    8,      \
772                 TX_SEC_F | TSO_F | TSP_F | NOFF_F)                      \
773 T(sec_tso_ts_noff_l3l4csum,             1, 1, 1, 1, 0, 0, 1,    8,      \
774                 TX_SEC_F | TSO_F | TSP_F | NOFF_F | L3L4CSUM_F)         \
775 T(sec_tso_ts_noff_ol3ol4csum,           1, 1, 1, 1, 0, 1, 0,    8,      \
776                 TX_SEC_F | TSO_F | TSP_F | NOFF_F | OL3OL4CSUM_F)       \
777 T(sec_tso_ts_noff_ol3ol4csum_l3l4csum,  1, 1, 1, 1, 0, 1, 1,    8,      \
778                 TX_SEC_F | TSO_F | TSP_F | NOFF_F | OL3OL4CSUM_F |      \
779                 L3L4CSUM_F)                                             \
780 T(sec_tso_ts_noff_vlan,                 1, 1, 1, 1, 1, 0, 0,    8,      \
781                 TX_SEC_F | TSO_F | TSP_F | NOFF_F | VLAN_F)             \
782 T(sec_tso_ts_noff_vlan_l3l4csum,        1, 1, 1, 1, 1, 0, 1,    8,      \
783                 TX_SEC_F | TSO_F | TSP_F | NOFF_F | VLAN_F | L3L4CSUM_F)\
784 T(sec_tso_ts_noff_vlan_ol3ol4csum,      1, 1, 1, 1, 1, 1, 0,    8,      \
785                 TX_SEC_F | TSO_F | TSP_F | NOFF_F | VLAN_F |            \
786                 OL3OL4CSUM_F)                                           \
787 T(sec_tso_ts_noff_vlan_ol3ol4csum_l3l4csum,                             \
788                                         1, 1, 1, 1, 1, 1, 1,    8,      \
789                 TX_SEC_F | TSO_F | TSP_F | NOFF_F | VLAN_F |            \
790                 OL3OL4CSUM_F | L3L4CSUM_F)
791 #endif /* __OTX2_TX_H__ */