Lines Matching refs:mhp
360 static int finish_mem_reg(struct c4iw_mr *mhp, u32 stag) in finish_mem_reg() argument
364 mhp->attr.state = 1; in finish_mem_reg()
365 mhp->attr.stag = stag; in finish_mem_reg()
367 mhp->ibmr.rkey = mhp->ibmr.lkey = stag; in finish_mem_reg()
368 PDBG("%s mmid 0x%x mhp %p\n", __func__, mmid, mhp); in finish_mem_reg()
369 return insert_handle(mhp->rhp, &mhp->rhp->mmidr, mhp, mmid); in finish_mem_reg()
373 struct c4iw_mr *mhp, int shift) in register_mem() argument
378 ret = write_tpt_entry(&rhp->rdev, 0, &stag, 1, mhp->attr.pdid, in register_mem()
379 FW_RI_STAG_NSMR, mhp->attr.len ? in register_mem()
380 mhp->attr.perms : 0, in register_mem()
381 mhp->attr.mw_bind_enable, mhp->attr.zbva, in register_mem()
382 mhp->attr.va_fbo, mhp->attr.len ? in register_mem()
383 mhp->attr.len : -1, shift - 12, in register_mem()
384 mhp->attr.pbl_size, mhp->attr.pbl_addr); in register_mem()
388 ret = finish_mem_reg(mhp, stag); in register_mem()
390 dereg_mem(&rhp->rdev, mhp->attr.stag, mhp->attr.pbl_size, in register_mem()
391 mhp->attr.pbl_addr); in register_mem()
396 struct c4iw_mr *mhp, int shift, int npages) in reregister_mem() argument
401 if (npages > mhp->attr.pbl_size) in reregister_mem()
404 stag = mhp->attr.stag; in reregister_mem()
405 ret = write_tpt_entry(&rhp->rdev, 0, &stag, 1, mhp->attr.pdid, in reregister_mem()
406 FW_RI_STAG_NSMR, mhp->attr.perms, in reregister_mem()
407 mhp->attr.mw_bind_enable, mhp->attr.zbva, in reregister_mem()
408 mhp->attr.va_fbo, mhp->attr.len, shift - 12, in reregister_mem()
409 mhp->attr.pbl_size, mhp->attr.pbl_addr); in reregister_mem()
413 ret = finish_mem_reg(mhp, stag); in reregister_mem()
415 dereg_mem(&rhp->rdev, mhp->attr.stag, mhp->attr.pbl_size, in reregister_mem()
416 mhp->attr.pbl_addr); in reregister_mem()
421 static int alloc_pbl(struct c4iw_mr *mhp, int npages) in alloc_pbl() argument
423 mhp->attr.pbl_addr = c4iw_pblpool_alloc(&mhp->rhp->rdev, in alloc_pbl()
426 if (!mhp->attr.pbl_addr) in alloc_pbl()
429 mhp->attr.pbl_size = npages; in alloc_pbl()
507 struct c4iw_mr mh, *mhp; in c4iw_reregister_phys_mem() local
522 mhp = to_c4iw_mr(mr); in c4iw_reregister_phys_mem()
523 rhp = mhp->rhp; in c4iw_reregister_phys_mem()
530 memcpy(&mh, mhp, sizeof *mhp); in c4iw_reregister_phys_mem()
558 mhp->attr.pdid = php->pdid; in c4iw_reregister_phys_mem()
560 mhp->attr.perms = c4iw_ib_to_tpt_access(acc); in c4iw_reregister_phys_mem()
562 mhp->attr.zbva = 0; in c4iw_reregister_phys_mem()
563 mhp->attr.va_fbo = *iova_start; in c4iw_reregister_phys_mem()
564 mhp->attr.page_size = shift - 12; in c4iw_reregister_phys_mem()
565 mhp->attr.len = (u32) total_size; in c4iw_reregister_phys_mem()
566 mhp->attr.pbl_size = npages; in c4iw_reregister_phys_mem()
582 struct c4iw_mr *mhp; in c4iw_register_phys_mem() local
589 mhp = kzalloc(sizeof(*mhp), GFP_KERNEL); in c4iw_register_phys_mem()
590 if (!mhp) in c4iw_register_phys_mem()
593 mhp->rhp = rhp; in c4iw_register_phys_mem()
619 ret = alloc_pbl(mhp, npages); in c4iw_register_phys_mem()
625 ret = write_pbl(&mhp->rhp->rdev, page_list, mhp->attr.pbl_addr, in c4iw_register_phys_mem()
631 mhp->attr.pdid = php->pdid; in c4iw_register_phys_mem()
632 mhp->attr.zbva = 0; in c4iw_register_phys_mem()
634 mhp->attr.perms = c4iw_ib_to_tpt_access(acc); in c4iw_register_phys_mem()
635 mhp->attr.va_fbo = *iova_start; in c4iw_register_phys_mem()
636 mhp->attr.page_size = shift - 12; in c4iw_register_phys_mem()
638 mhp->attr.len = (u32) total_size; in c4iw_register_phys_mem()
639 mhp->attr.pbl_size = npages; in c4iw_register_phys_mem()
640 ret = register_mem(rhp, php, mhp, shift); in c4iw_register_phys_mem()
644 return &mhp->ibmr; in c4iw_register_phys_mem()
647 c4iw_pblpool_free(&mhp->rhp->rdev, mhp->attr.pbl_addr, in c4iw_register_phys_mem()
648 mhp->attr.pbl_size << 3); in c4iw_register_phys_mem()
651 kfree(mhp); in c4iw_register_phys_mem()
660 struct c4iw_mr *mhp; in c4iw_get_dma_mr() local
668 mhp = kzalloc(sizeof(*mhp), GFP_KERNEL); in c4iw_get_dma_mr()
669 if (!mhp) in c4iw_get_dma_mr()
672 mhp->rhp = rhp; in c4iw_get_dma_mr()
673 mhp->attr.pdid = php->pdid; in c4iw_get_dma_mr()
674 mhp->attr.perms = c4iw_ib_to_tpt_access(acc); in c4iw_get_dma_mr()
675 mhp->attr.mw_bind_enable = (acc&IB_ACCESS_MW_BIND) == IB_ACCESS_MW_BIND; in c4iw_get_dma_mr()
676 mhp->attr.zbva = 0; in c4iw_get_dma_mr()
677 mhp->attr.va_fbo = 0; in c4iw_get_dma_mr()
678 mhp->attr.page_size = 0; in c4iw_get_dma_mr()
679 mhp->attr.len = ~0ULL; in c4iw_get_dma_mr()
680 mhp->attr.pbl_size = 0; in c4iw_get_dma_mr()
683 FW_RI_STAG_NSMR, mhp->attr.perms, in c4iw_get_dma_mr()
684 mhp->attr.mw_bind_enable, 0, 0, ~0ULL, 0, 0, 0); in c4iw_get_dma_mr()
688 ret = finish_mem_reg(mhp, stag); in c4iw_get_dma_mr()
691 return &mhp->ibmr; in c4iw_get_dma_mr()
693 dereg_mem(&rhp->rdev, mhp->attr.stag, mhp->attr.pbl_size, in c4iw_get_dma_mr()
694 mhp->attr.pbl_addr); in c4iw_get_dma_mr()
696 kfree(mhp); in c4iw_get_dma_mr()
710 struct c4iw_mr *mhp; in c4iw_reg_user_mr() local
726 mhp = kzalloc(sizeof(*mhp), GFP_KERNEL); in c4iw_reg_user_mr()
727 if (!mhp) in c4iw_reg_user_mr()
730 mhp->rhp = rhp; in c4iw_reg_user_mr()
732 mhp->umem = ib_umem_get(pd->uobject->context, start, length, acc, 0); in c4iw_reg_user_mr()
733 if (IS_ERR(mhp->umem)) { in c4iw_reg_user_mr()
734 err = PTR_ERR(mhp->umem); in c4iw_reg_user_mr()
735 kfree(mhp); in c4iw_reg_user_mr()
739 shift = ffs(mhp->umem->page_size) - 1; in c4iw_reg_user_mr()
741 n = mhp->umem->nmap; in c4iw_reg_user_mr()
742 err = alloc_pbl(mhp, n); in c4iw_reg_user_mr()
754 for_each_sg(mhp->umem->sg_head.sgl, sg, mhp->umem->nmap, entry) { in c4iw_reg_user_mr()
758 mhp->umem->page_size * k); in c4iw_reg_user_mr()
760 err = write_pbl(&mhp->rhp->rdev, in c4iw_reg_user_mr()
762 mhp->attr.pbl_addr + (n << 3), i); in c4iw_reg_user_mr()
772 err = write_pbl(&mhp->rhp->rdev, pages, in c4iw_reg_user_mr()
773 mhp->attr.pbl_addr + (n << 3), i); in c4iw_reg_user_mr()
780 mhp->attr.pdid = php->pdid; in c4iw_reg_user_mr()
781 mhp->attr.zbva = 0; in c4iw_reg_user_mr()
782 mhp->attr.perms = c4iw_ib_to_tpt_access(acc); in c4iw_reg_user_mr()
783 mhp->attr.va_fbo = virt; in c4iw_reg_user_mr()
784 mhp->attr.page_size = shift - 12; in c4iw_reg_user_mr()
785 mhp->attr.len = length; in c4iw_reg_user_mr()
787 err = register_mem(rhp, php, mhp, shift); in c4iw_reg_user_mr()
791 return &mhp->ibmr; in c4iw_reg_user_mr()
794 c4iw_pblpool_free(&mhp->rhp->rdev, mhp->attr.pbl_addr, in c4iw_reg_user_mr()
795 mhp->attr.pbl_size << 3); in c4iw_reg_user_mr()
798 ib_umem_release(mhp->umem); in c4iw_reg_user_mr()
799 kfree(mhp); in c4iw_reg_user_mr()
807 struct c4iw_mw *mhp; in c4iw_alloc_mw() local
817 mhp = kzalloc(sizeof(*mhp), GFP_KERNEL); in c4iw_alloc_mw()
818 if (!mhp) in c4iw_alloc_mw()
822 kfree(mhp); in c4iw_alloc_mw()
825 mhp->rhp = rhp; in c4iw_alloc_mw()
826 mhp->attr.pdid = php->pdid; in c4iw_alloc_mw()
827 mhp->attr.type = FW_RI_STAG_MW; in c4iw_alloc_mw()
828 mhp->attr.stag = stag; in c4iw_alloc_mw()
830 mhp->ibmw.rkey = stag; in c4iw_alloc_mw()
831 if (insert_handle(rhp, &rhp->mmidr, mhp, mmid)) { in c4iw_alloc_mw()
832 deallocate_window(&rhp->rdev, mhp->attr.stag); in c4iw_alloc_mw()
833 kfree(mhp); in c4iw_alloc_mw()
836 PDBG("%s mmid 0x%x mhp %p stag 0x%x\n", __func__, mmid, mhp, stag); in c4iw_alloc_mw()
837 return &(mhp->ibmw); in c4iw_alloc_mw()
843 struct c4iw_mw *mhp; in c4iw_dealloc_mw() local
846 mhp = to_c4iw_mw(mw); in c4iw_dealloc_mw()
847 rhp = mhp->rhp; in c4iw_dealloc_mw()
850 deallocate_window(&rhp->rdev, mhp->attr.stag); in c4iw_dealloc_mw()
851 kfree(mhp); in c4iw_dealloc_mw()
852 PDBG("%s ib_mw %p mmid 0x%x ptr %p\n", __func__, mw, mmid, mhp); in c4iw_dealloc_mw()
860 struct c4iw_mr *mhp; in c4iw_alloc_fast_reg_mr() local
867 mhp = kzalloc(sizeof(*mhp), GFP_KERNEL); in c4iw_alloc_fast_reg_mr()
868 if (!mhp) { in c4iw_alloc_fast_reg_mr()
873 mhp->rhp = rhp; in c4iw_alloc_fast_reg_mr()
874 ret = alloc_pbl(mhp, pbl_depth); in c4iw_alloc_fast_reg_mr()
877 mhp->attr.pbl_size = pbl_depth; in c4iw_alloc_fast_reg_mr()
879 mhp->attr.pbl_size, mhp->attr.pbl_addr); in c4iw_alloc_fast_reg_mr()
882 mhp->attr.pdid = php->pdid; in c4iw_alloc_fast_reg_mr()
883 mhp->attr.type = FW_RI_STAG_NSMR; in c4iw_alloc_fast_reg_mr()
884 mhp->attr.stag = stag; in c4iw_alloc_fast_reg_mr()
885 mhp->attr.state = 1; in c4iw_alloc_fast_reg_mr()
887 mhp->ibmr.rkey = mhp->ibmr.lkey = stag; in c4iw_alloc_fast_reg_mr()
888 if (insert_handle(rhp, &rhp->mmidr, mhp, mmid)) { in c4iw_alloc_fast_reg_mr()
893 PDBG("%s mmid 0x%x mhp %p stag 0x%x\n", __func__, mmid, mhp, stag); in c4iw_alloc_fast_reg_mr()
894 return &(mhp->ibmr); in c4iw_alloc_fast_reg_mr()
896 dereg_mem(&rhp->rdev, stag, mhp->attr.pbl_size, in c4iw_alloc_fast_reg_mr()
897 mhp->attr.pbl_addr); in c4iw_alloc_fast_reg_mr()
899 c4iw_pblpool_free(&mhp->rhp->rdev, mhp->attr.pbl_addr, in c4iw_alloc_fast_reg_mr()
900 mhp->attr.pbl_size << 3); in c4iw_alloc_fast_reg_mr()
902 kfree(mhp); in c4iw_alloc_fast_reg_mr()
955 struct c4iw_mr *mhp; in c4iw_dereg_mr() local
963 mhp = to_c4iw_mr(ib_mr); in c4iw_dereg_mr()
964 rhp = mhp->rhp; in c4iw_dereg_mr()
965 mmid = mhp->attr.stag >> 8; in c4iw_dereg_mr()
967 dereg_mem(&rhp->rdev, mhp->attr.stag, mhp->attr.pbl_size, in c4iw_dereg_mr()
968 mhp->attr.pbl_addr); in c4iw_dereg_mr()
969 if (mhp->attr.pbl_size) in c4iw_dereg_mr()
970 c4iw_pblpool_free(&mhp->rhp->rdev, mhp->attr.pbl_addr, in c4iw_dereg_mr()
971 mhp->attr.pbl_size << 3); in c4iw_dereg_mr()
972 if (mhp->kva) in c4iw_dereg_mr()
973 kfree((void *) (unsigned long) mhp->kva); in c4iw_dereg_mr()
974 if (mhp->umem) in c4iw_dereg_mr()
975 ib_umem_release(mhp->umem); in c4iw_dereg_mr()
976 PDBG("%s mmid 0x%x ptr %p\n", __func__, mmid, mhp); in c4iw_dereg_mr()
977 kfree(mhp); in c4iw_dereg_mr()