net/sfc: libefx-based driver stub
Enable the PMD by default on supported configurations. Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com> Reviewed-by: Andy Moreton <amoreton@solarflare.com> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
This commit is contained in:
parent
dd2681bb1f
commit
63d588ff26
@ -366,6 +366,12 @@ M: Harish Patil <harish.patil@cavium.com>
|
||||
F: drivers/net/qede/
|
||||
F: doc/guides/nics/qede.rst
|
||||
|
||||
Solarflare sfc_efx
|
||||
M: Andrew Rybchenko <arybchenko@solarflare.com>
|
||||
F: drivers/net/sfc/
|
||||
F: doc/guides/nics/sfc_efx.rst
|
||||
F: doc/guides/nics/features/sfc_efx.ini
|
||||
|
||||
RedHat virtio
|
||||
M: Huawei Xie <huawei.xie@intel.com>
|
||||
M: Yuanhan Liu <yuanhan.liu@linux.intel.com>
|
||||
|
@ -256,6 +256,12 @@ CONFIG_RTE_LIBRTE_NFP_DEBUG=n
|
||||
#
|
||||
CONFIG_RTE_LIBRTE_BNXT_PMD=y
|
||||
|
||||
#
|
||||
# Compile burst-oriented Solarflare libefx-based PMD
|
||||
#
|
||||
CONFIG_RTE_LIBRTE_SFC_EFX_PMD=y
|
||||
CONFIG_RTE_LIBRTE_SFC_EFX_DEBUG=n
|
||||
|
||||
#
|
||||
# Compile software PMD backed by SZEDATA2 device
|
||||
#
|
||||
|
@ -75,3 +75,4 @@ CONFIG_RTE_LIBRTE_VMXNET3_PMD=n
|
||||
CONFIG_RTE_LIBRTE_PMD_XENVIRT=n
|
||||
CONFIG_RTE_LIBRTE_PMD_BNX2X=n
|
||||
CONFIG_RTE_LIBRTE_QEDE_PMD=n
|
||||
CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n
|
||||
|
@ -45,5 +45,6 @@ CONFIG_RTE_TOOLCHAIN_GCC=y
|
||||
CONFIG_RTE_EAL_IGB_UIO=n
|
||||
|
||||
CONFIG_RTE_LIBRTE_FM10K_PMD=n
|
||||
CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n
|
||||
|
||||
CONFIG_RTE_SCHED_VECTOR=n
|
||||
|
@ -51,6 +51,11 @@ CONFIG_RTE_LIBRTE_KNI=n
|
||||
#
|
||||
CONFIG_RTE_IXGBE_INC_VECTOR=n
|
||||
|
||||
#
|
||||
# Solarflare PMD is not supported on 32-bit
|
||||
#
|
||||
CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n
|
||||
|
||||
#
|
||||
# AES-NI multi-buffer PMD is not supported on 32-bit
|
||||
#
|
||||
|
@ -51,6 +51,11 @@ CONFIG_RTE_LIBRTE_KNI=n
|
||||
#
|
||||
CONFIG_RTE_IXGBE_INC_VECTOR=n
|
||||
|
||||
#
|
||||
# Solarflare PMD is not supported on 32-bit
|
||||
#
|
||||
CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n
|
||||
|
||||
#
|
||||
# AES-NI multi-buffer PMD is not supported on 32-bit
|
||||
#
|
||||
|
@ -55,4 +55,5 @@ CONFIG_RTE_LIBRTE_VMXNET3_PMD=n
|
||||
CONFIG_RTE_LIBRTE_PMD_BOND=n
|
||||
CONFIG_RTE_LIBRTE_ENIC_PMD=n
|
||||
CONFIG_RTE_LIBRTE_FM10K_PMD=n
|
||||
CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n
|
||||
|
||||
|
@ -71,3 +71,4 @@ CONFIG_RTE_LIBRTE_PORT=n
|
||||
CONFIG_RTE_LIBRTE_TABLE=n
|
||||
CONFIG_RTE_LIBRTE_PIPELINE=n
|
||||
CONFIG_RTE_LIBRTE_CXGBE_PMD=n
|
||||
CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n
|
||||
|
@ -41,3 +41,8 @@ CONFIG_RTE_ARCH_64=y
|
||||
|
||||
CONFIG_RTE_TOOLCHAIN="icc"
|
||||
CONFIG_RTE_TOOLCHAIN_ICC=y
|
||||
|
||||
#
|
||||
# Solarflare PMD build is not supported using icc toolchain
|
||||
#
|
||||
CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n
|
||||
|
@ -45,3 +45,8 @@ CONFIG_RTE_TOOLCHAIN_GCC=y
|
||||
# KNI is not supported on 32-bit
|
||||
#
|
||||
CONFIG_RTE_LIBRTE_KNI=n
|
||||
|
||||
#
|
||||
# Solarflare PMD is not supported on 32-bit
|
||||
#
|
||||
CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n
|
||||
|
10
doc/guides/nics/features/sfc_efx.ini
Normal file
10
doc/guides/nics/features/sfc_efx.ini
Normal file
@ -0,0 +1,10 @@
|
||||
;
|
||||
; Supported features of the 'sfc_efx' network poll mode driver.
|
||||
;
|
||||
; Refer to default.ini for the full list of available PMD features.
|
||||
;
|
||||
[Features]
|
||||
BSD nic_uio = Y
|
||||
Linux UIO = Y
|
||||
Linux VFIO = Y
|
||||
x86-64 = Y
|
@ -50,6 +50,7 @@ Network Interface Controller Drivers
|
||||
mlx5
|
||||
nfp
|
||||
qede
|
||||
sfc_efx
|
||||
szedata2
|
||||
thunderx
|
||||
virtio
|
||||
|
109
doc/guides/nics/sfc_efx.rst
Normal file
109
doc/guides/nics/sfc_efx.rst
Normal file
@ -0,0 +1,109 @@
|
||||
.. BSD LICENSE
|
||||
Copyright (c) 2016 Solarflare Communications Inc.
|
||||
All rights reserved.
|
||||
|
||||
This software was jointly developed between OKTET Labs (under contract
|
||||
for Solarflare) and Solarflare Communications, Inc.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Solarflare libefx-based Poll Mode Driver
|
||||
========================================
|
||||
|
||||
The SFC EFX PMD (**librte_pmd_sfc_efx**) provides poll mode driver support
|
||||
for **Solarflare SFN7xxx and SFN8xxx** family of 10/40 Gbps adapters.
|
||||
SFC EFX PMD has support for the latest Linux and FreeBSD operating systems.
|
||||
|
||||
More information can be found at `Solarflare Communications website
|
||||
<http://solarflare.com>`_.
|
||||
|
||||
|
||||
Supported NICs
|
||||
--------------
|
||||
|
||||
- Solarflare Flareon [Ultra] Server Adapters:
|
||||
|
||||
- Solarflare SFN8522 Dual Port SFP+ Server Adapter
|
||||
|
||||
- Solarflare SFN8542 Dual Port QSFP+ Server Adapter
|
||||
|
||||
- Solarflare SFN7002F Dual Port SFP+ Server Adapter
|
||||
|
||||
- Solarflare SFN7004F Quad Port SFP+ Server Adapter
|
||||
|
||||
- Solarflare SFN7042Q Dual Port QSFP+ Server Adapter
|
||||
|
||||
- Solarflare SFN7122F Dual Port SFP+ Server Adapter
|
||||
|
||||
- Solarflare SFN7124F Quad Port SFP+ Server Adapter
|
||||
|
||||
- Solarflare SFN7142Q Dual Port QSFP+ Server Adapter
|
||||
|
||||
- Solarflare SFN7322F Precision Time Synchronization Server Adapter
|
||||
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
- Requires firmware version:
|
||||
|
||||
- SFN7xxx: **4.7.1.1001** or higher
|
||||
|
||||
- SFN8xxx: **6.0.2.1004** or higher
|
||||
|
||||
Visit `Solarflare Support Downloads <https://support.solarflare.com>`_ to get
|
||||
Solarflare Utilities (either Linux or FreeBSD) with the latest firmware.
|
||||
Follow instructions from Solarflare Server Adapter User's Guide to
|
||||
update firmware and configure the adapter.
|
||||
|
||||
|
||||
Pre-Installation Configuration
|
||||
------------------------------
|
||||
|
||||
|
||||
Config File Options
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The following options can be modified in the ``.config`` file.
|
||||
Please note that enabling debugging options may affect system performance.
|
||||
|
||||
- ``CONFIG_RTE_LIBRTE_SFC_EFX_PMD`` (default **y**)
|
||||
|
||||
Enable compilation of Solarflare libefx-based poll-mode driver.
|
||||
|
||||
- ``CONFIG_RTE_LIBRTE_SFC_EFX_DEBUG`` (default **n**)
|
||||
|
||||
Enable compilation of the extra run-time consistency checks.
|
||||
|
||||
|
||||
Per-Device Parameters
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The following per-device parameters can be passed via EAL PCI device
|
||||
whitelist option like "-w 02:00.0,arg1=value1,...".
|
||||
|
||||
Case-insensitive 1/y/yes/on or 0/n/no/off may be used to specify
|
||||
boolean parameters value.
|
||||
|
||||
- ``debug_init`` [bool] (default **n**)
|
||||
|
||||
Enable extra logging during device intialization and startup.
|
@ -66,6 +66,11 @@ New Features
|
||||
|
||||
Added support for I219 Intel 1GbE NICs.
|
||||
|
||||
* **Added Solarflare libefx-based network PMD.**
|
||||
|
||||
A new network PMD which supports Solarflare SFN7xxx and SFN8xxx family
|
||||
of 10/40 Gbps adapters has been added.
|
||||
|
||||
* **virtio-user with vhost-kernel as another exceptional path.**
|
||||
|
||||
Previously, we upstreamed a virtual device, virtio-user with vhost-user
|
||||
|
@ -50,6 +50,7 @@ DIRS-$(CONFIG_RTE_LIBRTE_PMD_NULL) += null
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_PMD_PCAP) += pcap
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_QEDE_PMD) += qede
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_PMD_RING) += ring
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_SFC_EFX_PMD) += sfc
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_PMD_SZEDATA2) += szedata2
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD) += thunderx
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += virtio
|
||||
|
73
drivers/net/sfc/Makefile
Normal file
73
drivers/net/sfc/Makefile
Normal file
@ -0,0 +1,73 @@
|
||||
#
|
||||
# Copyright (c) 2016 Solarflare Communications Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# This software was jointly developed between OKTET Labs (under contract
|
||||
# for Solarflare) and Solarflare Communications, Inc.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the following disclaimer in the documentation
|
||||
# and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
include $(RTE_SDK)/mk/rte.vars.mk
|
||||
|
||||
#
|
||||
# library name
|
||||
#
|
||||
LIB = librte_pmd_sfc_efx.a
|
||||
|
||||
CFLAGS += -O3
|
||||
CFLAGS += $(WERROR_FLAGS)
|
||||
|
||||
# Enable extra warnings
|
||||
CFLAGS += -Wextra
|
||||
|
||||
# More warnings not enabled by above aggregators
|
||||
CFLAGS += -Wdisabled-optimization
|
||||
|
||||
# Compiler and version dependent flags
|
||||
ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
|
||||
CFLAGS += -Waggregate-return
|
||||
CFLAGS += -Wbad-function-cast
|
||||
else ifeq ($(CONFIG_RTE_TOOLCHAIN_CLANG),y)
|
||||
CFLAGS += -Waggregate-return
|
||||
CFLAGS += -Wbad-function-cast
|
||||
else ifeq ($(CONFIG_RTE_TOOLCHAIN_ICC),y)
|
||||
endif
|
||||
|
||||
EXPORT_MAP := rte_pmd_sfc_efx_version.map
|
||||
|
||||
LIBABIVER := 1
|
||||
|
||||
#
|
||||
# all source are stored in SRCS-y
|
||||
#
|
||||
SRCS-$(CONFIG_RTE_LIBRTE_SFC_EFX_PMD) += sfc_ethdev.c
|
||||
SRCS-$(CONFIG_RTE_LIBRTE_SFC_EFX_PMD) += sfc_kvargs.c
|
||||
|
||||
|
||||
# this lib depends upon:
|
||||
DEPDIRS-$(CONFIG_RTE_LIBRTE_SFC_EFX_PMD) += lib/librte_eal
|
||||
DEPDIRS-$(CONFIG_RTE_LIBRTE_SFC_EFX_PMD) += lib/librte_kvargs
|
||||
DEPDIRS-$(CONFIG_RTE_LIBRTE_SFC_EFX_PMD) += lib/librte_ether
|
||||
DEPDIRS-$(CONFIG_RTE_LIBRTE_SFC_EFX_PMD) += lib/librte_mempool
|
||||
DEPDIRS-$(CONFIG_RTE_LIBRTE_SFC_EFX_PMD) += lib/librte_mbuf
|
||||
|
||||
include $(RTE_SDK)/mk/rte.lib.mk
|
4
drivers/net/sfc/rte_pmd_sfc_efx_version.map
Normal file
4
drivers/net/sfc/rte_pmd_sfc_efx_version.map
Normal file
@ -0,0 +1,4 @@
|
||||
DPDK_17.02 {
|
||||
|
||||
local: *;
|
||||
};
|
56
drivers/net/sfc/sfc.h
Normal file
56
drivers/net/sfc/sfc.h
Normal file
@ -0,0 +1,56 @@
|
||||
/*-
|
||||
* Copyright (c) 2016 Solarflare Communications Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software was jointly developed between OKTET Labs (under contract
|
||||
* for Solarflare) and Solarflare Communications, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _SFC_H
|
||||
#define _SFC_H
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#include <rte_ethdev.h>
|
||||
#include <rte_kvargs.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define SFC_DEV_TO_PCI(eth_dev) \
|
||||
RTE_DEV_TO_PCI((eth_dev)->device)
|
||||
|
||||
/* Adapter private data */
|
||||
struct sfc_adapter {
|
||||
struct rte_eth_dev *eth_dev;
|
||||
struct rte_kvargs *kvargs;
|
||||
bool debug_init;
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _SFC_H */
|
45
drivers/net/sfc/sfc_debug.h
Normal file
45
drivers/net/sfc/sfc_debug.h
Normal file
@ -0,0 +1,45 @@
|
||||
/*-
|
||||
* Copyright (c) 2016 Solarflare Communications Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software was jointly developed between OKTET Labs (under contract
|
||||
* for Solarflare) and Solarflare Communications, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _SFC_DEBUG_H_
|
||||
#define _SFC_DEBUG_H_
|
||||
|
||||
#include <rte_debug.h>
|
||||
|
||||
#ifdef RTE_LIBRTE_SFC_EFX_DEBUG
|
||||
/* Avoid dependency from RTE_LOG_LEVEL to be able to enable debug check
|
||||
* in the driver only.
|
||||
*/
|
||||
#define SFC_ASSERT(exp) RTE_VERIFY(exp)
|
||||
#else
|
||||
/* If the driver debug is not enabled, follow DPDK debug/non-debug */
|
||||
#define SFC_ASSERT(exp) RTE_ASSERT(exp)
|
||||
#endif
|
||||
|
||||
#endif /* _SFC_DEBUG_H_ */
|
129
drivers/net/sfc/sfc_ethdev.c
Normal file
129
drivers/net/sfc/sfc_ethdev.c
Normal file
@ -0,0 +1,129 @@
|
||||
/*-
|
||||
* Copyright (c) 2016 Solarflare Communications Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software was jointly developed between OKTET Labs (under contract
|
||||
* for Solarflare) and Solarflare Communications, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <rte_dev.h>
|
||||
#include <rte_ethdev.h>
|
||||
#include <rte_pci.h>
|
||||
|
||||
#include "sfc.h"
|
||||
#include "sfc_debug.h"
|
||||
#include "sfc_log.h"
|
||||
#include "sfc_kvargs.h"
|
||||
|
||||
|
||||
static void
|
||||
sfc_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
|
||||
{
|
||||
struct sfc_adapter *sa = dev->data->dev_private;
|
||||
|
||||
sfc_log_init(sa, "entry");
|
||||
|
||||
dev_info->pci_dev = RTE_DEV_TO_PCI(dev->device);
|
||||
}
|
||||
|
||||
static const struct eth_dev_ops sfc_eth_dev_ops = {
|
||||
.dev_infos_get = sfc_dev_infos_get,
|
||||
};
|
||||
|
||||
static int
|
||||
sfc_eth_dev_init(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct sfc_adapter *sa = dev->data->dev_private;
|
||||
struct rte_pci_device *pci_dev = SFC_DEV_TO_PCI(dev);
|
||||
int rc;
|
||||
|
||||
/* Required for logging */
|
||||
sa->eth_dev = dev;
|
||||
|
||||
/* Copy PCI device info to the dev->data */
|
||||
rte_eth_copy_pci_info(dev, pci_dev);
|
||||
|
||||
rc = sfc_kvargs_parse(sa);
|
||||
if (rc != 0)
|
||||
goto fail_kvargs_parse;
|
||||
|
||||
rc = sfc_kvargs_process(sa, SFC_KVARG_DEBUG_INIT,
|
||||
sfc_kvarg_bool_handler, &sa->debug_init);
|
||||
if (rc != 0)
|
||||
goto fail_kvarg_debug_init;
|
||||
|
||||
sfc_log_init(sa, "entry");
|
||||
|
||||
dev->dev_ops = &sfc_eth_dev_ops;
|
||||
|
||||
sfc_log_init(sa, "done");
|
||||
return 0;
|
||||
|
||||
fail_kvarg_debug_init:
|
||||
sfc_kvargs_cleanup(sa);
|
||||
|
||||
fail_kvargs_parse:
|
||||
sfc_log_init(sa, "failed %d", rc);
|
||||
SFC_ASSERT(rc > 0);
|
||||
return -rc;
|
||||
}
|
||||
|
||||
static int
|
||||
sfc_eth_dev_uninit(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct sfc_adapter *sa = dev->data->dev_private;
|
||||
|
||||
sfc_log_init(sa, "entry");
|
||||
|
||||
dev->dev_ops = NULL;
|
||||
|
||||
sfc_kvargs_cleanup(sa);
|
||||
|
||||
sfc_log_init(sa, "done");
|
||||
|
||||
/* Required for logging, so cleanup last */
|
||||
sa->eth_dev = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct rte_pci_id pci_id_sfc_efx_map[] = {
|
||||
{ .vendor_id = 0 /* sentinel */ }
|
||||
};
|
||||
|
||||
static struct eth_driver sfc_efx_pmd = {
|
||||
.pci_drv = {
|
||||
.id_table = pci_id_sfc_efx_map,
|
||||
.drv_flags = 0,
|
||||
.probe = rte_eth_dev_pci_probe,
|
||||
.remove = rte_eth_dev_pci_remove,
|
||||
},
|
||||
.eth_dev_init = sfc_eth_dev_init,
|
||||
.eth_dev_uninit = sfc_eth_dev_uninit,
|
||||
.dev_private_size = sizeof(struct sfc_adapter),
|
||||
};
|
||||
|
||||
RTE_PMD_REGISTER_PCI(net_sfc_efx, sfc_efx_pmd.pci_drv);
|
||||
RTE_PMD_REGISTER_PCI_TABLE(net_sfc_efx, pci_id_sfc_efx_map);
|
||||
RTE_PMD_REGISTER_PARAM_STRING(net_sfc_efx,
|
||||
SFC_KVARG_DEBUG_INIT "=" SFC_KVARG_VALUES_BOOL);
|
110
drivers/net/sfc/sfc_kvargs.c
Normal file
110
drivers/net/sfc/sfc_kvargs.c
Normal file
@ -0,0 +1,110 @@
|
||||
/*-
|
||||
* Copyright (c) 2016 Solarflare Communications Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software was jointly developed between OKTET Labs (under contract
|
||||
* for Solarflare) and Solarflare Communications, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <strings.h>
|
||||
|
||||
#include <rte_devargs.h>
|
||||
#include <rte_kvargs.h>
|
||||
|
||||
#include "sfc.h"
|
||||
#include "sfc_kvargs.h"
|
||||
|
||||
int
|
||||
sfc_kvargs_parse(struct sfc_adapter *sa)
|
||||
{
|
||||
struct rte_eth_dev *eth_dev = (sa)->eth_dev;
|
||||
struct rte_devargs *devargs = eth_dev->device->devargs;
|
||||
const char **params = (const char *[]){
|
||||
SFC_KVARG_DEBUG_INIT,
|
||||
NULL,
|
||||
};
|
||||
|
||||
if (devargs == NULL)
|
||||
return 0;
|
||||
|
||||
sa->kvargs = rte_kvargs_parse(devargs->args, params);
|
||||
if (sa->kvargs == NULL)
|
||||
return EINVAL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
sfc_kvargs_cleanup(struct sfc_adapter *sa)
|
||||
{
|
||||
rte_kvargs_free(sa->kvargs);
|
||||
}
|
||||
|
||||
static int
|
||||
sfc_kvarg_match_value(const char *value, const char * const *values,
|
||||
unsigned int n_values)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < n_values; ++i)
|
||||
if (strcasecmp(value, values[i]) == 0)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
sfc_kvargs_process(struct sfc_adapter *sa, const char *key_match,
|
||||
arg_handler_t handler, void *opaque_arg)
|
||||
{
|
||||
if (sa->kvargs == NULL)
|
||||
return 0;
|
||||
|
||||
return -rte_kvargs_process(sa->kvargs, key_match, handler, opaque_arg);
|
||||
}
|
||||
|
||||
int
|
||||
sfc_kvarg_bool_handler(__rte_unused const char *key,
|
||||
const char *value_str, void *opaque)
|
||||
{
|
||||
const char * const true_strs[] = {
|
||||
"1", "y", "yes", "on", "true"
|
||||
};
|
||||
const char * const false_strs[] = {
|
||||
"0", "n", "no", "off", "false"
|
||||
};
|
||||
bool *value = opaque;
|
||||
|
||||
if (sfc_kvarg_match_value(value_str, true_strs,
|
||||
RTE_DIM(true_strs)))
|
||||
*value = true;
|
||||
else if (sfc_kvarg_match_value(value_str, false_strs,
|
||||
RTE_DIM(false_strs)))
|
||||
*value = false;
|
||||
else
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
}
|
58
drivers/net/sfc/sfc_kvargs.h
Normal file
58
drivers/net/sfc/sfc_kvargs.h
Normal file
@ -0,0 +1,58 @@
|
||||
/*-
|
||||
* Copyright (c) 2016 Solarflare Communications Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software was jointly developed between OKTET Labs (under contract
|
||||
* for Solarflare) and Solarflare Communications, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _SFC_KVARGS_H
|
||||
#define _SFC_KVARGS_H
|
||||
|
||||
#include <rte_kvargs.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define SFC_KVARG_VALUES_BOOL "[1|y|yes|on|0|n|no|off]"
|
||||
|
||||
#define SFC_KVARG_DEBUG_INIT "debug_init"
|
||||
|
||||
struct sfc_adapter;
|
||||
|
||||
int sfc_kvargs_parse(struct sfc_adapter *sa);
|
||||
void sfc_kvargs_cleanup(struct sfc_adapter *sa);
|
||||
|
||||
int sfc_kvargs_process(struct sfc_adapter *sa, const char *key_match,
|
||||
arg_handler_t handler, void *opaque_arg);
|
||||
|
||||
int sfc_kvarg_bool_handler(const char *key, const char *value_str,
|
||||
void *opaque);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _SFC_KVARGS_H */
|
74
drivers/net/sfc/sfc_log.h
Normal file
74
drivers/net/sfc/sfc_log.h
Normal file
@ -0,0 +1,74 @@
|
||||
/*-
|
||||
* Copyright (c) 2016 Solarflare Communications Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software was jointly developed between OKTET Labs (under contract
|
||||
* for Solarflare) and Solarflare Communications, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _SFC_LOG_H_
|
||||
#define _SFC_LOG_H_
|
||||
|
||||
/* Log PMD message, automatically add prefix and \n */
|
||||
#define SFC_LOG(sa, level, ...) \
|
||||
do { \
|
||||
const struct rte_eth_dev *_dev = (sa)->eth_dev; \
|
||||
const struct rte_pci_device *_pci_dev = SFC_DEV_TO_PCI(_dev); \
|
||||
\
|
||||
RTE_LOG(level, PMD, \
|
||||
RTE_FMT("sfc_efx " PCI_PRI_FMT " #%" PRIu8 ": " \
|
||||
RTE_FMT_HEAD(__VA_ARGS__,) "\n", \
|
||||
_pci_dev->addr.domain, \
|
||||
_pci_dev->addr.bus, \
|
||||
_pci_dev->addr.devid, \
|
||||
_pci_dev->addr.function, \
|
||||
_dev->data->port_id, \
|
||||
RTE_FMT_TAIL(__VA_ARGS__,))); \
|
||||
} while (0)
|
||||
|
||||
#define sfc_err(sa, ...) \
|
||||
SFC_LOG(sa, ERR, __VA_ARGS__)
|
||||
|
||||
#define sfc_warn(sa, ...) \
|
||||
SFC_LOG(sa, WARNING, __VA_ARGS__)
|
||||
|
||||
#define sfc_notice(sa, ...) \
|
||||
SFC_LOG(sa, NOTICE, __VA_ARGS__)
|
||||
|
||||
#define sfc_info(sa, ...) \
|
||||
SFC_LOG(sa, INFO, __VA_ARGS__)
|
||||
|
||||
#define sfc_log_init(sa, ...) \
|
||||
do { \
|
||||
const struct sfc_adapter *_sa = (sa); \
|
||||
\
|
||||
if (_sa->debug_init) \
|
||||
SFC_LOG(_sa, INFO, \
|
||||
RTE_FMT("%s(): " \
|
||||
RTE_FMT_HEAD(__VA_ARGS__,), \
|
||||
__func__, \
|
||||
RTE_FMT_TAIL(__VA_ARGS__,))); \
|
||||
} while (0)
|
||||
|
||||
#endif /* _SFC_LOG_H_ */
|
@ -123,6 +123,7 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_NULL) += -lrte_pmd_null
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_PCAP) += -lrte_pmd_pcap -lpcap
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_QEDE_PMD) += -lrte_pmd_qede
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_RING) += -lrte_pmd_ring
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_SFC_EFX_PMD) += -lrte_pmd_sfc_efx
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SZEDATA2) += -lrte_pmd_szedata2 -lsze2
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD) += -lrte_pmd_thunderx_nicvf -lm
|
||||
_LDLIBS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += -lrte_pmd_virtio
|
||||
|
Loading…
Reference in New Issue
Block a user