Esempio n. 1
0
/*******************************************************************************
* mvDmaStopAll - Stop any IDMA activity.
*
* DESCRIPTION:
*		This function stops any DMA activity.
*
* INPUT:
*       None.
*
* OUTPUT:
*       None.
*
* RETURN:
*       None.
*
*******************************************************************************/
MV_VOID mvDmaStopAll(MV_VOID)
{
	MV_U32      dmaChanNum;

	for(dmaChanNum = 0; dmaChanNum < MV_IDMA_MAX_CHAN; dmaChanNum++)
	{
		mvDmaCommandSet(dmaChanNum, MV_STOP);
	}
    
	return;
}
Esempio n. 2
0
/*******************************************************************************
* mvDmaInit - Initialize IDMA engine
*
* DESCRIPTION:
*               This function initialize IDMA unit.
* INPUT:
*       None.
*
* OUTPUT:
*       None.
*
* RETURN:
*       MV_ERROR if setting fail.
*******************************************************************************/
MV_VOID mvDmaHalInit(MV_U32 dmaChanNum)
{
	MV_U32 i;

	/* Abort any DMA activity */
	for (i = 0; i < dmaChanNum; i++) {
		mvDmaCommandSet(i, MV_STOP);

#if defined(MV_CPU_LE) || defined(MV78XX0)
		/* The following must be set */
		mvDmaCtrlHighSet(i, (ICCHR_ENDIAN_LITTLE
#if defined(MV_CPU_LE)
				     | ICCHR_DESC_BYTE_SWAP_EN
#endif /* MV_CPU_LE */
				 ));
#endif /* MV_CPU_LE || MV78XX0 */
	}
	MV_REG_WRITE(IDMA_CAUSE_REG, 0);
}
Esempio n. 3
0
/*******************************************************************************
* mvDmaInit - Initialize IDMA engine
*
* DESCRIPTION:
*		This function initialize IDMA unit. It set the default address decode
*		windows of the unit.
*
* INPUT:
*       None.
*
* OUTPUT:
*       None.
*
* RETURN:
*       MV_ERROR if setting fail.
*******************************************************************************/
MV_STATUS mvDmaInit (MV_VOID)
{
    	MV_U32      winNum, status;
	MV_U32      dmaChanNum;
	MV_DMA_DEC_WIN idmaWin;
	MV_CPU_DEC_WIN cpuAddrDecWin;
	MV_U32		winPrioIndex=0;

	/* Initiate IDMA address decode */

	/* First disable all address decode windows */
	MV_REG_WRITE(IDMA_BASE_ADDR_ENABLE_REG, IBAER_ENABLE_MASK);
	
	
	/* Go through all windows in user table until table terminator			*/
	for (winNum = 0; ((dmaAddrDecPrioTap[winPrioIndex] != TBL_TERM) && 
					  (winNum < IDMA_MAX_ADDR_DEC_WIN)); )
    {
        /* first get attributes from CPU If */
		status = mvCpuIfTargetWinGet(dmaAddrDecPrioTap[winPrioIndex], 
									 &cpuAddrDecWin);
        if(MV_NO_SUCH == status)
        {
            winPrioIndex++;
            continue;
        }
		if (MV_OK != status)
		{
			mvOsPrintf("mvDmaInit: ERR. mvCpuIfTargetWinGet failed\n");
			return MV_ERROR;
		}

        if (cpuAddrDecWin.enable == MV_TRUE)
		{
			idmaWin.addrWin.baseHigh = cpuAddrDecWin.addrWin.baseHigh;
			idmaWin.addrWin.baseLow = cpuAddrDecWin.addrWin.baseLow;
			idmaWin.addrWin.size = cpuAddrDecWin.addrWin.size;
			idmaWin.enable = MV_TRUE;
		    idmaWin.target = dmaAddrDecPrioTap[winPrioIndex];

		    if(MV_OK != mvDmaWinSet(winNum, &idmaWin))
		    {
			    return MV_ERROR;
		    }
		    winNum++;
		}
		winPrioIndex++;			
    }

	/* Abort any DMA activity */
	for(dmaChanNum = 0; dmaChanNum < MV_IDMA_MAX_CHAN; dmaChanNum++)
	{
        mvDmaCommandSet(dmaChanNum, MV_STOP);
	
#if defined(MV_CPU_LE)
		/* The following must be set */
		mvDmaCtrlHighSet(dmaChanNum, 
						 (ICCHR_ENDIAN_LITTLE | ICCHR_DESC_BYTE_SWAP_EN));
#endif
	}
    MV_REG_WRITE( IDMA_CAUSE_REG, 0);   

    return MV_OK;
}