Lines Matching defs:bfregi

697 static int max_bfregs(struct mlx5_ib_dev *dev, struct mlx5_bfreg_info *bfregi)
699 return get_uars_per_sys_page(dev, bfregi->lib_uar_4k) *
700 bfregi->num_static_sys_pages * MLX5_NON_FP_BFREGS_PER_UAR;
704 struct mlx5_bfreg_info *bfregi)
708 n = max_bfregs(dev, bfregi) - bfregi->num_low_latency_bfregs -
715 struct mlx5_bfreg_info *bfregi)
717 return num_med_bfreg(dev, bfregi) ? 1 : -ENOMEM;
721 struct mlx5_bfreg_info *bfregi)
725 med = num_med_bfreg(dev, bfregi);
730 struct mlx5_bfreg_info *bfregi)
734 for (i = first_hi_bfreg(dev, bfregi); i < max_bfregs(dev, bfregi); i++) {
735 if (!bfregi->count[i]) {
736 bfregi->count[i]++;
745 struct mlx5_bfreg_info *bfregi)
747 int minidx = first_med_bfreg(dev, bfregi);
753 for (i = minidx; i < first_hi_bfreg(dev, bfregi); i++) {
754 if (bfregi->count[i] < bfregi->count[minidx])
756 if (!bfregi->count[minidx])
760 bfregi->count[minidx]++;
765 struct mlx5_bfreg_info *bfregi)
769 if (bfregi->lib_uar_dyn)
772 mutex_lock(&bfregi->lock);
773 if (bfregi->ver >= 2) {
774 bfregn = alloc_high_class_bfreg(dev, bfregi);
776 bfregn = alloc_med_class_bfreg(dev, bfregi);
782 bfregi->count[bfregn]++;
784 mutex_unlock(&bfregi->lock);
789 void mlx5_ib_free_bfreg(struct mlx5_ib_dev *dev, struct mlx5_bfreg_info *bfregi, int bfregn)
791 mutex_lock(&bfregi->lock);
792 bfregi->count[bfregn]--;
793 mutex_unlock(&bfregi->lock);
833 struct mlx5_bfreg_info *bfregi, u32 bfregn,
840 if (bfregi->lib_uar_dyn)
843 bfregs_per_sys_page = get_uars_per_sys_page(dev, bfregi->lib_uar_4k) *
848 index_of_sys_page += bfregi->num_static_sys_pages;
850 if (index_of_sys_page >= bfregi->num_sys_pages)
853 if (bfregn > bfregi->num_dyn_bfregs ||
854 bfregi->sys_pages[index_of_sys_page] == MLX5_IB_INVALID_UAR_INDEX) {
861 return bfregi->sys_pages[index_of_sys_page] + offset;
935 struct mlx5_bfreg_info *bfregi, int bfregn)
971 uar_index = bfregn_to_uar_index(dev, &context->bfregi,
980 bfregn = alloc_bfreg(dev, &context->bfregi);
990 uar_index = bfregn_to_uar_index(dev, &context->bfregi, bfregn,
1042 resp->bfreg_index = adjust_bfregn(dev, &context->bfregi, bfregn);
1063 mlx5_ib_free_bfreg(dev, &context->bfregi, bfregn);
1083 mlx5_ib_free_bfreg(dev, &context->bfregi, qp->bfregn);