raw/ioat: introduce IOAT driver
[dpdk.git] / drivers / raw / ioat / ioat_rawdev.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2019 Intel Corporation
3  */
4
5 #include <rte_bus_pci.h>
6 #include <rte_rawdev_pmd.h>
7
8 #include "rte_ioat_rawdev.h"
9
10 /* Dynamic log type identifier */
11 int ioat_pmd_logtype;
12
13 static struct rte_pci_driver ioat_pmd_drv;
14
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
27
28 #define IOAT_PMD_LOG(level, fmt, args...) rte_log(RTE_LOG_ ## level, \
29         ioat_pmd_logtype, "%s(): " fmt "\n", __func__, ##args)
30
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)
35
36 static int
37 ioat_rawdev_create(const char *name, struct rte_pci_device *dev)
38 {
39         RTE_SET_USED(name);
40         RTE_SET_USED(dev);
41         return 0;
42 }
43
44 static int
45 ioat_rawdev_destroy(const char *name)
46 {
47         RTE_SET_USED(name);
48         return 0;
49 }
50
51 static int
52 ioat_rawdev_probe(struct rte_pci_driver *drv, struct rte_pci_device *dev)
53 {
54         char name[32];
55         int ret = 0;
56
57
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);
60
61         dev->device.driver = &drv->driver;
62         ret = ioat_rawdev_create(name, dev);
63         return ret;
64 }
65
66 static int
67 ioat_rawdev_remove(struct rte_pci_device *dev)
68 {
69         char name[32];
70         int ret;
71
72         rte_pci_device_name(&dev->addr, name, sizeof(name));
73
74         IOAT_PMD_INFO("Closing %s on NUMA node %d",
75                         name, dev->device.numa_node);
76
77         ret = ioat_rawdev_destroy(name);
78         return ret;
79 }
80
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 */ },
94 };
95
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,
102 };
103
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");
107
108 RTE_INIT(ioat_pmd_init_log)
109 {
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);
113 }