linux-can.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Gerhard Uttenthaler <uttenthaler@ems-wuensche.com>
To: linux-can@vger.kernel.org
Cc: wg@grandegger.com, mkl@pengutronix.de,
	Gerhard Uttenthaler <uttenthaler@ems-wuensche.com>
Subject: [PATCH 10/17] can: ems_usb: Added receive routine for CAN FD messages and its call in ems_usb_read_bulk_callback
Date: Fri,  6 Nov 2020 18:01:59 +0100	[thread overview]
Message-ID: <20201106170206.32162-11-uttenthaler@ems-wuensche.com> (raw)
In-Reply-To: <20201106170206.32162-1-uttenthaler@ems-wuensche.com>

Signed-off-by: Gerhard Uttenthaler <uttenthaler@ems-wuensche.com>
---
 drivers/net/can/usb/ems_usb.c | 45 +++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/drivers/net/can/usb/ems_usb.c b/drivers/net/can/usb/ems_usb.c
index d6b52b265536..a4d9a1b2d2f0 100644
--- a/drivers/net/can/usb/ems_usb.c
+++ b/drivers/net/can/usb/ems_usb.c
@@ -389,6 +389,47 @@ static void ems_usb_rx_can_msg(struct ems_usb *dev, struct ems_cpc_msg *msg)
 	netif_rx(skb);
 }
 
