/* Receive a packet from B-Channel. (Called from low-level-module)  */
static void isdn_receive_skb_callback(int di, int channel, struct sk_buff *skb)
/* Receive a packet from B-Channel. (Called from low-level-module)  */
static void isdn_receive_skb_callback(int di, int channel, struct sk_buff *skb)
{
	int i;
	if ((i = isdn_dc2minor(di, channel)) == -1) {
		dev_kfree_skb(skb);
		return;
	}
	dev->ibytes[i] += skb->len;
	if (isdn_net_rcv_skb(i, skb))
		return;
	if (dev->v110[i]) {
		atomic_inc(&dev->v110use[i]);
		skb = isdn_v110_decode(dev->v110[i], skb);
		atomic_dec(&dev->v110use[i]);
		if (!skb)
			return;
	}
	if (skb->len) {
		if (isdn_tty_rcv_skb(i, di, channel, skb))
			return;
		wake_up_interruptible(&dev->drv[di]->rcv_waitq[channel]);
	} else
		dev_kfree_skb(skb);
}