dma/idxd: add skeleton for VFIO based DSA device
[dpdk.git] / drivers / dma / idxd / idxd_pci.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2021 Intel Corporation
3  */
4
5 #include <rte_bus_pci.h>
6
7 #include "idxd_internal.h"
8
9 #define IDXD_VENDOR_ID          0x8086
10 #define IDXD_DEVICE_ID_SPR      0x0B25
11
12 #define IDXD_PMD_DMADEV_NAME_PCI dmadev_idxd_pci
13
14 const struct rte_pci_id pci_id_idxd_map[] = {
15         { RTE_PCI_DEVICE(IDXD_VENDOR_ID, IDXD_DEVICE_ID_SPR) },
16         { .vendor_id = 0, /* sentinel */ },
17 };
18
19 static int
20 idxd_dmadev_probe_pci(struct rte_pci_driver *drv, struct rte_pci_device *dev)
21 {
22         int ret = 0;
23         char name[PCI_PRI_STR_SIZE];
24
25         rte_pci_device_name(&dev->addr, name, sizeof(name));
26         IDXD_PMD_INFO("Init %s on NUMA node %d", name, dev->device.numa_node);
27         dev->device.driver = &drv->driver;
28
29         return ret;
30 }
31
32 static int
33 idxd_dmadev_remove_pci(struct rte_pci_device *dev)
34 {
35         char name[PCI_PRI_STR_SIZE];
36
37         rte_pci_device_name(&dev->addr, name, sizeof(name));
38
39         IDXD_PMD_INFO("Closing %s on NUMA node %d",
40                         name, dev->device.numa_node);
41
42         return 0;
43 }
44
45 struct rte_pci_driver idxd_pmd_drv_pci = {
46         .id_table = pci_id_idxd_map,
47         .drv_flags = RTE_PCI_DRV_NEED_MAPPING,
48         .probe = idxd_dmadev_probe_pci,
49         .remove = idxd_dmadev_remove_pci,
50 };
51
52 RTE_PMD_REGISTER_PCI(IDXD_PMD_DMADEV_NAME_PCI, idxd_pmd_drv_pci);
53 RTE_PMD_REGISTER_PCI_TABLE(IDXD_PMD_DMADEV_NAME_PCI, pci_id_idxd_map);
54 RTE_PMD_REGISTER_KMOD_DEP(IDXD_PMD_DMADEV_NAME_PCI, "vfio-pci");
55 RTE_PMD_REGISTER_PARAM_STRING(dmadev_idxd_pci, "max_queues=0");