Lines Matching refs:sl

112 	struct slcan *sl = netdev_priv(ndev);
114 return !!test_bit(CF_ERR_RST, &sl->cmd_flags);
119 struct slcan *sl = netdev_priv(ndev);
125 set_bit(CF_ERR_RST, &sl->cmd_flags);
127 clear_bit(CF_ERR_RST, &sl->cmd_flags);
171 static void slcan_bump_frame(struct slcan *sl)
177 char *cmd = sl->rbuff;
179 skb = alloc_can_skb(sl->dev, &cf);
181 sl->dev->stats.rx_dropped++;
191 cf->len = sl->rbuff[SLCAN_CMD_LEN + SLCAN_SFF_ID_LEN];
192 sl->rbuff[SLCAN_CMD_LEN + SLCAN_SFF_ID_LEN] = 0;
202 cf->len = sl->rbuff[SLCAN_CMD_LEN + SLCAN_EFF_ID_LEN];
203 sl->rbuff[SLCAN_CMD_LEN + SLCAN_EFF_ID_LEN] = 0;
211 if (kstrtou32(sl->rbuff + SLCAN_CMD_LEN, 16, &tmpid))
238 sl->dev->stats.rx_packets++;
240 sl->dev->stats.rx_bytes += cf->len;
246 sl->dev->stats.rx_errors++;
258 static void slcan_bump_state(struct slcan *sl)
260 struct net_device *dev = sl->dev;
263 char *cmd = sl->rbuff;
284 if (state == sl->can.state || sl->rcount < SLCAN_STATE_FRAME_LEN)
322 static void slcan_bump_err(struct slcan *sl)
324 struct net_device *dev = sl->dev;
327 char *cmd = sl->rbuff;
338 if ((len + SLCAN_CMD_LEN + 1) > sl->rcount)
435 static void slcan_bump(struct slcan *sl)
437 switch (sl->rbuff[0]) {
445 return slcan_bump_frame(sl);
447 return slcan_bump_err(sl);
449 return slcan_bump_state(sl);
456 static void slcan_unesc(struct slcan *sl, unsigned char s)
459 if (!test_and_clear_bit(SLF_ERROR, &sl->flags) &&
460 sl->rcount > 4)
461 slcan_bump(sl);
463 sl->rcount = 0;
465 if (!test_bit(SLF_ERROR, &sl->flags)) {
466 if (sl->rcount < SLCAN_MTU) {
467 sl->rbuff[sl->rcount++] = s;
471 sl->dev->stats.rx_over_errors++;
472 set_bit(SLF_ERROR, &sl->flags);
482 static void slcan_encaps(struct slcan *sl, struct can_frame *cf)
489 pos = sl->xbuff;
523 sl->dev->stats.tx_bytes += cf->len;
536 set_bit(TTY_DO_WRITE_WAKEUP, &sl->tty->flags);
537 actual = sl->tty->ops->write(sl->tty, sl->xbuff, pos - sl->xbuff);
538 sl->xleft = (pos - sl->xbuff) - actual;
539 sl->xhead = sl->xbuff + actual;
545 struct slcan *sl = container_of(work, struct slcan, tx_work);
548 spin_lock_bh(&sl->lock);
550 if (unlikely(!netif_running(sl->dev)) &&
551 likely(!test_bit(SLF_XCMD, &sl->flags))) {
552 spin_unlock_bh(&sl->lock);
556 if (sl->xleft <= 0) {
557 if (unlikely(test_bit(SLF_XCMD, &sl->flags))) {
558 clear_bit(SLF_XCMD, &sl->flags);
559 clear_bit(TTY_DO_WRITE_WAKEUP, &sl->tty->flags);
560 spin_unlock_bh(&sl->lock);
561 wake_up(&sl->xcmd_wait);
568 sl->dev->stats.tx_packets++;
569 clear_bit(TTY_DO_WRITE_WAKEUP, &sl->tty->flags);
570 spin_unlock_bh(&sl->lock);
571 netif_wake_queue(sl->dev);
575 actual = sl->tty->ops->write(sl->tty, sl->xhead, sl->xleft);
576 sl->xleft -= actual;
577 sl->xhead += actual;
578 spin_unlock_bh(&sl->lock);
586 struct slcan *sl = tty->disc_data;
588 schedule_work(&sl->tx_work);
595 struct slcan *sl = netdev_priv(dev);
600 spin_lock(&sl->lock);
602 spin_unlock(&sl->lock);
606 if (!sl->tty) {
607 spin_unlock(&sl->lock);
611 netif_stop_queue(sl->dev);
612 slcan_encaps(sl, (struct can_frame *)skb->data); /* encaps & send */
613 spin_unlock(&sl->lock);
626 static int slcan_transmit_cmd(struct slcan *sl, const unsigned char *cmd)
630 spin_lock(&sl->lock);
631 if (!sl->tty) {
632 spin_unlock(&sl->lock);
636 n = scnprintf(sl->xbuff, sizeof(sl->xbuff), "%s", cmd);
637 set_bit(TTY_DO_WRITE_WAKEUP, &sl->tty->flags);
638 actual = sl->tty->ops->write(sl->tty, sl->xbuff, n);
639 sl->xleft = n - actual;
640 sl->xhead = sl->xbuff + actual;
641 set_bit(SLF_XCMD, &sl->flags);
642 spin_unlock(&sl->lock);
643 ret = wait_event_interruptible_timeout(sl->xcmd_wait,
644 !test_bit(SLF_XCMD, &sl->flags),
646 clear_bit(SLF_XCMD, &sl->flags);
659 struct slcan *sl = netdev_priv(dev);
662 if (sl->can.bittiming.bitrate &&
663 sl->can.bittiming.bitrate != CAN_BITRATE_UNKNOWN) {
664 err = slcan_transmit_cmd(sl, "C\r");
671 clear_bit(TTY_DO_WRITE_WAKEUP, &sl->tty->flags);
672 flush_work(&sl->tx_work);
675 sl->rcount = 0;
676 sl->xleft = 0;
678 sl->can.state = CAN_STATE_STOPPED;
679 if (sl->can.bittiming.bitrate == CAN_BITRATE_UNKNOWN)
680 sl->can.bittiming.bitrate = CAN_BITRATE_UNSET;
688 struct slcan *sl = netdev_priv(dev);
697 if (sl->can.bittiming.bitrate == CAN_BITRATE_UNSET)
698 sl->can.bittiming.bitrate = CAN_BITRATE_UNKNOWN;
706 if (sl->can.bittiming.bitrate != CAN_BITRATE_UNKNOWN) {
708 if (sl->can.bittiming.bitrate == slcan_bitrate_const[s])
716 err = slcan_transmit_cmd(sl, cmd);
724 if (test_bit(CF_ERR_RST, &sl->cmd_flags)) {
725 err = slcan_transmit_cmd(sl, "F\r");
733 if (sl->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) {
734 err = slcan_transmit_cmd(sl, "L\r");
741 err = slcan_transmit_cmd(sl, "O\r");
750 sl->can.state = CAN_STATE_ERROR_ACTIVE;
780 struct slcan *sl = tty->disc_data;
782 if (!netif_running(sl->dev))
788 if (!test_and_set_bit(SLF_ERROR, &sl->flags))
789 sl->dev->stats.rx_errors++;
793 slcan_unesc(sl, *cp++);
806 struct slcan *sl;
815 dev = alloc_candev(sizeof(*sl), 1);
819 sl = netdev_priv(dev);
823 sl->rcount = 0;
824 sl->xleft = 0;
825 spin_lock_init(&sl->lock);
826 INIT_WORK(&sl->tx_work, slcan_transmit);
827 init_waitqueue_head(&sl->xcmd_wait);
830 sl->can.bitrate_const = slcan_bitrate_const;
831 sl->can.bitrate_const_cnt = ARRAY_SIZE(slcan_bitrate_const);
832 sl->can.ctrlmode_supported = CAN_CTRLMODE_LISTENONLY;
835 sl->dev = dev;
840 sl->tty = tty;
841 tty->disc_data = sl;
864 struct slcan *sl = tty->disc_data;
866 unregister_candev(sl->dev);
872 flush_work(&sl->tx_work);
875 spin_lock_bh(&sl->lock);
877 sl->tty = NULL;
878 spin_unlock_bh(&sl->lock);
880 netdev_info(sl->dev, "slcan off %s.\n", tty->name);
881 free_candev(sl->dev);
888 struct slcan *sl = tty->disc_data;
893 tmp = strlen(sl->dev->name) + 1;
894 if (copy_to_user((void __user *)arg, sl->dev->name, tmp))