On May 26, 2009, at 7:51 AM, Ian Campbell wrote:

On Fri, 2009-05-22 at 19:55 -0400, Jeremy Fitzhardinge wrote:
Ian Campbell wrote:
On Thu, 2009-05-21 at 14:27 -0400, Becky Bruce wrote:

I can work with that, but it's going to be a bit inefficient, as I
actually need the dma_addr_t, not the phys_addr_t, so I'll have to
convert.  In every case, this is a conversion I've already done and
that I need in the calling code as well.


Does

   dma_addr_t dma_map_range(struct device *hwdev, phys_addr_t addr,
   size_t size);

work for you?

If the range does not need mapping then it returns the dma address, if you needed to calculate the dma address anyway to figure out if mapping is required then this is fine. If the range does need mapping then it
returns NULL.


My only concern is whether dma_addr_t == 0 is actually equivalent to
NULL.  That is, can we be sure that address 0 will never be used?

It seems not, ~0UL might have been an option, but...

Taking dma_alloc_coherent as a model, we could have something like:

int dma_map_range(struct device *hwdev, phys_addr_t addr, size_t size, dma_addr_t *dma_addrp);


where *dma_addrp is set if the function returns success (bool return
type might be clearer).

... this sounds like a good idea to me.

I agree.  This will work for me as well.

-becky

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to