diff --git a/arch/arm/src/imx9/imx9_flexcan.c b/arch/arm/src/imx9/imx9_flexcan.c index 9550597b84f..c362866a7db 100644 --- a/arch/arm/src/imx9/imx9_flexcan.c +++ b/arch/arm/src/imx9/imx9_flexcan.c @@ -1544,7 +1544,7 @@ static int imx9_ioctl(struct net_driver_s *dev, int cmd, switch (cmd) { -#ifdef CONFIG_NETDEV_CAN_BITRATE_IOCTL +#ifdef CONFIG_NETDEV_CAN_IOCTL case SIOCGCANBITRATE: /* Get bitrate from a CAN controller */ { struct can_ioctl_data_s *req = diff --git a/arch/arm/src/imxrt/imxrt_flexcan.c b/arch/arm/src/imxrt/imxrt_flexcan.c index 6ce94a58bb1..598f438dabf 100644 --- a/arch/arm/src/imxrt/imxrt_flexcan.c +++ b/arch/arm/src/imxrt/imxrt_flexcan.c @@ -1591,7 +1591,7 @@ static int imxrt_ioctl(struct net_driver_s *dev, int cmd, switch (cmd) { -#ifdef CONFIG_NETDEV_CAN_BITRATE_IOCTL +#ifdef CONFIG_NETDEV_CAN_IOCTL case SIOCGCANBITRATE: /* Get bitrate from a CAN controller */ { struct can_ioctl_data_s *req = diff --git a/arch/arm/src/kinetis/kinetis_flexcan.c b/arch/arm/src/kinetis/kinetis_flexcan.c index e93a41bb3eb..e36bb9a1949 100644 --- a/arch/arm/src/kinetis/kinetis_flexcan.c +++ b/arch/arm/src/kinetis/kinetis_flexcan.c @@ -1477,7 +1477,7 @@ static int kinetis_txavail(struct net_driver_s *dev) * ****************************************************************************/ -#ifdef CONFIG_NETDEV_CAN_BITRATE_IOCTL +#ifdef CONFIG_NETDEV_CAN_IOCTL static int kinetis_ioctl(struct net_driver_s *dev, int cmd, unsigned long arg) { diff --git a/arch/arm/src/s32k1xx/s32k1xx_flexcan.c b/arch/arm/src/s32k1xx/s32k1xx_flexcan.c index 519ade4919e..bb124873c61 100644 --- a/arch/arm/src/s32k1xx/s32k1xx_flexcan.c +++ b/arch/arm/src/s32k1xx/s32k1xx_flexcan.c @@ -1460,7 +1460,7 @@ static int s32k1xx_txavail(struct net_driver_s *dev) * ****************************************************************************/ -#ifdef CONFIG_NETDEV_CAN_BITRATE_IOCTL +#ifdef CONFIG_NETDEV_CAN_IOCTL static int s32k1xx_ioctl(struct net_driver_s *dev, int cmd, unsigned long arg) { diff --git a/arch/arm/src/s32k3xx/s32k3xx_flexcan.c b/arch/arm/src/s32k3xx/s32k3xx_flexcan.c index f5aa309dea6..340acbb5a89 100644 --- a/arch/arm/src/s32k3xx/s32k3xx_flexcan.c +++ b/arch/arm/src/s32k3xx/s32k3xx_flexcan.c @@ -1658,7 +1658,7 @@ static int s32k3xx_ioctl(struct net_driver_s *dev, int cmd, switch (cmd) { -#ifdef CONFIG_NETDEV_CAN_BITRATE_IOCTL +#ifdef CONFIG_NETDEV_CAN_IOCTL case SIOCGCANBITRATE: /* Get bitrate from a CAN controller */ { struct can_ioctl_data_s *req = diff --git a/arch/arm/src/stm32h7/stm32_fdcan_sock.c b/arch/arm/src/stm32h7/stm32_fdcan_sock.c index 8585bc01d37..e8e0ea6bc77 100644 --- a/arch/arm/src/stm32h7/stm32_fdcan_sock.c +++ b/arch/arm/src/stm32h7/stm32_fdcan_sock.c @@ -1956,7 +1956,7 @@ static int fdcan_netdev_ioctl(struct net_driver_s *dev, int cmd, switch (cmd) { -#ifdef CONFIG_NETDEV_CAN_BITRATE_IOCTL +#ifdef CONFIG_NETDEV_CAN_IOCTL case SIOCGCANBITRATE: /* Get bitrate from a CAN controller */ { struct can_ioctl_data_s *req = @@ -1985,7 +1985,7 @@ static int fdcan_netdev_ioctl(struct net_driver_s *dev, int cmd, ret = OK; } break; -#endif /* CONFIG_NETDEV_CAN_BITRATE_IOCTL */ +#endif default: ret = -ENOTSUP; diff --git a/arch/arm64/src/imx9/imx9_flexcan.c b/arch/arm64/src/imx9/imx9_flexcan.c index 7936477dce5..620dc5c6f8e 100644 --- a/arch/arm64/src/imx9/imx9_flexcan.c +++ b/arch/arm64/src/imx9/imx9_flexcan.c @@ -554,7 +554,7 @@ static int imx9_ioctl(struct net_driver_s *dev, int cmd, /* CAN ID filtering */ -#ifdef CONFIG_NETDEV_CAN_FILTER_IOCTL +#ifdef CONFIG_NETDEV_CAN_IOCTL static uint32_t imx9_add_filter(struct imx9_driver_s *priv, uint8_t filter_type, bool ext_id, @@ -1607,7 +1607,7 @@ static int imx9_ioctl(struct net_driver_s *dev, int cmd, switch (cmd) { -#ifdef CONFIG_NETDEV_CAN_BITRATE_IOCTL +#ifdef CONFIG_NETDEV_CAN_IOCTL case SIOCGCANBITRATE: /* Get bitrate from a CAN controller */ { struct imx9_driver_s *priv = (struct imx9_driver_s *)dev; @@ -1660,9 +1660,7 @@ static int imx9_ioctl(struct net_driver_s *dev, int cmd, } } break; -#endif -#ifdef CONFIG_NETDEV_CAN_FILTER_IOCTL case SIOCACANSTDFILTER: /* Set STD ID CAN filter */ { struct imx9_driver_s *priv = (struct imx9_driver_s *)dev; @@ -1728,7 +1726,7 @@ static int imx9_ioctl(struct net_driver_s *dev, int cmd, * ****************************************************************************/ -#ifdef CONFIG_NETDEV_CAN_FILTER_IOCTL +#ifdef CONFIG_NETDEV_CAN_IOCTL static uint32_t imx9_add_filter(struct imx9_driver_s *priv, uint8_t filter_type, bool ext_id, @@ -1869,7 +1867,7 @@ static uint8_t imx9_reset_filter(struct imx9_driver_s *priv) return OK; } -#endif /* CONFIG_NETDEV_CAN_FILTER_IOCTL */ +#endif /* CONFIG_NETDEV_CAN_IOCTL */ /**************************************************************************** * Function: imx9_init_eccram diff --git a/arch/risc-v/src/mpfs/mpfs_can.c b/arch/risc-v/src/mpfs/mpfs_can.c index 7c2cd99af5c..faa0c6d4eaf 100644 --- a/arch/risc-v/src/mpfs/mpfs_can.c +++ b/arch/risc-v/src/mpfs/mpfs_can.c @@ -474,12 +474,12 @@ static int mpfs_interrupt(int irq, void *context, void *arg); /* RX SW/HW filter related functions */ -#ifdef CONFIG_NETDEV_CAN_FILTER_IOCTL +#ifdef CONFIG_NETDEV_CAN_IOCTL static uint8_t mpfs_can_add_filter(mpfs_can_instance_t *priv, uint8_t filter_type, uint32_t filter_id1, uint32_t filter_id2); -#endif /* CONFIG_NETDEV_CAN_FILTER_IOCTL */ +#endif /* CONFIG_NETDEV_CAN_IOCTL */ static uint8_t mpfs_can_reset_filter(mpfs_can_instance_t *priv); @@ -523,7 +523,7 @@ static uint32_t mpfs_can_canid_to_msgid(uint32_t canid); static uint32_t mpfs_can_msgid_to_canid(uint32_t id, bool ide, bool rtr); static uint8_t mpfs_can_set_bitrate(mpfs_can_instance_t *priv, uint32_t bitrate); -#if defined(CONFIG_DEBUG_NET_INFO) || defined(CONFIG_NETDEV_CAN_BITRATE_IOCTL) +#if defined(CONFIG_DEBUG_NET_INFO) || defined(CONFIG_NETDEV_CAN_IOCTL) static uint32_t mpfs_can_get_sample_point(mpfs_can_instance_t *priv); #endif @@ -1081,7 +1081,7 @@ static int mpfs_interrupt(int irq, void *context, void *arg) * ****************************************************************************/ -#ifdef CONFIG_NETDEV_CAN_FILTER_IOCTL +#ifdef CONFIG_NETDEV_CAN_IOCTL static uint8_t mpfs_can_add_filter(mpfs_can_instance_t *priv, uint8_t filter_type, uint32_t filter_id1, @@ -1137,7 +1137,7 @@ static uint8_t mpfs_can_add_filter(mpfs_can_instance_t *priv, return CAN_OK; } -#endif /* CONFIG_NETDEV_CAN_FILTER_IOCTL */ +#endif /* CONFIG_NETDEV_CAN_IOCTL */ /**************************************************************************** * Name: mpfs_can_reset_filter @@ -1734,7 +1734,7 @@ static uint8_t mpfs_can_set_bitrate(mpfs_can_instance_t *priv, return CAN_OK; } -#if defined(CONFIG_DEBUG_NET_INFO) || defined(CONFIG_NETDEV_CAN_BITRATE_IOCTL) +#if defined(CONFIG_DEBUG_NET_INFO) || defined(CONFIG_NETDEV_CAN_IOCTL) /**************************************************************************** * Name: mpfs_can_get_sample_point * @@ -2299,8 +2299,7 @@ static int mpfs_ioctl(struct netdev_lowerhalf_s *dev, int cmd, { ninfo("IOCTL received | cmd: %d arg: %ld\n", cmd, arg); -#if defined(CONFIG_NETDEV_CAN_BITRATE_IOCTL) || \ -defined(CONFIG_NETDEV_CAN_FILTER_IOCTL) +#ifdef CONFIG_NETDEV_CAN_IOCTL mpfs_can_instance_t *priv = (mpfs_can_instance_t *)dev; #endif @@ -2308,7 +2307,7 @@ defined(CONFIG_NETDEV_CAN_FILTER_IOCTL) switch (cmd) { -#ifdef CONFIG_NETDEV_CAN_BITRATE_IOCTL +#ifdef CONFIG_NETDEV_CAN_IOCTL case SIOCGCANBITRATE: /* Get bitrate from the CAN controller */ @@ -2340,9 +2339,7 @@ defined(CONFIG_NETDEV_CAN_FILTER_IOCTL) ret = CAN_OK; } break; -#endif /* CONFIG_NETDEV_CAN_BITRATE_IOCTL */ -#ifdef CONFIG_NETDEV_CAN_FILTER_IOCTL case SIOCACANSTDFILTER: case SIOCACANEXTFILTER: @@ -2370,7 +2367,7 @@ defined(CONFIG_NETDEV_CAN_FILTER_IOCTL) ret = CAN_OK; } break; -#endif /* CONFIG_NETDEV_CAN_FILTER_IOCTL */ +#endif /* CONFIG_NETDEV_CAN_IOCTL */ default: ret = -ENOTTY; diff --git a/boards/arm/at32/at32f437-mini/configs/can_socket/defconfig b/boards/arm/at32/at32f437-mini/configs/can_socket/defconfig index a35c092537e..7d2f6556e37 100644 --- a/boards/arm/at32/at32f437-mini/configs/can_socket/defconfig +++ b/boards/arm/at32/at32f437-mini/configs/can_socket/defconfig @@ -38,7 +38,7 @@ CONFIG_INIT_ENTRYPOINT="nsh_main" CONFIG_INTELHEX_BINARY=y CONFIG_LINE_MAX=64 CONFIG_NET=y -CONFIG_NETDEV_CAN_BITRATE_IOCTL=y +CONFIG_NETDEV_CAN_IOCTL=y CONFIG_NETDEV_IFINDEX=y CONFIG_NET_CAN=y CONFIG_NET_CAN_SOCK_OPTS=y diff --git a/boards/arm/imx9/imx95-evk/configs/can/defconfig b/boards/arm/imx9/imx95-evk/configs/can/defconfig index 7510776e90a..fb147108d64 100644 --- a/boards/arm/imx9/imx95-evk/configs/can/defconfig +++ b/boards/arm/imx9/imx95-evk/configs/can/defconfig @@ -54,7 +54,7 @@ CONFIG_IOB_THROTTLE=8 CONFIG_LIBC_LOCALTIME=y CONFIG_LPUART3_SERIAL_CONSOLE=y CONFIG_NET=y -CONFIG_NETDEV_CAN_BITRATE_IOCTL=y +CONFIG_NETDEV_CAN_IOCTL=y CONFIG_NETDEV_IFINDEX=y CONFIG_NETDEV_LATEINIT=y CONFIG_NET_CAN=y diff --git a/boards/arm/stm32h7/linum-stm32h753bi/configs/socketcan/defconfig b/boards/arm/stm32h7/linum-stm32h753bi/configs/socketcan/defconfig index 7ef37a7cbf7..0e9a1e41a1a 100644 --- a/boards/arm/stm32h7/linum-stm32h753bi/configs/socketcan/defconfig +++ b/boards/arm/stm32h7/linum-stm32h753bi/configs/socketcan/defconfig @@ -44,7 +44,7 @@ CONFIG_INTELHEX_BINARY=y CONFIG_LINE_MAX=64 CONFIG_MM_REGIONS=4 CONFIG_NET=y -CONFIG_NETDEV_CAN_BITRATE_IOCTL=y +CONFIG_NETDEV_CAN_IOCTL=y CONFIG_NETDEV_IFINDEX=y CONFIG_NETDEV_LATEINIT=y CONFIG_NET_CAN=y diff --git a/boards/arm/stm32h7/nucleo-h743zi2/configs/socketcan/defconfig b/boards/arm/stm32h7/nucleo-h743zi2/configs/socketcan/defconfig index 68c89eacc79..66d1e74be66 100644 --- a/boards/arm/stm32h7/nucleo-h743zi2/configs/socketcan/defconfig +++ b/boards/arm/stm32h7/nucleo-h743zi2/configs/socketcan/defconfig @@ -40,7 +40,7 @@ CONFIG_INTELHEX_BINARY=y CONFIG_LINE_MAX=64 CONFIG_MM_REGIONS=4 CONFIG_NET=y -CONFIG_NETDEV_CAN_BITRATE_IOCTL=y +CONFIG_NETDEV_CAN_IOCTL=y CONFIG_NETDEV_IFINDEX=y CONFIG_NETDEV_LATEINIT=y CONFIG_NET_CAN=y diff --git a/boards/arm/stm32h7/nucleo-h753zi/configs/socketcan/defconfig b/boards/arm/stm32h7/nucleo-h753zi/configs/socketcan/defconfig index f9643ef1a1a..61cc0fe7c17 100644 --- a/boards/arm/stm32h7/nucleo-h753zi/configs/socketcan/defconfig +++ b/boards/arm/stm32h7/nucleo-h753zi/configs/socketcan/defconfig @@ -40,7 +40,7 @@ CONFIG_INTELHEX_BINARY=y CONFIG_LINE_MAX=64 CONFIG_MM_REGIONS=4 CONFIG_NET=y -CONFIG_NETDEV_CAN_BITRATE_IOCTL=y +CONFIG_NETDEV_CAN_IOCTL=y CONFIG_NETDEV_IFINDEX=y CONFIG_NETDEV_LATEINIT=y CONFIG_NET_CAN=y diff --git a/boards/sim/sim/sim/configs/dynconns/defconfig b/boards/sim/sim/sim/configs/dynconns/defconfig index c009442b847..df646edceb3 100644 --- a/boards/sim/sim/sim/configs/dynconns/defconfig +++ b/boards/sim/sim/sim/configs/dynconns/defconfig @@ -35,8 +35,7 @@ CONFIG_MM_FILL_ALLOCATIONS=y CONFIG_NAME_MAX=64 CONFIG_NET=y CONFIG_NETDB_DNSCLIENT=y -CONFIG_NETDEV_CAN_BITRATE_IOCTL=y -CONFIG_NETDEV_CAN_FILTER_IOCTL=y +CONFIG_NETDEV_CAN_IOCTL=y CONFIG_NETDEV_LATEINIT=y CONFIG_NETDEV_PHY_IOCTL=y CONFIG_NETDOWN_NOTIFIER=y diff --git a/net/netdev/Kconfig b/net/netdev/Kconfig index 227b5c2d58f..5570cd16027 100644 --- a/net/netdev/Kconfig +++ b/net/netdev/Kconfig @@ -16,31 +16,15 @@ config NETDEV_PHY_IOCTL ---help--- Enable support for ioctl() commands to access PHY registers -config NETDEV_CAN_BITRATE_IOCTL - bool "Enable CAN bitrate ioctl()" +config NETDEV_CAN_IOCTL + bool "Enable CAN ioctl()" default n select NETDEV_IOCTL depends on NET_CAN ---help--- - Enable support for ioctl() commands to change CAN bitrate - -config NETDEV_CAN_FILTER_IOCTL - bool "Enable CAN filter ioctl()" - default n - select NETDEV_IOCTL - depends on NET_CAN - ---help--- - Enable support for ioctl() commands to add/remove CAN hardware-level - filters (NOTE: Not supported by all drivers) - -config NETDEV_CAN_STATE_IOCTL - bool "Enable CAN state ioctl()" - default n - select NETDEV_IOCTL - depends on NET_CAN - ---help--- - Enable support for ioctl() commands to set/see CAN or LIN controller-state - (NOTE: Not supported by all drivers) + Enable support for the CAN network device ioctl() commands: + bitrate, hardware-level filters and CAN/LIN controller state + (NOTE: Not every command is supported by every driver) config NETDEV_WIRELESS_IOCTL bool "Enable Wireless ioctl()" diff --git a/net/netdev/netdev_ioctl.c b/net/netdev/netdev_ioctl.c index 038ca7f1a5d..e49e449390c 100644 --- a/net/netdev/netdev_ioctl.c +++ b/net/netdev/netdev_ioctl.c @@ -1244,7 +1244,7 @@ static int netdev_ifr_ioctl(FAR struct socket *psock, int cmd, break; #endif -#if defined(CONFIG_NETDEV_IOCTL) && defined(CONFIG_NETDEV_CAN_BITRATE_IOCTL) +#if defined(CONFIG_NETDEV_IOCTL) && defined(CONFIG_NETDEV_CAN_IOCTL) case SIOCSCANBITRATE: /* Set bitrate of a CAN controller */ if (dev->d_flags & IFF_UP) { @@ -1254,52 +1254,24 @@ static int netdev_ifr_ioctl(FAR struct socket *psock, int cmd, break; } - /* If down, fall-through to common code in SIOCGCANBITRATE. */ + /* If down, fall-through to the common CAN ioctl code. */ - case SIOCGCANBITRATE: /* Get bitrate from a CAN controller */ - if (dev->d_ioctl) - { - FAR struct can_ioctl_data_s *can_bitrate_data = - &req->ifr_ifru.ifru_can_data; - ret = dev->d_ioctl(dev, cmd, - (unsigned long)(uintptr_t)can_bitrate_data); - } - else - { - ret = -ENOSYS; - } - break; -#endif - -#if defined(CONFIG_NETDEV_IOCTL) && defined(CONFIG_NETDEV_CAN_FILTER_IOCTL) + case SIOCGCANBITRATE: /* Get bitrate from a CAN controller */ case SIOCACANEXTFILTER: /* Add an extended-ID filter */ case SIOCDCANEXTFILTER: /* Delete an extended-ID filter */ case SIOCACANSTDFILTER: /* Add a standard-ID filter */ case SIOCDCANSTDFILTER: /* Delete a standard-ID filter */ case SIOCCANRECOVERY: /* Recovery can controller when bus-off */ + case SIOCGCANSTATE: /* Get state from a CAN/LIN controller */ + case SIOCSCANSTATE: /* Set the LIN/CAN controller state */ if (dev->d_ioctl) { - FAR struct can_ioctl_filter_s *can_filter = - &req->ifr_ifru.ifru_can_filter; - ret = dev->d_ioctl(dev, cmd, - (unsigned long)(uintptr_t)can_filter); - } - else - { - ret = -ENOSYS; - } - break; -#endif + /* Every CAN ioctl argument struct is a member of the + * ifr_ifru union, so cmd's struct is at its address. + */ -#if defined(CONFIG_NETDEV_IOCTL) && defined(CONFIG_NETDEV_CAN_STATE_IOCTL) - case SIOCGCANSTATE: /* Get state from a CAN/LIN controller */ - case SIOCSCANSTATE: /* Set the LIN/CAN controller state */ - if (dev->d_ioctl) - { - FAR struct can_ioctl_state_s *can_state = - &req->ifr_ifru.ifru_can_state; ret = dev->d_ioctl(dev, cmd, - (unsigned long)(uintptr_t)can_state); + (unsigned long)(uintptr_t)&req->ifr_ifru); } else {