aboutsummaryrefslogtreecommitdiffstats
path: root/net/can/af_can.h
diff options
context:
space:
mode:
authorOliver Hartkopp <oliver.hartkopp@volkswagen.de>2007-11-16 18:52:17 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-28 17:54:10 -0500
commit0d66548a10cbbe0ef256852d63d30603f0f73f9b (patch)
tree58c91033f88014c6a25b4d105a721bc58ec35f2c /net/can/af_can.h
parentcd05acfe65ed2cf2db683fa9a6adb8d35635263b (diff)
[CAN]: Add PF_CAN core module
This patch adds the CAN core functionality but no protocols or drivers. No protocol implementations are included here. They come as separate patches. Protocol numbers are already in include/linux/can.h. Signed-off-by: Oliver Hartkopp <oliver.hartkopp@volkswagen.de> Signed-off-by: Urs Thuermann <urs.thuermann@volkswagen.de> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/can/af_can.h')
-rw-r--r--net/can/af_can.h122
1 files changed, 122 insertions, 0 deletions
diff --git a/net/can/af_can.h b/net/can/af_can.h
new file mode 100644
index 000000000000..18f91e37cc30
--- /dev/null
+++ b/net/can/af_can.h
@@ -0,0 +1,122 @@
1/*
2 * Copyright (c) 2002-2007 Volkswagen Group Electronic Research
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of Volkswagen nor the names of its contributors
14 * may be used to endorse or promote products derived from this software
15 * without specific prior written permission.
16 *
17 * Alternatively, provided that this notice is retained in full, this
18 * software may be distributed under the terms of the GNU General
19 * Public License ("GPL") version 2, in which case the provisions of the
20 * GPL apply INSTEAD OF those given above.
21 *
22 * The provided data structures and external interfaces from this code
23 * are not restricted to be used by modules with a GPL compatible license.
24 *
25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
36 * DAMAGE.
37 *
38 * Send feedback to <socketcan-users@lists.berlios.de>
39 *
40 */
41
42#ifndef AF_CAN_H
43#define AF_CAN_H
44
45#include <linux/skbuff.h>
46#include <linux/netdevice.h>
47#include <linux/list.h>
48#include <linux/rcupdate.h>
49#include <linux/can.h>
50
51/* af_can rx dispatcher structures */
52
53struct receiver {
54 struct hlist_node list;
55 struct rcu_head rcu;
56 canid_t can_id;
57 canid_t mask;
58 unsigned long matches;
59 void (*func)(struct sk_buff *, void *);
60 void *data;
61 char *ident;
62};
63
64enum { RX_ERR, RX_ALL, RX_FIL, RX_INV, RX_EFF, RX_MAX };
65
66struct dev_rcv_lists {
67 struct hlist_node list;
68 struct rcu_head rcu;
69 struct net_device *dev;
70 struct hlist_head rx[RX_MAX];
71 struct hlist_head rx_sff[0x800];
72 int remove_on_zero_entries;
73 int entries;
74};
75
76/* statistic structures */
77
78/* can be reset e.g. by can_init_stats() */
79struct s_stats {
80 unsigned long jiffies_init;
81
82 unsigned long rx_frames;
83 unsigned long tx_frames;
84 unsigned long matches;
85
86 unsigned long total_rx_rate;
87 unsigned long total_tx_rate;
88 unsigned long total_rx_match_ratio;
89
90 unsigned long current_rx_rate;
91 unsigned long current_tx_rate;
92 unsigned long current_rx_match_ratio;
93
94 unsigned long max_rx_rate;
95 unsigned long max_tx_rate;
96 unsigned long max_rx_match_ratio;
97
98 unsigned long rx_frames_delta;
99 unsigned long tx_frames_delta;
100 unsigned long matches_delta;
101};
102
103/* persistent statistics */
104struct s_pstats {
105 unsigned long stats_reset;
106 unsigned long user_reset;
107 unsigned long rcv_entries;
108 unsigned long rcv_entries_max;
109};
110
111/* function prototypes for the CAN networklayer procfs (proc.c) */
112extern void can_init_proc(void);
113extern void can_remove_proc(void);
114extern void can_stat_update(unsigned long data);
115
116/* structures and variables from af_can.c needed in proc.c for reading */
117extern struct timer_list can_stattimer; /* timer for statistics update */
118extern struct s_stats can_stats; /* packet statistics */
119extern struct s_pstats can_pstats; /* receive list statistics */
120extern struct hlist_head can_rx_dev_list; /* rx dispatcher structures */
121
122#endif /* AF_CAN_H */