Skip to content

Commit ffd980f

Browse files
Oliver Hartkoppdavem330
authored andcommitted
[CAN]: Add broadcast manager (bcm) protocol
This patch adds the CAN broadcast manager (bcm) protocol. Signed-off-by: Oliver Hartkopp <[email protected]> Signed-off-by: Urs Thuermann <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent c18ce10 commit ffd980f

File tree

4 files changed

+1642
-0
lines changed

4 files changed

+1642
-0
lines changed

include/linux/can/bcm.h

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/*
2+
* linux/can/bcm.h
3+
*
4+
* Definitions for CAN Broadcast Manager (BCM)
5+
*
6+
* Author: Oliver Hartkopp <[email protected]>
7+
* Copyright (c) 2002-2007 Volkswagen Group Electronic Research
8+
* All rights reserved.
9+
*
10+
* Send feedback to <[email protected]>
11+
*
12+
*/
13+
14+
#ifndef CAN_BCM_H
15+
#define CAN_BCM_H
16+
17+
/**
18+
* struct bcm_msg_head - head of messages to/from the broadcast manager
19+
* @opcode: opcode, see enum below.
20+
* @flags: special flags, see below.
21+
* @count: number of frames to send before changing interval.
22+
* @ival1: interval for the first @count frames.
23+
* @ival2: interval for the following frames.
24+
* @can_id: CAN ID of frames to be sent or received.
25+
* @nframes: number of frames appended to the message head.
26+
* @frames: array of CAN frames.
27+
*/
28+
struct bcm_msg_head {
29+
int opcode;
30+
int flags;
31+
int count;
32+
struct timeval ival1, ival2;
33+
canid_t can_id;
34+
int nframes;
35+
struct can_frame frames[0];
36+
};
37+
38+
enum {
39+
TX_SETUP = 1, /* create (cyclic) transmission task */
40+
TX_DELETE, /* remove (cyclic) transmission task */
41+
TX_READ, /* read properties of (cyclic) transmission task */
42+
TX_SEND, /* send one CAN frame */
43+
RX_SETUP, /* create RX content filter subscription */
44+
RX_DELETE, /* remove RX content filter subscription */
45+
RX_READ, /* read properties of RX content filter subscription */
46+
TX_STATUS, /* reply to TX_READ request */
47+
TX_EXPIRED, /* notification on performed transmissions (count=0) */
48+
RX_STATUS, /* reply to RX_READ request */
49+
RX_TIMEOUT, /* cyclic message is absent */
50+
RX_CHANGED /* updated CAN frame (detected content change) */
51+
};
52+
53+
#define SETTIMER 0x0001
54+
#define STARTTIMER 0x0002
55+
#define TX_COUNTEVT 0x0004
56+
#define TX_ANNOUNCE 0x0008
57+
#define TX_CP_CAN_ID 0x0010
58+
#define RX_FILTER_ID 0x0020
59+
#define RX_CHECK_DLC 0x0040
60+
#define RX_NO_AUTOTIMER 0x0080
61+
#define RX_ANNOUNCE_RESUME 0x0100
62+
#define TX_RESET_MULTI_IDX 0x0200
63+
#define RX_RTR_FRAME 0x0400
64+
65+
#endif /* CAN_BCM_H */

net/can/Kconfig

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,16 @@ config CAN_RAW
2626
most cases where no higher level protocol is being used. The raw
2727
socket has several filter options e.g. ID masking / error frames.
2828
To receive/send raw CAN messages, use AF_CAN with protocol CAN_RAW.
29+
30+
config CAN_BCM
31+
tristate "Broadcast Manager CAN Protocol (with content filtering)"
32+
depends on CAN
33+
default N
34+
---help---
35+
The Broadcast Manager offers content filtering, timeout monitoring,
36+
sending of RTR frames, and cyclic CAN messages without permanent user
37+
interaction. The BCM can be 'programmed' via the BSD socket API and
38+
informs you on demand e.g. only on content updates / timeouts.
39+
You probably want to use the bcm socket in most cases where cyclic
40+
CAN messages are used on the bus (e.g. in automotive environments).
41+
To use the Broadcast Manager, use AF_CAN with protocol CAN_BCM.

net/can/Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,6 @@ can-objs := af_can.o proc.o
77

88
obj-$(CONFIG_CAN_RAW) += can-raw.o
99
can-raw-objs := raw.o
10+
11+
obj-$(CONFIG_CAN_BCM) += can-bcm.o
12+
can-bcm-objs := bcm.o

0 commit comments

Comments
 (0)