From owner-freebsd-hackers Wed Nov 6 23:37: 0 2002 Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 5C4A137B401 for ; Wed, 6 Nov 2002 23:36:59 -0800 (PST) Received: from rootlabs.com (root.org [67.118.192.226]) by mx1.FreeBSD.org (Postfix) with SMTP id D8F6543E77 for ; Wed, 6 Nov 2002 23:36:55 -0800 (PST) (envelope-from nate@rootlabs.com) Received: (qmail 17386 invoked by uid 1000); 7 Nov 2002 07:36:58 -0000 Date: Wed, 6 Nov 2002 23:36:58 -0800 (PST) From: Nate Lawson To: Eric Anholt Cc: "hackers@FreeBSD.ORG" Subject: Re: busdma in the DRM In-Reply-To: <1036654043.710.536.camel@anholt.dyndns.org> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG 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* -Nate To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message