Exemplo n.º 1
0
static void locomx_rx(struct z8530_channel *c, struct sk_buff *skb)
{
	struct net_device *dev = c->netdevice;
	struct comx_channel *ch = netdev_priv(dev);
	
	if (ch->debug_flags & DEBUG_HW_RX) {
		comx_debug_skb(dev, skb, "locomx_rx receiving");
	}
	ch->LINE_rx(dev,skb);
}
Exemplo n.º 2
0
Arquivo: comx.c Projeto: nhanh0/hah
int comx_rx(struct net_device *dev, struct sk_buff *skb)
{
    struct comx_channel *ch = dev->priv;

    if (ch->debug_flags & DEBUG_COMX_RX) {
        comx_debug_skb(dev, skb, "comx_rx skb");
    }
    if (skb) {
        netif_rx(skb);
        dev->last_rx = jiffies;
    }
    return 0;
}
Exemplo n.º 3
0
static inline void mixcom_receive_frame(struct net_device *dev) 
{
	struct comx_channel *ch=dev->priv;
	struct mixcom_privdata *hw=ch->HW_privdata;
	register byte rsta;
	register word length;

	rsta = rd_hscx(dev, HSCX_RSTA) & (HSCX_VFR | HSCX_RDO | 
		HSCX_CRC | HSCX_RAB);
	length = ((rd_hscx(dev, HSCX_RBCH) & 0x0f) << 8) | 
		rd_hscx(dev, HSCX_RBCL);

	if ( length > hw->rx_ptr ) {
		hscx_empty_fifo(dev, length - hw->rx_ptr);
	}
	
	if (!(rsta & HSCX_VFR)) {
		ch->stats.rx_length_errors++;
	}
	if (rsta & HSCX_RDO) {
		ch->stats.rx_over_errors++;
	}
	if (!(rsta & HSCX_CRC)) {
		ch->stats.rx_crc_errors++;
	}
	if (rsta & HSCX_RAB) {
		ch->stats.rx_frame_errors++;
	}
	ch->stats.rx_packets++; 
	ch->stats.rx_bytes += length;

	if (rsta == (HSCX_VFR | HSCX_CRC) && hw->recving) {
		skb_trim(hw->recving, hw->rx_ptr - 1);
		if (ch->debug_flags & DEBUG_HW_RX) {
			comx_debug_skb(dev, hw->recving,
				"MIXCOM_interrupt receiving");
		}
		hw->recving->dev = dev;
		if (ch->LINE_rx) {
			ch->LINE_rx(dev, hw->recving);
		}
	}
	else if(hw->recving) {
		kfree_skb(hw->recving);
	}
	hw->recving = NULL; 
	hw->rx_ptr = 0;
}
Exemplo n.º 4
0
Arquivo: comx.c Projeto: nhanh0/hah
static int comx_xmit(struct sk_buff *skb, struct net_device *dev)
{
    struct comx_channel *ch = dev->priv;
    int rc;

    if (skb->len > dev->mtu + dev->hard_header_len) {
        printk(KERN_ERR "comx_xmit: %s: skb->len %d > dev->mtu %d\n", dev->name,
               (int)skb->len, dev->mtu);
    }

    if (ch->debug_flags & DEBUG_COMX_TX) {
        comx_debug_skb(dev, skb, "comx_xmit skb");
    }

    rc=ch->LINE_xmit(skb, dev);
//	if (!rc) dev_kfree_skb(skb);

    return rc;
}