fm10k: allow to disable vector driver
fm10k driver will meet compile error on non-x86 platforms due to SSE instructions. Original implementation didn't have switch to turn off vPMD. The improvement introduces a macro to turn on/off vPMD functions, it's on by default. On non-x86 platforms, it can simply be turned off to fix compile issue. Signed-off-by: Chen Jing D(Mark) <jing.d.chen@intel.com>
This commit is contained in:
parent
06977caf34
commit
10eb9ce8dc
@ -206,6 +206,7 @@ CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX_FREE=n
|
||||
CONFIG_RTE_LIBRTE_FM10K_DEBUG_DRIVER=n
|
||||
CONFIG_RTE_LIBRTE_FM10K_RX_OLFLAGS_ENABLE=y
|
||||
CONFIG_RTE_LIBRTE_FM10K_INC_VECTOR=y
|
||||
|
||||
#
|
||||
# Compile burst-oriented Mellanox ConnectX-3 (MLX4) PMD
|
||||
|
@ -93,7 +93,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_FM10K_PMD) += fm10k_common.c
|
||||
SRCS-$(CONFIG_RTE_LIBRTE_FM10K_PMD) += fm10k_mbx.c
|
||||
SRCS-$(CONFIG_RTE_LIBRTE_FM10K_PMD) += fm10k_vf.c
|
||||
SRCS-$(CONFIG_RTE_LIBRTE_FM10K_PMD) += fm10k_api.c
|
||||
SRCS-$(CONFIG_RTE_LIBRTE_FM10K_PMD) += fm10k_rxtx_vec.c
|
||||
SRCS-$(CONFIG_RTE_LIBRTE_FM10K_INC_VECTOR) += fm10k_rxtx_vec.c
|
||||
|
||||
# this lib depends upon:
|
||||
DEPDIRS-$(CONFIG_RTE_LIBRTE_FM10K_PMD) += lib/librte_eal lib/librte_ether
|
||||
|
@ -129,6 +129,9 @@
|
||||
#define RTE_FM10K_TX_MAX_FREE_BUF_SZ 64
|
||||
#define RTE_FM10K_DESCS_PER_LOOP 4
|
||||
|
||||
#define FM10K_SIMPLE_TX_FLAG ((uint32_t)ETH_TXQ_FLAGS_NOMULTSEGS | \
|
||||
ETH_TXQ_FLAGS_NOOFFLOADS)
|
||||
|
||||
struct fm10k_macvlan_filter_info {
|
||||
uint16_t vlan_num; /* Total VLAN number */
|
||||
uint16_t mac_num; /* Total mac number */
|
||||
@ -354,4 +357,6 @@ uint16_t fm10k_recv_scattered_pkts_vec(void *, struct rte_mbuf **,
|
||||
uint16_t fm10k_xmit_pkts_vec(void *tx_queue, struct rte_mbuf **tx_pkts,
|
||||
uint16_t nb_pkts);
|
||||
void fm10k_txq_vec_setup(struct fm10k_tx_queue *txq);
|
||||
int fm10k_tx_vec_condition_check(struct fm10k_tx_queue *txq);
|
||||
|
||||
#endif
|
||||
|
@ -55,9 +55,6 @@
|
||||
#define CHARS_PER_UINT32 (sizeof(uint32_t))
|
||||
#define BIT_MASK_PER_UINT32 ((1 << CHARS_PER_UINT32) - 1)
|
||||
|
||||
#define FM10K_SIMPLE_TX_FLAG ((uint32_t)ETH_TXQ_FLAGS_NOMULTSEGS | \
|
||||
ETH_TXQ_FLAGS_NOOFFLOADS)
|
||||
|
||||
static void fm10k_close_mbx_service(struct fm10k_hw *hw);
|
||||
static void fm10k_dev_promiscuous_enable(struct rte_eth_dev *dev);
|
||||
static void fm10k_dev_promiscuous_disable(struct rte_eth_dev *dev);
|
||||
@ -132,6 +129,65 @@ fm10k_mbx_unlock(struct fm10k_hw *hw)
|
||||
rte_spinlock_unlock(FM10K_DEV_PRIVATE_TO_MBXLOCK(hw->back));
|
||||
}
|
||||
|
||||
/* Stubs needed for linkage when vPMD is disabled */
|
||||
int __attribute__((weak))
|
||||
fm10k_rx_vec_condition_check(__rte_unused struct rte_eth_dev *dev)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
uint16_t __attribute__((weak))
|
||||
fm10k_recv_pkts_vec(
|
||||
__rte_unused void *rx_queue,
|
||||
__rte_unused struct rte_mbuf **rx_pkts,
|
||||
__rte_unused uint16_t nb_pkts)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint16_t __attribute__((weak))
|
||||
fm10k_recv_scattered_pkts_vec(
|
||||
__rte_unused void *rx_queue,
|
||||
__rte_unused struct rte_mbuf **rx_pkts,
|
||||
__rte_unused uint16_t nb_pkts)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int __attribute__((weak))
|
||||
fm10k_rxq_vec_setup(__rte_unused struct fm10k_rx_queue *rxq)
|
||||
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
void __attribute__((weak))
|
||||
fm10k_rx_queue_release_mbufs_vec(
|
||||
__rte_unused struct fm10k_rx_queue *rxq)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
void __attribute__((weak))
|
||||
fm10k_txq_vec_setup(__rte_unused struct fm10k_tx_queue *txq)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int __attribute__((weak))
|
||||
fm10k_tx_vec_condition_check(__rte_unused struct fm10k_tx_queue *txq)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
uint16_t __attribute__((weak))
|
||||
fm10k_xmit_pkts_vec(__rte_unused void *tx_queue,
|
||||
__rte_unused struct rte_mbuf **tx_pkts,
|
||||
__rte_unused uint16_t nb_pkts)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* reset queue to initial state, allocate software buffers used when starting
|
||||
* device.
|
||||
@ -2394,8 +2450,8 @@ fm10k_set_tx_function(struct rte_eth_dev *dev)
|
||||
|
||||
for (i = 0; i < dev->data->nb_tx_queues; i++) {
|
||||
txq = dev->data->tx_queues[i];
|
||||
if ((txq->txq_flags & FM10K_SIMPLE_TX_FLAG) !=
|
||||
FM10K_SIMPLE_TX_FLAG) {
|
||||
/* Check if Vector Tx is satisfied */
|
||||
if (fm10k_tx_vec_condition_check(txq)) {
|
||||
use_sse = 0;
|
||||
break;
|
||||
}
|
||||
|
@ -641,6 +641,16 @@ fm10k_txq_vec_setup(struct fm10k_tx_queue *txq)
|
||||
txq->ops = &vec_txq_ops;
|
||||
}
|
||||
|
||||
int __attribute__((cold))
|
||||
fm10k_tx_vec_condition_check(struct fm10k_tx_queue *txq)
|
||||
{
|
||||
/* Vector TX can't offload any features yet */
|
||||
if ((txq->txq_flags & FM10K_SIMPLE_TX_FLAG) != FM10K_SIMPLE_TX_FLAG)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void
|
||||
vtx1(volatile struct fm10k_tx_desc *txdp,
|
||||
struct rte_mbuf *pkt, uint64_t flags)
|
||||
|
Loading…
Reference in New Issue
Block a user