Lines Matching defs:can_id

318  * @can_id: 29 bit CAN identifier
328 static unsigned int effhash(canid_t can_id)
332 hash = can_id;
333 hash ^= can_id >> CAN_EFF_RCV_HASH_BITS;
334 hash ^= can_id >> (2 * CAN_EFF_RCV_HASH_BITS);
341 * @can_id: pointer to CAN identifier of a given can_filter
352 * <received_can_id> & mask == can_id & mask
357 * The filter can be inverted (CAN_INV_FILTER bit set in can_id) or it can
362 * Pointer to optimal filterlist for the given can_id/mask pair.
364 * Reduced can_id to have a preprocessed filter compare value.
366 static struct hlist_head *can_rcv_list_find(canid_t *can_id, canid_t *mask,
369 canid_t inv = *can_id & CAN_INV_FILTER; /* save flag before masking */
383 if ((*mask & CAN_EFF_FLAG) && !(*can_id & CAN_EFF_FLAG))
387 *can_id &= *mask;
389 /* inverse can_id/can_mask filter */
397 /* extra filterlists for the subscription of a single non-RTR can_id */
399 !(*can_id & CAN_RTR_FLAG)) {
400 if (*can_id & CAN_EFF_FLAG) {
402 return &dev_rcv_lists->rx_eff[effhash(*can_id)];
405 return &dev_rcv_lists->rx_sff[*can_id];
409 /* default: filter via can_id/can_mask */
417 * @can_id: CAN identifier (see description)
428 * <received_can_id> & mask == can_id & mask
430 * The filter can be inverted (CAN_INV_FILTER bit set in can_id) or it can
444 int can_rx_register(struct net *net, struct net_device *dev, canid_t can_id,
468 rcv_list = can_rcv_list_find(&can_id, &mask, dev_rcv_lists);
470 rcv->can_id = can_id;
505 * @can_id: CAN identifier
513 void can_rx_unregister(struct net *net, struct net_device *dev, canid_t can_id,
531 rcv_list = can_rcv_list_find(&can_id, &mask, dev_rcv_lists);
538 if (rcv->can_id == can_id && rcv->mask == mask &&
551 DNAME(dev), can_id, mask);
584 canid_t can_id = cf->can_id;
589 if (can_id & CAN_ERR_FLAG) {
592 if (can_id & rcv->mask) {
606 /* check for can_id/mask entries */
608 if ((can_id & rcv->mask) == rcv->can_id) {
614 /* check for inverted can_id/mask entries */
616 if ((can_id & rcv->mask) != rcv->can_id) {
623 if (can_id & CAN_RTR_FLAG)
626 if (can_id & CAN_EFF_FLAG) {
627 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx_eff[effhash(can_id)], list) {
628 if (rcv->can_id == can_id) {
634 can_id &= CAN_SFF_MASK;
635 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx_sff[can_id], list) {