DPDK patches and discussions
 help / color / mirror / Atom feed
From: fengchengwen <fengchengwen@huawei.com>
To: Feifei Wang <wff_light@vip.163.com>, <dev@dpdk.org>
Cc: Xin Wang <wangxin679@h-partners.com>,
	Feifei Wang <wangfeifei40@huawei.com>,
	Yi Chen <chenyi221@huawei.com>,
	Anatoly Burakov <anatoly.burakov@intel.com>
Subject: Re: [V5 12/18] net/hinic3: add device initialization
Date: Thu, 21 Aug 2025 14:58:30 +0800	[thread overview]
Message-ID: <791e7c60-d1d3-4341-a2c0-83a0a95a6b3d@huawei.com> (raw)
In-Reply-To: <20250702020953.599-13-wff_light@vip.163.com>

On 7/2/2025 10:09 AM, Feifei Wang wrote:
> From: Xin Wang <wangxin679@h-partners.com>
> 
> 
> This patch contains data structures and function codes
> 
> related to device initialization.
> 
> 
> 
> Signed-off-by: Xin Wang <wangxin679@h-partners.com>
> 
> Reviewed-by: Feifei Wang <wangfeifei40@huawei.com>
> 
> Reviewed-by: Yi Chen <chenyi221@huawei.com>
> 
> ---
> 
>  drivers/net/hinic3/hinic3_ethdev.c | 514 +++++++++++++++++++++++++++++
> 
>  drivers/net/hinic3/hinic3_ethdev.h | 119 +++++++
> 
>  2 files changed, 633 insertions(+)
> 
>  create mode 100644 drivers/net/hinic3/hinic3_ethdev.c
> 
>  create mode 100644 drivers/net/hinic3/hinic3_ethdev.h
> 
> 
> 
> diff --git a/drivers/net/hinic3/hinic3_ethdev.c b/drivers/net/hinic3/hinic3_ethdev.c
> 
> new file mode 100644
> 
> index 0000000000..e6666a4d87
> 
> --- /dev/null
> 
> +++ b/drivers/net/hinic3/hinic3_ethdev.c
> 
> @@ -0,0 +1,514 @@
> 
> +/* SPDX-License-Identifier: BSD-3-Clause
> 
> + * Copyright(c) 2025 Huawei Technologies Co., Ltd
> 
> + */
> 
> +
> 
> +#include <rte_pci.h>
> 
> +#include <rte_bus_pci.h>
> 
> +#include <rte_mbuf.h>
> 
> +#include <rte_malloc.h>
> 
> +#include <rte_mempool.h>
> 
> +#include <rte_errno.h>
> 
> +#include <rte_ether.h>
> 
> +
> 
> +#include "base/hinic3_compat.h"
> 
> +#include "base/hinic3_csr.h"
> 
> +#include "base/hinic3_wq.h"
> 
> +#include "base/hinic3_eqs.h"
> 
> +#include "base/hinic3_cmdq.h"
> 
> +#include "base/hinic3_hwdev.h"
> 
> +#include "base/hinic3_hwif.h"
> 
> +#include "base/hinic3_hw_cfg.h"
> 
> +#include "base/hinic3_hw_comm.h"
> 
> +#include "base/hinic3_nic_cfg.h"
> 
> +#include "base/hinic3_nic_event.h"
> 
> +#include "hinic3_ethdev.h"
> 
> +
> 
> +/**
> 
> + * Interrupt handler triggered by NIC for handling specific event.
> 
> + *
> 
> + * @param[in] param
> 
> + * The address of parameter (struct rte_eth_dev *) registered before.
> 
> + */
> 
> +static void
> 
> +hinic3_dev_interrupt_handler(void *param)
> 
> +{
> 
> +	struct rte_eth_dev *dev = param;
> 
> +	struct hinic3_nic_dev *nic_dev = HINIC3_ETH_DEV_TO_PRIVATE_NIC_DEV(dev);
> 
> +
> 
> +	if (!hinic3_get_bit(HINIC3_DEV_INTR_EN, &nic_dev->dev_status)) {
> 
> +		PMD_DRV_LOG(WARNING,
> 
> +			    "Intr is disabled, ignore intr event, "
> 
> +			    "dev_name: %s, port_id: %d",
> 
> +			    nic_dev->dev_name, dev->data->port_id);
> 
> +		return;
> 
> +	}
> 
> +
> 
> +	/* Aeq0 msg handler. */
> 
> +	hinic3_dev_handle_aeq_event(nic_dev->hwdev, param);
> 
> +}
> 
> +
> 
> +static void
> 
> +hinic3_deinit_sw_rxtxqs(struct hinic3_nic_dev *nic_dev)
> 
> +{
> 
> +	rte_free(nic_dev->txqs);
> 
> +	nic_dev->txqs = NULL;
> 
> +
> 
> +	rte_free(nic_dev->rxqs);
> 
> +	nic_dev->rxqs = NULL;
> 
> +}
> 
> +
> 
> +/**
> 
> + * Init mac_vlan table in hardwares.
> 
> + *
> 
> + * @param[in] eth_dev
> 
> + * Pointer to ethernet device structure.
> 
> + *
> 
> + * @return
> 
> + * 0 on success, non-zero on failure.
> 
> + */
> 
> +static int
> 
> +hinic3_init_mac_table(struct rte_eth_dev *eth_dev)
> 
> +{
> 
> +	struct hinic3_nic_dev *nic_dev =
> 
> +		HINIC3_ETH_DEV_TO_PRIVATE_NIC_DEV(eth_dev);
> 
> +	u8 addr_bytes[RTE_ETHER_ADDR_LEN];
> 
> +	u16 func_id = 0;
> 
> +	int err = 0;
> 
> +
> 
> +	err = hinic3_get_default_mac(nic_dev->hwdev, addr_bytes,
> 
> +				     RTE_ETHER_ADDR_LEN);
> 
> +	if (err)
> 
> +		return err;
> 
> +
> 
> +	rte_ether_addr_copy((struct rte_ether_addr *)addr_bytes,
> 
> +			    &eth_dev->data->mac_addrs[0]);
> 
> +	if (rte_is_zero_ether_addr(&eth_dev->data->mac_addrs[0]))
> 
> +		rte_eth_random_addr(eth_dev->data->mac_addrs[0].addr_bytes);
> 
> +
> 
> +	func_id = hinic3_global_func_id(nic_dev->hwdev);
> 
> +	err = hinic3_set_mac(nic_dev->hwdev,
> 
> +			     eth_dev->data->mac_addrs[0].addr_bytes, 0,
> 
> +			     func_id);
> 
> +	if (err && err != HINIC3_PF_SET_VF_ALREADY)
> 
> +		return err;
> 
> +
> 
> +	rte_ether_addr_copy(&eth_dev->data->mac_addrs[0],
> 
> +			    &nic_dev->default_addr);
> 
> +
> 
> +	return 0;
> 
> +}
> 
> +
> 
> +/**
> 
> + * Deinit mac_vlan table in hardware.
> 
> + *
> 
> + * @param[in] eth_dev
> 
> + * Pointer to ethernet device structure.
> 
> + */
> 
> +static void
> 
> +hinic3_deinit_mac_addr(struct rte_eth_dev *eth_dev)
> 
> +{
> 
> +	struct hinic3_nic_dev *nic_dev =
> 
> +		HINIC3_ETH_DEV_TO_PRIVATE_NIC_DEV(eth_dev);
> 
> +	u16 func_id = 0;
> 
> +	int err;
> 
> +	int i;
> 
> +
> 
> +	func_id = hinic3_global_func_id(nic_dev->hwdev);
> 
> +
> 
> +	for (i = 0; i < HINIC3_MAX_UC_MAC_ADDRS; i++) {
> 
> +		if (rte_is_zero_ether_addr(&eth_dev->data->mac_addrs[i]))
> 
> +			continue;
> 
> +
> 
> +		err = hinic3_del_mac(nic_dev->hwdev,
> 
> +				     eth_dev->data->mac_addrs[i].addr_bytes, 0,
> 
> +				     func_id);
> 
> +		if (err && err != HINIC3_PF_SET_VF_ALREADY)
> 
> +			PMD_DRV_LOG(ERR,
> 
> +				    "Delete mac table failed, dev_name: %s",
> 
> +				    eth_dev->data->name);
> 
> +
> 
> +		memset(&eth_dev->data->mac_addrs[i], 0,
> 
> +		       sizeof(struct rte_ether_addr));
> 
> +	}
> 
> +
> 
> +	/* Delete multicast mac addrs. */
> 
> +	hinic3_delete_mc_addr_list(nic_dev);
> 
> +}
> 
> +
> 
> +/**
> 
> + * Check the valid CoS bitmap to determine the available CoS IDs and set
> 
> + * the default CoS ID to the highest valid one.
> 
> + *
> 
> + * @param[in] hwdev
> 
> + * Pointer to hardware device structure.
> 
> + * @param[out] cos_id
> 
> + * Pointer to store the default CoS ID.
> 
> + *
> 
> + * @return
> 
> + * 0 on success, non-zero on failure.
> 
> + */
> 
> +static int
> 
> +hinic3_pf_get_default_cos(struct hinic3_hwdev *hwdev, u8 *cos_id)
> 
> +{
> 
> +	u8 default_cos = 0;
> 
> +	u8 valid_cos_bitmap;
> 
> +	u8 i;
> 
> +
> 
> +	valid_cos_bitmap = hwdev->cfg_mgmt->svc_cap.cos_valid_bitmap;
> 
> +	if (!valid_cos_bitmap) {
> 
> +		PMD_DRV_LOG(ERR, "PF has none cos to support");
> 
> +		return -EFAULT;
> 
> +	}
> 
> +
> 
> +	for (i = 0; i < HINIC3_COS_NUM_MAX; i++) {
> 
> +		if (valid_cos_bitmap & BIT(i))
> 
> +			/* Find max cos id as default cos. */
> 
> +			default_cos = i;
> 
> +	}
> 
> +
> 
> +	*cos_id = default_cos;
> 
> +
> 
> +	return 0;
> 
> +}
> 
> +
> 
> +static int
> 
> +hinic3_init_default_cos(struct hinic3_nic_dev *nic_dev)
> 
> +{
> 
> +	u8 cos_id = 0;
> 
> +	int err;
> 
> +
> 
> +	if (!HINIC3_IS_VF(nic_dev->hwdev)) {
> 
> +		err = hinic3_pf_get_default_cos(nic_dev->hwdev, &cos_id);
> 
> +		if (err) {
> 
> +			PMD_DRV_LOG(ERR, "Get PF default cos failed, err: %d",
> 
> +				    err);
> 
> +			return err;
> 
> +		}
> 
> +	} else {
> 
> +		err = hinic3_vf_get_default_cos(nic_dev->hwdev, &cos_id);
> 
> +		if (err) {
> 
> +			PMD_DRV_LOG(ERR, "Get VF default cos failed, err: %d",
> 
> +				    err);
> 
> +			return err;
> 
> +		}
> 
> +	}
> 
> +
> 
> +	nic_dev->default_cos = cos_id;
> 
> +	PMD_DRV_LOG(INFO, "Default cos %d", nic_dev->default_cos);
> 
> +	return 0;
> 
> +}
> 
> +
> 
> +/**
> 
> + * Initialize Class of Service (CoS). For PF devices, it also sync the link
> 
> + * status with the physical port.
> 
> + *
> 
> + * @param[in] nic_dev
> 
> + * Pointer to NIC device structure.
> 
> + *
> 
> + * @return
> 
> + * 0 on success, non-zero on failure.
> 
> + */
> 
> +static int
> 
> +hinic3_set_default_hw_feature(struct hinic3_nic_dev *nic_dev)
> 
> +{
> 
> +	int err;
> 
> +
> 
> +	err = hinic3_init_default_cos(nic_dev);
> 
> +	if (err)
> 
> +		return err;
> 
> +
> 
> +	if (hinic3_func_type(nic_dev->hwdev) == TYPE_VF)
> 
> +		return 0;
> 
> +
> 
> +	err = hinic3_set_link_status_follow(nic_dev->hwdev,
> 
> +					    HINIC3_LINK_FOLLOW_PORT);
> 
> +	if (err == HINIC3_MGMT_CMD_UNSUPPORTED)
> 
> +		PMD_DRV_LOG(WARNING, "Don't support to set link status follow "
> 
> +				     "phy port status");
> 
> +	else if (err)
> 
> +		return err;
> 
> +
> 
> +	return 0;
> 
> +}
> 
> +
> 
> +/**
> 
> + * Initialize the network function, including hardware configuration, memory
> 
> + * allocation for data structures, MAC address setup, and interrupt enabling.
> 
> + * It also registers interrupt callbacks and sets default hardware features.
> 
> + * If any step fails, appropriate cleanup is performed.
> 
> + *
> 
> + * @param[out] eth_dev

It

> 
> + * Pointer to ethernet device structure.
> 
> + *
> 
> + * @return
> 
> + * 0 on success, non-zero on failure.
> 
> + */
> 
> +static int
> 
> +hinic3_func_init(struct rte_eth_dev *eth_dev)
> 
> +{
> 
> +	struct hinic3_tcam_info *tcam_info = NULL;
> 
> +	struct hinic3_nic_dev *nic_dev = NULL;
> 
> +	struct rte_pci_device *pci_dev = NULL;
> 
> +	int err;
> 
> +
> 
> +	pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);
> 
> +
> 
> +	/* EAL is secondary and eth_dev is already created. */
> 
> +	if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
> 
> +		PMD_DRV_LOG(INFO, "Initialize %s in secondary process",
> 
> +			    eth_dev->data->name);
> 
> +
> 
> +		return 0;
> 
> +	}
> 
> +
> 
> +	nic_dev = HINIC3_ETH_DEV_TO_PRIVATE_NIC_DEV(eth_dev);
> 
> +	memset(nic_dev, 0, sizeof(*nic_dev));
> 
> +	snprintf(nic_dev->dev_name, sizeof(nic_dev->dev_name),
> 
> +		     "dbdf-%.4x:%.2x:%.2x.%x", pci_dev->addr.domain,
> 
> +		     pci_dev->addr.bus, pci_dev->addr.devid,
> 
> +		     pci_dev->addr.function);
> 
> +
> 
> +	/* Alloc mac_addrs. */
> 
> +	eth_dev->data->mac_addrs = rte_zmalloc("hinic3_mac",
> 
> +		HINIC3_MAX_UC_MAC_ADDRS * sizeof(struct rte_ether_addr), 0);
> 
> +	if (!eth_dev->data->mac_addrs) {
> 
> +		PMD_DRV_LOG(ERR,
> 
> +			    "Allocate %zx bytes to store MAC addresses "
> 
> +			    "failed, dev_name: %s",

Allocate MAC address failed

> 
> +			    HINIC3_MAX_UC_MAC_ADDRS *
> 
> +				    sizeof(struct rte_ether_addr),
> 
> +			    eth_dev->data->name);
> 
> +		err = -ENOMEM;
> 
> +		goto alloc_eth_addr_fail;
> 
> +	}
> 
> +
> 
> +	nic_dev->mc_list = rte_zmalloc("hinic3_mc",
> 
> +		HINIC3_MAX_MC_MAC_ADDRS * sizeof(struct rte_ether_addr), 0);
> 
> +	if (!nic_dev->mc_list) {
> 
> +		PMD_DRV_LOG(ERR,
> 
> +			    "Allocate %zx bytes to store multicast "
> 
> +			    "addresses failed, dev_name: %s",
> 
> +			    HINIC3_MAX_MC_MAC_ADDRS *
> 
> +				    sizeof(struct rte_ether_addr),
> 
> +			    eth_dev->data->name);
> 
> +		err = -ENOMEM;
> 
> +		goto alloc_mc_list_fail;
> 
> +	}
> 
> +
> 
> +	/* Create hardware device. */
> 
> +	nic_dev->hwdev = rte_zmalloc("hinic3_hwdev", sizeof(*nic_dev->hwdev),
> 
> +				     RTE_CACHE_LINE_SIZE);
> 
> +	if (!nic_dev->hwdev) {
> 
> +		PMD_DRV_LOG(ERR, "Allocate hwdev memory failed, dev_name: %s",
> 
> +			    eth_dev->data->name);
> 
> +		err = -ENOMEM;
> 
> +		goto alloc_hwdev_mem_fail;
> 
> +	}
> 
> +	nic_dev->hwdev->pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);
> 
> +	nic_dev->hwdev->dev_handle = nic_dev;
> 
> +	nic_dev->hwdev->eth_dev = eth_dev;
> 
> +	nic_dev->hwdev->port_id = eth_dev->data->port_id;
> 
> +
> 
> +	err = hinic3_init_hwdev(nic_dev->hwdev);
> 
> +	if (err) {
> 
> +		PMD_DRV_LOG(ERR, "Init chip hwdev failed, dev_name: %s",
> 
> +			    eth_dev->data->name);
> 
> +		goto init_hwdev_fail;
> 
> +	}
> 
> +
> 
> +	nic_dev->max_sqs = hinic3_func_max_sqs(nic_dev->hwdev);
> 
> +	nic_dev->max_rqs = hinic3_func_max_rqs(nic_dev->hwdev);
> 
> +
> 
> +	err = hinic3_init_nic_hwdev(nic_dev->hwdev);
> 
> +	if (err) {
> 
> +		PMD_DRV_LOG(ERR, "Init nic hwdev failed, dev_name: %s",
> 
> +			    eth_dev->data->name);
> 
> +		goto init_nic_hwdev_fail;
> 
> +	}
> 
> +
> 
> +	err = hinic3_get_feature_from_hw(nic_dev->hwdev, &nic_dev->feature_cap,
> 
> +					 1);
> 
> +	if (err) {
> 
> +		PMD_DRV_LOG(ERR,
> 
> +			"Get nic feature from hardware failed, dev_name: %s",
> 
> +			eth_dev->data->name);
> 
> +		goto get_cap_fail;
> 
> +	}
> 
> +
> 
> +	err = hinic3_init_sw_rxtxqs(nic_dev);
> 
> +	if (err) {
> 
> +		PMD_DRV_LOG(ERR, "Init sw rxqs or txqs failed, dev_name: %s",
> 
> +			    eth_dev->data->name);
> 
> +		goto init_sw_rxtxqs_fail;
> 
> +	}
> 
> +
> 
> +	err = hinic3_init_mac_table(eth_dev);
> 
> +	if (err) {
> 
> +		PMD_DRV_LOG(ERR, "Init mac table failed, dev_name: %s",
> 
> +			    eth_dev->data->name);
> 
> +		goto init_mac_table_fail;
> 
> +	}
> 
> +
> 
> +	/* Set hardware feature to default status. */
> 
> +	err = hinic3_set_default_hw_feature(nic_dev);
> 
> +	if (err) {
> 
> +		PMD_DRV_LOG(ERR, "Set hw default features failed, dev_name: %s",
> 
> +			    eth_dev->data->name);
> 
> +		goto set_default_feature_fail;
> 
> +	}
> 
> +
> 
> +	/* Register callback func to eal lib. */
> 
> +	err = rte_intr_callback_register(PCI_DEV_TO_INTR_HANDLE(pci_dev),
> 
> +					 hinic3_dev_interrupt_handler,
> 
> +					 (void *)eth_dev);
> 
> +	if (err) {
> 
> +		PMD_DRV_LOG(ERR, "Register intr callback failed, dev_name: %s",
> 
> +			    eth_dev->data->name);
> 
> +		goto reg_intr_cb_fail;
> 
> +	}
> 
> +
> 
> +	/* Enable uio/vfio intr/eventfd mapping. */
> 
> +	err = rte_intr_enable(PCI_DEV_TO_INTR_HANDLE(pci_dev));
> 
> +	if (err) {
> 
> +		PMD_DRV_LOG(ERR, "Enable rte interrupt failed, dev_name: %s",
> 
> +			    eth_dev->data->name);
> 
> +		goto enable_intr_fail;
> 
> +	}
> 
> +	tcam_info = &nic_dev->tcam;
> 
> +	memset(tcam_info, 0, sizeof(struct hinic3_tcam_info));
> 
> +	TAILQ_INIT(&tcam_info->tcam_list);
> 
> +	TAILQ_INIT(&tcam_info->tcam_dynamic_info.tcam_dynamic_list);
> 
> +	TAILQ_INIT(&nic_dev->filter_ethertype_list);
> 
> +	TAILQ_INIT(&nic_dev->filter_fdir_rule_list);
> 
> +
> 
> +	hinic3_mutex_init(&nic_dev->rx_mode_mutex, NULL);
> 
> +
> 
> +	hinic3_set_bit(HINIC3_DEV_INTR_EN, &nic_dev->dev_status);
> 
> +
> 
> +	hinic3_set_bit(HINIC3_DEV_INIT, &nic_dev->dev_status);
> 
> +	PMD_DRV_LOG(INFO, "Initialize %s in primary succeed",
> 
> +		    eth_dev->data->name);
> 
> +
> 
> +	/**
> 
> +	 * Queue xstats filled automatically by ethdev layer.
> 
> +	 */
> 
> +	eth_dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS;
> 
> +
> 
> +	return 0;
> 
> +
> 
> +enable_intr_fail:
> 
> +	rte_intr_callback_unregister(PCI_DEV_TO_INTR_HANDLE(pci_dev),
> 
> +					hinic3_dev_interrupt_handler,
> 
> +					(void *)eth_dev);
> 
> +
> 
> +reg_intr_cb_fail:
> 
> +set_default_feature_fail:
> 
> +	hinic3_deinit_mac_addr(eth_dev);
> 
> +
> 
> +init_mac_table_fail:
> 
> +	hinic3_deinit_sw_rxtxqs(nic_dev);
> 
> +
> 
> +init_sw_rxtxqs_fail:
> 
> +	hinic3_free_nic_hwdev(nic_dev->hwdev);
> 
> +
> 
> +get_cap_fail:
> 
> +init_nic_hwdev_fail:
> 
> +	hinic3_free_hwdev(nic_dev->hwdev);
> 
> +	eth_dev->dev_ops = NULL;
> 
> +	eth_dev->rx_queue_count = NULL;
> 
> +	eth_dev->rx_descriptor_status = NULL;
> 
> +	eth_dev->tx_descriptor_status = NULL;
> 
> +
> 
> +init_hwdev_fail:
> 
> +	rte_free(nic_dev->hwdev);
> 
> +	nic_dev->hwdev = NULL;
> 
> +
> 
> +alloc_hwdev_mem_fail:
> 
> +	rte_free(nic_dev->mc_list);
> 
> +	nic_dev->mc_list = NULL;
> 
> +
> 
> +alloc_mc_list_fail:
> 
> +	rte_free(eth_dev->data->mac_addrs);
> 
> +	eth_dev->data->mac_addrs = NULL;
> 
> +
> 
> +alloc_eth_addr_fail:
> 
> +	PMD_DRV_LOG(ERR, "Initialize %s in primary failed",
> 
> +		    eth_dev->data->name);
> 
> +	return err;
> 
> +}
> 
> +
> 
> +static int
> 
> +hinic3_dev_init(struct rte_eth_dev *eth_dev)
> 
> +{
> 
> +	struct rte_pci_device *pci_dev;
> 
> +
> 
> +	pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);
> 
> +
> 
> +	PMD_DRV_LOG(INFO, "Initializing %.4x:%.2x:%.2x.%x in %s process",
> 
> +		    pci_dev->addr.domain, pci_dev->addr.bus,
> 
> +		    pci_dev->addr.devid, pci_dev->addr.function,
> 
> +		    (rte_eal_process_type() == RTE_PROC_PRIMARY) ? "primary"
> 
> +								 : "secondary");
> 
> +
> 
> +	PMD_DRV_LOG(INFO, "Network Interface pmd driver version: %s",
> 
> +		    HINIC3_PMD_DRV_VERSION);
> 
> +
> 
> +	return hinic3_func_init(eth_dev);
> 
> +}
> 
> +
> 
> +static int
> 
> +hinic3_dev_uninit(struct rte_eth_dev *dev)
> 
> +{
> 
> +	struct hinic3_nic_dev *nic_dev;
> 
> +
> 
> +	nic_dev = HINIC3_ETH_DEV_TO_PRIVATE_NIC_DEV(dev);
> 
> +	hinic3_clear_bit(HINIC3_DEV_INIT, &nic_dev->dev_status);
> 
> +
> 
> +	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
> 
> +		return 0;
> 
> +
> 
> +	return hinic3_dev_close(dev);
> 
> +}
> 
> +
> 
> +static const struct rte_pci_id pci_id_hinic3_map[] = {
> 
> +#ifdef CONFIG_SP_VID_DID
> 
> +	{RTE_PCI_DEVICE(PCI_VENDOR_ID_SPNIC, HINIC3_DEV_ID_STANDARD)},
> 
> +	{RTE_PCI_DEVICE(PCI_VENDOR_ID_SPNIC, HINIC3_DEV_ID_VF)},
> 
> +#else
> 
> +	{RTE_PCI_DEVICE(PCI_VENDOR_ID_HUAWEI, HINIC3_DEV_ID_STANDARD)},
> 
> +	{RTE_PCI_DEVICE(PCI_VENDOR_ID_HUAWEI, HINIC3_DEV_ID_VF)},
> 
> +#endif

How about support both?

> 
> +
> 
> +	{.vendor_id = 0},
> 
> +};
> 
> +
> 
> +static int
> 
> +hinic3_pci_probe(__rte_unused struct rte_pci_driver *pci_drv,
> 
> +		 struct rte_pci_device *pci_dev)
> 
> +{
> 
> +	return rte_eth_dev_pci_generic_probe(pci_dev,
> 
> +		sizeof(struct hinic3_nic_dev), hinic3_dev_init);
> 
> +}
> 
> +
> 
> +static int
> 
> +hinic3_pci_remove(struct rte_pci_device *pci_dev)
> 
> +{
> 
> +	return rte_eth_dev_pci_generic_remove(pci_dev, hinic3_dev_uninit);
> 
> +}
> 
> +
> 
> +static struct rte_pci_driver rte_hinic3_pmd = {
> 
> +	.id_table = pci_id_hinic3_map,
> 
> +	.drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC,
> 
> +	.probe = hinic3_pci_probe,
> 
> +	.remove = hinic3_pci_remove,
> 
> +};
> 
> +
> 
> +RTE_PMD_REGISTER_PCI(net_hinic3, rte_hinic3_pmd);
> 
> +RTE_PMD_REGISTER_PCI_TABLE(net_hinic3, pci_id_hinic3_map);
> 
> +
> 
> +RTE_INIT(hinic3_init_log)
> 
> +{
> 
> +	hinic3_logtype = rte_log_register("pmd.net.hinic3");
> 
> +	if (hinic3_logtype >= 0)
> 
> +		rte_log_set_level(hinic3_logtype, RTE_LOG_INFO);

please use  RTE_LOG_REGISTER_SUFFIX

> 
> +}
> 
> diff --git a/drivers/net/hinic3/hinic3_ethdev.h b/drivers/net/hinic3/hinic3_ethdev.h
> 
> new file mode 100644
> 
> index 0000000000..e0d5b4602c
> 
> --- /dev/null
> 
> +++ b/drivers/net/hinic3/hinic3_ethdev.h
> 
> @@ -0,0 +1,119 @@
> 
> +/* SPDX-License-Identifier: BSD-3-Clause
> 
> + * Copyright(c) 2025 Huawei Technologies Co., Ltd
> 
> + */
> 
> +
> 
> +#ifndef _HINIC3_ETHDEV_H_
> 
> +#define _HINIC3_ETHDEV_H_
> 
> +
> 
> +#include <rte_ethdev.h>
> 
> +#include <rte_ethdev_core.h>
> 
> +
> 
> +#define HINIC3_PMD_DRV_VERSION "B106"
> 
> +
> 
> +#define PCI_DEV_TO_INTR_HANDLE(pci_dev) ((pci_dev)->intr_handle)
> 
> +
> 
> +#define HINIC3_PKT_RX_L4_CKSUM_BAD     RTE_MBUF_F_RX_L4_CKSUM_BAD
> 
> +#define HINIC3_PKT_RX_IP_CKSUM_BAD     RTE_MBUF_F_RX_IP_CKSUM_BAD
> 
> +#define HINIC3_PKT_RX_IP_CKSUM_UNKNOWN RTE_MBUF_F_RX_IP_CKSUM_UNKNOWN
> 
> +#define HINIC3_PKT_RX_L4_CKSUM_GOOD    RTE_MBUF_F_RX_L4_CKSUM_GOOD
> 
> +#define HINIC3_PKT_RX_IP_CKSUM_GOOD    RTE_MBUF_F_RX_IP_CKSUM_GOOD
> 
> +#define HINIC3_PKT_TX_TCP_SEG	       RTE_MBUF_F_TX_TCP_SEG
> 
> +#define HINIC3_PKT_TX_UDP_CKSUM	       RTE_MBUF_F_TX_UDP_CKSUM
> 
> +#define HINIC3_PKT_TX_TCP_CKSUM	       RTE_MBUF_F_TX_TCP_CKSUM
> 
> +#define HINIC3_PKT_TX_IP_CKSUM	       RTE_MBUF_F_TX_IP_CKSUM
> 
> +#define HINIC3_PKT_TX_VLAN_PKT	       RTE_MBUF_F_TX_VLAN
> 
> +#define HINIC3_PKT_TX_L4_MASK	       RTE_MBUF_F_TX_L4_MASK
> 
> +#define HINIC3_PKT_TX_SCTP_CKSUM       RTE_MBUF_F_TX_SCTP_CKSUM
> 
> +#define HINIC3_PKT_TX_IPV6	       RTE_MBUF_F_TX_IPV6
> 
> +#define HINIC3_PKT_TX_IPV4	       RTE_MBUF_F_TX_IPV4
> 
> +#define HINIC3_PKT_RX_VLAN	       RTE_MBUF_F_RX_VLAN
> 
> +#define HINIC3_PKT_RX_VLAN_STRIPPED    RTE_MBUF_F_RX_VLAN_STRIPPED
> 
> +#define HINIC3_PKT_RX_RSS_HASH	       RTE_MBUF_F_RX_RSS_HASH
> 
> +#define HINIC3_PKT_TX_TUNNEL_MASK      RTE_MBUF_F_TX_TUNNEL_MASK
> 
> +#define HINIC3_PKT_TX_TUNNEL_VXLAN     RTE_MBUF_F_TX_TUNNEL_VXLAN
> 
> +#define HINIC3_PKT_TX_OUTER_IP_CKSUM   RTE_MBUF_F_TX_OUTER_IP_CKSUM
> 
> +#define HINIC3_PKT_TX_OUTER_IPV6       RTE_MBUF_F_TX_OUTER_IPV6
> 
> +#define HINIC3_PKT_RX_LRO	       RTE_MBUF_F_RX_LRO
> 
> +#define HINIC3_PKT_TX_L4_NO_CKSUM      RTE_MBUF_F_TX_L4_NO_CKSUM
> 
> +
> 
> +#define HINCI3_CPY_MEMPOOL_NAME "cpy_mempool"
> 
> +/* Mbuf pool for copy invalid mbuf segs. */
> 
> +#define HINIC3_COPY_MEMPOOL_DEPTH 1024
> 
> +#define HINIC3_COPY_MEMPOOL_CACHE 128
> 
> +#define HINIC3_COPY_MBUF_SIZE	  4096
> 
> +
> 
> +#define HINIC3_DEV_NAME_LEN 32
> 
> +#define DEV_STOP_DELAY_MS   100
> 
> +#define DEV_START_DELAY_MS  100
> 
> +
> 
> +#define HINIC3_UINT32_BIT_SIZE (CHAR_BIT * sizeof(uint32_t))
> 
> +#define HINIC3_VFTA_SIZE       (4096 / HINIC3_UINT32_BIT_SIZE)
> 
> +#define HINIC3_MAX_QUEUE_NUM   64
> 
> +
> 
> +#define HINIC3_ETH_DEV_TO_PRIVATE_NIC_DEV(dev) \
> 
> +	((struct hinic3_nic_dev *)(dev)->data->dev_private)
> 
> +
> 
> +enum hinic3_dev_status {
> 
> +	HINIC3_DEV_INIT,
> 
> +	HINIC3_DEV_CLOSE,
> 
> +	HINIC3_DEV_START,
> 
> +	HINIC3_DEV_INTR_EN
> 
> +};
> 
> +
> 
> +enum hinic3_tx_cvlan_type {
> 
> +	HINIC3_TX_TPID0,
> 
> +};
> 
> +
> 
> +enum nic_feature_cap {
> 
> +	NIC_F_CSUM = BIT(0),
> 
> +	NIC_F_SCTP_CRC = BIT(1),
> 
> +	NIC_F_TSO = BIT(2),
> 
> +	NIC_F_LRO = BIT(3),
> 
> +	NIC_F_UFO = BIT(4),
> 
> +	NIC_F_RSS = BIT(5),
> 
> +	NIC_F_RX_VLAN_FILTER = BIT(6),
> 
> +	NIC_F_RX_VLAN_STRIP = BIT(7),
> 
> +	NIC_F_TX_VLAN_INSERT = BIT(8),
> 
> +	NIC_F_VXLAN_OFFLOAD = BIT(9),
> 
> +	NIC_F_IPSEC_OFFLOAD = BIT(10),
> 
> +	NIC_F_FDIR = BIT(11),
> 
> +	NIC_F_PROMISC = BIT(12),
> 
> +	NIC_F_ALLMULTI = BIT(13),
> 
> +};
> 
> +
> 
> +#define DEFAULT_DRV_FEATURE 0x3FFF
> 
> +
> 
> +struct hinic3_nic_dev {
> 
> +	struct hinic3_hwdev *hwdev; /**< Hardware device. */
> 
> +	struct hinic3_txq **txqs;
> 
> +	struct hinic3_rxq **rxqs;
> 
> +	struct rte_mempool *cpy_mpool;
> 
> +
> 
> +	u16 num_sqs;
> 
> +	u16 num_rqs;
> 
> +	u16 max_sqs;
> 
> +	u16 max_rqs;
> 
> +
> 
> +	u16 rx_buff_len;
> 
> +	u16 mtu_size;
> 
> +
> 
> +	u32 rx_mode;
> 
> +	u8 rx_queue_list[HINIC3_MAX_QUEUE_NUM];
> 
> +	rte_spinlock_t queue_list_lock;
> 
> +
> 
> +	pthread_mutex_t rx_mode_mutex;
> 
> +
> 
> +	u32 default_cos;
> 
> +	u32 rx_csum_en;
> 
> +
> 
> +	RTE_ATOMIC(u64) dev_status;
> 
> +
> 
> +	struct rte_ether_addr default_addr;
> 
> +	struct rte_ether_addr *mc_list;
> 
> +
> 
> +	char dev_name[HINIC3_DEV_NAME_LEN];
> 
> +	u64 feature_cap;
> 
> +	u32 vfta[HINIC3_VFTA_SIZE]; /**< VLAN bitmap. */
> 
> +};
> 
> +
> 
> +#endif /* _HINIC3_ETHDEV_H_ */
> 


  reply	other threads:[~2025-08-21  6:58 UTC|newest]

