Lines Matching refs:bfregi
615 static int max_bfregs(struct mlx5_ib_dev *dev, struct mlx5_bfreg_info *bfregi)
617 return get_num_static_uars(dev, bfregi) * MLX5_NON_FP_BFREGS_PER_UAR;
621 struct mlx5_bfreg_info *bfregi)
625 n = max_bfregs(dev, bfregi) - bfregi->num_low_latency_bfregs -
632 struct mlx5_bfreg_info *bfregi)
634 return num_med_bfreg(dev, bfregi) ? 1 : -ENOMEM;
638 struct mlx5_bfreg_info *bfregi)
642 med = num_med_bfreg(dev, bfregi);
647 struct mlx5_bfreg_info *bfregi)
651 for (i = first_hi_bfreg(dev, bfregi); i < max_bfregs(dev, bfregi); i++) {
652 if (!bfregi->count[i]) {
653 bfregi->count[i]++;
662 struct mlx5_bfreg_info *bfregi)
664 int minidx = first_med_bfreg(dev, bfregi);
670 for (i = minidx; i < first_hi_bfreg(dev, bfregi); i++) {
671 if (bfregi->count[i] < bfregi->count[minidx])
673 if (!bfregi->count[minidx])
677 bfregi->count[minidx]++;
682 struct mlx5_bfreg_info *bfregi)
686 if (bfregi->lib_uar_dyn)
689 mutex_lock(&bfregi->lock);
690 if (bfregi->ver >= 2) {
691 bfregn = alloc_high_class_bfreg(dev, bfregi);
693 bfregn = alloc_med_class_bfreg(dev, bfregi);
699 bfregi->count[bfregn]++;
701 mutex_unlock(&bfregi->lock);
706 void mlx5_ib_free_bfreg(struct mlx5_ib_dev *dev, struct mlx5_bfreg_info *bfregi, int bfregn)
708 mutex_lock(&bfregi->lock);
709 bfregi->count[bfregn]--;
710 mutex_unlock(&bfregi->lock);
750 struct mlx5_bfreg_info *bfregi, u32 bfregn,
757 if (bfregi->lib_uar_dyn)
760 bfregs_per_sys_page = get_uars_per_sys_page(dev, bfregi->lib_uar_4k) *
765 index_of_sys_page += bfregi->num_static_sys_pages;
767 if (index_of_sys_page >= bfregi->num_sys_pages)
770 if (bfregn > bfregi->num_dyn_bfregs ||
771 bfregi->sys_pages[index_of_sys_page] == MLX5_IB_INVALID_UAR_INDEX) {
778 return bfregi->sys_pages[index_of_sys_page] + offset;
884 struct mlx5_bfreg_info *bfregi, int bfregn)
921 uar_index = bfregn_to_uar_index(dev, &context->bfregi,
930 bfregn = alloc_bfreg(dev, &context->bfregi);
940 uar_index = bfregn_to_uar_index(dev, &context->bfregi, bfregn,
983 resp->bfreg_index = adjust_bfregn(dev, &context->bfregi, bfregn);
1004 mlx5_ib_free_bfreg(dev, &context->bfregi, bfregn);
1024 mlx5_ib_free_bfreg(dev, &context->bfregi, qp->bfregn);