1*4dc78e53SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */ 2*4dc78e53SAndroid Build Coastguard Worker /* 3*4dc78e53SAndroid Build Coastguard Worker * linux/can/netlink.h 4*4dc78e53SAndroid Build Coastguard Worker * 5*4dc78e53SAndroid Build Coastguard Worker * Definitions for the CAN netlink interface 6*4dc78e53SAndroid Build Coastguard Worker * 7*4dc78e53SAndroid Build Coastguard Worker * Copyright (c) 2009 Wolfgang Grandegger <[email protected]> 8*4dc78e53SAndroid Build Coastguard Worker * 9*4dc78e53SAndroid Build Coastguard Worker * This program is free software; you can redistribute it and/or modify 10*4dc78e53SAndroid Build Coastguard Worker * it under the terms of the version 2 of the GNU General Public License 11*4dc78e53SAndroid Build Coastguard Worker * as published by the Free Software Foundation 12*4dc78e53SAndroid Build Coastguard Worker * 13*4dc78e53SAndroid Build Coastguard Worker * This program is distributed in the hope that it will be useful, 14*4dc78e53SAndroid Build Coastguard Worker * but WITHOUT ANY WARRANTY; without even the implied warranty of 15*4dc78e53SAndroid Build Coastguard Worker * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16*4dc78e53SAndroid Build Coastguard Worker * GNU General Public License for more details. 17*4dc78e53SAndroid Build Coastguard Worker */ 18*4dc78e53SAndroid Build Coastguard Worker 19*4dc78e53SAndroid Build Coastguard Worker #ifndef _CAN_NETLINK_H 20*4dc78e53SAndroid Build Coastguard Worker #define _CAN_NETLINK_H 21*4dc78e53SAndroid Build Coastguard Worker 22*4dc78e53SAndroid Build Coastguard Worker #include <linux/types.h> 23*4dc78e53SAndroid Build Coastguard Worker 24*4dc78e53SAndroid Build Coastguard Worker /* 25*4dc78e53SAndroid Build Coastguard Worker * CAN bit-timing parameters 26*4dc78e53SAndroid Build Coastguard Worker * 27*4dc78e53SAndroid Build Coastguard Worker * For further information, please read chapter "8 BIT TIMING 28*4dc78e53SAndroid Build Coastguard Worker * REQUIREMENTS" of the "Bosch CAN Specification version 2.0" 29*4dc78e53SAndroid Build Coastguard Worker * at http://www.semiconductors.bosch.de/pdf/can2spec.pdf. 30*4dc78e53SAndroid Build Coastguard Worker */ 31*4dc78e53SAndroid Build Coastguard Worker struct can_bittiming { 32*4dc78e53SAndroid Build Coastguard Worker __u32 bitrate; /* Bit-rate in bits/second */ 33*4dc78e53SAndroid Build Coastguard Worker __u32 sample_point; /* Sample point in one-tenth of a percent */ 34*4dc78e53SAndroid Build Coastguard Worker __u32 tq; /* Time quanta (TQ) in nanoseconds */ 35*4dc78e53SAndroid Build Coastguard Worker __u32 prop_seg; /* Propagation segment in TQs */ 36*4dc78e53SAndroid Build Coastguard Worker __u32 phase_seg1; /* Phase buffer segment 1 in TQs */ 37*4dc78e53SAndroid Build Coastguard Worker __u32 phase_seg2; /* Phase buffer segment 2 in TQs */ 38*4dc78e53SAndroid Build Coastguard Worker __u32 sjw; /* Synchronisation jump width in TQs */ 39*4dc78e53SAndroid Build Coastguard Worker __u32 brp; /* Bit-rate prescaler */ 40*4dc78e53SAndroid Build Coastguard Worker }; 41*4dc78e53SAndroid Build Coastguard Worker 42*4dc78e53SAndroid Build Coastguard Worker /* 43*4dc78e53SAndroid Build Coastguard Worker * CAN hardware-dependent bit-timing constant 44*4dc78e53SAndroid Build Coastguard Worker * 45*4dc78e53SAndroid Build Coastguard Worker * Used for calculating and checking bit-timing parameters 46*4dc78e53SAndroid Build Coastguard Worker */ 47*4dc78e53SAndroid Build Coastguard Worker struct can_bittiming_const { 48*4dc78e53SAndroid Build Coastguard Worker char name[16]; /* Name of the CAN controller hardware */ 49*4dc78e53SAndroid Build Coastguard Worker __u32 tseg1_min; /* Time segment 1 = prop_seg + phase_seg1 */ 50*4dc78e53SAndroid Build Coastguard Worker __u32 tseg1_max; 51*4dc78e53SAndroid Build Coastguard Worker __u32 tseg2_min; /* Time segment 2 = phase_seg2 */ 52*4dc78e53SAndroid Build Coastguard Worker __u32 tseg2_max; 53*4dc78e53SAndroid Build Coastguard Worker __u32 sjw_max; /* Synchronisation jump width */ 54*4dc78e53SAndroid Build Coastguard Worker __u32 brp_min; /* Bit-rate prescaler */ 55*4dc78e53SAndroid Build Coastguard Worker __u32 brp_max; 56*4dc78e53SAndroid Build Coastguard Worker __u32 brp_inc; 57*4dc78e53SAndroid Build Coastguard Worker }; 58*4dc78e53SAndroid Build Coastguard Worker 59*4dc78e53SAndroid Build Coastguard Worker /* 60*4dc78e53SAndroid Build Coastguard Worker * CAN clock parameters 61*4dc78e53SAndroid Build Coastguard Worker */ 62*4dc78e53SAndroid Build Coastguard Worker struct can_clock { 63*4dc78e53SAndroid Build Coastguard Worker __u32 freq; /* CAN system clock frequency in Hz */ 64*4dc78e53SAndroid Build Coastguard Worker }; 65*4dc78e53SAndroid Build Coastguard Worker 66*4dc78e53SAndroid Build Coastguard Worker /* 67*4dc78e53SAndroid Build Coastguard Worker * CAN operational and error states 68*4dc78e53SAndroid Build Coastguard Worker */ 69*4dc78e53SAndroid Build Coastguard Worker enum can_state { 70*4dc78e53SAndroid Build Coastguard Worker CAN_STATE_ERROR_ACTIVE = 0, /* RX/TX error count < 96 */ 71*4dc78e53SAndroid Build Coastguard Worker CAN_STATE_ERROR_WARNING, /* RX/TX error count < 128 */ 72*4dc78e53SAndroid Build Coastguard Worker CAN_STATE_ERROR_PASSIVE, /* RX/TX error count < 256 */ 73*4dc78e53SAndroid Build Coastguard Worker CAN_STATE_BUS_OFF, /* RX/TX error count >= 256 */ 74*4dc78e53SAndroid Build Coastguard Worker CAN_STATE_STOPPED, /* Device is stopped */ 75*4dc78e53SAndroid Build Coastguard Worker CAN_STATE_SLEEPING, /* Device is sleeping */ 76*4dc78e53SAndroid Build Coastguard Worker CAN_STATE_MAX 77*4dc78e53SAndroid Build Coastguard Worker }; 78*4dc78e53SAndroid Build Coastguard Worker 79*4dc78e53SAndroid Build Coastguard Worker /* 80*4dc78e53SAndroid Build Coastguard Worker * CAN bus error counters 81*4dc78e53SAndroid Build Coastguard Worker */ 82*4dc78e53SAndroid Build Coastguard Worker struct can_berr_counter { 83*4dc78e53SAndroid Build Coastguard Worker __u16 txerr; 84*4dc78e53SAndroid Build Coastguard Worker __u16 rxerr; 85*4dc78e53SAndroid Build Coastguard Worker }; 86*4dc78e53SAndroid Build Coastguard Worker 87*4dc78e53SAndroid Build Coastguard Worker /* 88*4dc78e53SAndroid Build Coastguard Worker * CAN controller mode 89*4dc78e53SAndroid Build Coastguard Worker */ 90*4dc78e53SAndroid Build Coastguard Worker struct can_ctrlmode { 91*4dc78e53SAndroid Build Coastguard Worker __u32 mask; 92*4dc78e53SAndroid Build Coastguard Worker __u32 flags; 93*4dc78e53SAndroid Build Coastguard Worker }; 94*4dc78e53SAndroid Build Coastguard Worker 95*4dc78e53SAndroid Build Coastguard Worker #define CAN_CTRLMODE_LOOPBACK 0x01 /* Loopback mode */ 96*4dc78e53SAndroid Build Coastguard Worker #define CAN_CTRLMODE_LISTENONLY 0x02 /* Listen-only mode */ 97*4dc78e53SAndroid Build Coastguard Worker #define CAN_CTRLMODE_3_SAMPLES 0x04 /* Triple sampling mode */ 98*4dc78e53SAndroid Build Coastguard Worker #define CAN_CTRLMODE_ONE_SHOT 0x08 /* One-Shot mode */ 99*4dc78e53SAndroid Build Coastguard Worker #define CAN_CTRLMODE_BERR_REPORTING 0x10 /* Bus-error reporting */ 100*4dc78e53SAndroid Build Coastguard Worker #define CAN_CTRLMODE_FD 0x20 /* CAN FD mode */ 101*4dc78e53SAndroid Build Coastguard Worker #define CAN_CTRLMODE_PRESUME_ACK 0x40 /* Ignore missing CAN ACKs */ 102*4dc78e53SAndroid Build Coastguard Worker #define CAN_CTRLMODE_FD_NON_ISO 0x80 /* CAN FD in non-ISO mode */ 103*4dc78e53SAndroid Build Coastguard Worker #define CAN_CTRLMODE_CC_LEN8_DLC 0x100 /* Classic CAN DLC option */ 104*4dc78e53SAndroid Build Coastguard Worker #define CAN_CTRLMODE_TDC_AUTO 0x200 /* CAN transiver automatically calculates TDCV */ 105*4dc78e53SAndroid Build Coastguard Worker #define CAN_CTRLMODE_TDC_MANUAL 0x400 /* TDCV is manually set up by user */ 106*4dc78e53SAndroid Build Coastguard Worker 107*4dc78e53SAndroid Build Coastguard Worker /* 108*4dc78e53SAndroid Build Coastguard Worker * CAN device statistics 109*4dc78e53SAndroid Build Coastguard Worker */ 110*4dc78e53SAndroid Build Coastguard Worker struct can_device_stats { 111*4dc78e53SAndroid Build Coastguard Worker __u32 bus_error; /* Bus errors */ 112*4dc78e53SAndroid Build Coastguard Worker __u32 error_warning; /* Changes to error warning state */ 113*4dc78e53SAndroid Build Coastguard Worker __u32 error_passive; /* Changes to error passive state */ 114*4dc78e53SAndroid Build Coastguard Worker __u32 bus_off; /* Changes to bus off state */ 115*4dc78e53SAndroid Build Coastguard Worker __u32 arbitration_lost; /* Arbitration lost errors */ 116*4dc78e53SAndroid Build Coastguard Worker __u32 restarts; /* CAN controller re-starts */ 117*4dc78e53SAndroid Build Coastguard Worker }; 118*4dc78e53SAndroid Build Coastguard Worker 119*4dc78e53SAndroid Build Coastguard Worker /* 120*4dc78e53SAndroid Build Coastguard Worker * CAN netlink interface 121*4dc78e53SAndroid Build Coastguard Worker */ 122*4dc78e53SAndroid Build Coastguard Worker enum { 123*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_UNSPEC, 124*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_BITTIMING, 125*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_BITTIMING_CONST, 126*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_CLOCK, 127*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_STATE, 128*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_CTRLMODE, 129*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_RESTART_MS, 130*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_RESTART, 131*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_BERR_COUNTER, 132*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_DATA_BITTIMING, 133*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_DATA_BITTIMING_CONST, 134*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_TERMINATION, 135*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_TERMINATION_CONST, 136*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_BITRATE_CONST, 137*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_DATA_BITRATE_CONST, 138*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_BITRATE_MAX, 139*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_TDC, 140*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_CTRLMODE_EXT, 141*4dc78e53SAndroid Build Coastguard Worker 142*4dc78e53SAndroid Build Coastguard Worker /* add new constants above here */ 143*4dc78e53SAndroid Build Coastguard Worker __IFLA_CAN_MAX, 144*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_MAX = __IFLA_CAN_MAX - 1 145*4dc78e53SAndroid Build Coastguard Worker }; 146*4dc78e53SAndroid Build Coastguard Worker 147*4dc78e53SAndroid Build Coastguard Worker /* 148*4dc78e53SAndroid Build Coastguard Worker * CAN FD Transmitter Delay Compensation (TDC) 149*4dc78e53SAndroid Build Coastguard Worker * 150*4dc78e53SAndroid Build Coastguard Worker * Please refer to struct can_tdc_const and can_tdc in 151*4dc78e53SAndroid Build Coastguard Worker * include/linux/can/bittiming.h for further details. 152*4dc78e53SAndroid Build Coastguard Worker */ 153*4dc78e53SAndroid Build Coastguard Worker enum { 154*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_TDC_UNSPEC, 155*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_TDC_TDCV_MIN, /* u32 */ 156*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_TDC_TDCV_MAX, /* u32 */ 157*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_TDC_TDCO_MIN, /* u32 */ 158*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_TDC_TDCO_MAX, /* u32 */ 159*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_TDC_TDCF_MIN, /* u32 */ 160*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_TDC_TDCF_MAX, /* u32 */ 161*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_TDC_TDCV, /* u32 */ 162*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_TDC_TDCO, /* u32 */ 163*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_TDC_TDCF, /* u32 */ 164*4dc78e53SAndroid Build Coastguard Worker 165*4dc78e53SAndroid Build Coastguard Worker /* add new constants above here */ 166*4dc78e53SAndroid Build Coastguard Worker __IFLA_CAN_TDC, 167*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_TDC_MAX = __IFLA_CAN_TDC - 1 168*4dc78e53SAndroid Build Coastguard Worker }; 169*4dc78e53SAndroid Build Coastguard Worker 170*4dc78e53SAndroid Build Coastguard Worker /* 171*4dc78e53SAndroid Build Coastguard Worker * IFLA_CAN_CTRLMODE_EXT nest: controller mode extended parameters 172*4dc78e53SAndroid Build Coastguard Worker */ 173*4dc78e53SAndroid Build Coastguard Worker enum { 174*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_CTRLMODE_UNSPEC, 175*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_CTRLMODE_SUPPORTED, /* u32 */ 176*4dc78e53SAndroid Build Coastguard Worker 177*4dc78e53SAndroid Build Coastguard Worker /* add new constants above here */ 178*4dc78e53SAndroid Build Coastguard Worker __IFLA_CAN_CTRLMODE, 179*4dc78e53SAndroid Build Coastguard Worker IFLA_CAN_CTRLMODE_MAX = __IFLA_CAN_CTRLMODE - 1 180*4dc78e53SAndroid Build Coastguard Worker }; 181*4dc78e53SAndroid Build Coastguard Worker 182*4dc78e53SAndroid Build Coastguard Worker /* u16 termination range: 1..65535 Ohms */ 183*4dc78e53SAndroid Build Coastguard Worker #define CAN_TERMINATION_DISABLED 0 184*4dc78e53SAndroid Build Coastguard Worker 185*4dc78e53SAndroid Build Coastguard Worker #endif /* !_UAPI_CAN_NETLINK_H */ 186