VOS_UINT32 diag_BufCtrlGlobalInit(VOS_VOID) { VOS_UINT32 ret = ERR_MSP_SUCCESS; VOS_UINT32 i = 0; VOS_INT32 aulLen[DIAG_CODER_SRC_TYPE_BUTT] = {0,}; #ifndef CHIP_BB_HI6210 BSP_DDR_SECT_QUERY_S stSectQuery = {}; BSP_DDR_SECT_INFO_S stSectInfo = {}; #endif /* 创建 控制LOG上报的信号量,第二个参数1表示一开始能take到信号量,不需等待,0表示一开始take不到*/ ret = VOS_SmBCreate(NULL, 1, VOS_SEMA4_FIFO,&g_DiagLogSem); if (ERR_MSP_SUCCESS != ret) { diag_printf("[%s]:VOS_SmBCreate fail!\n",__FUNCTION__); return ret; } #ifndef CHIP_BB_HI6210 stSectQuery.enSectType = BSP_DDR_SECT_TYPE_SOCP; mdrv_get_fix_ddr_addr(&stSectQuery, &stSectInfo); g_DiagMemVirt = stSectInfo.pSectVirtAddr; g_DiagMemPhy = stSectInfo.pSectPhysAddr; g_DiagMemSize = stSectInfo.ulSectSize; #else /*lint -save -e40 -e539*/ #ifdef DIAG_MEMMAP g_DiagMemVirt = (VOS_UINT8*)MSP_NOCACHEMAP(DIAG_MEM_ADDR_BASE,DIAG_MEM_TOTAL_SIZE); #else g_DiagMemVirt = (VOS_UINT8*)SOCP_GLOBAL_MEM_ADDR_VIRT; #endif /*lint -restore*/ #endif diag_GetBufLen((VOS_UINT32 *)aulLen); /* 创建log发送缓冲区 */ for(i = 0 ; i< DIAG_CODER_SRC_TYPE_BUTT; i++) { if (VOS_OK != diag_CreateLogBuf(&g_stDiagBufCtrl[i], aulLen[i])) { diag_printf("diag_BufCtrlGlobalInit:diag_CreateLogBuffer Failed!\n"); return ERR_MSP_FAILURE; } } #if ((VOS_OS_VER == VOS_VXWORKS) || (VOS_OS_VER == VOS_RTOSCK)) /*lint -save -e539*/ diag_InitSocpChan(); /*lint -restore */ #endif return ret; }
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; }