1224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
2224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * linux/can.h
3224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
4224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Definitions for CAN network layer (socket addr / CAN frame / CAN filter)
5224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
6224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Authors: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
7224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *          Urs Thuermann   <urs.thuermann@volkswagen.de>
8224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Copyright (c) 2002-2007 Volkswagen Group Electronic Research
9224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * All rights reserved.
10224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
11314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * Redistribution and use in source and binary forms, with or without
12314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * modification, are permitted provided that the following conditions
13314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * are met:
14314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * 1. Redistributions of source code must retain the above copyright
15314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris *    notice, this list of conditions and the following disclaimer.
16314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * 2. Redistributions in binary form must reproduce the above copyright
17314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris *    notice, this list of conditions and the following disclaimer in the
18314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris *    documentation and/or other materials provided with the distribution.
19314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * 3. Neither the name of Volkswagen nor the names of its contributors
20314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris *    may be used to endorse or promote products derived from this software
21314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris *    without specific prior written permission.
22314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris *
23314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * Alternatively, provided that this notice is retained in full, this
24314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * software may be distributed under the terms of the GNU General
25314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * Public License ("GPL") version 2, in which case the provisions of the
26314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * GPL apply INSTEAD OF those given above.
27314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris *
28314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * The provided data structures and external interfaces from this code
29314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * are not restricted to be used by modules with a GPL compatible license.
30314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris *
31314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
34314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
36314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
37314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
38314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
39314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
40314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
41314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
42314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * DAMAGE.
43224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
44224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
45314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris#ifndef _UAPI_CAN_H
46314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris#define _UAPI_CAN_H
47224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
48224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/types.h>
49224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/socket.h>
50224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
51224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* controller area network (CAN) kernel definitions */
52224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
53224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* special address description flags for the CAN_ID */
54224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CAN_EFF_FLAG 0x80000000U /* EFF/SFF is set in the MSB */
55224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CAN_RTR_FLAG 0x40000000U /* remote transmission request */
56224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CAN_ERR_FLAG 0x20000000U /* error message frame */
57224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
58224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* valid bits in CAN ID for frame formats */
59224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CAN_SFF_MASK 0x000007FFU /* standard frame format (SFF) */
60224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CAN_EFF_MASK 0x1FFFFFFFU /* extended frame format (EFF) */
61224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CAN_ERR_MASK 0x1FFFFFFFU /* omit EFF, RTR, ERR flags */
62224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
63224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
64224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Controller Area Network Identifier structure
65224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
66224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * bit 0-28	: CAN identifier (11/29 bit)
67224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * bit 29	: error message frame flag (0 = data frame, 1 = error message)
68224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * bit 30	: remote transmission request flag (1 = rtr frame)
69224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * bit 31	: frame format flag (0 = standard 11 bit, 1 = extended 29 bit)
70224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
71224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengtypedef __u32 canid_t;
72224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
73224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CAN_SFF_ID_BITS		11
74224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CAN_EFF_ID_BITS		29
75224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
76224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
77224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Controller Area Network Error Message Frame Mask structure
78224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
79224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * bit 0-28	: error class mask (see include/linux/can/error.h)
80224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * bit 29-31	: set to zero
81224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
82224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengtypedef __u32 can_err_mask_t;
83224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
84224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* CAN payload length and DLC definitions according to ISO 11898-1 */
85224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CAN_MAX_DLC 8
86224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CAN_MAX_DLEN 8
87224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
88224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* CAN FD payload length and DLC definitions according to ISO 11898-7 */
89224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CANFD_MAX_DLC 15
90224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CANFD_MAX_DLEN 64
91224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
92224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**
93224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * struct can_frame - basic CAN frame structure
94224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @can_id:  CAN ID of the frame and CAN_*_FLAG flags, see canid_t definition
95224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @can_dlc: frame payload length in byte (0 .. 8) aka data length code
96224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *           N.B. the DLC field from ISO 11898-1 Chapter 8.4.2.3 has a 1:1
97224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *           mapping of the 'data length code' to the real payload length
9812e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris * @__pad:   padding
9912e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris * @__res0:  reserved / padding
10012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris * @__res1:  reserved / padding
101224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @data:    CAN frame payload (up to 8 byte)
102224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
103224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct can_frame {
104224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	canid_t can_id;  /* 32 bit CAN_ID + EFF/RTR/ERR flags */
105224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8    can_dlc; /* frame payload length in byte (0 .. CAN_MAX_DLEN) */
10612e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	__u8    __pad;   /* padding */
10712e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	__u8    __res0;  /* reserved / padding */
10812e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	__u8    __res1;  /* reserved / padding */
109224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8    data[CAN_MAX_DLEN] __attribute__((aligned(8)));
110224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
111224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
112224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
113224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * defined bits for canfd_frame.flags
114224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
115224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * The use of struct canfd_frame implies the Extended Data Length (EDL) bit to
116224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * be set in the CAN frame bitstream on the wire. The EDL bit switch turns
117224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * the CAN controllers bitstream processor into the CAN FD mode which creates
118224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * two new options within the CAN FD frame specification:
119224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
120224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Bit Rate Switch - to indicate a second bitrate is/was used for the payload
121224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Error State Indicator - represents the error state of the transmitting node
122224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
123224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * As the CANFD_ESI bit is internally generated by the transmitting CAN
124224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * controller only the CANFD_BRS bit is relevant for real CAN controllers when
125224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * building a CAN FD frame for transmission. Setting the CANFD_ESI bit can make
126224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * sense for virtual CAN interfaces to test applications with echoed frames.
127224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
128224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CANFD_BRS 0x01 /* bit rate switch (second bitrate for payload data) */
129224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CANFD_ESI 0x02 /* error state indicator of the transmitting node */
130224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
131224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**
132224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * struct canfd_frame - CAN flexible data rate frame structure
133224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @can_id: CAN ID of the frame and CAN_*_FLAG flags, see canid_t definition
134224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @len:    frame payload length in byte (0 .. CANFD_MAX_DLEN)
135224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @flags:  additional flags for CAN FD
136224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @__res0: reserved / padding
137224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @__res1: reserved / padding
138224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @data:   CAN FD frame payload (up to CANFD_MAX_DLEN byte)
139224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
140224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct canfd_frame {
141224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	canid_t can_id;  /* 32 bit CAN_ID + EFF/RTR/ERR flags */
142224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8    len;     /* frame payload length in byte */
143224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8    flags;   /* additional flags for CAN FD */
144224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8    __res0;  /* reserved / padding */
145224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8    __res1;  /* reserved / padding */
146224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8    data[CANFD_MAX_DLEN] __attribute__((aligned(8)));
147224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
148224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
149224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CAN_MTU		(sizeof(struct can_frame))
150224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CANFD_MTU	(sizeof(struct canfd_frame))
151224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
152224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* particular protocols of the protocol family PF_CAN */
153224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CAN_RAW		1 /* RAW sockets */
154224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CAN_BCM		2 /* Broadcast Manager */
155224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CAN_TP16	3 /* VAG Transport Protocol v1.6 */
156224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CAN_TP20	4 /* VAG Transport Protocol v2.0 */
157224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CAN_MCNET	5 /* Bosch MCNet */
158224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CAN_ISOTP	6 /* ISO 15765-2 Transport Protocol */
159224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CAN_NPROTO	7
160224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
161224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define SOL_CAN_BASE 100
162224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
163224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**
164224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * struct sockaddr_can - the sockaddr structure for CAN sockets
165224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @can_family:  address family number AF_CAN.
166224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @can_ifindex: CAN network interface index.
167224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @can_addr:    protocol specific address information
168224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
169224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct sockaddr_can {
170224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__kernel_sa_family_t can_family;
171224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int         can_ifindex;
172224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	union {
173224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng		/* transport protocol class address information (e.g. ISOTP) */
174224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng		struct { canid_t rx_id, tx_id; } tp;
175224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
176224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng		/* reserved for future CAN protocols address information */
177224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	} can_addr;
178224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
179224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
180224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**
181224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * struct can_filter - CAN ID based filter in can_register().
182224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @can_id:   relevant bits of CAN ID which are not masked out.
183224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @can_mask: CAN mask (see description)
184224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
185224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Description:
186224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * A filter matches, when
187224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
188224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *          <received_can_id> & mask == can_id & mask
189224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
190224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * The filter can be inverted (CAN_INV_FILTER bit set in can_id) or it can
191224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * filter for error message frames (CAN_ERR_FLAG bit set in mask).
192224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
193224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct can_filter {
194224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	canid_t can_id;
195224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	canid_t can_mask;
196224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
197224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
198224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CAN_INV_FILTER 0x20000000U /* to be set in can_filter.can_id */
199224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
200314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris#endif /* !_UAPI_CAN_H */
201