Searched refs:caifd (Results 1 - 1 of 1) sorted by relevance

/linux-4.4.14/net/caif/
H A Dcaif_dev.c94 struct caif_device_entry *caifd; caif_device_alloc() local
96 caifd = kzalloc(sizeof(*caifd), GFP_KERNEL); caif_device_alloc()
97 if (!caifd) caif_device_alloc()
99 caifd->pcpu_refcnt = alloc_percpu(int); caif_device_alloc()
100 if (!caifd->pcpu_refcnt) { caif_device_alloc()
101 kfree(caifd); caif_device_alloc()
104 caifd->netdev = dev; caif_device_alloc()
106 return caifd; caif_device_alloc()
113 struct caif_device_entry *caifd; caif_get() local
115 list_for_each_entry_rcu(caifd, &caifdevs->list, list) { caif_get()
116 if (caifd->netdev == dev) caif_get()
117 return caifd; caif_get()
124 struct caif_device_entry *caifd; caif_flow_cb() local
131 caifd = caif_get(skb->dev); caif_flow_cb()
133 WARN_ON(caifd == NULL); caif_flow_cb()
134 if (caifd == NULL) caif_flow_cb()
137 caifd_hold(caifd); caif_flow_cb()
140 spin_lock_bh(&caifd->flow_lock); caif_flow_cb()
141 send_xoff = caifd->xoff; caif_flow_cb()
142 caifd->xoff = 0; caif_flow_cb()
143 dtor = caifd->xoff_skb_dtor; caif_flow_cb()
145 if (WARN_ON(caifd->xoff_skb != skb)) caif_flow_cb()
148 caifd->xoff_skb = NULL; caif_flow_cb()
149 caifd->xoff_skb_dtor = NULL; caif_flow_cb()
151 spin_unlock_bh(&caifd->flow_lock); caif_flow_cb()
157 caifd->layer.up-> caif_flow_cb()
158 ctrlcmd(caifd->layer.up, caif_flow_cb()
160 caifd->layer.id); caif_flow_cb()
161 caifd_put(caifd); caif_flow_cb()
167 struct caif_device_entry *caifd = transmit() local
175 skb->dev = caifd->netdev; transmit()
180 if (likely(caifd->netdev->priv_flags & IFF_NO_QUEUE)) transmit()
183 if (unlikely(caifd->xoff)) transmit()
186 if (likely(!netif_queue_stopped(caifd->netdev))) { transmit()
194 high = (caifd->netdev->tx_queue_len * q_high) / 100; transmit()
200 spin_lock_bh(&caifd->flow_lock); transmit()
201 if (caifd->xoff) { transmit()
202 spin_unlock_bh(&caifd->flow_lock); transmit()
214 netif_queue_stopped(caifd->netdev), transmit()
216 caifd->xoff = 1; transmit()
217 caifd->xoff_skb = skb; transmit()
218 caifd->xoff_skb_dtor = skb->destructor; transmit()
220 spin_unlock_bh(&caifd->flow_lock); transmit()
222 caifd->layer.up->ctrlcmd(caifd->layer.up, transmit()
224 caifd->layer.id); transmit()
243 struct caif_device_entry *caifd; receive() local
249 caifd = caif_get(dev); receive()
251 if (!caifd || !caifd->layer.up || !caifd->layer.up->receive || receive()
252 !netif_oper_up(caifd->netdev)) { receive()
259 caifd_hold(caifd); receive()
262 err = caifd->layer.up->receive(caifd->layer.up, pkt); receive()
269 caifd_put(caifd); receive()
283 struct caif_device_entry *caifd; dev_flowctrl() local
287 caifd = caif_get(dev); dev_flowctrl()
288 if (!caifd || !caifd->layer.up || !caifd->layer.up->ctrlcmd) { dev_flowctrl()
293 caifd_hold(caifd); dev_flowctrl()
296 caifd->layer.up->ctrlcmd(caifd->layer.up, dev_flowctrl()
300 caifd->layer.id); dev_flowctrl()
301 caifd_put(caifd); dev_flowctrl()
311 struct caif_device_entry *caifd; caif_enroll_dev() local
317 caifd = caif_device_alloc(dev); caif_enroll_dev()
318 if (!caifd) caif_enroll_dev()
320 *layer = &caifd->layer; caif_enroll_dev()
321 spin_lock_init(&caifd->flow_lock); caif_enroll_dev()
335 list_add_rcu(&caifd->list, &caifdevs->list); caif_enroll_dev()
337 strncpy(caifd->layer.name, dev->name, caif_enroll_dev()
338 sizeof(caifd->layer.name) - 1); caif_enroll_dev()
339 caifd->layer.name[sizeof(caifd->layer.name) - 1] = 0; caif_enroll_dev()
340 caifd->layer.transmit = transmit; caif_enroll_dev()
343 &caifd->layer, caif_enroll_dev()
359 struct caif_device_entry *caifd = NULL; caif_device_notify() local
369 caifd = caif_get(dev); caif_device_notify()
370 if (caifd == NULL && dev->type != ARPHRD_CAIF) caif_device_notify()
375 if (caifd != NULL) caif_device_notify()
398 caifd = caif_get(dev); caif_device_notify()
399 if (caifd == NULL) { caif_device_notify()
404 caifd->xoff = 0; caif_device_notify()
405 cfcnfg_set_phy_state(cfg, &caifd->layer, true); caif_device_notify()
413 caifd = caif_get(dev); caif_device_notify()
414 if (!caifd || !caifd->layer.up || !caifd->layer.up->ctrlcmd) { caif_device_notify()
419 cfcnfg_set_phy_state(cfg, &caifd->layer, false); caif_device_notify()
420 caifd_hold(caifd); caif_device_notify()
423 caifd->layer.up->ctrlcmd(caifd->layer.up, caif_device_notify()
425 caifd->layer.id); caif_device_notify()
427 spin_lock_bh(&caifd->flow_lock); caif_device_notify()
436 if (caifd->xoff_skb_dtor != NULL && caifd->xoff_skb != NULL) caif_device_notify()
437 caifd->xoff_skb->destructor = caifd->xoff_skb_dtor; caif_device_notify()
439 caifd->xoff = 0; caif_device_notify()
440 caifd->xoff_skb_dtor = NULL; caif_device_notify()
441 caifd->xoff_skb = NULL; caif_device_notify()
443 spin_unlock_bh(&caifd->flow_lock); caif_device_notify()
444 caifd_put(caifd); caif_device_notify()
450 caifd = caif_get(dev); caif_device_notify()
451 if (caifd == NULL) { caif_device_notify()
455 list_del_rcu(&caifd->list); caif_device_notify()
460 * caifd is taken, simply ignore NETDEV_UNREGISTER and wait for caif_device_notify()
469 if (caifd_refcnt_read(caifd) != 0 || caif_device_notify()
470 cfcnfg_del_phy_layer(cfg, &caifd->layer) != 0) { caif_device_notify()
474 list_add_rcu(&caifd->list, &caifdevs->list); caif_device_notify()
480 dev_put(caifd->netdev); caif_device_notify()
481 free_percpu(caifd->pcpu_refcnt); caif_device_notify()
482 kfree(caifd); caif_device_notify()
511 struct caif_device_entry *caifd, *tmp; caif_exit_net() local
519 list_for_each_entry_safe(caifd, tmp, &caifdevs->list, list) { caif_exit_net()
521 list_del_rcu(&caifd->list); caif_exit_net()
522 cfcnfg_set_phy_state(cfg, &caifd->layer, false); caif_exit_net()
525 (caifd_refcnt_read(caifd) != 0 || caif_exit_net()
526 cfcnfg_del_phy_layer(cfg, &caifd->layer) != 0)) { caif_exit_net()
533 dev_put(caifd->netdev); caif_exit_net()
534 free_percpu(caifd->pcpu_refcnt); caif_exit_net()
535 kfree(caifd); caif_exit_net()

Completed in 99 milliseconds