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>
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
#include <dlfcn.h>
#include <unistd.h>
#include <string.h>
+#include <stdio.h>
#include <rte_errno.h>
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
/**
#define RTE_PMD_MLX5_COMMON_H_
#include <assert.h>
+#include <stdio.h>
+#include <rte_pci.h>
#include <rte_log.h>
\
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_ */
mlx5_devx_cmd_qp_query_tis_td;
mlx5_devx_cmd_query_hca_attr;
mlx5_devx_get_out_command_status;
+
+ mlx5_dev_to_pci_addr;
};
#include <mlx5_glue.h>
#include <mlx5_devx_cmds.h>
+#include <mlx5_common.h>
#include "mlx5_defs.h"
#include "mlx5.h"
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);
#include <mlx5_glue.h>
#include <mlx5_devx_cmds.h>
+#include <mlx5_common.h>
#include "mlx5.h"
#include "mlx5_rxtx.h"
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.
*
#include <mlx5_devx_cmds.h>
#include <mlx5_prm.h>
+#include <mlx5_common.h>
#include "mlx5_defs.h"
#include "mlx5.h"
#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",