net/atlantic: implement core logic for Tx/Rx

Add RX/TX function prototypes for further datapath development.

Signed-off-by: Igor Russkikh <igor.russkikh@aquantia.com>
Signed-off-by: Pavel Belous <pavel.belous@aquantia.com>
This commit is contained in:
Pavel Belous 2018-10-12 11:09:22 +00:00 committed by Ferruh Yigit
parent bb42aa9ffe
commit b78958e237
6 changed files with 74 additions and 0 deletions

View File

@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
Queue start/stop = Y
FW version = Y
Linux UIO = Y
ARMv8 = Y

View File

@ -24,6 +24,7 @@ VPATH += $(SRCDIR)/hw_atl
#
# all source are stored in SRCS-y
#
SRCS-$(CONFIG_RTE_LIBRTE_ATLANTIC_PMD) += atl_rxtx.c
SRCS-$(CONFIG_RTE_LIBRTE_ATLANTIC_PMD) += atl_ethdev.c
SRCS-$(CONFIG_RTE_LIBRTE_ATLANTIC_PMD) += atl_hw_regs.c
SRCS-$(CONFIG_RTE_LIBRTE_ATLANTIC_PMD) += hw_atl_utils.c

View File

@ -104,6 +104,9 @@ eth_atl_dev_init(struct rte_eth_dev *eth_dev)
PMD_INIT_FUNC_TRACE();
eth_dev->dev_ops = &atl_eth_dev_ops;
eth_dev->rx_pkt_burst = &atl_recv_pkts;
eth_dev->tx_pkt_burst = &atl_xmit_pkts;
eth_dev->tx_pkt_prepare = &atl_prep_pkts;
/* For secondary processes, the primary process has done all the work */
if (rte_eal_process_type() != RTE_PROC_PRIMARY)
@ -155,6 +158,8 @@ eth_atl_dev_uninit(struct rte_eth_dev *eth_dev)
atl_dev_close(eth_dev);
eth_dev->dev_ops = NULL;
eth_dev->rx_pkt_burst = NULL;
eth_dev->tx_pkt_burst = NULL;
rte_free(eth_dev->data->mac_addrs);
eth_dev->data->mac_addrs = NULL;
@ -208,6 +213,15 @@ atl_dev_start(struct rte_eth_dev *dev)
err = hw_atl_b0_hw_init(hw, dev->data->mac_addrs->addr_bytes);
hw_atl_b0_hw_start(hw);
/* initialize transmission unit */
atl_tx_init(dev);
/* This can fail when allocating mbufs for descriptor rings */
err = atl_rx_init(dev);
if (err) {
PMD_INIT_LOG(ERR, "Unable to initialize RX hardware");
return -EIO;
}
PMD_INIT_LOG(DEBUG, "FW version: %u.%u.%u",
hw->fw_ver_actual >> 24,

View File

@ -21,4 +21,19 @@ struct atl_adapter {
struct aq_hw_cfg_s hw_cfg;
};
/*
* RX/TX function prototypes
*/
int atl_rx_init(struct rte_eth_dev *dev);
int atl_tx_init(struct rte_eth_dev *dev);
uint16_t atl_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
uint16_t nb_pkts);
uint16_t atl_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
uint16_t nb_pkts);
uint16_t atl_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
uint16_t nb_pkts);
#endif /* _ATLANTIC_ETHDEV_H_ */

View File

@ -0,0 +1,42 @@
/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(c) 2018 Aquantia Corporation
*/
#include "atl_ethdev.h"
int
atl_tx_init(struct rte_eth_dev *eth_dev __rte_unused)
{
return 0;
}
int
atl_rx_init(struct rte_eth_dev *eth_dev __rte_unused)
{
return 0;
}
uint16_t
atl_prep_pkts(void *tx_queue __rte_unused,
struct rte_mbuf **tx_pkts __rte_unused,
uint16_t nb_pkts __rte_unused)
{
return 0;
}
uint16_t
atl_recv_pkts(void *rx_queue __rte_unused,
struct rte_mbuf **rx_pkts __rte_unused,
uint16_t nb_pkts __rte_unused)
{
return 0;
}
uint16_t
atl_xmit_pkts(void *tx_queue __rte_unused,
struct rte_mbuf **tx_pkts __rte_unused,
uint16_t nb_pkts __rte_unused)
{
return 0;
}

View File

@ -2,6 +2,7 @@
# Copyright(c) 2018 Aquantia Corporation
sources = files(
'atl_rxtx.c',
'atl_ethdev.c',
'atl_hw_regs.c',
'hw_atl/hw_atl_b0.c',