From: Oliver Hartkopp <socketcan@hartkopp.net>
To: Fabio Baltieri <fabio.baltieri@gmail.com>
Cc: linux-can@vger.kernel.org
Subject: Re: [RFC PATCH] can: add tx/rx led trigger support
Date: Wed, 11 Apr 2012 20:29:33 +0200 [thread overview]
Message-ID: <4F85CD8D.9070107@hartkopp.net> (raw)
In-Reply-To: <CABkP77eNeTTwSxtKyfUmr7OC4H1nXEN4EeFH7pdR6=BcpKuE6w@mail.gmail.com>
On 11.04.2012 19:58, Fabio Baltieri wrote:
> On Wed, Apr 11, 2012 at 8:14 AM, Oliver Hartkopp <socketcan@hartkopp.net> wrote:
>> I wonder if it makes more sense to add the LED trigger stuff into
>> drivers/net/can/dev.c ?!?
>
> Of course that seems to be the obvious (=correct) place to trap this
> stuff. The reason why I worked on upper layer is that I did not found
> any generic place to trap tx/rx events in the dev file without
> modifying every device driver, as while tx can be trapped in
> can_get_echo_skb(), rx frames are handled directly to the network
> layer.
I think that depends heavily on the driver and therefore adding the
can_led_tx() and can_led_rx() calls to the appropriate places is the most
transparent implementation.
IMO i would not(!) hide can_led_tx() in can_get_echo_skb() but place it next to
it in the interrupt function.
>
>> Of course the correct calling points to trigger the rx/tx-LEDs need to be
>> implemented inside *each* driver at the correct position.
>
> That's the point. So, do you think it would be better to add trigger
> functions into dev.c and modify each driver to call them?
Yes - as described above - something like this:
$ diff -U6 drivers/net/can/sja1000/sja1000.c drivers/net/can/sja1000/sja1000.c-new
--- drivers/net/can/sja1000/sja1000.c 2012-02-27 19:37:56.440594122 +0100
+++ drivers/net/can/sja1000/sja1000.c-new 2012-04-11 20:26:11.089344979 +0200
@@ -505,24 +505,26 @@
netdev_warn(dev, "wakeup interrupt\n");
if (isrc & IRQ_TI) {
/* transmission complete interrupt */
stats->tx_bytes += priv->read_reg(priv, REG_FI) & 0xf;
stats->tx_packets++;
+ can_led_tx(dev);
can_get_echo_skb(dev, 0);
netif_wake_queue(dev);
}
if (isrc & IRQ_RI) {
/* receive interrupt */
while (status & SR_RBS) {
sja1000_rx(dev);
status = priv->read_reg(priv, REG_SR);
/* check for absent controller */
if (status == 0xFF && sja1000_is_absent(priv))
return IRQ_NONE;
}
+ can_led_rx(dev);
}
if (isrc & (IRQ_DOI | IRQ_EI | IRQ_BEI | IRQ_EPI | IRQ_ALI)) {
/* error interrupt */
if (sja1000_err(dev, isrc, status))
break;
}
>> The question would be, if this code
>>
>>> + if (!timer_pending(&priv->tx_off_timer)) {
>>> + led_trigger_event(priv->tx_led, LED_FULL);
>>> +
>>> + mod_timer(&priv->tx_off_timer,
>>> + jiffies + msecs_to_jiffies(led_off_delay));
>>> + }
>>
>>
>> is ready to be used in hard IRQ context?
>>
>> If not we may use a construct with a tasklet that can be triggered from hard
>> IRQ context, like here:
>>
>> http://lxr.linux.no/#linux+v3.3.1/net/can/bcm.c#L356
>
> I think that led_trigger_event is ok as long as the actual
> led-<device>'s brigthness_set function is safe - for example
> leds-gpio's one seems to make some check about it. See:
>
> http://lxr.linux.no/#linux+v3.3.1/drivers/leds/leds-gpio.c#L70
>
> Will think about it.
Fine. So i'm looking forward to v2 :-)
Regards,
Oliver
next prev parent reply other threads:[~2012-04-11 18:29 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-10 21:39 [RFC PATCH] can: add tx/rx led trigger support Fabio Baltieri
2012-04-11 6:14 ` Oliver Hartkopp
2012-04-11 17:58 ` Fabio Baltieri
2012-04-11 18:29 ` Oliver Hartkopp [this message]
2012-04-11 18:58 ` Wolfgang Grandegger
2012-04-12 6:16 ` Oliver Hartkopp
2012-04-11 19:02 ` Oliver Hartkopp
2012-04-11 19:36 ` Fabio Baltieri
2012-04-12 6:05 ` Oliver Hartkopp
2012-04-12 6:32 ` Alexander Stein
2012-04-12 15:52 ` Oliver Hartkopp
2012-04-12 18:30 ` Fabio Baltieri
2012-04-13 19:00 ` Oliver Hartkopp
2012-04-12 7:37 ` Wolfgang Grandegger
2012-04-12 11:07 ` Martin Gysel
2012-04-12 16:02 ` Oliver Hartkopp
2012-04-12 16:13 ` Wolfgang Grandegger
2012-04-12 17:28 ` Fabio Baltieri
2012-04-12 18:47 ` Wolfgang Grandegger
2012-04-12 17:46 ` Fabio Baltieri
2012-04-12 18:53 ` Wolfgang Grandegger
2012-04-11 6:29 ` Alexander Stein
2012-04-11 18:03 ` Fabio Baltieri
2012-04-11 14:45 ` Wolfgang Grandegger
2012-04-11 16:24 ` Oliver Hartkopp
2012-04-11 19:11 ` Fabio Baltieri
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=4F85CD8D.9070107@hartkopp.net \
--to=socketcan@hartkopp.net \
--cc=fabio.baltieri@gmail.com \
--cc=linux-can@vger.kernel.org \
/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.