Lines Matching refs:pble_rsrc

10 static int add_pble_prm(struct irdma_hmc_pble_rsrc *pble_rsrc);
16 void irdma_destroy_pble_prm(struct irdma_hmc_pble_rsrc *pble_rsrc) in irdma_destroy_pble_prm() argument
19 struct irdma_pble_prm *pinfo = &pble_rsrc->pinfo; in irdma_destroy_pble_prm()
37 struct irdma_hmc_pble_rsrc *pble_rsrc) in irdma_hmc_init_pble() argument
44 pble_rsrc->dev = dev; in irdma_hmc_init_pble()
45 pble_rsrc->fpm_base_addr = hmc_info->hmc_obj[IRDMA_HMC_IW_PBLE].base; in irdma_hmc_init_pble()
47 if (pble_rsrc->fpm_base_addr & 0xfff) in irdma_hmc_init_pble()
48 fpm_idx = (4096 - (pble_rsrc->fpm_base_addr & 0xfff)) >> 3; in irdma_hmc_init_pble()
49 pble_rsrc->unallocated_pble = in irdma_hmc_init_pble()
51 pble_rsrc->next_fpm_addr = pble_rsrc->fpm_base_addr + (fpm_idx << 3); in irdma_hmc_init_pble()
52 pble_rsrc->pinfo.pble_shift = PBLE_SHIFT; in irdma_hmc_init_pble()
54 mutex_init(&pble_rsrc->pble_mutex_lock); in irdma_hmc_init_pble()
56 spin_lock_init(&pble_rsrc->pinfo.prm_lock); in irdma_hmc_init_pble()
57 INIT_LIST_HEAD(&pble_rsrc->pinfo.clist); in irdma_hmc_init_pble()
58 if (add_pble_prm(pble_rsrc)) { in irdma_hmc_init_pble()
59 irdma_destroy_pble_prm(pble_rsrc); in irdma_hmc_init_pble()
71 static void get_sd_pd_idx(struct irdma_hmc_pble_rsrc *pble_rsrc, in get_sd_pd_idx() argument
74 idx->sd_idx = (u32)pble_rsrc->next_fpm_addr / IRDMA_HMC_DIRECT_BP_SIZE; in get_sd_pd_idx()
75 idx->pd_idx = (u32)(pble_rsrc->next_fpm_addr / IRDMA_HMC_PAGED_BP_SIZE); in get_sd_pd_idx()
84 static int add_sd_direct(struct irdma_hmc_pble_rsrc *pble_rsrc, in add_sd_direct() argument
87 struct irdma_sc_dev *dev = pble_rsrc->dev; in add_sd_direct()
109 chunk->fpm_addr = pble_rsrc->next_fpm_addr; in add_sd_direct()
122 static u32 fpm_to_idx(struct irdma_hmc_pble_rsrc *pble_rsrc, u64 addr) in fpm_to_idx() argument
126 idx = (addr - (pble_rsrc->fpm_base_addr)) >> 3; in fpm_to_idx()
136 static int add_bp_pages(struct irdma_hmc_pble_rsrc *pble_rsrc, in add_bp_pages() argument
139 struct irdma_sc_dev *dev = pble_rsrc->dev; in add_bp_pages()
176 chunk->fpm_addr = pble_rsrc->next_fpm_addr; in add_bp_pages()
205 static int add_pble_prm(struct irdma_hmc_pble_rsrc *pble_rsrc) in add_pble_prm() argument
207 struct irdma_sc_dev *dev = pble_rsrc->dev; in add_pble_prm()
219 if (pble_rsrc->unallocated_pble < PBLE_PER_PAGE) in add_pble_prm()
222 if (pble_rsrc->next_fpm_addr & 0xfff) in add_pble_prm()
234 chunk->fpm_addr = pble_rsrc->next_fpm_addr; in add_pble_prm()
235 get_sd_pd_idx(pble_rsrc, idx); in add_pble_prm()
239 pages = min(pages, pble_rsrc->unallocated_pble >> PBLE_512_SHIFT); in add_pble_prm()
251 pages, pble_rsrc->unallocated_pble, in add_pble_prm()
252 pble_rsrc->next_fpm_addr); in add_pble_prm()
255 ret_code = add_sd_direct(pble_rsrc, &info); in add_pble_prm()
260 pble_rsrc->stats_direct_sds++; in add_pble_prm()
263 ret_code = add_bp_pages(pble_rsrc, &info); in add_pble_prm()
267 pble_rsrc->stats_paged_sds++; in add_pble_prm()
270 ret_code = irdma_prm_add_pble_mem(&pble_rsrc->pinfo, chunk); in add_pble_prm()
274 pble_rsrc->next_fpm_addr += chunk->size; in add_pble_prm()
277 pble_rsrc->next_fpm_addr, chunk->size, chunk->size); in add_pble_prm()
278 pble_rsrc->unallocated_pble -= (u32)(chunk->size >> 3); in add_pble_prm()
290 list_add(&chunk->list, &pble_rsrc->pinfo.clist); in add_pble_prm()
306 static void free_lvl2(struct irdma_hmc_pble_rsrc *pble_rsrc, in free_lvl2() argument
316 irdma_prm_return_pbles(&pble_rsrc->pinfo, in free_lvl2()
323 irdma_prm_return_pbles(&pble_rsrc->pinfo, &root->chunkinfo); in free_lvl2()
334 static int get_lvl2_pble(struct irdma_hmc_pble_rsrc *pble_rsrc, in get_lvl2_pble() argument
359 ret_code = irdma_prm_get_pbles(&pble_rsrc->pinfo, &root->chunkinfo, in get_lvl2_pble()
367 root->idx = fpm_to_idx(pble_rsrc, fpm_addr); in get_lvl2_pble()
373 ret_code = irdma_prm_get_pbles(&pble_rsrc->pinfo, in get_lvl2_pble()
379 leaf->idx = fpm_to_idx(pble_rsrc, fpm_addr); in get_lvl2_pble()
387 pble_rsrc->stats_lvl2++; in get_lvl2_pble()
391 free_lvl2(pble_rsrc, palloc); in get_lvl2_pble()
401 static int get_lvl1_pble(struct irdma_hmc_pble_rsrc *pble_rsrc, in get_lvl1_pble() argument
408 ret_code = irdma_prm_get_pbles(&pble_rsrc->pinfo, &lvl1->chunkinfo, in get_lvl1_pble()
415 lvl1->idx = fpm_to_idx(pble_rsrc, fpm_addr); in get_lvl1_pble()
417 pble_rsrc->stats_lvl1++; in get_lvl1_pble()
428 static int get_lvl1_lvl2_pble(struct irdma_hmc_pble_rsrc *pble_rsrc, in get_lvl1_lvl2_pble() argument
433 status = get_lvl1_pble(pble_rsrc, palloc); in get_lvl1_lvl2_pble()
437 status = get_lvl2_pble(pble_rsrc, palloc); in get_lvl1_lvl2_pble()
449 int irdma_get_pble(struct irdma_hmc_pble_rsrc *pble_rsrc, in irdma_get_pble() argument
460 mutex_lock(&pble_rsrc->pble_mutex_lock); in irdma_get_pble()
465 status = get_lvl1_lvl2_pble(pble_rsrc, palloc, lvl); in irdma_get_pble()
471 status = add_pble_prm(pble_rsrc); in irdma_get_pble()
475 status = get_lvl1_lvl2_pble(pble_rsrc, palloc, lvl); in irdma_get_pble()
483 pble_rsrc->allocdpbles += pble_cnt; in irdma_get_pble()
484 pble_rsrc->stats_alloc_ok++; in irdma_get_pble()
486 pble_rsrc->stats_alloc_fail++; in irdma_get_pble()
488 mutex_unlock(&pble_rsrc->pble_mutex_lock); in irdma_get_pble()
498 void irdma_free_pble(struct irdma_hmc_pble_rsrc *pble_rsrc, in irdma_free_pble() argument
501 pble_rsrc->freedpbles += palloc->total_cnt; in irdma_free_pble()
504 free_lvl2(pble_rsrc, palloc); in irdma_free_pble()
506 irdma_prm_return_pbles(&pble_rsrc->pinfo, in irdma_free_pble()
508 pble_rsrc->stats_alloc_freed++; in irdma_free_pble()