From: Rakesh Kudurumalla <rkuduruma...@marvell.com> To handle OOP for inbound packet, processing is done based on NIX_RX_REAS_F flag. but for boards that does not support reassembly Inbound Out-Of-Place processing test case fails because reassembly flag is not updated in event mode. This patch fixes the same.
Signed-off-by: Rakesh Kudurumalla <rkuduruma...@marvell.com> --- drivers/net/cnxk/cn10k_ethdev_sec.c | 10 ++++++++++ drivers/net/cnxk/cnxk_ethdev.h | 4 ++++ drivers/net/cnxk/version.map | 1 + 3 files changed, 15 insertions(+) diff --git a/drivers/net/cnxk/cn10k_ethdev_sec.c b/drivers/net/cnxk/cn10k_ethdev_sec.c index 84e570f5b9..e911c3730b 100644 --- a/drivers/net/cnxk/cn10k_ethdev_sec.c +++ b/drivers/net/cnxk/cn10k_ethdev_sec.c @@ -28,6 +28,13 @@ PLT_STATIC_ASSERT(RTE_PMD_CNXK_AR_WIN_SIZE_MAX == ROC_AR_WIN_SIZE_MAX); PLT_STATIC_ASSERT(RTE_PMD_CNXK_LOG_MIN_AR_WIN_SIZE_M1 == ROC_LOG_MIN_AR_WIN_SIZE_M1); PLT_STATIC_ASSERT(RTE_PMD_CNXK_AR_WINBITS_SZ == ROC_AR_WINBITS_SZ); +cnxk_ethdev_rx_offload_cb_t cnxk_ethdev_rx_offload_cb; +void +cnxk_ethdev_rx_offload_cb_register(cnxk_ethdev_rx_offload_cb_t cb) +{ + cnxk_ethdev_rx_offload_cb = cb; +} + static struct rte_cryptodev_capabilities cn10k_eth_sec_crypto_caps[] = { { /* AES GCM */ .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, @@ -908,6 +915,9 @@ cn10k_eth_sec_session_create(void *device, !(dev->rx_offload_flags & NIX_RX_REAS_F)) { dev->rx_offload_flags |= NIX_RX_REAS_F; cn10k_eth_set_rx_function(eth_dev); + if (cnxk_ethdev_rx_offload_cb) + cnxk_ethdev_rx_offload_cb(eth_dev->data->port_id, + NIX_RX_REAS_F); } } else { struct roc_ot_ipsec_outb_sa *outb_sa, *outb_sa_dptr; diff --git a/drivers/net/cnxk/cnxk_ethdev.h b/drivers/net/cnxk/cnxk_ethdev.h index d4440b25ac..350adc1161 100644 --- a/drivers/net/cnxk/cnxk_ethdev.h +++ b/drivers/net/cnxk/cnxk_ethdev.h @@ -725,6 +725,10 @@ int cnxk_nix_lookup_mem_metapool_set(struct cnxk_eth_dev *dev); int cnxk_nix_lookup_mem_metapool_clear(struct cnxk_eth_dev *dev); __rte_internal int cnxk_nix_inb_mode_set(struct cnxk_eth_dev *dev, bool use_inl_dev); +typedef void (*cnxk_ethdev_rx_offload_cb_t)(uint16_t port_id, uint64_t flags); +__rte_internal +void cnxk_ethdev_rx_offload_cb_register(cnxk_ethdev_rx_offload_cb_t cb); + struct cnxk_eth_sec_sess *cnxk_eth_sec_sess_get_by_spi(struct cnxk_eth_dev *dev, uint32_t spi, bool inb); struct cnxk_eth_sec_sess * diff --git a/drivers/net/cnxk/version.map b/drivers/net/cnxk/version.map index 099c518ecf..edb0a1c059 100644 --- a/drivers/net/cnxk/version.map +++ b/drivers/net/cnxk/version.map @@ -23,4 +23,5 @@ EXPERIMENTAL { INTERNAL { global: cnxk_nix_inb_mode_set; + cnxk_ethdev_rx_offload_cb_register; }; -- 2.34.1