X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=module%2Felmcan.c;h=198ef512021a51b77b5943e6343a5bc9e3b8204a;hb=d4ca631269f4042835bb9cab60ea5c0b433a449d;hp=01ff896051b06d0032ff93e0a371d571fa73f2e5;hpb=106a464ba0d7f1bf9e60d36d6d5b53b6bd1fd9f6;p=elmcan.git diff --git a/module/elmcan.c b/module/elmcan.c index 01ff896..198ef51 100644 --- a/module/elmcan.c +++ b/module/elmcan.c @@ -319,20 +319,21 @@ static inline void elm327_hw_failure(struct elmcan *elm) struct can_frame *frame; struct sk_buff *skb; + elm->hw_failure = true; + + elm->can.can_stats.bus_off++; + netif_stop_queue(elm->dev); + elm->can.state = CAN_STATE_BUS_OFF; + can_bus_off(elm->dev); + + netdev_err(elm->dev, "ELM327 misbehaved. Blocking further communication.\n"); + skb = alloc_can_err_skb(elm->dev, &frame); if (!skb) return; - frame->data[5] = 'R'; - frame->data[6] = 'I'; - frame->data[7] = 'P'; - + frame->can_id |= CAN_ERR_BUSOFF; elm327_feed_frame_to_netdev(elm, skb); - - netdev_err(elm->dev, "ELM327 misbehaved. Blocking further communication.\n"); - - elm->hw_failure = true; - can_bus_off(elm->dev); } /* Compare a buffer to a fixed string */