Exemplo n.º 1
0
static int ocrdma_register_device(struct ocrdma_dev *dev)
{
	ocrdma_get_guid(dev, (u8 *)&dev->ibdev.node_guid);
	BUILD_BUG_ON(sizeof(OCRDMA_NODE_DESC) > IB_DEVICE_NODE_DESC_MAX);
	memcpy(dev->ibdev.node_desc, OCRDMA_NODE_DESC,
	       sizeof(OCRDMA_NODE_DESC));
	dev->ibdev.owner = THIS_MODULE;
	dev->ibdev.uverbs_abi_ver = OCRDMA_ABI_VERSION;
	dev->ibdev.uverbs_cmd_mask =
	    OCRDMA_UVERBS(GET_CONTEXT) |
	    OCRDMA_UVERBS(QUERY_DEVICE) |
	    OCRDMA_UVERBS(QUERY_PORT) |
	    OCRDMA_UVERBS(ALLOC_PD) |
	    OCRDMA_UVERBS(DEALLOC_PD) |
	    OCRDMA_UVERBS(REG_MR) |
	    OCRDMA_UVERBS(DEREG_MR) |
	    OCRDMA_UVERBS(CREATE_COMP_CHANNEL) |
	    OCRDMA_UVERBS(CREATE_CQ) |
	    OCRDMA_UVERBS(RESIZE_CQ) |
	    OCRDMA_UVERBS(DESTROY_CQ) |
	    OCRDMA_UVERBS(REQ_NOTIFY_CQ) |
	    OCRDMA_UVERBS(CREATE_QP) |
	    OCRDMA_UVERBS(MODIFY_QP) |
	    OCRDMA_UVERBS(QUERY_QP) |
	    OCRDMA_UVERBS(DESTROY_QP) |
	    OCRDMA_UVERBS(POLL_CQ) |
	    OCRDMA_UVERBS(POST_SEND) |
	    OCRDMA_UVERBS(POST_RECV);

	dev->ibdev.uverbs_cmd_mask |=
	    OCRDMA_UVERBS(CREATE_AH) |
	     OCRDMA_UVERBS(MODIFY_AH) |
	     OCRDMA_UVERBS(QUERY_AH) |
	     OCRDMA_UVERBS(DESTROY_AH);

	dev->ibdev.node_type = RDMA_NODE_IB_CA;
	dev->ibdev.phys_port_cnt = 1;
	dev->ibdev.num_comp_vectors = dev->eq_cnt;

	/* mandatory to support user space verbs consumer. */
	dev->ibdev.dev.parent = &dev->nic_info.pdev->dev;

	ib_set_device_ops(&dev->ibdev, &ocrdma_dev_ops);

	if (ocrdma_get_asic_type(dev) == OCRDMA_ASIC_GEN_SKH_R) {
		dev->ibdev.uverbs_cmd_mask |=
		     OCRDMA_UVERBS(CREATE_SRQ) |
		     OCRDMA_UVERBS(MODIFY_SRQ) |
		     OCRDMA_UVERBS(QUERY_SRQ) |
		     OCRDMA_UVERBS(DESTROY_SRQ) |
		     OCRDMA_UVERBS(POST_SRQ_RECV);

		ib_set_device_ops(&dev->ibdev, &ocrdma_dev_srq_ops);
	}
	rdma_set_device_sysfs_group(&dev->ibdev, &ocrdma_attr_group);
	dev->ibdev.driver_id = RDMA_DRIVER_OCRDMA;
	return ib_register_device(&dev->ibdev, "ocrdma%d");
}
Exemplo n.º 2
0
static int ocrdma_register_device(struct ocrdma_dev *dev)
{
    strlcpy(dev->ibdev.name, "ocrdma%d", IB_DEVICE_NAME_MAX);
    ocrdma_get_guid(dev, (u8 *)&dev->ibdev.node_guid);
    BUILD_BUG_ON(sizeof(OCRDMA_NODE_DESC) > IB_DEVICE_NODE_DESC_MAX);
    memcpy(dev->ibdev.node_desc, OCRDMA_NODE_DESC,
           sizeof(OCRDMA_NODE_DESC));
    dev->ibdev.owner = THIS_MODULE;
    dev->ibdev.uverbs_abi_ver = OCRDMA_ABI_VERSION;
    dev->ibdev.uverbs_cmd_mask =
        OCRDMA_UVERBS(GET_CONTEXT) |
        OCRDMA_UVERBS(QUERY_DEVICE) |
        OCRDMA_UVERBS(QUERY_PORT) |
        OCRDMA_UVERBS(ALLOC_PD) |
        OCRDMA_UVERBS(DEALLOC_PD) |
        OCRDMA_UVERBS(REG_MR) |
        OCRDMA_UVERBS(DEREG_MR) |
        OCRDMA_UVERBS(CREATE_COMP_CHANNEL) |
        OCRDMA_UVERBS(CREATE_CQ) |
        OCRDMA_UVERBS(RESIZE_CQ) |
        OCRDMA_UVERBS(DESTROY_CQ) |
        OCRDMA_UVERBS(REQ_NOTIFY_CQ) |
        OCRDMA_UVERBS(CREATE_QP) |
        OCRDMA_UVERBS(MODIFY_QP) |
        OCRDMA_UVERBS(QUERY_QP) |
        OCRDMA_UVERBS(DESTROY_QP) |
        OCRDMA_UVERBS(POLL_CQ) |
        OCRDMA_UVERBS(POST_SEND) |
        OCRDMA_UVERBS(POST_RECV);

    dev->ibdev.uverbs_cmd_mask |=
        OCRDMA_UVERBS(CREATE_AH) |
        OCRDMA_UVERBS(MODIFY_AH) |
        OCRDMA_UVERBS(QUERY_AH) |
        OCRDMA_UVERBS(DESTROY_AH);

    dev->ibdev.node_type = RDMA_NODE_IB_CA;
    dev->ibdev.phys_port_cnt = 1;
    dev->ibdev.num_comp_vectors = dev->eq_cnt;

    /* mandatory verbs. */
    dev->ibdev.query_device = ocrdma_query_device;
    dev->ibdev.query_port = ocrdma_query_port;
    dev->ibdev.modify_port = ocrdma_modify_port;
    dev->ibdev.query_gid = ocrdma_query_gid;
    dev->ibdev.get_netdev = ocrdma_get_netdev;
    dev->ibdev.add_gid = ocrdma_add_gid;
    dev->ibdev.del_gid = ocrdma_del_gid;
    dev->ibdev.get_link_layer = ocrdma_link_layer;
    dev->ibdev.alloc_pd = ocrdma_alloc_pd;
    dev->ibdev.dealloc_pd = ocrdma_dealloc_pd;

    dev->ibdev.create_cq = ocrdma_create_cq;
    dev->ibdev.destroy_cq = ocrdma_destroy_cq;
    dev->ibdev.resize_cq = ocrdma_resize_cq;

    dev->ibdev.create_qp = ocrdma_create_qp;
    dev->ibdev.modify_qp = ocrdma_modify_qp;
    dev->ibdev.query_qp = ocrdma_query_qp;
    dev->ibdev.destroy_qp = ocrdma_destroy_qp;

    dev->ibdev.query_pkey = ocrdma_query_pkey;
    dev->ibdev.create_ah = ocrdma_create_ah;
    dev->ibdev.destroy_ah = ocrdma_destroy_ah;
    dev->ibdev.query_ah = ocrdma_query_ah;
    dev->ibdev.modify_ah = ocrdma_modify_ah;

    dev->ibdev.poll_cq = ocrdma_poll_cq;
    dev->ibdev.post_send = ocrdma_post_send;
    dev->ibdev.post_recv = ocrdma_post_recv;
    dev->ibdev.req_notify_cq = ocrdma_arm_cq;

    dev->ibdev.get_dma_mr = ocrdma_get_dma_mr;
    dev->ibdev.dereg_mr = ocrdma_dereg_mr;
    dev->ibdev.reg_user_mr = ocrdma_reg_user_mr;

    dev->ibdev.alloc_mr = ocrdma_alloc_mr;
    dev->ibdev.map_mr_sg = ocrdma_map_mr_sg;

    /* mandatory to support user space verbs consumer. */
    dev->ibdev.alloc_ucontext = ocrdma_alloc_ucontext;
    dev->ibdev.dealloc_ucontext = ocrdma_dealloc_ucontext;
    dev->ibdev.mmap = ocrdma_mmap;
    dev->ibdev.dma_device = &dev->nic_info.pdev->dev;

    dev->ibdev.process_mad = ocrdma_process_mad;
    dev->ibdev.get_port_immutable = ocrdma_port_immutable;
    dev->ibdev.get_dev_fw_str     = get_dev_fw_str;

    if (ocrdma_get_asic_type(dev) == OCRDMA_ASIC_GEN_SKH_R) {
        dev->ibdev.uverbs_cmd_mask |=
            OCRDMA_UVERBS(CREATE_SRQ) |
            OCRDMA_UVERBS(MODIFY_SRQ) |
            OCRDMA_UVERBS(QUERY_SRQ) |
            OCRDMA_UVERBS(DESTROY_SRQ) |
            OCRDMA_UVERBS(POST_SRQ_RECV);

        dev->ibdev.create_srq = ocrdma_create_srq;
        dev->ibdev.modify_srq = ocrdma_modify_srq;
        dev->ibdev.query_srq = ocrdma_query_srq;
        dev->ibdev.destroy_srq = ocrdma_destroy_srq;
        dev->ibdev.post_srq_recv = ocrdma_post_srq_recv;
    }
    return ib_register_device(&dev->ibdev, NULL);
}