Lines Matching full:can

2 /* af_can.c - Protocol family CAN core module
3 * (used by different CAN protocol modules)
58 #include <linux/can.h>
59 #include <linux/can/core.h>
60 #include <linux/can/skb.h>
61 #include <linux/can/can-ml.h>
81 /* table of registered CAN protocols */
132 err = request_module("can-proto-%d", protocol); in can_create()
139 pr_err_ratelimited("can: request_module (can-proto-%d) failed.\n", in can_create()
184 * can_send - transmit a CAN frame (optional with local loopback)
185 * @skb: pointer to socket buffer with CAN frame in data section
186 * @loop: loopback for listeners on local CAN sockets (recommended default!)
195 * -EPERM when trying to send on a non-CAN interface
196 * -EMSGSIZE CAN frame size is bigger than CAN interface MTU
197 * -EINVAL when the skb->data does not contain a valid CAN frame
203 struct can_pkg_stats *pkg_stats = dev_net(skb->dev)->can.pkg_stats; in can_send()
218 /* Make sure the CAN frame can pass the selected CAN netdevice. in can_send()
219 * As structs can_frame and canfd_frame are similar, we can provide in can_send()
220 * CAN FD frames to legacy CAN drivers as long as the length is <= 8 in can_send()
244 /* local loopback of sent CAN frames */ in can_send()
246 /* indication for the CAN driver: do loopback */ in can_send()
272 /* indication for the CAN driver: no loopback required */ in can_send()
310 return net->can.rx_alldev_list; in can_dev_rcv_lists_find()
315 * effhash - hash function for 29 bit CAN identifier reduction
316 * @can_id: 29 bit CAN identifier
319 * To reduce the linear traversal in one linked list of _single_ EFF CAN
339 * @can_id: pointer to CAN identifier of a given can_filter
340 * @mask: pointer to CAN mask of a given can_filter
355 * The filter can be inverted (CAN_INV_FILTER bit set in can_id) or it can
412 * can_rx_register - subscribe CAN frames from a specific interface
414 * @dev: pointer to netdevice (NULL => subscribe from 'all' CAN devices list)
415 * @can_id: CAN identifier (see description)
416 * @mask: CAN mask (see description)
428 * The filter can be inverted (CAN_INV_FILTER bit set in can_id) or it can
449 struct can_rcv_lists_stats *rcv_lists_stats = net->can.rcv_lists_stats; in can_rx_register()
464 spin_lock_bh(&net->can.rcvlists_lock); in can_rx_register()
483 spin_unlock_bh(&net->can.rcvlists_lock); in can_rx_register()
501 * can_rx_unregister - unsubscribe CAN frames from a specific interface
503 * @dev: pointer to netdevice (NULL => unsubscribe from 'all' CAN devices list)
504 * @can_id: CAN identifier
505 * @mask: CAN mask
518 struct can_rcv_lists_stats *rcv_lists_stats = net->can.rcv_lists_stats; in can_rx_unregister()
527 spin_lock_bh(&net->can.rcvlists_lock); in can_rx_unregister()
542 /* Check for bugs in CAN protocol implementations using af_can.c: in can_rx_unregister()
545 * the notifier for removing the CAN netdev is running we just print in can_rx_unregister()
549 pr_warn("can: receive list entry not found for dev %s, id %03X, mask %03X\n", in can_rx_unregister()
561 spin_unlock_bh(&net->can.rcvlists_lock); in can_rx_unregister()
647 struct can_pkg_stats *pkg_stats = net->can.pkg_stats; in can_receive()
661 matches = can_rcv_filter(net->can.rx_alldev_list, skb); in can_receive()
684 pr_warn_once("PF_CAN: dropped non conform CAN skbuff: dev type %d, len %d\n", in can_rcv()
691 pr_warn_once("PF_CAN: dropped non conform CAN skbuff: dev type %d, len %d, datalen %d\n", in can_rcv()
710 pr_warn_once("PF_CAN: dropped non conform CAN FD skbuff: dev type %d, len %d\n", in canfd_rcv()
717 pr_warn_once("PF_CAN: dropped non conform CAN FD skbuff: dev type %d, len %d, datalen %d\n", in canfd_rcv()
733 * can_proto_register - register CAN transport protocol
734 * @cp: pointer to CAN protocol structure
748 pr_err("can: protocol number %d out of range\n", proto); in can_proto_register()
759 pr_err("can: protocol %d already registered\n", proto); in can_proto_register()
775 * can_proto_unregister - unregister CAN transport protocol
776 * @cp: pointer to CAN protocol structure
793 /* af_can notifier to create/remove CAN netdevice specific structs */
805 "No CAN mid layer private allocated, please fix your driver and use alloc_candev()!\n"); in can_notifier()
814 spin_lock_init(&net->can.rcvlists_lock); in can_pernet_init()
815 net->can.rx_alldev_list = in can_pernet_init()
816 kzalloc(sizeof(*net->can.rx_alldev_list), GFP_KERNEL); in can_pernet_init()
817 if (!net->can.rx_alldev_list) in can_pernet_init()
819 net->can.pkg_stats = kzalloc(sizeof(*net->can.pkg_stats), GFP_KERNEL); in can_pernet_init()
820 if (!net->can.pkg_stats) in can_pernet_init()
822 net->can.rcv_lists_stats = kzalloc(sizeof(*net->can.rcv_lists_stats), GFP_KERNEL); in can_pernet_init()
823 if (!net->can.rcv_lists_stats) in can_pernet_init()
829 timer_setup(&net->can.stattimer, can_stat_update, in can_pernet_init()
831 mod_timer(&net->can.stattimer, in can_pernet_init()
834 net->can.pkg_stats->jiffies_init = jiffies; in can_pernet_init()
841 kfree(net->can.pkg_stats); in can_pernet_init()
843 kfree(net->can.rx_alldev_list); in can_pernet_init()
853 del_timer_sync(&net->can.stattimer); in can_pernet_exit()
856 kfree(net->can.rx_alldev_list); in can_pernet_exit()
857 kfree(net->can.pkg_stats); in can_pernet_exit()
858 kfree(net->can.rcv_lists_stats); in can_pernet_exit()
899 pr_info("can: controller area network core\n"); in can_init()