lkml.org 
[lkml]   [2003]   [Nov]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectUserspace DMA
Date
Hi,


Is there an accepted way of doing userspace DMA with Linux?

I've gone over a large number of posts, and all seem to recommend something
different, and each method seems to involve certain drawbacks.

What I'd like to do is allow a process to be able to do operations like
pci_alloc_consistent and pci_free_consistent. I'm trying to do this to allow
a driver running under the Bochs emulator to interact with its (non-emulated)
hardware using DMA.

I was originally going to do a pci_alloc_consistent and then mmap the space
into the emulator's process. The process would then get the physical address
of the memory through an ioctl, or I would leave the physical address at the
start of the allocated buffer for the process to later retrieve.

However, it appears that remap_page_range won't work with addresses obtained
from pci_alloc_consistent. I've also read that using the nopage callback can
cause issues if the range I need to allocate is greater than one page.

Most of the approaches I've found seem to require that the hardware be capable
of scatter-gather DMA (video4linux and bttv, for ex.). I've also seen one
solution that had the driver do a pci_alloc_consistent on a certain ioctl,
and then return the physical address of the buffer. The process would then
mmap /dev/mem to access the buffer. However, someone warned that this method
could have coherency issues.

Is there some other method that I should be looking at to accomplish this?



Thanks,


Andrew
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:58    [W:0.021 / U:1.524 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site