On Sat, Aug 11, 2007 at 09:14:00PM -0600, Michael Bourgeous wrote: > I'm working on a driver for older HDTV cards based on the TL880 chip. > These cards typically have 16MB of their own memory, which is > available to me over the PCI bus. Various functions of the card > require me to manage this memory, allocating and freeing chunks of it > as necessary. I can easily include my own allocation and management > code, but I'm sure this is a problem that has been solved before. > I've found two interesting sets of functions, the kmem_cache_* and > mempool_* functions, but neither does quite what I'm looking for. So, > in a sentence, my question is this: Does the kernel provide memory > pool functions that would allow me to call the appropriate equivalent > of kmalloc/kfree, using the card's memory as the pool instead of > actually allocating physical or virtual memory? > Many platforms have similar requirements for DMA, both in terms of bounce buffers and consistent allocations. If you're looking at this specifically for DMA, then things like dma_declare_coherent_memory() and the corresponding alloc/free routines that go along with it will do what you need. If you require something more generalized, you can still abstract what you need fairly trivially.
There are a few examples of bitmap based region management in the kernel you can look at. arch/i386/kernel/pci-dma.c implements the aforementioned DMA ops, and arch/sh/kernel/cpu/sh4/sq.c does something similar, albeit with a larger address range (64MB). A simple bitmap approach from one or the other should work fine for your 16MB case. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/