Lines Matching defs:pble_rsrc

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