Lines Matching refs:caifd

95 	struct caif_device_entry *caifd;  in caif_device_alloc()  local
97 caifd = kzalloc(sizeof(*caifd), GFP_KERNEL); in caif_device_alloc()
98 if (!caifd) in caif_device_alloc()
100 caifd->pcpu_refcnt = alloc_percpu(int); in caif_device_alloc()
101 if (!caifd->pcpu_refcnt) { in caif_device_alloc()
102 kfree(caifd); in caif_device_alloc()
105 caifd->netdev = dev; in caif_device_alloc()
107 return caifd; in caif_device_alloc()
114 struct caif_device_entry *caifd; in caif_get() local
116 list_for_each_entry_rcu(caifd, &caifdevs->list, list, in caif_get()
118 if (caifd->netdev == dev) in caif_get()
119 return caifd; in caif_get()
126 struct caif_device_entry *caifd; in caif_flow_cb() local
133 caifd = caif_get(skb->dev); in caif_flow_cb()
135 WARN_ON(caifd == NULL); in caif_flow_cb()
136 if (!caifd) { in caif_flow_cb()
141 caifd_hold(caifd); in caif_flow_cb()
144 spin_lock_bh(&caifd->flow_lock); in caif_flow_cb()
145 send_xoff = caifd->xoff; in caif_flow_cb()
146 caifd->xoff = false; in caif_flow_cb()
147 dtor = caifd->xoff_skb_dtor; in caif_flow_cb()
149 if (WARN_ON(caifd->xoff_skb != skb)) in caif_flow_cb()
152 caifd->xoff_skb = NULL; in caif_flow_cb()
153 caifd->xoff_skb_dtor = NULL; in caif_flow_cb()
155 spin_unlock_bh(&caifd->flow_lock); in caif_flow_cb()
161 caifd->layer.up-> in caif_flow_cb()
162 ctrlcmd(caifd->layer.up, in caif_flow_cb()
164 caifd->layer.id); in caif_flow_cb()
165 caifd_put(caifd); in caif_flow_cb()
171 struct caif_device_entry *caifd = in transmit() local
179 skb->dev = caifd->netdev; in transmit()
184 if (likely(caifd->netdev->priv_flags & IFF_NO_QUEUE)) in transmit()
187 if (unlikely(caifd->xoff)) in transmit()
190 if (likely(!netif_queue_stopped(caifd->netdev))) { in transmit()
202 high = (caifd->netdev->tx_queue_len * q_high) / 100; in transmit()
208 spin_lock_bh(&caifd->flow_lock); in transmit()
209 if (caifd->xoff) { in transmit()
210 spin_unlock_bh(&caifd->flow_lock); in transmit()
222 netif_queue_stopped(caifd->netdev), in transmit()
224 caifd->xoff = true; in transmit()
225 caifd->xoff_skb = skb; in transmit()
226 caifd->xoff_skb_dtor = skb->destructor; in transmit()
228 spin_unlock_bh(&caifd->flow_lock); in transmit()
230 caifd->layer.up->ctrlcmd(caifd->layer.up, in transmit()
232 caifd->layer.id); in transmit()
251 struct caif_device_entry *caifd; in receive() local
257 caifd = caif_get(dev); in receive()
259 if (!caifd || !caifd->layer.up || !caifd->layer.up->receive || in receive()
260 !netif_oper_up(caifd->netdev)) { in receive()
267 caifd_hold(caifd); in receive()
270 err = caifd->layer.up->receive(caifd->layer.up, pkt); in receive()
277 caifd_put(caifd); in receive()
291 struct caif_device_entry *caifd; in dev_flowctrl() local
295 caifd = caif_get(dev); in dev_flowctrl()
296 if (!caifd || !caifd->layer.up || !caifd->layer.up->ctrlcmd) { in dev_flowctrl()
301 caifd_hold(caifd); in dev_flowctrl()
304 caifd->layer.up->ctrlcmd(caifd->layer.up, in dev_flowctrl()
308 caifd->layer.id); in dev_flowctrl()
309 caifd_put(caifd); in dev_flowctrl()
319 struct caif_device_entry *caifd; in caif_enroll_dev() local
326 caifd = caif_device_alloc(dev); in caif_enroll_dev()
327 if (!caifd) in caif_enroll_dev()
329 *layer = &caifd->layer; in caif_enroll_dev()
330 spin_lock_init(&caifd->flow_lock); in caif_enroll_dev()
344 list_add_rcu(&caifd->list, &caifdevs->list); in caif_enroll_dev()
346 strscpy(caifd->layer.name, dev->name, in caif_enroll_dev()
347 sizeof(caifd->layer.name)); in caif_enroll_dev()
348 caifd->layer.transmit = transmit; in caif_enroll_dev()
351 &caifd->layer, in caif_enroll_dev()
368 struct caif_device_entry *caifd = NULL; in caif_device_notify() local
379 caifd = caif_get(dev); in caif_device_notify()
380 if (caifd == NULL && dev->type != ARPHRD_CAIF) in caif_device_notify()
385 if (caifd != NULL) in caif_device_notify()
410 caifd = caif_get(dev); in caif_device_notify()
411 if (caifd == NULL) { in caif_device_notify()
416 caifd->xoff = false; in caif_device_notify()
417 cfcnfg_set_phy_state(cfg, &caifd->layer, true); in caif_device_notify()
425 caifd = caif_get(dev); in caif_device_notify()
426 if (!caifd || !caifd->layer.up || !caifd->layer.up->ctrlcmd) { in caif_device_notify()
431 cfcnfg_set_phy_state(cfg, &caifd->layer, false); in caif_device_notify()
432 caifd_hold(caifd); in caif_device_notify()
435 caifd->layer.up->ctrlcmd(caifd->layer.up, in caif_device_notify()
437 caifd->layer.id); in caif_device_notify()
439 spin_lock_bh(&caifd->flow_lock); in caif_device_notify()
448 if (caifd->xoff_skb_dtor != NULL && caifd->xoff_skb != NULL) in caif_device_notify()
449 caifd->xoff_skb->destructor = caifd->xoff_skb_dtor; in caif_device_notify()
451 caifd->xoff = false; in caif_device_notify()
452 caifd->xoff_skb_dtor = NULL; in caif_device_notify()
453 caifd->xoff_skb = NULL; in caif_device_notify()
455 spin_unlock_bh(&caifd->flow_lock); in caif_device_notify()
456 caifd_put(caifd); in caif_device_notify()
462 caifd = caif_get(dev); in caif_device_notify()
463 if (caifd == NULL) { in caif_device_notify()
467 list_del_rcu(&caifd->list); in caif_device_notify()
481 if (caifd_refcnt_read(caifd) != 0 || in caif_device_notify()
482 cfcnfg_del_phy_layer(cfg, &caifd->layer) != 0) { in caif_device_notify()
486 list_add_rcu(&caifd->list, &caifdevs->list); in caif_device_notify()
492 dev_put(caifd->netdev); in caif_device_notify()
493 free_percpu(caifd->pcpu_refcnt); in caif_device_notify()
494 kfree(caifd); in caif_device_notify()
523 struct caif_device_entry *caifd, *tmp; in caif_exit_net() local
531 list_for_each_entry_safe(caifd, tmp, &caifdevs->list, list) { in caif_exit_net()
533 list_del_rcu(&caifd->list); in caif_exit_net()
534 cfcnfg_set_phy_state(cfg, &caifd->layer, false); in caif_exit_net()
537 (caifd_refcnt_read(caifd) != 0 || in caif_exit_net()
538 cfcnfg_del_phy_layer(cfg, &caifd->layer) != 0)) { in caif_exit_net()
545 dev_put(caifd->netdev); in caif_exit_net()
546 free_percpu(caifd->pcpu_refcnt); in caif_exit_net()
547 kfree(caifd); in caif_exit_net()