Lines Matching refs:fmr

544 /* Free mr or fmr */
678 int mthca_free_fmr(struct mthca_dev *dev, struct mthca_fmr *fmr)
680 if (fmr->maps)
683 mthca_free_region(dev, fmr->ibmr.lkey);
684 mthca_free_mtt(dev, fmr->mtt);
689 static inline int mthca_check_fmr(struct mthca_fmr *fmr, u64 *page_list,
694 if (list_len > fmr->attr.max_pages)
697 page_mask = (1 << fmr->attr.page_shift) - 1;
710 if (fmr->maps >= fmr->attr.max_maps)
720 struct mthca_fmr *fmr = to_mfmr(ibfmr);
726 err = mthca_check_fmr(fmr, page_list, list_len, iova);
730 ++fmr->maps;
732 key = tavor_key_to_hw_index(fmr->ibmr.lkey);
734 fmr->ibmr.lkey = fmr->ibmr.rkey = tavor_hw_index_to_key(key);
736 writeb(MTHCA_MPT_STATUS_SW, fmr->mem.tavor.mpt);
741 mthca_write64_raw(mtt_entry, fmr->mem.tavor.mtts + i);
745 mpt_entry.length = cpu_to_be64(list_len * (1ull << fmr->attr.page_shift));
748 __raw_writel((__force u32) mpt_entry.lkey, &fmr->mem.tavor.mpt->key);
749 memcpy_toio(&fmr->mem.tavor.mpt->start, &mpt_entry.start,
753 writeb(MTHCA_MPT_STATUS_HW, fmr->mem.tavor.mpt);
761 struct mthca_fmr *fmr = to_mfmr(ibfmr);
766 err = mthca_check_fmr(fmr, page_list, list_len, iova);
770 ++fmr->maps;
772 key = arbel_key_to_hw_index(fmr->ibmr.lkey);
777 fmr->ibmr.lkey = fmr->ibmr.rkey = arbel_hw_index_to_key(key);
779 *(u8 *) fmr->mem.arbel.mpt = MTHCA_MPT_STATUS_SW;
783 dma_sync_single_for_cpu(&dev->pdev->dev, fmr->mem.arbel.dma_handle,
787 fmr->mem.arbel.mtts[i] = cpu_to_be64(page_list[i] |
790 dma_sync_single_for_device(&dev->pdev->dev, fmr->mem.arbel.dma_handle,
793 fmr->mem.arbel.mpt->key = cpu_to_be32(key);
794 fmr->mem.arbel.mpt->lkey = cpu_to_be32(key);
795 fmr->mem.arbel.mpt->length = cpu_to_be64(list_len * (1ull << fmr->attr.page_shift));
796 fmr->mem.arbel.mpt->start = cpu_to_be64(iova);
800 *(u8 *) fmr->mem.arbel.mpt = MTHCA_MPT_STATUS_HW;
807 void mthca_tavor_fmr_unmap(struct mthca_dev *dev, struct mthca_fmr *fmr)
809 if (!fmr->maps)
812 fmr->maps = 0;
814 writeb(MTHCA_MPT_STATUS_SW, fmr->mem.tavor.mpt);
817 void mthca_arbel_fmr_unmap(struct mthca_dev *dev, struct mthca_fmr *fmr)
819 if (!fmr->maps)
822 fmr->maps = 0;
824 *(u8 *) fmr->mem.arbel.mpt = MTHCA_MPT_STATUS_SW;