@@ -404,7 +404,7 @@ drivers_remove(struct mlx5_common_device *dev, uint32_t enabled_classes)
while (enabled_classes) {
driver = driver_get(RTE_BIT64(i));
if (driver != NULL) {
- local_ret = driver->remove(dev->dev);
+ local_ret = driver->remove(dev);
if (local_ret == 0)
dev->classes_loaded &= ~RTE_BIT64(i);
else if (ret == 0)
@@ -438,7 +438,7 @@ drivers_probe(struct mlx5_common_device *dev, uint32_t user_classes)
ret = -EEXIST;
goto probe_err;
}
- ret = driver->probe(dev->dev);
+ ret = driver->probe(dev);
if (ret < 0) {
DRV_LOG(ERR, "Failed to load driver %s",
driver->name);
@@ -335,6 +335,12 @@ struct mlx5_dev_ctx {
int numa_node; /* Numa node of device. */
};
+struct mlx5_common_device {
+ struct rte_device *dev;
+ TAILQ_ENTRY(mlx5_common_device) next;
+ uint32_t classes_loaded;
+};
+
/**
* Uninitialize context device and release all its resources.
*
@@ -367,12 +373,12 @@ int mlx5_dev_ctx_prepare(struct mlx5_dev_ctx *dev_ctx, struct rte_device *dev,
/**
* Initialization function for the driver called during device probing.
*/
-typedef int (mlx5_class_driver_probe_t)(struct rte_device *dev);
+typedef int (mlx5_class_driver_probe_t)(struct mlx5_common_device *dev);
/**
* Uninitialization function for the driver called during hot-unplugging.
*/
-typedef int (mlx5_class_driver_remove_t)(struct rte_device *dev);
+typedef int (mlx5_class_driver_remove_t)(struct mlx5_common_device *dev);
/**
* Driver-specific DMA mapping. After a successful call the device
@@ -16,12 +16,6 @@ extern "C" {
/* Common bus driver: */
-struct mlx5_common_device {
- struct rte_device *dev;
- TAILQ_ENTRY(mlx5_common_device) next;
- uint32_t classes_loaded;
-};
-
int mlx5_common_dev_probe(struct rte_device *eal_dev);
int mlx5_common_dev_remove(struct rte_device *eal_dev);
int mlx5_common_dev_dma_map(struct rte_device *dev, void *addr, uint64_t iova,
@@ -748,7 +748,7 @@ mlx5_compress_mr_mem_event_cb(enum rte_mem_event event_type, const void *addr,
}
static int
-mlx5_compress_dev_probe(struct rte_device *dev)
+mlx5_compress_dev_probe(struct mlx5_common_device *dev)
{
struct rte_compressdev *cdev;
struct mlx5_dev_ctx *dev_ctx;
@@ -756,7 +756,7 @@ mlx5_compress_dev_probe(struct rte_device *dev)
struct mlx5_hca_attr att = { 0 };
struct rte_compressdev_pmd_init_params init_params = {
.name = "",
- .socket_id = dev->numa_node,
+ .socket_id = dev->dev->numa_node,
};
const char *ibdev_name;
int ret;
@@ -773,7 +773,7 @@ mlx5_compress_dev_probe(struct rte_device *dev)
rte_errno = ENOMEM;
return -rte_errno;
}
- ret = mlx5_dev_ctx_prepare(dev_ctx, dev, MLX5_CLASS_COMPRESS);
+ ret = mlx5_dev_ctx_prepare(dev_ctx, dev->dev, MLX5_CLASS_COMPRESS);
if (ret < 0) {
DRV_LOG(ERR, "Failed to create device context.");
mlx5_free(dev_ctx);
@@ -791,7 +791,7 @@ mlx5_compress_dev_probe(struct rte_device *dev)
rte_errno = ENOTSUP;
return -ENOTSUP;
}
- cdev = rte_compressdev_pmd_create(ibdev_name, dev,
+ cdev = rte_compressdev_pmd_create(ibdev_name, dev->dev,
sizeof(*priv), &init_params);
if (cdev == NULL) {
DRV_LOG(ERR, "Failed to create device \"%s\".", ibdev_name);
@@ -840,13 +840,13 @@ mlx5_compress_dev_probe(struct rte_device *dev)
}
static int
-mlx5_compress_dev_remove(struct rte_device *dev)
+mlx5_compress_dev_remove(struct mlx5_common_device *dev)
{
struct mlx5_compress_priv *priv = NULL;
pthread_mutex_lock(&priv_list_lock);
TAILQ_FOREACH(priv, &mlx5_compress_priv_list, next)
- if (priv->cdev->device == dev)
+ if (priv->cdev->device == dev->dev)
break;
if (priv)
TAILQ_REMOVE(&mlx5_compress_priv_list, priv, next);
@@ -942,7 +942,7 @@ mlx5_crypto_mr_mem_event_cb(enum rte_mem_event event_type, const void *addr,
}
static int
-mlx5_crypto_dev_probe(struct rte_device *dev)
+mlx5_crypto_dev_probe(struct mlx5_common_device *dev)
{
struct rte_cryptodev *crypto_dev;
struct mlx5_dev_ctx *dev_ctx;
@@ -953,7 +953,7 @@ mlx5_crypto_dev_probe(struct rte_device *dev)
struct rte_cryptodev_pmd_init_params init_params = {
.name = "",
.private_data_size = sizeof(struct mlx5_crypto_priv),
- .socket_id = dev->numa_node,
+ .socket_id = dev->dev->numa_node,
.max_nb_queue_pairs =
RTE_CRYPTODEV_PMD_DEFAULT_MAX_NB_QUEUE_PAIRS,
};
@@ -973,7 +973,7 @@ mlx5_crypto_dev_probe(struct rte_device *dev)
rte_errno = ENOMEM;
return -rte_errno;
}
- ret = mlx5_dev_ctx_prepare(dev_ctx, dev, MLX5_CLASS_CRYPTO);
+ ret = mlx5_dev_ctx_prepare(dev_ctx, dev->dev, MLX5_CLASS_CRYPTO);
if (ret < 0) {
DRV_LOG(ERR, "Failed to create device context.");
mlx5_free(dev_ctx);
@@ -990,7 +990,7 @@ mlx5_crypto_dev_probe(struct rte_device *dev)
rte_errno = ENOTSUP;
return -ENOTSUP;
}
- ret = mlx5_crypto_parse_devargs(dev->devargs, &devarg_prms);
+ ret = mlx5_crypto_parse_devargs(dev->dev->devargs, &devarg_prms);
if (ret) {
DRV_LOG(ERR, "Failed to parse devargs.");
mlx5_dev_ctx_release(dev_ctx);
@@ -1005,7 +1005,8 @@ mlx5_crypto_dev_probe(struct rte_device *dev)
mlx5_free(dev_ctx);
return -rte_errno;
}
- crypto_dev = rte_cryptodev_pmd_create(ibdev_name, dev, &init_params);
+ crypto_dev = rte_cryptodev_pmd_create(ibdev_name, dev->dev,
+ &init_params);
if (crypto_dev == NULL) {
DRV_LOG(ERR, "Failed to create device \"%s\".", ibdev_name);
mlx5_dev_ctx_release(dev_ctx);
@@ -1065,13 +1066,13 @@ mlx5_crypto_dev_probe(struct rte_device *dev)
}
static int
-mlx5_crypto_dev_remove(struct rte_device *dev)
+mlx5_crypto_dev_remove(struct mlx5_common_device *dev)
{
struct mlx5_crypto_priv *priv = NULL;
pthread_mutex_lock(&priv_list_lock);
TAILQ_FOREACH(priv, &mlx5_crypto_priv_list, next)
- if (priv->crypto_dev->device == dev)
+ if (priv->crypto_dev->device == dev->dev)
break;
if (priv)
TAILQ_REMOVE(&mlx5_crypto_priv_list, priv, next);
@@ -2655,21 +2655,22 @@ mlx5_os_parse_eth_devargs(struct rte_device *dev,
*
* This function spawns Ethernet devices out of a given PCI device.
*
- * @param[in] pci_dev
- * PCI device information.
+ * @param[in] dev
+ * Pointer to mlx5 device structure.
*
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
static int
-mlx5_os_pci_probe(struct rte_pci_device *pci_dev, struct mlx5_dev_ctx *dev_ctx,
+mlx5_os_pci_probe(struct mlx5_common_device *dev, struct mlx5_dev_ctx *dev_ctx,
uint8_t devx)
{
+ struct rte_pci_device *pci_dev = RTE_DEV_TO_PCI(dev->dev);
struct rte_eth_devargs eth_da = { .nb_ports = 0 };
int ret = 0;
uint16_t p;
- ret = mlx5_os_parse_eth_devargs(&pci_dev->device, ð_da);
+ ret = mlx5_os_parse_eth_devargs(dev->dev, ð_da);
if (ret != 0)
return ret;
@@ -2687,7 +2688,7 @@ mlx5_os_pci_probe(struct rte_pci_device *pci_dev, struct mlx5_dev_ctx *dev_ctx,
pci_dev->addr.domain, pci_dev->addr.bus,
pci_dev->addr.devid, pci_dev->addr.function,
eth_da.ports[p]);
- mlx5_net_remove(&pci_dev->device);
+ mlx5_net_remove(dev);
}
} else {
ret = mlx5_os_pci_probe_pf(pci_dev, dev_ctx, ð_da, 0, devx);
@@ -2873,13 +2874,13 @@ mlx5_verbs_dev_ctx_prepare(struct mlx5_dev_ctx *dev_ctx, struct rte_device *dev)
* This function probe PCI bus device(s) or a single SF on auxiliary bus.
*
* @param[in] dev
- * Pointer to the generic device.
+ * Pointer to the common device.
*
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
int
-mlx5_os_net_probe(struct rte_device *dev)
+mlx5_os_net_probe(struct mlx5_common_device *dev)
{
struct mlx5_dev_ctx *dev_ctx;
uint8_t devx = 0;
@@ -2896,14 +2897,14 @@ mlx5_os_net_probe(struct rte_device *dev)
* Initialize context device and allocate all its resources.
* Try to do it with DV first, then usual Verbs.
*/
- ret = mlx5_dev_ctx_prepare(dev_ctx, dev, MLX5_CLASS_ETH);
+ ret = mlx5_dev_ctx_prepare(dev_ctx, dev->dev, MLX5_CLASS_ETH);
if (ret < 0) {
goto error;
} else if (dev_ctx->ctx) {
devx = 1;
DRV_LOG(DEBUG, "DevX is supported.");
} else {
- ret = mlx5_verbs_dev_ctx_prepare(dev_ctx, dev);
+ ret = mlx5_verbs_dev_ctx_prepare(dev_ctx, dev->dev);
if (ret < 0)
goto error;
DRV_LOG(DEBUG, "DevX is NOT supported.");
@@ -2916,10 +2917,10 @@ mlx5_os_net_probe(struct rte_device *dev)
strerror(rte_errno));
goto error;
}
- if (mlx5_dev_is_pci(dev))
- ret = mlx5_os_pci_probe(RTE_DEV_TO_PCI(dev), dev_ctx, devx);
+ if (mlx5_dev_is_pci(dev->dev))
+ ret = mlx5_os_pci_probe(dev, dev_ctx, devx);
else
- ret = mlx5_os_auxiliary_probe(dev, dev_ctx, devx);
+ ret = mlx5_os_auxiliary_probe(dev->dev, dev_ctx, devx);
if (ret)
goto error;
return ret;
@@ -2394,13 +2394,13 @@ mlx5_get_dev_ctx(struct rte_device *dev)
* 0 on success, the function cannot fail.
*/
int
-mlx5_net_remove(struct rte_device *dev)
+mlx5_net_remove(struct mlx5_common_device *dev)
{
- struct mlx5_dev_ctx *dev_ctx = mlx5_get_dev_ctx(dev);
+ struct mlx5_dev_ctx *dev_ctx = mlx5_get_dev_ctx(dev->dev);
uint16_t port_id;
int ret = 0;
- RTE_ETH_FOREACH_DEV_OF(port_id, dev) {
+ RTE_ETH_FOREACH_DEV_OF(port_id, dev->dev) {
/*
* mlx5_dev_close() is not registered to secondary process,
* call the close function explicitly for secondary process.
@@ -1481,7 +1481,7 @@ int mlx5_udp_tunnel_port_add(struct rte_eth_dev *dev,
struct rte_eth_udp_tunnel *udp_tunnel);
uint16_t mlx5_eth_find_next(uint16_t port_id, struct rte_device *odev);
int mlx5_dev_close(struct rte_eth_dev *dev);
-int mlx5_net_remove(struct rte_device *dev);
+int mlx5_net_remove(struct mlx5_common_device *dev);
bool mlx5_is_hpf(struct rte_eth_dev *dev);
bool mlx5_is_sf_repr(struct rte_eth_dev *dev);
void mlx5_age_event_prepare(struct mlx5_dev_ctx_shared *sh);
@@ -1768,7 +1768,7 @@ void mlx5_flow_meter_rxq_flush(struct rte_eth_dev *dev);
struct rte_pci_driver;
int mlx5_os_get_dev_attr(void *ctx, struct mlx5_dev_attr *dev_attr);
void mlx5_os_free_shared_dr(struct mlx5_priv *priv);
-int mlx5_os_net_probe(struct rte_device *dev);
+int mlx5_os_net_probe(struct mlx5_common_device *dev);
void mlx5_os_dev_shared_handler_install(struct mlx5_dev_ctx_shared *sh);
void mlx5_os_dev_shared_handler_uninstall(struct mlx5_dev_ctx_shared *sh);
void mlx5_os_set_reg_mr_cb(mlx5_reg_mr_t *reg_mr_cb,
@@ -869,15 +869,15 @@ mlx5_os_set_allmulti(struct rte_eth_dev *dev, int enable)
* This function spawns Ethernet devices out of a given device.
*
* @param[in] dev
- * Pointer to the generic device.
+ * Pointer to the common device.
*
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
int
-mlx5_os_net_probe(struct rte_device *dev)
+mlx5_os_net_probe(struct mlx5_common_device *dev)
{
- struct rte_pci_device *pci_dev = RTE_DEV_TO_PCI(dev);
+ struct rte_pci_device *pci_dev = RTE_DEV_TO_PCI(dev->dev);
struct mlx5_dev_ctx *dev_ctx;
struct mlx5_dev_spawn_data spawn = { .pf_bond = -1 };
struct mlx5_dev_config dev_config;
@@ -902,7 +902,7 @@ mlx5_os_net_probe(struct rte_device *dev)
rte_errno = ENOMEM;
return -rte_errno;
}
- ret = mlx5_dev_ctx_prepare(dev_ctx, dev, MLX5_CLASS_ETH);
+ ret = mlx5_dev_ctx_prepare(dev_ctx, dev->dev, MLX5_CLASS_ETH);
if (ret < 0)
goto error;
memset(&spawn.info, 0, sizeof(spawn.info));
@@ -954,7 +954,7 @@ mlx5_os_net_probe(struct rte_device *dev)
dev_config.dv_flow_en = 1;
dev_config.decap_en = 0;
dev_config.log_hp_size = MLX5_ARG_UNSET;
- spawn.eth_dev = mlx5_dev_spawn(dev, dev_ctx, &spawn, &dev_config);
+ spawn.eth_dev = mlx5_dev_spawn(dev->dev, dev_ctx, &spawn, &dev_config);
if (!spawn.eth_dev) {
ret = -rte_errno;
goto error;
@@ -122,7 +122,7 @@ mlx5_regex_mr_mem_event_cb(enum rte_mem_event event_type, const void *addr,
}
static int
-mlx5_regex_dev_probe(struct rte_device *rte_dev)
+mlx5_regex_dev_probe(struct mlx5_common_device *mlx5_dev)
{
struct mlx5_regex_priv *priv = NULL;
struct mlx5_dev_ctx *dev_ctx = NULL;
@@ -139,7 +139,7 @@ mlx5_regex_dev_probe(struct rte_device *rte_dev)
rte_errno = ENOMEM;
return -rte_errno;
}
- ret = mlx5_dev_ctx_prepare(dev_ctx, rte_dev, MLX5_CLASS_REGEX);
+ ret = mlx5_dev_ctx_prepare(dev_ctx, mlx5_dev->dev, MLX5_CLASS_REGEX);
if (ret < 0) {
DRV_LOG(ERR, "Failed to create device context.");
rte_free(dev_ctx);
@@ -184,7 +184,7 @@ mlx5_regex_dev_probe(struct rte_device *rte_dev)
priv->is_bf2 = 1;
/* Default RXP programming mode to Shared. */
priv->prog_mode = MLX5_RXP_SHARED_PROG_MODE;
- mlx5_regex_get_name(name, rte_dev);
+ mlx5_regex_get_name(name, mlx5_dev->dev);
priv->regexdev = rte_regexdev_register(name);
if (priv->regexdev == NULL) {
DRV_LOG(ERR, "Failed to register RegEx device.");
@@ -212,7 +212,7 @@ mlx5_regex_dev_probe(struct rte_device *rte_dev)
priv->regexdev->enqueue = mlx5_regexdev_enqueue_gga;
#endif
priv->regexdev->dequeue = mlx5_regexdev_dequeue;
- priv->regexdev->device = rte_dev;
+ priv->regexdev->device = mlx5_dev->dev;
priv->regexdev->data->dev_private = priv;
priv->regexdev->state = RTE_REGEXDEV_READY;
priv->mr_scache.reg_mr_cb = mlx5_common_verbs_reg_mr;
@@ -254,13 +254,13 @@ mlx5_regex_dev_probe(struct rte_device *rte_dev)
}
static int
-mlx5_regex_dev_remove(struct rte_device *rte_dev)
+mlx5_regex_dev_remove(struct mlx5_common_device *mlx5_dev)
{
char name[RTE_REGEXDEV_NAME_MAX_LEN];
struct rte_regexdev *dev;
struct mlx5_regex_priv *priv = NULL;
- mlx5_regex_get_name(name, rte_dev);
+ mlx5_regex_get_name(name, mlx5_dev->dev);
dev = rte_regexdev_get_device_by_name(name);
if (!dev)
return 0;
@@ -503,7 +503,7 @@ mlx5_vdpa_config_get(struct rte_devargs *devargs, struct mlx5_vdpa_priv *priv)
}
static int
-mlx5_vdpa_dev_probe(struct rte_device *dev)
+mlx5_vdpa_dev_probe(struct mlx5_common_device *dev)
{
struct mlx5_vdpa_priv *priv = NULL;
struct mlx5_dev_ctx *dev_ctx = NULL;
@@ -517,7 +517,7 @@ mlx5_vdpa_dev_probe(struct rte_device *dev)
rte_errno = ENOMEM;
return -rte_errno;
}
- ret = mlx5_dev_ctx_prepare(dev_ctx, dev, MLX5_CLASS_VDPA);
+ ret = mlx5_dev_ctx_prepare(dev_ctx, dev->dev, MLX5_CLASS_VDPA);
if (ret < 0) {
DRV_LOG(ERR, "Failed to create device context.");
mlx5_free(dev_ctx);
@@ -558,13 +558,13 @@ mlx5_vdpa_dev_probe(struct rte_device *dev)
DRV_LOG(ERR, "Failed to allocate VAR %u.", errno);
goto error;
}
- priv->vdev = rte_vdpa_register_device(dev, &mlx5_vdpa_ops);
+ priv->vdev = rte_vdpa_register_device(dev->dev, &mlx5_vdpa_ops);
if (priv->vdev == NULL) {
DRV_LOG(ERR, "Failed to register vDPA device.");
rte_errno = rte_errno ? rte_errno : EINVAL;
goto error;
}
- mlx5_vdpa_config_get(dev->devargs, priv);
+ mlx5_vdpa_config_get(dev->dev->devargs, priv);
SLIST_INIT(&priv->mr_list);
pthread_mutex_init(&priv->vq_config_lock, NULL);
pthread_mutex_lock(&priv_list_lock);
@@ -586,14 +586,14 @@ mlx5_vdpa_dev_probe(struct rte_device *dev)
}
static int
-mlx5_vdpa_dev_remove(struct rte_device *dev)
+mlx5_vdpa_dev_remove(struct mlx5_common_device *dev)
{
struct mlx5_vdpa_priv *priv = NULL;
int found = 0;
pthread_mutex_lock(&priv_list_lock);
TAILQ_FOREACH(priv, &priv_list, next) {
- if (priv->vdev->device == dev) {
+ if (priv->vdev->device == dev->dev) {
found = 1;
break;
}