#define NIX_RX_OFFLOAD_TSTAMP_F BIT(4)
#define NIX_RX_OFFLOAD_VLAN_STRIP_F BIT(5)
#define NIX_RX_OFFLOAD_SECURITY_F BIT(6)
+#define NIX_RX_OFFLOAD_MAX (NIX_RX_OFFLOAD_SECURITY_F << 1)
/* Flags to control cqe_to_mbuf conversion function.
* Defining it from backwards to denote its been
return rc;
}
+static inline uint64_t
+nix_rx_sec_mbuf_err_update(const union nix_rx_parse_u *rx, uint16_t res,
+ uint64_t *rearm_val, uint16_t *len)
+{
+ uint8_t uc_cc = res >> 8;
+ uint8_t cc = res & 0xFF;
+ uint64_t data_off;
+ uint64_t ol_flags;
+ uint16_t m_len;
+
+ if (unlikely(cc != CPT_COMP_GOOD))
+ return RTE_MBUF_F_RX_SEC_OFFLOAD |
+ RTE_MBUF_F_RX_SEC_OFFLOAD_FAILED;
+
+ data_off = *rearm_val & (BIT_ULL(16) - 1);
+ m_len = rx->cn9k.pkt_lenm1 + 1;
+
+ switch (uc_cc) {
+ case ROC_IE_ON_UCC_IP_PAYLOAD_TYPE_ERR:
+ case ROC_IE_ON_UCC_AUTH_ERR:
+ case ROC_IE_ON_UCC_PADDING_INVALID:
+ /* Adjust data offset to start at copied L2 */
+ data_off += ROC_ONF_IPSEC_INB_SPI_SEQ_SZ +
+ ROC_ONF_IPSEC_INB_MAX_L2_SZ;
+ ol_flags = RTE_MBUF_F_RX_SEC_OFFLOAD |
+ RTE_MBUF_F_RX_SEC_OFFLOAD_FAILED;
+ break;
+ case ROC_IE_ON_UCC_CTX_INVALID:
+ case ROC_IE_ON_UCC_SPI_MISMATCH:
+ case ROC_IE_ON_UCC_SA_MISMATCH:
+ /* Return as normal packet */
+ ol_flags = 0;
+ break;
+ default:
+ /* Return as error packet after updating packet lengths */
+ ol_flags = RTE_MBUF_F_RX_SEC_OFFLOAD |
+ RTE_MBUF_F_RX_SEC_OFFLOAD_FAILED;
+ break;
+ }
+
+ *len = m_len;
+ *rearm_val = *rearm_val & ~(BIT_ULL(16) - 1);
+ *rearm_val |= data_off;
+ return ol_flags;
+}
+
static __rte_always_inline uint64_t
nix_rx_sec_mbuf_update(const struct nix_cqe_hdr_s *cq, struct rte_mbuf *m,
uintptr_t sa_base, uint64_t *rearm_val, uint16_t *len)
rte_prefetch0((void *)data);
- if (unlikely(res != (CPT_COMP_GOOD | ROC_IE_ONF_UCC_SUCCESS << 8)))
- return RTE_MBUF_F_RX_SEC_OFFLOAD | RTE_MBUF_F_RX_SEC_OFFLOAD_FAILED;
+ if (unlikely(res != (CPT_COMP_GOOD | ROC_IE_ON_UCC_SUCCESS << 8)))
+ return nix_rx_sec_mbuf_err_update(rx, res, rearm_val, len);
data += lcptr;
/* 20 bits of tag would have the SPI */
ol_flags =
nix_update_match_id(rx->cn9k.match_id, ol_flags, mbuf);
+ mbuf->ol_flags = ol_flags;
+ *(uint64_t *)(&mbuf->rearm_data) = val;
mbuf->pkt_len = len;
mbuf->data_len = len;
- *(uint64_t *)(&mbuf->rearm_data) = val;
-
- mbuf->ol_flags = ol_flags;
if (flag & NIX_RX_MULTI_SEG_F)
- nix_cqe_xtract_mseg(rx, mbuf, val, flag);
+ /*
+ * For multi segment packets, mbuf length correction according
+ * to Rx timestamp length will be handled later during
+ * timestamp data process.
+ * Hence, flag argument is not required.
+ */
+ nix_cqe_xtract_mseg(rx, mbuf, val, 0);
else
mbuf->next = NULL;
}
return RTE_MIN(pkts, available);
}
+static __rte_always_inline void
+cn9k_nix_mbuf_to_tstamp(struct rte_mbuf *mbuf,
+ struct cnxk_timesync_info *tstamp,
+ const uint8_t ts_enable, uint64_t *tstamp_ptr)
+{
+ if (ts_enable) {
+ mbuf->pkt_len -= CNXK_NIX_TIMESYNC_RX_OFFSET;
+ mbuf->data_len -= CNXK_NIX_TIMESYNC_RX_OFFSET;
+
+ /* Reading the rx timestamp inserted by CGX, viz at
+ * starting of the packet data.
+ */
+ *cnxk_nix_timestamp_dynfield(mbuf, tstamp) =
+ rte_be_to_cpu_64(*tstamp_ptr);
+ /* RTE_MBUF_F_RX_IEEE1588_TMST flag needs to be set only in case
+ * PTP packets are received.
+ */
+ if (mbuf->packet_type == RTE_PTYPE_L2_ETHER_TIMESYNC) {
+ tstamp->rx_tstamp =
+ *cnxk_nix_timestamp_dynfield(mbuf, tstamp);
+ tstamp->rx_ready = 1;
+ mbuf->ol_flags |= RTE_MBUF_F_RX_IEEE1588_PTP |
+ RTE_MBUF_F_RX_IEEE1588_TMST |
+ tstamp->rx_tstamp_dynflag;
+ }
+ }
+}
+
static __rte_always_inline uint16_t
cn9k_nix_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t pkts,
const uint16_t flags)
cn9k_nix_cqe_to_mbuf(cq, cq->tag, mbuf, lookup_mem, mbuf_init,
flags);
- cnxk_nix_mbuf_to_tstamp(mbuf, rxq->tstamp,
+ cn9k_nix_mbuf_to_tstamp(mbuf, rxq->tstamp,
(flags & NIX_RX_OFFLOAD_TSTAMP_F),
- (flags & NIX_RX_MULTI_SEG_F),
(uint64_t *)((uint8_t *)mbuf
+ data_off));
rx_pkts[packets++] = mbuf;
vst1q_u64((uint64_t *)mbuf2->rearm_data, rearm2);
vst1q_u64((uint64_t *)mbuf3->rearm_data, rearm3);
- /* Store the mbufs to rx_pkts */
- vst1q_u64((uint64_t *)&rx_pkts[packets], mbuf01);
- vst1q_u64((uint64_t *)&rx_pkts[packets + 2], mbuf23);
-
if (flags & NIX_RX_MULTI_SEG_F) {
/* Multi segment is enable build mseg list for
* individual mbufs in scalar mode.
mbuf3->next = NULL;
}
+ /* Store the mbufs to rx_pkts */
+ vst1q_u64((uint64_t *)&rx_pkts[packets], mbuf01);
+ vst1q_u64((uint64_t *)&rx_pkts[packets + 2], mbuf23);
+
/* Prefetch mbufs */
roc_prefetch_store_keep(mbuf0);
roc_prefetch_store_keep(mbuf1);
#define R_SEC_F NIX_RX_OFFLOAD_SECURITY_F
/* [R_SEC_F] [RX_VLAN_F] [TS] [MARK] [CKSUM] [PTYPE] [RSS] */
-#define NIX_RX_FASTPATH_MODES \
-R(no_offload, 0, 0, 0, 0, 0, 0, 0, \
- NIX_RX_OFFLOAD_NONE) \
-R(rss, 0, 0, 0, 0, 0, 0, 1, \
- RSS_F) \
-R(ptype, 0, 0, 0, 0, 0, 1, 0, \
- PTYPE_F) \
-R(ptype_rss, 0, 0, 0, 0, 0, 1, 1, \
- PTYPE_F | RSS_F) \
-R(cksum, 0, 0, 0, 0, 1, 0, 0, \
- CKSUM_F) \
-R(cksum_rss, 0, 0, 0, 0, 1, 0, 1, \
- CKSUM_F | RSS_F) \
-R(cksum_ptype, 0, 0, 0, 0, 1, 1, 0, \
- CKSUM_F | PTYPE_F) \
-R(cksum_ptype_rss, 0, 0, 0, 0, 1, 1, 1, \
- CKSUM_F | PTYPE_F | RSS_F) \
-R(mark, 0, 0, 0, 1, 0, 0, 0, \
- MARK_F) \
-R(mark_rss, 0, 0, 0, 1, 0, 0, 1, \
- MARK_F | RSS_F) \
-R(mark_ptype, 0, 0, 0, 1, 0, 1, 0, \
- MARK_F | PTYPE_F) \
-R(mark_ptype_rss, 0, 0, 0, 1, 0, 1, 1, \
- MARK_F | PTYPE_F | RSS_F) \
-R(mark_cksum, 0, 0, 0, 1, 1, 0, 0, \
- MARK_F | CKSUM_F) \
-R(mark_cksum_rss, 0, 0, 0, 1, 1, 0, 1, \
- MARK_F | CKSUM_F | RSS_F) \
-R(mark_cksum_ptype, 0, 0, 0, 1, 1, 1, 0, \
- MARK_F | CKSUM_F | PTYPE_F) \
-R(mark_cksum_ptype_rss, 0, 0, 0, 1, 1, 1, 1, \
- MARK_F | CKSUM_F | PTYPE_F | RSS_F) \
-R(ts, 0, 0, 1, 0, 0, 0, 0, \
- TS_F) \
-R(ts_rss, 0, 0, 1, 0, 0, 0, 1, \
- TS_F | RSS_F) \
-R(ts_ptype, 0, 0, 1, 0, 0, 1, 0, \
- TS_F | PTYPE_F) \
-R(ts_ptype_rss, 0, 0, 1, 0, 0, 1, 1, \
- TS_F | PTYPE_F | RSS_F) \
-R(ts_cksum, 0, 0, 1, 0, 1, 0, 0, \
- TS_F | CKSUM_F) \
-R(ts_cksum_rss, 0, 0, 1, 0, 1, 0, 1, \
- TS_F | CKSUM_F | RSS_F) \
-R(ts_cksum_ptype, 0, 0, 1, 0, 1, 1, 0, \
- TS_F | CKSUM_F | PTYPE_F) \
-R(ts_cksum_ptype_rss, 0, 0, 1, 0, 1, 1, 1, \
- TS_F | CKSUM_F | PTYPE_F | RSS_F) \
-R(ts_mark, 0, 0, 1, 1, 0, 0, 0, \
- TS_F | MARK_F) \
-R(ts_mark_rss, 0, 0, 1, 1, 0, 0, 1, \
- TS_F | MARK_F | RSS_F) \
-R(ts_mark_ptype, 0, 0, 1, 1, 0, 1, 0, \
- TS_F | MARK_F | PTYPE_F) \
-R(ts_mark_ptype_rss, 0, 0, 1, 1, 0, 1, 1, \
- TS_F | MARK_F | PTYPE_F | RSS_F) \
-R(ts_mark_cksum, 0, 0, 1, 1, 1, 0, 0, \
- TS_F | MARK_F | CKSUM_F) \
-R(ts_mark_cksum_rss, 0, 0, 1, 1, 1, 0, 1, \
- TS_F | MARK_F | CKSUM_F | RSS_F) \
-R(ts_mark_cksum_ptype, 0, 0, 1, 1, 1, 1, 0, \
- TS_F | MARK_F | CKSUM_F | PTYPE_F) \
-R(ts_mark_cksum_ptype_rss, 0, 0, 1, 1, 1, 1, 1, \
- TS_F | MARK_F | CKSUM_F | PTYPE_F | RSS_F) \
-R(vlan, 0, 1, 0, 0, 0, 0, 0, \
- RX_VLAN_F) \
-R(vlan_rss, 0, 1, 0, 0, 0, 0, 1, \
- RX_VLAN_F | RSS_F) \
-R(vlan_ptype, 0, 1, 0, 0, 0, 1, 0, \
- RX_VLAN_F | PTYPE_F) \
-R(vlan_ptype_rss, 0, 1, 0, 0, 0, 1, 1, \
- RX_VLAN_F | PTYPE_F | RSS_F) \
-R(vlan_cksum, 0, 1, 0, 0, 1, 0, 0, \
- RX_VLAN_F | CKSUM_F) \
-R(vlan_cksum_rss, 0, 1, 0, 0, 1, 0, 1, \
- RX_VLAN_F | CKSUM_F | RSS_F) \
-R(vlan_cksum_ptype, 0, 1, 0, 0, 1, 1, 0, \
- RX_VLAN_F | CKSUM_F | PTYPE_F) \
-R(vlan_cksum_ptype_rss, 0, 1, 0, 0, 1, 1, 1, \
- RX_VLAN_F | CKSUM_F | PTYPE_F | RSS_F) \
-R(vlan_mark, 0, 1, 0, 1, 0, 0, 0, \
- RX_VLAN_F | MARK_F) \
-R(vlan_mark_rss, 0, 1, 0, 1, 0, 0, 1, \
- RX_VLAN_F | MARK_F | RSS_F) \
-R(vlan_mark_ptype, 0, 1, 0, 1, 0, 1, 0, \
- RX_VLAN_F | MARK_F | PTYPE_F) \
-R(vlan_mark_ptype_rss, 0, 1, 0, 1, 0, 1, 1, \
- RX_VLAN_F | MARK_F | PTYPE_F | RSS_F) \
-R(vlan_mark_cksum, 0, 1, 0, 1, 1, 0, 0, \
- RX_VLAN_F | MARK_F | CKSUM_F) \
-R(vlan_mark_cksum_rss, 0, 1, 0, 1, 1, 0, 1, \
- RX_VLAN_F | MARK_F | CKSUM_F | RSS_F) \
-R(vlan_mark_cksum_ptype, 0, 1, 0, 1, 1, 1, 0, \
- RX_VLAN_F | MARK_F | CKSUM_F | PTYPE_F) \
-R(vlan_mark_cksum_ptype_rss, 0, 1, 0, 1, 1, 1, 1, \
- RX_VLAN_F | MARK_F | CKSUM_F | PTYPE_F | RSS_F) \
-R(vlan_ts, 0, 1, 1, 0, 0, 0, 0, \
- RX_VLAN_F | TS_F) \
-R(vlan_ts_rss, 0, 1, 1, 0, 0, 0, 1, \
- RX_VLAN_F | TS_F | RSS_F) \
-R(vlan_ts_ptype, 0, 1, 1, 0, 0, 1, 0, \
- RX_VLAN_F | TS_F | PTYPE_F) \
-R(vlan_ts_ptype_rss, 0, 1, 1, 0, 0, 1, 1, \
- RX_VLAN_F | TS_F | PTYPE_F | RSS_F) \
-R(vlan_ts_cksum, 0, 1, 1, 0, 1, 0, 0, \
- RX_VLAN_F | TS_F | CKSUM_F) \
-R(vlan_ts_cksum_rss, 0, 1, 1, 0, 1, 0, 1, \
- RX_VLAN_F | TS_F | CKSUM_F | RSS_F) \
-R(vlan_ts_cksum_ptype, 0, 1, 1, 0, 1, 1, 0, \
- RX_VLAN_F | TS_F | CKSUM_F | PTYPE_F) \
-R(vlan_ts_cksum_ptype_rss, 0, 1, 1, 0, 1, 1, 1, \
- RX_VLAN_F | TS_F | CKSUM_F | PTYPE_F | RSS_F) \
-R(vlan_ts_mark, 0, 1, 1, 1, 0, 0, 0, \
- RX_VLAN_F | TS_F | MARK_F) \
-R(vlan_ts_mark_rss, 0, 1, 1, 1, 0, 0, 1, \
- RX_VLAN_F | TS_F | MARK_F | RSS_F) \
-R(vlan_ts_mark_ptype, 0, 1, 1, 1, 0, 1, 0, \
- RX_VLAN_F | TS_F | MARK_F | PTYPE_F) \
-R(vlan_ts_mark_ptype_rss, 0, 1, 1, 1, 0, 1, 1, \
- RX_VLAN_F | TS_F | MARK_F | PTYPE_F | RSS_F) \
-R(vlan_ts_mark_cksum, 0, 1, 1, 1, 1, 0, 0, \
- RX_VLAN_F | TS_F | MARK_F | CKSUM_F) \
-R(vlan_ts_mark_cksum_rss, 0, 1, 1, 1, 1, 0, 1, \
- RX_VLAN_F | TS_F | MARK_F | CKSUM_F | RSS_F) \
-R(vlan_ts_mark_cksum_ptype, 0, 1, 1, 1, 1, 1, 0, \
- RX_VLAN_F | TS_F | MARK_F | CKSUM_F | PTYPE_F) \
-R(vlan_ts_mark_cksum_ptype_rss, 0, 1, 1, 1, 1, 1, 1, \
- RX_VLAN_F | TS_F | MARK_F | CKSUM_F | PTYPE_F | RSS_F) \
-R(sec, 1, 0, 0, 0, 0, 0, 0, \
- R_SEC_F) \
-R(sec_rss, 1, 0, 0, 0, 0, 0, 1, \
- RSS_F) \
-R(sec_ptype, 1, 0, 0, 0, 0, 1, 0, \
- R_SEC_F | PTYPE_F) \
-R(sec_ptype_rss, 1, 0, 0, 0, 0, 1, 1, \
- R_SEC_F | PTYPE_F | RSS_F) \
-R(sec_cksum, 1, 0, 0, 0, 1, 0, 0, \
- R_SEC_F | CKSUM_F) \
-R(sec_cksum_rss, 1, 0, 0, 0, 1, 0, 1, \
- R_SEC_F | CKSUM_F | RSS_F) \
-R(sec_cksum_ptype, 1, 0, 0, 0, 1, 1, 0, \
- R_SEC_F | CKSUM_F | PTYPE_F) \
-R(sec_cksum_ptype_rss, 1, 0, 0, 0, 1, 1, 1, \
- R_SEC_F | CKSUM_F | PTYPE_F | RSS_F) \
-R(sec_mark, 1, 0, 0, 1, 0, 0, 0, \
- R_SEC_F | MARK_F) \
-R(sec_mark_rss, 1, 0, 0, 1, 0, 0, 1, \
- R_SEC_F | MARK_F | RSS_F) \
-R(sec_mark_ptype, 1, 0, 0, 1, 0, 1, 0, \
- R_SEC_F | MARK_F | PTYPE_F) \
-R(sec_mark_ptype_rss, 1, 0, 0, 1, 0, 1, 1, \
- R_SEC_F | MARK_F | PTYPE_F | RSS_F) \
-R(sec_mark_cksum, 1, 0, 0, 1, 1, 0, 0, \
- R_SEC_F | MARK_F | CKSUM_F) \
-R(sec_mark_cksum_rss, 1, 0, 0, 1, 1, 0, 1, \
- R_SEC_F | MARK_F | CKSUM_F | RSS_F) \
-R(sec_mark_cksum_ptype, 1, 0, 0, 1, 1, 1, 0, \
- R_SEC_F | MARK_F | CKSUM_F | PTYPE_F) \
-R(sec_mark_cksum_ptype_rss, 1, 0, 0, 1, 1, 1, 1, \
- R_SEC_F | MARK_F | CKSUM_F | PTYPE_F | RSS_F) \
-R(sec_ts, 1, 0, 1, 0, 0, 0, 0, \
- R_SEC_F | TS_F) \
-R(sec_ts_rss, 1, 0, 1, 0, 0, 0, 1, \
- R_SEC_F | TS_F | RSS_F) \
-R(sec_ts_ptype, 1, 0, 1, 0, 0, 1, 0, \
- R_SEC_F | TS_F | PTYPE_F) \
-R(sec_ts_ptype_rss, 1, 0, 1, 0, 0, 1, 1, \
- R_SEC_F | TS_F | PTYPE_F | RSS_F) \
-R(sec_ts_cksum, 1, 0, 1, 0, 1, 0, 0, \
- R_SEC_F | TS_F | CKSUM_F) \
-R(sec_ts_cksum_rss, 1, 0, 1, 0, 1, 0, 1, \
- R_SEC_F | TS_F | CKSUM_F | RSS_F) \
-R(sec_ts_cksum_ptype, 1, 0, 1, 0, 1, 1, 0, \
- R_SEC_F | TS_F | CKSUM_F | PTYPE_F) \
-R(sec_ts_cksum_ptype_rss, 1, 0, 1, 0, 1, 1, 1, \
- R_SEC_F | TS_F | CKSUM_F | PTYPE_F | RSS_F) \
-R(sec_ts_mark, 1, 0, 1, 1, 0, 0, 0, \
- R_SEC_F | TS_F | MARK_F) \
-R(sec_ts_mark_rss, 1, 0, 1, 1, 0, 0, 1, \
- R_SEC_F | TS_F | MARK_F | RSS_F) \
-R(sec_ts_mark_ptype, 1, 0, 1, 1, 0, 1, 0, \
- R_SEC_F | TS_F | MARK_F | PTYPE_F) \
-R(sec_ts_mark_ptype_rss, 1, 0, 1, 1, 0, 1, 1, \
- R_SEC_F | TS_F | MARK_F | PTYPE_F | RSS_F) \
-R(sec_ts_mark_cksum, 1, 0, 1, 1, 1, 0, 0, \
- R_SEC_F | TS_F | MARK_F | CKSUM_F) \
-R(sec_ts_mark_cksum_rss, 1, 0, 1, 1, 1, 0, 1, \
- R_SEC_F | TS_F | MARK_F | CKSUM_F | RSS_F) \
-R(sec_ts_mark_cksum_ptype, 1, 0, 1, 1, 1, 1, 0, \
- R_SEC_F | TS_F | MARK_F | CKSUM_F | PTYPE_F) \
-R(sec_ts_mark_cksum_ptype_rss, 1, 0, 1, 1, 1, 1, 1, \
- R_SEC_F | TS_F | MARK_F | CKSUM_F | PTYPE_F | RSS_F) \
-R(sec_vlan, 1, 1, 0, 0, 0, 0, 0, \
- R_SEC_F | RX_VLAN_F) \
-R(sec_vlan_rss, 1, 1, 0, 0, 0, 0, 1, \
- R_SEC_F | RX_VLAN_F | RSS_F) \
-R(sec_vlan_ptype, 1, 1, 0, 0, 0, 1, 0, \
- R_SEC_F | RX_VLAN_F | PTYPE_F) \
-R(sec_vlan_ptype_rss, 1, 1, 0, 0, 0, 1, 1, \
- R_SEC_F | RX_VLAN_F | PTYPE_F | RSS_F) \
-R(sec_vlan_cksum, 1, 1, 0, 0, 1, 0, 0, \
- R_SEC_F | RX_VLAN_F | CKSUM_F) \
-R(sec_vlan_cksum_rss, 1, 1, 0, 0, 1, 0, 1, \
- R_SEC_F | RX_VLAN_F | CKSUM_F | RSS_F) \
-R(sec_vlan_cksum_ptype, 1, 1, 0, 0, 1, 1, 0, \
- R_SEC_F | RX_VLAN_F | CKSUM_F | PTYPE_F) \
-R(sec_vlan_cksum_ptype_rss, 1, 1, 0, 0, 1, 1, 1, \
- R_SEC_F | RX_VLAN_F | CKSUM_F | PTYPE_F | RSS_F) \
-R(sec_vlan_mark, 1, 1, 0, 1, 0, 0, 0, \
- R_SEC_F | RX_VLAN_F | MARK_F) \
-R(sec_vlan_mark_rss, 1, 1, 0, 1, 0, 0, 1, \
- R_SEC_F | RX_VLAN_F | MARK_F | RSS_F) \
-R(sec_vlan_mark_ptype, 1, 1, 0, 1, 0, 1, 0, \
- R_SEC_F | RX_VLAN_F | MARK_F | PTYPE_F) \
-R(sec_vlan_mark_ptype_rss, 1, 1, 0, 1, 0, 1, 1, \
- R_SEC_F | RX_VLAN_F | MARK_F | PTYPE_F | RSS_F) \
-R(sec_vlan_mark_cksum, 1, 1, 0, 1, 1, 0, 0, \
- R_SEC_F | RX_VLAN_F | MARK_F | CKSUM_F) \
-R(sec_vlan_mark_cksum_rss, 1, 1, 0, 1, 1, 0, 1, \
- R_SEC_F | RX_VLAN_F | MARK_F | CKSUM_F | RSS_F) \
-R(sec_vlan_mark_cksum_ptype, 1, 1, 0, 1, 1, 1, 0, \
- R_SEC_F | RX_VLAN_F | MARK_F | CKSUM_F | PTYPE_F) \
-R(sec_vlan_mark_cksum_ptype_rss, 1, 1, 0, 1, 1, 1, 1, \
- R_SEC_F | RX_VLAN_F | MARK_F | CKSUM_F | PTYPE_F | RSS_F) \
-R(sec_vlan_ts, 1, 1, 1, 0, 0, 0, 0, \
- R_SEC_F | RX_VLAN_F | TS_F) \
-R(sec_vlan_ts_rss, 1, 1, 1, 0, 0, 0, 1, \
- R_SEC_F | RX_VLAN_F | TS_F | RSS_F) \
-R(sec_vlan_ts_ptype, 1, 1, 1, 0, 0, 1, 0, \
- R_SEC_F | RX_VLAN_F | TS_F | PTYPE_F) \
-R(sec_vlan_ts_ptype_rss, 1, 1, 1, 0, 0, 1, 1, \
- R_SEC_F | RX_VLAN_F | TS_F | PTYPE_F | RSS_F) \
-R(sec_vlan_ts_cksum, 1, 1, 1, 0, 1, 0, 0, \
- R_SEC_F | RX_VLAN_F | TS_F | CKSUM_F) \
-R(sec_vlan_ts_cksum_rss, 1, 1, 1, 0, 1, 0, 1, \
- R_SEC_F | RX_VLAN_F | TS_F | CKSUM_F | RSS_F) \
-R(sec_vlan_ts_cksum_ptype, 1, 1, 1, 0, 1, 1, 0, \
- R_SEC_F | RX_VLAN_F | TS_F | CKSUM_F | PTYPE_F) \
-R(sec_vlan_ts_cksum_ptype_rss, 1, 1, 1, 0, 1, 1, 1, \
- R_SEC_F | RX_VLAN_F | TS_F | CKSUM_F | PTYPE_F | RSS_F) \
-R(sec_vlan_ts_mark, 1, 1, 1, 1, 0, 0, 0, \
- R_SEC_F | RX_VLAN_F | TS_F | MARK_F) \
-R(sec_vlan_ts_mark_rss, 1, 1, 1, 1, 0, 0, 1, \
- R_SEC_F | RX_VLAN_F | TS_F | MARK_F | RSS_F) \
-R(sec_vlan_ts_mark_ptype, 1, 1, 1, 1, 0, 1, 0, \
- R_SEC_F | RX_VLAN_F | TS_F | MARK_F | PTYPE_F) \
-R(sec_vlan_ts_mark_ptype_rss, 1, 1, 1, 1, 0, 1, 1, \
- R_SEC_F | RX_VLAN_F | TS_F | MARK_F | PTYPE_F | RSS_F) \
-R(sec_vlan_ts_mark_cksum, 1, 1, 1, 1, 1, 0, 0, \
- R_SEC_F | RX_VLAN_F | TS_F | MARK_F | CKSUM_F) \
-R(sec_vlan_ts_mark_cksum_rss, 1, 1, 1, 1, 1, 0, 1, \
- R_SEC_F | RX_VLAN_F | TS_F | MARK_F | CKSUM_F | RSS_F) \
-R(sec_vlan_ts_mark_cksum_ptype, 1, 1, 1, 1, 1, 1, 0, \
- R_SEC_F | RX_VLAN_F | TS_F | MARK_F | CKSUM_F | PTYPE_F) \
-R(sec_vlan_ts_mark_cksum_ptype_rss, 1, 1, 1, 1, 1, 1, 1, \
- R_SEC_F | RX_VLAN_F | TS_F | MARK_F | CKSUM_F | PTYPE_F | RSS_F)
-
-#define R(name, f6, f5, f4, f3, f2, f1, f0, flags) \
+#define NIX_RX_FASTPATH_MODES_0_15 \
+ R(no_offload, NIX_RX_OFFLOAD_NONE) \
+ R(rss, RSS_F) \
+ R(ptype, PTYPE_F) \
+ R(ptype_rss, PTYPE_F | RSS_F) \
+ R(cksum, CKSUM_F) \
+ R(cksum_rss, CKSUM_F | RSS_F) \
+ R(cksum_ptype, CKSUM_F | PTYPE_F) \
+ R(cksum_ptype_rss, CKSUM_F | PTYPE_F | RSS_F) \
+ R(mark, MARK_F) \
+ R(mark_rss, MARK_F | RSS_F) \
+ R(mark_ptype, MARK_F | PTYPE_F) \
+ R(mark_ptype_rss, MARK_F | PTYPE_F | RSS_F) \
+ R(mark_cksum, MARK_F | CKSUM_F) \
+ R(mark_cksum_rss, MARK_F | CKSUM_F | RSS_F) \
+ R(mark_cksum_ptype, MARK_F | CKSUM_F | PTYPE_F) \
+ R(mark_cksum_ptype_rss, MARK_F | CKSUM_F | PTYPE_F | RSS_F)
+
+#define NIX_RX_FASTPATH_MODES_16_31 \
+ R(ts, TS_F) \
+ R(ts_rss, TS_F | RSS_F) \
+ R(ts_ptype, TS_F | PTYPE_F) \
+ R(ts_ptype_rss, TS_F | PTYPE_F | RSS_F) \
+ R(ts_cksum, TS_F | CKSUM_F) \
+ R(ts_cksum_rss, TS_F | CKSUM_F | RSS_F) \
+ R(ts_cksum_ptype, TS_F | CKSUM_F | PTYPE_F) \
+ R(ts_cksum_ptype_rss, TS_F | CKSUM_F | PTYPE_F | RSS_F) \
+ R(ts_mark, TS_F | MARK_F) \
+ R(ts_mark_rss, TS_F | MARK_F | RSS_F) \
+ R(ts_mark_ptype, TS_F | MARK_F | PTYPE_F) \
+ R(ts_mark_ptype_rss, TS_F | MARK_F | PTYPE_F | RSS_F) \
+ R(ts_mark_cksum, TS_F | MARK_F | CKSUM_F) \
+ R(ts_mark_cksum_rss, TS_F | MARK_F | CKSUM_F | RSS_F) \
+ R(ts_mark_cksum_ptype, TS_F | MARK_F | CKSUM_F | PTYPE_F) \
+ R(ts_mark_cksum_ptype_rss, TS_F | MARK_F | CKSUM_F | PTYPE_F | RSS_F)
+
+#define NIX_RX_FASTPATH_MODES_32_47 \
+ R(vlan, RX_VLAN_F) \
+ R(vlan_rss, RX_VLAN_F | RSS_F) \
+ R(vlan_ptype, RX_VLAN_F | PTYPE_F) \
+ R(vlan_ptype_rss, RX_VLAN_F | PTYPE_F | RSS_F) \
+ R(vlan_cksum, RX_VLAN_F | CKSUM_F) \
+ R(vlan_cksum_rss, RX_VLAN_F | CKSUM_F | RSS_F) \
+ R(vlan_cksum_ptype, RX_VLAN_F | CKSUM_F | PTYPE_F) \
+ R(vlan_cksum_ptype_rss, RX_VLAN_F | CKSUM_F | PTYPE_F | RSS_F) \
+ R(vlan_mark, RX_VLAN_F | MARK_F) \
+ R(vlan_mark_rss, RX_VLAN_F | MARK_F | RSS_F) \
+ R(vlan_mark_ptype, RX_VLAN_F | MARK_F | PTYPE_F) \
+ R(vlan_mark_ptype_rss, RX_VLAN_F | MARK_F | PTYPE_F | RSS_F) \
+ R(vlan_mark_cksum, RX_VLAN_F | MARK_F | CKSUM_F) \
+ R(vlan_mark_cksum_rss, RX_VLAN_F | MARK_F | CKSUM_F | RSS_F) \
+ R(vlan_mark_cksum_ptype, RX_VLAN_F | MARK_F | CKSUM_F | PTYPE_F) \
+ R(vlan_mark_cksum_ptype_rss, \
+ RX_VLAN_F | MARK_F | CKSUM_F | PTYPE_F | RSS_F)
+
+#define NIX_RX_FASTPATH_MODES_48_63 \
+ R(vlan_ts, RX_VLAN_F | TS_F) \
+ R(vlan_ts_rss, RX_VLAN_F | TS_F | RSS_F) \
+ R(vlan_ts_ptype, RX_VLAN_F | TS_F | PTYPE_F) \
+ R(vlan_ts_ptype_rss, RX_VLAN_F | TS_F | PTYPE_F | RSS_F) \
+ R(vlan_ts_cksum, RX_VLAN_F | TS_F | CKSUM_F) \
+ R(vlan_ts_cksum_rss, RX_VLAN_F | TS_F | CKSUM_F | RSS_F) \
+ R(vlan_ts_cksum_ptype, RX_VLAN_F | TS_F | CKSUM_F | PTYPE_F) \
+ R(vlan_ts_cksum_ptype_rss, \
+ RX_VLAN_F | TS_F | CKSUM_F | PTYPE_F | RSS_F) \
+ R(vlan_ts_mark, RX_VLAN_F | TS_F | MARK_F) \
+ R(vlan_ts_mark_rss, RX_VLAN_F | TS_F | MARK_F | RSS_F) \
+ R(vlan_ts_mark_ptype, RX_VLAN_F | TS_F | MARK_F | PTYPE_F) \
+ R(vlan_ts_mark_ptype_rss, RX_VLAN_F | TS_F | MARK_F | PTYPE_F | RSS_F) \
+ R(vlan_ts_mark_cksum, RX_VLAN_F | TS_F | MARK_F | CKSUM_F) \
+ R(vlan_ts_mark_cksum_rss, RX_VLAN_F | TS_F | MARK_F | CKSUM_F | RSS_F) \
+ R(vlan_ts_mark_cksum_ptype, \
+ RX_VLAN_F | TS_F | MARK_F | CKSUM_F | PTYPE_F) \
+ R(vlan_ts_mark_cksum_ptype_rss, \
+ RX_VLAN_F | TS_F | MARK_F | CKSUM_F | PTYPE_F | RSS_F)
+
+#define NIX_RX_FASTPATH_MODES_64_79 \
+ R(sec, R_SEC_F) \
+ R(sec_rss, R_SEC_F | RSS_F) \
+ R(sec_ptype, R_SEC_F | PTYPE_F) \
+ R(sec_ptype_rss, R_SEC_F | PTYPE_F | RSS_F) \
+ R(sec_cksum, R_SEC_F | CKSUM_F) \
+ R(sec_cksum_rss, R_SEC_F | CKSUM_F | RSS_F) \
+ R(sec_cksum_ptype, R_SEC_F | CKSUM_F | PTYPE_F) \
+ R(sec_cksum_ptype_rss, R_SEC_F | CKSUM_F | PTYPE_F | RSS_F) \
+ R(sec_mark, R_SEC_F | MARK_F) \
+ R(sec_mark_rss, R_SEC_F | MARK_F | RSS_F) \
+ R(sec_mark_ptype, R_SEC_F | MARK_F | PTYPE_F) \
+ R(sec_mark_ptype_rss, R_SEC_F | MARK_F | PTYPE_F | RSS_F) \
+ R(sec_mark_cksum, R_SEC_F | MARK_F | CKSUM_F) \
+ R(sec_mark_cksum_rss, R_SEC_F | MARK_F | CKSUM_F | RSS_F) \
+ R(sec_mark_cksum_ptype, R_SEC_F | MARK_F | CKSUM_F | PTYPE_F) \
+ R(sec_mark_cksum_ptype_rss, \
+ R_SEC_F | MARK_F | CKSUM_F | PTYPE_F | RSS_F)
+
+#define NIX_RX_FASTPATH_MODES_80_95 \
+ R(sec_ts, R_SEC_F | TS_F) \
+ R(sec_ts_rss, R_SEC_F | TS_F | RSS_F) \
+ R(sec_ts_ptype, R_SEC_F | TS_F | PTYPE_F) \
+ R(sec_ts_ptype_rss, R_SEC_F | TS_F | PTYPE_F | RSS_F) \
+ R(sec_ts_cksum, R_SEC_F | TS_F | CKSUM_F) \
+ R(sec_ts_cksum_rss, R_SEC_F | TS_F | CKSUM_F | RSS_F) \
+ R(sec_ts_cksum_ptype, R_SEC_F | TS_F | CKSUM_F | PTYPE_F) \
+ R(sec_ts_cksum_ptype_rss, R_SEC_F | TS_F | CKSUM_F | PTYPE_F | RSS_F) \
+ R(sec_ts_mark, R_SEC_F | TS_F | MARK_F) \
+ R(sec_ts_mark_rss, R_SEC_F | TS_F | MARK_F | RSS_F) \
+ R(sec_ts_mark_ptype, R_SEC_F | TS_F | MARK_F | PTYPE_F) \
+ R(sec_ts_mark_ptype_rss, R_SEC_F | TS_F | MARK_F | PTYPE_F | RSS_F) \
+ R(sec_ts_mark_cksum, R_SEC_F | TS_F | MARK_F | CKSUM_F) \
+ R(sec_ts_mark_cksum_rss, R_SEC_F | TS_F | MARK_F | CKSUM_F | RSS_F) \
+ R(sec_ts_mark_cksum_ptype, \
+ R_SEC_F | TS_F | MARK_F | CKSUM_F | PTYPE_F) \
+ R(sec_ts_mark_cksum_ptype_rss, \
+ R_SEC_F | TS_F | MARK_F | CKSUM_F | PTYPE_F | RSS_F)
+
+#define NIX_RX_FASTPATH_MODES_96_111 \
+ R(sec_vlan, R_SEC_F | RX_VLAN_F) \
+ R(sec_vlan_rss, R_SEC_F | RX_VLAN_F | RSS_F) \
+ R(sec_vlan_ptype, R_SEC_F | RX_VLAN_F | PTYPE_F) \
+ R(sec_vlan_ptype_rss, R_SEC_F | RX_VLAN_F | PTYPE_F | RSS_F) \
+ R(sec_vlan_cksum, R_SEC_F | RX_VLAN_F | CKSUM_F) \
+ R(sec_vlan_cksum_rss, R_SEC_F | RX_VLAN_F | CKSUM_F | RSS_F) \
+ R(sec_vlan_cksum_ptype, R_SEC_F | RX_VLAN_F | CKSUM_F | PTYPE_F) \
+ R(sec_vlan_cksum_ptype_rss, \
+ R_SEC_F | RX_VLAN_F | CKSUM_F | PTYPE_F | RSS_F) \
+ R(sec_vlan_mark, R_SEC_F | RX_VLAN_F | MARK_F) \
+ R(sec_vlan_mark_rss, R_SEC_F | RX_VLAN_F | MARK_F | RSS_F) \
+ R(sec_vlan_mark_ptype, R_SEC_F | RX_VLAN_F | MARK_F | PTYPE_F) \
+ R(sec_vlan_mark_ptype_rss, \
+ R_SEC_F | RX_VLAN_F | MARK_F | PTYPE_F | RSS_F) \
+ R(sec_vlan_mark_cksum, R_SEC_F | RX_VLAN_F | MARK_F | CKSUM_F) \
+ R(sec_vlan_mark_cksum_rss, \
+ R_SEC_F | RX_VLAN_F | MARK_F | CKSUM_F | RSS_F) \
+ R(sec_vlan_mark_cksum_ptype, \
+ R_SEC_F | RX_VLAN_F | MARK_F | CKSUM_F | PTYPE_F) \
+ R(sec_vlan_mark_cksum_ptype_rss, \
+ R_SEC_F | RX_VLAN_F | MARK_F | CKSUM_F | PTYPE_F | RSS_F)
+
+#define NIX_RX_FASTPATH_MODES_112_127 \
+ R(sec_vlan_ts, R_SEC_F | RX_VLAN_F | TS_F) \
+ R(sec_vlan_ts_rss, R_SEC_F | RX_VLAN_F | TS_F | RSS_F) \
+ R(sec_vlan_ts_ptype, R_SEC_F | RX_VLAN_F | TS_F | PTYPE_F) \
+ R(sec_vlan_ts_ptype_rss, R_SEC_F | RX_VLAN_F | TS_F | PTYPE_F | RSS_F) \
+ R(sec_vlan_ts_cksum, R_SEC_F | RX_VLAN_F | TS_F | CKSUM_F) \
+ R(sec_vlan_ts_cksum_rss, R_SEC_F | RX_VLAN_F | TS_F | CKSUM_F | RSS_F) \
+ R(sec_vlan_ts_cksum_ptype, \
+ R_SEC_F | RX_VLAN_F | TS_F | CKSUM_F | PTYPE_F) \
+ R(sec_vlan_ts_cksum_ptype_rss, \
+ R_SEC_F | RX_VLAN_F | TS_F | CKSUM_F | PTYPE_F | RSS_F) \
+ R(sec_vlan_ts_mark, R_SEC_F | RX_VLAN_F | TS_F | MARK_F) \
+ R(sec_vlan_ts_mark_rss, R_SEC_F | RX_VLAN_F | TS_F | MARK_F | RSS_F) \
+ R(sec_vlan_ts_mark_ptype, \
+ R_SEC_F | RX_VLAN_F | TS_F | MARK_F | PTYPE_F) \
+ R(sec_vlan_ts_mark_ptype_rss, \
+ R_SEC_F | RX_VLAN_F | TS_F | MARK_F | PTYPE_F | RSS_F) \
+ R(sec_vlan_ts_mark_cksum, \
+ R_SEC_F | RX_VLAN_F | TS_F | MARK_F | CKSUM_F) \
+ R(sec_vlan_ts_mark_cksum_rss, \
+ R_SEC_F | RX_VLAN_F | TS_F | MARK_F | CKSUM_F | RSS_F) \
+ R(sec_vlan_ts_mark_cksum_ptype, \
+ R_SEC_F | RX_VLAN_F | TS_F | MARK_F | CKSUM_F | PTYPE_F) \
+ R(sec_vlan_ts_mark_cksum_ptype_rss, \
+ R_SEC_F | RX_VLAN_F | TS_F | MARK_F | CKSUM_F | PTYPE_F | RSS_F)
+
+#define NIX_RX_FASTPATH_MODES \
+ NIX_RX_FASTPATH_MODES_0_15 \
+ NIX_RX_FASTPATH_MODES_16_31 \
+ NIX_RX_FASTPATH_MODES_32_47 \
+ NIX_RX_FASTPATH_MODES_48_63 \
+ NIX_RX_FASTPATH_MODES_64_79 \
+ NIX_RX_FASTPATH_MODES_80_95 \
+ NIX_RX_FASTPATH_MODES_96_111 \
+ NIX_RX_FASTPATH_MODES_112_127
+
+#define R(name, flags) \
uint16_t __rte_noinline __rte_hot cn9k_nix_recv_pkts_##name( \
void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t pkts); \
- \
uint16_t __rte_noinline __rte_hot cn9k_nix_recv_pkts_mseg_##name( \
void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t pkts); \
- \
uint16_t __rte_noinline __rte_hot cn9k_nix_recv_pkts_vec_##name( \
void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t pkts); \
- \
uint16_t __rte_noinline __rte_hot cn9k_nix_recv_pkts_vec_mseg_##name( \
void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t pkts);
NIX_RX_FASTPATH_MODES
#undef R
+#define NIX_RX_RECV(fn, flags) \
+ uint16_t __rte_noinline __rte_hot fn( \
+ void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t pkts) \
+ { \
+ return cn9k_nix_recv_pkts(rx_queue, rx_pkts, pkts, (flags)); \
+ }
+
+#define NIX_RX_RECV_MSEG(fn, flags) NIX_RX_RECV(fn, flags | NIX_RX_MULTI_SEG_F)
+
+#define NIX_RX_RECV_VEC(fn, flags) \
+ uint16_t __rte_noinline __rte_hot fn( \
+ void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t pkts) \
+ { \
+ return cn9k_nix_recv_pkts_vector(rx_queue, rx_pkts, pkts, \
+ (flags)); \
+ }
+
+#define NIX_RX_RECV_VEC_MSEG(fn, flags) \
+ NIX_RX_RECV_VEC(fn, flags | NIX_RX_MULTI_SEG_F)
+
#endif /* __CN9K_RX_H__ */