event/octeontx2: improve single flow performance
[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                 }
367                 /* Mark mempool object as "put" since it is freed by NIX */
368                 if (!send_hdr->w0.df)
369                         __mempool_check_cookies(m->pool, (void **)&m, 1, 0);
370         }
371 }
372
373
374 static __rte_always_inline void
375 otx2_nix_xmit_one(uint64_t *cmd, void *lmt_addr,
376                   const rte_iova_t io_addr, const uint32_t flags)
377 {
378         uint64_t lmt_status;
379
380         do {
381                 otx2_lmt_mov(lmt_addr, cmd, otx2_nix_tx_ext_subs(flags));
382                 lmt_status = otx2_lmt_submit(io_addr);
383         } while (lmt_status == 0);
384 }
385
386 static __rte_always_inline void
387 otx2_nix_xmit_prep_lmt(uint64_t *cmd, void *lmt_addr, const uint32_t flags)
388 {
389         otx2_lmt_mov(lmt_addr, cmd, otx2_nix_tx_ext_subs(flags));
390 }
391
392 static __rte_always_inline uint64_t
393 otx2_nix_xmit_submit_lmt(const rte_iova_t io_addr)
394 {
395         return otx2_lmt_submit(io_addr);
396 }
397
398 static __rte_always_inline uint16_t
399 otx2_nix_prepare_mseg(struct rte_mbuf *m, uint64_t *cmd, const uint16_t flags)
400 {
401         struct nix_send_hdr_s *send_hdr;
402         union nix_send_sg_s *sg;
403         struct rte_mbuf *m_next;
404         uint64_t *slist, sg_u;
405         uint64_t nb_segs;
406         uint64_t segdw;
407         uint8_t off, i;
408
409         send_hdr = (struct nix_send_hdr_s *)cmd;
410         send_hdr->w0.total = m->pkt_len;
411         send_hdr->w0.aura = npa_lf_aura_handle_to_aura(m->pool->pool_id);
412
413         if (flags & NIX_TX_NEED_EXT_HDR)
414                 off = 2;
415         else
416                 off = 0;
417
418         sg = (union nix_send_sg_s *)&cmd[2 + off];
419         /* Clear sg->u header before use */
420         sg->u &= 0xFC00000000000000;
421         sg_u = sg->u;
422         slist = &cmd[3 + off];
423
424         i = 0;
425         nb_segs = m->nb_segs;
426
427         /* Fill mbuf segments */
428         do {
429                 m_next = m->next;
430                 sg_u = sg_u | ((uint64_t)m->data_len << (i << 4));
431                 *slist = rte_mbuf_data_iova(m);
432                 /* Set invert df if buffer is not to be freed by H/W */
433                 if (flags & NIX_TX_OFFLOAD_MBUF_NOFF_F)
434                         sg_u |= (otx2_nix_prefree_seg(m) << (i + 55));
435                 /* Mark mempool object as "put" since it is freed by NIX */
436                 if (!(sg_u & (1ULL << (i + 55)))) {
437                         m->next = NULL;
438                         __mempool_check_cookies(m->pool, (void **)&m, 1, 0);
439                 }
440                 slist++;
441                 i++;
442                 nb_segs--;
443                 if (i > 2 && nb_segs) {
444                         i = 0;
445                         /* Next SG subdesc */
446                         *(uint64_t *)slist = sg_u & 0xFC00000000000000;
447                         sg->u = sg_u;
448                         sg->segs = 3;
449                         sg = (union nix_send_sg_s *)slist;
450                         sg_u = sg->u;
451                         slist++;
452                 }
453                 m = m_next;
454         } while (nb_segs);
455
456         sg->u = sg_u;
457         sg->segs = i;
458         segdw = (uint64_t *)slist - (uint64_t *)&cmd[2 + off];
459         /* Roundup extra dwords to multiple of 2 */
460         segdw = (segdw >> 1) + (segdw & 0x1);
461         /* Default dwords */
462         segdw += (off >> 1) + 1 + !!(flags & NIX_TX_OFFLOAD_TSTAMP_F);
463         send_hdr->w0.sizem1 = segdw - 1;
464
465         return segdw;
466 }
467
468 static __rte_always_inline void
469 otx2_nix_xmit_mseg_prep_lmt(uint64_t *cmd, void *lmt_addr, uint16_t segdw)
470 {
471         otx2_lmt_mov_seg(lmt_addr, (const void *)cmd, segdw);
472 }
473
474 static __rte_always_inline void
475 otx2_nix_xmit_mseg_one(uint64_t *cmd, void *lmt_addr,
476                        rte_iova_t io_addr, uint16_t segdw)
477 {
478         uint64_t lmt_status;
479
480         do {
481                 otx2_lmt_mov_seg(lmt_addr, (const void *)cmd, segdw);
482                 lmt_status = otx2_lmt_submit(io_addr);
483         } while (lmt_status == 0);
484 }
485
486 #define L3L4CSUM_F   NIX_TX_OFFLOAD_L3_L4_CSUM_F
487 #define OL3OL4CSUM_F NIX_TX_OFFLOAD_OL3_OL4_CSUM_F
488 #define VLAN_F       NIX_TX_OFFLOAD_VLAN_QINQ_F
489 #define NOFF_F       NIX_TX_OFFLOAD_MBUF_NOFF_F
490 #define TSP_F        NIX_TX_OFFLOAD_TSTAMP_F
491 #define TSO_F        NIX_TX_OFFLOAD_TSO_F
492 #define TX_SEC_F     NIX_TX_OFFLOAD_SECURITY_F
493
494 /* [SEC] [TSO] [TSTMP] [NOFF] [VLAN] [OL3OL4CSUM] [L3L4CSUM] */
495 #define NIX_TX_FASTPATH_MODES                                           \
496 T(no_offload,                           0, 0, 0, 0, 0, 0, 0,    4,      \
497                 NIX_TX_OFFLOAD_NONE)                                    \
498 T(l3l4csum,                             0, 0, 0, 0, 0, 0, 1,    4,      \
499                 L3L4CSUM_F)                                             \
500 T(ol3ol4csum,                           0, 0, 0, 0, 0, 1, 0,    4,      \
501                 OL3OL4CSUM_F)                                           \
502 T(ol3ol4csum_l3l4csum,                  0, 0, 0, 0, 0, 1, 1,    4,      \
503                 OL3OL4CSUM_F | L3L4CSUM_F)                              \
504 T(vlan,                                 0, 0, 0, 0, 1, 0, 0,    6,      \
505                 VLAN_F)                                                 \
506 T(vlan_l3l4csum,                        0, 0, 0, 0, 1, 0, 1,    6,      \
507                 VLAN_F | L3L4CSUM_F)                                    \
508 T(vlan_ol3ol4csum,                      0, 0, 0, 0, 1, 1, 0,    6,      \
509                 VLAN_F | OL3OL4CSUM_F)                                  \
510 T(vlan_ol3ol4csum_l3l4csum,             0, 0, 0, 0, 1, 1, 1,    6,      \
511                 VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)                     \
512 T(noff,                                 0, 0, 0, 1, 0, 0, 0,    4,      \
513                 NOFF_F)                                                 \
514 T(noff_l3l4csum,                        0, 0, 0, 1, 0, 0, 1,    4,      \
515                 NOFF_F | L3L4CSUM_F)                                    \
516 T(noff_ol3ol4csum,                      0, 0, 0, 1, 0, 1, 0,    4,      \
517                 NOFF_F | OL3OL4CSUM_F)                                  \
518 T(noff_ol3ol4csum_l3l4csum,             0, 0, 0, 1, 0, 1, 1,    4,      \
519                 NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)                     \
520 T(noff_vlan,                            0, 0, 0, 1, 1, 0, 0,    6,      \
521                 NOFF_F | VLAN_F)                                        \
522 T(noff_vlan_l3l4csum,                   0, 0, 0, 1, 1, 0, 1,    6,      \
523                 NOFF_F | VLAN_F | L3L4CSUM_F)                           \
524 T(noff_vlan_ol3ol4csum,                 0, 0, 0, 1, 1, 1, 0,    6,      \
525                 NOFF_F | VLAN_F | OL3OL4CSUM_F)                         \
526 T(noff_vlan_ol3ol4csum_l3l4csum,        0, 0, 0, 1, 1, 1, 1,    6,      \
527                 NOFF_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)            \
528 T(ts,                                   0, 0, 1, 0, 0, 0, 0,    8,      \
529                 TSP_F)                                                  \
530 T(ts_l3l4csum,                          0, 0, 1, 0, 0, 0, 1,    8,      \
531                 TSP_F | L3L4CSUM_F)                                     \
532 T(ts_ol3ol4csum,                        0, 0, 1, 0, 0, 1, 0,    8,      \
533                 TSP_F | OL3OL4CSUM_F)                                   \
534 T(ts_ol3ol4csum_l3l4csum,               0, 0, 1, 0, 0, 1, 1,    8,      \
535                 TSP_F | OL3OL4CSUM_F | L3L4CSUM_F)                      \
536 T(ts_vlan,                              0, 0, 1, 0, 1, 0, 0,    8,      \
537                 TSP_F | VLAN_F)                                         \
538 T(ts_vlan_l3l4csum,                     0, 0, 1, 0, 1, 0, 1,    8,      \
539                 TSP_F | VLAN_F | L3L4CSUM_F)                            \
540 T(ts_vlan_ol3ol4csum,                   0, 0, 1, 0, 1, 1, 0,    8,      \
541                 TSP_F | VLAN_F | OL3OL4CSUM_F)                          \
542 T(ts_vlan_ol3ol4csum_l3l4csum,          0, 0, 1, 0, 1, 1, 1,    8,      \
543                 TSP_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)             \
544 T(ts_noff,                              0, 0, 1, 1, 0, 0, 0,    8,      \
545                 TSP_F | NOFF_F)                                         \
546 T(ts_noff_l3l4csum,                     0, 0, 1, 1, 0, 0, 1,    8,      \
547                 TSP_F | NOFF_F | L3L4CSUM_F)                            \
548 T(ts_noff_ol3ol4csum,                   0, 0, 1, 1, 0, 1, 0,    8,      \
549                 TSP_F | NOFF_F | OL3OL4CSUM_F)                          \
550 T(ts_noff_ol3ol4csum_l3l4csum,          0, 0, 1, 1, 0, 1, 1,    8,      \
551                 TSP_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)             \
552 T(ts_noff_vlan,                         0, 0, 1, 1, 1, 0, 0,    8,      \
553                 TSP_F | NOFF_F | VLAN_F)                                \
554 T(ts_noff_vlan_l3l4csum,                0, 0, 1, 1, 1, 0, 1,    8,      \
555                 TSP_F | NOFF_F | VLAN_F | L3L4CSUM_F)                   \
556 T(ts_noff_vlan_ol3ol4csum,              0, 0, 1, 1, 1, 1, 0,    8,      \
557                 TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F)                 \
558 T(ts_noff_vlan_ol3ol4csum_l3l4csum,     0, 0, 1, 1, 1, 1, 1,    8,      \
559                 TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)    \
560                                                                         \
561 T(tso,                                  0, 1, 0, 0, 0, 0, 0,    6,      \
562                 TSO_F)                                                  \
563 T(tso_l3l4csum,                         0, 1, 0, 0, 0, 0, 1,    6,      \
564                 TSO_F | L3L4CSUM_F)                                     \
565 T(tso_ol3ol4csum,                       0, 1, 0, 0, 0, 1, 0,    6,      \
566                 TSO_F | OL3OL4CSUM_F)                                   \
567 T(tso_ol3ol4csum_l3l4csum,              0, 1, 0, 0, 0, 1, 1,    6,      \
568                 TSO_F | OL3OL4CSUM_F | L3L4CSUM_F)                      \
569 T(tso_vlan,                             0, 1, 0, 0, 1, 0, 0,    6,      \
570                 TSO_F | VLAN_F)                                         \
571 T(tso_vlan_l3l4csum,                    0, 1, 0, 0, 1, 0, 1,    6,      \
572                 TSO_F | VLAN_F | L3L4CSUM_F)                            \
573 T(tso_vlan_ol3ol4csum,                  0, 1, 0, 0, 1, 1, 0,    6,      \
574                 TSO_F | VLAN_F | OL3OL4CSUM_F)                          \
575 T(tso_vlan_ol3ol4csum_l3l4csum,         0, 1, 0, 0, 1, 1, 1,    6,      \
576                 TSO_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)             \
577 T(tso_noff,                             0, 1, 0, 1, 0, 0, 0,    6,      \
578                 TSO_F | NOFF_F)                                         \
579 T(tso_noff_l3l4csum,                    0, 1, 0, 1, 0, 0, 1,    6,      \
580                 TSO_F | NOFF_F | L3L4CSUM_F)                            \
581 T(tso_noff_ol3ol4csum,                  0, 1, 0, 1, 0, 1, 0,    6,      \
582                 TSO_F | NOFF_F | OL3OL4CSUM_F)                          \
583 T(tso_noff_ol3ol4csum_l3l4csum,         0, 1, 0, 1, 0, 1, 1,    6,      \
584                 TSO_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)             \
585 T(tso_noff_vlan,                        0, 1, 0, 1, 1, 0, 0,    6,      \
586                 TSO_F | NOFF_F | VLAN_F)                                \
587 T(tso_noff_vlan_l3l4csum,               0, 1, 0, 1, 1, 0, 1,    6,      \
588                 TSO_F | NOFF_F | VLAN_F | L3L4CSUM_F)                   \
589 T(tso_noff_vlan_ol3ol4csum,             0, 1, 0, 1, 1, 1, 0,    6,      \
590                 TSO_F | NOFF_F | VLAN_F | OL3OL4CSUM_F)                 \
591 T(tso_noff_vlan_ol3ol4csum_l3l4csum,    0, 1, 0, 1, 1, 1, 1,    6,      \
592                 TSO_F | NOFF_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)    \
593 T(tso_ts,                               0, 1, 1, 0, 0, 0, 0,    8,      \
594                 TSO_F | TSP_F)                                          \
595 T(tso_ts_l3l4csum,                      0, 1, 1, 0, 0, 0, 1,    8,      \
596                 TSO_F | TSP_F | L3L4CSUM_F)                             \
597 T(tso_ts_ol3ol4csum,                    0, 1, 1, 0, 0, 1, 0,    8,      \
598                 TSO_F | TSP_F | OL3OL4CSUM_F)                           \
599 T(tso_ts_ol3ol4csum_l3l4csum,           0, 1, 1, 0, 0, 1, 1,    8,      \
600                 TSO_F | TSP_F | OL3OL4CSUM_F | L3L4CSUM_F)              \
601 T(tso_ts_vlan,                          0, 1, 1, 0, 1, 0, 0,    8,      \
602                 TSO_F | TSP_F | VLAN_F)                                 \
603 T(tso_ts_vlan_l3l4csum,                 0, 1, 1, 0, 1, 0, 1,    8,      \
604                 TSO_F | TSP_F | VLAN_F | L3L4CSUM_F)                    \
605 T(tso_ts_vlan_ol3ol4csum,               0, 1, 1, 0, 1, 1, 0,    8,      \
606                 TSO_F | TSP_F | VLAN_F | OL3OL4CSUM_F)                  \
607 T(tso_ts_vlan_ol3ol4csum_l3l4csum,      0, 1, 1, 0, 1, 1, 1,    8,      \
608                 TSO_F | TSP_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)     \
609 T(tso_ts_noff,                          0, 1, 1, 1, 0, 0, 0,    8,      \
610                 TSO_F | TSP_F | NOFF_F)                                 \
611 T(tso_ts_noff_l3l4csum,                 0, 1, 1, 1, 0, 0, 1,    8,      \
612                 TSO_F | TSP_F | NOFF_F | L3L4CSUM_F)                    \
613 T(tso_ts_noff_ol3ol4csum,               0, 1, 1, 1, 0, 1, 0,    8,      \
614                 TSO_F | TSP_F | NOFF_F | OL3OL4CSUM_F)                  \
615 T(tso_ts_noff_ol3ol4csum_l3l4csum,      0, 1, 1, 1, 0, 1, 1,    8,      \
616                 TSO_F | TSP_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)     \
617 T(tso_ts_noff_vlan,                     0, 1, 1, 1, 1, 0, 0,    8,      \
618                 TSO_F | TSP_F | NOFF_F | VLAN_F)                        \
619 T(tso_ts_noff_vlan_l3l4csum,            0, 1, 1, 1, 1, 0, 1,    8,      \
620                 TSO_F | TSP_F | NOFF_F | VLAN_F | L3L4CSUM_F)           \
621 T(tso_ts_noff_vlan_ol3ol4csum,          0, 1, 1, 1, 1, 1, 0,    8,      \
622                 TSO_F | TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F)         \
623 T(tso_ts_noff_vlan_ol3ol4csum_l3l4csum, 0, 1, 1, 1, 1, 1, 1,    8,      \
624                 TSO_F | TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F |        \
625                 L3L4CSUM_F)                                             \
626 T(sec,                                  1, 0, 0, 0, 0, 0, 0,    8,      \
627                 TX_SEC_F)                                               \
628 T(sec_l3l4csum,                         1, 0, 0, 0, 0, 0, 1,    8,      \
629                 TX_SEC_F | L3L4CSUM_F)                                  \
630 T(sec_ol3ol4csum,                       1, 0, 0, 0, 0, 1, 0,    8,      \
631                 TX_SEC_F | OL3OL4CSUM_F)                                \
632 T(sec_ol3ol4csum_l3l4csum,              1, 0, 0, 0, 0, 1, 1,    8,      \
633                 TX_SEC_F | OL3OL4CSUM_F | L3L4CSUM_F)                   \
634 T(sec_vlan,                             1, 0, 0, 0, 1, 0, 0,    8,      \
635                 TX_SEC_F | VLAN_F)                                      \
636 T(sec_vlan_l3l4csum,                    1, 0, 0, 0, 1, 0, 1,    8,      \
637                 TX_SEC_F | VLAN_F | L3L4CSUM_F)                         \
638 T(sec_vlan_ol3ol4csum,                  1, 0, 0, 0, 1, 1, 0,    8,      \
639                 TX_SEC_F | VLAN_F | OL3OL4CSUM_F)                       \
640 T(sec_vlan_ol3ol4csum_l3l4csum,         1, 0, 0, 0, 1, 1, 1,    8,      \
641                 TX_SEC_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)          \
642 T(sec_noff,                             1, 0, 0, 1, 0, 0, 0,    8,      \
643                 TX_SEC_F | NOFF_F)                                      \
644 T(sec_noff_l3l4csum,                    1, 0, 0, 1, 0, 0, 1,    8,      \
645                 TX_SEC_F | NOFF_F | L3L4CSUM_F)                         \
646 T(sec_noff_ol3ol4csum,                  1, 0, 0, 1, 0, 1, 0,    8,      \
647                 TX_SEC_F | NOFF_F | OL3OL4CSUM_F)                       \
648 T(sec_noff_ol3ol4csum_l3l4csum,         1, 0, 0, 1, 0, 1, 1,    8,      \
649                 TX_SEC_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)          \
650 T(sec_noff_vlan,                        1, 0, 0, 1, 1, 0, 0,    8,      \
651                 TX_SEC_F | NOFF_F | VLAN_F)                             \
652 T(sec_noff_vlan_l3l4csum,               1, 0, 0, 1, 1, 0, 1,    8,      \
653                 TX_SEC_F | NOFF_F | VLAN_F | L3L4CSUM_F)                \
654 T(sec_noff_vlan_ol3ol4csum,             1, 0, 0, 1, 1, 1, 0,    8,      \
655                 TX_SEC_F | NOFF_F | VLAN_F | OL3OL4CSUM_F)              \
656 T(sec_noff_vlan_ol3ol4csum_l3l4csum,    1, 0, 0, 1, 1, 1, 1,    8,      \
657                 TX_SEC_F | NOFF_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F) \
658 T(sec_ts,                               1, 0, 1, 0, 0, 0, 0,    8,      \
659                 TX_SEC_F | TSP_F)                                       \
660 T(sec_ts_l3l4csum,                      1, 0, 1, 0, 0, 0, 1,    8,      \
661                 TX_SEC_F | TSP_F | L3L4CSUM_F)                          \
662 T(sec_ts_ol3ol4csum,                    1, 0, 1, 0, 0, 1, 0,    8,      \
663                 TX_SEC_F | TSP_F | OL3OL4CSUM_F)                        \
664 T(sec_ts_ol3ol4csum_l3l4csum,           1, 0, 1, 0, 0, 1, 1,    8,      \
665                 TX_SEC_F | TSP_F | OL3OL4CSUM_F | L3L4CSUM_F)           \
666 T(sec_ts_vlan,                          1, 0, 1, 0, 1, 0, 0,    8,      \
667                 TX_SEC_F | TSP_F | VLAN_F)                              \
668 T(sec_ts_vlan_l3l4csum,                 1, 0, 1, 0, 1, 0, 1,    8,      \
669                 TX_SEC_F | TSP_F | VLAN_F | L3L4CSUM_F)                 \
670 T(sec_ts_vlan_ol3ol4csum,               1, 0, 1, 0, 1, 1, 0,    8,      \
671                 TX_SEC_F | TSP_F | VLAN_F | OL3OL4CSUM_F)               \
672 T(sec_ts_vlan_ol3ol4csum_l3l4csum,      1, 0, 1, 0, 1, 1, 1,    8,      \
673                 TX_SEC_F | TSP_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)  \
674 T(sec_ts_noff,                          1, 0, 1, 1, 0, 0, 0,    8,      \
675                 TX_SEC_F | TSP_F | NOFF_F)                              \
676 T(sec_ts_noff_l3l4csum,                 1, 0, 1, 1, 0, 0, 1,    8,      \
677                 TX_SEC_F | TSP_F | NOFF_F | L3L4CSUM_F)                 \
678 T(sec_ts_noff_ol3ol4csum,               1, 0, 1, 1, 0, 1, 0,    8,      \
679                 TX_SEC_F | TSP_F | NOFF_F | OL3OL4CSUM_F)               \
680 T(sec_ts_noff_ol3ol4csum_l3l4csum,      1, 0, 1, 1, 0, 1, 1,    8,      \
681                 TX_SEC_F | TSP_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)  \
682 T(sec_ts_noff_vlan,                     1, 0, 1, 1, 1, 0, 0,    8,      \
683                 TX_SEC_F | TSP_F | NOFF_F | VLAN_F)                     \
684 T(sec_ts_noff_vlan_l3l4csum,            1, 0, 1, 1, 1, 0, 1,    8,      \
685                 TX_SEC_F | TSP_F | NOFF_F | VLAN_F | L3L4CSUM_F)        \
686 T(sec_ts_noff_vlan_ol3ol4csum,          1, 0, 1, 1, 1, 1, 0,    8,      \
687                 TX_SEC_F | TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F)      \
688 T(sec_ts_noff_vlan_ol3ol4csum_l3l4csum, 1, 0, 1, 1, 1, 1, 1,    8,      \
689                 TX_SEC_F | TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F |     \
690                 L3L4CSUM_F)                                             \
691 T(sec_tso,                              1, 1, 0, 0, 0, 0, 0,    8,      \
692                 TX_SEC_F | TSO_F)                                       \
693 T(sec_tso_l3l4csum,                     1, 1, 0, 0, 0, 0, 1,    8,      \
694                 TX_SEC_F | TSO_F | L3L4CSUM_F)                          \
695 T(sec_tso_ol3ol4csum,                   1, 1, 0, 0, 0, 1, 0,    8,      \
696                 TX_SEC_F | TSO_F | OL3OL4CSUM_F)                        \
697 T(sec_tso_ol3ol4csum_l3l4csum,          1, 1, 0, 0, 0, 1, 1,    8,      \
698                 TX_SEC_F | TSO_F | OL3OL4CSUM_F | L3L4CSUM_F)           \
699 T(sec_tso_vlan,                         1, 1, 0, 0, 1, 0, 0,    8,      \
700                 TX_SEC_F | TSO_F | VLAN_F)                              \
701 T(sec_tso_vlan_l3l4csum,                1, 1, 0, 0, 1, 0, 1,    8,      \
702                 TX_SEC_F | TSO_F | VLAN_F | L3L4CSUM_F)                 \
703 T(sec_tso_vlan_ol3ol4csum,              1, 1, 0, 0, 1, 1, 0,    8,      \
704                 TX_SEC_F | TSO_F | VLAN_F | OL3OL4CSUM_F)               \
705 T(sec_tso_vlan_ol3ol4csum_l3l4csum,     1, 1, 0, 0, 1, 1, 1,    8,      \
706                 TX_SEC_F | TSO_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)  \
707 T(sec_tso_noff,                         1, 1, 0, 1, 0, 0, 0,    8,      \
708                 TX_SEC_F | TSO_F | NOFF_F)                              \
709 T(sec_tso_noff_l3l4csum,                1, 1, 0, 1, 0, 0, 1,    8,      \
710                 TX_SEC_F | TSO_F | NOFF_F | L3L4CSUM_F)                 \
711 T(sec_tso_noff_ol3ol4csum,              1, 1, 0, 1, 0, 1, 0,    8,      \
712                 TX_SEC_F | TSO_F | NOFF_F | OL3OL4CSUM_F)               \
713 T(sec_tso_noff_ol3ol4csum_l3l4csum,     1, 1, 0, 1, 0, 1, 1,    8,      \
714                 TX_SEC_F | TSO_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)  \
715 T(sec_tso_noff_vlan,                    1, 1, 0, 1, 1, 0, 0,    8,      \
716                 TX_SEC_F | TSO_F | NOFF_F | VLAN_F)                     \
717 T(sec_tso_noff_vlan_l3l4csum,           1, 1, 0, 1, 1, 0, 1,    8,      \
718                 TX_SEC_F | TSO_F | NOFF_F | VLAN_F | L3L4CSUM_F)        \
719 T(sec_tso_noff_vlan_ol3ol4csum,         1, 1, 0, 1, 1, 1, 0,    8,      \
720                 TX_SEC_F | TSO_F | NOFF_F | VLAN_F | OL3OL4CSUM_F)      \
721 T(sec_tso_noff_vlan_ol3ol4csum_l3l4csum,                                \
722                                         1, 1, 0, 1, 1, 1, 1,    8,      \
723                 TX_SEC_F | TSO_F | NOFF_F | VLAN_F | OL3OL4CSUM_F |     \
724                 L3L4CSUM_F)                                             \
725 T(sec_tso_ts,                           1, 1, 1, 0, 0, 0, 0,    8,      \
726                 TX_SEC_F | TSO_F | TSP_F)                               \
727 T(sec_tso_ts_l3l4csum,                  1, 1, 1, 0, 0, 0, 1,    8,      \
728                 TX_SEC_F | TSO_F | TSP_F | L3L4CSUM_F)                  \
729 T(sec_tso_ts_ol3ol4csum,                1, 1, 1, 0, 0, 1, 0,    8,      \
730                 TX_SEC_F | TSO_F | TSP_F | OL3OL4CSUM_F)                \
731 T(sec_tso_ts_ol3ol4csum_l3l4csum,       1, 1, 1, 0, 0, 1, 1,    8,      \
732                 TX_SEC_F | TSO_F | TSP_F | OL3OL4CSUM_F | L3L4CSUM_F)   \
733 T(sec_tso_ts_vlan,                      1, 1, 1, 0, 1, 0, 0,    8,      \
734                 TX_SEC_F | TSO_F | TSP_F | VLAN_F)                      \
735 T(sec_tso_ts_vlan_l3l4csum,             1, 1, 1, 0, 1, 0, 1,    8,      \
736                 TX_SEC_F | TSO_F | TSP_F | VLAN_F | L3L4CSUM_F)         \
737 T(sec_tso_ts_vlan_ol3ol4csum,           1, 1, 1, 0, 1, 1, 0,    8,      \
738                 TX_SEC_F | TSO_F | TSP_F | VLAN_F | OL3OL4CSUM_F)       \
739 T(sec_tso_ts_vlan_ol3ol4csum_l3l4csum,  1, 1, 1, 0, 1, 1, 1,    8,      \
740                 TX_SEC_F | TSO_F | TSP_F | VLAN_F | OL3OL4CSUM_F |      \
741                 L3L4CSUM_F)                                             \
742 T(sec_tso_ts_noff,                      1, 1, 1, 1, 0, 0, 0,    8,      \
743                 TX_SEC_F | TSO_F | TSP_F | NOFF_F)                      \
744 T(sec_tso_ts_noff_l3l4csum,             1, 1, 1, 1, 0, 0, 1,    8,      \
745                 TX_SEC_F | TSO_F | TSP_F | NOFF_F | L3L4CSUM_F)         \
746 T(sec_tso_ts_noff_ol3ol4csum,           1, 1, 1, 1, 0, 1, 0,    8,      \
747                 TX_SEC_F | TSO_F | TSP_F | NOFF_F | OL3OL4CSUM_F)       \
748 T(sec_tso_ts_noff_ol3ol4csum_l3l4csum,  1, 1, 1, 1, 0, 1, 1,    8,      \
749                 TX_SEC_F | TSO_F | TSP_F | NOFF_F | OL3OL4CSUM_F |      \
750                 L3L4CSUM_F)                                             \
751 T(sec_tso_ts_noff_vlan,                 1, 1, 1, 1, 1, 0, 0,    8,      \
752                 TX_SEC_F | TSO_F | TSP_F | NOFF_F | VLAN_F)             \
753 T(sec_tso_ts_noff_vlan_l3l4csum,        1, 1, 1, 1, 1, 0, 1,    8,      \
754                 TX_SEC_F | TSO_F | TSP_F | NOFF_F | VLAN_F | L3L4CSUM_F)\
755 T(sec_tso_ts_noff_vlan_ol3ol4csum,      1, 1, 1, 1, 1, 1, 0,    8,      \
756                 TX_SEC_F | TSO_F | TSP_F | NOFF_F | VLAN_F |            \
757                 OL3OL4CSUM_F)                                           \
758 T(sec_tso_ts_noff_vlan_ol3ol4csum_l3l4csum,                             \
759                                         1, 1, 1, 1, 1, 1, 1,    8,      \
760                 TX_SEC_F | TSO_F | TSP_F | NOFF_F | VLAN_F |            \
761                 OL3OL4CSUM_F | L3L4CSUM_F)
762 #endif /* __OTX2_TX_H__ */