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_ioport_map(struct rte_pci_device *dev, int bar, 41 struct rte_pci_ioport *p); 42 void pci_uio_ioport_read(struct rte_pci_ioport *p, 43 void *data, size_t len, off_t offset); 44 void pci_uio_ioport_write(struct rte_pci_ioport *p, 45 const void *data, size_t len, off_t offset); 46 int pci_uio_ioport_unmap(struct rte_pci_ioport *p); 47 48 #ifdef VFIO_PRESENT 49 50 #ifdef PCI_MSIX_TABLE_BIR 51 #define RTE_PCI_MSIX_TABLE_BIR PCI_MSIX_TABLE_BIR 52 #else 53 #define RTE_PCI_MSIX_TABLE_BIR 0x7 54 #endif 55 56 #ifdef PCI_MSIX_TABLE_OFFSET 57 #define RTE_PCI_MSIX_TABLE_OFFSET PCI_MSIX_TABLE_OFFSET 58 #else 59 #define RTE_PCI_MSIX_TABLE_OFFSET 0xfffffff8 60 #endif 61 62 #ifdef PCI_MSIX_FLAGS_QSIZE 63 #define RTE_PCI_MSIX_FLAGS_QSIZE PCI_MSIX_FLAGS_QSIZE 64 #else 65 #define RTE_PCI_MSIX_FLAGS_QSIZE 0x07ff 66 #endif 67 68 /* access config space */ 69 int pci_vfio_read_config(const struct rte_intr_handle *intr_handle, 70 void *buf, size_t len, off_t offs); 71 int pci_vfio_write_config(const struct rte_intr_handle *intr_handle, 72 const void *buf, size_t len, off_t offs); 73 74 int pci_vfio_ioport_map(struct rte_pci_device *dev, int bar, 75 struct rte_pci_ioport *p); 76 void pci_vfio_ioport_read(struct rte_pci_ioport *p, 77 void *data, size_t len, off_t offset); 78 void pci_vfio_ioport_write(struct rte_pci_ioport *p, 79 const void *data, size_t len, off_t offset); 80 int pci_vfio_ioport_unmap(struct rte_pci_ioport *p); 81 82 /* map/unmap VFIO resource prototype */ 83 int pci_vfio_map_resource(struct rte_pci_device *dev); 84 int pci_vfio_unmap_resource(struct rte_pci_device *dev); 85 86 int pci_vfio_is_enabled(void); 87 88 #endif 89 90 #endif /* EAL_PCI_INIT_H_ */ 91