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()
719 struct mthca_fmr *fmr = to_mfmr(ibfmr); in mthca_tavor_map_phys_fmr() local
725 err = mthca_check_fmr(fmr, page_list, list_len, iova); in mthca_tavor_map_phys_fmr()
729 ++fmr->maps; in mthca_tavor_map_phys_fmr()
731 key = tavor_key_to_hw_index(fmr->ibmr.lkey); in mthca_tavor_map_phys_fmr()
733 fmr->ibmr.lkey = fmr->ibmr.rkey = tavor_hw_index_to_key(key); in mthca_tavor_map_phys_fmr()
735 writeb(MTHCA_MPT_STATUS_SW, fmr->mem.tavor.mpt); in mthca_tavor_map_phys_fmr()
740 mthca_write64_raw(mtt_entry, fmr->mem.tavor.mtts + i); in mthca_tavor_map_phys_fmr()
744 mpt_entry.length = cpu_to_be64(list_len * (1ull << fmr->attr.page_shift)); in mthca_tavor_map_phys_fmr()
747 __raw_writel((__force u32) mpt_entry.lkey, &fmr->mem.tavor.mpt->key); in mthca_tavor_map_phys_fmr()
748 memcpy_toio(&fmr->mem.tavor.mpt->start, &mpt_entry.start, in mthca_tavor_map_phys_fmr()
752 writeb(MTHCA_MPT_STATUS_HW, fmr->mem.tavor.mpt); in mthca_tavor_map_phys_fmr()
760 struct mthca_fmr *fmr = to_mfmr(ibfmr); in mthca_arbel_map_phys_fmr() local
765 err = mthca_check_fmr(fmr, page_list, list_len, iova); in mthca_arbel_map_phys_fmr()
769 ++fmr->maps; in mthca_arbel_map_phys_fmr()
771 key = arbel_key_to_hw_index(fmr->ibmr.lkey); in mthca_arbel_map_phys_fmr()
776 fmr->ibmr.lkey = fmr->ibmr.rkey = arbel_hw_index_to_key(key); in mthca_arbel_map_phys_fmr()
778 *(u8 *) fmr->mem.arbel.mpt = MTHCA_MPT_STATUS_SW; in mthca_arbel_map_phys_fmr()
782 dma_sync_single_for_cpu(&dev->pdev->dev, fmr->mem.arbel.dma_handle, in mthca_arbel_map_phys_fmr()
786 fmr->mem.arbel.mtts[i] = cpu_to_be64(page_list[i] | in mthca_arbel_map_phys_fmr()
789 dma_sync_single_for_device(&dev->pdev->dev, fmr->mem.arbel.dma_handle, in mthca_arbel_map_phys_fmr()
792 fmr->mem.arbel.mpt->key = cpu_to_be32(key); in mthca_arbel_map_phys_fmr()
793 fmr->mem.arbel.mpt->lkey = cpu_to_be32(key); in mthca_arbel_map_phys_fmr()
794 fmr->mem.arbel.mpt->length = cpu_to_be64(list_len * (1ull << fmr->attr.page_shift)); in mthca_arbel_map_phys_fmr()
795 fmr->mem.arbel.mpt->start = cpu_to_be64(iova); in mthca_arbel_map_phys_fmr()
799 *(u8 *) fmr->mem.arbel.mpt = MTHCA_MPT_STATUS_HW; in mthca_arbel_map_phys_fmr()
806 void mthca_tavor_fmr_unmap(struct mthca_dev *dev, struct mthca_fmr *fmr) in mthca_tavor_fmr_unmap() argument
808 if (!fmr->maps) in mthca_tavor_fmr_unmap()
811 fmr->maps = 0; in mthca_tavor_fmr_unmap()
813 writeb(MTHCA_MPT_STATUS_SW, fmr->mem.tavor.mpt); in mthca_tavor_fmr_unmap()
816 void mthca_arbel_fmr_unmap(struct mthca_dev *dev, struct mthca_fmr *fmr) in mthca_arbel_fmr_unmap() argument
818 if (!fmr->maps) in mthca_arbel_fmr_unmap()
821 fmr->maps = 0; in mthca_arbel_fmr_unmap()
823 *(u8 *) fmr->mem.arbel.mpt = MTHCA_MPT_STATUS_SW; in mthca_arbel_fmr_unmap()