|
@@ -36,26 +36,75 @@
|
|
|
#include <linux/mlx5/vport.h>
|
|
|
#include "mlx5_core.h"
|
|
|
|
|
|
-u8 mlx5_query_vport_state(struct mlx5_core_dev *mdev, u8 opmod)
|
|
|
+static int _mlx5_query_vport_state(struct mlx5_core_dev *mdev, u8 opmod,
|
|
|
+ u16 vport, u32 *out, int outlen)
|
|
|
{
|
|
|
- u32 in[MLX5_ST_SZ_DW(query_vport_state_in)];
|
|
|
- u32 out[MLX5_ST_SZ_DW(query_vport_state_out)];
|
|
|
int err;
|
|
|
+ u32 in[MLX5_ST_SZ_DW(query_vport_state_in)];
|
|
|
|
|
|
memset(in, 0, sizeof(in));
|
|
|
|
|
|
MLX5_SET(query_vport_state_in, in, opcode,
|
|
|
MLX5_CMD_OP_QUERY_VPORT_STATE);
|
|
|
MLX5_SET(query_vport_state_in, in, op_mod, opmod);
|
|
|
+ MLX5_SET(query_vport_state_in, in, vport_number, vport);
|
|
|
+ if (vport)
|
|
|
+ MLX5_SET(query_vport_state_in, in, other_vport, 1);
|
|
|
|
|
|
- err = mlx5_cmd_exec_check_status(mdev, in, sizeof(in), out,
|
|
|
- sizeof(out));
|
|
|
+ err = mlx5_cmd_exec_check_status(mdev, in, sizeof(in), out, outlen);
|
|
|
if (err)
|
|
|
mlx5_core_warn(mdev, "MLX5_CMD_OP_QUERY_VPORT_STATE failed\n");
|
|
|
|
|
|
+ return err;
|
|
|
+}
|
|
|
+
|
|
|
+u8 mlx5_query_vport_state(struct mlx5_core_dev *mdev, u8 opmod, u16 vport)
|
|
|
+{
|
|
|
+ u32 out[MLX5_ST_SZ_DW(query_vport_state_out)] = {0};
|
|
|
+
|
|
|
+ _mlx5_query_vport_state(mdev, opmod, vport, out, sizeof(out));
|
|
|
+
|
|
|
return MLX5_GET(query_vport_state_out, out, state);
|
|
|
}
|
|
|
-EXPORT_SYMBOL(mlx5_query_vport_state);
|
|
|
+EXPORT_SYMBOL_GPL(mlx5_query_vport_state);
|
|
|
+
|
|
|
+u8 mlx5_query_vport_admin_state(struct mlx5_core_dev *mdev, u8 opmod, u16 vport)
|
|
|
+{
|
|
|
+ u32 out[MLX5_ST_SZ_DW(query_vport_state_out)] = {0};
|
|
|
+
|
|
|
+ _mlx5_query_vport_state(mdev, opmod, vport, out, sizeof(out));
|
|
|
+
|
|
|
+ return MLX5_GET(query_vport_state_out, out, admin_state);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(mlx5_query_vport_admin_state);
|
|
|
+
|
|
|
+int mlx5_modify_vport_admin_state(struct mlx5_core_dev *mdev, u8 opmod,
|
|
|
+ u16 vport, u8 state)
|
|
|
+{
|
|
|
+ u32 in[MLX5_ST_SZ_DW(modify_vport_state_in)];
|
|
|
+ u32 out[MLX5_ST_SZ_DW(modify_vport_state_out)];
|
|
|
+ int err;
|
|
|
+
|
|
|
+ memset(in, 0, sizeof(in));
|
|
|
+
|
|
|
+ MLX5_SET(modify_vport_state_in, in, opcode,
|
|
|
+ MLX5_CMD_OP_MODIFY_VPORT_STATE);
|
|
|
+ MLX5_SET(modify_vport_state_in, in, op_mod, opmod);
|
|
|
+ MLX5_SET(modify_vport_state_in, in, vport_number, vport);
|
|
|
+
|
|
|
+ if (vport)
|
|
|
+ MLX5_SET(modify_vport_state_in, in, other_vport, 1);
|
|
|
+
|
|
|
+ MLX5_SET(modify_vport_state_in, in, admin_state, state);
|
|
|
+
|
|
|
+ err = mlx5_cmd_exec_check_status(mdev, in, sizeof(in), out,
|
|
|
+ sizeof(out));
|
|
|
+ if (err)
|
|
|
+ mlx5_core_warn(mdev, "MLX5_CMD_OP_MODIFY_VPORT_STATE failed\n");
|
|
|
+
|
|
|
+ return err;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(mlx5_modify_vport_admin_state);
|
|
|
|
|
|
static int mlx5_query_nic_vport_context(struct mlx5_core_dev *mdev, u16 vport,
|
|
|
u32 *out, int outlen)
|