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; }
VOS_UINT32 OM_PrintfInit(VOS_VOID) { OM_PORT_CFG_STRU stPortCfg; NAS_NVIM_SYSTEM_APP_CONFIG_STRU stAPPConfig; stAPPConfig.usSysAppConfigType = SYSTEM_APP_BUTT; if(NV_OK != NV_Read(en_NV_Item_System_APP_Config, &stAPPConfig, sizeof(NAS_NVIM_SYSTEM_APP_CONFIG_STRU))) { PS_LOG(WUEPS_PID_OM, 0, PS_PRINT_ERROR, "OM_AcpuSelfTaskReg:Read NV en_NV_Item_System_APP_Config fail!"); } if(SYSTEM_APP_WEBUI != stAPPConfig.usSysAppConfigType) { return VOS_OK; } VOS_MemSet(&g_stOmPrintfErrRecord, 0, sizeof(OM_PRINTF_ERROR_RECORD_STRU)); VOS_MemSet(g_astOmPrintfOutPutLev, LOG_LEVEL_OFF, OM_PRINTF_MODULE_MAX_NUM*sizeof(LOG_LEVEL_EN)); /* 读NV项获取输出端口配置和文件大小,若失败则默认输出端口为SHELL口, 文件大小为0表示取默认文件大小 */ if(NV_OK != NV_Read(en_NV_Item_Om_Printf_Port, &stPortCfg, sizeof(OM_PORT_CFG_STRU))) { stPortCfg.ulMaxFileSize = 0; } else { /* 判断端口范围 */ if (OM_OUTPUT_BUTT > stPortCfg.enPortType) { g_ulOmPrintfPort = (VOS_UINT32)stPortCfg.enPortType; } } /* 创建Printf BUFFER 保护信号量 */ if(VOS_OK != VOS_SmMCreate("Pt", VOS_SEMA4_PRIOR | VOS_SEMA4_INVERSION_SAFE, &g_ulOmPrintfBuffSem)) { return VOS_ERR; } /*创建存储OM_Printf数据的环形缓冲区*/ g_pstOmPrintfBufId = OM_RingBufferCreate(OM_PRINTF_BUFFER_SIZE); if (VOS_NULL_PTR == g_pstOmPrintfBufId) { VOS_SmDelete(g_ulOmPrintfBuffSem); return VOS_ERR; } #if (VOS_OS_VER == VOS_LINUX) if (VOS_OK != OmPrintf_VFInit()) { VOS_SmDelete(g_ulOmPrintfBuffSem); return VOS_ERR; } #endif DRV_MSP_PROC_REG(OM_PRINTF_WITH_MODULE, (BSP_MspProc)OM_PrintfWithModule); DRV_MSP_PROC_REG(OM_PRINTF, (BSP_MspProc)OM_Printf); DRV_MSP_PROC_REG(OM_PRINTF_GET_MODULE_IDLEV,(BSP_MspProc)OM_PrintfGetModuleIdLev); /* 模块初始化完后将全局变量置TRUE*/ g_bIsPrintfInit = VOS_TRUE; return VOS_OK; }