15a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger/* 25a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger * linux/can/netlink.h 35a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger * 45a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger * Definitions for the CAN netlink interface 55a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger * 65a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger * Copyright (c) 2009 Wolfgang Grandegger <wg@grandegger.com> 75a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger * 85a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger */ 95a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger 105a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger#ifndef CAN_NETLINK_H 115a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger#define CAN_NETLINK_H 125a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger 135a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger#include <linux/types.h> 145a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger 155a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger/* 165a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger * CAN bit-timing parameters 175a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger * 1821cfb5e1d9dfce7612ba622bcaf8e301268a35c8Stephen Hemminger * For further information, please read chapter "8 BIT TIMING 195a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger * REQUIREMENTS" of the "Bosch CAN Specification version 2.0" 205a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger * at http://www.semiconductors.bosch.de/pdf/can2spec.pdf. 215a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger */ 225a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandeggerstruct can_bittiming { 235a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 bitrate; /* Bit-rate in bits/second */ 245a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 sample_point; /* Sample point in one-tenth of a percent */ 255a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 tq; /* Time quanta (TQ) in nanoseconds */ 265a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 prop_seg; /* Propagation segment in TQs */ 275a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 phase_seg1; /* Phase buffer segment 1 in TQs */ 285a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 phase_seg2; /* Phase buffer segment 2 in TQs */ 295a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 sjw; /* Synchronisation jump width in TQs */ 305a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 brp; /* Bit-rate prescaler */ 315a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger}; 325a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger 335a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger/* 345a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger * CAN harware-dependent bit-timing constant 355a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger * 365a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger * Used for calculating and checking bit-timing parameters 375a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger */ 385a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandeggerstruct can_bittiming_const { 395a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger char name[16]; /* Name of the CAN controller hardware */ 405a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 tseg1_min; /* Time segement 1 = prop_seg + phase_seg1 */ 415a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 tseg1_max; 425a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 tseg2_min; /* Time segement 2 = phase_seg2 */ 435a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 tseg2_max; 445a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 sjw_max; /* Synchronisation jump width */ 455a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 brp_min; /* Bit-rate prescaler */ 465a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 brp_max; 475a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 brp_inc; 485a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger}; 495a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger 505a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger/* 515a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger * CAN clock parameters 525a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger */ 535a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandeggerstruct can_clock { 545a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 freq; /* CAN system clock frequency in Hz */ 555a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger}; 565a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger 575a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger/* 585a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger * CAN operational and error states 595a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger */ 605a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandeggerenum can_state { 615a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger CAN_STATE_ERROR_ACTIVE = 0, /* RX/TX error count < 96 */ 625a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger CAN_STATE_ERROR_WARNING, /* RX/TX error count < 128 */ 635a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger CAN_STATE_ERROR_PASSIVE, /* RX/TX error count < 256 */ 645a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger CAN_STATE_BUS_OFF, /* RX/TX error count >= 256 */ 655a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger CAN_STATE_STOPPED, /* Device is stopped */ 665a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger CAN_STATE_SLEEPING, /* Device is sleeping */ 675a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger CAN_STATE_MAX 685a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger}; 695a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger 705a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger/* 718ecdcce08319d0e39b0d32c1d17db3f69d85a35cStephen Hemminger * CAN bus error counters 728ecdcce08319d0e39b0d32c1d17db3f69d85a35cStephen Hemminger */ 738ecdcce08319d0e39b0d32c1d17db3f69d85a35cStephen Hemmingerstruct can_berr_counter { 748ecdcce08319d0e39b0d32c1d17db3f69d85a35cStephen Hemminger __u16 txerr; 758ecdcce08319d0e39b0d32c1d17db3f69d85a35cStephen Hemminger __u16 rxerr; 768ecdcce08319d0e39b0d32c1d17db3f69d85a35cStephen Hemminger}; 778ecdcce08319d0e39b0d32c1d17db3f69d85a35cStephen Hemminger 788ecdcce08319d0e39b0d32c1d17db3f69d85a35cStephen Hemminger/* 795a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger * CAN controller mode 805a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger */ 815a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandeggerstruct can_ctrlmode { 825a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 mask; 835a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 flags; 845a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger}; 855a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger 868ecdcce08319d0e39b0d32c1d17db3f69d85a35cStephen Hemminger#define CAN_CTRLMODE_LOOPBACK 0x01 /* Loopback mode */ 878ecdcce08319d0e39b0d32c1d17db3f69d85a35cStephen Hemminger#define CAN_CTRLMODE_LISTENONLY 0x02 /* Listen-only mode */ 888ecdcce08319d0e39b0d32c1d17db3f69d85a35cStephen Hemminger#define CAN_CTRLMODE_3_SAMPLES 0x04 /* Triple sampling mode */ 898ecdcce08319d0e39b0d32c1d17db3f69d85a35cStephen Hemminger#define CAN_CTRLMODE_ONE_SHOT 0x08 /* One-Shot mode */ 908ecdcce08319d0e39b0d32c1d17db3f69d85a35cStephen Hemminger#define CAN_CTRLMODE_BERR_REPORTING 0x10 /* Bus-error reporting */ 915a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger 925a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger/* 935a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger * CAN device statistics 945a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger */ 955a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandeggerstruct can_device_stats { 965a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 bus_error; /* Bus errors */ 975a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 error_warning; /* Changes to error warning state */ 985a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 error_passive; /* Changes to error passive state */ 995a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 bus_off; /* Changes to bus off state */ 1005a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 arbitration_lost; /* Arbitration lost errors */ 1015a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __u32 restarts; /* CAN controller re-starts */ 1025a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger}; 1035a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger 1045a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger/* 1055a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger * CAN netlink interface 1065a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger */ 1075a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandeggerenum { 1085a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger IFLA_CAN_UNSPEC, 1095a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger IFLA_CAN_BITTIMING, 1105a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger IFLA_CAN_BITTIMING_CONST, 1115a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger IFLA_CAN_CLOCK, 1125a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger IFLA_CAN_STATE, 1135a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger IFLA_CAN_CTRLMODE, 1145a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger IFLA_CAN_RESTART_MS, 1155a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger IFLA_CAN_RESTART, 1168ecdcce08319d0e39b0d32c1d17db3f69d85a35cStephen Hemminger IFLA_CAN_BERR_COUNTER, 1175a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger __IFLA_CAN_MAX 1185a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger}; 1195a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger 1205a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger#define IFLA_CAN_MAX (__IFLA_CAN_MAX - 1) 1215a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger 1225a2044782b6a0eb7594d3b3e2e32bbd6a63e77f1Wolfgang Grandegger#endif /* CAN_NETLINK_H */ 123