Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ffd980f9 authored by Oliver Hartkopp's avatar Oliver Hartkopp Committed by David S. Miller
Browse files

[CAN]: Add broadcast manager (bcm) protocol



This patch adds the CAN broadcast manager (bcm) protocol.

Signed-off-by: default avatarOliver Hartkopp <oliver.hartkopp@volkswagen.de>
Signed-off-by: default avatarUrs Thuermann <urs.thuermann@volkswagen.de>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c18ce101
Loading
Loading
Loading
Loading
+65 −0
Original line number Diff line number Diff line
/*
 * linux/can/bcm.h
 *
 * Definitions for CAN Broadcast Manager (BCM)
 *
 * Author: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
 * Copyright (c) 2002-2007 Volkswagen Group Electronic Research
 * All rights reserved.
 *
 * Send feedback to <socketcan-users@lists.berlios.de>
 *
 */

#ifndef CAN_BCM_H
#define CAN_BCM_H

/**
 * struct bcm_msg_head - head of messages to/from the broadcast manager
 * @opcode:    opcode, see enum below.
 * @flags:     special flags, see below.
 * @count:     number of frames to send before changing interval.
 * @ival1:     interval for the first @count frames.
 * @ival2:     interval for the following frames.
 * @can_id:    CAN ID of frames to be sent or received.
 * @nframes:   number of frames appended to the message head.
 * @frames:    array of CAN frames.
 */
struct bcm_msg_head {
	int opcode;
	int flags;
	int count;
	struct timeval ival1, ival2;
	canid_t can_id;
	int nframes;
	struct can_frame frames[0];
};

enum {
	TX_SETUP = 1,	/* create (cyclic) transmission task */
	TX_DELETE,	/* remove (cyclic) transmission task */
	TX_READ,	/* read properties of (cyclic) transmission task */
	TX_SEND,	/* send one CAN frame */
	RX_SETUP,	/* create RX content filter subscription */
	RX_DELETE,	/* remove RX content filter subscription */
	RX_READ,	/* read properties of RX content filter subscription */
	TX_STATUS,	/* reply to TX_READ request */
	TX_EXPIRED,	/* notification on performed transmissions (count=0) */
	RX_STATUS,	/* reply to RX_READ request */
	RX_TIMEOUT,	/* cyclic message is absent */
	RX_CHANGED	/* updated CAN frame (detected content change) */
};

#define SETTIMER            0x0001
#define STARTTIMER          0x0002
#define TX_COUNTEVT         0x0004
#define TX_ANNOUNCE         0x0008
#define TX_CP_CAN_ID        0x0010
#define RX_FILTER_ID        0x0020
#define RX_CHECK_DLC        0x0040
#define RX_NO_AUTOTIMER     0x0080
#define RX_ANNOUNCE_RESUME  0x0100
#define TX_RESET_MULTI_IDX  0x0200
#define RX_RTR_FRAME        0x0400

#endif /* CAN_BCM_H */
+13 −0
Original line number Diff line number Diff line
@@ -26,3 +26,16 @@ config CAN_RAW
	  most cases where no higher level protocol is being used. The raw
	  socket has several filter options e.g. ID masking / error frames.
	  To receive/send raw CAN messages, use AF_CAN with protocol CAN_RAW.

config CAN_BCM
	tristate "Broadcast Manager CAN Protocol (with content filtering)"
	depends on CAN
	default N
	---help---
	  The Broadcast Manager offers content filtering, timeout monitoring,
	  sending of RTR frames, and cyclic CAN messages without permanent user
	  interaction. The BCM can be 'programmed' via the BSD socket API and
	  informs you on demand e.g. only on content updates / timeouts.
	  You probably want to use the bcm socket in most cases where cyclic
	  CAN messages are used on the bus (e.g. in automotive environments).
	  To use the Broadcast Manager, use AF_CAN with protocol CAN_BCM.
+3 −0
Original line number Diff line number Diff line
@@ -7,3 +7,6 @@ can-objs := af_can.o proc.o

obj-$(CONFIG_CAN_RAW)	+= can-raw.o
can-raw-objs		:= raw.o

obj-$(CONFIG_CAN_BCM)	+= can-bcm.o
can-bcm-objs		:= bcm.o

net/can/bcm.c

0 → 100644
+1561 −0

File added.

Preview size limit exceeded, changes collapsed.