Lines Matching refs:caifd

94 	struct caif_device_entry *caifd;  in caif_device_alloc()  local
96 caifd = kzalloc(sizeof(*caifd), GFP_KERNEL); in caif_device_alloc()
97 if (!caifd) in caif_device_alloc()
99 caifd->pcpu_refcnt = alloc_percpu(int); in caif_device_alloc()
100 if (!caifd->pcpu_refcnt) { in caif_device_alloc()
101 kfree(caifd); in caif_device_alloc()
104 caifd->netdev = dev; in caif_device_alloc()
106 return caifd; in caif_device_alloc()
113 struct caif_device_entry *caifd; in caif_get() local
115 list_for_each_entry_rcu(caifd, &caifdevs->list, list, in caif_get()
117 if (caifd->netdev == dev) in caif_get()
118 return caifd; in caif_get()
125 struct caif_device_entry *caifd; in caif_flow_cb() local
132 caifd = caif_get(skb->dev); in caif_flow_cb()
134 WARN_ON(caifd == NULL); in caif_flow_cb()
135 if (!caifd) { in caif_flow_cb()
140 caifd_hold(caifd); in caif_flow_cb()
143 spin_lock_bh(&caifd->flow_lock); in caif_flow_cb()
144 send_xoff = caifd->xoff; in caif_flow_cb()
145 caifd->xoff = false; in caif_flow_cb()
146 dtor = caifd->xoff_skb_dtor; in caif_flow_cb()
148 if (WARN_ON(caifd->xoff_skb != skb)) in caif_flow_cb()
151 caifd->xoff_skb = NULL; in caif_flow_cb()
152 caifd->xoff_skb_dtor = NULL; in caif_flow_cb()
154 spin_unlock_bh(&caifd->flow_lock); in caif_flow_cb()
160 caifd->layer.up-> in caif_flow_cb()
161 ctrlcmd(caifd->layer.up, in caif_flow_cb()
163 caifd->layer.id); in caif_flow_cb()
164 caifd_put(caifd); in caif_flow_cb()
170 struct caif_device_entry *caifd = in transmit() local
178 skb->dev = caifd->netdev; in transmit()
183 if (likely(caifd->netdev->priv_flags & IFF_NO_QUEUE)) in transmit()
186 if (unlikely(caifd->xoff)) in transmit()
189 if (likely(!netif_queue_stopped(caifd->netdev))) { in transmit()
201 high = (caifd->netdev->tx_queue_len * q_high) / 100; in transmit()
207 spin_lock_bh(&caifd->flow_lock); in transmit()
208 if (caifd->xoff) { in transmit()
209 spin_unlock_bh(&caifd->flow_lock); in transmit()
221 netif_queue_stopped(caifd->netdev), in transmit()
223 caifd->xoff = true; in transmit()
224 caifd->xoff_skb = skb; in transmit()
225 caifd->xoff_skb_dtor = skb->destructor; in transmit()
227 spin_unlock_bh(&caifd->flow_lock); in transmit()
229 caifd->layer.up->ctrlcmd(caifd->layer.up, in transmit()
231 caifd->layer.id); in transmit()
250 struct caif_device_entry *caifd; in receive() local
256 caifd = caif_get(dev); in receive()
258 if (!caifd || !caifd->layer.up || !caifd->layer.up->receive || in receive()
259 !netif_oper_up(caifd->netdev)) { in receive()
266 caifd_hold(caifd); in receive()
269 err = caifd->layer.up->receive(caifd->layer.up, pkt); in receive()
276 caifd_put(caifd); in receive()
290 struct caif_device_entry *caifd; in dev_flowctrl() local
294 caifd = caif_get(dev); in dev_flowctrl()
295 if (!caifd || !caifd->layer.up || !caifd->layer.up->ctrlcmd) { in dev_flowctrl()
300 caifd_hold(caifd); in dev_flowctrl()
303 caifd->layer.up->ctrlcmd(caifd->layer.up, in dev_flowctrl()
307 caifd->layer.id); in dev_flowctrl()
308 caifd_put(caifd); in dev_flowctrl()
318 struct caif_device_entry *caifd; in caif_enroll_dev() local
325 caifd = caif_device_alloc(dev); in caif_enroll_dev()
326 if (!caifd) in caif_enroll_dev()
328 *layer = &caifd->layer; in caif_enroll_dev()
329 spin_lock_init(&caifd->flow_lock); in caif_enroll_dev()
343 list_add_rcu(&caifd->list, &caifdevs->list); in caif_enroll_dev()
345 strscpy(caifd->layer.name, dev->name, in caif_enroll_dev()
346 sizeof(caifd->layer.name)); in caif_enroll_dev()
347 caifd->layer.transmit = transmit; in caif_enroll_dev()
350 &caifd->layer, in caif_enroll_dev()
367 struct caif_device_entry *caifd = NULL; in caif_device_notify() local
378 caifd = caif_get(dev); in caif_device_notify()
379 if (caifd == NULL && dev->type != ARPHRD_CAIF) in caif_device_notify()
384 if (caifd != NULL) in caif_device_notify()
409 caifd = caif_get(dev); in caif_device_notify()
410 if (caifd == NULL) { in caif_device_notify()
415 caifd->xoff = false; in caif_device_notify()
416 cfcnfg_set_phy_state(cfg, &caifd->layer, true); in caif_device_notify()
424 caifd = caif_get(dev); in caif_device_notify()
425 if (!caifd || !caifd->layer.up || !caifd->layer.up->ctrlcmd) { in caif_device_notify()
430 cfcnfg_set_phy_state(cfg, &caifd->layer, false); in caif_device_notify()
431 caifd_hold(caifd); in caif_device_notify()
434 caifd->layer.up->ctrlcmd(caifd->layer.up, in caif_device_notify()
436 caifd->layer.id); in caif_device_notify()
438 spin_lock_bh(&caifd->flow_lock); in caif_device_notify()
447 if (caifd->xoff_skb_dtor != NULL && caifd->xoff_skb != NULL) in caif_device_notify()
448 caifd->xoff_skb->destructor = caifd->xoff_skb_dtor; in caif_device_notify()
450 caifd->xoff = false; in caif_device_notify()
451 caifd->xoff_skb_dtor = NULL; in caif_device_notify()
452 caifd->xoff_skb = NULL; in caif_device_notify()
454 spin_unlock_bh(&caifd->flow_lock); in caif_device_notify()
455 caifd_put(caifd); in caif_device_notify()
461 caifd = caif_get(dev); in caif_device_notify()
462 if (caifd == NULL) { in caif_device_notify()
466 list_del_rcu(&caifd->list); in caif_device_notify()
480 if (caifd_refcnt_read(caifd) != 0 || in caif_device_notify()
481 cfcnfg_del_phy_layer(cfg, &caifd->layer) != 0) { in caif_device_notify()
485 list_add_rcu(&caifd->list, &caifdevs->list); in caif_device_notify()
491 dev_put(caifd->netdev); in caif_device_notify()
492 free_percpu(caifd->pcpu_refcnt); in caif_device_notify()
493 kfree(caifd); in caif_device_notify()
522 struct caif_device_entry *caifd, *tmp; in caif_exit_net() local
530 list_for_each_entry_safe(caifd, tmp, &caifdevs->list, list) { in caif_exit_net()
532 list_del_rcu(&caifd->list); in caif_exit_net()
533 cfcnfg_set_phy_state(cfg, &caifd->layer, false); in caif_exit_net()
536 (caifd_refcnt_read(caifd) != 0 || in caif_exit_net()
537 cfcnfg_del_phy_layer(cfg, &caifd->layer) != 0)) { in caif_exit_net()
544 dev_put(caifd->netdev); in caif_exit_net()
545 free_percpu(caifd->pcpu_refcnt); in caif_exit_net()
546 kfree(caifd); in caif_exit_net()