From: Renyong Wan <wanry@3snic.com>
Register device ID for 3SNIC ethernet adapter to support
PCI ethdev probe and remove.
Signed-off-by: Steven Song <steven.song@3snic.com>
Signed-off-by: Renyong Wan <wanry@3snic.com>
---
drivers/net/sssnic/base/sssnic_hw.h | 11 +++++++++
drivers/net/sssnic/sssnic_ethdev.c | 37 +++++++++++++++++++++++++----
2 files changed, 44 insertions(+), 4 deletions(-)
create mode 100644 drivers/net/sssnic/base/sssnic_hw.h
new file mode 100644
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018-2022 Shenzhen 3SNIC Information Technology Co., Ltd.
+ */
+
+#ifndef _SSSNIC_HW_H_
+#define _SSSNIC_HW_H_
+
+#define SSSNIC_PCI_VENDOR_ID 0x1F3F
+#define SSSNIC_DEVICE_ID_STD 0x9020
+
+#endif /* _SSSNIC_HW_H_ */
@@ -6,25 +6,54 @@
#include <ethdev_pci.h>
#include "sssnic_log.h"
+#include "base/sssnic_hw.h"
+
+static int
+sssnic_ethdev_init(struct rte_eth_dev *ethdev)
+{
+ RTE_SET_USED(ethdev);
+ PMD_INIT_FUNC_TRACE();
+
+ return -EINVAL;
+}
+
+static int
+sssnic_ethdev_uninit(struct rte_eth_dev *ethdev)
+{
+ RTE_SET_USED(ethdev);
+ PMD_INIT_FUNC_TRACE();
+
+ if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+ return 0;
+
+ return -EINVAL;
+}
static int
sssnic_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)
{
RTE_SET_USED(pci_drv);
- RTE_SET_USED(pci_dev);
PMD_INIT_FUNC_TRACE();
- return -EINVAL;
+
+ return rte_eth_dev_pci_generic_probe(pci_dev, 0, sssnic_ethdev_init);
}
static int
sssnic_pci_remove(struct rte_pci_device *pci_dev)
{
- RTE_SET_USED(pci_dev);
PMD_INIT_FUNC_TRACE();
- return -EINVAL;
+
+ return rte_eth_dev_pci_generic_remove(pci_dev, sssnic_ethdev_uninit);
}
+static const struct rte_pci_id sssnic_pci_id_map[] = {
+ { RTE_PCI_DEVICE(SSSNIC_PCI_VENDOR_ID, SSSNIC_DEVICE_ID_STD) },
+ { .vendor_id = 0 },
+};
+
static struct rte_pci_driver sssnic_pmd = {
+ .id_table = sssnic_pci_id_map,
+ .drv_flags = RTE_PCI_DRV_NEED_MAPPING,
.probe = sssnic_pci_probe,
.remove = sssnic_pci_remove,
};