 /* this allows for a fast restart without re-enabling interrupts */ if(le16_to_cpu(rfd->command) & cb_el) nic->ru_running = RU_SUSPENDED; 
static inline int e100_rx_indicate(struct nic *nic, struct rx *rx,	unsigned int *work_done, unsigned int work_to_do){	struct sk_buff *skb = rx->skb;	struct rfd *rfd = (struct rfd *)skb->data;	u16 rfd_status, actual_size;	if(unlikely(work_done && *work_done >= work_to_do))		return -EAGAIN;	/* Need to sync before taking a peek at cb_complete bit */	pci_dma_sync_single_for_cpu(nic->pdev, rx->dma_addr,		sizeof(struct rfd), PCI_DMA_FROMDEVICE);	rfd_status = le16_to_cpu(rfd->status);	DPRINTK(RX_STATUS, DEBUG, "status=0x%04X\n", rfd_status);	/* If data isn't ready, nothing to indicate */	if(unlikely(!(rfd_status & cb_complete)))		return -EAGAIN;	/* Get actual data size */	actual_size = le16_to_cpu(rfd->actual_size) & 0x3FFF;	if(unlikely(actual_size > RFD_BUF_LEN - sizeof(struct rfd)))		actual_size = RFD_BUF_LEN - sizeof(struct rfd);	/* Get data */	pci_unmap_single(nic->pdev, rx->dma_addr,		RFD_BUF_LEN, PCI_DMA_FROMDEVICE);	/* Pull off the RFD and put the actual data (minus eth hdr) */	skb_reserve(skb, sizeof(struct rfd));	skb_put(skb, actual_size);	skb->protocol = eth_type_trans(skb, nic->netdev);	if(unlikely(!(rfd_status & cb_ok))) {		/* Don't indicate if hardware indicates errors */		nic->net_stats.rx_dropped++;		dev_kfree_skb_any(skb);	} else if(actual_size > nic->netdev->mtu + VLAN_ETH_HLEN) {		/* Don't indicate oversized frames */		nic->rx_over_length_errors++;		nic->net_stats.rx_dropped++;		dev_kfree_skb_any(skb);	} else {		nic->net_stats.rx_packets++;		nic->net_stats.rx_bytes += actual_size;		nic->netdev->last_rx = jiffies;		netif_receive_skb(skb);		if(work_done)			(*work_done)++;	}	rx->skb = NULL;	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/1f53367d5d75ba37f258f6e955d6fc24814051a0/e100.c/clean/drivers/net/e100.c