|
36 | 36 | #include <linux/mlx5/vport.h>
|
37 | 37 | #include "mlx5_core.h"
|
38 | 38 |
|
39 |
| -u8 mlx5_query_vport_state(struct mlx5_core_dev *mdev, u8 opmod) |
| 39 | +static int _mlx5_query_vport_state(struct mlx5_core_dev *mdev, u8 opmod, |
| 40 | + u16 vport, u32 *out, int outlen) |
40 | 41 | {
|
41 |
| - u32 in[MLX5_ST_SZ_DW(query_vport_state_in)]; |
42 |
| - u32 out[MLX5_ST_SZ_DW(query_vport_state_out)]; |
43 | 42 | int err;
|
| 43 | + u32 in[MLX5_ST_SZ_DW(query_vport_state_in)]; |
44 | 44 |
|
45 | 45 | memset(in, 0, sizeof(in));
|
46 | 46 |
|
47 | 47 | MLX5_SET(query_vport_state_in, in, opcode,
|
48 | 48 | MLX5_CMD_OP_QUERY_VPORT_STATE);
|
49 | 49 | MLX5_SET(query_vport_state_in, in, op_mod, opmod);
|
| 50 | + MLX5_SET(query_vport_state_in, in, vport_number, vport); |
| 51 | + if (vport) |
| 52 | + MLX5_SET(query_vport_state_in, in, other_vport, 1); |
50 | 53 |
|
51 |
| - err = mlx5_cmd_exec_check_status(mdev, in, sizeof(in), out, |
52 |
| - sizeof(out)); |
| 54 | + err = mlx5_cmd_exec_check_status(mdev, in, sizeof(in), out, outlen); |
53 | 55 | if (err)
|
54 | 56 | mlx5_core_warn(mdev, "MLX5_CMD_OP_QUERY_VPORT_STATE failed\n");
|
55 | 57 |
|
| 58 | + return err; |
| 59 | +} |
| 60 | + |
| 61 | +u8 mlx5_query_vport_state(struct mlx5_core_dev *mdev, u8 opmod, u16 vport) |
| 62 | +{ |
| 63 | + u32 out[MLX5_ST_SZ_DW(query_vport_state_out)] = {0}; |
| 64 | + |
| 65 | + _mlx5_query_vport_state(mdev, opmod, vport, out, sizeof(out)); |
| 66 | + |
56 | 67 | return MLX5_GET(query_vport_state_out, out, state);
|
57 | 68 | }
|
58 |
| -EXPORT_SYMBOL(mlx5_query_vport_state); |
| 69 | +EXPORT_SYMBOL_GPL(mlx5_query_vport_state); |
| 70 | + |
| 71 | +u8 mlx5_query_vport_admin_state(struct mlx5_core_dev *mdev, u8 opmod, u16 vport) |
| 72 | +{ |
| 73 | + u32 out[MLX5_ST_SZ_DW(query_vport_state_out)] = {0}; |
| 74 | + |
| 75 | + _mlx5_query_vport_state(mdev, opmod, vport, out, sizeof(out)); |
| 76 | + |
| 77 | + return MLX5_GET(query_vport_state_out, out, admin_state); |
| 78 | +} |
| 79 | +EXPORT_SYMBOL(mlx5_query_vport_admin_state); |
| 80 | + |
| 81 | +int mlx5_modify_vport_admin_state(struct mlx5_core_dev *mdev, u8 opmod, |
| 82 | + u16 vport, u8 state) |
| 83 | +{ |
| 84 | + u32 in[MLX5_ST_SZ_DW(modify_vport_state_in)]; |
| 85 | + u32 out[MLX5_ST_SZ_DW(modify_vport_state_out)]; |
| 86 | + int err; |
| 87 | + |
| 88 | + memset(in, 0, sizeof(in)); |
| 89 | + |
| 90 | + MLX5_SET(modify_vport_state_in, in, opcode, |
| 91 | + MLX5_CMD_OP_MODIFY_VPORT_STATE); |
| 92 | + MLX5_SET(modify_vport_state_in, in, op_mod, opmod); |
| 93 | + MLX5_SET(modify_vport_state_in, in, vport_number, vport); |
| 94 | + |
| 95 | + if (vport) |
| 96 | + MLX5_SET(modify_vport_state_in, in, other_vport, 1); |
| 97 | + |
| 98 | + MLX5_SET(modify_vport_state_in, in, admin_state, state); |
| 99 | + |
| 100 | + err = mlx5_cmd_exec_check_status(mdev, in, sizeof(in), out, |
| 101 | + sizeof(out)); |
| 102 | + if (err) |
| 103 | + mlx5_core_warn(mdev, "MLX5_CMD_OP_MODIFY_VPORT_STATE failed\n"); |
| 104 | + |
| 105 | + return err; |
| 106 | +} |
| 107 | +EXPORT_SYMBOL(mlx5_modify_vport_admin_state); |
59 | 108 |
|
60 | 109 | static int mlx5_query_nic_vport_context(struct mlx5_core_dev *mdev, u16 vport,
|
61 | 110 | u32 *out, int outlen)
|
|
0 commit comments