bus/pci: use SPDX tags in 6WIND copyrighted files
[dpdk.git] / drivers / bus / pci / private.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2017 6WIND S.A.
3  */
4
5 #ifndef _PCI_PRIVATE_H_
6 #define _PCI_PRIVATE_H_
7
8 #include <stdbool.h>
9 #include <stdio.h>
10 #include <rte_pci.h>
11 #include <rte_bus_pci.h>
12
13 struct rte_pci_driver;
14 struct rte_pci_device;
15
16 /**
17  * Probe the PCI bus
18  *
19  * @return
20  *   - 0 on success.
21  *   - !0 on error.
22  */
23 int
24 rte_pci_probe(void);
25
26 /**
27  * Scan the content of the PCI bus, and the devices in the devices
28  * list
29  *
30  * @return
31  *  0 on success, negative on error
32  */
33 int rte_pci_scan(void);
34
35 /**
36  * Probe the single PCI device.
37  *
38  * Scan the content of the PCI bus, and find the pci device specified by pci
39  * address, then call the probe() function for registered driver that has a
40  * matching entry in its id_table for discovered device.
41  *
42  * @param addr
43  *      The PCI Bus-Device-Function address to probe.
44  * @return
45  *   - 0 on success.
46  *   - Negative on error.
47  */
48 int rte_pci_probe_one(const struct rte_pci_addr *addr);
49
50 /**
51  * Close the single PCI device.
52  *
53  * Scan the content of the PCI bus, and find the pci device specified by pci
54  * address, then call the remove() function for registered driver that has a
55  * matching entry in its id_table for discovered device.
56  *
57  * @param addr
58  *      The PCI Bus-Device-Function address to close.
59  * @return
60  *   - 0 on success.
61  *   - Negative on error.
62  */
63 int rte_pci_detach(const struct rte_pci_addr *addr);
64
65 /**
66  * Find the name of a PCI device.
67  */
68 void
69 pci_name_set(struct rte_pci_device *dev);
70
71 /**
72  * Add a PCI device to the PCI Bus (append to PCI Device list). This function
73  * also updates the bus references of the PCI Device (and the generic device
74  * object embedded within.
75  *
76  * @param pci_dev
77  *      PCI device to add
78  * @return void
79  */
80 void rte_pci_add_device(struct rte_pci_device *pci_dev);
81
82 /**
83  * Insert a PCI device in the PCI Bus at a particular location in the device
84  * list. It also updates the PCI Bus reference of the new devices to be
85  * inserted.
86  *
87  * @param exist_pci_dev
88  *      Existing PCI device in PCI Bus
89  * @param new_pci_dev
90  *      PCI device to be added before exist_pci_dev
91  * @return void
92  */
93 void rte_pci_insert_device(struct rte_pci_device *exist_pci_dev,
94                 struct rte_pci_device *new_pci_dev);
95
96 /**
97  * Remove a PCI device from the PCI Bus. This sets to NULL the bus references
98  * in the PCI device object as well as the generic device object.
99  *
100  * @param pci_device
101  *      PCI device to be removed from PCI Bus
102  * @return void
103  */
104 void rte_pci_remove_device(struct rte_pci_device *pci_device);
105
106 /**
107  * Update a pci device object by asking the kernel for the latest information.
108  *
109  * This function is private to EAL.
110  *
111  * @param addr
112  *      The PCI Bus-Device-Function address to look for
113  * @return
114  *   - 0 on success.
115  *   - negative on error.
116  */
117 int pci_update_device(const struct rte_pci_addr *addr);
118
119 /**
120  * Unbind kernel driver for this device
121  *
122  * This function is private to EAL.
123  *
124  * @return
125  *   0 on success, negative on error
126  */
127 int pci_unbind_kernel_driver(struct rte_pci_device *dev);
128
129 /**
130  * Map the PCI resource of a PCI device in virtual memory
131  *
132  * This function is private to EAL.
133  *
134  * @return
135  *   0 on success, negative on error
136  */
137 int pci_uio_map_resource(struct rte_pci_device *dev);
138
139 /**
140  * Unmap the PCI resource of a PCI device
141  *
142  * This function is private to EAL.
143  */
144 void pci_uio_unmap_resource(struct rte_pci_device *dev);
145
146 /**
147  * Allocate uio resource for PCI device
148  *
149  * This function is private to EAL.
150  *
151  * @param dev
152  *   PCI device to allocate uio resource
153  * @param uio_res
154  *   Pointer to uio resource.
155  *   If the function returns 0, the pointer will be filled.
156  * @return
157  *   0 on success, negative on error
158  */
159 int pci_uio_alloc_resource(struct rte_pci_device *dev,
160                 struct mapped_pci_resource **uio_res);
161
162 /**
163  * Free uio resource for PCI device
164  *
165  * This function is private to EAL.
166  *
167  * @param dev
168  *   PCI device to free uio resource
169  * @param uio_res
170  *   Pointer to uio resource.
171  */
172 void pci_uio_free_resource(struct rte_pci_device *dev,
173                 struct mapped_pci_resource *uio_res);
174
175 /**
176  * Map device memory to uio resource
177  *
178  * This function is private to EAL.
179  *
180  * @param dev
181  *   PCI device that has memory information.
182  * @param res_idx
183  *   Memory resource index of the PCI device.
184  * @param uio_res
185  *  uio resource that will keep mapping information.
186  * @param map_idx
187  *   Mapping information index of the uio resource.
188  * @return
189  *   0 on success, negative on error
190  */
191 int pci_uio_map_resource_by_index(struct rte_pci_device *dev, int res_idx,
192                 struct mapped_pci_resource *uio_res, int map_idx);
193
194 /*
195  * Match the PCI Driver and Device using the ID Table
196  *
197  * @param pci_drv
198  *      PCI driver from which ID table would be extracted
199  * @param pci_dev
200  *      PCI device to match against the driver
201  * @return
202  *      1 for successful match
203  *      0 for unsuccessful match
204  */
205 int
206 rte_pci_match(const struct rte_pci_driver *pci_drv,
207               const struct rte_pci_device *pci_dev);
208
209 /**
210  * Get iommu class of PCI devices on the bus.
211  * And return their preferred iova mapping mode.
212  *
213  * @return
214  *   - enum rte_iova_mode.
215  */
216 enum rte_iova_mode
217 rte_pci_get_iommu_class(void);
218
219 #endif /* _PCI_PRIVATE_H_ */