1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2017 6WIND S.A.
5 #ifndef _PCI_PRIVATE_H_
6 #define _PCI_PRIVATE_H_
11 #include <rte_bus_pci.h>
13 extern struct rte_pci_bus rte_pci_bus;
15 struct rte_pci_driver;
16 struct rte_pci_device;
18 extern struct rte_pci_bus rte_pci_bus;
31 * Scan the content of the PCI bus, and the devices in the devices
35 * 0 on success, negative on error
37 int rte_pci_scan(void);
40 * Find the name of a PCI device.
43 pci_name_set(struct rte_pci_device *dev);
46 * Add a PCI device to the PCI Bus (append to PCI Device list). This function
47 * also updates the bus references of the PCI Device (and the generic device
48 * object embedded within.
54 void rte_pci_add_device(struct rte_pci_device *pci_dev);
57 * Insert a PCI device in the PCI Bus at a particular location in the device
58 * list. It also updates the PCI Bus reference of the new devices to be
61 * @param exist_pci_dev
62 * Existing PCI device in PCI Bus
64 * PCI device to be added before exist_pci_dev
67 void rte_pci_insert_device(struct rte_pci_device *exist_pci_dev,
68 struct rte_pci_device *new_pci_dev);
71 * Update a pci device object by asking the kernel for the latest information.
73 * This function is private to EAL.
76 * The PCI Bus-Device-Function address to look for
79 * - negative on error.
81 int pci_update_device(const struct rte_pci_addr *addr);
84 * Map the PCI resource of a PCI device in virtual memory
86 * This function is private to EAL.
89 * 0 on success, negative on error
91 int pci_uio_map_resource(struct rte_pci_device *dev);
94 * Unmap the PCI resource of a PCI device
96 * This function is private to EAL.
98 void pci_uio_unmap_resource(struct rte_pci_device *dev);
101 * Allocate uio resource for PCI device
103 * This function is private to EAL.
106 * PCI device to allocate uio resource
108 * Pointer to uio resource.
109 * If the function returns 0, the pointer will be filled.
111 * 0 on success, negative on error
113 int pci_uio_alloc_resource(struct rte_pci_device *dev,
114 struct mapped_pci_resource **uio_res);
117 * Free uio resource for PCI device
119 * This function is private to EAL.
122 * PCI device to free uio resource
124 * Pointer to uio resource.
126 void pci_uio_free_resource(struct rte_pci_device *dev,
127 struct mapped_pci_resource *uio_res);
130 * Remap the PCI resource of a PCI device in anonymous virtual memory.
133 * Point to the struct rte pci device.
135 * - On success, zero.
136 * - On failure, a negative value.
139 pci_uio_remap_resource(struct rte_pci_device *dev);
142 * Map device memory to uio resource
144 * This function is private to EAL.
147 * PCI device that has memory information.
149 * Memory resource index of the PCI device.
151 * uio resource that will keep mapping information.
153 * Mapping information index of the uio resource.
155 * 0 on success, negative on error
157 int pci_uio_map_resource_by_index(struct rte_pci_device *dev, int res_idx,
158 struct mapped_pci_resource *uio_res, int map_idx);
161 * Match the PCI Driver and Device using the ID Table
164 * PCI driver from which ID table would be extracted
166 * PCI device to match against the driver
168 * 1 for successful match
169 * 0 for unsuccessful match
172 rte_pci_match(const struct rte_pci_driver *pci_drv,
173 const struct rte_pci_device *pci_dev);
176 * Get iommu class of PCI devices on the bus.
177 * And return their preferred iova mapping mode.
180 * - enum rte_iova_mode.
183 rte_pci_get_iommu_class(void);
186 * Iterate over internal devices,
187 * matching any device against the provided
191 * Iteration starting point.
194 * Device string to match against.
197 * (unused) iterator structure.
200 * A pointer to the next matching device if any.
204 rte_pci_dev_iterate(const void *start,
206 const struct rte_dev_iterator *it);
208 #endif /* _PCI_PRIVATE_H_ */