xref: /dpdk/drivers/bus/pci/linux/pci_init.h (revision 7bb1168d984aaa7e204c52d13c4701eac0f82989)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2010-2014 Intel Corporation
3  */
4 
5 #ifndef EAL_PCI_INIT_H_
6 #define EAL_PCI_INIT_H_
7 
8 #include <rte_vfio.h>
9 
10 #include "private.h"
11 
12 /** IO resource type: */
13 #define IORESOURCE_IO         0x00000100
14 #define IORESOURCE_MEM        0x00000200
15 
16 /*
17  * Helper function to map PCI resources right after hugepages in virtual memory
18  */
19 extern void *pci_map_addr;
20 void *pci_find_max_end_va(void);
21 
22 /* parse one line of the "resource" sysfs file (note that the 'line'
23  * string is modified)
24  */
25 int pci_parse_one_sysfs_resource(char *line, size_t len, uint64_t *phys_addr,
26 	uint64_t *end_addr, uint64_t *flags);
27 
28 int pci_uio_alloc_resource(struct rte_pci_device *dev,
29 		struct mapped_pci_resource **uio_res);
30 void pci_uio_free_resource(struct rte_pci_device *dev,
31 		struct mapped_pci_resource *uio_res);
32 int pci_uio_map_resource_by_index(struct rte_pci_device *dev, int res_idx,
33 		struct mapped_pci_resource *uio_res, int map_idx);
34 
35 int pci_uio_read_config(const struct rte_intr_handle *intr_handle,
36 			void *buf, size_t len, off_t offs);
37 int pci_uio_write_config(const struct rte_intr_handle *intr_handle,
38 			 const void *buf, size_t len, off_t offs);
39 
40 int pci_uio_mmio_read(const struct rte_pci_device *dev, int bar,
41 			void *buf, size_t len, off_t offset);
42 int pci_uio_mmio_write(const struct rte_pci_device *dev, int bar,
43 			const void *buf, size_t len, off_t offset);
44 
45 int pci_uio_ioport_map(struct rte_pci_device *dev, int bar,
46 		       struct rte_pci_ioport *p);
47 void pci_uio_ioport_read(struct rte_pci_ioport *p,
48 			 void *data, size_t len, off_t offset);
49 void pci_uio_ioport_write(struct rte_pci_ioport *p,
50 			  const void *data, size_t len, off_t offset);
51 int pci_uio_ioport_unmap(struct rte_pci_ioport *p);
52 
53 #ifdef VFIO_PRESENT
54 
55 /* access config space */
56 int pci_vfio_read_config(const struct rte_pci_device *dev,
57 			 void *buf, size_t len, off_t offs);
58 int pci_vfio_write_config(const struct rte_pci_device *dev,
59 			  const void *buf, size_t len, off_t offs);
60 
61 int pci_vfio_mmio_read(const struct rte_pci_device *dev, int bar,
62 			void *buf, size_t len, off_t offset);
63 int pci_vfio_mmio_write(const struct rte_pci_device *dev, int bar,
64 			const void *buf, size_t len, off_t offset);
65 
66 int pci_vfio_ioport_map(struct rte_pci_device *dev, int bar,
67 		        struct rte_pci_ioport *p);
68 void pci_vfio_ioport_read(struct rte_pci_ioport *p,
69 			  void *data, size_t len, off_t offset);
70 void pci_vfio_ioport_write(struct rte_pci_ioport *p,
71 			   const void *data, size_t len, off_t offset);
72 int pci_vfio_ioport_unmap(struct rte_pci_ioport *p);
73 
74 /* map/unmap VFIO resource prototype */
75 int pci_vfio_map_resource(struct rte_pci_device *dev);
76 int pci_vfio_unmap_resource(struct rte_pci_device *dev);
77 
78 int pci_vfio_is_enabled(void);
79 
80 #endif
81 
82 #endif /* EAL_PCI_INIT_H_ */
83