* 函 数 名 : bsp_om_socp_clean_rd_buf * * 功能描述 :清理SOCP的RD缓存 * * 输入参数 :chan_id :socp 的通道ID * rd_stru: 入参 * * 输出参数 :无 * * 返 回 值 : BSP_OK 成功; 其他 失败 *****************************************************************************/ u32 bsp_om_socp_clean_rd_buf(u32 chan_id,SOCP_BUFFER_RW_STRU *rd_stru) { u32 ret; SOCP_BUFFER_RW_STRU rd_buf_stru = {0}; osl_sem_down(&socp_opt_sem); ret = (u32)bsp_socp_get_rd_buffer(chan_id,&rd_buf_stru); if(BSP_OK != ret) { ret = BSP_ERR_OMS_SOCP_GET_RD_ERR; goto fail; } /* 无RD需要释放*/ if( (0 ==rd_buf_stru.u32Size)&&(0 == rd_buf_stru.u32RbSize)) { ret = BSP_OK; goto successful; } /* 获取到的RD数据异常*/ if((rd_buf_stru.u32Size + rd_buf_stru.u32RbSize) > BSP_OM_CODER_SRC_RDSIZE) { ret = BSP_ERR_OMS_SOCP_CLEAN_RD_ERR; goto fail; } if(0 != (rd_buf_stru.u32Size / sizeof(SOCP_RD_DATA_STRU))) { rd_stru->pBuffer = rd_buf_stru.pBuffer; rd_stru->u32Size = rd_buf_stru.u32Size; (void)cacheInvalidate(DATA_CACHE, rd_buf_stru.pBuffer, rd_buf_stru.u32Size); } else { ret = BSP_ERR_OMS_SOCP_CLEAN_RD_ERR; goto fail; } ret = (u32)bsp_socp_read_rd_done(chan_id, rd_buf_stru.u32Size); /* 释放rd缓存 */ if( BSP_OK !=ret) { goto fail; } else { ret = BSP_OK; goto successful; } fail: osl_sem_up(&socp_opt_sem); return ret; successful: osl_sem_up(&socp_opt_sem); return ret; }
/***************************************************************************** 函 数 名 : DRV_SOCP_GET_RD_BUFFER 功能描述 : 该此接口用于获取RD buffer的数据指针。 输入参数 : u32SrcChanID:源通道ID pBuff: RD buffer 输出参数 : 无。 返 回 值 : SOCP_OK:获取RD环形缓冲区成功 SOCP_ERROR:获取RD环形缓冲区失败 *****************************************************************************/ BSP_S32 DRV_SOCP_GET_RD_BUFFER( BSP_U32 u32SrcChanID,SOCP_BUFFER_RW_STRU *pBuff) { return bsp_socp_get_rd_buffer(u32SrcChanID, pBuff); }
u32 bsp_om_socp_clean_rd_buf(u32 chan_id,SOCP_BUFFER_RW_STRU *rd_stru) { u32 ret; SOCP_BUFFER_RW_STRU rd_buf_stru = {0}; osl_sem_down(&socp_opt_sem); ret = (u32)bsp_socp_get_rd_buffer(chan_id,&rd_buf_stru); if(BSP_OK != ret) { ret = BSP_ERR_OMS_SOCP_GET_RD_ERR; goto fail; } /* 无RD需要释放*/ if( (0 ==rd_buf_stru.u32Size)&&(0 == rd_buf_stru.u32RbSize)) { ret = BSP_OK; goto successful; } /* 获取到的RD数据异常*/ if((rd_buf_stru.u32Size + rd_buf_stru.u32RbSize) > BSP_OM_CODER_SRC_RDSIZE) { ret = BSP_ERR_OMS_SOCP_CLEAN_RD_ERR; goto fail; } if(0 != (rd_buf_stru.u32Size / sizeof(SOCP_RD_DATA_STRU))) { /*lint -save -e713*/ dma_map_single(NULL, (void *)bsp_om_phy_virt(((uintptr_t)rd_buf_stru.pBuffer)), rd_buf_stru.u32Size, DMA_FROM_DEVICE); /*lint -restore*/ rd_stru->pBuffer = (char *)bsp_om_phy_virt(((uintptr_t)rd_buf_stru.pBuffer)); rd_stru->u32Size = rd_buf_stru.u32Size; } else { ret = BSP_ERR_OMS_SOCP_CLEAN_RD_ERR; goto fail; } ret = (u32)bsp_socp_read_rd_done(chan_id, rd_buf_stru.u32Size); /* 释放rd缓存 */ if( BSP_OK !=ret) { goto fail; } else { ret = BSP_OK; goto successful; } fail: osl_sem_up(&socp_opt_sem); return ret; successful: osl_sem_up(&socp_opt_sem); return ret; }