Lines Matching refs:rdi
36 * rvt_alloc_device - allocate rdi
40 * Use IB core device alloc to allocate space for the rdi which is assumed to be
46 * Return: pointer to allocated rdi
50 struct rvt_dev_info *rdi;
52 rdi = container_of(_ib_alloc_device(size), struct rvt_dev_info, ibdev);
53 if (!rdi)
54 return rdi;
56 rdi->ports = kcalloc(nports, sizeof(*rdi->ports), GFP_KERNEL);
57 if (!rdi->ports)
58 ib_dealloc_device(&rdi->ibdev);
60 return rdi;
65 * rvt_dealloc_device - deallocate rdi
66 * @rdi: structure to free
70 void rvt_dealloc_device(struct rvt_dev_info *rdi)
72 kfree(rdi->ports);
73 ib_dealloc_device(&rdi->ibdev);
81 struct rvt_dev_info *rdi = ib_to_rvt(ibdev);
88 *props = rdi->dparms.props;
94 struct rvt_dev_info *rdi = ib_to_rvt(ibdev);
96 return rdi->dparms.node;
122 struct rvt_dev_info *rdi = ib_to_rvt(ibdev);
126 rvp = rdi->ports[port_index];
132 props->pkey_tbl_len = rvt_get_npkeys(rdi);
139 return rdi->driver_f.query_port_state(rdi, port_num, props);
154 struct rvt_dev_info *rdi = ib_to_rvt(ibdev);
159 rvp = rdi->ports[port_index];
169 rdi->driver_f.cap_mask_chg(rdi, port_num);
171 ret = rdi->driver_f.shut_down_port(rdi, port_num);
196 struct rvt_dev_info *rdi = ib_to_rvt(ibdev);
201 if (index >= rvt_get_npkeys(rdi))
204 *pkey = rvt_get_pkey(rdi, port_index, index);
220 struct rvt_dev_info *rdi;
231 rdi = ib_to_rvt(ibdev);
232 rvp = rdi->ports[port_index];
236 return rdi->driver_f.get_guid_be(rdi, rvp, guid_index,
262 struct rvt_dev_info *rdi = ib_to_rvt(ibdev);
266 immutable->core_cap_flags = rdi->dparms.core_cap_flags;
274 immutable->max_mad_size = rdi->dparms.max_mad_size;
380 static noinline int check_support(struct rvt_dev_info *rdi, int verb)
388 if ((!rdi->ibdev.ops.port_groups) ||
389 (!rdi->driver_f.get_pci_dev))
398 if (!rdi->ibdev.ops.modify_device)
403 if (!rdi->ibdev.ops.query_port)
404 if (!rdi->driver_f.query_port_state)
409 if (!rdi->ibdev.ops.modify_port)
410 if (!rdi->driver_f.cap_mask_chg ||
411 !rdi->driver_f.shut_down_port)
416 if (!rdi->ibdev.ops.query_gid)
417 if (!rdi->driver_f.get_guid_be)
422 if (!rdi->ibdev.ops.create_qp)
423 if (!rdi->driver_f.qp_priv_alloc ||
424 !rdi->driver_f.qp_priv_free ||
425 !rdi->driver_f.notify_qp_reset ||
426 !rdi->driver_f.flush_qp_waiters ||
427 !rdi->driver_f.stop_send_queue ||
428 !rdi->driver_f.quiesce_qp)
433 if (!rdi->ibdev.ops.modify_qp)
434 if (!rdi->driver_f.notify_qp_reset ||
435 !rdi->driver_f.schedule_send ||
436 !rdi->driver_f.get_pmtu_from_attr ||
437 !rdi->driver_f.flush_qp_waiters ||
438 !rdi->driver_f.stop_send_queue ||
439 !rdi->driver_f.quiesce_qp ||
440 !rdi->driver_f.notify_error_qp ||
441 !rdi->driver_f.mtu_from_qp ||
442 !rdi->driver_f.mtu_to_path_mtu)
447 if (!rdi->ibdev.ops.destroy_qp)
448 if (!rdi->driver_f.qp_priv_free ||
449 !rdi->driver_f.notify_qp_reset ||
450 !rdi->driver_f.flush_qp_waiters ||
451 !rdi->driver_f.stop_send_queue ||
452 !rdi->driver_f.quiesce_qp)
457 if (!rdi->ibdev.ops.post_send)
458 if (!rdi->driver_f.schedule_send ||
459 !rdi->driver_f.do_send ||
460 !rdi->post_parms)
471 * @rdi: main dev structure for all of rdmavt operations
473 * It is up to drivers to allocate the rdi and fill in the appropriate
478 int rvt_register_device(struct rvt_dev_info *rdi)
482 if (!rdi)
490 if (check_support(rdi, i)) {
495 ib_set_device_ops(&rdi->ibdev, &rvt_dev_ops);
498 trace_rvt_dbg(rdi, "Driver attempting registration");
499 rvt_mmap_init(rdi);
502 ret = rvt_driver_qp_init(rdi);
509 spin_lock_init(&rdi->n_ahs_lock);
510 rdi->n_ahs_allocated = 0;
513 rvt_driver_srq_init(rdi);
516 rvt_driver_mcast_init(rdi);
519 ret = rvt_driver_mr_init(rdi);
526 ret = rvt_wss_init(rdi);
528 rvt_pr_err(rdi, "Error in WSS init.\n");
533 spin_lock_init(&rdi->n_cqs_lock);
536 spin_lock_init(&rdi->n_pds_lock);
537 rdi->n_pds_allocated = 0;
545 rdi->ibdev.uverbs_cmd_mask |=
551 rdi->ibdev.node_type = RDMA_NODE_IB_CA;
552 if (!rdi->ibdev.num_comp_vectors)
553 rdi->ibdev.num_comp_vectors = 1;
556 ret = ib_register_device(&rdi->ibdev, dev_name(&rdi->ibdev.dev), NULL);
558 rvt_pr_err(rdi, "Failed to register driver with ib core.\n");
562 rvt_create_mad_agents(rdi);
564 rvt_pr_info(rdi, "Registration with rdmavt done.\n");
568 rvt_wss_exit(rdi);
570 rvt_mr_exit(rdi);
573 rvt_qp_exit(rdi);
581 * @rdi: rvt dev struct
583 void rvt_unregister_device(struct rvt_dev_info *rdi)
585 trace_rvt_dbg(rdi, "Driver is unregistering.");
586 if (!rdi)
589 rvt_free_mad_agents(rdi);
591 ib_unregister_device(&rdi->ibdev);
592 rvt_wss_exit(rdi);
593 rvt_mr_exit(rdi);
594 rvt_qp_exit(rdi);
600 * @rdi: rvt_dev_info struct
610 int rvt_init_port(struct rvt_dev_info *rdi, struct rvt_ibport *port,
614 rdi->ports[port_index] = port;
615 rdi->ports[port_index]->pkey_table = pkey_table;