From: Vincent Mailhol <mailhol@kernel.org>
To: Marc Kleine-Budde <mkl@pengutronix.de>,
Oliver Hartkopp <socketcan@hartkopp.net>
Cc: "Vincent Mailhol" <mailhol@kernel.org>,
"Stéphane Grosjean" <stephane.grosjean@hms-networks.com>,
"Robert Nawrath" <mbro1689@gmail.com>,
"Minh Le" <minh.le.aj@renesas.com>,
"Duy Nguyen" <duy.nguyen.rh@renesas.com>,
linux-can@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH v3 19/20] can: dev: add can_get_ctrlmode_str()
Date: Tue, 23 Sep 2025 14:39:54 +0900 [thread overview]
Message-ID: <20250923-canxl-netlink-prep-v3-19-87a7684333f3@kernel.org> (raw)
In-Reply-To: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@kernel.org>
In an effort to give more human readable messages when errors occur
because of conflicting options, it can be useful to convert the CAN
control mode flags into text.
Add a function which converts the first set CAN control mode into a
human readable string. The reason to only convert the first one is to
simplify edge cases: imagine that there are several invalid control
modes, we would just return the first invalid one to the user, thus
not having to handle complex string concatenation. The user can then
solve the first problem, call the netlink interface again and see the
next issue.
People who wish to enumerate all the control modes can still do so by,
for example, using this new function in a for_each_set_bit() loop.
Signed-off-by: Vincent Mailhol <mailhol@kernel.org>
---
drivers/net/can/dev/dev.c | 33 +++++++++++++++++++++++++++++++++
include/linux/can/dev.h | 2 ++
2 files changed, 35 insertions(+)
diff --git a/drivers/net/can/dev/dev.c b/drivers/net/can/dev/dev.c
index 69c00720e9956cad986ea86fbba49285d76f51db..9ad062dee261cc7ad431959ef4c4bc1d24a2736d 100644
--- a/drivers/net/can/dev/dev.c
+++ b/drivers/net/can/dev/dev.c
@@ -88,6 +88,39 @@ const char *can_get_state_str(const enum can_state state)
}
EXPORT_SYMBOL_GPL(can_get_state_str);
+const char *can_get_ctrlmode_str(u32 ctrlmode)
+{
+ switch (ctrlmode & ~(ctrlmode - 1)) {
+ case 0:
+ return "none";
+ case CAN_CTRLMODE_LOOPBACK:
+ return "loopback";
+ case CAN_CTRLMODE_LISTENONLY:
+ return "listen-only";
+ case CAN_CTRLMODE_3_SAMPLES:
+ return "triple-sampling";
+ case CAN_CTRLMODE_ONE_SHOT:
+ return "one-shot";
+ case CAN_CTRLMODE_BERR_REPORTING:
+ return "berr-reporting";
+ case CAN_CTRLMODE_FD:
+ return "fd";
+ case CAN_CTRLMODE_PRESUME_ACK:
+ return "presume-ack";
+ case CAN_CTRLMODE_FD_NON_ISO:
+ return "fd-non-iso";
+ case CAN_CTRLMODE_CC_LEN8_DLC:
+ return "cc-len8-dlc";
+ case CAN_CTRLMODE_TDC_AUTO:
+ return "fd-tdc-auto";
+ case CAN_CTRLMODE_TDC_MANUAL:
+ return "fd-tdc-manual";
+ default:
+ return "<unknown>";
+ }
+}
+EXPORT_SYMBOL_GPL(can_get_ctrlmode_str);
+
static enum can_state can_state_err_to_state(u16 err)
{
if (err < CAN_ERROR_WARNING_THRESHOLD)
diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h
index 8e75e9b3830a7a0dab16b6450622fc4a98219a9c..a2229a61ccde8140f3cee83ce6ee66fcfd726a34 100644
--- a/include/linux/can/dev.h
+++ b/include/linux/can/dev.h
@@ -141,6 +141,8 @@ int can_restart_now(struct net_device *dev);
void can_bus_off(struct net_device *dev);
const char *can_get_state_str(const enum can_state state);
+const char *can_get_ctrlmode_str(u32 ctrlmode);
+
void can_state_get_by_berr_counter(const struct net_device *dev,
const struct can_berr_counter *bec,
enum can_state *tx_state,
--
2.49.1
next prev parent reply other threads:[~2025-09-23 5:41 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-23 5:39 [PATCH v3 00/20] can: netlink: preparation before introduction of CAN XL step 3/3 Vincent Mailhol
2025-09-23 5:39 ` [PATCH v3 01/20] can: dev: move struct data_bittiming_params to linux/can/bittiming.h Vincent Mailhol
2025-09-23 5:39 ` [PATCH v3 02/20] can: dev: make can_get_relative_tdco() FD agnostic and move it to bittiming.h Vincent Mailhol
2025-09-23 5:39 ` [PATCH v3 03/20] can: netlink: document which symbols are FD specific Vincent Mailhol
2025-09-23 5:39 ` [PATCH v3 04/20] can: netlink: refactor can_validate_bittiming() Vincent Mailhol
2025-09-23 5:39 ` [PATCH v3 05/20] can: netlink: add can_validate_tdc() Vincent Mailhol
2025-09-23 5:39 ` [PATCH v3 06/20] can: netlink: add can_validate_databittiming() Vincent Mailhol
2025-09-23 5:39 ` [PATCH v3 07/20] can: netlink: refactor CAN_CTRLMODE_TDC_{AUTO,MANUAL} flag reset logic Vincent Mailhol
2025-09-23 5:39 ` [PATCH v3 08/20] can: netlink: remove useless check in can_tdc_changelink() Vincent Mailhol
2025-09-23 5:39 ` [PATCH v3 09/20] can: netlink: make can_tdc_changelink() FD agnostic Vincent Mailhol
2025-09-23 5:39 ` [PATCH v3 10/20] can: netlink: add can_dtb_changelink() Vincent Mailhol
2025-09-23 5:39 ` [PATCH v3 11/20] can: netlink: add can_ctrlmode_changelink() Vincent Mailhol
2025-09-23 5:39 ` [PATCH v3 12/20] can: netlink: make can_tdc_get_size() FD agnostic Vincent Mailhol
2025-09-23 5:39 ` [PATCH v3 13/20] can: netlink: add can_data_bittiming_get_size() Vincent Mailhol
2025-09-23 5:39 ` [PATCH v3 14/20] can: netlink: add can_bittiming_fill_info() Vincent Mailhol
2025-09-23 5:39 ` [PATCH v3 15/20] can: netlink: add can_bittiming_const_fill_info() Vincent Mailhol
2025-09-23 5:39 ` [PATCH v3 16/20] can: netlink: add can_bitrate_const_fill_info() Vincent Mailhol
2025-09-23 5:39 ` [PATCH v3 17/20] can: netlink: make can_tdc_fill_info() FD agnostic Vincent Mailhol
2025-09-23 5:39 ` [PATCH v3 18/20] can: calc_bittiming: make can_calc_tdco() " Vincent Mailhol
2025-09-23 5:39 ` Vincent Mailhol [this message]
2025-09-23 5:39 ` [PATCH v3 20/20] can: netlink: add userland error messages Vincent Mailhol
2025-09-23 6:02 ` [PATCH v3 00/20] can: netlink: preparation before introduction of CAN XL step 3/3 Vincent Mailhol
2025-09-23 17:08 ` Konstantin Ryabitsev
2025-09-23 17:54 ` Vincent Mailhol
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250923-canxl-netlink-prep-v3-19-87a7684333f3@kernel.org \
--to=mailhol@kernel.org \
--cc=duy.nguyen.rh@renesas.com \
--cc=linux-can@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mbro1689@gmail.com \
--cc=minh.le.aj@renesas.com \
--cc=mkl@pengutronix.de \
--cc=socketcan@hartkopp.net \
--cc=stephane.grosjean@hms-networks.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).