f-stack/dpdk/drivers/bus/pci/rte_bus_pci.h

201 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_compat.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_ */