net/atlantic: add PMD driver skeleton
Makefile/meson build infrastructure, atl_ethdev minimal skeleton, header with aquantia aQtion NIC device and vendor IDs. Signed-off-by: Igor Russkikh <igor.russkikh@aquantia.com> Signed-off-by: Pavel Belous <pavel.belous@aquantia.com>
This commit is contained in:
parent
1b4ce87dc5
commit
5bcf164961
@ -487,6 +487,13 @@ F: drivers/net/axgbe/
|
||||
F: doc/guides/nics/axgbe.rst
|
||||
F: doc/guides/nics/features/axgbe.ini
|
||||
|
||||
Aquantia atlantic
|
||||
M: Igor Russkikh <igor.russkikh@aquantia.com>
|
||||
M: Pavel Belous <pavel.belous@aquantia.com>
|
||||
F: drivers/net/atlantic/
|
||||
F: doc/guides/nics/atlantic.rst
|
||||
F: doc/guides/nics/features/atlantic.ini
|
||||
|
||||
Atomic Rules ARK
|
||||
M: Shepard Siegel <shepard.siegel@atomicrules.com>
|
||||
M: Ed Czeck <ed.czeck@atomicrules.com>
|
||||
|
@ -169,6 +169,11 @@ CONFIG_RTE_LIBRTE_ARK_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_ARK_DEBUG_STATS=n
|
||||
CONFIG_RTE_LIBRTE_ARK_DEBUG_TRACE=n
|
||||
|
||||
#
|
||||
# Compile Aquantia Atlantic PMD driver
|
||||
#
|
||||
CONFIG_RTE_LIBRTE_ATLANTIC_PMD=y
|
||||
|
||||
#
|
||||
# Compile AMD PMD
|
||||
#
|
||||
|
@ -48,6 +48,7 @@ CONFIG_RTE_LIBRTE_EAL_VMWARE_TSC_MAP_SUPPORT=n
|
||||
|
||||
# Note: Initially, all of the PMD drivers compilation are turned off on Power
|
||||
# Will turn on them only after the successful testing on Power
|
||||
CONFIG_RTE_LIBRTE_ATLANTIC_PMD=n
|
||||
CONFIG_RTE_LIBRTE_IXGBE_PMD=n
|
||||
CONFIG_RTE_LIBRTE_VIRTIO_PMD=y
|
||||
CONFIG_RTE_LIBRTE_VMXNET3_PMD=n
|
||||
|
37
doc/guides/nics/atlantic.rst
Normal file
37
doc/guides/nics/atlantic.rst
Normal file
@ -0,0 +1,37 @@
|
||||
.. SPDX-License-Identifier: BSD-3-Clause
|
||||
Copyright(c) 2018 Aquantia Corporation.
|
||||
|
||||
Aquantia Atlantic DPDK Driver
|
||||
=============================
|
||||
|
||||
Atlantic DPDK driver provides DPDK support for Aquantia's AQtion family of chipsets: AQC107/AQC108/AQC109
|
||||
|
||||
More information can be found at `Aquantia Official Website
|
||||
<https://www.aquantia.com/products/client-connectivity/>`_.
|
||||
|
||||
Supported features
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Configuration Information
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- ``CONFIG_RTE_LIBRTE_ATLANTIC_PMD`` (default ``y``)
|
||||
|
||||
Application Programming Interface
|
||||
---------------------------------
|
||||
|
||||
Limitations or Known issues
|
||||
---------------------------
|
||||
|
||||
Statistics
|
||||
~~~~~~~~~~
|
||||
|
||||
MTU setting
|
||||
~~~~~~~~~~~
|
||||
|
||||
Supported Chipsets and NICs
|
||||
---------------------------
|
||||
|
||||
- Aquantia AQtion AQC107 10 Gigabit Ethernet Controller
|
||||
- Aquantia AQtion AQC108 5 Gigabit Ethernet Controller
|
||||
- Aquantia AQtion AQC109 2.5 Gigabit Ethernet Controller
|
10
doc/guides/nics/features/atlantic.ini
Normal file
10
doc/guides/nics/features/atlantic.ini
Normal file
@ -0,0 +1,10 @@
|
||||
;
|
||||
; Supported features of the 'atlantic' network poll mode driver.
|
||||
;
|
||||
; Refer to default.ini for the full list of available PMD features.
|
||||
;
|
||||
[Features]
|
||||
Linux UIO = Y
|
||||
ARMv8 = Y
|
||||
x86-32 = Y
|
||||
x86-64 = Y
|
@ -12,6 +12,7 @@ Network Interface Controller Drivers
|
||||
features
|
||||
build_and_test
|
||||
ark
|
||||
atlantic
|
||||
avp
|
||||
axgbe
|
||||
bnx2x
|
||||
|
@ -10,6 +10,7 @@ endif
|
||||
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_PMD_AF_PACKET) += af_packet
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_ARK_PMD) += ark
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_ATLANTIC_PMD) += atlantic
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_AVF_PMD) += avf
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_AVP_PMD) += avp
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_AXGBE_PMD) += axgbe
|
||||
|
27
drivers/net/atlantic/Makefile
Normal file
27
drivers/net/atlantic/Makefile
Normal file
@ -0,0 +1,27 @@
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright(c) 2018 Aquantia Corporation
|
||||
|
||||
include $(RTE_SDK)/mk/rte.vars.mk
|
||||
|
||||
#
|
||||
# library name
|
||||
#
|
||||
LIB = librte_pmd_atlantic.a
|
||||
|
||||
CFLAGS += -O3
|
||||
CFLAGS += $(WERROR_FLAGS)
|
||||
|
||||
EXPORT_MAP := rte_pmd_atlantic_version.map
|
||||
|
||||
LIBABIVER := 1
|
||||
|
||||
LDLIBS += -lrte_eal
|
||||
LDLIBS += -lrte_ethdev -lrte_net
|
||||
LDLIBS += -lrte_bus_pci
|
||||
|
||||
#
|
||||
# all source are stored in SRCS-y
|
||||
#
|
||||
SRCS-$(CONFIG_RTE_LIBRTE_ATLANTIC_PMD) += atl_ethdev.c
|
||||
|
||||
include $(RTE_SDK)/mk/rte.lib.mk
|
96
drivers/net/atlantic/atl_common.h
Normal file
96
drivers/net/atlantic/atl_common.h
Normal file
@ -0,0 +1,96 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause
|
||||
* Copyright(c) 2018 Aquantia Corporation
|
||||
*/
|
||||
|
||||
#ifndef AQ_COMMON_H
|
||||
#define AQ_COMMON_H
|
||||
|
||||
#define ATL_PMD_DRIVER_VERSION "0.4.1"
|
||||
|
||||
#define PCI_VENDOR_ID_AQUANTIA 0x1D6A
|
||||
|
||||
#define AQ_DEVICE_ID_0001 0x0001
|
||||
#define AQ_DEVICE_ID_D100 0xD100
|
||||
#define AQ_DEVICE_ID_D107 0xD107
|
||||
#define AQ_DEVICE_ID_D108 0xD108
|
||||
#define AQ_DEVICE_ID_D109 0xD109
|
||||
|
||||
#define AQ_DEVICE_ID_AQC100 0x00B1
|
||||
#define AQ_DEVICE_ID_AQC107 0x07B1
|
||||
#define AQ_DEVICE_ID_AQC108 0x08B1
|
||||
#define AQ_DEVICE_ID_AQC109 0x09B1
|
||||
#define AQ_DEVICE_ID_AQC111 0x11B1
|
||||
#define AQ_DEVICE_ID_AQC112 0x12B1
|
||||
|
||||
#define AQ_DEVICE_ID_AQC100S 0x80B1
|
||||
#define AQ_DEVICE_ID_AQC107S 0x87B1
|
||||
#define AQ_DEVICE_ID_AQC108S 0x88B1
|
||||
#define AQ_DEVICE_ID_AQC109S 0x89B1
|
||||
#define AQ_DEVICE_ID_AQC111S 0x91B1
|
||||
#define AQ_DEVICE_ID_AQC112S 0x92B1
|
||||
|
||||
#define AQ_DEVICE_ID_AQC111E 0x51B1
|
||||
#define AQ_DEVICE_ID_AQC112E 0x52B1
|
||||
|
||||
#define HW_ATL_NIC_NAME "aQuantia AQtion 10Gbit Network Adapter"
|
||||
|
||||
#define AQ_HWREV_ANY 0
|
||||
#define AQ_HWREV_1 1
|
||||
#define AQ_HWREV_2 2
|
||||
|
||||
#define AQ_NIC_RATE_10G BIT(0)
|
||||
#define AQ_NIC_RATE_5G BIT(1)
|
||||
#define AQ_NIC_RATE_5G5R BIT(2)
|
||||
#define AQ_NIC_RATE_2G5 BIT(3)
|
||||
#define AQ_NIC_RATE_1G BIT(4)
|
||||
#define AQ_NIC_RATE_100M BIT(5)
|
||||
|
||||
#define AQ_NIC_RATE_EEE_10G BIT(6)
|
||||
#define AQ_NIC_RATE_EEE_5G BIT(7)
|
||||
#define AQ_NIC_RATE_EEE_2G5 BIT(8)
|
||||
#define AQ_NIC_RATE_EEE_1G BIT(9)
|
||||
|
||||
|
||||
#define ATL_MAX_RING_DESC (8 * 1024 - 8)
|
||||
#define ATL_MIN_RING_DESC 32
|
||||
#define ATL_RXD_ALIGN 8
|
||||
#define ATL_TXD_ALIGN 8
|
||||
#define ATL_TX_MAX_SEG 16
|
||||
|
||||
#define ATL_MAX_INTR_QUEUE_NUM 15
|
||||
|
||||
#define ATL_MISC_VEC_ID 10
|
||||
#define ATL_RX_VEC_START 0
|
||||
|
||||
#define AQ_NIC_WOL_ENABLED BIT(0)
|
||||
|
||||
|
||||
#define AQ_NIC_FC_OFF 0U
|
||||
#define AQ_NIC_FC_TX 1U
|
||||
#define AQ_NIC_FC_RX 2U
|
||||
#define AQ_NIC_FC_FULL 3U
|
||||
#define AQ_NIC_FC_AUTO 4U
|
||||
|
||||
|
||||
#define AQ_CFG_TX_FRAME_MAX (16U * 1024U)
|
||||
#define AQ_CFG_RX_FRAME_MAX (2U * 1024U)
|
||||
|
||||
#define AQ_HW_MULTICAST_ADDRESS_MAX 32
|
||||
#define AQ_HW_MAX_SEGS_SIZE 40
|
||||
|
||||
#define AQ_HW_MAX_RX_QUEUES 8
|
||||
#define AQ_HW_MAX_TX_QUEUES 8
|
||||
#define AQ_HW_MIN_RX_RING_SIZE 512
|
||||
#define AQ_HW_MAX_RX_RING_SIZE 8192
|
||||
#define AQ_HW_MIN_TX_RING_SIZE 512
|
||||
#define AQ_HW_MAX_TX_RING_SIZE 8192
|
||||
|
||||
#define ATL_DEFAULT_RX_FREE_THRESH 64
|
||||
#define ATL_DEFAULT_TX_FREE_THRESH 64
|
||||
|
||||
#define ATL_IRQ_CAUSE_LINK 0x8
|
||||
|
||||
#define AQ_HW_LED_BLINK 0x2U
|
||||
#define AQ_HW_LED_DEFAULT 0x0U
|
||||
|
||||
#endif /* AQ_COMMON_H */
|
170
drivers/net/atlantic/atl_ethdev.c
Normal file
170
drivers/net/atlantic/atl_ethdev.c
Normal file
@ -0,0 +1,170 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause
|
||||
* Copyright(c) 2018 Aquantia Corporation
|
||||
*/
|
||||
|
||||
#include <rte_ethdev_pci.h>
|
||||
|
||||
#include "atl_ethdev.h"
|
||||
#include "atl_common.h"
|
||||
|
||||
static int eth_atl_dev_init(struct rte_eth_dev *eth_dev);
|
||||
static int eth_atl_dev_uninit(struct rte_eth_dev *eth_dev);
|
||||
|
||||
static int atl_dev_configure(struct rte_eth_dev *dev);
|
||||
static int atl_dev_start(struct rte_eth_dev *dev);
|
||||
static void atl_dev_stop(struct rte_eth_dev *dev);
|
||||
static void atl_dev_close(struct rte_eth_dev *dev);
|
||||
static int atl_dev_reset(struct rte_eth_dev *dev);
|
||||
|
||||
static int eth_atl_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
|
||||
struct rte_pci_device *pci_dev);
|
||||
static int eth_atl_pci_remove(struct rte_pci_device *pci_dev);
|
||||
|
||||
static void atl_dev_info_get(struct rte_eth_dev *dev,
|
||||
struct rte_eth_dev_info *dev_info);
|
||||
|
||||
/*
|
||||
* The set of PCI devices this driver supports
|
||||
*/
|
||||
static const struct rte_pci_id pci_id_atl_map[] = {
|
||||
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_AQUANTIA, AQ_DEVICE_ID_0001) },
|
||||
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_AQUANTIA, AQ_DEVICE_ID_D100) },
|
||||
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_AQUANTIA, AQ_DEVICE_ID_D107) },
|
||||
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_AQUANTIA, AQ_DEVICE_ID_D108) },
|
||||
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_AQUANTIA, AQ_DEVICE_ID_D109) },
|
||||
|
||||
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_AQUANTIA, AQ_DEVICE_ID_AQC100) },
|
||||
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_AQUANTIA, AQ_DEVICE_ID_AQC107) },
|
||||
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_AQUANTIA, AQ_DEVICE_ID_AQC108) },
|
||||
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_AQUANTIA, AQ_DEVICE_ID_AQC109) },
|
||||
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_AQUANTIA, AQ_DEVICE_ID_AQC111) },
|
||||
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_AQUANTIA, AQ_DEVICE_ID_AQC112) },
|
||||
|
||||
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_AQUANTIA, AQ_DEVICE_ID_AQC100S) },
|
||||
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_AQUANTIA, AQ_DEVICE_ID_AQC107S) },
|
||||
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_AQUANTIA, AQ_DEVICE_ID_AQC108S) },
|
||||
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_AQUANTIA, AQ_DEVICE_ID_AQC109S) },
|
||||
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_AQUANTIA, AQ_DEVICE_ID_AQC111S) },
|
||||
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_AQUANTIA, AQ_DEVICE_ID_AQC112S) },
|
||||
|
||||
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_AQUANTIA, AQ_DEVICE_ID_AQC111E) },
|
||||
{ RTE_PCI_DEVICE(PCI_VENDOR_ID_AQUANTIA, AQ_DEVICE_ID_AQC112E) },
|
||||
{ .vendor_id = 0, /* sentinel */ },
|
||||
};
|
||||
|
||||
static struct rte_pci_driver rte_atl_pmd = {
|
||||
.id_table = pci_id_atl_map,
|
||||
.drv_flags = RTE_PCI_DRV_NEED_MAPPING |
|
||||
RTE_PCI_DRV_IOVA_AS_VA,
|
||||
.probe = eth_atl_pci_probe,
|
||||
.remove = eth_atl_pci_remove,
|
||||
};
|
||||
|
||||
static const struct eth_dev_ops atl_eth_dev_ops = {
|
||||
.dev_configure = atl_dev_configure,
|
||||
.dev_start = atl_dev_start,
|
||||
.dev_stop = atl_dev_stop,
|
||||
.dev_close = atl_dev_close,
|
||||
.dev_reset = atl_dev_reset,
|
||||
.dev_infos_get = atl_dev_info_get,
|
||||
};
|
||||
|
||||
static int
|
||||
eth_atl_dev_init(struct rte_eth_dev *eth_dev)
|
||||
{
|
||||
eth_dev->dev_ops = &atl_eth_dev_ops;
|
||||
|
||||
/* Allocate memory for storing MAC addresses */
|
||||
eth_dev->data->mac_addrs = rte_zmalloc("atlantic", ETHER_ADDR_LEN, 0);
|
||||
if (eth_dev->data->mac_addrs == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
eth_atl_dev_uninit(struct rte_eth_dev *eth_dev)
|
||||
{
|
||||
rte_free(eth_dev->data->mac_addrs);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
eth_atl_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
|
||||
struct rte_pci_device *pci_dev)
|
||||
{
|
||||
return rte_eth_dev_pci_generic_probe(pci_dev,
|
||||
sizeof(struct atl_adapter), eth_atl_dev_init);
|
||||
}
|
||||
|
||||
static int
|
||||
eth_atl_pci_remove(struct rte_pci_device *pci_dev)
|
||||
{
|
||||
return rte_eth_dev_pci_generic_remove(pci_dev, eth_atl_dev_uninit);
|
||||
}
|
||||
|
||||
static int
|
||||
atl_dev_configure(struct rte_eth_dev *dev __rte_unused)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Configure device link speed and setup link.
|
||||
* It returns 0 on success.
|
||||
*/
|
||||
static int
|
||||
atl_dev_start(struct rte_eth_dev *dev __rte_unused)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Stop device: disable rx and tx functions to allow for reconfiguring.
|
||||
*/
|
||||
static void
|
||||
atl_dev_stop(struct rte_eth_dev *dev __rte_unused)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* Reset and stop device.
|
||||
*/
|
||||
static void
|
||||
atl_dev_close(struct rte_eth_dev *dev __rte_unused)
|
||||
{
|
||||
}
|
||||
|
||||
static int
|
||||
atl_dev_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = eth_atl_dev_uninit(dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = eth_atl_dev_init(dev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
atl_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
|
||||
{
|
||||
struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
|
||||
|
||||
dev_info->max_rx_queues = 0;
|
||||
dev_info->max_rx_queues = 0;
|
||||
|
||||
dev_info->max_vfs = pci_dev->max_vfs;
|
||||
|
||||
dev_info->max_hash_mac_addrs = 0;
|
||||
dev_info->max_vmdq_pools = 0;
|
||||
dev_info->vmdq_queue_num = 0;
|
||||
}
|
||||
|
||||
RTE_PMD_REGISTER_PCI(net_atlantic, rte_atl_pmd);
|
||||
RTE_PMD_REGISTER_PCI_TABLE(net_atlantic, pci_id_atl_map);
|
||||
RTE_PMD_REGISTER_KMOD_DEP(net_atlantic, "* igb_uio | uio_pci_generic");
|
15
drivers/net/atlantic/atl_ethdev.h
Normal file
15
drivers/net/atlantic/atl_ethdev.h
Normal file
@ -0,0 +1,15 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause
|
||||
* Copyright(c) 2018 Aquantia Corporation
|
||||
*/
|
||||
|
||||
#ifndef _ATLANTIC_ETHDEV_H_
|
||||
#define _ATLANTIC_ETHDEV_H_
|
||||
#include <rte_errno.h>
|
||||
#include "rte_ethdev.h"
|
||||
/*
|
||||
* Structure to store private data for each driver instance (for each port).
|
||||
*/
|
||||
struct atl_adapter {
|
||||
};
|
||||
|
||||
#endif /* _ATLANTIC_ETHDEV_H_ */
|
6
drivers/net/atlantic/meson.build
Normal file
6
drivers/net/atlantic/meson.build
Normal file
@ -0,0 +1,6 @@
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright(c) 2018 Aquantia Corporation
|
||||
|
||||
sources = files(
|
||||
'atl_ethdev.c',
|
||||
)
|
4
drivers/net/atlantic/rte_pmd_atlantic_version.map
Normal file
4
drivers/net/atlantic/rte_pmd_atlantic_version.map
Normal file
@ -0,0 +1,4 @@
|
||||
DPDK_18.11 {
|
||||
|
||||
local: *;
|
||||
};
|
@ -3,6 +3,7 @@
|
||||
|
||||
drivers = ['af_packet',
|
||||
'ark',
|
||||
'atlantic',
|
||||
'avf',
|
||||
'avp',
|
||||
'axgbe', 'bonding',
|
||||
|
@ -137,6 +137,7 @@ endif
|
||||
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AF_PACKET) += -lrte_pmd_af_packet
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_ARK_PMD) += -lrte_pmd_ark
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_ATLANTIC_PMD) += -lrte_pmd_atlantic
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_AVF_PMD) += -lrte_pmd_avf
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_AVP_PMD) += -lrte_pmd_avp
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_AXGBE_PMD) += -lrte_pmd_axgbe
|
||||
|
Loading…
x
Reference in New Issue
Block a user