xref: /spdk/lib/env_dpdk/pci_dpdk.h (revision 45a053c5777494f4e8ce4bc1191c9de3920377f7)
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 	void (*bus_scan)(void);
46 	int (*bus_probe)(void);
47 	struct rte_devargs *(*device_get_devargs)(struct rte_device *dev);
48 	void (*device_set_devargs)(struct rte_device *dev, struct rte_devargs *devargs);
49 	const char *(*device_get_name)(struct rte_device *dev);
50 	bool (*device_scan_allowed)(struct rte_device *dev);
51 };
52 
53 int dpdk_pci_init(void);
54 
55 struct rte_mem_resource *dpdk_pci_device_get_mem_resource(struct rte_pci_device *dev, uint32_t bar);
56 uint64_t dpdk_pci_device_vtophys(struct rte_pci_device *dev, uint64_t vaddr, size_t len);
57 const char *dpdk_pci_device_get_name(struct rte_pci_device *);
58 struct rte_devargs *dpdk_pci_device_get_devargs(struct rte_pci_device *);
59 struct rte_pci_addr *dpdk_pci_device_get_addr(struct rte_pci_device *);
60 struct rte_pci_id *dpdk_pci_device_get_id(struct rte_pci_device *);
61 int dpdk_pci_device_get_numa_node(struct rte_pci_device *_dev);
62 int dpdk_pci_device_read_config(struct rte_pci_device *dev, void *value, uint32_t len,
63 				uint32_t offset);
64 int dpdk_pci_device_write_config(struct rte_pci_device *dev, void *value, uint32_t len,
65 				 uint32_t offset);
66 int dpdk_pci_driver_register(struct spdk_pci_driver *driver,
67 			     int (*probe_fn)(struct rte_pci_driver *driver, struct rte_pci_device *device),
68 			     int (*remove_fn)(struct rte_pci_device *device));
69 int dpdk_pci_device_enable_interrupt(struct rte_pci_device *rte_dev);
70 int dpdk_pci_device_disable_interrupt(struct rte_pci_device *rte_dev);
71 int dpdk_pci_device_get_interrupt_efd(struct rte_pci_device *rte_dev);
72 void dpdk_bus_scan(void);
73 int dpdk_bus_probe(void);
74 struct rte_devargs *dpdk_device_get_devargs(struct rte_device *dev);
75 void dpdk_device_set_devargs(struct rte_device *dev, struct rte_devargs *devargs);
76 const char *dpdk_device_get_name(struct rte_device *dev);
77 bool dpdk_device_scan_allowed(struct rte_device *dev);
78 
79 #endif /* ifndef SPDK_PCI_DPDK_H */
80