1 /*
2 * Copyright (C) 2021 HiSilicon (Shanghai) Technologies CO., LIMITED.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 */
18
19 /* *****************************************************************************
20 * 1 Header File Including
21 * **************************************************************************** */
22 #include "oal_err_wifi.h"
23 #include "oam_ext_if.h"
24 #include "wlan_spec_1131h.h"
25 #include "mac_vap.h"
26 #include "hmac_ext_if.h"
27 #include "wal_ioctl.h"
28 #include "wal_hipriv.h"
29 #include "wal_customize.h"
30
31 /* *****************************************************************************
32 * 2 Global Variable Definition
33 * **************************************************************************** */
34 /* 只在第一次上电时从NVM 中读取参数 */
35 static hi_u8 g_cfg_flag = HI_FALSE;
36 /* ini定制化参数数组 */
37 static hi_u32 *g_customize_init_params = HI_NULL;
38 /* 当前定制化配置是采用哪种类型 */
39 static hi_u32 g_cur_init_config_type = CUS_TAG_INI;
40 /* 降低开机电流(注意:会牺牲部分射频性能),默认关闭 */
41 static hi_bool g_minimize_boot_current = HI_FALSE;
42 /* *****************************************************************************
43 * 3 Function Definition
44 * **************************************************************************** */
45 /* ****************************************************************************
46 函 数 名 : init_int_to_str_for_country_code
47 功能描述 : 国家码转换
48 修改历史 :
49 1.日 期 : 2019年05月20日
50 作 者 : HiSilicon
51 修改内容 : 新生成函数
52 **************************************************************************** */
init_int_to_str_for_country_code(hi_char * country_code,hi_s32 size_code)53 static hi_void init_int_to_str_for_country_code(hi_char *country_code, hi_s32 size_code)
54 {
55 hi_char cuntry_char[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
56 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
57 hi_s32 country_codeval = (hi_s32)g_customize_init_params[INIT_CFG_COUNTRY_CODE];
58 hi_s32 idx;
59
60 if (country_code != HI_NULL) {
61 if ((size_code == COUNTRY_CODE_LEN) && (country_codeval != 0) &&
62 (country_codeval < (hi_s32)((sizeof(cuntry_char) + 1) * 26))) { /* 26个英文字母 */
63 idx = (country_codeval / 26 > 0) ? (country_codeval / 26 - 1) : 0; /* 26个英文字母 */
64 if (idx >= 0) {
65 country_code[0] = cuntry_char[idx];
66 } else {
67 country_code[0] = '\0';
68 }
69
70 idx = (country_codeval % 26 > 0) ? (country_codeval % 26 - 1) : 0; /* 26个英文字母 */
71 if (idx >= 0) {
72 country_code[1] = cuntry_char[idx];
73 } else {
74 country_code[1] = '\0';
75 }
76 country_code[2] = '\0'; /* 2 国码第3位 */
77 } else {
78 country_code[0] = '\0';
79 }
80 } else {
81 oam_warning_log0(0, 0, "init_int_to_str_for_country_code: pCountryCode is NULL!");
82 }
83
84 return;
85 }
86
87 /* ****************************************************************************
88 函 数 名 : init_str_to_int_for_country_code
89 功能描述 : 国家码转换
90 修改历史 :
91 1.日 期 : 2019年05月20日
92 作 者 : HiSilicon
93 修改内容 : 新生成函数
94 **************************************************************************** */
init_str_to_int_for_country_code(const hi_char * country_code,hi_s32 size_code)95 static hi_u32 init_str_to_int_for_country_code(const hi_char *country_code, hi_s32 size_code)
96 {
97 hi_u32 country_codeval;
98
99 if ((country_code != NULL) && (size_code == COUNTRY_CODE_LEN)) {
100 if (country_code[1] >= 'A' && country_code[1] <= 'Z' && country_code[0] >= 'A' && country_code[0] <= 'Z') {
101 country_codeval = ((hi_u32)(hi_u8)(country_code[1] - 'A') + 1) * 26 + /* 26个英文字母 */
102 ((hi_u32)(hi_u8)(country_code[0] - 'A') + 1);
103 } else {
104 oam_warning_log0(0, OAM_SF_ANY, "init_str_to_int_for_country_code:: pCountryCode is illegal!");
105 country_codeval = 0;
106 }
107 } else {
108 oam_warning_log0(0, OAM_SF_ANY, "init_str_to_int_for_country_code:: pCountryCode is error!");
109 country_codeval = 0;
110 }
111
112 return country_codeval;
113 }
114
115 #if (_PRE_MULTI_CORE_MODE != _PRE_MULTI_CORE_MODE_OFFLOAD_DMAC)
init_params_data(const wal_cfg_params * data)116 static hi_void init_params_data(const wal_cfg_params *data)
117 {
118 g_customize_init_params[INIT_CFG_COUNTRY_CODE] = data->init_cfg_country_code;
119 g_customize_init_params[INIT_CFG_AMPDU_TX_MAX_NUM] = data->init_cfg_ampdu_tx_max_num;
120 g_customize_init_params[INIT_CFG_USED_MEM_FOR_START] = data->init_cfg_used_mem_for_start;
121 g_customize_init_params[INIT_CFG_USED_MEM_FOR_STOP] = data->init_cfg_used_mem_for_stop;
122 g_customize_init_params[INIT_CFG_RX_ACK_LIMIT] = data->init_cfg_rx_ack_limit;
123 g_customize_init_params[INIT_CFG_INT_UNIT_CTRL] = data->init_cfg_int_unit_ctrl;
124 g_customize_init_params[INIT_CFG_SDIO_D2H_ASSEMBLE_COUNT] = data->init_cfg_sdio_d2h_assemble_count;
125 g_customize_init_params[INIT_CFG_SDIO_H2D_ASSEMBLE_COUNT] = data->init_cfg_sdio_h2d_assemble_count;
126 g_customize_init_params[INIT_CFG_POWERMGMT_SWITCH] = data->init_cfg_powermgmt_switch;
127 g_customize_init_params[INIT_CFG_STA_DTIM_SETTING] = data->init_cfg_sta_dtim_setting;
128 g_customize_init_params[INIT_CFG_LOGLEVEL] = data->init_cfg_loglevel;
129 g_customize_init_params[INIT_CFG_PHY_SCALING_VALUE_11B] = data->init_cfg_phy_scaling_value_11b;
130 g_customize_init_params[INIT_CFG_PHY_U1_SCALING_VALUE_11G] = data->init_cfg_phy_u1_scaling_value_11g;
131 g_customize_init_params[INIT_CFG_PHY_U2_SCALING_VALUE_11G] = data->init_cfg_phy_u2_scaling_value_11g;
132 g_customize_init_params[INIT_CFG_PHY_U1_SCALING_VALUE_11N_2D4G] = data->init_cfg_phy_u1_scaling_value_11n_2d4g;
133 g_customize_init_params[INIT_CFG_PHY_U2_SCALING_VALUE_11N_2D4G] = data->init_cfg_phy_u2_scaling_value_11n_2d4g;
134 g_customize_init_params[INIT_CFG_PHY_U1_SCALING_VALUE_11N40M_2D4G] =
135 data->init_cfg_phy_u1_scaling_value_11n40m_2d4g;
136 g_customize_init_params[INIT_CFG_PHY_U2_SCALING_VALUE_11N40M_2D4G] =
137 data->init_cfg_phy_u2_scaling_value_11n40m_2d4g;
138 g_customize_init_params[INIT_CFG_PHY_U0_SCALING_VALUE_11N_2D4G] = data->init_cfg_phy_u0_scaling_value_11n_5g;
139 g_customize_init_params[INIT_CFG_PHY_U3_SCALING_VALUE_11N40M_2D4G] = data->init_cfg_phy_u3_scaling_value_11n40m_5g;
140 g_customize_init_params[INIT_CFG_RTS_CLK_FREQ] = data->init_cfg_rts_clk_freq;
141 g_customize_init_params[INIT_CFG_CLK_TYPE] = (hi_u32)data->init_cfg_clk_type;
142 g_customize_init_params[INIT_CFG_RF_LINE_TXRX_GAIN_DB_2G_BAND1] =
143 (hi_u32)data->init_cfg_rf_line_txrx_gain_db_2g_band1;
144 g_customize_init_params[INIT_CFG_RF_LINE_TXRX_GAIN_DB_2G_BAND2] =
145 (hi_u32)data->init_cfg_rf_line_txrx_gain_db_2g_band2;
146 g_customize_init_params[INIT_CFG_RF_LINE_TXRX_GAIN_DB_2G_BAND3] =
147 (hi_u32)data->init_cfg_rf_line_txrx_gain_db_2g_band3;
148 g_customize_init_params[INIT_CFG_RF_TXPWR_CALI_REF_2G_VAL_BAND1] = data->init_cfg_rf_txpwr_cali_ref_2g_val_band1;
149 g_customize_init_params[INIT_CFG_RF_TXPWR_CALI_REF_2G_VAL_BAND2] = data->init_cfg_rf_txpwr_cali_ref_2g_val_band2;
150 g_customize_init_params[INIT_CFG_RF_TXPWR_CALI_REF_2G_VAL_BAND3] = data->init_cfg_rf_txpwr_cali_ref_2g_val_band3;
151 g_customize_init_params[INIT_CFG_TX_RATIO_LEVEL_0] = data->init_cfg_tx_ratio_level_0;
152 g_customize_init_params[INIT_CFG_TX_PWR_COMP_VAL_LEVEL_0] = data->init_cfg_tx_pwr_comp_val_level_0;
153 g_customize_init_params[INIT_CFG_TX_RATIO_LEVEL_1] = data->init_cfg_tx_ratio_level_1;
154 g_customize_init_params[INIT_CFG_TX_PWR_COMP_VAL_LEVEL_1] = data->init_cfg_tx_pwr_comp_val_level_1;
155 g_customize_init_params[INIT_CFG_TX_RATIO_LEVEL_2] = data->init_cfg_tx_ratio_level_2;
156 g_customize_init_params[INIT_CFG_TX_PWR_COMP_VAL_LEVEL_2] = data->init_cfg_tx_pwr_comp_val_level_2;
157 g_customize_init_params[INIT_CFG_MORE_PWR] = data->init_cfg_more_pwr;
158 g_customize_init_params[INIT_CFG_RANDOM_MAC_ADDR_SCAN] = data->init_cfg_random_mac_addr_scan;
159 g_customize_init_params[INIT_CFG_11AC2G_ENABLE] = data->init_cfg_11ac2g_enable;
160 g_customize_init_params[INIT_CFG_DISABLE_CAPAB_2GHT40] = data->init_cfg_disable_capab_2ght40;
161 g_customize_init_params[INIT_CFG_BAND_EDGE_LIMIT_2G_11G_TXPWR] = data->init_cfg_band_edge_limit_2g_11g_txpwr;
162 g_customize_init_params[INIT_CFG_BAND_EDGE_LIMIT_2G_11N_HT20_TXPWR] =
163 data->init_cfg_band_edge_limit_2g_11n_ht20_txpwr;
164 g_customize_init_params[INIT_CFG_BAND_EDGE_LIMIT_2G_11N_HT40_TXPWR] =
165 data->init_cfg_band_edge_limit_2g_11n_ht40_txpwr;
166 g_customize_init_params[INIT_CFG_BAND_EDGE_LIMIT_2G_11G_DBB_SCALING] =
167 data->init_cfg_band_edge_limit_2g_11g_dbb_scaling;
168 g_customize_init_params[INIT_CFG_BAND_EDGE_LIMIT_2G_11N_HT20_DBB_SCALING] =
169 data->init_cfg_band_edge_limit_2g_11n_ht20_dbb_scaling;
170 g_customize_init_params[INIT_CFG_BAND_EDGE_LIMIT_2G_11N_HT40_DBB_SCALING] =
171 data->init_cfg_band_edge_limit_2g_11n_ht40_dbb_scaling;
172 g_customize_init_params[INIT_CFG_CALI_TONE_AMP_GRADE] = data->init_cfg_cali_tone_amp_grade;
173 }
174
init_calibration_data(const wal_cfg_calibration * data)175 static hi_void init_calibration_data(const wal_cfg_calibration* data)
176 {
177 g_customize_init_params[INIT_CFG_DYN_CALI_DSCR_INTERVAL] = data->init_cfg_dyn_cali_dscr_interval;
178
179 g_customize_init_params[INIT_CFG_NVRAM_PA2GCCKA0] = data->init_cfg_nvram_pa2gccka0;
180 g_customize_init_params[INIT_CFG_NVRAM_PA2GA0] = data->init_cfg_nvram_pa2ga0;
181 g_customize_init_params[INIT_CFG_NVRAM_PA2GCWA0] = data->init_cfg_nvram_pa2gcwa0;
182
183 g_customize_init_params[INIT_CFG_DPN24G_CH1_CORE0] = data->init_cfg_dpn24g_ch1_core0;
184 g_customize_init_params[INIT_CFG_DPN24G_CH2_CORE0] = data->init_cfg_dpn24g_ch2_core0;
185 g_customize_init_params[INIT_CFG_DPN24G_CH3_CORE0] = data->init_cfg_dpn24g_ch3_core0;
186 g_customize_init_params[INIT_CFG_DPN24G_CH4_CORE0] = data->init_cfg_dpn24g_ch4_core0;
187 g_customize_init_params[INIT_CFG_DPN24G_CH5_CORE0] = data->init_cfg_dpn24g_ch5_core0;
188 g_customize_init_params[INIT_CFG_DPN24G_CH6_CORE0] = data->init_cfg_dpn24g_ch6_core0;
189 g_customize_init_params[INIT_CFG_DPN24G_CH7_CORE0] = data->init_cfg_dpn24g_ch7_core0;
190 g_customize_init_params[INIT_CFG_DPN24G_CH8_CORE0] = data->init_cfg_dpn24g_ch8_core0;
191 g_customize_init_params[INIT_CFG_DPN24G_CH9_CORE0] = data->init_cfg_dpn24g_ch9_core0;
192 g_customize_init_params[INIT_CFG_DPN24G_CH10_CORE0] = data->init_cfg_dpn24g_ch10_core0;
193 g_customize_init_params[INIT_CFG_DPN24G_CH11_CORE0] = data->init_cfg_dpn24g_ch11_core0;
194 g_customize_init_params[INIT_CFG_DPN24G_CH12_CORE0] = data->init_cfg_dpn24g_ch12_core0;
195 g_customize_init_params[INIT_CFG_DPN24G_CH13_CORE0] = data->init_cfg_dpn24g_ch13_core0;
196 g_customize_init_params[INIT_CFG_DSSS2OFDM_DBB_PWR_BO_VAL] = data->init_cfg_dsss2ofdm_dbb_pwr_bo_val;
197 g_customize_init_params[INIT_CFG_CALI_DATA_MASK] = data->init_cfg_cali_data_mask;
198 g_customize_init_params[INIT_CFG_CALI_MASK] = data->init_cfg_cali_mask;
199 }
200
init_rf_rx_insertion_data(const wal_cfg_rf_rx_insertion * data)201 static hi_void init_rf_rx_insertion_data(const wal_cfg_rf_rx_insertion *data)
202 {
203 g_customize_init_params[INIT_CFG_RF_RX_INSERTION_LOSS_2G_B1] = data->init_cfg_rf_rx_insertion_loss_2g_b1;
204 g_customize_init_params[INIT_CFG_RF_RX_INSERTION_LOSS_2G_B2] = data->init_cfg_rf_rx_insertion_loss_2g_b2;
205 g_customize_init_params[INIT_CFG_RF_RX_INSERTION_LOSS_2G_B3] = data->init_cfg_rf_rx_insertion_loss_2g_b3;
206 g_customize_init_params[INIT_CFG_RF_LINE_RF_PWR_REF_RSSI_DB_2G_C0_MULT4] =
207 data->init_cfg_rf_line_rf_pwr_ref_rssi_db_2g_c0_mult4;
208 }
209
init_base_delta_power_data(const wal_cfg_base_delta_power * data)210 static hi_void init_base_delta_power_data(const wal_cfg_base_delta_power *data)
211 {
212 g_customize_init_params[INIT_CFG_NVRAM_MAX_TXPWR_BASE_2P4G] = data->init_cfg_nvram_max_txpwr_base_2p4g;
213 g_customize_init_params[INIT_CFG_NVRAM_PARAMS0] = data->init_cfg_nvram_params0;
214 g_customize_init_params[INIT_CFG_NVRAM_PARAMS1] = data->init_cfg_nvram_params1;
215 g_customize_init_params[INIT_CFG_NVRAM_PARAMS2] = data->init_cfg_nvram_params2;
216 g_customize_init_params[INIT_CFG_NVRAM_PARAMS3] = data->init_cfg_nvram_params3;
217 }
218
init_sar_txpwr_data(const wal_cfg_sar_txpwr * data)219 static hi_void init_sar_txpwr_data(const wal_cfg_sar_txpwr *data)
220 {
221 g_customize_init_params[INIT_CFG_SAR_TXPWR_CTRL_2G] = data->init_cfg_sar_txpwr_ctrl_2g;
222 }
223
init_band_txpwr_data(const wal_cfg_band_txpwr * data)224 static hi_void init_band_txpwr_data(const wal_cfg_band_txpwr *data)
225 {
226 g_customize_init_params[INIT_CFG_SIDE_BAND_TXPWR_LIMIT_24G_CH1] = data->init_cfg_side_band_txpwr_limit_24g_ch1;
227 g_customize_init_params[INIT_CFG_SIDE_BAND_TXPWR_LIMIT_24G_CH2] = data->init_cfg_side_band_txpwr_limit_24g_ch2;
228 g_customize_init_params[INIT_CFG_SIDE_BAND_TXPWR_LIMIT_24G_CH3] = data->init_cfg_side_band_txpwr_limit_24g_ch3;
229 g_customize_init_params[INIT_CFG_SIDE_BAND_TXPWR_LIMIT_24G_CH4] = data->init_cfg_side_band_txpwr_limit_24g_ch4;
230 g_customize_init_params[INIT_CFG_SIDE_BAND_TXPWR_LIMIT_24G_CH5] = data->init_cfg_side_band_txpwr_limit_24g_ch5;
231 g_customize_init_params[INIT_CFG_SIDE_BAND_TXPWR_LIMIT_24G_CH6] = data->init_cfg_side_band_txpwr_limit_24g_ch6;
232 g_customize_init_params[INIT_CFG_SIDE_BAND_TXPWR_LIMIT_24G_CH7] = data->init_cfg_side_band_txpwr_limit_24g_ch7;
233 g_customize_init_params[INIT_CFG_SIDE_BAND_TXPWR_LIMIT_24G_CH8] = data->init_cfg_side_band_txpwr_limit_24g_ch8;
234 g_customize_init_params[INIT_CFG_SIDE_BAND_TXPWR_LIMIT_24G_CH9] = data->init_cfg_side_band_txpwr_limit_24g_ch9;
235 g_customize_init_params[INIT_CFG_SIDE_BAND_TXPWR_LIMIT_24G_CH10] = data->init_cfg_side_band_txpwr_limit_24g_ch10;
236 g_customize_init_params[INIT_CFG_SIDE_BAND_TXPWR_LIMIT_24G_CH11] = data->init_cfg_side_band_txpwr_limit_24g_ch11;
237 g_customize_init_params[INIT_CFG_SIDE_BAND_TXPWR_LIMIT_24G_CH12] = data->init_cfg_side_band_txpwr_limit_24g_ch12;
238 g_customize_init_params[INIT_CFG_SIDE_BAND_TXPWR_LIMIT_24G_CH13] = data->init_cfg_side_band_txpwr_limit_24g_ch13;
239 }
240
init_rf_reg1_data(const wal_cfg_rf_reg1 * data)241 static hi_void init_rf_reg1_data(const wal_cfg_rf_reg1 *data)
242 {
243 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_100_MODE_1AND2] = data->init_cfg_rf_pa_vdd_reg_100_mode_1and2;
244 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_101_MODE_1AND2] = data->init_cfg_rf_pa_vdd_reg_101_mode_1and2;
245 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_102_MODE_1AND2] = data->init_cfg_rf_pa_vdd_reg_102_mode_1and2;
246 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_103_MODE_1AND2] = data->init_cfg_rf_pa_vdd_reg_103_mode_1and2;
247 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_104_MODE_1AND2] = data->init_cfg_rf_pa_vdd_reg_104_mode_1and2;
248 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_105_MODE_1AND2] = data->init_cfg_rf_pa_vdd_reg_105_mode_1and2;
249 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_106_MODE_1AND2] = data->init_cfg_rf_pa_vdd_reg_106_mode_1and2;
250 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_107_MODE_1AND2] = data->init_cfg_rf_pa_vdd_reg_107_mode_1and2;
251 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_108_MODE_1AND2] = data->init_cfg_rf_pa_vdd_reg_108_mode_1and2;
252 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_109_MODE_1AND2] = data->init_cfg_rf_pa_vdd_reg_109_mode_1and2;
253 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_110_MODE_1AND2] = data->init_cfg_rf_pa_vdd_reg_110_mode_1and2;
254 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_111_MODE_1AND2] = data->init_cfg_rf_pa_vdd_reg_111_mode_1and2;
255 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_112_MODE_1AND2] = data->init_cfg_rf_pa_vdd_reg_112_mode_1and2;
256 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_113_MODE_1AND2] = data->init_cfg_rf_pa_vdd_reg_113_mode_1and2;
257 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_114_MODE_1AND2] = data->init_cfg_rf_pa_vdd_reg_114_mode_1and2;
258 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_115_MODE_1AND2] = data->init_cfg_rf_pa_vdd_reg_115_mode_1and2;
259 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_100_MODE_3AND4] = data->init_cfg_rf_pa_vdd_reg_100_mode_3and4;
260 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_101_MODE_3AND4] = data->init_cfg_rf_pa_vdd_reg_101_mode_3and4;
261 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_102_MODE_3AND4] = data->init_cfg_rf_pa_vdd_reg_102_mode_3and4;
262 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_103_MODE_3AND4] = data->init_cfg_rf_pa_vdd_reg_103_mode_3and4;
263 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_104_MODE_3AND4] = data->init_cfg_rf_pa_vdd_reg_104_mode_3and4;
264 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_105_MODE_3AND4] = data->init_cfg_rf_pa_vdd_reg_105_mode_3and4;
265 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_106_MODE_3AND4] = data->init_cfg_rf_pa_vdd_reg_106_mode_3and4;
266 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_107_MODE_3AND4] = data->init_cfg_rf_pa_vdd_reg_107_mode_3and4;
267 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_108_MODE_3AND4] = data->init_cfg_rf_pa_vdd_reg_108_mode_3and4;
268 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_109_MODE_3AND4] = data->init_cfg_rf_pa_vdd_reg_109_mode_3and4;
269 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_110_MODE_3AND4] = data->init_cfg_rf_pa_vdd_reg_110_mode_3and4;
270 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_111_MODE_3AND4] = data->init_cfg_rf_pa_vdd_reg_111_mode_3and4;
271 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_112_MODE_3AND4] = data->init_cfg_rf_pa_vdd_reg_112_mode_3and4;
272 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_113_MODE_3AND4] = data->init_cfg_rf_pa_vdd_reg_113_mode_3and4;
273 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_114_MODE_3AND4] = data->init_cfg_rf_pa_vdd_reg_114_mode_3and4;
274 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_115_MODE_3AND4] = data->init_cfg_rf_pa_vdd_reg_115_mode_3and4;
275 }
276
init_rf_reg2_data(const wal_cfg_rf_reg2 * data)277 static hi_void init_rf_reg2_data(const wal_cfg_rf_reg2 *data)
278 {
279 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_100_MODE_5AND6] = data->init_cfg_rf_pa_vdd_reg_100_mode_5and6;
280 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_101_MODE_5AND6] = data->init_cfg_rf_pa_vdd_reg_101_mode_5and6;
281 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_102_MODE_5AND6] = data->init_cfg_rf_pa_vdd_reg_102_mode_5and6;
282 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_103_MODE_5AND6] = data->init_cfg_rf_pa_vdd_reg_103_mode_5and6;
283 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_104_MODE_5AND6] = data->init_cfg_rf_pa_vdd_reg_104_mode_5and6;
284 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_105_MODE_5AND6] = data->init_cfg_rf_pa_vdd_reg_105_mode_5and6;
285 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_106_MODE_5AND6] = data->init_cfg_rf_pa_vdd_reg_106_mode_5and6;
286 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_107_MODE_5AND6] = data->init_cfg_rf_pa_vdd_reg_107_mode_5and6;
287 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_108_MODE_5AND6] = data->init_cfg_rf_pa_vdd_reg_108_mode_5and6;
288 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_109_MODE_5AND6] = data->init_cfg_rf_pa_vdd_reg_109_mode_5and6;
289 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_110_MODE_5AND6] = data->init_cfg_rf_pa_vdd_reg_110_mode_5and6;
290 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_111_MODE_5AND6] = data->init_cfg_rf_pa_vdd_reg_111_mode_5and6;
291 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_112_MODE_5AND6] = data->init_cfg_rf_pa_vdd_reg_112_mode_5and6;
292 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_113_MODE_5AND6] = data->init_cfg_rf_pa_vdd_reg_113_mode_5and6;
293 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_114_MODE_5AND6] = data->init_cfg_rf_pa_vdd_reg_114_mode_5and6;
294 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_115_MODE_5AND6] = data->init_cfg_rf_pa_vdd_reg_115_mode_5and6;
295 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_100_MODE_7AND8] = data->init_cfg_rf_pa_vdd_reg_100_mode_7and8;
296 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_101_MODE_7AND8] = data->init_cfg_rf_pa_vdd_reg_101_mode_7and8;
297 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_102_MODE_7AND8] = data->init_cfg_rf_pa_vdd_reg_102_mode_7and8;
298 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_103_MODE_7AND8] = data->init_cfg_rf_pa_vdd_reg_103_mode_7and8;
299 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_104_MODE_7AND8] = data->init_cfg_rf_pa_vdd_reg_104_mode_7and8;
300 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_105_MODE_7AND8] = data->init_cfg_rf_pa_vdd_reg_105_mode_7and8;
301 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_106_MODE_7AND8] = data->init_cfg_rf_pa_vdd_reg_106_mode_7and8;
302 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_107_MODE_7AND8] = data->init_cfg_rf_pa_vdd_reg_107_mode_7and8;
303 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_108_MODE_7AND8] = data->init_cfg_rf_pa_vdd_reg_108_mode_7and8;
304 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_109_MODE_7AND8] = data->init_cfg_rf_pa_vdd_reg_109_mode_7and8;
305 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_110_MODE_7AND8] = data->init_cfg_rf_pa_vdd_reg_110_mode_7and8;
306 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_111_MODE_7AND8] = data->init_cfg_rf_pa_vdd_reg_111_mode_7and8;
307 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_112_MODE_7AND8] = data->init_cfg_rf_pa_vdd_reg_112_mode_7and8;
308 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_113_MODE_7AND8] = data->init_cfg_rf_pa_vdd_reg_113_mode_7and8;
309 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_114_MODE_7AND8] = data->init_cfg_rf_pa_vdd_reg_114_mode_7and8;
310 g_customize_init_params[INIT_CFG_RF_PA_VDD_REG_115_MODE_7AND8] = data->init_cfg_rf_pa_vdd_reg_115_mode_7and8;
311 }
312
init_xtal_compesation_data(const rf_cfg_xtal_compesation * data)313 static hi_void init_xtal_compesation_data(const rf_cfg_xtal_compesation *data)
314 {
315 g_customize_init_params[INIT_CFG_RF_HIGH_TEMP_THRESHOLD] = data->init_cfg_rf_high_temp_threshold;
316 g_customize_init_params[INIT_CFG_RF_LOW_TEMP_THRESHOLD] = data->init_cfg_rf_low_temp_threshold;
317 g_customize_init_params[INIT_CFG_RF_PPM_COMPESATION] = data->init_cfg_rf_ppm_compesation;
318 }
319
init_dpd_calibration_data(const wal_cfg_dpd_calibration * data)320 static hi_void init_dpd_calibration_data(const wal_cfg_dpd_calibration *data)
321 {
322 g_customize_init_params[INIT_CFG_DPD_CALI_CH_CORE0] = data->init_cfg_dpd_cali_ch_core0;
323 g_customize_init_params[INIT_CFG_DPD_USE_CAIL_CH_IDX0_CORE0] = data->init_cfg_dpd_use_cail_ch_idx0_core0;
324 g_customize_init_params[INIT_CFG_DPD_USE_CAIL_CH_IDX1_CORE0] = data->init_cfg_dpd_use_cail_ch_idx1_core0;
325 g_customize_init_params[INIT_CFG_DPD_AMP_T0_T3] = data->init_cfg_dpd_amp_t0_t3;
326 g_customize_init_params[INIT_CFG_DPD_AMP_T4_T7] = data->init_cfg_dpd_amp_t4_t7;
327 g_customize_init_params[INIT_CFG_DPD_COMP_TPC_TEMP] = data->init_cfg_dpd_comp_tpc_temp;
328 }
329
330 /* ****************************************************************************
331 函 数 名 : init_nvm_param
332 功能描述 : 读取nvm 中的默认配置参数
333 输入参数 :
334 输出参数 : 无
335 返 回 值 : HI_SUCCESS 或 失败错误码
336 调用函数 :
337 被调函数 :
338
339 修改历史 :
340 1.日 期 : 2019年05月23日
341 作 者 : HiSilicon
342 修改内容 : 新生成函数
343
344 **************************************************************************** */
345 /* 编程规范规则5.1 避免函数过长,函数不超过50行(非空非注释),申请例外: 初始化函数结构简单,功能聚合性不拆分 */
init_nvm_param(hi_void)346 static hi_u32 init_nvm_param(hi_void)
347 {
348 hi_u32 ret;
349 wal_cfg_params params;
350 wal_cfg_base_delta_power base_delta_power;
351 wal_cfg_calibration calibration;
352 wal_cfg_rf_rx_insertion rx_insertion;
353 wal_cfg_sar_txpwr sar_txpwr;
354 wal_cfg_band_txpwr band_txpwr;
355 wal_cfg_rf_reg1 rf_reg1;
356 wal_cfg_rf_reg2 rf_reg2;
357 wal_cfg_dpd_calibration dpd_cali;
358 rf_cfg_xtal_compesation rf_xtal_pll;
359
360 /* read INIT_CONFIG_PARAMS */
361 ret = hi_nv_read(INIT_CONFIG_PARAMS, (hi_void *)¶ms, sizeof(params), 0);
362 if (ret != HI_SUCCESS) {
363 oam_error_log0(0, OAM_SF_ANY, "init_nvm_param:: hi_nv_read INIT_CONFIG_PARAMS is error \n");
364 wal_cfg_params temp = { 92, 64, 25, 15, 10, 64, 8,
365 1, 1, 2, 0x9c9c9c9c, 0x666C6C6C, 0x666C6C6C, 0x57575757,
366 0x5c5c5757, 0x5a5a5a5a, 0x5d5d5a5a, 0x414F, 0x424b, 32768, 0,
367 -1, -1, -1, 115, 115, 115, 500,
368 17, 650, 13, 280, 5, 7, 0,
369 1, 1, 140, 140, 140, 0x68, 0x62,
370 0x62, 1, 0 };
371 if (memcpy_s(¶ms, sizeof(wal_cfg_params), &temp, sizeof(wal_cfg_params)) != EOK) {
372 oam_error_log0(0, OAM_SF_ANY, "init_nvm_param:: mem safe function err \n");
373 return HI_FAIL;
374 }
375 }
376 init_params_data(¶ms);
377
378 /* read INIT_CONFIG_BASE_DELTA_POWER */
379 ret = hi_nv_read(INIT_CONFIG_BASE_DELTA_POWER, (hi_void *)&base_delta_power, sizeof(base_delta_power), 0);
380 if (ret != HI_SUCCESS) {
381 oam_error_log0(0, OAM_SF_ANY, "init_nvm_param:: hi_nv_read INIT_CONFIG_BASE_DELTA_POWER is error \n");
382 wal_cfg_base_delta_power temp = { 170, 0, 0, 0, 0 };
383 if (memcpy_s(&base_delta_power, sizeof(wal_cfg_base_delta_power), &temp, sizeof(wal_cfg_base_delta_power)) !=
384 EOK) {
385 oam_error_log0(0, OAM_SF_ANY, "init_nvm_param:: mem safe function err \n");
386 return HI_FAIL;
387 }
388 }
389 init_base_delta_power_data(&base_delta_power);
390
391 /* read INIT_CONFIG_CALIBRATION */
392 ret = hi_nv_read(INIT_CONFIG_CALIBRATION, (hi_void *)&calibration, sizeof(calibration), 0);
393 if (ret != HI_SUCCESS) {
394 oam_error_log0(0, OAM_SF_ANY, "init_nvm_param:: hi_nv_read INIT_CONFIG_CALIBRATION is error \n");
395 wal_cfg_calibration temp = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0x67, 0 };
396 if (memcpy_s(&calibration, sizeof(wal_cfg_calibration), &temp, sizeof(wal_cfg_calibration)) != EOK) {
397 oam_error_log0(0, OAM_SF_ANY, "init_nvm_param:: mem safe function err \n");
398 return HI_FAIL;
399 }
400 }
401 init_calibration_data(&calibration);
402
403 /* read INIT_CONFIG_RF_RX_INSERTION */
404 ret = hi_nv_read(INIT_CONFIG_RF_RX_INSERTION, (hi_void *)&rx_insertion, sizeof(rx_insertion), 0);
405 if (ret != HI_SUCCESS) {
406 oam_error_log0(0, OAM_SF_ANY, "init_nvm_param:: hi_nv_read INIT_CONFIG_RF_RX_INSERTION is error \n");
407 wal_cfg_rf_rx_insertion temp = { 0, 0, 0, 0 };
408 if (memcpy_s(&rx_insertion, sizeof(wal_cfg_rf_rx_insertion), &temp, sizeof(wal_cfg_rf_rx_insertion)) != EOK) {
409 oam_error_log0(0, OAM_SF_ANY, "init_nvm_param:: mem safe function err \n");
410 return HI_FAIL;
411 }
412 }
413 init_rf_rx_insertion_data(&rx_insertion);
414
415 /* read INIT_CONFIG_SAR_TXPWR */
416 ret = hi_nv_read(INIT_CONFIG_SAR_TXPWR, (hi_void *)&sar_txpwr, sizeof(sar_txpwr), 0);
417 if (ret != HI_SUCCESS) {
418 oam_error_log0(0, OAM_SF_ANY, "init_nvm_param:: hi_nv_read INIT_CONFIG_SAR_TXPWR is error] \n");
419 wal_cfg_sar_txpwr temp = { 0xffffff };
420 if (memcpy_s(&sar_txpwr, sizeof(wal_cfg_sar_txpwr), &temp, sizeof(wal_cfg_sar_txpwr)) != EOK) {
421 oam_error_log0(0, OAM_SF_ANY, "init_nvm_param:: mem safe function err \n");
422 return HI_FAIL;
423 }
424 }
425 init_sar_txpwr_data(&sar_txpwr);
426
427 /* read INIT_CONFIG_BAND_TXPWR */
428 ret = hi_nv_read(INIT_CONFIG_BAND_TXPWR, (hi_void *)&band_txpwr, sizeof(band_txpwr), 0);
429 if (ret != HI_SUCCESS) {
430 oam_error_log0(0, OAM_SF_ANY, "init_nvm_param:: hi_nv_read INIT_CONFIG_BAND_TXPWR is error\n");
431 wal_cfg_band_txpwr temp = { 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
432 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff };
433 if (memcpy_s(&band_txpwr, sizeof(wal_cfg_band_txpwr), &temp, sizeof(wal_cfg_band_txpwr)) != EOK) {
434 oam_error_log0(0, OAM_SF_ANY, "init_nvm_param:: mem safe function err \n");
435 return HI_FAIL;
436 }
437 }
438 init_band_txpwr_data(&band_txpwr);
439
440 /* read INIT_CONFIG_RF_REG1 */
441 ret = hi_nv_read(INIT_CONFIG_RF_REG1, (hi_void *)&rf_reg1, sizeof(rf_reg1), 0);
442 if (ret != HI_SUCCESS) {
443 oam_error_log0(0, OAM_SF_ANY, "init_nvm_param:: hi_nv_read INIT_CONFIG_RF_REG1 is error\n");
444 wal_cfg_rf_reg1 temp = { 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208,
445 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208,
446 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208,
447 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208,
448 0x12081208, 0x12081208, 0x12081208, 0x12081208 };
449 if (memcpy_s(&rf_reg1, sizeof(wal_cfg_rf_reg1), &temp, sizeof(wal_cfg_rf_reg1)) != EOK) {
450 oam_error_log0(0, OAM_SF_ANY, "init_nvm_param:: mem safe function err \n");
451 return HI_FAIL;
452 }
453 }
454 init_rf_reg1_data(&rf_reg1);
455
456 /* read INIT_CONFIG_RF_REG2 */
457 ret = hi_nv_read(INIT_CONFIG_RF_REG2, (hi_void *)&rf_reg2, sizeof(rf_reg2), 0);
458 if (ret != HI_SUCCESS) {
459 oam_error_log0(0, OAM_SF_ANY, "init_nvm_param:: hi_nv_read INIT_CONFIG_RF_REG2 is error \n");
460 wal_cfg_rf_reg2 temp = { 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208,
461 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208,
462 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208,
463 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208, 0x12081208,
464 0x12081208, 0x12081208, 0x12081208, 0x12081208 };
465 if (memcpy_s(&rf_reg2, sizeof(wal_cfg_rf_reg2), &temp, sizeof(wal_cfg_rf_reg2)) != EOK) {
466 oam_error_log0(0, OAM_SF_ANY, "init_nvm_param:: mem safe function err \n");
467 return HI_FAIL;
468 }
469 }
470 init_rf_reg2_data(&rf_reg2);
471
472 /* read INIT_CONFIG_DPD_CALIBRATION */
473 ret = hi_nv_read(INIT_CONFIG_DPD_CALIBRATION, (hi_void *)&dpd_cali, sizeof(dpd_cali), 0);
474 if (ret != HI_SUCCESS) {
475 oam_error_log0(0, OAM_SF_ANY, "init_nvm_param:: hi_nv_read INIT_CONFIG_DPD_CALIBRATION is error \n");
476 wal_cfg_dpd_calibration temp = { 0X71, 0X11117777, 0X0007DDDD, 0X40404040, 0X40404040, 0X00010F11 };
477 if (memcpy_s(&dpd_cali, sizeof(wal_cfg_dpd_calibration), &temp, sizeof(wal_cfg_dpd_calibration)) != EOK) {
478 oam_error_log0(0, OAM_SF_ANY, "init_nvm_param:: mem safe function err \n");
479 return HI_FAIL;
480 }
481 }
482 init_dpd_calibration_data(&dpd_cali);
483
484 /* read INIT_CONFIG_XTAL_COMPESATION */
485 ret = hi_factory_nv_read(INIT_CONFIG_XTAL_COMPESATION, (hi_void *)&rf_xtal_pll, sizeof(rf_xtal_pll), 0);
486 if (ret != HI_SUCCESS) {
487 oam_error_log0(0, OAM_SF_ANY, "init_nvm_param:: hi_nv_read INIT_CONFIG_XTAL_COMPESATION is error \n");
488 rf_cfg_xtal_compesation temp = { 110, 105, -20 };
489 if (memcpy_s(&rf_xtal_pll, sizeof(rf_cfg_xtal_compesation), &temp, sizeof(rf_cfg_xtal_compesation)) != EOK) {
490 oam_error_log0(0, OAM_SF_ANY, "init_nvm_param:: mem safe function err \n");
491 return HI_FAIL;
492 }
493 }
494 init_xtal_compesation_data(&rf_xtal_pll);
495
496 return HI_SUCCESS;
497 }
498
499 /* ****************************************************************************
500 函 数 名: init_ini_param
501 功能描述: 读取ini 中的默认配置参数
502 输入参数:
503 输出参数: 无
504 返 回 值: HI_SUCCESS 或 失败错误码
505 调用函数:
506 被调函数:
507
508 修改历史:
509 1.日 期: 2019年05月27日
510 作 者 : HiSilicon
511 修改内容: 新生成函数
512
513 **************************************************************************** */
init_ini_param(hi_void)514 static hi_u32 init_ini_param(hi_void)
515 {
516 oam_error_log0(0, OAM_SF_ANY, "The current custom is only supported nvm file!\n");
517 return HI_FAIL;
518 }
519
520 /* ****************************************************************************
521 函 数 名: init_read_customize_params
522 功能描述: netdev open 调用的定制化总入口
523 读取ini文件,更新 g_ul_customize_init_params 全局数组
524 输入参数:
525 输出参数: 无
526 返 回 值: HI_SUCCESS 或 失败错误码
527 调用函数:
528 被调函数:
529
530 修改历史:
531 1.日 期: 2019年05月27日
532 作 者 : HiSilicon
533 修改内容: 新生成函数
534
535 **************************************************************************** */
init_read_customize_params(hi_void)536 static hi_u32 init_read_customize_params(hi_void)
537 {
538 if (CUS_TAG_NVM == g_cur_init_config_type) {
539 if (init_nvm_param() != HI_SUCCESS) {
540 oam_error_log0(0, OAM_SF_ANY, "init_read_customize_params:: init nvm is error!\n");
541 }
542 } else if (CUS_TAG_INI == g_cur_init_config_type) {
543 if (init_ini_param() != HI_SUCCESS) {
544 oam_error_log0(0, OAM_SF_ANY, "init_read_customize_params:: init ini file is error!\n");
545 }
546 } else {
547 oam_error_log1(0, OAM_SF_ANY, "init_read_customize_params:: cfg type[%d] is not correct!\n",
548 g_cur_init_config_type);
549 return HI_FAIL;
550 }
551
552 return HI_SUCCESS;
553 }
554 #endif
555
556 #ifdef _PRE_DEBUG_MODE
init_print_params_proc(hi_char * pc_print_buff,hi_u32 buf_size,hi_u32 local,hi_void * data,hi_u8 len)557 hi_void init_print_params_proc(hi_char *pc_print_buff, hi_u32 buf_size, hi_u32 local, hi_void *data, hi_u8 len)
558 {
559 hi_u32 cur_pos = 0;
560 hi_u32 index = 0;
561 hi_u32 string_len = 0;
562 hi_s32 string_tmp_len;
563
564 hi_u32 ret = hi_nv_read((hi_u8)local, data, len, 0);
565 if (ret != HI_SUCCESS) {
566 oam_error_log0(0, OAM_SF_ANY, "init_print_params:: the read nvm is error!\n");
567 return;
568 }
569
570 hi_u32 *custom = (hi_u32 *)data;
571 if (custom == HI_NULL) {
572 return;
573 }
574
575 while ((index < len) && (string_len < buf_size - 1)) {
576 if ((local == INIT_CONFIG_CALIBRATION) || (local == INIT_CONFIG_SAR_TXPWR) ||
577 (local == INIT_CONFIG_BAND_TXPWR) || (local == INIT_CONFIG_RF_REG1) ||
578 (local == INIT_CONFIG_RF_REG2) || (local == INIT_CONFIG_DPD_CALIBRATION)) {
579 string_tmp_len = snprintf_s(pc_print_buff + string_len, (buf_size - string_len),
580 (buf_size - string_len - 1), "0X%X\n", custom[cur_pos]);
581 } else {
582 string_tmp_len = snprintf_s(pc_print_buff + string_len, (buf_size - string_len),
583 (buf_size - string_len - 1), "%d\n", custom[cur_pos]);
584 }
585
586 if (string_tmp_len == (-1)) {
587 oam_error_log0(0, OAM_SF_ANY, "init_print_params:: snprintf_s error!\n");
588 continue;
589 }
590
591 string_len += (hi_u32)string_tmp_len;
592 index += 4; /* 4 步长 */
593 cur_pos++;
594 }
595 }
596
597 /* ****************************************************************************
598 函 数 名: init_print_params
599 功能描述: netdev open 调用的定制化总入口
600 输入参数:
601 输出参数: 无
602 返 回 值: 无
603 调用函数:
604 被调函数:
605
606 修改历史 :
607 1.日 期: 2019年05月27日
608 作 者 : HiSilicon
609 修改内容: 新生成函数
610
611 **************************************************************************** */
612 /* 规则5.1 避免函数过长,函数不超过50行(非空非注释),申请例外: 包含本函数的宏没有打开,建议屏蔽 */
init_print_params(hi_char * pc_print_buff,hi_u32 buf_size,hi_u32 local)613 static hi_void init_print_params(hi_char *pc_print_buff, hi_u32 buf_size, hi_u32 local)
614 {
615 hi_u8 len = 0;
616 hi_void *data = HI_NULL;
617
618 wal_cfg_params params;
619 wal_cfg_base_delta_power base_delta_power;
620 wal_cfg_calibration calibration;
621 wal_cfg_rf_rx_insertion rx_insertion;
622 wal_cfg_sar_txpwr sar_txpwr;
623 wal_cfg_band_txpwr band_txpwr;
624 wal_cfg_rf_reg1 rf_reg1;
625 wal_cfg_rf_reg2 rf_reg2;
626 wal_cfg_dpd_calibration dpd_cali;
627
628 if (memset_s(pc_print_buff, buf_size, 0x00, buf_size) != EOK) {
629 oam_error_log0(0, 0, "{init_print_params::mem safe func err!}");
630 return;
631 }
632
633 if (local == INIT_CONFIG_PARAMS) {
634 data = (hi_void *)¶ms;
635 len = sizeof(params);
636 } else if (local == INIT_CONFIG_CALIBRATION) {
637 data = (hi_void *)&calibration;
638 len = sizeof(calibration);
639 } else if (local == INIT_CONFIG_RF_RX_INSERTION) {
640 data = (hi_void *)&rx_insertion;
641 len = sizeof(rx_insertion);
642 } else if (local == INIT_CONFIG_BASE_DELTA_POWER) {
643 data = (hi_void *)&base_delta_power;
644 len = sizeof(base_delta_power);
645 } else if (local == INIT_CONFIG_SAR_TXPWR) {
646 data = (hi_void *)&sar_txpwr;
647 len = sizeof(sar_txpwr);
648 } else if (local == INIT_CONFIG_BAND_TXPWR) {
649 data = (hi_void *)&band_txpwr;
650 len = sizeof(band_txpwr);
651 } else if (local == INIT_CONFIG_RF_REG1) {
652 data = (hi_void *)&rf_reg1;
653 len = sizeof(rf_reg1);
654 } else if (local == INIT_CONFIG_RF_REG2) {
655 data = (hi_void *)&rf_reg2;
656 len = sizeof(rf_reg2);
657 } else if (local == INIT_CONFIG_DPD_CALIBRATION) {
658 data = (hi_void *)&dpd_cali;
659 len = sizeof(dpd_cali);
660 }
661
662 init_print_params_proc(pc_print_buff, buf_size, local, data, len);
663 }
664 #endif
665
666 /* ****************************************************************************
667 函 数 名: wal_customize_init_country
668 功能描述: 国家码定制化
669 输入参数:
670 输出参数: 无
671 返 回 值: HI_SUCCESS 或 失败错误码
672 调用函数:
673 被调函数:
674
675 修改历史 :
676 1.日 期: 2015年10月22日
677 作 者 : HiSilicon
678 修改内容: 新生成函数
679
680 **************************************************************************** */
wal_customize_init_country(oal_net_device_stru * netdev)681 static hi_u32 wal_customize_init_country(oal_net_device_stru *netdev)
682 {
683 hi_u32 ret;
684 hi_char country_code[COUNTRY_CODE_LEN] = {'\0'};
685 init_int_to_str_for_country_code(&country_code[0], COUNTRY_CODE_LEN);
686
687 ret = wal_hipriv_setcountry(netdev, &country_code[0]);
688 if (oal_unlikely(ret != HI_SUCCESS)) {
689 oam_error_log1(0, OAM_SF_ANY, "{wal_customize_init_country::wal_send_cfg_event return err code [%u]!}\r\n",
690 ret);
691 return ret;
692 }
693
694 return ret;
695 }
696
697 #ifdef _PRE_DEBUG_MODE
698 /* ****************************************************************************
699 函 数 名 : wal_customize_init_log
700 功能描述 : 日志相关
701 输入参数 :
702 输出参数 : 无
703 返 回 值 : HI_SUCCESS 或 失败错误码
704 调用函数 :
705 被调函数 :
706
707 修改历史 :
708 1.日 期 : 2015年10月22日
709 作 者 : HiSilicon
710 修改内容 : 新生成函数
711
712 **************************************************************************** */
wal_customize_init_log(oal_net_device_stru * netdev)713 static hi_u32 wal_customize_init_log(oal_net_device_stru *netdev)
714 {
715 wal_msg_write_stru write_msg;
716 hi_u32 ret;
717 hi_u32 l_loglevel;
718
719 /* log_level */
720 l_loglevel = wal_get_init_value(INIT_CFG_LOGLEVEL);
721 if (l_loglevel < OAM_LOG_LEVEL_ERROR || l_loglevel > OAM_LOG_LEVEL_INFO) {
722 oam_error_log3(0, OAM_SF_ANY,
723 "{wal_customize_init_log::loglevel[%d] out of range[%d,%d], check value in ini file!}\r\n", l_loglevel,
724 OAM_LOG_LEVEL_ERROR, OAM_LOG_LEVEL_INFO);
725 return HI_FAIL;
726 }
727
728 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_ALL_LOG_LEVEL, sizeof(hi_s32));
729 *((hi_u32 *)(write_msg.auc_value)) = l_loglevel;
730 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_s32),
731 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
732 if (oal_unlikely(ret != HI_SUCCESS)) {
733 oam_error_log1(0, OAM_SF_ANY, "{wal_customize_init_log::return err code[%u]!}\r\n", ret);
734 }
735
736 return ret;
737 }
738 #endif
739
740 #if _PRE_MULTI_CORE_MODE != _PRE_MULTI_CORE_MODE_OFFLOAD_DMAC
741 /* ****************************************************************************
742 函 数 名 : wal_customize_init_clock
743 功能描述 : hw 时钟
744 输入参数 :
745 输出参数 : 无
746 返 回 值 : HI_SUCCESS 或 失败错误码
747 调用函数 :
748 被调函数 :
749
750 修改历史 :
751 1.日 期 : 2015年10月22日
752 作 者 : HiSilicon
753 修改内容 : 新生成函数
754
755 **************************************************************************** */
wal_customize_init_clock(oal_net_device_stru * netdev)756 static hi_u32 wal_customize_init_clock(oal_net_device_stru *netdev)
757 {
758 wal_msg_write_stru write_msg;
759 hi_u32 ret;
760 hi_u32 freq;
761 hi_u8 type;
762
763 freq = (hi_u32)wal_get_init_value(INIT_CFG_RTS_CLK_FREQ);
764 type = (hi_u8)!!wal_get_init_value(INIT_CFG_CLK_TYPE);
765
766 if (freq < RTC_CLK_FREQ_MIN || freq > RTC_CLK_FREQ_MAX) {
767 oam_error_log3(0, OAM_SF_ANY,
768 "{wal_customize_init_clock::clock_freq[%d] out of range[%d,%d], check value in ini file!}\r\n", freq,
769 RTC_CLK_FREQ_MIN, RTC_CLK_FREQ_MAX);
770 return HI_FAIL;
771 }
772
773 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_PM_CFG_PARAM, sizeof(mac_cfg_pm_param));
774 ((mac_cfg_pm_param*)(write_msg.auc_value))->rtc_clk_freq = freq;
775 ((mac_cfg_pm_param*)(write_msg.auc_value))->clk_type = type;
776
777 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_pm_param),
778 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
779 if (oal_unlikely(ret != HI_SUCCESS)) {
780 oam_error_log1(0, OAM_SF_ANY, "{wal_customize_init_clock::wal_send_cfg_event return err code [%u]!}\r\n", ret);
781 return ret;
782 }
783
784 return HI_SUCCESS;
785 }
786 #endif
787 /* ****************************************************************************
788 函 数 名 : wal_customize_init_rf
789 功能描述 : hw 2g 5g 前端
790 输入参数 :
791 输出参数 : 无
792 返 回 值 : HI_SUCCESS 或 失败错误码
793 调用函数 :
794 被调函数 :
795
796 修改历史 :
797 1.日 期 : 2015年10月22日
798 作 者 : HiSilicon
799 修改内容 : 新生成函数
800 2.日 期 : 2015年12月14日
801 作 者 : HiSilicon
802 修改内容 : 增加针对温度上升导致发射功率下降过多的功率补偿
803
804 **************************************************************************** */
wal_customize_init_rf(oal_net_device_stru * netdev)805 static hi_u32 wal_customize_init_rf(oal_net_device_stru *netdev)
806 {
807 wal_msg_write_stru write_msg;
808 hi_u8 error_param = HI_FALSE; /* 参数有效性标志,任意参数值不合法则置为1,所有参数不下发 */
809 mac_cfg_customize_tx_pwr_comp_stru *tx_pwr = HI_NULL;
810 hi_u8 idx, level;
811
812 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_CUS_RF,
813 sizeof(mac_cfg_customize_rf) + sizeof(mac_cfg_customize_tx_pwr_comp_stru));
814
815 mac_cfg_customize_rf *customize_rf = (mac_cfg_customize_rf *)(write_msg.auc_value);
816
817 /* 配置: 2g rf */
818 for (idx = 0; idx < MAC_NUM_2G_BAND; ++idx) {
819 /* 获取各2p4g 各band 0.25db及0.1db精度的线损值 */
820 hi_s8 rf_power_loss = (hi_s8)wal_get_init_value(INIT_CFG_RF_LINE_TXRX_GAIN_DB_2G_BAND1 + idx);
821 if ((rf_power_loss >= RF_LINE_TXRX_GAIN_DB_2G_MIN) && (rf_power_loss <= 0)) {
822 customize_rf->ac_gain_db_2g[idx].rf_gain_db_2g_mult4 = rf_power_loss;
823 } else {
824 oam_error_log1(0, OAM_SF_CALIBRATE, "wal_customize_init_rf:: c_mult4[%d]", (hi_s32)rf_power_loss);
825
826 error_param = HI_TRUE; /* 值超出有效范围,标记置为TRUE */
827 }
828 }
829
830 /* 配置: 功率补偿 */
831 tx_pwr = (mac_cfg_customize_tx_pwr_comp_stru *)(write_msg.auc_value + sizeof(mac_cfg_customize_rf));
832
833 for (level = 0; level < 3; ++level) { /* 3 不超过3层 */
834 tx_pwr->ast_txratio2pwr[level].us_tx_ratio =
835 (hi_u16)wal_get_init_value(INIT_CFG_TX_RATIO_LEVEL_0 + 2 * level); /* 2 比例系数 */
836
837 /* 判断tx占空比是否有效 */
838 if (tx_pwr->ast_txratio2pwr[level].us_tx_ratio > TX_RATIO_MAX) {
839 oam_error_log2(0, OAM_SF_ANY, "{wal_customize_init_rf::cfg_id[%d]:tx_ratio[%d] out of range}",
840 INIT_CFG_TX_RATIO_LEVEL_0 + 2 * level, tx_pwr->ast_txratio2pwr[level].us_tx_ratio); /* 2 比例 */
841
842 error_param = HI_TRUE; /* 值超出有效范围,标记置为TRUE */
843 }
844
845 tx_pwr->ast_txratio2pwr[level].us_tx_pwr_comp_val =
846 (hi_u16)wal_get_init_value(INIT_CFG_TX_RATIO_LEVEL_0 + 2 * level + 1); /* 2 比例系数 */
847
848 /* 判断发射功率补偿值是否有效 */
849 if (tx_pwr->ast_txratio2pwr[level].us_tx_pwr_comp_val > TX_PWR_COMP_VAL_MAX) {
850 oam_error_log2(0, OAM_SF_ANY, "{wal_customize_init_rf::cfg_id[%d]:tx_pwr_comp_val[%d] out of range}",
851 INIT_CFG_TX_RATIO_LEVEL_0 + 2 * level + 1, tx_pwr->ast_txratio2pwr[level].us_tx_pwr_comp_val); /* 2 */
852
853 error_param = HI_TRUE; /* 值超出有效范围,标记置为TRUE */
854 }
855 }
856
857 /* 判断根据温度额外补偿的发射功率值是否有效 */
858 tx_pwr->more_pwr = (hi_u32)wal_get_init_value(INIT_CFG_MORE_PWR);
859 if (tx_pwr->more_pwr > MORE_PWR_MAX) {
860 oam_error_log1(0, OAM_SF_ANY, "{wal_customize_init_rf::[INIT_CFG_MORE_PWR]more_pwr = %d}", tx_pwr->more_pwr);
861
862 error_param = HI_TRUE; /* 值超出有效范围,标记置为TRUE */
863 }
864
865 /* 如果上述参数中有不正确的,直接返回 */
866 if (error_param) {
867 return HI_FAIL;
868 }
869
870 /* 如果所有参数都在有效范围内,则下发配置值 */
871 hi_u32 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
872 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_customize_rf) + sizeof(mac_cfg_customize_tx_pwr_comp_stru),
873 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
874 if (oal_unlikely(ret != HI_SUCCESS)) {
875 oam_error_log1(0, OAM_SF_ANY, "{wal_customize_init_rf::EVENT[wal_send_cfg_event] failed, Err = %u}", ret);
876 }
877
878 return ret;
879 }
880
wal_customize_init_dts_cali(mac_cus_dts_cali_stru * cus_cali)881 static hi_u32 wal_customize_init_dts_cali(mac_cus_dts_cali_stru *cus_cali)
882 {
883 hi_u8 idx = 0;
884 hi_u8 error_param = HI_FALSE; /* 参数有效性标志,任意参数值不合法则置为1,所有参数不下发 */
885 /* * 配置: TXPWR_PA_DC_REF * */
886 /* 2G REF: 分3个信道 */
887 for (idx = 0; idx < MAC_NUM_2G_BAND; idx++) {
888 hi_u16 s_ref_val = (hi_u16)wal_get_init_value(INIT_CFG_RF_TXPWR_CALI_REF_2G_VAL_BAND1 + idx);
889 if (s_ref_val <= CALI_TXPWR_PA_DC_REF_MAX) {
890 cus_cali->aus_cali_txpwr_pa_dc_ref_2g_val[idx] = s_ref_val;
891 } else {
892 /* 值超出有效范围,标记置为TRUE */
893 error_param = HI_TRUE;
894 oam_error_log1(0, OAM_SF_ANY, "{wal_customize_init_cali::[dts]2g ref err, id[%d], check dts file!}\r\n",
895 INIT_CFG_RF_TXPWR_CALI_REF_2G_VAL_BAND1 + idx);
896 }
897 }
898
899 /* 如果上述参数中有不正确的,直接返回 */
900 if (error_param == HI_TRUE) {
901 oam_error_log0(0, OAM_SF_ANY, "{wal_customize_init_cali:: params wrong value, do not send cfg event!}\r\n");
902 return HI_FAIL;
903 }
904
905 return HI_SUCCESS;
906 }
907
wal_customize_init_band_edge_limit(mac_cus_band_edge_limit_stru * band_edge_limit)908 hi_u32 wal_customize_init_band_edge_limit(mac_cus_band_edge_limit_stru *band_edge_limit)
909 {
910 hi_u8 idx = 0;
911 hi_u8 error_param = HI_FALSE; /* 参数有效性标志,任意参数值不合法则置为1,所有参数不下发 */
912 /* 实际需要进行配置的FCC认证band数 */
913 const hi_u8 fcc_auth_band_num = 3; /* 3 band数 */
914 /* 赋值idx、txpwr */
915 for (idx = 0; idx < fcc_auth_band_num; ++idx) {
916 hi_u8 max_txpwr = (hi_u8)wal_get_init_value(INIT_CFG_BAND_EDGE_LIMIT_2G_11G_TXPWR + idx);
917 band_edge_limit[idx].index = idx;
918 band_edge_limit[idx].max_txpower = max_txpwr;
919 }
920 /* 赋值scale */
921 for (idx = 0; idx < fcc_auth_band_num; ++idx) {
922 hi_u8 dbb_scale = (hi_u8)wal_get_init_value(INIT_CFG_BAND_EDGE_LIMIT_2G_11G_DBB_SCALING + idx);
923 band_edge_limit[idx].dbb_scale = dbb_scale;
924 }
925 /* 如果上述参数中有不正确的,直接返回 */
926 if (error_param) {
927 oam_error_log0(0, OAM_SF_ANY,
928 "{wal_customize_init_band_edge_limit::one or more params have wrong value, do not send cfg event!}\r\n");
929 return HI_FAIL;
930 }
931
932 return HI_SUCCESS;
933 }
934
935 /* ****************************************************************************
936 函 数 名 : wal_customize_init_cali
937 功能描述 : 定制化参数::ini::校准
938 输入参数 :
939 输出参数 : 无
940 返 回 值 : HI_SUCCESS 或 失败错误码
941 调用函数 :
942 被调函数 :
943
944 修改历史 :
945 1.日 期 : 2016年11月21日
946 作 者 : HiSilicon
947 修改内容 : 新生成函数
948
949 **************************************************************************** */
wal_customize_init_cali(oal_net_device_stru * netdev)950 static hi_u32 wal_customize_init_cali(oal_net_device_stru *netdev)
951 {
952 wal_msg_write_stru write_msg = {0};
953 hi_u32 ret;
954 mac_cus_dts_cali_stru cus_cali = {0};
955 mac_cus_band_edge_limit_stru* band_edge_limit = HI_NULL;
956
957 if (wal_customize_init_dts_cali(&cus_cali) != HI_SUCCESS) {
958 return HI_FAIL;
959 }
960
961 /* 如果所有参数都在有效范围内,则下发配置值 */
962 if (memcpy_s(write_msg.auc_value, sizeof(mac_cus_dts_cali_stru), (hi_s8 *)&cus_cali,
963 sizeof(mac_cus_dts_cali_stru)) != EOK) {
964 oam_error_log0(0, OAM_SF_ANY, "{wal_customize_init_cali::mem safe function err!}");
965 return HI_FAIL;
966 }
967
968 hi_u32 offset = sizeof(mac_cus_dts_cali_stru);
969
970 /* 配置: FCC认证 */
971 /* 申请内存存放边带功率信息,本函数结束后释放,申请内存大小: 6 * 4 = 24字节 */
972 band_edge_limit =
973 oal_mem_alloc(OAL_MEM_POOL_ID_LOCAL, NUM_OF_BAND_EDGE_LIMIT * sizeof(mac_cus_band_edge_limit_stru));
974 if (band_edge_limit == HI_NULL) {
975 oam_error_log0(0, OAM_SF_ANY, "{wal_customize_init_cali::alloc fcc auth mem fail, return null ptr!}\r\n");
976 return HI_ERR_CODE_PTR_NULL;
977 }
978
979 if (wal_customize_init_band_edge_limit(band_edge_limit)) {
980 /* 释放pst_band_edge_limit内存 */
981 oal_mem_free(band_edge_limit);
982 return HI_FAIL;
983 }
984
985 if (memcpy_s(write_msg.auc_value + offset, NUM_OF_BAND_EDGE_LIMIT * sizeof(mac_cus_band_edge_limit_stru),
986 (hi_s8 *)band_edge_limit, NUM_OF_BAND_EDGE_LIMIT * sizeof(mac_cus_band_edge_limit_stru)) != EOK) {
987 oal_mem_free(band_edge_limit);
988 oam_error_log0(0, OAM_SF_ANY, "{wal_customize_init_cali::mem safe function err!}");
989 return HI_FAIL;
990 }
991 offset += (NUM_OF_BAND_EDGE_LIMIT * sizeof(mac_cus_band_edge_limit_stru));
992
993 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_CUS_DTS_CALI, (hi_u16)offset);
994 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, (hi_u16)(WAL_MSG_WRITE_MSG_HDR_LENGTH + offset),
995 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
996 if (oal_unlikely(ret != HI_SUCCESS)) {
997 oam_error_log1(0, OAM_SF_ANY, "{wal_customize_init_cali::wal_send_cfg_event failed, error no[%u]!}\r\n", ret);
998 oal_mem_free(band_edge_limit);
999 return ret;
1000 }
1001 oal_mem_free(band_edge_limit);
1002
1003 return HI_SUCCESS;
1004 }
1005
1006 /* ****************************************************************************
1007 函 数 名 : wal_customize_init_dbb
1008 功能描述 : 解析从nv或dts中读取的字符数组,存入结构体数组中
1009 输入参数 :
1010 输出参数 : 无
1011 返 回 值 : HI_SUCCESS 或 失败错误码
1012 调用函数 :
1013 被调函数 :
1014
1015 修改历史 :
1016 1.日 期 : 2016年11月21日
1017 作 者 : HiSilicon
1018 修改内容 : 新生成函数
1019
1020 **************************************************************************** */
wal_customize_init_dbb(oal_net_device_stru * netdev)1021 static hi_u32 wal_customize_init_dbb(oal_net_device_stru *netdev)
1022 {
1023 hi_u8 idx;
1024 hi_u32 ret;
1025 hi_u32 offset = 0;
1026 wal_msg_write_stru write_msg;
1027 dbb_scaling_stru dbb_scaling_params;
1028
1029 if (memset_s(&dbb_scaling_params, sizeof(dbb_scaling_stru), 0, sizeof(dbb_scaling_stru)) != EOK) {
1030 oam_error_log0(0, OAM_SF_ANY, "{wal_customize_init_dbb::mem safe function err!}");
1031 return HI_FAIL;
1032 }
1033 if (memset_s(&write_msg, sizeof(wal_msg_write_stru), 0, sizeof(wal_msg_write_stru)) != EOK) {
1034 oam_error_log0(0, OAM_SF_ANY, "{wal_customize_init_dbb::mem safe function err!}");
1035 return HI_FAIL;
1036 }
1037 /* 结构体数组赋值 */
1038 for (idx = 0; idx < 7; idx++) { /* 7 结构体数组长度 */
1039 hi_u32 ref_val = (hi_u32)wal_get_init_value(INIT_CFG_PHY_SCALING_VALUE_11B + idx);
1040 dbb_scaling_params.dbb_scale[idx] = ref_val;
1041 }
1042 if (memcpy_s(write_msg.auc_value, sizeof(dbb_scaling_stru), (hi_s8 *)&dbb_scaling_params,
1043 sizeof(dbb_scaling_stru)) != EOK) {
1044 oam_error_log0(0, OAM_SF_ANY, "{wal_customize_init_dbb::mem safe function err!}");
1045 return HI_FAIL;
1046 }
1047 offset += sizeof(dbb_scaling_stru);
1048
1049 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_CUS_NVRAM_PARAM, (hi_u16)offset);
1050
1051 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, (hi_u16)(WAL_MSG_WRITE_MSG_HDR_LENGTH + offset),
1052 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
1053 if (oal_unlikely(ret != HI_SUCCESS)) {
1054 oam_error_log1(0, OAM_SF_ANY, "{wal_customize_init_dbb_main::return err code [%u]!}\r\n", ret);
1055 }
1056
1057 return ret;
1058 }
1059
1060 /* ****************************************************************************
1061 功能描述 : 读取每个信道的发送功率(FCC)
1062 修改历史 :
1063 1.日 期 : 2019年12月30日
1064 作 者 : HiSilicon
1065 修改内容 : 新生成函数
1066 **************************************************************************** */
wal_customize_init_fcc_tx_pwr(oal_net_device_stru * netdev)1067 static hi_u32 wal_customize_init_fcc_tx_pwr(oal_net_device_stru *netdev)
1068 {
1069 hi_u8 idx;
1070 hi_u32 ret;
1071 hi_u32 offset = 0;
1072 wal_msg_write_stru write_msg;
1073 fcc_tx_pwr_stru fcc_tx_pwr_params;
1074
1075 if (memset_s(&fcc_tx_pwr_params, sizeof(fcc_tx_pwr_stru), 0, sizeof(fcc_tx_pwr_stru)) != EOK) {
1076 oam_error_log0(0, OAM_SF_ANY, "{wal_customize_init_fcc_tx_pwr::mem safe function err!}");
1077 return HI_FAIL;
1078 }
1079 if (memset_s(&write_msg, sizeof(wal_msg_write_stru), 0, sizeof(wal_msg_write_stru)) != EOK) {
1080 oam_error_log0(0, OAM_SF_ANY, "{wal_customize_init_fcc_tx_pwr::mem safe function err!}");
1081 return HI_FAIL;
1082 }
1083 /* 结构体数组赋值 */
1084 for (idx = 0; idx < MAC_NUM_2G_CH_NUM; idx++) { /* 9 结构体数组长度 */
1085 fcc_tx_pwr_params.tx_pwr[idx] = wal_get_init_value(INIT_CFG_SIDE_BAND_TXPWR_LIMIT_24G_CH1 + idx);
1086 }
1087 if (memcpy_s(write_msg.auc_value, sizeof(fcc_tx_pwr_stru),
1088 (hi_s8*)&fcc_tx_pwr_params, sizeof(fcc_tx_pwr_stru)) != EOK) {
1089 oam_error_log0(0, OAM_SF_ANY, "{wal_customize_init_fcc_tx_pwr::mem safe function err!}");
1090 return HI_FAIL;
1091 }
1092 offset += sizeof(fcc_tx_pwr_stru);
1093
1094 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_CUS_FCC_TX_PWR, (hi_u16)offset);
1095
1096 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, (hi_u16)(WAL_MSG_WRITE_MSG_HDR_LENGTH + offset),
1097 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
1098 if (oal_unlikely(ret != HI_SUCCESS)) {
1099 oam_error_log1(0, OAM_SF_ANY, "{wal_customize_init_fcc_tx_pwr::return err code [%u]!}\r\n", ret);
1100 }
1101
1102 return ret;
1103 }
1104
1105 #ifdef _PRE_XTAL_FREQUENCY_COMPESATION_ENABLE
wal_customize_init_freq_comp(oal_net_device_stru * netdev)1106 static hi_u32 wal_customize_init_freq_comp(oal_net_device_stru *netdev)
1107 {
1108 wal_msg_write_stru write_msg;
1109 freq_comp_stru freq_comp_params;
1110
1111 if (memset_s(&freq_comp_params, sizeof(freq_comp_stru), 0, sizeof(freq_comp_stru)) != EOK) {
1112 oam_error_log0(0, OAM_SF_ANY, "{wal_customize_init_freq_comp::mem safe function err!}");
1113 return HI_FAIL;
1114 }
1115 if (memset_s(&write_msg, sizeof(wal_msg_write_stru), 0, sizeof(wal_msg_write_stru)) != EOK) {
1116 oam_error_log0(0, OAM_SF_ANY, "{wal_customize_init_freq_comp::mem safe function err!}");
1117 return HI_FAIL;
1118 }
1119 /* 结构体数组赋值 */
1120 #if (_PRE_OS_VERSION_LITEOS == _PRE_OS_VERSION)
1121 freq_comp_params.high_temp_th = 0;
1122 #else
1123 freq_comp_params.high_temp_th = (hi_s16)wal_get_init_value(INIT_CFG_RF_HIGH_TEMP_THRESHOLD);
1124 #endif
1125 if (freq_comp_params.high_temp_th == 0) {
1126 freq_comp_params.high_temp_th = 105; /* 105:频偏温度值下限 */
1127 }
1128 if (freq_comp_params.high_temp_th < FREQ_COMP_TEMP_MIN || freq_comp_params.high_temp_th > FREQ_COMP_TEMP_MAX) {
1129 oam_error_log3(0, OAM_SF_ANY, "{wal_customize_init_freq_comp::high_threshold[%d] out of range[%d,%d]!}\r\n",
1130 freq_comp_params.high_temp_th, FREQ_COMP_TEMP_MIN, FREQ_COMP_TEMP_MAX);
1131 return HI_FAIL;
1132 }
1133 #if (_PRE_OS_VERSION_LITEOS == _PRE_OS_VERSION)
1134 freq_comp_params.low_temp_th = 0;
1135 #else
1136 freq_comp_params.low_temp_th = (hi_s16)wal_get_init_value(INIT_CFG_RF_LOW_TEMP_THRESHOLD);
1137 #endif
1138 if (freq_comp_params.low_temp_th == 0) {
1139 freq_comp_params.low_temp_th = 100; /* 100:频偏温度值下限 */
1140 }
1141 if (freq_comp_params.low_temp_th < FREQ_COMP_TEMP_MIN || freq_comp_params.low_temp_th > FREQ_COMP_TEMP_MAX) {
1142 oam_error_log3(0, OAM_SF_ANY, "{wal_customize_init_freq_comp::low_threshold[%d] out of range[%d,%d]!}\r\n",
1143 freq_comp_params.low_temp_th, FREQ_COMP_TEMP_MIN, FREQ_COMP_TEMP_MAX);
1144 return HI_FAIL;
1145 }
1146 #if (_PRE_OS_VERSION_LITEOS == _PRE_OS_VERSION)
1147 freq_comp_params.comp_val = 0;
1148 #else
1149 freq_comp_params.comp_val = (hi_s16)wal_get_init_value(INIT_CFG_RF_PPM_COMPESATION);
1150 #endif
1151 if (freq_comp_params.comp_val == 0) {
1152 freq_comp_params.comp_val = (-30); /* 30:频偏值 */
1153 }
1154 if (freq_comp_params.comp_val < FREQ_COMP_VAL_MIN || freq_comp_params.comp_val > FREQ_COMP_VAL_MAX) {
1155 oam_error_log3(0, OAM_SF_ANY, "{wal_customize_init_freq_comp::ppm_compesation[%d] out of range[%d,%d]!}\r\n",
1156 freq_comp_params.comp_val, FREQ_COMP_VAL_MIN, FREQ_COMP_VAL_MAX);
1157 return HI_FAIL;
1158 }
1159
1160 if (memcpy_s(write_msg.auc_value, sizeof(freq_comp_stru),
1161 (hi_s8*)&freq_comp_params, sizeof(freq_comp_stru)) != EOK) {
1162 oam_error_log0(0, OAM_SF_ANY, "{wal_customize_init_freq_comp::mem safe function err!}");
1163 return HI_FAIL;
1164 }
1165
1166 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_FREQ_COMP, (hi_u16)sizeof(freq_comp_stru));
1167
1168 hi_u32 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
1169 (hi_u16)(WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(freq_comp_stru)), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
1170 if (oal_unlikely(ret != HI_SUCCESS)) {
1171 oam_error_log1(0, OAM_SF_ANY, "{wal_customize_init_freq_comp::return err code [%u]!}\r\n", ret);
1172 }
1173
1174 return HI_SUCCESS;
1175 }
1176 #endif
1177
wal_cfg_dbb(const hi_u32 * data,hi_u8 size)1178 hi_u32 wal_cfg_dbb(const hi_u32 *data, hi_u8 size)
1179 {
1180 if (size != 7) { /* 7:dbb配置参数个数加evm配置参数 */
1181 oam_error_log1(0, OAM_SF_ANY, "wal_cfg_dbb: input data size should be 13, now %d!", size);
1182 return HI_FAIL;
1183 }
1184 return wal_set_init_value(INIT_CFG_PHY_SCALING_VALUE_11B, data, size);
1185 }
1186
wal_cfg_country_code(const hi_char * country_code,hi_s32 size)1187 hi_u32 wal_cfg_country_code(const hi_char *country_code, hi_s32 size)
1188 {
1189 hi_u32 code = init_str_to_int_for_country_code(country_code, size);
1190 return wal_set_init_value(INIT_CFG_COUNTRY_CODE, &code, 1);
1191 }
1192
wal_cfg_fcc_tx_pwr(const hi_u32 * data,hi_u8 size)1193 hi_u32 wal_cfg_fcc_tx_pwr(const hi_u32 *data, hi_u8 size)
1194 {
1195 if (size != 13) { /* 13:fcc发送功率配置参数个数 */
1196 oam_error_log1(0, OAM_SF_ANY, "wal_cfg_fcc_tx_pwr: input data size should be 13, now %d!", size);
1197 return HI_FAIL;
1198 }
1199 mdelay(3); /* 3:延时,避免sdio异常 */
1200 return wal_set_init_value(INIT_CFG_SIDE_BAND_TXPWR_LIMIT_24G_CH1, data, size);
1201 }
1202
wal_cfg_freq_comp_val(const hi_u32 * data,hi_u8 size)1203 hi_u32 wal_cfg_freq_comp_val(const hi_u32 *data, hi_u8 size)
1204 {
1205 if (size != 3) { /* 3:高温频偏配置参数个数 */
1206 oam_error_log1(0, OAM_SF_ANY, "wal_cfg_freq_comp_val: input data size should be 3, now %d!", size);
1207 return HI_FAIL;
1208 }
1209 return wal_set_init_value(INIT_CFG_RF_HIGH_TEMP_THRESHOLD, data, size);
1210 }
1211
wal_cfg_rssi_ofset(hi_s32 data)1212 hi_u32 wal_cfg_rssi_ofset(hi_s32 data)
1213 {
1214 if ((data < RF_LINE_TXRX_GAIN_DB_2G_MIN) || (data > 0)) {
1215 oam_error_log1(0, OAM_SF_ANY, "wal_cfg_rssi_ofset: input data out of range.Should in [-32, 0]!", data);
1216 return HI_FAIL;
1217 }
1218 return wal_set_init_value(INIT_CFG_RF_LINE_TXRX_GAIN_DB_2G_BAND1, (hi_u32 *)&data, 1);
1219 }
1220
1221 /* ****************************************************************************
1222 功能描述 : 配置定制化参数入口
1223 修改历史 :
1224 日 期 : 2015年10月22日
1225 作 者 : HiSilicon
1226 修改内容 : 新生成函数
1227
1228 **************************************************************************** */
wal_customize_set_config(hi_void)1229 hi_u32 wal_customize_set_config(hi_void)
1230 {
1231 hi_u32 ret = HI_SUCCESS;
1232 oal_net_device_stru *netdev = HI_NULL;
1233
1234 if (!g_cfg_flag && (g_customize_init_params != HI_NULL)) {
1235 oam_error_log1(0, OAM_SF_ANY, "In wal_customize_set_config g_uc_cfg_flag[%d] is not inited !", g_cfg_flag);
1236 return HI_FAIL;
1237 }
1238
1239 netdev = oal_get_netdev_by_name(WLAN_CFG_VAP_NAME);
1240 if (netdev == HI_NULL) {
1241 oam_error_log0(0, OAM_SF_ANY, "wifi_set_country Hisilicon0 device not found.");
1242 /* 释放从NVM读取的默认配置 */
1243 oal_free(g_customize_init_params);
1244 g_customize_init_params = HI_NULL;
1245 return HI_FAIL;
1246 }
1247
1248 #if (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION)
1249 oal_dev_put(netdev);
1250 #endif
1251
1252 #ifdef _PRE_XTAL_FREQUENCY_COMPESATION_ENABLE
1253 /* RF PLL补偿系数 */
1254 if (wal_customize_init_freq_comp(netdev) != HI_SUCCESS) {
1255 ret |= BIT1; /* BIT0为HI_FAIL不可用 */
1256 }
1257
1258 #endif
1259
1260 /* DBB scaling */
1261 if (wal_customize_init_dbb(netdev) != HI_SUCCESS) {
1262 ret |= BIT3;
1263 }
1264 /* FCC tx pwr */
1265 if (wal_customize_init_fcc_tx_pwr(netdev) != HI_SUCCESS) {
1266 ret |= BIT4;
1267 }
1268 /* 国家码 device init时国家码已初始化 */
1269 if (wal_customize_init_country(netdev) != HI_SUCCESS) {
1270 ret |= BIT5;
1271 }
1272 /* RF */
1273 if (wal_customize_init_rf(netdev) != HI_SUCCESS) {
1274 ret |= BIT7;
1275 }
1276 /* 校准 */
1277 if (wal_customize_init_cali(netdev) != HI_SUCCESS) {
1278 ret |= BIT2;
1279 }
1280 #ifdef CUSTOM_DBG
1281 printk("wal_customize_init_cali success.ret 0x%x\r\n", ret);
1282 #endif
1283 /* 释放从NVM读取的默认配置 */
1284 #if (_PRE_OS_VERSION_LITEOS == _PRE_OS_VERSION)
1285 free(g_customize_init_params);
1286 #elif (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION)
1287 oal_free(g_customize_init_params);
1288 #endif
1289 g_customize_init_params = HI_NULL;
1290
1291 return ret;
1292 }
1293
1294 /* ****************************************************************************
1295 功能描述: 初始化定制化信息
1296 修改历史:
1297 1.日 期: 2019年05月27日
1298 作 者 : HiSilicon
1299 修改内容: 新生成函数
1300 **************************************************************************** */
wal_customize_init(hi_void)1301 hi_u32 wal_customize_init(hi_void)
1302 {
1303 hi_u32 i;
1304 hi_char country_code[] = "NC"; /* 初始国家码为CN,CN第1个字符和第2个字符替换位置结果为NC */
1305
1306 if (g_cfg_flag) {
1307 return HI_SUCCESS;
1308 }
1309
1310 #ifdef _PRE_FCC_INITIAL_PARAMS_MODE
1311 wal_customize_params wifi_customize_params = {0, {105, 100, -30},
1312 {0x61636263, 0x6A6A6A6A, 0x4F536061, 0x60686768, 0x51516161, 0x00000000, 0x01000000},
1313 {0x8aa8aaa1, 0x24424441, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
1314 0x00000001, 0x00000001, 0x02202221, 0x68868881, 0xffffffff, 0xffffffff}};
1315 #else /* CFG_CE_MODE */
1316 wal_customize_params wifi_customize_params = {0, {105, 100, -30},
1317 {0x6B6B6D6E, 0x67676767, 0x50545F60, 0x565E5E5E, 0x4F4F5656, 0x00000000, 0x01000000},
1318 {0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
1319 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}};
1320 #endif
1321
1322 g_customize_init_params = (hi_u32 *)oal_memalloc(sizeof(hi_u32) * INIT_CFG_BUTT);
1323 if (g_customize_init_params == HI_NULL) {
1324 oam_error_log0(0, 0, "In wal_customize_init g_ul_customize_init_params is not malloc!");
1325 return HI_ERR_MALLOC_FAILUE;
1326 }
1327 /* 安全编程规则6.6例外(3)从堆中分配内存后,赋予初值 */
1328 memset_s(g_customize_init_params, sizeof(hi_u32) * INIT_CFG_BUTT, 0, sizeof(hi_u32) * INIT_CFG_BUTT);
1329 /* 初始化dbb参数 */
1330 for (i = 0; i < WAL_DBB_PARAM_CNT; ++i) {
1331 g_customize_init_params[INIT_CFG_PHY_SCALING_VALUE_11B + i] = wifi_customize_params.dbb_params[i];
1332 }
1333 /* 初始化fcc参数 */
1334 for (i = 0; i < WAL_CH_TX_PWR_PARAM_CNT; ++i) {
1335 g_customize_init_params[INIT_CFG_SIDE_BAND_TXPWR_LIMIT_24G_CH1 + i] = wifi_customize_params.ch_txpwr_offset[i];
1336 }
1337 /* 初始化高温频偏参数 */
1338 for (i = 0; i < WAL_FREQ_COMP_PARAM_CNT; ++i) {
1339 g_customize_init_params[INIT_CFG_RF_HIGH_TEMP_THRESHOLD + i] = wifi_customize_params.freq_comp[i];
1340 }
1341 /* 初始化rssi参数 */
1342 g_customize_init_params[INIT_CFG_RF_LINE_TXRX_GAIN_DB_2G_BAND1] = wifi_customize_params.rssi_offset;
1343 /* 初始化国家码 */
1344 g_cfg_flag = HI_TRUE;
1345 hi_u32 ret = wal_cfg_country_code(country_code, COUNTRY_CODE_LEN);
1346 if (ret != HI_SUCCESS) {
1347 return ret;
1348 }
1349 #if (_PRE_MULTI_CORE_MODE != _PRE_MULTI_CORE_MODE_OFFLOAD_DMAC)
1350 ret = init_read_customize_params();
1351 if (ret != HI_SUCCESS) {
1352 oam_error_log0(0, "In wal_customize_init failed.");
1353 oal_free(g_customize_init_params);
1354 g_customize_init_params = HI_NULL;
1355 return ret;
1356 }
1357 #endif
1358 printk("wal_customize_init SUCCESSFULLY!\r\n");
1359 return HI_SUCCESS;
1360 }
1361
1362 /* ****************************************************************************
1363 功能描述 : 初始化定制化信息
1364 修改历史 :
1365 1.日 期 : 2019年05月27日
1366 作 者 : HiSilicon
1367 修改内容 : 新生成函数
1368 **************************************************************************** */
wal_customize_exit(hi_void)1369 hi_u32 wal_customize_exit(hi_void)
1370 {
1371 if (!g_cfg_flag) {
1372 oam_error_log0(0, 0, "In wal_customize_exit g_uc_cfg_flag invalid!");
1373 return HI_FAIL;
1374 }
1375
1376 if (g_customize_init_params != HI_NULL) {
1377 oal_free(g_customize_init_params);
1378 g_customize_init_params = HI_NULL;
1379 }
1380
1381 g_cfg_flag = HI_FALSE;
1382
1383 printk("wal_customize_exit SUCCESSFULLY\r\n");
1384 return HI_SUCCESS;
1385 }
1386
1387 /* ****************************************************************************
1388 函 数 名 : wal_get_init_value
1389 功能描述 :
1390 输入参数 :
1391 输出参数 : 无
1392 返 回 值 : HI_SUCCESS 或 失败错误码
1393 调用函数 :
1394 被调函数 :
1395
1396 修改历史 :
1397 1.日 期 : 2015年10月22日
1398 作 者 : HiSilicon
1399 修改内容 : 新生成函数
1400 2.日 期 : 2015年11月2日
1401 作 者 : HiSilicon
1402 修改内容 : 增加tag用于判断ini和dts
1403
1404 **************************************************************************** */
wal_get_init_value(hi_u32 cfg_id)1405 hi_u32 wal_get_init_value(hi_u32 cfg_id)
1406 {
1407 hi_u32 *pgal_params = HI_NULL;
1408 hi_u32 l_wlan_cfg_butt;
1409
1410 if (g_cfg_flag && (g_customize_init_params != HI_NULL)) {
1411 if ((CUS_TAG_NVM == g_cur_init_config_type) || (CUS_TAG_INI == g_cur_init_config_type)) {
1412 pgal_params = &g_customize_init_params[0];
1413 l_wlan_cfg_butt = INIT_CFG_BUTT;
1414 } else {
1415 oam_error_log1(0, OAM_SF_ANY, "wal_customize tag number[0x%2x] not correct!\n", g_cur_init_config_type);
1416 return HI_FAIL;
1417 }
1418
1419 if (l_wlan_cfg_butt <= cfg_id) {
1420 oam_error_log2(0, OAM_SF_ANY, "wal_customize cfg id:%d out of range, max cfg id:%d\n", cfg_id,
1421 l_wlan_cfg_butt);
1422 return HI_FAIL;
1423 }
1424
1425 return pgal_params[cfg_id];
1426 } else {
1427 oam_error_log0(0, OAM_SF_ANY, "The custom must be config is inited process!\n");
1428 return 0;
1429 }
1430 }
1431
1432 /* ****************************************************************************
1433 功能描述 :设置参数值
1434 修改历史 :
1435 1.日 期 : 2020年03月26日
1436 作 者 : HiSilicon
1437 修改内容 : 新生成函数
1438 **************************************************************************** */
wal_set_init_value(hi_u32 cfg_id,const hi_u32 * data,hi_u8 size)1439 hi_u32 wal_set_init_value(hi_u32 cfg_id, const hi_u32 *data, hi_u8 size)
1440 {
1441 hi_u32 i;
1442
1443 if (g_cfg_flag && (g_customize_init_params != HI_NULL)) {
1444 if ((cfg_id + size) >= INIT_CFG_BUTT) {
1445 oam_error_log2(0, OAM_SF_ANY, "wal_set_init_value cfg id:%d out of range, max cfg id:%d\n",
1446 (cfg_id + size), INIT_CFG_BUTT);
1447 return HI_FAIL;
1448 }
1449 for (i = 0; i < size; ++i) {
1450 g_customize_init_params[cfg_id + i] = data[i];
1451 }
1452 } else {
1453 return HI_FAIL;
1454 }
1455 return HI_SUCCESS;
1456 }
1457
1458 #ifdef _PRE_DEBUG_MODE
1459 /* ****************************************************************************
1460 函 数 名 : wal_dump_init_param
1461 功能描述 : 初始化定制化信息
1462 输入参数 : 无
1463 输出参数 : 无
1464 返 回 值 : hi_s32
1465 调用函数 :
1466 被调函数 :
1467
1468 修改历史 :
1469 1.日 期 : 2019年05月23日
1470 作 者 : HiSilicon
1471 修改内容 : 新生成函数
1472 **************************************************************************** */
1473 /* 结构体数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_print_init_params(oal_net_device_stru * netdev,hi_char * pc_param)1474 hi_u32 wal_print_init_params(oal_net_device_stru *netdev, hi_char *pc_param)
1475 {
1476 hi_u32 local = 0x20;
1477 hi_char *pc_print_buff = HI_NULL;
1478
1479 if ((netdev == HI_NULL) || (pc_param == HI_NULL)) {
1480 oam_error_log0(0, OAM_SF_ANY, "wal_print_init_params: The param is error!\n");
1481 return HI_FAIL;
1482 }
1483
1484 if (!g_cfg_flag) {
1485 oam_error_log1(0, OAM_SF_ANY, "wal_print_init_params: g_uc_cfg_flag[%d] not correct!\n", g_cfg_flag);
1486 return HI_FAIL;
1487 }
1488
1489 pc_print_buff = (hi_char *)oal_mem_alloc(OAL_MEM_POOL_ID_LOCAL, OAM_REPORT_MAX_STRING_LEN);
1490 if (pc_print_buff == HI_NULL) {
1491 oam_error_log0(0, OAM_SF_ANY, "wal_print_init_params:: malloc mem is error!\n");
1492 return HI_ERR_MALLOC_FAILUE;
1493 }
1494
1495 while (local < INIT_CONFIG_NVM_BUTT) {
1496 init_print_params(pc_print_buff, OAM_REPORT_MAX_STRING_LEN, local);
1497 local++;
1498 }
1499
1500 oal_mem_free(pc_print_buff);
1501 return HI_SUCCESS;
1502 }
1503 #endif
1504
wal_set_boot_current_flag(hi_bool minimize)1505 hi_void wal_set_boot_current_flag(hi_bool minimize)
1506 {
1507 g_minimize_boot_current = minimize;
1508 }
1509
wal_sync_boot_current_to_dev(const hi_char * ifname)1510 hi_u32 wal_sync_boot_current_to_dev(const hi_char *ifname)
1511 {
1512 wal_msg_write_stru write_msg = {0};
1513 hi_u8 *param = HI_NULL;
1514 oal_net_device_stru *netdev = HI_NULL;
1515 hi_u32 ret;
1516
1517 if (ifname == HI_NULL) {
1518 oam_error_log0(0, 0, "{wal_minimize_boot_current:: ifname is NULL.}");
1519 return HI_FAIL;
1520 }
1521 netdev = oal_get_netdev_by_name(ifname);
1522 if (netdev == HI_NULL) {
1523 oam_error_log0(0, 0, "wal_minimize_boot_current:: device not found.");
1524 return HI_FAIL;
1525 }
1526 #if (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION)
1527 oal_dev_put(netdev);
1528 #endif
1529 /* 解析并设置配置命令参数 */
1530 param = (hi_u8 *)(write_msg.auc_value);
1531 *param = !g_minimize_boot_current; /* 取反下发 */
1532
1533 /* **************************************************************************
1534 抛事件到wal层处理
1535 ************************************************************************** */
1536 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_MINIMIZE_BOOT_CURRET, sizeof(hi_u8));
1537
1538 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_u8),
1539 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
1540 if (oal_unlikely(ret != HI_SUCCESS)) {
1541 oam_warning_log1(0, OAM_SF_ANY, "{wal_minimize_boot_current::return err code [%u]!}\r\n", ret);
1542 return ret;
1543 }
1544
1545 return HI_SUCCESS;
1546 }
1547