Software Drivers

xaxidma.h File Reference

#include "xaxidma_bdring.h"
#include <string.h>
#include "xil_cache.h"

Classes

struct  XAxiDma
struct  XAxiDma_Config

Defines

#define XAxiDma_GetTxRing(InstancePtr)   (&((InstancePtr)->TxBdRing))
#define XAxiDma_GetRxRing(InstancePtr)   (&((InstancePtr)->RxBdRing[0]))
#define XAxiDma_GetRxIndexRing(InstancePtr, RingIndex)   (&((InstancePtr)->RxBdRing[RingIndex]))
#define XAxiDma_HasSg(InstancePtr)   ((InstancePtr)->HasSg) ? TRUE : FALSE
#define XAxiDma_IntrEnable(InstancePtr, Mask, Direction)
#define XAxiDma_IntrGetEnabled(InstancePtr, Direction)
#define XAxiDma_IntrDisable(InstancePtr, Mask, Direction)
#define XAxiDma_IntrGetIrq(InstancePtr, Direction)
#define XAxiDma_IntrAckIrq(InstancePtr, Mask, Direction)

Functions

XAxiDma_ConfigXAxiDma_LookupConfig (u32 DeviceId)
int XAxiDma_CfgInitialize (XAxiDma *InstancePtr, XAxiDma_Config *Config)
void XAxiDma_Reset (XAxiDma *InstancePtr)
int XAxiDma_ResetIsDone (XAxiDma *InstancePtr)
int XAxiDma_Pause (XAxiDma *InstancePtr)
int XAxiDma_Resume (XAxiDma *InstancePtr)
u32 XAxiDma_Busy (XAxiDma *InstancePtr, int Direction)
int XAxiDma_SimpleTransfer (XAxiDma *InstancePtr, u32 BuffAddr, u32 Length, int Direction)
int XAxiDma_SelectKeyHole (XAxiDma *InstancePtr, int Direction, int Select)
int XAxiDma_SelectCyclicMode (XAxiDma *InstancePtr, int Direction, int Select)

Detailed Description


Define Documentation

#define XAxiDma_GetRxIndexRing ( InstancePtr,
RingIndex   )     (&((InstancePtr)->RxBdRing[RingIndex]))

Get Receive (Rx) Ring ptr of a Index

Warning: This has a different API than the LLDMA driver. It now returns the pointer to the BD ring.

Parameters:
InstancePtr is a pointer to the DMA engine instance to be worked on.
RingIndex is the channel Index.
Returns:
Pointer to the Rx Ring
Note:
C-style signature: XAxiDma_BdRing * XAxiDma_GetRxIndexRing(XAxiDma * InstancePtr, int RingIndex) This function is used only when system is configured as SG mode
#define XAxiDma_GetRxRing ( InstancePtr   )     (&((InstancePtr)->RxBdRing[0]))

Get Receive (Rx) Ring ptr

Warning: This has a different API than the LLDMA driver. It now returns the pointer to the BD ring.

Parameters:
InstancePtr is a pointer to the DMA engine instance to be worked on.
Returns:
Pointer to the Rx Ring
Note:
C-style signature: XAxiDma_BdRing * XAxiDma_GetRxRing(XAxiDma * InstancePtr) This function is used only when system is configured as SG mode
#define XAxiDma_GetTxRing ( InstancePtr   )     (&((InstancePtr)->TxBdRing))

Get Transmit (Tx) Ring ptr

Warning: This has a different API than the LLDMA driver. It now returns the pointer to the BD ring.

Parameters:
InstancePtr is a pointer to the DMA engine instance to be worked on.
Returns:
Pointer to the Tx Ring
Note:
C-style signature: XAxiDma_BdRing * XAxiDma_GetTxRing(XAxiDma * InstancePtr) This function is used only when system is configured as SG mode
#define XAxiDma_HasSg ( InstancePtr   )     ((InstancePtr)->HasSg) ? TRUE : FALSE

This function checks whether system is configured as Simple or Scatter Gather mode

Parameters:
InstancePtr is a pointer to the DMA engine instance to be worked on.
Returns:
  • TRUE if configured as SG mode
  • FALSE if configured as simple mode
Note:
None
#define XAxiDma_IntrAckIrq ( InstancePtr,
Mask,
Direction   ) 
Value:
XAxiDma_WriteReg((InstancePtr)->RegBase + \
                        (XAXIDMA_RX_OFFSET * Direction), XAXIDMA_SR_OFFSET, \
                        (Mask) & XAXIDMA_IRQ_ALL_MASK)

