The Remote Request Substitution bit is a dominant bit ("0") in the CAN XL frame. As some CAN XL controllers support to access this bit a new CANXL_RRS value has been defined for the canxl_frame.flags element. To read/write the Remote Request Substitution (RRS) bit in the CAN XL frame the CAN_CTRLMODE_XL_RRS has to be enabled in CAN driver. Signed-off-by: Oliver Hartkopp <socketcan@xxxxxxxxxxxx> --- include/uapi/linux/can.h | 5 ++++- include/uapi/linux/can/netlink.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/include/uapi/linux/can.h b/include/uapi/linux/can.h index e78cbd85ce7c..77d3a940beb0 100644 --- a/include/uapi/linux/can.h +++ b/include/uapi/linux/can.h @@ -180,20 +180,23 @@ struct canfd_frame { }; /* * defined bits for canxl_frame.flags * - * The canxl_frame.flags element contains two bits CANXL_XLF and CANXL_SEC + * The canxl_frame.flags element contains three bits CANXL_[XLF|SEC|RRS] * and shares the relative position of the struct can[fd]_frame.len element. * The CANXL_XLF bit ALWAYS needs to be set to indicate a valid CAN XL frame. * As a side effect setting this bit intentionally breaks the length checks * for Classical CAN and CAN FD frames. + * To read/write the Remote Request Substitution (RRS) bit in the CAN XL + * frame the CAN_CTRLMODE_XL_RRS has to be enabled in CAN driver. * * Undefined bits in canxl_frame.flags are reserved and shall be set to zero. */ #define CANXL_XLF 0x80 /* mandatory CAN XL frame flag (must always be set!) */ #define CANXL_SEC 0x01 /* Simple Extended Content (security/segmentation) */ +#define CANXL_RRS 0x02 /* Remote Request Substitution */ /* the 8-bit VCID is optionally placed in the canxl_frame.prio element */ #define CANXL_VCID_OFFSET 16 /* bit offset of VCID in prio element */ #define CANXL_VCID_VAL_MASK 0xFFUL /* VCID is an 8-bit value */ #define CANXL_VCID_MASK (CANXL_VCID_VAL_MASK << CANXL_VCID_OFFSET) diff --git a/include/uapi/linux/can/netlink.h b/include/uapi/linux/can/netlink.h index f4fb8eea8f35..55b8374ab094 100644 --- a/include/uapi/linux/can/netlink.h +++ b/include/uapi/linux/can/netlink.h @@ -104,10 +104,11 @@ struct can_ctrlmode { #define CAN_CTRLMODE_TDC_AUTO 0x200 /* FD transceiver automatically calculates TDCV */ #define CAN_CTRLMODE_TDC_MANUAL 0x400 /* FD TDCV is manually set up by user */ #define CAN_CTRLMODE_XL 0x800 /* CAN XL mode */ #define CAN_CTRLMODE_XL_TDC_AUTO 0x1000 /* XL transceiver automatically calculates TDCV */ #define CAN_CTRLMODE_XL_TDC_MANUAL 0x2000 /* XL TDCV is manually set up by user */ +#define CAN_CTRLMODE_XL_RRS 0x4000 /* XL enable RRS bit access */ /* * CAN device statistics */ struct can_device_stats { -- 2.45.2