VOS_VOID TTF_MNTN_ErrlogBufGet(VOS_UINT32 ulPid, MODEM_ID_ENUM_UINT16 enModemId, VOS_CHAR *pBuffer, VOS_UINT32 ulBytes) { VOS_UINT32 ulRslt; OM_RING_ID pRingId; if (VOS_NULL_PTR == pBuffer) { TTF_LOG(ulPid, 0, PS_PRINT_ERROR, "TTF_MNTN_ErrlogBufGet: pBuffer NULL PTR"); return; } if (enModemId >= MODEM_ID_BUTT) { TTF_LOG1(ulPid, 0, PS_PRINT_ERROR, "TTF_MNTN_ErrlogBufGet: Invalid ModemId ", enModemId); return; } pRingId = TTF_ERR_LOG_ENT_RINGID_GET(enModemId); if (VOS_NULL_PTR == pRingId) { TTF_LOG(ulPid, 0, PS_PRINT_ERROR, "TTF_MNTN_ErrlogBufGet: pRingId NULL PTR"); return; } ulRslt = VOS_SmP(TTF_ERR_LOG_ENT_SEM_GET(enModemId), TTF_ERR_SEM_TIMEOUT_LEN); if(VOS_OK != ulRslt) { TTF_LOG2(ulPid, 0, PS_PRINT_WARNING, "TTF_MNTN_ErrlogBufGet: VOS_SmP <1>, ulRslt<2> fail!", enModemId, (VOS_INT32)ulRslt); return; } ulRslt = (VOS_UINT32)OM_RingBufferGet(pRingId, pBuffer, (VOS_INT)ulBytes); if (ulRslt != ulBytes) { OM_RingBufferFlush(pRingId); TTF_LOG2(ulPid, 0, PS_PRINT_ERROR, "TTF_MNTN_ErrlogBufGet: ERROR OM_RingBufferGet fail!", (VOS_INT32)ulRslt, (VOS_INT32)ulBytes); } VOS_SmV(TTF_ERR_LOG_ENT_SEM_GET(enModemId)); }
VOS_UINT32 TTF_MemRbFreeMsgProc(const MsgBlock *pMsg) { VOS_UINT32 ulMsgType; if ( VOS_NULL_PTR == pMsg ) { /* 消息为空告警 */ TTF_LOG(UEPS_PID_TTF_MEM_RB_FREE, PS_PRINT_WARNING, "TTF_MemRb, TTF_MemRbFreeMsgProc, WARNING, Msg is NULL!\n"); return VOS_ERR; } if ( WUEPS_PID_AT == pMsg->ulSenderPid ) { ulMsgType = ((TTF_MEM_RB_CCPU_MEM_INFO_IND_STRU *)pMsg)->enMsgId; } else { return VOS_OK; } switch( ulMsgType ) { case ID_TTF_AT_QRY_CCPU_MEM_INFO_IND: TTF_MemCcpuCheckPoolLeak(); break; default: break; } return VOS_OK; } /* TTF_MemRbFreeMsgProc */
VOS_VOID PS_Qnode_SendEvent(VOS_UINT32 ulPid, VOS_UINT16 usEventId, VOS_VOID *pEventData, VOS_UINT32 ulDataLen) { DIAG_EVENT_IND_STRU stDiagEvent; VOS_UINT32 ulRet; PS_MEM_SET(&stDiagEvent, 0x0, sizeof(DIAG_EVENT_IND_STRU)); /* 填写事件内容 */ stDiagEvent.ulModule = DIAG_GEN_MODULE(VOS_GetModemIDFromPid(ulPid), DIAG_MODE_COMM); stDiagEvent.ulPid = ulPid; stDiagEvent.ulEventId = usEventId; stDiagEvent.ulLength = ulDataLen; stDiagEvent.pData = pEventData; ulRet = DIAG_EventReport(&stDiagEvent); /* 调用DIAG的事件上报接口 */ if ( VOS_OK != ulRet) { TTF_LOG(ulPid, DIAG_MODE_COMM, PS_PRINT_ERROR, "cttf mntn event sent fail"); } return; } /* PS_Qnode_SendEvent */
VOS_UINT32 TTF_MemRbFreeFidInit ( enum VOS_INIT_PHASE_DEFINE ip ) { VOS_UINT32 ulRslt; VOS_UINT32 ulReturnCode; switch( ip ) { case VOS_IP_LOAD_CONFIG: /* TTF_MemRb 模块注册PID */ ulRslt = VOS_RegisterPIDInfo(UEPS_PID_TTF_MEM_RB_FREE, (Init_Fun_Type)TTF_MemRbFreePidInit, (Msg_Fun_Type)TTF_MemRbFreeMsgProc); if( VOS_OK != ulRslt ) { TTF_LOG1(UEPS_PID_TTF_MEM_RB_FREE, PS_PRINT_ERROR, "reg TTF_MEM_RB_MemFreeFidInit VOS_RegisterPIDInfo FAIL! ulRslt: %d\n", (VOS_INT32)ulRslt); return (VOS_UINT32)VOS_ERROR; } ulRslt = VOS_RegisterTaskPrio(UEPS_FID_TTF_MEM_RB_FREE, TTF_MEM_RB_FREE_TASK_PRIO ); if( VOS_OK != ulRslt ) { TTF_LOG1(UEPS_PID_TTF_MEM_RB_FREE, PS_PRINT_ERROR, "reg MEM FREE task priority register FAIL ulRslt : %d !\n", (VOS_INT32)ulRslt); return (VOS_UINT32)VOS_ERROR; } /* TTF_MemRbRxFreeMemTask自处理任务注册 */ ulReturnCode = VOS_RegisterSelfTask(UEPS_FID_TTF_MEM_RB_FREE,(VOS_TASK_ENTRY_TYPE)TTF_MemRbRxFreeMemTask,VOS_PRIORITY_P5, (VOS_UINT32)TTF_MEM_RB_RX_MEM_FREE_TASK_STACK_SIZE); if ( VOS_NULL_BYTE == ulReturnCode ) { TTF_LOG(UEPS_PID_TTF_MEM_RB_FREE, PS_PRINT_ERROR, "TTF_MemRb, TTF_MEM_RB_MemFreeFidInit, ERROR, Fail regist IMM_RxFreeMemTask \n" ); return (VOS_UINT32)VOS_ERROR; } break; case VOS_IP_FARMALLOC: case VOS_IP_INITIAL: case VOS_IP_ENROLLMENT: case VOS_IP_LOAD_DATA: case VOS_IP_FETCH_DATA: case VOS_IP_STARTUP: case VOS_IP_RIVAL: case VOS_IP_KICKOFF: case VOS_IP_STANDBY: case VOS_IP_BROADCAST_STATE: case VOS_IP_RESTART: break; default: break; } return VOS_OK; }/* TTF_MemRbFreeFidInit */
VOS_VOID TTF_MemRbRemoteFreeMem( VOS_VOID *pucAddr) { VOS_ULONG ulLockLevel; VOS_UINT32 ulResult; VOS_UINT32 ulNum; VOS_INT32 lIsrRet; /* 中断操作返回值 */ VOS_SpinLockIntLock(&g_stTtfMemRBSpinLock, ulLockLevel); ulResult = LUP_EnQue(g_pstCcpuIMMMemFreeQue, pucAddr); g_stTtfMemRbMntnEntity.ulTtfMemRbEnQTotalCnt++; ulNum = LUP_QueCnt(g_pstCcpuIMMMemFreeQue); VOS_SpinUnlockIntUnlock(&g_stTtfMemRBSpinLock, ulLockLevel); if (PS_SUCC != ulResult) { g_stTtfMemRbMntnEntity.ulTtfMemRbEnQFailCnt++; vos_printf("TTF_MemRbRemoteFreeMem: LUP_EnQue fail!\n"); } #ifndef WTTF_PS_FUSION_PC_ST if ( 0 == (g_ulFreeTtfMemBlkNoticNum & ulNum)) { lIsrRet = TTF_MEM_TRIG_IPC_MEMRB_INT(IPC_CORE_APPARM, TTF_IPC_MEM_RECYCLE_INT); g_stTtfMemRbMntnEntity.ulTtfMemRbSendIntCnt++; if (lIsrRet != VOS_OK) { TTF_LOG(UEPS_PID_TTF_MEM_RB_FREE, PS_PRINT_ERROR, "ERROR:TTF_MemRbRemoteFreeMem: DRV_IPC_INTSEND fail!\n"); } } #else lIsrRet = VHW_IPC_IntSend((IPC_INT_CORE_E)IPC_CORE_APPARM, (IPC_INT_LEV_E)IPC_INT_DICC_RELDATA); g_stTtfMemRbMntnEntity.ulTtfMemRbSendIntCnt++; if (lIsrRet != VOS_OK) { TTF_LOG(UEPS_PID_TTF_MEM_RB_FREE, PS_PRINT_ERROR, "ERROR:TTF_MemRbRemoteFreeMem: DRV_IPC_INTSEND fail!\n"); } #endif return; }/*TTF_MemRbRemoteFreeMem*/
PS_RSLT_CODE_ENUM_UINT32 PS_Qnode_FillMemInfo(VOS_UINT16 usFileId, VOS_UINT16 usLineId, VOS_UINT32 ulPid, PS_QNODE_STRU *pstQnode, PS_QNODE_MEM_SOURCE_STRU *pstMemSrc, VOS_UINT8 ucParaOctetCnt, VOS_UINT8 aucPara[]) { VOS_UINT32 ulTick; ulTick = VOS_GetTick(); if (VOS_NULL_PTR == pstQnode) { TTF_LOG4(ulPid, DIAG_MODE_COMM, PS_PRINT_WARNING, "fileid, line, pid, tick, pstQnode is NULL", usFileId, usLineId, (VOS_INT32)ulPid, (VOS_INT32)ulTick); return PS_FAIL; } if (VOS_NULL_PTR == pstMemSrc) { TTF_LOG4(ulPid, DIAG_MODE_COMM, PS_PRINT_WARNING, "fileid, line, pid, tick, pstMemSrc is NULL", usFileId, usLineId, (VOS_INT32)ulPid, (VOS_INT32)ulTick); return PS_FAIL; } if (PS_QNODE_FREE_STATE == pstQnode->enState) { TTF_LOG4(ulPid, DIAG_MODE_COMM, PS_PRINT_WARNING, "fileid, line, pid, tick, pstQnode state is free", usFileId, usLineId, (VOS_INT32)ulPid, (VOS_INT32)ulTick); return PS_FAIL; } if (ucParaOctetCnt > MAX_PARA_OCTET_NUM) { TTF_LOG(ulPid, DIAG_MODE_COMM, PS_PRINT_WARNING, "more than allowed para octet num"); return PS_FAIL; } PS_MEM_CPY(&(pstQnode->stMemSrc), pstMemSrc, sizeof(pstQnode->stMemSrc)); if (0 != ucParaOctetCnt) { PS_MEM_CPY(&(pstQnode->aucPara[0]), aucPara, (ucParaOctetCnt * sizeof(VOS_UINT8))); } return PS_SUCC; } /* PS_Qnode_FillMemInfo */
VOS_VOID TTF_RbRxFreeMemTaskInit( VOS_VOID ) { VOS_UINT32 ulResult; PS_MEM_SET(&g_stTtfMemRbMntnEntity, 0x0, sizeof(TTF_MEM_RB_MNTN_INFO_STRU)); /* 初始化信号量 */ if ( VOS_OK != VOS_SmBCreate("ulMemFreeSem", 0, VOS_SEMA4_FIFO, (VOS_SEM *)&g_ulTtfMemRbFreeSem ) ) { TTF_LOG(UEPS_PID_TTF_MEM_RB_FREE, PS_PRINT_ERROR, "TTF_MemRb, TTF_MEM_RB_RxFreeMemTaskInit, ERROR, Create ulMemFreeSem fail!\n"); return ; } /*两核内存回收和释放队列初始化*/ /*lint -e778*/ ulResult = LUP_CreateSharedQue(UEPS_PID_TTF_MEM_RB_FREE, &g_pstCcpuTTFMemFreeQue, TTF_MEM_FREE_QUE_LEN, (VOS_UINT8*)(CORESHARE_MEM_WAN_ADDR), TTF_MEM_FREE_AREA_SIZE); /*lint +e778*/ if (PS_SUCC != ulResult) { vos_printf("TTF_RbRxFreeMemTaskInit: Create g_pstCcpuTTFMemFreeQue fail!\n"); return ; } /*lint -e778*/ ulResult = LUP_CreateSharedQue(UEPS_PID_TTF_MEM_RB_FREE, &g_pstCcpuIMMMemFreeQue, IMM_MEM_FREE_QUE_LEN, (VOS_UINT8*)(CORESHARE_MEM_WAN_ADDR+TTF_MEM_FREE_AREA_SIZE), IMM_MEM_FREE_AREA_SIZE); /*lint +e778*/ if (PS_SUCC != ulResult) { vos_printf("TTF_RbRxFreeMemTaskInit: Create g_pstCcpuIMMMemFreeQue fail!\n"); return ; } TTF_MemRbIsrInit(UEPS_PID_TTF_MEM_RB_FREE, TTF_IPC_MEM_FREE_INT, (VOIDFUNCPTR)TTF_MemRbRelDataIsr); TTF_MemRegExtFreeCallBack(TTF_MemRbRemoteFreeMem); return; }/* TTF_RbRxFreeMemTaskInit */
VOS_VOID TTF_MNTN_ErrlogBufPut(VOS_UINT32 ulPid, VOS_CHAR *pBuffer, VOS_UINT32 ulBytes) { MODEM_ID_ENUM_UINT16 enModemId; VOS_UINT32 ulRslt; VOS_UINT32 ulBuffFreeSize; OM_RING_ID pRingId; if (VOS_NULL_PTR == pBuffer) { TTF_LOG(ulPid, 0, PS_PRINT_WARNING, "TTF_MNTN_ErrlogBufPut: pBuffer NULL PTR"); return; } enModemId = VOS_GetModemIDFromPid(ulPid); if (enModemId >= MODEM_ID_BUTT) { TTF_LOG1(ulPid, 0, PS_PRINT_ERROR, "TTF_MNTN_ErrlogBufPut: Invalid ModemId ", enModemId); return; } pRingId = TTF_ERR_LOG_ENT_RINGID_GET(enModemId); if (VOS_NULL_PTR == pRingId) { TTF_LOG(ulPid, 0, PS_PRINT_WARNING, "TTF_MNTN_ErrlogBufPut: pRingId NULL PTR"); return; } ulRslt = VOS_SmP(TTF_ERR_LOG_ENT_SEM_GET(enModemId), TTF_ERR_SEM_TIMEOUT_LEN); if(VOS_OK != ulRslt) { TTF_LOG2(ulPid, 0, PS_PRINT_WARNING, "TTF_MNTN_ErrlogBufPut: Create TTF_ERR_LOG_ENT_SEM<1>, ulRslt<2> fail!", enModemId, (VOS_INT32)ulRslt); return; } ulBuffFreeSize =(VOS_UINT32) OM_RingBufferFreeBytes(pRingId); /* Buffer不足,溢出处理 */ if (ulBuffFreeSize < (ulBytes + TTF_ERR_LOG_ENT_GET_BUF_RSV_LEN(enModemId))) { TTF_ERR_LOG_ENT_UPDT_BUFFER_OVER_CNT(enModemId, 1); OM_RingBufferFlush(pRingId); } ulRslt = (VOS_UINT32)OM_RingBufferPut(pRingId, pBuffer, (VOS_INT)ulBytes); if (ulBytes != ulRslt) { OM_RingBufferFlush(pRingId); } VOS_SmV(TTF_ERR_LOG_ENT_SEM_GET(enModemId)); return; }