On Fri, Jun 18, 2004 at 02:33:18PM -0400, Jamey Hicks wrote:The DMA API is certainly not completely broken. Except for page_to_dma needing struct device the interface could be implemented with per-device dma operation implementations.
Yes, it can be cleaner, but it's not something I would say is
completely broken with the DMA API. It does provide a way to
make your device specific implementation, regardless of whether
it's managed ideally via a struct device pointer. Migrating to
dev->dma* sounds suspiciously like a 2.7ism.
arch/arm/common/dmabounce.cdescribed, but there is already a good start towards that support in 2.6. The other thing that might be needed is passing device to
Where's that code?
Yes, I think this would be generally useful.page_to_dma so that device specific dma addresses can be constructed.
A struct device argument to page_to_dma seems like a no brainer to be
included.
Deepak Saxena wrote a pretty good summary as part if the discussion about this issue on the linux-arm-kernel mailing list:
http://lists.arm.linux.org.uk/pipermail/linux-arm-kernel/2004-June/022796.html
Ahh, ok. Deepak and I have discussed this idea F2F on a several
occassions, I recall he needed it for the small floating PCI window
he has to manage on the IXP* ports. It may help in some embedded
PPC areas as well.
I think I'm looking for something like the PARISC hppa_dma_ops but more generic:
http://lists.arm.linux.org.uk/pipermail/linux-arm-kernel/2004-June/022813.html
I see that's somewhat like what David Brownell suggested before...a single
pointer to a set of dma ops from struct device. hppa_dma_ops translated
into a generic dma_ops entity with fields corresponding to existing
DMA API calls would be a good starting point. We can get rid of some
address translation hacks in a lot of custom embedded PPC drivers
with something like this.