static netdev_tx_t slc_xmit(struct sk_buff *skb, struct net_device *dev) #endif { struct slcan *sl = netdev_priv(dev); if (skb->len != sizeof(struct can_frame)) goto out; spin_lock(&sl->lock); if (!netif_running(dev)) { spin_unlock(&sl->lock); printk(KERN_WARNING "%s: xmit: iface is down\n", dev->name); goto out; } if (sl->tty == NULL) { spin_unlock(&sl->lock); goto out; } netif_stop_queue(sl->dev); slc_encaps(sl, (struct can_frame *) skb->data); /* encaps & send */ spin_unlock(&sl->lock); out: kfree_skb(skb); #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32) return 0; #else return NETDEV_TX_OK; #endif }
/* Send a can_frame to a TTY queue. */ static netdev_tx_t slc_xmit(struct sk_buff *skb, struct net_device *dev) { struct slcan *sl = netdev_priv(dev); if (skb->len != CAN_MTU) goto out; spin_lock(&sl->lock); if (!netif_running(dev)) { spin_unlock(&sl->lock); printk(KERN_WARNING "%s: xmit: iface is down\n", dev->name); goto out; } if (sl->tty == NULL) { spin_unlock(&sl->lock); goto out; } netif_stop_queue(sl->dev); slc_encaps(sl, (struct can_frame *) skb->data); /* encaps & send */ spin_unlock(&sl->lock); out: kfree_skb(skb); return NETDEV_TX_OK; }