1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2019 Intel Corporation
5 #include <rte_bus_pci.h>
6 #include <rte_rawdev_pmd.h>
8 #include "rte_ioat_rawdev.h"
10 /* Dynamic log type identifier */
13 static struct rte_pci_driver ioat_pmd_drv;
15 #define IOAT_VENDOR_ID 0x8086
16 #define IOAT_DEVICE_ID_SKX 0x2021
17 #define IOAT_DEVICE_ID_BDX0 0x6f20
18 #define IOAT_DEVICE_ID_BDX1 0x6f21
19 #define IOAT_DEVICE_ID_BDX2 0x6f22
20 #define IOAT_DEVICE_ID_BDX3 0x6f23
21 #define IOAT_DEVICE_ID_BDX4 0x6f24
22 #define IOAT_DEVICE_ID_BDX5 0x6f25
23 #define IOAT_DEVICE_ID_BDX6 0x6f26
24 #define IOAT_DEVICE_ID_BDX7 0x6f27
25 #define IOAT_DEVICE_ID_BDXE 0x6f2E
26 #define IOAT_DEVICE_ID_BDXF 0x6f2F
28 #define IOAT_PMD_LOG(level, fmt, args...) rte_log(RTE_LOG_ ## level, \
29 ioat_pmd_logtype, "%s(): " fmt "\n", __func__, ##args)
31 #define IOAT_PMD_DEBUG(fmt, args...) IOAT_PMD_LOG(DEBUG, fmt, ## args)
32 #define IOAT_PMD_INFO(fmt, args...) IOAT_PMD_LOG(INFO, fmt, ## args)
33 #define IOAT_PMD_ERR(fmt, args...) IOAT_PMD_LOG(ERR, fmt, ## args)
34 #define IOAT_PMD_WARN(fmt, args...) IOAT_PMD_LOG(WARNING, fmt, ## args)
37 ioat_rawdev_create(const char *name, struct rte_pci_device *dev)
45 ioat_rawdev_destroy(const char *name)
52 ioat_rawdev_probe(struct rte_pci_driver *drv, struct rte_pci_device *dev)
58 rte_pci_device_name(&dev->addr, name, sizeof(name));
59 IOAT_PMD_INFO("Init %s on NUMA node %d", name, dev->device.numa_node);
61 dev->device.driver = &drv->driver;
62 ret = ioat_rawdev_create(name, dev);
67 ioat_rawdev_remove(struct rte_pci_device *dev)
72 rte_pci_device_name(&dev->addr, name, sizeof(name));
74 IOAT_PMD_INFO("Closing %s on NUMA node %d",
75 name, dev->device.numa_node);
77 ret = ioat_rawdev_destroy(name);
81 static const struct rte_pci_id pci_id_ioat_map[] = {
82 { RTE_PCI_DEVICE(IOAT_VENDOR_ID, IOAT_DEVICE_ID_SKX) },
83 { RTE_PCI_DEVICE(IOAT_VENDOR_ID, IOAT_DEVICE_ID_BDX0) },
84 { RTE_PCI_DEVICE(IOAT_VENDOR_ID, IOAT_DEVICE_ID_BDX1) },
85 { RTE_PCI_DEVICE(IOAT_VENDOR_ID, IOAT_DEVICE_ID_BDX2) },
86 { RTE_PCI_DEVICE(IOAT_VENDOR_ID, IOAT_DEVICE_ID_BDX3) },
87 { RTE_PCI_DEVICE(IOAT_VENDOR_ID, IOAT_DEVICE_ID_BDX4) },
88 { RTE_PCI_DEVICE(IOAT_VENDOR_ID, IOAT_DEVICE_ID_BDX5) },
89 { RTE_PCI_DEVICE(IOAT_VENDOR_ID, IOAT_DEVICE_ID_BDX6) },
90 { RTE_PCI_DEVICE(IOAT_VENDOR_ID, IOAT_DEVICE_ID_BDX7) },
91 { RTE_PCI_DEVICE(IOAT_VENDOR_ID, IOAT_DEVICE_ID_BDXE) },
92 { RTE_PCI_DEVICE(IOAT_VENDOR_ID, IOAT_DEVICE_ID_BDXF) },
93 { .vendor_id = 0, /* sentinel */ },
96 static struct rte_pci_driver ioat_pmd_drv = {
97 .id_table = pci_id_ioat_map,
98 .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC |
99 RTE_PCI_DRV_IOVA_AS_VA,
100 .probe = ioat_rawdev_probe,
101 .remove = ioat_rawdev_remove,
104 RTE_PMD_REGISTER_PCI(IOAT_PMD_RAWDEV_NAME, ioat_pmd_drv);
105 RTE_PMD_REGISTER_PCI_TABLE(IOAT_PMD_RAWDEV_NAME, pci_id_ioat_map);
106 RTE_PMD_REGISTER_KMOD_DEP(IOAT_PMD_RAWDEV_NAME, "* igb_uio | uio_pci_generic");
108 RTE_INIT(ioat_pmd_init_log)
110 ioat_pmd_logtype = rte_log_register(IOAT_PMD_LOG_NAME);
111 if (ioat_pmd_logtype >= 0)
112 rte_log_set_level(ioat_pmd_logtype, RTE_LOG_INFO);