Searched refs:caifd (Results 1 - 1 of 1) sorted by relevance
/linux-4.4.14/net/caif/ |
H A D | caif_dev.c | 94 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