e1ece60956
As reported during 20.08 work for Windows, the pci_map_resource API was
built with the assumption that its flags would be passed to mmap().
This introduced a regression when adding the rte_mem_map API as reported
in the workaround commit 9d2b245937
("pci: keep API compatibility with
mmap values").
This API was only used in the PCI bus code, so move it there.
There is no code change happening during the move.
The only change is in the pci_map_resource description where the
additional flags are now documented as rte_mem_map API flags:
- * The additional flags for the mapping range.
+ * The additional rte_mem_map() flags for the mapping range.
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Andrew Rybchenko <arybchenko@solarflare.com>
Acked-by: Ray Kinsella <mdr@ashroe.eu>
117 lines
3.0 KiB
C
117 lines
3.0 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause
|
|
* Copyright(c) 2010-2015 Intel Corporation.
|
|
* Copyright 2013-2014 6WIND S.A.
|
|
*/
|
|
|
|
#ifndef _RTE_PCI_H_
|
|
#define _RTE_PCI_H_
|
|
|
|
/**
|
|
* @file
|
|
*
|
|
* RTE PCI Library
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <stdio.h>
|
|
#include <limits.h>
|
|
#include <sys/queue.h>
|
|
#include <inttypes.h>
|
|
#include <sys/types.h>
|
|
|
|
/** Formatting string for PCI device identifier: Ex: 0000:00:01.0 */
|
|
#define PCI_PRI_FMT "%.4" PRIx32 ":%.2" PRIx8 ":%.2" PRIx8 ".%" PRIx8
|
|
#define PCI_PRI_STR_SIZE sizeof("XXXXXXXX:XX:XX.X")
|
|
|
|
/** Short formatting string, without domain, for PCI device: Ex: 00:01.0 */
|
|
#define PCI_SHORT_PRI_FMT "%.2" PRIx8 ":%.2" PRIx8 ".%" PRIx8
|
|
|
|
/** Nb. of values in PCI device identifier format string. */
|
|
#define PCI_FMT_NVAL 4
|
|
|
|
/** Nb. of values in PCI resource format. */
|
|
#define PCI_RESOURCE_FMT_NVAL 3
|
|
|
|
/** Maximum number of PCI resources. */
|
|
#define PCI_MAX_RESOURCE 6
|
|
|
|
/**
|
|
* A structure describing an ID for a PCI driver. Each driver provides a
|
|
* table of these IDs for each device that it supports.
|
|
*/
|
|
struct rte_pci_id {
|
|
uint32_t class_id; /**< Class ID or RTE_CLASS_ANY_ID. */
|
|
uint16_t vendor_id; /**< Vendor ID or PCI_ANY_ID. */
|
|
uint16_t device_id; /**< Device ID or PCI_ANY_ID. */
|
|
uint16_t subsystem_vendor_id; /**< Subsystem vendor ID or PCI_ANY_ID. */
|
|
uint16_t subsystem_device_id; /**< Subsystem device ID or PCI_ANY_ID. */
|
|
};
|
|
|
|
/**
|
|
* A structure describing the location of a PCI device.
|
|
*/
|
|
struct rte_pci_addr {
|
|
uint32_t domain; /**< Device domain */
|
|
uint8_t bus; /**< Device bus */
|
|
uint8_t devid; /**< Device ID */
|
|
uint8_t function; /**< Device function. */
|
|
};
|
|
|
|
/** Any PCI device identifier (vendor, device, ...) */
|
|
#define PCI_ANY_ID (0xffff)
|
|
#define RTE_CLASS_ANY_ID (0xffffff)
|
|
|
|
/**
|
|
* 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_*
|
|
* BDF helpers.
|
|
*
|
|
* @param addr
|
|
* The PCI Bus-Device-Function address
|
|
* @param output
|
|
* The output buffer string
|
|
* @param size
|
|
* The output buffer size
|
|
*/
|
|
void rte_pci_device_name(const struct rte_pci_addr *addr,
|
|
char *output, size_t size);
|
|
|
|
/**
|
|
* Utility function to compare two PCI device addresses.
|
|
*
|
|
* @param addr
|
|
* The PCI Bus-Device-Function address to compare
|
|
* @param addr2
|
|
* The PCI Bus-Device-Function address to compare
|
|
* @return
|
|
* 0 on equal PCI address.
|
|
* Positive on addr is greater than addr2.
|
|
* Negative on addr is less than addr2, or error.
|
|
*/
|
|
int rte_pci_addr_cmp(const struct rte_pci_addr *addr,
|
|
const struct rte_pci_addr *addr2);
|
|
|
|
|
|
/**
|
|
* Utility function to parse a string into a PCI location.
|
|
*
|
|
* @param str
|
|
* The string to parse
|
|
* @param addr
|
|
* The reference to the structure where the location
|
|
* is stored.
|
|
* @return
|
|
* 0 on success
|
|
* <0 otherwise
|
|
*/
|
|
int rte_pci_addr_parse(const char *str, struct rte_pci_addr *addr);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _RTE_PCI_H_ */
|