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