コード例 #1
0
static MV_STATUS mvXorInitWinsUnit(MV_U32 unit, MV_UNIT_WIN_INFO *addrWinMap)
{
	MV_U32 winNum;
	MV_UNIT_WIN_INFO *addrDecWin;
	MV_U32 winPrioIndex = 0;

	/* Initiate XOR address decode */

	/* First disable all address decode windows */
	for (winNum = 0; winNum < XOR_MAX_ADDR_DEC_WIN; winNum++)
		mvXorTargetWinEnable(unit, winNum, MV_FALSE);

	/* Go through all windows in user table until table terminator                      */
	for (winNum = 0; ((xorAddrDecPrioTap[winPrioIndex] != TBL_TERM) && (winNum < XOR_MAX_ADDR_DEC_WIN));) {
		addrDecWin = &addrWinMap[xorAddrDecPrioTap[winPrioIndex]];
		if (addrDecWin->enable == MV_TRUE) {
			if (MV_OK != mvXorTargetWinWrite(unit, winNum, addrDecWin)) {
				DB(mvOsPrintf("mvXorInit: ERR. mvDmaTargetWinSet failed\n"));
				return MV_ERROR;
			}
			winNum++;
		}
		winPrioIndex++;
	}

	return MV_OK;
}
コード例 #2
0
ファイル: mvSysXor.c プロジェクト: KevinCabana/xpenology
static MV_STATUS mvXorInitWinsUnit (MV_U32 unit)
{
	MV_U32         winNum;
	MV_XOR_DEC_WIN addrDecWin;
	MV_CPU_DEC_WIN cpuAddrDecWin;
	MV_U32          status;
	MV_U32			winPrioIndex=0;

	/* Initiate XOR address decode */

	/* First disable all address decode windows */
	for(winNum = 0; winNum < XOR_MAX_ADDR_DEC_WIN; winNum++)
	{
	    mvXorTargetWinEnable(unit,winNum, MV_FALSE);
	}
	
	/* Go through all windows in user table until table terminator			*/
	for (winNum = 0; ((xorAddrDecPrioTap[winPrioIndex] != TBL_TERM) &&
					(winNum < XOR_MAX_ADDR_DEC_WIN));)
	{
		/* first get attributes from CPU If */
		status = mvCpuIfTargetWinGet(xorAddrDecPrioTap[winPrioIndex], 
									 &cpuAddrDecWin);

        if(MV_NO_SUCH == status)
        {
            winPrioIndex++;
            continue;
        }
		if (MV_OK != status)
		{
            mvOsPrintf("%s: ERR. mvCpuIfTargetWinGet failed\n", __FUNCTION__);
			return MV_ERROR;
		}

	
        if (cpuAddrDecWin.enable == MV_TRUE)
		{

			addrDecWin.target           = xorAddrDecPrioTap[winPrioIndex];
			addrDecWin.addrWin.baseLow  = cpuAddrDecWin.addrWin.baseLow; 
			addrDecWin.addrWin.baseHigh = cpuAddrDecWin.addrWin.baseHigh; 
			addrDecWin.addrWin.size     = cpuAddrDecWin.addrWin.size;    
			addrDecWin.enable           = MV_TRUE;
	
			if (MV_OK != mvXorTargetWinSet(unit,winNum, &addrDecWin))
			{
				DB(mvOsPrintf("mvXorInit: ERR. mvDmaTargetWinSet failed\n"));
				return MV_ERROR;
			}
			winNum++;
		}
		winPrioIndex++;	
        
	}
    
	return MV_OK;
}