From nobody Mon Apr 27 16:16:29 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E73F2CCA47F for ; Sun, 12 Jun 2022 21:39:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236482AbiFLVjt (ORCPT ); Sun, 12 Jun 2022 17:39:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51746 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236272AbiFLVjo (ORCPT ); Sun, 12 Jun 2022 17:39:44 -0400 Received: from mail-ej1-x631.google.com (mail-ej1-x631.google.com [IPv6:2a00:1450:4864:20::631]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F296718E28 for ; Sun, 12 Jun 2022 14:39:42 -0700 (PDT) Received: by mail-ej1-x631.google.com with SMTP id n10so7702583ejk.5 for ; Sun, 12 Jun 2022 14:39:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bs1pDxoqSwxHo6PhPuLte63s3qeUlbVxYb0CgUg+DU4=; b=OUYQfEQrOtz7F0Nm9V9fFHrIGYhY1uY24QXJxNItXxe5w8q6wW3ICsnjqbyHOW6DXr Jqmh+nt5FgmxYnt1u8l0tEFZFV8ZMiHIvBmm4bMYdii8Dq+3ltEx8X0CPs5qXkldwvXn j9jVXNuJcacNFK3uxOO+hAwfSkNBevUEwcNqo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=bs1pDxoqSwxHo6PhPuLte63s3qeUlbVxYb0CgUg+DU4=; b=RgxulNaDboWypXW06BvxqUILV4QizHrnEaOAw/NZ9SKNv4pQ5oT4zQNH63nP9RaZV8 ObW/u/wAFCqrPdG1nUrt7fv3g1/aQiH4ickIEiE0LKxC1R4bvYxytdIHado9x/y57dZ1 DIZzAr46w8l4kX5XLABcMt0BIXuS4Zho4B2pEBGDR/ZmjXjAiyUMHeA5/JQgPEeNdRun ol0KCkmCWmCEUUrF72/U6X5B43ANqH2TVR+X+UBIVviyDfznDuBDpsg8tv1+PwksXwNE qNW42IanEKhZFwNLs0VrfdYljGO3v1RoCdMc5SZOGmCorL5/oSgtvIu3j7OMAgNAAQH9 5TvA== X-Gm-Message-State: AOAM5310hpasL0K1uVYm97zJEjgDuKqnZRSza3eH+cwd+OrcGME8eXhn E73fSVJos3DXHrAAM0vKQUlLRvNE4HqYYw== X-Google-Smtp-Source: ABdhPJxPU1NM0rh3G4bzrTJkWzWLp5YsG4UPwDoQRnwVyaL8yBwctHZy5nQSG3CaRRYu/WmNAouG0A== X-Received: by 2002:a17:907:1b1e:b0:6d7:31b0:e821 with SMTP id mp30-20020a1709071b1e00b006d731b0e821mr49755379ejc.334.1655069982282; Sun, 12 Jun 2022 14:39:42 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.homenet.telecomitalia.it (host-80-116-90-174.pool80116.interbusiness.it. [80.116.90.174]) by smtp.gmail.com with ESMTPSA id u10-20020a1709061daa00b00711d546f8a8sm2909398ejh.139.2022.06.12.14.39.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jun 2022 14:39:41 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, Amarula patchwork , Oliver Hartkopp , Dario Binacchi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Marc Kleine-Budde , Paolo Abeni , Wolfgang Grandegger , linux-can@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v3 01/13] can: slcan: use the BIT() helper Date: Sun, 12 Jun 2022 23:39:15 +0200 Message-Id: <20220612213927.3004444-2-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> References: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Use the BIT() helper instead of an explicit shift. Signed-off-by: Dario Binacchi --- (no changes since v1) drivers/net/can/slcan.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/can/slcan.c b/drivers/net/can/slcan.c index 64a3aee8a7da..b37d35c2a23a 100644 --- a/drivers/net/can/slcan.c +++ b/drivers/net/can/slcan.c @@ -413,7 +413,7 @@ static int slc_open(struct net_device *dev) if (sl->tty =3D=3D NULL) return -ENODEV; =20 - sl->flags &=3D (1 << SLF_INUSE); + sl->flags &=3D BIT(SLF_INUSE); netif_start_queue(dev); return 0; } --=20 2.32.0 From nobody Mon Apr 27 16:16:29 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B1F05C43334 for ; Sun, 12 Jun 2022 21:39:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236613AbiFLVjx (ORCPT ); Sun, 12 Jun 2022 17:39:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52184 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236546AbiFLVjt (ORCPT ); Sun, 12 Jun 2022 17:39:49 -0400 Received: from mail-ed1-x535.google.com (mail-ed1-x535.google.com [IPv6:2a00:1450:4864:20::535]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C09E51AD88 for ; Sun, 12 Jun 2022 14:39:47 -0700 (PDT) Received: by mail-ed1-x535.google.com with SMTP id c2so4907379edf.5 for ; Sun, 12 Jun 2022 14:39:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=El3W9x0OB1VE70B0Lt3SBVyO+pC/HDeoL5aPqYtLRdg=; b=FIZh5UTrlRbIHsCTBAPteoUF41feurhGY1j95FK7rMWDVMIlldVYABzLSWhURo+iRZ 5X9PK4jys25T9M8PvpocVL0htqhFvlb7Qq9ALIEgghXvfpHLwq5JYOr4QhvJvqBzX2ZX 9W1i0yEhMFUD5RYthu+fwLfuXuQLB3xqBVoBE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=El3W9x0OB1VE70B0Lt3SBVyO+pC/HDeoL5aPqYtLRdg=; b=408G3CDXnsgIeR79Go9XRoEzpepmwP9+cOJ6iUfznXWrJkbIjYCIt//jf+ACQcOL2z siU47fhv6U2NvQyxjV4C1E7gbDUgMFJV9alEKnybP2UdNez0M+Vvbs1nOhEIpRSls6YX nyMcQ0YLRXWHWSmdZeEfpfS12RlQeurPftGq1uIqKhPCyfN1hHayIlfSTwjsK6ORSv7V cb9zBF1drGwPETrJAxQgbJzePrzIm4eWzWamvFf1Y9grrnov8+rF03bWLoOtFYtAfqGT DL+ZSSGZCXbE7lk4p4K41TlRR1m3Yl2MzgXVqkABYK9f0XiHp9LkTsW6lwSfw+R97NsZ Jw1w== X-Gm-Message-State: AOAM531GCeUdyoQgJZdbHHEf8gDj0TMeGt4hQTgRHDYm7PVFd/hotCRr WZCq40Jb4ETN7oCKOuL8bNSK2VNjqNQtmg== X-Google-Smtp-Source: ABdhPJww3i7CVaj0ctxJLxdZv/2+Ex6h2WRxPQWXOiFgSNJiw7emFfgKJIduJPbDUDTWtLrMOo3Zpw== X-Received: by 2002:aa7:c306:0:b0:42d:d4cc:c606 with SMTP id l6-20020aa7c306000000b0042dd4ccc606mr62413182edq.341.1655069986039; Sun, 12 Jun 2022 14:39:46 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.homenet.telecomitalia.it (host-80-116-90-174.pool80116.interbusiness.it. [80.116.90.174]) by smtp.gmail.com with ESMTPSA id u10-20020a1709061daa00b00711d546f8a8sm2909398ejh.139.2022.06.12.14.39.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jun 2022 14:39:45 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, Amarula patchwork , Oliver Hartkopp , Dario Binacchi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Marc Kleine-Budde , Paolo Abeni , Wolfgang Grandegger , linux-can@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v3 02/13] can: slcan: use netdev helpers to print out messages Date: Sun, 12 Jun 2022 23:39:16 +0200 Message-Id: <20220612213927.3004444-3-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> References: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Replace printk() calls with corresponding netdev helpers. Signed-off-by: Dario Binacchi --- (no changes since v1) drivers/net/can/slcan.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/net/can/slcan.c b/drivers/net/can/slcan.c index b37d35c2a23a..6162a9c21672 100644 --- a/drivers/net/can/slcan.c +++ b/drivers/net/can/slcan.c @@ -365,7 +365,7 @@ static netdev_tx_t slc_xmit(struct sk_buff *skb, struct= net_device *dev) spin_lock(&sl->lock); if (!netif_running(dev)) { spin_unlock(&sl->lock); - printk(KERN_WARNING "%s: xmit: iface is down\n", dev->name); + netdev_warn(dev, "xmit: iface is down\n"); goto out; } if (sl->tty =3D=3D NULL) { @@ -776,8 +776,7 @@ static void __exit slcan_exit(void) =20 sl =3D netdev_priv(dev); if (sl->tty) { - printk(KERN_ERR "%s: tty discipline still running\n", - dev->name); + netdev_err(dev, "tty discipline still running\n"); } =20 unregister_netdev(dev); --=20 2.32.0 From nobody Mon Apr 27 16:16:29 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 618D9C43334 for ; Sun, 12 Jun 2022 21:40:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236847AbiFLVkF (ORCPT ); Sun, 12 Jun 2022 17:40:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52876 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236630AbiFLVjy (ORCPT ); Sun, 12 Jun 2022 17:39:54 -0400 Received: from mail-ej1-x635.google.com (mail-ej1-x635.google.com [IPv6:2a00:1450:4864:20::635]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6FB5A1A83B for ; Sun, 12 Jun 2022 14:39:51 -0700 (PDT) Received: by mail-ej1-x635.google.com with SMTP id h23so7654237ejj.12 for ; Sun, 12 Jun 2022 14:39:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=K0omjWVAQknKh80VLWsQETRXyxuJ8wx+RydBE1BQOZE=; b=I9pBc0a6INon93gsw110Q3R49kNnqiUZv/rIvYZKM6Bt65S7egtDb33jfbKVH1vf68 7RfGVpcK9vb59CattQvz0uuAL07URs4DuRaBvEv2OpPRJkfLtbQkuEpxlLOlT687oMQT kmEKHXPuoJ1NenOaHO8ijhW1jw48K9d023e8Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=K0omjWVAQknKh80VLWsQETRXyxuJ8wx+RydBE1BQOZE=; b=6YM5lQnomvvWZZxBXsLWQgbrpCRmM0HmyFxyuTD0UpMTICvmsfimgwXt7VeXYxWTuc Ba6IORoH0rKKuiaikwnrjk/00CxdlnO9mZCLkTVKkqBzI8fPUHhP3uioxJKRZE1Upx/d 6gwwoutwG10oLmuhtuGbw7howi/vLVi4O5KKbbF09l9fEwHyroIAeLgyhWYiCEctx3Ho /zopdgMjzE/4lXc+UYfVdrUpy9VfXkbVhCrR8G39WScR2X4QpinpN0Mf3wx0sPRqvV2p YVLs3UjeVGopj8/IteEwEqJNVm/okaVhjTTqWPvUqhG718oOBXc7rCTjdeKva0buWjgx qx+g== X-Gm-Message-State: AOAM530S49pdqZDa00o1Wh6svYmpBNls4voWR6YKMEMd9dEGuxFpgSvA CwpwsHS4hW13Guty5GRreRyJLK3qabaZnA== X-Google-Smtp-Source: ABdhPJy4d4og/Av7z7ZXj0TLBgkHwcqkGoLfThGnjGXXRk0c+/nJFyXuEeg2WqwIl/QKMe4i2DvXrQ== X-Received: by 2002:a17:907:1b07:b0:6fe:2cbc:15c5 with SMTP id mp7-20020a1709071b0700b006fe2cbc15c5mr49898642ejc.677.1655069989671; Sun, 12 Jun 2022 14:39:49 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.homenet.telecomitalia.it (host-80-116-90-174.pool80116.interbusiness.it. [80.116.90.174]) by smtp.gmail.com with ESMTPSA id u10-20020a1709061daa00b00711d546f8a8sm2909398ejh.139.2022.06.12.14.39.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jun 2022 14:39:49 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, Amarula patchwork , Oliver Hartkopp , Dario Binacchi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Marc Kleine-Budde , Paolo Abeni , Wolfgang Grandegger , linux-can@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v3 03/13] can: slcan: use the alloc_can_skb() helper Date: Sun, 12 Jun 2022 23:39:17 +0200 Message-Id: <20220612213927.3004444-4-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> References: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" It is used successfully by most (if not all) CAN device drivers. It allows to remove replicated code. Signed-off-by: Dario Binacchi --- Changes in v3: - Increment the error counter in case of decoding failure. Changes in v2: - Put the data into the allocated skb directly instead of first filling the "cf" on the stack and then doing a memcpy(). drivers/net/can/slcan.c | 70 +++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 37 deletions(-) diff --git a/drivers/net/can/slcan.c b/drivers/net/can/slcan.c index 6162a9c21672..c39580b142e0 100644 --- a/drivers/net/can/slcan.c +++ b/drivers/net/can/slcan.c @@ -54,6 +54,7 @@ #include #include #include +#include #include #include =20 @@ -143,85 +144,80 @@ static struct net_device **slcan_devs; static void slc_bump(struct slcan *sl) { struct sk_buff *skb; - struct can_frame cf; + struct can_frame *cf; int i, tmp; u32 tmpid; char *cmd =3D sl->rbuff; =20 - memset(&cf, 0, sizeof(cf)); + skb =3D alloc_can_skb(sl->dev, &cf); + if (unlikely(!skb)) { + sl->dev->stats.rx_dropped++; + return; + } =20 switch (*cmd) { case 'r': - cf.can_id =3D CAN_RTR_FLAG; + cf->can_id =3D CAN_RTR_FLAG; fallthrough; case 't': /* store dlc ASCII value and terminate SFF CAN ID string */ - cf.len =3D sl->rbuff[SLC_CMD_LEN + SLC_SFF_ID_LEN]; + cf->len =3D sl->rbuff[SLC_CMD_LEN + SLC_SFF_ID_LEN]; sl->rbuff[SLC_CMD_LEN + SLC_SFF_ID_LEN] =3D 0; /* point to payload data behind the dlc */ cmd +=3D SLC_CMD_LEN + SLC_SFF_ID_LEN + 1; break; case 'R': - cf.can_id =3D CAN_RTR_FLAG; + cf->can_id =3D CAN_RTR_FLAG; fallthrough; case 'T': - cf.can_id |=3D CAN_EFF_FLAG; + cf->can_id |=3D CAN_EFF_FLAG; /* store dlc ASCII value and terminate EFF CAN ID string */ - cf.len =3D sl->rbuff[SLC_CMD_LEN + SLC_EFF_ID_LEN]; + cf->len =3D sl->rbuff[SLC_CMD_LEN + SLC_EFF_ID_LEN]; sl->rbuff[SLC_CMD_LEN + SLC_EFF_ID_LEN] =3D 0; /* point to payload data behind the dlc */ cmd +=3D SLC_CMD_LEN + SLC_EFF_ID_LEN + 1; break; default: - return; + goto decode_failed; } =20 if (kstrtou32(sl->rbuff + SLC_CMD_LEN, 16, &tmpid)) - return; + goto decode_failed; =20 - cf.can_id |=3D tmpid; + cf->can_id |=3D tmpid; =20 /* get len from sanitized ASCII value */ - if (cf.len >=3D '0' && cf.len < '9') - cf.len -=3D '0'; + if (cf->len >=3D '0' && cf->len < '9') + cf->len -=3D '0'; else - return; + goto decode_failed; =20 /* RTR frames may have a dlc > 0 but they never have any data bytes */ - if (!(cf.can_id & CAN_RTR_FLAG)) { - for (i =3D 0; i < cf.len; i++) { + if (!(cf->can_id & CAN_RTR_FLAG)) { + for (i =3D 0; i < cf->len; i++) { tmp =3D hex_to_bin(*cmd++); if (tmp < 0) - return; - cf.data[i] =3D (tmp << 4); + goto decode_failed; + + cf->data[i] =3D (tmp << 4); tmp =3D hex_to_bin(*cmd++); if (tmp < 0) - return; - cf.data[i] |=3D tmp; + goto decode_failed; + + cf->data[i] |=3D tmp; } } =20 - skb =3D dev_alloc_skb(sizeof(struct can_frame) + - sizeof(struct can_skb_priv)); - if (!skb) - return; - - skb->dev =3D sl->dev; - skb->protocol =3D htons(ETH_P_CAN); - skb->pkt_type =3D PACKET_BROADCAST; - skb->ip_summed =3D CHECKSUM_UNNECESSARY; - - can_skb_reserve(skb); - can_skb_prv(skb)->ifindex =3D sl->dev->ifindex; - can_skb_prv(skb)->skbcnt =3D 0; - - skb_put_data(skb, &cf, sizeof(struct can_frame)); - sl->dev->stats.rx_packets++; - if (!(cf.can_id & CAN_RTR_FLAG)) - sl->dev->stats.rx_bytes +=3D cf.len; + if (!(cf->can_id & CAN_RTR_FLAG)) + sl->dev->stats.rx_bytes +=3D cf->len; =20 netif_rx(skb); + return; + +decode_failed: + sl->dev->stats.rx_errors++; + dev_kfree_skb(skb); } =20 /* parse tty input stream */ --=20 2.32.0 From nobody Mon Apr 27 16:16:29 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 92B8AC433EF for ; Sun, 12 Jun 2022 21:40:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237004AbiFLVkP (ORCPT ); Sun, 12 Jun 2022 17:40:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52874 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236788AbiFLVkE (ORCPT ); Sun, 12 Jun 2022 17:40:04 -0400 Received: from mail-ej1-x62b.google.com (mail-ej1-x62b.google.com [IPv6:2a00:1450:4864:20::62b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9E7191C906 for ; Sun, 12 Jun 2022 14:39:56 -0700 (PDT) Received: by mail-ej1-x62b.google.com with SMTP id bg6so7793282ejb.0 for ; Sun, 12 Jun 2022 14:39:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=N02g9fJIqVK0hxkx5EqbV+5LJaIebbxeDuMD7HdwVFw=; b=cq+XUFlbhm8YcaYhUBdQ3Xyaz4UCabeI5QP2HCXeq2ygR06KvwgpBJ8mbj7DSejdl7 h8dIVcGnFSGMSU2A7YStmMRxQgsGDWhq1tUznfW6HjvwqqAqXcKIdf5GO16oTDKRhChW YsZ6qZ8PyqPL9lrPd39YveFXj+ZTYK46Uh8Yw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=N02g9fJIqVK0hxkx5EqbV+5LJaIebbxeDuMD7HdwVFw=; b=qnZwvb1BdPFMPKLX3kuS+f+FjtrnJ1Px0p6zVvwcfdZDBtUJ2TsI+cgnfFXwARSWRg 77RYRshyA97OguGcI52luXG0VYToqeqpU5YLFQ3I4uJWvnuA5BXq5SM7LODa9EFr4cy2 pfWcRn0ESTiqBoiWLZ8MFb+/8uHV/2vGOzf1Nlepw1ubbh57ZytI5fmZ/gtEif9cjoEh D1C4F2C1OR0XuAUJ+8LHJTYOW1+mGxtwGOkZHnEywaEZyTmS+xvGq0vn44HHoKMQCE9P UU8xj8kMSEo/SBu4yPgVB3g1LD1CjAk+NTC1j8gPZ+9ZADITirT8PPcVa+eHwV/secMd f1lw== X-Gm-Message-State: AOAM530akI9byEueLcLZB1CJqSZFT5gw8Vdyj5WE1H+7hXk24MYJYFJC 77Mc5xaKCEeusWsZ2/PuXomEjWiS7FYcjQ== X-Google-Smtp-Source: ABdhPJx+B6448bGKBZ/J/6s5sPkVED0VAXx5ibY1dr8clb6UtKGQ8Dj23IZ+qpOcdGShfe4EvtSxtA== X-Received: by 2002:a17:906:9493:b0:70c:4ddf:5d5d with SMTP id t19-20020a170906949300b0070c4ddf5d5dmr44705737ejx.73.1655069994042; Sun, 12 Jun 2022 14:39:54 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.homenet.telecomitalia.it (host-80-116-90-174.pool80116.interbusiness.it. [80.116.90.174]) by smtp.gmail.com with ESMTPSA id u10-20020a1709061daa00b00711d546f8a8sm2909398ejh.139.2022.06.12.14.39.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jun 2022 14:39:53 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, Amarula patchwork , Oliver Hartkopp , Dario Binacchi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Marc Kleine-Budde , Paolo Abeni , Wolfgang Grandegger , linux-can@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v3 04/13] can: slcan: use CAN network device driver API Date: Sun, 12 Jun 2022 23:39:18 +0200 Message-Id: <20220612213927.3004444-5-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> References: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" As suggested by commit [1], now the driver uses the functions and the data structures provided by the CAN network device driver interface. Currently the driver doesn't implement a way to set bitrate for SLCAN based devices via ip tool, so you'll have to do this by slcand or slcan_attach invocation through the -sX parameter: - slcan_attach -f -s6 -o /dev/ttyACM0 - slcand -f -s8 -o /dev/ttyUSB0 where -s6 in will set adapter's bitrate to 500 Kbit/s and -s8 to 1Mbit/s. See the table below for further CAN bitrates: - s0 -> 10 Kbit/s - s1 -> 20 Kbit/s - s2 -> 50 Kbit/s - s3 -> 100 Kbit/s - s4 -> 125 Kbit/s - s5 -> 250 Kbit/s - s6 -> 500 Kbit/s - s7 -> 800 Kbit/s - s8 -> 1000 Kbit/s In doing so, the struct can_priv::bittiming.bitrate of the driver is not set and since the open_candev() checks that the bitrate has been set, it must be a non-zero value, the bitrate is set to a fake value (-1U) before it is called. [1] 39549eef3587f ("can: CAN Network device driver and Netlink interface") Signed-off-by: Dario Binacchi --- Changes in v3: - Replace (-1) with (-1U) in the commit description. Changes in v2: - Move CAN_SLCAN Kconfig option inside CAN_DEV scope. - Improve the commit message. drivers/net/can/Kconfig | 40 +++++++------- drivers/net/can/slcan.c | 112 ++++++++++++++++++++-------------------- 2 files changed, 77 insertions(+), 75 deletions(-) diff --git a/drivers/net/can/Kconfig b/drivers/net/can/Kconfig index b2dcc1e5a388..45997d39621c 100644 --- a/drivers/net/can/Kconfig +++ b/drivers/net/can/Kconfig @@ -28,26 +28,6 @@ config CAN_VXCAN This driver can also be built as a module. If so, the module will be called vxcan. =20 -config CAN_SLCAN - tristate "Serial / USB serial CAN Adaptors (slcan)" - depends on TTY - help - CAN driver for several 'low cost' CAN interfaces that are attached - via serial lines or via USB-to-serial adapters using the LAWICEL - ASCII protocol. The driver implements the tty linediscipline N_SLCAN. - - As only the sending and receiving of CAN frames is implemented, this - driver should work with the (serial/USB) CAN hardware from: - www.canusb.com / www.can232.com / www.mictronics.de / www.canhack.de - - Userspace tools to attach the SLCAN line discipline (slcan_attach, - slcand) can be found in the can-utils at the linux-can project, see - https://github.com/linux-can/can-utils for details. - - The slcan driver supports up to 10 CAN netdevices by default which - can be changed by the 'maxdev=3Dxx' module option. This driver can - also be built as a module. If so, the module will be called slcan. - config CAN_DEV tristate "Platform CAN drivers with Netlink support" default y @@ -118,6 +98,26 @@ config CAN_KVASER_PCIEFD Kvaser Mini PCI Express HS v2 Kvaser Mini PCI Express 2xHS v2 =20 +config CAN_SLCAN + tristate "Serial / USB serial CAN Adaptors (slcan)" + depends on TTY + help + CAN driver for several 'low cost' CAN interfaces that are attached + via serial lines or via USB-to-serial adapters using the LAWICEL + ASCII protocol. The driver implements the tty linediscipline N_SLCAN. + + As only the sending and receiving of CAN frames is implemented, this + driver should work with the (serial/USB) CAN hardware from: + www.canusb.com / www.can232.com / www.mictronics.de / www.canhack.de + + Userspace tools to attach the SLCAN line discipline (slcan_attach, + slcand) can be found in the can-utils at the linux-can project, see + https://github.com/linux-can/can-utils for details. + + The slcan driver supports up to 10 CAN netdevices by default which + can be changed by the 'maxdev=3Dxx' module option. This driver can + also be built as a module. If so, the module will be called slcan. + config CAN_SUN4I tristate "Allwinner A10 CAN controller" depends on MACH_SUN4I || MACH_SUN7I || COMPILE_TEST diff --git a/drivers/net/can/slcan.c b/drivers/net/can/slcan.c index c39580b142e0..a70f930b7c3a 100644 --- a/drivers/net/can/slcan.c +++ b/drivers/net/can/slcan.c @@ -56,7 +56,6 @@ #include #include #include -#include =20 MODULE_ALIAS_LDISC(N_SLCAN); MODULE_DESCRIPTION("serial line CAN interface"); @@ -79,6 +78,7 @@ MODULE_PARM_DESC(maxdev, "Maximum number of slcan interfa= ces"); #define SLC_EFF_ID_LEN 8 =20 struct slcan { + struct can_priv can; int magic; =20 /* Various fields. */ @@ -100,6 +100,7 @@ struct slcan { }; =20 static struct net_device **slcan_devs; +static DEFINE_SPINLOCK(slcan_lock); =20 /************************************************************************ * SLCAN ENCAPSULATION FORMAT * @@ -374,7 +375,7 @@ static netdev_tx_t slc_xmit(struct sk_buff *skb, struct= net_device *dev) spin_unlock(&sl->lock); =20 out: - kfree_skb(skb); + can_put_echo_skb(skb, dev, 0, 0); return NETDEV_TX_OK; } =20 @@ -394,6 +395,8 @@ static int slc_close(struct net_device *dev) clear_bit(TTY_DO_WRITE_WAKEUP, &sl->tty->flags); } netif_stop_queue(dev); + close_candev(dev); + sl->can.state =3D CAN_STATE_STOPPED; sl->rcount =3D 0; sl->xleft =3D 0; spin_unlock_bh(&sl->lock); @@ -405,21 +408,36 @@ static int slc_close(struct net_device *dev) static int slc_open(struct net_device *dev) { struct slcan *sl =3D netdev_priv(dev); + int err; =20 if (sl->tty =3D=3D NULL) return -ENODEV; =20 + /* The baud rate is not set with the command + * `ip link set type can bitrate ' and therefore + * can.bittiming.bitrate is 0, causing open_candev() to fail. + * So let's set to a fake value. + */ + sl->can.bittiming.bitrate =3D -1; + err =3D open_candev(dev); + if (err) { + netdev_err(dev, "failed to open can device\n"); + return err; + } + + sl->can.state =3D CAN_STATE_ERROR_ACTIVE; sl->flags &=3D BIT(SLF_INUSE); netif_start_queue(dev); return 0; } =20 -/* Hook the destructor so we can free slcan devs at the right point in tim= e */ -static void slc_free_netdev(struct net_device *dev) +static void slc_dealloc(struct slcan *sl) { - int i =3D dev->base_addr; + int i =3D sl->dev->base_addr; =20 - slcan_devs[i] =3D NULL; + free_candev(sl->dev); + if (slcan_devs) + slcan_devs[i] =3D NULL; } =20 static int slcan_change_mtu(struct net_device *dev, int new_mtu) @@ -434,24 +452,6 @@ static const struct net_device_ops slc_netdev_ops =3D { .ndo_change_mtu =3D slcan_change_mtu, }; =20 -static void slc_setup(struct net_device *dev) -{ - dev->netdev_ops =3D &slc_netdev_ops; - dev->needs_free_netdev =3D true; - dev->priv_destructor =3D slc_free_netdev; - - dev->hard_header_len =3D 0; - dev->addr_len =3D 0; - dev->tx_queue_len =3D 10; - - dev->mtu =3D CAN_MTU; - dev->type =3D ARPHRD_CAN; - - /* New-style flags. */ - dev->flags =3D IFF_NOARP; - dev->features =3D NETIF_F_HW_CSUM; -} - /****************************************** Routines looking at TTY side. ******************************************/ @@ -514,11 +514,8 @@ static void slc_sync(void) static struct slcan *slc_alloc(void) { int i; - char name[IFNAMSIZ]; struct net_device *dev =3D NULL; - struct can_ml_priv *can_ml; struct slcan *sl; - int size; =20 for (i =3D 0; i < maxdev; i++) { dev =3D slcan_devs[i]; @@ -531,16 +528,14 @@ static struct slcan *slc_alloc(void) if (i >=3D maxdev) return NULL; =20 - sprintf(name, "slcan%d", i); - size =3D ALIGN(sizeof(*sl), NETDEV_ALIGN) + sizeof(struct can_ml_priv); - dev =3D alloc_netdev(size, name, NET_NAME_UNKNOWN, slc_setup); + dev =3D alloc_candev(sizeof(*sl), 1); if (!dev) return NULL; =20 + snprintf(dev->name, sizeof(dev->name), "slcan%d", i); + dev->netdev_ops =3D &slc_netdev_ops; dev->base_addr =3D i; sl =3D netdev_priv(dev); - can_ml =3D (void *)sl + ALIGN(sizeof(*sl), NETDEV_ALIGN); - can_set_ml_priv(dev, can_ml); =20 /* Initialize channel control data */ sl->magic =3D SLCAN_MAGIC; @@ -573,11 +568,7 @@ static int slcan_open(struct tty_struct *tty) if (tty->ops->write =3D=3D NULL) return -EOPNOTSUPP; =20 - /* RTnetlink lock is misused here to serialize concurrent - opens of slcan channels. There are better ways, but it is - the simplest one. - */ - rtnl_lock(); + spin_lock(&slcan_lock); =20 /* Collect hanged up channels. */ slc_sync(); @@ -605,13 +596,15 @@ static int slcan_open(struct tty_struct *tty) =20 set_bit(SLF_INUSE, &sl->flags); =20 - err =3D register_netdevice(sl->dev); - if (err) + err =3D register_candev(sl->dev); + if (err) { + pr_err("slcan: can't register candev\n"); goto err_free_chan; + } } =20 /* Done. We have linked the TTY line to a channel. */ - rtnl_unlock(); + spin_unlock(&slcan_lock); tty->receive_room =3D 65536; /* We don't flow control */ =20 /* TTY layer expects 0 on success */ @@ -621,14 +614,10 @@ static int slcan_open(struct tty_struct *tty) sl->tty =3D NULL; tty->disc_data =3D NULL; clear_bit(SLF_INUSE, &sl->flags); - slc_free_netdev(sl->dev); - /* do not call free_netdev before rtnl_unlock */ - rtnl_unlock(); - free_netdev(sl->dev); - return err; + slc_dealloc(sl); =20 err_exit: - rtnl_unlock(); + spin_unlock(&slcan_lock); =20 /* Count references from TTY module */ return err; @@ -658,9 +647,11 @@ static void slcan_close(struct tty_struct *tty) synchronize_rcu(); flush_work(&sl->tx_work); =20 - /* Flush network side */ - unregister_netdev(sl->dev); - /* This will complete via sl_free_netdev */ + slc_close(sl->dev); + unregister_candev(sl->dev); + spin_lock(&slcan_lock); + slc_dealloc(sl); + spin_unlock(&slcan_lock); } =20 static void slcan_hangup(struct tty_struct *tty) @@ -768,18 +759,29 @@ static void __exit slcan_exit(void) dev =3D slcan_devs[i]; if (!dev) continue; - slcan_devs[i] =3D NULL; =20 - sl =3D netdev_priv(dev); - if (sl->tty) { - netdev_err(dev, "tty discipline still running\n"); - } + spin_lock(&slcan_lock); + dev =3D slcan_devs[i]; + if (dev) { + slcan_devs[i] =3D NULL; + spin_unlock(&slcan_lock); + sl =3D netdev_priv(dev); + if (sl->tty) { + netdev_err(dev, + "tty discipline still running\n"); + } =20 - unregister_netdev(dev); + slc_close(dev); + unregister_candev(dev); + } else { + spin_unlock(&slcan_lock); + } } =20 + spin_lock(&slcan_lock); kfree(slcan_devs); slcan_devs =3D NULL; + spin_unlock(&slcan_lock); =20 tty_unregister_ldisc(&slc_ldisc); } --=20 2.32.0 From nobody Mon Apr 27 16:16:29 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8540EC433EF for ; Sun, 12 Jun 2022 21:40:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236863AbiFLVkU (ORCPT ); Sun, 12 Jun 2022 17:40:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53984 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236845AbiFLVkF (ORCPT ); Sun, 12 Jun 2022 17:40:05 -0400 Received: from mail-ej1-x62e.google.com (mail-ej1-x62e.google.com [IPv6:2a00:1450:4864:20::62e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A1621289B7 for ; Sun, 12 Jun 2022 14:39:59 -0700 (PDT) Received: by mail-ej1-x62e.google.com with SMTP id o7so7730030eja.1 for ; Sun, 12 Jun 2022 14:39:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Hx0NO2HP0dNrW23jq3KzvYzEwbT+EuqW3kfxDZENRj0=; b=d9VwXs1IvLvFf22zAwdC4zv3o35n9iN0Jkzqf+gR7xFRn7za4RlbbaSN+WZ0eahMMd PuHx75bCypApa8Nj5S0A33EtZDnX0o2mtkUtRGDcmSQNXBQ+9AZTD/yX5UzKM7a5MROz zrVC3G+6xoh4IgI2LIkCJzaG5IsltdFlnXkL8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Hx0NO2HP0dNrW23jq3KzvYzEwbT+EuqW3kfxDZENRj0=; b=wK/6dr/7+0J4ni8N57gA29RU4pk/VVQ2rlY90ZhbK1KClvV5WJnW+fftXOD2KCgkGC SZsMp0MeRvuXifu3C2J03PWL4FQmtE8x4rHOe8Y09mrvkg8WYnA00lHUe7sB4cJGU8p2 5E+XvqKOrcZbRD1lJl40hHBxCmmPe44tZNwIZ2MsKgtgqleXZaVgLGdViw9VHb8lEXFh t7vypldeshBQcG6CiCPm2KTCFHYz9QIYo9d+Cz85/Yjw0wqt7hKIa2t1Z3wiivH2b1tm kxbFB6UDT2JNcBBM6A7AFbiTF+L3EUxPZCtSY0mulVAM+kWCT/VthioS51v97EtXa9AF xedA== X-Gm-Message-State: AOAM533w3Tuy39ekxlJ2ugkLR/vntys0tiY0zpTjma+DwfW4assdM1c8 v0mQqSRsdqTpNwFivFZerh4dyE9VVJOvIg== X-Google-Smtp-Source: ABdhPJxmPNiE8Egs8cQHYE/AWnP5Ves/8od02ASU+2Mz05zD0p27lsnsJ/FcOTrEnc8mB1B9u0rhRw== X-Received: by 2002:a17:906:7a57:b0:711:faf1:587d with SMTP id i23-20020a1709067a5700b00711faf1587dmr20191424ejo.581.1655069997739; Sun, 12 Jun 2022 14:39:57 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.homenet.telecomitalia.it (host-80-116-90-174.pool80116.interbusiness.it. [80.116.90.174]) by smtp.gmail.com with ESMTPSA id u10-20020a1709061daa00b00711d546f8a8sm2909398ejh.139.2022.06.12.14.39.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jun 2022 14:39:57 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, Amarula patchwork , Oliver Hartkopp , Dario Binacchi , Marc Kleine-Budde , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Vincent Mailhol , Wolfgang Grandegger , linux-can@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v3 05/13] can: netlink: dump bitrate 0 if can_priv::bittiming.bitrate is -1U Date: Sun, 12 Jun 2022 23:39:19 +0200 Message-Id: <20220612213927.3004444-6-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> References: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Adding Netlink support to the slcan driver made it necessary to set the bitrate to a fake value (-1U) to prevent open_candev() from failing. In this case the command `ip --details -s -s link show' would print 4294967295 as the bitrate value. The patch change this value in 0. Suggested-by: Marc Kleine-Budde Signed-off-by: Dario Binacchi --- (no changes since v1) drivers/net/can/dev/netlink.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index 7633d98e3912..788a6752fcc7 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -505,11 +505,16 @@ static int can_fill_info(struct sk_buff *skb, const s= truct net_device *dev) struct can_ctrlmode cm =3D {.flags =3D priv->ctrlmode}; struct can_berr_counter bec =3D { }; enum can_state state =3D priv->state; + __u32 bitrate =3D priv->bittiming.bitrate; + int ret =3D 0; =20 if (priv->do_get_state) priv->do_get_state(dev, &state); =20 - if ((priv->bittiming.bitrate && + if (bitrate =3D=3D -1U) + priv->bittiming.bitrate =3D 0; + + if ((bitrate && nla_put(skb, IFLA_CAN_BITTIMING, sizeof(priv->bittiming), &priv->bittiming)) || =20 @@ -563,9 +568,10 @@ static int can_fill_info(struct sk_buff *skb, const st= ruct net_device *dev) can_ctrlmode_ext_fill_info(skb, priv) ) =20 - return -EMSGSIZE; + ret =3D -EMSGSIZE; =20 - return 0; + priv->bittiming.bitrate =3D bitrate; + return ret; } =20 static size_t can_get_xstats_size(const struct net_device *dev) --=20 2.32.0 From nobody Mon Apr 27 16:16:29 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 84FAFC43334 for ; Sun, 12 Jun 2022 21:40:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237128AbiFLVk0 (ORCPT ); Sun, 12 Jun 2022 17:40:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54134 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236917AbiFLVkH (ORCPT ); Sun, 12 Jun 2022 17:40:07 -0400 Received: from mail-ej1-x62e.google.com (mail-ej1-x62e.google.com [IPv6:2a00:1450:4864:20::62e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 446EE193EB for ; Sun, 12 Jun 2022 14:40:03 -0700 (PDT) Received: by mail-ej1-x62e.google.com with SMTP id v1so7635639ejg.13 for ; Sun, 12 Jun 2022 14:40:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=UpyKa7+uiIpxrunvBDbFWo+0Nybf0w4Bu0XA6EFem0M=; b=iySTg+7gykUlkXqKRP10EZo85LR74jsimSuc1hHYsMrI13hjxriR+gxuAxDgBePdWb Y/UERRrLDFDVhPQ+6SR2AyT6FZf1PvKc+Lk7FGtv7UonIY3bmiskc3mTK9OjiV3UCFrT Rq2w9y44CkwA0+txIQ2GcR3k107yest0i6P28= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UpyKa7+uiIpxrunvBDbFWo+0Nybf0w4Bu0XA6EFem0M=; b=hjH4QMuzUa1cK9LbNMxY2ZxajU069E/Yq0Z1xi7QDRSvuqyncjYu/LUVO5eddgMZRF NUz1rzhuPZNYa5nfm487e2UcMd9H7lclC5lgn0Sn9K+7lODW8GJ8/omBhUeeFGFFgbdD WE+A+orOG+h+ng/cmDNlohaQZqL5L9wfGY7k/qQvzTCjCMYDShT9VtvD4RD08amsY4Nm bkRV7l3LWKr2hWrpo7P/1onZXvs/OKz/2/Qx8nC+PCITHpWaTLJVRLHVW7yLqHFcwKHt Hbz5xGG0Q3E5KH7HHd0TD9ScqZX0Kt2y9t56auYzHAtQwZj3QdwVEnZN5eVqiQ46AUjQ AgkA== X-Gm-Message-State: AOAM530RFwZ2tAM1VBMWTXjiDgRYcXnc+W+UlYKDZ/8CbRsTXVKAiwSq 7PzNmawnjzWUdBt8BayFpSlMbsDoh+5wtQ== X-Google-Smtp-Source: ABdhPJwkbgu45AOp+OWXYw1HCPQPTrM3sdPLIkp/zMVu125wAREIqo2pzDiUbJbnyvGQXMB2zPhRqQ== X-Received: by 2002:a17:907:8195:b0:710:b40:95d2 with SMTP id iy21-20020a170907819500b007100b4095d2mr41307282ejc.604.1655070002462; Sun, 12 Jun 2022 14:40:02 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.homenet.telecomitalia.it (host-80-116-90-174.pool80116.interbusiness.it. [80.116.90.174]) by smtp.gmail.com with ESMTPSA id u10-20020a1709061daa00b00711d546f8a8sm2909398ejh.139.2022.06.12.14.39.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jun 2022 14:40:02 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, Amarula patchwork , Oliver Hartkopp , Dario Binacchi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Marc Kleine-Budde , Paolo Abeni , Wolfgang Grandegger , linux-can@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v3 06/13] can: slcan: allow to send commands to the adapter Date: Sun, 12 Jun 2022 23:39:20 +0200 Message-Id: <20220612213927.3004444-7-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> References: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This is a preparation patch for the upcoming support to change the bitrate via ip tool, reset the adapter error states via the ethtool API and, more generally, send commands to the adapter. Since the close command (i. e. "C\r") will be sent in the ndo_stop() where netif_running() returns false, a new flag bit (i. e. SLF_XCMD) for serial transmission has to be added. Signed-off-by: Dario Binacchi --- Changes in v3: - Update the commit description. drivers/net/can/slcan.c | 46 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/drivers/net/can/slcan.c b/drivers/net/can/slcan.c index a70f930b7c3a..4639a63c3af8 100644 --- a/drivers/net/can/slcan.c +++ b/drivers/net/can/slcan.c @@ -97,6 +97,9 @@ struct slcan { unsigned long flags; /* Flag values/ mode etc */ #define SLF_INUSE 0 /* Channel in use */ #define SLF_ERROR 1 /* Parity, etc. error */ +#define SLF_XCMD 2 /* Command transmission */ + wait_queue_head_t xcmd_wait; /* Wait queue for commands */ + /* transmission */ }; =20 static struct net_device **slcan_devs; @@ -315,12 +318,22 @@ static void slcan_transmit(struct work_struct *work) =20 spin_lock_bh(&sl->lock); /* First make sure we're connected. */ - if (!sl->tty || sl->magic !=3D SLCAN_MAGIC || !netif_running(sl->dev)) { + if (!sl->tty || sl->magic !=3D SLCAN_MAGIC || + (unlikely(!netif_running(sl->dev)) && + likely(!test_bit(SLF_XCMD, &sl->flags)))) { spin_unlock_bh(&sl->lock); return; } =20 if (sl->xleft <=3D 0) { + if (unlikely(test_bit(SLF_XCMD, &sl->flags))) { + clear_bit(SLF_XCMD, &sl->flags); + clear_bit(TTY_DO_WRITE_WAKEUP, &sl->tty->flags); + spin_unlock_bh(&sl->lock); + wake_up(&sl->xcmd_wait); + return; + } + /* Now serial buffer is almost free & we can start * transmission of another packet */ sl->dev->stats.tx_packets++; @@ -384,6 +397,36 @@ static netdev_tx_t slc_xmit(struct sk_buff *skb, struc= t net_device *dev) * Routines looking at netdevice side. ******************************************/ =20 +static int slcan_transmit_cmd(struct slcan *sl, const unsigned char *cmd) +{ + int ret, actual, n; + + spin_lock(&sl->lock); + if (sl->tty =3D=3D NULL) { + spin_unlock(&sl->lock); + return -ENODEV; + } + + n =3D snprintf(sl->xbuff, sizeof(sl->xbuff), "%s", cmd); + set_bit(TTY_DO_WRITE_WAKEUP, &sl->tty->flags); + actual =3D sl->tty->ops->write(sl->tty, sl->xbuff, n); + sl->xleft =3D n - actual; + sl->xhead =3D sl->xbuff + actual; + set_bit(SLF_XCMD, &sl->flags); + spin_unlock(&sl->lock); + ret =3D wait_event_interruptible_timeout(sl->xcmd_wait, + !test_bit(SLF_XCMD, &sl->flags), + HZ); + clear_bit(SLF_XCMD, &sl->flags); + if (ret =3D=3D -ERESTARTSYS) + return ret; + + if (ret =3D=3D 0) + return -ETIMEDOUT; + + return 0; +} + /* Netdevice UP -> DOWN routine */ static int slc_close(struct net_device *dev) { @@ -542,6 +585,7 @@ static struct slcan *slc_alloc(void) sl->dev =3D dev; spin_lock_init(&sl->lock); INIT_WORK(&sl->tx_work, slcan_transmit); + init_waitqueue_head(&sl->xcmd_wait); slcan_devs[i] =3D dev; =20 return sl; --=20 2.32.0 From nobody Mon Apr 27 16:16:29 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 22F7DC433EF for ; Sun, 12 Jun 2022 21:41:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236919AbiFLVk7 (ORCPT ); Sun, 12 Jun 2022 17:40:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55176 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237094AbiFLVkV (ORCPT ); Sun, 12 Jun 2022 17:40:21 -0400 Received: from mail-ej1-x636.google.com (mail-ej1-x636.google.com [IPv6:2a00:1450:4864:20::636]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DB96227CE5 for ; Sun, 12 Jun 2022 14:40:08 -0700 (PDT) Received: by mail-ej1-x636.google.com with SMTP id n10so7703765ejk.5 for ; Sun, 12 Jun 2022 14:40:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+67b1tOoWpv+tJyn4Sl0UQj6SwsqWBdWszhIl7nE8ec=; b=ekzn2Eu7W1AGKvZCpWrysDJbHOiJnbUo5R4jIEGo8okB8OGLKdr/rfRpdjnuWmK+ka YiTgErfTCPlZsW+I5ikMnhUtnvq0/m3pAZBJtOlPonAyNOitvDOYkoQUg9/7qskgVXLn 6gVg9KMBgvg65rnqlaTiqb9xP/PA+V64FdQos= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+67b1tOoWpv+tJyn4Sl0UQj6SwsqWBdWszhIl7nE8ec=; b=JsO9wrG1cOLYfVoXG8LjZSUbRPT9I72THkN/qXb/UTtbdu4Mr693NfAJMrUH3rhrD/ HubRhwuUca/p2Ls6Q1Xxs8zfzUYG5u1X9imxzxWSPvEJMCWx/fM8feUAO+VimtOHvxRs B8FrBNqAcpo8NF/ewYtEyRuiHBiH69mg79t6QHztGiwiLONfB1S7714G5Vjnzl+SRFn4 Z1ChljdfF4YNgQZ5cuhPfIVzQMg0h4VjEci39Uh7qQxk/h44nsLuWgRpuZMfkSAdodl3 /Ddchgizjho/8gJFlcEVjkXySLVoZlP0dmp8OEHQeeaoLqycr1B7dkBHEaIIxmvwubEt 3faQ== X-Gm-Message-State: AOAM5323EhUG4nHsVW/QFsNJ8U0lxOl70iiTKAYVCCx+CQEqIdMMDTPL m4UljKrneufSYak71XQs2fEvia3OSUG4hg== X-Google-Smtp-Source: ABdhPJx8A99lmpCxYG4hTnXx0Y2AcGM4m1iilOJ4B+3Xq/1ru2ssjotUbF7W+fslGMlGKgRxvp4d4w== X-Received: by 2002:a17:907:8a1d:b0:711:d86e:cc5 with SMTP id sc29-20020a1709078a1d00b00711d86e0cc5mr31921307ejc.237.1655070006888; Sun, 12 Jun 2022 14:40:06 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.homenet.telecomitalia.it (host-80-116-90-174.pool80116.interbusiness.it. [80.116.90.174]) by smtp.gmail.com with ESMTPSA id u10-20020a1709061daa00b00711d546f8a8sm2909398ejh.139.2022.06.12.14.40.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jun 2022 14:40:06 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, Amarula patchwork , Oliver Hartkopp , Dario Binacchi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Marc Kleine-Budde , Paolo Abeni , Wolfgang Grandegger , linux-can@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v3 07/13] can: slcan: set bitrate by CAN device driver API Date: Sun, 12 Jun 2022 23:39:21 +0200 Message-Id: <20220612213927.3004444-8-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> References: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" It allows to set the bitrate via ip tool, as it happens for the other CAN device drivers. It still remains possible to set the bitrate via slcand or slcan_attach utilities. In case the ip tool is used, the driver will send the serial command to the adapter. Signed-off-by: Dario Binacchi --- Changes in v3: - Remove the slc_do_set_bittiming(). - Set the bitrate in the ndo_open(). - Replace -1UL with -1U in setting a fake value for the bitrate. Changes in v2: - Use the CAN framework support for setting fixed bit rates. drivers/net/can/slcan.c | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/drivers/net/can/slcan.c b/drivers/net/can/slcan.c index 4639a63c3af8..be3f7e5c685b 100644 --- a/drivers/net/can/slcan.c +++ b/drivers/net/can/slcan.c @@ -105,6 +105,11 @@ struct slcan { static struct net_device **slcan_devs; static DEFINE_SPINLOCK(slcan_lock); =20 +static const u32 slcan_bitrate_const[] =3D { + 10000, 20000, 50000, 100000, 125000, + 250000, 500000, 800000, 1000000 +}; + /************************************************************************ * SLCAN ENCAPSULATION FORMAT * ************************************************************************/ @@ -440,6 +445,7 @@ static int slc_close(struct net_device *dev) netif_stop_queue(dev); close_candev(dev); sl->can.state =3D CAN_STATE_STOPPED; + sl->can.bittiming.bitrate =3D 0; sl->rcount =3D 0; sl->xleft =3D 0; spin_unlock_bh(&sl->lock); @@ -451,7 +457,8 @@ static int slc_close(struct net_device *dev) static int slc_open(struct net_device *dev) { struct slcan *sl =3D netdev_priv(dev); - int err; + unsigned char cmd[SLC_MTU]; + int err, s; =20 if (sl->tty =3D=3D NULL) return -ENODEV; @@ -461,15 +468,39 @@ static int slc_open(struct net_device *dev) * can.bittiming.bitrate is 0, causing open_candev() to fail. * So let's set to a fake value. */ - sl->can.bittiming.bitrate =3D -1; + if (sl->can.bittiming.bitrate =3D=3D 0) + sl->can.bittiming.bitrate =3D -1U; + err =3D open_candev(dev); if (err) { netdev_err(dev, "failed to open can device\n"); return err; } =20 - sl->can.state =3D CAN_STATE_ERROR_ACTIVE; sl->flags &=3D BIT(SLF_INUSE); + + if (sl->can.bittiming.bitrate !=3D -1U) { + for (s =3D 0; s < ARRAY_SIZE(slcan_bitrate_const); s++) { + if (sl->can.bittiming.bitrate =3D=3D slcan_bitrate_const[s]) + break; + } + + /* The CAN framework has already validate the bitrate value, + * so we can avoid to check if `s' has been properly set. + */ + + snprintf(cmd, sizeof(cmd), "C\rS%d\r", s); + err =3D slcan_transmit_cmd(sl, cmd); + if (err) { + netdev_err(dev, + "failed to send bitrate command 'C\\rS%d\\r'\n", + s); + close_candev(dev); + return err; + } + } + + sl->can.state =3D CAN_STATE_ERROR_ACTIVE; netif_start_queue(dev); return 0; } @@ -583,6 +614,8 @@ static struct slcan *slc_alloc(void) /* Initialize channel control data */ sl->magic =3D SLCAN_MAGIC; sl->dev =3D dev; + sl->can.bitrate_const =3D slcan_bitrate_const; + sl->can.bitrate_const_cnt =3D ARRAY_SIZE(slcan_bitrate_const); spin_lock_init(&sl->lock); INIT_WORK(&sl->tx_work, slcan_transmit); init_waitqueue_head(&sl->xcmd_wait); --=20 2.32.0 From nobody Mon Apr 27 16:16:29 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B4A97C433EF for ; Sun, 12 Jun 2022 21:41:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236285AbiFLVlH (ORCPT ); Sun, 12 Jun 2022 17:41:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55186 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237117AbiFLVkV (ORCPT ); Sun, 12 Jun 2022 17:40:21 -0400 Received: from mail-ej1-x631.google.com (mail-ej1-x631.google.com [IPv6:2a00:1450:4864:20::631]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CA8542A724 for ; Sun, 12 Jun 2022 14:40:10 -0700 (PDT) Received: by mail-ej1-x631.google.com with SMTP id kq6so7662738ejb.11 for ; Sun, 12 Jun 2022 14:40:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=AAKaIth+G/AmEuzfr70Dsvzk4FxXYLQFFVrvRHhl0zE=; b=Qr//VDTJlM3yW6NMOsV6Ote3kssYtDIpQaISCw/bS+xF96jzFDXuevaWjaTtWkVcSK vYCwdE4iWIVd8vDsjmjwW5ejgo2/mhUw09BsmMuB+Nxt2mmnRL+VB8nLL30uTe4MXkU7 dRU9p68g51DFLMOdk5sBrL8dgNnxp5yqS/Aec= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=AAKaIth+G/AmEuzfr70Dsvzk4FxXYLQFFVrvRHhl0zE=; b=KtggBO25YFZzGakH4RB+PY4arLQe/2vz8mlCXWfO0zy8dJdSFV6ZPBnsXsY9Xr3YST 44A9NVovMbhZcBjfLa+rVh23vFtzswQIaDMSP01qpuwFx0EB7bVZqYJSouy/QMKg4U71 wouw1vDKo9DXWl6NIIB5rzZl4JpIXBK0xTmnYDPefEGrSDJ5Rx2HAy8OnLMVoenFdHgb YZG/RfqwnLsTKYqd3ZTT0rW864L9pUeUAvbslS8956sONnsuyk/ZBqhzMLu3STmNz8Gu QtWIPFzWw908283tKK5c0NRd2QwYWiPEgUjJbsimkFASDbCMqop7o6u6I/XjVKzojSiA 61IA== X-Gm-Message-State: AOAM531qbgzQmLtwYsdYPrzlg4HmCaNYjUxe9VPCydQoZZ0nusT13lGy ImhmG0Vp0IXNOWanLNDRejmrOlpGAQM1qA== X-Google-Smtp-Source: ABdhPJw1gEsC80Io0jkEH7Fe3Uht5G0w201EyPmerbdjsm0uSmJLIrZjPwPByXsqXi4uCYhG/Egfhg== X-Received: by 2002:a17:906:1c9:b0:712:1115:42a5 with SMTP id 9-20020a17090601c900b00712111542a5mr15154695ejj.662.1655070010102; Sun, 12 Jun 2022 14:40:10 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.homenet.telecomitalia.it (host-80-116-90-174.pool80116.interbusiness.it. [80.116.90.174]) by smtp.gmail.com with ESMTPSA id u10-20020a1709061daa00b00711d546f8a8sm2909398ejh.139.2022.06.12.14.40.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jun 2022 14:40:09 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, Amarula patchwork , Oliver Hartkopp , Dario Binacchi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Marc Kleine-Budde , Paolo Abeni , Wolfgang Grandegger , linux-can@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v3 08/13] can: slcan: send the open command to the adapter Date: Sun, 12 Jun 2022 23:39:22 +0200 Message-Id: <20220612213927.3004444-9-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> References: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" In case the bitrate has been set via ip tool, this patch changes the driver to send the open command ("O\r") to the adapter. Signed-off-by: Dario Binacchi --- (no changes since v2) Changes in v2: - Improve the commit message. drivers/net/can/slcan.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/net/can/slcan.c b/drivers/net/can/slcan.c index be3f7e5c685b..9bbf8f363f58 100644 --- a/drivers/net/can/slcan.c +++ b/drivers/net/can/slcan.c @@ -495,14 +495,23 @@ static int slc_open(struct net_device *dev) netdev_err(dev, "failed to send bitrate command 'C\\rS%d\\r'\n", s); - close_candev(dev); - return err; + goto cmd_transmit_failed; + } + + err =3D slcan_transmit_cmd(sl, "O\r"); + if (err) { + netdev_err(dev, "failed to send open command 'O\\r'\n"); + goto cmd_transmit_failed; } } =20 sl->can.state =3D CAN_STATE_ERROR_ACTIVE; netif_start_queue(dev); return 0; + +cmd_transmit_failed: + close_candev(dev); + return err; } =20 static void slc_dealloc(struct slcan *sl) --=20 2.32.0 From nobody Mon Apr 27 16:16:29 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DBB12C433EF for ; Sun, 12 Jun 2022 21:41:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237444AbiFLVlK (ORCPT ); Sun, 12 Jun 2022 17:41:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57348 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237255AbiFLVko (ORCPT ); Sun, 12 Jun 2022 17:40:44 -0400 Received: from mail-ed1-x535.google.com (mail-ed1-x535.google.com [IPv6:2a00:1450:4864:20::535]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D2FDB1CFE6 for ; Sun, 12 Jun 2022 14:40:15 -0700 (PDT) Received: by mail-ed1-x535.google.com with SMTP id c2so4907379edf.5 for ; Sun, 12 Jun 2022 14:40:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=O0zVHGTWOUK0yHY7/MxDgofJ+b/Xb1B9oJbEk1RTZ7Q=; b=gKCrFNo3kTznvykOJ58dS73QN8xWLbgkEjvPMu7P0GX3Qr6KU25fZIpnewqc0feaFJ B/QBHD8NmlFK9oUBiJNaAdLkrVrZ5pTPmPTZIJG7ctdmND4+VeeL6dCQzxOWbTZG+x2o niNarrRIk6rpP0LRhpdivQKYVVzl64mtTe5GQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=O0zVHGTWOUK0yHY7/MxDgofJ+b/Xb1B9oJbEk1RTZ7Q=; b=GSyGe2zD9ds5Fw0yucw++eUEEdR7/UCX9XImOFLISk9RqVnwnrG5Tv1NI2oX5iwdnC xIg0RmMuK0A2z/cbrWSsk1Fd+eS87is7EBZrwtwBXgGZUPHW5x576ngHb0Bs7rnDlLF4 nxVzf87Vi+B1JrUBUE8plz2BIaXW78+H3gvch+qnIHrwoC/gtKhNoEXCFAbrbitwiQUk sSbd9aGWOE7UPpyGcTTcRAtODNXNi/hpFD+XsB0xQ8I6okTg1VyXIhvY2WSgmYjknf1E 1Q7ou5K/TuDn90CRIVhxq66M9tmOvRbf8OvyBYM+I1GYHcRv64sdGdDI7qTk16KkqSw1 LCeA== X-Gm-Message-State: AOAM530S7ReJNWYwSqLtUaps0CBuLBKvZ3+EHQmrgCZLgJypSU/IQfOH hq6L73NkGUmq9R4l4JGYZ+8wL4UsWyMXGA== X-Google-Smtp-Source: ABdhPJwLv5x5X+tOe8+lCoVfKwj1mURnOLFqMTJ3A5RGDhSM/FYTfgbAMdlvrESeXqZHdOpkI+W4xg== X-Received: by 2002:a05:6402:1543:b0:431:9d90:49f7 with SMTP id p3-20020a056402154300b004319d9049f7mr28466532edx.397.1655070014591; Sun, 12 Jun 2022 14:40:14 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.homenet.telecomitalia.it (host-80-116-90-174.pool80116.interbusiness.it. [80.116.90.174]) by smtp.gmail.com with ESMTPSA id u10-20020a1709061daa00b00711d546f8a8sm2909398ejh.139.2022.06.12.14.40.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jun 2022 14:40:14 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, Amarula patchwork , Oliver Hartkopp , Dario Binacchi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Marc Kleine-Budde , Paolo Abeni , Wolfgang Grandegger , linux-can@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v3 09/13] can: slcan: send the close command to the adapter Date: Sun, 12 Jun 2022 23:39:23 +0200 Message-Id: <20220612213927.3004444-10-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> References: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" In case the bitrate has been set via ip tool, this patch changes the driver to send the close command ("C\r") to the adapter. Signed-off-by: Dario Binacchi --- (no changes since v2) Changes in v2: - Improve the commit message. drivers/net/can/slcan.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/net/can/slcan.c b/drivers/net/can/slcan.c index 9bbf8f363f58..82a42cec52d3 100644 --- a/drivers/net/can/slcan.c +++ b/drivers/net/can/slcan.c @@ -436,9 +436,20 @@ static int slcan_transmit_cmd(struct slcan *sl, const = unsigned char *cmd) static int slc_close(struct net_device *dev) { struct slcan *sl =3D netdev_priv(dev); + int err; =20 spin_lock_bh(&sl->lock); if (sl->tty) { + if (sl->can.bittiming.bitrate && + sl->can.bittiming.bitrate !=3D -1) { + spin_unlock_bh(&sl->lock); + err =3D slcan_transmit_cmd(sl, "C\r"); + spin_lock_bh(&sl->lock); + if (err) + netdev_warn(dev, + "failed to send close command 'C\\r'\n"); + } + /* TTY discipline is running. */ clear_bit(TTY_DO_WRITE_WAKEUP, &sl->tty->flags); } --=20 2.32.0 From nobody Mon Apr 27 16:16:29 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 86CB2C43334 for ; Sun, 12 Jun 2022 21:41:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232729AbiFLVlf (ORCPT ); Sun, 12 Jun 2022 17:41:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55166 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236875AbiFLVkx (ORCPT ); Sun, 12 Jun 2022 17:40:53 -0400 Received: from mail-ed1-x52c.google.com (mail-ed1-x52c.google.com [IPv6:2a00:1450:4864:20::52c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1AA43193EB for ; Sun, 12 Jun 2022 14:40:20 -0700 (PDT) Received: by mail-ed1-x52c.google.com with SMTP id g7so4931355eda.3 for ; Sun, 12 Jun 2022 14:40:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=s1QllzXGCUo8JTE+hOZVBSnNVj6x3XTlbwu5/oui3J8=; b=j683OfaqxoBiWn1BiwfjXqUk2WaqfT4QdfjP+wHvLbHubm2YMyvvz0S1/wEvj+zBh+ ZJBgSWvHufKlrA0lDhg2S9Gv7/UcrTbeEc6XgSDrfup5cgRcQep+VPjI5gJPmYypelj7 ZBhwEL2jGYTlNsCdrSo+5Srx/Cjp6dLGXP+/M= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=s1QllzXGCUo8JTE+hOZVBSnNVj6x3XTlbwu5/oui3J8=; b=eZHwEQMgx0EFFCxoBZ2V7u5LOzzMk7R+kWyzsjbqB0wSVufZ/DiZ/7mswjMy0CYrX7 rcikuxHrvYKGrzOZDLGLgsfSg3qi10TJpjPwj1nsLpJs0ArVJrjYTNyqb+9AETt0+nT2 tTpnGRObTiKWipokO6R98vW4lqoO1OKn0i6JnQAX8OewF5LskaqlDWfoF9Uij6amBCp+ tMWGM2d1X/r+TfEJWrXt/WM0ZwaR8Rc/KdK7SfkzSSRdPzh9CY3B6r7HS/cFRdfzYRXL DqhOOyzeArlp2Nht5tDeoMqO3WvdWjVrERgBGgqrftnH39vhaVKkXrRpSK91oXIYlcfN fk+A== X-Gm-Message-State: AOAM5301uAu/n/ARFAgD6FtP/qJl2+u16atmrCBo9L4m5r8tb6b/Adv4 Cl8sW8iAT/enmnyt9+Zq3/eAS9Jk3zM5Eg== X-Google-Smtp-Source: ABdhPJyCUKwRYN+7NoivIrBty///I6QyiekWSDvpNJazbHFWFe2uUq1To40HAXF68dITPwjP/KiumQ== X-Received: by 2002:aa7:c34d:0:b0:42d:ce57:5df2 with SMTP id j13-20020aa7c34d000000b0042dce575df2mr61797916edr.315.1655070018727; Sun, 12 Jun 2022 14:40:18 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.homenet.telecomitalia.it (host-80-116-90-174.pool80116.interbusiness.it. [80.116.90.174]) by smtp.gmail.com with ESMTPSA id u10-20020a1709061daa00b00711d546f8a8sm2909398ejh.139.2022.06.12.14.40.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jun 2022 14:40:18 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, Amarula patchwork , Oliver Hartkopp , Dario Binacchi , "David S. Miller" , Eric Dumazet , Greg Kroah-Hartman , Jakub Kicinski , Jiri Slaby , Marc Kleine-Budde , Paolo Abeni , Sebastian Andrzej Siewior , Vincent Mailhol , Wolfgang Grandegger , linux-can@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v3 10/13] can: slcan: move driver into separate sub directory Date: Sun, 12 Jun 2022 23:39:24 +0200 Message-Id: <20220612213927.3004444-11-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> References: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This patch moves the slcan driver into a separate directory, a later patch will add more files. Signed-off-by: Dario Binacchi --- (no changes since v1) drivers/net/can/Makefile | 2 +- drivers/net/can/slcan/Makefile | 6 ++++++ drivers/net/can/{slcan.c =3D> slcan/slcan-core.c} | 0 3 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 drivers/net/can/slcan/Makefile rename drivers/net/can/{slcan.c =3D> slcan/slcan-core.c} (100%) diff --git a/drivers/net/can/Makefile b/drivers/net/can/Makefile index 0af85983634c..210354df273c 100644 --- a/drivers/net/can/Makefile +++ b/drivers/net/can/Makefile @@ -5,7 +5,7 @@ =20 obj-$(CONFIG_CAN_VCAN) +=3D vcan.o obj-$(CONFIG_CAN_VXCAN) +=3D vxcan.o -obj-$(CONFIG_CAN_SLCAN) +=3D slcan.o +obj-$(CONFIG_CAN_SLCAN) +=3D slcan/ =20 obj-y +=3D dev/ obj-y +=3D rcar/ diff --git a/drivers/net/can/slcan/Makefile b/drivers/net/can/slcan/Makefile new file mode 100644 index 000000000000..2e84f7bf7617 --- /dev/null +++ b/drivers/net/can/slcan/Makefile @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: GPL-2.0 + +obj-$(CONFIG_CAN_SLCAN) +=3D slcan.o + +slcan-objs :=3D +slcan-objs +=3D slcan-core.o diff --git a/drivers/net/can/slcan.c b/drivers/net/can/slcan/slcan-core.c similarity index 100% rename from drivers/net/can/slcan.c rename to drivers/net/can/slcan/slcan-core.c --=20 2.32.0 From nobody Mon Apr 27 16:16:29 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id AAF25C43334 for ; Sun, 12 Jun 2022 21:41:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237020AbiFLVlq (ORCPT ); Sun, 12 Jun 2022 17:41:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57572 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237269AbiFLVlS (ORCPT ); Sun, 12 Jun 2022 17:41:18 -0400 Received: from mail-ed1-x532.google.com (mail-ed1-x532.google.com [IPv6:2a00:1450:4864:20::532]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4505E2AE20 for ; Sun, 12 Jun 2022 14:40:31 -0700 (PDT) Received: by mail-ed1-x532.google.com with SMTP id d14so4874080eda.12 for ; Sun, 12 Jun 2022 14:40:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=z9lGb6dxRaekyRJ4swSwg3PwLJAGarCfZ2Xmy0z62Lo=; b=ZHd42I9XKFhWqtlM+V16J2ZuBI4feXpsVbxmxttrAIwGg/Q8Xbbf2us07BbjzmJ5Nl eAEBHTuRwVGoqi2ZwF05hsFaFdd+YLZ8LC+3VvYyhgsi43LafYtrRX3s9pivBn7bQ7dA K7MTj/Gm/vYu5ggvQ4H+ouH02pR2kYk1kBIn4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=z9lGb6dxRaekyRJ4swSwg3PwLJAGarCfZ2Xmy0z62Lo=; b=CDMR4dkhc7wC6LcF957PPUnwn94ko7YqIstEsUWCE0KjrCqw1TKXhgV2a63dmaeHh4 v5XvP1mmHsP9w43DEaQub4tDUdxzXr3f4AUk5xDkMCds7xLNq+IkauUZ1Q48SFLYmDF3 7xiCF8wJOeivJfwO7ZnVRn3n73HspCzJ+aY09C+G9pu0HmAE04dGbZ16WgTKU7EzQWE3 SWiZnay9hixSvv253qvP3d63aC1lSZq0E3odP73Y3LQZkq8wAgz52Dlhf5cuP3wqIKeH 5OyKI2pEyWHJ3vYfNPX3tpVVOR1J2JdNcQkuQbCO6UdivivCYAMSfjdulTEGgHPCPBVK 5GWg== X-Gm-Message-State: AOAM533OacmxlVOV8DLqo+K533U+eODKbcSIAFl0F4Ebu54lap3Zdvzb UfG8cLA69ZYWkHHu3tUwq9OI5OVF4kZ/aQ== X-Google-Smtp-Source: ABdhPJzRK11lIFMbNNiJoNaa2NvCjqL3/yg6Xea1ch/o2QLwQexscPVHfwcc2SVDNKVplaKcsKiTJw== X-Received: by 2002:a05:6402:51d4:b0:42f:b38d:dbb9 with SMTP id r20-20020a05640251d400b0042fb38ddbb9mr51327514edd.255.1655070023483; Sun, 12 Jun 2022 14:40:23 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.homenet.telecomitalia.it (host-80-116-90-174.pool80116.interbusiness.it. [80.116.90.174]) by smtp.gmail.com with ESMTPSA id u10-20020a1709061daa00b00711d546f8a8sm2909398ejh.139.2022.06.12.14.40.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jun 2022 14:40:23 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, Amarula patchwork , Oliver Hartkopp , Dario Binacchi , "David S. Miller" , Eric Dumazet , Greg Kroah-Hartman , Jakub Kicinski , Jiri Slaby , Marc Kleine-Budde , Paolo Abeni , Sebastian Andrzej Siewior , Vincent Mailhol , Wolfgang Grandegger , linux-can@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v3 11/13] can: slcan: add ethtool support to reset adapter errors Date: Sun, 12 Jun 2022 23:39:25 +0200 Message-Id: <20220612213927.3004444-12-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> References: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This patch adds a private flag to the slcan driver to switch the "err-rst-on-open" setting on and off. "err-rst-on-open" on - Reset error states on opening command "err-rst-on-open" off - Don't reset error states on opening command (default) The setting can only be changed if the interface is down: ip link set dev can0 down ethtool --set-priv-flags can0 err-rst-on-open {off|on} ip link set dev can0 up Signed-off-by: Dario Binacchi --- (no changes since v1) drivers/net/can/slcan/Makefile | 1 + drivers/net/can/slcan/slcan-core.c | 36 +++++++++++++++ drivers/net/can/slcan/slcan-ethtool.c | 65 +++++++++++++++++++++++++++ drivers/net/can/slcan/slcan.h | 18 ++++++++ 4 files changed, 120 insertions(+) create mode 100644 drivers/net/can/slcan/slcan-ethtool.c create mode 100644 drivers/net/can/slcan/slcan.h diff --git a/drivers/net/can/slcan/Makefile b/drivers/net/can/slcan/Makefile index 2e84f7bf7617..8a88e484ee21 100644 --- a/drivers/net/can/slcan/Makefile +++ b/drivers/net/can/slcan/Makefile @@ -4,3 +4,4 @@ obj-$(CONFIG_CAN_SLCAN) +=3D slcan.o =20 slcan-objs :=3D slcan-objs +=3D slcan-core.o +slcan-objs +=3D slcan-ethtool.o diff --git a/drivers/net/can/slcan/slcan-core.c b/drivers/net/can/slcan/slc= an-core.c index 82a42cec52d3..3df35ae8f040 100644 --- a/drivers/net/can/slcan/slcan-core.c +++ b/drivers/net/can/slcan/slcan-core.c @@ -57,6 +57,8 @@ #include #include =20 +#include "slcan.h" + MODULE_ALIAS_LDISC(N_SLCAN); MODULE_DESCRIPTION("serial line CAN interface"); MODULE_LICENSE("GPL"); @@ -98,6 +100,8 @@ struct slcan { #define SLF_INUSE 0 /* Channel in use */ #define SLF_ERROR 1 /* Parity, etc. error */ #define SLF_XCMD 2 /* Command transmission */ + unsigned long cmd_flags; /* Command flags */ +#define CF_ERR_RST 0 /* Reset errors on open */ wait_queue_head_t xcmd_wait; /* Wait queue for commands */ /* transmission */ }; @@ -110,6 +114,28 @@ static const u32 slcan_bitrate_const[] =3D { 250000, 500000, 800000, 1000000 }; =20 +bool slcan_err_rst_on_open(struct net_device *ndev) +{ + struct slcan *sl =3D netdev_priv(ndev); + + return !!test_bit(CF_ERR_RST, &sl->cmd_flags); +} + +int slcan_enable_err_rst_on_open(struct net_device *ndev, bool on) +{ + struct slcan *sl =3D netdev_priv(ndev); + + if (netif_running(ndev)) + return -EBUSY; + + if (on) + set_bit(CF_ERR_RST, &sl->cmd_flags); + else + clear_bit(CF_ERR_RST, &sl->cmd_flags); + + return 0; +} + /************************************************************************ * SLCAN ENCAPSULATION FORMAT * ************************************************************************/ @@ -509,6 +535,15 @@ static int slc_open(struct net_device *dev) goto cmd_transmit_failed; } =20 + if (test_bit(CF_ERR_RST, &sl->cmd_flags)) { + err =3D slcan_transmit_cmd(sl, "F\r"); + if (err) { + netdev_err(dev, + "failed to send error command 'F\\r'\n"); + goto cmd_transmit_failed; + } + } + err =3D slcan_transmit_cmd(sl, "O\r"); if (err) { netdev_err(dev, "failed to send open command 'O\\r'\n"); @@ -629,6 +664,7 @@ static struct slcan *slc_alloc(void) snprintf(dev->name, sizeof(dev->name), "slcan%d", i); dev->netdev_ops =3D &slc_netdev_ops; dev->base_addr =3D i; + slcan_set_ethtool_ops(dev); sl =3D netdev_priv(dev); =20 /* Initialize channel control data */ diff --git a/drivers/net/can/slcan/slcan-ethtool.c b/drivers/net/can/slcan/= slcan-ethtool.c new file mode 100644 index 000000000000..bf0afdc4e49d --- /dev/null +++ b/drivers/net/can/slcan/slcan-ethtool.c @@ -0,0 +1,65 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* Copyright (c) 2022 Amarula Solutions, Dario Binacchi + * + */ + +#include +#include +#include +#include +#include + +#include "slcan.h" + +static const char slcan_priv_flags_strings[][ETH_GSTRING_LEN] =3D { +#define SLCAN_PRIV_FLAGS_ERR_RST_ON_OPEN BIT(0) + "err-rst-on-open", +}; + +static void slcan_get_strings(struct net_device *ndev, u32 stringset, u8 *= data) +{ + switch (stringset) { + case ETH_SS_PRIV_FLAGS: + memcpy(data, slcan_priv_flags_strings, + sizeof(slcan_priv_flags_strings)); + } +} + +static u32 slcan_get_priv_flags(struct net_device *ndev) +{ + u32 flags =3D 0; + + if (slcan_err_rst_on_open(ndev)) + flags |=3D SLCAN_PRIV_FLAGS_ERR_RST_ON_OPEN; + + return flags; +} + +static int slcan_set_priv_flags(struct net_device *ndev, u32 flags) +{ + bool err_rst_op_open =3D !!(flags & SLCAN_PRIV_FLAGS_ERR_RST_ON_OPEN); + + return slcan_enable_err_rst_on_open(ndev, err_rst_op_open); +} + +static int slcan_get_sset_count(struct net_device *netdev, int sset) +{ + switch (sset) { + case ETH_SS_PRIV_FLAGS: + return ARRAY_SIZE(slcan_priv_flags_strings); + default: + return -EOPNOTSUPP; + } +} + +static const struct ethtool_ops slcan_ethtool_ops =3D { + .get_strings =3D slcan_get_strings, + .get_priv_flags =3D slcan_get_priv_flags, + .set_priv_flags =3D slcan_set_priv_flags, + .get_sset_count =3D slcan_get_sset_count, +}; + +void slcan_set_ethtool_ops(struct net_device *netdev) +{ + netdev->ethtool_ops =3D &slcan_ethtool_ops; +} diff --git a/drivers/net/can/slcan/slcan.h b/drivers/net/can/slcan/slcan.h new file mode 100644 index 000000000000..d463c8d99e22 --- /dev/null +++ b/drivers/net/can/slcan/slcan.h @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: GPL-2.0 + * slcan.h - serial line CAN interface driver + * + * Copyright (C) Laurence Culhane + * Copyright (C) Fred N. van Kempen + * Copyright (C) Oliver Hartkopp + * Copyright (C) 2022 Amarula Solutions, Dario Binacchi + * + */ + +#ifndef _SLCAN_H +#define _SLCAN_H + +bool slcan_err_rst_on_open(struct net_device *ndev); +int slcan_enable_err_rst_on_open(struct net_device *ndev, bool on); +void slcan_set_ethtool_ops(struct net_device *ndev); + +#endif /* _SLCAN_H */ --=20 2.32.0 From nobody Mon Apr 27 16:16:29 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6B603C433EF for ; Sun, 12 Jun 2022 21:41:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236896AbiFLVlm (ORCPT ); Sun, 12 Jun 2022 17:41:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58716 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237223AbiFLVlF (ORCPT ); Sun, 12 Jun 2022 17:41:05 -0400 Received: from mail-ej1-x636.google.com (mail-ej1-x636.google.com [IPv6:2a00:1450:4864:20::636]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E87502AE0E for ; Sun, 12 Jun 2022 14:40:28 -0700 (PDT) Received: by mail-ej1-x636.google.com with SMTP id kq6so7662572ejb.11 for ; Sun, 12 Jun 2022 14:40:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=P8N6mZ+VdIxDHB3ERFZNuvKgcE/qcXFBtcxLWjsi6yU=; b=qYQO15I8ouBWG3nzQVKzDy0l5yfrVKs2RfJvILCb7ee/vE9KuIwTO/uxK2j5jv0no9 E66rq0iKFVjF1W3vdr9JDgUdIIPrajXRxgvtUz0AOk3gJOCodQfUhtdaCBs70zf1+4i2 0f8o7DJFbrFzIxC6izhz/jXCYZ3QCeKkATWJE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=P8N6mZ+VdIxDHB3ERFZNuvKgcE/qcXFBtcxLWjsi6yU=; b=3Cmgvu9TEzfAPQt+vkfzDQlP2JWp0FdIXKAPXz+XUUlesHleheqZnVF6y+ezTSC916 rGHRxY5NOobRhKjqAcUv1J5ivtf9e8Ocau67EXJdJuBKcw50l0jMdZxprv3waj++vzXL ZcGg/UeHBQm38nvaJkeM0sOyVdf6tR6jt+aYqh5L9dTXh96NG+jJWg/WV8ZQWI7LlvHD hHN/APfGFFdkaqaurGsCiX397kJ7ggxRreX3fC2v3d3xRCgdEr42nWnksRLjZy3hz32Z hb8frYTAoTD9wdO9DiDNBHt7l7cnqEkTJXGFH3Lb2I8M3Ogct4ZzC4FfKRSAfXtCnBno 1Cmg== X-Gm-Message-State: AOAM532eL74IeAQ/4dwKES8ttU9FW23z4GVlHPJ2Kfxi4vn8zTZ1btAb X5hDBLNdfSR64j1bAVyfOYkWDVmoXwnvpg== X-Google-Smtp-Source: ABdhPJyUeiYzT1GYIfPFtuWvZIsAAUx4pBf+/bipXCF0qgcMdvrgIdqg9PmRTntQVDLBlBuOwtPYxA== X-Received: by 2002:a17:906:6947:b0:711:a86b:6780 with SMTP id c7-20020a170906694700b00711a86b6780mr37988734ejs.686.1655070028311; Sun, 12 Jun 2022 14:40:28 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.homenet.telecomitalia.it (host-80-116-90-174.pool80116.interbusiness.it. [80.116.90.174]) by smtp.gmail.com with ESMTPSA id u10-20020a1709061daa00b00711d546f8a8sm2909398ejh.139.2022.06.12.14.40.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jun 2022 14:40:27 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, Amarula patchwork , Oliver Hartkopp , Dario Binacchi , "David S. Miller" , Eric Dumazet , Greg Kroah-Hartman , Jakub Kicinski , Jiri Slaby , Marc Kleine-Budde , Paolo Abeni , Sebastian Andrzej Siewior , Vincent Mailhol , Wolfgang Grandegger , linux-can@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v3 12/13] can: slcan: extend the protocol with error info Date: Sun, 12 Jun 2022 23:39:26 +0200 Message-Id: <20220612213927.3004444-13-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> References: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" It extends the protocol to receive the adapter CAN communication errors and forward them to the netdev upper levels. Signed-off-by: Dario Binacchi --- (no changes since v2) Changes in v2: - Protect decoding against the case the len value is longer than the received data. - Continue error handling even if no skb can be allocated. drivers/net/can/slcan/slcan-core.c | 130 ++++++++++++++++++++++++++++- 1 file changed, 129 insertions(+), 1 deletion(-) diff --git a/drivers/net/can/slcan/slcan-core.c b/drivers/net/can/slcan/slc= an-core.c index 3df35ae8f040..48077edb9497 100644 --- a/drivers/net/can/slcan/slcan-core.c +++ b/drivers/net/can/slcan/slcan-core.c @@ -175,8 +175,118 @@ int slcan_enable_err_rst_on_open(struct net_device *n= dev, bool on) * STANDARD SLCAN DECAPSULATION * ************************************************************************/ =20 +static void slc_bump_err(struct slcan *sl) +{ + struct net_device *dev =3D sl->dev; + struct sk_buff *skb; + struct can_frame *cf; + char *cmd =3D sl->rbuff; + bool rx_errors =3D false, tx_errors =3D false; + int i, len; + + if (*cmd !=3D 'e') + return; + + cmd +=3D SLC_CMD_LEN; + /* get len from sanitized ASCII value */ + len =3D *cmd++; + if (len >=3D '0' && len < '9') + len -=3D '0'; + else + return; + + skb =3D alloc_can_err_skb(dev, &cf); + + if (skb) + cf->can_id |=3D CAN_ERR_PROT | CAN_ERR_BUSERROR; + + for (i =3D 0; i < len; i++, cmd++) { + switch (*cmd) { + case 'a': + netdev_dbg(dev, "ACK error\n"); + tx_errors =3D true; + if (skb) { + cf->can_id |=3D CAN_ERR_ACK; + cf->data[3] =3D CAN_ERR_PROT_LOC_ACK; + } + + break; + case 'b': + netdev_dbg(dev, "Bit0 error\n"); + tx_errors =3D true; + if (skb) + cf->data[2] |=3D CAN_ERR_PROT_BIT0; + + break; + case 'B': + netdev_dbg(dev, "Bit1 error\n"); + tx_errors =3D true; + if (skb) + cf->data[2] |=3D CAN_ERR_PROT_BIT1; + + break; + case 'c': + netdev_dbg(dev, "CRC error\n"); + rx_errors =3D true; + if (skb) { + cf->data[2] |=3D CAN_ERR_PROT_BIT; + cf->data[3] =3D CAN_ERR_PROT_LOC_CRC_SEQ; + } + + break; + case 'f': + netdev_dbg(dev, "Form Error\n"); + rx_errors =3D true; + if (skb) + cf->data[2] |=3D CAN_ERR_PROT_FORM; + + break; + case 'o': + netdev_dbg(dev, "Rx overrun error\n"); + dev->stats.rx_over_errors++; + dev->stats.rx_errors++; + if (skb) { + cf->can_id |=3D CAN_ERR_CRTL; + cf->data[1] =3D CAN_ERR_CRTL_RX_OVERFLOW; + } + + break; + case 'O': + netdev_dbg(dev, "Tx overrun error\n"); + dev->stats.tx_errors++; + if (skb) { + cf->can_id |=3D CAN_ERR_CRTL; + cf->data[1] =3D CAN_ERR_CRTL_TX_OVERFLOW; + } + + break; + case 's': + netdev_dbg(dev, "Stuff error\n"); + rx_errors =3D true; + if (skb) + cf->data[2] |=3D CAN_ERR_PROT_STUFF; + + break; + default: + if (skb) + dev_kfree_skb(skb); + + return; + } + } + + if (rx_errors) + dev->stats.rx_errors++; + + if (tx_errors) + dev->stats.tx_errors++; + + if (skb) + netif_rx(skb); +} + /* Send one completely decapsulated can_frame to the network layer */ -static void slc_bump(struct slcan *sl) +static void slc_bump_frame(struct slcan *sl) { struct sk_buff *skb; struct can_frame *cf; @@ -255,6 +365,24 @@ static void slc_bump(struct slcan *sl) dev_kfree_skb(skb); } =20 +static void slc_bump(struct slcan *sl) +{ + switch (sl->rbuff[0]) { + case 'r': + fallthrough; + case 't': + fallthrough; + case 'R': + fallthrough; + case 'T': + return slc_bump_frame(sl); + case 'e': + return slc_bump_err(sl); + default: + return; + } +} + /* parse tty input stream */ static void slcan_unesc(struct slcan *sl, unsigned char s) { --=20 2.32.0 From nobody Mon Apr 27 16:16:29 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 43516C43334 for ; Sun, 12 Jun 2022 21:41:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237268AbiFLVlx (ORCPT ); Sun, 12 Jun 2022 17:41:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54266 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237785AbiFLVlY (ORCPT ); Sun, 12 Jun 2022 17:41:24 -0400 Received: from mail-ej1-x62a.google.com (mail-ej1-x62a.google.com [IPv6:2a00:1450:4864:20::62a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7D5CB590AB for ; Sun, 12 Jun 2022 14:40:39 -0700 (PDT) Received: by mail-ej1-x62a.google.com with SMTP id u12so7674037eja.8 for ; Sun, 12 Jun 2022 14:40:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=6efkiC5TQ5d8cecscsrXOmD2HlmxuShBu5gYbYTpObM=; b=gkAi7IMOOIGcRbSgxyuwNuF+yLKH5vQfyxa+wwgE54dvDLD/gkJ65zcvVF3CVDIA99 Nf2msatumXRQ/PinSPOFZacm2A+UMAVMBdKGzFQGE9p68kb8QqPpPoF4ajerF5xIuFYI LUIIi8dzgnhI9dI4kK3MT8SxDdKo1hcgk8qzU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=6efkiC5TQ5d8cecscsrXOmD2HlmxuShBu5gYbYTpObM=; b=5Zq60j/uoBvxxPt0Js+0mPbIjfj0P4Fz3eNf1MEVDZBlbaUIeIuBWjMA5mXxDbiqZv FXy8jGcX/TiLiWvzj/ZksRDd5YTvZoraAPA/85lT6htaIJwxI7bamBSg+8v4Uvt3xdDp FwbBoo3svRxx7b/b+Tw4CLV9Y/kAdVONIrOP3kLnHxVHWYeJETbPD5d+qJkpSQ9lfCEA /QIIG3NwfqHKs9BkLXVma8eBwoo4ZPRV2g/46CqsBh/VYHrqzWQovHcRuDKUWrRE+ko+ 5mPYW8RWlZFlI64wreaL4o8AuJ5DRQiEpGKoPzE9fQOlm0PPf3p/8eM22i24qNL49fCY +fHA== X-Gm-Message-State: AOAM532pgdJDFb8H6vn+dcFLkuETcMKoDSZYgsBiKw0jVyhfhz/yTOqh kbfISBZVYUeo61eWEiGKT6TqXg4bINCjyA== X-Google-Smtp-Source: ABdhPJz+w92q3G2uw+ykCJPkHvxDtHSA6uDD3Z79m2a5NYbWqLtv19nrHeaI40rCsGt5F8VVzKAqJg== X-Received: by 2002:a17:907:9605:b0:6f5:c66:7c13 with SMTP id gb5-20020a170907960500b006f50c667c13mr49390538ejc.66.1655070032889; Sun, 12 Jun 2022 14:40:32 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.homenet.telecomitalia.it (host-80-116-90-174.pool80116.interbusiness.it. [80.116.90.174]) by smtp.gmail.com with ESMTPSA id u10-20020a1709061daa00b00711d546f8a8sm2909398ejh.139.2022.06.12.14.40.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jun 2022 14:40:32 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, Amarula patchwork , Oliver Hartkopp , Dario Binacchi , "David S. Miller" , Eric Dumazet , Greg Kroah-Hartman , Jakub Kicinski , Jiri Slaby , Marc Kleine-Budde , Paolo Abeni , Sebastian Andrzej Siewior , Vincent Mailhol , Wolfgang Grandegger , linux-can@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v3 13/13] can: slcan: extend the protocol with CAN state info Date: Sun, 12 Jun 2022 23:39:27 +0200 Message-Id: <20220612213927.3004444-14-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> References: <20220612213927.3004444-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" It extends the protocol to receive the adapter CAN state changes (warning, busoff, etc.) and forward them to the netdev upper levels. Signed-off-by: Dario Binacchi --- Changes in v3: - Drop the patch "can: slcan: simplify the device de-allocation". - Add the patch "can: netlink: dump bitrate 0 if can_priv::bittiming.bitrat= e is -1U". Changes in v2: - Continue error handling even if no skb can be allocated. drivers/net/can/slcan/slcan-core.c | 66 ++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/drivers/net/can/slcan/slcan-core.c b/drivers/net/can/slcan/slc= an-core.c index 48077edb9497..5ba1c141f942 100644 --- a/drivers/net/can/slcan/slcan-core.c +++ b/drivers/net/can/slcan/slcan-core.c @@ -78,6 +78,9 @@ MODULE_PARM_DESC(maxdev, "Maximum number of slcan interfa= ces"); #define SLC_CMD_LEN 1 #define SLC_SFF_ID_LEN 3 #define SLC_EFF_ID_LEN 8 +#define SLC_STATE_LEN 1 +#define SLC_STATE_BE_RXCNT_LEN 3 +#define SLC_STATE_BE_TXCNT_LEN 3 =20 struct slcan { struct can_priv can; @@ -175,6 +178,67 @@ int slcan_enable_err_rst_on_open(struct net_device *nd= ev, bool on) * STANDARD SLCAN DECAPSULATION * ************************************************************************/ =20 +static void slc_bump_state(struct slcan *sl) +{ + struct net_device *dev =3D sl->dev; + struct sk_buff *skb; + struct can_frame *cf; + char *cmd =3D sl->rbuff; + u32 rxerr, txerr; + enum can_state state, rx_state, tx_state; + + if (*cmd !=3D 's') + return; + + cmd +=3D SLC_CMD_LEN; + switch (*cmd) { + case 'a': + state =3D CAN_STATE_ERROR_ACTIVE; + break; + case 'w': + state =3D CAN_STATE_ERROR_WARNING; + break; + case 'p': + state =3D CAN_STATE_ERROR_PASSIVE; + break; + case 'f': + state =3D CAN_STATE_BUS_OFF; + break; + default: + return; + } + + if (state =3D=3D sl->can.state) + return; + + cmd +=3D SLC_STATE_BE_RXCNT_LEN + 1; + cmd[SLC_STATE_BE_TXCNT_LEN] =3D 0; + if (kstrtou32(cmd, 10, &txerr)) + return; + + *cmd =3D 0; + cmd -=3D SLC_STATE_BE_RXCNT_LEN; + if (kstrtou32(cmd, 10, &rxerr)) + return; + + skb =3D alloc_can_err_skb(dev, &cf); + + if (skb) { + cf->data[6] =3D txerr; + cf->data[7] =3D rxerr; + } + + tx_state =3D txerr >=3D rxerr ? state : 0; + rx_state =3D txerr <=3D rxerr ? state : 0; + can_change_state(dev, skb ? cf : NULL, tx_state, rx_state); + + if (state =3D=3D CAN_STATE_BUS_OFF) + can_bus_off(dev); + + if (skb) + netif_rx(skb); +} + static void slc_bump_err(struct slcan *sl) { struct net_device *dev =3D sl->dev; @@ -378,6 +442,8 @@ static void slc_bump(struct slcan *sl) return slc_bump_frame(sl); case 'e': return slc_bump_err(sl); + case 's': + return slc_bump_state(sl); default: return; } --=20 2.32.0