xref: /spdk/lib/env_dpdk/pci_dpdk.h (revision 307b8c112ffd90a26d53dd15fad67bd9038ef526)
1 /*   SPDX-License-Identifier: BSD-3-Clause
2  *   Copyright (c) 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 #if RTE_VERSION < RTE_VERSION_NUM(21, 11, 0, 0)
12 #define RTE_TAILQ_HEAD(name, type) TAILQ_HEAD(name, type)
13 #define RTE_TAILQ_ENTRY(type) TAILQ_ENTRY(type)
14 #define RTE_TAILQ_FOREACH(var, head, field) TAILQ_FOREACH(var, head, field)
15 #endif
16 
17 struct spdk_pci_driver {
18 	uint8_t				driver_buf[256];
19 	struct rte_pci_driver		*driver;
20 
21 	const char                      *name;
22 	const struct spdk_pci_id	*id_table;
23 	uint32_t			drv_flags;
24 
25 	spdk_pci_enum_cb		cb_fn;
26 	void				*cb_arg;
27 	TAILQ_ENTRY(spdk_pci_driver)	tailq;
28 };
29 
30 struct rte_pci_device;
31 struct rte_pci_driver;
32 struct rte_device;
33 
34 struct dpdk_fn_table {
35 	struct rte_mem_resource *(*pci_device_get_mem_resource)(struct rte_pci_device *dev, uint32_t bar);
36 	const char *(*pci_device_get_name)(struct rte_pci_device *);
37 	struct rte_devargs *(*pci_device_get_devargs)(struct rte_pci_device *);
38 	struct rte_pci_addr *(*pci_device_get_addr)(struct rte_pci_device *);
39 	struct rte_pci_id *(*pci_device_get_id)(struct rte_pci_device *);
40 	int (*pci_device_get_numa_node)(struct rte_pci_device *_dev);
41 	int (*pci_device_read_config)(struct rte_pci_device *dev, void *value, uint32_t len,
42 				      uint32_t offset);
43 	int (*pci_device_write_config)(struct rte_pci_device *dev, void *value, uint32_t len,
44 				       uint32_t offset);
45 	int (*pci_driver_register)(struct spdk_pci_driver *driver,
46 				   int (*probe_fn)(struct rte_pci_driver *driver, struct rte_pci_device *device),
47 				   int (*remove_fn)(struct rte_pci_device *device));
48 	int (*pci_device_enable_interrupt)(struct rte_pci_device *rte_dev);
49 	int (*pci_device_disable_interrupt)(struct rte_pci_device *rte_dev);
50 	int (*pci_device_get_interrupt_efd)(struct rte_pci_device *rte_dev);
51 	void (*bus_scan)(void);
52 	int (*bus_probe)(void);
53 	struct rte_devargs *(*device_get_devargs)(struct rte_device *dev);
54 	void (*device_set_devargs)(struct rte_device *dev, struct rte_devargs *devargs);
55 	const char *(*device_get_name)(struct rte_device *dev);
56 	bool (*device_scan_allowed)(struct rte_device *dev);
57 };
58 
59 int dpdk_pci_init(void);
60 
61 struct rte_mem_resource *dpdk_pci_device_get_mem_resource(struct rte_pci_device *dev, uint32_t bar);
62 uint64_t dpdk_pci_device_vtophys(struct rte_pci_device *dev, uint64_t vaddr, size_t len);
63 const char *dpdk_pci_device_get_name(struct rte_pci_device *);
64 struct rte_devargs *dpdk_pci_device_get_devargs(struct rte_pci_device *);
65 struct rte_pci_addr *dpdk_pci_device_get_addr(struct rte_pci_device *);
66 struct rte_pci_id *dpdk_pci_device_get_id(struct rte_pci_device *);
67 int dpdk_pci_device_get_numa_node(struct rte_pci_device *_dev);
68 int dpdk_pci_device_read_config(struct rte_pci_device *dev, void *value, uint32_t len,
69 				uint32_t offset);
70 int dpdk_pci_device_write_config(struct rte_pci_device *dev, void *value, uint32_t len,
71 				 uint32_t offset);
72 int dpdk_pci_driver_register(struct spdk_pci_driver *driver,
73 			     int (*probe_fn)(struct rte_pci_driver *driver, struct rte_pci_device *device),
74 			     int (*remove_fn)(struct rte_pci_device *device));
75 int dpdk_pci_device_enable_interrupt(struct rte_pci_device *rte_dev);
76 int dpdk_pci_device_disable_interrupt(struct rte_pci_device *rte_dev);
77 int dpdk_pci_device_get_interrupt_efd(struct rte_pci_device *rte_dev);
78 void dpdk_bus_scan(void);
79 int dpdk_bus_probe(void);
80 struct rte_devargs *dpdk_device_get_devargs(struct rte_device *dev);
81 void dpdk_device_set_devargs(struct rte_device *dev, struct rte_devargs *devargs);
82 const char *dpdk_device_get_name(struct rte_device *dev);
83 bool dpdk_device_scan_allowed(struct rte_device *dev);
84 
85 #endif /* ifndef SPDK_PCI_DPDK_H */
86