Re: Alpha: virt_to_bus/GFP_DMA problem

Zach Brown (zab@zabbo.net)
Fri, 10 Dec 1999 15:01:31 -0500 (EST)


> The right solution IMHO is what David Miller introduced on sbus:
> instead of using virt_to_bus & co. drivers acquire a DMA handler before
> doing DMA using
> handle = pci_map_single(pci_dev *dev, void *addr, long len, int flags)
> or
> handle = pci_map_sg(pci_dev *dev, struct scatterlist *sg, int flags)

definitely. but do we need to make this dangerously elaborate or tie it
in with a insanely flexible (if slow) zoning allocator?

the ess maestro sound board has 28bits of address lines. it can have
multiple channels being dmaed and mixed into output at once. but due to
the way its referenced, all the memory that is being DMAed must be
phiscally within 4meg of each other.

so to support many channels playing without preallocating the memory a
maestro driver would want alloc( < 256meg) and later an alloatiion "near"
its previous one. Yuck.

so I guess my point is that we don't want to go too nutty with the API,
there will always be some broken devices that will just have to not work
to their fullest.

> unmap will then free the translation tables on Sparc, Alpha and as SCT said
> on some AGP chipsets as well.

*nod* it appears some agp chipsets can do pci addressing through the
GARTs..

-- zach

- - - - - -
007 373 5963

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