+static void ems_usb_rx_canfd_msg(struct ems_usb *dev, struct ems_cpc_msg *msg)
+{
+	struct cpc_canfd_msg *fd_msg = &msg->msg.canfd_msg;
+
+	/* Although the CPC_FDFLAG_NONCANFD_MSG flag
+	 * should not be set with a received message,
+	 * it seems better to have checked it anyway.
+	 */
+	if (!(fd_msg->flags & CPC_FDFLAG_NONCANFD_MSG)) {
+		/* CAN FD frame */
+		struct canfd_frame *cfd;
+		struct sk_buff *skb;
+		int i;
+		struct net_device_stats *stats = &dev->netdev->stats;
+
+		skb = alloc_canfd_skb(dev->netdev, &cfd);
+		if (!skb)
+			return;
+
+		cfd->can_id = le32_to_cpu(fd_msg->id);
+		cfd->len = fd_msg->length;
+
+		for (i = 0; i < cfd->len; i++)
+			cfd->data[i] = fd_msg->msg[i];
+
+		cfd->flags = 0;
+		if (fd_msg->flags & CPC_FDFLAG_BRS)
+			cfd->flags |= CANFD_BRS;
+
+		if (fd_msg->flags & CPC_FDFLAG_ESI)
+			cfd->flags |= CANFD_ESI;
+
+		if (fd_msg->flags & CPC_FDFLAG_XTD)
+			cfd->can_id |= CAN_EFF_FLAG;
+
+		stats->rx_packets++;
+		stats->rx_bytes += cfd->len;
+		netif_rx(skb);
+	}
+}
+
 static void ems_usb_rx_err(struct ems_usb *dev, struct ems_cpc_msg *msg)
 {
 	struct can_frame *cf;
@@ -513,6 +554,10 @@ static void ems_usb_read_bulk_callback(struct urb *urb)
 			ems_usb_rx_can_msg(dev, msg);
 			break;
 
+		case CPC_MSG_TYPE_CANFD_FRAME:
+			ems_usb_rx_canfd_msg(dev, msg);
+			break;
+
 		case CPC_MSG_TYPE_CAN_FRAME_ERROR:
 			/* Process errorframe */
 			ems_usb_rx_err(dev, msg);
-- 
2.26.2

-- 
EMS Dr. Thomas Wuensche e.K.
Sonnenhang 3
85304 Ilmmuenster
HR Ingolstadt, HRA 170106

Phone: +49-8441-490260
Fax  : +49-8441-81860
http://www.ems-wuensche.com

  parent reply	other threads:[~2020-11-06 17:11 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-06 17:01 [PATCH 00/17] Add support for CPC-USB/FD CAN FD interface Gerhard Uttenthaler
2020-11-06 17:01 ` [PATCH 01/17] can: ems_usb: Fixed warnings given by checkpatch.pl and fixed some outdated comments Gerhard Uttenthaler
2020-11-06 17:04   ` Marc Kleine-Budde
2020-11-06 17:01 ` [PATCH 02/17] can: ems_usb: Added defines and product id needed for CPC-USB/FD Gerhard Uttenthaler
2020-11-06 17:01 ` [PATCH 03/17] can: ems_usb: Added CAN FD message representation Gerhard Uttenthaler
2020-11-06 17:08   ` Marc Kleine-Budde
2020-11-06 17:01 ` [PATCH 04/17] can: ems_usb: Added struct used for CAN FD initialization Gerhard Uttenthaler
2020-11-06 17:07   ` Marc Kleine-Budde
2020-11-06 17:01 ` [PATCH 05/17] can: ems_usb: Replace constant define RX_BUFFER_SIZE by variable bulk_rd_buf_size, because this will have different values for CPC-USB/ARM7 and CPC-USB/FD. For the same reason added a function pointer ems_usb_write_mode. In device probe function added a switch statement to select between CPC-USB/ARM7 and CPC-USB/FD and rearranged initialization sequence accordingly Gerhard Uttenthaler
2020-11-06 17:15   ` Marc Kleine-Budde
2020-11-10 10:31     ` Gerhard Uttenthaler
2020-11-10 10:57       ` Marc Kleine-Budde
2020-11-06 17:01 ` [PATCH 06/17] can: ems_usb: Added listen only mode for CPC-USB/ARM7 and moved evaluation of can.ctrlmode from set_bittiming routine to ems_usb_write_mode_arm7 routine. Wrapped a long line Gerhard Uttenthaler
2020-11-06 17:23   ` Marc Kleine-Budde
2020-11-06 17:01 ` [PATCH 07/17] can: ems_usb: Added CPC_ClearCmdQueue routine to get access to the interface even it is flooded with messages which cannot successfully be sent. Set timestamp to 0 in ems_usb_control_cmd Gerhard Uttenthaler
2020-11-06 17:25   ` Marc Kleine-Budde
2020-11-06 17:01 ` [PATCH 08/17] can: ems_usb: Modified ems_usb_read_bulk_callback to be able to handle also CPC-USB/FD Gerhard Uttenthaler
2020-11-06 17:32   ` Marc Kleine-Budde
2020-11-06 17:01 ` [PATCH 09/17] can: ems_usb: For CPC-USB/FD added clock definitions, bittiming constants, set_bittiming functions, bittiming init function and add all that to probe function Gerhard Uttenthaler
2020-11-06 17:51   ` Marc Kleine-Budde
2020-11-11 10:22     ` Gerhard Uttenthaler
2020-11-11 11:28       ` Marc Kleine-Budde
2020-11-06 17:01 ` Gerhard Uttenthaler [this message]
2020-11-06 17:33   ` [PATCH 10/17] can: ems_usb: Added receive routine for CAN FD messages and its call in ems_usb_read_bulk_callback Marc Kleine-Budde
2020-11-06 17:43   ` Marc Kleine-Budde
2020-11-06 17:02 ` [PATCH 11/17] can: ems_usb: Added ems_usb_write_mode_fd and its call in device probe routine. Fixed indentation Gerhard Uttenthaler
2020-11-06 17:35   ` Marc Kleine-Budde
2020-11-06 17:02 ` [PATCH 12/17] can: ems_usb: In ems_usb_start_xmit send only bytes with valid content to interface and not the complete buffer. Set first four bytes of buffer to 0. Wrapped long lines Gerhard Uttenthaler
2020-11-06 17:58   ` Marc Kleine-Budde
2020-11-12  8:31     ` Gerhard Uttenthaler
2020-11-12  8:35       ` Marc Kleine-Budde
2020-11-06 17:02 ` [PATCH 13/17] can: ems_usb: Rearrange code in ems_usb_start_xmit to check with can_is_canfd_skb for CAN FD frames Gerhard Uttenthaler
2020-11-06 18:01   ` Marc Kleine-Budde
2020-11-06 17:02 ` [PATCH 14/17] can: ems_usb: Added code to handle CAN FD frames in ems_usb_start_xmit Gerhard Uttenthaler
2020-11-06 17:56   ` Marc Kleine-Budde
2020-11-06 17:02 ` [PATCH 15/17] can: ems_usb: In CAN error handling routine checking which CAN controller type is issuing the error Gerhard Uttenthaler
2020-11-06 18:01   ` Marc Kleine-Budde
2020-11-06 17:02 ` [PATCH 16/17] can: ems_usb: Added error handling part for CPC-USB/FD. Get some structures packed Gerhard Uttenthaler
2020-11-06 18:05   ` Marc Kleine-Budde
2020-11-06 17:02 ` [PATCH 17/17] can: ems_usb: Made another struct packed. Enable CPC-USB/FD by adding it to the drivers device table Gerhard Uttenthaler
2020-11-06 18:05   ` Marc Kleine-Budde
2020-11-06 18:07 ` [PATCH 00/17] Add support for CPC-USB/FD CAN FD interface Marc Kleine-Budde
2020-11-06 19:04   ` Gerhard Uttenthaler
2020-11-06 19:59     ` Marc Kleine-Budde
2020-12-08 17:13       ` Gerhard Uttenthaler
2020-11-06 18:15 ` Marc Kleine-Budde

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201106170206.32162-11-uttenthaler@ems-wuensche.com \
    --to=uttenthaler@ems-wuensche.com \
    --cc=linux-can@vger.kernel.org \
    --cc=mkl@pengutronix.de \
    --cc=wg@grandegger.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).