1
2
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
13#define IORESOURCE_IO 0x00000100
14#define IORESOURCE_MEM 0x00000200
15
16
17
18
19extern void *pci_map_addr;
20void *pci_find_max_end_va(void);
21
22
23
24
25int pci_parse_one_sysfs_resource(char *line, size_t len, uint64_t *phys_addr,
26 uint64_t *end_addr, uint64_t *flags);
27
28int pci_uio_alloc_resource(struct rte_pci_device *dev,
29 struct mapped_pci_resource **uio_res);
30void pci_uio_free_resource(struct rte_pci_device *dev,
31 struct mapped_pci_resource *uio_res);
32int 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
35int pci_uio_read_config(const struct rte_intr_handle *intr_handle,
36 void *buf, size_t len, off_t offs);
37int pci_uio_write_config(const struct rte_intr_handle *intr_handle,
38 const void *buf, size_t len, off_t offs);
39
40int pci_uio_ioport_map(struct rte_pci_device *dev, int bar,
41 struct rte_pci_ioport *p);
42void pci_uio_ioport_read(struct rte_pci_ioport *p,
43 void *data, size_t len, off_t offset);
44void pci_uio_ioport_write(struct rte_pci_ioport *p,
45 const void *data, size_t len, off_t offset);
46int 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
69int pci_vfio_read_config(const struct rte_intr_handle *intr_handle,
70 void *buf, size_t len, off_t offs);
71int pci_vfio_write_config(const struct rte_intr_handle *intr_handle,
72 const void *buf, size_t len, off_t offs);
73
74int pci_vfio_ioport_map(struct rte_pci_device *dev, int bar,
75 struct rte_pci_ioport *p);
76void pci_vfio_ioport_read(struct rte_pci_ioport *p,
77 void *data, size_t len, off_t offset);
78void pci_vfio_ioport_write(struct rte_pci_ioport *p,
79 const void *data, size_t len, off_t offset);
80int pci_vfio_ioport_unmap(struct rte_pci_ioport *p);
81
82
83int pci_vfio_map_resource(struct rte_pci_device *dev);
84int pci_vfio_unmap_resource(struct rte_pci_device *dev);
85
86int pci_vfio_is_enabled(void);
87
88#endif
89
90#endif
91