Lines Matching refs:smcd
69 struct smcd_dev *smcd) in smc_ism_cantalk() argument
71 return smcd->ops->query_remote_gid(smcd, peer_gid, vlan_id ? 1 : 0, in smc_ism_cantalk()
83 u16 smc_ism_get_chid(struct smcd_dev *smcd) in smc_ism_get_chid() argument
85 return smcd->ops->get_chid(smcd); in smc_ism_get_chid()
104 spin_lock_irqsave(&conn->lgr->smcd->lock, flags); in smc_ism_set_conn()
105 conn->lgr->smcd->conn[conn->rmb_desc->sba_idx] = conn; in smc_ism_set_conn()
106 spin_unlock_irqrestore(&conn->lgr->smcd->lock, flags); in smc_ism_set_conn()
117 spin_lock_irqsave(&conn->lgr->smcd->lock, flags); in smc_ism_unset_conn()
118 conn->lgr->smcd->conn[conn->rmb_desc->sba_idx] = NULL; in smc_ism_unset_conn()
119 spin_unlock_irqrestore(&conn->lgr->smcd->lock, flags); in smc_ism_unset_conn()
126 int smc_ism_get_vlan(struct smcd_dev *smcd, unsigned short vlanid) in smc_ism_get_vlan() argument
134 if (!smcd->ops->add_vlan_id) in smc_ism_get_vlan()
145 spin_lock_irqsave(&smcd->lock, flags); in smc_ism_get_vlan()
146 list_for_each_entry(vlan, &smcd->vlan, list) { in smc_ism_get_vlan()
157 if (smcd->ops->add_vlan_id(smcd, vlanid)) { in smc_ism_get_vlan()
162 list_add_tail(&new_vlan->list, &smcd->vlan); in smc_ism_get_vlan()
164 spin_unlock_irqrestore(&smcd->lock, flags); in smc_ism_get_vlan()
172 int smc_ism_put_vlan(struct smcd_dev *smcd, unsigned short vlanid) in smc_ism_put_vlan() argument
181 if (!smcd->ops->del_vlan_id) in smc_ism_put_vlan()
184 spin_lock_irqsave(&smcd->lock, flags); in smc_ism_put_vlan()
185 list_for_each_entry(vlan, &smcd->vlan, list) { in smc_ism_put_vlan()
199 if (smcd->ops->del_vlan_id(smcd, vlanid)) in smc_ism_put_vlan()
204 spin_unlock_irqrestore(&smcd->lock, flags); in smc_ism_put_vlan()
208 int smc_ism_unregister_dmb(struct smcd_dev *smcd, struct smc_buf_desc *dmb_desc) in smc_ism_unregister_dmb() argument
222 rc = smcd->ops->unregister_dmb(smcd, &dmb); in smc_ism_unregister_dmb()
242 rc = lgr->smcd->ops->register_dmb(lgr->smcd, &dmb, lgr->smcd->client); in smc_ism_register_dmb()
253 bool smc_ism_support_dmb_nocopy(struct smcd_dev *smcd) in smc_ism_support_dmb_nocopy() argument
259 return (smcd->ops->support_dmb_nocopy && in smc_ism_support_dmb_nocopy()
260 smcd->ops->support_dmb_nocopy(smcd)); in smc_ism_support_dmb_nocopy()
293 static int smc_nl_handle_smcd_dev(struct smcd_dev *smcd, in smc_nl_handle_smcd_dev() argument
305 ism = smcd->priv; in smc_nl_handle_smcd_dev()
314 use_cnt = atomic_read(&smcd->lgr_cnt); in smc_nl_handle_smcd_dev()
335 if (nla_put_u8(skb, SMC_NLA_DEV_PORT_PNET_USR, smcd->pnetid_by_user)) in smc_nl_handle_smcd_dev()
337 memcpy(smc_pnet, smcd->pnetid, SMC_MAX_PNETID_LEN); in smc_nl_handle_smcd_dev()
363 struct smcd_dev *smcd; in smc_nl_prep_smcd_dev() local
367 list_for_each_entry(smcd, &dev_list->list, list) { in smc_nl_prep_smcd_dev()
370 if (smc_ism_is_loopback(smcd)) in smc_nl_prep_smcd_dev()
372 if (smc_nl_handle_smcd_dev(smcd, skb, cb)) in smc_nl_prep_smcd_dev()
391 struct smcd_dev *smcd; member
419 smc_smcd_terminate(wrk->smcd, &peer_gid, ev_info.vlan_id); in smcd_handle_sw_event()
423 wrk->smcd->ops->signal_event) { in smcd_handle_sw_event()
425 wrk->smcd->ops->signal_event(wrk->smcd, in smcd_handle_sw_event()
445 smc_smcd_terminate(wrk->smcd, &smcd_gid, VLAN_VID_MASK); in smc_ism_event_work()
459 struct smcd_dev *smcd; in smcd_alloc_dev() local
461 smcd = devm_kzalloc(parent, sizeof(*smcd), GFP_KERNEL); in smcd_alloc_dev()
462 if (!smcd) in smcd_alloc_dev()
464 smcd->conn = devm_kcalloc(parent, max_dmbs, in smcd_alloc_dev()
466 if (!smcd->conn) in smcd_alloc_dev()
469 smcd->event_wq = alloc_ordered_workqueue("ism_evt_wq-%s)", in smcd_alloc_dev()
471 if (!smcd->event_wq) in smcd_alloc_dev()
474 smcd->ops = ops; in smcd_alloc_dev()
476 spin_lock_init(&smcd->lock); in smcd_alloc_dev()
477 spin_lock_init(&smcd->lgr_lock); in smcd_alloc_dev()
478 INIT_LIST_HEAD(&smcd->vlan); in smcd_alloc_dev()
479 INIT_LIST_HEAD(&smcd->lgr_list); in smcd_alloc_dev()
480 init_waitqueue_head(&smcd->lgrs_deleted); in smcd_alloc_dev()
481 return smcd; in smcd_alloc_dev()
487 struct smcd_dev *smcd, *fentry; in smcd_register_dev() local
492 smcd = smcd_alloc_dev(&ism->pdev->dev, dev_name(&ism->pdev->dev), ops, in smcd_register_dev()
494 if (!smcd) in smcd_register_dev()
496 smcd->priv = ism; in smcd_register_dev()
497 smcd->client = &smc_ism_client; in smcd_register_dev()
498 ism_set_priv(ism, &smc_ism_client, smcd); in smcd_register_dev()
499 if (smc_pnetid_by_dev_port(&ism->pdev->dev, 0, smcd->pnetid)) in smcd_register_dev()
500 smc_pnetid_by_table_smcd(smcd); in smcd_register_dev()
502 if (smcd->ops->supports_v2()) in smcd_register_dev()
509 if (!smcd->pnetid[0]) { in smcd_register_dev()
513 list_add(&smcd->list, &fentry->list); in smcd_register_dev()
515 list_add(&smcd->list, &smcd_dev_list.list); in smcd_register_dev()
517 list_add_tail(&smcd->list, &smcd_dev_list.list); in smcd_register_dev()
522 dev_name(&ism->dev), smcd->pnetid, in smcd_register_dev()
523 smcd->pnetid_by_user ? " (user defined)" : ""); in smcd_register_dev()
530 struct smcd_dev *smcd = ism_get_priv(ism, &smc_ism_client); in smcd_unregister_dev() local
534 smcd->going_away = 1; in smcd_unregister_dev()
535 smc_smcd_terminate_all(smcd); in smcd_unregister_dev()
537 list_del_init(&smcd->list); in smcd_unregister_dev()
539 destroy_workqueue(smcd->event_wq); in smcd_unregister_dev()
555 struct smcd_dev *smcd = ism_get_priv(ism, &smc_ism_client); in smcd_handle_event() local
558 if (smcd->going_away) in smcd_handle_event()
565 wrk->smcd = smcd; in smcd_handle_event()
567 queue_work(smcd->event_wq, &wrk->work); in smcd_handle_event()
580 struct smcd_dev *smcd = ism_get_priv(ism, &smc_ism_client); in smcd_handle_irq() local
584 spin_lock_irqsave(&smcd->lock, flags); in smcd_handle_irq()
585 conn = smcd->conn[dmbno]; in smcd_handle_irq()
588 spin_unlock_irqrestore(&smcd->lock, flags); in smcd_handle_irq()
600 if (!lgr->smcd->ops->signal_event) in smc_ism_signal_shutdown()
606 rc = lgr->smcd->ops->signal_event(lgr->smcd, &lgr->peer_gid, in smc_ism_signal_shutdown()