1 /* 2 * linux/can/netlink.h 3 * 4 * Definitions for the CAN netlink interface 5 * 6 * Copyright (c) 2009 Wolfgang Grandegger <wg (at) grandegger.com> 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the version 2 of the GNU General Public License 10 * as published by the Free Software Foundation 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 */ 17 18 #ifndef CAN_NETLINK_H 19 #define CAN_NETLINK_H 20 21 #include <linux/types.h> 22 23 /* 24 * CAN bit-timing parameters 25 * 26 * For further information, please read chapter "8 BIT TIMING 27 * REQUIREMENTS" of the "Bosch CAN Specification version 2.0" 28 * at http://www.semiconductors.bosch.de/pdf/can2spec.pdf. 29 */ 30 struct can_bittiming { 31 __u32 bitrate; /* Bit-rate in bits/second */ 32 __u32 sample_point; /* Sample point in one-tenth of a percent */ 33 __u32 tq; /* Time quanta (TQ) in nanoseconds */ 34 __u32 prop_seg; /* Propagation segment in TQs */ 35 __u32 phase_seg1; /* Phase buffer segment 1 in TQs */ 36 __u32 phase_seg2; /* Phase buffer segment 2 in TQs */ 37 __u32 sjw; /* Synchronisation jump width in TQs */ 38 __u32 brp; /* Bit-rate prescaler */ 39 }; 40 41 /* 42 * CAN harware-dependent bit-timing constant 43 * 44 * Used for calculating and checking bit-timing parameters 45 */ 46 struct can_bittiming_const { 47 char name[16]; /* Name of the CAN controller hardware */ 48 __u32 tseg1_min; /* Time segement 1 = prop_seg + phase_seg1 */ 49 __u32 tseg1_max; 50 __u32 tseg2_min; /* Time segement 2 = phase_seg2 */ 51 __u32 tseg2_max; 52 __u32 sjw_max; /* Synchronisation jump width */ 53 __u32 brp_min; /* Bit-rate prescaler */ 54 __u32 brp_max; 55 __u32 brp_inc; 56 }; 57 58 /* 59 * CAN clock parameters 60 */ 61 struct can_clock { 62 __u32 freq; /* CAN system clock frequency in Hz */ 63 }; 64 65 /* 66 * CAN operational and error states 67 */ 68 enum can_state { 69 CAN_STATE_ERROR_ACTIVE = 0, /* RX/TX error count < 96 */ 70 CAN_STATE_ERROR_WARNING, /* RX/TX error count < 128 */ 71 CAN_STATE_ERROR_PASSIVE, /* RX/TX error count < 256 */ 72 CAN_STATE_BUS_OFF, /* RX/TX error count >= 256 */ 73 CAN_STATE_STOPPED, /* Device is stopped */ 74 CAN_STATE_SLEEPING, /* Device is sleeping */ 75 CAN_STATE_MAX 76 }; 77 78 /* 79 * CAN bus error counters 80 */ 81 struct can_berr_counter { 82 __u16 txerr; 83 __u16 rxerr; 84 }; 85 86 /* 87 * CAN controller mode 88 */ 89 struct can_ctrlmode { 90 __u32 mask; 91 __u32 flags; 92 }; 93 94 #define CAN_CTRLMODE_LOOPBACK 0x01 /* Loopback mode */ 95 #define CAN_CTRLMODE_LISTENONLY 0x02 /* Listen-only mode */ 96 #define CAN_CTRLMODE_3_SAMPLES 0x04 /* Triple sampling mode */ 97 #define CAN_CTRLMODE_ONE_SHOT 0x08 /* One-Shot mode */ 98 #define CAN_CTRLMODE_BERR_REPORTING 0x10 /* Bus-error reporting */ 99 100 /* 101 * CAN device statistics 102 */ 103 struct can_device_stats { 104 __u32 bus_error; /* Bus errors */ 105 __u32 error_warning; /* Changes to error warning state */ 106 __u32 error_passive; /* Changes to error passive state */ 107 __u32 bus_off; /* Changes to bus off state */ 108 __u32 arbitration_lost; /* Arbitration lost errors */ 109 __u32 restarts; /* CAN controller re-starts */ 110 }; 111 112 /* 113 * CAN netlink interface 114 */ 115 enum { 116 IFLA_CAN_UNSPEC, 117 IFLA_CAN_BITTIMING, 118 IFLA_CAN_BITTIMING_CONST, 119 IFLA_CAN_CLOCK, 120 IFLA_CAN_STATE, 121 IFLA_CAN_CTRLMODE, 122 IFLA_CAN_RESTART_MS, 123 IFLA_CAN_RESTART, 124 IFLA_CAN_BERR_COUNTER, 125 __IFLA_CAN_MAX 126 }; 127 128 #define IFLA_CAN_MAX (__IFLA_CAN_MAX - 1) 129 130 #endif /* CAN_NETLINK_H */ 131