This function acknowledges the interrupts that are specified in Mask

Parameters:
InstancePtr is the driver instance we are working on
Mask is the mask for the interrupts to be acknowledge
Direction is DMA transfer direction, valid values are

  • XAXIDMA_DMA_TO_DEVICE.
  • XAXIDMA_DEVICE_TO_DMA.
Returns:
None
Note:
None.
#define XAxiDma_IntrDisable ( InstancePtr,
Mask,
Direction   ) 
Value:
XAxiDma_WriteReg((InstancePtr)->RegBase + \
                        (XAXIDMA_RX_OFFSET * Direction), XAXIDMA_CR_OFFSET, \
                        (XAxiDma_ReadReg((InstancePtr)->RegBase + \
                        (XAXIDMA_RX_OFFSET * Direction), XAXIDMA_CR_OFFSET)) \
                        & ~(Mask & XAXIDMA_IRQ_ALL_MASK))

This function disables interrupts specified by the Mask. Interrupts that are not in the mask are not affected.

Parameters:
InstancePtr is the driver instance we are working on
Mask is the mask for the interrupts to be disabled
Direction is DMA transfer direction, valid values are

  • XAXIDMA_DMA_TO_DEVICE.
  • XAXIDMA_DEVICE_TO_DMA.
Returns:
None
Note:
None
#define XAxiDma_IntrEnable ( InstancePtr,
Mask,
Direction   ) 
Value:
XAxiDma_WriteReg((InstancePtr)->RegBase + \
                        (XAXIDMA_RX_OFFSET * Direction), XAXIDMA_CR_OFFSET, \
                        (XAxiDma_ReadReg((InstancePtr)->RegBase + \
                        (XAXIDMA_RX_OFFSET * Direction), XAXIDMA_CR_OFFSET)) \
                        | (Mask & XAXIDMA_IRQ_ALL_MASK))

This function enables interrupts specified by the Mask in specified direction, Interrupts that are not in the mask are not affected.

Parameters:
InstancePtr is the driver instance we are working on
Mask is the mask for the interrupts to be enabled
Direction is DMA transfer direction, valid values are

  • XAXIDMA_DMA_TO_DEVICE.
  • XAXIDMA_DEVICE_TO_DMA.
Returns:
None
Note:
None
#define XAxiDma_IntrGetEnabled ( InstancePtr,
Direction   ) 
Value:
XAxiDma_ReadReg((InstancePtr)->RegBase + \
                        (XAXIDMA_RX_OFFSET * Direction), XAXIDMA_CR_OFFSET) &\
                                                        XAXIDMA_IRQ_ALL_MASK)

This function gets the mask for the interrupts that are currently enabled

Parameters:
InstancePtr is the driver instance we are working on
Direction is DMA transfer direction, valid values are

  • XAXIDMA_DMA_TO_DEVICE.
  • XAXIDMA_DEVICE_TO_DMA.
Returns:
The bit mask for the interrupts that are currently enabled
Note:
None
#define XAxiDma_IntrGetIrq ( InstancePtr,
Direction   ) 
Value:
(XAxiDma_ReadReg((InstancePtr)->RegBase + \
                        (XAXIDMA_RX_OFFSET * Direction), XAXIDMA_SR_OFFSET) &\
                                                        XAXIDMA_IRQ_ALL_MASK)

This function gets the interrupts that are asserted.

Parameters:
InstancePtr is the driver instance we are working on
Direction is DMA transfer direction, valid values are

  • XAXIDMA_DMA_TO_DEVICE.
  • XAXIDMA_DEVICE_TO_DMA.
Returns:
The bit mask for the interrupts asserted.
Note:
None

Function Documentation

u32 XAxiDma_Busy ( XAxiDma InstancePtr,
int  Direction 
)

This function checks whether specified DMA channel is busy

Parameters:
InstancePtr is the driver instance we are working on
Direction is DMA transfer direction, valid values are

  • XAXIDMA_DMA_TO_DEVICE.
  • XAXIDMA_DEVICE_TO_DMA.
Returns:
- TRUE if channel is busy
  • FALSE if channel is idle
Note:
None.
int XAxiDma_CfgInitialize ( XAxiDma InstancePtr,
XAxiDma_Config Config 
)

This function initializes a DMA engine. This function must be called prior to using a DMA engine. Initializing a engine includes setting up the register base address, setting up the instance data, and ensuring the hardware is in a quiescent state.

