Currently mlx5_class_get() returns enabled single valid class.
To support multiple class and to improve readability of code, change it
to mlx5_class_enabled().
With this function, each class enablement can be checked, to load class
specific driver.

Signed-off-by: Parav Pandit <pa...@mellanox.com>
---
 drivers/common/mlx5/mlx5_common.c               | 12 +++++++-----
 drivers/common/mlx5/mlx5_common.h               |  5 +++--
 drivers/common/mlx5/rte_common_mlx5_version.map |  2 +-
 drivers/net/mlx5/linux/mlx5_os.c                |  3 ++-
 drivers/vdpa/mlx5/mlx5_vdpa.c                   |  2 +-
 5 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/drivers/common/mlx5/mlx5_common.c 
b/drivers/common/mlx5/mlx5_common.c
index db94d4aa8..96c415842 100644
--- a/drivers/common/mlx5/mlx5_common.c
+++ b/drivers/common/mlx5/mlx5_common.c
@@ -37,22 +37,24 @@ mlx5_class_check_handler(__rte_unused const char *key, 
const char *value,
        return 0;
 }
 
-enum mlx5_class
-mlx5_class_get(struct rte_devargs *devargs)
+bool
+mlx5_class_enabled(const struct rte_devargs *devargs, enum mlx5_class 
dev_class)
 {
        struct rte_kvargs *kvlist;
        const char *key = MLX5_CLASS_ARG_NAME;
+       /* Default NET CLASS is enabled if user didn't specify the class */
        enum mlx5_class ret = MLX5_CLASS_NET;
 
        if (devargs == NULL)
-               return ret;
+               return dev_class == MLX5_CLASS_NET ? true : false;
        kvlist = rte_kvargs_parse(devargs->args, NULL);
        if (kvlist == NULL)
-               return ret;
+               return dev_class == MLX5_CLASS_NET ? true : false;
        if (rte_kvargs_count(kvlist, key))
                rte_kvargs_process(kvlist, key, mlx5_class_check_handler, &ret);
        rte_kvargs_free(kvlist);
-       return ret;
+
+       return (ret & dev_class) ? true : false;
 }
 
 
diff --git a/drivers/common/mlx5/mlx5_common.h 
b/drivers/common/mlx5/mlx5_common.h
index 8e679c699..1d59873c8 100644
--- a/drivers/common/mlx5/mlx5_common.h
+++ b/drivers/common/mlx5/mlx5_common.h
@@ -202,13 +202,14 @@ int mlx5_dev_to_pci_addr(const char *dev_path, struct 
rte_pci_addr *pci_addr);
 #define MLX5_CLASS_ARG_NAME "class"
 
 enum mlx5_class {
+       MLX5_CLASS_INVALID,
        MLX5_CLASS_NET,
        MLX5_CLASS_VDPA,
-       MLX5_CLASS_INVALID,
 };
 
 __rte_internal
-enum mlx5_class mlx5_class_get(struct rte_devargs *devargs);
+bool mlx5_class_enabled(const struct rte_devargs *devargs,
+                       enum mlx5_class dev_class);
 __rte_internal
 void mlx5_translate_port_name(const char *port_name_in,
                              struct mlx5_switch_info *port_info_out);
diff --git a/drivers/common/mlx5/rte_common_mlx5_version.map 
b/drivers/common/mlx5/rte_common_mlx5_version.map
index 350e77140..01fa0cc25 100644
--- a/drivers/common/mlx5/rte_common_mlx5_version.map
+++ b/drivers/common/mlx5/rte_common_mlx5_version.map
@@ -1,7 +1,7 @@
 INTERNAL {
        global:
 
-       mlx5_class_get;
+       mlx5_class_enabled;
 
        mlx5_create_mr_ext;
 
diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c
index 92422dbe6..06772b7ae 100644
--- a/drivers/net/mlx5/linux/mlx5_os.c
+++ b/drivers/net/mlx5/linux/mlx5_os.c
@@ -1377,11 +1377,12 @@ mlx5_os_pci_probe(struct rte_pci_driver *pci_drv 
__rte_unused,
        struct mlx5_dev_config dev_config;
        int ret;
 
-       if (mlx5_class_get(pci_dev->device.devargs) != MLX5_CLASS_NET) {
+       if (!mlx5_class_enabled(pci_dev->device.devargs, MLX5_CLASS_NET)) {
                DRV_LOG(DEBUG, "Skip probing - should be probed by other mlx5"
                        " driver.");
                return 1;
        }
+
        if (rte_eal_process_type() == RTE_PROC_PRIMARY)
                mlx5_pmd_socket_init();
        ret = mlx5_init_once();
diff --git a/drivers/vdpa/mlx5/mlx5_vdpa.c b/drivers/vdpa/mlx5/mlx5_vdpa.c
index 1113d6cef..96776b64e 100644
--- a/drivers/vdpa/mlx5/mlx5_vdpa.c
+++ b/drivers/vdpa/mlx5/mlx5_vdpa.c
@@ -451,7 +451,7 @@ mlx5_vdpa_pci_probe(struct rte_pci_driver *pci_drv 
__rte_unused,
        struct mlx5_hca_attr attr;
        int ret;
 
-       if (mlx5_class_get(pci_dev->device.devargs) != MLX5_CLASS_VDPA) {
+       if (!mlx5_class_enabled(pci_dev->device.devargs, MLX5_CLASS_VDPA)) {
                DRV_LOG(DEBUG, "Skip probing - should be probed by other mlx5"
                        " driver.");
                return 1;
-- 
2.25.4

Reply via email to