/******************************************************************************* * mvCesaWinGet - Get TDMA target address window. * * DESCRIPTION: * Get TDMA target address window. * * INPUT: * winNum - TDMA target address decode window number. * * OUTPUT: * pDecWin - TDMA target window data structure. * * RETURN: * MV_ERROR if register parameters are invalid. * *******************************************************************************/ MV_STATUS mvCesaWinGet(MV_U32 winNum, MV_DEC_WIN *pDecWin) { MV_DEC_WIN_PARAMS winParam; MV_U32 sizeReg, baseReg; /* Parameter checking */ if (winNum >= MV_CESA_TDMA_ADDR_DEC_WIN) { mvOsPrintf("%s : ERR. Invalid winNum %d\n", __FUNCTION__, winNum); return MV_NOT_SUPPORTED; } baseReg = MV_REG_READ( MV_CESA_TDMA_BASE_ADDR_REG(winNum) ); sizeReg = MV_REG_READ( MV_CESA_TDMA_WIN_CTRL_REG(winNum) ); /* Check if window is enabled */ if(sizeReg & MV_CESA_TDMA_WIN_ENABLE_MASK) { pDecWin->enable = MV_TRUE; /* Extract window parameters from registers */ winParam.targetId = (sizeReg & MV_CESA_TDMA_WIN_TARGET_MASK) >> MV_CESA_TDMA_WIN_TARGET_OFFSET; winParam.attrib = (sizeReg & MV_CESA_TDMA_WIN_ATTR_MASK) >> MV_CESA_TDMA_WIN_ATTR_OFFSET; winParam.size = (sizeReg & MV_CESA_TDMA_WIN_SIZE_MASK) >> MV_CESA_TDMA_WIN_SIZE_OFFSET; winParam.baseAddr = (baseReg & MV_CESA_TDMA_WIN_BASE_MASK); /* Translate the decode window parameters to address decode struct */ if (MV_OK != mvCtrlParamsToAddrDec(&winParam, pDecWin)) { mvOsPrintf("Failed to translate register parameters to CESA address" \ " decode window structure\n"); return MV_ERROR; } }
/******************************************************************************* * mvCesaWinRead. * * DESCRIPTION: * Read TDMA target address window. * * INPUT: * winNum - TDMA target address decode window number. * * OUTPUT: * pDecWin - TDMA target window data structure. * * RETURN: * MV_BAD_PARAM if winNum is invalid. * MV_ERROR otherwise. * *******************************************************************************/ MV_STATUS mvCesaWinRead(MV_U32 winNum, MV_UNIT_WIN_INFO *pDecWin) { MV_U32 sizeReg, baseReg; MV_U32 size; /* Parameter checking */ if (winNum >= MV_CESA_TDMA_ADDR_DEC_WIN) { mvOsPrintf("%s : ERR. Invalid winNum %d\n", __FUNCTION__, winNum); return MV_NOT_SUPPORTED; } baseReg = MV_REG_READ( MV_CESA_TDMA_BASE_ADDR_REG(winNum) ); sizeReg = MV_REG_READ( MV_CESA_TDMA_WIN_CTRL_REG(winNum) ); /* Check if window is enabled */ if(sizeReg & MV_CESA_TDMA_WIN_ENABLE_MASK) { pDecWin->enable = MV_TRUE; /* Extract window parameters from registers */ pDecWin->targetId = (sizeReg & MV_CESA_TDMA_WIN_TARGET_MASK) >> MV_CESA_TDMA_WIN_TARGET_OFFSET; pDecWin->attrib = (sizeReg & MV_CESA_TDMA_WIN_ATTR_MASK) >> MV_CESA_TDMA_WIN_ATTR_OFFSET; size = (sizeReg & MV_CESA_TDMA_WIN_SIZE_MASK) >> MV_CESA_TDMA_WIN_SIZE_OFFSET; pDecWin->addrWin.size = (size + 1) * (1 << MV_CESA_TDMA_WIN_SIZE_OFFSET); pDecWin->addrWin.baseLow = (baseReg & MV_CESA_TDMA_WIN_BASE_MASK); pDecWin->addrWin.baseHigh = 0; }