FAILED: patch "[PATCH] can: kvaser_usb: replace run-time checks with struct" failed to apply to 4.19-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 49f274c72357d2d74cba70b172cf369768909707 Mon Sep 17 00:00:00 2001
From: Jimmy Assarsson <[email protected]>
Date: Fri, 3 Jun 2022 10:38:18 +0200
Subject: [PATCH] can: kvaser_usb: replace run-time checks with struct
kvaser_usb_driver_info
Unify and move compile-time known information into new struct kvaser_usb_driver_info, in favor of run-time checks.
All Kvaser USBcanII supports listen-only mode and error counter reporting.
drivers/net/can/usb/kvaser_usb/kvaser_usb.h +12 -10
@@ -35,9 +35,9 @@#define KVASER_USB_RX_BUFFER_SIZE 3072#define KVASER_USB_MAX_NET_DEVICES 5 -/* USB devices features */ -#define KVASER_USB_HAS_SILENT_MODE BIT(0) -#define KVASER_USB_HAS_TXRX_ERRORS BIT(1) +/* Kvaser USB device quirks */ +#define KVASER_USB_QUIRK_HAS_SILENT_MODE BIT(0) +#define KVASER_USB_QUIRK_HAS_TXRX_ERRORS BIT(1)/* Device capabilities */ #define KVASER_USB_CAP_BERR_CAP 0x01
@@ -65,12 +65,7 @@ struct kvaser_usb_dev_card_data_hydra {struct kvaser_usb_dev_card_data {u32 ctrlmode_supported;u32 capabilities; -union { -struct { -enum kvaser_usb_leaf_family family; - } leaf; -struct kvaser_usb_dev_card_data_hydra hydra; - }; +struct kvaser_usb_dev_card_data_hydra hydra; };/* Context for an outstanding, not yet ACKed, transmission */
@@ -83,7 +78,7 @@ struct kvaser_usb {struct usb_device *udev;struct usb_interface *intf;struct kvaser_usb_net_priv *nets[KVASER_USB_MAX_NET_DEVICES ]; -const struct kvaser_usb_dev_ops *ops; +const struct kvaser_usb_driver_info *driver_info;const struct kvaser_usb_dev_cfg *cfg;struct usb_endpoint_descriptor *bulk_in, *bulk_out;
@@ -165,6 +160,12 @@ struct kvaser_usb_dev_ops { u16 transid); }; +struct kvaser_usb_driver_info { +u32 quirks; +enum kvaser_usb_leaf_family family; +const struct kvaser_usb_dev_ops *ops; +}; +struct kvaser_usb_dev_cfg {const struct can_clock clock;const unsigned int timestamp_freq;
@@ -184,4 +185,5 @@ int kvaser_usb_send_cmd_async(struct kvaser_usb_net_priv *priv, void *cmd, int len);int kvaser_usb_can_rx_over_error (struct net_device *netdev); +#endif /* KVASER_USB_H */
drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c +148 -126
446 lines not on this page · raw message
drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c +12 -12
@@ -404,7 +404,7 @@ kvaser_usb_leaf_frame_to_cmd(const struct kvaser_usb_net_priv *priv,sizeof (struct kvaser_cmd_tx_can ); cmd->u.tx_can.channel = priv->channel; -switch (dev->card_data.leaf.family) { +switch (dev->driver_info->family) {case KVASER_LEAF : cmd_tx_can_flags = &cmd->u.tx_can.leaf.flags;break ;
@@ -550,7 +550,7 @@ static int kvaser_usb_leaf_get_software_info_inner(struct kvaser_usb *dev)if (err)return err; -switch (dev->card_data.leaf.family) { +switch (dev->driver_info->family) {case KVASER_LEAF :kvaser_usb_leaf_get_software_info_leaf (dev, &cmd.u.leaf.softinfo);break ;
@@ -597,7 +597,7 @@ static int kvaser_usb_leaf_get_card_info(struct kvaser_usb *dev) dev->nchannels = cmd.u.cardinfo.nchannels;if (dev->nchannels >KVASER_USB_MAX_NET_DEVICES || - (dev->card_data.leaf.family ==KVASER_USBCAN && + (dev->driver_info->family ==KVASER_USBCAN && dev->nchannels >MAX_USBCAN_NET_DEVICES ))return -EINVAL ;
@@ -730,7 +730,7 @@ kvaser_usb_leaf_rx_error_update_can_state(struct kvaser_usb_net_priv *priv, new_state < CAN_STATE_BUS_OFF) priv->can.can_stats.restarts++; -switch (dev->card_data.leaf.family) { +switch (dev->driver_info->family) {case KVASER_LEAF :if (es->leaf.error_factor) { priv->can.can_stats.bus_error++;
@@ -809,7 +809,7 @@ static void kvaser_usb_leaf_rx_error(const struct kvaser_usb *dev, } } -switch (dev->card_data.leaf.family) { +switch (dev->driver_info->family) {case KVASER_LEAF :if (es->leaf.error_factor) { cf->can_id |=CAN_ERR_BUSERROR |CAN_ERR_PROT ;
@@ -999,7 +999,7 @@ static void kvaser_usb_leaf_rx_can_msg(const struct kvaser_usb *dev, stats = &priv->netdev->stats;if ((cmd->u.rx_can_header.flag &MSG_FLAG_ERROR_FRAME ) && - (dev->card_data.leaf.family ==KVASER_LEAF && + (dev->driver_info->family ==KVASER_LEAF && cmd->id ==CMD_LEAF_LOG_MESSAGE )) {kvaser_usb_leaf_leaf_rx_error (dev, cmd);return ;
@@ -1015,7 +1015,7 @@ static void kvaser_usb_leaf_rx_can_msg(const struct kvaser_usb *dev,return ; } -switch (dev->card_data.leaf.family) { +switch (dev->driver_info->family) {case KVASER_LEAF : rx_data = cmd->u.leaf.rx_can.data;break ;
@@ -1030,7 +1030,7 @@ static void kvaser_usb_leaf_rx_can_msg(const struct kvaser_usb *dev,return ; } -if (dev->card_data.leaf.family ==KVASER_LEAF && cmd->id == +if (dev->driver_info->family ==KVASER_LEAF && cmd->id ==CMD_LEAF_LOG_MESSAGE ) { cf->can_id =le32_to_cpu (cmd->u.leaf.log_message.id);if (cf->can_id &KVASER_EXTENDED_FRAME )
@@ -1128,14 +1128,14 @@ static void kvaser_usb_leaf_handle_command(const struct kvaser_usb *dev,break ;case CMD_LEAF_LOG_MESSAGE : -if (dev->card_data.leaf.family !=KVASER_LEAF ) +if (dev->driver_info->family !=KVASER_LEAF ) goto warn;kvaser_usb_leaf_rx_can_msg (dev, cmd);break ;case CMD_CHIP_STATE_EVENT :case CMD_CAN_ERROR_EVENT : -if (dev->card_data.leaf.family ==KVASER_LEAF ) +if (dev->driver_info->family ==KVASER_LEAF )kvaser_usb_leaf_leaf_rx_error (dev, cmd);else kvaser_usb_leaf_usbcan_rx_error (dev, cmd);
@@ -1147,12 +1147,12 @@ static void kvaser_usb_leaf_handle_command(const struct kvaser_usb *dev,/* Ignored commands */ case CMD_USBCAN_CLOCK_OVERFLOW_EVENT : -if (dev->card_data.leaf.family !=KVASER_USBCAN ) +if (dev->driver_info->family !=KVASER_USBCAN ) goto warn;break ;case CMD_FLUSH_QUEUE_REPLY : -if (dev->card_data.leaf.family !=KVASER_LEAF ) +if (dev->driver_info->family !=KVASER_LEAF ) goto warn;break ;