Lines Matching refs:smcd
27 int smc_ism_cantalk(u64 peer_gid, unsigned short vlan_id, struct smcd_dev *smcd) in smc_ism_cantalk() argument
29 return smcd->ops->query_remote_gid(smcd, peer_gid, vlan_id ? 1 : 0, in smc_ism_cantalk()
33 int smc_ism_write(struct smcd_dev *smcd, const struct smc_ism_position *pos, in smc_ism_write() argument
38 rc = smcd->ops->move_data(smcd, pos->token, pos->index, pos->signal, in smc_ism_write()
44 void smc_ism_get_system_eid(struct smcd_dev *smcd, u8 **eid) in smc_ism_get_system_eid() argument
46 smcd->ops->get_system_eid(smcd, eid); in smc_ism_get_system_eid()
49 u16 smc_ism_get_chid(struct smcd_dev *smcd) in smc_ism_get_chid() argument
51 return smcd->ops->get_chid(smcd); in smc_ism_get_chid()
59 spin_lock_irqsave(&conn->lgr->smcd->lock, flags); in smc_ism_set_conn()
60 conn->lgr->smcd->conn[conn->rmb_desc->sba_idx] = conn; in smc_ism_set_conn()
61 spin_unlock_irqrestore(&conn->lgr->smcd->lock, flags); in smc_ism_set_conn()
72 spin_lock_irqsave(&conn->lgr->smcd->lock, flags); in smc_ism_unset_conn()
73 conn->lgr->smcd->conn[conn->rmb_desc->sba_idx] = NULL; in smc_ism_unset_conn()
74 spin_unlock_irqrestore(&conn->lgr->smcd->lock, flags); in smc_ism_unset_conn()
81 int smc_ism_get_vlan(struct smcd_dev *smcd, unsigned short vlanid) in smc_ism_get_vlan() argument
98 spin_lock_irqsave(&smcd->lock, flags); in smc_ism_get_vlan()
99 list_for_each_entry(vlan, &smcd->vlan, list) { in smc_ism_get_vlan()
110 if (smcd->ops->add_vlan_id(smcd, vlanid)) { in smc_ism_get_vlan()
115 list_add_tail(&new_vlan->list, &smcd->vlan); in smc_ism_get_vlan()
117 spin_unlock_irqrestore(&smcd->lock, flags); in smc_ism_get_vlan()
125 int smc_ism_put_vlan(struct smcd_dev *smcd, unsigned short vlanid) in smc_ism_put_vlan() argument
135 spin_lock_irqsave(&smcd->lock, flags); in smc_ism_put_vlan()
136 list_for_each_entry(vlan, &smcd->vlan, list) { in smc_ism_put_vlan()
150 if (smcd->ops->del_vlan_id(smcd, vlanid)) in smc_ism_put_vlan()
155 spin_unlock_irqrestore(&smcd->lock, flags); in smc_ism_put_vlan()
159 int smc_ism_unregister_dmb(struct smcd_dev *smcd, struct smc_buf_desc *dmb_desc) in smc_ism_unregister_dmb() argument
173 rc = smcd->ops->unregister_dmb(smcd, &dmb); in smc_ism_unregister_dmb()
193 rc = lgr->smcd->ops->register_dmb(lgr->smcd, &dmb); in smc_ism_register_dmb()
206 struct smcd_dev *smcd; member
232 smc_smcd_terminate(wrk->smcd, wrk->event.tok, ev_info.vlan_id); in smcd_handle_sw_event()
237 wrk->smcd->ops->signal_event(wrk->smcd, in smcd_handle_sw_event()
258 rc = lgr->smcd->ops->signal_event(lgr->smcd, lgr->peer_gid, in smc_ism_signal_shutdown()
273 smc_smcd_terminate(wrk->smcd, wrk->event.tok, VLAN_VID_MASK); in smc_ism_event_work()
286 struct smcd_dev *smcd = container_of(dev, struct smcd_dev, dev); in smcd_release() local
288 kfree(smcd->conn); in smcd_release()
289 kfree(smcd); in smcd_release()
295 struct smcd_dev *smcd; in smcd_alloc_dev() local
297 smcd = kzalloc(sizeof(*smcd), GFP_KERNEL); in smcd_alloc_dev()
298 if (!smcd) in smcd_alloc_dev()
300 smcd->conn = kcalloc(max_dmbs, sizeof(struct smc_connection *), in smcd_alloc_dev()
302 if (!smcd->conn) { in smcd_alloc_dev()
303 kfree(smcd); in smcd_alloc_dev()
307 smcd->event_wq = alloc_ordered_workqueue("ism_evt_wq-%s)", in smcd_alloc_dev()
309 if (!smcd->event_wq) { in smcd_alloc_dev()
310 kfree(smcd->conn); in smcd_alloc_dev()
311 kfree(smcd); in smcd_alloc_dev()
315 smcd->dev.parent = parent; in smcd_alloc_dev()
316 smcd->dev.release = smcd_release; in smcd_alloc_dev()
317 device_initialize(&smcd->dev); in smcd_alloc_dev()
318 dev_set_name(&smcd->dev, name); in smcd_alloc_dev()
319 smcd->ops = ops; in smcd_alloc_dev()
320 if (smc_pnetid_by_dev_port(parent, 0, smcd->pnetid)) in smcd_alloc_dev()
321 smc_pnetid_by_table_smcd(smcd); in smcd_alloc_dev()
323 spin_lock_init(&smcd->lock); in smcd_alloc_dev()
324 spin_lock_init(&smcd->lgr_lock); in smcd_alloc_dev()
325 INIT_LIST_HEAD(&smcd->vlan); in smcd_alloc_dev()
326 INIT_LIST_HEAD(&smcd->lgr_list); in smcd_alloc_dev()
327 init_waitqueue_head(&smcd->lgrs_deleted); in smcd_alloc_dev()
328 return smcd; in smcd_alloc_dev()
332 int smcd_register_dev(struct smcd_dev *smcd) in smcd_register_dev() argument
340 smc_ism_get_system_eid(smcd, &system_eid); in smcd_register_dev()
345 if (smcd->pnetid[0]) in smcd_register_dev()
346 list_add_tail(&smcd->list, &smcd_dev_list.list); in smcd_register_dev()
348 list_add(&smcd->list, &smcd_dev_list.list); in smcd_register_dev()
352 dev_name(&smcd->dev), smcd->pnetid, in smcd_register_dev()
353 smcd->pnetid_by_user ? " (user defined)" : ""); in smcd_register_dev()
355 rc = device_add(&smcd->dev); in smcd_register_dev()
358 list_del(&smcd->list); in smcd_register_dev()
366 void smcd_unregister_dev(struct smcd_dev *smcd) in smcd_unregister_dev() argument
369 dev_name(&smcd->dev)); in smcd_unregister_dev()
371 list_del_init(&smcd->list); in smcd_unregister_dev()
373 smcd->going_away = 1; in smcd_unregister_dev()
374 smc_smcd_terminate_all(smcd); in smcd_unregister_dev()
375 flush_workqueue(smcd->event_wq); in smcd_unregister_dev()
376 destroy_workqueue(smcd->event_wq); in smcd_unregister_dev()
378 device_del(&smcd->dev); in smcd_unregister_dev()
382 void smcd_free_dev(struct smcd_dev *smcd) in smcd_free_dev() argument
384 put_device(&smcd->dev); in smcd_free_dev()
399 void smcd_handle_event(struct smcd_dev *smcd, struct smcd_event *event) in smcd_handle_event() argument
403 if (smcd->going_away) in smcd_handle_event()
410 wrk->smcd = smcd; in smcd_handle_event()
412 queue_work(smcd->event_wq, &wrk->work); in smcd_handle_event()
423 void smcd_handle_irq(struct smcd_dev *smcd, unsigned int dmbno) in smcd_handle_irq() argument
428 spin_lock_irqsave(&smcd->lock, flags); in smcd_handle_irq()
429 conn = smcd->conn[dmbno]; in smcd_handle_irq()
432 spin_unlock_irqrestore(&smcd->lock, flags); in smcd_handle_irq()