<html> <head> <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title> Xilinx Driver axivdma v5_0: xaxivdma.c File Reference </title> <link href="doxygen_kalyanidocs/doc/css/driver_api_doxygen.css" rel="stylesheet" type="text/css"> </head> <h3 class="PageHeader">Xilinx Processor IP Library</h3> <hl>Software Drivers</hl> <hr class="whs1"> <!-- Generated by Doxygen 1.6.1 --> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> </ul> </div> <div class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>File Members</span></a></li> </ul> </div> </div> <div class="contents"> <h1>xaxivdma.c File Reference</h1><code>#include "<a class="el" href="xaxivdma_8h.html">xaxivdma.h</a>"</code><br/> <code>#include "<a class="el" href="xaxivdma__i_8h.html">xaxivdma_i.h</a>"</code><br/> <table border="0" cellpadding="0" cellspacing="0"> <tr><td colspan="2"><h2>Defines</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#ad0c16315875917715d0a8c49b07b9688">INITIALIZATION_POLLING</a> 100000</td></tr> <tr><td colspan="2"><h2>Functions</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct_x_axi_vdma___channel.html">XAxiVdma_Channel</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#a53d9dd2e9c6d96baa4aef6e1b46d8f0a">XAxiVdma_GetChannel</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, u16 Direction)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#a8d11c9609cf957c560fb287af1433374">XAxiVdma_CfgInitialize</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, <a class="el" href="struct_x_axi_vdma___config.html">XAxiVdma_Config</a> *CfgPtr, u32 EffectiveAddr)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#a8dbd2faa070ca571f049e3b61f9bdb1e">XAxiVdma_Reset</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, u16 Direction)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#a3e01bd69f101126d5962f7078ee3e520">XAxiVdma_ResetNotDone</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, u16 Direction)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#a0fc5b39aabb8d4f56b0dd2024ea5bff2">XAxiVdma_IsBusy</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, u16 Direction)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">u32 </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#a9769479907cda3ef95ff1ed394de4629">XAxiVdma_CurrFrameStore</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, u16 Direction)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">u32 </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#a24f182cf8678e4df6e0e2b19e2f50620">XAxiVdma_GetVersion</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">u32 </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#a15653f0679e3a33efd384598b6c42e08">XAxiVdma_GetStatus</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, u16 Direction)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#a741b4b1607c2ee71a3be16ddd8300656">XAxiVdma_SetLineBufThreshold</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, int LineBufThreshold, u16 Direction)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#aa3376589f8781eec1f0d619e1a0d3078">XAxiVdma_FsyncSrcSelect</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, u32 Source, u16 Direction)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#acf7ed6b0ef406b80e49ff25634f6d5f1">XAxiVdma_GenLockSourceSelect</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, u32 Source, u16 Direction)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#af99dd7738b98367397831df26433843a">XAxiVdma_StartParking</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, int FrameIndex, u16 Direction)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#a8625bbc0ed0ab829f3153160c74bba44">XAxiVdma_StopParking</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, u16 Direction)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#a4f05c5a75fdf840517c17d687443510d">XAxiVdma_StartFrmCntEnable</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, u16 Direction)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#ab14c0b0487aeb3347b289eb58453e75d">XAxiVdma_SetBdAddrs</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, u32 BdAddrPhys, u32 BdAddrVirt, int NumBds, u16 Direction)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#a1dc126d885558e03cf06a4d9c05d5668">XAxiVdma_StartWriteFrame</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, <a class="el" href="struct_x_axi_vdma___dma_setup.html">XAxiVdma_DmaSetup</a> *DmaConfigPtr)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#ab2646b6aeea2ff64c4b42319ffb49804">XAxiVdma_StartReadFrame</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, <a class="el" href="struct_x_axi_vdma___dma_setup.html">XAxiVdma_DmaSetup</a> *DmaConfigPtr)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#a3c50e96d431d9f1ee7d6200266c0dbd3">XAxiVdma_DmaConfig</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, u16 Direction, <a class="el" href="struct_x_axi_vdma___dma_setup.html">XAxiVdma_DmaSetup</a> *DmaConfigPtr)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#af610e3b2bee38be4c0da65ead756fbcd">XAxiVdma_DmaSetBufferAddr</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, u16 Direction, u32 *BufferAddrSet)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#adf310ae3bd4c0ae9ebf3e445a2fbe444">XAxiVdma_DmaStart</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, u16 Direction)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#a133b5fd1032db27366382885d6d76484">XAxiVdma_DmaStop</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, u16 Direction)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#ab51f0d1f195db6af2dd3023e5c80eb5c">XAxiVdma_DmaRegisterDump</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, u16 Direction)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#aabe404c2a5c1483bc95be749c7540ba4">XAxiVdma_SetFrameCounter</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, <a class="el" href="struct_x_axi_vdma___frame_counter.html">XAxiVdma_FrameCounter</a> *CfgPtr)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#abb2cecf1628ce8f7b42ffca3608bdf70">XAxiVdma_GetFrameCounter</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, <a class="el" href="struct_x_axi_vdma___frame_counter.html">XAxiVdma_FrameCounter</a> *CfgPtr)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#af331929e09bf1454dc2835b6ecc4ff30">XAxiVdma_SetFrmStore</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, u8 FrmStoreNum, u16 Direction)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#a83d55bee4a575b0fdd98d1013a26533e">XAxiVdma_GetFrmStore</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, u8 *FrmStoreNum, u16 Direction)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#a4d93d3dea2f117948c175371d983a0e1">XAxiVdma_GetDmaChannelErrors</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, u16 Direction)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="xaxivdma_8c.html#ac01b1199d15a3a95cafb01f61dd1d0d3">XAxiVdma_ClearDmaChannelErrors</a> (<a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> *InstancePtr, u16 Direction, u32 ErrorMask)</td></tr> </table> <hr/><a name="_details"></a><h2>Detailed Description</h2> <p>Implementation of the driver API functions for the AXI Video DMA engine.</p> <pre> MODIFICATION HISTORY:</pre><pre> Ver Who Date Changes ----- ---- -------- ------------------------------------------------------- 1.00a jz 08/16/10 First release 2.00a jz 12/10/10 Added support for direct register access mode, v3 core 2.01a jz 01/19/11 Added ability to re-assign BD addresses rkv 03/28/11 Added support for frame store register. 3.00a srt 08/26/11 Added support for Flush on Frame Sync and dynamic programming of Line Buffer Thresholds and added API XAxiVdma_SetLineBufThreshold. 4.00a srt 11/21/11 - XAxiVdma_CfgInitialize API is modified to use the EffectiveAddr.</p> <ul> <li>Added APIs: <a class="el" href="xaxivdma_8c.html#aa3376589f8781eec1f0d619e1a0d3078">XAxiVdma_FsyncSrcSelect()</a> <a class="el" href="xaxivdma_8c.html#acf7ed6b0ef406b80e49ff25634f6d5f1">XAxiVdma_GenLockSourceSelect()</a> 4.01a srt 06/13/12 - Added APIs: <a class="el" href="xaxivdma_8c.html#a4d93d3dea2f117948c175371d983a0e1">XAxiVdma_GetDmaChannelErrors()</a> <a class="el" href="xaxivdma_8c.html#ac01b1199d15a3a95cafb01f61dd1d0d3">XAxiVdma_ClearDmaChannelErrors()</a> 4.02a srt 09/25/12 - Fixed CR 678734 XAxiVdma_SetFrmStore function changed to remove Reset logic after setting number of frame stores. 4.03a srt 01/18/13 - Updated logic of GenLockSourceSelect() & FsyncSrcSelect() APIs for newer versions of IP (CR: 691052).</li> <li>Modified CfgInitialize() API to initialize StreamWidth parameters. (CR 691866) 4.04a srt 03/03/13 - Support for *_ENABLE_DEBUG_INFO_* debug configuration parameters (CR: 703738)</li> </ul> </pre><pre> </pre> <hr/><h2>Define Documentation</h2> <a class="anchor" id="ad0c16315875917715d0a8c49b07b9688"></a><!-- doxytag: member="xaxivdma.c::INITIALIZATION_POLLING" ref="ad0c16315875917715d0a8c49b07b9688" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define INITIALIZATION_POLLING 100000</td> </tr> </table> </div> <div class="memdoc"> </div> </div> <hr/><h2>Function Documentation</h2> <a class="anchor" id="a8d11c9609cf957c560fb287af1433374"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_CfgInitialize" ref="a8d11c9609cf957c560fb287af1433374" args="(XAxiVdma *InstancePtr, XAxiVdma_Config *CfgPtr, u32 EffectiveAddr)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int XAxiVdma_CfgInitialize </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma___config.html">XAxiVdma_Config</a> * </td> <td class="paramname"> <em>CfgPtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u32 </td> <td class="paramname"> <em>EffectiveAddr</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Initialize the driver with hardware configuration</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>CfgPtr</em> </td><td>is the pointer to the hardware configuration structure </td></tr> <tr><td valign="top"></td><td valign="top"><em>EffectiveAddr</em> </td><td>is the virtual address map for the device</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>XST_SUCCESS if everything goes fine</li> <li>XST_FAILURE if reset the hardware failed, need system reset to recover</li> </ul> </dd></dl> <dl class="note"><dt><b>Note:</b></dt><dd>If channel fails reset, then it will be set as invalid </dd></dl> </div> </div> <a class="anchor" id="ac01b1199d15a3a95cafb01f61dd1d0d3"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_ClearDmaChannelErrors" ref="ac01b1199d15a3a95cafb01f61dd1d0d3" args="(XAxiVdma *InstancePtr, u16 Direction, u32 ErrorMask)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int XAxiVdma_ClearDmaChannelErrors </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u32 </td> <td class="paramname"> <em>ErrorMask</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Clear DMA Channel Errors.</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the <a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> instance to operate on </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the channel to work on, use XAXIVDMA_READ/WRITE </td></tr> <tr><td valign="top"></td><td valign="top"><em>ErrorMask</em> </td><td>is the mask of error bits to clear</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>- XST_SUCCESS, when error bits are cleared.<ul> <li>XST_INVALID_PARAM, when channel pointer is invalid.</li> <li>XST_DEVICE_NOT_FOUND, when the channel is not valid.</li> </ul> </dd></dl> <dl class="note"><dt><b>Note:</b></dt><dd>None </dd></dl> </div> </div> <a class="anchor" id="a9769479907cda3ef95ff1ed394de4629"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_CurrFrameStore" ref="a9769479907cda3ef95ff1ed394de4629" args="(XAxiVdma *InstancePtr, u16 Direction)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">u32 XAxiVdma_CurrFrameStore </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Get the current frame that hardware is working on</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the channel to work on, use XAXIVDMA_READ/WRITE</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>The current frame that the hardware is working on</dd></dl> <dl class="note"><dt><b>Note:</b></dt><dd>If returned frame number is out of range, then the channel is invalid </dd></dl> </div> </div> <a class="anchor" id="a3c50e96d431d9f1ee7d6200266c0dbd3"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_DmaConfig" ref="a3c50e96d431d9f1ee7d6200266c0dbd3" args="(XAxiVdma *InstancePtr, u16 Direction, XAxiVdma_DmaSetup *DmaConfigPtr)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int XAxiVdma_DmaConfig </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma___dma_setup.html">XAxiVdma_DmaSetup</a> * </td> <td class="paramname"> <em>DmaConfigPtr</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Configure one DMA channel using the configuration structure</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the DMA channel to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>DmaConfigPtr</em> </td><td>is the pointer to the setup structure</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>XST_SUCCESS if successful</li> <li>XST_DEVICE_BUSY if the DMA channel is not idle, BDs are still being used</li> <li>XST_INVAID_PARAM if buffer address not valid, for example, unaligned address with no DRE built in the hardware, or Direction invalid</li> <li>XST_DEVICE_NOT_FOUND if the channel is invalid </li> </ul> </dd></dl> </div> </div> <a class="anchor" id="ab51f0d1f195db6af2dd3023e5c80eb5c"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_DmaRegisterDump" ref="ab51f0d1f195db6af2dd3023e5c80eb5c" args="(XAxiVdma *InstancePtr, u16 Direction)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void XAxiVdma_DmaRegisterDump </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Dump registers of one DMA channel</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the DMA channel to work on</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>None</dd></dl> <dl class="note"><dt><b>Note:</b></dt><dd>If channel is invalid, then do nothing on that channel </dd></dl> </div> </div> <a class="anchor" id="af610e3b2bee38be4c0da65ead756fbcd"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_DmaSetBufferAddr" ref="af610e3b2bee38be4c0da65ead756fbcd" args="(XAxiVdma *InstancePtr, u16 Direction, u32 *BufferAddrSet)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int XAxiVdma_DmaSetBufferAddr </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u32 * </td> <td class="paramname"> <em>BufferAddrSet</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Configure buffer addresses for one DMA channel</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the DMA channel to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>BufferAddrSet</em> </td><td>is the set of addresses for the transfers</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>XST_SUCCESS if successful</li> <li>XST_DEVICE_BUSY if the DMA channel is not idle, BDs are still being used</li> <li>XST_INVAID_PARAM if buffer address not valid, for example, unaligned address with no DRE built in the hardware, or Direction invalid</li> <li>XST_DEVICE_NOT_FOUND if the channel is invalid </li> </ul> </dd></dl> </div> </div> <a class="anchor" id="adf310ae3bd4c0ae9ebf3e445a2fbe444"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_DmaStart" ref="adf310ae3bd4c0ae9ebf3e445a2fbe444" args="(XAxiVdma *InstancePtr, u16 Direction)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int XAxiVdma_DmaStart </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Start one DMA channel</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the DMA channel to work on</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>XST_SUCCESS if channel started successfully</li> <li>XST_FAILURE otherwise</li> <li>XST_DEVICE_NOT_FOUND if the channel is invalid</li> <li>XST_INVALID_PARAM if Direction invalid </li> </ul> </dd></dl> </div> </div> <a class="anchor" id="a133b5fd1032db27366382885d6d76484"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_DmaStop" ref="a133b5fd1032db27366382885d6d76484" args="(XAxiVdma *InstancePtr, u16 Direction)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void XAxiVdma_DmaStop </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Stop one DMA channel</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the DMA channel to work on</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>None</dd></dl> <dl class="note"><dt><b>Note:</b></dt><dd>If channel is invalid, then do nothing on that channel </dd></dl> </div> </div> <a class="anchor" id="aa3376589f8781eec1f0d619e1a0d3078"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_FsyncSrcSelect" ref="aa3376589f8781eec1f0d619e1a0d3078" args="(XAxiVdma *InstancePtr, u32 Source, u16 Direction)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int XAxiVdma_FsyncSrcSelect </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u32 </td> <td class="paramname"> <em>Source</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Configure Frame Sync Source and valid only when C_USE_FSYNC is enabled.</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>Source</em> </td><td>is the value to set the source of Frame Sync </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the DMA channel to work on</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>XST_SUCCESS if successful</li> <li>XST_FAILURE if C_USE_FSYNC is disabled. </li> </ul> </dd></dl> </div> </div> <a class="anchor" id="acf7ed6b0ef406b80e49ff25634f6d5f1"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_GenLockSourceSelect" ref="acf7ed6b0ef406b80e49ff25634f6d5f1" args="(XAxiVdma *InstancePtr, u32 Source, u16 Direction)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int XAxiVdma_GenLockSourceSelect </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u32 </td> <td class="paramname"> <em>Source</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Configure Gen Lock Source</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>Source</em> </td><td>is the value to set the source of Gen Lock </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the DMA channel to work on</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>XST_SUCCESS if successful</li> <li>XST_FAILURE if the channel is in GenLock Master Mode. if C_INCLUDE_INTERNAL_GENLOCK is disabled. </li> </ul> </dd></dl> </div> </div> <a class="anchor" id="a53d9dd2e9c6d96baa4aef6e1b46d8f0a"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_GetChannel" ref="a53d9dd2e9c6d96baa4aef6e1b46d8f0a" args="(XAxiVdma *InstancePtr, u16 Direction)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="struct_x_axi_vdma___channel.html">XAxiVdma_Channel</a>* XAxiVdma_GetChannel </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Get a channel</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the direction for the channel to get</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>The pointer to the channel. Upon error, return NULL.</dd></dl> <dl class="note"><dt><b>Note:</b></dt><dd>Since this function is internally used, we assume Direction is valid </dd></dl> </div> </div> <a class="anchor" id="a4d93d3dea2f117948c175371d983a0e1"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_GetDmaChannelErrors" ref="a4d93d3dea2f117948c175371d983a0e1" args="(XAxiVdma *InstancePtr, u16 Direction)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int XAxiVdma_GetDmaChannelErrors </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Check for DMA Channel Errors.</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the <a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> instance to operate on </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the channel to work on, use XAXIVDMA_READ/WRITE</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>- Errors seen on the channel<ul> <li>XST_INVALID_PARAM, when channel pointer is invalid.</li> <li>XST_DEVICE_NOT_FOUND, when the channel is not valid.</li> </ul> </dd></dl> <dl class="note"><dt><b>Note:</b></dt><dd>None </dd></dl> </div> </div> <a class="anchor" id="abb2cecf1628ce8f7b42ffca3608bdf70"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_GetFrameCounter" ref="abb2cecf1628ce8f7b42ffca3608bdf70" args="(XAxiVdma *InstancePtr, XAxiVdma_FrameCounter *CfgPtr)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void XAxiVdma_GetFrameCounter </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma___frame_counter.html">XAxiVdma_FrameCounter</a> * </td> <td class="paramname"> <em>CfgPtr</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Get the frame counter and delay counter for both channels</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>CfgPtr</em> </td><td>is the configuration structure to contain return values</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>None</dd></dl> <dl class="note"><dt><b>Note:</b></dt><dd>If returned frame counter value is 0, then the channel is not valid </dd></dl> </div> </div> <a class="anchor" id="a83d55bee4a575b0fdd98d1013a26533e"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_GetFrmStore" ref="a83d55bee4a575b0fdd98d1013a26533e" args="(XAxiVdma *InstancePtr, u8 *FrmStoreNum, u16 Direction)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void XAxiVdma_GetFrmStore </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u8 * </td> <td class="paramname"> <em>FrmStoreNum</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Get the number of frame store buffers to use.</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the <a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> instance to operate on </td></tr> <tr><td valign="top"></td><td valign="top"><em>FrmStoreNum</em> </td><td>is the number of frame store buffers to use. </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the channel to work on, use XAXIVDMA_READ/WRITE</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>None</dd></dl> <dl class="note"><dt><b>Note:</b></dt><dd>None </dd></dl> </div> </div> <a class="anchor" id="a15653f0679e3a33efd384598b6c42e08"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_GetStatus" ref="a15653f0679e3a33efd384598b6c42e08" args="(XAxiVdma *InstancePtr, u16 Direction)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">u32 XAxiVdma_GetStatus </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Get the status of a channel</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the channel to work on, use XAXIVDMA_READ/WRITE</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>The status of the channel</dd></dl> <dl class="note"><dt><b>Note:</b></dt><dd>An invalid return value indicates that channel is invalid </dd></dl> </div> </div> <a class="anchor" id="a24f182cf8678e4df6e0e2b19e2f50620"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_GetVersion" ref="a24f182cf8678e4df6e0e2b19e2f50620" args="(XAxiVdma *InstancePtr)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">u32 XAxiVdma_GetVersion </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Get the version of the hardware</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>The version of the hardware </dd></dl> </div> </div> <a class="anchor" id="a0fc5b39aabb8d4f56b0dd2024ea5bff2"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_IsBusy" ref="a0fc5b39aabb8d4f56b0dd2024ea5bff2" args="(XAxiVdma *InstancePtr, u16 Direction)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int XAxiVdma_IsBusy </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Check whether a DMA channel is busy</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the channel to work on, use XAXIVDMA_READ/WRITE</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>Non-zero if the channel is busy</li> <li>Zero if the channel is idle </li> </ul> </dd></dl> </div> </div> <a class="anchor" id="a8dbd2faa070ca571f049e3b61f9bdb1e"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_Reset" ref="a8dbd2faa070ca571f049e3b61f9bdb1e" args="(XAxiVdma *InstancePtr, u16 Direction)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void XAxiVdma_Reset </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>This function resets one DMA channel</p> <p>The registers will be default values after the reset</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the channel to work on, use XAXIVDMA_READ/WRITE</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>None</dd></dl> <dl class="note"><dt><b>Note:</b></dt><dd>Due to undeterminism of system delays, check the reset status through <a class="el" href="xaxivdma_8c.html#a3e01bd69f101126d5962f7078ee3e520">XAxiVdma_ResetNotDone()</a>. If direction is invalid, do nothing. </dd></dl> </div> </div> <a class="anchor" id="a3e01bd69f101126d5962f7078ee3e520"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_ResetNotDone" ref="a3e01bd69f101126d5962f7078ee3e520" args="(XAxiVdma *InstancePtr, u16 Direction)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int XAxiVdma_ResetNotDone </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>This function checks one DMA channel for reset completion</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the channel to work on, use XAXIVDMA_READ/WRITE</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>0 if reset is done</li> <li>1 if reset is ongoing</li> </ul> </dd></dl> <dl class="note"><dt><b>Note:</b></dt><dd>We do not check for channel validity, because channel is marked as invalid before reset is done </dd></dl> </div> </div> <a class="anchor" id="ab14c0b0487aeb3347b289eb58453e75d"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_SetBdAddrs" ref="ab14c0b0487aeb3347b289eb58453e75d" args="(XAxiVdma *InstancePtr, u32 BdAddrPhys, u32 BdAddrVirt, int NumBds, u16 Direction)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int XAxiVdma_SetBdAddrs </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u32 </td> <td class="paramname"> <em>BdAddrPhys</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u32 </td> <td class="paramname"> <em>BdAddrVirt</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>NumBds</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Set BD addresses to be different.</p> <p>In some systems, it is convenient to put BDs into a certain region of the memory. This function enables that.</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>BdAddrPhys</em> </td><td>is the physical starting address for BDs </td></tr> <tr><td valign="top"></td><td valign="top"><em>BdAddrVirt</em> </td><td>is the Virtual starting address for BDs. For systems that do not use MMU, then virtual address is the same as physical address </td></tr> <tr><td valign="top"></td><td valign="top"><em>NumBds</em> </td><td>is the number of BDs to setup with. This is required to be the same as the number of frame stores for that channel </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the channel direction</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>XST_SUCCESS for a successful setup</li> <li>XST_DEVICE_BUSY if the DMA channel is not idle, BDs are still being used</li> <li>XST_INVALID_PARAM if parameters not valid</li> <li>XST_DEVICE_NOT_FOUND if the channel is invalid</li> </ul> </dd></dl> <p>We assume that the memory region starting from BdAddrPhys and BdAddrVirt are large enough to hold all the BDs. </p> </div> </div> <a class="anchor" id="aabe404c2a5c1483bc95be749c7540ba4"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_SetFrameCounter" ref="aabe404c2a5c1483bc95be749c7540ba4" args="(XAxiVdma *InstancePtr, XAxiVdma_FrameCounter *CfgPtr)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int XAxiVdma_SetFrameCounter </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma___frame_counter.html">XAxiVdma_FrameCounter</a> * </td> <td class="paramname"> <em>CfgPtr</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Set the frame counter and delay counter for both channels</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>CfgPtr</em> </td><td>is the pointer to the configuration structure</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>XST_SUCCESS if setup finishes successfully</li> <li>XST_INVALID_PARAM if the configuration structure has invalid values</li> <li>Others if setting channel frame counter fails</li> </ul> </dd></dl> <dl class="note"><dt><b>Note:</b></dt><dd>If channel is invalid, then do nothing on that channel </dd></dl> </div> </div> <a class="anchor" id="af331929e09bf1454dc2835b6ecc4ff30"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_SetFrmStore" ref="af331929e09bf1454dc2835b6ecc4ff30" args="(XAxiVdma *InstancePtr, u8 FrmStoreNum, u16 Direction)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int XAxiVdma_SetFrmStore </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u8 </td> <td class="paramname"> <em>FrmStoreNum</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Set the number of frame store buffers to use.</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the <a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> instance to operate on </td></tr> <tr><td valign="top"></td><td valign="top"><em>FrmStoreNum</em> </td><td>is the number of frame store buffers to use. </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the channel to work on, use XAXIVDMA_READ/WRITE</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>- XST_SUCCESS if operation is successful<ul> <li>XST_FAILURE if operation fails.</li> <li>XST_NO_FEATURE if access to FrameStore register is disabled </li> </ul> </dd></dl> <dl class="note"><dt><b>Note:</b></dt><dd>None </dd></dl> </div> </div> <a class="anchor" id="a741b4b1607c2ee71a3be16ddd8300656"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_SetLineBufThreshold" ref="a741b4b1607c2ee71a3be16ddd8300656" args="(XAxiVdma *InstancePtr, int LineBufThreshold, u16 Direction)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int XAxiVdma_SetLineBufThreshold </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>LineBufThreshold</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Configure Line Buffer Threshold</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>LineBufThreshold</em> </td><td>is the value to set threshold </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the DMA channel to work on</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>XST_SUCCESS if successful</li> <li>XST_FAILURE otherwise</li> <li>XST_NO_FEATURE if access to Threshold register is disabled </li> </ul> </dd></dl> </div> </div> <a class="anchor" id="a4f05c5a75fdf840517c17d687443510d"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_StartFrmCntEnable" ref="a4f05c5a75fdf840517c17d687443510d" args="(XAxiVdma *InstancePtr, u16 Direction)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void XAxiVdma_StartFrmCntEnable </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Start frame count enable on one channel</p> <p>This is needed to start limiting the number of frames to transfer so that software can check the data etc after hardware stops transfer.</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the channel to work on, use XAXIVDMA_READ/WRITE</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>None </dd></dl> </div> </div> <a class="anchor" id="af99dd7738b98367397831df26433843a"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_StartParking" ref="af99dd7738b98367397831df26433843a" args="(XAxiVdma *InstancePtr, int FrameIndex, u16 Direction)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int XAxiVdma_StartParking </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>FrameIndex</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Start parking mode on a certain frame</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>FrameIndex</em> </td><td>is the frame to park on </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the channel to work on, use XAXIVDMA_READ/WRITE</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>XST_SUCCESS if everything is fine</li> <li>XST_INVALID_PARAM if . channel is invalid . FrameIndex is invalid . Direction is invalid </li> </ul> </dd></dl> </div> </div> <a class="anchor" id="ab2646b6aeea2ff64c4b42319ffb49804"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_StartReadFrame" ref="ab2646b6aeea2ff64c4b42319ffb49804" args="(XAxiVdma *InstancePtr, XAxiVdma_DmaSetup *DmaConfigPtr)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int XAxiVdma_StartReadFrame </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma___dma_setup.html">XAxiVdma_DmaSetup</a> * </td> <td class="paramname"> <em>DmaConfigPtr</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Start a read operation</p> <p>Read corresponds to send data from memory to device</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>DmaConfigPtr</em> </td><td>is the pointer to the setup structure</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>XST_SUCCESS for a successful submission</li> <li>XST_DEVICE_BUSY if the DMA channel is not idle, BDs are still being used</li> <li>XST_INVAID_PARAM if parameters in config structure not valid</li> <li>XST_DEVICE_NOT_FOUND if the channel is invalid </li> </ul> </dd></dl> </div> </div> <a class="anchor" id="a1dc126d885558e03cf06a4d9c05d5668"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_StartWriteFrame" ref="a1dc126d885558e03cf06a4d9c05d5668" args="(XAxiVdma *InstancePtr, XAxiVdma_DmaSetup *DmaConfigPtr)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int XAxiVdma_StartWriteFrame </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma___dma_setup.html">XAxiVdma_DmaSetup</a> * </td> <td class="paramname"> <em>DmaConfigPtr</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Start a write operation</p> <p>Write corresponds to send data from device to memory</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>DmaConfigPtr</em> </td><td>is the pointer to the setup structure</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>XST_SUCCESS for a successful submission</li> <li>XST_DEVICE_BUSY if the DMA channel is not idle, BDs are still being used</li> <li>XST_INVAID_PARAM if parameters in config structure not valid</li> <li>XST_DEVICE_NOT_FOUND if the channel is invalid </li> </ul> </dd></dl> </div> </div> <a class="anchor" id="a8625bbc0ed0ab829f3153160c74bba44"></a><!-- doxytag: member="xaxivdma.c::XAxiVdma_StopParking" ref="a8625bbc0ed0ab829f3153160c74bba44" args="(XAxiVdma *InstancePtr, u16 Direction)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void XAxiVdma_StopParking </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_x_axi_vdma.html">XAxiVdma</a> * </td> <td class="paramname"> <em>InstancePtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">u16 </td> <td class="paramname"> <em>Direction</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Exit parking mode, the channel will return to circular buffer mode</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>InstancePtr</em> </td><td>is the pointer to the DMA engine to work on </td></tr> <tr><td valign="top"></td><td valign="top"><em>Direction</em> </td><td>is the channel to work on, use XAXIVDMA_READ/WRITE</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>None</dd></dl> <dl class="note"><dt><b>Note:</b></dt><dd>If channel is invalid, then do nothing </dd></dl> </div> </div> </div> <p class="Copyright"> Copyright © 1995-2014 Xilinx, Inc. All rights reserved. </p> </body> </html>