From d5f3f20edbc71a7377d3c26bb980a5e202b91896 Mon Sep 17 00:00:00 2001 From: Henrik Brix Andersen Date: Tue, 5 Apr 2022 21:44:50 +0200 Subject: [PATCH] drivers: can: allow calling can_set_bitrate() from userspace Add syscall to allow calling can_set_bitrate() from userspace. Signed-off-by: Henrik Brix Andersen --- drivers/can/can_common.c | 2 +- drivers/can/can_handlers.c | 9 +++++++++ include/zephyr/drivers/can.h | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/can/can_common.c b/drivers/can/can_common.c index d106d13dabb..f8550e77a8c 100644 --- a/drivers/can/can_common.c +++ b/drivers/can/can_common.c @@ -207,7 +207,7 @@ uint16_t sample_point_for_bitrate(uint32_t bitrate) return sample_pnt; } -int can_set_bitrate(const struct device *dev, uint32_t bitrate, uint32_t bitrate_data) +int z_impl_can_set_bitrate(const struct device *dev, uint32_t bitrate, uint32_t bitrate_data) { struct can_timing timing; #ifdef CONFIG_CAN_FD_MODE diff --git a/drivers/can/can_handlers.c b/drivers/can/can_handlers.c index 308df0fe33a..af4b4e6b63b 100644 --- a/drivers/can/can_handlers.c +++ b/drivers/can/can_handlers.c @@ -123,6 +123,15 @@ static inline int z_vrfy_can_set_mode(const struct device *dev, enum can_mode mo } #include +static inline int z_vrfy_can_set_bitrate(const struct device *dev, uint32_t bitrate, + uint32_t bitrate_data) +{ + Z_OOPS(Z_SYSCALL_DRIVER_CAN(dev, set_timing)); + + return z_impl_can_set_bitrate(dev, bitrate, bitrate_data); +} +#include + static inline int z_vrfy_can_send(const struct device *dev, const struct zcan_frame *frame, k_timeout_t timeout, diff --git a/include/zephyr/drivers/can.h b/include/zephyr/drivers/can.h index f9ebb841435..fafec7dc88c 100644 --- a/include/zephyr/drivers/can.h +++ b/include/zephyr/drivers/can.h @@ -867,7 +867,7 @@ static inline int z_impl_can_set_mode(const struct device *dev, enum can_mode mo * @retval -EINVAL bitrate/sample point cannot be met. * @retval -EIO General input/output error, failed to set bitrate. */ -int can_set_bitrate(const struct device *dev, uint32_t bitrate, uint32_t bitrate_data); +__syscall int can_set_bitrate(const struct device *dev, uint32_t bitrate, uint32_t bitrate_data); /** @} */