[PATCH v2 06/26] net/hinic3: add NIC type identification
Jiacheng Ye
yejiacheng4 at h-partners.com
Wed Oct 14 17:09:02 CEST 2026
Identify the NIC type from its PCI device ID at initialization and store it
in the NIC private data, so per-model behaviour can be selected without
scattered PCI device ID comparisons.
Signed-off-by: Jiacheng Ye <yejiacheng4 at h-partners.com>
---
drivers/net/hinic3/hinic3_ethdev.c | 17 +++++++++++++++++
drivers/net/hinic3/hinic3_ethdev.h | 10 ++++++++++
2 files changed, 27 insertions(+)
diff --git a/drivers/net/hinic3/hinic3_ethdev.c b/drivers/net/hinic3/hinic3_ethdev.c
index 9944edf978..678ed46454 100644
--- a/drivers/net/hinic3/hinic3_ethdev.c
+++ b/drivers/net/hinic3/hinic3_ethdev.c
@@ -482,6 +482,22 @@ hinic3_init_default_cos(struct hinic3_nic_dev *nic_dev)
return 0;
}
+static enum nic_type
+hinic3_get_nic_type(struct rte_pci_device *pci_dev)
+{
+ switch (pci_dev->id.device_id) {
+ case HINIC3_DEV_ID_SP620:
+ case HINIC3_DEV_ID_VF_SP620:
+ case HINIC3_DEV_ID_SP920: /* SP920 is the DPU card of SP620. */
+ return NIC_SP620;
+ case HINIC3_DEV_ID_SP230:
+ case HINIC3_DEV_ID_VF_SP230:
+ return NIC_SP230;
+ default:
+ return NIC_UNKNOWN;
+ }
+}
+
/**
* Initialize Class of Service (CoS). For PF devices, it also sync the link
* status with the physical port.
@@ -3420,6 +3436,7 @@ hinic3_func_init(struct rte_eth_dev *eth_dev)
nic_dev = HINIC3_ETH_DEV_TO_PRIVATE_NIC_DEV(eth_dev);
memset(nic_dev, 0, sizeof(*nic_dev));
+ nic_dev->nic_type = hinic3_get_nic_type(pci_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,
diff --git a/drivers/net/hinic3/hinic3_ethdev.h b/drivers/net/hinic3/hinic3_ethdev.h
index 9061e2b217..c46fcfcbec 100644
--- a/drivers/net/hinic3/hinic3_ethdev.h
+++ b/drivers/net/hinic3/hinic3_ethdev.h
@@ -106,6 +106,12 @@ enum nic_feature_cap {
TAILQ_HEAD(hinic3_ethertype_filter_list, rte_flow);
TAILQ_HEAD(hinic3_fdir_rule_filter_list, rte_flow);
+enum nic_type {
+ NIC_SP620 = 0,
+ NIC_SP230 = 1,
+ NIC_UNKNOWN = 2,
+};
+
struct hinic3_nic_dev {
struct hinic3_hwdev *hwdev; /**< Hardware device. */
struct hinic3_txq **txqs;
@@ -152,9 +158,13 @@ struct hinic3_nic_dev {
struct hinic3_nic_cmdq_ops *cmdq_ops;
struct hinic3_nic_rx_ops *rx_ops;
struct hinic3_nic_tx_ops *tx_ops;
+ enum nic_type nic_type; /**< NIC type. */
};
+#define HINIC3_IS_SP620_NIC(nic_dev) ((nic_dev)->nic_type == NIC_SP620)
+#define HINIC3_IS_SP230_NIC(nic_dev) ((nic_dev)->nic_type == NIC_SP230)
+
extern const struct rte_flow_ops hinic3_flow_ops;
/**
--
2.33.0
More information about the dev
mailing list