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 struct rte_pci_driver;
14 struct rte_pci_device;
27 * Scan the content of the PCI bus, and the devices in the devices
31 * 0 on success, negative on error
33 int rte_pci_scan(void);
36 * Close the single PCI device.
38 * Scan the content of the PCI bus, and find the pci device specified by pci
39 * address, then call the remove() function for registered driver that has a
40 * matching entry in its id_table for discovered device.
43 * The PCI Bus-Device-Function address to close.
46 * - Negative on error.
48 int rte_pci_detach(const struct rte_pci_addr *addr);
51 * Find the name of a PCI device.
54 pci_name_set(struct rte_pci_device *dev);
57 * Add a PCI device to the PCI Bus (append to PCI Device list). This function
58 * also updates the bus references of the PCI Device (and the generic device
59 * object embedded within.
65 void rte_pci_add_device(struct rte_pci_device *pci_dev);
68 * Insert a PCI device in the PCI Bus at a particular location in the device
69 * list. It also updates the PCI Bus reference of the new devices to be
72 * @param exist_pci_dev
73 * Existing PCI device in PCI Bus
75 * PCI device to be added before exist_pci_dev
78 void rte_pci_insert_device(struct rte_pci_device *exist_pci_dev,
79 struct rte_pci_device *new_pci_dev);
82 * Update a pci device object by asking the kernel for the latest information.
84 * This function is private to EAL.
87 * The PCI Bus-Device-Function address to look for
90 * - negative on error.
92 int pci_update_device(const struct rte_pci_addr *addr);
95 * Map the PCI resource of a PCI device in virtual memory
97 * This function is private to EAL.
100 * 0 on success, negative on error
102 int pci_uio_map_resource(struct rte_pci_device *dev);
105 * Unmap the PCI resource of a PCI device
107 * This function is private to EAL.
109 void pci_uio_unmap_resource(struct rte_pci_device *dev);
112 * Allocate uio resource for PCI device
114 * This function is private to EAL.
117 * PCI device to allocate uio resource
119 * Pointer to uio resource.
120 * If the function returns 0, the pointer will be filled.
122 * 0 on success, negative on error
124 int pci_uio_alloc_resource(struct rte_pci_device *dev,
125 struct mapped_pci_resource **uio_res);
128 * Free uio resource for PCI device
130 * This function is private to EAL.
133 * PCI device to free uio resource
135 * Pointer to uio resource.
137 void pci_uio_free_resource(struct rte_pci_device *dev,
138 struct mapped_pci_resource *uio_res);
141 * Map device memory to uio resource
143 * This function is private to EAL.
146 * PCI device that has memory information.
148 * Memory resource index of the PCI device.
150 * uio resource that will keep mapping information.
152 * Mapping information index of the uio resource.
154 * 0 on success, negative on error
156 int pci_uio_map_resource_by_index(struct rte_pci_device *dev, int res_idx,
157 struct mapped_pci_resource *uio_res, int map_idx);
160 * Match the PCI Driver and Device using the ID Table
163 * PCI driver from which ID table would be extracted
165 * PCI device to match against the driver
167 * 1 for successful match
168 * 0 for unsuccessful match
171 rte_pci_match(const struct rte_pci_driver *pci_drv,
172 const struct rte_pci_device *pci_dev);
175 * Get iommu class of PCI devices on the bus.
176 * And return their preferred iova mapping mode.
179 * - enum rte_iova_mode.
182 rte_pci_get_iommu_class(void);
184 #endif /* _PCI_PRIVATE_H_ */