Discussion:
[9fans] Tdmaxpkt in usbehci (no html)
(too old to reply)
c***@gmx.de
2013-04-11 11:25:01 UTC
Permalink
in the ehci driver, it uses:

Tdmaxpkt = 0x5000, /* max buffer for a Td */

a td has 5*4K pages giving the 20K above, but i think this only applies if the
first pointer is page aligned (page offset = 0) so all the pages can be filled
completely.

The EHCI spec says this:
"The buffer pointer list in the qTD is long enough to support a maximum transfer size of 20K bytes. This case
occurs when all five buffer pointers are used and the first offset is zero. A qTD handles a 16Kbyte buffer
with any starting buffer alignment."

The buffer pointer isnt page aligned as far as i can see, so make Tdmaxpkt = 0x4000 instead?

--
cinap

PS:
sorry for the previous mail. i was sending it with web mail which i use very rarely
and the default setting for email was to send them as HTML :(
erik quanstrom
2013-04-11 13:05:57 UTC
Permalink
> in the ehci driver, it uses:
>
> Tdmaxpkt = 0x5000, /* max buffer for a Td */
>
> a td has 5*4K pages giving the 20K above, but i think this only applies if the
> first pointer is page aligned (page offset = 0) so all the pages can be filled
> completely.
>
> The EHCI spec says this:
> "The buffer pointer list in the qTD is long enough to support a maximum transfer size of 20K bytes. This case
> occurs when all five buffer pointers are used and the first offset is zero. A qTD handles a 16Kbyte buffer
> with any starting buffer alignment."
>
> The buffer pointer isnt page aligned as far as i can see, so make Tdmaxpkt = 0x4000 instead?

i wonder if it would make more sense to align the buffer.

(the unaligned case for iso->data looks wierd, too.)

- erik
kernel panic
2013-04-11 13:09:18 UTC
Permalink
yes, that would work too.

--
cinap

> Gesendet: Donnerstag, 11. April 2013 um 15:05 Uhr
> Von: "erik quanstrom" <***@quanstro.net>
> An: ***@9fans.net
> Betreff: Re: [9fans] Tdmaxpkt in usbehci (no html)
>
> > in the ehci driver, it uses:
> >
> > Tdmaxpkt = 0x5000, /* max buffer for a Td */
> >
> > a td has 5*4K pages giving the 20K above, but i think this only applies if the
> > first pointer is page aligned (page offset = 0) so all the pages can be filled
> > completely.
> >
> > The EHCI spec says this:
> > "The buffer pointer list in the qTD is long enough to support a maximum transfer size of 20K bytes. This case
> > occurs when all five buffer pointers are used and the first offset is zero. A qTD handles a 16Kbyte buffer
> > with any starting buffer alignment."
> >
> > The buffer pointer isnt page aligned as far as i can see, so make Tdmaxpkt = 0x4000 instead?
>
> i wonder if it would make more sense to align the buffer.
>
> (the unaligned case for iso->data looks wierd, too.)
>
> - erik
>
>
Loading...