|
@@ -70,6 +70,17 @@ static int mlx5_query_nic_vport_context(struct mlx5_core_dev *mdev, u32 *out,
|
|
|
return mlx5_cmd_exec_check_status(mdev, in, sizeof(in), out, outlen);
|
|
|
}
|
|
|
|
|
|
+static int mlx5_modify_nic_vport_context(struct mlx5_core_dev *mdev, void *in,
|
|
|
+ int inlen)
|
|
|
+{
|
|
|
+ u32 out[MLX5_ST_SZ_DW(modify_nic_vport_context_out)];
|
|
|
+
|
|
|
+ MLX5_SET(modify_nic_vport_context_in, in, opcode,
|
|
|
+ MLX5_CMD_OP_MODIFY_NIC_VPORT_CONTEXT);
|
|
|
+
|
|
|
+ return mlx5_cmd_exec_check_status(mdev, in, inlen, out, sizeof(out));
|
|
|
+}
|
|
|
+
|
|
|
void mlx5_query_nic_vport_mac_address(struct mlx5_core_dev *mdev, u8 *addr)
|
|
|
{
|
|
|
u32 *out;
|
|
@@ -350,3 +361,44 @@ int mlx5_query_hca_vport_node_guid(struct mlx5_core_dev *dev,
|
|
|
return err;
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(mlx5_query_hca_vport_node_guid);
|
|
|
+
|
|
|
+enum mlx5_vport_roce_state {
|
|
|
+ MLX5_VPORT_ROCE_DISABLED = 0,
|
|
|
+ MLX5_VPORT_ROCE_ENABLED = 1,
|
|
|
+};
|
|
|
+
|
|
|
+static int mlx5_nic_vport_update_roce_state(struct mlx5_core_dev *mdev,
|
|
|
+ enum mlx5_vport_roce_state state)
|
|
|
+{
|
|
|
+ void *in;
|
|
|
+ int inlen = MLX5_ST_SZ_BYTES(modify_nic_vport_context_in);
|
|
|
+ int err;
|
|
|
+
|
|
|
+ in = mlx5_vzalloc(inlen);
|
|
|
+ if (!in) {
|
|
|
+ mlx5_core_warn(mdev, "failed to allocate inbox\n");
|
|
|
+ return -ENOMEM;
|
|
|
+ }
|
|
|
+
|
|
|
+ MLX5_SET(modify_nic_vport_context_in, in, field_select.roce_en, 1);
|
|
|
+ MLX5_SET(modify_nic_vport_context_in, in, nic_vport_context.roce_en,
|
|
|
+ state);
|
|
|
+
|
|
|
+ err = mlx5_modify_nic_vport_context(mdev, in, inlen);
|
|
|
+
|
|
|
+ kvfree(in);
|
|
|
+
|
|
|
+ return err;
|
|
|
+}
|
|
|
+
|
|
|
+int mlx5_nic_vport_enable_roce(struct mlx5_core_dev *mdev)
|
|
|
+{
|
|
|
+ return mlx5_nic_vport_update_roce_state(mdev, MLX5_VPORT_ROCE_ENABLED);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(mlx5_nic_vport_enable_roce);
|
|
|
+
|
|
|
+int mlx5_nic_vport_disable_roce(struct mlx5_core_dev *mdev)
|
|
|
+{
|
|
|
+ return mlx5_nic_vport_update_roce_state(mdev, MLX5_VPORT_ROCE_DISABLED);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(mlx5_nic_vport_disable_roce);
|