Date: Sun, 2 Jul 2006 21:06:21 +0200 From: Hans Petter Selasky <hselasky@c2i.net> To: Ian Dowse <iedowse@iedowse.com> Cc: David Malone <dwmalone@maths.tcd.ie>, freebsd-hackers@freebsd.org Subject: Re: contiguous memory allocation problem Message-ID: <200607022106.22935.hselasky@c2i.net> In-Reply-To: <200607021620.aa78471@nowhere.iedowse.com> References: <200607021620.aa78471@nowhere.iedowse.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sunday 02 July 2006 17:20, Ian Dowse wrote: > In message <200607021423.aa76796@nowhere.iedowse.com>, Ian Dowse writes: > >The trick is that if the 0x6000 bytes are contiguous in virtual > >memory then they never span more than 6 pages so one iTD is enough. > > Sorry, I meant of course 6 page boundaries, which means no more > than 7 pages. This is why the 7 physical address slots in the iTD > is always enough for 8 x 3k transaction records if the 24k buffer > is contiguous in virtual memory. > Ok. So the solution to my problem is to use scatter and gather. I will see about updating my USB system to do it like that. But there is one thing I do not understand yet. When you load a page that physically resides above 4GB, because a computer has more than 4GB of memory, how does "bus_dmamap_load()" move that page down below 4GB, so that the 32-bit USB host controllers can reach it? --HPS
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200607022106.22935.hselasky>