From: Wolfgang Grandegger <wg@grandegger.com>
To: Stephane Grosjean <s.grosjean@peak-system.com>
Cc: Oliver Hartkopp <socketcan@hartkopp.net>,
linux-can Mailing List <linux-can@vger.kernel.org>
Subject: Re: [PATCH 2/3 v2] can/usb: PEAK-System Technik PCAN-USB specific part
Date: Wed, 18 Jan 2012 14:30:30 +0100 [thread overview]
Message-ID: <4F16C976.5000405@grandegger.com> (raw)
In-Reply-To: <1326468404-19330-3-git-send-email-s.grosjean@peak-system.com>
On 01/13/2012 04:26 PM, Stephane Grosjean wrote:
> This patch adds the specific part which handles the PCAN-USB adapter from
> PEAK-System Technik (http://www.peak-system.com). The PCAN-USB adapter is
> a sja1000 based, mono-channel USB 1.1 adapter compliant with CAN
> specifications 2.0A (11-bit ID) and 2.0B (29-bit ID).
>
> Signed-off-by: Stephane Grosjean <s.grosjean@peak-system.com>
> Tested-by: Stephane Grosjean <s.grosjean@peak-system.com>
It's unusual to add "Tested-by" if there is already your
"Signed-off-by". We assume that you have tested the patches.
> ---
> drivers/net/can/usb/peak_usb/pcan_usb.c | 751 +++++++++++++++++++++++++++++++
> 1 files changed, 751 insertions(+), 0 deletions(-)
> create mode 100644 drivers/net/can/usb/peak_usb/pcan_usb.c
>
> diff --git a/drivers/net/can/usb/peak_usb/pcan_usb.c b/drivers/net/can/usb/peak_usb/pcan_usb.c
> new file mode 100644
> index 0000000..100fc2e
> --- /dev/null
> +++ b/drivers/net/can/usb/peak_usb/pcan_usb.c
...
> +/*
> + * decode non-data usb message
> + */
> +static int pcan_usb_decode_status(struct pcan_usb_msg_context *mc,
> + u8 status_len)
> +{
> + u8 rec_len = status_len & PCAN_USB_STATUSLEN_DLC;
> + struct sk_buff *skb;
> + struct can_frame *cf;
> + struct timeval tv;
> + u8 f, n;
> +
> + /* check whether function and number can be read */
> + if ((mc->ptr + 2) > mc->end)
> + return -EINVAL;
> +
> + f = mc->ptr[0];
> + n = mc->ptr[1];
> + mc->ptr += 2;
> +
> + if (status_len & PCAN_USB_STATUSLEN_TIMESTAMP) {
> + int err = pcan_usb_decode_ts(mc, !mc->rec_idx);
> +
> + if (err)
> + return err;
> + }
> +
> + switch (f) {
> + case PCAN_USB_REC_ERROR:
> + /* no status flag => ignore record */
> + if (!n)
> + break;
> +
> + /* ignore this error until 1st ts received */
> + if (n == PCAN_USB_ERROR_QOVR)
> + if (!mc->pdev->time_ref.tick_count)
> + break;
> +
> + /* allocate an skb to store the error frame */
> + skb = alloc_can_err_skb(mc->netdev, &cf);
> + if (!skb)
> + return -ENOMEM;
> +
> + if (n & (PCAN_USB_ERROR_RXQOVR | PCAN_USB_ERROR_QOVR)) {
> + cf->can_id |= CAN_ERR_CRTL;
> + cf->data[1] |= CAN_ERR_CRTL_RX_OVERFLOW;
> + mc->netdev->stats.rx_over_errors++;
> + mc->netdev->stats.rx_errors++;
> + }
> + if (n & PCAN_USB_ERROR_BUS_OFF) {
> + cf->can_id |= CAN_ERR_BUSOFF;
> + can_bus_off(mc->netdev);
> + }
> + if (n & PCAN_USB_ERROR_BUS_HEAVY) {
> + cf->can_id |= CAN_ERR_CRTL;
> + cf->data[1] |= CAN_ERR_CRTL_TX_PASSIVE |
> + CAN_ERR_CRTL_RX_PASSIVE;
> + mc->pdev->dev.can.can_stats.error_passive++;
> + }
> + if (n & PCAN_USB_ERROR_BUS_LIGHT) {
> + cf->can_id |= CAN_ERR_CRTL;
> + cf->data[1] |= CAN_ERR_CRTL_TX_WARNING |
> + CAN_ERR_CRTL_RX_WARNING;
> + mc->pdev->dev.can.can_stats.error_warning++;
> + }
> +
> + if (cf->can_id != CAN_ERR_FLAG) {
> + if (status_len & PCAN_USB_STATUSLEN_TIMESTAMP) {
> + peak_usb_get_ts_tv(&mc->pdev->time_ref,
> + mc->ts16, &tv);
> + skb->tstamp = timeval_to_ktime(tv);
> + }
> + netif_rx(skb);
> + mc->netdev->stats.rx_packets++;
> + mc->netdev->stats.rx_bytes += cf->can_dlc;
> + } else {
> + dev_kfree_skb(skb);
Cannot happen because (cf->can_id != CAN_ERR_FLAG) is alway true.
Wolfgang.
next prev parent reply other threads:[~2012-01-18 13:30 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-13 15:26 [PATCH 0/3 v2] can/usb: Add PEAK-System PCAN USB adapters driver Stephane Grosjean
2012-01-13 15:26 ` [PATCH 1/3 v2] can/usb: PEAK-System Technik USB adapters driver core Stephane Grosjean
2012-01-18 13:27 ` Wolfgang Grandegger
2012-01-13 15:26 ` [PATCH 2/3 v2] can/usb: PEAK-System Technik PCAN-USB specific part Stephane Grosjean
2012-01-18 13:30 ` Wolfgang Grandegger [this message]
2012-01-13 15:26 ` [PATCH 3/3 v2] can/usb: PEAK-System Technik PCAN-USB Pro " Stephane Grosjean
2012-01-18 13:41 ` Wolfgang Grandegger
2012-01-18 13:17 ` [PATCH 0/3 v2] can/usb: Add PEAK-System PCAN USB adapters driver Wolfgang Grandegger
2012-01-18 15:42 ` Stephane Grosjean
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=4F16C976.5000405@grandegger.com \
--to=wg@grandegger.com \
--cc=linux-can@vger.kernel.org \
--cc=s.grosjean@peak-system.com \
--cc=socketcan@hartkopp.net \
/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).