/* Block input and output are easy on shared memory ethercards, the only complication is when the ring buffer wraps. The count will already be rounded up to a doubleword value via lne390_get_8390_hdr() above.  */
static void lne390_block_input(struct net_device *dev, int count, struct sk_buff *skb, int ring_offset)
/* Block input and output are easy on shared memory ethercards, the only complication is when the ring buffer wraps. The count will already be rounded up to a doubleword value via lne390_get_8390_hdr() above.  */
static void lne390_block_input(struct net_device *dev, int count, struct sk_buff *skb, int ring_offset)
{
	void __iomem *xfer_start = ei_status.mem + ring_offset - (LNE390_START_PG<<8);
	if (ring_offset + count > (LNE390_STOP_PG<<8)) {
		int semi_count = (LNE390_STOP_PG<<8) - ring_offset;
		memcpy_fromio(skb->data, xfer_start, semi_count);
		count -= semi_count;
		memcpy_fromio(skb->data + semi_count,
			ei_status.mem + (TX_PAGES<<8), count);
	} else {
		memcpy_fromio(skb->data, xfer_start, count);
	}
}