/***************************************************************************** * 函 数 名 : BSP_IPF_GetDlRdNum * * 功能描述 : 该接口用于获取下行通道中可以读取RD个数 * * 输入参数 : * * 输出参数 : * * 返 回 值 : unsigned int 可以读取的RD数目 * * 修改记录 :2012年11月29日 z00212992 创建 *****************************************************************************/ unsigned int BSP_IPF_GetDlRdNum(void) { SOC_IPF_CH1_DQ_DEPTH_UNION unRdqDepth; /* 读取上行RD深度寄存器 */ unRdqDepth.value = 0; IPF_REG_READ(SOC_IPF_CH1_DQ_DEPTH_ADDR(IPF_REGBASE_ADR), unRdqDepth.value); return unRdqDepth.reg.dl_rdq_depth; }
/***************************************************************************** * 函 数 名 : BSP_IPF_GetDlRd * * 功能描述 : 该接口用于读取下行BD, 支持一次读取多个BD * * 输入参数 : unsigned int* pu32Num * IPF_RD_DESC_S *pstRd * * 输出参数 : unsigned int* pu32Num 实际读取的RD数目 * * 返 回 值 : IPF_SUCCESS 操作成功 * IPF_ERROR 操作失败 * * 修改记录 :2011年11月30日 鲁婷 创建 * 1.修改日期 : 2012年8月4日 * 修改作者 : z00212992 * 修改记录 : 源地址内存释放上移修改 *****************************************************************************/ void BSP_IPF_GetDlRd(unsigned int* pu32Num, IPF_RD_DESC_S *pstRd) { SOC_IPF_CH1_DQ_DEPTH_UNION unDqDepth; unsigned int u32CdqRptr = 0; unsigned int u32RdqRptr = 0; unsigned int u32RdqDepth = 0; unsigned int u32Num = 0; unsigned int i = 0; if((NULL == pu32Num) || (NULL == pstRd)) { IPF_PRINT_ERROR("parameter is error\n"); return; } /* 读取RD深度 */ unDqDepth.value = 0; IPF_REG_READ(SOC_IPF_CH1_DQ_DEPTH_ADDR(IPF_REGBASE_ADR), unDqDepth.value); u32RdqDepth = unDqDepth.reg.dl_rdq_depth; u32Num = (u32RdqDepth < *pu32Num)?u32RdqDepth:*pu32Num; if(u32Num > 0) { g_stIPFDebugInfo->u32DlRdNum += u32Num; for(i = 0; i < u32Num; i++) { /* 读取RD读指针 */ IPF_REG_READ(SOC_IPF_CH1_RDQ_RPTR_ADDR(IPF_REGBASE_ADR), u32RdqRptr); if(u32RdqRptr >= IPF_DLRD_DESC_SIZE) { IPF_PRINT_ERROR("u32RdqRptr = %d\n", u32RdqRptr); } /* 获取RD */ pstRd[i].u16Attribute = g_stIpfDl.pstIpfRDQ[u32RdqRptr].u16Attribute; pstRd[i].u16PktLen = g_stIpfDl.pstIpfRDQ[u32RdqRptr].u16PktLen; pstRd[i].u16Result = g_stIpfDl.pstIpfRDQ[u32RdqRptr].u16Result; pstRd[i].u32InPtr = g_stIpfDl.pstIpfRDQ[u32RdqRptr].u32InPtr; pstRd[i].u32OutPtr = g_stIpfDl.pstIpfRDQ[u32RdqRptr].u32OutPtr; if((0 == pstRd[i].u32OutPtr)/* || (0x55555555 == pstRd[i].u32OutPtr) || (0xAAAAAAAA == pstRd[i].u32OutPtr)*/) { IPF_PRINT_ERROR("invalid rd of dl\n"); IPF_Assert(BSP_ERR_IPF_INVALID_DLRD); } pstRd[i].u16UsrField1 = g_stIpfDl.pstIpfRDQ[u32RdqRptr].u16UsrField1; pstRd[i].u32UsrField2 = g_stIpfDl.pstIpfRDQ[u32RdqRptr].u32UsrField2; pstRd[i].u32UsrField3 = g_stIpfDl.pstIpfRDQ[u32RdqRptr].u32UsrField3; u32RdqRptr = ((u32RdqRptr+1) < IPF_DLRD_DESC_SIZE)?(u32RdqRptr+1):0; /* 更新RD读指针 */ IPF_REG_WRITE(SOC_IPF_CH1_RDQ_RPTR_ADDR(IPF_REGBASE_ADR), u32RdqRptr); /* 更新CD读指针 */ u32CdqRptr = (unsigned int)((char *)(HISI_VA_ADDRESS(pstRd[i].u32InPtr)) - (char *)g_stIpfDl.pstIpfCDQ)/sizeof(IPF_CD_DESC_S); while(g_stIpfDl.pstIpfCDQ[u32CdqRptr].u16Attribute != 1) { /* 将释放的CD清0 */ g_stIpfDl.pstIpfCDQ[u32CdqRptr].u16Attribute = 0; g_stIpfDl.pstIpfCDQ[u32CdqRptr].u16PktLen = 0; g_stIpfDl.pstIpfCDQ[u32CdqRptr].u32Ptr = 0; u32CdqRptr = ((u32CdqRptr+1) < IPF_DLCD_DESC_SIZE)?(u32CdqRptr+1):0; } u32CdqRptr = ((u32CdqRptr+1) < IPF_DLCD_DESC_SIZE)?(u32CdqRptr+1):0; *(g_stIpfDl.u32IpfCdRptr) = u32CdqRptr; } } *pu32Num = u32Num; }
BSP_S32 BSP_IPF_CHInfo(IPF_CHANNEL_TYPE_E eChnType) { BSP_U32 u32ChanCtrlInfo = 0; BSP_U32 u32ChanStateInfo = 0; BSP_U32 u32BdqBaseAddr = 0; BSP_U32 u32BdqDepth = 0; BSP_U32 u32BdqWptr = 0; BSP_U32 u32BdqRptr = 0; BSP_U32 u32BdqWaddr = 0; BSP_U32 u32BdqRaddr = 0; BSP_U32 u32RdqBaseAddr = 0; BSP_U32 u32RdqDepth = 0; BSP_U32 u32RdqRptr = 0; BSP_U32 u32RdqWptr = 0; BSP_U32 u32RdqWaddr = 0; BSP_U32 u32RdqRaddr = 0; BSP_U32 u32Depth = 0; BSP_U32 u32AdqCtrlInfo = 0; BSP_U32 u32Adq0BaseAddr = 0; BSP_U32 u32Adq0StateInfo = 0; BSP_U32 u32Adq0Wptr = 0; BSP_U32 u32Adq0Rptr = 0; BSP_U32 u32Adq1BaseAddr = 0; BSP_U32 u32Adq1StateInfo = 0; BSP_U32 u32Adq1Wptr = 0; BSP_U32 u32Adq1Rptr = 0; switch (eChnType) { case IPF_CHANNEL_UP: IPF_REG_READ(SOC_IPF_CH0_CTRL_ADDR(IPF_REGBASE_ADR), u32ChanCtrlInfo); IPF_REG_READ(SOC_IPF_CH0_STATE_ADDR(IPF_REGBASE_ADR), u32ChanStateInfo); IPF_REG_READ(SOC_IPF_CH0_BDQ_BADDR_ADDR(IPF_REGBASE_ADR), u32BdqBaseAddr); IPF_REG_READ(SOC_IPF_CH0_BDQ_SIZE_ADDR(IPF_REGBASE_ADR), u32BdqDepth); IPF_REG_READ(SOC_IPF_CH0_BDQ_WPTR_ADDR(IPF_REGBASE_ADR), u32BdqWptr); IPF_REG_READ(SOC_IPF_CH0_BDQ_RPTR_ADDR(IPF_REGBASE_ADR), u32BdqRptr); IPF_REG_READ(SOC_IPF_CH0_BDQ_WADDR_ADDR(IPF_REGBASE_ADR), u32BdqWaddr); IPF_REG_READ(SOC_IPF_CH0_BDQ_RADDR_ADDR(IPF_REGBASE_ADR), u32BdqRaddr); IPF_REG_READ(SOC_IPF_CH0_RDQ_BADDR_ADDR(IPF_REGBASE_ADR), u32RdqBaseAddr); IPF_REG_READ(SOC_IPF_CH0_RDQ_SIZE_ADDR(IPF_REGBASE_ADR), u32RdqDepth); IPF_REG_READ(SOC_IPF_CH0_RDQ_RPTR_ADDR(IPF_REGBASE_ADR), u32RdqRptr); IPF_REG_READ(SOC_IPF_CH0_RDQ_WPTR_ADDR(IPF_REGBASE_ADR), u32RdqWptr); IPF_REG_READ(SOC_IPF_CH0_RDQ_WADDR_ADDR(IPF_REGBASE_ADR), u32RdqWaddr); IPF_REG_READ(SOC_IPF_CH0_RDQ_RADDR_ADDR(IPF_REGBASE_ADR), u32RdqRaddr); IPF_REG_READ(SOC_IPF_CH0_DQ_DEPTH_ADDR(IPF_REGBASE_ADR), u32Depth); IPF_REG_READ(SOC_IPF_CH0_ADQ_CTRL_ADDR(IPF_REGBASE_ADR), u32AdqCtrlInfo); IPF_REG_READ(SOC_IPF_CH0_ADQ0_BASE_ADDR(IPF_REGBASE_ADR), u32Adq0BaseAddr); IPF_REG_READ(SOC_IPF_CH0_ADQ0_STAT_ADDR(IPF_REGBASE_ADR), u32Adq0StateInfo); IPF_REG_READ(SOC_IPF_CH0_ADQ0_WPTR_ADDR(IPF_REGBASE_ADR), u32Adq0Wptr); IPF_REG_READ(SOC_IPF_CH0_ADQ0_RPTR_ADDR(IPF_REGBASE_ADR), u32Adq0Rptr); IPF_REG_READ(SOC_IPF_CH0_ADQ1_BASE_ADDR(IPF_REGBASE_ADR), u32Adq1BaseAddr); IPF_REG_READ(SOC_IPF_CH0_ADQ1_STAT_ADDR(IPF_REGBASE_ADR), u32Adq1StateInfo); IPF_REG_READ(SOC_IPF_CH0_ADQ1_WPTR_ADDR(IPF_REGBASE_ADR), u32Adq1Wptr); IPF_REG_READ(SOC_IPF_CH0_ADQ1_RPTR_ADDR(IPF_REGBASE_ADR), u32Adq1Rptr); break; case IPF_CHANNEL_DOWN: IPF_REG_READ(SOC_IPF_CH1_CTRL_ADDR(IPF_REGBASE_ADR), u32ChanCtrlInfo); IPF_REG_READ(SOC_IPF_CH1_STATE_ADDR(IPF_REGBASE_ADR), u32ChanStateInfo); IPF_REG_READ(SOC_IPF_CH1_BDQ_BADDR_ADDR(IPF_REGBASE_ADR), u32BdqBaseAddr); IPF_REG_READ(SOC_IPF_CH1_BDQ_SIZE_ADDR(IPF_REGBASE_ADR), u32BdqDepth); IPF_REG_READ(SOC_IPF_CH1_BDQ_WPTR_ADDR(IPF_REGBASE_ADR), u32BdqWptr); IPF_REG_READ(SOC_IPF_CH1_BDQ_RPTR_ADDR(IPF_REGBASE_ADR), u32BdqRptr); IPF_REG_READ(SOC_IPF_CH1_BDQ_WADDR_ADDR(IPF_REGBASE_ADR), u32BdqWaddr); IPF_REG_READ(SOC_IPF_CH1_BDQ_RADDR_ADDR(IPF_REGBASE_ADR), u32BdqRaddr); IPF_REG_READ(SOC_IPF_CH1_RDQ_BADDR_ADDR(IPF_REGBASE_ADR), u32RdqBaseAddr); IPF_REG_READ(SOC_IPF_CH1_RDQ_SIZE_ADDR(IPF_REGBASE_ADR), u32RdqDepth); IPF_REG_READ(SOC_IPF_CH1_RDQ_RPTR_ADDR(IPF_REGBASE_ADR), u32RdqRptr); IPF_REG_READ(SOC_IPF_CH1_RDQ_WPTR_ADDR(IPF_REGBASE_ADR), u32RdqWptr); IPF_REG_READ(SOC_IPF_CH1_RDQ_WADDR_ADDR(IPF_REGBASE_ADR), u32RdqWaddr); IPF_REG_READ(SOC_IPF_CH1_RDQ_RADDR_ADDR(IPF_REGBASE_ADR), u32RdqRaddr); IPF_REG_READ(SOC_IPF_CH1_DQ_DEPTH_ADDR(IPF_REGBASE_ADR), u32Depth); IPF_REG_READ(SOC_IPF_CH1_ADQ_CTRL_ADDR(IPF_REGBASE_ADR), u32AdqCtrlInfo); IPF_REG_READ(SOC_IPF_CH1_ADQ0_BASE_ADDR(IPF_REGBASE_ADR), u32Adq0BaseAddr); IPF_REG_READ(SOC_IPF_CH1_ADQ0_STAT_ADDR(IPF_REGBASE_ADR), u32Adq0StateInfo); IPF_REG_READ(SOC_IPF_CH1_ADQ0_WPTR_ADDR(IPF_REGBASE_ADR), u32Adq0Wptr); IPF_REG_READ(SOC_IPF_CH1_ADQ0_RPTR_ADDR(IPF_REGBASE_ADR), u32Adq0Rptr); IPF_REG_READ(SOC_IPF_CH1_ADQ1_BASE_ADDR(IPF_REGBASE_ADR), u32Adq1BaseAddr); IPF_REG_READ(SOC_IPF_CH1_ADQ1_STAT_ADDR(IPF_REGBASE_ADR), u32Adq1StateInfo); IPF_REG_READ(SOC_IPF_CH1_ADQ1_WPTR_ADDR(IPF_REGBASE_ADR), u32Adq1Wptr); IPF_REG_READ(SOC_IPF_CH1_ADQ1_RPTR_ADDR(IPF_REGBASE_ADR), u32Adq1Rptr); break; default: IPF_PRINT("invalidable channel type \n"); break; } IPF_PRINT("============BEGIN===========\n"); IPF_PRINT("通道控制寄存器: 0x%x\n", u32ChanCtrlInfo); IPF_PRINT("通道状态寄存器: 0x%x\n", u32ChanStateInfo); IPF_PRINT("BD 基地址: 0x%x\n", u32BdqBaseAddr); IPF_PRINT("BD 深度: 0x%x\n", u32BdqDepth); IPF_PRINT("BD 写指针: 0x%x\n", u32BdqWptr); IPF_PRINT("BD 读指针: 0x%x\n", u32BdqRptr); IPF_PRINT("BD 写地址: 0x%x\n", u32BdqWaddr); IPF_PRINT("BD 读地址: 0x%x\n", u32BdqRaddr); IPF_PRINT("RD 基地址: 0x%x\n", u32RdqBaseAddr); IPF_PRINT("RD 深度: 0x%x\n", u32RdqDepth); IPF_PRINT("RD 读指针: 0x%x\n", u32RdqRptr); IPF_PRINT("RD 写指针: 0x%x\n", u32RdqWptr); IPF_PRINT("RD 读地址: 0x%x\n", u32RdqRaddr); IPF_PRINT("RD 写地址: 0x%x\n", u32RdqWaddr); IPF_PRINT("通道深度寄存器: 0x%x\n", u32Depth); IPF_PRINT("ADQ控制寄存器: 0x%x\n", u32AdqCtrlInfo); IPF_PRINT("ADQ0 基地址: 0x%x\n", u32Adq0BaseAddr); IPF_PRINT("ADQ0 状态寄存器: 0x%x\n", u32Adq0StateInfo); IPF_PRINT("ADQ0 写指针: 0x%x\n", u32Adq0Wptr); IPF_PRINT("ADQ0 读指针: 0x%x\n", u32Adq0Rptr); IPF_PRINT("ADQ1 基地址: 0x%x\n", u32Adq1BaseAddr); IPF_PRINT("ADQ1 状态寄存器: 0x%x\n", u32Adq1StateInfo); IPF_PRINT("ADQ1 写指针: 0x%x\n", u32Adq1Wptr); IPF_PRINT("ADQ1 读指针: 0x%x\n", u32Adq1Rptr); IPF_PRINT("=============END============\n"); return 0; }