On Wed, 2002-11-06 at 23:36, Nate Lawson wrote:
> On 6 Nov 2002, Eric Anholt wrote:
> > I've been trying to figure out how to use the bus_dma* functions in the
> > DRM.  What I'm working on at the moment is the ATI PCIGART.  How it
> > works right now is an ioctl is done which mallocs a chunk of memory (up
> > to 32MB).  Later, the ioctl that sets up dma allocates a physically
> > contiguous 32K of memory which contains pointers (by vtophys) into the
> > pages of the 32MB.  The physical address of that 32K is then written to
> > the card.  The 32MB is mapped by both the kernel and userspace (the X
> > Server).
> > 
> > So, I'm trying to convert it to busdma.  I'm making a tag (is making it
> > without having a parent tag a bad thing?) for the 32K contiguous,
> > allocing 32K, and loading, with a callback to drop the dma address into
> > a place of my choice.  However, how do I do the 32MB?  It only has to
> > consist of pages, with nothing else special for alignment.  For
> > nsegments in bus_dma_tag_create it says it can't be more than 250-300,
> > while I've got possibly 8192 segments.  I'm thinking I would have to
> > make a tag for the 32MB, allocate it, then loop and create PAGE_SIZE,
> > nsegments=1 tags with the 32MB as parent, and bus_dmamap_load on those
> > tags with offsets from the first map's vaddr and PAGE_SIZE long.  Am I
> > totally off base here?  Is this even possible?
> 
> Check out /sys/pci/agp*

So are you saying I shouldn't be using busdma at all?  How do I limit my
allocations to pages accessible by pci in that case?  Is the address
returned by VM_PAGE_TO_PHYS accessible by the card on any architecture?


-- 
Eric Anholt <[EMAIL PROTECTED]>
http://people.freebsd.org/~anholt/dri/



To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to