Wrapper API for static bus_dma allocations

Konstantin Belousov kostikbel at gmail.com
Fri Jan 30 15:21:57 UTC 2015


On Fri, Jan 30, 2015 at 09:56:31AM -0500, John Baldwin wrote:
> On 1/29/15 4:54 PM, Poul-Henning Kamp wrote:
> > --------
> > In message <2800970.jY4xzTy9Hz at ralph.baldwin.cx>, John Baldwin writes:
> > 
> >> The bus_dma API to allocate a chunk of static DMA'able memory (e.g. for 
> >> descriptor rings) can be a bit obtuse [...]
> > 
> > Isn't it time we take a good hard stare at all of the bus_dma API,
> > and refactor it into something a lot more compact ?
> 
> Given the amount of oddball hardware out there I don't think there is a
> lot you can cut out.  The filter function might be something we can lose
> (and losing it would simplify the implementation), but all the other
> weird constraints are actually used by something AFAIK.  I do think we
> can provide some simpler wrappers for some of the more common cases, but
> there will be some hardware for which those wrappers do not work.
> 
> One suggestion Scott has had is to at least make it easier to extend the
> API by using getter/setter routines on the tag to work with tag
> attributes instead of passing them all in bus_dma_tag_create().

BTW, filter function is useless.  It can deny specific bus address from
being used, but it does not provide the busdma implementation even a hint
what other address should be (tried to) used.  In dmar busdma, I simply
ignored it.  And there is no real users of filter in the tree.


More information about the freebsd-arch mailing list