I am porting an application from Solaris and NT to Linux I need to DMA fairly large ( >1 MByte ) data areas to a user assigned buffer (assigned using malloc). I thus need to either 1) Lock down the pages manually in the driver and generate a physical scatter/gather table for the DMA (I assume that the malloc'ed pages will not be contiguous in physical memory) 2) Remap the user buffer into physically contiguous memory, without changing the user virtual mapping (i.e. same user virtual address) 3) Implement a Unix (Solaris) like physio routine to perform the DMA in chunks, akin to the read entry point uoi->buf mappings. Any pointers or ideas ? |