Lines Matching defs:mhp
393 static int finish_mem_reg(struct c4iw_mr *mhp, u32 stag)
397 mhp->attr.state = 1;
398 mhp->attr.stag = stag;
400 mhp->ibmr.rkey = mhp->ibmr.lkey = stag;
401 mhp->ibmr.length = mhp->attr.len;
402 mhp->ibmr.page_size = 1U << (mhp->attr.page_size + 12);
403 pr_debug("mmid 0x%x mhp %p\n", mmid, mhp);
404 return xa_insert_irq(&mhp->rhp->mrs, mmid, mhp, GFP_KERNEL);
408 struct c4iw_mr *mhp, int shift)
413 ret = write_tpt_entry(&rhp->rdev, 0, &stag, 1, mhp->attr.pdid,
414 FW_RI_STAG_NSMR, mhp->attr.len ?
415 mhp->attr.perms : 0,
416 mhp->attr.mw_bind_enable, mhp->attr.zbva,
417 mhp->attr.va_fbo, mhp->attr.len ?
418 mhp->attr.len : -1, shift - 12,
419 mhp->attr.pbl_size, mhp->attr.pbl_addr, NULL,
420 mhp->wr_waitp);
424 ret = finish_mem_reg(mhp, stag);
426 dereg_mem(&rhp->rdev, mhp->attr.stag, mhp->attr.pbl_size,
427 mhp->attr.pbl_addr, mhp->dereg_skb, mhp->wr_waitp);
428 mhp->dereg_skb = NULL;
433 static int alloc_pbl(struct c4iw_mr *mhp, int npages)
435 mhp->attr.pbl_addr = c4iw_pblpool_alloc(&mhp->rhp->rdev,
438 if (!mhp->attr.pbl_addr)
441 mhp->attr.pbl_size = npages;
450 struct c4iw_mr *mhp;
458 mhp = kzalloc(sizeof(*mhp), GFP_KERNEL);
459 if (!mhp)
461 mhp->wr_waitp = c4iw_alloc_wr_wait(GFP_KERNEL);
462 if (!mhp->wr_waitp) {
466 c4iw_init_wr_wait(mhp->wr_waitp);
468 mhp->dereg_skb = alloc_skb(SGE_MAX_WR_LEN, GFP_KERNEL);
469 if (!mhp->dereg_skb) {
474 mhp->rhp = rhp;
475 mhp->attr.pdid = php->pdid;
476 mhp->attr.perms = c4iw_ib_to_tpt_access(acc);
477 mhp->attr.mw_bind_enable = (acc&IB_ACCESS_MW_BIND) == IB_ACCESS_MW_BIND;
478 mhp->attr.zbva = 0;
479 mhp->attr.va_fbo = 0;
480 mhp->attr.page_size = 0;
481 mhp->attr.len = ~0ULL;
482 mhp->attr.pbl_size = 0;
485 FW_RI_STAG_NSMR, mhp->attr.perms,
486 mhp->attr.mw_bind_enable, 0, 0, ~0ULL, 0, 0, 0,
487 NULL, mhp->wr_waitp);
491 ret = finish_mem_reg(mhp, stag);
494 return &mhp->ibmr;
496 dereg_mem(&rhp->rdev, mhp->attr.stag, mhp->attr.pbl_size,
497 mhp->attr.pbl_addr, mhp->dereg_skb, mhp->wr_waitp);
499 kfree_skb(mhp->dereg_skb);
501 c4iw_put_wr_wait(mhp->wr_waitp);
503 kfree(mhp);
516 struct c4iw_mr *mhp;
532 mhp = kzalloc(sizeof(*mhp), GFP_KERNEL);
533 if (!mhp)
535 mhp->wr_waitp = c4iw_alloc_wr_wait(GFP_KERNEL);
536 if (!mhp->wr_waitp)
539 mhp->dereg_skb = alloc_skb(SGE_MAX_WR_LEN, GFP_KERNEL);
540 if (!mhp->dereg_skb)
543 mhp->rhp = rhp;
545 mhp->umem = ib_umem_get(pd->device, start, length, acc);
546 if (IS_ERR(mhp->umem))
551 n = ib_umem_num_dma_blocks(mhp->umem, 1 << shift);
552 err = alloc_pbl(mhp, n);
564 rdma_umem_for_each_dma_block(mhp->umem, &biter, 1 << shift) {
567 err = write_pbl(&mhp->rhp->rdev, pages,
568 mhp->attr.pbl_addr + (n << 3), i,
569 mhp->wr_waitp);
578 err = write_pbl(&mhp->rhp->rdev, pages,
579 mhp->attr.pbl_addr + (n << 3), i,
580 mhp->wr_waitp);
587 mhp->attr.pdid = php->pdid;
588 mhp->attr.zbva = 0;
589 mhp->attr.perms = c4iw_ib_to_tpt_access(acc);
590 mhp->attr.va_fbo = virt;
591 mhp->attr.page_size = shift - 12;
592 mhp->attr.len = length;
594 err = register_mem(rhp, php, mhp, shift);
598 return &mhp->ibmr;
601 c4iw_pblpool_free(&mhp->rhp->rdev, mhp->attr.pbl_addr,
602 mhp->attr.pbl_size << 3);
604 ib_umem_release(mhp->umem);
606 kfree_skb(mhp->dereg_skb);
608 c4iw_put_wr_wait(mhp->wr_waitp);
610 kfree(mhp);
616 struct c4iw_mw *mhp = to_c4iw_mw(ibmw);
628 mhp->wr_waitp = c4iw_alloc_wr_wait(GFP_KERNEL);
629 if (!mhp->wr_waitp)
632 mhp->dereg_skb = alloc_skb(SGE_MAX_WR_LEN, GFP_KERNEL);
633 if (!mhp->dereg_skb) {
638 ret = allocate_window(&rhp->rdev, &stag, php->pdid, mhp->wr_waitp);
642 mhp->rhp = rhp;
643 mhp->attr.pdid = php->pdid;
644 mhp->attr.type = FW_RI_STAG_MW;
645 mhp->attr.stag = stag;
648 if (xa_insert_irq(&rhp->mrs, mmid, mhp, GFP_KERNEL)) {
652 pr_debug("mmid 0x%x mhp %p stag 0x%x\n", mmid, mhp, stag);
656 deallocate_window(&rhp->rdev, mhp->attr.stag, mhp->dereg_skb,
657 mhp->wr_waitp);
659 kfree_skb(mhp->dereg_skb);
661 c4iw_put_wr_wait(mhp->wr_waitp);
668 struct c4iw_mw *mhp;
671 mhp = to_c4iw_mw(mw);
672 rhp = mhp->rhp;
675 deallocate_window(&rhp->rdev, mhp->attr.stag, mhp->dereg_skb,
676 mhp->wr_waitp);
677 kfree_skb(mhp->dereg_skb);
678 c4iw_put_wr_wait(mhp->wr_waitp);
687 struct c4iw_mr *mhp;
701 mhp = kzalloc(sizeof(*mhp), GFP_KERNEL);
702 if (!mhp) {
707 mhp->wr_waitp = c4iw_alloc_wr_wait(GFP_KERNEL);
708 if (!mhp->wr_waitp) {
712 c4iw_init_wr_wait(mhp->wr_waitp);
714 mhp->mpl = dma_alloc_coherent(&rhp->rdev.lldi.pdev->dev,
715 length, &mhp->mpl_addr, GFP_KERNEL);
716 if (!mhp->mpl) {
720 mhp->max_mpl_len = length;
722 mhp->rhp = rhp;
723 ret = alloc_pbl(mhp, max_num_sg);
726 mhp->attr.pbl_size = max_num_sg;
728 mhp->attr.pbl_size, mhp->attr.pbl_addr,
729 mhp->wr_waitp);
732 mhp->attr.pdid = php->pdid;
733 mhp->attr.type = FW_RI_STAG_NSMR;
734 mhp->attr.stag = stag;
735 mhp->attr.state = 0;
737 mhp->ibmr.rkey = mhp->ibmr.lkey = stag;
738 if (xa_insert_irq(&rhp->mrs, mmid, mhp, GFP_KERNEL)) {
743 pr_debug("mmid 0x%x mhp %p stag 0x%x\n", mmid, mhp, stag);
744 return &(mhp->ibmr);
746 dereg_mem(&rhp->rdev, stag, mhp->attr.pbl_size,
747 mhp->attr.pbl_addr, mhp->dereg_skb, mhp->wr_waitp);
749 c4iw_pblpool_free(&mhp->rhp->rdev, mhp->attr.pbl_addr,
750 mhp->attr.pbl_size << 3);
752 dma_free_coherent(&mhp->rhp->rdev.lldi.pdev->dev,
753 mhp->max_mpl_len, mhp->mpl, mhp->mpl_addr);
755 c4iw_put_wr_wait(mhp->wr_waitp);
757 kfree(mhp);
764 struct c4iw_mr *mhp = to_c4iw_mr(ibmr);
766 if (unlikely(mhp->mpl_len == mhp->attr.pbl_size))
769 mhp->mpl[mhp->mpl_len++] = addr;
777 struct c4iw_mr *mhp = to_c4iw_mr(ibmr);
779 mhp->mpl_len = 0;
787 struct c4iw_mr *mhp;
792 mhp = to_c4iw_mr(ib_mr);
793 rhp = mhp->rhp;
794 mmid = mhp->attr.stag >> 8;
796 if (mhp->mpl)
797 dma_free_coherent(&mhp->rhp->rdev.lldi.pdev->dev,
798 mhp->max_mpl_len, mhp->mpl, mhp->mpl_addr);
799 dereg_mem(&rhp->rdev, mhp->attr.stag, mhp->attr.pbl_size,
800 mhp->attr.pbl_addr, mhp->dereg_skb, mhp->wr_waitp);
801 if (mhp->attr.pbl_size)
802 c4iw_pblpool_free(&mhp->rhp->rdev, mhp->attr.pbl_addr,
803 mhp->attr.pbl_size << 3);
804 if (mhp->kva)
805 kfree((void *) (unsigned long) mhp->kva);
806 ib_umem_release(mhp->umem);
807 pr_debug("mmid 0x%x ptr %p\n", mmid, mhp);
808 c4iw_put_wr_wait(mhp->wr_waitp);
809 kfree(mhp);
815 struct c4iw_mr *mhp;
819 mhp = xa_load(&rhp->mrs, rkey >> 8);
820 if (mhp)
821 mhp->attr.state = 0;