diff options
-rw-r--r-- | .SRCINFO | 20 | ||||
-rw-r--r-- | 0.patch (renamed from kernel_do_gettimeofday_fix.patch) | 2 | ||||
-rw-r--r-- | 1.patch (renamed from kernel_ioremap_nocache_fix.patch) | 2 | ||||
-rw-r--r-- | 2.patch | 73 | ||||
-rw-r--r-- | 3.patch | 22 | ||||
-rw-r--r-- | 4.patch | 112 | ||||
-rw-r--r-- | 5.patch | 263 | ||||
-rw-r--r-- | PKGBUILD | 27 |
8 files changed, 505 insertions, 16 deletions
@@ -1,7 +1,7 @@ pkgbase = ixxat-socketcan pkgdesc = SocketCAN driver for IXXAT USB-to-CAN v2 pkgver = 1.1.148.0 - pkgrel = 6 + pkgrel = 7 url = https://www.ixxat.com/products/products-industrial/pc-interfaces/pc-can-interfaces/socketcan install = ixxat-socketcan.install arch = i686 @@ -10,11 +10,19 @@ pkgbase = ixxat-socketcan makedepends = linux-headers optdepends = can-utils: Linux-CAN / SocketCAN user space applications source = https://cdn.hms-networks.com/docs/librariesprovider8/ixxat-english-new/pc-can-interfaces/linux-drivers/socketcan-linux.zip?sfvrsn=3eb48d7_8 - source = kernel_do_gettimeofday_fix.patch - source = kernel_ioremap_nocache_fix.patch - md5sums = 4875b7dcfddfb76279ec61477765dd04 - md5sums = 918f3a220153599c2a4c3fad7de86cc1 - md5sums = 25ef511b0f11a7d84ce9ffc6020293c3 + source = 0.patch + source = 1.patch + source = 2.patch + source = 3.patch + source = 4.patch + source = 5.patch + sha256sums = 801558b4ef182548dfaa10a1cc65696f5c84caf6c8df98be8fa812c392b491a2 + sha256sums = 30993ecc5f97187f92ffaa1606a9cd588e1d0b7ab636bca8ba5ced3eb70b41d5 + sha256sums = 3389d2301e159e2c99452cd4a68a0050d30c74831edf51afedee7e46b3d005b6 + sha256sums = a8828fa152b80120ec529f4a862936747697a94ad6a2009aabb2951b0784a579 + sha256sums = 8eb368650f1b0e4340da7bd25dbd5b03843841cfb39bb7ec677eb11634fdabf1 + sha256sums = 61ed6b5afdbb057318bd415c2d9b9ea4719d1ced8b1d3f0dfb9a80930f4c741d + sha256sums = e1cb2108dde3ed8c6498a1b501b46a93f1189fb715be2f0ac71a6b5080fdf64b pkgname = ixxat-socketcan diff --git a/kernel_do_gettimeofday_fix.patch b/0.patch index bbfa646bd802..085910723528 100644 --- a/kernel_do_gettimeofday_fix.patch +++ b/0.patch @@ -1,4 +1,4 @@ -commit 06cf40760506f7aeda1daee7fe8e5e330915daaa +commit fb0b2a02be266793f04f2cc1d5144ec9d94d0861 Author: Bruno Santos <brunomanuelsantos@tecnico.ulisboa.pt> Date: Tue Jun 18 18:37:17 2019 +0200 diff --git a/kernel_ioremap_nocache_fix.patch b/1.patch index 78e7125416dd..c900b123bf14 100644 --- a/kernel_ioremap_nocache_fix.patch +++ b/1.patch @@ -1,4 +1,4 @@ -commit 581f3d57fd2debe52b7647145334bfdd79212e7c +commit f0a726b7fe5a76d51f81bfeeb92da5b8807d47f5 Author: Bruno Santos <brunomanuelsantos@tecnico.ulisboa.pt> Date: Sun Jun 21 18:36:51 2020 +0100 diff --git a/2.patch b/2.patch new file mode 100644 index 000000000000..a898fa5d48a8 --- /dev/null +++ b/2.patch @@ -0,0 +1,73 @@ +commit a05c12b1440010cc5462bb6ee8e7809709610852 +Author: Bruno Santos <brunomanuelsantos@tecnico.ulisboa.pt> +Date: Thu May 20 22:54:17 2021 +0100 + + Remove unimplemented MODULE_SUPPORTED_DEVICE + + Echoing the upstream commit 6417f03132a6952cd17ddd8eaddbac92b61b17e0 + +diff --git a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_active.c b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_active.c +index 1e698c8..16ed10d 100644 +--- a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_active.c ++++ b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_active.c +@@ -40,8 +40,6 @@ + #include "ififd.h" + #include "ixx_pci_core.h" + +-MODULE_SUPPORTED_DEVICE("IXXAT Automation GmbH CAN-IB2x0, CAN-IB4x0, CAN-IB6x0 and CAN-IB8x0 interfaces"); +- + #define IXX_FIRMWARE "ixx-can-ib-1.9.3.fw" + + #define IXX_IFI_FIFOCMD 0x00 +diff --git a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_fd_passive.c b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_fd_passive.c +index 7a3514f..def2ea6 100644 +--- a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_fd_passive.c ++++ b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_fd_passive.c +@@ -35,8 +35,6 @@ + + #ifdef CANFD_CAPABLE + +-MODULE_SUPPORTED_DEVICE("IXXAT Automation GmbH CAN-IB5X0 and CAN-IB7X0 interfaces"); +- + /* IFI-CANFD internal clock (Hz) */ + #define IFIFD_CANFD_CLOCK_HZ 80000000 + +diff --git a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_passive.c b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_passive.c +index fb08c03..2ff247b 100644 +--- a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_passive.c ++++ b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_passive.c +@@ -33,8 +33,6 @@ + #include "ifi.h" + #include "ixx_pci_core.h" + +-MODULE_SUPPORTED_DEVICE("IXXAT Automation GmbH CAN-IB1X0 and CAN-IB3X0 interfaces"); +- + /* IFI-CAN internal clock (Hz) */ + #define IFI_CAN_CLOCK_HZ 40000000 + +diff --git a/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_fd.c b/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_fd.c +index db5c79e..83db4e2 100644 +--- a/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_fd.c ++++ b/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_fd.c +@@ -33,8 +33,6 @@ + + #ifdef CANFD_CAPABLE + +-MODULE_SUPPORTED_DEVICE("IXXAT Automation GmbH USB-to-CAN FD"); +- + /* use ifi can fd clock due to internal bittiming calculations */ + #define IFIFD_CRYSTAL_HZ 80000000 + +diff --git a/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_v2.c b/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_v2.c +index 3fe639c..10bae2a 100644 +--- a/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_v2.c ++++ b/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_v2.c +@@ -31,8 +31,6 @@ + + #include "ixx_usb_core.h" + +-MODULE_SUPPORTED_DEVICE("IXXAT Automation GmbH USB-to-CAN V2"); +- + /* use sja 1000 clock due to internal bittiming calculations */ + #define SJA1000_CRYSTAL_HZ 8000000 + diff --git a/3.patch b/3.patch new file mode 100644 index 000000000000..d56ee6bf3116 --- /dev/null +++ b/3.patch @@ -0,0 +1,22 @@ +commit 087687e986e89e19f7ccdb787a9d118faec5f307 +Author: Bruno Santos <brunomanuelsantos@tecnico.ulisboa.pt> +Date: Thu May 20 22:56:26 2021 +0100 + + Remove deprecated and unused kmap_types.h + + Fortunately this header was not actually used, so we can simply delete + the include. This header was removed upstream with commit + d7029e4549691ecaf1ead536d3322a00bda85659. + +diff --git a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_active.c b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_active.c +index 16ed10d..00805dd 100644 +--- a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_active.c ++++ b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_active.c +@@ -32,7 +32,6 @@ + #include <linux/firmware.h> + #include <linux/time.h> + +-#include <asm-generic/kmap_types.h> + #include <asm-generic/errno.h> + + #include <stdarg.h> diff --git a/4.patch b/4.patch new file mode 100644 index 000000000000..d73a713edb30 --- /dev/null +++ b/4.patch @@ -0,0 +1,112 @@ +commit b681682ec91bb594ecd35cfe79f4e8dfef95be1c +Author: Bruno Santos <brunomanuelsantos@tecnico.ulisboa.pt> +Date: Thu May 20 22:58:35 2021 +0100 + + Check the return value of mutex_lock_interruptible + + These locks may fail yet the error was not caught. This also has the + benefit of suppressing some compilation warnings. + +diff --git a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_active.c b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_active.c +index 00805dd..ebb5f13 100644 +--- a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_active.c ++++ b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_active.c +@@ -466,7 +466,9 @@ static int ixx_act_ib_xxx_get_intf_caps(struct pci_dev *pdev, + intf_caps_res.dal_res.ret_size = 0; + intf_caps_res.dal_res.ret_code = 0xffffffff; + +- mutex_lock_interruptible(&intf->cmd_lock); ++ if (mutex_lock_interruptible(&intf->cmd_lock)) ++ return err; ++ + err = ixx_act_ib_xxx_send_cmd(intf, tx_cmd_fifo, &intf_caps_req.dal_req, + &intf_caps_res.dal_res); + if (err) +@@ -564,7 +566,9 @@ static int ixx_act_ib_xxx_init_ctrl(struct ixx_pci_priv* priv) + ctrl_init_res.dal_res.ret_size = 0; + ctrl_init_res.dal_res.ret_code = 0xffffffff; + +- mutex_lock_interruptible(&intf->cmd_lock); ++ if (mutex_lock_interruptible(&intf->cmd_lock)) ++ return err; ++ + err = ixx_act_ib_xxx_send_cmd(intf, tx_cmd_fifo, &ctrl_init_req.dal_req, + &ctrl_init_res.dal_res); + +@@ -626,7 +630,9 @@ static int ixx_act_ib_xxx_start_ctrl(struct ixx_pci_priv* priv, u32 * time_ref) + ctrl_start_res.dal_res.ret_code = 0xffffffff; + ctrl_start_res.start_time = 0; + +- mutex_lock_interruptible(&priv->intf->cmd_lock); ++ if (mutex_lock_interruptible(&priv->intf->cmd_lock)) ++ return err; ++ + err = ixx_act_ib_xxx_send_cmd(intf, tx_cmd_fifo, + &ctrl_start_req.dal_req, &ctrl_start_res.dal_res); + +@@ -677,7 +683,9 @@ static int ixx_act_ib_xxx_stop_ctrl(struct ixx_pci_priv* priv) + ctrl_stop_res.dal_res.ret_size = 0; + ctrl_stop_res.dal_res.ret_code = 0xffffffff; + +- mutex_lock_interruptible(&priv->intf->cmd_lock); ++ if (mutex_lock_interruptible(&priv->intf->cmd_lock)) ++ return err; ++ + err = ixx_act_ib_xxx_send_cmd(intf, tx_cmd_fifo, &ctrl_stop_req.dal_req, + &ctrl_stop_res.dal_res); + if (err) +@@ -726,7 +734,9 @@ static int ixx_act_ib_xxx_get_dev_info(struct ixx_pci_interface * intf, + dev_info_res.dal_res.ret_size = 0; + dev_info_res.dal_res.ret_code = 0xffffffff; + +- mutex_lock_interruptible(&intf->cmd_lock); ++ if (mutex_lock_interruptible(&intf->cmd_lock)) ++ return err; ++ + err = ixx_act_ib_xxx_send_cmd(intf, tx_cmd_fifo, &dev_info_req.dal_req, + &dev_info_res.dal_res); + if (err) +@@ -1937,7 +1947,9 @@ static int ixx_act_ib_xxx_trigger_int(struct pci_dev *pdev, + trigger_res.dal_res.ret_size = 0; + trigger_res.dal_res.ret_code = 0xFFFFFFFF; + +- mutex_lock_interruptible(&intf->cmd_lock); ++ if (mutex_lock_interruptible(&intf->cmd_lock)) ++ return err; ++ + err = ixx_act_ib_xxx_send_cmd(intf, tx_cmd_fifo, &trigger_req.dal_req, + &trigger_res.dal_res); + if (err) +@@ -1993,7 +2005,9 @@ static int ixx_act_ib_xxx_test_cmd(struct pci_dev *pdev, + bmg_request->data[index] = (u8) index + 1; + } + +- mutex_lock_interruptible(&intf->cmd_lock); ++ if (mutex_lock_interruptible(&intf->cmd_lock)) ++ return err; ++ + /* Execute command */ + err = ixx_act_ib_xxx_send_cmd(intf, tx_cmd_fifo, &bmg_request->dal_req, + &bmg_response->dal_res); +@@ -2061,7 +2075,9 @@ static int ixx_act_ib_xxx_test_dma(struct pci_dev *pdev, + read_res->dal_res.ret_size = 0; + read_res->dal_res.ret_code = 0xFFFFFFFF; + +- mutex_lock_interruptible(&intf->cmd_lock); ++ if (mutex_lock_interruptible(&intf->cmd_lock)) ++ return err; ++ + err = ixx_act_ib_xxx_send_cmd(intf, tx_cmd_fifo, &read_req.dal_req, + &read_res->dal_res); + if (err) +@@ -2187,7 +2203,9 @@ static int ixx_act_ib_xxx_start_fw(struct pci_dev *pdev, + start_res.dal_res.ret_size = 0; + start_res.dal_res.ret_code = 0xFFFFFFFF; + +- mutex_lock_interruptible(&intf->cmd_lock); ++ if (mutex_lock_interruptible(&intf->cmd_lock)) ++ return err; ++ + err = ixx_act_ib_xxx_send_cmd(intf, tx_cmd_fifo, &start_req.dal_req, + &start_res.dal_res); + if (err) diff --git a/5.patch b/5.patch new file mode 100644 index 000000000000..059285dbe7b6 --- /dev/null +++ b/5.patch @@ -0,0 +1,263 @@ +commit c7374eeac3f1f341c6c6663c362c2aa2a5224163 +Author: Bruno Santos <brunomanuelsantos@tecnico.ulisboa.pt> +Date: Thu May 20 23:09:49 2021 +0100 + + Fix for new CAN subsystem API + + A number of commits upstream has been changing the API of the CAN + subsystem to allow for greater performance and to consolidate name + prefixes. + + The relevant changes are: + + 1. adding an `frame_len` parameter to several functions to cache the + last frame length. In fact more of these changes have been merged + already, but not merged in Arch's default kernel and so left out for + now. (1dcb6e57db833419483d0df2d956b1cc2a802683) + + 2. The addition of a specialized function for releasing the echo skb's. + This one is actually old already (commit dated 2009), but at least + one case was obvious enough that it could use it. + (39e3ab6fded4d7e66e01a878f0cae23ddd480c3b) + + 3. Renames and deprecations of functions. + (3ab4ce0d6fa8c93d41df4a74ec8d2c9198be2109, + cd1124e76d740327be5d8f9ce3785ce1119daf4b) + + Thanks to Bart Verhagen for the report and early patch. + +diff --git a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_core.c b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_core.c +index 7f019fb..731ecd6 100644 +--- a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_core.c ++++ b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_core.c +@@ -298,7 +298,7 @@ int ixxat_pci_handle_frn(struct ixx_pci_priv *dev, u8 frn, u32 timestamp) + if (skb) + ixxat_pci_get_ts_tv(dev, timestamp, + &skb->tstamp); +- can_get_echo_skb(dev->netdev, frn - 1); ++ can_get_echo_skb(dev->netdev, frn - 1, NULL); + dev->frn_read++; + result = 1; + netdev_dbg(dev->netdev, "can_get_echo_skb %d", frn - 1); +@@ -320,7 +320,7 @@ int ixxat_pci_handle_frn(struct ixx_pci_priv *dev, u8 frn, u32 timestamp) + if (skb) + ixxat_pci_get_ts_tv(dev, timestamp, + &skb->tstamp); +- can_get_echo_skb(dev->netdev, frn - 1); ++ can_get_echo_skb(dev->netdev, frn - 1, NULL); + dev->frn_read = expectedfrn; + result = 1; + } else if (frn > expectedfrn && frn >= dev->frn_write) { +@@ -342,7 +342,7 @@ int ixxat_pci_handle_frn(struct ixx_pci_priv *dev, u8 frn, u32 timestamp) + if (skb) + ixxat_pci_get_ts_tv(dev, timestamp, + &skb->tstamp); +- can_get_echo_skb(dev->netdev, frn - 1); ++ can_get_echo_skb(dev->netdev, frn - 1, NULL); + dev->frn_read++; + result = 1; + // netdev_dbg(dev->netdev, "can_get_echo_skb %d", frn - 1); +@@ -357,7 +357,7 @@ int ixxat_pci_handle_frn(struct ixx_pci_priv *dev, u8 frn, u32 timestamp) + if (skb) + ixxat_pci_get_ts_tv(dev, timestamp, + &skb->tstamp); +- can_get_echo_skb(dev->netdev, frn - 1); ++ can_get_echo_skb(dev->netdev, frn - 1, NULL); + dev->frn_read = expectedfrn; + result = 1; + } else if (frn < expectedfrn && frn >= dev->frn_write) { +@@ -382,7 +382,7 @@ int ixxat_pci_handle_frn(struct ixx_pci_priv *dev, u8 frn, u32 timestamp) + if (skb) + ixxat_pci_get_ts_tv(dev, timestamp, + &skb->tstamp); +- can_get_echo_skb(dev->netdev, frn - 1); ++ can_get_echo_skb(dev->netdev, frn - 1, NULL); + dev->frn_read = expectedfrn; + result = 1; + } +diff --git a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_active.c b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_active.c +index ebb5f13..94c5b10 100644 +--- a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_active.c ++++ b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_active.c +@@ -882,7 +882,7 @@ static int ixx_act_ib_xxx_handle_srr_canfdmsg(struct ixx_pci_priv *priv, + ifi_reg_dlc = le32_to_cpu(ifi_base[IXX_IFI_DLC]); + + priv->netdev->stats.tx_packets += 1; +- priv->netdev->stats.tx_bytes += can_dlc2len( ++ priv->netdev->stats.tx_bytes += can_fd_dlc2len( + ifi_reg_dlc & IFIFD_RXFIFO_DLC); + frn = (ifi_reg_dlc & IFIFD_RXFIFO_FRN) >> IFIFD_RXFIFO_FRN_S; + +@@ -959,7 +959,7 @@ static int ixx_act_ib_xxx_handle_canfdmsg(struct ixx_pci_priv *priv, + raw_dlc = le32_to_cpu(ifi_base[IXX_IFI_DLC]); + raw_id = le32_to_cpu(ifi_base[IXX_IFI_ID]); + +- can_frame->len = can_dlc2len( ++ can_frame->len = can_fd_dlc2len( + (raw_dlc & IFIFD_RXFIFO_DLC) >> IFIFD_RXFIFO_DLC_S); + + if (raw_id & IFIFD_RXFIFO_IDE) { +@@ -1406,6 +1406,7 @@ static int ixx_act_ib_xxx_start_xmit(struct sk_buff *skb, + int i, j; + u32 write_index, read_index, obj_size; + unsigned long spin_flags; ++ size_t frame_len; + + if (can_dropped_invalid_skb(netdev, skb)) { + netdev_dbg(netdev, "dropped invalid skb\n"); +@@ -1478,7 +1479,8 @@ static int ixx_act_ib_xxx_start_xmit(struct sk_buff *skb, + can_free_echo_skb(priv->netdev, priv->frn_write - 1); + } + +- can_put_echo_skb(skb, priv->netdev, priv->frn_write - 1); ++ frame_len = can_skb_get_frame_len(skb); ++ can_put_echo_skb(skb, priv->netdev, priv->frn_write - 1, frame_len); + can_dlc |= (priv->frn_write << IFI_R0_FRN_S) & IFI_R0_RD_FRN; + + priv->frn_write++; +@@ -1529,6 +1531,7 @@ static int ixx_act_ib_xxx_start_xmit_fd(struct sk_buff *skb, + int i, j; + u32 write_index, read_index, obj_size; + unsigned long spin_flags; ++ size_t frame_len; + + if (can_dropped_invalid_skb(netdev, skb)) { + netdev_info(netdev, "dropped invalid skb\n"); +@@ -1576,7 +1579,7 @@ static int ixx_act_ib_xxx_start_xmit_fd(struct sk_buff *skb, + if (cf->can_id & CAN_RTR_FLAG) + can_dlc |= IFIFD_TXFIFO_RTR; + else { +- can_dlc |= can_len2dlc(cf->len) & IFIFD_TXFIFO_DLC; ++ can_dlc |= can_fd_len2dlc(cf->len) & IFIFD_TXFIFO_DLC; + if (cf->len > 8) { + can_dlc |= IFIFD_TXFIFO_EDL; + } +@@ -1610,7 +1613,8 @@ static int ixx_act_ib_xxx_start_xmit_fd(struct sk_buff *skb, + can_free_echo_skb(priv->netdev, priv->frn_write - 1); + } + +- can_put_echo_skb(skb, priv->netdev, priv->frn_write - 1); ++ frame_len = can_skb_get_frame_len(skb); ++ can_put_echo_skb(skb, priv->netdev, priv->frn_write - 1, frame_len); + can_dlc |= (priv->frn_write << IFIFD_TXFIFO_FRN_S) + & IFIFD_TXFIFO_FRN; + +diff --git a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_fd_passive.c b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_fd_passive.c +index def2ea6..5b7b5b6 100644 +--- a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_fd_passive.c ++++ b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_fd_passive.c +@@ -207,7 +207,7 @@ static int ixx_pas_ib_fd_xxx_handle_srr_canmsg(struct ixx_pci_priv *priv) + ioread32(priv->ifi_base + IFIFDREG_RX_FIFO_DLC)); + + priv->netdev->stats.tx_packets += 1; +- priv->netdev->stats.tx_bytes += can_dlc2len( ++ priv->netdev->stats.tx_bytes += can_fd_dlc2len( + ifi_reg_dlc & IFIFD_RXFIFO_DLC); + frn = (ifi_reg_dlc & IFIFD_RXFIFO_FRN) >> IFIFD_RXFIFO_FRN_S; + +@@ -235,9 +235,8 @@ static int ixx_pas_ib_fd_xxx_handle_canmsg(struct ixx_pci_priv *priv) + raw_id = le32_to_cpu(ioread32(priv->ifi_base + IFIFDREG_RX_FIFO_ID)); + raw_dlc = le32_to_cpu(ioread32(priv->ifi_base + IFIFDREG_RX_FIFO_DLC)); + +- can_frame->len = can_dlc2len( +- le32_to_cpu( +- (raw_dlc & IFIFD_RXFIFO_DLC) ++ can_frame->len = can_fd_dlc2len( ++ le32_to_cpu((raw_dlc & IFIFD_RXFIFO_DLC) + >> IFIFD_RXFIFO_DLC_S)); + + if (raw_id & IFIFD_RXFIFO_IDE) { +@@ -498,7 +497,7 @@ static int ixx_pas_ib_fd_xxx_start_xmit(struct sk_buff *skb, + if (cf->can_id & CAN_RTR_FLAG) + can_dlc |= IFIFD_TXFIFO_RTR; + +- can_dlc |= can_len2dlc(cf->len) & IFIFD_TXFIFO_DLC; ++ can_dlc |= can_fd_len2dlc(cf->len) & IFIFD_TXFIFO_DLC; + + if (skb->len == CANFD_MTU) { + can_dlc |= IFIFD_TXFIFO_EDL; +@@ -515,7 +514,8 @@ static int ixx_pas_ib_fd_xxx_start_xmit(struct sk_buff *skb, + can_free_echo_skb(priv->netdev, priv->frn_write - 1); + } + +- can_put_echo_skb(skb, priv->netdev, priv->frn_write - 1); ++ size_t frame_len = can_skb_get_frame_len(skb); ++ can_put_echo_skb(skb, priv->netdev, priv->frn_write - 1, frame_len); + can_dlc |= ((priv->frn_write << IFIFD_TXFIFO_FRN_S) + & IFIFD_TXFIFO_FRN); + +diff --git a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_passive.c b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_passive.c +index 2ff247b..28887f4 100644 +--- a/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_passive.c ++++ b/SocketCAN - Linux (V1.1.148.0)/can-ibxxx_socketcan/ixx_pci_ib_passive.c +@@ -602,7 +602,8 @@ static int ixx_pas_ib_xxx_start_xmit(struct sk_buff *skb, + can_free_echo_skb(priv->netdev, priv->frn_write - 1); + } + +- can_put_echo_skb(skb, priv->netdev, priv->frn_write - 1); ++ size_t frame_len = can_skb_get_frame_len(skb); ++ can_put_echo_skb(skb, priv->netdev, priv->frn_write - 1, frame_len); + can_dlc |= (priv->frn_write << IFI_R0_FRN_S) & IFI_R0_WR_FRN; + + priv->frn_write++; +diff --git a/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_core.c b/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_core.c +index 696e5d4..3453cf3 100644 +--- a/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_core.c ++++ b/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_core.c +@@ -239,7 +239,7 @@ static void ixxat_usb_write_bulk_callback(struct urb *urb) + } + + /* should always release echo skb and corresponding context */ +- can_get_echo_skb(netdev, context->echo_index); ++ can_free_echo_skb(netdev, context->echo_index); + context->echo_index = IXXAT_USB_MAX_TX_URBS; + + /* do wakeup tx queue in case of success only */ +@@ -261,6 +261,7 @@ static netdev_tx_t ixxat_usb_ndo_start_xmit(struct sk_buff *skb, + u8 *obuf; + int i, err; + size_t size = dev->adapter->tx_buffer_size; ++ size_t frame_len; + + if (can_dropped_invalid_skb(netdev, skb)) + return NETDEV_TX_OK; +@@ -298,7 +299,8 @@ static netdev_tx_t ixxat_usb_ndo_start_xmit(struct sk_buff *skb, + + usb_anchor_urb(urb, &dev->tx_submitted); + +- can_put_echo_skb(skb, netdev, context->echo_index); ++ frame_len = can_skb_get_frame_len(skb); ++ can_put_echo_skb(skb, netdev, context->echo_index, frame_len); + + atomic_inc(&dev->active_tx_urbs); + +diff --git a/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_fd.c b/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_fd.c +index 83db4e2..b0d09f6 100644 +--- a/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_fd.c ++++ b/SocketCAN - Linux (V1.1.148.0)/usb-to-can_socketcan/ixx_usb_fd.c +@@ -620,13 +620,9 @@ static int ixx_usbfd_handle_canmsg(struct ixx_usb_device *dev, + can_frame->flags |= CANFD_ESI; + + can_frame->len = +- can_dlc2len( +- get_canfd_dlc((flags & IXXAT_USBFD_MSG_FLAGS_DLC) +- >> 16)); +- } else { +- can_frame->len = +- get_canfd_dlc((flags & IXXAT_USBFD_MSG_FLAGS_DLC) +- >> 16); ++ can_fd_dlc2len((flags & IXXAT_USBFD_MSG_FLAGS_DLC) >> 16); ++ } else { ++ can_frame->len = (flags & IXXAT_USBFD_MSG_FLAGS_DLC) >> 16; + } + + if (flags & IXXAT_USBFD_MSG_FLAGS_OVR) { +@@ -894,7 +890,7 @@ static int ixx_usbfd_encode_msg(struct ixx_usb_device *dev, struct sk_buff *skb, + can_msg.flags |= IXXAT_USBFD_MSG_FLAGS_FDR; + } + +- can_msg.flags |= (can_len2dlc(cf->len) << 16) & ++ can_msg.flags |= (can_fd_len2dlc(cf->len) << 16) & + IXXAT_USBFD_MSG_FLAGS_DLC; + + can_msg.flags = cpu_to_le32(can_msg.flags); @@ -1,8 +1,9 @@ # Maintainer: Bruno Santos <brunomanuelsantos@tecnico.ulisboa.pt> +# Patches taken from https://gitlab.com/bms-contrib/ixxat-socketcan pkgname=ixxat-socketcan pkgver=1.1.148.0 -pkgrel=6 +pkgrel=7 pkgdesc="SocketCAN driver for IXXAT USB-to-CAN v2" arch=('i686' 'x86_64') url="https://www.ixxat.com/products/products-industrial/pc-interfaces/pc-can-interfaces/socketcan" @@ -11,17 +12,27 @@ makedepends=(linux-headers) optdepends=('can-utils: Linux-CAN / SocketCAN user space applications') install=$pkgname.install source=('https://cdn.hms-networks.com/docs/librariesprovider8/ixxat-english-new/pc-can-interfaces/linux-drivers/socketcan-linux.zip?sfvrsn=3eb48d7_8' - kernel_do_gettimeofday_fix.patch - kernel_ioremap_nocache_fix.patch) -md5sums=('4875b7dcfddfb76279ec61477765dd04' - '918f3a220153599c2a4c3fad7de86cc1' - '25ef511b0f11a7d84ce9ffc6020293c3') + 0.patch + 1.patch + 2.patch + 3.patch + 4.patch + 5.patch) +sha256sums=('801558b4ef182548dfaa10a1cc65696f5c84caf6c8df98be8fa812c392b491a2' + '30993ecc5f97187f92ffaa1606a9cd588e1d0b7ab636bca8ba5ced3eb70b41d5' + '3389d2301e159e2c99452cd4a68a0050d30c74831edf51afedee7e46b3d005b6' + 'a8828fa152b80120ec529f4a862936747697a94ad6a2009aabb2951b0784a579' + '8eb368650f1b0e4340da7bd25dbd5b03843841cfb39bb7ec677eb11634fdabf1' + '61ed6b5afdbb057318bd415c2d9b9ea4719d1ced8b1d3f0dfb9a80930f4c741d' + 'e1cb2108dde3ed8c6498a1b501b46a93f1189fb715be2f0ac71a6b5080fdf64b') _extramodules=$(uname -r)/extramodules prepare() { - patch -p1 -i kernel_do_gettimeofday_fix.patch - patch -p1 -i kernel_ioremap_nocache_fix.patch + for patch in *.patch + do + patch -p1 -i $patch + done } build() { |