• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/sys/dev/mlx5/mlx5_core/

Lines Matching defs:mdev

59 static int uars_per_sys_page(struct mlx5_core_dev *mdev)
61 if (MLX5_CAP_GEN(mdev, uar_4k))
62 return MLX5_CAP_GEN(mdev, num_of_uars_per_page);
67 static u64 uar2pfn(struct mlx5_core_dev *mdev, u32 index)
71 if (MLX5_CAP_GEN(mdev, uar_4k))
76 return (pci_resource_start(mdev->pdev, 0) >> PAGE_SHIFT) + system_page_index;
85 if (mlx5_cmd_free_uar(up->mdev, up->index))
86 mlx5_core_warn(up->mdev, "failed to free uar index %d\n", up->index);
92 static struct mlx5_uars_page *alloc_uars_page(struct mlx5_core_dev *mdev,
101 bfregs = uars_per_sys_page(mdev) * MLX5_BFREGS_PER_UAR;
106 up->mdev = mdev;
125 err = mlx5_cmd_alloc_uar(mdev, &up->index);
127 mlx5_core_warn(mdev, "mlx5_cmd_alloc_uar() failed, %d\n", err);
131 pfn = uar2pfn(mdev, up->index);
146 mlx5_core_dbg(mdev, "allocated UAR page: index %d, total bfregs %d\n",
151 if (mlx5_cmd_free_uar(mdev, up->index))
152 mlx5_core_warn(mdev, "failed to free uar index %d\n", up->index);
160 struct mlx5_uars_page *mlx5_get_uars_page(struct mlx5_core_dev *mdev)
164 mutex_lock(&mdev->priv.bfregs.reg_head.lock);
165 if (!list_empty(&mdev->priv.bfregs.reg_head.list)) {
166 ret = list_first_entry(&mdev->priv.bfregs.reg_head.list,
171 ret = alloc_uars_page(mdev, false);
174 list_add(&ret->list, &mdev->priv.bfregs.reg_head.list);
176 mutex_unlock(&mdev->priv.bfregs.reg_head.lock);
182 void mlx5_put_uars_page(struct mlx5_core_dev *mdev, struct mlx5_uars_page *up)
184 mutex_lock(&mdev->priv.bfregs.reg_head.lock);
186 mutex_unlock(&mdev->priv.bfregs.reg_head.lock);
190 static unsigned long map_offset(struct mlx5_core_dev *mdev, int dbi)
197 (1 << MLX5_CAP_GEN(mdev, log_bf_reg_size)) + MLX5_BF_OFFSET;
200 static int alloc_bfreg(struct mlx5_core_dev *mdev, struct mlx5_sq_bfreg *bfreg,
211 bfregs = &mdev->priv.bfregs;
221 up = alloc_uars_page(mdev, map_wc);
244 bfreg->map = up->map + map_offset(mdev, dbi);
253 int mlx5_alloc_bfreg(struct mlx5_core_dev *mdev, struct mlx5_sq_bfreg *bfreg,
258 err = alloc_bfreg(mdev, bfreg, map_wc, fast_path);
263 return alloc_bfreg(mdev, bfreg, false, fast_path);
285 void mlx5_free_bfreg(struct mlx5_core_dev *mdev, struct mlx5_sq_bfreg *bfreg)
296 bfregs = &mdev->priv.bfregs;
305 dbi = addr_to_dbi_in_syspage(mdev, up, bfreg);