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>