DPDK has merged changes which hide remove some DPDK object such as rte_device and rte_driver from the public API. So we add copies of the necessary header files into our tree, along with a 22.11-specific pci_dpdk implementation. These files are copied over exactly, except for one #include which needs to change from <> to "" so that it picks up the header in our tree instead of looking for it in system headers. Longer-term we may want to look at ways to automated checking and updating of these header files. DPDK 22.11 isn't officially released yet, so the header files could change, but we want to get this in now since without it SPDK cannot build against DPDK tip at all. Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: I89ffd0abab52c404cfff911c1c9b0cd9e889241d Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14570 Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com>
200 lines
4.7 KiB
C
200 lines
4.7 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause
|
|
* Copyright(c) 2010-2015 Intel Corporation.
|
|
* Copyright 2013-2014 6WIND S.A.
|
|
*/
|
|
|
|
#ifndef _RTE_BUS_PCI_H_
|
|
#define _RTE_BUS_PCI_H_
|
|
|
|
/**
|
|
* @file
|
|
* PCI device & driver interface
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <limits.h>
|
|
#include <errno.h>
|
|
#include <stdint.h>
|
|
#include <inttypes.h>
|
|
|
|
#include <rte_debug.h>
|
|
#include <rte_interrupts.h>
|
|
#include <rte_pci.h>
|
|
|
|
/* Forward declarations */
|
|
struct rte_pci_device;
|
|
struct rte_pci_driver;
|
|
struct rte_pci_ioport;
|
|
|
|
struct rte_devargs;
|
|
|
|
/**
|
|
* Map the PCI device resources in user space virtual memory address
|
|
*
|
|
* Note that driver should not call this function when flag
|
|
* RTE_PCI_DRV_NEED_MAPPING is set, as EAL will do that for
|
|
* you when it's on.
|
|
*
|
|
* @param dev
|
|
* A pointer to a rte_pci_device structure describing the device
|
|
* to use
|
|
*
|
|
* @return
|
|
* 0 on success, negative on error and positive if no driver
|
|
* is found for the device.
|
|
*/
|
|
int rte_pci_map_device(struct rte_pci_device *dev);
|
|
|
|
/**
|
|
* Unmap this device
|
|
*
|
|
* @param dev
|
|
* A pointer to a rte_pci_device structure describing the device
|
|
* to use
|
|
*/
|
|
void rte_pci_unmap_device(struct rte_pci_device *dev);
|
|
|
|
/**
|
|
* Dump the content of the PCI bus.
|
|
*
|
|
* @param f
|
|
* A pointer to a file for output
|
|
*/
|
|
void rte_pci_dump(FILE *f);
|
|
|
|
/**
|
|
* Find device's extended PCI capability.
|
|
*
|
|
* @param dev
|
|
* A pointer to rte_pci_device structure.
|
|
*
|
|
* @param cap
|
|
* Extended capability to be found, which can be any from
|
|
* RTE_PCI_EXT_CAP_ID_*, defined in librte_pci.
|
|
*
|
|
* @return
|
|
* > 0: The offset of the next matching extended capability structure
|
|
* within the device's PCI configuration space.
|
|
* < 0: An error in PCI config space read.
|
|
* = 0: Device does not support it.
|
|
*/
|
|
__rte_experimental
|
|
off_t rte_pci_find_ext_capability(struct rte_pci_device *dev, uint32_t cap);
|
|
|
|
/**
|
|
* Enables/Disables Bus Master for device's PCI command register.
|
|
*
|
|
* @param dev
|
|
* A pointer to rte_pci_device structure.
|
|
* @param enable
|
|
* Enable or disable Bus Master.
|
|
*
|
|
* @return
|
|
* 0 on success, -1 on error in PCI config space read/write.
|
|
*/
|
|
__rte_experimental
|
|
int rte_pci_set_bus_master(struct rte_pci_device *dev, bool enable);
|
|
|
|
/**
|
|
* Read PCI config space.
|
|
*
|
|
* @param device
|
|
* A pointer to a rte_pci_device structure describing the device
|
|
* to use
|
|
* @param buf
|
|
* A data buffer where the bytes should be read into
|
|
* @param len
|
|
* The length of the data buffer.
|
|
* @param offset
|
|
* The offset into PCI config space
|
|
* @return
|
|
* Number of bytes read on success, negative on error.
|
|
*/
|
|
int rte_pci_read_config(const struct rte_pci_device *device,
|
|
void *buf, size_t len, off_t offset);
|
|
|
|
/**
|
|
* Write PCI config space.
|
|
*
|
|
* @param device
|
|
* A pointer to a rte_pci_device structure describing the device
|
|
* to use
|
|
* @param buf
|
|
* A data buffer containing the bytes should be written
|
|
* @param len
|
|
* The length of the data buffer.
|
|
* @param offset
|
|
* The offset into PCI config space
|
|
*/
|
|
int rte_pci_write_config(const struct rte_pci_device *device,
|
|
const void *buf, size_t len, off_t offset);
|
|
|
|
/**
|
|
* Initialize a rte_pci_ioport object for a pci device io resource.
|
|
*
|
|
* This object is then used to gain access to those io resources (see below).
|
|
*
|
|
* @param dev
|
|
* A pointer to a rte_pci_device structure describing the device
|
|
* to use.
|
|
* @param bar
|
|
* Index of the io pci resource we want to access.
|
|
* @param p
|
|
* The rte_pci_ioport object to be initialized.
|
|
* @return
|
|
* 0 on success, negative on error.
|
|
*/
|
|
int rte_pci_ioport_map(struct rte_pci_device *dev, int bar,
|
|
struct rte_pci_ioport *p);
|
|
|
|
/**
|
|
* Release any resources used in a rte_pci_ioport object.
|
|
*
|
|
* @param p
|
|
* The rte_pci_ioport object to be uninitialized.
|
|
* @return
|
|
* 0 on success, negative on error.
|
|
*/
|
|
int rte_pci_ioport_unmap(struct rte_pci_ioport *p);
|
|
|
|
/**
|
|
* Read from a io pci resource.
|
|
*
|
|
* @param p
|
|
* The rte_pci_ioport object from which we want to read.
|
|
* @param data
|
|
* A data buffer where the bytes should be read into
|
|
* @param len
|
|
* The length of the data buffer.
|
|
* @param offset
|
|
* The offset into the pci io resource.
|
|
*/
|
|
void rte_pci_ioport_read(struct rte_pci_ioport *p,
|
|
void *data, size_t len, off_t offset);
|
|
|
|
/**
|
|
* Write to a io pci resource.
|
|
*
|
|
* @param p
|
|
* The rte_pci_ioport object to which we want to write.
|
|
* @param data
|
|
* A data buffer where the bytes should be read into
|
|
* @param len
|
|
* The length of the data buffer.
|
|
* @param offset
|
|
* The offset into the pci io resource.
|
|
*/
|
|
void rte_pci_ioport_write(struct rte_pci_ioport *p,
|
|
const void *data, size_t len, off_t offset);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _RTE_BUS_PCI_H_ */
|