Lines Matching refs:rdi

78  * rvt_alloc_device - allocate rdi
82 * Use IB core device alloc to allocate space for the rdi which is assumed to be
88 * Return: pointer to allocated rdi
92 struct rvt_dev_info *rdi;
94 rdi = container_of(_ib_alloc_device(size), struct rvt_dev_info, ibdev);
95 if (!rdi)
96 return rdi;
98 rdi->ports = kcalloc(nports, sizeof(*rdi->ports), GFP_KERNEL);
99 if (!rdi->ports)
100 ib_dealloc_device(&rdi->ibdev);
102 return rdi;
107 * rvt_dealloc_device - deallocate rdi
108 * @rdi: structure to free
112 void rvt_dealloc_device(struct rvt_dev_info *rdi)
114 kfree(rdi->ports);
115 ib_dealloc_device(&rdi->ibdev);
123 struct rvt_dev_info *rdi = ib_to_rvt(ibdev);
130 *props = rdi->dparms.props;
157 struct rvt_dev_info *rdi = ib_to_rvt(ibdev);
164 rvp = rdi->ports[port_index];
170 props->pkey_tbl_len = rvt_get_npkeys(rdi);
177 return rdi->driver_f.query_port_state(rdi, port_num, props);
192 struct rvt_dev_info *rdi = ib_to_rvt(ibdev);
200 rvp = rdi->ports[port_index];
210 rdi->driver_f.cap_mask_chg(rdi, port_num);
212 ret = rdi->driver_f.shut_down_port(rdi, port_num);
237 struct rvt_dev_info *rdi = ib_to_rvt(ibdev);
244 if (index >= rvt_get_npkeys(rdi))
247 *pkey = rvt_get_pkey(rdi, port_index, index);
263 struct rvt_dev_info *rdi;
276 rdi = ib_to_rvt(ibdev);
277 rvp = rdi->ports[port_index];
281 return rdi->driver_f.get_guid_be(rdi, rvp, guid_index,
307 struct rvt_dev_info *rdi = ib_to_rvt(ibdev);
315 immutable->core_cap_flags = rdi->dparms.core_cap_flags;
323 immutable->max_mad_size = rdi->dparms.max_mad_size;
426 static noinline int check_support(struct rvt_dev_info *rdi, int verb)
434 if ((!rdi->ibdev.ops.init_port) ||
435 (!rdi->driver_f.get_pci_dev))
444 if (!rdi->ibdev.ops.modify_device)
449 if (!rdi->ibdev.ops.query_port)
450 if (!rdi->driver_f.query_port_state)
455 if (!rdi->ibdev.ops.modify_port)
456 if (!rdi->driver_f.cap_mask_chg ||
457 !rdi->driver_f.shut_down_port)
462 if (!rdi->ibdev.ops.query_gid)
463 if (!rdi->driver_f.get_guid_be)
468 if (!rdi->ibdev.ops.create_qp)
469 if (!rdi->driver_f.qp_priv_alloc ||
470 !rdi->driver_f.qp_priv_free ||
471 !rdi->driver_f.notify_qp_reset ||
472 !rdi->driver_f.flush_qp_waiters ||
473 !rdi->driver_f.stop_send_queue ||
474 !rdi->driver_f.quiesce_qp)
479 if (!rdi->ibdev.ops.modify_qp)
480 if (!rdi->driver_f.notify_qp_reset ||
481 !rdi->driver_f.schedule_send ||
482 !rdi->driver_f.get_pmtu_from_attr ||
483 !rdi->driver_f.flush_qp_waiters ||
484 !rdi->driver_f.stop_send_queue ||
485 !rdi->driver_f.quiesce_qp ||
486 !rdi->driver_f.notify_error_qp ||
487 !rdi->driver_f.mtu_from_qp ||
488 !rdi->driver_f.mtu_to_path_mtu)
493 if (!rdi->ibdev.ops.destroy_qp)
494 if (!rdi->driver_f.qp_priv_free ||
495 !rdi->driver_f.notify_qp_reset ||
496 !rdi->driver_f.flush_qp_waiters ||
497 !rdi->driver_f.stop_send_queue ||
498 !rdi->driver_f.quiesce_qp)
503 if (!rdi->ibdev.ops.post_send)
504 if (!rdi->driver_f.schedule_send ||
505 !rdi->driver_f.do_send ||
506 !rdi->post_parms)
517 * @rdi: main dev structure for all of rdmavt operations
519 * It is up to drivers to allocate the rdi and fill in the appropriate
524 int rvt_register_device(struct rvt_dev_info *rdi)
528 if (!rdi)
536 if (check_support(rdi, i)) {
541 ib_set_device_ops(&rdi->ibdev, &rvt_dev_ops);
544 trace_rvt_dbg(rdi, "Driver attempting registration");
545 rvt_mmap_init(rdi);
548 ret = rvt_driver_qp_init(rdi);
555 spin_lock_init(&rdi->n_ahs_lock);
556 rdi->n_ahs_allocated = 0;
559 rvt_driver_srq_init(rdi);
562 rvt_driver_mcast_init(rdi);
565 ret = rvt_driver_mr_init(rdi);
572 ret = rvt_wss_init(rdi);
574 rvt_pr_err(rdi, "Error in WSS init.\n");
579 spin_lock_init(&rdi->n_cqs_lock);
582 spin_lock_init(&rdi->n_pds_lock);
583 rdi->n_pds_allocated = 0;
591 rdi->ibdev.uverbs_cmd_mask =
622 rdi->ibdev.node_type = RDMA_NODE_IB_CA;
623 if (!rdi->ibdev.num_comp_vectors)
624 rdi->ibdev.num_comp_vectors = 1;
627 ret = ib_register_device(&rdi->ibdev, dev_name(&rdi->ibdev.dev), NULL);
629 rvt_pr_err(rdi, "Failed to register driver with ib core.\n");
633 rvt_create_mad_agents(rdi);
635 rvt_pr_info(rdi, "Registration with rdmavt done.\n");
639 rvt_wss_exit(rdi);
641 rvt_mr_exit(rdi);
644 rvt_qp_exit(rdi);
652 * @rdi: rvt dev struct
654 void rvt_unregister_device(struct rvt_dev_info *rdi)
656 trace_rvt_dbg(rdi, "Driver is unregistering.");
657 if (!rdi)
660 rvt_free_mad_agents(rdi);
662 ib_unregister_device(&rdi->ibdev);
663 rvt_wss_exit(rdi);
664 rvt_mr_exit(rdi);
665 rvt_qp_exit(rdi);
671 * @rdi: rvt_dev_info struct
681 int rvt_init_port(struct rvt_dev_info *rdi, struct rvt_ibport *port,
685 rdi->ports[port_index] = port;
686 rdi->ports[port_index]->pkey_table = pkey_table;