Date: Tue, 13 Nov 2007 00:55:11 GMT From: Steve Wise <swise@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 129007 for review Message-ID: <200711130055.lAD0tBga080384@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=129007 Change 129007 by swise@swise:vic10:iwarp on 2007/11/13 00:54:56 iw_cxgb loads and registers with rdma_core. (still lots o' hacks). Affected files ... .. //depot/projects/iwarp/sys/dev/cxgb/common/cxgb_ctl_defs.h#3 edit .. //depot/projects/iwarp/sys/dev/cxgb/cxgb_offload.c#4 edit .. //depot/projects/iwarp/sys/dev/cxgb/cxgb_osdep.h#3 edit .. //depot/projects/iwarp/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_cxio_hal.c#2 edit .. //depot/projects/iwarp/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_cxio_resource.c#2 edit .. //depot/projects/iwarp/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_iwch.c#2 edit .. //depot/projects/iwarp/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_iwch_provider.c#2 edit Differences ... ==== //depot/projects/iwarp/sys/dev/cxgb/common/cxgb_ctl_defs.h#3 (text+ko) ==== @@ -126,7 +126,7 @@ unsigned int udbell_len; /* user doorbell region length */ unsigned long udbell_physbase; /* user doorbell physical start addr */ void *kdb_addr; /* kernel doorbell register address */ - struct pci_dev *pdev; /* associated PCI device */ + struct device *pdev; /* associated PCI device */ }; /* ==== //depot/projects/iwarp/sys/dev/cxgb/cxgb_offload.c#4 (text+ko) ==== @@ -303,6 +303,7 @@ req->rqt_base = t3_read_reg(adapter, A_ULPRX_RQ_LLIMIT); req->rqt_top = t3_read_reg(adapter, A_ULPRX_RQ_ULIMIT); req->kdb_addr = (void *)(rman_get_start(adapter->regs_res) + A_SG_KDOORBELL); + req->pdev = adapter->dev; break; } case RDMA_CQ_OP: { ==== //depot/projects/iwarp/sys/dev/cxgb/cxgb_osdep.h#3 (text+ko) ==== ==== //depot/projects/iwarp/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_cxio_hal.c#2 (text+ko) ==== @@ -207,7 +207,7 @@ cq->sw_queue = malloc(size, M_DEVBUF, M_WAITOK|M_ZERO); if (!cq->sw_queue) return (ENOMEM); - cq->queue = dma_alloc_coherent(rdev_p->rnic_info.pdev->dev, + cq->queue = dma_alloc_coherent(rdev_p->rnic_info.pdev, (1UL << (cq->size_log2)) * sizeof(struct t3_cqe), &(cq->dma_addr), M_WAITOK); @@ -307,7 +307,7 @@ cxio_init_ucontext(struct cxio_rdev *rdev_p, struct cxio_ucontext *uctx) { TAILQ_INIT(&uctx->qpids); - mtx_init(&uctx->lock, "cxio ctx", NULL, MTX_DEF); + mtx_init(&uctx->lock, "cxio uctx", NULL, MTX_DEF|MTX_DUPOK); } int @@ -333,7 +333,7 @@ if (!wq->sq) goto err3; - wq->queue = dma_alloc_coherent(rdev_p->rnic_info.pdev->dev, + wq->queue = dma_alloc_coherent(rdev_p->rnic_info.pdev, depth * sizeof(union t3_wr), &(wq->dma_addr), M_WAITOK); if (!wq->queue) @@ -365,7 +365,7 @@ int err; err = cxio_hal_clear_cq_ctx(rdev_p, cq->cqid); free(cq->sw_queue, M_DEVBUF); - dma_free_coherent(&(rdev_p->rnic_info.pdev->dev), + dma_free_coherent(&(rdev_p->rnic_info.pdev), (1UL << (cq->size_log2)) * sizeof(struct t3_cqe), cq->queue, pci_unmap_addr(cq, mapping)); @@ -377,7 +377,7 @@ cxio_destroy_qp(struct cxio_rdev *rdev_p, struct t3_wq *wq, struct cxio_ucontext *uctx) { - dma_free_coherent(&(rdev_p->rnic_info.pdev->dev), + dma_free_coherent(&(rdev_p->rnic_info.pdev), (1UL << (wq->size_log2)) * sizeof(union t3_wr), wq->queue, pci_unmap_addr(wq, mapping)); @@ -571,7 +571,7 @@ goto err; } rdev_p->ctrl_qp.workq = dma_alloc_coherent( - rdev_p->rnic_info.pdev->dev, + rdev_p->rnic_info.pdev, (1 << T3_CTRL_QP_SIZE_LOG2) * sizeof(union t3_wr), &(rdev_p->ctrl_qp.dma_addr), @@ -587,8 +587,8 @@ memset(rdev_p->ctrl_qp.workq, 0, (1 << T3_CTRL_QP_SIZE_LOG2) * sizeof(union t3_wr)); - mtx_init(&rdev_p->ctrl_qp.lock, "qp lock", NULL, MTX_DEF); - cv_init(&rdev_p->ctrl_qp.waitq, "qp wait"); + mtx_init(&rdev_p->ctrl_qp.lock, "ctrl-qp lock", NULL, MTX_DEF|MTX_DUPOK); + cv_init(&rdev_p->ctrl_qp.waitq, "ctrl-qp wait"); /* update HW Ctrl QP context */ base_addr = rdev_p->ctrl_qp.dma_addr; @@ -625,7 +625,7 @@ static int cxio_hal_destroy_ctrl_qp(struct cxio_rdev *rdev_p) { - dma_free_coherent(&(rdev_p->rnic_info.pdev->dev), + dma_free_coherent(&(rdev_p->rnic_info.pdev), (1UL << T3_CTRL_QP_SIZE_LOG2) * sizeof(union t3_wr), rdev_p->ctrl_qp.workq, pci_unmap_addr(&rdev_p->ctrl_qp, mapping)); @@ -1077,8 +1077,11 @@ int __init cxio_hal_init(void) { + TAILQ_INIT(&rdev_list); +#ifdef needed if (cxio_hal_init_rhdl_resource(T3_MAX_NUM_RI)) return (ENOMEM); +#endif t3_register_cpl_handler(CPL_ASYNC_NOTIF, cxio_hal_ev_handler); return 0; } @@ -1091,7 +1094,9 @@ t3_register_cpl_handler(CPL_ASYNC_NOTIF, NULL); TAILQ_FOREACH_SAFE(rdev, &rdev_list, entry, tmp) cxio_rdev_close(rdev); +#ifdef needed cxio_hal_destroy_rhdl_resource(); +#endif } static void ==== //depot/projects/iwarp/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_cxio_resource.c#2 (text+ko) ==== @@ -87,8 +87,10 @@ #include <dev/cxgb/ulp/iw_cxgb/iw_cxgb_iwch_user.h> #endif +#ifdef needed static struct buf_ring *rhdl_fifo; static struct mtx rhdl_fifo_lock; +#endif #define RANDOM_SIZE 16 @@ -101,7 +103,7 @@ u32 i, j, idx; u32 random_bytes; u32 rarray[16]; - mtx_init(fifo_lock, "cxio fifo", NULL, MTX_DEF); + mtx_init(fifo_lock, "cxio fifo", NULL, MTX_DEF|MTX_DUPOK); *fifo = buf_ring_alloc(nr, M_WAITOK); if (*fifo == NULL) @@ -172,6 +174,7 @@ return 0; } +#ifdef needed int cxio_hal_init_rhdl_resource(u32 nr_rhdl) { return cxio_init_resource_fifo(&rhdl_fifo, &rhdl_fifo_lock, nr_rhdl, 1, @@ -182,6 +185,7 @@ { buf_ring_free(rhdl_fifo); } +#endif /* nr_* must be power of 2 */ int cxio_hal_init_resource(struct cxio_rdev *rdev_p, @@ -191,7 +195,7 @@ int err = 0; struct cxio_hal_resource *rscp; - rscp = malloc(sizeof(*rscp), M_DEVBUF, M_WAITOK); + rscp = malloc(sizeof(*rscp), M_DEVBUF, M_WAITOK|M_ZERO); if (!rscp) return (ENOMEM); rdev_p->rscp = rscp; ==== //depot/projects/iwarp/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_iwch.c#2 (text+ko) ==== @@ -102,18 +102,11 @@ static void rnic_init(struct iwch_dev *rnicp) { - static int inited = 0; - - if (inited == 0) { - TAILQ_INIT(&dev_list); - inited = 1; - } - PDBG("%s iwch_dev %p\n", __FUNCTION__, rnicp); idr_init(&rnicp->cqidr); idr_init(&rnicp->qpidr); idr_init(&rnicp->mmidr); - mtx_init(&rnicp->lock, "iwch lock", NULL, MTX_DEF); + mtx_init(&rnicp->lock, "iwch rnic lock", NULL, MTX_DEF|MTX_DUPOK); rnicp->attr.vendor_id = 0x168; rnicp->attr.vendor_part_id = 7; @@ -210,11 +203,13 @@ mtx_unlock(&dev_mutex); } -#ifdef notyet static int __init iwch_init_module(void) { int err; + TAILQ_INIT(&dev_list); + mtx_init(&dev_mutex, "iwch dev_list lock", NULL, MTX_DEF); + err = cxio_hal_init(); if (err) return err; @@ -233,4 +228,41 @@ iwch_cm_term(); cxio_hal_exit(); } -#endif + +static int +iwch_load(module_t mod, int cmd, void *arg) +{ + int err = 0; + + switch (cmd) { + case MOD_LOAD: + printf("Loading iw_cxgb.\n"); + + iwch_init_module(); + break; + case MOD_QUIESCE: + break; + case MOD_UNLOAD: + printf("Unloading iw_cxgb.\n"); + iwch_exit_module(); + break; + case MOD_SHUTDOWN: + break; + default: + err = EOPNOTSUPP; + break; + } + + return (err); +} + +static moduledata_t mod_data = { + "iw_cxgb", + iwch_load, + 0 +}; + +MODULE_VERSION(iw_cxgb, 1); +DECLARE_MODULE(iw_cxgb, mod_data, SI_SUB_EXEC, SI_ORDER_ANY); +MODULE_DEPEND(iw_cxgb, rdma_core, 1, 1, 1); +MODULE_DEPEND(iw_cxgb, if_cxgb, 1, 1, 1); ==== //depot/projects/iwarp/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_iwch_provider.c#2 (text+ko) ==== @@ -1015,7 +1015,7 @@ __FUNCTION__, ibdev, port, index, gid); dev = to_iwch_dev(ibdev); BUG_ON(port == 0 || port > 2); - pi = ((struct port_info *)dev->rdev.ifp->if_softc); + pi = ((struct port_info *)dev->rdev.port_info.lldevs[port-1]->if_softc); memset(&(gid->raw[0]), 0, sizeof(gid->raw)); memcpy(&(gid->raw[0]), pi->hw_addr, 6); return 0; @@ -1034,8 +1034,10 @@ memcpy(&props->sys_image_guid, dev->rdev.t3cdev_p->lldev->if_addr.ifa_addr, 6); #endif props->device_cap_flags = dev->device_cap_flags; +#ifdef notyet props->vendor_id = (u32)dev->rdev.rnic_info.pdev->vendor; props->vendor_part_id = (u32)dev->rdev.rnic_info.pdev->device; +#endif props->max_mr_size = ~0ull; props->max_qp = dev->attr.max_qps; props->max_qp_wr = dev->attr.max_wrs; @@ -1116,8 +1118,12 @@ struct iwch_dev *dev = container_of(cdev, struct iwch_dev, ibdev.class_dev); PDBG("%s class dev 0x%p\n", __FUNCTION__, dev); +#ifdef notyet return sprintf(buf, "%x.%x\n", dev->rdev.rnic_info.pdev->vendor, dev->rdev.rnic_info.pdev->device); +#else + return sprintf(buf, "%x.%x\n", 0xdead, 0xbeef); /* XXX */ +#endif } static CLASS_DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL); @@ -1171,7 +1177,7 @@ memcpy(dev->ibdev.node_desc, IWCH_NODE_DESC, sizeof(IWCH_NODE_DESC)); dev->ibdev.phys_port_cnt = dev->rdev.port_info.nports; dev->ibdev.num_comp_vectors = 1; - dev->ibdev.dma_device = dev->rdev.rnic_info.pdev->dev; + dev->ibdev.dma_device = dev->rdev.rnic_info.pdev; dev->ibdev.query_device = iwch_query_device; dev->ibdev.query_port = iwch_query_port; dev->ibdev.modify_port = iwch_modify_port;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200711130055.lAD0tBga080384>