net/mlx5: open device on Windows
authorOphir Munk <ophirmu@nvidia.com>
Mon, 28 Dec 2020 12:32:44 +0000 (14:32 +0200)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 8 Jan 2021 15:03:08 +0000 (16:03 +0100)
This commit implements mlx5_os_open_device() API. It calls glue API
open_device() then glue API query_device() to fill in 'struct
mlx5_context' with data for later usage.

Signed-off-by: Ophir Munk <ophirmu@nvidia.com>
Signed-off-by: Tal Shnaiderman <talshn@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
drivers/net/mlx5/windows/mlx5_os.c

index bdf4951..f5a16d1 100644 (file)
@@ -103,6 +103,50 @@ mlx5_os_set_nonblock_channel_fd(int fd)
        return -ENOTSUP;
 }
 
+/**
+ * Function API open device under Windows
+ *
+ * This function calls the Windows glue APIs to open a device.
+ *
+ * @param[in] spawn
+ *   Pointer to the device attributes (name, port, etc).
+ * @param[out] config
+ *   Pointer to device configuration structure.
+ * @param[out] sh
+ *   Pointer to shared context structure.
+ *
+ * @return
+ *   0 on success, a positive error value otherwise.
+ */
+int
+mlx5_os_open_device(const struct mlx5_dev_spawn_data *spawn,
+                const struct mlx5_dev_config *config,
+                struct mlx5_dev_ctx_shared *sh)
+{
+       RTE_SET_USED(config);
+       int err = 0;
+       struct mlx5_context *mlx5_ctx;
+
+       pthread_mutex_init(&sh->txpp.mutex, NULL);
+       /* Set numa node from pci probe */
+       sh->numa_node = spawn->pci_dev->device.numa_node;
+
+       /* Try to open device with DevX */
+       rte_errno = 0;
+       sh->ctx = mlx5_glue->open_device(spawn->phys_dev);
+       if (!sh->ctx) {
+               DRV_LOG(ERR, "open_device failed");
+               err = errno;
+               return err;
+       }
+       sh->devx = 1;
+       mlx5_ctx = (struct mlx5_context *)sh->ctx;
+       err = mlx5_glue->query_device(spawn->phys_dev, &mlx5_ctx->mlx5_dev);
+       if (err)
+               DRV_LOG(ERR, "Failed to query device context fields.");
+       return err;
+}
+
 /**
  * This function should share events between multiple ports of single IB
  * device.  Currently it has no support under Windows.