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; }
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; }
/***************************************************************************** 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_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_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; }
VOS_UINT32 diag_DspTransCnfProc(VOS_UINT8 * aucSocpPacket) { DIAG_CMD_DSP_CNF_STRU stRttCnf = {0}; VOS_UINT32 ret = 0; VOS_UINT32 ulCmdId = 0; MSP_DIAG_HEAD_STRU *pstDspMsg = NULL; VOS_UINT32 ulLen = 0; VOS_UINT8* pData = NULL; ulCmdId = (((MSP_DIAG_HEAD_STRU*)DIAG_OFFSET_SOCP_GET_DIAG_HEAD(aucSocpPacket))->ulID); /* DSP消息的ID和size */ pstDspMsg = (MSP_DIAG_HEAD_STRU*)(aucSocpPacket+sizeof(MSP_SOCP_HEAD_STRU)); ulLen = sizeof(VOS_UINT32) + (pstDspMsg->ulDataSize - DRA_RTT_NOT_NEED_CHARS_LEN); pData = VOS_MemAlloc(MSP_PID_DIAG_AGENT,DYNAMIC_MEM_PT,ulLen); if(NULL == pData) { return ERR_MSP_MALLOC_FAILUE; } /* 写入消息ID */ *(VOS_UINT32*)(pData) = pstDspMsg->ulID; /* 写入消息内容 */ VOS_MemCpy((pData + sizeof(VOS_UINT32)), (aucSocpPacket + DIAG_FULL_HEAD_LEN), (pstDspMsg->ulDataSize - DRA_RTT_NOT_NEED_CHARS_LEN)); DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_LTE_DSP_CNF,0,0,0); ret = BSP_MailBox_ComMsgWrite(EN_MAILBOX_SERVICE_LTE_OM, pData, ulLen, EN_MAILBOX_SLEEP_WAKEUP); if(ERR_MSP_SUCCESS != ret) { /* 开机时DSP未启动时,HSO下发DSP操作导致写失败,避免打印刷屏,屏蔽打印 */ // printf("write BSP_MailBox_ComMsgWrite fail!\n"); } VOS_MemFree(MSP_PID_DIAG_AGENT,pData); /*模拟DSP回复*/ stRttCnf.ulRc = ERR_MSP_SUCCESS; ret = diag_AgentCnfFun((VOS_UINT8*)&stRttCnf,ulCmdId,sizeof(DIAG_CMD_DSP_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_AgentDispatchCmd(VOS_UINT8* pstReq) { VOS_UINT32 ret =ERR_MSP_FAILURE; VOS_UINT32 ulCmdId = 0; if(NULL == pstReq) { return ret; } ulCmdId = (((MSP_DIAG_HEAD_STRU*)DIAG_OFFSET_SOCP_GET_DIAG_HEAD(pstReq))->ulID); DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_AGENT_DISPATCH_CMD,ulCmdId,0,0);/* [false alarm]:屏蔽Fortify */ if(MSP_STRU_ID_28_31_GROUP_MSP == MSP_STRU_ID_28_31_CMD_GROUP(ulCmdId)) { switch (MSP_STRU_ID_16_23_CMD_TYPE(ulCmdId)) { /*根据二级字段区分是给ps的透传命令还是msp内部命令或者PMU的命令*/ case MSP_STRU_ID_16_23_MSP_CMD: switch(MSP_STRU_ID_8_11_CMD_CATEGORY(ulCmdId)) { /*根据命令ID范围区分是哪种msp内部命令*/ case DIAG_CATEGORY_BBP: ret = diag_BbpProcEntry(pstReq,ulCmdId); break; case DIAG_CATEGORY_CFG: ret = diag_CfgProcEntry(pstReq,ulCmdId); break; case DIAG_CATEGORY_GTR: ret = diag_GtrProcEntry(pstReq,ulCmdId); break; default: break; } break; case MSP_STRU_ID_16_23_SYS_CMD: switch(MSP_STRU_ID_8_11_CMD_CATEGORY(ulCmdId)) { case DIAG_CATEGORY_CONN: ret = diag_ConnProcEntry(pstReq,ulCmdId); break; default: break; } break; default: break; } } else if((MSP_STRU_ID_28_31_GROUP_LTE_DSP == MSP_STRU_ID_28_31_CMD_GROUP(ulCmdId))|| (MSP_STRU_ID_28_31_GROUP_TDS_DSP == MSP_STRU_ID_28_31_CMD_GROUP(ulCmdId))) { ret = diag_DspTransProcEntry(pstReq,ulCmdId); } /*lint -e553*/ #if (FEATURE_BSP_LCH_OM == FEATURE_ON) /*lint +e553*/ else if(MSP_STRU_ID_28_31_GROUP_BSP == MSP_STRU_ID_28_31_CMD_GROUP(ulCmdId)) { switch (MSP_STRU_ID_16_23_CMD_TYPE(ulCmdId)) { case MSP_STRU_ID_16_23_BSP_CMD: ret = diag_BspProcEntry(pstReq,ulCmdId); break; default: break; } } #endif else { } return ret; }