Parameters:
InstancePtr is a pointer to the DMA engine instance to be worked on.
Config is a pointer to an XAxiDma_Config structure. It contains the information about the hardware build, including base address,and whether status control stream (StsCntrlStrm), MM2S and S2MM are included in the build.
Returns:
  • XST_SUCCESS for successful initialization
  • XST_INVALID_PARAM if pointer to the configuration structure is NULL
  • XST_DMA_ERROR if reset operation failed at the end of initialization
Note:
We assume the hardware building tool will check and error out for a hardware build that has no transfer channels.
XAxiDma_Config* XAxiDma_LookupConfig ( u32  DeviceId  ) 

Look up the hardware configuration for a device instance

Parameters:
DeviceId is the unique device ID of the device to lookup for
Returns:
The configuration structure for the device. If the device ID is not found,a NULL pointer is returned.
Note:
None
int XAxiDma_Pause ( XAxiDma InstancePtr  ) 

Pause DMA transactions on both channels.

If the engine is running and doing transfers, this function does not stop the DMA transactions immediately, because then hardware will throw away our previously queued transfers. All submitted transfers will finish. Transfers submitted after this function will not start until XAxiDma_BdRingStart() or XAxiDma_Resume() is called.

Parameters:
InstancePtr is a pointer to the DMA engine instance to be worked on.
Returns:
  • XST_SUCCESS if successful
  • XST_NOT_SGDMA, if the driver instance is not initialized
Note:
None
void XAxiDma_Reset ( XAxiDma InstancePtr  ) 

Reset both TX and RX channels of a DMA engine.

Reset one channel resets the whole AXI DMA engine.

Any DMA transaction in progress will finish gracefully before engine starts reset. Any other transactions that have been submitted to hardware will be discarded by the hardware.

Parameters:
InstancePtr is a pointer to the DMA engine instance to be worked on.
Returns:
None
Note:
After the reset:
  • All interrupts are disabled.
  • Engine is halted
int XAxiDma_ResetIsDone ( XAxiDma InstancePtr  ) 

Check whether reset is done

Parameters:
InstancePtr is a pointer to the DMA engine instance to be worked on.
Returns:
  • 1 if reset is done.
  • 0 if reset is not done
Note:
None
int XAxiDma_Resume ( XAxiDma InstancePtr  ) 

Resume DMA transactions on both channels.

Parameters:
InstancePtr is a pointer to the DMA engine instance to be worked on.
Returns:
  • XST_SUCCESS for success
  • XST_NOT_SGDMA if the driver instance has not been initialized
  • XST_DMA_ERROR if one of the channels fails to start
Note:
None
int XAxiDma_SelectCyclicMode ( XAxiDma InstancePtr,
int  Direction,
int  Select 
)

This function Enable or Disable Cyclic Mode Feature

Parameters:
InstancePtr is the driver instance we are working on
Direction is DMA transfer direction, valid values are

  • XAXIDMA_DMA_TO_DEVICE.
  • XAXIDMA_DEVICE_TO_DMA. Select is the option to enable (TRUE) or disable (FALSE).
Returns:
- XST_SUCCESS for success
Note:
None.
int XAxiDma_SelectKeyHole ( XAxiDma InstancePtr,
int  Direction,
int  Select 
)

This function Enable or Disable KeyHole Feature

Parameters:
InstancePtr is the driver instance we are working on
Direction is DMA transfer direction, valid values are

  • XAXIDMA_DMA_TO_DEVICE.
  • XAXIDMA_DEVICE_TO_DMA. Select is the option to enable (TRUE) or disable (FALSE).
Returns:
- XST_SUCCESS for success
Note:
None.
int XAxiDma_SimpleTransfer ( XAxiDma InstancePtr,
u32  BuffAddr,
u32  Length,
int  Direction 
)

This function does one simple transfer submission

It checks in the following sequence:

  • if engine is busy, cannot submit
  • if engine is in SG mode , cannot submit
Parameters:
InstancePtr is the pointer to the driver instance
BuffAddr is the address of the source/destination buffer
Length is the length of the transfer
Direction is DMA transfer direction, valid values are

  • XAXIDMA_DMA_TO_DEVICE.
  • XAXIDMA_DEVICE_TO_DMA.
Returns:
  • XST_SUCCESS for success of submission
  • XST_FAILURE for submission failure, maybe caused by: Another simple transfer is still going
  • XST_INVALID_PARAM if:Length out of valid range [1:8M] Or, address not aligned when DRE is not built in
Note:
This function is used only when system is configured as Simple mode.