From patchwork Fri Apr 17 07:22:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nithin Dabilpuram X-Patchwork-Id: 68735 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 11532A058A; Fri, 17 Apr 2020 09:23:48 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 2D6F11DD41; Fri, 17 Apr 2020 09:23:36 +0200 (CEST) Received: from mail-pf1-f181.google.com (mail-pf1-f181.google.com [209.85.210.181]) by dpdk.org (Postfix) with ESMTP id D9BEA1DCAE for ; Fri, 17 Apr 2020 09:23:33 +0200 (CEST) Received: by mail-pf1-f181.google.com with SMTP id d1so677959pfh.1 for ; Fri, 17 Apr 2020 00:23:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=XIf8Zz3Sm9uiCJyoDaKv81Q5Vx+RwjMwoL8/4dIT9Cw=; b=NijmYWhIFYvJT6Bw0svcbz/CXOJx8X1X8NzoOt9dzG8aMEvvCC9KYgVZbBswVh7pXc jZE93a1JWG9jylYNkM+6NttTO5UxDcyxcMRaM3yMSAw11m5YRBCWA9lHjxtnc7u8VR8o Lz5Ep689H4/cUnp4uT9epIFT0Tc6UdocIy2Sdz7IS0rI577bNdTDismVA9B2NyDly1ta W+MxnpIarP5RZVdsvCpH5az6mtZ8YlomS/g4l0RWE/a8zVROmAFOVgTfbuyNEi2hAhJo ZHOmHRBjkprMbKpUe6h/xxwZh8ksgBHoOJAFtO7TAXSfCerqTr6A5e6aDTm+9hEAcIQ7 M97Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=XIf8Zz3Sm9uiCJyoDaKv81Q5Vx+RwjMwoL8/4dIT9Cw=; b=ukBoFViDQqTOc2Vv9BpewZ8a9+mdBrsz5+dtvzZGUp1oyHgGkHC66kppomsZYy/evE TyLSvhTwAHUvkrOMVFNpDdIQDBk9wm9pU2fd0I5CiJV8TCjkQarRcKetzHL/JZoX2dW8 W4TsB96ESVs7PTgTQSDJ9OQNvc+lca3QASzYQ4cxAGy03+ISMnazIRShpQTenr/pWjAm WvR4xJBLqZELez+Jn2gu+R5l8TacU/x22OVg0VJYQ6MS0lyJDV7ontDZetkohshXC/ha aMw0+ZXdapPVqT8+LDRw6IMoY1EHh3u6uENOHsdYtowt+G2txQUzQu/eoU9YlXtkR3Ch e+zA== X-Gm-Message-State: AGi0PubCDmOsPjctEd1CF2XPL7DgHCynhbjkCEny0oEUsesSwe+yIHNJ VMxWG3o0WYtMhI+8B8KeonU= X-Google-Smtp-Source: APiQypIBL1tv5NZP5dRSvg64YIvcqvKLZh6Apq9rwgiweZIQHH9FaKpUyjr6tMoRxRuu2kEdH3tu4g== X-Received: by 2002:aa7:8f29:: with SMTP id y9mr1968947pfr.19.1587108212297; Fri, 17 Apr 2020 00:23:32 -0700 (PDT) Received: from hyd1588t430.marvell.com ([115.113.156.2]) by smtp.gmail.com with ESMTPSA id v4sm18750983pfb.31.2020.04.17.00.23.28 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 17 Apr 2020 00:23:31 -0700 (PDT) From: Nithin Dabilpuram To: thomas@monjalon.net, ferruh.yigit@intel.com, arybchenko@solarflare.com, orika@mellanox.com, cristian.dumitrescu@intel.com, anatoly.burakov@intel.com, Pavan Nikhilesh , Jerin Jacob , Nithin Dabilpuram , Kiran Kumar K Cc: dev@dpdk.org, kkanas@marvell.com Date: Fri, 17 Apr 2020 12:52:53 +0530 Message-Id: <20200417072254.11455-3-nithind1988@gmail.com> X-Mailer: git-send-email 2.8.4 In-Reply-To: <20200417072254.11455-1-nithind1988@gmail.com> References: <20200417072254.11455-1-nithind1988@gmail.com> Subject: [dpdk-dev] [PATCH 3/3] net/octeontx2: add Tx packet marking offload support X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Nithin Dabilpuram This patch adds Tx packet marking offload support for VLAN DEI, IP ECN, and IP DSCP. Signed-off-by: Krzysztof Kanas Signed-off-by: Nithin Dabilpuram --- Depends-on:series-9450 drivers/event/octeontx2/otx2_evdev.c | 28 +- drivers/event/octeontx2/otx2_evdev.h | 2 +- drivers/event/octeontx2/otx2_worker.c | 4 +- drivers/event/octeontx2/otx2_worker.h | 4 +- drivers/event/octeontx2/otx2_worker_dual.c | 4 +- drivers/net/octeontx2/otx2_tx.c | 48 ++- drivers/net/octeontx2/otx2_tx.h | 580 ++++++++++++++++++++++------- 7 files changed, 503 insertions(+), 167 deletions(-) diff --git a/drivers/event/octeontx2/otx2_evdev.c b/drivers/event/octeontx2/otx2_evdev.c index d20213d..33cba09 100644 --- a/drivers/event/octeontx2/otx2_evdev.c +++ b/drivers/event/octeontx2/otx2_evdev.c @@ -178,36 +178,36 @@ SSO_RX_ADPTR_ENQ_FASTPATH_FUNC /* Tx modes */ const event_tx_adapter_enqueue - ssogws_tx_adptr_enq[2][2][2][2][2][2][2] = { -#define T(name, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ - [f6][f5][f4][f3][f2][f1][f0] = \ + ssogws_tx_adptr_enq[2][2][2][2][2][2][2][2] = { +#define T(name, f7, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ + [f7][f6][f5][f4][f3][f2][f1][f0] = \ otx2_ssogws_tx_adptr_enq_ ## name, SSO_TX_ADPTR_ENQ_FASTPATH_FUNC #undef T }; const event_tx_adapter_enqueue - ssogws_tx_adptr_enq_seg[2][2][2][2][2][2][2] = { -#define T(name, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ - [f6][f5][f4][f3][f2][f1][f0] = \ + ssogws_tx_adptr_enq_seg[2][2][2][2][2][2][2][2] = { +#define T(name, f7, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ + [f7][f6][f5][f4][f3][f2][f1][f0] = \ otx2_ssogws_tx_adptr_enq_seg_ ## name, SSO_TX_ADPTR_ENQ_FASTPATH_FUNC #undef T }; const event_tx_adapter_enqueue - ssogws_dual_tx_adptr_enq[2][2][2][2][2][2][2] = { -#define T(name, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ - [f6][f5][f4][f3][f2][f1][f0] = \ + ssogws_dual_tx_adptr_enq[2][2][2][2][2][2][2][2] = { +#define T(name, f7, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ + [f7][f6][f5][f4][f3][f2][f1][f0] = \ otx2_ssogws_dual_tx_adptr_enq_ ## name, SSO_TX_ADPTR_ENQ_FASTPATH_FUNC #undef T }; const event_tx_adapter_enqueue - ssogws_dual_tx_adptr_enq_seg[2][2][2][2][2][2][2] = { -#define T(name, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ - [f6][f5][f4][f3][f2][f1][f0] = \ + ssogws_dual_tx_adptr_enq_seg[2][2][2][2][2][2][2][2] = { +#define T(name, f7, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ + [f7][f6][f5][f4][f3][f2][f1][f0] = \ otx2_ssogws_dual_tx_adptr_enq_seg_ ## name, SSO_TX_ADPTR_ENQ_FASTPATH_FUNC #undef T @@ -294,6 +294,7 @@ SSO_TX_ADPTR_ENQ_FASTPATH_FUNC if (dev->tx_offloads & NIX_TX_MULTI_SEG_F) { /* [SEC] [TSMP] [MBUF_NOFF] [VLAN] [OL3_L4_CSUM] [L3_L4_CSUM] */ event_dev->txa_enqueue = ssogws_tx_adptr_enq_seg + [!!(dev->tx_offloads & NIX_TX_OFFLOAD_MARK_F)] [!!(dev->tx_offloads & NIX_TX_OFFLOAD_SECURITY_F)] [!!(dev->tx_offloads & NIX_TX_OFFLOAD_TSO_F)] [!!(dev->tx_offloads & NIX_TX_OFFLOAD_TSTAMP_F)] @@ -303,6 +304,7 @@ SSO_TX_ADPTR_ENQ_FASTPATH_FUNC [!!(dev->tx_offloads & NIX_TX_OFFLOAD_L3_L4_CSUM_F)]; } else { event_dev->txa_enqueue = ssogws_tx_adptr_enq + [!!(dev->tx_offloads & NIX_TX_OFFLOAD_MARK_F)] [!!(dev->tx_offloads & NIX_TX_OFFLOAD_SECURITY_F)] [!!(dev->tx_offloads & NIX_TX_OFFLOAD_TSO_F)] [!!(dev->tx_offloads & NIX_TX_OFFLOAD_TSTAMP_F)] @@ -446,6 +448,7 @@ SSO_TX_ADPTR_ENQ_FASTPATH_FUNC if (dev->tx_offloads & NIX_TX_MULTI_SEG_F) { /* [SEC] [TSMP] [MBUF_NOFF] [VLAN] [OL3_L4_CSUM] [L3_L4_CSUM] */ event_dev->txa_enqueue = ssogws_dual_tx_adptr_enq_seg + [!!(dev->tx_offloads & NIX_TX_OFFLOAD_MARK_F)] [!!(dev->tx_offloads & NIX_TX_OFFLOAD_SECURITY_F)] [!!(dev->tx_offloads & NIX_TX_OFFLOAD_TSO_F)] @@ -460,6 +463,7 @@ SSO_TX_ADPTR_ENQ_FASTPATH_FUNC NIX_TX_OFFLOAD_L3_L4_CSUM_F)]; } else { event_dev->txa_enqueue = ssogws_dual_tx_adptr_enq + [!!(dev->tx_offloads & NIX_TX_OFFLOAD_MARK_F)] [!!(dev->tx_offloads & NIX_TX_OFFLOAD_SECURITY_F)] [!!(dev->tx_offloads & NIX_TX_OFFLOAD_TSO_F)] diff --git a/drivers/event/octeontx2/otx2_evdev.h b/drivers/event/octeontx2/otx2_evdev.h index 3b47782..73eee8f 100644 --- a/drivers/event/octeontx2/otx2_evdev.h +++ b/drivers/event/octeontx2/otx2_evdev.h @@ -335,7 +335,7 @@ uint16_t otx2_ssogws_dual_deq_seg_timeout_burst_ ##name(void *port, \ SSO_RX_ADPTR_ENQ_FASTPATH_FUNC #undef R -#define T(name, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ +#define T(name, f7, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ uint16_t otx2_ssogws_tx_adptr_enq_ ## name(void *port, struct rte_event ev[],\ uint16_t nb_events); \ uint16_t otx2_ssogws_tx_adptr_enq_seg_ ## name(void *port, \ diff --git a/drivers/event/octeontx2/otx2_worker.c b/drivers/event/octeontx2/otx2_worker.c index 8bec59e..cf73fd0 100644 --- a/drivers/event/octeontx2/otx2_worker.c +++ b/drivers/event/octeontx2/otx2_worker.c @@ -267,7 +267,7 @@ otx2_ssogws_enq_fwd_burst(void *port, const struct rte_event ev[], return 1; } -#define T(name, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ +#define T(name, f7, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ uint16_t __hot \ otx2_ssogws_tx_adptr_enq_ ## name(void *port, struct rte_event ev[], \ uint16_t nb_events) \ @@ -281,7 +281,7 @@ otx2_ssogws_tx_adptr_enq_ ## name(void *port, struct rte_event ev[], \ SSO_TX_ADPTR_ENQ_FASTPATH_FUNC #undef T -#define T(name, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ +#define T(name, f7, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ uint16_t __hot \ otx2_ssogws_tx_adptr_enq_seg_ ## name(void *port, struct rte_event ev[],\ uint16_t nb_events) \ diff --git a/drivers/event/octeontx2/otx2_worker.h b/drivers/event/octeontx2/otx2_worker.h index 5f5aa87..5a59493 100644 --- a/drivers/event/octeontx2/otx2_worker.h +++ b/drivers/event/octeontx2/otx2_worker.h @@ -270,8 +270,10 @@ static __rte_always_inline void otx2_ssogws_prepare_pkt(const struct otx2_eth_txq *txq, struct rte_mbuf *m, uint64_t *cmd, const uint32_t flags) { + const uint64_t markfmt_en = txq->markfmt_en; + otx2_lmt_mov(cmd, txq->cmd, otx2_nix_tx_ext_subs(flags)); - otx2_nix_xmit_prepare(m, cmd, flags); + otx2_nix_xmit_prepare(m, cmd, flags, markfmt_en); } static __rte_always_inline uint16_t diff --git a/drivers/event/octeontx2/otx2_worker_dual.c b/drivers/event/octeontx2/otx2_worker_dual.c index 3cba09c..5f3acc3 100644 --- a/drivers/event/octeontx2/otx2_worker_dual.c +++ b/drivers/event/octeontx2/otx2_worker_dual.c @@ -307,7 +307,7 @@ otx2_ssogws_dual_deq_seg_timeout_burst_ ##name(void *port, \ SSO_RX_ADPTR_ENQ_FASTPATH_FUNC #undef R -#define T(name, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ +#define T(name, f7, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ uint16_t __hot \ otx2_ssogws_dual_tx_adptr_enq_ ## name(void *port, \ struct rte_event ev[], \ @@ -324,7 +324,7 @@ otx2_ssogws_dual_tx_adptr_enq_ ## name(void *port, \ SSO_TX_ADPTR_ENQ_FASTPATH_FUNC #undef T -#define T(name, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ +#define T(name, f7, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ uint16_t __hot \ otx2_ssogws_dual_tx_adptr_enq_seg_ ## name(void *port, \ struct rte_event ev[], \ diff --git a/drivers/net/octeontx2/otx2_tx.c b/drivers/net/octeontx2/otx2_tx.c index 4f2036c..638dd9d 100644 --- a/drivers/net/octeontx2/otx2_tx.c +++ b/drivers/net/octeontx2/otx2_tx.c @@ -27,6 +27,7 @@ nix_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, struct otx2_eth_txq *txq = tx_queue; uint16_t i; const rte_iova_t io_addr = txq->io_addr; void *lmt_addr = txq->lmt_addr; + uint64_t markfmt_en = 0; NIX_XMIT_FC_OR_RETURN(txq, pkts); @@ -38,11 +39,14 @@ nix_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, otx2_nix_xmit_prepare_tso(tx_pkts[i], flags); } + if (flags & NIX_TX_OFFLOAD_MARK_F) + markfmt_en = txq->markfmt_en; + /* Lets commit any changes in the packet */ rte_cio_wmb(); for (i = 0; i < pkts; i++) { - otx2_nix_xmit_prepare(tx_pkts[i], cmd, flags); + otx2_nix_xmit_prepare(tx_pkts[i], cmd, flags, markfmt_en); /* Passing no of segdw as 4: HDR + EXT + SG + SMEM */ otx2_nix_xmit_prepare_tstamp(cmd, &txq->cmd[0], tx_pkts[i]->ol_flags, 4, flags); @@ -62,6 +66,7 @@ nix_xmit_pkts_mseg(void *tx_queue, struct rte_mbuf **tx_pkts, struct otx2_eth_txq *txq = tx_queue; uint64_t i; const rte_iova_t io_addr = txq->io_addr; void *lmt_addr = txq->lmt_addr; + uint64_t markfmt_en = 0; uint16_t segdw; NIX_XMIT_FC_OR_RETURN(txq, pkts); @@ -74,11 +79,14 @@ nix_xmit_pkts_mseg(void *tx_queue, struct rte_mbuf **tx_pkts, otx2_nix_xmit_prepare_tso(tx_pkts[i], flags); } + if (flags & NIX_TX_OFFLOAD_MARK_F) + markfmt_en = txq->markfmt_en; + /* Lets commit any changes in the packet */ rte_cio_wmb(); for (i = 0; i < pkts; i++) { - otx2_nix_xmit_prepare(tx_pkts[i], cmd, flags); + otx2_nix_xmit_prepare(tx_pkts[i], cmd, flags, markfmt_en); segdw = otx2_nix_prepare_mseg(tx_pkts[i], cmd, flags); otx2_nix_xmit_prepare_tstamp(cmd, &txq->cmd[0], tx_pkts[i]->ol_flags, segdw, @@ -946,7 +954,7 @@ nix_xmit_pkts_vector(void *tx_queue, struct rte_mbuf **tx_pkts, } #endif -#define T(name, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ +#define T(name, f7, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ static uint16_t __rte_noinline __hot \ otx2_nix_xmit_pkts_ ## name(void *tx_queue, \ struct rte_mbuf **tx_pkts, uint16_t pkts) \ @@ -963,7 +971,7 @@ otx2_nix_xmit_pkts_ ## name(void *tx_queue, \ NIX_TX_FASTPATH_MODES #undef T -#define T(name, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ +#define T(name, f7, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ static uint16_t __rte_noinline __hot \ otx2_nix_xmit_pkts_mseg_ ## name(void *tx_queue, \ struct rte_mbuf **tx_pkts, uint16_t pkts) \ @@ -981,17 +989,18 @@ otx2_nix_xmit_pkts_mseg_ ## name(void *tx_queue, \ NIX_TX_FASTPATH_MODES #undef T -#define T(name, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ +#define T(name, f7, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ static uint16_t __rte_noinline __hot \ otx2_nix_xmit_pkts_vec_ ## name(void *tx_queue, \ struct rte_mbuf **tx_pkts, uint16_t pkts) \ { \ uint64_t cmd[sz]; \ \ - /* VLAN, TSTMP, TSO is not supported by vec */ \ + /* VLAN, TSTMP, TSO, MARK is not supported by vec */ \ if ((flags) & NIX_TX_OFFLOAD_VLAN_QINQ_F || \ (flags) & NIX_TX_OFFLOAD_TSTAMP_F || \ - (flags) & NIX_TX_OFFLOAD_TSO_F) \ + (flags) & NIX_TX_OFFLOAD_TSO_F || \ + (flags) & NIX_TX_OFFLOAD_MARK_F) \ return 0; \ return nix_xmit_pkts_vector(tx_queue, tx_pkts, pkts, cmd, (flags)); \ } @@ -1001,12 +1010,13 @@ NIX_TX_FASTPATH_MODES static inline void pick_tx_func(struct rte_eth_dev *eth_dev, - const eth_tx_burst_t tx_burst[2][2][2][2][2][2][2]) + const eth_tx_burst_t tx_burst[2][2][2][2][2][2][2][2]) { struct otx2_eth_dev *dev = otx2_eth_pmd_priv(eth_dev); - /* [SEC] [TSTMP] [NOFF] [VLAN] [OL3_OL4_CSUM] [IL3_IL4_CSUM] */ + /* [MARK] [SEC] [TSTMP] [NOFF] [VLAN] [OL3_OL4_CSUM] [IL3_IL4_CSUM] */ eth_dev->tx_pkt_burst = tx_burst + [!!(dev->tx_offload_flags & NIX_TX_OFFLOAD_MARK_F)] [!!(dev->tx_offload_flags & NIX_TX_OFFLOAD_SECURITY_F)] [!!(dev->tx_offload_flags & NIX_TX_OFFLOAD_TSO_F)] [!!(dev->tx_offload_flags & NIX_TX_OFFLOAD_TSTAMP_F)] @@ -1021,25 +1031,25 @@ otx2_eth_set_tx_function(struct rte_eth_dev *eth_dev) { struct otx2_eth_dev *dev = otx2_eth_pmd_priv(eth_dev); - const eth_tx_burst_t nix_eth_tx_burst[2][2][2][2][2][2][2] = { -#define T(name, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ - [f6][f5][f4][f3][f2][f1][f0] = otx2_nix_xmit_pkts_ ## name, + const eth_tx_burst_t nix_eth_tx_burst[2][2][2][2][2][2][2][2] = { +#define T(name, f7, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ + [f7][f6][f5][f4][f3][f2][f1][f0] = otx2_nix_xmit_pkts_ ## name, NIX_TX_FASTPATH_MODES #undef T }; - const eth_tx_burst_t nix_eth_tx_burst_mseg[2][2][2][2][2][2][2] = { -#define T(name, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ - [f6][f5][f4][f3][f2][f1][f0] = otx2_nix_xmit_pkts_mseg_ ## name, + const eth_tx_burst_t nix_eth_tx_burst_mseg[2][2][2][2][2][2][2][2] = { +#define T(name, f7, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ + [f7][f6][f5][f4][f3][f2][f1][f0] = otx2_nix_xmit_pkts_mseg_ ## name, NIX_TX_FASTPATH_MODES #undef T }; - const eth_tx_burst_t nix_eth_tx_vec_burst[2][2][2][2][2][2][2] = { -#define T(name, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ - [f6][f5][f4][f3][f2][f1][f0] = otx2_nix_xmit_pkts_vec_ ## name, + const eth_tx_burst_t nix_eth_tx_vec_burst[2][2][2][2][2][2][2][2] = { +#define T(name, f7, f6, f5, f4, f3, f2, f1, f0, sz, flags) \ + [f7][f6][f5][f4][f3][f2][f1][f0] = otx2_nix_xmit_pkts_vec_ ## name, NIX_TX_FASTPATH_MODES #undef T @@ -1048,7 +1058,7 @@ NIX_TX_FASTPATH_MODES if (dev->scalar_ena || (dev->tx_offload_flags & (NIX_TX_OFFLOAD_VLAN_QINQ_F | NIX_TX_OFFLOAD_TSTAMP_F | - NIX_TX_OFFLOAD_TSO_F))) + NIX_TX_OFFLOAD_TSO_F | NIX_TX_OFFLOAD_MARK_F))) pick_tx_func(eth_dev, nix_eth_tx_burst); else pick_tx_func(eth_dev, nix_eth_tx_vec_burst); diff --git a/drivers/net/octeontx2/otx2_tx.h b/drivers/net/octeontx2/otx2_tx.h index 928e4ea..aba0607 100644 --- a/drivers/net/octeontx2/otx2_tx.h +++ b/drivers/net/octeontx2/otx2_tx.h @@ -200,7 +200,8 @@ otx2_nix_xmit_prepare_tso(struct rte_mbuf *m, const uint64_t flags) } static __rte_always_inline void -otx2_nix_xmit_prepare(struct rte_mbuf *m, uint64_t *cmd, const uint16_t flags) +otx2_nix_xmit_prepare(struct rte_mbuf *m, uint64_t *cmd, + const uint16_t flags, const uint64_t markfmt_en) { struct nix_send_ext_s *send_hdr_ext; struct nix_send_hdr_s *send_hdr; @@ -353,6 +354,23 @@ otx2_nix_xmit_prepare(struct rte_mbuf *m, uint64_t *cmd, const uint16_t flags) } } + if (flags & NIX_TX_OFFLOAD_MARK_F) { + /* Pick the first among the following */ + uint8_t mark_offload = ffs((ol_flags & + (PKT_TX_MARK_VLAN_DEI | + PKT_TX_MARK_IP_ECN | + PKT_TX_MARK_IP_DSCP)) >> 38); + uint8_t ipv6 = !!(ol_flags & PKT_TX_IPV6); + uint16_t markfmt = (markfmt_en >> + ((mark_offload - 1) << 4)); + markfmt = (markfmt >> (ipv6 << 3)) & 0xFF; + send_hdr_ext->w0.mark_en = !!mark_offload; + send_hdr_ext->w0.markform = markfmt & 0x7F; + send_hdr_ext->w0.markptr = (mark_offload == 1) ? + m->l2_len - 4 : /* VLAN DEI */ + m->l2_len + (markfmt >> 7); /* IPv4v6 */ + } + if (flags & NIX_TX_NEED_SEND_HDR_W1) send_hdr->w1.u = w1.u; @@ -475,273 +493,575 @@ otx2_nix_xmit_mseg_one(uint64_t *cmd, void *lmt_addr, #define TSP_F NIX_TX_OFFLOAD_TSTAMP_F #define TSO_F NIX_TX_OFFLOAD_TSO_F #define TX_SEC_F NIX_TX_OFFLOAD_SECURITY_F +#define TX_MARK_F NIX_TX_OFFLOAD_MARK_F -/* [SEC] [TSO] [TSTMP] [NOFF] [VLAN] [OL3OL4CSUM] [L3L4CSUM] */ +/* [MARK] [SEC] [TSO] [TSTMP] [NOFF] [VLAN] [OL3OL4CSUM] [L3L4CSUM] */ #define NIX_TX_FASTPATH_MODES \ -T(no_offload, 0, 0, 0, 0, 0, 0, 0, 4, \ +T(no_offload, 0, 0, 0, 0, 0, 0, 0, 0, 4, \ NIX_TX_OFFLOAD_NONE) \ -T(l3l4csum, 0, 0, 0, 0, 0, 0, 1, 4, \ +T(l3l4csum, 0, 0, 0, 0, 0, 0, 0, 1, 4, \ L3L4CSUM_F) \ -T(ol3ol4csum, 0, 0, 0, 0, 0, 1, 0, 4, \ +T(ol3ol4csum, 0, 0, 0, 0, 0, 0, 1, 0, 4, \ OL3OL4CSUM_F) \ -T(ol3ol4csum_l3l4csum, 0, 0, 0, 0, 0, 1, 1, 4, \ +T(ol3ol4csum_l3l4csum, 0, 0, 0, 0, 0, 0, 1, 1, 4, \ OL3OL4CSUM_F | L3L4CSUM_F) \ -T(vlan, 0, 0, 0, 0, 1, 0, 0, 6, \ +T(vlan, 0, 0, 0, 0, 0, 1, 0, 0, 6, \ VLAN_F) \ -T(vlan_l3l4csum, 0, 0, 0, 0, 1, 0, 1, 6, \ +T(vlan_l3l4csum, 0, 0, 0, 0, 0, 1, 0, 1, 6, \ VLAN_F | L3L4CSUM_F) \ -T(vlan_ol3ol4csum, 0, 0, 0, 0, 1, 1, 0, 6, \ +T(vlan_ol3ol4csum, 0, 0, 0, 0, 0, 1, 1, 0, 6, \ VLAN_F | OL3OL4CSUM_F) \ -T(vlan_ol3ol4csum_l3l4csum, 0, 0, 0, 0, 1, 1, 1, 6, \ +T(vlan_ol3ol4csum_l3l4csum, 0, 0, 0, 0, 0, 1, 1, 1, 6, \ VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(noff, 0, 0, 0, 1, 0, 0, 0, 4, \ +T(noff, 0, 0, 0, 0, 1, 0, 0, 0, 4, \ NOFF_F) \ -T(noff_l3l4csum, 0, 0, 0, 1, 0, 0, 1, 4, \ +T(noff_l3l4csum, 0, 0, 0, 0, 1, 0, 0, 1, 4, \ NOFF_F | L3L4CSUM_F) \ -T(noff_ol3ol4csum, 0, 0, 0, 1, 0, 1, 0, 4, \ +T(noff_ol3ol4csum, 0, 0, 0, 0, 1, 0, 1, 0, 4, \ NOFF_F | OL3OL4CSUM_F) \ -T(noff_ol3ol4csum_l3l4csum, 0, 0, 0, 1, 0, 1, 1, 4, \ +T(noff_ol3ol4csum_l3l4csum, 0, 0, 0, 0, 1, 0, 1, 1, 4, \ NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(noff_vlan, 0, 0, 0, 1, 1, 0, 0, 6, \ +T(noff_vlan, 0, 0, 0, 0, 1, 1, 0, 0, 6, \ NOFF_F | VLAN_F) \ -T(noff_vlan_l3l4csum, 0, 0, 0, 1, 1, 0, 1, 6, \ +T(noff_vlan_l3l4csum, 0, 0, 0, 0, 1, 1, 0, 1, 6, \ NOFF_F | VLAN_F | L3L4CSUM_F) \ -T(noff_vlan_ol3ol4csum, 0, 0, 0, 1, 1, 1, 0, 6, \ +T(noff_vlan_ol3ol4csum, 0, 0, 0, 0, 1, 1, 1, 0, 6, \ NOFF_F | VLAN_F | OL3OL4CSUM_F) \ -T(noff_vlan_ol3ol4csum_l3l4csum, 0, 0, 0, 1, 1, 1, 1, 6, \ +T(noff_vlan_ol3ol4csum_l3l4csum, 0, 0, 0, 0, 1, 1, 1, 1, 6, \ NOFF_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(ts, 0, 0, 1, 0, 0, 0, 0, 8, \ +T(ts, 0, 0, 0, 1, 0, 0, 0, 0, 8, \ TSP_F) \ -T(ts_l3l4csum, 0, 0, 1, 0, 0, 0, 1, 8, \ +T(ts_l3l4csum, 0, 0, 0, 1, 0, 0, 0, 1, 8, \ TSP_F | L3L4CSUM_F) \ -T(ts_ol3ol4csum, 0, 0, 1, 0, 0, 1, 0, 8, \ +T(ts_ol3ol4csum, 0, 0, 0, 1, 0, 0, 1, 0, 8, \ TSP_F | OL3OL4CSUM_F) \ -T(ts_ol3ol4csum_l3l4csum, 0, 0, 1, 0, 0, 1, 1, 8, \ +T(ts_ol3ol4csum_l3l4csum, 0, 0, 0, 1, 0, 0, 1, 1, 8, \ TSP_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(ts_vlan, 0, 0, 1, 0, 1, 0, 0, 8, \ +T(ts_vlan, 0, 0, 0, 1, 0, 1, 0, 0, 8, \ TSP_F | VLAN_F) \ -T(ts_vlan_l3l4csum, 0, 0, 1, 0, 1, 0, 1, 8, \ +T(ts_vlan_l3l4csum, 0, 0, 0, 1, 0, 1, 0, 1, 8, \ TSP_F | VLAN_F | L3L4CSUM_F) \ -T(ts_vlan_ol3ol4csum, 0, 0, 1, 0, 1, 1, 0, 8, \ +T(ts_vlan_ol3ol4csum, 0, 0, 0, 1, 0, 1, 1, 0, 8, \ TSP_F | VLAN_F | OL3OL4CSUM_F) \ -T(ts_vlan_ol3ol4csum_l3l4csum, 0, 0, 1, 0, 1, 1, 1, 8, \ +T(ts_vlan_ol3ol4csum_l3l4csum, 0, 0, 0, 1, 0, 1, 1, 1, 8, \ TSP_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(ts_noff, 0, 0, 1, 1, 0, 0, 0, 8, \ +T(ts_noff, 0, 0, 0, 1, 1, 0, 0, 0, 8, \ TSP_F | NOFF_F) \ -T(ts_noff_l3l4csum, 0, 0, 1, 1, 0, 0, 1, 8, \ +T(ts_noff_l3l4csum, 0, 0, 0, 1, 1, 0, 0, 1, 8, \ TSP_F | NOFF_F | L3L4CSUM_F) \ -T(ts_noff_ol3ol4csum, 0, 0, 1, 1, 0, 1, 0, 8, \ +T(ts_noff_ol3ol4csum, 0, 0, 0, 1, 1, 0, 1, 0, 8, \ TSP_F | NOFF_F | OL3OL4CSUM_F) \ -T(ts_noff_ol3ol4csum_l3l4csum, 0, 0, 1, 1, 0, 1, 1, 8, \ +T(ts_noff_ol3ol4csum_l3l4csum, 0, 0, 0, 1, 1, 0, 1, 1, 8, \ TSP_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(ts_noff_vlan, 0, 0, 1, 1, 1, 0, 0, 8, \ +T(ts_noff_vlan, 0, 0, 0, 1, 1, 1, 0, 0, 8, \ TSP_F | NOFF_F | VLAN_F) \ -T(ts_noff_vlan_l3l4csum, 0, 0, 1, 1, 1, 0, 1, 8, \ +T(ts_noff_vlan_l3l4csum, 0, 0, 0, 1, 1, 1, 0, 1, 8, \ TSP_F | NOFF_F | VLAN_F | L3L4CSUM_F) \ -T(ts_noff_vlan_ol3ol4csum, 0, 0, 1, 1, 1, 1, 0, 8, \ +T(ts_noff_vlan_ol3ol4csum, 0, 0, 0, 1, 1, 1, 1, 0, 8, \ TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F) \ -T(ts_noff_vlan_ol3ol4csum_l3l4csum, 0, 0, 1, 1, 1, 1, 1, 8, \ +T(ts_noff_vlan_ol3ol4csum_l3l4csum, 0, 0, 0, 1, 1, 1, 1, 1, 8, \ TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F) \ \ -T(tso, 0, 1, 0, 0, 0, 0, 0, 6, \ +T(tso, 0, 0, 1, 0, 0, 0, 0, 0, 6, \ TSO_F) \ -T(tso_l3l4csum, 0, 1, 0, 0, 0, 0, 1, 6, \ +T(tso_l3l4csum, 0, 0, 1, 0, 0, 0, 0, 1, 6, \ TSO_F | L3L4CSUM_F) \ -T(tso_ol3ol4csum, 0, 1, 0, 0, 0, 1, 0, 6, \ +T(tso_ol3ol4csum, 0, 0, 1, 0, 0, 0, 1, 0, 6, \ TSO_F | OL3OL4CSUM_F) \ -T(tso_ol3ol4csum_l3l4csum, 0, 1, 0, 0, 0, 1, 1, 6, \ +T(tso_ol3ol4csum_l3l4csum, 0, 0, 1, 0, 0, 0, 1, 1, 6, \ TSO_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(tso_vlan, 0, 1, 0, 0, 1, 0, 0, 6, \ +T(tso_vlan, 0, 0, 1, 0, 0, 1, 0, 0, 6, \ TSO_F | VLAN_F) \ -T(tso_vlan_l3l4csum, 0, 1, 0, 0, 1, 0, 1, 6, \ +T(tso_vlan_l3l4csum, 0, 0, 1, 0, 0, 1, 0, 1, 6, \ TSO_F | VLAN_F | L3L4CSUM_F) \ -T(tso_vlan_ol3ol4csum, 0, 1, 0, 0, 1, 1, 0, 6, \ +T(tso_vlan_ol3ol4csum, 0, 0, 1, 0, 0, 1, 1, 0, 6, \ TSO_F | VLAN_F | OL3OL4CSUM_F) \ -T(tso_vlan_ol3ol4csum_l3l4csum, 0, 1, 0, 0, 1, 1, 1, 6, \ +T(tso_vlan_ol3ol4csum_l3l4csum, 0, 0, 1, 0, 0, 1, 1, 1, 6, \ TSO_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(tso_noff, 0, 1, 0, 1, 0, 0, 0, 6, \ +T(tso_noff, 0, 0, 1, 0, 1, 0, 0, 0, 6, \ TSO_F | NOFF_F) \ -T(tso_noff_l3l4csum, 0, 1, 0, 1, 0, 0, 1, 6, \ +T(tso_noff_l3l4csum, 0, 0, 1, 0, 1, 0, 0, 1, 6, \ TSO_F | NOFF_F | L3L4CSUM_F) \ -T(tso_noff_ol3ol4csum, 0, 1, 0, 1, 0, 1, 0, 6, \ +T(tso_noff_ol3ol4csum, 0, 0, 1, 0, 1, 0, 1, 0, 6, \ TSO_F | NOFF_F | OL3OL4CSUM_F) \ -T(tso_noff_ol3ol4csum_l3l4csum, 0, 1, 0, 1, 0, 1, 1, 6, \ +T(tso_noff_ol3ol4csum_l3l4csum, 0, 0, 1, 0, 1, 0, 1, 1, 6, \ TSO_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(tso_noff_vlan, 0, 1, 0, 1, 1, 0, 0, 6, \ +T(tso_noff_vlan, 0, 0, 1, 0, 1, 1, 0, 0, 6, \ TSO_F | NOFF_F | VLAN_F) \ -T(tso_noff_vlan_l3l4csum, 0, 1, 0, 1, 1, 0, 1, 6, \ +T(tso_noff_vlan_l3l4csum, 0, 0, 1, 0, 1, 1, 0, 1, 6, \ TSO_F | NOFF_F | VLAN_F | L3L4CSUM_F) \ -T(tso_noff_vlan_ol3ol4csum, 0, 1, 0, 1, 1, 1, 0, 6, \ +T(tso_noff_vlan_ol3ol4csum, 0, 0, 1, 0, 1, 1, 1, 0, 6, \ TSO_F | NOFF_F | VLAN_F | OL3OL4CSUM_F) \ -T(tso_noff_vlan_ol3ol4csum_l3l4csum, 0, 1, 0, 1, 1, 1, 1, 6, \ +T(tso_noff_vlan_ol3ol4csum_l3l4csum, 0, 0, 1, 0, 1, 1, 1, 1, 6, \ TSO_F | NOFF_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(tso_ts, 0, 1, 1, 0, 0, 0, 0, 8, \ +T(tso_ts, 0, 0, 1, 1, 0, 0, 0, 0, 8, \ TSO_F | TSP_F) \ -T(tso_ts_l3l4csum, 0, 1, 1, 0, 0, 0, 1, 8, \ +T(tso_ts_l3l4csum, 0, 0, 1, 1, 0, 0, 0, 1, 8, \ TSO_F | TSP_F | L3L4CSUM_F) \ -T(tso_ts_ol3ol4csum, 0, 1, 1, 0, 0, 1, 0, 8, \ +T(tso_ts_ol3ol4csum, 0, 0, 1, 1, 0, 0, 1, 0, 8, \ TSO_F | TSP_F | OL3OL4CSUM_F) \ -T(tso_ts_ol3ol4csum_l3l4csum, 0, 1, 1, 0, 0, 1, 1, 8, \ +T(tso_ts_ol3ol4csum_l3l4csum, 0, 0, 1, 1, 0, 0, 1, 1, 8, \ TSO_F | TSP_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(tso_ts_vlan, 0, 1, 1, 0, 1, 0, 0, 8, \ +T(tso_ts_vlan, 0, 0, 1, 1, 0, 1, 0, 0, 8, \ TSO_F | TSP_F | VLAN_F) \ -T(tso_ts_vlan_l3l4csum, 0, 1, 1, 0, 1, 0, 1, 8, \ +T(tso_ts_vlan_l3l4csum, 0, 0, 1, 1, 0, 1, 0, 1, 8, \ TSO_F | TSP_F | VLAN_F | L3L4CSUM_F) \ -T(tso_ts_vlan_ol3ol4csum, 0, 1, 1, 0, 1, 1, 0, 8, \ +T(tso_ts_vlan_ol3ol4csum, 0, 0, 1, 1, 0, 1, 1, 0, 8, \ TSO_F | TSP_F | VLAN_F | OL3OL4CSUM_F) \ -T(tso_ts_vlan_ol3ol4csum_l3l4csum, 0, 1, 1, 0, 1, 1, 1, 8, \ +T(tso_ts_vlan_ol3ol4csum_l3l4csum, 0, 0, 1, 1, 0, 1, 1, 1, 8, \ TSO_F | TSP_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(tso_ts_noff, 0, 1, 1, 1, 0, 0, 0, 8, \ +T(tso_ts_noff, 0, 0, 1, 1, 1, 0, 0, 0, 8, \ TSO_F | TSP_F | NOFF_F) \ -T(tso_ts_noff_l3l4csum, 0, 1, 1, 1, 0, 0, 1, 8, \ +T(tso_ts_noff_l3l4csum, 0, 0, 1, 1, 1, 0, 0, 1, 8, \ TSO_F | TSP_F | NOFF_F | L3L4CSUM_F) \ -T(tso_ts_noff_ol3ol4csum, 0, 1, 1, 1, 0, 1, 0, 8, \ +T(tso_ts_noff_ol3ol4csum, 0, 0, 1, 1, 1, 0, 1, 0, 8, \ TSO_F | TSP_F | NOFF_F | OL3OL4CSUM_F) \ -T(tso_ts_noff_ol3ol4csum_l3l4csum, 0, 1, 1, 1, 0, 1, 1, 8, \ +T(tso_ts_noff_ol3ol4csum_l3l4csum, 0, 0, 1, 1, 1, 0, 1, 1, 8, \ TSO_F | TSP_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(tso_ts_noff_vlan, 0, 1, 1, 1, 1, 0, 0, 8, \ +T(tso_ts_noff_vlan, 0, 0, 1, 1, 1, 1, 0, 0, 8, \ TSO_F | TSP_F | NOFF_F | VLAN_F) \ -T(tso_ts_noff_vlan_l3l4csum, 0, 1, 1, 1, 1, 0, 1, 8, \ +T(tso_ts_noff_vlan_l3l4csum, 0, 0, 1, 1, 1, 1, 0, 1, 8, \ TSO_F | TSP_F | NOFF_F | VLAN_F | L3L4CSUM_F) \ -T(tso_ts_noff_vlan_ol3ol4csum, 0, 1, 1, 1, 1, 1, 0, 8, \ +T(tso_ts_noff_vlan_ol3ol4csum, 0, 0, 1, 1, 1, 1, 1, 0, 8, \ TSO_F | TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F) \ -T(tso_ts_noff_vlan_ol3ol4csum_l3l4csum, 0, 1, 1, 1, 1, 1, 1, 8, \ +T(tso_ts_noff_vlan_ol3ol4csum_l3l4csum, 0, 0, 1, 1, 1, 1, 1, 1, 8, \ TSO_F | TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F | \ L3L4CSUM_F) \ -T(sec, 1, 0, 0, 0, 0, 0, 0, 8, \ +T(sec, 0, 1, 0, 0, 0, 0, 0, 0, 8, \ TX_SEC_F) \ -T(sec_l3l4csum, 1, 0, 0, 0, 0, 0, 1, 8, \ +T(sec_l3l4csum, 0, 1, 0, 0, 0, 0, 0, 1, 8, \ TX_SEC_F | L3L4CSUM_F) \ -T(sec_ol3ol4csum, 1, 0, 0, 0, 0, 1, 0, 8, \ +T(sec_ol3ol4csum, 0, 1, 0, 0, 0, 0, 1, 0, 8, \ TX_SEC_F | OL3OL4CSUM_F) \ -T(sec_ol3ol4csum_l3l4csum, 1, 0, 0, 0, 0, 1, 1, 8, \ +T(sec_ol3ol4csum_l3l4csum, 0, 1, 0, 0, 0, 0, 1, 1, 8, \ TX_SEC_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(sec_vlan, 1, 0, 0, 0, 1, 0, 0, 8, \ +T(sec_vlan, 0, 1, 0, 0, 0, 1, 0, 0, 8, \ TX_SEC_F | VLAN_F) \ -T(sec_vlan_l3l4csum, 1, 0, 0, 0, 1, 0, 1, 8, \ +T(sec_vlan_l3l4csum, 0, 1, 0, 0, 0, 1, 0, 1, 8, \ TX_SEC_F | VLAN_F | L3L4CSUM_F) \ -T(sec_vlan_ol3ol4csum, 1, 0, 0, 0, 1, 1, 0, 8, \ +T(sec_vlan_ol3ol4csum, 0, 1, 0, 0, 0, 1, 1, 0, 8, \ TX_SEC_F | VLAN_F | OL3OL4CSUM_F) \ -T(sec_vlan_ol3ol4csum_l3l4csum, 1, 0, 0, 0, 1, 1, 1, 8, \ +T(sec_vlan_ol3ol4csum_l3l4csum, 0, 1, 0, 0, 0, 1, 1, 1, 8, \ TX_SEC_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(sec_noff, 1, 0, 0, 1, 0, 0, 0, 8, \ +T(sec_noff, 0, 1, 0, 0, 1, 0, 0, 0, 8, \ TX_SEC_F | NOFF_F) \ -T(sec_noff_l3l4csum, 1, 0, 0, 1, 0, 0, 1, 8, \ +T(sec_noff_l3l4csum, 0, 1, 0, 0, 1, 0, 0, 1, 8, \ TX_SEC_F | NOFF_F | L3L4CSUM_F) \ -T(sec_noff_ol3ol4csum, 1, 0, 0, 1, 0, 1, 0, 8, \ +T(sec_noff_ol3ol4csum, 0, 1, 0, 0, 1, 0, 1, 0, 8, \ TX_SEC_F | NOFF_F | OL3OL4CSUM_F) \ -T(sec_noff_ol3ol4csum_l3l4csum, 1, 0, 0, 1, 0, 1, 1, 8, \ +T(sec_noff_ol3ol4csum_l3l4csum, 0, 1, 0, 0, 1, 0, 1, 1, 8, \ TX_SEC_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(sec_noff_vlan, 1, 0, 0, 1, 1, 0, 0, 8, \ +T(sec_noff_vlan, 0, 1, 0, 0, 1, 1, 0, 0, 8, \ TX_SEC_F | NOFF_F | VLAN_F) \ -T(sec_noff_vlan_l3l4csum, 1, 0, 0, 1, 1, 0, 1, 8, \ +T(sec_noff_vlan_l3l4csum, 0, 1, 0, 0, 1, 1, 0, 1, 8, \ TX_SEC_F | NOFF_F | VLAN_F | L3L4CSUM_F) \ -T(sec_noff_vlan_ol3ol4csum, 1, 0, 0, 1, 1, 1, 0, 8, \ +T(sec_noff_vlan_ol3ol4csum, 0, 1, 0, 0, 1, 1, 1, 0, 8, \ TX_SEC_F | NOFF_F | VLAN_F | OL3OL4CSUM_F) \ -T(sec_noff_vlan_ol3ol4csum_l3l4csum, 1, 0, 0, 1, 1, 1, 1, 8, \ +T(sec_noff_vlan_ol3ol4csum_l3l4csum, 0, 1, 0, 0, 1, 1, 1, 1, 8, \ TX_SEC_F | NOFF_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(sec_ts, 1, 0, 1, 0, 0, 0, 0, 8, \ +T(sec_ts, 0, 1, 0, 1, 0, 0, 0, 0, 8, \ TX_SEC_F | TSP_F) \ -T(sec_ts_l3l4csum, 1, 0, 1, 0, 0, 0, 1, 8, \ +T(sec_ts_l3l4csum, 0, 1, 0, 1, 0, 0, 0, 1, 8, \ TX_SEC_F | TSP_F | L3L4CSUM_F) \ -T(sec_ts_ol3ol4csum, 1, 0, 1, 0, 0, 1, 0, 8, \ +T(sec_ts_ol3ol4csum, 0, 1, 0, 1, 0, 0, 1, 0, 8, \ TX_SEC_F | TSP_F | OL3OL4CSUM_F) \ -T(sec_ts_ol3ol4csum_l3l4csum, 1, 0, 1, 0, 0, 1, 1, 8, \ +T(sec_ts_ol3ol4csum_l3l4csum, 0, 1, 0, 1, 0, 0, 1, 1, 8, \ TX_SEC_F | TSP_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(sec_ts_vlan, 1, 0, 1, 0, 1, 0, 0, 8, \ +T(sec_ts_vlan, 0, 1, 0, 1, 0, 1, 0, 0, 8, \ TX_SEC_F | TSP_F | VLAN_F) \ -T(sec_ts_vlan_l3l4csum, 1, 0, 1, 0, 1, 0, 1, 8, \ +T(sec_ts_vlan_l3l4csum, 0, 1, 0, 1, 0, 1, 0, 1, 8, \ TX_SEC_F | TSP_F | VLAN_F | L3L4CSUM_F) \ -T(sec_ts_vlan_ol3ol4csum, 1, 0, 1, 0, 1, 1, 0, 8, \ +T(sec_ts_vlan_ol3ol4csum, 0, 1, 0, 1, 0, 1, 1, 0, 8, \ TX_SEC_F | TSP_F | VLAN_F | OL3OL4CSUM_F) \ -T(sec_ts_vlan_ol3ol4csum_l3l4csum, 1, 0, 1, 0, 1, 1, 1, 8, \ +T(sec_ts_vlan_ol3ol4csum_l3l4csum, 0, 1, 0, 1, 0, 1, 1, 1, 8, \ TX_SEC_F | TSP_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(sec_ts_noff, 1, 0, 1, 1, 0, 0, 0, 8, \ +T(sec_ts_noff, 0, 1, 0, 1, 1, 0, 0, 0, 8, \ TX_SEC_F | TSP_F | NOFF_F) \ -T(sec_ts_noff_l3l4csum, 1, 0, 1, 1, 0, 0, 1, 8, \ +T(sec_ts_noff_l3l4csum, 0, 1, 0, 1, 1, 0, 0, 1, 8, \ TX_SEC_F | TSP_F | NOFF_F | L3L4CSUM_F) \ -T(sec_ts_noff_ol3ol4csum, 1, 0, 1, 1, 0, 1, 0, 8, \ +T(sec_ts_noff_ol3ol4csum, 0, 1, 0, 1, 1, 0, 1, 0, 8, \ TX_SEC_F | TSP_F | NOFF_F | OL3OL4CSUM_F) \ -T(sec_ts_noff_ol3ol4csum_l3l4csum, 1, 0, 1, 1, 0, 1, 1, 8, \ +T(sec_ts_noff_ol3ol4csum_l3l4csum, 0, 1, 0, 1, 1, 0, 1, 1, 8, \ TX_SEC_F | TSP_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(sec_ts_noff_vlan, 1, 0, 1, 1, 1, 0, 0, 8, \ +T(sec_ts_noff_vlan, 0, 1, 0, 1, 1, 1, 0, 0, 8, \ TX_SEC_F | TSP_F | NOFF_F | VLAN_F) \ -T(sec_ts_noff_vlan_l3l4csum, 1, 0, 1, 1, 1, 0, 1, 8, \ +T(sec_ts_noff_vlan_l3l4csum, 0, 1, 0, 1, 1, 1, 0, 1, 8, \ TX_SEC_F | TSP_F | NOFF_F | VLAN_F | L3L4CSUM_F) \ -T(sec_ts_noff_vlan_ol3ol4csum, 1, 0, 1, 1, 1, 1, 0, 8, \ +T(sec_ts_noff_vlan_ol3ol4csum, 0, 1, 0, 1, 1, 1, 1, 0, 8, \ TX_SEC_F | TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F) \ -T(sec_ts_noff_vlan_ol3ol4csum_l3l4csum, 1, 0, 1, 1, 1, 1, 1, 8, \ +T(sec_ts_noff_vlan_ol3ol4csum_l3l4csum, 0, 1, 0, 1, 1, 1, 1, 1, 8, \ TX_SEC_F | TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F | \ L3L4CSUM_F) \ -T(sec_tso, 1, 1, 0, 0, 0, 0, 0, 8, \ +T(sec_tso, 0, 1, 1, 0, 0, 0, 0, 0, 8, \ TX_SEC_F | TSO_F) \ -T(sec_tso_l3l4csum, 1, 1, 0, 0, 0, 0, 1, 8, \ +T(sec_tso_l3l4csum, 0, 1, 1, 0, 0, 0, 0, 1, 8, \ TX_SEC_F | TSO_F | L3L4CSUM_F) \ -T(sec_tso_ol3ol4csum, 1, 1, 0, 0, 0, 1, 0, 8, \ +T(sec_tso_ol3ol4csum, 0, 1, 1, 0, 0, 0, 1, 0, 8, \ TX_SEC_F | TSO_F | OL3OL4CSUM_F) \ -T(sec_tso_ol3ol4csum_l3l4csum, 1, 1, 0, 0, 0, 1, 1, 8, \ +T(sec_tso_ol3ol4csum_l3l4csum, 0, 1, 1, 0, 0, 0, 1, 1, 8, \ TX_SEC_F | TSO_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(sec_tso_vlan, 1, 1, 0, 0, 1, 0, 0, 8, \ +T(sec_tso_vlan, 0, 1, 1, 0, 0, 1, 0, 0, 8, \ TX_SEC_F | TSO_F | VLAN_F) \ -T(sec_tso_vlan_l3l4csum, 1, 1, 0, 0, 1, 0, 1, 8, \ +T(sec_tso_vlan_l3l4csum, 0, 1, 1, 0, 0, 1, 0, 1, 8, \ TX_SEC_F | TSO_F | VLAN_F | L3L4CSUM_F) \ -T(sec_tso_vlan_ol3ol4csum, 1, 1, 0, 0, 1, 1, 0, 8, \ +T(sec_tso_vlan_ol3ol4csum, 0, 1, 1, 0, 0, 1, 1, 0, 8, \ TX_SEC_F | TSO_F | VLAN_F | OL3OL4CSUM_F) \ -T(sec_tso_vlan_ol3ol4csum_l3l4csum, 1, 1, 0, 0, 1, 1, 1, 8, \ +T(sec_tso_vlan_ol3ol4csum_l3l4csum, 0, 1, 1, 0, 0, 1, 1, 1, 8, \ TX_SEC_F | TSO_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(sec_tso_noff, 1, 1, 0, 1, 0, 0, 0, 8, \ +T(sec_tso_noff, 0, 1, 1, 0, 1, 0, 0, 0, 8, \ TX_SEC_F | TSO_F | NOFF_F) \ -T(sec_tso_noff_l3l4csum, 1, 1, 0, 1, 0, 0, 1, 8, \ +T(sec_tso_noff_l3l4csum, 0, 1, 1, 0, 1, 0, 0, 1, 8, \ TX_SEC_F | TSO_F | NOFF_F | L3L4CSUM_F) \ -T(sec_tso_noff_ol3ol4csum, 1, 1, 0, 1, 0, 1, 0, 8, \ +T(sec_tso_noff_ol3ol4csum, 0, 1, 1, 0, 1, 0, 1, 0, 8, \ TX_SEC_F | TSO_F | NOFF_F | OL3OL4CSUM_F) \ -T(sec_tso_noff_ol3ol4csum_l3l4csum, 1, 1, 0, 1, 0, 1, 1, 8, \ +T(sec_tso_noff_ol3ol4csum_l3l4csum, 0, 1, 1, 0, 1, 0, 1, 1, 8, \ TX_SEC_F | TSO_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(sec_tso_noff_vlan, 1, 1, 0, 1, 1, 0, 0, 8, \ +T(sec_tso_noff_vlan, 0, 1, 1, 0, 1, 1, 0, 0, 8, \ TX_SEC_F | TSO_F | NOFF_F | VLAN_F) \ -T(sec_tso_noff_vlan_l3l4csum, 1, 1, 0, 1, 1, 0, 1, 8, \ +T(sec_tso_noff_vlan_l3l4csum, 0, 1, 1, 0, 1, 1, 0, 1, 8, \ TX_SEC_F | TSO_F | NOFF_F | VLAN_F | L3L4CSUM_F) \ -T(sec_tso_noff_vlan_ol3ol4csum, 1, 1, 0, 1, 1, 1, 0, 8, \ +T(sec_tso_noff_vlan_ol3ol4csum, 0, 1, 1, 0, 1, 1, 1, 0, 8, \ TX_SEC_F | TSO_F | NOFF_F | VLAN_F | OL3OL4CSUM_F) \ T(sec_tso_noff_vlan_ol3ol4csum_l3l4csum, \ - 1, 1, 0, 1, 1, 1, 1, 8, \ + 0, 1, 1, 0, 1, 1, 1, 1, 8, \ TX_SEC_F | TSO_F | NOFF_F | VLAN_F | OL3OL4CSUM_F | \ L3L4CSUM_F) \ -T(sec_tso_ts, 1, 1, 1, 0, 0, 0, 0, 8, \ +T(sec_tso_ts, 0, 1, 1, 1, 0, 0, 0, 0, 8, \ TX_SEC_F | TSO_F | TSP_F) \ -T(sec_tso_ts_l3l4csum, 1, 1, 1, 0, 0, 0, 1, 8, \ +T(sec_tso_ts_l3l4csum, 0, 1, 1, 1, 0, 0, 0, 1, 8, \ TX_SEC_F | TSO_F | TSP_F | L3L4CSUM_F) \ -T(sec_tso_ts_ol3ol4csum, 1, 1, 1, 0, 0, 1, 0, 8, \ +T(sec_tso_ts_ol3ol4csum, 0, 1, 1, 1, 0, 0, 1, 0, 8, \ TX_SEC_F | TSO_F | TSP_F | OL3OL4CSUM_F) \ -T(sec_tso_ts_ol3ol4csum_l3l4csum, 1, 1, 1, 0, 0, 1, 1, 8, \ +T(sec_tso_ts_ol3ol4csum_l3l4csum, 0, 1, 1, 1, 0, 0, 1, 1, 8, \ TX_SEC_F | TSO_F | TSP_F | OL3OL4CSUM_F | L3L4CSUM_F) \ -T(sec_tso_ts_vlan, 1, 1, 1, 0, 1, 0, 0, 8, \ +T(sec_tso_ts_vlan, 0, 1, 1, 1, 0, 1, 0, 0, 8, \ TX_SEC_F | TSO_F | TSP_F | VLAN_F) \ -T(sec_tso_ts_vlan_l3l4csum, 1, 1, 1, 0, 1, 0, 1, 8, \ +T(sec_tso_ts_vlan_l3l4csum, 0, 1, 1, 1, 0, 1, 0, 1, 8, \ TX_SEC_F | TSO_F | TSP_F | VLAN_F | L3L4CSUM_F) \ -T(sec_tso_ts_vlan_ol3ol4csum, 1, 1, 1, 0, 1, 1, 0, 8, \ +T(sec_tso_ts_vlan_ol3ol4csum, 0, 1, 1, 1, 0, 1, 1, 0, 8, \ TX_SEC_F | TSO_F | TSP_F | VLAN_F | OL3OL4CSUM_F) \ -T(sec_tso_ts_vlan_ol3ol4csum_l3l4csum, 1, 1, 1, 0, 1, 1, 1, 8, \ +T(sec_tso_ts_vlan_ol3ol4csum_l3l4csum, 0, 1, 1, 1, 0, 1, 1, 1, 8, \ TX_SEC_F | TSO_F | TSP_F | VLAN_F | OL3OL4CSUM_F | \ L3L4CSUM_F) \ -T(sec_tso_ts_noff, 1, 1, 1, 1, 0, 0, 0, 8, \ +T(sec_tso_ts_noff, 0, 1, 1, 1, 1, 0, 0, 0, 8, \ TX_SEC_F | TSO_F | TSP_F | NOFF_F) \ -T(sec_tso_ts_noff_l3l4csum, 1, 1, 1, 1, 0, 0, 1, 8, \ +T(sec_tso_ts_noff_l3l4csum, 0, 1, 1, 1, 1, 0, 0, 1, 8, \ TX_SEC_F | TSO_F | TSP_F | NOFF_F | L3L4CSUM_F) \ -T(sec_tso_ts_noff_ol3ol4csum, 1, 1, 1, 1, 0, 1, 0, 8, \ +T(sec_tso_ts_noff_ol3ol4csum, 0, 1, 1, 1, 1, 0, 1, 0, 8, \ TX_SEC_F | TSO_F | TSP_F | NOFF_F | OL3OL4CSUM_F) \ -T(sec_tso_ts_noff_ol3ol4csum_l3l4csum, 1, 1, 1, 1, 0, 1, 1, 8, \ +T(sec_tso_ts_noff_ol3ol4csum_l3l4csum, 0, 1, 1, 1, 1, 0, 1, 1, 8, \ TX_SEC_F | TSO_F | TSP_F | NOFF_F | OL3OL4CSUM_F | \ L3L4CSUM_F) \ -T(sec_tso_ts_noff_vlan, 1, 1, 1, 1, 1, 0, 0, 8, \ +T(sec_tso_ts_noff_vlan, 0, 1, 1, 1, 1, 1, 0, 0, 8, \ TX_SEC_F | TSO_F | TSP_F | NOFF_F | VLAN_F) \ -T(sec_tso_ts_noff_vlan_l3l4csum, 1, 1, 1, 1, 1, 0, 1, 8, \ +T(sec_tso_ts_noff_vlan_l3l4csum, 0, 1, 1, 1, 1, 1, 0, 1, 8, \ TX_SEC_F | TSO_F | TSP_F | NOFF_F | VLAN_F | L3L4CSUM_F)\ -T(sec_tso_ts_noff_vlan_ol3ol4csum, 1, 1, 1, 1, 1, 1, 0, 8, \ +T(sec_tso_ts_noff_vlan_ol3ol4csum, 0, 1, 1, 1, 1, 1, 1, 0, 8, \ TX_SEC_F | TSO_F | TSP_F | NOFF_F | VLAN_F | \ OL3OL4CSUM_F) \ T(sec_tso_ts_noff_vlan_ol3ol4csum_l3l4csum, \ - 1, 1, 1, 1, 1, 1, 1, 8, \ + 0, 1, 1, 1, 1, 1, 1, 1, 8, \ TX_SEC_F | TSO_F | TSP_F | NOFF_F | VLAN_F | \ + OL3OL4CSUM_F | L3L4CSUM_F) \ +T(mark, 1, 0, 0, 0, 0, 0, 0, 0, 6, \ + TX_MARK_F) \ +T(mark_l3l4csum, 1, 0, 0, 0, 0, 0, 0, 1, 6, \ + TX_MARK_F | L3L4CSUM_F) \ +T(mark_ol3ol4csum, 1, 0, 0, 0, 0, 0, 1, 0, 6, \ + TX_MARK_F | OL3OL4CSUM_F) \ +T(mark_ol3ol4csum_l3l4csum, 1, 0, 0, 0, 0, 0, 1, 1, 6, \ + TX_MARK_F | OL3OL4CSUM_F | L3L4CSUM_F) \ +T(mark_vlan, 1, 0, 0, 0, 0, 1, 0, 0, 6, \ + TX_MARK_F | VLAN_F) \ +T(mark_vlan_l3l4csum, 1, 0, 0, 0, 0, 1, 0, 1, 6, \ + TX_MARK_F | VLAN_F | L3L4CSUM_F) \ +T(mark_vlan_ol3ol4csum, 1, 0, 0, 0, 0, 1, 1, 0, 6, \ + TX_MARK_F | VLAN_F | OL3OL4CSUM_F) \ +T(mark_vlan_ol3ol4csum_l3l4csum, 1, 0, 0, 0, 0, 1, 1, 1, 6, \ + TX_MARK_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F) \ +T(mark_noff, 1, 0, 0, 0, 1, 0, 0, 0, 6, \ + TX_MARK_F | NOFF_F) \ +T(mark_noff_l3l4csum, 1, 0, 0, 0, 1, 0, 0, 1, 6, \ + TX_MARK_F | NOFF_F | L3L4CSUM_F) \ +T(mark_noff_ol3ol4csum, 1, 0, 0, 0, 1, 0, 1, 0, 6, \ + TX_MARK_F | NOFF_F | OL3OL4CSUM_F) \ +T(mark_noff_ol3ol4csum_l3l4csum, 1, 0, 0, 0, 1, 0, 1, 1, 6, \ + TX_MARK_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F) \ +T(mark_noff_vlan, 1, 0, 0, 0, 1, 1, 0, 0, 6, \ + TX_MARK_F | NOFF_F | VLAN_F) \ +T(mark_noff_vlan_l3l4csum, 1, 0, 0, 0, 1, 1, 0, 1, 6, \ + TX_MARK_F | NOFF_F | VLAN_F | L3L4CSUM_F) \ +T(mark_noff_vlan_ol3ol4csum, 1, 0, 0, 0, 1, 1, 1, 0, 6, \ + TX_MARK_F | NOFF_F | VLAN_F | OL3OL4CSUM_F) \ +T(mark_noff_vlan_ol3ol4csum_l3l4csum, 1, 0, 0, 0, 1, 1, 1, 1, 6, \ + TX_MARK_F | NOFF_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F)\ +T(mark_ts, 1, 0, 0, 1, 0, 0, 0, 0, 8, \ + TX_MARK_F | TSP_F) \ +T(mark_ts_l3l4csum, 1, 0, 0, 1, 0, 0, 0, 1, 8, \ + TX_MARK_F | TSP_F | L3L4CSUM_F) \ +T(mark_ts_ol3ol4csum, 1, 0, 0, 1, 0, 0, 1, 0, 8, \ + TX_MARK_F | TSP_F | OL3OL4CSUM_F) \ +T(mark_ts_ol3ol4csum_l3l4csum, 1, 0, 0, 1, 0, 0, 1, 1, 8, \ + TX_MARK_F | TSP_F | OL3OL4CSUM_F | L3L4CSUM_F) \ +T(mark_ts_vlan, 1, 0, 0, 1, 0, 1, 0, 0, 8, \ + TX_MARK_F | TSP_F | VLAN_F) \ +T(mark_ts_vlan_l3l4csum, 1, 0, 0, 1, 0, 1, 0, 1, 8, \ + TX_MARK_F | TSP_F | VLAN_F | L3L4CSUM_F) \ +T(mark_ts_vlan_ol3ol4csum, 1, 0, 0, 1, 0, 1, 1, 0, 8, \ + TX_MARK_F | TSP_F | VLAN_F | OL3OL4CSUM_F) \ +T(mark_ts_vlan_ol3ol4csum_l3l4csum, 1, 0, 0, 1, 0, 1, 1, 1, 8, \ + TX_MARK_F | TSP_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F) \ +T(mark_ts_noff, 1, 0, 0, 1, 1, 0, 0, 0, 8, \ + TX_MARK_F | TSP_F | NOFF_F) \ +T(mark_ts_noff_l3l4csum, 1, 0, 0, 1, 1, 0, 0, 1, 8, \ + TX_MARK_F | TSP_F | NOFF_F | L3L4CSUM_F) \ +T(mark_ts_noff_ol3ol4csum, 1, 0, 0, 1, 1, 0, 1, 0, 8, \ + TX_MARK_F | TSP_F | NOFF_F | OL3OL4CSUM_F) \ +T(mark_ts_noff_ol3ol4csum_l3l4csum, 1, 0, 0, 1, 1, 0, 1, 1, 8, \ + TX_MARK_F | TSP_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F) \ +T(mark_ts_noff_vlan, 1, 0, 0, 1, 1, 1, 0, 0, 8, \ + TX_MARK_F | TSP_F | NOFF_F | VLAN_F) \ +T(mark_ts_noff_vlan_l3l4csum, 1, 0, 0, 1, 1, 1, 0, 1, 8, \ + TX_MARK_F | TSP_F | NOFF_F | VLAN_F | L3L4CSUM_F) \ +T(mark_ts_noff_vlan_ol3ol4csum, 1, 0, 0, 1, 1, 1, 1, 0, 8, \ + TX_MARK_F | TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F) \ +T(mark_ts_noff_vlan_ol3ol4csum_l3l4csum, \ + 1, 0, 0, 1, 1, 1, 1, 1, 8, \ + TX_MARK_F | TSP_F | NOFF_F | VLAN_F | OL3OL4CSUM_F | \ + L3L4CSUM_F) \ +T(mark_tso, 1, 0, 1, 0, 0, 0, 0, 0, 6, \ + TX_MARK_F | TSO_F) \ +T(mark_tso_l3l4csum, 1, 0, 1, 0, 0, 0, 0, 1, 6, \ + TX_MARK_F | TSO_F | L3L4CSUM_F) \ +T(mark_tso_ol3ol4csum, 1, 0, 1, 0, 0, 0, 1, 0, 6, \ + TX_MARK_F | TSO_F | OL3OL4CSUM_F) \ +T(mark_tso_ol3ol4csum_l3l4csum, 1, 0, 1, 0, 0, 0, 1, 1, 6, \ + TX_MARK_F | TSO_F | OL3OL4CSUM_F | L3L4CSUM_F) \ +T(mark_tso_vlan, 1, 0, 1, 0, 0, 1, 0, 0, 6, \ + TX_MARK_F | TSO_F | VLAN_F) \ +T(mark_tso_vlan_l3l4csum, 1, 0, 1, 0, 0, 1, 0, 1, 6, \ + TX_MARK_F | TSO_F | VLAN_F | L3L4CSUM_F) \ +T(mark_tso_vlan_ol3ol4csum, 1, 0, 1, 0, 0, 1, 1, 0, 6, \ + TX_MARK_F | TSO_F | VLAN_F | OL3OL4CSUM_F) \ +T(mark_tso_vlan_ol3ol4csum_l3l4csum, 1, 0, 1, 0, 0, 1, 1, 1, 6, \ + TX_MARK_F | TSO_F | VLAN_F | OL3OL4CSUM_F | L3L4CSUM_F) \ +T(mark_tso_noff, 1, 0, 1, 0, 1, 0, 0, 0, 6, \ + TX_MARK_F | TSO_F | NOFF_F) \ +T(mark_tso_noff_l3l4csum, 1, 0, 1, 0, 1, 0, 0, 1, 6, \ + TX_MARK_F | TSO_F | NOFF_F | L3L4CSUM_F) \ +T(mark_tso_noff_ol3ol4csum, 1, 0, 1, 0, 1, 0, 1, 0, 6, \ + TX_MARK_F | TSO_F | NOFF_F | OL3OL4CSUM_F) \ +T(mark_tso_noff_ol3ol4csum_l3l4csum, 1, 0, 1, 0, 1, 0, 1, 1, 6, \ + TX_MARK_F | TSO_F | NOFF_F | OL3OL4CSUM_F | L3L4CSUM_F) \ +T(mark_tso_noff_vlan, 1, 0, 1, 0, 1, 1, 0, 0, 6, \ + TX_MARK_F | TSO_F | NOFF_F | VLAN_F) \ +T(mark_tso_noff_vlan_l3l4csum, 1, 0, 1, 0, 1, 1, 0, 1, 6, \ + TX_MARK_F | TSO_F | NOFF_F | VLAN_F | L3L4CSUM_F) \ +T(mark_tso_noff_vlan_ol3ol4csum, 1, 0, 1, 0, 1, 1, 1, 0, 6, \ + TX_MARK_F | TSO_F | NOFF_F | VLAN_F | OL3OL4CSUM_F) \ +T(mark_tso_noff_vlan_ol3ol4csum_l3l4csum, \ + 1, 0, 1, 0, 1, 1, 1, 1, 6, \ + TX_MARK_F | TSO_F | NOFF_F | VLAN_F | OL3OL4CSUM_F | \ + L3L4CSUM_F) \ +T(mark_tso_ts, 1, 0, 1, 1, 0, 0, 0, 0, 8, \ + TX_MARK_F | TSO_F | TSP_F) \ +T(mark_tso_ts_l3l4csum, 1, 0, 1, 1, 0, 0, 0, 1, 8, \ + TX_MARK_F | TSO_F | TSP_F | L3L4CSUM_F) \ +T(mark_tso_ts_ol3ol4csum, 1, 0, 1, 1, 0, 0, 1, 0, 8, \ + TX_MARK_F | TSO_F | TSP_F | OL3OL4CSUM_F) \ +T(mark_tso_ts_ol3ol4csum_l3l4csum, 1, 0, 1, 1, 0, 0, 1, 1, 8, \ + TX_MARK_F | TSO_F | TSP_F | OL3OL4CSUM_F | L3L4CSUM_F) \ +T(mark_tso_ts_vlan, 1, 0, 1, 1, 0, 1, 0, 0, 8, \ + TX_MARK_F | TSO_F | TSP_F | VLAN_F) \ +T(mark_tso_ts_vlan_l3l4csum, 1, 0, 1, 1, 0, 1, 0, 1, 8, \ + TX_MARK_F | TSO_F | TSP_F | VLAN_F | L3L4CSUM_F) \ +T(mark_tso_ts_vlan_ol3ol4csum, 1, 0, 1, 1, 0, 1, 1, 0, 8, \ + TX_MARK_F | TSO_F | TSP_F | VLAN_F | OL3OL4CSUM_F) \ +T(mark_tso_ts_vlan_ol3ol4csum_l3l4csum, 1, 0, 1, 1, 0, 1, 1, 1, 8, \ + TX_MARK_F | TSO_F | TSP_F | VLAN_F | OL3OL4CSUM_F | \ + L3L4CSUM_F) \ +T(mark_tso_ts_noff, 1, 0, 1, 1, 1, 0, 0, 0, 8, \ + TX_MARK_F | TSO_F | TSP_F | NOFF_F) \ +T(mark_tso_ts_noff_l3l4csum, 1, 0, 1, 1, 1, 0, 0, 1, 8, \ + TX_MARK_F | TSO_F | TSP_F | NOFF_F | L3L4CSUM_F) \ +T(mark_tso_ts_noff_ol3ol4csum, 1, 0, 1, 1, 1, 0, 1, 0, 8, \ + TX_MARK_F | TSO_F | TSP_F | NOFF_F | OL3OL4CSUM_F) \ +T(mark_tso_ts_noff_ol3ol4csum_l3l4csum, 1, 0, 1, 1, 1, 0, 1, 1, 8, \ + TX_MARK_F | TSO_F | TSP_F | NOFF_F | OL3OL4CSUM_F | \ + L3L4CSUM_F) \ +T(mark_tso_ts_noff_vlan, 1, 0, 1, 1, 1, 1, 0, 0, 8, \ + TX_MARK_F | TSO_F | TSP_F | NOFF_F | VLAN_F) \ +T(mark_tso_ts_noff_vlan_l3l4csum, 1, 0, 1, 1, 1, 1, 0, 1, 8, \ + TX_MARK_F | TSO_F | TSP_F | NOFF_F | VLAN_F | \ + L3L4CSUM_F) \ +T(mark_tso_ts_noff_vlan_ol3ol4csum, 1, 0, 1, 1, 1, 1, 1, 0, 8, \ + TX_MARK_F | TSO_F | TSP_F | NOFF_F | VLAN_F | \ + OL3OL4CSUM_F) \ +T(mark_tso_ts_noff_vlan_ol3ol4csum_l3l4csum, \ + 1, 0, 1, 1, 1, 1, 1, 1, 8, \ + TX_MARK_F | TSO_F | TSP_F | NOFF_F | VLAN_F | \ + OL3OL4CSUM_F | L3L4CSUM_F) \ +T(mark_sec, 1, 1, 0, 0, 0, 0, 0, 0, 8, \ + TX_MARK_F | TX_SEC_F) \ +T(mark_sec_l3l4csum, 1, 1, 0, 0, 0, 0, 0, 1, 8, \ + TX_MARK_F | TX_SEC_F | L3L4CSUM_F) \ +T(mark_sec_ol3ol4csum, 1, 1, 0, 0, 0, 0, 1, 0, 8, \ + TX_MARK_F | TX_SEC_F | OL3OL4CSUM_F) \ +T(mark_sec_ol3ol4csum_l3l4csum, 1, 1, 0, 0, 0, 0, 1, 1, 8, \ + TX_MARK_F | TX_SEC_F | OL3OL4CSUM_F | L3L4CSUM_F) \ +T(mark_sec_vlan, 1, 1, 0, 0, 0, 1, 0, 0, 8, \ + TX_MARK_F | TX_SEC_F | VLAN_F) \ +T(mark_sec_vlan_l3l4csum, 1, 1, 0, 0, 0, 1, 0, 1, 8, \ + TX_MARK_F | TX_SEC_F | VLAN_F | L3L4CSUM_F) \ +T(mark_sec_vlan_ol3ol4csum, 1, 1, 0, 0, 0, 1, 1, 0, 8, \ + TX_MARK_F | TX_SEC_F | VLAN_F | OL3OL4CSUM_F) \ +T(mark_sec_vlan_ol3ol4csum_l3l4csum, 1, 1, 0, 0, 0, 1, 1, 1, 8, \ + TX_MARK_F | TX_SEC_F | VLAN_F | OL3OL4CSUM_F | \ + L3L4CSUM_F) \ +T(mark_sec_noff, 1, 1, 0, 0, 1, 0, 0, 0, 8, \ + TX_MARK_F | TX_SEC_F | NOFF_F) \ +T(mark_sec_noff_l3l4csum, 1, 1, 0, 0, 1, 0, 0, 1, 8, \ + TX_MARK_F | TX_SEC_F | NOFF_F | L3L4CSUM_F) \ +T(mark_sec_noff_ol3ol4csum, 1, 1, 0, 0, 1, 0, 1, 0, 8, \ + TX_MARK_F | TX_SEC_F | NOFF_F | OL3OL4CSUM_F) \ +T(mark_sec_noff_ol3ol4csum_l3l4csum, 1, 1, 0, 0, 1, 0, 1, 1, 8, \ + TX_MARK_F | TX_SEC_F | NOFF_F | OL3OL4CSUM_F | \ + L3L4CSUM_F) \ +T(mark_sec_noff_vlan, 1, 1, 0, 0, 1, 1, 0, 0, 8, \ + TX_MARK_F | TX_SEC_F | NOFF_F | VLAN_F) \ +T(mark_sec_noff_vlan_l3l4csum, 1, 1, 0, 0, 1, 1, 0, 1, 8, \ + TX_MARK_F | TX_SEC_F | NOFF_F | VLAN_F | L3L4CSUM_F) \ +T(mark_sec_noff_vlan_ol3ol4csum, 1, 1, 0, 0, 1, 1, 1, 0, 8, \ + TX_MARK_F | TX_SEC_F | NOFF_F | VLAN_F | OL3OL4CSUM_F) \ +T(mark_sec_noff_vlan_ol3ol4csum_l3l4csum, \ + 1, 1, 0, 0, 1, 1, 1, 1, 8, \ + TX_MARK_F | TX_SEC_F | NOFF_F | VLAN_F | OL3OL4CSUM_F | \ + L3L4CSUM_F) \ +T(mark_sec_ts, 1, 1, 0, 1, 0, 0, 0, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSP_F) \ +T(mark_sec_ts_l3l4csum, 1, 1, 0, 1, 0, 0, 0, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSP_F | L3L4CSUM_F) \ +T(mark_sec_ts_ol3ol4csum, 1, 1, 0, 1, 0, 0, 1, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSP_F | OL3OL4CSUM_F) \ +T(mark_sec_ts_ol3ol4csum_l3l4csum, 1, 1, 0, 1, 0, 0, 1, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSP_F | OL3OL4CSUM_F | \ + L3L4CSUM_F) \ +T(mark_sec_ts_vlan, 1, 1, 0, 1, 0, 1, 0, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSP_F | VLAN_F) \ +T(mark_sec_ts_vlan_l3l4csum, 1, 1, 0, 1, 0, 1, 0, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSP_F | VLAN_F | L3L4CSUM_F) \ +T(mark_sec_ts_vlan_ol3ol4csum, 1, 1, 0, 1, 0, 1, 1, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSP_F | VLAN_F | OL3OL4CSUM_F) \ +T(mark_sec_ts_vlan_ol3ol4csum_l3l4csum, 1, 1, 0, 1, 0, 1, 1, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSP_F | VLAN_F | OL3OL4CSUM_F | \ + L3L4CSUM_F) \ +T(mark_sec_ts_noff, 1, 1, 0, 1, 1, 0, 0, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSP_F | NOFF_F) \ +T(mark_sec_ts_noff_l3l4csum, 1, 1, 0, 1, 1, 0, 0, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSP_F | NOFF_F | L3L4CSUM_F) \ +T(mark_sec_ts_noff_ol3ol4csum, 1, 1, 0, 1, 1, 0, 1, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSP_F | NOFF_F | OL3OL4CSUM_F) \ +T(mark_sec_ts_noff_ol3ol4csum_l3l4csum, 1, 1, 0, 1, 1, 0, 1, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSP_F | NOFF_F | OL3OL4CSUM_F | \ + L3L4CSUM_F) \ +T(mark_sec_ts_noff_vlan, 1, 1, 0, 1, 1, 1, 0, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSP_F | NOFF_F | VLAN_F) \ +T(mark_sec_ts_noff_vlan_l3l4csum, 1, 1, 0, 1, 1, 1, 0, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSP_F | NOFF_F | VLAN_F | \ + L3L4CSUM_F) \ +T(mark_sec_ts_noff_vlan_ol3ol4csum, 1, 1, 0, 1, 1, 1, 1, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSP_F | NOFF_F | VLAN_F | \ + OL3OL4CSUM_F) \ +T(mark_sec_ts_noff_vlan_ol3ol4csum_l3l4csum, \ + 1, 1, 0, 1, 1, 1, 1, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSP_F | NOFF_F | VLAN_F | \ + OL3OL4CSUM_F | L3L4CSUM_F) \ +T(mark_sec_tso, 1, 1, 1, 0, 0, 0, 0, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F) \ +T(mark_sec_tso_l3l4csum, 1, 1, 1, 0, 0, 0, 0, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | L3L4CSUM_F) \ +T(mark_sec_tso_ol3ol4csum, 1, 1, 1, 0, 0, 0, 1, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | OL3OL4CSUM_F) \ +T(mark_sec_tso_ol3ol4csum_l3l4csum, 1, 1, 1, 0, 0, 0, 1, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | OL3OL4CSUM_F | \ + L3L4CSUM_F) \ +T(mark_sec_tso_vlan, 1, 1, 1, 0, 0, 1, 0, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | VLAN_F) \ +T(mark_sec_tso_vlan_l3l4csum, 1, 1, 1, 0, 0, 1, 0, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | VLAN_F | L3L4CSUM_F) \ +T(mark_sec_tso_vlan_ol3ol4csum, 1, 1, 1, 0, 0, 1, 1, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | VLAN_F | OL3OL4CSUM_F) \ +T(mark_sec_tso_vlan_ol3ol4csum_l3l4csum, \ + 1, 1, 1, 0, 0, 1, 1, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | VLAN_F | OL3OL4CSUM_F | \ + L3L4CSUM_F) \ +T(mark_sec_tso_noff, 1, 1, 1, 0, 1, 0, 0, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | NOFF_F) \ +T(mark_sec_tso_noff_l3l4csum, 1, 1, 1, 0, 1, 0, 0, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | NOFF_F | L3L4CSUM_F) \ +T(mark_sec_tso_noff_ol3ol4csum, 1, 1, 1, 0, 1, 0, 1, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | NOFF_F | OL3OL4CSUM_F) \ +T(mark_sec_tso_noff_ol3ol4csum_l3l4csum, \ + 1, 1, 1, 0, 1, 0, 1, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | NOFF_F | OL3OL4CSUM_F | \ + L3L4CSUM_F) \ +T(mark_sec_tso_noff_vlan, 1, 1, 1, 0, 1, 1, 0, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | NOFF_F | VLAN_F) \ +T(mark_sec_tso_noff_vlan_l3l4csum, 1, 1, 1, 0, 1, 1, 0, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | NOFF_F | VLAN_F | \ + L3L4CSUM_F) \ +T(mark_sec_tso_noff_vlan_ol3ol4csum, 1, 1, 1, 0, 1, 1, 1, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | NOFF_F | VLAN_F | \ + OL3OL4CSUM_F) \ +T(mark_sec_tso_noff_vlan_ol3ol4csum_l3l4csum, \ + 1, 1, 1, 0, 1, 1, 1, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | NOFF_F | VLAN_F | \ + OL3OL4CSUM_F | L3L4CSUM_F) \ +T(mark_sec_tso_ts, 1, 1, 1, 1, 0, 0, 0, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | TSP_F) \ +T(mark_sec_tso_ts_l3l4csum, 1, 1, 1, 1, 0, 0, 0, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | TSP_F | L3L4CSUM_F) \ +T(mark_sec_tso_ts_ol3ol4csum, 1, 1, 1, 1, 0, 0, 1, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | TSP_F | OL3OL4CSUM_F) \ +T(mark_sec_tso_ts_ol3ol4csum_l3l4csum, 1, 1, 1, 1, 0, 0, 1, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | TSP_F | OL3OL4CSUM_F | \ + L3L4CSUM_F) \ +T(mark_sec_tso_ts_vlan, 1, 1, 1, 1, 0, 1, 0, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | TSP_F | VLAN_F) \ +T(mark_sec_tso_ts_vlan_l3l4csum, 1, 1, 1, 1, 0, 1, 0, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | TSP_F | VLAN_F | \ + L3L4CSUM_F) \ +T(mark_sec_tso_ts_vlan_ol3ol4csum, 1, 1, 1, 1, 0, 1, 1, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | TSP_F | VLAN_F | \ + OL3OL4CSUM_F) \ +T(mark_sec_tso_ts_vlan_ol3ol4csum_l3l4csum, \ + 1, 1, 1, 1, 0, 1, 1, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | TSP_F | VLAN_F | \ + OL3OL4CSUM_F | L3L4CSUM_F) \ +T(mark_sec_tso_ts_noff, 1, 1, 1, 1, 1, 0, 0, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | TSP_F | NOFF_F) \ +T(mark_sec_tso_ts_noff_l3l4csum, 1, 1, 1, 1, 1, 0, 0, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | TSP_F | NOFF_F | \ + L3L4CSUM_F) \ +T(mark_sec_tso_ts_noff_ol3ol4csum, 1, 1, 1, 1, 1, 0, 1, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | TSP_F | NOFF_F | \ + OL3OL4CSUM_F) \ +T(mark_sec_tso_ts_noff_ol3ol4csum_l3l4csum, \ + 1, 1, 1, 1, 1, 0, 1, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | TSP_F | NOFF_F | \ + OL3OL4CSUM_F | L3L4CSUM_F) \ +T(mark_sec_tso_ts_noff_vlan, 1, 1, 1, 1, 1, 1, 0, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | TSP_F | NOFF_F | VLAN_F) \ +T(mark_sec_tso_ts_noff_vlan_l3l4csum, 1, 1, 1, 1, 1, 1, 0, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | TSP_F | NOFF_F | VLAN_F |\ + L3L4CSUM_F) \ +T(mark_sec_tso_ts_noff_vlan_ol3ol4csum, 1, 1, 1, 1, 1, 1, 1, 0, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | TSP_F | NOFF_F | VLAN_F |\ + OL3OL4CSUM_F) \ +T(mark_sec_tso_ts_noff_vlan_ol3ol4csum_l3l4csum, \ + 1, 1, 1, 1, 1, 1, 1, 1, 8, \ + TX_MARK_F | TX_SEC_F | TSO_F | TSP_F | NOFF_F | VLAN_F |\ OL3OL4CSUM_F | L3L4CSUM_F) + + #endif /* __OTX2_TX_H__ */