[3/3] net/octeontx2: add Tx packet marking offload support
diff mbox series

Message ID 20200417072254.11455-3-nithind1988@gmail.com
State New
Delegated to: Jerin Jacob
Headers show
Series
  • [1/3] mbuf: add Tx offloads for packet marking
Related show

Checks

Context Check Description
ci/Intel-compilation fail apply issues
ci/checkpatch warning coding style issues

Commit Message

Nithin Kumar D April 17, 2020, 7:22 a.m. UTC
From: Nithin Dabilpuram <ndabilpuram@marvell.com>

This patch adds Tx packet marking offload support for
VLAN DEI, IP ECN, and IP DSCP.

Signed-off-by: Krzysztof Kanas <kkanas@marvell.com>
Signed-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com>
---

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(-)

Patch
diff mbox series

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__ */