Lines Matching defs:smcd

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