/*
 * @file hv_drv_Dma.h
 * @brief Header file of misc module.
 *
 * @verbatim
 * ==============================================================================
 *                        ##### How to use #####
 * ==============================================================================
 * (+) Use ()
 *
 * @endverbatim
 * @author HiView SoC Software Team
 * @version 1.0.0
 * @date 2023-05-11
 */

#ifndef _HV_DRV_DMA_H
#define _HV_DRV_DMA_H

#include "hv_cal_Dma.h"


/** @defgroup dma dma
 *  dma mem functions
 *  @{
 */
/** @brief dma初始化，选择通道和设置回调函数。type类型0:1个src对应1个dst，size可能超过block_ts,函数内部生成linklist，对应调用Hv_Drv_Dma_MemMove。
 * type类型1：多个src对应1个dst，size可能超过block_ts,函数内部生成linklist，对应调用Hv_Drv_Dma_MemMoveArray。
 *  @self channelparam no.
 *  @param uiType 1：multy src or not。
 */
void Hv_Drv_Dma_Init(DmaPortChannel enPortChannelNum,void* Hv_Dma_Callback);

/** @brief dma move。
 *  @self channelparam no.
 *  @param SrcAddr src address。
 *  @param DstAddr dst address。
 *  @param Size size to move。
 */
void Hv_Drv_Dma_MemMove(DmaPortChannel enPortChannelNum, UINT32 uiSrcAddr, UINT32 uiDstAddr, UINT32 uiSize);

/** @brief dma move with multy src。
 *  @self channelparam no.
 *  @param SrcArray src1 address， src1 size， src2 address， src2 size...。
 *  @param ArraySize src number。
 *  @param DstAddr dst address。
 */
void Hv_Drv_Dma_MemMoveArray(DmaPortChannel enPortChannelNum, UINT32 *puiSrcArray, UINT32 uiArraySize, UINT32 uiDstAddr);

/** @} */
#endif
