dpdk/drivers/bus/pci/linux/pci_init.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: BSD-3-Clause
   2 * Copyright(c) 2010-2014 Intel Corporation
   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/** IO resource type: */
  13#define IORESOURCE_IO         0x00000100
  14#define IORESOURCE_MEM        0x00000200
  15
  16/*
  17 * Helper function to map PCI resources right after hugepages in virtual memory
  18 */
  19extern void *pci_map_addr;
  20void *pci_find_max_end_va(void);
  21
  22/* parse one line of the "resource" sysfs file (note that the 'line'
  23 * string is modified)
  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/* access config space */
  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/* map/unmap VFIO resource prototype */
  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 /* EAL_PCI_INIT_H_ */
  91