mirror of https://gitee.com/openkylin/linux.git
net/mlx5_core: Extend struct mlx5_interface to support multiple protocols
Preparation for ethernet driver. Signed-off-by: Achiad Shochat <achiad@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> Signed-off-by: Eli Cohen <eli@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ce0f750932
commit
64613d9499
|
@ -1362,6 +1362,7 @@ static struct mlx5_interface mlx5_ib_interface = {
|
|||
.add = mlx5_ib_add,
|
||||
.remove = mlx5_ib_remove,
|
||||
.event = mlx5_ib_event,
|
||||
.protocol = MLX5_INTERFACE_PROTOCOL_IB,
|
||||
};
|
||||
|
||||
static int __init mlx5_ib_init(void)
|
||||
|
|
|
@ -908,6 +908,28 @@ void mlx5_unregister_interface(struct mlx5_interface *intf)
|
|||
}
|
||||
EXPORT_SYMBOL(mlx5_unregister_interface);
|
||||
|
||||
void *mlx5_get_protocol_dev(struct mlx5_core_dev *mdev, int protocol)
|
||||
{
|
||||
struct mlx5_priv *priv = &mdev->priv;
|
||||
struct mlx5_device_context *dev_ctx;
|
||||
unsigned long flags;
|
||||
void *result = NULL;
|
||||
|
||||
spin_lock_irqsave(&priv->ctx_lock, flags);
|
||||
|
||||
list_for_each_entry(dev_ctx, &mdev->priv.ctx_list, list)
|
||||
if ((dev_ctx->intf->protocol == protocol) &&
|
||||
dev_ctx->intf->get_dev) {
|
||||
result = dev_ctx->intf->get_dev(dev_ctx->context);
|
||||
break;
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&priv->ctx_lock, flags);
|
||||
|
||||
return result;
|
||||
}
|
||||
EXPORT_SYMBOL(mlx5_get_protocol_dev);
|
||||
|
||||
static void mlx5_core_event(struct mlx5_core_dev *dev, enum mlx5_dev_event event,
|
||||
unsigned long param)
|
||||
{
|
||||
|
|
|
@ -781,14 +781,22 @@ enum {
|
|||
MAX_MR_CACHE_ENTRIES = 16,
|
||||
};
|
||||
|
||||
enum {
|
||||
MLX5_INTERFACE_PROTOCOL_IB = 0,
|
||||
MLX5_INTERFACE_PROTOCOL_ETH = 1,
|
||||
};
|
||||
|
||||
struct mlx5_interface {
|
||||
void * (*add)(struct mlx5_core_dev *dev);
|
||||
void (*remove)(struct mlx5_core_dev *dev, void *context);
|
||||
void (*event)(struct mlx5_core_dev *dev, void *context,
|
||||
enum mlx5_dev_event event, unsigned long param);
|
||||
void * (*get_dev)(void *context);
|
||||
int protocol;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
void *mlx5_get_protocol_dev(struct mlx5_core_dev *mdev, int protocol);
|
||||
int mlx5_register_interface(struct mlx5_interface *intf);
|
||||
void mlx5_unregister_interface(struct mlx5_interface *intf);
|
||||
|
||||
|
|
Loading…
Reference in New Issue