net/mlx5: open device on Windows

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>
This commit is contained in:
Ophir Munk 2020-12-28 14:32:44 +02:00 committed by Ferruh Yigit
parent d266956b77
commit 61b37ff74b

View 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.