xref: /spdk/lib/env_dpdk/pci_dpdk.h (revision c164db9ffe3718ad4e4f5bab380ccfa62c2fa672)
1 /*   SPDX-License-Identifier: BSD-3-Clause
2  *   Copyright (C) 2022 Intel Corporation.
3  *   All rights reserved.
4  */
5 
6 #ifndef SPDK_PCI_DPDK_H
7 #define SPDK_PCI_DPDK_H
8 
9 #include "spdk/env.h"
10 
11 struct spdk_pci_driver {
12 	uint8_t				driver_buf[256];
13 	struct rte_pci_driver		*driver;
14 
15 	const char                      *name;
16 	const struct spdk_pci_id	*id_table;
17 	uint32_t			drv_flags;
18 
19 	spdk_pci_enum_cb		cb_fn;
20 	void				*cb_arg;
21 	TAILQ_ENTRY(spdk_pci_driver)	tailq;
22 };
23 
24 struct rte_pci_device;
25 struct rte_pci_driver;
26 struct rte_device;
27 
28 struct dpdk_fn_table {
29 	struct rte_mem_resource *(*pci_device_get_mem_resource)(struct rte_pci_device *dev, uint32_t bar);
30 	const char *(*pci_device_get_name)(struct rte_pci_device *);
31 	struct rte_devargs *(*pci_device_get_devargs)(struct rte_pci_device *);
32 	struct rte_pci_addr *(*pci_device_get_addr)(struct rte_pci_device *);
33 	struct rte_pci_id *(*pci_device_get_id)(struct rte_pci_device *);
34 	int (*pci_device_get_numa_node)(struct rte_pci_device *_dev);
35 	int (*pci_device_read_config)(struct rte_pci_device *dev, void *value, uint32_t len,
36 				      uint32_t offset);
37 	int (*pci_device_write_config)(struct rte_pci_device *dev, void *value, uint32_t len,
38 				       uint32_t offset);
39 	int (*pci_driver_register)(struct spdk_pci_driver *driver,
40 				   int (*probe_fn)(struct rte_pci_driver *driver, struct rte_pci_device *device),
41 				   int (*remove_fn)(struct rte_pci_device *device));
42 	int (*pci_device_enable_interrupt)(struct rte_pci_device *rte_dev);
43 	int (*pci_device_disable_interrupt)(struct rte_pci_device *rte_dev);
44 	int (*pci_device_get_interrupt_efd)(struct rte_pci_device *rte_dev);
45 	int (*pci_device_create_interrupt_efds)(struct rte_pci_device *rte_dev, uint32_t count);
46 	void (*pci_device_delete_interrupt_efds)(struct rte_pci_device *rte_dev);
47 	int (*pci_device_get_interrupt_efd_by_index)(struct rte_pci_device *rte_dev, uint32_t index);
48 	int (*pci_device_interrupt_cap_multi)(struct rte_pci_device *rte_dev);
49 	void (*bus_scan)(void);
50 	int (*bus_probe)(void);
51 	struct rte_devargs *(*device_get_devargs)(struct rte_device *dev);
52 	void (*device_set_devargs)(struct rte_device *dev, struct rte_devargs *devargs);
53 	const char *(*device_get_name)(struct rte_device *dev);
54 	bool (*device_scan_allowed)(struct rte_device *dev);
55 };
56 
57 int dpdk_pci_init(void);
58 
59 struct rte_mem_resource *dpdk_pci_device_get_mem_resource(struct rte_pci_device *dev, uint32_t bar);
60 uint64_t dpdk_pci_device_vtophys(struct rte_pci_device *dev, uint64_t vaddr, size_t len);
61 const char *dpdk_pci_device_get_name(struct rte_pci_device *);
62 struct rte_devargs *dpdk_pci_device_get_devargs(struct rte_pci_device *);
63 struct rte_pci_addr *dpdk_pci_device_get_addr(struct rte_pci_device *);
64 struct rte_pci_id *dpdk_pci_device_get_id(struct rte_pci_device *);
65 int dpdk_pci_device_get_numa_node(struct rte_pci_device *_dev);
66 int dpdk_pci_device_read_config(struct rte_pci_device *dev, void *value, uint32_t len,
67 				uint32_t offset);
68 int dpdk_pci_device_write_config(struct rte_pci_device *dev, void *value, uint32_t len,
69 				 uint32_t offset);
70 int dpdk_pci_driver_register(struct spdk_pci_driver *driver,
71 			     int (*probe_fn)(struct rte_pci_driver *driver, struct rte_pci_device *device),
72 			     int (*remove_fn)(struct rte_pci_device *device));
73 int dpdk_pci_device_enable_interrupt(struct rte_pci_device *rte_dev);
74 int dpdk_pci_device_disable_interrupt(struct rte_pci_device *rte_dev);
75 int dpdk_pci_device_get_interrupt_efd(struct rte_pci_device *rte_dev);
76 int dpdk_pci_device_create_interrupt_efds(struct rte_pci_device *rte_dev, uint32_t count);
77 void dpdk_pci_device_delete_interrupt_efds(struct rte_pci_device *rte_dev);
78 int dpdk_pci_device_get_interrupt_efd_by_index(struct rte_pci_device *rte_dev, uint32_t index);
79 int dpdk_pci_device_interrupt_cap_multi(struct rte_pci_device *rte_dev);
80 void dpdk_bus_scan(void);
81 int dpdk_bus_probe(void);
82 struct rte_devargs *dpdk_device_get_devargs(struct rte_device *dev);
83 void dpdk_device_set_devargs(struct rte_device *dev, struct rte_devargs *devargs);
84 const char *dpdk_device_get_name(struct rte_device *dev);
85 bool dpdk_device_scan_allowed(struct rte_device *dev);
86 
87 #endif /* ifndef SPDK_PCI_DPDK_H */
88