diff options
Diffstat (limited to 'drivers/infiniband/hw/mlx5/cmd.c')
| -rw-r--r-- | drivers/infiniband/hw/mlx5/cmd.c | 27 | 
1 files changed, 27 insertions, 0 deletions
| diff --git a/drivers/infiniband/hw/mlx5/cmd.c b/drivers/infiniband/hw/mlx5/cmd.c index 188512bf46e6..c84fef9a8a08 100644 --- a/drivers/infiniband/hw/mlx5/cmd.c +++ b/drivers/infiniband/hw/mlx5/cmd.c @@ -32,6 +32,21 @@  #include "cmd.h" +int mlx5_cmd_dump_fill_mkey(struct mlx5_core_dev *dev, u32 *mkey) +{ +	u32 out[MLX5_ST_SZ_DW(query_special_contexts_out)] = {0}; +	u32 in[MLX5_ST_SZ_DW(query_special_contexts_in)]   = {0}; +	int err; + +	MLX5_SET(query_special_contexts_in, in, opcode, +		 MLX5_CMD_OP_QUERY_SPECIAL_CONTEXTS); +	err = mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out)); +	if (!err) +		*mkey = MLX5_GET(query_special_contexts_out, out, +				 dump_fill_mkey); +	return err; +} +  int mlx5_cmd_null_mkey(struct mlx5_core_dev *dev, u32 *null_mkey)  {  	u32 out[MLX5_ST_SZ_DW(query_special_contexts_out)] = {}; @@ -170,3 +185,15 @@ int mlx5_cmd_dealloc_memic(struct mlx5_memic *memic, u64 addr, u64 length)  	return err;  } + +int mlx5_cmd_query_ext_ppcnt_counters(struct mlx5_core_dev *dev, void *out) +{ +	u32 in[MLX5_ST_SZ_DW(ppcnt_reg)] = {}; +	int sz = MLX5_ST_SZ_BYTES(ppcnt_reg); + +	MLX5_SET(ppcnt_reg, in, local_port, 1); + +	MLX5_SET(ppcnt_reg, in, grp, MLX5_ETHERNET_EXTENDED_COUNTERS_GROUP); +	return  mlx5_core_access_reg(dev, in, sz, out, sz, MLX5_REG_PPCNT, +				     0, 0); +} |