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()
116 if (caifd->netdev == dev) in caif_get()
117 return caifd; in caif_get()
124 struct caif_device_entry *caifd; in caif_flow_cb() local
131 caifd = caif_get(skb->dev); in caif_flow_cb()
133 WARN_ON(caifd == NULL); in caif_flow_cb()
134 if (!caifd) { in caif_flow_cb()
139 caifd_hold(caifd); in caif_flow_cb()
142 spin_lock_bh(&caifd->flow_lock); in caif_flow_cb()
143 send_xoff = caifd->xoff; in caif_flow_cb()
144 caifd->xoff = 0; in caif_flow_cb()
145 dtor = caifd->xoff_skb_dtor; in caif_flow_cb()
147 if (WARN_ON(caifd->xoff_skb != skb)) in caif_flow_cb()
150 caifd->xoff_skb = NULL; in caif_flow_cb()
151 caifd->xoff_skb_dtor = NULL; in caif_flow_cb()
153 spin_unlock_bh(&caifd->flow_lock); in caif_flow_cb()
159 caifd->layer.up-> in caif_flow_cb()
160 ctrlcmd(caifd->layer.up, in caif_flow_cb()
162 caifd->layer.id); in caif_flow_cb()
163 caifd_put(caifd); in caif_flow_cb()
169 struct caif_device_entry *caifd = in transmit() local
177 skb->dev = caifd->netdev; in transmit()
182 if (likely(caifd->netdev->priv_flags & IFF_NO_QUEUE)) in transmit()
185 if (unlikely(caifd->xoff)) in transmit()
188 if (likely(!netif_queue_stopped(caifd->netdev))) { in transmit()
200 high = (caifd->netdev->tx_queue_len * q_high) / 100; in transmit()
206 spin_lock_bh(&caifd->flow_lock); in transmit()
207 if (caifd->xoff) { in transmit()
208 spin_unlock_bh(&caifd->flow_lock); in transmit()
220 netif_queue_stopped(caifd->netdev), in transmit()
222 caifd->xoff = 1; in transmit()
223 caifd->xoff_skb = skb; in transmit()
224 caifd->xoff_skb_dtor = skb->destructor; in transmit()
226 spin_unlock_bh(&caifd->flow_lock); in transmit()
228 caifd->layer.up->ctrlcmd(caifd->layer.up, in transmit()
230 caifd->layer.id); in transmit()
249 struct caif_device_entry *caifd; in receive() local
255 caifd = caif_get(dev); in receive()
257 if (!caifd || !caifd->layer.up || !caifd->layer.up->receive || in receive()
258 !netif_oper_up(caifd->netdev)) { in receive()
265 caifd_hold(caifd); in receive()
268 err = caifd->layer.up->receive(caifd->layer.up, pkt); in receive()
275 caifd_put(caifd); in receive()
289 struct caif_device_entry *caifd; in dev_flowctrl() local
293 caifd = caif_get(dev); in dev_flowctrl()
294 if (!caifd || !caifd->layer.up || !caifd->layer.up->ctrlcmd) { in dev_flowctrl()
299 caifd_hold(caifd); in dev_flowctrl()
302 caifd->layer.up->ctrlcmd(caifd->layer.up, in dev_flowctrl()
306 caifd->layer.id); in dev_flowctrl()
307 caifd_put(caifd); in dev_flowctrl()
317 struct caif_device_entry *caifd; in caif_enroll_dev() local
323 caifd = caif_device_alloc(dev); in caif_enroll_dev()
324 if (!caifd) in caif_enroll_dev()
326 *layer = &caifd->layer; in caif_enroll_dev()
327 spin_lock_init(&caifd->flow_lock); in caif_enroll_dev()
341 list_add_rcu(&caifd->list, &caifdevs->list); in caif_enroll_dev()
343 strlcpy(caifd->layer.name, dev->name, in caif_enroll_dev()
344 sizeof(caifd->layer.name)); in caif_enroll_dev()
345 caifd->layer.transmit = transmit; in caif_enroll_dev()
348 &caifd->layer, in caif_enroll_dev()
364 struct caif_device_entry *caifd = NULL; in caif_device_notify() local
374 caifd = caif_get(dev); in caif_device_notify()
375 if (caifd == NULL && dev->type != ARPHRD_CAIF) in caif_device_notify()
380 if (caifd != NULL) in caif_device_notify()
403 caifd = caif_get(dev); in caif_device_notify()
404 if (caifd == NULL) { in caif_device_notify()
409 caifd->xoff = 0; in caif_device_notify()
410 cfcnfg_set_phy_state(cfg, &caifd->layer, true); in caif_device_notify()
418 caifd = caif_get(dev); in caif_device_notify()
419 if (!caifd || !caifd->layer.up || !caifd->layer.up->ctrlcmd) { in caif_device_notify()
424 cfcnfg_set_phy_state(cfg, &caifd->layer, false); in caif_device_notify()
425 caifd_hold(caifd); in caif_device_notify()
428 caifd->layer.up->ctrlcmd(caifd->layer.up, in caif_device_notify()
430 caifd->layer.id); in caif_device_notify()
432 spin_lock_bh(&caifd->flow_lock); in caif_device_notify()
441 if (caifd->xoff_skb_dtor != NULL && caifd->xoff_skb != NULL) in caif_device_notify()
442 caifd->xoff_skb->destructor = caifd->xoff_skb_dtor; in caif_device_notify()
444 caifd->xoff = 0; in caif_device_notify()
445 caifd->xoff_skb_dtor = NULL; in caif_device_notify()
446 caifd->xoff_skb = NULL; in caif_device_notify()
448 spin_unlock_bh(&caifd->flow_lock); in caif_device_notify()
449 caifd_put(caifd); in caif_device_notify()
455 caifd = caif_get(dev); in caif_device_notify()
456 if (caifd == NULL) { in caif_device_notify()
460 list_del_rcu(&caifd->list); in caif_device_notify()
474 if (caifd_refcnt_read(caifd) != 0 || in caif_device_notify()
475 cfcnfg_del_phy_layer(cfg, &caifd->layer) != 0) { in caif_device_notify()
479 list_add_rcu(&caifd->list, &caifdevs->list); in caif_device_notify()
485 dev_put(caifd->netdev); in caif_device_notify()
486 free_percpu(caifd->pcpu_refcnt); in caif_device_notify()
487 kfree(caifd); in caif_device_notify()
516 struct caif_device_entry *caifd, *tmp; in caif_exit_net() local
524 list_for_each_entry_safe(caifd, tmp, &caifdevs->list, list) { in caif_exit_net()
526 list_del_rcu(&caifd->list); in caif_exit_net()
527 cfcnfg_set_phy_state(cfg, &caifd->layer, false); in caif_exit_net()
530 (caifd_refcnt_read(caifd) != 0 || in caif_exit_net()
531 cfcnfg_del_phy_layer(cfg, &caifd->layer) != 0)) { in caif_exit_net()
538 dev_put(caifd->netdev); in caif_exit_net()
539 free_percpu(caifd->pcpu_refcnt); in caif_exit_net()
540 kfree(caifd); in caif_exit_net()