Lines Matching refs:fmr

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