From c203571b3602156a39d0baba894cf6bf86a19630 Mon Sep 17 00:00:00 2001 From: "Wei Hu (Xavier)" Date: Thu, 26 Sep 2019 22:01:50 +0800 Subject: [PATCH] net/hns3: register and add log interface This patch registers hns3 PMD driver and adds the definition for log interfaces. Signed-off-by: Wei Hu (Xavier) Signed-off-by: Chunsong Feng Signed-off-by: Min Hu (Connor) Signed-off-by: Hao Chen Signed-off-by: Huisong Li Reviewed-by: Ferruh Yigit --- drivers/net/hns3/Makefile | 4 + drivers/net/hns3/hns3_ethdev.c | 130 +++++++++++++++++++++++++++++++++ drivers/net/hns3/hns3_logs.h | 34 +++++++++ 3 files changed, 168 insertions(+) create mode 100644 drivers/net/hns3/hns3_logs.h diff --git a/drivers/net/hns3/Makefile b/drivers/net/hns3/Makefile index ddf3bfb607..1ef0e20cc5 100644 --- a/drivers/net/hns3/Makefile +++ b/drivers/net/hns3/Makefile @@ -11,6 +11,10 @@ LIB = librte_pmd_hns3.a CFLAGS += -O3 CFLAGS += $(WERROR_FLAGS) +LDLIBS += -lrte_eal +LDLIBS += -lrte_ethdev -lrte_net +LDLIBS += -lrte_bus_pci + EXPORT_MAP := rte_pmd_hns3_version.map LIBABIVER := 1 diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c index 3f74e54469..ffd2184ad4 100644 --- a/drivers/net/hns3/hns3_ethdev.c +++ b/drivers/net/hns3/hns3_ethdev.c @@ -1,3 +1,133 @@ /* SPDX-License-Identifier: BSD-3-Clause * Copyright(c) 2018-2019 Hisilicon Limited. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "hns3_ethdev.h" +#include "hns3_logs.h" +#include "hns3_regs.h" + +int hns3_logtype_init; +int hns3_logtype_driver; + +static void +hns3_dev_close(struct rte_eth_dev *eth_dev) +{ + struct hns3_adapter *hns = eth_dev->data->dev_private; + struct hns3_hw *hw = &hns->hw; + + hw->adapter_state = HNS3_NIC_CLOSED; +} + +static const struct eth_dev_ops hns3_eth_dev_ops = { + .dev_close = hns3_dev_close, +}; + +static int +hns3_dev_init(struct rte_eth_dev *eth_dev) +{ + struct hns3_adapter *hns = eth_dev->data->dev_private; + struct hns3_hw *hw = &hns->hw; + + PMD_INIT_FUNC_TRACE(); + + eth_dev->dev_ops = &hns3_eth_dev_ops; + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return 0; + + hns->is_vf = false; + hw->data = eth_dev->data; + hw->adapter_state = HNS3_NIC_INITIALIZED; + /* + * Pass the information to the rte_eth_dev_close() that it should also + * release the private port resources. + */ + eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; + + return 0; +} + +static int +hns3_dev_uninit(struct rte_eth_dev *eth_dev) +{ + struct hns3_adapter *hns = eth_dev->data->dev_private; + struct hns3_hw *hw = &hns->hw; + + PMD_INIT_FUNC_TRACE(); + + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -EPERM; + + eth_dev->dev_ops = NULL; + eth_dev->rx_pkt_burst = NULL; + eth_dev->tx_pkt_burst = NULL; + eth_dev->tx_pkt_prepare = NULL; + if (hw->adapter_state < HNS3_NIC_CLOSING) + hns3_dev_close(eth_dev); + + hw->adapter_state = HNS3_NIC_REMOVED; + return 0; +} + +static int +eth_hns3_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 hns3_adapter), + hns3_dev_init); +} + +static int +eth_hns3_pci_remove(struct rte_pci_device *pci_dev) +{ + return rte_eth_dev_pci_generic_remove(pci_dev, hns3_dev_uninit); +} + +static const struct rte_pci_id pci_id_hns3_map[] = { + { RTE_PCI_DEVICE(PCI_VENDOR_ID_HUAWEI, HNS3_DEV_ID_GE) }, + { RTE_PCI_DEVICE(PCI_VENDOR_ID_HUAWEI, HNS3_DEV_ID_25GE) }, + { RTE_PCI_DEVICE(PCI_VENDOR_ID_HUAWEI, HNS3_DEV_ID_25GE_RDMA) }, + { RTE_PCI_DEVICE(PCI_VENDOR_ID_HUAWEI, HNS3_DEV_ID_50GE_RDMA) }, + { RTE_PCI_DEVICE(PCI_VENDOR_ID_HUAWEI, HNS3_DEV_ID_100G_RDMA_MACSEC) }, + { .vendor_id = 0, /* sentinel */ }, +}; + +static struct rte_pci_driver rte_hns3_pmd = { + .id_table = pci_id_hns3_map, + .drv_flags = RTE_PCI_DRV_NEED_MAPPING, + .probe = eth_hns3_pci_probe, + .remove = eth_hns3_pci_remove, +}; + +RTE_PMD_REGISTER_PCI(net_hns3, rte_hns3_pmd); +RTE_PMD_REGISTER_PCI_TABLE(net_hns3, pci_id_hns3_map); +RTE_PMD_REGISTER_KMOD_DEP(net_hns3, "* igb_uio | vfio-pci"); + +RTE_INIT(hns3_init_log) +{ + hns3_logtype_init = rte_log_register("pmd.net.hns3.init"); + if (hns3_logtype_init >= 0) + rte_log_set_level(hns3_logtype_init, RTE_LOG_NOTICE); + hns3_logtype_driver = rte_log_register("pmd.net.hns3.driver"); + if (hns3_logtype_driver >= 0) + rte_log_set_level(hns3_logtype_driver, RTE_LOG_NOTICE); +} diff --git a/drivers/net/hns3/hns3_logs.h b/drivers/net/hns3/hns3_logs.h new file mode 100644 index 0000000000..f3fc7b51d6 --- /dev/null +++ b/drivers/net/hns3/hns3_logs.h @@ -0,0 +1,34 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018-2019 Hisilicon Limited. + */ + +#ifndef _HNS3_LOGS_H_ +#define _HNS3_LOGS_H_ + +extern int hns3_logtype_init; +#define PMD_INIT_LOG(level, fmt, args...) \ + rte_log(RTE_LOG_ ## level, hns3_logtype_init, "%s(): " fmt "\n", \ + __func__, ##args) +#define PMD_INIT_FUNC_TRACE() PMD_INIT_LOG(DEBUG, " >>") + +extern int hns3_logtype_driver; +#define PMD_DRV_LOG_RAW(hw, level, fmt, args...) \ + rte_log(level, hns3_logtype_driver, "%s %s(): " fmt, \ + (hw)->data->name, __func__, ## args) + +#define hns3_err(hw, fmt, args...) \ + PMD_DRV_LOG_RAW(hw, RTE_LOG_ERR, fmt "\n", ## args) + +#define hns3_warn(hw, fmt, args...) \ + PMD_DRV_LOG_RAW(hw, RTE_LOG_WARNING, fmt "\n", ## args) + +#define hns3_notice(hw, fmt, args...) \ + PMD_DRV_LOG_RAW(hw, RTE_LOG_NOTICE, fmt "\n", ## args) + +#define hns3_info(hw, fmt, args...) \ + PMD_DRV_LOG_RAW(hw, RTE_LOG_INFO, fmt "\n", ## args) + +#define hns3_dbg(hw, fmt, args...) \ + PMD_DRV_LOG_RAW(hw, RTE_LOG_DEBUG, fmt "\n", ## args) + +#endif /* _HNS3_LOGS_H_ */ -- 2.20.1