• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 *)&params, 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(&params, 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(&params);
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 *)&params;
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