common/mlx5: share PCI device detection
Move PCI detection by IB device from mlx5 PMD to the common code. Signed-off-by: Matan Azrad <matan@mellanox.com> Acked-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
This commit is contained in:
parent
7b4f1e6bd3
commit
93e3098296
@ -41,7 +41,7 @@ else
|
||||
LDLIBS += -libverbs -lmlx5
|
||||
endif
|
||||
|
||||
LDLIBS += -lrte_eal
|
||||
LDLIBS += -lrte_eal -lrte_pci
|
||||
|
||||
# A few warnings cannot be avoided in external headers.
|
||||
CFLAGS += -Wno-error=cast-qual -DNDEBUG -UPEDANTIC
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include <dlfcn.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <rte_errno.h>
|
||||
|
||||
@ -16,6 +17,58 @@
|
||||
int mlx5_common_logtype;
|
||||
|
||||
|
||||
/**
|
||||
* Get PCI information by sysfs device path.
|
||||
*
|
||||
* @param dev_path
|
||||
* Pointer to device sysfs folder name.
|
||||
* @param[out] pci_addr
|
||||
* PCI bus address output buffer.
|
||||
*
|
||||
* @return
|
||||
* 0 on success, a negative errno value otherwise and rte_errno is set.
|
||||
*/
|
||||
int
|
||||
mlx5_dev_to_pci_addr(const char *dev_path,
|
||||
struct rte_pci_addr *pci_addr)
|
||||
{
|
||||
FILE *file;
|
||||
char line[32];
|
||||
MKSTR(path, "%s/device/uevent", dev_path);
|
||||
|
||||
file = fopen(path, "rb");
|
||||
if (file == NULL) {
|
||||
rte_errno = errno;
|
||||
return -rte_errno;
|
||||
}
|
||||
while (fgets(line, sizeof(line), file) == line) {
|
||||
size_t len = strlen(line);
|
||||
int ret;
|
||||
|
||||
/* Truncate long lines. */
|
||||
if (len == (sizeof(line) - 1))
|
||||
while (line[(len - 1)] != '\n') {
|
||||
ret = fgetc(file);
|
||||
if (ret == EOF)
|
||||
break;
|
||||
line[(len - 1)] = ret;
|
||||
}
|
||||
/* Extract information. */
|
||||
if (sscanf(line,
|
||||
"PCI_SLOT_NAME="
|
||||
"%" SCNx32 ":%" SCNx8 ":%" SCNx8 ".%" SCNx8 "\n",
|
||||
&pci_addr->domain,
|
||||
&pci_addr->bus,
|
||||
&pci_addr->devid,
|
||||
&pci_addr->function) == 4) {
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
fclose(file);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef RTE_IBVERBS_LINK_DLOPEN
|
||||
|
||||
/**
|
||||
|
@ -6,7 +6,9 @@
|
||||
#define RTE_PMD_MLX5_COMMON_H_
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <rte_pci.h>
|
||||
#include <rte_log.h>
|
||||
|
||||
|
||||
@ -84,4 +86,6 @@ pmd_drv_log_basename(const char *s)
|
||||
\
|
||||
snprintf(name, sizeof(name), "" __VA_ARGS__)
|
||||
|
||||
int mlx5_dev_to_pci_addr(const char *dev_path, struct rte_pci_addr *pci_addr);
|
||||
|
||||
#endif /* RTE_PMD_MLX5_COMMON_H_ */
|
||||
|
@ -17,4 +17,6 @@ DPDK_20.02 {
|
||||
mlx5_devx_cmd_qp_query_tis_td;
|
||||
mlx5_devx_cmd_query_hca_attr;
|
||||
mlx5_devx_get_out_command_status;
|
||||
|
||||
mlx5_dev_to_pci_addr;
|
||||
};
|
||||
|
@ -39,6 +39,7 @@
|
||||
|
||||
#include <mlx5_glue.h>
|
||||
#include <mlx5_devx_cmds.h>
|
||||
#include <mlx5_common.h>
|
||||
|
||||
#include "mlx5_defs.h"
|
||||
#include "mlx5.h"
|
||||
|
@ -655,8 +655,6 @@ int mlx5_dev_get_flow_ctrl(struct rte_eth_dev *dev,
|
||||
struct rte_eth_fc_conf *fc_conf);
|
||||
int mlx5_dev_set_flow_ctrl(struct rte_eth_dev *dev,
|
||||
struct rte_eth_fc_conf *fc_conf);
|
||||
int mlx5_dev_to_pci_addr(const char *dev_path,
|
||||
struct rte_pci_addr *pci_addr);
|
||||
void mlx5_dev_link_status_handler(void *arg);
|
||||
void mlx5_dev_interrupt_handler(void *arg);
|
||||
void mlx5_dev_interrupt_handler_devx(void *arg);
|
||||
|
@ -38,6 +38,7 @@
|
||||
|
||||
#include <mlx5_glue.h>
|
||||
#include <mlx5_devx_cmds.h>
|
||||
#include <mlx5_common.h>
|
||||
|
||||
#include "mlx5.h"
|
||||
#include "mlx5_rxtx.h"
|
||||
@ -1211,58 +1212,6 @@ mlx5_dev_set_flow_ctrl(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get PCI information by sysfs device path.
|
||||
*
|
||||
* @param dev_path
|
||||
* Pointer to device sysfs folder name.
|
||||
* @param[out] pci_addr
|
||||
* PCI bus address output buffer.
|
||||
*
|
||||
* @return
|
||||
* 0 on success, a negative errno value otherwise and rte_errno is set.
|
||||
*/
|
||||
int
|
||||
mlx5_dev_to_pci_addr(const char *dev_path,
|
||||
struct rte_pci_addr *pci_addr)
|
||||
{
|
||||
FILE *file;
|
||||
char line[32];
|
||||
MKSTR(path, "%s/device/uevent", dev_path);
|
||||
|
||||
file = fopen(path, "rb");
|
||||
if (file == NULL) {
|
||||
rte_errno = errno;
|
||||
return -rte_errno;
|
||||
}
|
||||
while (fgets(line, sizeof(line), file) == line) {
|
||||
size_t len = strlen(line);
|
||||
int ret;
|
||||
|
||||
/* Truncate long lines. */
|
||||
if (len == (sizeof(line) - 1))
|
||||
while (line[(len - 1)] != '\n') {
|
||||
ret = fgetc(file);
|
||||
if (ret == EOF)
|
||||
break;
|
||||
line[(len - 1)] = ret;
|
||||
}
|
||||
/* Extract information. */
|
||||
if (sscanf(line,
|
||||
"PCI_SLOT_NAME="
|
||||
"%" SCNx32 ":%" SCNx8 ":%" SCNx8 ".%" SCNx8 "\n",
|
||||
&pci_addr->domain,
|
||||
&pci_addr->bus,
|
||||
&pci_addr->devid,
|
||||
&pci_addr->function) == 4) {
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
fclose(file);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle asynchronous removal event for entire multiport device.
|
||||
*
|
||||
|
@ -30,6 +30,7 @@
|
||||
|
||||
#include <mlx5_devx_cmds.h>
|
||||
#include <mlx5_prm.h>
|
||||
#include <mlx5_common.h>
|
||||
|
||||
#include "mlx5_defs.h"
|
||||
#include "mlx5.h"
|
||||
|
@ -13,10 +13,13 @@
|
||||
#include <rte_common.h>
|
||||
#include <rte_malloc.h>
|
||||
|
||||
#include <mlx5_common.h>
|
||||
|
||||
#include "mlx5_defs.h"
|
||||
#include "mlx5.h"
|
||||
#include "mlx5_rxtx.h"
|
||||
|
||||
|
||||
static const struct mlx5_counter_ctrl mlx5_counters_init[] = {
|
||||
{
|
||||
.dpdk_name = "rx_port_unicast_bytes",
|
||||
|
Loading…
x
Reference in New Issue
Block a user