On Sunday 06 January 2008, Karsten Wiese wrote: > > for (uframe = 0; uframe < 8; uframe++) { > > - if (likely (itd->index[uframe] == -1)) > > + t = hc32_to_cpup(ehci, &itd->hw_bufp[uframe]); > > NACK, struct ehci_itd has hw_bufp[7], not 8.
Here's a better way, on top of $SUBJECT patch. Saves another four bytes too. ;) - Dave --- g26.orig/drivers/usb/host/ehci-sched.c 2008-01-07 01:59:33.000000000 -0800 +++ g26/drivers/usb/host/ehci-sched.c 2008-01-07 01:54:17.000000000 -0800 @@ -1456,6 +1456,8 @@ itd_patch( uframe &= 0x07; + itd->uframe_mask |= 1 << uframe; + itd->hw_transaction[uframe] = uf->transaction; itd->hw_transaction[uframe] |= cpu_to_hc32(ehci, pg << 12); itd->hw_bufp[pg] |= cpu_to_hc32(ehci, uf->bufp & ~(u32)0); @@ -1572,6 +1574,7 @@ itd_complete ( unsigned urb_index = itd->index; struct ehci_iso_stream *stream = itd->stream; struct usb_device *dev; + unsigned mask = itd->uframe_mask; /* Caller guarantees this ITD is inactive. We always * report something for each transfer it defines. @@ -1579,9 +1582,8 @@ itd_complete ( desc = &urb->iso_frame_desc[urb_index]; /* for each uframe with a packet */ - for (uframe = 0; uframe < 8; uframe++) { - t = hc32_to_cpup(ehci, &itd->hw_bufp[uframe]); - if ((t >> 12) == 0) + for (uframe = 0; uframe < 8; uframe++, mask >>= 1) { + if (!(mask & 1)) continue; t = hc32_to_cpup(ehci, &itd->hw_transaction [uframe]); --- g26.orig/drivers/usb/host/ehci.h 2008-01-07 01:59:33.000000000 -0800 +++ g26/drivers/usb/host/ehci.h 2008-01-07 01:48:34.000000000 -0800 @@ -592,8 +592,9 @@ struct ehci_itd { /* any/all hw_transactions here may be used by that urb */ unsigned frame; /* where scheduled */ - unsigned pg; - unsigned index; /* first urb->iso_frame_desc */ + u8 pg; + u8 uframe_mask; + u16 index; /* first urb->iso_frame_desc */ } __attribute__ ((aligned (32))); /*-------------------------------------------------------------------------*/ - To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html