STATIC ssize_t show_country_code(struct device *dev, struct kobj_attribute *attr, char *buf) { int8 *country_code = NULL; int ret; int8 ibuf[COUNTRY_CODE_LEN]={0}; if (NULL == buf) { PS_PRINT_ERR("buf is NULL\n"); return -FAILURE; } country_code = hwifi_get_country_code(); if (strncmp(country_code, "99", strlen("99")) == 0) { ret = get_cust_conf_string(INI_MODU_WIFI, STR_COUNTRY_CODE, ibuf, sizeof(ibuf) - 1); if (ret == INI_SUCC) { strncpy(buf, ibuf, COUNTRY_CODE_LEN); buf[COUNTRY_CODE_LEN-1] = '\0'; return strlen(buf); } else { PS_PRINT_ERR("get dts country_code error\n"); return 0; } } else { return snprintf(buf, COUNTRY_CODE_LEN, "%s", country_code); } }
OAL_STATIC int32 hwifi_config_init_nvram(void) { int32 l_ret = INI_FAILED; int32 l_cfg_id; int32 aul_nvram_params[NVRAM_PARAMS_INDEX_BUTT]={0}; oal_memset(g_auc_nv_params, 0x00, sizeof(g_auc_nv_params)); l_ret = get_cust_conf_string(CUST_MODU_NVRAM, OAL_PTR_NULL, g_auc_nv_params, sizeof(g_auc_nv_params)); /* nv读取失败或者返回的参数值为零,尝试读取ini */ if(INI_FAILED == l_ret || !g_auc_nv_params[0]) { OAM_WARNING_LOG3(0, OAM_SF_ANY, "hwifi_config_init_nvram read nvram failed[ret:%d] or wrong values[first eight values:0x%x %x], read dts instead!", l_ret, *((oal_uint32*)g_auc_nv_params),*((oal_uint32*)(g_auc_nv_params+4))); /* 先尝试从ini文件中读取,读不到的话再从dts中读取 */ for (l_cfg_id = NVRAM_PARAMS_INDEX_0; l_cfg_id < NVRAM_PARAMS_INDEX_BUTT; l_cfg_id++) { l_ret = get_cust_conf_int32(INI_MODU_WIFI, g_ast_nvram_config_ini[l_cfg_id].name, &aul_nvram_params[l_cfg_id]); if(INI_FAILED == l_ret) { OAM_ERROR_LOG1(0, OAM_SF_ANY, "hwifi_config_init_nvram read %d from ini failed!", l_cfg_id); break; } } if (NVRAM_PARAMS_INDEX_BUTT == l_cfg_id) { OAM_INFO_LOG0(0, OAM_SF_ANY, "hwifi_config_init_nvram read from ini success!"); oal_memcopy(g_auc_nv_params, aul_nvram_params, sizeof(g_auc_nv_params)); return INI_SUCC; } l_ret = get_cust_conf_string(CUST_MODU_DTS, NVRAM_PARAMS_ARRAY, g_auc_nv_params, sizeof(g_auc_nv_params)); if(INI_FAILED == l_ret) { OAM_WARNING_LOG0(0, OAM_SF_ANY, "hwifi_config_init_nvram read dts failed!"); /* 读取dts也失败时将数组置零,防止下发至device */ oal_memset(g_auc_nv_params, 0x00, sizeof(g_auc_nv_params)); return INI_FAILED; } } return INI_SUCC; }
int32 hwifi_fetch_ori_caldata(uint8* auc_caldata, int32 l_nvm_len) { int32 l_ret = INI_FAILED; int32 l_cfg_id; int32 aul_nvram_params[NVRAM_PARAMS_INDEX_BUTT]={0}; if (l_nvm_len != HISI_CUST_NVRAM_LEN) { OAM_ERROR_LOG2(0, OAM_SF_ANY, "hwifi_fetch_ori_caldata atcmd[nv_len:%d] and plat_ini[nv_len:%d] model have different nvm lenth!!", l_nvm_len, HISI_CUST_NVRAM_LEN); return INI_FAILED; } oal_memset(auc_caldata, 0x00, HISI_CUST_NVRAM_LEN); for (l_cfg_id = NVRAM_PARAMS_INDEX_0; l_cfg_id < NVRAM_PARAMS_INDEX_BUTT; l_cfg_id++) { l_ret = get_cust_conf_int32(INI_MODU_WIFI, g_ast_nvram_config_ini[l_cfg_id].name, &aul_nvram_params[l_cfg_id]); if(INI_FAILED == l_ret) { OAM_ERROR_LOG1(0, OAM_SF_ANY, "hwifi_fetch_ori_caldata read ori caldata %d from ini failed!", l_cfg_id); break; } } if (NVRAM_PARAMS_INDEX_BUTT == l_cfg_id) { OAM_INFO_LOG0(0, OAM_SF_ANY, "hwifi_fetch_ori_caldata read ori caldata from ini success!"); oal_memcopy(auc_caldata, aul_nvram_params, HISI_CUST_NVRAM_LEN); return INI_SUCC; } l_ret = get_cust_conf_string(CUST_MODU_DTS, NVRAM_PARAMS_ARRAY, auc_caldata, HISI_CUST_NVRAM_LEN); if(INI_FAILED == l_ret) { OAM_ERROR_LOG0(0, OAM_SF_ANY, "hwifi_fetch_ori_caldata read ori caldata from dts failed!"); return INI_FAILED; } return INI_SUCC; }
int32 hwifi_config_init(int32 cus_tag) { int32 l_cfg_id; int32 l_ret = INI_FAILED; int32 l_ori_val; wlan_cfg_cmd* pgast_wifi_config; int32* pgal_params; int32 l_cfg_value = 0; int32 l_wlan_cfg_butt; switch (cus_tag) { case CUS_TAG_NV: return hwifi_config_init_nvram(); case CUS_TAG_INI: host_params_init_first(); pgast_wifi_config = g_ast_wifi_config_cmds; pgal_params = g_al_host_init_params; l_wlan_cfg_butt = WLAN_CFG_INIT_BUTT; break; case CUS_TAG_DTS: original_value_for_dts_params(); pgast_wifi_config = g_ast_wifi_config_dts; pgal_params = g_al_dts_params; l_wlan_cfg_butt = WLAN_CFG_DTS_BUTT; break; default: OAM_ERROR_LOG1(0, OAM_SF_ANY, "hisi_customize_wifi tag number[0x%x] not correct!", cus_tag); return INI_FAILED; } for(l_cfg_id=0; l_cfg_id<l_wlan_cfg_butt; ++l_cfg_id) { if(CUS_TAG_INI == cus_tag && WLAN_CFG_INIT_COUNTRY_CODE == l_cfg_id) { /* 获取ini中的国家码 */ l_ret = get_cust_conf_string(INI_MODU_WIFI, pgast_wifi_config[l_cfg_id].name, g_ac_country_code, sizeof(g_ac_country_code)); if(INI_FAILED == l_ret) { OAM_WARNING_LOG0(0, OAM_SF_ANY, "hisi_customize_wifi read country code failed, check if it exists!"); strncpy(g_ac_country_code, "99", 2); } g_ac_country_code[2] = '\0'; continue; } /* 获取ini或dts中的配置值 */ l_ret = get_cust_conf_int32(INI_MODU_WIFI, pgast_wifi_config[l_cfg_id].name, &l_cfg_value); if (INI_FAILED == l_ret) { l_ret = get_cust_conf_int32(CUST_MODU_DTS, pgast_wifi_config[l_cfg_id].name, &l_cfg_value); if(INI_FAILED == l_ret) { OAM_WARNING_LOG1(0, OAM_SF_ANY, "hisi_customize_wifi read ini or dts file failed, check if cfg_id[%d] exists!", l_cfg_id); continue; } } l_ori_val = pgal_params[l_cfg_id]; pgal_params[l_cfg_id] = l_cfg_value; OAM_WARNING_LOG3(0, OAM_SF_ANY, "hisi_customize_wifi [cfg_id:%d]value changed from [init:%d] to [config:%d]. \n", l_cfg_id, l_ori_val, pgal_params[l_cfg_id]); } return INI_SUCC; }
int ini_cfg_init(void) { // int8 auc_value[20]; int32 ret; int8 auc_dts_ini_path[INI_FILE_PATH_LEN] = {0}; int8 auc_cust_spec_ini_path[INI_FILE_PATH_LEN] = {0}; int8 auc_cust_comm_ini_path[INI_FILE_PATH_LEN] = {0}; #ifdef CONFIG_HWCONNECTIVITY if (!isMyConnectivityChip(CHIP_TYPE_HI110X)) { INI_ERROR("cfg ini chip type is not match, skip driver init"); return -EINVAL; } else { INI_INFO("cfg init type is matched with hi110x, continue"); } #endif INI_DEBUG("hi110x ini config search init!\n"); ret = get_cust_conf_string(CUST_MODU_DTS, PROC_NAME_INI_FILE_NAME, auc_dts_ini_path, sizeof(auc_dts_ini_path)); if ( 0 > ret ) { INI_ERROR("can't find dts proc %s\n", PROC_NAME_INI_FILE_NAME); return INI_FAILED; } snprintf(auc_cust_spec_ini_path, sizeof(auc_cust_spec_ini_path), "%s%s", CUST_PATH_SPEC, auc_dts_ini_path); snprintf(auc_cust_comm_ini_path, sizeof(auc_cust_comm_ini_path), "%s%s", CUST_PATH_COMM, auc_dts_ini_path); /*如果ini文件在cust中,则使用cust中的ini文件,否则使用dts中配置的ini文件*/ /*recovery 模式下,此时ini文件可能不能访问,这种情况下,使用dts里配置的值为默认值*/ if (ini_file_exist(auc_cust_spec_ini_path)) { snprintf(g_ini_file_name, sizeof(g_ini_file_name), "%s", auc_cust_spec_ini_path); INI_INFO("%s@%s\n", PROC_NAME_INI_FILE_NAME, g_ini_file_name); } else if (ini_file_exist(auc_cust_comm_ini_path)) { snprintf(g_ini_file_name, sizeof(g_ini_file_name), "%s", auc_cust_comm_ini_path); INI_INFO("%s@%s\n", PROC_NAME_INI_FILE_NAME, g_ini_file_name); } else { snprintf(g_ini_file_name, sizeof(g_ini_file_name), "%s", auc_dts_ini_path); INI_INFO("%s@%s\n", PROC_NAME_INI_FILE_NAME, g_ini_file_name); } INI_INIT_MUTEX(&file_mutex); #ifdef INI_TEST #if 1 ini_find_var_value(INI_MODU_WIFI, "wifi_ini_mode", auc_value); ini_find_var_value(INI_MODU_GNSS, "gnss_ini_mode", auc_value); ini_find_var_value(INI_MODU_BT, "bt_ini_mode", auc_value); ini_find_var_value(INI_MODU_FM, "fm_ini_mode", auc_value); ini_find_var_value(INI_MODU_WIFI_PLAT, "wifi_plat_ini_mode", auc_value); ini_find_var_value(INI_MODU_BFG_PLAT, "bfg_plat_ini_mode", auc_value); ini_find_var_value(INI_MODU_WIFI, "loglevel", auc_value); ini_find_var_value(INI_MODU_WIFI, "data_rate_down", auc_value); ini_find_var_value(INI_MODU_WIFI, "data_rate_up", auc_value); ini_find_var_value(INI_MODU_GNSS, "gnss_gpsglonass", auc_value); ini_find_var_value(INI_MODU_GNSS, "gnss_bdgps", auc_value); ini_find_var_value(INI_MODU_BT, "bt_normal", auc_value); ini_find_var_value(INI_MODU_FM, "fm_normal", auc_value); ini_find_var_value(INI_MODU_WIFI_PLAT, "wifi_plat_normal", auc_value); ini_find_var_value(INI_MODU_BFG_PLAT, "bfg_plat_normal", auc_value); #endif #endif return INI_SUCC; }