• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/drivers/infiniband/hw/cxgb3/

Lines Matching refs:rdev_p

69 int cxio_hal_cq_op(struct cxio_rdev *rdev_p, struct t3_cq *cq,
80 ret = rdev_p->t3cdev_p->ctl(rdev_p->t3cdev_p, RDMA_CQ_OP, &setup);
113 rdev_p->dev_name);
124 static int cxio_hal_clear_cq_ctx(struct cxio_rdev *rdev_p, u32 cqid)
133 return (rdev_p->t3cdev_p->ctl(rdev_p->t3cdev_p, RDMA_CQ_SETUP, &setup));
136 static int cxio_hal_clear_qp_ctx(struct cxio_rdev *rdev_p, u32 qpid)
152 return (cxgb3_ofld_send(rdev_p->t3cdev_p, skb));
155 int cxio_create_cq(struct cxio_rdev *rdev_p, struct t3_cq *cq)
160 cq->cqid = cxio_hal_get_cqid(rdev_p->rscp);
166 cq->queue = dma_alloc_coherent(&(rdev_p->rnic_info.pdev->dev),
181 if (rdev_p->t3cdev_p->type == T3B)
185 return (rdev_p->t3cdev_p->ctl(rdev_p->t3cdev_p, RDMA_CQ_SETUP, &setup));
188 int cxio_resize_cq(struct cxio_rdev *rdev_p, struct t3_cq *cq)
197 return (rdev_p->t3cdev_p->ctl(rdev_p->t3cdev_p, RDMA_CQ_SETUP, &setup));
200 static u32 get_qpid(struct cxio_rdev *rdev_p, struct cxio_ucontext *uctx)
214 qpid = cxio_hal_get_qpid(rdev_p->rscp);
217 for (i = qpid+1; i & rdev_p->qpmask; i++) {
231 static void put_qpid(struct cxio_rdev *rdev_p, u32 qpid,
246 void cxio_release_ucontext(struct cxio_rdev *rdev_p, struct cxio_ucontext *uctx)
255 if (!(entry->qpid & rdev_p->qpmask))
256 cxio_hal_put_qpid(rdev_p->rscp, entry->qpid);
262 void cxio_init_ucontext(struct cxio_rdev *rdev_p, struct cxio_ucontext *uctx)
268 int cxio_create_qp(struct cxio_rdev *rdev_p, u32 kernel_domain,
274 wq->qpid = get_qpid(rdev_p, uctx);
282 wq->rq_addr = cxio_hal_rqtpool_alloc(rdev_p, rqsize);
290 wq->queue = dma_alloc_coherent(&(rdev_p->rnic_info.pdev->dev),
298 wq->doorbell = (void __iomem *)rdev_p->rnic_info.kdb_addr;
300 wq->udb = (u64)rdev_p->rnic_info.udbell_physbase +
301 (wq->qpid << rdev_p->qpshift);
308 cxio_hal_rqtpool_free(rdev_p, wq->rq_addr, rqsize);
312 put_qpid(rdev_p, wq->qpid, uctx);
316 int cxio_destroy_cq(struct cxio_rdev *rdev_p, struct t3_cq *cq)
319 err = cxio_hal_clear_cq_ctx(rdev_p, cq->cqid);
321 dma_free_coherent(&(rdev_p->rnic_info.pdev->dev),
325 cxio_hal_put_cqid(rdev_p->rscp, cq->cqid);
329 int cxio_destroy_qp(struct cxio_rdev *rdev_p, struct t3_wq *wq,
332 dma_free_coherent(&(rdev_p->rnic_info.pdev->dev),
337 cxio_hal_rqtpool_free(rdev_p, wq->rq_addr, (1UL << wq->rq_size_log2));
339 put_qpid(rdev_p, wq->qpid, uctx);
484 static int cxio_hal_init_ctrl_cq(struct cxio_rdev *rdev_p)
495 return (rdev_p->t3cdev_p->ctl(rdev_p->t3cdev_p, RDMA_CQ_SETUP, &setup));
498 static int cxio_hal_init_ctrl_qp(struct cxio_rdev *rdev_p)
511 err = cxio_hal_init_ctrl_cq(rdev_p);
516 rdev_p->ctrl_qp.workq = dma_alloc_coherent(
517 &(rdev_p->rnic_info.pdev->dev),
520 &(rdev_p->ctrl_qp.dma_addr),
522 if (!rdev_p->ctrl_qp.workq) {
527 pci_unmap_addr_set(&rdev_p->ctrl_qp, mapping,
528 rdev_p->ctrl_qp.dma_addr);
529 rdev_p->ctrl_qp.doorbell = (void __iomem *)rdev_p->rnic_info.kdb_addr;
530 memset(rdev_p->ctrl_qp.workq, 0,
533 mutex_init(&rdev_p->ctrl_qp.lock);
534 init_waitqueue_head(&rdev_p->ctrl_qp.waitq);
537 base_addr = rdev_p->ctrl_qp.dma_addr;
559 (unsigned long long) rdev_p->ctrl_qp.dma_addr,
560 rdev_p->ctrl_qp.workq, 1 << T3_CTRL_QP_SIZE_LOG2);
562 return (cxgb3_ofld_send(rdev_p->t3cdev_p, skb));
568 static int cxio_hal_destroy_ctrl_qp(struct cxio_rdev *rdev_p)
570 dma_free_coherent(&(rdev_p->rnic_info.pdev->dev),
572 * sizeof(union t3_wr), rdev_p->ctrl_qp.workq,
573 pci_unmap_addr(&rdev_p->ctrl_qp, mapping));
574 return cxio_hal_clear_qp_ctx(rdev_p, T3_CTRL_QP_ID);
581 static int cxio_hal_ctrl_qp_write_mem(struct cxio_rdev *rdev_p, u32 addr,
593 __FUNCTION__, rdev_p->ctrl_qp.wptr, rdev_p->ctrl_qp.rptr, len,
597 if (Q_FULL(rdev_p->ctrl_qp.rptr, rdev_p->ctrl_qp.wptr,
601 rdev_p->ctrl_qp.wptr, rdev_p->ctrl_qp.rptr, i);
602 if (wait_event_interruptible(rdev_p->ctrl_qp.waitq,
603 !Q_FULL(rdev_p->ctrl_qp.rptr,
604 rdev_p->ctrl_qp.wptr,
613 wqe = (__be64 *)(rdev_p->ctrl_qp.workq + (rdev_p->ctrl_qp.wptr %
655 wqe = (__be64 *)(rdev_p->ctrl_qp.workq + (rdev_p->ctrl_qp.wptr %
659 ((union t3_wrid *)(wqe+1))->id0.low = rdev_p->ctrl_qp.wptr;
666 Q_GENBIT(rdev_p->ctrl_qp.wptr,
670 ring_doorbell(rdev_p->ctrl_qp.doorbell, T3_CTRL_QP_ID);
672 rdev_p->ctrl_qp.wptr++;
681 static int __cxio_tpt_op(struct cxio_rdev *rdev_p, u32 reset_tpt_entry,
697 stag_idx = cxio_hal_get_stag(rdev_p->rscp);
706 cxio_hal_pblpool_free(rdev_p, *pbl_addr, *pbl_size << 3);
708 *pbl_addr = cxio_hal_pblpool_alloc(rdev_p, *pbl_size << 3);
714 mutex_lock(&rdev_p->ctrl_qp.lock);
720 __FUNCTION__, *pbl_addr, rdev_p->rnic_info.pbl_base,
722 err = cxio_hal_ctrl_qp_write_mem(rdev_p,
743 cpu_to_be32(V_TPT_PBL_ADDR(PBL_OFF(rdev_p, *pbl_addr)>>3));
751 err = cxio_hal_ctrl_qp_write_mem(rdev_p,
753 (rdev_p->rnic_info.tpt_base >> 5),
758 cxio_hal_put_stag(rdev_p->rscp, stag_idx);
760 wptr = rdev_p->ctrl_qp.wptr;
761 mutex_unlock(&rdev_p->ctrl_qp.lock);
763 if (wait_event_interruptible(rdev_p->ctrl_qp.waitq,
764 SEQ32_GE(rdev_p->ctrl_qp.rptr,
770 int cxio_register_phys_mem(struct cxio_rdev *rdev_p, u32 *stag, u32 pdid,
776 return __cxio_tpt_op(rdev_p, 0, stag, 1, pdid, TPT_NON_SHARED_MR, perm,
780 int cxio_reregister_phys_mem(struct cxio_rdev *rdev_p, u32 *stag, u32 pdid,
785 return __cxio_tpt_op(rdev_p, 0, stag, 1, pdid, TPT_NON_SHARED_MR, perm,
789 int cxio_dereg_mem(struct cxio_rdev *rdev_p, u32 stag, u32 pbl_size,
792 return __cxio_tpt_op(rdev_p, 1, &stag, 0, 0, 0, 0, 0, 0ULL, 0, 0, NULL,
796 int cxio_allocate_window(struct cxio_rdev *rdev_p, u32 * stag, u32 pdid)
800 return __cxio_tpt_op(rdev_p, 0, stag, 0, pdid, TPT_MW, 0, 0, 0ULL, 0, 0,
804 int cxio_deallocate_window(struct cxio_rdev *rdev_p, u32 stag)
806 return __cxio_tpt_op(rdev_p, 1, &stag, 0, 0, 0, 0, 0, 0ULL, 0, 0, NULL,
810 int cxio_rdma_init(struct cxio_rdev *rdev_p, struct t3_rdma_init_attr *attr)
816 PDBG("%s rdev_p %p\n", __FUNCTION__, rdev_p);
826 wqe->rq_addr = cpu_to_be32(attr->rq_addr - rdev_p->rnic_info.rqt_base);
838 return (cxgb3_ofld_send(rdev_p->t3cdev_p, skb));
854 struct cxio_rdev *rdev_p = NULL;
868 rdev_p = (struct cxio_rdev *)t3cdev_p->ulp;
869 if (!rdev_p) {
875 rdev_p->ctrl_qp.rptr = CQE_WRID_LOW(rsp_msg->cqe) + 1;
876 wake_up_interruptible(&rdev_p->ctrl_qp.waitq);
881 (*cxio_ev_cb) (rdev_p, skb);
889 int cxio_rdev_open(struct cxio_rdev *rdev_p)
893 if (strlen(rdev_p->dev_name)) {
894 if (cxio_hal_find_rdev_by_name(rdev_p->dev_name)) {
897 netdev_p = dev_get_by_name(rdev_p->dev_name);
902 } else if (rdev_p->t3cdev_p) {
903 if (cxio_hal_find_rdev_by_t3cdev(rdev_p->t3cdev_p)) {
906 netdev_p = rdev_p->t3cdev_p->lldev;
907 strncpy(rdev_p->dev_name, rdev_p->t3cdev_p->name,
914 list_add_tail(&rdev_p->entry, &rdev_list);
916 PDBG("%s opening rnic dev %s\n", __FUNCTION__, rdev_p->dev_name);
917 memset(&rdev_p->ctrl_qp, 0, sizeof(rdev_p->ctrl_qp));
918 if (!rdev_p->t3cdev_p)
919 rdev_p->t3cdev_p = T3CDEV(netdev_p);
920 rdev_p->t3cdev_p->ulp = (void *) rdev_p;
921 err = rdev_p->t3cdev_p->ctl(rdev_p->t3cdev_p, RDMA_GET_PARAMS,
922 &(rdev_p->rnic_info));
925 __FUNCTION__, rdev_p->t3cdev_p, err);
928 err = rdev_p->t3cdev_p->ctl(rdev_p->t3cdev_p, GET_PORTS,
929 &(rdev_p->port_info));
932 __FUNCTION__, rdev_p->t3cdev_p, err);
940 cxio_init_ucontext(rdev_p, &rdev_p->uctx);
941 rdev_p->qpshift = PAGE_SHIFT -
943 ilog2(rdev_p->rnic_info.udbell_len >>
945 rdev_p->qpnr = rdev_p->rnic_info.udbell_len >> PAGE_SHIFT;
946 rdev_p->qpmask = (65536 >> ilog2(rdev_p->qpnr)) - 1;
949 __FUNCTION__, rdev_p->dev_name, rdev_p->rnic_info.tpt_base,
950 rdev_p->rnic_info.tpt_top, cxio_num_stags(rdev_p),
951 rdev_p->rnic_info.pbl_base,
952 rdev_p->rnic_info.pbl_top, rdev_p->rnic_info.rqt_base,
953 rdev_p->rnic_info.rqt_top);
956 rdev_p->rnic_info.udbell_len,
957 rdev_p->rnic_info.udbell_physbase, rdev_p->rnic_info.kdb_addr,
958 rdev_p->qpshift, rdev_p->qpnr, rdev_p->qpmask);
960 err = cxio_hal_init_ctrl_qp(rdev_p);
966 err = cxio_hal_init_resource(rdev_p, cxio_num_stags(rdev_p), 0,
974 err = cxio_hal_pblpool_create(rdev_p);
980 err = cxio_hal_rqtpool_create(rdev_p);
988 cxio_hal_pblpool_destroy(rdev_p);
990 cxio_hal_destroy_resource(rdev_p->rscp);
992 cxio_hal_destroy_ctrl_qp(rdev_p);
994 list_del(&rdev_p->entry);
998 void cxio_rdev_close(struct cxio_rdev *rdev_p)
1000 if (rdev_p) {
1001 cxio_hal_pblpool_destroy(rdev_p);
1002 cxio_hal_rqtpool_destroy(rdev_p);
1003 list_del(&rdev_p->entry);
1004 rdev_p->t3cdev_p->ulp = NULL;
1005 cxio_hal_destroy_ctrl_qp(rdev_p);
1006 cxio_hal_destroy_resource(rdev_p->rscp);