mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	[CAN]: Add broadcast manager (bcm) protocol
This patch adds the CAN broadcast manager (bcm) protocol. 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>
This commit is contained in:
		
							parent
							
								
									c18ce101f2
								
							
						
					
					
						commit
						ffd980f976
					
				
					 4 changed files with 1642 additions and 0 deletions
				
			
		
							
								
								
									
										65
									
								
								include/linux/can/bcm.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								include/linux/can/bcm.h
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,65 @@
 | 
			
		|||
/*
 | 
			
		||||
 * 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 */
 | 
			
		||||
| 
						 | 
				
			
			@ -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.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1561
									
								
								net/can/bcm.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1561
									
								
								net/can/bcm.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
		Loading…
	
		Reference in a new issue