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 <[email protected]> --- 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

