iw_cxgb_provider.c (255932) | iw_cxgb_provider.c (278886) |
---|---|
1/************************************************************************** 2 3Copyright (c) 2007, Chelsio Inc. 4All rights reserved. 5 6Redistribution and use in source and binary forms, with or without 7modification, are permitted provided that the following conditions are met: 8 --- 13 unchanged lines hidden (view full) --- 22SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26POSSIBILITY OF SUCH DAMAGE. 27 28***************************************************************************/ 29#include <sys/cdefs.h> | 1/************************************************************************** 2 3Copyright (c) 2007, Chelsio Inc. 4All rights reserved. 5 6Redistribution and use in source and binary forms, with or without 7modification, are permitted provided that the following conditions are met: 8 --- 13 unchanged lines hidden (view full) --- 22SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26POSSIBILITY OF SUCH DAMAGE. 27 28***************************************************************************/ 29#include <sys/cdefs.h> |
30__FBSDID("$FreeBSD: head/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_provider.c 255932 2013-09-29 00:35:03Z alfred $"); | 30__FBSDID("$FreeBSD: head/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_provider.c 278886 2015-02-17 08:40:27Z hselasky $"); |
31 32#include "opt_inet.h" 33 34#ifdef TCP_OFFLOAD 35#include <sys/param.h> 36#include <sys/systm.h> 37#include <sys/kernel.h> 38#include <sys/bus.h> --- 132 unchanged lines hidden (view full) --- 171 mtx_unlock(&chp->lock); 172 173 cxio_destroy_cq(&chp->rhp->rdev, &chp->cq); 174 cxfree(chp); 175 return 0; 176} 177 178static struct ib_cq * | 31 32#include "opt_inet.h" 33 34#ifdef TCP_OFFLOAD 35#include <sys/param.h> 36#include <sys/systm.h> 37#include <sys/kernel.h> 38#include <sys/bus.h> --- 132 unchanged lines hidden (view full) --- 171 mtx_unlock(&chp->lock); 172 173 cxio_destroy_cq(&chp->rhp->rdev, &chp->cq); 174 cxfree(chp); 175 return 0; 176} 177 178static struct ib_cq * |
179iwch_create_cq(struct ib_device *ibdev, int entries, int vector, | 179iwch_create_cq(struct ib_device *ibdev, struct ib_cq_init_attr *attr, |
180 struct ib_ucontext *ib_context, 181 struct ib_udata *udata) 182{ 183 struct iwch_dev *rhp; 184 struct iwch_cq *chp; 185 struct iwch_create_cq_resp uresp; 186 struct iwch_create_cq_req ureq; 187 struct iwch_ucontext *ucontext = NULL; 188 static int warned; 189 size_t resplen; | 180 struct ib_ucontext *ib_context, 181 struct ib_udata *udata) 182{ 183 struct iwch_dev *rhp; 184 struct iwch_cq *chp; 185 struct iwch_create_cq_resp uresp; 186 struct iwch_create_cq_req ureq; 187 struct iwch_ucontext *ucontext = NULL; 188 static int warned; 189 size_t resplen; |
190 int entries = attr->cqe; |
|
190 191 CTR3(KTR_IW_CXGB, "%s ib_dev %p entries %d", __FUNCTION__, ibdev, entries); 192 rhp = to_iwch_dev(ibdev); 193 chp = malloc(sizeof(*chp), M_DEVBUF, M_NOWAIT|M_ZERO); 194 if (!chp) { 195 return ERR_PTR(-ENOMEM); 196 } 197 if (ib_context) { --- 342 unchanged lines hidden (view full) --- 540} 541 542 543static struct ib_mr *iwch_reg_user_mr(struct ib_pd *pd, u64 start, u64 length, 544 u64 virt, int acc, struct ib_udata *udata, 545 int mr_id) 546{ 547 __be64 *pages; | 191 192 CTR3(KTR_IW_CXGB, "%s ib_dev %p entries %d", __FUNCTION__, ibdev, entries); 193 rhp = to_iwch_dev(ibdev); 194 chp = malloc(sizeof(*chp), M_DEVBUF, M_NOWAIT|M_ZERO); 195 if (!chp) { 196 return ERR_PTR(-ENOMEM); 197 } 198 if (ib_context) { --- 342 unchanged lines hidden (view full) --- 541} 542 543 544static struct ib_mr *iwch_reg_user_mr(struct ib_pd *pd, u64 start, u64 length, 545 u64 virt, int acc, struct ib_udata *udata, 546 int mr_id) 547{ 548 __be64 *pages; |
548 int shift, i, n; | 549 int shift, n, len; 550 int i, k, entry; |
549 int err = 0; | 551 int err = 0; |
550 struct ib_umem_chunk *chunk; | |
551 struct iwch_dev *rhp; 552 struct iwch_pd *php; 553 struct iwch_mr *mhp; 554 struct iwch_reg_user_mr_resp uresp; | 552 struct iwch_dev *rhp; 553 struct iwch_pd *php; 554 struct iwch_mr *mhp; 555 struct iwch_reg_user_mr_resp uresp; |
555#ifdef notyet 556 int j, k, len; 557#endif | 556 struct scatterlist *sg; |
558 559 CTR2(KTR_IW_CXGB, "%s ib_pd %p", __FUNCTION__, pd); 560 561 php = to_iwch_pd(pd); 562 rhp = php->rhp; 563 mhp = malloc(sizeof(*mhp), M_DEVBUF, M_NOWAIT|M_ZERO); 564 if (!mhp) 565 return ERR_PTR(-ENOMEM); --- 4 unchanged lines hidden (view full) --- 570 if (IS_ERR(mhp->umem)) { 571 err = PTR_ERR(mhp->umem); 572 cxfree(mhp); 573 return ERR_PTR(-err); 574 } 575 576 shift = ffs(mhp->umem->page_size) - 1; 577 | 557 558 CTR2(KTR_IW_CXGB, "%s ib_pd %p", __FUNCTION__, pd); 559 560 php = to_iwch_pd(pd); 561 rhp = php->rhp; 562 mhp = malloc(sizeof(*mhp), M_DEVBUF, M_NOWAIT|M_ZERO); 563 if (!mhp) 564 return ERR_PTR(-ENOMEM); --- 4 unchanged lines hidden (view full) --- 569 if (IS_ERR(mhp->umem)) { 570 err = PTR_ERR(mhp->umem); 571 cxfree(mhp); 572 return ERR_PTR(-err); 573 } 574 575 shift = ffs(mhp->umem->page_size) - 1; 576 |
578 n = 0; 579 list_for_each_entry(chunk, &mhp->umem->chunk_list, list) 580 n += chunk->nents; | 577 n = mhp->umem->nmap; |
581 582 err = iwch_alloc_pbl(mhp, n); 583 if (err) 584 goto err; 585 586 pages = (__be64 *) kmalloc(n * sizeof(u64), M_NOWAIT); 587 if (!pages) { 588 err = -ENOMEM; 589 goto err_pbl; 590 } 591 592 i = n = 0; 593 | 578 579 err = iwch_alloc_pbl(mhp, n); 580 if (err) 581 goto err; 582 583 pages = (__be64 *) kmalloc(n * sizeof(u64), M_NOWAIT); 584 if (!pages) { 585 err = -ENOMEM; 586 goto err_pbl; 587 } 588 589 i = n = 0; 590 |
594#ifdef notyet | 591 for_each_sg(mhp->umem->sg_head.sgl, sg, mhp->umem->nmap, entry) { 592 len = sg_dma_len(sg) >> shift; 593 for (k = 0; k < len; ++k) { 594 pages[i++] = cpu_to_be64(sg_dma_address(sg) + 595 mhp->umem->page_size * k); 596 if (i == PAGE_SIZE / sizeof *pages) { 597 err = iwch_write_pbl(mhp, pages, i, n); 598 if (err) 599 goto pbl_done; 600 n += i; 601 i = 0; 602 } 603 } 604 } 605#if 0 |
595 TAILQ_FOREACH(chunk, &mhp->umem->chunk_list, entry) 596 for (j = 0; j < chunk->nmap; ++j) { 597 len = sg_dma_len(&chunk->page_list[j]) >> shift; 598 for (k = 0; k < len; ++k) { 599 pages[i++] = htobe64(sg_dma_address( 600 &chunk->page_list[j]) + 601 mhp->umem->page_size * k); 602 if (i == PAGE_SIZE / sizeof *pages) { --- 4 unchanged lines hidden (view full) --- 607 i = 0; 608 } 609 } 610 } 611#endif 612 613 if (i) 614 err = iwch_write_pbl(mhp, pages, i, n); | 606 TAILQ_FOREACH(chunk, &mhp->umem->chunk_list, entry) 607 for (j = 0; j < chunk->nmap; ++j) { 608 len = sg_dma_len(&chunk->page_list[j]) >> shift; 609 for (k = 0; k < len; ++k) { 610 pages[i++] = htobe64(sg_dma_address( 611 &chunk->page_list[j]) + 612 mhp->umem->page_size * k); 613 if (i == PAGE_SIZE / sizeof *pages) { --- 4 unchanged lines hidden (view full) --- 618 i = 0; 619 } 620 } 621 } 622#endif 623 624 if (i) 625 err = iwch_write_pbl(mhp, pages, i, n); |
615#ifdef notyet | |
616pbl_done: | 626pbl_done: |
617#endif | |
618 cxfree(pages); 619 if (err) 620 goto err_pbl; 621 622 mhp->attr.pdid = php->pdid; 623 mhp->attr.zbva = 0; 624 mhp->attr.perms = iwch_ib_to_tpt_access(acc); 625 mhp->attr.va_fbo = virt; --- 41 unchanged lines hidden (view full) --- 667 */ 668 bl.size = 0xffffffff; 669 bl.addr = 0; 670 kva = 0; 671 ibmr = iwch_register_phys_mem(pd, &bl, 1, acc, &kva); 672 return ibmr; 673} 674 | 627 cxfree(pages); 628 if (err) 629 goto err_pbl; 630 631 mhp->attr.pdid = php->pdid; 632 mhp->attr.zbva = 0; 633 mhp->attr.perms = iwch_ib_to_tpt_access(acc); 634 mhp->attr.va_fbo = virt; --- 41 unchanged lines hidden (view full) --- 676 */ 677 bl.size = 0xffffffff; 678 bl.addr = 0; 679 kva = 0; 680 ibmr = iwch_register_phys_mem(pd, &bl, 1, acc, &kva); 681 return ibmr; 682} 683 |
675static struct ib_mw *iwch_alloc_mw(struct ib_pd *pd) | 684static struct ib_mw *iwch_alloc_mw(struct ib_pd *pd, enum ib_mw_type type) |
676{ 677 struct iwch_dev *rhp; 678 struct iwch_pd *php; 679 struct iwch_mw *mhp; 680 u32 mmid; 681 u32 stag = 0; 682 int ret; 683 --- 475 unchanged lines hidden --- | 685{ 686 struct iwch_dev *rhp; 687 struct iwch_pd *php; 688 struct iwch_mw *mhp; 689 u32 mmid; 690 u32 stag = 0; 691 int ret; 692 --- 475 unchanged lines hidden --- |