Thread overview: 167+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-18  9:05 [RFC 00/18] add hinic3 PMD driver Feifei Wang
2025-04-18  9:05 ` [RFC 01/18] net/hinic3: add intro doc for hinic3 Feifei Wang
2025-04-18  9:05 ` [RFC 02/18] net/hinic3: add basic header files Feifei Wang
2025-04-18  9:05 ` [RFC 03/18] net/hinic3: add hardware interfaces of BAR operation Feifei Wang
2025-04-18  9:05 ` [RFC 04/18] net/hinic3: add support for cmdq mechanism Feifei Wang
2025-04-18  9:05 ` [RFC 05/18] net/hinic3: add NIC event module Feifei Wang
2025-04-18  9:05 ` [RFC 06/18] net/hinic3: add eq mechanism function code Feifei Wang
2025-04-18  9:05 ` [RFC 07/18] net/hinic3: add mgmt module " Feifei Wang
2025-04-18  9:05 ` [RFC 08/18] net/hinic3: add module about hardware operation Feifei Wang
2025-04-18  9:05 ` [RFC 09/18] net/hinic3: add a NIC business configuration module Feifei Wang
2025-04-18  9:05 ` [RFC 10/18] net/hinic3: add context and work queue support Feifei Wang
2025-04-18  9:05 ` [RFC 11/18] net/hinic3: add a mailbox communication module Feifei Wang
2025-04-18  9:05 ` [RFC 12/18] net/hinic3: add device initailization Feifei Wang
2025-04-18  9:05 ` [RFC 13/18] net/hinic3: add dev ops Feifei Wang
2025-06-26 21:29   ` Stephen Hemminger
2025-06-26 21:30   ` Stephen Hemminger
2025-06-26 21:32   ` Stephen Hemminger
2025-04-18  9:06 ` [RFC 14/18] net/hinic3: add Rx/Tx functions Feifei Wang
2025-06-26 21:40   ` Stephen Hemminger
2025-06-26 21:41   ` Stephen Hemminger
2025-04-18  9:06 ` [RFC 15/18] net/hinic3: add MML and EEPROM access feature Feifei Wang
2025-04-18  9:06 ` [RFC 16/18] net/hinic3: add RSS promiscuous ops Feifei Wang
2025-04-18  9:06 ` [RFC 17/18] net/hinic3: add FDIR flow control module Feifei Wang
2025-04-18 18:25   ` Stephen Hemminger
2025-04-18 18:27   ` Stephen Hemminger
2025-04-18 18:28   ` Stephen Hemminger
2025-04-18 18:30   ` Stephen Hemminger
2025-04-18  9:06 ` [RFC 18/18] drivers/net: add hinic3 PMD build and doc files Feifei Wang
2025-04-18 17:22   ` Stephen Hemminger
2025-04-19  2:52     ` 回复: " wangfeifei (J)
2025-05-29  8:14   ` [PATCH v1 00/18] add hinic3 pmd driver Feifei
2025-05-29  8:15   ` [PATCH v1 01/18] This patch adds some basic files to describe the hinic3 driver Feifei
2025-05-29  8:15   ` [PATCH v1 02/18] net/hinic3: add basic header files Feifei
2025-05-29  8:15   ` [PATCH v1 03/18] net/hinic3: add hardware interfaces of BAR operation Feifei
2025-05-29  8:15   ` [PATCH v1 04/18] net/hinic3: add support for cmdq mechanism Feifei
2025-05-29  8:15   ` [PATCH v1 05/18] net/hinic3: add NIC event module Feifei
2025-05-29  8:15   ` [PATCH v1 06/18] net/hinic3: add eq mechanism function code Feifei
2025-05-29  8:15   ` [PATCH v1 07/18] net/hinic3: add mgmt module " Feifei
2025-05-29  8:15   ` [PATCH v1 08/18] net/hinic3: add module about hardware operation Feifei
2025-05-29  8:15   ` [PATCH v1 09/18] net/hinic3: add a NIC business configuration module Feifei
2025-05-29  8:15   ` [PATCH v1 10/18] net/hinic3: add context and work queue support Feifei
2025-05-29  8:15   ` [PATCH v1 11/18] net/hinic3: add a mailbox communication module Feifei
2025-05-29  8:15   ` [PATCH v1 12/18] net/hinic3: add device initialization Feifei
2025-05-29  8:15   ` [PATCH v1 13/18] net/hinic3: add dev ops Feifei
2025-05-29  8:15   ` [PATCH v1 14/18] net/hinic3: add Rx/Tx functions Feifei
2025-05-29  8:15   ` [PATCH v1 15/18] net/hinic3: add MML and EEPROM access feature Feifei
2025-05-29  8:15   ` [PATCH v1 16/18] net/hinic3: add RSS promiscuous ops Feifei
2025-05-29  8:15   ` [PATCH v1 17/18] net/hinic3: add FDIR flow control module Feifei
2025-05-29  8:15   ` [PATCH v1 18/18] drivers/net: add hinic3 PMD build and doc files Feifei
2025-04-18 18:18 ` [RFC 00/18] add hinic3 PMD driver Stephen Hemminger
2025-04-19  2:44   ` 回复: " wangfeifei (J)
2025-04-18 18:20 ` Stephen Hemminger
2025-04-18 18:32 ` Stephen Hemminger
2025-04-19  3:30   ` 回复: " wangfeifei (J)
2025-06-04  2:52 ` Stephen Hemminger
2025-06-09 16:40 ` Stephen Hemminger
2025-06-25  2:27 ` [V2 00/18] add hinic3 pmd driver Feifei Wang
2025-06-25  2:27   ` [V2 01/18] add some basic files about hinic3 driver Feifei Wang
2025-06-26 15:46     ` Stephen Hemminger
2025-06-26 15:58     ` Stephen Hemminger
2025-06-25  2:27   ` [V2 02/18] net/hinic3: add basic header files Feifei Wang
2025-06-25  2:27   ` [V2 03/18] net/hinic3: add hardware interfaces of BAR operation Feifei Wang
2025-06-25  2:28   ` [V2 04/18] net/hinic3: add support for cmdq mechanism Feifei Wang
2025-06-25  2:28   ` [V2 05/18] net/hinic3: add NIC event module Feifei Wang
2025-06-25  2:28   ` [V2 06/18] net/hinic3: add eq mechanism function code Feifei Wang
2025-06-25  2:28   ` [V2 07/18] net/hinic3: add mgmt module " Feifei Wang
2025-06-25  2:28   ` [V2 08/18] net/hinic3: add module about hardware operation Feifei Wang
2025-06-25  2:28   ` [V2 09/18] net/hinic3: add a NIC business configuration module Feifei Wang
2025-06-25  2:28   ` [V2 10/18] net/hinic3: add context and work queue support Feifei Wang
2025-06-25  2:28   ` [V2 11/18] net/hinic3: add a mailbox communication module Feifei Wang
2025-06-25  2:28   ` [V2 12/18] net/hinic3: add device initialization Feifei Wang
2025-06-25  2:28   ` [V2 13/18] net/hinic3: add dev ops Feifei Wang
2025-06-25  2:28   ` [V2 14/18] net/hinic3: add Rx/Tx functions Feifei Wang
2025-06-26 20:04     ` Stephen Hemminger
2025-06-25  2:28   ` [V2 15/18] net/hinic3: add MML and EEPROM access feature Feifei Wang
2025-06-25  2:28   ` [V2 16/18] net/hinic3: add RSS promiscuous ops Feifei Wang
2025-06-25  2:28   ` [V2 17/18] net/hinic3: add FDIR flow control module Feifei Wang
2025-06-26 15:59     ` Stephen Hemminger
2025-06-26 19:58     ` Stephen Hemminger
2025-06-25  2:28   ` [V2 18/18] drivers/net: add hinic3 PMD build and doc files Feifei Wang
2025-06-26 15:47   ` [V2 00/18] add hinic3 pmd driver Stephen Hemminger
2025-06-26 21:41   ` Stephen Hemminger
2025-07-08 15:47   ` Stephen Hemminger
2025-06-28  7:25 ` [V3 " Feifei Wang
2025-06-28  7:25   ` [V3 01/18] add some basic files about hinic3 driver Feifei Wang
2025-06-29 17:57     ` Stephen Hemminger
2025-06-28  7:25   ` [V3 02/18] net/hinic3: add basic header files Feifei Wang
2025-06-28  7:25   ` [V3 03/18] net/hinic3: add hardware interfaces of BAR operation Feifei Wang
2025-06-28  7:25   ` [V3 04/18] net/hinic3: add support for cmdq mechanism Feifei Wang
2025-06-28  7:25   ` [V3 05/18] net/hinic3: add NIC event module Feifei Wang
2025-06-28  7:25   ` [V3 06/18] net/hinic3: add eq mechanism function code Feifei Wang
2025-06-28  7:25   ` [V3 07/18] net/hinic3: add mgmt module " Feifei Wang
2025-06-28  7:25   ` [V3 08/18] net/hinic3: add module about hardware operation Feifei Wang
2025-06-28  7:25   ` [V3 09/18] net/hinic3: add a NIC business configuration module Feifei Wang
2025-06-28  7:25   ` [V3 10/18] net/hinic3: add context and work queue support Feifei Wang
2025-06-28  7:25   ` [V3 11/18] net/hinic3: add a mailbox communication module Feifei Wang
2025-06-28  7:25   ` [V3 12/18] net/hinic3: add device initialization Feifei Wang
2025-06-28  7:25   ` [V3 13/18] net/hinic3: add dev ops Feifei Wang
2025-06-28  7:25   ` [V3 14/18] net/hinic3: add Rx/Tx functions Feifei Wang
2025-06-29 18:00     ` Stephen Hemminger
2025-06-28  7:25   ` [V3 15/18] net/hinic3: add MML and EEPROM access feature Feifei Wang
2025-06-28  7:25   ` [V3 16/18] net/hinic3: add RSS promiscuous ops Feifei Wang
2025-06-28  7:25   ` [V3 17/18] net/hinic3: add FDIR flow control module Feifei Wang
2025-06-28  7:25   ` [V3 18/18] drivers/net: add hinic3 PMD build and doc files Feifei Wang
2025-06-28 15:04     ` Stephen Hemminger
2025-07-01  1:41 ` [V4 00/18] add hinic3 pmd driver Feifei Wang
2025-07-01  1:41   ` [V4 01/18] doc: add some basic files to describe the hinic3 driver Feifei Wang
2025-07-01  1:41   ` [V4 02/18] net/hinic3: add basic header files Feifei Wang
2025-07-01  1:41   ` [V4 03/18] net/hinic3: add hardware interfaces of BAR operation Feifei Wang
2025-07-01  1:41   ` [V4 04/18] net/hinic3: add support for cmdq mechanism Feifei Wang
2025-07-01  1:41   ` [V4 05/18] net/hinic3: add NIC event module Feifei Wang
2025-07-01  1:41   ` [V4 06/18] net/hinic3: add eq mechanism function code Feifei Wang
2025-07-01  1:41   ` [V4 07/18] net/hinic3: add mgmt module " Feifei Wang
2025-07-01  1:41   ` [V4 08/18] net/hinic3: add module about hardware operation Feifei Wang
2025-07-01  1:42   ` [V4 09/18] net/hinic3: add a NIC business configuration module Feifei Wang
2025-07-01  1:42   ` [V4 10/18] net/hinic3: add context and work queue support Feifei Wang
2025-07-01  1:42   ` [V4 11/18] net/hinic3: add a mailbox communication module Feifei Wang
2025-07-01  1:42   ` [V4 12/18] net/hinic3: add device initialization Feifei Wang
2025-07-01  1:42   ` [V4 13/18] net/hinic3: add dev ops Feifei Wang
2025-07-01  1:42   ` [V4 14/18] net/hinic3: add Rx/Tx functions Feifei Wang
2025-07-01  1:42   ` [V4 15/18] net/hinic3: add MML and EEPROM access feature Feifei Wang
2025-07-01  1:42   ` [V4 16/18] net/hinic3: add RSS promiscuous ops Feifei Wang
2025-07-01  1:42   ` [V4 17/18] net/hinic3: add FDIR flow control module Feifei Wang
2025-07-01  1:42   ` [V4 18/18] drivers/net: add hinic3 PMD build and doc files Feifei Wang
2025-07-01 13:53   ` [V4 00/18] add hinic3 pmd driver Stephen Hemminger
2025-07-02  2:09 ` [V5 " Feifei Wang
2025-07-02  2:09   ` [V5 01/18] doc: add some basic files to describe the hinic3 driver Feifei Wang
2025-08-21  1:25     ` fengchengwen
2025-07-02  2:09   ` [V5 02/18] net/hinic3: add basic header files Feifei Wang
2025-08-03 17:19     ` Stephen Hemminger
2025-08-21  1:51     ` fengchengwen
2025-07-02  2:09   ` [V5 03/18] net/hinic3: add hardware interfaces of BAR operation Feifei Wang
2025-08-21  2:13     ` fengchengwen
2025-07-02  2:09   ` [V5 04/18] net/hinic3: add support for cmdq mechanism Feifei Wang
2025-08-21  3:03     ` fengchengwen
2025-07-02  2:09   ` [V5 05/18] net/hinic3: add NIC event module Feifei Wang
2025-08-21  3:25     ` fengchengwen
2025-07-02  2:09   ` [V5 06/18] net/hinic3: add eq mechanism function code Feifei Wang
2025-08-21  4:06     ` fengchengwen
2025-07-02  2:09   ` [V5 07/18] net/hinic3: add mgmt module " Feifei Wang
2025-07-02  2:09   ` [V5 08/18] net/hinic3: add module about hardware operation Feifei Wang
2025-08-21  6:20     ` fengchengwen
2025-07-02  2:09   ` [V5 09/18] net/hinic3: add a NIC business configuration module Feifei Wang
2025-08-21  6:34     ` fengchengwen
2025-07-02  2:09   ` [V5 10/18] net/hinic3: add context and work queue support Feifei Wang
2025-08-21  6:41     ` fengchengwen
2025-07-02  2:09   ` [V5 11/18] net/hinic3: add a mailbox communication module Feifei Wang
2025-08-21  6:48     ` fengchengwen
2025-07-02  2:09   ` [V5 12/18] net/hinic3: add device initialization Feifei Wang
2025-08-21  6:58     ` fengchengwen [this message]
2025-07-02  2:09   ` [V5 13/18] net/hinic3: add dev ops Feifei Wang
2025-08-03 17:24     ` Stephen Hemminger
2025-08-21  7:43     ` fengchengwen
2025-07-02  2:09   ` [V5 14/18] net/hinic3: add Rx/Tx functions Feifei Wang
2025-08-21  8:05     ` fengchengwen
2025-07-02  2:09   ` [V5 15/18] net/hinic3: add MML and EEPROM access feature Feifei Wang
2025-08-21  8:13     ` fengchengwen
2025-07-02  2:09   ` [V5 16/18] net/hinic3: add RSS promiscuous ops Feifei Wang
2025-08-21  8:22     ` fengchengwen
2025-07-02  2:09   ` [V5 17/18] net/hinic3: add FDIR flow control module Feifei Wang
2025-08-21  8:38     ` fengchengwen
2025-07-02  2:09   ` [V5 18/18] drivers/net: add hinic3 PMD build and doc files Feifei Wang
2025-08-21  8:44     ` fengchengwen
2025-07-02 14:55   ` [V5 00/18] add hinic3 pmd driver Stephen Hemminger
2025-07-07  3:27     ` 回复: " wangfeifei (J)
2025-07-07  3:32       ` Stephen Hemminger
2025-07-07  7:39         ` 回复: " wangfeifei (J)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=791e7c60-d1d3-4341-a2c0-83a0a95a6b3d@huawei.com \
    --to=fengchengwen@huawei.com \
    --cc=anatoly.burakov@intel.com \
    --cc=chenyi221@huawei.com \
    --cc=dev@dpdk.org \
    --cc=wangfeifei40@huawei.com \
    --cc=wangxin679@h-partners.com \
    --cc=wff_light@vip.163.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).