Move PCI detection by IB device from mlx5 PMD to the common code.

Signed-off-by: Matan Azrad <ma...@mellanox.com>
Acked-by: Viacheslav Ovsiienko <viachesl...@mellanox.com>
---
 drivers/common/mlx5/Makefile                    |  2 +-
 drivers/common/mlx5/mlx5_common.c               | 55 +++++++++++++++++++++++++
 drivers/common/mlx5/mlx5_common.h               |  4 ++
 drivers/common/mlx5/rte_common_mlx5_version.map |  2 +
 drivers/net/mlx5/mlx5.c                         |  1 +
 drivers/net/mlx5/mlx5.h                         |  2 -
 drivers/net/mlx5/mlx5_ethdev.c                  | 53 +-----------------------
 drivers/net/mlx5/mlx5_rxtx.c                    |  1 +
 drivers/net/mlx5/mlx5_stats.c                   |  3 ++
 9 files changed, 68 insertions(+), 55 deletions(-)
diff --git a/drivers/common/mlx5/Makefile b/drivers/common/mlx5/Makefile
index b94d3c0..66585b2 100644
--- a/drivers/common/mlx5/Makefile
+++ b/drivers/common/mlx5/Makefile
@@ -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
diff --git a/drivers/common/mlx5/mlx5_common.c 
b/drivers/common/mlx5/mlx5_common.c
index 9c88a63..2381208 100644
--- a/drivers/common/mlx5/mlx5_common.c
+++ b/drivers/common/mlx5/mlx5_common.c
@@ -5,6 +5,9 @@
 #include <dlfcn.h>
 #include <unistd.h>
 #include <string.h>
+#include <stdio.h>
+
+#include <rte_errno.h>
 
 #include <rte_errno.h>
 
@@ -16,6 +19,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
 
 /**
diff --git a/drivers/common/mlx5/mlx5_common.h 
b/drivers/common/mlx5/mlx5_common.h
index 9f10def..107ab8d 100644
--- a/drivers/common/mlx5/mlx5_common.h
+++ b/drivers/common/mlx5/mlx5_common.h
@@ -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 @@
        \
        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_ */
diff --git a/drivers/common/mlx5/rte_common_mlx5_version.map 
b/drivers/common/mlx5/rte_common_mlx5_version.map
index e4f85e2..0c01172 100644
--- a/drivers/common/mlx5/rte_common_mlx5_version.map
+++ b/drivers/common/mlx5/rte_common_mlx5_version.map
@@ -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;
 };
diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index 8fbe826..d0fa2da 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -39,6 +39,7 @@
 
 #include <mlx5_glue.h>
 #include <mlx5_devx_cmds.h>
+#include <mlx5_common.h>
 
 #include "mlx5_defs.h"
 #include "mlx5.h"
diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
index 872fccb..261a8fc 100644
--- a/drivers/net/mlx5/mlx5.h
+++ b/drivers/net/mlx5/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);
diff --git a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c
index eddf888..2628e64 100644
--- a/drivers/net/mlx5/mlx5_ethdev.c
+++ b/drivers/net/mlx5/mlx5_ethdev.c
@@ -38,6 +38,7 @@
 
 #include <mlx5_glue.h>
 #include <mlx5_devx_cmds.h>
+#include <mlx5_common.h>
 
 #include "mlx5.h"
 #include "mlx5_rxtx.h"
@@ -1212,58 +1213,6 @@ int mlx5_fw_version_get(struct rte_eth_dev *dev, char 
*fw_ver, size_t fw_size)
 }
 
 /**
- * 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.
  *
  * @param sh
diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c
index d8f6671..b14ae31 100644
--- a/drivers/net/mlx5/mlx5_rxtx.c
+++ b/drivers/net/mlx5/mlx5_rxtx.c
@@ -30,6 +30,7 @@
 
 #include <mlx5_devx_cmds.h>
 #include <mlx5_prm.h>
+#include <mlx5_common.h>
 
 #include "mlx5_defs.h"
 #include "mlx5.h"
diff --git a/drivers/net/mlx5/mlx5_stats.c b/drivers/net/mlx5/mlx5_stats.c
index 0ed7170..4c69e77 100644
--- a/drivers/net/mlx5/mlx5_stats.c
+++ b/drivers/net/mlx5/mlx5_stats.c
@@ -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",
-- 
1.8.3.1

Reply via email to