int bsp_sci_cfg_init(void) { unsigned int i = 0; unsigned int init_func_num; /* coverity[assign] */ int *p_init_start = (int *)&_sci_init_data_start; int call_addr; NV_SCI_CFG_UNION nv_sci; SCI_INIT_FUNCP p_func_sci_init; int card_type = 0; #if (FEATURE_ON == FEATURE_MULTI_MODEM) /*读取NV_SCI的值*/ (void)bsp_sci_get_nv(&nv_sci.value); #else nv_sci.value = g_SciNVValue; #endif /*解析NV_SCI*/ if (BSP_ERROR == bsp_sci_parse_nv(&nv_sci)) { sci_print_error("parse nv failed!\n"); return BSP_ERROR; } init_func_num = &_sci_init_data_end - &_sci_init_data_start; card_type = ((NV_SCI_CFG_UNION *)&g_SciNVValue)->cfg.card_num; if(SCI_SINGLE == card_type) { init_func_num= 1; } else if (SCI_SINGLE_MODLEM1 == card_type) { init_func_num= 1; /* coverity[ptr_arith] */ p_init_start++; } sci_print_debug("init_func_num %d start_add_opp 0x%0x\r\n", init_func_num,(p_init_start-(int*)&_sci_init_data_start)); /*调用SCI的初始化*/ for (i = 0; i < init_func_num; i++) { call_addr = *(volatile int *)p_init_start; p_func_sci_init = (SCI_INIT_FUNCP)call_addr; sci_print_debug("call init function of card%d, address is 0x%x\r\n",i, call_addr); p_func_sci_init(); /* coverity[ptr_arith] */ p_init_start++; } return BSP_OK; }
/***************************************************************************** 函 数 名 : bsp_sci_get_nv 功能描述 : 获取SCI的NV项值 输入参数 : 输出参数 : 无 返 回 值 : int 调用函数 : 被调函数 : 修改历史 : *****************************************************************************/ int bsp_sci_get_nv(unsigned int *value) { /*调用NV读接口*/ if(BSP_OK == bsp_nvm_read(NV_ID_DRV_SCI_DSDA_SELECT, (u8*)&g_SciNVValue, NV_SCI_LEN)) { #if (FEATURE_ON==FEATURE_MULTI_MODEM) if(0x802 !=g_SciNVValue && 0x102 !=g_SciNVValue) { g_SciNVValue = 0x802; } #endif /*读取成功*/ *value = g_SciNVValue; sci_print_debug("nv value:0x%x\r\n",g_SciNVValue); return BSP_OK; } else { #if (FEATURE_ON==FEATURE_MULTI_MODEM) *value = 0x802; #else /*读取失败,默认是单卡0*/ *value = 0x0; #endif sci_print_error("default value is 0x%x\r\n", 0); return BSP_ERROR; } }
int bsp_sci_get_nv(unsigned int *value) { /*调用NV读接口*/ if(BSP_OK == bsp_nvm_read(NV_ID_DRV_SCI_DSDA_SELECT, (u8*)&g_SciNVValue, NV_SCI_LEN)) { bsp_sci_set_default_nv(); /*读取成功*/ *value = g_SciNVValue; sci_print_debug("nv value:0x%x\r\n",g_SciNVValue); return BSP_OK; } else { *value = g_SciNVValue; sci_print("read nv error use default val %x\n",g_SciNVValue); return BSP_ERROR; } }
int bsp_sci_parse_nv(NV_SCI_CFG_UNION * nv) { NV_SCI_CFG_UNION *p_nv_sci = nv; if (SCI_SINGLE == p_nv_sci->cfg.card_num) { /*单卡0场景*/ if (p_nv_sci->cfg.card0 <= CARD_CONNECT_SCI1) { sci_print_debug("card0 connect sci%d\r\n",p_nv_sci->cfg.card0); if(BSP_OK != bsp_sci_cfg(CARD0, p_nv_sci->cfg.card0)) { sci_print_error("cfg sci%d failed! \r\n",p_nv_sci->cfg.card0); return BSP_ERROR; } } else { /*暂不支持多卡*/ sci_print_error("do not support multi card! case 1\n"); return ERROR; } } else if(SCI_SINGLE_MODLEM1 == p_nv_sci->cfg.card_num) { /*单卡1场景*/ if (p_nv_sci->cfg.card1 <= CARD_CONNECT_SCI1) { sci_print_debug("SCI_SINGLE_MODLEM1 connect sci%d\r\n",p_nv_sci->cfg.card1); if(BSP_OK != bsp_sci_cfg(CARD1, p_nv_sci->cfg.card1)) { sci_print_error("cfg sci%d failed! \r\n",p_nv_sci->cfg.card1); return BSP_ERROR; } } else { /*暂不支持多卡*/ sci_print_error("do not support multi card! case 2\n"); return ERROR; } } else if (SCI_DUAL == p_nv_sci->cfg.card_num) { /*双卡场景*/ if ((p_nv_sci->cfg.card0 <= CARD_CONNECT_SCI1) && (p_nv_sci->cfg.card1 <= CARD_CONNECT_SCI1) && (p_nv_sci->cfg.card0 != p_nv_sci->cfg.card1)) { sci_print_debug("dual cards, card0 connect sci%d,card1 connect sci%d\r\n",p_nv_sci->cfg.card0, p_nv_sci->cfg.card1); if(BSP_OK != bsp_sci_cfg(CARD0, p_nv_sci->cfg.card0)) { sci_print_error("bsp_sci_parse_nv, total cfg sci%d failed! \r\n",p_nv_sci->cfg.card0); return BSP_ERROR; } if(BSP_OK != bsp_sci_cfg(CARD1, p_nv_sci->cfg.card1)) { sci_print_error(" total cfg sci%d failed! \r\n",p_nv_sci->cfg.card1); return BSP_ERROR; } } else { /*暂不支持多卡*/ sci_print_error("do not support multi card! case 3\n"); return BSP_ERROR; } } else { /*暂不支持多卡*/ sci_print_error(" do not support multi card! case 4\n"); return BSP_ERROR; } return BSP_OK; }