Messages in this thread |  | | | Date | Fri, 10 Dec 1999 15:01:31 -0500 (EST) | | From | Zach Brown <> | | Subject | Re: Alpha: virt_to_bus/GFP_DMA problem |
| |
> 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/
|  |