title: Linux dma device driver dma_request_channel fails
body: <p>I'm trying to write a platform driver that interfaces with the DMA on an embedded system. We are using the Zedboard and Xilinx's AXI DMA IP. However, I believe our errors are related to the Linux kernel.</p>
  
  <p>To get a <code>tx/rx</code> channel for the DMA, linux provides the <code>dma_request_channel</code> function. This function uses a filter and a filter parameter that needs to match the DMA. This function gets a list of all the DMA's available in the system and uses the filter to match it to the one we want. However, it would seem that this is not able to get all the available DMA's but only one. ARM cores come with their own PL330 hard <code>IP DMA</code>. That is the only one it sees. </p>
  
  <p>The kernel code is oh so convoluted to understand that I am stuck in the list header file <a href="http://lxr.free-electrons.com/source/include/linux/list.h?a=sh#L350" rel="nofollow">here</a></p>
  
  <p>Could someone explain what <code>LIST_HEAD_INIT</code> does? What <code>C</code> syntax is that?</p>
  
  <p>Do I need to to something do have the hardware peripheral become visible to the OS? I thought the device tree takes care of that and we have included it in the device tree. We can also get the base address of this by using the get_platform_resources API.</p>