Skip site navigation (1)Skip section navigation (2)
Date:      06 Nov 2002 23:27:22 -0800
From:      Eric Anholt <eta@lclark.edu>
To:        "hackers@FreeBSD.ORG" <hackers@FreeBSD.ORG>
Subject:   busdma in the DRM
Message-ID:  <1036654043.710.536.camel@anholt.dyndns.org>

next in thread | raw e-mail | index | archive | help
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?

-- 
Eric Anholt <eta@lclark.edu>
http://people.freebsd.org/~anholt/dri/



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1036654043.710.536.camel>