Lines Matching refs:c2dev
81 static int c2_adapter_init(struct c2_dev *c2dev) in c2_adapter_init() argument
89 wr.hint_count = cpu_to_be64(c2dev->hint_count_dma); in c2_adapter_init()
90 wr.q0_host_shared = cpu_to_be64(c2dev->req_vq.shared_dma); in c2_adapter_init()
91 wr.q1_host_shared = cpu_to_be64(c2dev->rep_vq.shared_dma); in c2_adapter_init()
92 wr.q1_host_msg_pool = cpu_to_be64(c2dev->rep_vq.host_dma); in c2_adapter_init()
93 wr.q2_host_shared = cpu_to_be64(c2dev->aeq.shared_dma); in c2_adapter_init()
94 wr.q2_host_msg_pool = cpu_to_be64(c2dev->aeq.host_dma); in c2_adapter_init()
97 err = vq_send_wr(c2dev, (union c2wr *) & wr); in c2_adapter_init()
105 static void c2_adapter_term(struct c2_dev *c2dev) in c2_adapter_term() argument
114 vq_send_wr(c2dev, (union c2wr *) & wr); in c2_adapter_term()
115 c2dev->init = 0; in c2_adapter_term()
123 static int c2_rnic_query(struct c2_dev *c2dev, struct ib_device_attr *props) in c2_rnic_query() argument
130 vq_req = vq_req_alloc(c2dev); in c2_rnic_query()
136 wr.rnic_handle = c2dev->adapter_handle; in c2_rnic_query()
138 vq_req_get(c2dev, vq_req); in c2_rnic_query()
140 err = vq_send_wr(c2dev, (union c2wr *) &wr); in c2_rnic_query()
142 vq_req_put(c2dev, vq_req); in c2_rnic_query()
146 err = vq_wait_for_reply(c2dev, vq_req); in c2_rnic_query()
163 memcpy(&props->sys_image_guid, c2dev->netdev->dev_addr, 6); in c2_rnic_query()
171 props->device_cap_flags = c2dev->device_cap_flags; in c2_rnic_query()
202 vq_repbuf_free(c2dev, reply); in c2_rnic_query()
205 vq_req_free(c2dev, vq_req); in c2_rnic_query()
212 int c2_add_addr(struct c2_dev *c2dev, __be32 inaddr, __be32 inmask) in c2_add_addr() argument
220 vq_req = vq_req_alloc(c2dev); in c2_add_addr()
225 wr = kmalloc(c2dev->req_vq.msg_size, GFP_KERNEL); in c2_add_addr()
233 wr->rnic_handle = c2dev->adapter_handle; in c2_add_addr()
242 vq_req_get(c2dev, vq_req); in c2_add_addr()
244 err = vq_send_wr(c2dev, (union c2wr *) wr); in c2_add_addr()
246 vq_req_put(c2dev, vq_req); in c2_add_addr()
250 err = vq_wait_for_reply(c2dev, vq_req); in c2_add_addr()
262 vq_repbuf_free(c2dev, reply); in c2_add_addr()
267 vq_req_free(c2dev, vq_req); in c2_add_addr()
274 int c2_del_addr(struct c2_dev *c2dev, __be32 inaddr, __be32 inmask) in c2_del_addr() argument
282 vq_req = vq_req_alloc(c2dev); in c2_del_addr()
287 wr = kmalloc(c2dev->req_vq.msg_size, GFP_KERNEL); in c2_del_addr()
295 wr->rnic_handle = c2dev->adapter_handle; in c2_del_addr()
304 vq_req_get(c2dev, vq_req); in c2_del_addr()
306 err = vq_send_wr(c2dev, (union c2wr *) wr); in c2_del_addr()
308 vq_req_put(c2dev, vq_req); in c2_del_addr()
312 err = vq_wait_for_reply(c2dev, vq_req); in c2_del_addr()
324 vq_repbuf_free(c2dev, reply); in c2_del_addr()
329 vq_req_free(c2dev, vq_req); in c2_del_addr()
337 static int c2_rnic_open(struct c2_dev *c2dev) in c2_rnic_open() argument
344 vq_req = vq_req_alloc(c2dev); in c2_rnic_open()
354 wr.rnic_open.req.user_context = (unsigned long) c2dev; in c2_rnic_open()
356 vq_req_get(c2dev, vq_req); in c2_rnic_open()
358 err = vq_send_wr(c2dev, &wr); in c2_rnic_open()
360 vq_req_put(c2dev, vq_req); in c2_rnic_open()
364 err = vq_wait_for_reply(c2dev, vq_req); in c2_rnic_open()
379 c2dev->adapter_handle = reply->rnic_handle; in c2_rnic_open()
382 vq_repbuf_free(c2dev, reply); in c2_rnic_open()
384 vq_req_free(c2dev, vq_req); in c2_rnic_open()
391 static int c2_rnic_close(struct c2_dev *c2dev) in c2_rnic_close() argument
398 vq_req = vq_req_alloc(c2dev); in c2_rnic_close()
406 wr.rnic_close.req.rnic_handle = c2dev->adapter_handle; in c2_rnic_close()
408 vq_req_get(c2dev, vq_req); in c2_rnic_close()
410 err = vq_send_wr(c2dev, &wr); in c2_rnic_close()
412 vq_req_put(c2dev, vq_req); in c2_rnic_close()
416 err = vq_wait_for_reply(c2dev, vq_req); in c2_rnic_close()
431 c2dev->adapter_handle = 0; in c2_rnic_close()
434 vq_repbuf_free(c2dev, reply); in c2_rnic_close()
436 vq_req_free(c2dev, vq_req); in c2_rnic_close()
445 int c2_rnic_init(struct c2_dev *c2dev) in c2_rnic_init() argument
454 c2dev->device_cap_flags = in c2_rnic_init()
462 c2dev->qptr_array = vzalloc(C2_MAX_CQS * sizeof(void *)); in c2_rnic_init()
463 if (!c2dev->qptr_array) { in c2_rnic_init()
468 c2dev->qptr_array[0] = (void *) &c2dev->req_vq; in c2_rnic_init()
469 c2dev->qptr_array[1] = (void *) &c2dev->rep_vq; in c2_rnic_init()
470 c2dev->qptr_array[2] = (void *) &c2dev->aeq; in c2_rnic_init()
473 init_waitqueue_head(&c2dev->req_vq_wo); in c2_rnic_init()
474 spin_lock_init(&c2dev->vqlock); in c2_rnic_init()
475 spin_lock_init(&c2dev->lock); in c2_rnic_init()
480 err = c2_init_mqsp_pool(c2dev, GFP_KERNEL, &c2dev->kern_mqsp_pool); in c2_rnic_init()
489 c2dev->hint_count = c2_alloc_mqsp(c2dev, c2dev->kern_mqsp_pool, in c2_rnic_init()
490 &c2dev->hint_count_dma, in c2_rnic_init()
492 c2dev->req_vq.shared = c2_alloc_mqsp(c2dev, c2dev->kern_mqsp_pool, in c2_rnic_init()
493 &c2dev->req_vq.shared_dma, in c2_rnic_init()
495 c2dev->rep_vq.shared = c2_alloc_mqsp(c2dev, c2dev->kern_mqsp_pool, in c2_rnic_init()
496 &c2dev->rep_vq.shared_dma, in c2_rnic_init()
498 c2dev->aeq.shared = c2_alloc_mqsp(c2dev, c2dev->kern_mqsp_pool, in c2_rnic_init()
499 &c2dev->aeq.shared_dma, GFP_KERNEL); in c2_rnic_init()
500 if (!c2dev->hint_count || !c2dev->req_vq.shared || in c2_rnic_init()
501 !c2dev->rep_vq.shared || !c2dev->aeq.shared) { in c2_rnic_init()
506 mmio_regs = c2dev->kva; in c2_rnic_init()
508 c2_mq_req_init(&c2dev->req_vq, 0, in c2_rnic_init()
520 q1_pages = dma_alloc_coherent(&c2dev->pcidev->dev, qsize * msgsize, in c2_rnic_init()
521 &c2dev->rep_vq.host_dma, GFP_KERNEL); in c2_rnic_init()
526 dma_unmap_addr_set(&c2dev->rep_vq, mapping, c2dev->rep_vq.host_dma); in c2_rnic_init()
528 (unsigned long long) c2dev->rep_vq.host_dma); in c2_rnic_init()
529 c2_mq_rep_init(&c2dev->rep_vq, in c2_rnic_init()
541 q2_pages = dma_alloc_coherent(&c2dev->pcidev->dev, qsize * msgsize, in c2_rnic_init()
542 &c2dev->aeq.host_dma, GFP_KERNEL); in c2_rnic_init()
547 dma_unmap_addr_set(&c2dev->aeq, mapping, c2dev->aeq.host_dma); in c2_rnic_init()
549 (unsigned long long) c2dev->aeq.host_dma); in c2_rnic_init()
550 c2_mq_rep_init(&c2dev->aeq, in c2_rnic_init()
560 err = vq_init(c2dev); in c2_rnic_init()
565 writel(0, c2dev->regs + C2_IDIS); in c2_rnic_init()
568 err = c2_adapter_init(c2dev); in c2_rnic_init()
571 c2dev->init++; in c2_rnic_init()
574 err = c2_rnic_open(c2dev); in c2_rnic_init()
579 err = c2_rnic_query(c2dev, &c2dev->props); in c2_rnic_init()
584 err = c2_init_pd_table(c2dev); in c2_rnic_init()
589 c2_init_qp_table(c2dev); in c2_rnic_init()
593 c2_rnic_close(c2dev); in c2_rnic_init()
595 vq_term(c2dev); in c2_rnic_init()
597 dma_free_coherent(&c2dev->pcidev->dev, in c2_rnic_init()
598 c2dev->aeq.q_size * c2dev->aeq.msg_size, in c2_rnic_init()
599 q2_pages, dma_unmap_addr(&c2dev->aeq, mapping)); in c2_rnic_init()
601 dma_free_coherent(&c2dev->pcidev->dev, in c2_rnic_init()
602 c2dev->rep_vq.q_size * c2dev->rep_vq.msg_size, in c2_rnic_init()
603 q1_pages, dma_unmap_addr(&c2dev->rep_vq, mapping)); in c2_rnic_init()
605 c2_free_mqsp_pool(c2dev, c2dev->kern_mqsp_pool); in c2_rnic_init()
607 vfree(c2dev->qptr_array); in c2_rnic_init()
615 void c2_rnic_term(struct c2_dev *c2dev) in c2_rnic_term() argument
619 c2_rnic_close(c2dev); in c2_rnic_term()
622 c2_adapter_term(c2dev); in c2_rnic_term()
625 writel(1, c2dev->regs + C2_IDIS); in c2_rnic_term()
628 c2_cleanup_qp_table(c2dev); in c2_rnic_term()
631 c2_cleanup_pd_table(c2dev); in c2_rnic_term()
634 vq_term(c2dev); in c2_rnic_term()
637 dma_free_coherent(&c2dev->pcidev->dev, in c2_rnic_term()
638 c2dev->aeq.q_size * c2dev->aeq.msg_size, in c2_rnic_term()
639 c2dev->aeq.msg_pool.host, in c2_rnic_term()
640 dma_unmap_addr(&c2dev->aeq, mapping)); in c2_rnic_term()
643 dma_free_coherent(&c2dev->pcidev->dev, in c2_rnic_term()
644 c2dev->rep_vq.q_size * c2dev->rep_vq.msg_size, in c2_rnic_term()
645 c2dev->rep_vq.msg_pool.host, in c2_rnic_term()
646 dma_unmap_addr(&c2dev->rep_vq, mapping)); in c2_rnic_term()
649 c2_free_mqsp_pool(c2dev, c2dev->kern_mqsp_pool); in c2_rnic_term()
652 vfree(c2dev->qptr_array); in c2_rnic_term()