Lines Matching refs:fmr

554 /* Free mr or fmr */
701 int mthca_free_fmr(struct mthca_dev *dev, struct mthca_fmr *fmr)
703 if (fmr->maps)
706 mthca_free_region(dev, fmr->ibmr.lkey);
707 mthca_free_mtt(dev, fmr->mtt);
712 static inline int mthca_check_fmr(struct mthca_fmr *fmr, u64 *page_list,
717 if (list_len > fmr->attr.max_pages)
720 page_mask = (1 << fmr->attr.page_shift) - 1;
733 if (fmr->maps >= fmr->attr.max_maps)
743 struct mthca_fmr *fmr = to_mfmr(ibfmr);
749 err = mthca_check_fmr(fmr, page_list, list_len, iova);
753 ++fmr->maps;
755 key = tavor_key_to_hw_index(fmr->ibmr.lkey);
757 fmr->ibmr.lkey = fmr->ibmr.rkey = tavor_hw_index_to_key(key);
759 writeb(MTHCA_MPT_STATUS_SW, fmr->mem.tavor.mpt);
764 mthca_write64_raw(mtt_entry, fmr->mem.tavor.mtts + i);
768 mpt_entry.length = cpu_to_be64(list_len * (1ull << fmr->attr.page_shift));
771 __raw_writel((__force u32) mpt_entry.lkey, &fmr->mem.tavor.mpt->key);
772 memcpy_toio(&fmr->mem.tavor.mpt->start, &mpt_entry.start,
776 writeb(MTHCA_MPT_STATUS_HW, fmr->mem.tavor.mpt);
784 struct mthca_fmr *fmr = to_mfmr(ibfmr);
789 err = mthca_check_fmr(fmr, page_list, list_len, iova);
793 ++fmr->maps;
795 key = arbel_key_to_hw_index(fmr->ibmr.lkey);
800 fmr->ibmr.lkey = fmr->ibmr.rkey = arbel_hw_index_to_key(key);
802 *(u8 *) fmr->mem.arbel.mpt = MTHCA_MPT_STATUS_SW;
807 fmr->mem.arbel.mtts[i] = cpu_to_be64(page_list[i] |
810 dma_sync_single(&dev->pdev->dev, fmr->mem.arbel.dma_handle,
813 fmr->mem.arbel.mpt->key = cpu_to_be32(key);
814 fmr->mem.arbel.mpt->lkey = cpu_to_be32(key);
815 fmr->mem.arbel.mpt->length = cpu_to_be64(list_len * (1ull << fmr->attr.page_shift));
816 fmr->mem.arbel.mpt->start = cpu_to_be64(iova);
820 *(u8 *) fmr->mem.arbel.mpt = MTHCA_MPT_STATUS_HW;
827 void mthca_tavor_fmr_unmap(struct mthca_dev *dev, struct mthca_fmr *fmr)
829 if (!fmr->maps)
832 fmr->maps = 0;
834 writeb(MTHCA_MPT_STATUS_SW, fmr->mem.tavor.mpt);
837 void mthca_arbel_fmr_unmap(struct mthca_dev *dev, struct mthca_fmr *fmr)
839 if (!fmr->maps)
842 fmr->maps = 0;
844 *(u8 *) fmr->mem.arbel.mpt = MTHCA_MPT_STATUS_SW;