hi, On Mon, Dec 13, 2010 at 09:43:33PM +0800, Ming Lei wrote:
In fact many glue driver used the same default read_fifo/write_fifo, do you want to duplicate the code many times in this glue drivers?
no, look at the code I put: /* the below code would be on musb_core.c */ static void musb_read_fifo(...) void __iomem *fifo = hw_ep->fifo; DBG(4, "%cX ep%d fifo %p count %d buf %p\n", 'R', hw_ep->epnum, fifo, len, dst); if (musb->ops->read_fifo) { musb->ops->read_fifo(); return; } /* else */ /* we can't assume unaligned writes work */ if (likely((0x01 & (unsigned long) dst) == 0)) { u16 index = 0; /* best case is 32bit-aligned destination address */ if ((0x02 & (unsigned long) dst) == 0) { if (len >= 4) { readsl(fifo, dst, len >> 2); index = len & ~0x03; } if (len & 0x02) { *(u16 *)&dst[index] = musb_readw(fifo, 0); index += 2; } } else { if (len >= 2) { readsw(fifo, dst, len >> 1); index = len & ~0x01; } } if (len & 0x01) dst[index] = musb_readb(fifo, 0); } else { /* byte aligned */ readsb(fifo, dst, len); } } -- balbi -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html