VOS_VOID PS_Qnode_ResetGetFailProc ( VOS_UINT16 usFileId, VOS_UINT16 usLineId, VOS_UINT32 ulPid ) { PS_QNODE_RESET_STATISTIC_INFO_STRU *pstResetStatInfo; pstResetStatInfo = &g_stPsQnodeResetStatInfo; TTF_LOG3(ulPid, DIAG_MODE_COMM, PS_PRINT_INFO, "PS_Qnode_ResetGetFailProc,stat info, enStartStat %d, usAllocFailCnt %d, usAllocTotolCnt %d! \n", (VOS_INT32)pstResetStatInfo->enStartStat, (VOS_INT32)pstResetStatInfo->usFailCnt, (VOS_INT32)pstResetStatInfo->usTotalStatCnt); /* 第一次申请失败且复位使能打开,则开始统计 */ if ((PS_FALSE == pstResetStatInfo->enStartStat) && (PS_TRUE == PS_QNODE_RESET_SWITCH)) { pstResetStatInfo->enStartStat = PS_TRUE; } if (PS_TRUE == pstResetStatInfo->enStartStat) { pstResetStatInfo->usFailCnt++; pstResetStatInfo->usTotalStatCnt++; if (PS_QNODE_RESET_TOTAL_STAT_CNT <= pstResetStatInfo->usTotalStatCnt) { if ((((VOS_UINT32)pstResetStatInfo->usFailCnt * 100 / pstResetStatInfo->usTotalStatCnt ) >= PS_QNODE_RESET_THRESHOLD) && (PS_TRUE == PS_QNODE_RESET_SWITCH)) { mdrv_om_system_error(PS_QNODE_GET_SYSTEM_ERROR_ID, usFileId, usLineId, VOS_NULL_PTR, 0); } else { TTF_LOG2(ulPid, DIAG_MODE_COMM, PS_PRINT_INFO, "PS_Qnode_ResetGetFailProc,do not rst, usAllocFailCnt %d, usAllocTotolCnt %d! \n", (VOS_INT32)pstResetStatInfo->usFailCnt, (VOS_INT32)pstResetStatInfo->usTotalStatCnt); PS_Qnode_ResetStatInfoInit(); } } } return; }
VOS_UINT32 NV_Init(VOS_VOID) { VOS_UINT8 aucMagicNum[NV_MAGIC_NUM_LEN]; VOS_UINT8 aucTemp[NV_MAGIC_NUM_LEN]; BSP_DDR_SECT_INFO_S stNVMemInfo; BSP_DDR_SECT_QUERY_S stNVMemQuery; g_ulNVInitStartSlice = mdrv_timer_get_normal_timestamp(); /*lint -e534*/ VOS_MemSet(g_astNvFileHandle, 0, sizeof(g_astNvFileHandle)); vos_printf("\r\n---------------------NV_Init Start-----------------------------\r\n"); VOS_MemSet(aucMagicNum, NV_MAGIC_NUM, NV_MAGIC_NUM_LEN); /*lint +e534*/ stNVMemQuery.enSectType = BSP_DDR_SECT_TYPE_NV; stNVMemQuery.ulSectSize = NV_BACKUP_BUFFER_SIZE; stNVMemQuery.enSectAttr = BSP_DDR_SECT_ATTR_NONCACHEABLE; if(MDRV_OK != mdrv_get_fix_ddr_addr(&stNVMemQuery, &stNVMemInfo)) { /*lint -e534*/ vos_printf("\r\nNV_Init: Acpu mdrv_get_fix_ddr_addr Failed\r\n"); /*lint +e534*/ mdrv_om_system_error(NV_INIT_ERROR, NV_GET_DRV_FIX_DDR_ADDR_FAIL, 0, (VOS_CHAR *)VOS_NULL_PTR, 0); return NV_INIT_FAIL; } g_ulNVMemAddr = (VOS_UINT_PTR)mdrv_phy_to_virt(MEM_DDR_MODE, stNVMemInfo.pSectPhysAddr); /*上层使用虚地址*/ /* 创建NV写操作保护信号量 */ if(VOS_OK != VOS_SmMCreate("NV", VOS_SEMA4_PRIOR | VOS_SEMA4_INVERSION_SAFE, &g_ulNVWriteSem)) { return VOS_ERR; } if(MDRV_OK != mdrv_ipc_sem_create(IPC_SEM_NVIM)) { NV_Printf("NV_Init: Acpu mdrv_ipc_sem_create Failed\r\n"); return NV_INIT_FAIL; } /* 等待C 核NV初始化完毕 */ (VOS_VOID)VOS_SmP(g_ulNVInitSem, 0); NV_MEMCPY(aucTemp, (VOS_VOID*)NV_MAGICNUM_ADDR, NV_MAGIC_NUM_LEN); /*从share memory读取标志字节*/ if(VOS_OK != VOS_MemCmp(aucMagicNum, aucTemp, NV_MAGIC_NUM_LEN)) /*Ccpu的Nv项已经初始化成功*/ { /* 单板复位 */ mdrv_om_system_error(NV_INIT_ERROR, NV_GET_CCORE_MAGIC_NUM_FAIL, 0, (VOS_CHAR *)VOS_NULL_PTR, 0); } NV_BuildGlobalVar(); /*lint -e534*/ vos_printf("\r\n---------------------NV_Init End-----------------------------\r\n"); /*lint +e534*/ g_ulNVInitEndSlice = mdrv_timer_get_normal_timestamp(); DRV_MSP_PROC_REG(OM_READ_NV_PROC, (BSP_MspProc)NV_ReadEx); /* 检测是否开启NV写操作记录跟踪 */ if (NV_OK != NV_ReadEx(MODEM_ID_0, en_NV_Item_Write_Slice_Record_Flag, (VOS_VOID*)&g_ulRecordNvFlag, sizeof(g_ulRecordNvFlag))) { g_ulRecordNvFlag = 0; } return NV_OK; }
/***************************************************************************** Function Name : diag_ReleaseLogMem Description : 释放从缓冲区中分配连续的物理内存 Input :DIAG_BUF_CTRL_STRU *pstBufCtrl VOS_UINT8 *pAddr VOS_INT32 lLen Output : None Return : VOS_UINT32 History : 1.w00182550 2012-12-18 Draft Enact *****************************************************************************/ VOS_UINT32 diag_ReleaseLogMem(DIAG_BUF_CTRL_STRU *pstBufCtrl,VOS_UINT8 *pAddr, VOS_INT32 lLen) { VOS_INT32 lUsedSize; VOS_INT32 lTmpRls; /* 如果当前处于中断上下文,则复位系统,诊断接口不允许在中断中使用*/ if(VOS_FALSE != VOS_CheckInterrupt()) { mdrv_om_system_error(DIAG_CALLED_IN_IRQ, MSP_FILE_ID_DIAG_BUF_CTRL_C, __LINE__, VOS_NULL, 0);/*lint !e569*/ } /* 输入参数检测 */ if ((VOS_NULL_PTR == pstBufCtrl) || (lLen >= pstBufCtrl->lBufSize)) { diag_printf("diag_ReleaseLogMem:入参不对,lLen=%d!\n",lLen); return ERR_MSP_FAILURE; } /* 释放内存地址进行检测 */ if ((pAddr != (pstBufCtrl->pucBuf + pstBufCtrl->lRelease)) && (pAddr != pstBufCtrl->pucBuf)) { diag_printf("diag_ReleaseLogMem:待释放地址不对!pAddr=%p,pstBufCtrl->pucBuf=%p,pstBufCtrl->lRelease=0x%x\n", pAddr,pstBufCtrl->pucBuf,pstBufCtrl->lRelease); /*DRV_SYSTEM_ERROR(DIAG_REALSE_POINTER_ERROR, MSP_FILE_ID_DIAG_BUF_CTRL_C, __LINE__, VOS_NULL, 0);*//*lint !e569*/ } /* 未回卷 */ if (pstBufCtrl->lAlloc >= pstBufCtrl->lRelease) { lUsedSize = pstBufCtrl->lAlloc - pstBufCtrl->lRelease; /* 长度错误 */ if (lUsedSize < lLen) { diag_printf("diag_ReleaseLogMem:使用长度小于待释放长度!lAlloc=0x%x,lRelease=0x%x,lLen=%d!\n", pstBufCtrl->lAlloc,pstBufCtrl->lRelease,lLen); return ERR_MSP_FAILURE; } pstBufCtrl->lRelease = pAddr + lLen - pstBufCtrl->pucBuf; return ERR_MSP_SUCCESS; } if ((pAddr - pstBufCtrl->pucBuf + lLen) > pstBufCtrl->lBufSize) { lTmpRls = ((pAddr - pstBufCtrl->pucBuf + lLen) + pstBufCtrl->lPadding) % pstBufCtrl->lBufSize; } else { lTmpRls = (pAddr - pstBufCtrl->pucBuf + lLen) % pstBufCtrl->lBufSize; } /* 输入ulLen不正确 */ if ((lTmpRls > pstBufCtrl->lAlloc) && (lTmpRls < pstBufCtrl->lRelease)) { diag_printf("diag_ReleaseLogMem:有回卷情况,待释放地址不对!\n"); return ERR_MSP_FAILURE; } /* 如果发生回卷则将Padding值归0 */ if (lTmpRls <= pstBufCtrl->lAlloc) { pstBufCtrl->lPadding = 0; } pstBufCtrl->lRelease = lTmpRls; return ERR_MSP_SUCCESS; }