linux/include/linux/can/rx-offload.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 * linux/can/rx-offload.h
   4 *
   5 * Copyright (c) 2014 David Jander, Protonic Holland
   6 * Copyright (c) 2014-2017 Pengutronix, Marc Kleine-Budde <kernel@pengutronix.de>
   7 */
   8
   9#ifndef _CAN_RX_OFFLOAD_H
  10#define _CAN_RX_OFFLOAD_H
  11
  12#include <linux/netdevice.h>
  13#include <linux/can.h>
  14
  15struct can_rx_offload {
  16        struct net_device *dev;
  17
  18        struct sk_buff *(*mailbox_read)(struct can_rx_offload *offload,
  19                                        unsigned int mb, u32 *timestamp,
  20                                        bool drop);
  21
  22        struct sk_buff_head skb_queue;
  23        struct sk_buff_head skb_irq_queue;
  24        u32 skb_queue_len_max;
  25
  26        unsigned int mb_first;
  27        unsigned int mb_last;
  28
  29        struct napi_struct napi;
  30
  31        bool inc;
  32};
  33
  34int can_rx_offload_add_timestamp(struct net_device *dev,
  35                                 struct can_rx_offload *offload);
  36int can_rx_offload_add_fifo(struct net_device *dev,
  37                            struct can_rx_offload *offload,
  38                            unsigned int weight);
  39int can_rx_offload_add_manual(struct net_device *dev,
  40                              struct can_rx_offload *offload,
  41                              unsigned int weight);
  42int can_rx_offload_irq_offload_timestamp(struct can_rx_offload *offload,
  43                                         u64 reg);
  44int can_rx_offload_irq_offload_fifo(struct can_rx_offload *offload);
  45int can_rx_offload_queue_sorted(struct can_rx_offload *offload,
  46                                struct sk_buff *skb, u32 timestamp);
  47unsigned int can_rx_offload_get_echo_skb(struct can_rx_offload *offload,
  48                                         unsigned int idx, u32 timestamp,
  49                                         unsigned int *frame_len_ptr);
  50int can_rx_offload_queue_tail(struct can_rx_offload *offload,
  51                              struct sk_buff *skb);
  52void can_rx_offload_irq_finish(struct can_rx_offload *offload);
  53void can_rx_offload_threaded_irq_finish(struct can_rx_offload *offload);
  54void can_rx_offload_del(struct can_rx_offload *offload);
  55void can_rx_offload_enable(struct can_rx_offload *offload);
  56
  57static inline void can_rx_offload_disable(struct can_rx_offload *offload)
  58{
  59        napi_disable(&offload->napi);
  60}
  61
  62#endif /* !_CAN_RX_OFFLOAD_H */
  63