Deleted Added
full compact
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 ---