From c7d484d0a91da93ff32ff169cf125e3544373acd Mon Sep 17 00:00:00 2001 From: norly Date: Sat, 12 Mar 2022 19:20:25 +0100 Subject: [PATCH] Replace ->can_dlc with ->len can_frame.can_dlc has been deprecated in favour of can_frame.len and as a new driver, this needs to stick to the new convention. Also include the ugliest backwards hack #define I've ever written to make this compile on Linux <= 5.10 which is currently LTS. --- module/elmcan.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/module/elmcan.c b/module/elmcan.c index f358a46..e8f163f 100644 --- a/module/elmcan.c +++ b/module/elmcan.c @@ -50,6 +50,11 @@ MODULE_AUTHOR("Max Staudt "); #define N_DEVELOPMENT 29 #endif +/* Compatibility for Linux < 5.11 */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,11,0) +#define len can_dlc +#endif + #define ELM327_NAPI_WEIGHT 4 #define ELM327_SIZE_RXBUF 256 @@ -483,7 +488,7 @@ static int elm327_parse_frame(struct elmcan *elm, size_t len) */ /* Read CAN data length */ - frame->can_dlc = (hex_to_bin(elm->rxbuf[datastart - 2]) << 0); + frame->len = (hex_to_bin(elm->rxbuf[datastart - 2]) << 0); /* Read CAN ID */ if (frame->can_id & CAN_EFF_FLAG) { @@ -511,13 +516,13 @@ static int elm327_parse_frame(struct elmcan *elm, size_t len) * Note: RTR frames have a DLC, but no actual payload. */ if (!(frame->can_id & CAN_RTR_FLAG) && - (hexlen < frame->can_dlc * 3 + datastart)) { + (hexlen < frame->len * 3 + datastart)) { /* Incomplete frame. * Probably the ELM327's RS232 TX buffer was full. * Emit an error frame and exit. */ frame->can_id = CAN_ERR_FLAG | CAN_ERR_CRTL; - frame->can_dlc = CAN_ERR_DLC; + frame->len = CAN_ERR_DLC; frame->data[1] = CAN_ERR_CRTL_RX_OVERFLOW; elm327_feed_frame_to_netdev(elm, skb); @@ -530,7 +535,7 @@ static int elm327_parse_frame(struct elmcan *elm, size_t len) } /* Parse the data nibbles. */ - for (i = 0; i < frame->can_dlc; i++) { + for (i = 0; i < frame->len; i++) { frame->data[i] = (hex_to_bin(elm->rxbuf[datastart + 3*i]) << 4) | (hex_to_bin(elm->rxbuf[datastart + 3*i + 1])); } @@ -634,7 +639,7 @@ static void elm327_handle_prompt(struct elmcan *elm) /* Send a regular CAN data frame */ int i; - for (i = 0; i < frame->can_dlc; i++) { + for (i = 0; i < frame->len; i++) { sprintf(&local_txbuf[2 * i], "%02X", frame->data[i]); } @@ -871,7 +876,7 @@ static netdev_tx_t elmcan_netdev_start_xmit(struct sk_buff *skb, spin_unlock(&elm->lock); dev->stats.tx_packets++; - dev->stats.tx_bytes += frame->can_dlc; + dev->stats.tx_bytes += frame->len; can_led_event(dev, CAN_LED_EVENT_TX); -- 2.30.2