title: Creating physical memory from user space to use for DMA transfers
body: <p>I want to create some memory to use for DMA transfers. (Using Linux 2.6.18-128.el5 #1 SMP)</p>
  
  <p>I have a API stack+kernel driver for my H/W that can do this for me, but its very very slow!</p>
  
  <p>If I use the API to create a DMA transfer, it allocates some memory very high up in System RAM (eg 0x7373a6f8 on one run). (I have the ICD of the device, so have a memory map mmap'd over, this is how I can find this address out, and how in the end I want to SET to my own address, and hence the /dev/mem in the maps below)</p>
  
  <p>I cannot seem to be able to mmap memory around this high address, presumably as its out of my virtual memory space and im being blocked by the kernel?</p>
  
  <p>What I want to be able to do is either use (map) this address given, so I can read/write to it, OR create my own physical memory that I can read/write to.</p>
  
  <pre><code># cat /proc/iomem
  00000000-0009fbff : System RAM
    00000000-00000000 : Crash kernel
  000a0000-000bffff : Video RAM area
  000c0000-000c7fff : Video ROM
  000f0000-000fffff : System ROM
  00100000-7fd64fff : System RAM        # Is this all of /dev/mem?
    00400000-00612916 : Kernel code
    00612917-006ef9db : Kernel data
  
  # cat /proc/3450/maps
  08207000-08228000 rw-p 08207000 00:00 0          [heap]
  b7e7b000-b7f85000 rw-p b7e7b000 00:00 0
  b7f89000-b7f8a000 rw-p b7f89000 00:00 0
  b7f8a000-b7f8b000 rw-s 80114000 00:11 1541       /dev/mem
  b7f8b000-b7f8d000 rw-p b7f8b000 00:00 0
  bff70000-bff85000 rw-p bffea000 00:00 0          [stack]
  </code></pre>