us extending existing enum/define.
One solution can be using a fixed size array instead of ``.*MAX.*`` value.
-* pci: The PCI resources map API (``pci_map_resource`` and
- ``pci_unmap_resource``) was not abstracting the Unix mmap flags (see the
- workaround for Windows support implemented in the commit
- 9d2b24593724 ("pci: keep API compatibility with mmap values")).
- This API will be removed from the public API in 20.11 and moved to the PCI
- bus driver along with the PCI resources lists and associated structures
- (``pci_map``, ``pci_msix_table``, ``mapped_pci_resource`` and
- ``mapped_pci_res_list``).
- With this removal, there won't be a need for the mentioned workaround which
- will be reverted.
-
* mbuf: Some fields will be converted to dynamic API in DPDK 20.11
in order to reserve more space for the dynamic fields, as explained in
`this presentation <https://www.youtube.com/watch?v=Ttl6MlhmzWY>`_.
* pci: Removed the ``rte_kernel_driver`` enum defined in rte_dev.h and
replaced with a private enum in the PCI subsystem.
+* pci: Removed the PCI resources map API from the public API
+ (``pci_map_resource`` and ``pci_unmap_resource``) and moved it to the
+ PCI bus driver along with the PCI resources lists and associated structures
+ (``pci_map``, ``pci_msix_table``, ``mapped_pci_resource`` and
+ ``mapped_pci_res_list``).
+
* ethdev: Removed the ``kdrv`` field in the ethdev ``rte_eth_dev_data``
structure as it gave no useful abstracted information to the applications.
#include <rte_vfio.h>
+#include "private.h"
+
/** IO resource type: */
#define IORESOURCE_IO 0x00000100
#define IORESOURCE_MEM 0x00000200
#include "eal_filesystem.h"
#include "pci_init.h"
+#include "private.h"
void *pci_map_addr = NULL;
#include <rte_per_lcore.h>
#include <rte_memory.h>
#include <rte_eal.h>
+#include <rte_eal_paging.h>
#include <rte_string_fns.h>
#include <rte_common.h>
#include <rte_devargs.h>
dev->device.name = dev->name;
}
+/* map a particular resource from a file */
+void *
+pci_map_resource(void *requested_addr, int fd, off_t offset, size_t size,
+ int additional_flags)
+{
+ void *mapaddr;
+
+ /* Map the PCI memory resource of device */
+ mapaddr = rte_mem_map(requested_addr, size,
+ RTE_PROT_READ | RTE_PROT_WRITE,
+ RTE_MAP_SHARED | additional_flags, fd, offset);
+ if (mapaddr == NULL) {
+ RTE_LOG(ERR, EAL,
+ "%s(): cannot map resource(%d, %p, 0x%zx, 0x%llx): %s (%p)\n",
+ __func__, fd, requested_addr, size,
+ (unsigned long long)offset,
+ rte_strerror(rte_errno), mapaddr);
+ mapaddr = MAP_FAILED; /* API uses mmap error code */
+ } else
+ RTE_LOG(DEBUG, EAL, " PCI memory mapped at %p\n", mapaddr);
+
+ return mapaddr;
+}
+
+/* unmap a particular resource */
+void
+pci_unmap_resource(void *requested_addr, size_t size)
+{
+ if (requested_addr == NULL)
+ return;
+
+ /* Unmap the PCI memory resource of device */
+ if (rte_mem_unmap(requested_addr, size)) {
+ RTE_LOG(ERR, EAL, "%s(): cannot mem unmap(%p, %#zx): %s\n",
+ __func__, requested_addr, size,
+ rte_strerror(rte_errno));
+ } else
+ RTE_LOG(DEBUG, EAL, " PCI memory unmapped at %p\n",
+ requested_addr);
+}
/*
* Match the PCI Driver and Device using the ID Table
*/
*/
int pci_update_device(const struct rte_pci_addr *addr);
+/**
+ * A structure describing a PCI mapping.
+ */
+struct pci_map {
+ void *addr;
+ char *path;
+ uint64_t offset;
+ uint64_t size;
+ uint64_t phaddr;
+};
+
+struct pci_msix_table {
+ int bar_index;
+ uint32_t offset;
+ uint32_t size;
+};
+
+/**
+ * A structure describing a mapped PCI resource.
+ * For multi-process we need to reproduce all PCI mappings in secondary
+ * processes, so save them in a tailq.
+ */
+struct mapped_pci_resource {
+ TAILQ_ENTRY(mapped_pci_resource) next;
+
+ struct rte_pci_addr pci_addr;
+ char path[PATH_MAX];
+ int nb_maps;
+ struct pci_map maps[PCI_MAX_RESOURCE];
+ struct pci_msix_table msix_table;
+};
+
+/** mapped pci device list */
+TAILQ_HEAD(mapped_pci_res_list, mapped_pci_resource);
+
+/**
+ * Map a particular resource from a file.
+ *
+ * @param requested_addr
+ * The starting address for the new mapping range.
+ * @param fd
+ * The file descriptor.
+ * @param offset
+ * The offset for the mapping range.
+ * @param size
+ * The size for the mapping range.
+ * @param additional_flags
+ * The additional rte_mem_map() flags for the mapping range.
+ * @return
+ * - On success, the function returns a pointer to the mapped area.
+ * - On error, MAP_FAILED is returned.
+ */
+void *pci_map_resource(void *requested_addr, int fd, off_t offset,
+ size_t size, int additional_flags);
+
+/**
+ * Unmap a particular resource.
+ *
+ * @param requested_addr
+ * The address for the unmapping range.
+ * @param size
+ * The size for the unmapping range.
+ */
+void pci_unmap_resource(void *requested_addr, size_t size);
+
/**
* Map the PCI resource of a PCI device in virtual memory
*
return 0;
return -1;
}
-
-
-/* map a particular resource from a file */
-void *
-pci_map_resource(void *requested_addr, int fd, off_t offset, size_t size,
- int additional_flags)
-{
- void *mapaddr;
-
- /* Map the PCI memory resource of device */
- mapaddr = rte_mem_map(requested_addr, size,
- RTE_PROT_READ | RTE_PROT_WRITE,
- RTE_MAP_SHARED | additional_flags, fd, offset);
- if (mapaddr == NULL) {
- RTE_LOG(ERR, EAL,
- "%s(): cannot map resource(%d, %p, 0x%zx, 0x%llx): %s (%p)\n",
- __func__, fd, requested_addr, size,
- (unsigned long long)offset,
- rte_strerror(rte_errno), mapaddr);
- mapaddr = MAP_FAILED; /* API uses mmap error code */
- } else
- RTE_LOG(DEBUG, EAL, " PCI memory mapped at %p\n", mapaddr);
-
- return mapaddr;
-}
-
-/* unmap a particular resource */
-void
-pci_unmap_resource(void *requested_addr, size_t size)
-{
- if (requested_addr == NULL)
- return;
-
- /* Unmap the PCI memory resource of device */
- if (rte_mem_unmap(requested_addr, size)) {
- RTE_LOG(ERR, EAL, "%s(): cannot mem unmap(%p, %#zx): %s\n",
- __func__, requested_addr, size,
- rte_strerror(rte_errno));
- } else
- RTE_LOG(DEBUG, EAL, " PCI memory unmapped at %p\n",
- requested_addr);
-}
#define PCI_ANY_ID (0xffff)
#define RTE_CLASS_ANY_ID (0xffffff)
-/**
- * A structure describing a PCI mapping.
- */
-struct pci_map {
- void *addr;
- char *path;
- uint64_t offset;
- uint64_t size;
- uint64_t phaddr;
-};
-
-struct pci_msix_table {
- int bar_index;
- uint32_t offset;
- uint32_t size;
-};
-
-/**
- * A structure describing a mapped PCI resource.
- * For multi-process we need to reproduce all PCI mappings in secondary
- * processes, so save them in a tailq.
- */
-struct mapped_pci_resource {
- TAILQ_ENTRY(mapped_pci_resource) next;
-
- struct rte_pci_addr pci_addr;
- char path[PATH_MAX];
- int nb_maps;
- struct pci_map maps[PCI_MAX_RESOURCE];
- struct pci_msix_table msix_table;
-};
-
-
-/** mapped pci device list */
-TAILQ_HEAD(mapped_pci_res_list, mapped_pci_resource);
-
/**
* Utility function to write a pci device name, this device name can later be
* used to retrieve the corresponding rte_pci_addr using eal_parse_pci_*
*/
int rte_pci_addr_parse(const char *str, struct rte_pci_addr *addr);
-/**
- * Map a particular resource from a file.
- *
- * @param requested_addr
- * The starting address for the new mapping range.
- * @param fd
- * The file descriptor.
- * @param offset
- * The offset for the mapping range.
- * @param size
- * The size for the mapping range.
- * @param additional_flags
- * The additional flags for the mapping range.
- * @return
- * - On success, the function returns a pointer to the mapped area.
- * - On error, MAP_FAILED is returned.
- */
-void *pci_map_resource(void *requested_addr, int fd, off_t offset,
- size_t size, int additional_flags);
-
-/**
- * Unmap a particular resource.
- *
- * @param requested_addr
- * The address for the unmapping range.
- * @param size
- * The size for the unmapping range.
- */
-void pci_unmap_resource(void *requested_addr, size_t size);
-
#ifdef __cplusplus
}
#endif
DPDK_21 {
global:
- pci_map_resource;
- pci_unmap_resource;
rte_pci_addr_cmp;
rte_pci_addr_parse;
rte_pci_device_name;