Lines Matching refs:mdev

61 static int uars_per_sys_page(struct mlx5_core_dev *mdev)  in uars_per_sys_page()  argument
63 if (MLX5_CAP_GEN(mdev, uar_4k)) in uars_per_sys_page()
64 return MLX5_CAP_GEN(mdev, num_of_uars_per_page); in uars_per_sys_page()
69 static u64 uar2pfn(struct mlx5_core_dev *mdev, u32 index) in uar2pfn() argument
73 if (MLX5_CAP_GEN(mdev, uar_4k)) in uar2pfn()
78 return (mdev->bar_addr >> PAGE_SHIFT) + system_page_index; in uar2pfn()
87 if (mlx5_cmd_free_uar(up->mdev, up->index)) in up_rel_func()
88 mlx5_core_warn(up->mdev, "failed to free uar index %d\n", up->index); in up_rel_func()
94 static struct mlx5_uars_page *alloc_uars_page(struct mlx5_core_dev *mdev, in alloc_uars_page() argument
104 bfregs = uars_per_sys_page(mdev) * MLX5_BFREGS_PER_UAR; in alloc_uars_page()
105 node = mdev->priv.numa_node; in alloc_uars_page()
110 up->mdev = mdev; in alloc_uars_page()
129 err = mlx5_cmd_alloc_uar(mdev, &up->index); in alloc_uars_page()
131 mlx5_core_warn(mdev, "mlx5_cmd_alloc_uar() failed, %d\n", err); in alloc_uars_page()
135 pfn = uar2pfn(mdev, up->index); in alloc_uars_page()
150 mlx5_core_dbg(mdev, "allocated UAR page: index %d, total bfregs %d\n", in alloc_uars_page()
155 if (mlx5_cmd_free_uar(mdev, up->index)) in alloc_uars_page()
156 mlx5_core_warn(mdev, "failed to free uar index %d\n", up->index); in alloc_uars_page()
164 struct mlx5_uars_page *mlx5_get_uars_page(struct mlx5_core_dev *mdev) in mlx5_get_uars_page() argument
168 mutex_lock(&mdev->priv.bfregs.reg_head.lock); in mlx5_get_uars_page()
169 if (!list_empty(&mdev->priv.bfregs.reg_head.list)) { in mlx5_get_uars_page()
170 ret = list_first_entry(&mdev->priv.bfregs.reg_head.list, in mlx5_get_uars_page()
175 ret = alloc_uars_page(mdev, false); in mlx5_get_uars_page()
178 list_add(&ret->list, &mdev->priv.bfregs.reg_head.list); in mlx5_get_uars_page()
180 mutex_unlock(&mdev->priv.bfregs.reg_head.lock); in mlx5_get_uars_page()
186 void mlx5_put_uars_page(struct mlx5_core_dev *mdev, struct mlx5_uars_page *up) in mlx5_put_uars_page() argument
188 mutex_lock(&mdev->priv.bfregs.reg_head.lock); in mlx5_put_uars_page()
190 mutex_unlock(&mdev->priv.bfregs.reg_head.lock); in mlx5_put_uars_page()
194 static unsigned long map_offset(struct mlx5_core_dev *mdev, int dbi) in map_offset() argument
201 (1 << MLX5_CAP_GEN(mdev, log_bf_reg_size)) + MLX5_BF_OFFSET; in map_offset()
204 static int alloc_bfreg(struct mlx5_core_dev *mdev, struct mlx5_sq_bfreg *bfreg, in alloc_bfreg() argument
215 bfregs = &mdev->priv.bfregs; in alloc_bfreg()
225 up = alloc_uars_page(mdev, map_wc); in alloc_bfreg()
248 bfreg->map = up->map + map_offset(mdev, dbi); in alloc_bfreg()
257 int mlx5_alloc_bfreg(struct mlx5_core_dev *mdev, struct mlx5_sq_bfreg *bfreg, in mlx5_alloc_bfreg() argument
262 err = alloc_bfreg(mdev, bfreg, map_wc, fast_path); in mlx5_alloc_bfreg()
267 return alloc_bfreg(mdev, bfreg, false, fast_path); in mlx5_alloc_bfreg()
289 void mlx5_free_bfreg(struct mlx5_core_dev *mdev, struct mlx5_sq_bfreg *bfreg) in mlx5_free_bfreg() argument
300 bfregs = &mdev->priv.bfregs; in mlx5_free_bfreg()
309 dbi = addr_to_dbi_in_syspage(mdev, up, bfreg); in mlx5_free_bfreg()