From: Bernd Krumboeck <krumboeck@universalnet.at>
To: Marc Kleine-Budde <mkl@pengutronix.de>
Cc: linux-can@vger.kernel.org, linux-usb@vger.kernel.org,
info@gerhard-bertelsmann.de, gediminas@8devices.com
Subject: Re: [PATCH v3] usb_8dev: Add support for USB2CAN interface from 8 devices
Date: Wed, 05 Dec 2012 18:36:02 +0100 [thread overview]
Message-ID: <50BF8602.1070909@universalnet.at> (raw)
In-Reply-To: <50BE6F0E.80308@pengutronix.de>
Hi Marc!
>> + default:
>> + netdev_info(netdev, "Rx URB aborted (%d)\n",
>> + urb->status);
>> + goto resubmit_urb;
>> + }
>> +
>> + while (pos < urb->actual_length) {
>> + struct usb_8dev_rx_msg *msg;
>> +
>> + if (pos + sizeof(struct usb_8dev_rx_msg) > urb->actual_length) {
>> + netdev_err(dev->netdev, "format error\n");
>> + break;
>
> is resubmitting the urb the correct way to handle this problem?
Suggestions? (maybe CAN_ERR_CRTL_UNSPEC ??)
>> +
>> + stats->tx_dropped++;
>> + }
>> + } else {
>> + /* Slow down tx path */
>> + if (atomic_read(&dev->active_tx_urbs) >= MAX_TX_URBS ||
>> + dev->free_slots < 5) {
>
> where's the 5 coming from?
>
From ems_usb driver.
>> + netif_stop_queue(netdev);
>> + }
>> + }
>> +
>> + /*
>> + * Release our reference to this URB, the USB core will eventually
>> free
>> + * it entirely.
>> + */
>> + usb_free_urb(urb);
>> +
>> + return NETDEV_TX_OK;
>> +
>> +nomem:
>> + dev_kfree_skb(skb);
>> + stats->tx_dropped++;
>> +
>> + return NETDEV_TX_OK;
>> +}
>> +
>> +static int usb_8dev_get_berr_counter(const struct net_device *netdev,
>> + struct can_berr_counter *bec)
>> +{
>> + struct usb_8dev *dev = netdev_priv(netdev);
>> +
>> + bec->txerr = dev->bec.txerr;
>> + bec->rxerr = dev->bec.rxerr;
>> +
>> + return 0;
>> +}
>> +
>> +/* Start USB device */
>> +static int usb_8dev_start(struct usb_8dev *dev)
>> +{
>> + struct net_device *netdev = dev->netdev;
>> + int err, i;
>> +
>> + dev->free_slots = 15; /* initial size */
>
> there does the 15 come from?
ditto
>> + * Check device and firmware.
>> + * Set supported modes and bittiming constants.
>> + * Allocate some memory.
>> + */
>> +static int usb_8dev_probe(struct usb_interface *intf,
>> + const struct usb_device_id *id)
>> +{
>> + struct net_device *netdev;
>> + struct usb_8dev *dev;
>> + int i, err = -ENOMEM;
>> + u32 version;
>> + char buf[18];
>
> where does this 18 come from?
String "USB2CAN converter" + trailing 0.
>
>> + struct usb_device *usbdev = interface_to_usbdev(intf);
>> +
>> + /* product id looks strange, better we also check iProdukt string */
>
> iProduct?
Check if usbdev->descriptor.iProduct == "USB2CAN converter".
>> + if (usb_string(usbdev, usbdev->descriptor.iProduct, buf,
>> + sizeof(buf)) > 0 && strcmp(buf, "USB2CAN converter")) {
>> + dev_info(&usbdev->dev, "ignoring: not an USB2CAN converter\n");
>> + return -ENODEV;
>> + }
>> +
>> + netdev = alloc_candev(sizeof(struct usb_8dev), MAX_TX_URBS);
>> + if (!netdev) {
>> + dev_err(&intf->dev, "Couldn't alloc candev\n");
>> + return -ENOMEM;
>> + }
>> +
>> + dev = netdev_priv(netdev);
>> +
>> + dev->udev = usbdev;
>> + dev->netdev = netdev;
>> +
>> + dev->can.state = CAN_STATE_STOPPED;
>> + dev->can.clock.freq = USB_8DEV_ABP_CLOCK;
>> + dev->can.bittiming_const = &usb_8dev_bittiming_const;
>> + dev->can.do_set_mode = usb_8dev_set_mode;
>> + dev->can.do_get_berr_counter = usb_8dev_get_berr_counter;
>> + dev->can.ctrlmode_supported = CAN_CTRLMODE_LOOPBACK |
>> + CAN_CTRLMODE_LISTENONLY |
>> + CAN_CTRLMODE_ONE_SHOT;
>
> Have you actually tested one shot? What happens if a can frame cannot be
> transmitted?
>
Not really. Can someone explain what one-shot exactly means and what is the correct behavior.
I've only tested without any other device connected. I got the same errors like in normal mode.
regards,
Bernd
next prev parent reply other threads:[~2012-12-05 17:37 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-12-04 20:44 [PATCH v3] usb_8dev: Add support for USB2CAN interface from 8 devices krumboeck
2012-12-04 20:44 ` Wolfgang Grandegger
[not found] ` <50BE60AD.10307-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org>
2012-12-04 22:20 ` Bernd Krumboeck
2012-12-05 7:24 ` Wolfgang Grandegger
2012-12-04 21:45 ` Marc Kleine-Budde
2012-12-05 17:36 ` Bernd Krumboeck [this message]
[not found] ` <50BF8602.1070909-Hi41barv6paIERSsAYjmKA@public.gmane.org>
2012-12-05 21:40 ` Marc Kleine-Budde
[not found] ` <50BFBF60.2090106-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2012-12-06 4:28 ` Bernd Krumboeck
2012-12-06 4:47 ` Bernd Krumboeck
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=50BF8602.1070909@universalnet.at \
--to=krumboeck@universalnet.at \
--cc=gediminas@8devices.com \
--cc=info@gerhard-bertelsmann.de \
--cc=linux-can@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mkl@pengutronix.de \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.