VOS_UINT32 diag_DrxDataSampleProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId) { DIAG_CMD_DRX_DATA_SAMPLE_REG_WR_REQ_STRU *psDataSample = NULL; DIAG_CMD_DRX_DATA_SAMPLE_REG_WR_CNF_STRU stCnfDataSample = {0}; VOS_UINT32 ret = 0; VOS_UINT32 ulDataLen = 0; psDataSample = (DIAG_CMD_DRX_DATA_SAMPLE_REG_WR_REQ_STRU*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); ulDataLen = ((MSP_DIAG_HEAD_STRU*)(DIAG_OFFSET_SOCP_GET_DIAG_HEAD(pstReq)))->ulDataSize - sizeof(MSP_DIAG_DATA_REQ_STRU); DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_BBP_SAMPLE,psDataSample->enBBPDataSampleCtrl,0,0); /*lint -save -e830*/ if(BBP_DATA_SAMPLE_START == psDataSample->enBBPDataSampleCtrl) { /*lint -restore*/ ret = diag_SendMsg(MSP_PID_DIAG_AGENT, MSP_PID_BBP_AGENT,ID_MSG_REQ_DRX_DATA_SAMPLE_START, \ (VOS_UINT8*)psDataSample, ulDataLen); } else if(BBP_DATA_SAMPLE_STOP == psDataSample->enBBPDataSampleCtrl) { ret = diag_SendMsg(MSP_PID_DIAG_AGENT, MSP_PID_BBP_AGENT,ID_MSG_REQ_DRX_DATA_SAMPLE_STOP, \ (VOS_UINT8*)psDataSample, ulDataLen); } else { ret = ERR_MSP_FAILURE; } /*打包回复给FW*/ stCnfDataSample.ulRet = ret; ret = diag_AgentCnfFun((VOS_UINT8*)&stCnfDataSample,ulCmdId,sizeof(DIAG_CMD_DRX_DATA_SAMPLE_REG_WR_CNF_STRU)); return ret; }
VOS_UINT32 diag_GtrProcEntry(VOS_UINT8* pstReq , VOS_UINT32 ulCmdId) { DIAG_CMD_GTR_SET_REQ_STRU* pstGtrReq = NULL; DIAG_CMD_GTR_SET_CNF_STRU stGtrCnf = {0}; DIAG_GTR_DATA_RCV_PFN pfnCallBack = diag_GetGtrCallBack(); VOS_UINT32 ret = ERR_MSP_SUCCESS; VOS_UINT32 ulCnfRst = ERR_MSP_SUCCESS; pstGtrReq = (DIAG_CMD_GTR_SET_REQ_STRU*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); if (pstGtrReq->ulGtrDtaSize > DIAG_CMD_DATA_MAX_LEN) { ulCnfRst = ERR_MSP_FAILURE; } else { if (pfnCallBack != NULL) { ulCnfRst = pfnCallBack(pstGtrReq->ulGtrDtaSize, pstGtrReq->aucDta); } else { ulCnfRst = ERR_MSP_FAILURE; } } stGtrCnf.ulRc = ulCnfRst; ret = diag_AgentCnfFun((VOS_UINT8*)&stGtrCnf,ulCmdId,sizeof(DIAG_CMD_GTR_SET_CNF_STRU)); return ret; }
VOS_UINT32 diag_FsMkdirProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId) { DIAG_CMD_FS_MAKE_DIR_REQ* pstFsReq = NULL; DIAG_CMD_FS_MAKE_DIR_CNF stFsCnf = {0}; VOS_UINT32 ret = ERR_MSP_SUCCESS; #if(VOS_OS_VER == VOS_LINUX) mm_segment_t old_fs; old_fs = get_fs(); set_fs(KERNEL_DS); #endif pstFsReq = (DIAG_CMD_FS_MAKE_DIR_REQ*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); ret = (VOS_UINT32)DIAG_FS_MKDIR((VOS_CHAR*)pstFsReq->szDirectory,0755);/*lint !e628*/ stFsCnf.ulRet = ret; #if(VOS_OS_VER == VOS_LINUX) set_fs(old_fs); #endif /*打包回复给FW*/ ret = diag_AgentCnfFun((VOS_UINT8*)&stFsCnf,ulCmdId,sizeof(DIAG_CMD_FS_MAKE_DIR_CNF)); return ret; }
VOS_UINT32 diag_DrxSampleGenProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId) { DIAG_CMD_DRX_SAMPLE_REG_WR_REQ_STRU *psDrxSample = NULL; DIAG_CMD_DRX_SAMPLE_REG_WR_CNF_STRU stCnfDrxSample = {0}; VOS_UINT32 ret = ERR_MSP_SUCCESS; VOS_UINT32 ulDataLen = 0; ulDrxSampleGenEnterCnt ++; psDrxSample = (DIAG_CMD_DRX_SAMPLE_REG_WR_REQ_STRU*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); ulDataLen = ((MSP_DIAG_HEAD_STRU*)(DIAG_OFFSET_SOCP_GET_DIAG_HEAD(pstReq)))->ulDataSize - sizeof(MSP_DIAG_DATA_REQ_STRU); DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_BBP_SAMPLE,psDrxSample->ulOmDrxSampleId,0,0); ret = BSP_MailBox_ComMsgWrite(EN_MAILBOX_SERVICE_LTE_HS_DIAG, psDrxSample, ulDataLen, EN_MAILBOX_SLEEP_WAKEUP); if(ret != VOS_OK) { ret = ERR_MSP_FAILURE; } ulDrxSampleGenExitCnt ++; /*打包回复给FW*/ stCnfDrxSample.ulRet = ret; ret = diag_AgentCnfFun((VOS_UINT8*)&stCnfDrxSample, ulCmdId,sizeof(DIAG_CMD_DRX_SAMPLE_REG_WR_CNF_STRU)); return ret; }
/***************************************************************************** Function Name : diag_PrintCfgProc Description : 该函数用于处理CfgProcEntry传进来的打印开关命令 Input : pstReq 待处理数据 Output : None Return : VOS_UINT32 History : 1.y00228784 2012-11-22 Draft Enact *****************************************************************************/ VOS_UINT32 diag_PrintCfgProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId) { MSP_DIAG_HEAD_STRU *pstDiagHead = NULL; DIAG_CMD_LOG_CAT_PRINT_REQ_STRU* pstPrintSwtReq = NULL; DIAG_CMD_LOG_CAT_PRINT_CNF_STRU stPrintSwtCnf = {0}; VOS_UINT32 ret = ERR_MSP_SUCCESS; VOS_UINT32 ulSetRet; pstDiagHead = (MSP_DIAG_HEAD_STRU*)(DIAG_OFFSET_SOCP_GET_DIAG_HEAD(pstReq)); pstPrintSwtReq = (DIAG_CMD_LOG_CAT_PRINT_REQ_STRU*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); /*设置打印开关到全局变量中*/ ulSetRet = diag_CfgSetPrintSwt(pstPrintSwtReq, pstDiagHead->ulDataSize - sizeof(MSP_DIAG_DATA_REQ_STRU)); DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_PRINT_CFG, ulSetRet, 0, 0); stPrintSwtCnf.ulRc = ulSetRet; stPrintSwtCnf.ulModuleId = pstPrintSwtReq->ulModuleId; #if(VOS_OS_VER == VOS_LINUX) /*组包给FW回复*/ ret = diag_AgentCnfFun((VOS_UINT8*)&stPrintSwtCnf,ulCmdId,sizeof(DIAG_CMD_LOG_CAT_PRINT_CNF_STRU)); #endif return ret; }
VOS_UINT32 diag_BspAxiMonTerminateEntry(VOS_UINT8* pstReq , VOS_UINT32 ulCmdId) { VOS_UINT32 ret ; VOS_UINT32 cnf_data_len = 0; VOS_UINT8 *pdata =NULL; AXI_MON_TERMINATE_CNF_STRU * axi_ter_cnf = NULL; pdata = (VOS_UINT8*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); axi_ter_cnf = DRV_AXI_MON_TERMINATE(pdata, (VOS_UINT*)&cnf_data_len); vos_printf("diag_BspAxiMonTerminateEntry cnf_data_len = 0x%x\n", cnf_data_len); if(VOS_NULL != axi_ter_cnf) { ret = diag_AgentCnfFun((VOS_UINT8*)axi_ter_cnf,ulCmdId,cnf_data_len); free(axi_ter_cnf); } else { vos_printf("diag_BspAxiMonTerminateEntry ERROR\n"); ret = ERR_MSP_FAILURE; } return ret; }
VOS_UINT32 diag_FsSpaceProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId) { DIAG_CMD_FS_SPACE_REQ* pstFsReq = NULL; DIAG_CMD_FS_SPACE_CNF stFsCnf = {0}; VOS_UINT32 ret = ERR_MSP_SUCCESS; #if(VOS_OS_VER == VOS_LINUX) mm_segment_t old_fs; old_fs = get_fs(); set_fs(KERNEL_DS); #endif pstFsReq = (DIAG_CMD_FS_SPACE_REQ*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); ret = (VOS_UINT32)DRV_FILE_GET_DISKSPACE((VOS_CHAR*)(pstFsReq->szDirectory),(VOS_UINT*)&stFsCnf.ulDiskSpace, (VOS_UINT*)&stFsCnf.ulUsedSpace,(VOS_UINT*)&stFsCnf.ulValidSpace); stFsCnf.ulRet = ret; #if(VOS_OS_VER == VOS_LINUX) set_fs(old_fs); #endif /*打包回复给FW*/ ret = diag_AgentCnfFun((VOS_UINT8*)&stFsCnf,ulCmdId,sizeof(DIAG_CMD_FS_SPACE_CNF)); return ret; }
VOS_UINT32 diag_DrxSampleGetAddrProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId) { DIAG_CMD_DRX_SAMPLE_GET_ADDR_REQ_STRU *psDrxSample = NULL; DIAG_CMD_DRX_SAMPLE_GET_ADDR_CNF_STRU stCnfDrxSample = {0}; VOS_UINT32 ret = ERR_MSP_SUCCESS; VOS_UINT32 ulAddrType = 0; ulDrxSampleGetAddrEnterCnt ++; psDrxSample = (DIAG_CMD_DRX_SAMPLE_GET_ADDR_REQ_STRU*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_BBP_SAMPLE,psDrxSample->eDiagDrxSampleAddr,0,0); ulAddrType = psDrxSample->eDiagDrxSampleAddr; stCnfDrxSample.ulDrxSampleType = ulAddrType; /* 获取对应的寄存器地址*/ switch (ulAddrType) { case DRX_SAMPLE_BBP_DMA_BASE_ADDR: stCnfDrxSample.ulDrxSampleAddr = (VOS_UINT32)DRV_GET_IP_BASE_ADDR(BSP_IP_TYPE_BBPDMA); /* add code here */ break; case DRX_SAMPLE_BBP_DBG_BASE_ADDR: stCnfDrxSample.ulDrxSampleAddr = (VOS_UINT32)DRV_GET_IP_BASE_ADDR(BSP_IP_TYPE_BBPDBG); /* add code here */ break; case DRX_SAMPLE_BBP_SRC_BASE_ADDR: stCnfDrxSample.ulDrxSampleAddr = (VOS_UINT32)DRV_GET_IP_BASE_ADDR(BSP_IP_TYPE_BBPSRC); /* add code here */ break; case DRX_SAMPLE_POW_ONOFF_CLK_BASE_ADDR: stCnfDrxSample.ulDrxSampleAddr = (VOS_UINT32)DRV_GET_IP_BASE_ADDR(BSP_IP_TYPE_SYSCTRL); /* add code here */ break; case DRX_SAMPLE_SOCP_BASE_ADDR: stCnfDrxSample.ulDrxSampleAddr = (VOS_UINT32)DRV_GET_IP_BASE_ADDR(BSP_IP_TYPE_SOCP); /* add code here */ break; default: break; } ulDrxSampleGetAddrExitCnt ++; /*打包回复给FW*/ stCnfDrxSample.ulRet = VOS_OK; ret = diag_AgentCnfFun((VOS_UINT8*)&stCnfDrxSample, ulCmdId, sizeof(DIAG_CMD_DRX_SAMPLE_GET_ADDR_CNF_STRU)); return ret; }
VOS_UINT32 diag_RegWrProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId) { DIAG_CMD_REG_WR_REQ_STRU* pstRegWRReq = NULL; DIAG_CMD_REG_WR_PARA_STRU* pstReqWrStru = NULL; DIAG_CMD_REG_WR_CNF_PARA_STRU *pstCnfWrStru = NULL; DIAG_CMD_REG_WR_CNF_PARA_STRU *pstTempCnf = NULL; MSP_DIAG_HEAD_STRU *pstDiagHead = NULL; VOS_UINT32 ulNum = 0; VOS_UINT32 i = 0; VOS_UINT32 ret = 0; VOS_UINT32 ulMsgLen =0,ulLen = 0; /*入参判断*/ pstDiagHead = (MSP_DIAG_HEAD_STRU*)(DIAG_OFFSET_SOCP_GET_DIAG_HEAD(pstReq)); pstRegWRReq = (DIAG_CMD_REG_WR_REQ_STRU*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); ulLen = (pstDiagHead->ulDataSize - sizeof(MSP_DIAG_DATA_REQ_STRU)); if((0 != ulLen % sizeof(DIAG_CMD_REG_WR_PARA_STRU)) ||(0 == ulLen)) { return ERR_MSP_INVALID_PARAMETER; } ulNum = (pstDiagHead->ulDataSize - sizeof(MSP_DIAG_DATA_REQ_STRU)) / sizeof(DIAG_CMD_REG_WR_PARA_STRU); ulMsgLen = sizeof(DIAG_CMD_REG_WR_CNF_PARA_STRU) * ulNum; DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_NV_WR,ulNum,0,0); pstCnfWrStru = (DIAG_CMD_REG_WR_CNF_PARA_STRU*)VOS_MemAlloc(MSP_PID_DIAG_AGENT, DYNAMIC_MEM_PT,ulMsgLen); if(NULL == pstCnfWrStru) { return ERR_MSP_MALLOC_FAILUE; } pstTempCnf = pstCnfWrStru; for (i = 0; i < ulNum; i++) { /*lint -save -e740*/ pstReqWrStru = (DIAG_CMD_REG_WR_PARA_STRU*)pstRegWRReq + i; /*lint -restore*/ /* 组包命令参数*/ ret = diag_SetRegValue(pstReqWrStru); pstTempCnf->ulAddr = pstReqWrStru->ulAddr; pstTempCnf->ulRc = ret; pstTempCnf ++; } /*打包回复给FW*/ ret = diag_AgentCnfFun((VOS_UINT8*)pstCnfWrStru,ulCmdId,ulMsgLen); VOS_MemFree(MSP_PID_DIAG_AGENT,pstCnfWrStru); return ret; }
VOS_UINT32 diag_FsQueryProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId) { DIAG_CMD_FS_QUERY_REQ* pstFsReq = NULL; DIAG_CMD_FS_QUERY_CNF stFsCnf = {0}; VOS_UINT32 ret = ERR_MSP_SUCCESS; pstFsReq = (DIAG_CMD_FS_QUERY_REQ*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); if (DIAG_FS_ROOT_FOLDER == pstFsReq->ulFolderType) { #if(VOS_OS_VER == VOS_LINUX) /* 锁定状态下,根目录受限制 */ if(g_bAtDataLocked) { stFsCnf.ulLength = VOS_StrLen((VOS_CHAR*)g_acDiagLockedRootPath); VOS_MemCpy(stFsCnf.aucDirPath,g_acDiagLockedRootPath, stFsCnf.ulLength); } else { stFsCnf.ulLength = VOS_StrLen((VOS_CHAR*)g_acDiagRootPath); VOS_MemCpy(stFsCnf.aucDirPath,g_acDiagRootPath, stFsCnf.ulLength); } #else stFsCnf.ulLength = VOS_StrLen((VOS_CHAR*)g_acDiagRootPath); VOS_MemCpy(stFsCnf.aucDirPath,g_acDiagRootPath, stFsCnf.ulLength); #endif g_stDiagFileInfo.ulFileType = DIAG_FS_ROOT_FOLDER; } else if (DIAG_FS_LOG_FOLDER == pstFsReq->ulFolderType) { stFsCnf.ulLength = VOS_StrLen((VOS_CHAR*)g_acDiagLogDir); VOS_MemCpy(stFsCnf.aucDirPath,g_acDiagLogDir, stFsCnf.ulLength); g_stDiagFileInfo.ulFileType = DIAG_FS_LOG_FOLDER; } /*临终遗言文件所在的路径*/ else if (DIAG_FS_DUMP_FOLDER == pstFsReq->ulFolderType) { stFsCnf.ulLength = VOS_StrLen((VOS_CHAR*)g_acDiagDumpDir); VOS_MemCpy(stFsCnf.aucDirPath, g_acDiagDumpDir, stFsCnf.ulLength); g_stDiagFileInfo.ulFileType = DIAG_FS_DUMP_FOLDER; } else { ret = ERR_MSP_FAILURE; } stFsCnf.ulRet = ret; /*打包回复给FW*/ ret = diag_AgentCnfFun((VOS_UINT8*)&stFsCnf,ulCmdId,sizeof(DIAG_CMD_FS_QUERY_CNF)); return ret; }
VOS_UINT32 diag_RegRdProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId) { DIAG_CMD_REG_RD_REQ_STRU* pstRegQryReq = NULL; DIAG_CMD_REG_RD_CNF_PARA_STRU *pstRegQryCnf = NULL; DIAG_CMD_REG_RD_CNF_PARA_STRU *pstTempCnf = NULL; MSP_DIAG_HEAD_STRU *pstDiagHead = NULL; VOS_UINT32 *pulReqRdAddr = NULL; VOS_UINT32 ret = ERR_MSP_SUCCESS; VOS_UINT32 ulNum = 0; VOS_UINT32 i = 0; VOS_UINT32 ulMsgLen = 0; pstDiagHead = (MSP_DIAG_HEAD_STRU*)(DIAG_OFFSET_SOCP_GET_DIAG_HEAD(pstReq)); pstRegQryReq = (DIAG_CMD_REG_RD_REQ_STRU*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); ulNum = (pstDiagHead->ulDataSize - sizeof(MSP_DIAG_DATA_REQ_STRU)) / sizeof(VOS_UINT32); ulMsgLen = sizeof(DIAG_CMD_REG_RD_CNF_PARA_STRU) * ulNum; DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_REG_RD,ulNum,0,0); pstRegQryCnf = (DIAG_CMD_REG_RD_CNF_PARA_STRU*)VOS_MemAlloc(MSP_PID_DIAG_AGENT, DYNAMIC_MEM_PT,ulMsgLen); if(NULL == pstRegQryCnf) { return ERR_MSP_MALLOC_FAILUE; } pstTempCnf = pstRegQryCnf; for (i = 0; i < ulNum; i++) { /*lint -save -e740*/ pulReqRdAddr = ((VOS_UINT32*)pstRegQryReq) + i; /*lint -restore*/ ret = (VOS_UINT32)diag_RegRead(*pulReqRdAddr, ADDRTYPE32BIT, &(pstRegQryCnf->ulRegValue)); if(ERR_MSP_SUCCESS == ret) { pstTempCnf->ulRc = ret; pstTempCnf->ulAddr =*pulReqRdAddr; } pstTempCnf++; } ret = diag_AgentCnfFun((VOS_UINT8*)pstRegQryCnf,ulCmdId,ulMsgLen); VOS_MemFree(MSP_PID_DIAG_AGENT,pstRegQryCnf); return ret; }
/***************************************************************************** Function Name : diag_FsOpenProc Description : 打开或创建文件 Input :VOS_UINT8* pstReq VOS_UINT32 ulCmdId Output : None Return : VOS_UINT32 History : 1.w00182550 2013-1-29 Draft Enact *****************************************************************************/ VOS_UINT32 diag_FsOpenProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId) { DIAG_CMD_FS_OPEN_REQ* pstFsReq = NULL; DIAG_CMD_FS_OPEN_CNF stFsCnf = {0}; VOS_UINT32 ret = ERR_MSP_SUCCESS; pstFsReq = (DIAG_CMD_FS_OPEN_REQ*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); /*不支持操作文件的重入操作*/ if (DIAG_FILE_NULL != g_stDiagFileInfo.lFile) { diag_printf("warning: last File import not finished\n"); diag_FsClose(); } /*lint -save -e539*/ diag_fs_log(); /*lint -restore*/ g_stDiagFileInfo.lFile = diag_FsOpen(pstFsReq->szDirectory, (VOS_INT)(pstFsReq->ulMode)); if (g_stDiagFileInfo.lFile < 0) { g_stDiagFileInfo.lFile = DIAG_FILE_NULL; ret = VOS_ERR; } else { /*启动定时器*/ g_stDiagFileInfo.hTimer = VOS_NULL_PTR; ret = VOS_StartRelTimer(&g_stDiagFileInfo.hTimer, diag_GetAgentPid(), DIAG_CMD_FILE_OPS_TIME_OUT_LEN, 0, DIAG_TMR_FILE_OP_TIMEOUT_PARAM,VOS_RELTIMER_NOLOOP, VOS_TIMER_NO_PRECISION); if(ret != ERR_MSP_SUCCESS) { /*lint -save -e717*/ diag_printf("VOS_StartRelTimer fail [%s]\n",__func__); /*lint -restore*/ } diag_fs_log(); } stFsCnf.ulRet = ret; /*打包回复给FW*/ ret = diag_AgentCnfFun((VOS_UINT8*)&stFsCnf,ulCmdId,sizeof(DIAG_CMD_FS_OPEN_CNF)); diag_fs_log(); return ret; }
/***************************************************************************** Function Name : diag_FsScanProc Description : 扫描所有文件或文件夹信息 Input :VOS_UINT8* pstReq VOS_UINT32 ulCmdId Output : None Return : VOS_UINT32 History : 1.w00182550 2013-1-29 Draft Enact *****************************************************************************/ VOS_UINT32 diag_FsScanProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId) { DIAG_CMD_FS_SCAN_DIR_REQ* pstFsReq = NULL; DIAG_CMD_FS_SCAN_DIR_CNF* pstFsCnf = NULL; VOS_UINT32 ret = ERR_MSP_SUCCESS; VOS_UINT32 ulTotalNum; VOS_UINT32 ulTotalSize; pstFsReq = (DIAG_CMD_FS_SCAN_DIR_REQ*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); /*得到目录内,文件和文件夹的总个数、总的名字长度*/ if(VOS_OK != diag_FsGetDirInfo(pstFsReq->szDirectory,&ulTotalNum)) { return VOS_ERR; } /*计算返回给工具侧消息包的长度*/ ulTotalSize = (ulTotalNum* sizeof(DIAG_DIR_FILE_INFO_STRU)+ sizeof(DIAG_CMD_FS_SCAN_DIR_CNF)); pstFsCnf = (DIAG_CMD_FS_SCAN_DIR_CNF*)VOS_MemAlloc(diag_GetAgentPid(), DYNAMIC_MEM_PT, ulTotalSize); if (VOS_NULL_PTR == pstFsCnf) { return VOS_ERR; } /*获取每个文件和文件夹的信息*/ /*lint -save -e539*/ if(ulTotalNum>0) { ret = diag_FsGetItemInfo(pstFsReq->szDirectory,pstFsCnf->stDirInfo); } /*lint -restore*/ pstFsCnf->ulRet = ret; pstFsCnf->ulDirNum= ulTotalNum; pstFsCnf->ulDirInfoLen= ulTotalNum * sizeof(DIAG_DIR_FILE_INFO_STRU); /*打包回复给FW*/ ret = diag_AgentCnfFun((VOS_UINT8*)pstFsCnf,ulCmdId,ulTotalSize); /*lint -save -e50*/ VOS_MemFree(diag_GetAgentPid(), pstFsCnf); /*lint -restore*/ return ret; }
VOS_UINT32 diag_DrxSampleAbleChnProc(VOS_UINT8* pstReq, VOS_UINT32 ulCmdId) { DIAG_CMD_DRX_SAMPLE_ABLE_CHN_REQ_STRU *psDrxSample = NULL; DIAG_CMD_DRX_SAMPLE_ABLE_CHN_CNF_STRU stCnfDrxSample = {0}; VOS_UINT32 ret = ERR_MSP_SUCCESS; VOS_UINT32 ulChnAbleType = 0; ulDrxSampleAbleChnEnterCnt ++; psDrxSample = (DIAG_CMD_DRX_SAMPLE_ABLE_CHN_REQ_STRU*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); /* 调用socp 通道使能函数打开通道或者关闭通道*/ ulChnAbleType = psDrxSample->eDiagDrxSampleAbleChn; switch (ulChnAbleType) { case DRX_SAMPLE_SOCP_CHN_ENABLE: { if(VOS_OK != DRV_SOCP_START(SOCP_CODER_SRC_LBBP9)) { vos_printf("%s: enable channel failed!\n",__FUNCTION__); } break; } case DRX_SAMPLE_SOCP_CHN_DISABLE: { if(VOS_OK != DRV_SOCP_STOP(SOCP_CODER_SRC_LBBP9)) { vos_printf("%s: disable channel failed!\n",__FUNCTION__); } break; } default: break; } ulDrxSampleAbleChnExitCnt ++; /*打包回复给FW*/ stCnfDrxSample.ulRet = ret; ret = diag_AgentCnfFun((VOS_UINT8*)&stCnfDrxSample, ulCmdId,sizeof(DIAG_CMD_DRX_SAMPLE_ABLE_CHN_CNF_STRU)); return ret; }
/*lint -save -e550 -e539 -e438 -e830*/ VOS_UINT32 diag_BspLogProcEntry(VOS_UINT8* pstReq , VOS_UINT32 ulCmdId) { /*lint -save -e830*/ VOS_UINT32 ret = ERR_MSP_SUCCESS; VOS_UINT32 data_len = 0; VOS_UINT32 cnf_data_len = 0; MSP_DIAG_HEAD_STRU *pstDiagHead = VOS_NULL; DIAG_bsp_log_swt_cfg_s *pstLogSet = VOS_NULL; DIAG_BSP_PRINT_LOG_SWT_CNF_STRU stLogSetCnf = {0}; VOS_UINT8 *pstCnf = VOS_NULL; /*lint -restore*/ pstDiagHead = (MSP_DIAG_HEAD_STRU*)(DIAG_OFFSET_SOCP_GET_DIAG_HEAD(pstReq)); vos_printf("diag_BspLogProcEntry ulCmdId = 0x%x\n",ulCmdId); if(DIAG_CMD_BSP_LOG_SET_ACORE == (MSP_STRU_ID_0_15_CMD_CATEGORY(ulCmdId)) ) { ret = ERR_MSP_SUCCESS; } else if(DIAG_CMD_BSP_LOG_SET_CCORE == (MSP_STRU_ID_0_15_CMD_CATEGORY(ulCmdId)) ) { pstLogSet = (DIAG_bsp_log_swt_cfg_s *)DIAG_OFFSET_HEAD_GET_DATA(pstReq); data_len = pstDiagHead->ulDataSize - sizeof(MSP_DIAG_DATA_REQ_STRU); stLogSetCnf.ulRet = ERR_MSP_SUCCESS; pstCnf = (VOS_UINT8 *)&stLogSetCnf ; cnf_data_len = sizeof(DIAG_BSP_PRINT_LOG_SWT_CNF_STRU); } else { ret = ERR_MSP_FAILURE; } if(VOS_NULL!=pstCnf) { ret = diag_AgentCnfFun(pstCnf,ulCmdId,cnf_data_len); } return ret; }
VOS_UINT32 diag_BspAxiProcEntry (VOS_UINT8* pstReq , VOS_UINT32 ulCmdId) { VOS_UINT32 ret = ERR_MSP_SUCCESS; VOS_UINT8 *pdata =NULL; DIAG_CMD_COMMON_CNF stAxiCnf ={0}; diag_printf("[%s enter!]\n",__FUNCTION__); pdata = (VOS_UINT8*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); switch(MSP_STRU_ID_0_15_CMD_CATEGORY(ulCmdId)) { case DIAG_CMD_AXI_DATA_CONFIG: ret = diag_BspAxiDataConfigEntry(pstReq, ulCmdId); break; case DIAG_CMD_AXI_REG_CONFIG: ret = DRV_AXI_REG_CONFIG(pdata); break; case DIAG_CMD_AXI_DATA_CTRL: ret = DRV_AXI_DATA_CTRL(pdata); break; case DIAG_CMD_AXI_MON_CONFIG: ret = diag_BspAxiMonConfigEntry(pstReq, ulCmdId); break; case DIAG_CMD_AXI_MON_START: ret = DRV_AXI_MON_START(pdata); break; case DIAG_CMD_AXI_MON_TERMINATE: ret = diag_BspAxiMonTerminateEntry(pstReq, ulCmdId); break; default: break; } stAxiCnf.ulRet = ret; ret = diag_AgentCnfFun((VOS_UINT8*)&stAxiCnf,ulCmdId,sizeof(DIAG_CMD_COMMON_CNF)); return ret; }
VOS_UINT32 diag_FsDeleteProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId) { DIAG_CMD_FS_DELETE_REQ* pstFsReq = NULL; DIAG_CMD_FS_DELETE_CNF stFsCnf = {0}; VOS_UINT32 ret = ERR_MSP_SUCCESS; #if(VOS_OS_VER == VOS_LINUX) mm_segment_t old_fs; old_fs = get_fs(); set_fs(KERNEL_DS); #endif pstFsReq = (DIAG_CMD_FS_DELETE_REQ*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); /*lint -save -e628*/ if (DIAG_FS_ITEM_FOLDER == pstFsReq->ulItemType) { ret = (VOS_UINT32)DIAG_FS_RMDIR(pstFsReq->szDirectory);/*lint !e628*/ } else if (DIAG_FS_ITEM_FILE == pstFsReq->ulItemType) { ret = (VOS_UINT32)DIAG_FS_RMFILE(pstFsReq->szDirectory);/*lint !e628*/ } /*lint -restore*/ #if(VOS_OS_VER == VOS_LINUX) set_fs(old_fs); #endif stFsCnf.ulRet = ret; /*打包回复给FW*/ ret = diag_AgentCnfFun((VOS_UINT8*)&stFsCnf,ulCmdId,sizeof(DIAG_CMD_FS_DELETE_CNF)); return ret; }
/***************************************************************************** Function Name : diag_AirCfgProc Description : 该函数用于处理CfgProcEntry传进来的空口开关命令 Input : pstReq 待处理数据 Output : None Return : VOS_UINT32 History : 1.y00228784 2012-11-22 Draft Enact *****************************************************************************/ VOS_UINT32 diag_AirCfgProc (VOS_UINT8* pstReq,VOS_UINT32 ulCmdId) { DIAG_CMD_LOG_CAT_AIR_REQ_STRU* pstAirSwtReq = NULL; DIAG_CMD_LOG_CAT_AIR_CNF_STRU stAirSwtCnf = {0}; VOS_UINT32 ret = ERR_MSP_SUCCESS; ENUM_DIAG_CFG_SWT_U8 enLSwitch = 0; ENUM_DIAG_CFG_SWT_U8 enGuSwitch = 0; VOS_UINT32 ulSetRet = 0;/*lint !e958 */ pstAirSwtReq = (DIAG_CMD_LOG_CAT_AIR_REQ_STRU*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq));/*lint !e958 */ /*设置LT空口开关值*/ enLSwitch = DIAG_GET_CFG_SWT(pstAirSwtReq->ulSwitch); enGuSwitch = DIAG_GET_CFG_SWT(pstAirSwtReq->ulGuSwitch); ulSetRet = diag_CfgSetGlobalBitValue(&g_ulDiagCfgInfo,DIAG_CFG_LT_AIR_BIT,enLSwitch); /*设置GU空口开关值*/ ulSetRet |= diag_CfgSetGlobalBitValue(&g_ulDiagCfgInfo,DIAG_CFG_GU_AIR_BIT,enGuSwitch); DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_AIR_CFG, pstAirSwtReq->ulSwitch, ulSetRet, 0); if(ERR_MSP_SUCCESS == ulSetRet) { stAirSwtCnf.ulRc = ERR_MSP_SUCCESS; } else { stAirSwtCnf.ulRc = ERR_MSP_FAILURE; } #if(VOS_OS_VER == VOS_LINUX) /*组包给FW回复*/ ret = diag_AgentCnfFun((VOS_UINT8*)&stAirSwtCnf,ulCmdId,sizeof(DIAG_CMD_LOG_CAT_AIR_CNF_STRU)); #endif return ret; }
/***************************************************************************** Function Name : diag_EventCfgProc Description : 该函数用于处理CfgProcEntry传进来的事件开关命令 Input : pstReq 待处理数据 Output : None Return : VOS_UINT32 History : 1.y00228784 2012-11-22 Draft Enact *****************************************************************************/ VOS_UINT32 diag_EventCfgProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId) { DIAG_CMD_LOG_CAT_EVENT_REQ_STRU* pstEvtSwtReq = NULL; DIAG_CMD_LOG_CAT_EVENT_CNF_STRU stEvtSwtCnf = {0}; VOS_UINT32 ret = ERR_MSP_SUCCESS; VOS_UINT32 ulSetRet; ENUM_DIAG_CFG_SWT_U8 enSwitch =0; pstEvtSwtReq = (DIAG_CMD_LOG_CAT_EVENT_REQ_STRU*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); /*设置事件开关值*/ enSwitch = DIAG_GET_CFG_SWT(pstEvtSwtReq->ulSwitch); ulSetRet = diag_CfgSetGlobalBitValue(&g_ulDiagCfgInfo,DIAG_CFG_EVENT_BIT,enSwitch); DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_EVENT_CFG, pstEvtSwtReq->ulSwitch, ulSetRet, 0); stEvtSwtCnf.ulRc = ulSetRet; stEvtSwtCnf.ulSwitch = pstEvtSwtReq->ulSwitch; #if(VOS_OS_VER == VOS_LINUX) /*组包给FW回复*/ ret = diag_AgentCnfFun((VOS_UINT8*)&stEvtSwtCnf,ulCmdId,sizeof(DIAG_CMD_LOG_CAT_EVENT_CNF_STRU)); #endif return ret; }
VOS_UINT32 diag_FsImportProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId) { DIAG_CMD_FS_IMPORT_REQ* pstFsReq = NULL; DIAG_CMD_FS_IMPORT_CNF stFsCnf = {0}; VOS_UINT32 ret = ERR_MSP_SUCCESS; VOS_INT32 lResult =0; #if(VOS_OS_VER == VOS_LINUX) mm_segment_t old_fs; #endif pstFsReq = (DIAG_CMD_FS_IMPORT_REQ*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); if (DIAG_FILE_NULL == g_stDiagFileInfo.lFile) { return ERR_MSP_FAILURE; } diag_fs_log(); /*停止定时器*/ VOS_StopRelTimer(&g_stDiagFileInfo.hTimer); /*写文件完毕,关闭文件*/ if (0 == pstFsReq->ulSize) { diag_fs_log(); diag_FsClose(); /*打包回复给FW*/ stFsCnf.ulRet = ERR_MSP_SUCCESS; ret = diag_AgentCnfFun((VOS_UINT8*)&stFsCnf,ulCmdId,sizeof(DIAG_CMD_FS_IMPORT_CNF)); return ret; } #if(VOS_OS_VER == VOS_LINUX) old_fs = get_fs(); set_fs(KERNEL_DS); #endif #if(VOS_OS_VER == VOS_LINUX) lResult = DIAG_FS_WRITE(g_stDiagFileInfo.lFile, pstFsReq->acContent, pstFsReq->ulSize); #else lResult = DIAG_FS_WRITE((FILE *)g_stDiagFileInfo.lFile, pstFsReq->acContent, pstFsReq->ulSize); #endif diag_fs_log(); #if(VOS_OS_VER == VOS_LINUX) set_fs(old_fs); #endif /*写文件操作失败或者写入长度不正确*/ if ((DIAG_FS_ERROR == lResult)||(lResult != (VOS_INT32)(pstFsReq->ulSize))) { diag_fs_log(); diag_printf("[%s]!,lResult=%d\n",__FUNCTION__,lResult); diag_FsClose(); return VOS_ERR; } /*启动定时器*/ ret = VOS_StartRelTimer(&g_stDiagFileInfo.hTimer, diag_GetAgentPid(),DIAG_CMD_FILE_OPS_TIME_OUT_LEN,0,DIAG_TMR_FILE_OP_TIMEOUT_PARAM,VOS_RELTIMER_NOLOOP, VOS_TIMER_NO_PRECISION); if(ret != ERR_MSP_SUCCESS) { diag_printf("VOS_StartRelTimer fail [%s]\n",__func__); } stFsCnf.ulRet = ret; /*打包回复给FW*/ ret = diag_AgentCnfFun((VOS_UINT8*)&stFsCnf,ulCmdId,sizeof(DIAG_CMD_FS_IMPORT_CNF)); return ret; }
VOS_UINT32 diag_DrxSampleGetChnSizeProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId) { DIAG_CMD_DRX_SAMPLE_GET_CHNSIZE_REQ_STRU *psDrxSample = NULL; DIAG_CMD_DRX_SAMPLE_GET_CHNSIZE_CNF_STRU stCnfDrxSample = {0}; VOS_UINT32 ret = ERR_MSP_SUCCESS; VOS_UINT32 ulAddrType = 0; ulDrxSampleGetChnSizeEnterCnt ++; psDrxSample = (DIAG_CMD_DRX_SAMPLE_GET_CHNSIZE_REQ_STRU*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_BBP_SAMPLE,psDrxSample->eDiagDrxSampleChnSize,0,0); ulAddrType = psDrxSample->eDiagDrxSampleChnSize; switch (ulAddrType) { case DRX_SAMPLE_BBP_DMA_LOG0_CHNSIZE: stCnfDrxSample.ulChnAddr = BBP_LOG0_MEM_ADDR; stCnfDrxSample.ulChnSize = BBP_LOG0_MEM_SIZE; break; case DRX_SAMPLE_BBP_DMA_LOG1_CHNSIZE: stCnfDrxSample.ulChnAddr = BBP_LOG1_MEM_ADDR; stCnfDrxSample.ulChnSize = BBP_LOG1_MEM_SIZE; break; case DRX_SAMPLE_BBP_DMA_LOG2_CHNSIZE: stCnfDrxSample.ulChnAddr = BBP_LOG2_MEM_ADDR; stCnfDrxSample.ulChnSize = BBP_LOG2_MEM_SIZE; break; case DRX_SAMPLE_BBP_DMA_LOG3_CHNSIZE: stCnfDrxSample.ulChnAddr = BBP_LOG3_MEM_ADDR; stCnfDrxSample.ulChnSize = BBP_LOG3_MEM_SIZE; break; case DRX_SAMPLE_BBP_DMA_LOG4_CHNSIZE: stCnfDrxSample.ulChnAddr = BBP_LOG4_MEM_ADDR; stCnfDrxSample.ulChnSize = BBP_LOG4_MEM_SIZE; break; case DRX_SAMPLE_BBP_DMA_LOG5_CHNSIZE: stCnfDrxSample.ulChnAddr = BBP_LOG5_MEM_ADDR; stCnfDrxSample.ulChnSize = BBP_LOG5_MEM_SIZE; break; case DRX_SAMPLE_BBP_DMA_LOG6_CHNSIZE: stCnfDrxSample.ulChnAddr = BBP_LOG6_MEM_ADDR; stCnfDrxSample.ulChnSize = BBP_LOG6_MEM_SIZE; break; case DRX_SAMPLE_BBP_DMA_LOG7_CHNSIZE: stCnfDrxSample.ulChnAddr = BBP_LOG7_MEM_ADDR; stCnfDrxSample.ulChnSize = BBP_LOG7_MEM_SIZE; break; case DRX_SAMPLE_BBP_DMA_DATA_CHNSIZE: /*lint -save -e778*/ stCnfDrxSample.ulChnAddr = BBP_DS_MEM_ADDR; stCnfDrxSample.ulChnSize = BBP_DS_MEM_SIZE; /*lint -restore*/ break; default: break; } ulDrxSampleGetChnSizeExitCnt ++; /*打包回复给FW*/ stCnfDrxSample.ulRet = ret; stCnfDrxSample.ulChnType = ulAddrType; ret = diag_AgentCnfFun((VOS_UINT8*)&stCnfDrxSample, ulCmdId,sizeof(DIAG_CMD_DRX_SAMPLE_GET_CHNSIZE_CNF_STRU)); return ret; }
VOS_UINT32 diag_BspSysviewProcEntry(VOS_UINT8* pstReq , VOS_UINT32 ulCmdId) { VOS_UINT32 ret ; VOS_UINT32 cnf_data_len = 0; DIAG_BSP_SYVIEW_SWT_CFG_STRU *pstSysviewSet = VOS_NULL; DIAG_BSP_SYVIEW_SWT_CNF_STRU *pstLogSysviewCnf = {0}; VOS_UINT8 *pstCnf = VOS_NULL; if((DIAG_CMD_BSP_SYSVIEW_SWT_ACORE == (MSP_STRU_ID_0_15_CMD_CATEGORY(ulCmdId))) ||(DIAG_CMD_BSP_CPU_SWT_ACORE == (MSP_STRU_ID_0_15_CMD_CATEGORY(ulCmdId)))) { ret = ERR_MSP_SUCCESS; } else if((DIAG_CMD_BSP_SYSVIEW_SWT_CCORE == (MSP_STRU_ID_0_15_CMD_CATEGORY(ulCmdId)) ) ||(DIAG_CMD_BSP_CPU_SWT_CCORE == (MSP_STRU_ID_0_15_CMD_CATEGORY(ulCmdId)))) { pstSysviewSet = (DIAG_BSP_SYVIEW_SWT_CFG_STRU *)DIAG_OFFSET_HEAD_GET_DATA(pstReq); ret= DRV_SYSVIEW_SWT_SET(pstSysviewSet->trace_type,pstSysviewSet->trace_swt,pstSysviewSet->period); if(ret == ERR_MSP_SUCCESS) { if((pstSysviewSet->trace_type ==SYSVIEW_TASK_INFO )&&(pstSysviewSet->trace_swt ==1 )) { cnf_data_len = sizeof(DIAG_BSP_SYVIEW_SWT_CNF_STRU)+sizeof(DIAG_BSP_TASK_INFO_STRU)*128; /* coverity[returned_null] */ pstLogSysviewCnf =(DIAG_BSP_SYVIEW_SWT_CNF_STRU*)VOS_MemAlloc(MSP_PID_DIAG_AGENT, DYNAMIC_MEM_PT,cnf_data_len); /* coverity[dereference] */ pstLogSysviewCnf->ullen = sizeof(DIAG_BSP_TASK_INFO_STRU)*128; DRV_GET_ALL_TASK_ID_NAME((pstLogSysviewCnf->st_task_info), sizeof(DIAG_BSP_TASK_INFO_STRU)*128); } else { cnf_data_len = sizeof(DIAG_BSP_SYVIEW_SWT_CNF_STRU); /* coverity[returned_null] */ pstLogSysviewCnf =(DIAG_BSP_SYVIEW_SWT_CNF_STRU*)VOS_MemAlloc(MSP_PID_DIAG_AGENT, DYNAMIC_MEM_PT,cnf_data_len); /* coverity[dereference] */ pstLogSysviewCnf->ullen = 0; } } else { cnf_data_len = sizeof(DIAG_BSP_SYVIEW_SWT_CNF_STRU); /* coverity[returned_null] */ pstLogSysviewCnf =(DIAG_BSP_SYVIEW_SWT_CNF_STRU*)VOS_MemAlloc(MSP_PID_DIAG_AGENT, DYNAMIC_MEM_PT,cnf_data_len); /* coverity[dereference] */ pstLogSysviewCnf->ullen = 0; } pstLogSysviewCnf->ulRet = ret; pstLogSysviewCnf->trace_type =pstSysviewSet->trace_type; pstCnf = (VOS_UINT8 *)pstLogSysviewCnf ; } else { ret = ERR_MSP_FAILURE; } if(VOS_NULL!=pstCnf) { ret = diag_AgentCnfFun(pstCnf,ulCmdId,cnf_data_len); VOS_MemFree(diag_GetAgentPid(), pstCnf); } return ret; }