numam-dpdk/drivers/net/hns3/hns3_rxtx_vec.h
Chengwen Feng 2ad146efb1 net/hns3: rename header guards
Currently, the hns3 driver uses _HNS3_XXX conditional compilation
macros to prevent duplicate header files. But in the C11 standard, all
identifiers starting with an underscore plus an uppercase letter are
always reserved. So this patch fixes it.

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
2022-10-04 18:09:48 +02:00

98 lines
2.1 KiB
C

/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(c) 2020-2021 HiSilicon Limited.
*/
#ifndef HNS3_RXTX_VEC_H
#define HNS3_RXTX_VEC_H
#include "hns3_rxtx.h"
#include "hns3_ethdev.h"
static inline void
hns3_tx_bulk_free_buffers(struct hns3_tx_queue *txq)
{
struct rte_mbuf **free = txq->free;
struct hns3_entry *tx_entry;
struct rte_mbuf *m;
int nb_free = 0;
uint16_t i;
tx_entry = &txq->sw_ring[txq->next_to_clean];
if (txq->mbuf_fast_free_en) {
rte_mempool_put_bulk(tx_entry->mbuf->pool, (void **)tx_entry,
txq->tx_rs_thresh);
for (i = 0; i < txq->tx_rs_thresh; i++)
tx_entry[i].mbuf = NULL;
goto update_field;
}
for (i = 0; i < txq->tx_rs_thresh; i++, tx_entry++) {
m = rte_pktmbuf_prefree_seg(tx_entry->mbuf);
tx_entry->mbuf = NULL;
if (m == NULL)
continue;
if (nb_free && m->pool != free[0]->pool) {
rte_mempool_put_bulk(free[0]->pool, (void **)free,
nb_free);
nb_free = 0;
}
free[nb_free++] = m;
}
if (nb_free)
rte_mempool_put_bulk(free[0]->pool, (void **)free, nb_free);
update_field:
/* Update numbers of available descriptor due to buffer freed */
txq->tx_bd_ready += txq->tx_rs_thresh;
txq->next_to_clean += txq->tx_rs_thresh;
if (txq->next_to_clean >= txq->nb_tx_desc)
txq->next_to_clean = 0;
}
static inline void
hns3_tx_free_buffers(struct hns3_tx_queue *txq)
{
struct hns3_desc *tx_desc;
uint16_t i;
/*
* All mbufs can be released only when the VLD bits of all
* descriptors in a batch are cleared.
*/
tx_desc = &txq->tx_ring[txq->next_to_clean];
for (i = 0; i < txq->tx_rs_thresh; i++, tx_desc++) {
if (tx_desc->tx.tp_fe_sc_vld_ra_ri &
rte_le_to_cpu_16(BIT(HNS3_TXD_VLD_B)))
return;
}
hns3_tx_bulk_free_buffers(txq);
}
static inline uint16_t
hns3_rx_reassemble_pkts(struct rte_mbuf **rx_pkts,
uint16_t nb_pkts,
uint64_t pkt_err_mask)
{
uint16_t count, i;
uint64_t mask;
if (likely(pkt_err_mask == 0))
return nb_pkts;
count = 0;
for (i = 0; i < nb_pkts; i++) {
mask = ((uint64_t)1u) << i;
if (pkt_err_mask & mask)
rte_pktmbuf_free_seg(rx_pkts[i]);
else
rx_pkts[count++] = rx_pkts[i];
}
return count;
}
#endif /* HNS3_RXTX_VEC_H */