Lines Matching refs:smcibdev

127 	rc = ib_req_notify_cq(lnk->smcibdev->roce_cq_recv,  in smc_ib_ready_link()
146 static int smc_ib_fill_mac(struct smc_ib_device *smcibdev, u8 ibport) in smc_ib_fill_mac() argument
151 attr = rdma_get_gid_attr(smcibdev->ibdev, ibport, 0); in smc_ib_fill_mac()
156 memcpy(smcibdev->mac[ibport - 1], attr->ndev->dev_addr, in smc_ib_fill_mac()
170 static inline void smc_ib_define_local_systemid(struct smc_ib_device *smcibdev, in smc_ib_define_local_systemid() argument
173 memcpy(&local_systemid[2], &smcibdev->mac[ibport - 1], in smc_ib_define_local_systemid()
174 sizeof(smcibdev->mac[ibport - 1])); in smc_ib_define_local_systemid()
178 bool smc_ib_port_active(struct smc_ib_device *smcibdev, u8 ibport) in smc_ib_port_active() argument
180 return smcibdev->pattr[ibport - 1].state == IB_PORT_ACTIVE; in smc_ib_port_active()
184 int smc_ib_determine_gid(struct smc_ib_device *smcibdev, u8 ibport, in smc_ib_determine_gid() argument
190 for (i = 0; i < smcibdev->pattr[ibport - 1].gid_tbl_len; i++) { in smc_ib_determine_gid()
191 attr = rdma_get_gid_attr(smcibdev->ibdev, ibport, i); in smc_ib_determine_gid()
212 static int smc_ib_remember_port_attr(struct smc_ib_device *smcibdev, u8 ibport) in smc_ib_remember_port_attr() argument
216 memset(&smcibdev->pattr[ibport - 1], 0, in smc_ib_remember_port_attr()
217 sizeof(smcibdev->pattr[ibport - 1])); in smc_ib_remember_port_attr()
218 rc = ib_query_port(smcibdev->ibdev, ibport, in smc_ib_remember_port_attr()
219 &smcibdev->pattr[ibport - 1]); in smc_ib_remember_port_attr()
223 rc = smc_ib_fill_mac(smcibdev, ibport); in smc_ib_remember_port_attr()
228 smc_ib_port_active(smcibdev, ibport)) in smc_ib_remember_port_attr()
230 smc_ib_define_local_systemid(smcibdev, ibport); in smc_ib_remember_port_attr()
238 struct smc_ib_device *smcibdev = container_of( in smc_ib_port_event_work() local
242 for_each_set_bit(port_idx, &smcibdev->port_event_mask, SMC_MAX_PORTS) { in smc_ib_port_event_work()
243 smc_ib_remember_port_attr(smcibdev, port_idx + 1); in smc_ib_port_event_work()
244 clear_bit(port_idx, &smcibdev->port_event_mask); in smc_ib_port_event_work()
245 if (!smc_ib_port_active(smcibdev, port_idx + 1)) in smc_ib_port_event_work()
246 smc_port_terminate(smcibdev, port_idx + 1); in smc_ib_port_event_work()
254 struct smc_ib_device *smcibdev; in smc_ib_global_event_handler() local
257 smcibdev = container_of(handler, struct smc_ib_device, event_handler); in smc_ib_global_event_handler()
264 set_bit(port_idx, &smcibdev->port_event_mask); in smc_ib_global_event_handler()
265 schedule_work(&smcibdev->port_event_work); in smc_ib_global_event_handler()
283 lnk->roce_pd = ib_alloc_pd(lnk->smcibdev->ibdev, 0); in smc_ib_create_protection_domain()
292 struct smc_ib_device *smcibdev = in smc_ib_qp_event_handler() local
302 set_bit(port_idx, &smcibdev->port_event_mask); in smc_ib_qp_event_handler()
303 schedule_work(&smcibdev->port_event_work); in smc_ib_qp_event_handler()
323 .send_cq = lnk->smcibdev->roce_cq_send, in smc_ib_create_queue_pair()
324 .recv_cq = lnk->smcibdev->roce_cq_recv, in smc_ib_create_queue_pair()
392 void smc_ib_sync_sg_for_cpu(struct smc_ib_device *smcibdev, in smc_ib_sync_sg_for_cpu() argument
404 ib_dma_sync_single_for_cpu(smcibdev->ibdev, in smc_ib_sync_sg_for_cpu()
412 void smc_ib_sync_sg_for_device(struct smc_ib_device *smcibdev, in smc_ib_sync_sg_for_device() argument
424 ib_dma_sync_single_for_device(smcibdev->ibdev, in smc_ib_sync_sg_for_device()
432 int smc_ib_buf_map_sg(struct smc_ib_device *smcibdev, in smc_ib_buf_map_sg() argument
438 mapped_nents = ib_dma_map_sg(smcibdev->ibdev, in smc_ib_buf_map_sg()
448 void smc_ib_buf_unmap_sg(struct smc_ib_device *smcibdev, in smc_ib_buf_unmap_sg() argument
455 ib_dma_unmap_sg(smcibdev->ibdev, in smc_ib_buf_unmap_sg()
462 long smc_ib_setup_per_ibdev(struct smc_ib_device *smcibdev) in smc_ib_setup_per_ibdev() argument
474 smcibdev->roce_cq_send = ib_create_cq(smcibdev->ibdev, in smc_ib_setup_per_ibdev()
476 smcibdev, &cqattr); in smc_ib_setup_per_ibdev()
477 rc = PTR_ERR_OR_ZERO(smcibdev->roce_cq_send); in smc_ib_setup_per_ibdev()
478 if (IS_ERR(smcibdev->roce_cq_send)) { in smc_ib_setup_per_ibdev()
479 smcibdev->roce_cq_send = NULL; in smc_ib_setup_per_ibdev()
482 smcibdev->roce_cq_recv = ib_create_cq(smcibdev->ibdev, in smc_ib_setup_per_ibdev()
484 smcibdev, &cqattr); in smc_ib_setup_per_ibdev()
485 rc = PTR_ERR_OR_ZERO(smcibdev->roce_cq_recv); in smc_ib_setup_per_ibdev()
486 if (IS_ERR(smcibdev->roce_cq_recv)) { in smc_ib_setup_per_ibdev()
487 smcibdev->roce_cq_recv = NULL; in smc_ib_setup_per_ibdev()
490 smc_wr_add_dev(smcibdev); in smc_ib_setup_per_ibdev()
491 smcibdev->initialized = 1; in smc_ib_setup_per_ibdev()
495 ib_destroy_cq(smcibdev->roce_cq_send); in smc_ib_setup_per_ibdev()
499 static void smc_ib_cleanup_per_ibdev(struct smc_ib_device *smcibdev) in smc_ib_cleanup_per_ibdev() argument
501 if (!smcibdev->initialized) in smc_ib_cleanup_per_ibdev()
503 smcibdev->initialized = 0; in smc_ib_cleanup_per_ibdev()
504 smc_wr_remove_dev(smcibdev); in smc_ib_cleanup_per_ibdev()
505 ib_destroy_cq(smcibdev->roce_cq_recv); in smc_ib_cleanup_per_ibdev()
506 ib_destroy_cq(smcibdev->roce_cq_send); in smc_ib_cleanup_per_ibdev()
514 struct smc_ib_device *smcibdev; in smc_ib_add_dev() local
521 smcibdev = kzalloc(sizeof(*smcibdev), GFP_KERNEL); in smc_ib_add_dev()
522 if (!smcibdev) in smc_ib_add_dev()
525 smcibdev->ibdev = ibdev; in smc_ib_add_dev()
526 INIT_WORK(&smcibdev->port_event_work, smc_ib_port_event_work); in smc_ib_add_dev()
529 list_add_tail(&smcibdev->list, &smc_ib_devices.list); in smc_ib_add_dev()
531 ib_set_client_data(ibdev, &smc_ib_client, smcibdev); in smc_ib_add_dev()
532 INIT_IB_EVENT_HANDLER(&smcibdev->event_handler, smcibdev->ibdev, in smc_ib_add_dev()
534 ib_register_event_handler(&smcibdev->event_handler); in smc_ib_add_dev()
537 port_cnt = smcibdev->ibdev->phys_port_cnt; in smc_ib_add_dev()
541 set_bit(i, &smcibdev->port_event_mask); in smc_ib_add_dev()
544 smcibdev->pnetid[i]); in smc_ib_add_dev()
546 schedule_work(&smcibdev->port_event_work); in smc_ib_add_dev()
552 struct smc_ib_device *smcibdev; in smc_ib_remove_dev() local
554 smcibdev = ib_get_client_data(ibdev, &smc_ib_client); in smc_ib_remove_dev()
557 list_del_init(&smcibdev->list); /* remove from smc_ib_devices */ in smc_ib_remove_dev()
559 smc_pnet_remove_by_ibdev(smcibdev); in smc_ib_remove_dev()
560 smc_ib_cleanup_per_ibdev(smcibdev); in smc_ib_remove_dev()
561 ib_unregister_event_handler(&smcibdev->event_handler); in smc_ib_remove_dev()
562 kfree(smcibdev); in smc_ib_remove_dev()