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 头文件包含
21 **************************************************************************** */
22 #include "oal_ext_if.h"
23 #include "oam_ext_if.h"
24 #include "hmac_ext_if.h"
25 #include "wal_main.h"
26 #include "wal_hipriv.h"
27 #include "wal_ioctl.h"
28 #include "wal_event_msg.h"
29 #include "wal_11d.h"
30 #include "net_adpater.h"
31 #include "oal_util.h"
32 #include "oal_net.h"
33 #include "oal_kernel_file.h"
34 #include "plat_pm_wlan.h"
35 #include "wal_customize.h"
36 #include "wal_cfg80211_apt.h"
37 #if (_PRE_OS_VERSION_LITEOS == _PRE_OS_VERSION)
38 #include "hi_wifi_mfg_test_if.h"
39 #endif
40 #include "hi_wifi_api.h"
41 #if (_PRE_OS_VERSION_LITEOS == _PRE_OS_VERSION)
42 #include "lwip/netifapi.h"
43 #endif
44 #include "plat_firmware.h"
45
46 #ifdef __cplusplus
47 #if __cplusplus
48 extern "C" {
49 #endif
50 #endif
51
52 #define hi_at_printf dprintf
53
54 /* ****************************************************************************
55 2 全局变量定义
56 **************************************************************************** */
57 static hi_bool g_under_ps = HI_FALSE; /* 是否处于低功耗状态 */
58 static hi_u32 g_under_mfg = HI_FALSE; /* 是否处于产测状态 */
59
60 #if (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION)
61 static oal_proc_dir_entry_stru *g_proc_entry = HI_NULL;
62 struct kobject *g_gp_sys_kobject = HI_NULL;
63 #ifdef _PRE_CONFIG_CONN_HISI_SYSFS_SUPPORT
64 static hi_ssize_t wal_hipriv_sys_write(oal_device_stru *dev, oal_device_attribute_stru *attr, const char *buf,
65 hi_size_t count);
66 static hi_ssize_t wal_hipriv_sys_read(oal_device_stru *dev, oal_device_attribute_stru *attr, char *buf);
67 static DEVICE_ATTR(hipriv, (S_IRUGO | S_IWUSR), wal_hipriv_sys_read, wal_hipriv_sys_write);
68
69 static struct attribute *g_hipriv_sysfs_entries[] = {
70 &dev_attr_hipriv.attr,
71 HI_NULL
72 };
73 static struct attribute_group hipriv_attribute_group = {
74 .attrs = g_hipriv_sysfs_entries,
75 };
76 #endif
77 #endif
78 hi_u32 g_auto_rate_flag = 1; /* 自动速率调节默认打开 */
79
80 static const hi_char *g_pauc_bw_tbl[WLAN_BAND_ASSEMBLE_AUTO] = {
81 "20",
82 "rsv1",
83 "rsv2",
84 "rsv3",
85 "rsv4",
86 "rsv5",
87 "rsv6",
88 "rsv7",
89 "rsv8",
90 "rsv9",
91 "rsv10",
92 "rsv11",
93 "rsv12",
94 "rsv13",
95 "rsv14",
96 "rsv15",
97 "5",
98 "10"
99 };
100
101 static const hi_char *g_pauc_non_ht_rate_tbl[WLAN_LEGACY_RATE_VALUE_BUTT] = {
102 "1",
103 "2",
104 "5.5",
105 "11",
106 "rsv0",
107 "rsv1",
108 "rsv2",
109 "rsv3",
110 "48",
111 "24",
112 "12",
113 "6",
114 "54",
115 "36",
116 "18",
117 "9"
118 };
119
120 #ifdef _PRE_WLAN_FEATURE_HIPRIV
121 static const wal_ioctl_alg_cfg_stru g_ast_alg_cfg_map[] = {
122 {"sch_vi_ctrl_ena", MAC_ALG_CFG_SCHEDULE_VI_CTRL_ENA, {0}},
123 {"sch_bebk_minbw_ena", MAC_ALG_CFG_SCHEDULE_BEBK_MIN_BW_ENA, {0}},
124 {"sch_mvap_sch_ena", MAC_ALG_CFG_SCHEDULE_MVAP_SCH_ENA, {0}},
125 {"sch_vi_sch_ms", MAC_ALG_CFG_SCHEDULE_VI_SCH_LIMIT, {0}},
126 {"sch_vo_sch_ms", MAC_ALG_CFG_SCHEDULE_VO_SCH_LIMIT, {0}},
127 {"sch_vi_drop_ms", MAC_ALG_CFG_SCHEDULE_VI_DROP_LIMIT, {0}},
128 {"sch_vi_ctrl_ms", MAC_ALG_CFG_SCHEDULE_VI_CTRL_MS, {0}},
129 {"sch_vi_life_ms", MAC_ALG_CFG_SCHEDULE_VI_MSDU_LIFE_MS, {0}},
130 {"sch_vo_life_ms", MAC_ALG_CFG_SCHEDULE_VO_MSDU_LIFE_MS, {0}},
131 {"sch_be_life_ms", MAC_ALG_CFG_SCHEDULE_BE_MSDU_LIFE_MS, {0}},
132 {"sch_bk_life_ms", MAC_ALG_CFG_SCHEDULE_BK_MSDU_LIFE_MS, {0}},
133 {"sch_vi_low_delay", MAC_ALG_CFG_SCHEDULE_VI_LOW_DELAY_MS, {0}},
134 {"sch_vi_high_delay", MAC_ALG_CFG_SCHEDULE_VI_HIGH_DELAY_MS, {0}},
135 {"sch_cycle_ms", MAC_ALG_CFG_SCHEDULE_SCH_CYCLE_MS, {0}},
136 {"sch_ctrl_cycle_ms", MAC_ALG_CFG_SCHEDULE_TRAFFIC_CTRL_CYCLE, {0}},
137 {"sch_cir_nvip_kbps", MAC_ALG_CFG_SCHEDULE_CIR_NVIP_KBPS, {0}},
138 {"sch_cir_nvip_be", MAC_ALG_CFG_SCHEDULE_CIR_NVIP_KBPS_BE, {0}},
139 {"sch_cir_nvip_bk", MAC_ALG_CFG_SCHEDULE_CIR_NVIP_KBPS_BK, {0}},
140 {"sch_cir_vip_kbps", MAC_ALG_CFG_SCHEDULE_CIR_VIP_KBPS, {0}},
141 {"sch_cir_vip_be", MAC_ALG_CFG_SCHEDULE_CIR_VIP_KBPS_BE, {0}},
142 {"sch_cir_vip_bk", MAC_ALG_CFG_SCHEDULE_CIR_VIP_KBPS_BK, {0}},
143 {"sch_cir_vap_kbps", MAC_ALG_CFG_SCHEDULE_CIR_VAP_KBPS, {0}},
144 {"sch_sm_delay_ms", MAC_ALG_CFG_SCHEDULE_SM_TRAIN_DELAY, {0}},
145 {"sch_drop_pkt_limit", MAC_ALG_CFG_VIDEO_DROP_PKT_LIMIT, {0}},
146 {"sch_flowctl_ena", MAC_ALG_CFG_FLOWCTRL_ENABLE_FLAG, {0}},
147 {"sch_log_start", MAC_ALG_CFG_SCHEDULE_LOG_START, {0}},
148 {"sch_log_end", MAC_ALG_CFG_SCHEDULE_LOG_END, {0}},
149 {"sch_vap_prio", MAC_ALG_CFG_SCHEDULE_VAP_SCH_PRIO, {0}},
150 /* 开启或关闭速率自适应算法: sh hipriv.sh "vap0 alg_cfg ar_enable [1|0]" */
151 {"ar_enable", MAC_ALG_CFG_AUTORATE_ENABLE, {0}},
152 /* 开启或关闭使用最低速率: sh hipriv.sh "vap0 alg_cfg ar_use_lowest [1|0]" */
153 {"ar_use_lowest", MAC_ALG_CFG_AUTORATE_USE_LOWEST_RATE, {0}},
154 /* 设置短期统计的包数目:sh hipriv.sh "vap0 alg_cfg ar_short_num [包数目]" */
155 {"ar_short_num", MAC_ALG_CFG_AUTORATE_SHORT_STAT_NUM, {0}},
156 /* 设置短期统计的包位移值:sh hipriv.sh "vap0 alg_cfg ar_short_shift [位移值]" */
157 {"ar_short_shift", MAC_ALG_CFG_AUTORATE_SHORT_STAT_SHIFT, {0}},
158 /* 设置长期统计的包数目:sh hipriv.sh "vap0 alg_cfg ar_long_num [包数目]" */
159 {"ar_long_num", MAC_ALG_CFG_AUTORATE_LONG_STAT_NUM, {0}},
160 /* 设置长期统计的包位移值:sh hipriv.sh "vap0 alg_cfg ar_long_shift [位移值]" */
161 {"ar_long_shift", MAC_ALG_CFG_AUTORATE_LONG_STAT_SHIFT, {0}},
162 /* 设置最小探测包间隔:sh hipriv.sh "vap0 alg_cfg ar_min_probe_no [包数目]" */
163 {"ar_min_probe_no", MAC_ALG_CFG_AUTORATE_MIN_PROBE_INTVL_PKTNUM, {0}},
164 /* 设置最大探测包间隔:sh hipriv.sh "vap0 alg_cfg ar_max_probe_no [包数目]" */
165 {"ar_max_probe_no", MAC_ALG_CFG_AUTORATE_MAX_PROBE_INTVL_PKTNUM, {0}},
166 /* 设置探测间隔保持次数:sh hipriv.sh "vap0 alg_cfg ar_keep_times [次数]" */
167 {"ar_keep_times", MAC_ALG_CFG_AUTORATE_PROBE_INTVL_KEEP_TIMES, {0}},
168 /* 设置goodput突变门限(千分比,如300):sh hipriv.sh "vap0 alg_cfg ar_delta_ratio [千分比]" */
169 {"ar_delta_ratio", MAC_ALG_CFG_AUTORATE_DELTA_GOODPUT_RATIO, {0}},
170 /* 设置vi的per门限(千分比,如300):sh hipriv.sh "vap0 alg_cfg ar_vi_per_limit [千分比]" */
171 {"ar_vi_per_limit", MAC_ALG_CFG_AUTORATE_VI_PROBE_PER_LIMIT, {0}},
172 /* 设置vo的per门限(千分比,如300):sh hipriv.sh "vap0 alg_cfg ar_vo_per_limit [千分比]" */
173 {"ar_vo_per_limit", MAC_ALG_CFG_AUTORATE_VO_PROBE_PER_LIMIT, {0}},
174 /* 设置ampdu的durattion值:sh hipriv.sh "vap0 alg_cfg ar_ampdu_time [时间值]" */
175 {"ar_ampdu_time", MAC_ALG_CFG_AUTORATE_AMPDU_DURATION, {0}},
176 /* 设置mcs0的传输失败门限:sh hipriv.sh "vap0 alg_cfg ar_cont_loss_num [包数目]" */
177 {"ar_cont_loss_num", MAC_ALG_CFG_AUTORATE_MCS0_CONT_LOSS_NUM, {0}},
178 /* 设置升回11b的rssi门限:sh hipriv.sh "vap0 alg_cfg ar_11b_diff_rssi [数值]" */
179 {"ar_11b_diff_rssi", MAC_ALG_CFG_AUTORATE_UP_PROTOCOL_DIFF_RSSI, {0}},
180 /* 设置rts模式:sh hipriv.sh "vap0 alg_cfg ar_rts_mode [0(都不开)|1(都开)|2(rate[0]动态RTS, rate[1..3]
181 都开RTS)|3(rate[0]不开RTS, rate[1..3]都开RTS)]" */
182 {"ar_rts_mode", MAC_ALG_CFG_AUTORATE_RTS_MODE, {0}},
183 /* 设置Legacy首包错误率门限:sh hipriv.sh "vap0 alg_cfg ar_legacy_loss [数值]" */
184 {"ar_legacy_loss", MAC_ALG_CFG_AUTORATE_LEGACY_1ST_LOSS_RATIO_TH, {0}},
185 /* 设置Legacy首包错误率门限:sh hipriv.sh "vap0 alg_cfg ar_ht_vht_loss [数值]" */
186 {"ar_ht_vht_loss", MAC_ALG_CFG_AUTORATE_HT_VHT_1ST_LOSS_RATIO_TH, {0}},
187 /* 开始速率统计日志:sh hipriv.sh "vap0 alg_cfg ar_stat_log_do [mac地址] [业务类别] [包数目]"
188 如: sh hipriv.sh "vap0 alg_cfg ar_stat_log_do 06:31:04:E3:81:02 1 1000" */
189 {"ar_stat_log_do", MAC_ALG_CFG_AUTORATE_STAT_LOG_START, {0}},
190 /* 开始速率选择日志:sh hipriv.sh "vap0 alg_cfg ar_sel_log_do [mac地址] [业务类别] [包数目]"
191 如: sh hipriv.sh "vap0 alg_cfg ar_sel_log_do 06:31:04:E3:81:02 1 200" */
192 {"ar_sel_log_do", MAC_ALG_CFG_AUTORATE_SELECTION_LOG_START, {0}},
193 /* 开始固定速率日志:sh hipriv.sh "vap0 alg_cfg ar_fix_log_do [mac地址] [tidno] [per门限]"
194 如: sh hipriv.sh "vap0 alg_cfg ar_sel_log_do 06:31:04:E3:81:02 1 200" */
195 {"ar_fix_log_do", MAC_ALG_CFG_AUTORATE_FIX_RATE_LOG_START, {0}},
196 /* 开始聚合自适应日志:sh hipriv.sh "vap0 alg_cfg ar_fix_log_do [mac地址] [tidno]"
197 如: sh hipriv.sh "vap0 alg_cfg ar_sel_log_do 06:31:04:E3:81:02 1 " */
198 {"ar_aggr_log_do", MAC_ALG_CFG_AUTORATE_AGGR_STAT_LOG_START, {0}},
199 /* 打印速率统计日志:sh hipriv.sh "vap0 alg_cfg ar_st_log_out 06:31:04:E3:81:02" */
200 {"ar_st_log_out", MAC_ALG_CFG_AUTORATE_STAT_LOG_WRITE, {0}},
201 /* 打印速率选择日志:sh hipriv.sh "vap0 alg_cfg ar_sel_log_out 06:31:04:E3:81:02" */
202 {"ar_sel_log_out", MAC_ALG_CFG_AUTORATE_SELECTION_LOG_WRITE, {0}},
203 /* 打印固定速率日志:sh hipriv.sh "vap0 alg_cfg ar_fix_log_out 06:31:04:E3:81:02" */
204 {"ar_fix_log_out", MAC_ALG_CFG_AUTORATE_FIX_RATE_LOG_WRITE, {0}},
205 /* 打印固定速率日志:sh hipriv.sh "vap0 alg_cfg ar_fix_log_out 06:31:04:E3:81:02" */
206 {"ar_aggr_log_out", MAC_ALG_CFG_AUTORATE_AGGR_STAT_LOG_WRITE, {0}},
207 /* 打印速率集合:sh hipriv.sh "vap0 alg_cfg ar_disp_rateset 06:31:04:E3:81:02" */
208 {"ar_disp_rateset", MAC_ALG_CFG_AUTORATE_DISPLAY_RATE_SET, {0}},
209 /* 配置固定速率:sh hipriv.sh "vap0 alg_cfg ar_cfg_fix_rate 06:31:04:E3:81:02 0" */
210 {"ar_cfg_fix_rate", MAC_ALG_CFG_AUTORATE_CONFIG_FIX_RATE, {0}},
211 /* 打印接收速率集合:sh hipriv.sh "vap0 alg_cfg ar_disp_rx_rate 06:31:04:E3:81:02" */
212 {"ar_disp_rx_rate", MAC_ALG_CFG_AUTORATE_DISPLAY_RX_RATE, {0}},
213 /* 开启或关闭速率自适应日志: sh hipriv.sh "vap0 alg_cfg ar_log_enable [1|0]" */
214 {"ar_log_enable", MAC_ALG_CFG_AUTORATE_LOG_ENABLE, {0}},
215 /* 设置最大的VO速率: sh hipriv.sh "vap0 alg_cfg ar_max_vo_rate [速率值]" */
216 {"ar_max_vo_rate", MAC_ALG_CFG_AUTORATE_VO_RATE_LIMIT, {0}},
217 /* 设置深衰弱的per门限值: sh hipriv.sh "vap0 alg_cfg ar_fading_per_th [per门限值(千分数)]" */
218 {"ar_fading_per_th", MAC_ALG_CFG_AUTORATE_JUDGE_FADING_PER_TH, {0}},
219 /* 设置聚合自适应开关: sh hipriv.sh "vap0 alg_cfg ar_aggr_opt [1|0]" */
220 {"ar_aggr_opt", MAC_ALG_CFG_AUTORATE_AGGR_OPT, {0}},
221 /* 设置聚合自适应探测间隔: sh hipriv.sh "vap0 alg_cfg ar_aggr_pb_intvl [探测间隔]" */
222 {"ar_aggr_pb_intvl", MAC_ALG_CFG_AUTORATE_AGGR_PROBE_INTVL_NUM, {0}},
223 /* 设置调试用的VI状态: sh hipriv.sh "vap0 alg_cfg ar_dbg_vi_status [0/1/2]" */
224 {"ar_dbg_vi_status", MAC_ALG_CFG_AUTORATE_DBG_VI_STATUS, {0}},
225 /* 聚合自适应log开关: sh hipriv.sh "vap0 alg_cfg ar_dbg_aggr_log [0/1]" */
226 {"ar_dbg_aggr_log", MAC_ALG_CFG_AUTORATE_DBG_AGGR_LOG, {0}},
227 /* 最优速率变化时不进行聚合探测的报文数: sh hipriv.sh "vap0 alg_cfg ar_aggr_pck_num [报文数]" */
228 {"ar_aggr_pck_num", MAC_ALG_CFG_AUTORATE_AGGR_NON_PROBE_PCK_NUM, {0}},
229 /* 最小聚合时间索引: sh hipriv.sh "vap0 alg_cfg ar_aggr_min_idx [索引值]" */
230 {"ar_min_aggr_idx", MAC_ALG_CFG_AUTORATE_AGGR_MIN_AGGR_TIME_IDX, {0}},
231 /* 设置最大聚合数目: sh hipriv.sh "vap0 alg_cfg ar_max_aggr_num [聚合数目]" */
232 {"ar_max_aggr_num", MAC_ALG_CFG_AUTORATE_MAX_AGGR_NUM, {0}},
233 /* 设置最低阶MCS限制聚合为1的PER门限: sh hipriv.sh "vap0 alg_cfg ar_1mpdu_per_th [per门限值(千分数)]" */
234 {"ar_1mpdu_per_th", MAC_ALG_CFG_AUTORATE_LIMIT_1MPDU_PER_TH, {0}},
235
236 /* 开启或关闭共存探测机制: sh hipriv.sh "vap0 alg_cfg ar_btcoxe_probe [1|0]" */
237 {"ar_btcoxe_probe", MAC_ALG_CFG_AUTORATE_BTCOEX_PROBE_ENABLE, {0}},
238 /* 开启或关闭共存聚合机制: sh hipriv.sh "vap0 alg_cfg ar_btcoxe_aggr [1|0]" */
239 {"ar_btcoxe_aggr", MAC_ALG_CFG_AUTORATE_BTCOEX_AGGR_ENABLE, {0}},
240 /* 设置共存统计时间间隔参数: sh hipriv.sh "vap0 alg_cfg ar_coxe_intvl [统计周期ms]" */
241 {"ar_coxe_intvl", MAC_ALG_CFG_AUTORATE_COEX_STAT_INTVL, {0}},
242 /* 设置共存abort低比例门限参数: sh hipriv.sh "vap0 alg_cfg ar_coxe_low_th [千分数]" */
243 {"ar_coxe_low_th", MAC_ALG_CFG_AUTORATE_COEX_LOW_ABORT_TH, {0}},
244 /* 设置共存abort高比例门限参数: sh hipriv.sh "vap0 alg_cfg ar_coxe_high_th [千分数]" */
245 {"ar_coxe_high_th", MAC_ALG_CFG_AUTORATE_COEX_HIGH_ABORT_TH, {0}},
246 /* 设置共存聚合数目为1的门限参数: sh hipriv.sh "vap0 alg_cfg ar_coxe_agrr_th [千分数]" */
247 {"ar_coxe_agrr_th", MAC_ALG_CFG_AUTORATE_COEX_AGRR_NUM_ONE_TH, {0}},
248
249 /* 动态带宽特性使能开关: sh hipriv.sh "vap0 alg_cfg ar_dyn_bw_en [0/1]" */
250 {"ar_dyn_bw_en", MAC_ALG_CFG_AUTORATE_DYNAMIC_BW_ENABLE, {0}},
251 /* 吞吐量波动优化开关: sh hipriv.sh "vap0 alg_cfg ar_thpt_wave_opt [0/1]" */
252 {"ar_thpt_wave_opt", MAC_ALG_CFG_AUTORATE_THRPT_WAVE_OPT, {0}},
253 /* 设置判断吞吐量波动的goodput差异比例门限(千分数): sh hipriv.sh "vap0 alg_cfg ar_gdpt_diff_th [goodput相差
254 比例门限(千分数)]" */
255 {"ar_gdpt_diff_th", MAC_ALG_CFG_AUTORATE_GOODPUT_DIFF_TH, {0}},
256 /* 设置判断吞吐量波动的PER变差的门限(千分数): sh hipriv.sh "vap0 alg_cfg ar_per_worse_th [PER变差门限(千分数)]" */
257 {"ar_per_worse_th", MAC_ALG_CFG_AUTORATE_PER_WORSE_TH, {0}},
258 /* 设置发RTS收到CTS但发DATA都不回BA的发送完成中断次数门限: sh hipriv.sh "vap0 alg_cfg ar_cts_no_ba_num [次数]" */
259 {"ar_cts_no_ack_num", MAC_ALG_CFG_AUTORATE_RX_CTS_NO_BA_NUM, {0}},
260 /* 设置是否支持voice业务聚合: sh hipriv.sh "vap0 alg_cfg ar_vo_aggr [0/1]" */
261 {"ar_vo_aggr", MAL_ALG_CFG_AUTORATE_VOICE_AGGR, {0}},
262 /* 设置快速平滑统计的平滑因子偏移量: sh hipriv.sh "vap0 alg_cfg ar_fast_smth_shft [偏移量]"
263 (取255表示取消快速平滑) */
264 {"ar_fast_smth_shft", MAC_ALG_CFG_AUTORATE_FAST_SMOOTH_SHIFT, {0}},
265 /* 设置快速平滑统计的最小聚合数目门限: sh hipriv.sh "vap0 alg_cfg ar_fast_smth_aggr_num [最小聚合数目]" */
266 {"ar_fast_smth_aggr_num", MAC_ALG_CFG_AUTORATE_FAST_SMOOTH_AGGR_NUM, {0}},
267 /* 设置short GI惩罚的PER门限值(千分数): sh hipriv.sh "vap0 alg_cfg ar_sgi_punish_per [PER门限值(千分数)]" */
268 {"ar_sgi_punish_per", MAC_ALG_CFG_AUTORATE_SGI_PUNISH_PER, {0}},
269 /* 设置short GI惩罚的等待探测数目: sh hipriv.sh "vap0 alg_cfg ar_sgi_punish_num [等待探测数目]" */
270 {"ar_sgi_punish_num", MAC_ALG_CFG_AUTORATE_SGI_PUNISH_NUM, {0}},
271 /* 设置VI业务保持速率的RSSI阈值: sh hipriv.sh "vap0 alg_cfg ar_vi_hold_rate_rssi_th [RSSI阈值]" */
272 {"ar_vi_hold_rate_rssi_th", MAC_ALG_CFG_AUTORATE_VI_HOLD_RATE_RSSI_TH, {0}},
273 /* 设置VI业务的保持速率: sh hipriv.sh "vap0 alg_cfg ar_vi_holding_rate [保持速率]" */
274 {"ar_vi_holding_rate", MAC_ALG_CFG_AUTORATE_VI_HOLDING_RATE, {0}},
275 /* 弱干扰免疫中non-direct使能: sh hipriv.sh "vap0 alg_cfg anti_inf_imm_en 0|1" */
276 {"anti_inf_imm_en", MAC_ALG_CFG_ANTI_INTF_IMM_ENABLE, {0}},
277 /* 弱干扰免疫中dynamic unlock使能: sh hipriv.sh "vap0 alg_cfg anti_inf_unlock_en 0|1" */
278 {"anti_inf_unlock_en", MAC_ALG_CFG_ANTI_INTF_UNLOCK_ENABLE, {0}},
279 /* 弱干扰免疫中rssi统计周期: sh hipriv.sh "vap0 anti_inf_stat_time [time]" */
280 {"anti_inf_stat_time", MAC_ALG_CFG_ANTI_INTF_RSSI_STAT_CYCLE, {0}},
281 /* 弱干扰免疫中unlock关闭周期: sh hipriv.sh "vap0 anti_inf_off_time [time]" */
282 {"anti_inf_off_time", MAC_ALG_CFG_ANTI_INTF_UNLOCK_CYCLE, {0}},
283 /* 弱干扰免疫中unlock关闭持续时间: sh hipriv.sh "vap0 anti_inf_off_dur [time]" */
284 {"anti_inf_off_dur", MAC_ALG_CFG_ANTI_INTF_UNLOCK_DUR_TIME, {0}},
285 /* 抗干扰nav免疫使能: sh hipriv.sh "vap0 alg_cfg anti_inf_nav_en 0|1" */
286 {"anti_inf_nav_en", MAC_ALG_CFG_ANTI_INTF_NAV_IMM_ENABLE, {0}},
287 /* 弱干扰免疫goodput下降门限: sh hipriv.sh "vap0 alg_cfg anti_inf_gd_th [num]" */
288 {"anti_inf_gd_th", MAC_ALG_CFG_ANTI_INTF_GOODPUT_FALL_TH, {0}},
289 /* 弱干扰免疫探测保持最大周期数: sh hipriv.sh "vap0 alg_cfg anti_inf_keep_max [num]" */
290 {"anti_inf_keep_max", MAC_ALG_CFG_ANTI_INTF_KEEP_CYC_MAX_NUM, {0}},
291 /* 弱干扰免疫探测保持最大周期数: sh hipriv.sh "vap0 alg_cfg anti_inf_keep_min [num]" */
292 {"anti_inf_keep_min", MAC_ALG_CFG_ANTI_INTF_KEEP_CYC_MIN_NUM, {0}},
293 /* 弱干扰免疫是否使能tx time探测: sh hipriv.sh "vap0 anti_inf_tx_pro_en 0|1" */
294 {"anti_inf_per_pro_en", MAC_ALG_CFG_ANTI_INTF_PER_PROBE_EN, {0}},
295 /* tx time下降门限: sh hipriv.sh "vap0 alg_cfg anti_inf_txtime_th [val]" */
296 {"anti_inf_txtime_th", MAC_ALG_CFG_ANTI_INTF_TX_TIME_FALL_TH, {0}},
297 /* per下降门限: sh hipriv.sh "vap0 alg_cfg anti_inf_per_th [val]" */
298 {"anti_inf_per_th", MAC_ALG_CFG_ANTI_INTF_PER_FALL_TH, {0}},
299 /* goodput抖动门限: sh hipriv.sh "vap0 alg_cfg anti_inf_gd_jitter_th [val]" */
300 {"anti_inf_gd_jitter_th", MAC_ALG_CFG_ANTI_INTF_GOODPUT_JITTER_TH, {0}},
301 /* 弱干扰免疫debug的打印信息: sh hipriv.sh "vap0 alg_cfg anti_inf_debug_mode 0|1|2" */
302 {"anti_inf_debug_mode", MAC_ALG_CFG_ANTI_INTF_DEBUG_MODE, {0}},
303
304 /* 同频干扰检测周期: sh hipriv.sh "vap0 alg_cfg edca_opt_co_ch_time [time]" */
305 {"edca_opt_co_ch_time", MAC_ALG_CFG_EDCA_OPT_CO_CH_DET_CYCLE, {0}},
306 /* ap模式下edca优化使能模式: sh hipriv.sh "vap0 alg_cfg edca_opt_en_ap 0|1|2" */
307 {"edca_opt_en_ap", MAC_ALG_CFG_EDCA_OPT_AP_EN_MODE, {0}},
308 /* sta模式下edca优化使能模式: sh hipriv.sh "vap0 alg_cfg edca_opt_en_sta 0|1" */
309 {"edca_opt_en_sta", MAC_ALG_CFG_EDCA_OPT_STA_EN, {0}},
310 /* sta模式下edca优化的weighting系数: sh hipriv.sh "vap0 alg_cfg edca_opt_sta_weight 0~3" */
311 {"edca_opt_sta_weight", MAC_ALG_CFG_EDCA_OPT_STA_WEIGHT, {0}},
312 /* non-direct包占空比门限 sh hipriv.sh "vap0 alg_cfg edca_opt_nondir_th [val]" */
313 {"edca_opt_nondir_th", MAC_ALG_CFG_EDCA_OPT_NONDIR_TH, {0}},
314 /* ap模式下UDP业务对应包判别门限 sh hipriv.sh "vap0 alg_cfg edca_opt_th_udp [val]" */
315 {"edca_opt_th_udp", MAC_ALG_CFG_EDCA_OPT_TH_UDP, {0}},
316 /* ap模式下tcP业务对应包判别门限 sh hipriv.sh "vap0 alg_cfg edca_opt_th_tcp [val]" */
317 {"edca_opt_th_tcp", MAC_ALG_CFG_EDCA_OPT_TH_TCP, {0}},
318 /* 是否打印相关信息,仅用于本地版本调试 */
319 {"edca_opt_debug_mode", MAC_ALG_CFG_EDCA_OPT_DEBUG_MODE, {0}},
320
321 /* CCA优化功能使能: sh hipriv.sh "vap0 alg_cfg cca_opt_alg_en_mode 0|1" */
322 {"cca_opt_alg_en_mode", MAC_ALG_CFG_CCA_OPT_ALG_EN_MODE, {0}},
323 /* CCA优化DEBUG模式启动: sh hipriv.sh "vap0 alg_cfg cca_opt_debug_mode 0|1" */
324 {"cca_opt_debug_mode", MAC_ALG_CFG_CCA_OPT_DEBUG_MODE, {0}},
325 /* CCA优化T1计时周期:sh hipriv.sh "vap0 alg_cfg cca_opt_set_t1_counter_time [time]" */
326 {"cca_opt_set_t1_counter_time", MAC_ALG_CFG_CCA_OPT_SET_T1_COUNTER_TIME, {0}},
327 { "tpc_mode", MAC_ALG_CFG_TPC_MODE, { 0 } }, /* 设置TPC工作模式 */
328 { "tpc_dbg", MAC_ALG_CFG_TPC_DEBUG, { 0 } }, /* 设置TPC的debug开关 */
329 /* 设置TPC功率等级(0,1,2,3), 在固定功率模式下使用 */
330 {"tpc_pow_lvl", MAC_ALG_CFG_TPC_POWER_LEVEL, {0}},
331 /* 设置TPC的log开关:sh hipriv.sh "vap0 alg_cfg tpc_log 1 */
332 {"tpc_log", MAC_ALG_CFG_TPC_LOG, {0}},
333 /* 开始功率统计日志:sh hipriv.sh "vap0 alg_tpc_log tpc_stat_log_do [mac地址] [业务类别] [包数目]"
334 如: sh hipriv.sh "vap0 alg_tpc_log tpc_stat_log_do 06:31:04:E3:81:02 1 1000" */
335 {"tpc_stat_log_do", MAC_ALG_CFG_TPC_STAT_LOG_START, {0}},
336 /* 打印功率统计日志:sh hipriv.sh "vap0 alg_tpc_log tpc_stat_log_out 06:31:04:E3:81:02" */
337 {"tpc_stat_log_out", MAC_ALG_CFG_TPC_STAT_LOG_WRITE, {0}},
338 /* 开始每包统计日志:sh hipriv.sh "vap0 alg_tpc_log tpc_pkt_log_do [mac地址] [业务类别] [包数目]"
339 如: sh hipriv.sh "vap0 alg_tpc_log tpc_pkt_log_do 06:31:04:E3:81:02 1 1000" */
340 {"tpc_pkt_log_do", MAC_ALG_CFG_TPC_PER_PKT_LOG_START, {0}},
341 /* 获取特殊帧功率:sh hipriv.sh "vap0 alg_tpc_log tpc_get_frame_pow beacon_pow" */
342 {"tpc_get_frame_pow", MAC_ALG_CFG_TPC_GET_FRAME_POW, {0}},
343 { "tpc_mag_frm_pow_lvl", MAC_ALG_CFG_TPC_MANAGEMENT_MCAST_FRM_POWER_LEVEL, { 0 } }, /* TPC管理帧和多播帧功率等级 */
344 { "tpc_ctl_frm_pow_lvl", MAC_ALG_CFG_TPC_CONTROL_FRM_POWER_LEVEL, { 0 } }, /* TPC控制帧功率等级 */
345 { "tpc_reset_stat", MAC_ALG_CFG_TPC_RESET_STAT, { 0 } }, /* 释放统计内存 */
346 { "tpc_reset_pkt", MAC_ALG_CFG_TPC_RESET_PKT, { 0 } }, /* 释放每包内存 */
347 { "tpc_over_temp_th", MAC_ALG_CFG_TPC_OVER_TMP_TH, { 0 } }, /* TPC过温门限 */
348 { "tpc_dpd_enable_rate", MAC_ALG_CFG_TPC_DPD_ENABLE_RATE, { 0 } }, /* 配置DPD生效的速率INDEX */
349 { "tpc_target_rate_11b", MAC_ALG_CFG_TPC_TARGET_RATE_11B, { 0 } }, /* 11b目标速率设置 */
350 { "tpc_target_rate_11ag", MAC_ALG_CFG_TPC_TARGET_RATE_11AG, { 0 } }, /* 11ag目标速率设置 */
351 { "tpc_target_rate_11n20", MAC_ALG_CFG_TPC_TARGET_RATE_HT20, { 0 } }, /* 11n20目标速率设置 */
352 { "tpc_no_margin_pow", MAC_ALG_CFG_TPC_NO_MARGIN_POW, { 0 } }, /* 51功率没有余量配置 */
353 { "tpc_power_amend", MAC_ALG_CFG_TPC_POWER_AMEND, { 0 } }, /* tx power在带内不平坦,tpc进行功率修正,默认为0 */
354 {HI_NULL,0,{0}}
355 };
356 #endif
357
358 /* hipriv 参数解析结构体定义 */
359 typedef struct {
360 hi_char cmd_param1[WAL_HIPRIV_CMD_NAME_MAX_LEN]; /* 命令第一个参数字符串 */
361 hi_char cmd_param2[WAL_HIPRIV_CMD_NAME_MAX_LEN]; /* 命令第二个参数字符串 */
362 } wal_hipriv_two_param_stru;
363
364 typedef struct {
365 hi_char cmd_param1[WAL_HIPRIV_CMD_NAME_MAX_LEN]; /* 命令第一个参数字符串 */
366 hi_char cmd_param2[WAL_HIPRIV_CMD_NAME_MAX_LEN]; /* 命令第二个参数字符串 */
367 hi_char cmd_param3[WAL_HIPRIV_CMD_NAME_MAX_LEN]; /* 命令第三个参数字符串 */
368 } wal_hipriv_three_param_stru;
369
370 typedef struct {
371 hi_char cmd_param1[WAL_HIPRIV_CMD_NAME_MAX_LEN]; /* 命令第一个参数字符串 */
372 hi_char cmd_param2[WAL_HIPRIV_CMD_NAME_MAX_LEN]; /* 命令第二个参数字符串 */
373 hi_char cmd_param3[WAL_HIPRIV_CMD_NAME_MAX_LEN]; /* 命令第三个参数字符串 */
374 hi_char cmd_param4[WAL_HIPRIV_CMD_NAME_MAX_LEN]; /* 命令第三个参数字符串 */
375 } wal_hipriv_four_param_stru;
376 /* ****************************************************************************
377 3 函数实现
378 **************************************************************************** */
379 /* 返回协议低功耗状态 */
is_under_ps()380 hi_bool is_under_ps()
381 {
382 return g_under_ps;
383 }
384
set_under_ps(hi_bool under_ps)385 hi_void set_under_ps(hi_bool under_ps)
386 {
387 if (g_under_mfg) {
388 g_under_ps = 0; /* 产测模式下,不处于低功耗模式 */
389 } else {
390 g_under_ps = under_ps;
391 }
392 }
393
set_under_mfg(hi_u32 under_mfg)394 hi_void set_under_mfg(hi_u32 under_mfg)
395 {
396 g_under_mfg = under_mfg;
397 }
398 #ifdef _PRE_WLAN_FEATURE_HIPRIV
399 /* ****************************************************************************
400 功能描述 : hipriv命令2个参数解析函数
401 输入参数 : pc_param, 配置命令的参数字符串
402 输出参数 : out_param, 解析出的2个配置参数
403 **************************************************************************** */
wal_hipriv_two_param_parse(hi_char * pc_param,wal_hipriv_two_param_stru * out_param)404 static hi_u32 wal_hipriv_two_param_parse(hi_char *pc_param, wal_hipriv_two_param_stru *out_param)
405 {
406 hi_u32 ret;
407 hi_u32 off_set = 0;
408 /* 获取第一个参数 */
409 ret = wal_get_cmd_one_arg(pc_param, out_param->cmd_param1, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
410 if (ret != HI_SUCCESS) {
411 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_two_param_parse::get first param failed!}");
412 return ret;
413 }
414 /* 偏移,取下一个参数 */
415 pc_param = pc_param + off_set;
416 /* 获取第二个参数 */
417 ret = wal_get_cmd_one_arg(pc_param, out_param->cmd_param2, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
418 if (ret != HI_SUCCESS) {
419 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_two_param_parse::get second param failed!}");
420 return ret;
421 }
422 return HI_SUCCESS;
423 }
424 #endif
425
426 #if defined(_PRE_WLAN_FEATURE_HIPRIV) || defined(_PRE_WLAN_FEATURE_SIGMA)
427 /* ****************************************************************************
428 功能描述 : hipriv命令3个参数解析函数
429 输入参数 : pc_param, 配置命令的参数字符串
430 输出参数 : out_param, 解析出的3个配置参数
431 **************************************************************************** */
wal_hipriv_three_param_parse(hi_char * pc_param,wal_hipriv_three_param_stru * out_param)432 static hi_u32 wal_hipriv_three_param_parse(hi_char *pc_param, wal_hipriv_three_param_stru *out_param)
433 {
434 hi_u32 ret;
435 hi_u32 off_set = 0;
436 /* 获取第一个参数 */
437 ret = wal_get_cmd_one_arg(pc_param, out_param->cmd_param1, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
438 if (ret != HI_SUCCESS) {
439 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_three_param_parse::get first param failed!}");
440 return ret;
441 }
442 /* 偏移,取下一个参数 */
443 pc_param = pc_param + off_set;
444 /* 获取第二个参数 */
445 ret = wal_get_cmd_one_arg(pc_param, out_param->cmd_param2, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
446 if (ret != HI_SUCCESS) {
447 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_three_param_parse::get second param failed!}");
448 return ret;
449 }
450 pc_param = pc_param + off_set;
451 /* 获取第三个参数 */
452 ret = wal_get_cmd_one_arg(pc_param, out_param->cmd_param3, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
453 if (ret != HI_SUCCESS) {
454 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_three_param_parse::get third param failed!}");
455 return ret;
456 }
457 return HI_SUCCESS;
458 }
459 #endif
460
461 #if defined(_PRE_WLAN_FEATURE_SIGMA) || defined(_PRE_WLAN_FEATURE_HIPRIV)
462 /* ****************************************************************************
463 功能描述 : hipriv命令4个参数解析函数
464 输入参数 : pc_param, 配置命令的参数字符串
465 输出参数 : out_param, 解析出的4个配置参数
466 **************************************************************************** */
wal_hipriv_four_param_parse(hi_char * pc_param,wal_hipriv_four_param_stru * out_param)467 static hi_u32 wal_hipriv_four_param_parse(hi_char *pc_param, wal_hipriv_four_param_stru *out_param)
468 {
469 hi_u32 ret;
470 hi_u32 off_set = 0;
471 /* 获取第一个参数 */
472 ret = wal_get_cmd_one_arg(pc_param, out_param->cmd_param1, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
473 if (ret != HI_SUCCESS) {
474 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_four_param_parse::get first param failed!}");
475 return ret;
476 }
477 /* 偏移,取下一个参数 */
478 pc_param = pc_param + off_set;
479 /* 获取第二个参数 */
480 ret = wal_get_cmd_one_arg(pc_param, out_param->cmd_param2, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
481 if (ret != HI_SUCCESS) {
482 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_four_param_parse::get second param failed!}");
483 return ret;
484 }
485 pc_param = pc_param + off_set;
486 /* 获取第三个参数 */
487 ret = wal_get_cmd_one_arg(pc_param, out_param->cmd_param3, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
488 if (ret != HI_SUCCESS) {
489 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_four_param_parse::get third param failed!}");
490 return ret;
491 }
492 pc_param = pc_param + off_set;
493 /* 获取第四个参数 */
494 ret = wal_get_cmd_one_arg(pc_param, out_param->cmd_param4, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
495 if (ret != HI_SUCCESS) {
496 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_four_param_parse::get fouth param failed!}");
497 return ret;
498 }
499 return HI_SUCCESS;
500 }
501 #endif
502
503 /* ************************* API接口 START ****************************** */
504 /* ****************************************************************************
505 功能描述 : 读取国家码
506 **************************************************************************** */
wal_hipriv_getcountry(oal_net_device_stru * netdev,hi_char * pc_param)507 hi_u32 wal_hipriv_getcountry(oal_net_device_stru *netdev, hi_char *pc_param)
508 {
509 wal_msg_query_stru query_msg;
510 hi_u32 ret;
511 wal_msg_stru *rsp_msg = HI_NULL;
512 wal_msg_rsp_stru *queue_rsp_msg = HI_NULL;
513
514 /* **************************************************************************
515 抛事件到wal层处理
516 ************************************************************************** */
517 query_msg.wid = WLAN_CFGID_COUNTRY;
518 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_QUERY, WAL_MSG_WID_LENGTH, (hi_u8 *)&query_msg, HI_TRUE, &rsp_msg);
519 if ((ret != HI_SUCCESS) || (rsp_msg == HI_NULL)) {
520 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_getcountry:: alloc_cfg_event failed!}");
521 return ret;
522 }
523 /* 处理返回消息 */
524 queue_rsp_msg = (wal_msg_rsp_stru *)(rsp_msg->auc_msg_data);
525 pc_param[0] = (hi_char)queue_rsp_msg->auc_value[0];
526 pc_param[1] = (hi_char)queue_rsp_msg->auc_value[1];
527 pc_param[2] = 0; /* 2: 第3位 */
528
529 oal_free(rsp_msg);
530 #if (_PRE_OS_VERSION_LITEOS == _PRE_OS_VERSION)
531 hi_at_printf("+CC:%c%c\r\n", pc_param[0], pc_param[1]);
532 hi_at_printf("OK\r\n");
533 #endif
534 return HI_SUCCESS;
535 }
536
537 /* ****************************************************************************
538 功能描述 : 设置驱动vap状态(UP/DOWN)
539 **************************************************************************** */
wal_hipriv_set_vap_state(oal_net_device_stru * netdev,hi_char * pc_param)540 hi_u32 wal_hipriv_set_vap_state(oal_net_device_stru *netdev, hi_char *pc_param)
541 {
542 hi_u32 ret = HI_FAIL;
543 hi_u32 state;
544
545 if (pc_param == HI_NULL) {
546 return HI_FAIL;
547 }
548
549 state = (hi_u32)oal_atoi(pc_param);
550 if (state == 0) {
551 ret = wal_netdev_stop(netdev);
552 } else if (state == 1) {
553 ret = wal_netdev_open(netdev);
554 } else {
555 oam_error_log1(0, 0, "wal_hipriv_set_vap_state en_netdev ERROR: %d\r\n", state);
556 return HI_FAIL;
557 }
558
559 if (ret != HI_SUCCESS) {
560 oam_error_log1(0, 0, "wal_hipriv_set_vap_state netdev start/stop fail![%d]\r\n", state);
561 return HI_FAIL;
562 }
563 oam_warning_log0(0, OAM_SF_ANY, "OK\r\n");
564 return HI_SUCCESS;
565 }
566
567 #ifdef _PRE_WLAN_FEATURE_MESH
568 /* ****************************************************************************
569 功能描述 : 读取Mesh节点信息
570 **************************************************************************** */
wal_hipriv_get_mesh_node_info(oal_net_device_stru * netdev,hi_char * pc_param)571 hi_u32 wal_hipriv_get_mesh_node_info(oal_net_device_stru *netdev, hi_char *pc_param)
572 {
573 hi_unref_param(pc_param);
574 wal_msg_query_stru query_msg;
575 hi_u32 ret;
576 wal_msg_stru *rsp_msg = HI_NULL;
577 wal_msg_rsp_stru *queue_rsp_msg = HI_NULL;
578 mac_cfg_mesh_nodeinfo_stru *mesh_node_info = HI_NULL;
579
580 /* **************************************************************************
581 抛事件到wal层处理
582 ************************************************************************** */
583 query_msg.wid = WLAN_CFGID_GET_MESH_NODE_INFO;
584 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_QUERY, WAL_MSG_WID_LENGTH, (hi_u8 *)&query_msg, HI_TRUE, &rsp_msg);
585 if ((ret != HI_SUCCESS) || (rsp_msg == HI_NULL)) {
586 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_get_mesh_node_info:: alloc_cfg_event failed!}");
587 return ret;
588 }
589 /* 处理返回消息 */
590 queue_rsp_msg = (wal_msg_rsp_stru *)(rsp_msg->auc_msg_data);
591 mesh_node_info = (mac_cfg_mesh_nodeinfo_stru *)queue_rsp_msg->auc_value;
592
593 #ifdef CUSTOM_AT_COMMAND
594 if (mesh_node_info->node_type == MAC_HISI_MESH_UNSPEC) {
595 hi_at_printf("+MeshNode Type:%d\r\n", mesh_node_info->node_type);
596 } else {
597 hi_at_printf("+MeshNode Type:%d\r\n", mesh_node_info->node_type);
598 hi_at_printf("+MeshNode Info:%d,%d,%d,%d,%d\r\n", mesh_node_info->user_num, mesh_node_info->chan,
599 mesh_node_info->privacy, mesh_node_info->priority, mesh_node_info->mesh_accept_sta);
600 }
601 #endif
602
603 oal_free(rsp_msg);
604
605 return HI_SUCCESS;
606 }
607 #endif
608
609 /* **************************** SIGMA 使用的调试命令 START *********************************** */
610 /* 下列命令使用需要开启SIGMA特性宏或者从DEBUG宏中移出 */
611 #if defined _PRE_WLAN_FEATURE_SIGMA
612 /* ****************************************************************************
613 功能描述 : 建立BA会话的调测命令
614 命令格式 : hipriv wlan0 addba_req xx:xx:xx:xx:xx:xx(mac地址) tidno buffsize timeout
615 **************************************************************************** */
wal_hipriv_addba_req(oal_net_device_stru * netdev,hi_char * pc_param)616 hi_u32 wal_hipriv_addba_req(oal_net_device_stru *netdev, hi_char *pc_param)
617 {
618 wal_msg_write_stru write_msg;
619 hi_u32 ret;
620 mac_cfg_addba_req_param_stru addba_req_param_info; /* 临时保存获取的addba req的信息 */
621 wal_hipriv_four_param_stru cmd_param;
622 hi_char* cmd_param1_ptr = HI_NULL;
623
624 /* 命令配置参数为4个 */
625 ret = wal_hipriv_four_param_parse(pc_param, &cmd_param);
626 if (ret != HI_SUCCESS) {
627 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_addba_req::parse param failed!}");
628 return ret;
629 }
630 cmd_param1_ptr = cmd_param.cmd_param1;
631 /* 规则6.6:禁止使用内存操作类危险函数 例外(1)对固定长度的数组进行初始化,或对固定长度的结构体进行内存初始化 */
632 memset_s(&addba_req_param_info, sizeof(mac_cfg_addba_req_param_stru), 0, sizeof(mac_cfg_addba_req_param_stru));
633 /* MAC地址 */
634 oal_strtoaddr(cmd_param1_ptr, addba_req_param_info.auc_mac_addr, WLAN_MAC_ADDR_LEN);
635 /* tid */
636 addba_req_param_info.tidno = (hi_u8)oal_atoi(cmd_param.cmd_param2);
637 if (addba_req_param_info.tidno >= WLAN_TID_MAX_NUM) {
638 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_addba_req::tidno[%d] of addba req is invalid!}",
639 addba_req_param_info.tidno);
640 return HI_ERR_CODE_INVALID_CONFIG;
641 }
642 /* BA POLICY 只支持立即响应,写死 */
643 addba_req_param_info.ba_policy = MAC_BA_POLICY_IMMEDIATE;
644 /* buffsize */
645 addba_req_param_info.us_buff_size = (hi_u16)oal_atoi(cmd_param.cmd_param3);
646 /* timeout时间 */
647 addba_req_param_info.us_timeout = (hi_u16)oal_atoi(cmd_param.cmd_param4);
648
649 /* **************************************************************************
650 抛事件到wal层处理
651 ************************************************************************** */
652 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_ADDBA_REQ, sizeof(mac_cfg_addba_req_param_stru));
653 /* 设置配置命令参数 */
654 if (memcpy_s(write_msg.auc_value, sizeof(mac_cfg_addba_req_param_stru), &addba_req_param_info,
655 sizeof(mac_cfg_addba_req_param_stru)) != EOK) {
656 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_addba_req::memcpy_s param failed!}");
657 return HI_FAIL;
658 }
659 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
660 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_addba_req_param_stru), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
661 if (oal_unlikely(ret != HI_SUCCESS)) {
662 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_addba_req::send event failed!}");
663 return ret;
664 }
665 return HI_SUCCESS;
666 }
667 #endif
668
669 /*****************************************************************************
670 功能描述 : 打印vap的所有参数信息
671 **************************************************************************** */
wal_hipriv_vap_info(oal_net_device_stru * netdev,hi_char * pc_param)672 hi_u32 wal_hipriv_vap_info(oal_net_device_stru *netdev, hi_char *pc_param)
673 {
674 wal_msg_write_stru write_msg;
675 hi_u32 ret;
676
677 if (*pc_param != '\0') {
678 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_vap_info::cmd len error}");
679 return HI_FAIL;
680 }
681 /* **************************************************************************
682 抛事件到wal层处理
683 ************************************************************************** */
684 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_VAP_INFO, sizeof(hi_u32));
685 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_u32),
686 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
687 if (oal_unlikely(ret != HI_SUCCESS)) {
688 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_vap_info::return err code [%u]!}", ret);
689 return ret;
690 }
691
692 return HI_SUCCESS;
693 }
694
695 /* ************************* SDV开发阶段 使用的调试命令 START ****************************** */
696 #ifdef _PRE_WLAN_FEATURE_HIPRIV
697 /* ****************************************************************************
698 功能描述 : 设置描述符参数配置命令 目前仅支持rate设置
699 **************************************************************************** */
wal_hipriv_set_tx_dscr_param(oal_net_device_stru * netdev,hi_char * pc_param)700 static hi_u32 wal_hipriv_set_tx_dscr_param(oal_net_device_stru *netdev, hi_char *pc_param)
701 {
702 wal_msg_write_stru write_msg;
703 mac_cfg_set_dscr_param_stru *set_dscr_param = HI_NULL;
704 mac_set_dscr_param_enum_uint8 index;
705 wal_hipriv_three_param_stru cmd_param;
706 /* 支持帧类型设置参数,参数需与mac_set_dscr_frame_type_enum 枚举中的顺序严格一致! */
707 const hi_char *pauc_dscr_type_name[MAC_SET_DSCR_TYPE_BUTT] = {
708 "ucast_data", "mcast_data", "bcast_data", "ucast_mgmt", "mbcast_mgmt"
709 };
710 /* 设置描述符的参数, 参数定义参考mac_set_dscr_enum 并与枚举中的顺序严格一致! */
711 const hi_char *pauc_tx_dscr_param_name[MAC_SET_DSCR_PARAM_BUTT] = {
712 "data0", "data1", "data2", "data3", "rate", "power", "shortgi"
713 };
714
715 /* 获取命令参数 */
716 hi_u32 ret = wal_hipriv_three_param_parse(pc_param, &cmd_param);
717 if (ret != HI_SUCCESS) {
718 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_tx_dscr_param::get parse cmd param failed!}");
719 return ret;
720 }
721 /* **************************************************************************
722 抛事件到wal层处理
723 ************************************************************************** */
724 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_DSCR, sizeof(mac_cfg_set_dscr_param_stru));
725 /* 解析并设置配置命令参数 */
726 set_dscr_param = (mac_cfg_set_dscr_param_stru *)(write_msg.auc_value);
727 /* 解析是设置哪一个帧类型 */
728 for (index = 0; index < MAC_SET_DSCR_TYPE_BUTT; index++) {
729 if (!strcmp(pauc_dscr_type_name[index], cmd_param.cmd_param1)) {
730 break;
731 }
732 }
733 if (index == MAC_SET_DSCR_TYPE_BUTT) {
734 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_tx_dscr_param::no such type for tx dscr!}");
735 return HI_FAIL;
736 }
737 set_dscr_param->type = index;
738 /* 解析是设置哪一个字段 */
739 for (index = 0; index < MAC_SET_DSCR_PARAM_BUTT; index++) {
740 if (!strcmp(pauc_tx_dscr_param_name[index], cmd_param.cmd_param2)) {
741 break;
742 }
743 }
744 if (index == MAC_SET_DSCR_PARAM_BUTT) {
745 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_tx_dscr_param::no such param for tx dscr!}");
746 return HI_FAIL;
747 }
748 set_dscr_param->function_index = index;
749 /* 解析要设置为多大的值 */
750 set_dscr_param->l_value = oal_strtol(cmd_param.cmd_param3, HI_NULL, 0);
751
752 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
753 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_set_dscr_param_stru), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
754 if (oal_unlikely(ret != HI_SUCCESS)) {
755 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_tx_dscr_param::return err code [%u]!}", ret);
756 }
757 return ret;
758 }
759
760
761 /* ****************************************************************************
762 功能描述 : 手动触发建立BA会话
763 **************************************************************************** */
wal_hipriv_ampdu_start(oal_net_device_stru * netdev,hi_char * pc_param)764 static hi_u32 wal_hipriv_ampdu_start(oal_net_device_stru *netdev, hi_char *pc_param)
765 {
766 wal_msg_write_stru write_msg;
767 hi_u32 ret;
768 mac_cfg_ampdu_start_param_stru ampdu_start_param_info; /* 临时保存获取的use的信息 */
769 wal_hipriv_two_param_stru cmd_param;
770 hi_char* cmd_param1_ptr = HI_NULL;
771
772 /* 设置AMPDU开启的配置命令: hipriv Hisilicon0 ampdu_start xx xx xx xx xx xx(mac地址) tidno */
773 ret = wal_hipriv_two_param_parse(pc_param, &cmd_param);
774 if (ret != HI_SUCCESS) {
775 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_ampdu_start::parse cmd param failed!}");
776 return ret;
777 }
778 /* 规则6.6:禁止使用内存操作类危险函数 例外(1)对固定长度的数组进行初始化,或对固定长度的结构体进行内存初始化 */
779 memset_s(&du_start_param_info, sizeof(mac_cfg_ampdu_start_param_stru), 0,
780 sizeof(mac_cfg_ampdu_start_param_stru));
781
782 cmd_param1_ptr = cmd_param.cmd_param1;
783 /* 获取mac地址 */
784 oal_strtoaddr(cmd_param1_ptr, ampdu_start_param_info.auc_mac_addr, WLAN_MAC_ADDR_LEN);
785 /* 获取tid */
786 ampdu_start_param_info.tidno = (hi_u8)oal_atoi(cmd_param.cmd_param2);
787 if (ampdu_start_param_info.tidno >= WLAN_TID_MAX_NUM) {
788 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_ampdu_start::tidno[%d] is invalid!}",
789 ampdu_start_param_info.tidno);
790 return HI_ERR_CODE_INVALID_CONFIG;
791 }
792 /* **************************************************************************
793 抛事件到wal层处理
794 ************************************************************************** */
795 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_AMPDU_START, sizeof(mac_cfg_ampdu_start_param_stru));
796 /* 设置配置命令参数 */
797 if (memcpy_s(write_msg.auc_value, sizeof(mac_cfg_ampdu_start_param_stru), &du_start_param_info,
798 sizeof(mac_cfg_ampdu_start_param_stru)) != EOK) {
799 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_ampdu_start::memcpy_s event msg failed!}");
800 return HI_FAIL;
801 }
802 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
803 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_ampdu_start_param_stru), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
804 if (oal_unlikely(ret != HI_SUCCESS)) {
805 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_ampdu_start::return err code[%u]!}", ret);
806 }
807 return ret;
808 }
809
810 /* ****************************************************************************
811 功能描述 : 开启或关闭amsdu ampdu联合发送
812 **************************************************************************** */
813 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_ampdu_amsdu_switch(oal_net_device_stru * netdev,hi_char * pc_param)814 static hi_u32 wal_hipriv_ampdu_amsdu_switch(oal_net_device_stru *netdev, hi_char *pc_param)
815 {
816 wal_msg_write_stru write_msg;
817 hi_s32 l_tmp;
818 hi_u32 off_set;
819 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
820 hi_u32 ret;
821
822 /* 设置自动开始BA会话的开关:hipriv "vap0 auto_ba 0 | 1" 该命令针对某一个VAP */
823 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
824 if (ret != HI_SUCCESS) {
825 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_ampdu_amsdu_switch::wal_get_cmd_one_arg return err_code [%u]!}",
826 ret);
827 return ret;
828 }
829 /* 针对解析出的不同命令,对AUTO BA进行不同的设置 非0即开启 */
830 if (0 == (strcmp("0", ac_name))) {
831 l_tmp = 0;
832 } else {
833 l_tmp = 1;
834 }
835 /* **************************************************************************
836 抛事件到wal层处理
837 ************************************************************************** */
838 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_AMSDU_AMPDU_SWITCH, sizeof(hi_s32));
839 *((hi_s32 *)(write_msg.auc_value)) = l_tmp; /* 设置配置命令参数 */
840 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_s32),
841 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
842 if (oal_unlikely(ret != HI_SUCCESS)) {
843 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_ampdu_amsdu_switch::return err code[%u]!}", ret);
844 }
845 return ret;
846 }
847
848 /* ****************************************************************************
849 功能描述 : 删除BA会话的调测命令
850 **************************************************************************** */
wal_hipriv_delba_req(oal_net_device_stru * netdev,hi_char * pc_param)851 static hi_u32 wal_hipriv_delba_req(oal_net_device_stru *netdev, hi_char *pc_param)
852 {
853 wal_msg_write_stru write_msg;
854 hi_u32 ret;
855 mac_cfg_delba_req_param_stru delba_req_param_info; /* 临时保存获取的delba req的信息 */
856 wal_hipriv_four_param_stru cmd_param;
857 hi_char* cmd_param1_ptr = HI_NULL;
858
859 /* 删除对应tid的ba配置命令: hipriv Hisilicon0 delba_req xx xx xx xx xx xx(mac地址) tidno direction
860 direction:0为RX BA, 1为TX BA */
861 ret = wal_hipriv_four_param_parse(pc_param, &cmd_param);
862 if (ret != HI_SUCCESS) {
863 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_delba_req::parse cmd param failed!}");
864 return ret;
865 }
866 /* 规则6.6:禁止使用内存操作类危险函数 例外(1)对固定长度的数组进行初始化,或对固定长度的结构体进行内存初始化 */
867 memset_s(&delba_req_param_info, sizeof(mac_cfg_delba_req_param_stru), 0, sizeof(mac_cfg_delba_req_param_stru));
868
869 cmd_param1_ptr = cmd_param.cmd_param1;
870 /* 获取mac地址 */
871 oal_strtoaddr(cmd_param1_ptr, delba_req_param_info.auc_mac_addr, WLAN_MAC_ADDR_LEN);
872 /* 获取tid */
873 delba_req_param_info.tidno = (hi_u8)oal_atoi(cmd_param.cmd_param2);
874 if (delba_req_param_info.tidno >= WLAN_TID_MAX_NUM) {
875 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_delba_req::tidno [%d] is invalid!}", delba_req_param_info.tidno);
876 return HI_ERR_CODE_INVALID_CONFIG;
877 }
878 /* 获取direction */
879 delba_req_param_info.direction = (hi_u8)oal_atoi(cmd_param.cmd_param3);
880 if (delba_req_param_info.direction >= MAC_BUTT_DELBA) {
881 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_delba_req::the direction is not correct! direction is[%d]!}",
882 delba_req_param_info.direction);
883 return HI_ERR_CODE_INVALID_CONFIG;
884 }
885 /* **************************************************************************
886 抛事件到wal层处理
887 ************************************************************************** */
888 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_DELBA_REQ, sizeof(mac_cfg_delba_req_param_stru));
889 /* 设置配置命令参数 */
890 if (memcpy_s(write_msg.auc_value, sizeof(mac_cfg_delba_req_param_stru), &delba_req_param_info,
891 sizeof(mac_cfg_delba_req_param_stru)) != EOK) {
892 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_delba_req::memcpy_s cmd param failed.");
893 return HI_FAIL;
894 }
895 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
896 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_delba_req_param_stru), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
897 if (oal_unlikely(ret != HI_SUCCESS)) {
898 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_delba_req::return err code[%u]!}", ret);
899 }
900 return ret;
901 }
902
903 #endif
904
905 /* ****************************************************************************
906 功能描述 : 打印user的所有参数信息
907 **************************************************************************** */
908 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_user_info(oal_net_device_stru * netdev,hi_char * pc_param)909 hi_u32 wal_hipriv_user_info(oal_net_device_stru *netdev, hi_char *pc_param)
910 {
911 wal_msg_write_stru write_msg;
912 hi_u32 ret;
913
914 /* 规则6.6:禁止使用内存操作类危险函数 例外(1)对固定长度的数组进行初始化,或对固定长度的结构体进行内存初始化 */
915 memset_s(&write_msg, sizeof(wal_msg_write_stru), 0, sizeof(wal_msg_write_stru));
916 if (*pc_param == ' ') {
917 pc_param++;
918 }
919 oal_strtoaddr(pc_param, write_msg.auc_value, WLAN_MAC_ADDR_LEN);
920
921 /* 建议5.5 这里强制类型转换会不会出问题 */
922 if (wal_macaddr_check(write_msg.auc_value) != HI_SUCCESS) {
923 oam_warning_log0(0, OAM_SF_ANY, "wal_hipriv_user_info:: Mac address invalid!");
924 return HI_FAIL;
925 }
926
927 pc_param += WLAN_MAC_ADDR_BYTE_LEN;
928 /* 判断命令长度是否有问题 */
929 if (*pc_param != '\0') {
930 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_user_info::cmd len error!}\r\n");
931 return HI_FAIL;
932 }
933
934 /* **************************************************************************
935 抛事件到wal层处理
936 ************************************************************************** */
937 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_USER_INFO, WLAN_MAC_ADDR_LEN);
938 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + WLAN_MAC_ADDR_LEN,
939 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
940 if (oal_unlikely(ret != HI_SUCCESS)) {
941 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_user_info::return err code [%u]!}", ret);
942 return ret;
943 }
944 #ifdef AT_DEBUG_CMD_SUPPORT
945 hi_at_printf("OK\r\n");
946 #endif
947
948 return HI_SUCCESS;
949 }
950
951 #ifdef _PRE_WLAN_FEATURE_HIPRIV
952 /* ****************************************************************************
953 功能描述 : 显示设备支持的信道列表
954
955 修改历史 :
956 1.日 期 : 2013年12月27日,星期五
957 作 者 : HiSilicon
958 修改内容 : 新生成函数
959
960 **************************************************************************** */
wal_hipriv_list_channel(oal_net_device_stru * netdev,hi_char * pc_param)961 static hi_u32 wal_hipriv_list_channel(oal_net_device_stru *netdev, hi_char *pc_param)
962 {
963 wal_msg_write_stru write_msg;
964 hi_u32 ret;
965
966 hi_unref_param(pc_param);
967 /* **************************************************************************
968 抛事件到wal层处理
969 ************************************************************************** */
970 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_LIST_CHAN, sizeof(hi_s32));
971
972 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_s32),
973 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
974 if (oal_unlikely(ret != HI_SUCCESS)) {
975 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_list_channel::return err code [%u]!}\r\n", ret);
976 return ret;
977 }
978
979 return HI_SUCCESS;
980 }
981 #endif
982
983 #ifdef _PRE_DEBUG_MODE
984 #ifdef _PRE_WLAN_FEATURE_HIPRIV
985 /* ****************************************************************************
986 功能描述 : 设置管制域最大发送功率
987
988 修改历史 :
989 1.日 期 : 2013年12月27日,星期五
990 作 者 : HiSilicon
991 修改内容 : 新生成函数
992 **************************************************************************** */
993 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_set_regdomain_pwr(oal_net_device_stru * netdev,hi_char * pc_param)994 static hi_u32 wal_hipriv_set_regdomain_pwr(oal_net_device_stru *netdev, hi_char *pc_param)
995 {
996 hi_u32 off_set;
997 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
998 hi_u32 ret;
999 hi_s32 l_pwr;
1000 wal_msg_write_stru write_msg;
1001
1002 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
1003 if (ret != HI_SUCCESS) {
1004 oam_warning_log1(0, OAM_SF_CFG, "wal_hipriv_set_regdomain_pwr, get arg return err %u", ret);
1005 return ret;
1006 }
1007
1008 l_pwr = oal_atoi(ac_name);
1009 if (l_pwr <= 0 || l_pwr > 100) { /* 大于100为无效值 */
1010 oam_warning_log1(0, OAM_SF_CFG, "invalid value, %d", l_pwr);
1011 return HI_ERR_CODE_INVALID_CONFIG;
1012 }
1013
1014 /* **************************************************************************
1015 抛事件到wal层处理
1016 ************************************************************************** */
1017 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_REGDOMAIN_PWR, sizeof(mac_cfg_regdomain_max_pwr_stru));
1018
1019 ((mac_cfg_regdomain_max_pwr_stru *)write_msg.auc_value)->pwr = (hi_u8)l_pwr;
1020 ((mac_cfg_regdomain_max_pwr_stru *)write_msg.auc_value)->exceed_reg = HI_FALSE;
1021
1022 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_s32),
1023 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
1024 if (ret != HI_SUCCESS) {
1025 oam_warning_log1(0, OAM_SF_CFG, "{wal_hipriv_set_regdomain_pwr::wal_send_cfg_event fail.return err code [%u]}",
1026 ret);
1027 }
1028
1029 return ret;
1030 }
1031
1032 /* ****************************************************************************
1033 功能描述 : 设置管制域最大发送功率
1034
1035 修改历史 :
1036 1.日 期 : 2013年12月27日,星期五
1037 作 者 : HiSilicon
1038 修改内容 : 新生成函数
1039 **************************************************************************** */
1040 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_set_regdomain_pwr_priv(oal_net_device_stru * netdev,hi_char * pc_param)1041 static hi_u32 wal_hipriv_set_regdomain_pwr_priv(oal_net_device_stru *netdev, hi_char *pc_param)
1042 {
1043 hi_u32 off_set;
1044 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
1045 hi_u32 ret;
1046 hi_u32 pwr;
1047 wal_msg_write_stru write_msg;
1048
1049 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
1050 if (ret != HI_SUCCESS) {
1051 oam_warning_log1(0, OAM_SF_CFG, "wal_hipriv_set_regdomain_pwr, get arg return err %d", ret);
1052 return ret;
1053 }
1054
1055 pwr = (hi_u32)oal_atoi(ac_name);
1056
1057 /* **************************************************************************
1058 抛事件到wal层处理
1059 ************************************************************************** */
1060 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_REGDOMAIN_PWR, sizeof(hi_s32));
1061
1062 ((mac_cfg_regdomain_max_pwr_stru *)write_msg.auc_value)->pwr = (hi_u8)pwr;
1063 ((mac_cfg_regdomain_max_pwr_stru *)write_msg.auc_value)->exceed_reg = HI_TRUE;
1064
1065 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_s32),
1066 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
1067 if (ret != HI_SUCCESS) {
1068 oam_warning_log1(0, OAM_SF_CFG, "{wal_hipriv_set_regdomain_pwr::wal_send_cfg_event fail.return err code %u}",
1069 ret);
1070 }
1071
1072 return ret;
1073 }
1074
1075 /* ****************************************************************************
1076 功能描述 : 触发sta初始扫描
1077
1078 修改历史 :
1079 1.日 期 : 2013年6月27日
1080 作 者 : HiSilicon
1081 修改内容 : 新生成函数
1082
1083 **************************************************************************** */
wal_hipriv_start_scan(oal_net_device_stru * netdev,hi_char * pc_param)1084 static hi_u32 wal_hipriv_start_scan(oal_net_device_stru *netdev, hi_char *pc_param)
1085 {
1086 wal_msg_write_stru write_msg;
1087 hi_u32 ret;
1088 #ifdef _PRE_WLAN_FEATURE_P2P
1089 hi_u8 is_p2p0_scan;
1090 #endif
1091
1092 hi_unref_param(pc_param);
1093 /* **************************************************************************
1094 抛事件到wal层处理
1095 ************************************************************************** */
1096 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_START_SCAN, sizeof(hi_s32));
1097
1098 #ifdef _PRE_WLAN_FEATURE_P2P
1099 is_p2p0_scan = (memcmp(netdev->name, "p2p0", strlen("p2p0")) == 0) ? 1 : 0;
1100 write_msg.auc_value[0] = is_p2p0_scan;
1101 #endif /* _PRE_WLAN_FEATURE_P2P */
1102
1103 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_s32),
1104 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
1105 if (oal_unlikely(ret != HI_SUCCESS)) {
1106 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_start_scan::return err code [%u]!}\r\n", ret);
1107 return ret;
1108 }
1109
1110 return HI_SUCCESS;
1111 }
1112
1113 /* ****************************************************************************
1114 功能描述 : 触发sta初始扫描
1115
1116 修改历史 :
1117 1.日 期 : 2013年6月27日
1118 作 者 : HiSilicon
1119 修改内容 : 新生成函数
1120 **************************************************************************** */
1121 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_start_join(oal_net_device_stru * netdev,hi_char * pc_param)1122 static hi_u32 wal_hipriv_start_join(oal_net_device_stru *netdev, hi_char *pc_param)
1123 {
1124 wal_msg_write_stru write_msg;
1125 hi_u32 ret;
1126 hi_u32 off_set;
1127 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
1128
1129 /* **************************************************************************
1130 抛事件到wal层处理
1131 ************************************************************************** */
1132 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_START_JOIN, sizeof(hi_s32));
1133
1134 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
1135 if (ret != HI_SUCCESS) {
1136 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_start_join::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
1137 return ret;
1138 }
1139
1140 /* 将要关联AP的编号复制到事件msg中,AP编号是数字的ASSCI码,不超过4个字节 */
1141 if (memcpy_s((hi_s8 *)write_msg.auc_value, WAL_MSG_WRITE_MAX_LEN, (hi_s8 *)ac_name, sizeof(hi_s32)) != EOK) {
1142 oam_error_log0(0, OAM_SF_ANY, "{wal_hipriv_start_join::mem safe function err!}");
1143 return HI_FAIL;
1144 }
1145
1146 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_s32),
1147 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
1148 if (oal_unlikely(ret != HI_SUCCESS)) {
1149 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_start_join::return err code [%u]!}\r\n", ret);
1150 return ret;
1151 }
1152
1153 return HI_SUCCESS;
1154 }
1155
1156 /* ****************************************************************************
1157 功能描述 : 触发去认证
1158
1159 修改历史 :
1160 1.日 期 : 2013年6月27日
1161 作 者 : HiSilicon
1162 修改内容 : 新生成函数
1163
1164 **************************************************************************** */
wal_hipriv_start_deauth(oal_net_device_stru * netdev,hi_char * pc_param)1165 static hi_u32 wal_hipriv_start_deauth(oal_net_device_stru *netdev, hi_char *pc_param)
1166 {
1167 wal_msg_write_stru write_msg;
1168 hi_u32 ret;
1169
1170 hi_unref_param(pc_param);
1171 /* **************************************************************************
1172 抛事件到wal层处理
1173 ************************************************************************** */
1174 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_START_DEAUTH, sizeof(hi_s32));
1175
1176 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_s32),
1177 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
1178 if (oal_unlikely(ret != HI_SUCCESS)) {
1179 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_start_deauth::return err code [%u]!}\r\n", ret);
1180 return ret;
1181 }
1182
1183 return HI_SUCCESS;
1184 }
1185 #endif
1186 #endif
1187
1188 #ifdef _PRE_WLAN_FEATURE_HIPRIV
1189 /* ****************************************************************************
1190 功能描述 : 删除1个用户
1191
1192 修改历史 :
1193 1.日 期 : 2013年8月27日
1194 作 者 : HiSilicon
1195 修改内容 : 新生成函数
1196 **************************************************************************** */
1197 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_kick_user(oal_net_device_stru * netdev,hi_char * pc_param)1198 static hi_u32 wal_hipriv_kick_user(oal_net_device_stru *netdev, hi_char *pc_param)
1199 {
1200 wal_msg_write_stru write_msg;
1201 hi_u32 off_set;
1202 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
1203 hi_u32 ret;
1204 mac_cfg_kick_user_param_stru *kick_user_param = HI_NULL;
1205 hi_u8 mac_addr[WLAN_MAC_ADDR_LEN] = {0, 0, 0, 0, 0, 0};
1206
1207 /* 去关联1个用户的命令 hipriv "vap0 kick_user xx:xx:xx:xx:xx:xx" */
1208 /* 获取mac地址 */
1209 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
1210 if (ret != HI_SUCCESS) {
1211 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_kick_user::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
1212 return ret;
1213 }
1214 oal_strtoaddr(ac_name, mac_addr, WLAN_MAC_ADDR_LEN);
1215
1216 /* **************************************************************************
1217 抛事件到wal层处理
1218 ************************************************************************** */
1219 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_KICK_USER, sizeof(mac_cfg_kick_user_param_stru));
1220
1221 /* 设置配置命令参数 */
1222 kick_user_param = (mac_cfg_kick_user_param_stru *)(write_msg.auc_value);
1223 if (memcpy_s(kick_user_param->auc_mac_addr, WLAN_MAC_ADDR_LEN, mac_addr, WLAN_MAC_ADDR_LEN) != EOK) {
1224 oam_error_log0(0, OAM_SF_PWR, "{wal_hipriv_send_bar::mem safe function err!}");
1225 return HI_FAIL;
1226 }
1227
1228 /* 填写去关联reason code */
1229 kick_user_param->us_reason_code = MAC_UNSPEC_REASON;
1230
1231 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
1232 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_kick_user_param_stru), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
1233 if (oal_unlikely(ret != HI_SUCCESS)) {
1234 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_kick_user::return err code [%u]!}\r\n", ret);
1235 return ret;
1236 }
1237
1238 return HI_SUCCESS;
1239 }
1240
1241 /* ****************************************************************************
1242 功能描述 : 指定用户指定tid 发送bar
1243
1244 修改历史 :
1245 1.日 期 : 2013年8月27日
1246 作 者 : HiSilicon
1247 修改内容 : 新生成函数
1248
1249 **************************************************************************** */
wal_hipriv_send_bar(oal_net_device_stru * netdev,hi_char * pc_param)1250 static hi_u32 wal_hipriv_send_bar(oal_net_device_stru *netdev, hi_char *pc_param)
1251 {
1252 wal_msg_write_stru write_msg;
1253 hi_u32 off_set;
1254 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
1255 hi_u32 ret;
1256 mac_cfg_pause_tid_param_stru *pause_tid_param = HI_NULL;
1257 hi_u8 mac_addr[WLAN_MAC_ADDR_LEN] = {0, 0, 0, 0, 0, 0};
1258 hi_u8 tid;
1259
1260 /* 获取mac地址 */
1261 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
1262 if (ret != HI_SUCCESS) {
1263 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_send_bar::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
1264 return ret;
1265 }
1266 oal_strtoaddr(ac_name, mac_addr, WLAN_MAC_ADDR_LEN);
1267 /* 偏移,取下一个参数 */
1268 pc_param = pc_param + off_set;
1269
1270 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
1271 if (ret != HI_SUCCESS) {
1272 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_send_bar::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
1273 return ret;
1274 }
1275
1276 tid = (hi_u8)oal_atoi(ac_name);
1277
1278 /* **************************************************************************
1279 抛事件到wal层处理
1280 ************************************************************************** */
1281 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SEND_BAR, sizeof(mac_cfg_pause_tid_param_stru));
1282
1283 /* 设置配置命令参数 */
1284 pause_tid_param = (mac_cfg_pause_tid_param_stru *)(write_msg.auc_value);
1285 if (memcpy_s(pause_tid_param->auc_mac_addr, WLAN_MAC_ADDR_LEN, mac_addr, WLAN_MAC_ADDR_LEN) != EOK) {
1286 oam_error_log0(0, OAM_SF_PWR, "{wal_hipriv_send_bar::mem safe function err!}");
1287 return HI_FAIL;
1288 }
1289 pause_tid_param->tid = tid;
1290
1291 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
1292 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_pause_tid_param_stru), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
1293 if (oal_unlikely(ret != HI_SUCCESS)) {
1294 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_send_bar::return err code [%u]!}\r\n", ret);
1295 return ret;
1296 }
1297
1298 return HI_SUCCESS;
1299 }
1300
1301 /* ****************************************************************************
1302 功能描述 : 测试命令,打开/关闭WMM
1303 修改历史 :
1304 1.日 期 : 2014年1月27日
1305 作 者 : HiSilicon
1306 修改内容 : 新生成函数
1307 **************************************************************************** */
1308 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_wmm_switch(oal_net_device_stru * netdev,hi_char * pc_param)1309 static hi_u32 wal_hipriv_wmm_switch(oal_net_device_stru *netdev, hi_char *pc_param)
1310 {
1311 wal_msg_write_stru write_msg;
1312 hi_u32 ret;
1313 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
1314 hi_u32 off_set = 0;
1315 hi_u8 open_wmm;
1316 hi_u8 orig_dev_state = wal_dev_is_running();
1317
1318 if (wal_netdev_stop(netdev) != HI_SUCCESS) {
1319 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_wmm_switch::wal_netdev_stop failed\r\n");
1320 return HI_FAIL;
1321 }
1322
1323 /* 设备在up状态不允许配置,必须先down */
1324 if (wal_dev_is_running() == HI_TRUE) {
1325 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_wmm_switch::device is busy,can not set wmm!}\r\n");
1326 return HI_ERR_CODE_CONFIG_BUSY;
1327 }
1328
1329 /* 获取设定的值 */
1330 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
1331 if (ret != HI_SUCCESS) {
1332 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_wmm_switch::get_one_arg return err_code [%d]!}", ret);
1333 return ret;
1334 }
1335
1336 open_wmm = (hi_u8)oal_atoi(ac_name);
1337 /* 将用户输入值转化成0 1 */
1338 open_wmm = (hi_u8)((open_wmm == 0) ? HI_FALSE : HI_TRUE);
1339 /* **************************************************************************
1340 抛事件到wal层处理
1341 ************************************************************************** */
1342 *(hi_u8 *)(write_msg.auc_value) = open_wmm;
1343 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_WMM_SWITCH, sizeof(hi_u8));
1344 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_u8),
1345 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
1346 if (oal_unlikely(ret != HI_SUCCESS)) {
1347 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_wmm_switch::return err code [%u]!}", ret);
1348 return ret;
1349 }
1350
1351 if (orig_dev_state == HI_TRUE) {
1352 if (wal_netdev_open(netdev) != HI_SUCCESS) {
1353 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_wmm_switch::wal_netdev_open failed\r\n");
1354 return HI_FAIL;
1355 }
1356 }
1357 return HI_SUCCESS;
1358 }
1359 #endif
1360
1361 #ifdef _PRE_DEBUG_MODE
1362 #ifdef _PRE_WLAN_FEATURE_HIPRIV
1363 /* ****************************************************************************
1364 功能描述 : 测试命令,打开/关闭隐藏ssid
1365
1366 修改历史 :
1367 1.日 期 : 2014年1月27日
1368 作 者 : HiSilicon
1369 修改内容 : 新生成函数
1370 **************************************************************************** */
1371 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_hide_ssid(oal_net_device_stru * netdev,hi_char * pc_param)1372 static hi_u32 wal_hipriv_hide_ssid(oal_net_device_stru *netdev, hi_char *pc_param)
1373 {
1374 wal_msg_write_stru write_msg;
1375 hi_u32 ret;
1376 hi_u16 us_len;
1377 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
1378 hi_u32 off_set = 0;
1379 hi_u8 hide_ssid;
1380
1381 /* 获取设定的值 */
1382 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
1383 if (ret != HI_SUCCESS) {
1384 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_hide_ssid::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
1385 return ret;
1386 }
1387
1388 hide_ssid = (hi_u8)oal_atoi(ac_name);
1389
1390 /* **************************************************************************
1391 抛事件到wal层处理
1392 ************************************************************************** */
1393 us_len = sizeof(hi_u8);
1394 *(hi_u8 *)(write_msg.auc_value) = hide_ssid;
1395 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_HIDE_SSID, us_len);
1396
1397 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + us_len, (hi_u8 *)&write_msg,
1398 HI_FALSE, HI_NULL);
1399 if (oal_unlikely(ret != HI_SUCCESS)) {
1400 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_hide_ssid::return err code [%u]!}\r\n", ret);
1401 return ret;
1402 }
1403
1404 return HI_SUCCESS;
1405 }
1406 #endif
1407 #endif
1408
1409 #ifdef _PRE_WLAN_FEATURE_HIPRIV
1410 /* ****************************************************************************
1411 功能描述 : 设置聚合最大个数
1412
1413 修改历史 :
1414 1.日 期 : 2014年10月29日
1415 作 者 : HiSilicon
1416 修改内容 : 新生成函数
1417 **************************************************************************** */
1418 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_set_ampdu_aggr_num(oal_net_device_stru * netdev,hi_char * pc_param)1419 static hi_u32 wal_hipriv_set_ampdu_aggr_num(oal_net_device_stru *netdev, hi_char *pc_param)
1420 {
1421 wal_msg_write_stru write_msg;
1422 hi_u32 off_set;
1423 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
1424 mac_cfg_aggr_num_stru aggr_num_ctl = {0};
1425 hi_u32 ret;
1426
1427 /* 安全编程规则6.6例外(1) 固定长度的结构体进行内存初始化 */
1428 memset_s((hi_u8 *)&write_msg, sizeof(wal_msg_write_stru), 0, sizeof(wal_msg_write_stru));
1429
1430 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
1431 if (ret != HI_SUCCESS) {
1432 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_ampdu_aggr_num::get switch error[%u]!}\r\n", ret);
1433 return ret;
1434 }
1435 pc_param += off_set;
1436
1437 aggr_num_ctl.aggr_num_switch = (hi_u8)oal_atoi(ac_name);
1438 if (aggr_num_ctl.aggr_num_switch == 0) {
1439 /* 不指定聚合个数时,聚合个数恢复为0 */
1440 aggr_num_ctl.aggr_num = 0;
1441 } else {
1442 /* 获取聚合个数 */
1443 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
1444 if (ret != HI_SUCCESS) {
1445 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_ampdu_aggr_num::get aggr_num error[%u]!}\r\n", ret);
1446 return ret;
1447 }
1448
1449 aggr_num_ctl.aggr_num = (hi_u8)oal_atoi(ac_name);
1450
1451 /* 超过聚合最大限制判断 */
1452 if (aggr_num_ctl.aggr_num > WLAN_AMPDU_TX_MAX_NUM) {
1453 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_ampdu_aggr_num::num err[%d]!}\r\n", aggr_num_ctl.aggr_num);
1454 return ret;
1455 }
1456 }
1457
1458 /* **************************************************************************
1459 抛事件到wal层处理
1460 ************************************************************************** */
1461 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_AGGR_NUM, sizeof(aggr_num_ctl));
1462
1463 /* 填写消息体,参数 */
1464 if (memcpy_s(write_msg.auc_value, WAL_MSG_WRITE_MAX_LEN, &aggr_num_ctl, sizeof(aggr_num_ctl)) != EOK) {
1465 oam_error_log0(0, OAM_SF_ANY, "{wal_hipriv_set_ampdu_aggr_num::mem safe function err!}");
1466 return HI_FAIL;
1467 }
1468
1469 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(aggr_num_ctl),
1470 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
1471 if (oal_unlikely(ret != HI_SUCCESS)) {
1472 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_ampdu_aggr_num::send event return err code [%u]!}\r\n", ret);
1473 return ret;
1474 }
1475
1476 return HI_SUCCESS;
1477 }
1478 #endif
1479
1480 #ifdef _PRE_DEBUG_MODE
1481 #ifdef _PRE_WLAN_FEATURE_HIPRIV
wal_hipriv_packet_xmit_send_event(oal_net_device_stru * netdev,hi_u8 * ra_mac_addr,hi_u8 tid,hi_u8 packet_num,hi_u16 packet_len)1482 hi_u32 wal_hipriv_packet_xmit_send_event(oal_net_device_stru *netdev, hi_u8 *ra_mac_addr, hi_u8 tid, hi_u8 packet_num,
1483 hi_u16 packet_len)
1484 {
1485 wal_msg_write_stru write_msg;
1486 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_PACKET_XMIT, sizeof(mac_cfg_mpdu_ampdu_tx_param_stru));
1487
1488 /* 设置配置命令参数 */
1489 mac_cfg_mpdu_ampdu_tx_param_stru *aggr_tx_on_param = (mac_cfg_mpdu_ampdu_tx_param_stru *)(write_msg.auc_value);
1490 aggr_tx_on_param->packet_num = packet_num;
1491 aggr_tx_on_param->tid = tid;
1492 aggr_tx_on_param->us_packet_len = packet_len;
1493
1494 if (memcpy_s(aggr_tx_on_param->auc_ra_mac, WLAN_MAC_ADDR_LEN, ra_mac_addr, WLAN_MAC_ADDR_LEN) != EOK) {
1495 oam_error_log0(0, OAM_SF_PWR, "{wal_hipriv_packet_xmit::mem safe function err!}");
1496 return HI_FAIL;
1497 }
1498
1499 hi_u32 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
1500 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_mpdu_ampdu_tx_param_stru), (hi_u8 *)&write_msg, HI_FALSE,
1501 HI_NULL);
1502 if (oal_unlikely(ret != HI_SUCCESS)) {
1503 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_packet_xmit::return err code [%u]!}\r\n", ret);
1504 return ret;
1505 }
1506
1507 return HI_SUCCESS;
1508 }
1509
1510 /* ****************************************************************************
1511 功能描述 : 数据包发送
1512
1513 修改历史 :
1514 1.日 期 : 2013年9月6日
1515 作 者 : HiSilicon
1516 修改内容 : 新生成函数
1517
1518 **************************************************************************** */
wal_hipriv_packet_xmit(oal_net_device_stru * netdev,hi_char * pc_param)1519 static hi_u32 wal_hipriv_packet_xmit(oal_net_device_stru *netdev, hi_char *pc_param)
1520 {
1521 hi_u32 off_set;
1522 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
1523 hi_u8 ra_mac_addr[WLAN_MAC_ADDR_LEN] = {0};
1524 hi_u8 *ra_mac_addr_ptr = ra_mac_addr;
1525
1526 hi_u32 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
1527 if (ret != HI_SUCCESS) {
1528 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_packet_xmit::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
1529 return ret;
1530 }
1531
1532 hi_u8 tid = (hi_u8)oal_atoi(ac_name);
1533 if (tid >= WLAN_TID_MAX_NUM) {
1534 return HI_FAIL;
1535 }
1536 pc_param = pc_param + off_set;
1537
1538 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
1539 if (ret != HI_SUCCESS) {
1540 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_packet_xmit::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
1541 return ret;
1542 }
1543 pc_param = pc_param + off_set;
1544
1545 hi_u8 packet_num = (hi_u8)oal_atoi(ac_name);
1546
1547 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
1548 if (ret != HI_SUCCESS) {
1549 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_packet_xmit::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
1550 return ret;
1551 }
1552
1553 hi_u16 packet_len = (hi_u16)oal_atoi(ac_name);
1554 if (packet_len < 30) { /* 长度不能小于30 */
1555 return HI_FAIL;
1556 }
1557 pc_param += off_set;
1558
1559 /* 获取MAC地址字符串 */
1560 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
1561 if (ret != HI_SUCCESS) {
1562 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_packet_xmit::get mac err_code [%d]!}\r\n", ret);
1563 return ret;
1564 }
1565 /* 地址字符串转地址数组 */
1566 oal_strtoaddr(ac_name, ra_mac_addr_ptr, WLAN_MAC_ADDR_LEN);
1567
1568 /* **************************************************************************
1569 抛事件到wal层处理
1570 ************************************************************************** */
1571 ret = wal_hipriv_packet_xmit_send_event(netdev, ra_mac_addr_ptr, tid, packet_num, packet_len);
1572 return ret;
1573 }
1574
1575 /* ****************************************************************************
1576 功能描述 : 设置保护模式开关
1577
1578 修改历史 :
1579 1.日 期 : 2014年2月27日
1580 作 者 : HiSilicon
1581 修改内容 : 新生成函数
1582 **************************************************************************** */
1583 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_set_auto_protection(oal_net_device_stru * netdev,hi_char * pc_param)1584 static hi_u32 wal_hipriv_set_auto_protection(oal_net_device_stru *netdev, hi_char *pc_param)
1585 {
1586 wal_msg_write_stru write_msg;
1587 hi_u32 ret;
1588 hi_u16 us_len;
1589 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
1590 hi_u32 off_set = 0;
1591 hi_u32 auto_protection_flag;
1592
1593 /* 获取mib名称 */
1594 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
1595 if (ret != HI_SUCCESS) {
1596 oam_warning_log1(0, OAM_SF_ANY,
1597 "{wal_hipriv_set_auto_protection::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
1598 return ret;
1599 }
1600
1601 auto_protection_flag = (hi_u32)oal_atoi(ac_name);
1602
1603 us_len = sizeof(hi_u32);
1604 *(hi_u32 *)(write_msg.auc_value) = auto_protection_flag;
1605 /* **************************************************************************
1606 抛事件到wal层处理
1607 ************************************************************************** */
1608 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_AUTO_PROTECTION, us_len);
1609
1610 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + us_len, (hi_u8 *)&write_msg,
1611 HI_FALSE, HI_NULL);
1612 if (oal_unlikely(ret != HI_SUCCESS)) {
1613 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_auto_protection::return err code [%u]!}\r\n", ret);
1614 return ret;
1615 }
1616
1617 return HI_SUCCESS;
1618 }
1619
1620 /* ****************************************************************************
1621 功能描述 : 停止背景扫描命令
1622
1623 修改历史 :
1624 1.日 期 : 2015年10月31日
1625 作 者 : HiSilicon
1626 修改内容 : 新生成函数
1627 **************************************************************************** */
1628 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_bgscan_enable(oal_net_device_stru * netdev,hi_char * pc_param)1629 static hi_u32 wal_hipriv_bgscan_enable(oal_net_device_stru *netdev, hi_char *pc_param)
1630 {
1631 hi_u32 off_set;
1632 hi_char ac_stop[80] = {0}; /* 数组元素个数为80 */
1633 hi_u32 ret;
1634 wal_msg_write_stru write_msg;
1635 hi_u8 *pen_bgscan_enable_flag = HI_NULL;
1636
1637 ret = wal_get_cmd_one_arg(pc_param, ac_stop, 80, &off_set); /* 传参易溢出,2---->80 */
1638 if (ret != HI_SUCCESS) {
1639 oam_warning_log0(0, OAM_SF_SCAN, "wal_hipriv_scan_stop: get first arg fail.");
1640 return HI_FAIL;
1641 }
1642
1643 /* **************************************************************************
1644 抛事件到wal层处理
1645 ************************************************************************** */
1646 wal_write_msg_hdr_init(&write_msg, WLAN_CFIGD_BGSCAN_ENABLE, sizeof(hi_u8));
1647
1648 /* 设置配置命令参数 */
1649 pen_bgscan_enable_flag = (hi_u8 *)(write_msg.auc_value);
1650
1651 *pen_bgscan_enable_flag = (hi_u8)oal_atoi(ac_stop);
1652
1653 oam_warning_log1(0, OAM_SF_SCAN, "wal_hipriv_scan_stop:: bgscan_enable_flag= %d.", *pen_bgscan_enable_flag);
1654
1655 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_u8),
1656 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
1657 if (ret != HI_SUCCESS) {
1658 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_packet_xmit::return err code [%u]!}\r\n", ret);
1659 return ret;
1660 }
1661
1662 return HI_SUCCESS;
1663 }
1664 #endif
1665 #endif
1666
1667 #ifdef _PRE_WLAN_FEATURE_BW_HIEX
1668 #ifdef _PRE_WLAN_FEATURE_HIPRIV
1669 /* ****************************************************************************
1670 功能描述 : 设置窄带切换到发送selfcts的参数
1671 修改历史 :
1672 1.日 期 : 2019年7月10日
1673 作 者 : HiSilicon
1674 修改内容 : 新生成函数
1675 **************************************************************************** */
1676 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_hiex_config_selfcts(oal_net_device_stru * netdev,hi_char * pc_param)1677 static hi_u32 wal_hipriv_hiex_config_selfcts(oal_net_device_stru *netdev, hi_char *pc_param)
1678 {
1679 wal_msg_write_stru write_msg;
1680 hi_u32 off_set = 0;
1681 hi_char ac_arg[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
1682
1683 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_SELFCTS, sizeof(mac_cfg_tx_comp_stru));
1684 wlan_selfcts_param_stru *param = (wlan_selfcts_param_stru *)(write_msg.auc_value);
1685
1686 /* 发送selfcts使能 */
1687 hi_u32 ret = wal_get_cmd_one_arg(pc_param, ac_arg, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
1688 if (ret != HI_SUCCESS) {
1689 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_hiex_config_selfcts::get selfcts error[%u]}\r\n", ret);
1690 return ret;
1691 }
1692 pc_param += off_set;
1693
1694 param->selfcts = (hi_u8)oal_atoi(ac_arg);
1695 if ((param->selfcts != HI_TRUE) && (param->selfcts != HI_FALSE)) {
1696 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_hiex_config_selfcts::invalid enable param!}\r\n");
1697 return HI_FAIL;
1698 }
1699
1700 /* selfcts的占用信道时间 */
1701 ret = wal_get_cmd_one_arg(pc_param, ac_arg, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
1702 if (ret != HI_SUCCESS) {
1703 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_hiex_config_selfcts::get duration error[%u]}\r\n", ret);
1704 return ret;
1705 }
1706 pc_param += off_set;
1707
1708 param->duration = (hi_u8)oal_atoi(ac_arg);
1709 if (param->duration > WAL_HIPRIV_SELFCTS_DURATION_MAX) {
1710 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_hiex_config_selfcts::invalid duration param!}\r\n");
1711 return HI_FAIL;
1712 }
1713
1714 /* 发送selfcts的PER阈值 */
1715 ret = wal_get_cmd_one_arg(pc_param, ac_arg, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
1716 if (ret != HI_SUCCESS) {
1717 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_hiex_config_selfcts::get duration error[%u]}\r\n", ret);
1718 return ret;
1719 }
1720
1721 param->us_per = (hi_u16)oal_atoi(ac_arg);
1722 if (param->us_per > WAL_HIPRIV_SELFCTS_PER_MAX) {
1723 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_hiex_config_selfcts::invalid PER param!}\r\n");
1724 return HI_FAIL;
1725 }
1726
1727 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(wlan_selfcts_param_stru),
1728 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
1729 if (oal_unlikely(ret != HI_SUCCESS)) {
1730 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_hiex_config_selfcts::return err code [%u]!}\r\n", ret);
1731 return ret;
1732 }
1733
1734 return HI_SUCCESS;
1735 }
1736 #endif
1737 #endif
1738
1739 #ifdef _PRE_WLAN_FEATURE_OFFLOAD_FLOWCTL
1740 #ifdef _PRE_WLAN_FEATURE_HIPRIV
1741 /* ****************************************************************************
1742 功能描述 : 设置be,bk,vi,vo的每次调度报文个数,lowwater_line, high_waterline
1743
1744 修改历史 :
1745 1.日 期 : 2015年08月24日
1746 作 者 : HiSilicon
1747 修改内容 : 新生成函数
1748
1749 **************************************************************************** */
wal_hipriv_set_flowctl_param(oal_net_device_stru * netdev,hi_char * pc_param)1750 static hi_u32 wal_hipriv_set_flowctl_param(oal_net_device_stru *netdev, hi_char *pc_param)
1751 {
1752 wal_msg_write_stru write_msg;
1753 hi_u32 ret;
1754 hi_u32 off_set = 0;
1755 hi_char ac_param[WAL_HIPRIV_CMD_NAME_MAX_LEN];
1756 mac_cfg_flowctl_param_stru flowctl_param;
1757 mac_cfg_flowctl_param_stru *param = HI_NULL;
1758
1759 /* sh hipriv.sh "Hisilicon0 set_flowctl_param 0/1/2/3 20 20 40" */
1760 /* 0/1/2/3 分别代表be,bk,vi,vo */
1761 /* 获取队列类型参数 */
1762 ret = wal_get_cmd_one_arg(pc_param, ac_param, &off_set);
1763 if (ret != HI_SUCCESS) {
1764 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_flowctl_param::get queue_type error[%u]}\r\n", ret);
1765 return ret;
1766 }
1767
1768 flowctl_param.queue_type = (hi_u8)oal_atoi(ac_param);
1769
1770 /* 设置队列对应的每次调度报文个数 */
1771 pc_param += off_set;
1772 ret = wal_get_cmd_one_arg(pc_param, ac_param, &off_set);
1773 if (ret != HI_SUCCESS) {
1774 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_flowctl_param::get burst_limit error[%d]}\r\n", ret);
1775 return (hi_u32)ret;
1776 }
1777
1778 flowctl_param.us_burst_limit = (hi_u16)oal_atoi(ac_param);
1779
1780 /* 设置队列对应的流控low_waterline */
1781 pc_param += off_set;
1782 ret = wal_get_cmd_one_arg(pc_param, ac_param, &off_set);
1783 if (ret != HI_SUCCESS) {
1784 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_flowctl_param::get low_waterline error[%d]}\r\n", ret);
1785 return (hi_u32)ret;
1786 }
1787
1788 flowctl_param.us_low_waterline = (hi_u16)oal_atoi(ac_param);
1789
1790 /* 设置队列对应的流控high_waterline */
1791 pc_param += off_set;
1792 ret = wal_get_cmd_one_arg(pc_param, ac_param, &off_set);
1793 if (ret != HI_SUCCESS) {
1794 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_flowctl_param::get high_waterline error[%d]}\r\n", ret);
1795 return (hi_u32)ret;
1796 }
1797
1798 flowctl_param.us_high_waterline = (hi_u16)oal_atoi(ac_param);
1799
1800 /* 申请事件内存 */
1801 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_FLOWCTL_PARAM, sizeof(mac_cfg_flowctl_param_stru));
1802 param = (mac_cfg_flowctl_param_stru *)(write_msg.auc_value);
1803
1804 param->queue_type = flowctl_param.queue_type;
1805 param->us_burst_limit = flowctl_param.us_burst_limit;
1806 param->us_low_waterline = flowctl_param.us_low_waterline;
1807 param->us_high_waterline = flowctl_param.us_high_waterline;
1808
1809 /* **************************************************************************
1810 抛事件到wal层处理
1811 ************************************************************************** */
1812 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
1813 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_flowctl_param_stru), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
1814 if (oal_unlikely(ret != HI_SUCCESS)) {
1815 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_flowctl_param:: return err_code [%u]!}\r\n", ret);
1816 return ret;
1817 }
1818
1819 return HI_SUCCESS;
1820 }
1821
1822 /* ****************************************************************************
1823 功能描述 : 获取流控相关状态信息
1824
1825 修改历史 :
1826 1.日 期 : 2015年08月24日
1827 作 者 : HiSilicon
1828 修改内容 : 新生成函数
1829
1830 **************************************************************************** */
wal_hipriv_get_flowctl_stat(oal_net_device_stru * netdev,hi_char * pc_param)1831 static hi_u32 wal_hipriv_get_flowctl_stat(oal_net_device_stru *netdev, hi_char *pc_param)
1832 {
1833 wal_msg_write_stru write_msg;
1834 hi_u32 ret;
1835
1836 /* sh hipriv.sh "Hisilicon0 get_flowctl_stat" */
1837 /* 申请事件内存 */
1838 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_GET_FLOWCTL_STAT, sizeof(hi_u8));
1839
1840 /* **************************************************************************
1841 抛事件到wal层处理
1842 ************************************************************************** */
1843 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_u8),
1844 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
1845 if (oal_unlikely(ret != HI_SUCCESS)) {
1846 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_get_flowctl_stat:: return err_code [%u]!}\r\n", ret);
1847 return ret;
1848 }
1849
1850 return HI_SUCCESS;
1851 }
1852 #endif
1853 #endif
1854
1855 /* ****************************************************************************
1856 功能描述 : 设置管制域国家码
1857
1858 修改历史 :
1859 1.日 期 : 2015年1月16日
1860 作 者 : HiSilicon
1861 修改内容 : 新生成函数
1862 **************************************************************************** */
1863 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_setcountry(oal_net_device_stru * netdev,hi_char * pc_param)1864 hi_u32 wal_hipriv_setcountry(oal_net_device_stru *netdev, hi_char *pc_param)
1865 {
1866 hi_u32 ret;
1867 hi_u32 off_set;
1868 hi_char ac_arg[WAL_HIPRIV_CMD_NAME_MAX_LEN];
1869 hi_char *puc_para = HI_NULL;
1870
1871 /* 设备在up状态不允许配置,必须先down */
1872 if (wal_dev_is_running() == HI_TRUE) {
1873 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_setcountry::device is busy,can not set country code!}\r\n");
1874 return HI_ERR_CODE_CONFIG_BUSY;
1875 }
1876 ret = wal_get_cmd_one_arg(pc_param, ac_arg, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
1877 if (ret != HI_SUCCESS) {
1878 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_setcountry::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
1879 return ret;
1880 }
1881 puc_para = &ac_arg[0];
1882
1883 pc_param += off_set;
1884 /* 判断命令长度是否有问题 */
1885 if (*pc_param != '\0') {
1886 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_user_info::cmd len error!}\r\n");
1887 return HI_FAIL;
1888 }
1889 if (strlen(puc_para) > (MAC_CONTRY_CODE_LEN - 1)) {
1890 return HI_FAIL;
1891 }
1892 ret = wal_regdomain_update(netdev, puc_para, MAC_CONTRY_CODE_LEN);
1893 if (ret != HI_SUCCESS) {
1894 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_setcountry::regdomain_update return err code %u!}\r\n", ret);
1895 return ret;
1896 }
1897
1898 return HI_SUCCESS;
1899 }
1900
1901 /* ****************************************************************************
1902 功能描述 : 删除vap
1903 **************************************************************************** */
wal_hipriv_del_vap(oal_net_device_stru * netdev)1904 hi_u32 wal_hipriv_del_vap(oal_net_device_stru *netdev)
1905 {
1906 mac_vap_stru *mac_vap = HI_NULL;
1907 /* 设备在up状态不允许删除,必须先down */
1908 if (oal_unlikely(0 != (OAL_IFF_RUNNING & oal_netdevice_flags(netdev)))) {
1909 oam_error_log1(0, OAM_SF_ANY, "{wal_hipriv_del_vap::netdev status[%d] is busy, please down it first!}",
1910 oal_netdevice_flags(netdev));
1911 return HI_ERR_CODE_CONFIG_BUSY;
1912 }
1913 /* 去注册 */
1914 mac_vap = (mac_vap_stru *)GET_NET_DEV_PRIV(netdev);
1915 if (mac_vap->vap_id == WLAN_CFG_VAP_ID) {
1916 oal_net_unregister_netdev(netdev);
1917 oal_net_free_netdev(netdev);
1918 }
1919
1920 return HI_SUCCESS;
1921 }
1922
1923 #if defined(_PRE_WLAN_FEATURE_HIPRIV) || defined(_PRE_WLAN_FEATURE_SIGMA)
1924 /* ****************************************************************************
1925 功能描述 : 使能低功耗
1926 命令格式 : hipriv wlan0 pm_switch 1/0
1927 修改历史 :
1928 1.日 期 : 2014年5月21日,星期三
1929 作 者 : HiSilicon
1930 修改内容 : 新生成函数
1931 **************************************************************************** */
1932 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_set_pm_switch(oal_net_device_stru * netdev,hi_char * pc_param)1933 hi_u32 wal_hipriv_set_pm_switch(oal_net_device_stru *netdev, hi_char *pc_param)
1934 {
1935 wal_msg_write_stru write_msg;
1936 hi_u32 ret;
1937 hi_u32 pm_cfg;
1938
1939 if (pc_param == HI_NULL) {
1940 return HI_FAIL;
1941 }
1942
1943 pm_cfg = (hi_u32)oal_atoi(pc_param);
1944 /* 缓存低功耗标志 */
1945 set_under_ps(pm_cfg == 1);
1946 /* **************************************************************************
1947 抛事件到wal层处理
1948 ************************************************************************** */
1949 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_PM_SWITCH, sizeof(hi_u32));
1950 *((hi_u32 *)(write_msg.auc_value)) = pm_cfg;
1951 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_u32),
1952 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
1953 if (oal_unlikely(ret != HI_SUCCESS)) {
1954 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_pm_switch::return err code [%u]!}\r\n", ret);
1955 return ret;
1956 }
1957
1958 return HI_SUCCESS;
1959 }
1960
1961 /* ****************************************************************************
1962 功能描述 : 设置device 平台是否允许进入低功耗
1963 命令格式 : hipriv wlan0 pm_switch 1/0
1964 修改历史 :
1965 1.日 期 : 2020年6月4日
1966 作 者 : HiSilicon
1967 修改内容 : 新生成函数
1968 **************************************************************************** */
wal_hipriv_set_wlan_pm_enable(oal_net_device_stru * netdev,hi_char * pc_param)1969 hi_u32 wal_hipriv_set_wlan_pm_enable(oal_net_device_stru *netdev, hi_char *pc_param)
1970 {
1971 hi_u32 ret;
1972 hi_u32 pm_cfg;
1973
1974 (void)netdev;
1975 if (pc_param == HI_NULL) {
1976 return HI_FAIL;
1977 }
1978
1979 pm_cfg = (hi_u32)oal_atoi(pc_param);
1980 if (pm_cfg == 1) { /* 1: enable */
1981 ret = hi_wifi_plat_pm_enable();
1982 } else if (pm_cfg == 0) { /* 0: disable */
1983 ret = hi_wifi_plat_pm_disable();
1984 } else {
1985 printk("parameter error, enbale:1, disable:0 \r\n");
1986 ret = HI_FAIL;
1987 }
1988 return ret;
1989 }
1990
wal_hipriv_setwk_fail_process(oal_net_device_stru * netdev,hi_char * pc_param)1991 hi_u32 wal_hipriv_setwk_fail_process(oal_net_device_stru *netdev, hi_char *pc_param)
1992 {
1993 hi_s32 pid;
1994
1995 (void)netdev;
1996
1997 if (pc_param == HI_NULL) {
1998 return HI_FAIL;
1999 }
2000 pid = (hi_u32)oal_atoi(pc_param);
2001 if (pid <= 0) {
2002 printk("[ERROR]pid less 0 \r\n");
2003 return HI_FAIL;
2004 }
2005 wlan_pm_set_wkfail_pid(pid);
2006 return HI_SUCCESS;
2007 }
2008
wal_hipriv_dump_pm_info(oal_net_device_stru * netdev,hi_char * pc_param)2009 hi_u32 wal_hipriv_dump_pm_info(oal_net_device_stru *netdev, hi_char *pc_param)
2010 {
2011 hi_u8 is_host;
2012
2013 (void)netdev;
2014
2015 if (pc_param == HI_NULL) {
2016 return HI_FAIL;
2017 }
2018
2019 is_host = (hi_u8)oal_atoi(pc_param);
2020 if (is_host > 1) { /* > 1: 无效参数 */
2021 printk("parameter error, host:1, device:0 \r\n");
2022 return HI_FAIL;
2023 }
2024 hi_wlan_dump_pm_info(is_host);
2025 return HI_SUCCESS;
2026 }
2027
2028 /* ****************************************************************************
2029 功能描述 : 通知device侧,host睡眠状态
2030 命令格式 : hipriv wlan0 pm_switch 1/0
2031 修改历史 :
2032 1.日 期 : 2020年6月4日
2033 作 者 : HiSilicon
2034 修改内容 : 新生成函数
2035 **************************************************************************** */
wal_hipriv_set_host_sleep_status(oal_net_device_stru * netdev,hi_char * pc_param)2036 hi_u32 wal_hipriv_set_host_sleep_status(oal_net_device_stru *netdev, hi_char *pc_param)
2037 {
2038 hi_u32 ret;
2039 hi_u32 pm_cfg;
2040
2041 (void)netdev;
2042 if (pc_param == HI_NULL) {
2043 return HI_FAIL;
2044 }
2045
2046 pm_cfg = (hi_u32)oal_atoi(pc_param);
2047 if (pm_cfg == 1) { /* 1: enable */
2048 ret = (hi_u32)hi_wifi_host_request_sleep(1);
2049 } else if (pm_cfg == 0) { /* 0: disable */
2050 ret = (hi_u32)hi_wifi_host_request_sleep(0);
2051 } else {
2052 printk("parameter error, sleep:1, wake:0 \r\n");
2053 ret = HI_FAIL;
2054 }
2055 return ret;
2056 }
2057
2058
2059 #endif
2060
2061 #if (_PRE_MULTI_CORE_MODE_OFFLOAD_DMAC == _PRE_MULTI_CORE_MODE)
2062 #ifdef _PRE_WLAN_FEATURE_HIPRIV
2063 /* ****************************************************************************
2064 功能描述 : 根据下发的对应标记位,上报对应的vap信息
2065
2066 修改历史 :
2067 1.日 期 : 2015年7月20日
2068 作 者 : HiSilicon
2069 修改内容 : 新生成函数
2070
2071 **************************************************************************** */
wal_hipriv_report_vap_info(oal_net_device_stru * netdev,hi_char * pc_param)2072 static hi_u32 wal_hipriv_report_vap_info(oal_net_device_stru *netdev, hi_char *pc_param)
2073 {
2074 wal_msg_write_stru write_msg;
2075 hi_u32 off_set;
2076 hi_u32 flag_value;
2077 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
2078 hi_u32 ret;
2079
2080 /* sh hipriv.sh "wlan0 report_vap_info flags_value" */
2081 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
2082 if (ret != HI_SUCCESS) {
2083 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_report_vap_info::wal_get_cmd_one_arg return err_code [%u]!}\r\n",
2084 ret);
2085 return ret;
2086 }
2087
2088 flag_value = (hi_u32)oal_atoi(ac_name);
2089
2090 /* **************************************************************************
2091 抛事件到wal层处理
2092 ************************************************************************** */
2093 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_REPORT_VAP_INFO, sizeof(hi_s32));
2094
2095 /* 填写消息体,参数 */
2096 *(hi_u32 *)(write_msg.auc_value) = flag_value;
2097
2098 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_s32),
2099 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
2100 if (oal_unlikely(ret != HI_SUCCESS)) {
2101 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_report_vap_info::wal_send_cfg_event return err code [%u]!}\r\n",
2102 ret);
2103 return ret;
2104 }
2105
2106 return HI_SUCCESS;
2107 }
2108 #endif
2109 #endif
2110
2111 #ifdef _PRE_WLAN_FEATURE_HIPRIV
2112 /* ****************************************************************************
2113 功能描述 : 设置随机mac addr扫描是否开启开关
2114 **************************************************************************** */
2115 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_set_random_mac_addr_scan(oal_net_device_stru * netdev,hi_char * pc_param)2116 static hi_u32 wal_hipriv_set_random_mac_addr_scan(oal_net_device_stru *netdev, hi_char *pc_param)
2117 {
2118 wal_msg_write_stru write_msg;
2119 hi_u32 off_set;
2120 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
2121 hi_u32 ret;
2122 hi_u8 rand_mac_addr_scan_switch;
2123
2124 /* sh hipriv.sh "Hisilicon0 random_mac_addr_scan 0|1(开关)" */
2125 /* 获取帧方向 */
2126 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
2127 if (ret != HI_SUCCESS) {
2128 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_random_mac_addr_scan::get switch return err_code[%d]!}", ret);
2129 return ret;
2130 }
2131
2132 rand_mac_addr_scan_switch = (hi_u8)oal_atoi(ac_name);
2133 /* 开关的取值范围为0|1,做参数合法性判断 */
2134 if (rand_mac_addr_scan_switch > 1) {
2135 oam_error_log1(0, OAM_SF_ANY, "{wal_hipriv_set_random_mac_addr_scan::param is error, switch_value[%d]!}",
2136 rand_mac_addr_scan_switch);
2137 return HI_FAIL;
2138 }
2139
2140 /* **************************************************************************
2141 抛事件到wal层处理
2142 ************************************************************************** */
2143 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_RANDOM_MAC_ADDR_SCAN, sizeof(hi_s32));
2144 *((hi_s32 *)(write_msg.auc_value)) = (hi_u32)rand_mac_addr_scan_switch;
2145
2146 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_s32),
2147 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
2148 if (oal_unlikely(ret != HI_SUCCESS)) {
2149 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_random_mac_addr_scan::return err code[%u]!}", ret);
2150 return ret;
2151 }
2152
2153 return HI_SUCCESS;
2154 }
2155 #endif
2156
2157 #ifdef _PRE_WLAN_RF_110X_CALI_DPD
2158 #ifdef _PRE_WLAN_FEATURE_HIPRIV
2159 /* ****************************************************************************
2160 功能描述 : 开启DPD
2161
2162 修改历史 :
2163 1.日 期 : 2014年6月17日
2164 作 者 : HiSilicon
2165 修改内容 : 新生成函数
2166 **************************************************************************** */
2167 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_start_dpd(oal_net_device_stru * netdev,hi_char * pc_param)2168 static hi_u32 wal_hipriv_start_dpd(oal_net_device_stru *netdev, hi_char *pc_param)
2169 {
2170 wal_msg_write_stru write_msg;
2171 hi_u32 ret;
2172
2173 /* **************************************************************************
2174 抛事件到wal层处理
2175 ************************************************************************** */
2176 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_START_DPD, sizeof(wal_specific_event_type_param_stru));
2177
2178 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
2179 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(wal_specific_event_type_param_stru), (hi_u8 *)&write_msg, HI_FALSE,
2180 HI_NULL);
2181 if (oal_unlikely(ret != HI_SUCCESS)) {
2182 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_start_dpd::return err code[%u]!}", ret);
2183 return ret;
2184 }
2185
2186 return HI_SUCCESS;
2187 }
2188 #endif
2189 #endif
2190
2191 #if defined(_PRE_WLAN_FEATURE_HIPRIV) || defined(_PRE_WLAN_FEATURE_SIGMA)
2192 /* ****************************************************************************
2193 功能描述 : 设置UAPSD开关
2194
2195 修改历史 :
2196 1.日 期 : 2016年1月30日,星期六
2197 作 者 : HiSilicon
2198 修改内容 : 新生成函数
2199 **************************************************************************** */
2200 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_set_uapsd_cap(oal_net_device_stru * netdev,hi_char * pc_param)2201 hi_u32 wal_hipriv_set_uapsd_cap(oal_net_device_stru *netdev, hi_char *pc_param)
2202 {
2203 wal_msg_write_stru write_msg;
2204 hi_s32 l_tmp;
2205 hi_u32 off_set;
2206 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
2207 hi_u32 ret;
2208 hi_u8 orig_dev_state = wal_dev_is_running();
2209
2210 if (wal_netdev_stop(netdev) != HI_SUCCESS) {
2211 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_uapsd_cap::wal_netdev_stop failed\r\n");
2212 return HI_FAIL;
2213 }
2214
2215 /* 此处将解析出"1"或"0"存入ac_name */
2216 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
2217 if (ret != HI_SUCCESS) {
2218 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_uapsd_cap::wal_get_cmd_one_arg return err_code[%d]}\r\n", ret);
2219 return ret;
2220 }
2221
2222 /* 针对解析出的不同命令,对UAPSD开关进行不同的设置 */
2223 if (0 == (strcmp("0", ac_name))) {
2224 l_tmp = 0;
2225 } else if (0 == (strcmp("1", ac_name))) {
2226 l_tmp = 1;
2227 } else {
2228 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_uapsd_cap::the log switch command is error [%p]!}\r\n",
2229 (uintptr_t)ac_name);
2230 return HI_ERR_CODE_INVALID_CONFIG;
2231 }
2232
2233 /* **************************************************************************
2234 抛事件到wal层处理
2235 ************************************************************************** */
2236 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_UAPSD_EN, sizeof(hi_s32));
2237 *((hi_s32 *)(write_msg.auc_value)) = l_tmp; /* 设置配置命令参数 */
2238
2239 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_s32),
2240 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
2241 if (oal_unlikely(ret != HI_SUCCESS)) {
2242 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_uapsd_cap::return err code [%u]!}\r\n", ret);
2243 return ret;
2244 }
2245
2246 if (orig_dev_state == HI_TRUE) {
2247 if (wal_netdev_open(netdev) != HI_SUCCESS) {
2248 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_uapsd_cap::wal_netdev_stop failed\r\n");
2249 return HI_FAIL;
2250 }
2251 }
2252
2253 return HI_SUCCESS;
2254 }
2255 #endif
2256
2257 /* ****************************************************************************
2258 功能描述 : 设置non-HT模式下的速率
2259
2260 修改历史 :
2261 1.日 期 : 2014年3月12日
2262 作 者 : HiSilicon
2263 修改内容 : 新生成函数
2264 **************************************************************************** */
2265 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_set_rate(oal_net_device_stru * netdev,hi_char * pc_param)2266 hi_u32 wal_hipriv_set_rate(oal_net_device_stru *netdev, hi_char *pc_param)
2267 {
2268 wal_msg_write_stru write_msg;
2269 hi_u32 off_set;
2270 hi_u32 ret;
2271 mac_cfg_non_ht_rate_stru *set_rate_param = HI_NULL;
2272 wlan_legacy_rate_value_enum_uint8 rate_index;
2273 hi_char ac_arg[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
2274
2275 /* **************************************************************************
2276 抛事件到wal层处理
2277 ************************************************************************** */
2278 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_RATE, sizeof(mac_cfg_non_ht_rate_stru));
2279
2280 /* 解析并设置配置命令参数 */
2281 set_rate_param = (mac_cfg_non_ht_rate_stru *)(write_msg.auc_value);
2282
2283 /* 获取速率值字符串 */
2284 ret = wal_get_cmd_one_arg(pc_param, ac_arg, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
2285 if (ret != HI_SUCCESS) {
2286 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_rate::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
2287 return ret;
2288 }
2289
2290 /* 解析是设置为哪一级速率 */
2291 for (rate_index = 0; rate_index < WLAN_LEGACY_RATE_VALUE_BUTT; rate_index++) {
2292 if (!strcmp(g_pauc_non_ht_rate_tbl[rate_index], ac_arg)) {
2293 break;
2294 }
2295 }
2296
2297 /* 根据速率配置TX描述符中的协议模式 */
2298 if (rate_index <= WLAN_SHORT_11B_11_M_BPS) {
2299 set_rate_param->protocol_mode = WLAN_11B_PHY_PROTOCOL_MODE;
2300 } else if (rate_index >= WLAN_LEGACY_OFDM_48M_BPS && rate_index <= WLAN_LEGACY_OFDM_9M_BPS) {
2301 set_rate_param->protocol_mode = WLAN_LEGACY_OFDM_PHY_PROTOCOL_MODE;
2302 } else {
2303 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_rate::invalid rate!}\r\n");
2304 return HI_ERR_CODE_INVALID_CONFIG;
2305 }
2306
2307 /* 解析要设置为多大的值 */
2308 set_rate_param->rate = rate_index;
2309
2310 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
2311 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_non_ht_rate_stru), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
2312 if (oal_unlikely(ret != HI_SUCCESS)) {
2313 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_rate::return err code [%u]!}\r\n", ret);
2314 return ret;
2315 }
2316 return HI_SUCCESS;
2317 }
2318
2319 /* ****************************************************************************
2320 功能描述 : 设置HT模式下的速率
2321
2322 修改历史 :
2323 1.日 期 : 2014年3月12日
2324 作 者 : HiSilicon
2325 修改内容 : 新生成函数
2326 **************************************************************************** */
2327 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_set_mcs(oal_net_device_stru * netdev,hi_char * pc_param)2328 hi_u32 wal_hipriv_set_mcs(oal_net_device_stru *netdev, hi_char *pc_param)
2329 {
2330 wal_msg_write_stru write_msg;
2331 hi_u32 off_set;
2332 hi_u32 ret;
2333 mac_cfg_tx_comp_stru *set_mcs_param = HI_NULL;
2334 hi_s32 l_mcs;
2335 hi_char ac_arg[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
2336 hi_s32 l_idx = 0;
2337
2338 /* **************************************************************************
2339 抛事件到wal层处理
2340 ************************************************************************** */
2341 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_MCS, sizeof(mac_cfg_tx_comp_stru));
2342
2343 /* 解析并设置配置命令参数 */
2344 set_mcs_param = (mac_cfg_tx_comp_stru *)(write_msg.auc_value);
2345
2346 /* 获取速率值字符串 */
2347 ret = wal_get_cmd_one_arg(pc_param, ac_arg, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
2348 if (ret != HI_SUCCESS) {
2349 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_mcs::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
2350 return ret;
2351 }
2352
2353 /* 输入命令合法性检测 */
2354 while (ac_arg[l_idx] != '\0') {
2355 if (isdigit(ac_arg[l_idx])) {
2356 l_idx++;
2357 continue;
2358 } else {
2359 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_mcs::input illegal!}\r\n");
2360 return HI_ERR_CODE_INVALID_CONFIG;
2361 }
2362 }
2363
2364 /* 解析要设置为多大的值 */
2365 l_mcs = oal_atoi(ac_arg);
2366 if ((l_mcs < WAL_HIPRIV_HT_MCS_MIN) || (l_mcs > WAL_HIPRIV_HT_MCS_MAX)) {
2367 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_mcs::input val out of range [%d]!}\r\n", l_mcs);
2368 return HI_ERR_CODE_INVALID_CONFIG;
2369 }
2370
2371 set_mcs_param->param = (hi_u8)l_mcs;
2372 set_mcs_param->protocol_mode = WLAN_HT_PHY_PROTOCOL_MODE;
2373
2374 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_tx_comp_stru),
2375 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
2376 if (oal_unlikely(ret != HI_SUCCESS)) {
2377 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_mcs::return err code [%u]!}\r\n", ret);
2378 return ret;
2379 }
2380 return HI_SUCCESS;
2381 }
2382
2383 /* ****************************************************************************
2384 功能描述 : 获取带宽
2385
2386 修改历史 :
2387 1.日 期 : 2014年3月12日
2388 作 者 : HiSilicon
2389 修改内容 : 新生成函数
2390 **************************************************************************** */
wal_hipriv_get_bw(oal_net_device_stru * netdev,hal_channel_assemble_enum_uint8 * pen_bw_index)2391 hi_u32 wal_hipriv_get_bw(oal_net_device_stru *netdev, hal_channel_assemble_enum_uint8 *pen_bw_index)
2392 {
2393 hi_u32 ret;
2394 wal_msg_query_stru query_msg;
2395 wal_msg_stru *rsp_msg = HI_NULL;
2396 wal_msg_rsp_stru *query_rsp_msg = HI_NULL;
2397 mac_cfg_tx_comp_stru *set_bw_param = HI_NULL;
2398
2399 if (netdev == HI_NULL) {
2400 oam_error_log0(0, 0, "wal_hipriv_get_bw device NULL.");
2401 return HI_ERR_CODE_PTR_NULL;
2402 }
2403
2404 query_msg.wid = WLAN_CFGID_SET_BW;
2405 /* 发送消息 */
2406 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_QUERY, WAL_MSG_WID_LENGTH, (hi_u8 *)&query_msg, HI_TRUE, &rsp_msg);
2407 if ((ret != HI_SUCCESS) || (rsp_msg == HI_NULL)) {
2408 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_get_bw::wal_alloc_cfg_event return err code %u!}\r\n", ret);
2409 return HI_FAIL;
2410 }
2411
2412 /* 处理返回消息 */
2413 query_rsp_msg = (wal_msg_rsp_stru *)(rsp_msg->auc_msg_data);
2414 set_bw_param = (mac_cfg_tx_comp_stru *)(query_rsp_msg->auc_value);
2415 *pen_bw_index = (hal_channel_assemble_enum_uint8)set_bw_param->param;
2416 oal_free(rsp_msg);
2417
2418 return ret;
2419 }
2420
2421 /* ****************************************************************************
2422 功能描述 : 设置带宽
2423 修改历史 :
2424 1.日 期 : 2014年3月12日
2425 作 者 : HiSilicon
2426 修改内容 : 新生成函数
2427 **************************************************************************** */
2428 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_set_bw(oal_net_device_stru * netdev,hi_char * pc_param)2429 hi_u32 wal_hipriv_set_bw(oal_net_device_stru *netdev, hi_char *pc_param)
2430 {
2431 wal_msg_write_stru write_msg;
2432 hi_u32 off_set, ret;
2433 hal_channel_assemble_enum_uint8 bw_index = WLAN_BAND_ASSEMBLE_20M;
2434 hi_char ac_arg[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
2435
2436 /* **************************************************************************
2437 抛事件到wal层处理
2438 ************************************************************************** */
2439 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_BW, sizeof(mac_cfg_tx_comp_stru));
2440
2441 /* 解析并设置配置命令参数 */
2442 mac_cfg_tx_comp_stru *set_bw_param = (mac_cfg_tx_comp_stru *)(write_msg.auc_value);
2443
2444 /* 获取带宽值字符串 */
2445 if (wal_get_cmd_one_arg(pc_param, ac_arg, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set) != HI_SUCCESS) {
2446 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_bw::wal_get_cmd_one_arg failed!}\r\n");
2447 return HI_FAIL;
2448 }
2449
2450 if (strcmp(ac_arg, "info") == 0) {
2451 if (wal_hipriv_get_bw(netdev, &bw_index) != HI_SUCCESS) {
2452 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_bw::wal_hipriv_get_bw failed!}\r\n");
2453 return HI_FAIL;
2454 }
2455 if (bw_index == WLAN_BAND_ASSEMBLE_5M) {
2456 oam_info_log0(0, OAM_SF_ANY, "{wal_hipriv_set_bw::HIEX 5M.}\n");
2457 } else if (bw_index == WLAN_BAND_ASSEMBLE_10M) {
2458 oam_info_log0(0, OAM_SF_ANY, "{wal_hipriv_set_bw::HIEX 10M.}\n");
2459 } else if (bw_index == WLAN_BAND_ASSEMBLE_20M) {
2460 oam_info_log0(0, OAM_SF_ANY, "{wal_hipriv_set_bw::LEGACY 20M.}\n");
2461 }
2462 return HI_SUCCESS;
2463 } else if ((OAL_IFF_RUNNING & oal_netdevice_flags(netdev)) != 0) { /* 设备在up状态不允许配置,必须先down */
2464 oam_error_log1(0, OAM_SF_ANY, "{wal_hipriv_set_bw::device busy,down it first %d}", oal_netdevice_flags(netdev));
2465 return HI_FAIL;
2466 }
2467
2468 /* 解析要设置为多大的值 */
2469 for (bw_index = 0; bw_index < WLAN_BAND_ASSEMBLE_AUTO; bw_index++) {
2470 if (strcmp(g_pauc_bw_tbl[bw_index], ac_arg) == 0) {
2471 break;
2472 }
2473 }
2474
2475 /* 检查命令是否打错 */
2476 if (bw_index >= WLAN_BAND_ASSEMBLE_AUTO) {
2477 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_bw::not support this bandwidth!}\r\n");
2478 return HI_ERR_CODE_INVALID_CONFIG;
2479 }
2480
2481 set_bw_param->param = (hi_u8)(bw_index);
2482 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_tx_comp_stru),
2483 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
2484 if (oal_unlikely(ret != HI_SUCCESS)) {
2485 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_bw::return err code [%u]!}\r\n", ret);
2486 return ret;
2487 }
2488
2489 return HI_SUCCESS;
2490 }
2491
2492 /* ****************************************************************************
2493 功能描述 : 数据常发
2494
2495 修改历史 :
2496 1.日 期 : 2014年3月12日
2497 作 者 : HiSilicon
2498 修改内容 : 新生成函数
2499
2500 **************************************************************************** */
wal_hipriv_always_tx(oal_net_device_stru * netdev,hi_u8 tx_flag)2501 hi_u32 wal_hipriv_always_tx(oal_net_device_stru *netdev, hi_u8 tx_flag)
2502 {
2503 wal_msg_write_stru write_msg;
2504 hi_u32 ret;
2505 mac_cfg_tx_comp_stru *set_bcast_param = HI_NULL;
2506
2507 /* **************************************************************************
2508 抛事件到wal层处理
2509 ************************************************************************** */
2510 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_ALWAYS_TX, sizeof(mac_cfg_tx_comp_stru));
2511
2512 /* 解析并设置配置命令参数 */
2513 set_bcast_param = (mac_cfg_tx_comp_stru *)(write_msg.auc_value);
2514 set_bcast_param->param = tx_flag;
2515 if (tx_flag == 0) {
2516 set_bcast_param->payload_flag = RF_PAYLOAD_ALL_ZERO;
2517 set_bcast_param->payload_len = 0;
2518 } else {
2519 set_bcast_param->payload_flag = RF_PAYLOAD_RAND;
2520 set_bcast_param->payload_len = 2000; /* 2000:常发payload长度 */
2521 }
2522
2523 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_tx_comp_stru),
2524 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
2525 if (oal_unlikely(ret != HI_SUCCESS)) {
2526 oam_warning_log2(0, OAM_SF_ANY, "{wal_hipriv_always_tx:: return Err=%u, tx_flag=%d}", ret, tx_flag);
2527 } else {
2528 if ((tx_flag == WAL_ALWAYS_TX_RF) || (tx_flag == WAL_ALWAYS_TX_DC)) {
2529 #if _PRE_WLAN_FEATURE_MFG_TEST
2530 printk("OK\r\n");
2531 #endif
2532 }
2533 }
2534
2535 return ret;
2536 }
2537
2538 /* ****************************************************************************
2539 功能描述 : 数据常收
2540
2541 修改历史 :
2542 1.日 期 : 2014年3月28日
2543 作 者 : HiSilicon
2544 修改内容 : 新生成函数
2545
2546 **************************************************************************** */
wal_hipriv_always_rx(oal_net_device_stru * netdev,hi_u8 rx_flag,hi_u8 mac_filter_flag)2547 hi_u32 wal_hipriv_always_rx(oal_net_device_stru *netdev, hi_u8 rx_flag, hi_u8 mac_filter_flag)
2548 {
2549 wal_msg_write_stru write_msg;
2550 hi_u32 ret;
2551 hi_u8 *param = write_msg.auc_value;
2552
2553 /* 安全编程规则6.6例外(1) 对固定长度的结构体进行内存初始化 */
2554 memset_s(&write_msg, sizeof(wal_msg_write_stru), 0, sizeof(wal_msg_write_stru));
2555
2556 param[0] = rx_flag;
2557 param[1] = mac_filter_flag;
2558
2559 /* **************************************************************************
2560 抛事件到wal层处理
2561 ************************************************************************** */
2562 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_ALWAYS_RX, 2); /* 常收开关和过滤开关占用2字节 */
2563
2564 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
2565 WAL_MSG_WRITE_MSG_HDR_LENGTH + 2, /* 常收开关和过滤开关占用2字节 */
2566 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
2567 if (oal_unlikely(ret != HI_SUCCESS)) {
2568 oam_warning_log2(0, OAM_SF_ANY, "{wal_hipriv_always_rx::return err code=%u, rx_flag=%d}", ret, rx_flag);
2569 } else {
2570 if (rx_flag == 1) {
2571 #if _PRE_WLAN_FEATURE_MFG_TEST
2572 printk("OK\r\n");
2573 #endif
2574 }
2575 }
2576
2577 return ret;
2578 }
2579
2580 #if (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION)
2581 #ifdef _PRE_WLAN_FEATURE_HIPRIV
2582 #if (LINUX_VERSION_CODE < kernel_version(3, 4, 35))
2583 /* ****************************************************************************
2584 功能描述 : proc write函数
2585 输入参数 : 无
2586 输出参数 : 无
2587 返 回 值 : 处理字节的长度
2588 **************************************************************************** */
wal_hipriv_proc_write(hi_s32 fd,const hi_char * pc_buffer,hi_u32 len,hi_void * data)2589 static hi_u32 wal_hipriv_proc_write(hi_s32 fd, const hi_char *pc_buffer, hi_u32 len, hi_void *data)
2590 {
2591 hi_char *pc_cmd = HI_NULL;
2592 hi_u32 ret;
2593
2594 if (len > WAL_HIPRIV_CMD_MAX_LEN) {
2595 oam_error_log1(0, OAM_SF_ANY, "{wal_hipriv_proc_write::ul_len>WAL_HIPRIV_CMD_MAX_LEN, ul_len [%d]!}\r\n", len);
2596 return HI_FAIL;
2597 }
2598
2599 pc_cmd = oal_mem_alloc(OAL_MEM_POOL_ID_LOCAL, WAL_HIPRIV_CMD_MAX_LEN);
2600 if (oal_unlikely(pc_cmd == HI_NULL)) {
2601 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_proc_write::alloc mem return null ptr!}\r\n");
2602 return HI_ERR_WIFI_WAL_MALLOC_FAIL;
2603 }
2604 /* 安全编程规则6.6例外(3)从堆中分配内存后,赋予初值 */
2605 memset_s(pc_cmd, WAL_HIPRIV_CMD_MAX_LEN, 0, WAL_HIPRIV_CMD_MAX_LEN);
2606
2607 ret = oal_copy_from_user((hi_void *)pc_cmd, len, pc_buffer, len);
2608 /* copy_from_user函数的目的是从用户空间拷贝数据到内核空间,失败返回没有被拷贝的字节数,成功返回0 */
2609 if (ret > 0) {
2610 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_proc_write::oal_copy_from_user return ul_ret[%d]!}\r\n", ret);
2611 oal_mem_free(pc_cmd);
2612 return HI_ERR_WIFI_WAL_FAILURE;
2613 }
2614
2615 pc_cmd[len - 1] = '\0';
2616 if (len == wal_hipriv_entry(pc_cmd, (hi_u32)len)) {
2617 oam_warning_log0(0, OAM_SF_ANY, "hipriv success!");
2618 } else {
2619 oam_warning_log0(0, OAM_SF_ANY, "hipriv failed!");
2620 }
2621 oal_mem_free(pc_cmd);
2622
2623 return len;
2624 }
2625 #endif
2626 #endif
2627 #ifdef _PRE_CONFIG_CONN_HISI_SYSFS_SUPPORT
2628 /* ****************************************************************************
2629 功能描述 : 创建proc入口
2630 输入参数 : p_proc_arg: 创建proc参数,此处不使用
2631 输出参数 : 无
2632 返 回 值 : 错误码
2633 **************************************************************************** */
wal_hipriv_create_proc(hi_void * proc_arg)2634 hi_u32 wal_hipriv_create_proc(hi_void *proc_arg)
2635 {
2636 #ifdef _PRE_CONFIG_CONN_HISI_SYSFS_SUPPORT
2637 hi_u32 ret;
2638 #endif
2639
2640 #if (LINUX_VERSION_CODE >= kernel_version(3, 4, 35)) || (_PRE_OS_VERSION_LITEOS == _PRE_OS_VERSION)
2641 g_proc_entry = HI_NULL;
2642 #else
2643
2644 /* 420十进制对应八进制是0644 linux模式定义 S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH); */
2645 /* S_IRUSR文件所有者具可读取权限, S_IWUSR文件所有者具可写入权限, S_IRGRP用户组具可读取权限,
2646 * S_IROTH其他用户具可读取权限 */
2647 g_proc_entry = oal_create_proc_entry(WAL_HIPRIV_PROC_ENTRY_NAME, 420, NULL); /* 420十进制对应八进制是0644 */
2648 if (g_proc_entry == HI_NULL) {
2649 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_create_proc::oal_create_proc_entry return null ptr!}\r\n");
2650 return HI_FAIL;
2651 }
2652
2653 g_proc_entry->data = proc_arg;
2654 g_proc_entry->nlink = 1; /* linux创建proc默认值 */
2655 g_proc_entry->read_proc = HI_NULL;
2656
2657 g_proc_entry->write_proc = (write_proc_t *)wal_hipriv_proc_write;
2658
2659 #endif
2660 /* hi1102-cb add sys for 51/02 */
2661 #ifdef _PRE_CONFIG_CONN_HISI_SYSFS_SUPPORT
2662 g_gp_sys_kobject = oal_get_sysfs_root_object();
2663 if (g_gp_sys_kobject == HI_NULL) {
2664 oam_error_log0(0, OAM_SF_ANY, "{wal_hipriv_create_proc::get sysfs root object failed!}");
2665 return HI_FALSE;
2666 }
2667 ret = (hi_u32)oal_debug_sysfs_create_group(g_gp_sys_kobject, &hipriv_attribute_group);
2668 return ret;
2669 #else
2670 return HI_SUCCESS;
2671 #endif
2672 }
2673
2674 /* ****************************************************************************
2675 功能描述 : 删除proc
2676 返 回 值 : HI_SUCCESS
2677 **************************************************************************** */
wal_hipriv_remove_proc(hi_void)2678 hi_u32 wal_hipriv_remove_proc(hi_void)
2679 {
2680 /* 卸载时删除sysfs */
2681 if (g_gp_sys_kobject != HI_NULL) {
2682 oal_debug_sysfs_remove_group(g_gp_sys_kobject, &hipriv_attribute_group);
2683 kobject_del(g_gp_sys_kobject);
2684 g_gp_sys_kobject = HI_NULL;
2685 }
2686 oal_conn_sysfs_root_obj_exit();
2687 oal_conn_sysfs_root_boot_obj_exit();
2688 if (g_proc_entry != HI_NULL) {
2689 oal_remove_proc_entry(WAL_HIPRIV_PROC_ENTRY_NAME, HI_NULL);
2690 g_proc_entry = HI_NULL;
2691 }
2692
2693 return HI_SUCCESS;
2694 }
2695 #endif
2696 #endif
2697
2698 #if (_PRE_MULTI_CORE_MODE_OFFLOAD_DMAC == _PRE_MULTI_CORE_MODE)
2699 #ifdef _PRE_WLAN_FEATURE_HIPRIV
2700 /* ****************************************************************************
2701 功能描述 : 查询寄存器值(hipriv "Hisilicon0 reginfo regtype(soc/mac/phy) startaddr endaddr")
2702
2703 修改历史 :
2704 1.日 期 : 2013年5月29日
2705 作 者 : HiSilicon
2706 修改内容 : 新生成函数
2707
2708 **************************************************************************** */
wal_hipriv_reg_info(oal_net_device_stru * netdev,hi_char * pc_param)2709 static hi_u32 wal_hipriv_reg_info(oal_net_device_stru *netdev, hi_char *pc_param)
2710 {
2711 wal_msg_write_stru write_msg;
2712 hi_u32 ret;
2713 hi_u16 us_len;
2714
2715 /* **************************************************************************
2716 抛事件到wal层处理
2717 ************************************************************************** */
2718 if (memcpy_s(write_msg.auc_value, sizeof(write_msg.auc_value), pc_param, strlen(pc_param)) != EOK) {
2719 oam_error_log0(0, OAM_SF_ANY, "{wal_hipriv_reg_info::mem safe function err!}");
2720 return HI_FAIL;
2721 }
2722 write_msg.auc_value[strlen(pc_param)] = '\0';
2723 us_len = (hi_u16)(strlen(pc_param) + 1);
2724 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_REG_INFO, us_len);
2725
2726 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + us_len, (hi_u8 *)&write_msg,
2727 HI_FALSE, HI_NULL);
2728 if (oal_unlikely(ret != HI_SUCCESS)) {
2729 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_reg_info::return err code [%u]!}\r\n", ret);
2730 return ret;
2731 }
2732
2733 return HI_SUCCESS;
2734 }
2735 #endif
2736 #endif
2737
2738 #ifdef _PRE_WLAN_FEATURE_WOW
2739 #ifdef _PRE_WLAN_FEATURE_HIPRIV
2740 /* ****************************************************************************
2741 功能描述 : hipriv host sleep function
2742
2743 修改历史 :
2744 1.日 期 : 2016年3月23日
2745 作 者 : HiSilicon
2746 修改内容 : 新生成函数
2747 **************************************************************************** */
2748 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_host_sleep_switch(oal_net_device_stru * netdev,hi_char * pc_param)2749 static hi_u32 wal_hipriv_host_sleep_switch(oal_net_device_stru *netdev, hi_char *pc_param)
2750 {
2751 wal_msg_write_stru write_msg;
2752 hi_s32 l_tmp;
2753 hi_u32 off_set;
2754 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
2755 hi_u32 ret;
2756
2757 /* set FW no send any frame to driver, 0 will close this function: hipriv "wlan0 host_sleep 0|1" */
2758 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
2759 if (ret != HI_SUCCESS) {
2760 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_host_sleep_switch::wal_get_cmd_one_arg return err_code [%u]!}\r\n",
2761 ret);
2762 return ret;
2763 }
2764
2765 if ((0 != strcmp("0", ac_name)) && (0 != strcmp("1", ac_name))) {
2766 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_host_sleep_switch::invalid switch value}\r\n");
2767 return HI_ERR_CODE_INVALID_CONFIG;
2768 }
2769
2770 l_tmp = oal_atoi(ac_name);
2771
2772 /* **************************************************************************
2773 抛事件到wal层处理
2774 ************************************************************************** */
2775 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_WOW_ACTIVATE_EN, sizeof(hi_s32));
2776 *((hi_s32 *)(write_msg.auc_value)) = l_tmp; /* 设置配置命令参数 */
2777
2778 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_s32),
2779 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
2780 if (oal_unlikely(ret != HI_SUCCESS)) {
2781 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_wow_activate_switch::return err code[%u]!}\r\n", ret);
2782 return ret;
2783 }
2784
2785 /* **************************************************************************
2786 抛事件到wal层处理
2787 ************************************************************************** */
2788 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_HOST_SLEEP_EN, sizeof(hi_s32));
2789 *((hi_s32 *)(write_msg.auc_value)) = l_tmp; /* 设置配置命令参数 */
2790
2791 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_s32),
2792 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
2793 if (oal_unlikely(ret != HI_SUCCESS)) {
2794 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_host_sleep_switch::return err code[%u]!}\r\n", ret);
2795 return ret;
2796 }
2797
2798 return HI_SUCCESS;
2799 }
2800
2801 /* ****************************************************************************
2802 功能描述 : hipriv set wow function
2803
2804 修改历史 :
2805 1.日 期 : 2016年3月23日
2806 作 者 : HiSilicon
2807 修改内容 : 新生成函数
2808 **************************************************************************** */
2809 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_set_wow(oal_net_device_stru * netdev,hi_char * pc_param)2810 static hi_u32 wal_hipriv_set_wow(oal_net_device_stru *netdev, hi_char *pc_param)
2811 {
2812 wal_msg_write_stru write_msg;
2813 hi_s32 l_tmp;
2814 hi_u32 off_set;
2815 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
2816 hi_u32 ret;
2817 hi_char *pc_end = HI_NULL;
2818
2819 /* Enable/disable WOW events: hipriv "wlan0 wow <value>" 0:clear all events, Bit 0:Magic Packet Bit 1:NetPattern
2820 Bit 2:loss-of-link Bit 3:retrograde tsf Bit 4:loss of beacon Bit 17:TCP keep alive timeout */
2821 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
2822 if (ret != HI_SUCCESS) {
2823 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_wow::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
2824 return ret;
2825 }
2826
2827 if ((*ac_name != '0') || ((*(ac_name + 1) != 'x') && (*(ac_name + 1) != 'X'))) {
2828 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_wow::invalid wow value}\r\n");
2829 return HI_ERR_CODE_INVALID_CONFIG;
2830 }
2831
2832 l_tmp = oal_strtol(ac_name, &pc_end, 16); /* 16: 转换为16进制 */
2833
2834 /* **************************************************************************
2835 抛事件到wal层处理
2836 ************************************************************************** */
2837 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_WOW, sizeof(hi_s32));
2838 *((hi_s32 *)(write_msg.auc_value)) = l_tmp; /* 设置配置命令参数 */
2839
2840 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_s32),
2841 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
2842 if (oal_unlikely(ret != HI_SUCCESS)) {
2843 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_wow::return err code[%u]!}\r\n", ret);
2844 return ret;
2845 }
2846
2847 return HI_SUCCESS;
2848 }
2849
2850 /* ****************************************************************************
2851 功能描述 : 获取add wow pattern的参数
2852 **************************************************************************** */
wal_hipriv_get_add_wow_pattern_param(hi_char * pc_param,hmac_cfg_wow_pattern_param_stru * wow_param)2853 static hi_u32 wal_hipriv_get_add_wow_pattern_param(hi_char *pc_param, hmac_cfg_wow_pattern_param_stru *wow_param)
2854 {
2855 hi_char ac_value[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
2856 hi_char *pc_end = HI_NULL;
2857 hi_u32 data_offset, off_set, pattern_len;
2858 hi_u32 idx;
2859 hi_char high, low;
2860
2861 /* pc_param 指向'index', 将其取出放到 ac_index 中 */
2862 if (wal_get_cmd_one_arg(pc_param, ac_value, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set) != HI_SUCCESS) {
2863 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_wow_pattern::get index failed!}");
2864 return HI_FAIL;
2865 }
2866 wow_param->us_pattern_index = (hi_u16)oal_strtol(ac_value, &pc_end, 10); /* 10: 转换为10进制 */
2867 pc_param += off_set;
2868
2869 /* pc_param 指向'value', 将其取出放到ac_value中 */
2870 if (wal_get_cmd_one_arg(pc_param, ac_value, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set) != HI_SUCCESS) {
2871 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_wow_pattern::get value failed!}");
2872 return HI_FAIL;
2873 }
2874 if ((*ac_value != '0') || ((*(ac_value + 1) != 'x') && (*(ac_value + 1) != 'X'))) {
2875 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_wow_pattern::invalid wow value}");
2876 return HI_ERR_CODE_INVALID_CONFIG;
2877 }
2878
2879 wow_param->us_pattern_option = MAC_WOW_PATTERN_PARAM_OPTION_ADD;
2880 /* 长度减去 [ 空格 + 0 + X ] */
2881 pattern_len = (off_set > 3) ? ((off_set - 3) >> 1) : 0; /* 3: 数据偏移量 */
2882 pattern_len = (pattern_len > WAL_HIPRIV_CMD_NAME_MAX_LEN) ? (WAL_HIPRIV_CMD_NAME_MAX_LEN) : pattern_len;
2883 wow_param->pattern_len = pattern_len;
2884
2885 /* 转化 netpattern 格式, 命令方式最多支持 40字节 */
2886 for (idx = 0; idx < pattern_len; idx++) {
2887 /* 内容避开 [ 0 + X ] */
2888 data_offset = 2; /* 2: 数据偏移 */
2889 if (isxdigit(ac_value[(idx << 1) + data_offset]) && isxdigit(ac_value[(idx << 1) + data_offset + 1])) {
2890 high = isdigit(ac_value[(idx << 1) + data_offset]) ?
2891 (ac_value[(idx << 1) + data_offset] - '0') :
2892 (hi_tolower((hi_u8)ac_value[(idx << 1) + data_offset]) - 'a' + 10); /* 10: 偏移量 */
2893 low = isdigit(ac_value[(idx << 1) + data_offset + 1]) ?
2894 (ac_value[(idx << 1) + data_offset + 1] - '0') :
2895 (hi_tolower((hi_u8)ac_value[(idx << 1) + data_offset + 1]) - 'a' + 10); /* 10: 偏移量 */
2896 if ((hi_u8)high > 0xF || (hi_u8)low > 0xF) {
2897 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_wow_pattern::invalid wow value}\r\n");
2898 break;
2899 }
2900 wow_param->auc_pattern_value[idx] = (((hi_u8)high & 0xF) << 4) | ((hi_u8)low & 0xF); /* 4: 左移4位 */
2901 } else {
2902 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_wow_pattern::invalid wow value}\r\n");
2903 break;
2904 }
2905 }
2906 return HI_SUCCESS;
2907 }
2908
wal_get_add_wow_pattern_param(hi_u8 index,hi_char * pattern,hmac_cfg_wow_pattern_param_stru * cfg_wow_param)2909 hi_u32 wal_get_add_wow_pattern_param(hi_u8 index, hi_char *pattern, hmac_cfg_wow_pattern_param_stru *cfg_wow_param)
2910 {
2911 hi_u32 pattern_len, idx, data_offset;
2912 hi_char high, low;
2913 if ((index >= WOW_NETPATTERN_MAX_NUM) || (pattern == HI_NULL)) {
2914 oam_error_log2(0, 0, "wal_get_add_wow_pattern_param:: invalid_param, index[%d], pattern[%p]", index,
2915 (uintptr_t)pattern);
2916 return HI_FAIL;
2917 }
2918
2919 cfg_wow_param->us_pattern_index = index;
2920
2921 if ((*pattern != '0') || ((*(pattern + 1) != 'x') && (*(pattern + 1) != 'X'))) {
2922 oam_warning_log0(0, OAM_SF_ANY, "{wal_get_add_wow_pattern_param::invalid wow value}");
2923 return HI_ERR_CODE_INVALID_CONFIG;
2924 }
2925
2926 cfg_wow_param->us_pattern_option = MAC_WOW_PATTERN_PARAM_OPTION_ADD;
2927 pattern_len = (strlen(pattern) > 2) ? ((strlen(pattern) - 2) >> 1) : 0; /* 2: 数据偏移量 */
2928 pattern_len = (pattern_len > WAL_HIPRIV_CMD_NAME_MAX_LEN) ? (WAL_HIPRIV_CMD_NAME_MAX_LEN) : pattern_len;
2929 cfg_wow_param->pattern_len = pattern_len;
2930
2931 /* 转化 netpattern 格式, 命令方式最多支持 40字节 */
2932 for (idx = 0; idx < pattern_len; idx++) {
2933 /* 内容避开 [ 0 + X ] */
2934 data_offset = 2; /* 2: 数据偏移 */
2935 if (isxdigit(pattern[(idx << 1) + data_offset]) && isxdigit(pattern[(idx << 1) + data_offset + 1])) {
2936 high = isdigit(pattern[(idx << 1) + data_offset]) ?
2937 (pattern[(idx << 1) + data_offset] - '0') :
2938 (hi_tolower((hi_u8)pattern[(idx << 1) + data_offset]) - 'a' + 10); /* 10: 偏移量 */
2939 low = isdigit(pattern[(idx << 1) + data_offset + 1]) ?
2940 (pattern[(idx << 1) + data_offset + 1] - '0') :
2941 (hi_tolower((hi_u8)pattern[(idx << 1) + data_offset + 1]) - 'a' + 10); /* 10: 偏移量 */
2942 if ((hi_u8)high > 0xF || (hi_u8)low > 0xF) {
2943 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_wow_pattern::invalid wow value}\r\n");
2944 break;
2945 }
2946 cfg_wow_param->auc_pattern_value[idx] = (((hi_u8)high & 0xF) << 4) | ((hi_u8)low & 0xF); /* 4: 左移4位 */
2947 } else {
2948 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_wow_pattern::invalid wow value}\r\n");
2949 break;
2950 }
2951 }
2952
2953 return HI_SUCCESS;
2954 }
2955
2956 /* ****************************************************************************
2957 功能描述 : hipriv set wow pattern function
2958 hipriv.sh 'wlan0 wow_pattern add index 0x983B16F8F39C'
2959 hipriv.sh 'wlan0 wow_pattern del index'
2960 hipriv.sh 'wlan0 wow_pattern clr'
2961
2962 修改历史 :
2963 1.日 期 : 2016年3月23日
2964 作 者 : HiSilicon
2965 修改内容 : 新生成函数
2966 **************************************************************************** */
2967 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_set_wow_pattern(oal_net_device_stru * netdev,hi_char * pc_param)2968 static hi_u32 wal_hipriv_set_wow_pattern(oal_net_device_stru *netdev, hi_char *pc_param)
2969 {
2970 hmac_cfg_wow_pattern_param_stru cfg_wow_param = {0};
2971 wal_msg_write_stru write_msg;
2972 hi_char *pc_end = HI_NULL;
2973 hi_char ac_option[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
2974 hi_char ac_index[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
2975 hi_u32 retval, off_set;
2976
2977 /* No options – lists existing pattern list */
2978 if (pc_param == HI_NULL) {
2979 return HI_ERR_CODE_PTR_NULL;
2980 }
2981
2982 /* pc_param 指向'clr|add|del', 将其取出放到ac_option中 */
2983 if (wal_get_cmd_one_arg(pc_param, ac_option, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set) != HI_SUCCESS) {
2984 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_wow_pattern::get option failed");
2985 return HI_FAIL;
2986 }
2987 pc_param += off_set;
2988 /* add wow事件 */
2989 if (strcmp("add", ac_option) == 0) {
2990 if (wal_hipriv_get_add_wow_pattern_param(pc_param, &cfg_wow_param) != HI_SUCCESS) {
2991 oam_error_log0(0, OAM_SF_ANY, "{wal_hipriv_set_wow_pattern::get add param failed.}");
2992 return HI_FAIL;
2993 }
2994 /* 设置pattern value参数 */
2995 if (memcpy_s(&((hmac_cfg_wow_pattern_param_stru *)(write_msg.auc_value))->auc_pattern_value[0],
2996 WAL_HIPRIV_CMD_NAME_MAX_LEN, cfg_wow_param.auc_pattern_value, cfg_wow_param.pattern_len) != EOK) {
2997 oam_error_log0(0, OAM_SF_ANY, "{wal_hipriv_set_wow_pattern::copy pattern value failed.}");
2998 return HI_FAIL;
2999 }
3000 } else if (strcmp("del", ac_option) == 0) {
3001 /* pc_param 指向'index', 将其取出放到 ac_index 中 */
3002 if (wal_get_cmd_one_arg(pc_param, ac_index, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set) != HI_SUCCESS) {
3003 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_wow_pattern::get del index failed!}");
3004 return HI_FAIL;
3005 }
3006 cfg_wow_param.us_pattern_option = MAC_WOW_PATTERN_PARAM_OPTION_DEL;
3007 cfg_wow_param.us_pattern_index = (hi_u16)oal_strtol(ac_index, &pc_end, 10); /* 10: 转换为10进制 */
3008 } else if (strcmp("clr", ac_option) == 0) {
3009 cfg_wow_param.us_pattern_option = MAC_WOW_PATTERN_PARAM_OPTION_CLR;
3010 } else {
3011 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_wow_pattern::invalid pattern OPTION}");
3012 return HI_FAIL;
3013 }
3014
3015 /* **************************************************************************
3016 抛事件到wal层处理
3017 ************************************************************************** */
3018 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_WOW_PATTERN, sizeof(hmac_cfg_wow_pattern_param_stru));
3019 /* 设置pattern option参数 */
3020 ((hmac_cfg_wow_pattern_param_stru *)(write_msg.auc_value))->us_pattern_option = cfg_wow_param.us_pattern_option;
3021 /* 设置pattern index参数 */
3022 ((hmac_cfg_wow_pattern_param_stru *)(write_msg.auc_value))->us_pattern_index = cfg_wow_param.us_pattern_index;
3023 /* 设置pattern pattern len参数 */
3024 ((hmac_cfg_wow_pattern_param_stru *)(write_msg.auc_value))->pattern_len = cfg_wow_param.pattern_len;
3025 retval = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
3026 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hmac_cfg_wow_pattern_param_stru), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
3027 if (oal_unlikely(retval != HI_SUCCESS)) {
3028 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_wow_pattern::return err code[%u]!}", retval);
3029 }
3030
3031 return retval;
3032 }
3033 #endif
3034 #endif
3035
3036 #ifdef _PRE_WLAN_FEATURE_PROMIS
3037 #ifdef _PRE_WLAN_FEATURE_HIPRIV
3038 /* ****************************************************************************
3039 功能描述 : 开启或关闭monitor模式
3040
3041 修改历史 :
3042 1.日 期 : 2016年3月14日
3043 作 者 : HiSilicon
3044 修改内容 : 新生成函数
3045 **************************************************************************** */
3046 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_set_monitor_switch(oal_net_device_stru * netdev,hi_char * pc_param)3047 hi_u32 wal_hipriv_set_monitor_switch(oal_net_device_stru *netdev, hi_char *pc_param)
3048 {
3049 wal_msg_write_stru write_msg;
3050 hi_u32 off_set;
3051 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
3052 hi_u8 tmp;
3053 hi_u32 ret;
3054
3055 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
3056 if (ret != HI_SUCCESS) {
3057 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_monitor_switch::wal_get_cmd_one_arg return err_code %d!}\r\n",
3058 ret);
3059 return ret;
3060 }
3061
3062 if ((strcmp("0", ac_name)) == 0) {
3063 tmp = 0; /* 0: 关闭报文上报 */
3064 } else if ((strcmp("1", ac_name)) == 0) {
3065 tmp = 0x1; /* 0x1: 上报组播(广播)数据包 */
3066 } else if ((strcmp("2", ac_name)) == 0) {
3067 tmp = 0x2; /* 0x2: 上报单播数据包 */
3068 } else if ((strcmp("3", ac_name)) == 0) {
3069 tmp = 0x4; /* 0x4: 上报组播(广播)管理包 */
3070 } else if ((strcmp("4", ac_name)) == 0) {
3071 tmp = 0x8; /* 0x8: 上报单播管理包 */
3072 } else {
3073 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_monitor_switch::command param is error!}\r\n");
3074 return HI_ERR_CODE_INVALID_CONFIG;
3075 }
3076
3077 /* **************************************************************************
3078 抛事件到wal层处理
3079 ************************************************************************** */
3080 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_MONITOR_EN, sizeof(hi_u8));
3081 *((hi_u8 *)(write_msg.auc_value)) = tmp; /* 设置配置命令参数 */
3082
3083 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_u8),
3084 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
3085 if (oal_unlikely(ret != HI_SUCCESS)) {
3086 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_monitor_switch::return err code [%u]!}\r\n", ret);
3087 return ret;
3088 }
3089
3090 return HI_SUCCESS;
3091 }
3092 #endif
3093 #endif
3094
3095 #if defined(_PRE_WLAN_FEATURE_HIPRIV) || defined(_PRE_WLAN_FEATURE_SIGMA)
3096 /* ****************************************************************************
3097 功能描述 : 开启或关闭ampdu发送功能
3098
3099 修改历史 :
3100 1.日 期 : 2013年8月27日
3101 作 者 : HiSilicon
3102 修改内容 : 新生成函数
3103 **************************************************************************** */
3104 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_ampdu_tx_on(oal_net_device_stru * netdev,hi_char * pc_param)3105 hi_u32 wal_hipriv_ampdu_tx_on(oal_net_device_stru *netdev, hi_char *pc_param)
3106 {
3107 wal_msg_write_stru write_msg;
3108 hi_u32 off_set;
3109 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
3110 hi_u32 ret;
3111 mac_cfg_ampdu_tx_on_param_stru *aggr_tx_on_param = HI_NULL;
3112 hi_u8 aggr_tx_on;
3113
3114 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
3115 if (ret != HI_SUCCESS) {
3116 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_ampdu_tx_on::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
3117 return ret;
3118 }
3119
3120 aggr_tx_on = (hi_u8)oal_atoi(ac_name);
3121
3122 /* **************************************************************************
3123 抛事件到wal层处理
3124 ************************************************************************** */
3125 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_AMPDU_TX_ON, sizeof(mac_cfg_ampdu_tx_on_param_stru));
3126
3127 /* 设置配置命令参数 */
3128 aggr_tx_on_param = (mac_cfg_ampdu_tx_on_param_stru *)(write_msg.auc_value);
3129 aggr_tx_on_param->aggr_tx_on = aggr_tx_on;
3130
3131 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
3132 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_ampdu_tx_on_param_stru), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
3133 if (oal_unlikely(ret != HI_SUCCESS)) {
3134 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_ampdu_tx_on::return err code [%u]!}\r\n", ret);
3135 return ret;
3136 }
3137
3138 return HI_SUCCESS;
3139 }
3140 #endif
3141
3142 #if defined _PRE_WLAN_FEATURE_SIGMA
3143 /* ****************************************************************************
3144 功能描述 : 设置AP的STBC能力
3145
3146 修改历史 :
3147 1.日 期 : 2014年11月14日
3148 作 者 : HiSilicon
3149 修改内容 : 新生成函数
3150
3151 **************************************************************************** */
wal_hipriv_set_stbc_cap(oal_net_device_stru * netdev,hi_char * pc_param)3152 hi_u32 wal_hipriv_set_stbc_cap(oal_net_device_stru *netdev, hi_char *pc_param)
3153 {
3154 wal_msg_write_stru write_msg;
3155 hi_u32 off_set;
3156 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
3157 hi_u32 ret;
3158 hi_u32 value;
3159
3160 if (oal_unlikely((netdev == HI_NULL) || (pc_param == HI_NULL))) {
3161 oam_error_log2(0, OAM_SF_ANY,
3162 "{wal_hipriv_set_stbc_cap::pst_cfg_net_dev or pc_param null ptr error %p, %p!}\r\n", (uintptr_t)netdev,
3163 (uintptr_t)pc_param);
3164 return HI_ERR_CODE_PTR_NULL;
3165 }
3166
3167 /* STBC设置开关的命令: hipriv "vap0 set_stbc_cap 0 | 1"
3168 此处将解析出"1"或"0"存入ac_name
3169 */
3170 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
3171 if (ret != HI_SUCCESS) {
3172 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_stbc_cap::wal_get_cmd_one_arg return err_code [%u]!}\r\n",
3173 ret);
3174 return ret;
3175 }
3176
3177 /* 针对解析出的不同命令,设置TDLS禁用开关 */
3178 if (0 == (strcmp("0", ac_name))) {
3179 value = 0;
3180 } else if (0 == (strcmp("1", ac_name))) {
3181 value = 1;
3182 } else {
3183 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_stbc_cap::the set stbc command is error %p!}\r\n",
3184 (uintptr_t)ac_name);
3185 return HI_ERR_CODE_INVALID_CONFIG;
3186 }
3187
3188 /* **************************************************************************
3189 抛事件到wal层处理
3190 ************************************************************************** */
3191 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_STBC_CAP, sizeof(hi_u32));
3192
3193 /* 设置配置命令参数 */
3194 *((hi_u32 *)(write_msg.auc_value)) = value;
3195
3196 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_u32),
3197 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
3198 if (oal_unlikely(ret != HI_SUCCESS)) {
3199 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_stbc_cap::return err code [%u]!}\r\n", ret);
3200 return ret;
3201 }
3202
3203 return HI_SUCCESS;
3204 }
3205 #endif
3206
3207 #if defined(_PRE_WLAN_FEATURE_HIPRIV) || defined(_PRE_WLAN_FEATURE_SIGMA)
3208 /* ****************************************************************************
3209 功能描述 : 设置分片门限配置命令
3210 修改历史 :
3211 1.日 期 : 2014年1月27日
3212 作 者 : HiSilicon
3213 修改内容 : 新生成函数
3214 **************************************************************************** */
3215 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_frag_threshold(oal_net_device_stru * netdev,hi_char * pc_param)3216 hi_u32 wal_hipriv_frag_threshold(oal_net_device_stru *netdev, hi_char *pc_param)
3217 {
3218 wal_msg_write_stru write_msg;
3219 hi_u32 ret;
3220 hi_u16 us_len;
3221 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
3222 hi_u32 off_set = 0;
3223 mac_cfg_frag_threshold_stru *threshold = HI_NULL;
3224 hi_u32 thresholdval;
3225
3226 /* 获取分片门限 */
3227 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
3228 if (ret != HI_SUCCESS) {
3229 hi_diag_log_msg_w0(0, "{wal_hipriv_frag_threshold::wal_get_cmd_one_arg failed.");
3230 return ret;
3231 }
3232
3233 thresholdval = (hi_u32)oal_atoi(ac_name);
3234 if ((thresholdval < WLAN_FRAG_THRESHOLD_MIN) || (thresholdval > WLAN_FRAG_THRESHOLD_MAX)) {
3235 hi_diag_log_msg_w1(0, "{wal_hipriv_frag_threshold::ul_threshold value error [%d]!}", thresholdval);
3236 return HI_FAIL;
3237 }
3238
3239 threshold = (mac_cfg_frag_threshold_stru *)(write_msg.auc_value);
3240 threshold->frag_threshold = thresholdval;
3241 /* **************************************************************************
3242 抛事件到wal层处理
3243 ************************************************************************** */
3244 us_len = sizeof(mac_cfg_frag_threshold_stru);
3245 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_FRAG_THRESHOLD_REG, us_len);
3246 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + us_len, (hi_u8 *)&write_msg,
3247 HI_FALSE, HI_NULL);
3248 if (oal_unlikely(ret != HI_SUCCESS)) {
3249 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_frag_threshold::return err code [%u]!}\r\n", ret);
3250 return ret;
3251 }
3252 return HI_SUCCESS;
3253 }
3254 #endif
3255
3256 #if defined _PRE_WLAN_FEATURE_SIGMA
3257 /* ****************************************************************************
3258 功能描述 : 设置RTS门限配置命令
3259 修改历史 :
3260 1.日 期 : 2014年1月27日
3261 作 者 : HiSilicon
3262 修改内容 : 新生成函数
3263 **************************************************************************** */
3264 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_rts_threshold(oal_net_device_stru * netdev,hi_char * pc_param)3265 hi_u32 wal_hipriv_rts_threshold(oal_net_device_stru *netdev, hi_char *pc_param)
3266 {
3267 wal_msg_write_stru write_msg;
3268 hi_u32 ret;
3269 hi_u16 us_len;
3270 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
3271 hi_u32 off_set = 0;
3272 mac_cfg_rts_threshold_stru *threshold = HI_NULL;
3273 hi_u32 thresholdval;
3274
3275 /* 获取RTS门限 */
3276 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
3277 if (ret != HI_SUCCESS) {
3278 hi_diag_log_msg_w0(0, "{wal_hipriv_rts_threshold::wal_get_cmd_one_arg failed!}");
3279 return ret;
3280 }
3281
3282 thresholdval = (hi_u32)oal_atoi(ac_name);
3283 if ((thresholdval < WLAN_RTS_MIN) || (thresholdval > WLAN_RTS_MAX)) {
3284 hi_diag_log_msg_w1(0, "{wal_hipriv_rts_threshold::ul_threshold value error [%d]!}", thresholdval);
3285 return HI_FAIL;
3286 }
3287 threshold = (mac_cfg_rts_threshold_stru *)(write_msg.auc_value);
3288 threshold->rts_threshold = thresholdval;
3289
3290 /* **************************************************************************
3291 抛事件到wal层处理
3292 ************************************************************************** */
3293 us_len = sizeof(mac_cfg_rts_threshold_stru);
3294 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_RTS_THRESHHOLD, us_len);
3295 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + us_len, (hi_u8 *)&write_msg,
3296 HI_FALSE, HI_NULL);
3297 if (oal_unlikely(ret != HI_SUCCESS)) {
3298 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_rts_threshold::return err code [%u]!}\r\n", ret);
3299 return ret;
3300 }
3301 return HI_SUCCESS;
3302 }
3303 #endif
3304
3305 #ifdef _PRE_WLAN_FEATURE_HIPRIV
3306 /* ****************************************************************************
3307 功能描述 : 写寄存器
3308
3309 修改历史 :
3310 1.日 期 : 2013年9月6日
3311 作 者 : HiSilicon
3312 修改内容 : 新生成函数
3313 **************************************************************************** */
3314 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_reg_write(oal_net_device_stru * netdev,hi_char * pc_param)3315 hi_u32 wal_hipriv_reg_write(oal_net_device_stru *netdev, hi_char *pc_param)
3316 {
3317 wal_msg_write_stru write_msg;
3318 hi_u32 ret;
3319 hi_u16 us_len;
3320
3321 /* **************************************************************************
3322 抛事件到wal层处理
3323 ************************************************************************** */
3324 if (memcpy_s(write_msg.auc_value, WAL_MSG_WRITE_MAX_LEN, pc_param, strlen(pc_param)) != EOK) {
3325 oam_error_log0(0, OAM_SF_ANY, "{wal_hipriv_set_ampdu_aggr_num::mem safe function err!}");
3326 return HI_FAIL;
3327 }
3328
3329 write_msg.auc_value[strlen(pc_param)] = '\0';
3330
3331 us_len = (hi_u16)(strlen(pc_param) + 1);
3332
3333 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_REG_WRITE, us_len);
3334
3335 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + us_len, (hi_u8 *)&write_msg,
3336 HI_FALSE, HI_NULL);
3337 if (oal_unlikely(ret != HI_SUCCESS)) {
3338 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_reg_write::return err code [%u]!}\r\n", ret);
3339 return ret;
3340 }
3341
3342 return HI_SUCCESS;
3343 }
3344 #endif
3345
3346 #ifdef _PRE_DEBUG_MODE
3347 #ifdef _PRE_WLAN_FEATURE_HIPRIV
3348 /* ****************************************************************************
3349 功能描述 : 获取某一个vap的收发包统计信息
3350
3351 修改历史 :
3352 1.日 期 : 2014年7月10日
3353 作 者 : HiSilicon
3354 修改内容 : 新生成函数
3355
3356 **************************************************************************** */
wal_hipriv_show_vap_pkt_stat(oal_net_device_stru * netdev,hi_char * pc_param)3357 static hi_u32 wal_hipriv_show_vap_pkt_stat(oal_net_device_stru *netdev, hi_char *pc_param)
3358 {
3359 wal_msg_write_stru write_msg;
3360 hi_u32 ret;
3361
3362 hi_unref_param(pc_param);
3363 /* **************************************************************************
3364 抛事件到wal层处理
3365 ************************************************************************** */
3366 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_VAP_PKT_STAT, sizeof(hi_u32));
3367
3368 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_u32),
3369 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
3370 if (oal_unlikely(ret != HI_SUCCESS)) {
3371 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_show_vap_pkt_stat::return err code [%u]!}\r\n", ret);
3372 return ret;
3373 }
3374
3375 return HI_SUCCESS;
3376 }
3377 #endif
3378 #endif
3379
3380 #ifdef _PRE_WLAN_FEATURE_HIPRIV
3381 /* ****************************************************************************
3382 功能描述 : 配置CCA 门限
3383 **************************************************************************** */
wal_hipriv_set_cca_threshold(oal_net_device_stru * netdev,hi_char * pc_param)3384 static hi_u32 wal_hipriv_set_cca_threshold(oal_net_device_stru *netdev, hi_char *pc_param)
3385 {
3386 wal_msg_write_stru write_msg;
3387 hi_u32 off_set;
3388 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {'\0'};
3389
3390 /* 低功耗状态下不允许执行 */
3391 if (is_under_ps()) {
3392 oam_warning_log0(0, 0, "under ps mode,can not exec cmd");
3393 return HI_FAIL;
3394 }
3395 /* 获取CCA门限 */
3396 hi_u32 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
3397 if (ret != HI_SUCCESS) {
3398 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_cca_opt_log::wal_get_cmd_one_arg return err_code [%u]!}", ret);
3399 return ret;
3400 }
3401
3402 hi_s32 cca_threshold = oal_atoi(ac_name);
3403 if (cca_threshold < HI_CCA_THRESHOLD_LO || cca_threshold > HI_CCA_THRESHOLD_HI) {
3404 oam_error_log1(0, 0, "wal_hipriv_set_cca_threshold:: invalid cca threshold[%d]", cca_threshold);
3405 return HI_FAIL;
3406 }
3407 hi_s32 *param = (hi_s32 *)write_msg.auc_value;
3408 *param = cca_threshold;
3409
3410 /* **************************************************************************
3411 抛事件到wal层处理
3412 ************************************************************************** */
3413 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_CCA_TH, sizeof(hi_s32));
3414
3415 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
3416 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_ioctl_alg_param_stru), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
3417 if (oal_unlikely(ret != HI_SUCCESS)) {
3418 oam_warning_log1(0, OAM_SF_ANY, "{hi_wifi_set_cca_threshold::return err code [%u]!}\r\n", ret);
3419 return ret;
3420 }
3421
3422 return HI_SUCCESS;
3423 }
3424 #endif
3425
3426 #ifdef _PRE_WLAN_FEATURE_ALG_CFG
3427 #ifdef _PRE_WLAN_FEATURE_HIPRIV
3428 /* ****************************************************************************
3429 功能描述 : cca_opt算法日志参数配置
3430 (1)统计的配置命令: hipriv.sh "vap0 alg_tpc_log tpc_stat_log 11:22:33:44:55:66 2 500"
3431 该命令针对某一个USER
3432
3433 修改历史 :
3434 1.日 期 : 2015年8月31日
3435 作 者 : HiSilicon
3436 修改内容 : 新生成函数
3437
3438 **************************************************************************** */
wal_hipriv_cca_opt_log(oal_net_device_stru * netdev,hi_char * pc_param)3439 static hi_u32 wal_hipriv_cca_opt_log(oal_net_device_stru *netdev, hi_char *pc_param)
3440 {
3441 wal_msg_write_stru write_msg;
3442 hi_u32 off_set;
3443 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {'\0'};
3444 mac_ioctl_alg_cca_opt_log_param_stru *alg_cca_opt_log_param = HI_NULL;
3445 wal_ioctl_alg_cfg_stru alg_cfg;
3446 hi_u8 map_index = 0;
3447
3448 alg_cca_opt_log_param = (mac_ioctl_alg_cca_opt_log_param_stru *)(write_msg.auc_value);
3449
3450 /* 获取配置参数名称 */
3451 hi_u32 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
3452 if (ret != HI_SUCCESS) {
3453 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_cca_opt_log::wal_get_cmd_one_arg return err_code [%u]!}", ret);
3454 return ret;
3455 }
3456 pc_param = pc_param + off_set;
3457
3458 /* 寻找匹配的命令 */
3459 alg_cfg = g_ast_alg_cfg_map[0];
3460 while (alg_cfg.pc_name != HI_NULL) {
3461 if (strcmp(alg_cfg.pc_name, ac_name) == 0) {
3462 break;
3463 }
3464 alg_cfg = g_ast_alg_cfg_map[++map_index];
3465 }
3466
3467 /* 没有找到对应的命令,则报错 */
3468 if (alg_cfg.pc_name == HI_NULL) {
3469 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_cca_opt_log::invalid alg_cfg command!}\r\n");
3470 return HI_FAIL;
3471 }
3472
3473 /* 记录命令对应的枚举值 */
3474 alg_cca_opt_log_param->alg_cfg = g_ast_alg_cfg_map[map_index].alg_cfg;
3475
3476 /* 区分获取特定帧功率和统计日志命令处理:获取功率只需获取帧名字 */
3477 if (alg_cca_opt_log_param->alg_cfg == MAC_ALG_CFG_CCA_OPT_STAT_LOG_START) {
3478 /* 获取配置参数名称 */
3479 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
3480 if (ret != HI_SUCCESS) {
3481 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_cca_opt_log::wal_get_cmd_one_arg return err_code [%u]!}", ret);
3482 return ret;
3483 }
3484
3485 /* 记录参数 */
3486 alg_cca_opt_log_param->us_value = (hi_u16)oal_atoi(ac_name);
3487 }
3488
3489 /* **************************************************************************
3490 抛事件到wal层处理
3491 ************************************************************************** */
3492 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_ALG_PARAM, sizeof(mac_ioctl_alg_cca_opt_log_param_stru));
3493
3494 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
3495 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_ioctl_alg_cca_opt_log_param_stru), (hi_u8 *)&write_msg, HI_FALSE,
3496 HI_NULL);
3497 if (oal_unlikely(ret != HI_SUCCESS)) {
3498 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_cca_opt_log::return err code [%u]!}\r\n", ret);
3499 return ret;
3500 }
3501
3502 return HI_SUCCESS;
3503 }
3504 #endif
3505 #endif
3506
3507 #ifdef _PRE_WLAN_FEATURE_HIPRIV
3508 /* ****************************************************************************
3509 功能描述 : 算法模块参数配置
3510 配置算法的配置命令: hipriv "vap0 alg_cfg vi_sch_limit 10"
3511 该命令针对某一个VAP
3512
3513 修改历史 :
3514 1.日 期 : 2013年10月25日
3515 作 者 : HiSilicon
3516 修改内容 : 新生成函数
3517 **************************************************************************** */
3518 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_alg_cfg(oal_net_device_stru * netdev,hi_char * pc_param)3519 static hi_u32 wal_hipriv_alg_cfg(oal_net_device_stru *netdev, hi_char *pc_param)
3520 {
3521 wal_msg_write_stru write_msg;
3522 hi_u32 off_set;
3523 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {'\0'};
3524 hi_u8 map_index = 0;
3525 mac_ioctl_alg_param_stru *alg_param = (mac_ioctl_alg_param_stru *)(write_msg.auc_value);
3526
3527 /* 低功耗状态下不允许执行 */
3528 if (is_under_ps()) {
3529 oam_warning_log0(0, 0, "under ps mode,can not exec cmd");
3530 return HI_FAIL;
3531 }
3532 /* 获取配置参数名称 */
3533 if (wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set) != HI_SUCCESS) {
3534 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_alg_cfg::wal_get_cmd_one_arg failed!}\r\n");
3535 return HI_FAIL;
3536 }
3537
3538 /* 寻找匹配的命令 */
3539 wal_ioctl_alg_cfg_stru alg_cfg = g_ast_alg_cfg_map[0];
3540 while (alg_cfg.pc_name != HI_NULL) {
3541 if (0 == strcmp(alg_cfg.pc_name, ac_name)) {
3542 break;
3543 }
3544 alg_cfg = g_ast_alg_cfg_map[++map_index];
3545 }
3546
3547 /* 没有找到对应的命令,则报错 */
3548 if (alg_cfg.pc_name == HI_NULL) {
3549 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_alg_cfg::invalid alg_cfg command!}\r\n");
3550 return HI_FAIL;
3551 }
3552
3553 /* 记录命令对应的枚举值 */
3554 alg_param->alg_cfg = g_ast_alg_cfg_map[map_index].alg_cfg;
3555
3556 /* 获取参数配置值 */
3557 if (wal_get_cmd_one_arg(pc_param + off_set, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set) != HI_SUCCESS) {
3558 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_alg_cfg::wal_get_cmd_one_arg failed!}\r\n");
3559 return HI_FAIL;
3560 }
3561
3562 /* 记录参数配置值 */
3563 alg_param->is_negtive = (ac_name[0] == '-');
3564 alg_param->value = (hi_u32)((ac_name[0] == '-') ? (-1 * oal_atoi(ac_name)) : oal_atoi(ac_name));
3565 /* **************************************************************************
3566 抛事件到wal层处理
3567 ************************************************************************** */
3568 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_ALG_PARAM, sizeof(mac_ioctl_alg_param_stru));
3569
3570 hi_u32 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
3571 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_ioctl_alg_param_stru), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
3572 if (oal_unlikely(ret != HI_SUCCESS)) {
3573 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_alg_cfg::return err code [%u]!}\r\n", ret);
3574 return ret;
3575 }
3576
3577 printk("OK\r\n");
3578 return HI_SUCCESS;
3579 }
3580
3581 #ifdef _PRE_WLAN_FEATURE_ALG_CFG
wal_hipriv_tpc_log_cfg(hi_char * pc_param,mac_ioctl_alg_tpc_log_param_stru * alg_tpc_log_param,hi_u32 * off_set,hi_char * ac_name,hi_u8 * stop_flag)3582 static hi_u32 wal_hipriv_tpc_log_cfg(hi_char *pc_param, mac_ioctl_alg_tpc_log_param_stru *alg_tpc_log_param,
3583 hi_u32 *off_set, hi_char *ac_name, hi_u8 *stop_flag)
3584 {
3585 hi_u32 ret = wal_hipriv_get_mac_addr(pc_param, alg_tpc_log_param->auc_mac_addr, WLAN_MAC_ADDR_LEN, off_set);
3586 if (ret != HI_SUCCESS) {
3587 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_tpc_log::wal_hipriv_get_mac_addr failed!}\r\n");
3588 return ret;
3589 }
3590 pc_param += *off_set;
3591
3592 while ((*pc_param == '\0') || (*pc_param == ' ')) {
3593 if (*pc_param == '\0') {
3594 *stop_flag = HI_TRUE;
3595 break;
3596 }
3597 ++pc_param;
3598 }
3599
3600 /* 获取业务类型值 */
3601 if (*stop_flag != HI_TRUE) {
3602 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, off_set);
3603 if (ret != HI_SUCCESS) {
3604 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_tpc_log::wal_get_cmd_one_arg return err_code %u}\n", ret);
3605 return ret;
3606 }
3607
3608 alg_tpc_log_param->ac_no = (hi_u8)oal_atoi(ac_name);
3609 pc_param = pc_param + *off_set;
3610
3611 *stop_flag = HI_FALSE;
3612 while ((*pc_param == ' ') || (*pc_param == '\0')) {
3613 if (*pc_param == '\0') {
3614 *stop_flag = HI_TRUE;
3615 break;
3616 }
3617 ++pc_param;
3618 }
3619
3620 if (*stop_flag != HI_TRUE) {
3621 /* 获取参数配置值 */
3622 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, off_set);
3623 if (ret != HI_SUCCESS) {
3624 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_tpc_log::wal_get_cmd_one_arg return err_code [%u]!}\r\n",
3625 ret);
3626 return ret;
3627 }
3628
3629 /* 记录参数配置值 */
3630 alg_tpc_log_param->us_value = (hi_u16)oal_atoi(ac_name);
3631 }
3632 }
3633
3634 return HI_SUCCESS;
3635 }
3636
3637 /* ****************************************************************************
3638 功能描述 : tpc算法日志参数配置
3639 (1)统计的配置命令: hipriv.sh "vap0 alg_tpc_log tpc_stat_log 11:22:33:44:55:66 2 500"
3640 该命令针对某一个USER
3641 (2)获取功率的配置命令: hipriv.sh "vap0 alg_tpc_log tpc_get_frame_pow <frm>_power"
3642 其中, <frm>字符串的取值如下:
3643 - rts
3644 - ctsack
3645 - onepkt
3646 - selfcts
3647 - cfend
3648 - ndp
3649 - report
3650
3651 修改历史 :
3652 1.日 期 : 2015年1月12日
3653 作 者 : HiSilicon
3654 修改内容 : 新生成函数
3655
3656 **************************************************************************** */
wal_hipriv_tpc_log(oal_net_device_stru * netdev,hi_char * pc_param)3657 static hi_u32 wal_hipriv_tpc_log(oal_net_device_stru *netdev, hi_char *pc_param)
3658 {
3659 wal_msg_write_stru write_msg;
3660 hi_u32 off_set;
3661 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {'\0'};
3662 hi_u8 map_index = 0;
3663 hi_u8 stop_flag = HI_FALSE;
3664
3665 mac_ioctl_alg_tpc_log_param_stru *alg_tpc_log_param = (mac_ioctl_alg_tpc_log_param_stru *)(write_msg.auc_value);
3666
3667 /* 获取配置参数名称 */
3668 hi_u32 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
3669 if (ret != HI_SUCCESS) {
3670 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_tpc_log::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
3671 return ret;
3672 }
3673 pc_param = pc_param + off_set;
3674
3675 /* 寻找匹配的命令 */
3676 wal_ioctl_alg_cfg_stru alg_cfg = g_ast_alg_cfg_map[0];
3677 while (alg_cfg.pc_name != HI_NULL) {
3678 if (0 == strcmp(alg_cfg.pc_name, ac_name)) {
3679 break;
3680 }
3681 alg_cfg = g_ast_alg_cfg_map[++map_index];
3682 }
3683
3684 /* 没有找到对应的命令,则报错 */
3685 if (alg_cfg.pc_name == HI_NULL) {
3686 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_tpc_log::invalid alg_cfg command!}\r\n");
3687 return HI_FAIL;
3688 }
3689
3690 /* 记录命令对应的枚举值 */
3691 alg_tpc_log_param->alg_cfg = g_ast_alg_cfg_map[map_index].alg_cfg;
3692
3693 /* 区分获取特定帧功率和统计日志命令处理:获取功率只需获取帧名字 */
3694 if (alg_tpc_log_param->alg_cfg == MAC_ALG_CFG_TPC_GET_FRAME_POW) {
3695 /* 获取配置参数名称 */
3696 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
3697 if (ret != HI_SUCCESS) {
3698 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_tpc_log::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
3699 return ret;
3700 }
3701 /* 记录命令对应的帧名字 */
3702 alg_tpc_log_param->pc_frame_name = ac_name;
3703 } else {
3704 ret = wal_hipriv_tpc_log_cfg(pc_param, alg_tpc_log_param, &off_set, ac_name, &stop_flag);
3705 if (ret != HI_SUCCESS) {
3706 return ret;
3707 }
3708 }
3709
3710 /* **************************************************************************
3711 抛事件到wal层处理
3712 ************************************************************************** */
3713 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_ALG_PARAM, sizeof(mac_ioctl_alg_tpc_log_param_stru));
3714
3715 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
3716 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_ioctl_alg_tpc_log_param_stru), (hi_u8 *)&write_msg, HI_FALSE,
3717 HI_NULL);
3718 if (oal_unlikely(ret != HI_SUCCESS)) {
3719 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_tpc_log::return err code [%u]!}\r\n", ret);
3720 return ret;
3721 }
3722
3723 return HI_SUCCESS;
3724 }
3725
3726
wal_hipriv_ar_log_cfg(mac_ioctl_alg_ar_log_param_stru * alg_ar_log_param,hi_char * pc_param,hi_u32 * off_set,hi_char * ac_name,hi_u8 * stop_flag)3727 static hi_u32 wal_hipriv_ar_log_cfg(mac_ioctl_alg_ar_log_param_stru *alg_ar_log_param, hi_char *pc_param,
3728 hi_u32 *off_set, hi_char *ac_name, hi_u8 *stop_flag)
3729 {
3730 hi_u8 map_index = 0;
3731
3732 /* 获取配置参数名称 */
3733 hi_u32 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, off_set);
3734 if (ret != HI_SUCCESS) {
3735 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_ar_log_cfg::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
3736 return ret;
3737 }
3738 pc_param = pc_param + *off_set;
3739
3740 /* 寻找匹配的命令 */
3741 wal_ioctl_alg_cfg_stru alg_cfg = g_ast_alg_cfg_map[0];
3742 while (alg_cfg.pc_name != HI_NULL) {
3743 if (0 == strcmp(alg_cfg.pc_name, ac_name)) {
3744 break;
3745 }
3746 alg_cfg = g_ast_alg_cfg_map[++map_index];
3747 }
3748
3749 /* 没有找到对应的命令,则报错 */
3750 if (alg_cfg.pc_name == HI_NULL) {
3751 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_ar_log_cfg::invalid alg_cfg command!}\r\n");
3752 return HI_FAIL;
3753 }
3754
3755 /* 记录命令对应的枚举值 */
3756 alg_ar_log_param->alg_cfg = g_ast_alg_cfg_map[map_index].alg_cfg;
3757
3758 ret = wal_hipriv_get_mac_addr(pc_param, alg_ar_log_param->auc_mac_addr, WLAN_MAC_ADDR_LEN, off_set);
3759 if (ret != HI_SUCCESS) {
3760 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_ar_log_cfg::wal_hipriv_get_mac_addr failed!}\r\n");
3761 return ret;
3762 }
3763 pc_param += *off_set;
3764
3765 while ((*pc_param == ' ') || (*pc_param == '\0')) {
3766 if (*pc_param == '\0') {
3767 *stop_flag = HI_TRUE;
3768 break;
3769 }
3770 ++pc_param;
3771 }
3772
3773 return HI_SUCCESS;
3774 }
3775
3776 /* ****************************************************************************
3777 功能描述 : autorate算法日志参数配置
3778 配置算法的配置命令: hipriv "vap0 alg_ar_log ar_stat_log 11:22:33:44:55:66 2 500"
3779 该命令针对某一个USER
3780
3781 修改历史 :
3782 1.日 期 : 2013年10月25日
3783 作 者 : HiSilicon
3784 修改内容 : 新生成函数
3785
3786 **************************************************************************** */
wal_hipriv_ar_log(oal_net_device_stru * netdev,hi_char * pc_param)3787 static hi_u32 wal_hipriv_ar_log(oal_net_device_stru *netdev, hi_char *pc_param)
3788 {
3789 wal_msg_write_stru write_msg;
3790 hi_u32 off_set;
3791 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {'\0'};
3792 hi_u8 stop_flag = HI_FALSE;
3793
3794 mac_ioctl_alg_ar_log_param_stru *alg_ar_log_param = (mac_ioctl_alg_ar_log_param_stru *)(write_msg.auc_value);
3795
3796 hi_u32 ret = wal_hipriv_ar_log_cfg(alg_ar_log_param, pc_param, &off_set, ac_name, &stop_flag);
3797 if (ret != HI_SUCCESS) {
3798 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_ar_log::wal_hipriv_ar_log_cfg failed!}\r\n");
3799 return ret;
3800 }
3801
3802 /* 获取业务类型值 */
3803 if (stop_flag != HI_TRUE) {
3804 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
3805 if (ret != HI_SUCCESS) {
3806 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_ar_log::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
3807 return ret;
3808 }
3809
3810 alg_ar_log_param->ac_no = (hi_u8)oal_atoi(ac_name);
3811 pc_param = pc_param + off_set;
3812
3813 stop_flag = HI_FALSE;
3814 while ((*pc_param == ' ') || (*pc_param == '\0')) {
3815 if (*pc_param == '\0') {
3816 stop_flag = HI_TRUE;
3817 break;
3818 }
3819 ++pc_param;
3820 }
3821
3822 if (stop_flag != HI_TRUE) {
3823 /* 获取参数配置值 */
3824 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
3825 if (ret != HI_SUCCESS) {
3826 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_ar_log::wal_get_cmd_one_arg return err_code %u}\n", ret);
3827 return ret;
3828 }
3829
3830 /* 记录参数配置值 */
3831 alg_ar_log_param->us_value = (hi_u16)oal_atoi(ac_name);
3832 }
3833 }
3834
3835 /* **************************************************************************
3836 抛事件到wal层处理
3837 ************************************************************************** */
3838 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_ALG_PARAM, sizeof(mac_ioctl_alg_ar_log_param_stru));
3839
3840 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
3841 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_ioctl_alg_ar_log_param_stru), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
3842 if (oal_unlikely(ret != HI_SUCCESS)) {
3843 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_ar_log::return err code [%u]!}\r\n", ret);
3844 return ret;
3845 }
3846
3847 return HI_SUCCESS;
3848 }
3849 #endif
3850
3851 #ifdef _PRE_WLAN_FEATURE_ALG_CFG_TEST
3852 /* ****************************************************************************
3853 功能描述 : autorate算法测试配置命令:
3854 该命令针对某一个USER
3855 配置算法的配置命令: hipriv "vap0 alg_ar_test cycle_rate 11:22:33:44:55:66 1"
3856 该命令针对某一个USER
3857
3858 修改历史 :
3859 1.日 期 : 2013年11月14日
3860 作 者 : HiSilicon
3861 修改内容 : 新生成函数
3862
3863 **************************************************************************** */
wal_hipriv_ar_test(oal_net_device_stru * netdev,hi_char * pc_param)3864 static hi_u32 wal_hipriv_ar_test(oal_net_device_stru *netdev, hi_char *pc_param)
3865 {
3866 wal_msg_write_stru write_msg;
3867 hi_u32 offset = 0;
3868 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN];
3869 hi_u8 map_index = 0;
3870
3871 mac_ioctl_alg_ar_test_param_stru *alg_ar_test_param = (mac_ioctl_alg_ar_test_param_stru *)(write_msg.auc_value);
3872
3873 /* 获取配置参数名称 */
3874 hi_u32 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &offset);
3875 if (ret != HI_SUCCESS) {
3876 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_ar_test::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
3877 return ret;
3878 }
3879 pc_param = pc_param + offset;
3880
3881 /* 寻找匹配的命令 */
3882 wal_ioctl_alg_cfg_stru alg_cfg = g_ast_alg_cfg_map[0];
3883 while (alg_cfg.pc_name != HI_NULL) {
3884 if (0 == strcmp(alg_cfg.pc_name, ac_name)) {
3885 break;
3886 }
3887 alg_cfg = g_ast_alg_cfg_map[++map_index];
3888 }
3889
3890 /* 没有找到对应的命令,则报错 */
3891 if (alg_cfg.pc_name == HI_NULL) {
3892 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_ar_test::invalid alg_cfg command!}\r\n");
3893 return HI_FAIL;
3894 }
3895
3896 /* 记录命令对应的枚举值 */
3897 alg_ar_test_param->alg_cfg = g_ast_alg_cfg_map[map_index].alg_cfg;
3898
3899 ret = wal_hipriv_get_mac_addr(pc_param, alg_ar_test_param->auc_mac_addr, WLAN_MAC_ADDR_LEN, &offset);
3900 if (ret != HI_SUCCESS) {
3901 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_ar_test::wal_hipriv_get_mac_addr failed!}\r\n");
3902 return ret;
3903 }
3904 pc_param += offset;
3905
3906 /* 获取参数配置值 */
3907 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &offset);
3908 if (ret != HI_SUCCESS) {
3909 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_ar_test::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
3910 return ret;
3911 }
3912
3913 /* 记录参数配置值 */
3914 alg_ar_test_param->us_value = (hi_u16)oal_atoi(ac_name);
3915
3916 /* **************************************************************************
3917 抛事件到wal层处理
3918 ************************************************************************** */
3919 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_ALG_PARAM, sizeof(mac_ioctl_alg_ar_test_param_stru));
3920 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
3921 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_ioctl_alg_ar_test_param_stru), (hi_u8 *)&write_msg, HI_FALSE,
3922 HI_NULL);
3923 if (oal_unlikely(ret != HI_SUCCESS)) {
3924 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_ar_test::return err code [%u]!}\r\n", ret);
3925 return ret;
3926 }
3927
3928 return HI_SUCCESS;
3929 }
3930 #endif
3931 #endif
3932
3933 /* ****************************************************************************
3934 功能描述 : 统计指定tid的吞吐量
3935
3936 修改历史 :
3937 1.日 期 : 2014年1月14日
3938 作 者 : HiSilicon
3939 修改内容 : 新生成函数
3940
3941 **************************************************************************** */
wal_hipriv_get_mac_addr(const hi_char * pc_param,hi_u8 mac_addr[],hi_u8 addr_len,hi_u32 * pul_total_offset)3942 hi_u32 wal_hipriv_get_mac_addr(const hi_char *pc_param, hi_u8 mac_addr[], hi_u8 addr_len, hi_u32 *pul_total_offset)
3943 {
3944 hi_u32 off_set = 0;
3945 hi_u32 ret;
3946 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
3947
3948 /* 获取mac地址 */
3949 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
3950 if (ret != HI_SUCCESS) {
3951 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_get_mac_addr::wal_get_cmd_one_arg return err_code [%u]!}\r\n",
3952 ret);
3953 return ret;
3954 }
3955 oal_strtoaddr(ac_name, mac_addr, addr_len);
3956
3957 *pul_total_offset = off_set;
3958
3959 return HI_SUCCESS;
3960 }
3961
3962 #ifdef _PRE_WLAN_FEATURE_EDCA_OPT_AP_DEBUG
3963 #ifdef _PRE_WLAN_FEATURE_HIPRIV
3964 /* ****************************************************************************
3965 功能描述 : 指定打开或者关闭sta的edca优化功能
3966
3967 修改历史 :
3968 1.日 期 : 2014年1月14日
3969 作 者 : HiSilicon
3970 修改内容 : 新生成函数
3971
3972 **************************************************************************** */
wal_hipriv_set_edca_opt_switch_sta(oal_net_device_stru * netdev,hi_char * pc_param)3973 static hi_u32 wal_hipriv_set_edca_opt_switch_sta(oal_net_device_stru *netdev, hi_char *pc_param)
3974 {
3975 wal_msg_write_stru write_msg;
3976 hi_u8 flag;
3977 hi_u8 *puc_value = 0;
3978 hi_u32 ret;
3979 hi_u32 off_set = 0;
3980 mac_vap_stru *mac_vap = HI_NULL;
3981 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN];
3982
3983 /* sh hipriv.sh "vap0 set_edca_switch_sta 1/0" */
3984 /* 获取mac_vap */
3985 mac_vap = oal_net_dev_priv(netdev);
3986 if (mac_vap->vap_mode != WLAN_VAP_MODE_BSS_STA) {
3987 oam_warning_log0(0, OAM_SF_EDCA, "{wal_hipriv_set_edca_opt_switch_sta:: only STA_MODE support}");
3988 return HI_FAIL;
3989 }
3990
3991 /* 获取配置参数 */
3992 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
3993 if (ret != HI_SUCCESS) {
3994 oam_warning_log1(0, OAM_SF_EDCA,
3995 "{wal_hipriv_set_edca_opt_switch_sta::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
3996 return ret;
3997 }
3998
3999 flag = (hi_u8)oal_atoi(ac_name);
4000 /* 非法配置参数 */
4001 if (flag > 1) {
4002 oam_warning_log0(0, OAM_SF_EDCA, "wal_hipriv_set_edca_opt_switch_sta, invalid config, should be 0 or 1");
4003 return HI_SUCCESS;
4004 }
4005
4006 /* 申请事件内存 */
4007 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_EDCA_OPT_SWITCH_STA, sizeof(hi_u8));
4008 puc_value = (hi_u8 *)(write_msg.auc_value);
4009 *puc_value = flag;
4010
4011 /* **************************************************************************
4012 抛事件到wal层处理
4013 ************************************************************************** */
4014 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_u8),
4015 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
4016 if (oal_unlikely(ret != HI_SUCCESS)) {
4017 oam_warning_log1(0, OAM_SF_EDCA, "{wal_hipriv_set_edca_opt_switch_sta::return err code [%u]!}\r\n", ret);
4018 return ret;
4019 }
4020
4021 return HI_SUCCESS;
4022 }
4023
4024 /* ****************************************************************************
4025 功能描述 : 指定打开或者关闭ap的edca优化功能
4026
4027 修改历史 :
4028 1.日 期 : 2014年1月14日
4029 作 者 : HiSilicon
4030 修改内容 : 新生成函数
4031
4032 **************************************************************************** */
wal_hipriv_set_edca_opt_switch_ap(oal_net_device_stru * netdev,hi_char * pc_param)4033 static hi_u32 wal_hipriv_set_edca_opt_switch_ap(oal_net_device_stru *netdev, hi_char *pc_param)
4034 {
4035 wal_msg_write_stru write_msg;
4036 hi_u8 flag;
4037 hi_u8 *puc_value = 0;
4038 hi_u32 ret;
4039 hi_u32 off_set = 0;
4040 mac_vap_stru *mac_vap = HI_NULL;
4041 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN];
4042
4043 /* sh hipriv.sh "vap0 set_edca_switch_ap 1/0" */
4044 /* 获取mac_vap */
4045 mac_vap = oal_net_dev_priv(netdev);
4046 if ((mac_vap->vap_mode != WLAN_VAP_MODE_BSS_AP)
4047 #ifdef _PRE_WLAN_FEATURE_MESH
4048 && (mac_vap->vap_mode != WLAN_VAP_MODE_MESH)
4049 #endif
4050 ) {
4051 oam_warning_log0(0, OAM_SF_EDCA, "{wal_hipriv_set_edca_opt_cycle_ap:: only AP_MODE support}");
4052 return HI_FAIL;
4053 }
4054
4055 /* 获取配置参数 */
4056 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4057 if (ret != HI_SUCCESS) {
4058 oam_warning_log1(0, OAM_SF_EDCA,
4059 "{wal_hipriv_set_edca_opt_cycle_ap::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
4060 return ret;
4061 }
4062
4063 flag = (hi_u8)oal_atoi(ac_name);
4064 /* 非法配置参数 */
4065 if (flag > 1) {
4066 oam_warning_log0(0, OAM_SF_EDCA, "wal_hipriv_set_edca_opt_cycle_ap, invalid config, should be 0 or 1");
4067 return HI_SUCCESS;
4068 }
4069
4070 /* 申请事件内存 */
4071 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_EDCA_OPT_SWITCH_AP, sizeof(hi_u8));
4072 puc_value = (hi_u8 *)(write_msg.auc_value);
4073 *puc_value = flag;
4074
4075 /* **************************************************************************
4076 抛事件到wal层处理
4077 ************************************************************************** */
4078 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_u8),
4079 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
4080 if (oal_unlikely(ret != HI_SUCCESS)) {
4081 oam_warning_log1(0, OAM_SF_EDCA, "{wal_hipriv_set_edca_opt_switch_ap::return err_code [%u]!}\r\n", ret);
4082 return ret;
4083 }
4084
4085 return HI_SUCCESS;
4086 }
4087
4088 /* ****************************************************************************
4089 功能描述 : 调整edca参数调整的周期
4090
4091 修改历史 :
4092 1.日 期 : 2014年1月14日
4093 作 者 : HiSilicon
4094 修改内容 : 新生成函数
4095
4096 **************************************************************************** */
wal_hipriv_set_edca_opt_cycle_ap(oal_net_device_stru * netdev,hi_char * pc_param)4097 static hi_u32 wal_hipriv_set_edca_opt_cycle_ap(oal_net_device_stru *netdev, hi_char *pc_param)
4098 {
4099 wal_msg_write_stru write_msg;
4100 hi_u32 cycle_ms;
4101 hi_u32 *pul_value = 0;
4102 hi_u32 ret;
4103 hi_u32 off_set = 0;
4104 mac_vap_stru *mac_vap = HI_NULL;
4105 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN];
4106
4107 /* sh hipriv.sh "vap0 set_edca_cycle_ap 200" */
4108 /* 获取mac_vap */
4109 mac_vap = oal_net_dev_priv(netdev);
4110 if ((mac_vap->vap_mode != WLAN_VAP_MODE_BSS_AP)
4111 #ifdef _PRE_WLAN_FEATURE_MESH
4112 || (mac_vap->vap_mode != WLAN_VAP_MODE_MESH)
4113 #endif
4114 ) {
4115 oam_warning_log0(0, OAM_SF_EDCA, "{wal_hipriv_set_edca_opt_cycle_ap:: only AP_MODE support}");
4116 return HI_FAIL;
4117 }
4118
4119 /* 获取参数值 */
4120 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4121 if (ret != HI_SUCCESS) {
4122 oam_warning_log1(0, OAM_SF_EDCA,
4123 "{wal_hipriv_set_edca_opt_cycle_ap::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
4124 return ret;
4125 }
4126
4127 cycle_ms = (hi_u32)oal_atoi(ac_name);
4128
4129 /* 申请事件内存 */
4130 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_EDCA_OPT_CYCLE_AP, sizeof(hi_u32));
4131 pul_value = (hi_u32 *)(write_msg.auc_value);
4132 *pul_value = cycle_ms;
4133
4134 /* **************************************************************************
4135 抛事件到wal层处理
4136 ************************************************************************** */
4137 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_u32),
4138 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
4139 if (oal_unlikely(ret != HI_SUCCESS)) {
4140 oam_warning_log1(0, OAM_SF_EDCA, "{wal_hipriv_set_edca_opt_cycle_ap::return err code [%u]!}\r\n", ret);
4141 return ret;
4142 }
4143
4144 return HI_SUCCESS;
4145 }
4146 #endif
4147 #endif
4148
4149 #ifdef _PRE_WLAN_FEATURE_HIPRIV
4150 /* ****************************************************************************
4151 功能描述 : 设置VAP mib
4152
4153 修改历史 :
4154 1.日 期 : 2014年2月27日
4155 作 者 : HiSilicon
4156 修改内容 : 新生成函数
4157 **************************************************************************** */
4158 /* 大数组g_ast_hipriv_cmd成员,其中一个成员wal_hipriv_getcountry对pc_param所指向的内容进行了修改,lint_t e818告警屏蔽 */
wal_hipriv_set_mib(oal_net_device_stru * netdev,hi_char * pc_param)4159 static hi_u32 wal_hipriv_set_mib(oal_net_device_stru *netdev, hi_char *pc_param)
4160 {
4161 wal_msg_write_stru write_msg;
4162 hi_u32 ret;
4163 hi_u16 us_len;
4164 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
4165 hi_u32 off_set = 0;
4166 hi_u32 mib_idx;
4167 hi_u32 mib_value;
4168 mac_cfg_set_mib_stru *set_mib = HI_NULL;
4169
4170 /* 获取设定mib名称 */
4171 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4172 if (ret != HI_SUCCESS) {
4173 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_mib::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
4174 return ret;
4175 }
4176 pc_param += off_set;
4177
4178 mib_idx = (hi_u32)oal_atoi(ac_name);
4179
4180 /* 获取设定置 */
4181 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4182 if (ret != HI_SUCCESS) {
4183 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_mib::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
4184 return ret;
4185 }
4186
4187 mib_value = (hi_u32)oal_atoi(ac_name);
4188
4189 set_mib = (mac_cfg_set_mib_stru *)(write_msg.auc_value);
4190 set_mib->mib_idx = mib_idx;
4191 set_mib->mib_value = mib_value;
4192 us_len = sizeof(mac_cfg_set_mib_stru);
4193
4194 /* **************************************************************************
4195 抛事件到wal层处理
4196 ************************************************************************** */
4197 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_MIB, us_len);
4198
4199 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + us_len, (hi_u8 *)&write_msg,
4200 HI_FALSE, HI_NULL);
4201 if (oal_unlikely(ret != HI_SUCCESS)) {
4202 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_mib::return err code [%u]!}\r\n", ret);
4203 return ret;
4204 }
4205
4206 return HI_SUCCESS;
4207 }
4208
4209 /* ****************************************************************************
4210 功能描述 : 获取VAP mib
4211
4212 修改历史 :
4213 1.日 期 : 2014年2月27日
4214 作 者 : HiSilicon
4215 修改内容 : 新生成函数
4216 **************************************************************************** */
4217 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_get_mib(oal_net_device_stru * netdev,hi_char * pc_param)4218 static hi_u32 wal_hipriv_get_mib(oal_net_device_stru *netdev, hi_char *pc_param)
4219 {
4220 wal_msg_write_stru write_msg;
4221 hi_u32 ret;
4222 hi_u16 us_len;
4223 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
4224 hi_u32 off_set = 0;
4225 hi_u32 mib_idx;
4226
4227 /* 获取mib名称 */
4228 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4229 if (ret != HI_SUCCESS) {
4230 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_get_mib::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
4231 return ret;
4232 }
4233
4234 mib_idx = (hi_u32)oal_atoi(ac_name);
4235
4236 us_len = sizeof(hi_u32);
4237 *(hi_u32 *)(write_msg.auc_value) = mib_idx;
4238 /* **************************************************************************
4239 抛事件到wal层处理
4240 ************************************************************************** */
4241 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_GET_MIB, us_len);
4242
4243 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + us_len, (hi_u8 *)&write_msg,
4244 HI_FALSE, HI_NULL);
4245 if (oal_unlikely(ret != HI_SUCCESS)) {
4246 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_get_mib::return err_code [%u]!}\r\n", ret);
4247 return ret;
4248 }
4249
4250 return HI_SUCCESS;
4251 }
4252 #endif
4253
4254 #ifdef _PRE_WLAN_FEATURE_STA_PM
4255 #if defined(_PRE_WLAN_FEATURE_HIPRIV) || defined(_PRE_WLAN_FEATURE_SIGMA)
4256 /* ****************************************************************************
4257 功能描述 : 私有命令,PM功能关闭开启
4258
4259 修改历史 :
4260 1.日 期 : 2014年12月10日
4261 作 者 : HiSilicon
4262 修改内容 : 新生成函数
4263 **************************************************************************** */
4264 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_sta_ps_mode(oal_net_device_stru * netdev,hi_char * pc_param)4265 static hi_u32 wal_hipriv_sta_ps_mode(oal_net_device_stru *netdev, hi_char *pc_param)
4266 {
4267 wal_msg_write_stru write_msg;
4268 hi_u32 off_set;
4269 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
4270 mac_cfg_ps_mode_param_stru *ps_mode_param = HI_NULL;
4271 oal_net_device_stru *netdev_tmp = HI_NULL;
4272 mac_vap_stru *mac_vap = HI_NULL;
4273 mac_device_stru *mac_dev = mac_res_get_dev();
4274 hi_u8 vap_idx;
4275
4276 hi_unref_param(netdev);
4277
4278 hi_u32 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4279 if (ret != HI_SUCCESS) {
4280 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_sta_ps_mode::wal_get_cmd_one_arg fail!}");
4281 return ret;
4282 }
4283
4284 hi_u8 vap_ps_mode = (hi_u8)oal_atoi(ac_name);
4285 /* 寻找STA */
4286 for (vap_idx = 0; vap_idx < mac_dev->vap_num; vap_idx++) {
4287 mac_vap = mac_vap_get_vap_stru(mac_dev->auc_vap_id[vap_idx]);
4288 if (mac_vap == HI_NULL) {
4289 continue;
4290 }
4291 if (mac_vap->vap_mode == WLAN_VAP_MODE_BSS_STA) {
4292 break;
4293 }
4294 }
4295 if (mac_vap == HI_NULL) {
4296 return HI_FAIL;
4297 }
4298 netdev_tmp = hmac_vap_get_net_device(mac_vap->vap_id);
4299 if (netdev_tmp == HI_NULL) {
4300 oam_error_log0(0, 0, "wal_hipriv_sta_ps_mode sta device not found.");
4301 return HI_FAIL;
4302 }
4303
4304 /* **************************************************************************
4305 抛事件到wal层处理
4306 ************************************************************************** */
4307 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_PS_MODE, sizeof(mac_cfg_ps_mode_param_stru));
4308
4309 /* 设置配置命令参数 */
4310 ps_mode_param = (mac_cfg_ps_mode_param_stru *)(write_msg.auc_value);
4311 ps_mode_param->vap_ps_mode = vap_ps_mode;
4312
4313 ret = wal_send_cfg_event(netdev_tmp, WAL_MSG_TYPE_WRITE,
4314 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_ps_mode_param_stru), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
4315 if (oal_unlikely(ret != HI_SUCCESS)) {
4316 oam_warning_log1(0, OAM_SF_PWR, "{wal_hipriv_sta_ps_mode::return err code [%u]!}\r\n", ret);
4317 return ret;
4318 }
4319
4320 return HI_SUCCESS;
4321 }
4322 #endif
4323
4324 /* ****************************************************************************
4325 功能描述 : 私有命令,sta psm的listen interval / tbtt offset
4326
4327 修改历史 :
4328 1.日 期 : 2015年5月3日
4329 作 者 : HiSilicon
4330 修改内容 : 新生成函数
4331
4332 **************************************************************************** */
wal_hipriv_sta_pm_on(oal_net_device_stru * netdev,const hi_char * pc_param)4333 hi_u32 wal_hipriv_sta_pm_on(oal_net_device_stru *netdev, const hi_char *pc_param)
4334 {
4335 wal_msg_write_stru write_msg;
4336 hi_u32 off_set;
4337 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
4338 hi_u32 ret;
4339 hi_u8 sta_pm_open;
4340 mac_cfg_ps_open_stru *sta_pm_open_info = HI_NULL;
4341
4342 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4343 if (ret != HI_SUCCESS) {
4344 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_sta_pm_open::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
4345 return ret;
4346 }
4347
4348 sta_pm_open = (hi_u8)oal_atoi(ac_name);
4349
4350 /* **************************************************************************
4351 抛事件到wal层处理
4352 ************************************************************************** */
4353 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_STA_PM_ON, sizeof(mac_cfg_ps_open_stru));
4354
4355 /* 设置配置命令参数 */
4356 sta_pm_open_info = (mac_cfg_ps_open_stru *)(write_msg.auc_value);
4357 /* MAC_STA_PM_SWITCH_ON / MAC_STA_PM_SWITCH_OFF */
4358 sta_pm_open_info->pm_enable = sta_pm_open;
4359 sta_pm_open_info->pm_ctrl_type = MAC_STA_PM_CTRL_TYPE_HOST;
4360
4361 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_ps_open_stru),
4362 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
4363 if (oal_unlikely(ret != HI_SUCCESS)) {
4364 oam_warning_log1(0, OAM_SF_PWR, "{wal_hipriv_sta_pm_open::return err code [%u]!}\r\n", ret);
4365 return ret;
4366 }
4367
4368 return HI_SUCCESS;
4369 }
4370
4371 #ifdef _PRE_WLAN_FEATURE_HIPRIV
wal_hipriv_sta_set_psm_offset(oal_net_device_stru * netdev,hi_char * param)4372 hi_u32 wal_hipriv_sta_set_psm_offset(oal_net_device_stru *netdev, hi_char *param)
4373 {
4374 wal_msg_write_stru write_msg;
4375 hi_u32 off_set;
4376 hi_char name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {'\0'};
4377 hi_u32 ret;
4378 hi_u16 beacon_timeout;
4379 hi_u16 tbtt_offset;
4380 hi_u16 ext_tbtt_offset;
4381 mac_cfg_ps_param_stru *cfg_ps_para = HI_NULL;
4382
4383 /* beacon timeout */
4384 ret = wal_get_cmd_one_arg(param, name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4385 if (ret != HI_SUCCESS) {
4386 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_sta_psm_param::btout arg error [%d]!}", ret);
4387 return ret;
4388 }
4389
4390 beacon_timeout = (hi_u16)oal_atoi(name);
4391 param = param + off_set;
4392
4393 /* tbtt offset */
4394 ret = wal_get_cmd_one_arg(param, name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4395 if (ret != HI_SUCCESS) {
4396 oam_warning_log1(0, OAM_SF_PWR, "{wal_hipriv_sta_psm_param::tbtt arg error [%d]!}", ret);
4397 return ret;
4398 }
4399
4400 tbtt_offset = (hi_u16)oal_atoi(name);
4401 param = param + off_set;
4402
4403 /* ext tbtt offset */
4404 ret = wal_get_cmd_one_arg(param, name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4405 if (ret != HI_SUCCESS) {
4406 oam_warning_log1(0, OAM_SF_PWR, "{wal_hipriv_sta_psm_param::ext tbtt arg error [%d]!}", ret);
4407 return ret;
4408 }
4409
4410 ext_tbtt_offset = (hi_u16)oal_atoi(name);
4411
4412 oam_info_log3(0, OAM_SF_PWR, "{wal_hipriv_sta_psm_param::[bcn tout] %d [tbtt] %d [ext] %d}!", beacon_timeout,
4413 tbtt_offset, ext_tbtt_offset);
4414
4415 /* **************************************************************************
4416 抛事件到wal层处理
4417 ************************************************************************** */
4418 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_PSM_PARAM, sizeof(mac_cfg_ps_param_stru));
4419
4420 /* 设置配置命令参数 */
4421 cfg_ps_para = (mac_cfg_ps_param_stru *)(write_msg.auc_value);
4422 cfg_ps_para->beacon_timeout = beacon_timeout;
4423 cfg_ps_para->tbtt_offset = tbtt_offset;
4424 cfg_ps_para->ext_tbtt_offset = ext_tbtt_offset;
4425
4426 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_ps_param_stru),
4427 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
4428 if (oal_unlikely(ret != HI_SUCCESS)) {
4429 oam_warning_log1(0, OAM_SF_PWR, "{wal_hipriv_sta_psm_param::send evt error [%d]!}", ret);
4430 return ret;
4431 }
4432
4433 return HI_SUCCESS;
4434 }
4435
wal_hipriv_sta_set_offload_param(oal_net_device_stru * netdev,hi_char * param)4436 hi_u32 wal_hipriv_sta_set_offload_param(oal_net_device_stru *netdev, hi_char *param)
4437 {
4438 wal_msg_write_stru write_msg;
4439 hi_u32 offset;
4440 hi_char name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
4441 hi_u32 ret;
4442 mac_cfg_psm_offset cfg;
4443
4444 /* 安全编程规则6.6例外(1) 对固定长度的数组进行初始化,或对固定长度的结构体进行内存初始化 */
4445 memset_s(&cfg, sizeof(mac_cfg_psm_offset), 0, sizeof(mac_cfg_psm_offset));
4446 ret = wal_get_cmd_one_arg(param, name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &offset);
4447 if (ret != HI_SUCCESS) {
4448 oam_warning_log1(0, OAM_SF_PWR, "{wal_hipriv_sta_set_psm_offset::wal_get_cmd_one_arg return err_code [%u]!}",
4449 ret);
4450 return ret;
4451 }
4452
4453 if (strcmp("free_arp_interval", name) == 0) {
4454 cfg.type = MAC_PSM_FREE_ARP_INTERVAL;
4455 }
4456 param = param + offset;
4457
4458 ret = wal_get_cmd_one_arg(param, name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &offset);
4459 if (ret != HI_SUCCESS) {
4460 oam_warning_log1(0, OAM_SF_PWR, "{wal_hipriv_sta_set_psm_offset::wal_get_cmd_one_arg return err_code [%u]!}",
4461 ret);
4462 return ret;
4463 }
4464
4465 cfg.value = (hi_u16)oal_atoi(name);
4466 cfg.resv = 0;
4467 /* **************************************************************************
4468 抛事件到wal层处理
4469 ************************************************************************** */
4470 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_PSM_OFFSET, sizeof(mac_cfg_psm_offset));
4471 if (memcpy_s(write_msg.auc_value, sizeof(mac_cfg_psm_offset), &cfg, sizeof(mac_cfg_psm_offset)) != EOK) {
4472 oam_error_log0(0, OAM_SF_PWR, "{wal_hipriv_sta_set_psm_offset::mem safe function err!}");
4473 return HI_FAIL;
4474 }
4475 /* 设置配置命令参数 */
4476 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_psm_offset),
4477 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
4478 if (oal_unlikely(ret != HI_SUCCESS)) {
4479 oam_warning_log1(0, OAM_SF_PWR, "{wal_hipriv_sta_set_psm_offset::return err code [%u]!}", ret);
4480 return ret;
4481 }
4482
4483 return HI_SUCCESS;
4484 }
4485
4486 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_sta_set_hw_ps_mode(oal_net_device_stru * netdev,hi_char * param)4487 hi_u32 wal_hipriv_sta_set_hw_ps_mode(oal_net_device_stru *netdev, hi_char *param)
4488 {
4489 wal_msg_write_stru write_msg;
4490 hi_u32 ret;
4491 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
4492 hi_u32 off_set = 0;
4493 hi_u8 hw_ps_mode;
4494
4495 /* 获取设定的值 */
4496 ret = wal_get_cmd_one_arg(param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4497 if (ret != HI_SUCCESS) {
4498 oam_warning_log1(0, OAM_SF_PWR, "{wal_hipriv_sta_set_hw_ps_mode::get_one_arg return err_code [%d]!}", ret);
4499 return ret;
4500 }
4501
4502 hw_ps_mode = (hi_u8)oal_atoi(ac_name);
4503 /* **************************************************************************
4504 抛事件到wal层处理
4505 ************************************************************************** */
4506 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_STA_HW_PS_MODE, sizeof(hi_u8));
4507 *(hi_u8 *)(write_msg.auc_value) = hw_ps_mode;
4508
4509 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_u8),
4510 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
4511 if (oal_unlikely(ret != HI_SUCCESS)) {
4512 oam_warning_log1(0, OAM_SF_PWR, "{wal_hipriv_sta_set_hw_ps_mode::return err code [%u]!}", ret);
4513 return ret;
4514 }
4515 return HI_SUCCESS;
4516 }
4517 #endif
4518
4519 #if defined(_PRE_WLAN_FEATURE_HIPRIV) || defined(_PRE_WLAN_FEATURE_SIGMA)
4520 /* ****************************************************************************
4521 功能描述 : 私有命令,UAPSD参数配置
4522
4523 修改历史 :
4524 1.日 期 : 2014年12月22日
4525 作 者 : HiSilicon
4526 修改内容 : 新生成函数
4527
4528 **************************************************************************** */
wal_hipriv_set_uapsd_para(oal_net_device_stru * netdev,hi_char * pc_param)4529 hi_u32 wal_hipriv_set_uapsd_para(oal_net_device_stru *netdev, hi_char *pc_param)
4530 {
4531 wal_msg_write_stru write_msg;
4532 hi_u32 off_set;
4533 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
4534 hi_u32 ret;
4535 mac_cfg_uapsd_sta_stru *uapsd_param = HI_NULL;
4536 hi_u8 max_sp_len;
4537 hi_u8 ac;
4538 hi_u8 delivery_map = 0;
4539 hi_u8 orig_dev_state = wal_dev_is_running();
4540
4541 if (wal_netdev_stop(netdev) != HI_SUCCESS) {
4542 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_uapsd_para::wal_netdev_stop failed\r\n");
4543 return HI_FAIL;
4544 }
4545
4546 if ((OAL_IFF_RUNNING & oal_netdevice_flags(netdev)) != 0) {
4547 oam_error_log1(0, OAM_SF_ANY, "{wal_hipriv_set_uapsd_para::device is busy, please down it first %d!}\n",
4548 oal_netdevice_flags(netdev));
4549 return HI_FAIL;
4550 }
4551
4552 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4553 if (ret != HI_SUCCESS) {
4554 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_uapsd_para::wal_get_cmd_one_arg return err_code [%u]!}\r\n",
4555 ret);
4556 return ret;
4557 }
4558
4559 max_sp_len = (hi_u8)oal_atoi(ac_name);
4560
4561 for (ac = 0; ac < WLAN_WME_AC_BUTT; ac++) {
4562 pc_param = pc_param + off_set;
4563 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4564 if (ret != HI_SUCCESS) {
4565 oam_warning_log1(0, OAM_SF_ANY,
4566 "{wal_hipriv_set_uapsd_para::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
4567 return ret;
4568 }
4569
4570 /* delivery_enabled的参数设置 */
4571 delivery_map |= (hi_u8)(((hi_u8)oal_atoi(ac_name) & BIT0) << ac);
4572 }
4573
4574 /* **************************************************************************
4575 抛事件到wal层处理
4576 ************************************************************************** */
4577 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_UAPSD_PARA, sizeof(mac_cfg_uapsd_sta_stru));
4578
4579 /* 设置配置命令参数 */
4580 uapsd_param = (mac_cfg_uapsd_sta_stru *)(write_msg.auc_value);
4581 uapsd_param->max_sp_len = max_sp_len;
4582 uapsd_param->delivery_map = delivery_map;
4583 /* trigger_enabled 参数的设置 trigger与delivery一致 */
4584 uapsd_param->trigger_map = delivery_map;
4585 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_uapsd_sta_stru),
4586 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
4587 if (oal_unlikely(ret != HI_SUCCESS)) {
4588 oam_warning_log1(0, OAM_SF_PWR, "{wal_hipriv_set_uapsd_para::return err code [%u]!}\r\n", ret);
4589 return ret;
4590 }
4591
4592 if (orig_dev_state == HI_TRUE) {
4593 if (wal_netdev_open(netdev) != HI_SUCCESS) {
4594 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_uapsd_para::wal_netdev_open failed\r\n");
4595 return HI_FAIL;
4596 }
4597 }
4598
4599 return HI_SUCCESS;
4600 }
4601 #endif
4602 #endif
4603
4604 #if defined(_PRE_WLAN_FEATURE_HIPRIV) || defined(_PRE_WLAN_FEATURE_SIGMA)
4605 /* ****************************************************************************
4606 功能描述 : 设置20M short gi参数
4607 修改历史 :
4608 1.日 期 : 2019年1月24日
4609 修改内容 : 新生成函数
4610 **************************************************************************** */
4611 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_set_shortgi20(oal_net_device_stru * netdev,hi_char * pc_param)4612 hi_u32 wal_hipriv_set_shortgi20(oal_net_device_stru *netdev, hi_char *pc_param)
4613 {
4614 wal_msg_write_stru write_msg;
4615 hi_s32 l_tmp;
4616 hi_u32 off_set;
4617 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
4618 hi_u32 ret;
4619
4620 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4621 if (ret != HI_SUCCESS) {
4622 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_shortgi20::wal_get_cmd_one_arg return err_code %d!}\r\n", ret);
4623 return ret;
4624 }
4625
4626 if (strcmp("0", ac_name) == 0) {
4627 l_tmp = 0;
4628 } else if (strcmp("1", ac_name) == 0) {
4629 l_tmp = 1;
4630 } else {
4631 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_shortgi20::command param is error!}\r\n");
4632 return HI_ERR_CODE_INVALID_CONFIG;
4633 }
4634
4635 /* **************************************************************************
4636 抛事件到wal层处理
4637 ************************************************************************** */
4638 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SHORTGI, sizeof(hi_s32));
4639 *((hi_s32 *)(write_msg.auc_value)) = l_tmp; /* 设置配置命令参数 */
4640
4641 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_s32),
4642 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
4643 if (oal_unlikely(ret != HI_SUCCESS)) {
4644 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_shortgi20::return err code [%u]!}\r\n", ret);
4645 return ret;
4646 }
4647
4648 return HI_SUCCESS;
4649 }
4650 #endif
4651
4652 #ifdef _PRE_WLAN_FEATURE_HIPRIV
4653 /* ****************************************************************************
4654 函 数 名 : wal_hipriv_set_retry_limit
4655 功能描述 : 设置软件重传参数
4656 输入参数 : [1]net_dev
4657 [2]pc_param
4658 返 回 值 : static hi_u32
4659 **************************************************************************** */
4660 /* 大数组g_ast_hipriv_cmd成员,其中一个成员wal_hipriv_getcountry对pc_param所指向的内容进行了修改,lint_t e818告警屏蔽 */
wal_hipriv_set_retry_limit(oal_net_device_stru * netdev,hi_char * pc_param)4661 static hi_u32 wal_hipriv_set_retry_limit(oal_net_device_stru *netdev, hi_char *pc_param)
4662 {
4663 wal_msg_write_stru write_msg;
4664 hi_u32 off_set;
4665 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
4666 hi_u32 ret;
4667 mac_cfg_retry_param_stru *set_param = HI_NULL;
4668 hi_u8 type;
4669 hi_u8 limit;
4670
4671 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4672 if (ret != HI_SUCCESS) {
4673 oam_warning_log1(0, OAM_SF_CFG, "{wal_hipriv_set_retry_limit::wal_get_cmd_one_arg return err_code %d!}\r\n",
4674 ret);
4675 return ret;
4676 }
4677 pc_param += off_set;
4678
4679 type = (hi_u8)oal_atoi(ac_name);
4680
4681 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4682 if (ret != HI_SUCCESS) {
4683 oam_warning_log1(0, OAM_SF_CFG, "{wal_hipriv_set_retry_limit1::wal_get_cmd_one_arg return err_code %d!}\r\n",
4684 ret);
4685 return ret;
4686 }
4687
4688 limit = (hi_u8)oal_atoi(ac_name);
4689
4690 set_param = (mac_cfg_retry_param_stru *)(write_msg.auc_value);
4691 set_param->type = type;
4692 set_param->limit = limit;
4693
4694 /* **************************************************************************
4695 抛事件到wal层处理
4696 ************************************************************************** */
4697 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_RETRY_LIMIT, sizeof(mac_cfg_retry_param_stru));
4698
4699 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
4700 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_retry_param_stru), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
4701 if (oal_unlikely(ret != HI_SUCCESS)) {
4702 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_retry_limit::return err code [%u]!}\r\n", ret);
4703 return ret;
4704 }
4705
4706 return HI_SUCCESS;
4707 }
4708 #endif
4709
4710 #ifdef _PRE_WLAN_FEATURE_MESH
4711 #ifdef _PRE_WLAN_FEATURE_HIPRIV
4712 /* ****************************************************************************
4713 函 数 名 : wal_hipriv_set_report_param
4714 功能描述 : 设置驱动上报lwip 重传次数的相关限制参数
4715
4716 修改历史 :
4717 1.日 期 : 2019年3月9日
4718 作 者 : HiSilicon
4719 修改内容 : 新生成函数
4720 **************************************************************************** */
4721 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_set_report_times_limit(oal_net_device_stru * netdev,hi_char * pc_param)4722 static hi_u32 wal_hipriv_set_report_times_limit(oal_net_device_stru *netdev, hi_char *pc_param)
4723 {
4724 wal_msg_write_stru write_msg;
4725 hi_u32 off_set;
4726 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
4727 hi_u32 ret;
4728 hi_u8 times_limit;
4729
4730 /*
4731 命令格式
4732 hipriv wlan0 set_times_limit X
4733 */
4734 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4735 if (ret != HI_SUCCESS) {
4736 oam_warning_log1(0, OAM_SF_CFG,
4737 "{wal_hipriv_set_report_times_limit::wal_get_cmd_one_arg return err_code %d!}\r\n", ret);
4738 return ret;
4739 }
4740
4741 times_limit = (hi_u8)oal_atoi(ac_name);
4742
4743 /* **************************************************************************
4744 抛事件到wal层处理
4745 ************************************************************************** */
4746 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_REPORT_TIMES_LIMIT, sizeof(hi_u8));
4747 *(write_msg.auc_value) = times_limit; /* 设置配置命令参数 */
4748
4749 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_u8),
4750 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
4751 if (oal_unlikely(ret != HI_SUCCESS)) {
4752 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_report_times_limit::return err code [%u]!}\r\n", ret);
4753 return HI_FAIL;
4754 }
4755
4756 return HI_SUCCESS;
4757 }
4758
4759 /* ****************************************************************************
4760 功能描述 : 设置驱动上报lwip 重传次数的相关限制参数
4761
4762 修改历史 :
4763 1.日 期 : 2019年3月9日
4764 作 者 : HiSilicon
4765 修改内容 : 新生成函数
4766 **************************************************************************** */
4767 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_set_report_cnt_limit(oal_net_device_stru * netdev,hi_char * pc_param)4768 static hi_u32 wal_hipriv_set_report_cnt_limit(oal_net_device_stru *netdev, hi_char *pc_param)
4769 {
4770 wal_msg_write_stru write_msg;
4771 hi_u32 off_set;
4772 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
4773 hi_u32 ret;
4774 hi_u8 cnt_limit;
4775
4776 /*
4777 命令格式
4778 hipriv wlan0 set_cnt_limit X
4779 */
4780 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4781 if (ret != HI_SUCCESS) {
4782 oam_warning_log1(0, OAM_SF_CFG,
4783 "{wal_hipriv_set_report_cnt_limit::wal_get_cmd_one_arg return err_code %d!}\r\n", ret);
4784 return ret;
4785 }
4786
4787 cnt_limit = (hi_u8)oal_atoi(ac_name);
4788
4789 /* **************************************************************************
4790 抛事件到wal层处理
4791 ************************************************************************** */
4792 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_REPORT_CNT_LIMIT, sizeof(hi_u8));
4793 *(write_msg.auc_value) = cnt_limit; /* 设置配置命令参数 */
4794
4795 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_u8),
4796 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
4797 if (oal_unlikely(ret != HI_SUCCESS)) {
4798 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_report_cnt_limit::return err code [%u]!}\r\n", ret);
4799 return HI_FAIL;
4800 }
4801
4802 return HI_SUCCESS;
4803 }
4804
4805 /* ****************************************************************************
4806 功能描述 : 设置mesh vap是否为MBR节点
4807
4808 修改历史 :
4809 1.日 期 : 2019年4月28日
4810 作 者 : HiSilicon
4811 修改内容 : 新生成函数
4812 **************************************************************************** */
4813 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_set_en_mbr(oal_net_device_stru * netdev,hi_char * pc_param)4814 static hi_u32 wal_hipriv_set_en_mbr(oal_net_device_stru *netdev, hi_char *pc_param)
4815 {
4816 wal_msg_write_stru write_msg;
4817 hi_u32 off_set;
4818 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
4819 hi_u32 ret;
4820 hi_u8 mbr;
4821
4822 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4823 if (ret != HI_SUCCESS) {
4824 oam_warning_log1(0, OAM_SF_CFG, "{wal_hipriv_set_en_mbr:wal_get_cmd_one_arg return err_code %d!}\r\n", ret);
4825 return ret;
4826 }
4827 if (strcmp("0", ac_name) == 0) {
4828 mbr = HI_FALSE;
4829 } else if (strcmp("1", ac_name) == 0) {
4830 mbr = HI_TRUE;
4831 } else {
4832 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_en_mbr::command param is error!}\r\n");
4833 return HI_ERR_CODE_INVALID_CONFIG;
4834 }
4835
4836 /* **************************************************************************
4837 抛事件到wal层处理
4838 ************************************************************************** */
4839 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_MBR_EN, sizeof(hi_u8));
4840 *(write_msg.auc_value) = mbr; /* 设置配置命令参数 */
4841
4842 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_u8),
4843 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
4844 if (oal_unlikely(ret != HI_SUCCESS)) {
4845 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_en_mbr::return err code [%u]!}\r\n", ret);
4846 return HI_FAIL;
4847 }
4848
4849 return HI_SUCCESS;
4850 }
4851
4852 /* ****************************************************************************
4853 功能描述 : 设置mesh vap的mnid
4854
4855 修改历史 :
4856 1.日 期 : 2019年4月28日
4857 作 者 : HiSilicon
4858 修改内容 : 新生成函数
4859 **************************************************************************** */
4860 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_set_mnid(oal_net_device_stru * netdev,hi_char * pc_param)4861 static hi_u32 wal_hipriv_set_mnid(oal_net_device_stru *netdev, hi_char *pc_param)
4862 {
4863 wal_msg_write_stru write_msg;
4864 hi_u32 off_set;
4865 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
4866 hi_u32 ret;
4867 hi_u8 mnid;
4868
4869 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4870 if (ret != HI_SUCCESS) {
4871 oam_warning_log1(0, OAM_SF_CFG, "{wal_hipriv_set_mnid::wal_get_cmd_one_arg return err_code %d!}\r\n", ret);
4872 return ret;
4873 }
4874
4875 mnid = (hi_u8)oal_atoi(ac_name);
4876
4877 /* **************************************************************************
4878 抛事件到wal层处理
4879 ************************************************************************** */
4880 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_MNID, sizeof(hi_u8));
4881 *(write_msg.auc_value) = mnid; /* 设置配置命令参数 */
4882
4883 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_u8),
4884 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
4885 if (oal_unlikely(ret != HI_SUCCESS)) {
4886 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_mnid::return err code [%u]!}\r\n", ret);
4887 return HI_FAIL;
4888 }
4889
4890 return HI_SUCCESS;
4891 }
4892
4893 /* ****************************************************************************
4894 功能描述 : 设置beacon priority(调试接口)
4895
4896 修改历史 :
4897 1.日 期 : 2019年6月3日
4898 作 者 : HiSilicon
4899 修改内容 : 新生成函数
4900 **************************************************************************** */
4901 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_set_beacon_priority(oal_net_device_stru * netdev,hi_char * pc_param)4902 static hi_u32 wal_hipriv_set_beacon_priority(oal_net_device_stru *netdev, hi_char *pc_param)
4903 {
4904 wal_msg_write_stru write_msg;
4905 hi_u32 off_set;
4906 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
4907 hi_u32 ret;
4908 hi_u32 beacon_prio;
4909
4910 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4911 if (ret != HI_SUCCESS) {
4912 oam_warning_log1(0, OAM_SF_CFG, "{wal_hipriv_set_beacon_priority::wal_get_cmd_one_arg return err_code %d!}\r\n",
4913 ret);
4914 return ret;
4915 }
4916
4917 beacon_prio = (hi_u32)oal_atoi(ac_name);
4918 if (beacon_prio > WLAN_MESH_BEACON_PRIO_MAX) {
4919 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_beacon_priority::invalid beacon prio!!}\r\n");
4920 return HI_FAIL;
4921 }
4922
4923 /* **************************************************************************
4924 抛事件到wal层处理
4925 ************************************************************************** */
4926 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_BEACON_PRIORITY, sizeof(hi_u8));
4927 *(write_msg.auc_value) = (hi_u8)beacon_prio; /* 设置配置命令参数 */
4928
4929 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_u8),
4930 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
4931 if (oal_unlikely(ret != HI_SUCCESS)) {
4932 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_beacon_priority::return err code [%u]!}\r\n", ret);
4933 return ret;
4934 }
4935
4936 return HI_SUCCESS;
4937 }
4938
4939 /* ****************************************************************************
4940 功能描述 : 设置Mesh Accept STA标志位(调试接口)
4941
4942 修改历史 :
4943 1.日 期 : 2019年6月20日
4944 作 者 : HiSilicon
4945 修改内容 : 新生成函数
4946 **************************************************************************** */
4947 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_set_mesh_accept_sta(oal_net_device_stru * netdev,hi_char * pc_param)4948 static hi_u32 wal_hipriv_set_mesh_accept_sta(oal_net_device_stru *netdev, hi_char *pc_param)
4949 {
4950 wal_msg_write_stru write_msg;
4951 hi_u32 off_set;
4952 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
4953 hi_u32 ret;
4954 hi_u8 accept_sta;
4955
4956 /* 获取RSSI门限开关 */
4957 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
4958 if (ret != HI_SUCCESS) {
4959 oam_warning_log1(0, OAM_SF_ANY,
4960 "{wal_hipriv_set_mesh_accept_sta::wal_get_cmd_one_arg return err_code [%u]!}\r\n", ret);
4961 return ret;
4962 }
4963
4964 if ((strcmp("0", ac_name) == 0)) {
4965 accept_sta = 0;
4966 } else if ((strcmp("1", ac_name) == 0)) {
4967 accept_sta = 1;
4968 } else {
4969 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_mesh_accept_sta::the mod switch command is error [%p]!}\r\n",
4970 (uintptr_t)ac_name);
4971 return HI_ERR_CODE_INVALID_CONFIG;
4972 }
4973
4974 /* **************************************************************************
4975 抛事件到wal层处理
4976 ************************************************************************** */
4977 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_MESH_ACCEPT_STA, sizeof(hi_u8));
4978 *(write_msg.auc_value) = accept_sta; /* 设置配置命令参数 */
4979
4980 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_u8),
4981 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
4982 if (oal_unlikely(ret != HI_SUCCESS)) {
4983 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_mesh_accept_sta::return err code [%u]!}\r\n", ret);
4984 return ret;
4985 }
4986
4987 return HI_SUCCESS;
4988 }
4989 #endif
4990 #endif
4991
4992 #if defined(_PRE_WLAN_FEATURE_ARP_OFFLOAD) || defined(_PRE_WLAN_FEATURE_DHCP_OFFLOAD)
4993 #ifdef _PRE_WLAN_FEATURE_HIPRIV
wal_hipriv_offload_parse_ipv4(hi_char * ip_str,hi_u32 * result)4994 static hi_u32 wal_hipriv_offload_parse_ipv4(hi_char *ip_str, hi_u32 *result)
4995 {
4996 const hi_char *delims = ".";
4997 hi_char *byte = HI_NULL;
4998 hi_u8 count = 0;
4999 hi_u32 byte_value;
5000
5001 if (strlen(ip_str) > 15) { /* IPV4 字符串长度最大 15 字节 */
5002 oam_error_log0(0, OAM_SF_ANY, "{wal_hipriv_offload_parse_ipv4::ip len wrong!}\n");
5003 return HI_FAIL;
5004 }
5005
5006 byte = oal_strtok(ip_str, delims);
5007 while (byte != HI_NULL) {
5008 byte_value = (hi_u32)oal_atoi(byte);
5009 byte_value <<= count * 8; /* 移位3次,每次8比特。 */
5010 count++;
5011 *result += byte_value;
5012 byte = oal_strtok(HI_NULL, delims);
5013 }
5014
5015 if (count != 4) { /* IPV4的长度为4个字节 */
5016 oam_error_log0(0, OAM_SF_ANY, "{wal_hipriv_offload_parse_ipv4::ip format wrong!}\n");
5017 return HI_FAIL;
5018 }
5019
5020 return HI_SUCCESS;
5021 }
5022
wal_hipriv_offload_build_ipv4(hi_char * param,mac_ip_addr_config_stru * ip)5023 static hi_u32 wal_hipriv_offload_build_ipv4(hi_char *param, mac_ip_addr_config_stru *ip)
5024 {
5025 hi_u32 ret;
5026 hi_u32 offset;
5027 hi_char name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
5028
5029 /* 默认IPV4类型 */
5030 ip->type = MAC_CONFIG_IPV4;
5031
5032 /* 获取IP操作 */
5033 ret = wal_get_cmd_one_arg(param, name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &offset);
5034 if (ret != HI_SUCCESS) {
5035 oam_warning_log1(0, OAM_SF_PWR, "{wal_hipriv_offload_build_ipv4::wal_get_cmd_one_arg return err_code [%u]!}\n",
5036 ret);
5037 return ret;
5038 }
5039 param = param + offset;
5040 if ((strcmp("0", name) == 0)) {
5041 ip->oper = MAC_IP_ADDR_DEL;
5042 /* 清楚所有ip地址,返回成功 */
5043 return HI_SUCCESS;
5044 } else if (strcmp("1", name) == 0) {
5045 ip->oper = MAC_IP_ADDR_ADD;
5046 } else {
5047 oam_error_log0(0, OAM_SF_PWR, "{wal_hipriv_offload_build_ipv4::IP operation wrong.}");
5048 }
5049
5050 /* 获取IP地址 */
5051 ret = wal_get_cmd_one_arg(param, name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &offset);
5052 if (ret != HI_SUCCESS) {
5053 oam_warning_log1(0, OAM_SF_PWR, "{wal_hipriv_offload_build_ipv4::wal_get_cmd_one_arg return err_code [%u]!}\n",
5054 ret);
5055 return ret;
5056 }
5057 ret = wal_hipriv_offload_parse_ipv4(name, &ip->ip.ipv4);
5058 if (ret != HI_SUCCESS) {
5059 oam_warning_log1(0, OAM_SF_PWR,
5060 "{wal_hipriv_offload_build_ipv4::wal_hipriv_offload_parse_ipv4 return err_code [%u]!}\n", ret);
5061 return ret;
5062 }
5063
5064 return HI_SUCCESS;
5065 }
5066 #endif
5067 #endif
5068
5069 #ifdef _PRE_WLAN_FEATURE_ARP_OFFLOAD
5070 #ifdef _PRE_WLAN_FEATURE_HIPRIV
5071 /* ****************************************************************************m
5072 功能描述 : 使能 ARP offload 功能
5073 命令格式 : hipriv wlan0 arp_offload 0/1 ip
5074 修改历史 :
5075 1.日 期 : 2019年4月19日
5076 作 者 : HiSilicon
5077 修改内容 : 新生成函数
5078 **************************************************************************** */
5079 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_arp_offload_setting(oal_net_device_stru * netdev,hi_char * param)5080 static hi_u32 wal_hipriv_arp_offload_setting(oal_net_device_stru *netdev, hi_char *param)
5081 {
5082 wal_msg_write_stru write_msg;
5083 hi_u32 ret;
5084 hi_u16 len;
5085 mac_ip_addr_config_stru ip_addr_cfg = {0};
5086
5087 ret = wal_hipriv_offload_build_ipv4(param, &ip_addr_cfg);
5088 if (ret != HI_SUCCESS) {
5089 oam_warning_log1(0, OAM_SF_PWR, "{wal_hipriv_arp_offload_setting::build_ip error[%d]!}\n", ret);
5090 return HI_FAIL;
5091 }
5092
5093 /* **************************************************************************
5094 抛事件到wal层处理
5095 ************************************************************************** */
5096 if (memcpy_s(write_msg.auc_value, sizeof(mac_ip_addr_config_stru), (const hi_void *)&ip_addr_cfg,
5097 sizeof(mac_ip_addr_config_stru)) != EOK) {
5098 oam_error_log0(0, 0, "{wal_hipriv_arp_offload_setting::mem safe function err!}");
5099 return HI_FAIL;
5100 }
5101 len = sizeof(mac_ip_addr_config_stru);
5102
5103 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_ARP_OFFLOAD_SETTING, len);
5104 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + len, (hi_u8 *)&write_msg,
5105 HI_FALSE, HI_NULL);
5106 if (oal_unlikely(ret != HI_SUCCESS)) {
5107 oam_warning_log1(0, OAM_SF_PWR, "{wal_hipriv_arp_offload_setting::wal_send_cfg_event error[%u]!}\r\n", ret);
5108 return ret;
5109 }
5110
5111 return HI_SUCCESS;
5112 }
5113
5114 /* ****************************************************************************
5115 功能描述 : 显示 ARP offload 信息
5116 命令格式 : hipriv wlan0 arp_offload_show_info 1/0 1/0
5117
5118 修改历史 :
5119 1.日 期 : 2019年4月19日
5120 作 者 : HiSilicon
5121 修改内容 : 新生成函数
5122 **************************************************************************** */
wal_hipriv_arp_offload_show_info(oal_net_device_stru * netdev,hi_char * pc_param)5123 static hi_u32 wal_hipriv_arp_offload_show_info(oal_net_device_stru *netdev, hi_char *pc_param)
5124 {
5125 wal_msg_write_stru write_msg;
5126 hi_u32 off_set;
5127 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
5128 hi_u32 ret;
5129 mac_cfg_arpoffload_info_stru arp_offload_info;
5130
5131 /* 获取 show ip addr */
5132 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
5133 if (ret != HI_SUCCESS) {
5134 oam_warning_log1(0, OAM_SF_PWR,
5135 "{wal_hipriv_arp_offload_show_info::wal_get_cmd_one_arg return err_code [%u]!}\n", ret);
5136 return ret;
5137 }
5138
5139 arp_offload_info.show_ip_addr = (hi_u8)oal_atoi(ac_name);
5140 pc_param = pc_param + off_set;
5141
5142 /* 获取 show arp offload info */
5143 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
5144 if (ret != HI_SUCCESS) {
5145 oam_warning_log1(0, OAM_SF_PWR,
5146 "{wal_hipriv_arp_offload_show_info::wal_get_cmd_one_arg return err_code [%u]!}\n", ret);
5147 return ret;
5148 }
5149
5150 arp_offload_info.show_arpoffload_info = (hi_u8)oal_atoi(ac_name);
5151
5152 /* **************************************************************************
5153 抛事件到wal层处理
5154 ************************************************************************** */
5155 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_ARP_OFFLOAD_SHOW_INFO, sizeof(mac_cfg_arpoffload_info_stru));
5156 /* 设置配置命令参数 */
5157 if (memcpy_s(write_msg.auc_value, WAL_MSG_WRITE_MAX_LEN, (const hi_void *)&arp_offload_info,
5158 sizeof(mac_cfg_arpoffload_info_stru)) != EOK) {
5159 oam_error_log0(0, 0, "{wal_hipriv_arp_offload_show_info::mem safe function err!}");
5160 return HI_FAIL;
5161 }
5162
5163 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
5164 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_arpoffload_info_stru), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
5165 if (oal_unlikely(ret != HI_SUCCESS)) {
5166 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_arp_offload_show_info::return err code [%u]!}\n", ret);
5167 return ret;
5168 }
5169
5170 return HI_SUCCESS;
5171 }
5172 #endif
5173 #endif
5174
5175 #ifdef _PRE_WLAN_FEATURE_DHCP_OFFLOAD
5176 #ifdef _PRE_WLAN_FEATURE_HIPRIV
wal_hipriv_dhcp_offload_setting(oal_net_device_stru * netdev,hi_char * param)5177 static hi_u32 wal_hipriv_dhcp_offload_setting(oal_net_device_stru *netdev, hi_char *param)
5178 {
5179 wal_msg_write_stru write_msg;
5180 hi_u32 ret;
5181 hi_u16 len;
5182 mac_ip_addr_config_stru ip_addr_cfg = {0};
5183
5184 ret = wal_hipriv_offload_build_ipv4(param, &ip_addr_cfg);
5185 if (ret != HI_SUCCESS) {
5186 oam_warning_log1(0, OAM_SF_PWR, "{wal_hipriv_dhcp_offload_setting::build_ip error[%d]!}\n", ret);
5187 return HI_FAIL;
5188 }
5189
5190 /* **************************************************************************
5191 抛事件到wal层处理
5192 ************************************************************************** */
5193 if (memcpy_s(write_msg.auc_value, sizeof(mac_ip_addr_config_stru), (const hi_void *)&ip_addr_cfg,
5194 sizeof(mac_ip_addr_config_stru)) != EOK) {
5195 oam_error_log0(0, 0, "{wal_hipriv_dhcp_offload_setting::mem safe function err!}");
5196 return HI_FAIL;
5197 }
5198 len = sizeof(mac_ip_addr_config_stru);
5199
5200 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_DHCP_OFFLOAD_SETTING, len);
5201 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + len, (hi_u8 *)&write_msg,
5202 HI_FALSE, HI_NULL);
5203 if (oal_unlikely(ret != HI_SUCCESS)) {
5204 oam_warning_log1(0, OAM_SF_PWR, "{wal_hipriv_dhcp_offload_setting::wal_send_cfg_event error[%u]!}\r\n", ret);
5205 return ret;
5206 }
5207
5208 return HI_SUCCESS;
5209 }
5210 #endif
5211 #endif
5212
5213 #ifdef _PRE_DEBUG_MODE
5214 #ifdef _PRE_WLAN_FEATURE_HIPRIV
5215
wal_hipriv_get_cfg_id(hi_char ac_arg,wlan_cfgid_enum_uint16 * cfg_id)5216 hi_u32 wal_hipriv_get_cfg_id(hi_char ac_arg, wlan_cfgid_enum_uint16 *cfg_id)
5217 {
5218 if (strcmp(ac_arg, "aifsn") == 0) {
5219 *cfg_id = WLAN_CFGID_EDCA_TABLE_AIFSN;
5220 } else if (strcmp(ac_arg, "cwmin") == 0) {
5221 *cfg_id = WLAN_CFGID_EDCA_TABLE_CWMIN;
5222 } else if (strcmp(ac_arg, "cwmax") == 0) {
5223 *cfg_id = WLAN_CFGID_EDCA_TABLE_CWMAX;
5224 } else if (strcmp(ac_arg, "txoplimit") == 0) {
5225 *cfg_id = WLAN_CFGID_EDCA_TABLE_TXOP_LIMIT;
5226 } else if (strcmp(ac_arg, "qaifsn") == 0) {
5227 *cfg_id = WLAN_CFGID_QEDCA_TABLE_AIFSN;
5228 } else if (strcmp(ac_arg, "qcwmin") == 0) {
5229 *cfg_id = WLAN_CFGID_QEDCA_TABLE_CWMIN;
5230 } else if (strcmp(ac_arg, "qcwmax") == 0) {
5231 *cfg_id = WLAN_CFGID_QEDCA_TABLE_CWMAX;
5232 } else if (strcmp(ac_arg, "qtxoplimit") == 0) {
5233 *cfg_id = WLAN_CFGID_QEDCA_TABLE_TXOP_LIMIT;
5234 } else {
5235 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_get_cfg_id::invalid wmm param!}");
5236 return HI_FAIL;
5237 }
5238
5239 return HI_SUCCESS;
5240 }
5241
wal_hipriv_check_aifsn(wlan_cfgid_enum_uint16 cfg_id,hi_u32 value)5242 hi_u32 wal_hipriv_check_aifsn(wlan_cfgid_enum_uint16 cfg_id, hi_u32 value)
5243 {
5244 if ((cfg_id == WLAN_CFGID_EDCA_TABLE_AIFSN) || (cfg_id == WLAN_CFGID_QEDCA_TABLE_AIFSN)) {
5245 if ((value < WLAN_QEDCA_TABLE_AIFSN_MIN) || (value > WLAN_QEDCA_TABLE_AIFSN_MAX)) {
5246 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_check_aifsn::invalid AIFSN value!}");
5247 return HI_FAIL;
5248 }
5249 } else if ((cfg_id == WLAN_CFGID_EDCA_TABLE_CWMIN) || (cfg_id == WLAN_CFGID_QEDCA_TABLE_CWMIN)) {
5250 if ((value > WLAN_QEDCA_TABLE_CWMIN_MAX) || (value < WLAN_QEDCA_TABLE_CWMIN_MIN)) {
5251 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_check_aifsn::invalid CWMIN value!}");
5252 return HI_FAIL;
5253 }
5254 } else if ((cfg_id == WLAN_CFGID_EDCA_TABLE_CWMAX) || (cfg_id == WLAN_CFGID_QEDCA_TABLE_CWMAX)) {
5255 if ((value > WLAN_QEDCA_TABLE_CWMAX_MAX) || (value < WLAN_QEDCA_TABLE_CWMAX_MIN)) {
5256 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_check_aifsn::invalid CWMAX value!}");
5257 return HI_FAIL;
5258 }
5259 } else if ((cfg_id == WLAN_CFGID_EDCA_TABLE_TXOP_LIMIT) || (cfg_id == WLAN_CFGID_QEDCA_TABLE_TXOP_LIMIT)) {
5260 if ((value > WLAN_QEDCA_TABLE_TXOP_LIMIT_MAX) || (value < WLAN_QEDCA_TABLE_TXOP_LIMIT_MIN)) {
5261 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_check_aifsn::invalid TXOP_LIMIT value!}");
5262 return HI_FAIL;
5263 }
5264 }
5265
5266 return HI_SUCCESS;
5267 }
5268
5269 /* ****************************************************************************
5270 功能描述 : 设置WMM参数
5271
5272 修改历史 :
5273 1.日 期 : 2019年4月23日
5274 作 者 : HiSilicon
5275 修改内容 : 新生成函数
5276 **************************************************************************** */
5277 /* 大数组g_ast_hipriv_cmd成员,其中一个成员wal_hipriv_getcountry对pc_param所指向的内容进行了修改,lint_t e818告警屏蔽 */
5278 /* 规则5.1 避免函数过长,函数不超过50行(非空非注释),申请例外: 包含本函数的宏没有打开,建议屏蔽 */
wal_hipriv_set_wmm_param(oal_net_device_stru * netdev,hi_char * pc_param)5279 static hi_u32 wal_hipriv_set_wmm_param(oal_net_device_stru *netdev, hi_char *pc_param)
5280 {
5281 wal_msg_write_stru write_msg;
5282 hi_u32 off_set;
5283 hi_char ac_arg[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
5284 hi_char *ac_arg_ptr = ac_arg;
5285 wlan_cfgid_enum_uint16 cfg_id;
5286 hi_u8 orig_dev_state = wal_dev_is_running();
5287
5288 if (wal_netdev_stop(netdev) != HI_SUCCESS) {
5289 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_wmm_param::wal_netdev_stop failed\r\n");
5290 return HI_FAIL;
5291 }
5292
5293 /* wmm 参数 */
5294 hi_u32 ret = wal_get_cmd_one_arg(pc_param, ac_arg_ptr, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
5295 if (ret != HI_SUCCESS) {
5296 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_wmm_param::wal_get_cmd_one_arg return err_code [%u]}", ret);
5297 return ret;
5298 }
5299 pc_param += off_set;
5300 ret = wal_hipriv_get_cfg_id(ac_arg_ptr, &cfg_id);
5301 if (ret != HI_SUCCESS) {
5302 return ret;
5303 }
5304
5305 /* 获取ac num */
5306 ret = wal_get_cmd_one_arg(pc_param, ac_arg_ptr, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
5307 if (ret != HI_SUCCESS) {
5308 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_wmm_param::wal_get_cmd_one_arg return err_code [%u]!}", ret);
5309 return ret;
5310 }
5311 pc_param += off_set;
5312
5313 hi_u32 ac = (hi_u32)oal_atoi(ac_arg_ptr);
5314 /* ac取值0~3 */
5315 if (ac >= WLAN_WME_AC_BUTT) {
5316 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_set_wmm_param::invalid ac num!}\r\n");
5317 return HI_FAIL;
5318 }
5319
5320 /* 获取ac value */
5321 ret = wal_get_cmd_one_arg(pc_param, ac_arg_ptr, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
5322 if (ret != HI_SUCCESS) {
5323 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_wmm_param::wal_get_cmd_one_arg return err_code [%u]}", ret);
5324 return ret;
5325 }
5326
5327 hi_u32 value = (hi_u32)oal_atoi(ac_arg_ptr);
5328 ret = wal_hipriv_check_aifsn(cfg_id, value);
5329 if (ret != HI_SUCCESS) {
5330 return ret;
5331 }
5332
5333 wal_write_msg_hdr_init(&write_msg, cfg_id, sizeof(wal_msg_wmm_stru));
5334
5335 wal_msg_wmm_stru *wmm_params = (wal_msg_wmm_stru *)(write_msg.auc_value);
5336 wmm_params->cfg_id = cfg_id;
5337 wmm_params->ac = ac;
5338 wmm_params->value = value;
5339
5340 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(wal_msg_wmm_stru),
5341 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
5342 if (oal_unlikely(ret != HI_SUCCESS)) {
5343 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_wmm_param::return err code [%u]!}\r\n", ret);
5344 }
5345
5346 if (orig_dev_state == HI_TRUE) {
5347 if (wal_netdev_open(netdev) != HI_SUCCESS) {
5348 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_wmm_switch::wal_netdev_open failed\r\n");
5349 return HI_FAIL;
5350 }
5351 }
5352
5353 return ret;
5354 }
5355 #endif
5356 #endif
5357
5358 /* ****************************************************************************
5359 功能描述 : 打印对应vap的接收FCS的信息
5360
5361 修改历史 :
5362 1.日 期 : 2019年5月5日
5363 作 者 : HiSilicon
5364 修改内容 : 新生成函数
5365 **************************************************************************** */
wal_hipriv_rx_fcs_info(oal_net_device_stru * netdev,hi_char * pc_param)5366 hi_u32 wal_hipriv_rx_fcs_info(oal_net_device_stru *netdev, hi_char *pc_param)
5367 {
5368 wal_msg_write_stru write_msg;
5369 hi_u32 ret;
5370
5371 hi_unref_param(pc_param);
5372 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_RX_FCS_INFO, sizeof(hi_u32));
5373 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_u32),
5374 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
5375 if (oal_unlikely(ret != HI_SUCCESS)) {
5376 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_rx_fcs_info::return err code [%u]!}\r\n", ret);
5377 return ret;
5378 }
5379
5380 return HI_SUCCESS;
5381 }
5382
wal_set_protocol(oal_net_device_stru * netdev,hi_char * protocol_param,hi_s32 len,hi_s32 * protocol_value)5383 hi_u32 wal_set_protocol(oal_net_device_stru *netdev, hi_char *protocol_param, hi_s32 len, hi_s32 *protocol_value)
5384 {
5385 hi_s32 protocol = oal_strtol(protocol_param, NULL, 10); /* 10进制 */
5386 hi_u32 ret;
5387
5388 if ((len != 1) || (protocol_param[0] < '0') || (protocol_param[0] > '2')) {
5389 oam_warning_log1(0, OAM_SF_ANY, "{wal_set_protocol:: protocol len [%d] error!}\r\n", len);
5390 return HI_FAIL;
5391 }
5392
5393 switch (protocol) {
5394 case 0: /* 0:代表模式11bgn */
5395 /* 安全编程规则6.6例外(5) 源内存全部是静态字符串常量 */
5396 strcpy_s(protocol_param, WAL_HIPRIV_CMD_NAME_MAX_LEN, "11bgn");
5397 break;
5398 case 1: /* 1:代表模式11bg */
5399 /* 安全编程规则6.6例外(5) 源内存全部是静态字符串常量 */
5400 strcpy_s(protocol_param, WAL_HIPRIV_CMD_NAME_MAX_LEN, "11bg");
5401 break;
5402 case 2: /* 2:代表模式11b */
5403 /* 安全编程规则6.6例外(5) 源内存全部是静态字符串常量 */
5404 strcpy_s(protocol_param, WAL_HIPRIV_CMD_NAME_MAX_LEN, "11b");
5405 break;
5406 default:
5407 oam_warning_log0(0, OAM_SF_ANY, "{wal_set_protocol:: protocol error!}\r\n");
5408 return HI_FAIL;
5409 }
5410
5411 ret = wal_ioctl_set_mode(netdev, protocol_param);
5412 if (ret != HI_SUCCESS) {
5413 oam_error_log1(0, OAM_SF_ANY, "wal_set_protocol::set_mode return err_code [%d]!", ret);
5414 return ret;
5415 }
5416
5417 *protocol_value = protocol;
5418 return HI_SUCCESS;
5419 }
5420
wal_set_rate(oal_net_device_stru * netdev,hi_char * rate_param,hi_s32 protocol)5421 hi_u32 wal_set_rate(oal_net_device_stru *netdev, hi_char *rate_param, hi_s32 protocol)
5422 {
5423 wlan_legacy_rate_value_enum_uint8 rate_index;
5424 hi_u32 ret;
5425
5426 /* 解析是设置为哪一级速率 */
5427 for (rate_index = 0; rate_index < WLAN_LEGACY_RATE_VALUE_BUTT; rate_index++) {
5428 if (!strcmp(g_pauc_non_ht_rate_tbl[rate_index], rate_param)) {
5429 break;
5430 }
5431 }
5432
5433 /* 根据速率配置TX描述符中的协议模式 */
5434 if (((rate_index <= WLAN_SHORT_11B_11_M_BPS) && (protocol == WAL_PHY_MODE_11B)) ||
5435 ((rate_index >= WLAN_LEGACY_OFDM_48M_BPS) && (rate_index <= WLAN_LEGACY_OFDM_9M_BPS) &&
5436 (protocol == WAL_PHY_MODE_11G))) {
5437 ret = wal_hipriv_set_rate(netdev, rate_param);
5438 if (ret != HI_SUCCESS) {
5439 oam_error_log1(0, OAM_SF_ANY, "wal_set_rate::set_rate return err_code [%d]!}\r\n", ret);
5440 }
5441 return ret;
5442 } else {
5443 oam_warning_log0(0, OAM_SF_ANY, "{wal_set_rate::invalid rate!}\r\n");
5444 return HI_FAIL;
5445 }
5446 }
5447
wal_hipriv_get_value(const hi_char * pc_param,hi_char * ac_arg,hi_u32 * off_set,hi_u32 first_elem_flag)5448 hi_u32 wal_hipriv_get_value(const hi_char *pc_param, hi_char *ac_arg, hi_u32 *off_set, hi_u32 first_elem_flag)
5449 {
5450 hi_u32 ret;
5451 hi_u32 check_offset = (first_elem_flag == 0) ? 0 : 1;
5452
5453 if ((*(pc_param + check_offset)) == ' ') {
5454 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_get_value::cmd error}");
5455 return HI_FAIL;
5456 }
5457
5458 ret = wal_get_cmd_one_arg(pc_param, ac_arg, WAL_HIPRIV_CMD_NAME_MAX_LEN, off_set);
5459 if (ret != HI_SUCCESS) {
5460 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_get_value::wal_get_cmd_one_arg return err_code[%u]}", ret);
5461 return ret;
5462 }
5463
5464 return HI_SUCCESS;
5465 }
5466
wal_hipriv_check_switch(const hi_char * ac_arg,const hi_char * pc_param,hi_bool is_tx)5467 hi_u32 wal_hipriv_check_switch(const hi_char *ac_arg, const hi_char *pc_param, hi_bool is_tx)
5468 {
5469 /* 如果是关闭常收,则直接关闭,无需解析后面的参数 */
5470 if (strcmp("0", ac_arg) == 0) {
5471 /* 判断命令长度是否有问题 */
5472 if (*pc_param != '\0') {
5473 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_check_switch::cmd len error}");
5474 return HI_FAIL;
5475 }
5476
5477 #ifdef CUSTOM_AT_COMMAND
5478 hi_at_printf("OK\r\n");
5479 #endif
5480 #if _PRE_WLAN_FEATURE_MFG_TEST
5481 printk("OK\r\n");
5482 #endif
5483 return HI_SUCCESS;
5484 }
5485
5486 /* 判断开关字符是否有问题,1:打开长发;2:tx_dc */
5487 if ((strcmp("1", ac_arg) != 0) && !(is_tx && (strcmp("2", ac_arg) == 0))) {
5488 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_check_switch::strcmp err_code}");
5489 return HI_FAIL;
5490 }
5491
5492 return HI_CONTINUE;
5493 }
5494
wal_hipriv_set_rate_or_mcs(oal_net_device_stru * netdev,hi_char * ac_arg,hi_s32 protocol_value)5495 hi_u32 wal_hipriv_set_rate_or_mcs(oal_net_device_stru *netdev, hi_char *ac_arg, hi_s32 protocol_value)
5496 {
5497 hi_u32 ret;
5498
5499 if (protocol_value != WAL_PHY_MODE_11N) {
5500 ret = wal_set_rate(netdev, ac_arg, protocol_value);
5501 if (ret != HI_SUCCESS) {
5502 oam_error_log1(0, OAM_SF_ANY, "wal_hipriv_al_tx::set_rate return err_code [%d]}", ret);
5503 return ret;
5504 }
5505 } else {
5506 ret = wal_hipriv_set_mcs(netdev, ac_arg);
5507 if (ret != HI_SUCCESS) {
5508 oam_error_log1(0, OAM_SF_ANY, "wal_set_always_tx::set_mcs return err_code [%d]}", ret);
5509 return ret;
5510 }
5511 }
5512
5513 return HI_SUCCESS;
5514 }
5515
5516 /* ****************************************************************************
5517 功能描述 : 设置常收参数
5518
5519 修改历史 :
5520 1.日 期 : 2019年5月5日
5521 作 者 : HiSilicon
5522 修改内容 : 新生成函数
5523 **************************************************************************** */
5524 /* 大数组g_ast_hipriv_cmd成员,其中一个成员wal_hipriv_getcountry对pc_param所指向的内容进行了修改,lint_t e818告警屏蔽 */
wal_hipriv_rx_proc(oal_net_device_stru * netdev,hi_char * pc_param)5525 hi_u32 wal_hipriv_rx_proc(oal_net_device_stru *netdev, hi_char *pc_param)
5526 {
5527 hi_u32 off_set = 0;
5528 hi_s32 protocol_value = 0;
5529 hi_char ac_arg[WAL_HIPRIV_CMD_NAME_MAX_LEN];
5530 hi_char *ac_arg_ptr = ac_arg;
5531 hi_u8 mac_filter_flag = 0;
5532 hi_u32 i;
5533
5534 /* 低功耗状态下不允许执行 */
5535 if (is_under_ps()) {
5536 oam_warning_log0(0, 0, "under ps mode,can not exec cmd");
5537 return HI_FAIL;
5538 }
5539 #if (_PRE_OS_VERSION_LITEOS == _PRE_OS_VERSION)
5540 /* 产测每次常收前,都要关闭无线模式 */
5541 if (wal_stop_vap(netdev) != HI_SUCCESS) {
5542 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_rx_proc::stop vap fail.}");
5543 return HI_FAIL;
5544 }
5545 #endif
5546 /* 产测每次常收前,关常收 */
5547 hi_u32 ret = wal_hipriv_always_rx(netdev, 0, mac_filter_flag);
5548 if (ret != HI_SUCCESS) {
5549 return ret;
5550 }
5551
5552 #if (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION)
5553 pc_param++;
5554 #endif
5555
5556 for (i = 0; i < 5; i++) { /* 常收命令有5个参数 */
5557 ret = wal_hipriv_get_value(pc_param, ac_arg_ptr, &off_set, ((i == 0) ? 0 : 1));
5558 if (ret != HI_SUCCESS) {
5559 return ret;
5560 }
5561
5562 pc_param += off_set;
5563
5564 if (i == 0) { /* 0: 常收使能开关 */
5565 ret = wal_hipriv_check_switch(ac_arg_ptr, pc_param, HI_FALSE);
5566 if (ret != HI_CONTINUE) {
5567 return ret;
5568 }
5569 } else if (i == 1) { /* 1: 设置协议类型 */
5570 ret = wal_set_protocol(netdev, ac_arg_ptr, strlen(ac_arg_ptr), &protocol_value);
5571 } else if (i == 2) { /* 2: 设置带宽 */
5572 if ((protocol_value == 2) && (oal_atoi(ac_arg_ptr) != 20)) { /* 2:protocol_value 20:bw */
5573 oam_error_log1(0, OAM_SF_ANY, "wal_hipriv_al_tx::set_bw return err_code [%d]}", ret);
5574 return HI_FAIL;
5575 }
5576 ret = wal_hipriv_set_bw(netdev, ac_arg_ptr);
5577 } else if (i == 3) { /* 3: 设置信道频点 */
5578 ret = wal_ioctl_set_freq(netdev, ac_arg_ptr);
5579 /* 14信道仅支持11b模式 */
5580 if ((ret != HI_SUCCESS) || ((protocol_value != 2) && (oal_atoi(ac_arg_ptr) == 14))) { /* 2: 模式,14: 信道 */
5581 return HI_FAIL;
5582 }
5583 } else if (i == 4) { /* 4: 获取MAC地址过滤开关 */
5584 if ((strcmp("0", ac_arg_ptr) != 0) && (strcmp("1", ac_arg_ptr) != 0)) {
5585 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_al_rx::get mac filter flag Error}");
5586 return HI_FAIL;
5587 }
5588
5589 mac_filter_flag = (hi_u8)oal_atoi(ac_arg_ptr);
5590 }
5591
5592 if (((i == 1) || (i == 2) || (i == 3)) && (ret != HI_SUCCESS)) { /* 参数1/2/3的异常分支 */
5593 oam_error_log2(0, OAM_SF_ANY, "wal_hipriv_al_rx::fun[i=%d] return err_code [%d]}", i, ret);
5594 return ret;
5595 }
5596 }
5597
5598 /* 判断命令长度是否有问题 */
5599 if (*pc_param != '\0') {
5600 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_al_rx::cmd len error}");
5601 return HI_FAIL;
5602 }
5603
5604 /* 打开常收 */
5605 ret = wal_hipriv_always_rx(netdev, 1, mac_filter_flag);
5606 if (ret != HI_SUCCESS) {
5607 return ret;
5608 }
5609 #if (_PRE_OS_VERSION_LITEOS == _PRE_OS_VERSION)
5610 if (wal_start_vap(netdev) != HI_SUCCESS) {
5611 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_al_rx::start vap fail.}");
5612 return HI_FAIL;
5613 }
5614 #endif
5615 return HI_SUCCESS;
5616 }
5617
5618 /* ****************************************************************************
5619 功能描述 : 设置常发参数
5620
5621 修改历史 :
5622 1.日 期 : 2019年5月5日
5623 作 者 : HiSilicon
5624 修改内容 : 新生成函数
5625 **************************************************************************** */
5626 /* 大数组g_ast_hipriv_cmd成员,其中一个成员wal_hipriv_getcountry对pc_param所指向的内容进行了修改,lint_t e818告警屏蔽 */
wal_hipriv_tx_proc(oal_net_device_stru * netdev,hi_char * pc_param)5627 hi_u32 wal_hipriv_tx_proc(oal_net_device_stru *netdev, hi_char *pc_param)
5628 {
5629 hi_u32 off_set = 0;
5630 hi_s32 protocol_value = 0;
5631 hi_char ac_arg[WAL_HIPRIV_CMD_NAME_MAX_LEN];
5632 hi_char *ac_arg_ptr = ac_arg;
5633 hi_u8 tx_flag = 0;
5634 hi_u32 i;
5635
5636 /* 低功耗状态下不允许执行 */
5637 if (is_under_ps()) {
5638 oam_warning_log0(0, 0, "under ps mode,can not exec cmd");
5639 return HI_FAIL;
5640 }
5641 #if (_PRE_OS_VERSION_LITEOS == _PRE_OS_VERSION)
5642 /* 产测每次常发前,都要关闭无线模式 */
5643 if (wal_stop_vap(netdev) != HI_SUCCESS) {
5644 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_tx_proc::stop vap fail.}");
5645 return HI_FAIL;
5646 }
5647 #endif
5648 /* 产测每次常发前,关常发 */
5649 hi_u32 ret = wal_hipriv_always_tx(netdev, 0);
5650 if (ret != HI_SUCCESS) {
5651 return ret;
5652 }
5653
5654 #if (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION)
5655 pc_param++;
5656 #endif
5657
5658 for (i = 0; i < 5; i++) { /* 常发命令有5个参数 */
5659 if (wal_hipriv_get_value(pc_param, ac_arg_ptr, &off_set, ((i == 0) ? 0 : 1)) != HI_SUCCESS) {
5660 return HI_FAIL;
5661 }
5662
5663 pc_param += off_set;
5664
5665 if (i == 0) { /* 0: 常发使能开关 */
5666 ret = wal_hipriv_check_switch(ac_arg_ptr, pc_param, HI_TRUE);
5667 if (ret != HI_CONTINUE) {
5668 return ret;
5669 }
5670
5671 tx_flag = (hi_u8)oal_atoi(ac_arg_ptr);
5672 /* AT命令参数映射 */
5673 tx_flag = (tx_flag == 2) ? WAL_ALWAYS_TX_DC : tx_flag; /* 2:AT命令参数,表示tx_dc */
5674 } else if (i == 1) { /* 1: 设置协议类型 */
5675 if (wal_set_protocol(netdev, ac_arg_ptr, strlen(ac_arg_ptr), &protocol_value) != HI_SUCCESS) {
5676 return HI_FAIL;
5677 }
5678 } else if (i == 2) { /* 2: 设置带宽 */
5679 ret = wal_hipriv_set_bw(netdev, ac_arg_ptr);
5680 if ((ret != HI_SUCCESS) || ((protocol_value == 2) && (oal_atoi(ac_arg_ptr) != 20))) { /* 2:protocol 20:bw */
5681 oam_error_log1(0, OAM_SF_ANY, "wal_hipriv_al_tx::set_bw return err_code [%d]}", ret);
5682 return (ret != HI_SUCCESS) ? ret : HI_FAIL;
5683 }
5684 } else if (i == 3) { /* 3: 设置信道频点 */
5685 ret = wal_ioctl_set_freq(netdev, ac_arg_ptr);
5686 /* 14信道仅支持11b模式 */
5687 if ((ret != HI_SUCCESS) || ((protocol_value != 2) && (oal_atoi(ac_arg_ptr) == 14))) { /* 2:模式,14: 信道 */
5688 return HI_FAIL;
5689 }
5690 } else if (i == 4) { /* 4: 设置速率MCS */
5691 if (wal_hipriv_set_rate_or_mcs(netdev, ac_arg_ptr, protocol_value) != HI_SUCCESS) {
5692 return HI_FAIL;
5693 }
5694 }
5695 }
5696
5697 /* 判断命令长度是否有问题 */
5698 if (*pc_param != '\0') {
5699 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_al_tx::cmd len error}");
5700 return HI_FAIL;
5701 }
5702
5703 /* 打开常发 */
5704 ret = wal_hipriv_always_tx(netdev, tx_flag);
5705 if (ret != HI_SUCCESS) {
5706 return ret;
5707 }
5708 #if (_PRE_OS_VERSION_LITEOS == _PRE_OS_VERSION)
5709 if (wal_start_vap(netdev) != HI_SUCCESS) {
5710 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_al_tx::start vap fail.}");
5711 return HI_FAIL;
5712 }
5713 #endif
5714 return HI_SUCCESS;
5715 }
5716
5717 #ifdef _PRE_WLAN_FEATURE_BTCOEX
5718 #ifdef _PRE_WLAN_FEATURE_HIPRIV
5719 /* ****************************************************************************
5720 功能描述 : 设置BT共存使能
5721 修改历史 :
5722 1.日 期 : 2019年5月5日
5723 作 者 : HiSilicon
5724 修改内容 : 新生成函数
5725 **************************************************************************** */
5726 /* 大数组g_ast_hipriv_cmd的成员,其中wal_hipriv_getcountry修改了对应变量,lint_t e818告警屏蔽 */
wal_hipriv_btcoex_enable(oal_net_device_stru * netdev,hi_char * pc_param)5727 static hi_u32 wal_hipriv_btcoex_enable(oal_net_device_stru *netdev, hi_char *pc_param)
5728 {
5729 wal_msg_write_stru write_msg;
5730 hi_u32 ret, off_set;
5731 hi_u16 us_len;
5732 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
5733 hi_u8 btcoex_enable, mode, share_ant;
5734
5735 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
5736 if (ret != HI_SUCCESS) {
5737 oam_warning_log1(0, OAM_SF_COEX, "{wal_hipriv_btcoex_enable::wal_get_cmd_one_arg return err_code[%u]}", ret);
5738 return ret;
5739 }
5740 pc_param += off_set;
5741 btcoex_enable = (hi_u8)oal_atoi(ac_name);
5742 if (btcoex_enable == 0) {
5743 *(hi_u8 *)(write_msg.auc_value) = btcoex_enable;
5744 us_len = sizeof(hi_u8);
5745 } else if (btcoex_enable == 1) {
5746 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
5747 if (ret != HI_SUCCESS) {
5748 oam_warning_log1(0, OAM_SF_COEX, "{wal_hipriv_btcoex_enable::wal_get_cmd_one_arg return errCode[%u]}", ret);
5749 return ret;
5750 }
5751 pc_param += off_set;
5752 mode = (hi_u8)oal_atoi(ac_name);
5753
5754 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
5755 if (ret != HI_SUCCESS) {
5756 oam_warning_log1(0, OAM_SF_COEX, "{wal_hipriv_btcoex_enable::wal_get_cmd_one_arg return errCode[%u]}", ret);
5757 return ret;
5758 }
5759 share_ant = (hi_u8)oal_atoi(ac_name);
5760
5761 write_msg.auc_value[0] = btcoex_enable;
5762 write_msg.auc_value[1] = mode;
5763 write_msg.auc_value[2] = share_ant; /* 2: 第3位 */
5764 us_len = sizeof(hi_u8) * 3; /* 个数为3 */
5765 } else {
5766 oam_warning_log0(0, OAM_SF_COEX, "{wal_hipriv_btcoex_enable::input parameter error!}\r\n");
5767 return HI_SUCCESS;
5768 }
5769
5770 /* **************************************************************************
5771 抛事件到wal层处理
5772 ************************************************************************** */
5773 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_BTCOEX_ENABLE, us_len);
5774 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + us_len, (hi_u8 *)&write_msg,
5775 HI_FALSE, HI_NULL);
5776 if (oal_unlikely(ret != HI_SUCCESS)) {
5777 oam_warning_log1(0, OAM_SF_COEX, "{wal_hipriv_btcoex_enable::return err code [%u]!}\r\n", ret);
5778 return ret;
5779 }
5780 return HI_SUCCESS;
5781 }
5782 #endif /* _PRE_WLAN_FEATURE_BTCOEX */
5783 #endif
5784
5785 #ifdef _PRE_DEBUG_MODE
5786 #ifdef _PRE_WLAN_FEATURE_HIPRIV
5787
wal_hipriv_add_vap_get_mode(wal_hipriv_two_param_stru * cmd_param,wlan_vap_mode_enum_uint8 * mode,wlan_p2p_mode_enum_uint8 * p2p_mode)5788 hi_u32 wal_hipriv_add_vap_get_mode(wal_hipriv_two_param_stru *cmd_param, wlan_vap_mode_enum_uint8 *mode,
5789 wlan_p2p_mode_enum_uint8 *p2p_mode)
5790 {
5791 if (strcmp("ap", cmd_param->cmd_param2) == 0) {
5792 *mode = WLAN_VAP_MODE_BSS_AP;
5793 } else if (strcmp("sta", cmd_param->cmd_param2) == 0) {
5794 *mode = WLAN_VAP_MODE_BSS_STA;
5795 #ifdef _PRE_WLAN_FEATURE_MESH
5796 } else if ((strcmp("mesh", cmd_param->cmd_param2)) == 0) {
5797 *mode = WLAN_VAP_MODE_MESH;
5798 #endif
5799 #ifdef _PRE_WLAN_FEATURE_P2P
5800 /* 创建P2P 相关VAP */
5801 } else if (0 == (strcmp("p2p_device", cmd_param->cmd_param2))) {
5802 *mode = WLAN_VAP_MODE_BSS_STA;
5803 *p2p_mode = WLAN_P2P_DEV_MODE;
5804 } else if (0 == (strcmp("p2p_cl", cmd_param->cmd_param2))) {
5805 *mode = WLAN_VAP_MODE_BSS_STA;
5806 *p2p_mode = WLAN_P2P_CL_MODE;
5807 } else if (0 == (strcmp("p2p_go", cmd_param->cmd_param2))) {
5808 *mode = WLAN_VAP_MODE_BSS_AP;
5809 *p2p_mode = WLAN_P2P_GO_MODE;
5810 #endif /* _PRE_WLAN_FEATURE_P2P */
5811 } else {
5812 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_add_vap::the mode param is invalid!}");
5813 return HI_ERR_CODE_INVALID_CONFIG;
5814 }
5815
5816 return HI_SUCCESS;
5817 }
5818
wal_hipriv_add_vap_wireless_dev_set(oal_net_device_stru * netdev_tmp,mac_device_stru * mac_dev,oal_wireless_dev * wdev,wlan_vap_mode_enum_uint8 mode,wlan_p2p_mode_enum_uint8 p2p_mode)5819 hi_u32 wal_hipriv_add_vap_wireless_dev_set(oal_net_device_stru *netdev_tmp, mac_device_stru *mac_dev,
5820 oal_wireless_dev *wdev, wlan_vap_mode_enum_uint8 mode, wlan_p2p_mode_enum_uint8 p2p_mode)
5821 {
5822 /* 对netdevice进行赋值 */
5823 #if (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION)
5824 netdev_tmp->wireless_handlers = wal_get_g_iw_handler_def();
5825 #endif
5826 netdev_tmp->netdev_ops = wal_get_net_dev_ops();
5827
5828 oal_netdevice_destructor(netdev_tmp) = oal_net_free_netdev;
5829 oal_netdevice_ifalias(netdev_tmp) = HI_NULL;
5830 oal_netdevice_watchdog_timeo(netdev_tmp) = 5; /* 固定设置为 5 */
5831 oal_netdevice_wdev(netdev_tmp) = wdev;
5832 oal_netdevice_qdisc(netdev_tmp, HI_NULL);
5833
5834 wdev->netdev = netdev_tmp;
5835
5836 if (mode == WLAN_VAP_MODE_BSS_AP) {
5837 wdev->iftype = NL80211_IFTYPE_AP;
5838 } else if (mode == WLAN_VAP_MODE_BSS_STA) {
5839 wdev->iftype = NL80211_IFTYPE_STATION;
5840 }
5841 #ifdef _PRE_WLAN_FEATURE_MESH
5842 if (mode == WLAN_VAP_MODE_MESH) {
5843 wdev->iftype = NL80211_IFTYPE_MESH_POINT;
5844 }
5845 #endif
5846 #ifdef _PRE_WLAN_FEATURE_P2P
5847 if (p2p_mode == WLAN_P2P_DEV_MODE) {
5848 wdev->iftype = NL80211_IFTYPE_P2P_DEVICE;
5849 } else if (p2p_mode == WLAN_P2P_CL_MODE) {
5850 wdev->iftype = NL80211_IFTYPE_P2P_CLIENT;
5851 } else if (p2p_mode == WLAN_P2P_GO_MODE) {
5852 wdev->iftype = NL80211_IFTYPE_P2P_GO;
5853 }
5854 #endif /* _PRE_WLAN_FEATURE_P2P */
5855
5856 wdev->wiphy = mac_dev->wiphy;
5857
5858 oal_netdevice_flags(netdev_tmp) &= ~OAL_IFF_RUNNING; /* 将net device的flag设为down */
5859 if (wal_get_dev_addr(netdev_tmp->dev_addr, ETH_ADDR_LEN, wdev->iftype) != HI_SUCCESS) {
5860 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_add_vap::wal_get_dev_addr failed!}");
5861 oal_net_free_netdev(netdev_tmp);
5862 return HI_FAIL;
5863 }
5864
5865 /* 注册net_device */
5866 hi_u32 ret = (hi_u32)oal_net_register_netdev(netdev_tmp);
5867 if (oal_unlikely(ret != HI_SUCCESS)) {
5868 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_add_vap::oal_net_register_netdev return error code %d!}\r\n", ret);
5869 oal_net_free_netdev(netdev_tmp);
5870 return ret;
5871 }
5872
5873 return HI_SUCCESS;
5874 }
5875
5876 /* ****************************************************************************
5877 功能描述 : 私有命令,创建VAP
5878 **************************************************************************** */
wal_hipriv_add_vap(oal_net_device_stru * netdev,hi_char * pc_param)5879 static hi_u32 wal_hipriv_add_vap(oal_net_device_stru *netdev, hi_char *pc_param)
5880 {
5881 wal_hipriv_two_param_stru cmd_param;
5882 wlan_vap_mode_enum_uint8 mode;
5883 wlan_p2p_mode_enum_uint8 p2p_mode = WLAN_LEGACY_VAP_MODE;
5884
5885 hi_unref_param(p2p_mode);
5886
5887 hi_u32 ret = wal_hipriv_two_param_parse(pc_param, &cmd_param);
5888 if (ret != HI_SUCCESS) {
5889 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_add_vap::parse cmd param failed!}");
5890 return ret;
5891 }
5892
5893 hi_char *cmd_param1_ptr = cmd_param.cmd_param1;
5894 /* 第一个参数为vap_name length不应超过OAL_IF_NAME_SIZE */
5895 if (strlen(cmd_param.cmd_param1) >= OAL_IF_NAME_SIZE) {
5896 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_add_vap:vap name len[%d]over flow}", strlen(cmd_param.cmd_param1));
5897 return HI_FAIL;
5898 }
5899
5900 ret = wal_hipriv_add_vap_get_mode(&cmd_param, &mode, &p2p_mode);
5901 if (ret != HI_SUCCESS) {
5902 return ret;
5903 }
5904
5905 /* 如果创建的net device已经存在,直接返回 */
5906 oal_net_device_stru *netdev_tmp = oal_get_netdev_by_name(cmd_param1_ptr);
5907 if (netdev_tmp != HI_NULL) {
5908 /* 调用oal_dev_get_by_name后,必须调用oal_dev_put使net_dev的引用计数减一 */
5909 oal_dev_put(netdev_tmp);
5910 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_add_vap::the net_device is already exist!}");
5911 return HI_ERR_CODE_PTR_NULL;
5912 }
5913
5914 mac_device_stru *mac_dev = mac_res_get_dev();
5915 #if defined(_PRE_WLAN_FEATURE_FLOWCTL)
5916 netdev_tmp = oal_net_alloc_netdev_mqs(cmd_param1_ptr);
5917 #elif defined(_PRE_WLAN_FEATURE_OFFLOAD_FLOWCTL)
5918 netdev_tmp = oal_net_alloc_netdev_mqs(cmd_param1_ptr);
5919 #else
5920 netdev_tmp = oal_net_alloc_netdev(cmd_param1_ptr, OAL_IF_NAME_SIZE);
5921 #endif
5922 if (oal_unlikely(netdev_tmp == HI_NULL)) {
5923 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_add_vap::pst_net_dev null ptr error!}");
5924 return HI_ERR_CODE_PTR_NULL;
5925 }
5926
5927 oal_wireless_dev *wdev = (oal_wireless_dev *)oal_mem_alloc(OAL_MEM_POOL_ID_LOCAL, sizeof(oal_wireless_dev));
5928 if (oal_unlikely(wdev == HI_NULL)) {
5929 oam_error_log0(0, OAM_SF_ANY, "{wal_hipriv_add_vap::alloc mem, pst_wdev is null ptr!}");
5930 oal_net_free_netdev(netdev_tmp);
5931 return HI_ERR_CODE_PTR_NULL;
5932 }
5933 /* 安全编程规则6.6例外(3)从堆中分配内存后,赋予初值 */
5934 memset_s(wdev, sizeof(oal_wireless_dev), 0, sizeof(oal_wireless_dev));
5935
5936 ret = wal_hipriv_add_vap_wireless_dev_set(netdev_tmp, mac_dev, wdev, mode, p2p_mode);
5937 return ret;
5938 }
5939
5940 /* ****************************************************************************
5941 功能描述 : 设置添加用户的配置命令
5942 **************************************************************************** */
wal_hipriv_add_user(oal_net_device_stru * netdev,hi_char * pc_param)5943 static hi_u32 wal_hipriv_add_user(oal_net_device_stru *netdev, hi_char *pc_param)
5944 {
5945 wal_msg_write_stru write_msg;
5946 hi_u32 ret;
5947 mac_cfg_add_user_param_stru add_user_param_info; /* 临时保存获取的use的信息 */
5948 wal_hipriv_two_param_stru cmd_param;
5949 hi_char* cmd_param1_ptr = HI_NULL;
5950
5951 /* 设置添加用户的配置命令: hipriv vap0 add_user xx xx xx xx xx xx(mac地址) 0 | 1(HT能力位) */
5952 /* 获取配置命令参数 */
5953 ret = wal_hipriv_two_param_parse(pc_param, &cmd_param);
5954 if (ret != HI_SUCCESS) {
5955 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_add_user::parse cmd param failed!}");
5956 return ret;
5957 }
5958 cmd_param1_ptr = cmd_param.cmd_param1;
5959 /* 获取用户MAC地址 */
5960 oal_strtoaddr(cmd_param1_ptr, add_user_param_info.auc_mac_addr, WLAN_MAC_ADDR_LEN);
5961 /* 获取用户的HT标识 */
5962 /* 针对解析出的不同命令,对user的HT字段进行不同的设置 非0即为1 */
5963 if (0 == (strcmp("0", cmd_param.cmd_param2))) {
5964 add_user_param_info.ht_cap = 0;
5965 } else {
5966 add_user_param_info.ht_cap = 1;
5967 }
5968 /* **************************************************************************
5969 抛事件到wal层处理
5970 ************************************************************************** */
5971 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_ADD_USER, sizeof(mac_cfg_add_user_param_stru));
5972 /* 设置配置命令参数 */
5973 if (memcpy_s(write_msg.auc_value, sizeof(mac_cfg_add_user_param_stru), &add_user_param_info,
5974 sizeof(mac_cfg_add_user_param_stru)) != EOK) {
5975 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_add_user::memcpy_s event param failed!}");
5976 return HI_FAIL;
5977 }
5978 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
5979 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_add_user_param_stru), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
5980 if (oal_unlikely(ret != HI_SUCCESS)) {
5981 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_add_user::return err code[%u]!}", ret);
5982 }
5983 return ret;
5984 }
5985
5986 /* ****************************************************************************
5987 功能描述 : 打印共存维测信息
5988 **************************************************************************** */
wal_hipriv_btcoex_status_print(oal_net_device_stru * netdev,hi_char * pc_param)5989 static hi_u32 wal_hipriv_btcoex_status_print(oal_net_device_stru *netdev, hi_char *pc_param)
5990 {
5991 hi_u32 ret;
5992 wal_msg_write_stru write_msg;
5993
5994 hi_unref_param(pc_param);
5995 /* hipriv vap_name coex_print */
5996 if (memset_s((hi_u8 *)&write_msg, sizeof(write_msg), 0, sizeof(write_msg)) != EOK) {
5997 return HI_FAIL;
5998 }
5999 /* **************************************************************************
6000 抛事件到wal层处理
6001 ************************************************************************** */
6002 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_BTCOEX_INFO, sizeof(hi_s32));
6003 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_s32),
6004 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
6005 if (oal_unlikely(ret != HI_SUCCESS)) {
6006 oam_warning_log1(0, OAM_SF_TXOP, "{wal_hipriv_btcoex_status_print::return err code[%u]!}", ret);
6007 }
6008 return ret;
6009 }
6010
6011 /* ****************************************************************************
6012 功能描述 : 获取device和每一个tid下当前mpdu数目
6013 **************************************************************************** */
wal_hipriv_get_mpdu_num(oal_net_device_stru * netdev,hi_char * pc_param)6014 static hi_u32 wal_hipriv_get_mpdu_num(oal_net_device_stru *netdev, hi_char *pc_param)
6015 {
6016 wal_msg_write_stru write_msg;
6017 hi_u32 off_set;
6018 hi_u32 ret;
6019
6020 /* sh hipriv.sh "vap_name mpdu_num user_macaddr" */
6021 /* **************************************************************************
6022 抛事件到wal层处理
6023 ************************************************************************** */
6024 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_GET_MPDU_NUM, sizeof(param));
6025 /* 获取用户mac地址 */
6026 ret = wal_hipriv_get_mac_addr(pc_param, write_msg.auc_value, WLAN_MAC_ADDR_LEN, &off_set);
6027 if (ret != HI_SUCCESS) {
6028 return ret;
6029 }
6030 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
6031 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_get_mpdu_num_stru), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
6032 if (oal_unlikely(ret != HI_SUCCESS)) {
6033 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_get_mpdu_num::return err code[%u]!}", ret);
6034 }
6035 return ret;
6036 }
6037 #endif
6038 #endif /* #ifdef _PRE_DEBUG_MODE */
6039
6040 #if defined(_PRE_WLAN_FEATURE_HIPRIV) && defined(_PRE_WLAN_FEATURE_INTRF_MODE)
wal_hipriv_set_intrf_mode(oal_net_device_stru * netdev,hi_char * pc_param)6041 static hi_u32 wal_hipriv_set_intrf_mode(oal_net_device_stru *netdev, hi_char *pc_param)
6042 {
6043 wal_msg_write_stru write_msg;
6044 hi_u32 off_set;
6045 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {'\0'};
6046
6047 /* 解析参数 */
6048 hi_u32 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
6049 if (ret != HI_SUCCESS) {
6050 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_intrf_mode::wal_get_cmd_one_arg return err_code [%u]!}", ret);
6051 return ret;
6052 }
6053
6054 hi_s32 mode = oal_atoi(ac_name);
6055 if ((mode != 0) && (mode != 1)) {
6056 oam_error_log1(0, 0, "wal_hipriv_set_intrf_mode:: invalid mode [%d]", mode);
6057 return HI_FAIL;
6058 }
6059 hi_bool *param = (hi_bool *)write_msg.auc_value;
6060 *param = (mode == 1);
6061
6062 /* **************************************************************************
6063 抛事件到wal层处理
6064 ************************************************************************** */
6065 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_INTRF_MODE_ON, sizeof(hi_bool));
6066
6067 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_bool),
6068 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
6069 if (oal_unlikely(ret != HI_SUCCESS)) {
6070 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_intrf_mode::return err code [%u]!}\r\n", ret);
6071 return ret;
6072 }
6073
6074 return HI_SUCCESS;
6075 }
6076 #endif
6077
wal_hipriv_get_tx_params(oal_net_device_stru * netdev,hi_char * pc_param)6078 static hi_u32 wal_hipriv_get_tx_params(oal_net_device_stru *netdev, hi_char *pc_param)
6079 {
6080 hi_unref_param(netdev);
6081 hi_unref_param(pc_param);
6082
6083 hi_wifi_get_tx_params("wlan0", strlen("wlan0"));
6084 return HI_ERR_SUCCESS;
6085 }
6086
wal_hipriv_set_dev_soft_reset(oal_net_device_stru * netdev,hi_char * pc_param)6087 static hi_u32 wal_hipriv_set_dev_soft_reset(oal_net_device_stru *netdev, hi_char *pc_param)
6088 {
6089 hi_unref_param(netdev);
6090 hi_unref_param(pc_param);
6091
6092 hi_s32 ret = hi_wifi_soft_reset_device();
6093 if (ret != HI_SUCCESS) {
6094 oam_warning_log1(0, 0, "wal_hipriv_set_dev_soft_reset fail ret[%d]", ret);
6095 return HI_FAIL;
6096 }
6097 return HI_ERR_SUCCESS;
6098 }
6099
6100 #if defined(_PRE_WLAN_FEATURE_HIPRIV) || defined(_PRE_DEBUG_MODE) || defined(_PRE_WLAN_FEATURE_SIGMA)
6101 /* hipriv命令统一格式: hipriv [vap_name] [cmd_name] [param1] [...] */
6102 static const wal_hipriv_cmd_entry_stru g_ast_hipriv_cmd[] = {
6103 #if defined(_PRE_WLAN_FEATURE_HIPRIV) || defined(_PRE_WLAN_FEATURE_SIGMA)
6104 {"ampdu_tx_on", wal_hipriv_ampdu_tx_on}, /* 开关ampdu: ampdu_tx_on [0\1] */
6105 {"freq", wal_ioctl_set_freq}, /* 设置AP 信道 */
6106 {"uapsd_en_cap", wal_hipriv_set_uapsd_cap}, /* 开关uapsd: uapsd_en_cap [0\1] */
6107 {"frag_threshold", wal_hipriv_frag_threshold}, /* 设置分片门限: frag_threshold [len] */
6108 {"setcountry", wal_hipriv_setcountry}, /* 设置国家码: setcountry [cn_code] */
6109 {"set_netdev_state", wal_hipriv_set_vap_state}, /* 设置驱动netdev状态 [0\1] */
6110 #endif
6111 #ifdef _PRE_WLAN_FEATURE_HIPRIV
6112 {"info", wal_hipriv_vap_info}, /* 打印vap的所有参数信息: info */
6113 {"set_tx_dscr", wal_hipriv_set_tx_dscr_param}, /* 设置描述符信息: set_tx_dscr [type] [param_name] [value] */
6114 {"ampdu_start", wal_hipriv_ampdu_start}, /* 开启AMPDU: ampdu_start [mac地址] [tidno] */
6115 {"ampdu_amsdu", wal_hipriv_ampdu_amsdu_switch}, /* 开关amsdu ampdu联合聚合: ampdu_amsdu [0|1] */
6116 {"delba_req", wal_hipriv_delba_req}, /* 删除BA会话: delba_req [mac地址] [tidno] [direction] */
6117 {"userinfo", wal_hipriv_user_info}, /* 打印user信息: userinfo [user_mac_addr] */
6118 {"bw", wal_hipriv_set_bw}, /* 设置带宽: bw [value] */
6119 {"regwrite", wal_hipriv_reg_write}, /* 写寄存器: regwrite [32/16] [addr] [val]" addr val都是16进制 */
6120 {"mode", wal_ioctl_set_mode}, /* 设置AP 协议模式: mode [mode_type] */
6121 {"set_mib", wal_hipriv_set_mib}, /* 设置VAP mib值 */
6122 {"get_mib", wal_hipriv_get_mib}, /* 获取VAP mib值 */
6123 {"rx_info", wal_hipriv_rx_fcs_info}, /* 打印接收帧的FCS正确与错误信息: rx_info */
6124 {"al_rx", wal_hipriv_rx_proc}, /* 设置常收模式: al_rx enable [mode] [bw] [freq] */
6125 {"al_tx", wal_hipriv_tx_proc}, /* 设置常收模式: al_tx enable [mode] [bw] [freq] [rate] */
6126 {"alg_cfg", wal_hipriv_alg_cfg}, /* 算法参数配置: hipriv "vap0 alg_cfg sch_vi_limit 10" */
6127 #ifdef _PRE_WLAN_FEATURE_MFG_TEST
6128 {"set_cal_bpwr", wal_hipriv_set_cal_band_power}, /* 对各band做平均功率补偿 */
6129 {"set_cal_rpwr", wal_hipriv_set_cal_rate_power}, /* 对各速率做功率补偿 */
6130 {"set_cal_freq", wal_hipriv_set_cal_freq_power}, /* 设置频偏补偿 */
6131 {"w_cal_data", wal_hipriv_set_dataefuse}, /* 将校准值写入efuse */
6132 {"get_caldata_info", wal_hipriv_get_cal_data}, /* 读取校准数据 */
6133 {"set_efuse_mac", wal_hipriv_set_customer_mac}, /* 设置mac地址 */
6134 {"get_efuse_mac", wal_hipriv_get_customer_mac}, /* 查询mac地址 */
6135 {"set_rate_pwr", wal_hipriv_set_rate_power}, /* 对各速率做功率调试 */
6136 #endif
6137 {"set_tx_pwr_offset", hi_hipriv_set_tx_pwr_offset}, /* 设置功率偏移 */
6138 {"set_retry_limit", wal_hipriv_set_retry_limit}, /* 设置重传配置 */
6139 {"kick_user", wal_hipriv_kick_user}, /* 删除用户: kick_user [user_mac_addr] */
6140 {"list_channel", wal_hipriv_list_channel}, /* 查询支持信道列表 list_channel */
6141 {"wmm_switch", wal_hipriv_wmm_switch}, /* 动态开启或者关闭wmm: wmm_switch [0|1] */
6142 {"send_bar", wal_hipriv_send_bar}, /* 发送bar: send_bar [mac_addr)] [tid_num]" */
6143 {"getcountry", wal_hipriv_getcountry}, /* 查询国家码: getcountry */
6144 #ifdef _PRE_DEBUG_MODE
6145 {"print_config", wal_print_init_params},
6146 #endif
6147 {"ampdu_aggr_num", wal_hipriv_set_ampdu_aggr_num}, /* 设置AMPDU聚合个数: ampdu_aggr_num [0|1] [num] */
6148 {"random_mac_scan", wal_hipriv_set_random_mac_addr_scan}, /* 随机mac扫描开关 random_mac_addr_scan [0|1] */
6149 #ifdef _PRE_WLAN_RF_110X_CALI_DPD
6150 {"start_dpd", wal_hipriv_start_dpd}, /* Start DPD Calibration */
6151 #endif
6152 #if (_PRE_MULTI_CORE_MODE_OFFLOAD_DMAC == _PRE_MULTI_CORE_MODE)
6153 {"report_vap_info", wal_hipriv_report_vap_info}, /* 上报 vap的信息: report_vap_info [flag] */
6154 {"reginfo", wal_hipriv_reg_info}, /* 读寄存器: reginfo [16|32] [startaddr] [endaddr] */
6155 #endif
6156 #ifdef _PRE_WLAN_FEATURE_WOW
6157 {"wow_sleep", wal_hipriv_host_sleep_switch}, /* 配置host睡眠开关: host_sleep [0|1] */
6158 {"wow_event", wal_hipriv_set_wow}, /* wow事件配置: wow_event_set [value] */
6159 {"wow_pattern", wal_hipriv_set_wow_pattern}, /* 设置wow模式: wow_pattern [clr|add|del] [index] */
6160 #endif
6161 #ifdef _PRE_WLAN_FEATURE_PROMIS
6162 {"set_monitor", wal_hipriv_set_monitor_switch}, /* 开关monitor模式: set_monitor [0|1|2|3|4] */
6163 #endif
6164 {"set_device_rst", wal_hipriv_set_dev_soft_reset}, /* 使能device侧软复位 */
6165 #endif
6166 #if defined(_PRE_WLAN_FEATURE_STA_PM) || defined(_PRE_WLAN_FEATURE_SIGMA) || defined(_PRE_WLAN_FEATURE_HIPRIV)
6167 {"set_uapsd_para", wal_hipriv_set_uapsd_para}, /* 设置uapsd的参数信息: set_uapsd_para 3 1 1 1 1 */
6168 {"set_ps_mode", wal_hipriv_sta_ps_mode}, /* 设置PSPOLL能力: set_ps_mode [3] [0] */
6169 {"set_sta_pm_on", wal_hipriv_set_pm_switch}, /* 开启低功耗: set_sta_pm_on xx xx xx xx */
6170 {"set_wlan_pf_pm_enable", wal_hipriv_set_wlan_pm_enable}, /* 设置device platform 睡眠使能 [1] [0] */
6171 {"set_host_sleep_status", wal_hipriv_set_host_sleep_status}, /* 设置host睡眠状态 [1] [0] */
6172 {"set_wk_fail_process_pid", wal_hipriv_setwk_fail_process}, /* 设置处理唤醒device失败时的任务ID */
6173 {"get_pm_info", wal_hipriv_dump_pm_info}, /* 获取pm info, 1: host, 0: device */
6174 #endif
6175 #ifdef _PRE_WLAN_FEATURE_HIPRIV
6176 {"set_cca_threshold", wal_hipriv_set_cca_threshold}, /* 设置CCA门限: */
6177 #ifdef _PRE_WLAN_FEATURE_STA_PM
6178 {"set_psm_offset", wal_hipriv_sta_set_psm_offset}, /* 配置tbtt、ext tbtt 提前量和beacon超时时间 */
6179 {"set_hw_ps_mode", wal_hipriv_sta_set_hw_ps_mode}, /* 可配置硬件深睡和浅睡模式 */
6180 {"set_offload_param", wal_hipriv_sta_set_offload_param}, /* 配置offload 参数 */
6181 #endif
6182 #ifdef _PRE_WLAN_FEATURE_ALG_CFG
6183 {"alg_ar_log", wal_hipriv_ar_log}, /* autorate算法日志参数配置: */
6184 {"alg_tpc_log", wal_hipriv_tpc_log}, /* tpc算法日志参数配置: */
6185 #ifdef _PRE_WLAN_FEATURE_ALG_CFG_TEST
6186 {"alg_ar_test", wal_hipriv_ar_test}, /* autorate算法系统测试命令 */
6187 #endif
6188 #endif
6189 #ifdef _PRE_WLAN_FEATURE_EDCA_OPT_AP_DEBUG
6190 {"edca_switch_sta", wal_hipriv_set_edca_opt_switch_sta}, /* STA是否开启私有edca参数优化机制 */
6191 {"edca_switch_ap", wal_hipriv_set_edca_opt_switch_ap}, /* 是否开启edca优化机制 */
6192 {"edca_cycle_ap", wal_hipriv_set_edca_opt_cycle_ap}, /* 设置edca参数调整的周期 */
6193 #endif
6194 #ifdef _PRE_WLAN_FEATURE_MESH
6195 {"set_times_limit", wal_hipriv_set_report_times_limit}, /* 设置发送次数上报相关参数(联调调试使用) */
6196 {"set_cnt_limit", wal_hipriv_set_report_cnt_limit}, /* 设置发送上报相关参数(联调调试使用) */
6197 {"set_en_mbr", wal_hipriv_set_en_mbr}, /* 设置vap是否为MBR节点 */
6198 {"set_mnid", wal_hipriv_set_mnid}, /* 设置mesh vap的mnid */
6199 {"set_bcn_prio", wal_hipriv_set_beacon_priority}, /* 设置beacon priority */
6200 {"set_accept_sta", wal_hipriv_set_mesh_accept_sta}, /* 设置支持sta关联 */
6201 #endif
6202 #ifdef _PRE_WLAN_FEATURE_BTCOEX
6203 {"btcoex_enable", wal_hipriv_btcoex_enable},
6204 #endif
6205 #ifdef _PRE_WLAN_FEATURE_BW_HIEX
6206 {"selfcts", wal_hipriv_hiex_config_selfcts}, /* 设置selfcts发送参数: selfcts [enable] [duration] [per] */
6207 #endif
6208 #ifdef _PRE_WLAN_FEATURE_ARP_OFFLOAD
6209 {"arp_offload", wal_hipriv_arp_offload_setting}, /* 设置 ARP offload 功能 */
6210 {"arp_offload_info", wal_hipriv_arp_offload_show_info}, /* 显示 ARP offload 信息 */
6211 #endif
6212 #ifdef _PRE_WLAN_FEATURE_DHCP_OFFLOAD
6213 {"dhcp_offload", wal_hipriv_dhcp_offload_setting}, /* 设置 DHCP offload 功能 */
6214 #endif
6215 #ifdef _PRE_WLAN_FEATURE_OFFLOAD_FLOWCTL
6216 {"set_flowctl_param", wal_hipriv_set_flowctl_param}, /* 设置流控相关参数 */
6217 {"get_flowctl_stat", wal_hipriv_get_flowctl_stat}, /* 获取流控相关状态信息 */
6218 #endif
6219 #endif
6220 #ifdef _PRE_DEBUG_MODE
6221 {"wmm", wal_hipriv_set_wmm_param}, /* 设置wmm参数: wmm [param_ac_nimber] */
6222 {"vap_pkt_stat", wal_hipriv_show_vap_pkt_stat}, /* 获取vap的收发包统计信息: vap_pkt_stat */
6223 {"start_scan", wal_hipriv_start_scan}, /* 触发sta扫描: start_scan */
6224 {"start_join", wal_hipriv_start_join}, /* 触发sta加入并认证关联: start_join [num] num:扫描到的AP序号 */
6225 {"start_deauth", wal_hipriv_start_deauth}, /* 触发sta去认证: hipriv "vap0 start_deauth" */
6226 {"packet_xmit", wal_hipriv_packet_xmit}, /* 发送数据帧: packet_xmit [tid_no] [num] [len] [ra_mac]" */
6227 {"hide_ssid", wal_hipriv_hide_ssid}, /* 开关隐藏ssid: hide_ssid [0|1] */
6228 {"bgscan_enable", wal_hipriv_bgscan_enable}, /* 背景扫描测试命令: bgscan_enable [0|1] */
6229 {"essid", wal_ioctl_set_essid}, /* 设置AP ssid */
6230 {"set_regd_pwr", wal_hipriv_set_regdomain_pwr}, /* 设置管制域最大发送功率: set_regdomain_pwr [value] 单位dBm */
6231 {"auto_protection", wal_hipriv_set_auto_protection}, /* 设置自动保护开关 */
6232 /* 设置管制域最大发送功率(可以突破限制): set_regdomain_pwr_p [value] 单位dBm */
6233 {"set_regd_pwr_p", wal_hipriv_set_regdomain_pwr_priv},
6234 {"create", wal_hipriv_add_vap}, /* 创建vap: Hisilicon0 create [vap0] [ap|sta] */
6235 {"destroy", wal_hipriv_del_vap}, /* 删除vap: destroy */
6236 {"add_user", wal_hipriv_add_user}, /* 添加用户: add_user [mac地址] [0|1(HT能力位)] */
6237 {"btcoex_print", wal_hipriv_btcoex_status_print}, /* 打印共存维测信息: coex_print */
6238 {"mpdu_num", wal_hipriv_get_mpdu_num}, /* 获取tid的mpdu个数: mpdu_num [user_macaddr] */
6239 #endif
6240 #if defined(_PRE_DEBUG_MODE) || defined(_PRE_WLAN_FEATURE_SIGMA)
6241 /* sigma相关 */
6242 {"addba_req", wal_hipriv_addba_req}, /* 建立BA: addba_req [mac] [tidno] [buffsize] [timeout] */
6243 {"rate", wal_hipriv_set_rate}, /* 设置non-HT模式下的速率: rate [value] */
6244 {"mcs", wal_hipriv_set_mcs}, /* 设置HT模式下的速率: mcs [value] */
6245 {"rts_threshold", wal_hipriv_rts_threshold}, /* 设置RTS门限: rts_threshold [len] */
6246 {"set_stbc_cap", wal_hipriv_set_stbc_cap}, /* 设置STBC能力 */
6247 {"txpower", wal_ioctl_set_txpower},
6248 {"set_shortgi20", wal_hipriv_set_shortgi20}, /* 设置20M short GI: set_shortgi20 [1/0] */
6249 #endif
6250 #if defined(_PRE_WLAN_FEATURE_HIPRIV) && defined(_PRE_WLAN_FEATURE_INTRF_MODE)
6251 {"intrf_mode", wal_hipriv_set_intrf_mode}, /* 设置干扰模式: intrf_mode [1/0],为1则进入,启动一系列抗干扰措施 */
6252 #endif
6253 {"get_tx_params", wal_hipriv_get_tx_params}
6254 };
6255 #endif
6256
6257 /* ****************************************************************************
6258 功能描述 : 获取命令对应的net_dev
6259 输入参数 : pc_cmd: 命令字符串
6260 输出参数 : ppst_net_dev: 得到net_device
6261 pul_off_set: 取net_device偏移的字节
6262 返 回 值 : 错误码
6263 **************************************************************************** */
wal_hipriv_get_netdev(const hi_char * pc_cmd,oal_net_device_stru ** netdev,hi_u32 * pul_off_set)6264 hi_u32 wal_hipriv_get_netdev(const hi_char *pc_cmd, oal_net_device_stru **netdev, hi_u32 *pul_off_set)
6265 {
6266 hi_char ac_dev_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
6267
6268 if (oal_unlikely((pc_cmd == HI_NULL) || (netdev == HI_NULL) || (pul_off_set == HI_NULL))) {
6269 oam_error_log0(0, OAM_SF_ANY, "{wal_hipriv_get_netdev::pc_cmd/ppst_net_dev/pul_off_set null ptr!}");
6270 return HI_ERR_CODE_PTR_NULL;
6271 }
6272 if (wal_get_cmd_one_arg(pc_cmd, ac_dev_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, pul_off_set) != HI_SUCCESS) {
6273 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_get_netdev::wal_get_cmd_one_arg return err_code!}");
6274 return HI_FAIL;
6275 }
6276 /* 根据dev_name找到dev */
6277 oal_net_device_stru *netdev_temp = oal_get_netdev_by_name(ac_dev_name);
6278 if (netdev_temp == HI_NULL) {
6279 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_get_netdev::oal_get_netdev_by_name return null ptr!}");
6280 return HI_ERR_CODE_PTR_NULL;
6281 }
6282 /* 调用oal_dev_get_by_name后,必须调用oal_dev_put使net_dev的引用计数减一 */
6283 oal_dev_put(netdev_temp);
6284 *netdev = netdev_temp;
6285 return HI_SUCCESS;
6286 }
6287
6288 #if defined(_PRE_WLAN_FEATURE_HIPRIV) || defined(_PRE_WLAN_FEATURE_SIGMA)
6289 /* ****************************************************************************
6290 功能描述 : 处理私有配置命令
6291 输入参数 : pc_cmd: 命令
6292 返 回 值 : 错误码
6293 **************************************************************************** */
wal_hipriv_process_cmd(oal_net_device_stru * netdev,hi_char * pc_cmd)6294 static hi_u32 wal_hipriv_process_cmd(oal_net_device_stru *netdev, hi_char *pc_cmd)
6295 {
6296 hi_u8 cmd;
6297 hi_u32 off_set = 0;
6298 hi_u32 ret;
6299 hi_char ac_cmd_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {'\0'};
6300
6301 /* **************************************************************************
6302 cmd格式约束
6303 网络设备名 命令 参数 eg. Hisilicon0 create vap0
6304 1~15Byte 1~15Byte
6305 **************************** ********************************************** */
6306 if (wal_get_cmd_one_arg(pc_cmd, ac_cmd_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set) != HI_SUCCESS) {
6307 oam_warning_log0(0, OAM_SF_ANY, "{wal_get_cmd_one_arg return err_code!}");
6308 return HI_FAIL;
6309 }
6310
6311 /* 根据命令名找到命令枚举 */
6312 for (cmd = 0; cmd < hi_array_size(g_ast_hipriv_cmd); cmd++) {
6313 if (strcmp(g_ast_hipriv_cmd[cmd].pc_cmd_name, ac_cmd_name) == 0) {
6314 pc_cmd += off_set;
6315 ret = g_ast_hipriv_cmd[cmd].func(netdev, pc_cmd);
6316 if (ret != HI_SUCCESS) {
6317 oam_warning_log1(0, OAM_SF_ANY, "{cmd func process failed, ret=%u}", ret);
6318 #ifdef _PRE_WLAN_FEATURE_MFG_TEST
6319 printk("ERROR\r\n");
6320 #endif
6321 }
6322 return ret;
6323 }
6324 }
6325
6326 if (strcmp(ac_cmd_name, "help") == 0) {
6327 oam_print("hipriv commands:\n");
6328 for (cmd = 0; cmd < hi_array_size(g_ast_hipriv_cmd); cmd++) {
6329 oam_print(" %s\n", g_ast_hipriv_cmd[cmd].pc_cmd_name);
6330 }
6331 return HI_SUCCESS;
6332 }
6333
6334 return HI_FAIL;
6335 }
6336
6337 /* ****************************************************************************
6338 功能描述 : hipriv命令入口
6339 输入参数 : *pc_buffer 命令参数
6340 count 命令长度
6341 返 回 值 : 字节数,0表示hipriv失败
6342 **************************************************************************** */
wal_hipriv_entry(const hi_char * pc_buffer,hi_u32 count)6343 hi_u32 wal_hipriv_entry(const hi_char *pc_buffer, hi_u32 count)
6344 {
6345 hi_char *pc_cmd = HI_NULL;
6346 hi_char *pc_cmd_tmp = HI_NULL;
6347 oal_net_device_stru *netdev = HI_NULL;
6348 hi_u32 ret;
6349 hi_u32 len = count;
6350 hi_u32 off_set = 0;
6351
6352 if (len > WAL_HIPRIV_CMD_MAX_LEN) {
6353 oam_error_log1(0, OAM_SF_ANY, "{wal_hipriv_entry::param len overflow, ul_len[%u]!}", len);
6354 return 0;
6355 }
6356
6357 pc_cmd = oal_mem_alloc(OAL_MEM_POOL_ID_LOCAL, WAL_HIPRIV_CMD_MAX_LEN);
6358 if (oal_unlikely(pc_cmd == HI_NULL)) {
6359 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_entry::alloc mem return null ptr!}\r\n");
6360 return 0;
6361 }
6362
6363 if (pc_buffer != HI_NULL) {
6364 if (memcpy_s(pc_cmd, len, pc_buffer, len) != EOK) {
6365 oam_error_log0(0, OAM_SF_ANY, "{wal_hipriv_entry::mem safe function err!}");
6366 oal_mem_free(pc_cmd);
6367 return 0;
6368 }
6369 }
6370 pc_cmd[len - 1] = '\0';
6371 pc_cmd_tmp = pc_cmd;
6372 ret = wal_hipriv_get_netdev(pc_cmd_tmp, &netdev, &off_set);
6373 if (ret != HI_SUCCESS) {
6374 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_entry::wal_hipriv_get_netdev return error code [%d]!}\r\n", ret);
6375 oal_mem_free(pc_cmd);
6376 return 0;
6377 }
6378
6379 pc_cmd_tmp += off_set;
6380 ret = wal_hipriv_process_cmd(netdev, pc_cmd_tmp);
6381 if (ret != HI_SUCCESS) {
6382 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_entry::parse cmd return err code[%d]!}\r\n", ret);
6383 oal_mem_free(pc_cmd);
6384 return 0;
6385 }
6386 oal_mem_free(pc_cmd);
6387
6388 return len;
6389 }
6390 #endif
6391
6392 #ifdef _PRE_CONFIG_CONN_HISI_SYSFS_SUPPORT
6393 /* ****************************************************************************
6394 函 数 名 : wal_hipriv_sys_write
6395 功能描述 : sys write函数
6396
6397 修改历史 :
6398 1.日 期 : 2014年10月17日
6399 作 者 : HiSilicon
6400 修改内容 : 新生成函数
6401
6402 **************************************************************************** */
wal_hipriv_sys_write(oal_device_stru * dev,oal_device_attribute_stru * attr,const char * pc_buffer,hi_size_t count)6403 static hi_ssize_t wal_hipriv_sys_write(oal_device_stru *dev, oal_device_attribute_stru *attr, const char *pc_buffer,
6404 hi_size_t count)
6405 {
6406 hi_u32 len = (hi_u32)count;
6407
6408 if (len > WAL_HIPRIV_CMD_MAX_LEN) {
6409 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_sys_write::len>WAL_HIPRIV_CMD_MAX_LEN, len [%d]!}\r\n", len);
6410 return -OAL_EINVAL;
6411 }
6412
6413 if (wal_hipriv_entry(pc_buffer, len) != len) {
6414 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_proc_write::parse cmd return err code!}\r\n");
6415 }
6416
6417 return (hi_s32)len;
6418 }
6419
6420 /* ****************************************************************************
6421 函 数 名 : wal_hipriv_sys_read
6422 功能描述 : sys read函数 空函数;防止编译警告
6423
6424 修改历史 :
6425 1.日 期 : 2014年10月17日
6426 作 者 : HiSilicon
6427 修改内容 : 新生成函数
6428
6429 **************************************************************************** */
6430 #define SYS_READ_MAX_STRING_LEN (4096 - 40) /* 当前命令字符长度20字节内,预留40保证不会超出 */
wal_hipriv_sys_read(oal_device_stru * dev,oal_device_attribute_stru * attr,char * pc_buffer)6431 static hi_ssize_t wal_hipriv_sys_read(oal_device_stru *dev, oal_device_attribute_stru *attr, char *pc_buffer)
6432 {
6433 hi_u32 cmd_idx;
6434 hi_u32 buff_index = 0;
6435
6436 for (cmd_idx = 0; cmd_idx < hi_array_count(g_ast_hipriv_cmd); cmd_idx++) {
6437 buff_index += snprintf_s(pc_buffer + buff_index, (SYS_READ_MAX_STRING_LEN - buff_index),
6438 strlen(g_ast_hipriv_cmd[cmd_idx].pc_cmd_name) + 3, /* 多3字节 */
6439 "\t%s\n", g_ast_hipriv_cmd[cmd_idx].pc_cmd_name);
6440 if (buff_index > SYS_READ_MAX_STRING_LEN) {
6441 buff_index += snprintf_s(pc_buffer + buff_index, (SYS_READ_MAX_STRING_LEN - buff_index), 50,
6442 "\tmore...\n"); /* count is 50 */
6443 break;
6444 }
6445 }
6446 return buff_index;
6447 }
6448
6449 #endif
6450
6451
6452 #ifdef _PRE_WLAN_FEATURE_HIPRIV
6453 #ifdef AT_DEBUG_CMD_SUPPORT
wal_at_set_tpc(oal_net_device_stru * netdev,const hi_char * pc_param)6454 static hi_u32 wal_at_set_tpc(oal_net_device_stru *netdev, const hi_char *pc_param)
6455 {
6456 wal_msg_write_stru write_msg;
6457 hi_u32 off_set = 0;
6458 hi_char tpc_value[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {'\0'};
6459 mac_ioctl_alg_param_stru *alg_param = (mac_ioctl_alg_param_stru *)(write_msg.auc_value);
6460
6461 /* 低功耗状态下不允许执行 */
6462 if (is_under_ps()) {
6463 oam_warning_log0(0, 0, "under ps mode,can not exec cmd");
6464 return HI_FAIL;
6465 }
6466 /* 获取TPC配置开关 */
6467 if (*pc_param == ' ') {
6468 oam_warning_log0(0, OAM_SF_ANY, "{wal_at_set_tpc::cmd error!}");
6469 return HI_FAIL;
6470 }
6471
6472 hi_u32 ret = wal_get_cmd_one_arg(pc_param, tpc_value, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
6473 if (ret != HI_SUCCESS) {
6474 oam_warning_log1(0, OAM_SF_ANY, "{wal_at_set_tpc::wal_get_cmd_one_arg return err_code [%u]!}", ret);
6475 return ret;
6476 }
6477
6478 if ((strcmp("0", tpc_value) != 0) && (strcmp("1", tpc_value) != 0)) {
6479 oam_warning_log0(0, OAM_SF_ANY, "{wal_at_set_tpc::get tpc switch err}");
6480 return HI_FAIL;
6481 }
6482
6483 /* 判断命令长度是否有问题 */
6484 pc_param += off_set;
6485 if (*pc_param != '\0') {
6486 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_al_tx::cmd len error!}");
6487 return HI_FAIL;
6488 }
6489
6490 alg_param->alg_cfg = MAC_ALG_CFG_TPC_MODE;
6491 alg_param->is_negtive = HI_FALSE;
6492 alg_param->value = (strcmp("0", tpc_value) == 0) ? ALG_TPC_MODE_DISABLE : ALG_TPC_MODE_ADAPT_POWER;
6493
6494 /* 抛事件到wal层处理 */
6495 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_ALG_PARAM, sizeof(mac_ioctl_alg_param_stru));
6496
6497 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
6498 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_ioctl_alg_param_stru), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
6499 if (oal_unlikely(ret != HI_SUCCESS)) {
6500 oam_warning_log1(0, OAM_SF_ANY, "{wal_at_set_tpc::wal_send_cfg_event return err code [%u]!}", ret);
6501 return ret;
6502 }
6503
6504 hi_at_printf("OK\r\n");
6505 return HI_SUCCESS;
6506 }
6507
wal_at_setcountry(oal_net_device_stru * netdev,hi_char * pc_param)6508 hi_u32 wal_at_setcountry(oal_net_device_stru *netdev, hi_char *pc_param)
6509 {
6510 hi_u32 ret = wal_hipriv_setcountry(netdev, pc_param);
6511 if (ret == HI_SUCCESS) {
6512 hi_at_printf("OK\r\n");
6513 }
6514
6515 return ret;
6516 }
6517
wal_at_set_trc(oal_net_device_stru * netdev,const hi_char * pc_param)6518 static hi_u32 wal_at_set_trc(oal_net_device_stru *netdev, const hi_char *pc_param)
6519 {
6520 wal_msg_write_stru write_msg;
6521 hi_u32 off_set = 0;
6522 hi_char trc_value[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {'\0'};
6523 mac_ioctl_alg_param_stru *alg_param = (mac_ioctl_alg_param_stru *)(write_msg.auc_value);
6524
6525 /* 低功耗状态下不允许执行 */
6526 if (is_under_ps()) {
6527 oam_warning_log0(0, 0, "under ps mode,can not exec cmd");
6528 return HI_FAIL;
6529 }
6530 /* 获取TRC配置开关 */
6531 if (*pc_param == ' ') {
6532 oam_warning_log0(0, OAM_SF_ANY, "{wal_at_set_trc::cmd error!}");
6533 return HI_FAIL;
6534 }
6535
6536 hi_u32 ret = wal_get_cmd_one_arg(pc_param, trc_value, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
6537 if (ret != HI_SUCCESS) {
6538 oam_warning_log1(0, OAM_SF_ANY, "{wal_at_set_trc::wal_get_cmd_one_arg return err_code [%u]!}", ret);
6539 return HI_FAIL;
6540 }
6541
6542 if ((strcmp("0", trc_value) != 0) && (strcmp("1", trc_value) != 0)) {
6543 oam_warning_log0(0, OAM_SF_ANY, "{wal_at_set_trc::param err}");
6544 return HI_FAIL;
6545 }
6546
6547 /* 判断命令长度是否有问题 */
6548 pc_param += off_set;
6549 if (*pc_param != '\0') {
6550 oam_warning_log0(0, OAM_SF_ANY, "{wal_at_set_trc::cmd len error!}");
6551 return HI_FAIL;
6552 }
6553
6554 alg_param->alg_cfg = MAC_ALG_CFG_AUTORATE_ENABLE;
6555 alg_param->is_negtive = HI_FALSE;
6556 alg_param->value = (strcmp("0", trc_value) == 0) ? 0 : 1; /* 0:禁止速率调节,1: 使能速率调节 */
6557 /* 抛事件到wal层处理 */
6558 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_ALG_PARAM, sizeof(mac_ioctl_alg_param_stru));
6559
6560 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
6561 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_ioctl_alg_param_stru), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
6562 if (oal_unlikely(ret != HI_SUCCESS)) {
6563 oam_warning_log1(0, OAM_SF_ANY, "{wal_at_set_trc::wal_send_cfg_event return err code [%u]!}", ret);
6564 return ret;
6565 }
6566 g_auto_rate_flag = alg_param->value;
6567
6568 hi_at_printf("OK\r\n");
6569 return HI_SUCCESS;
6570 }
6571
wal_get_protocol_mode(const oal_net_device_stru * netdev,hi_s32 * protocol_mode)6572 static hi_s32 wal_get_protocol_mode(const oal_net_device_stru *netdev, hi_s32 *protocol_mode)
6573 {
6574 hi_s32 phy_mode = -1;
6575 mac_vap_stru *mac_vap = HI_NULL;
6576
6577 if ((netdev == HI_NULL) || (GET_NET_DEV_PRIV(netdev) == HI_NULL)) {
6578 oam_warning_log0(0, OAM_SF_ANY, "{wal_get_protocol_mode::netdev or netdev->ml_priv null param!}");
6579 return HI_FAIL;
6580 }
6581 mac_vap = (mac_vap_stru *)GET_NET_DEV_PRIV(netdev);
6582 /* rate参数校验,要区分当前协议模式 */
6583 if (mac_vap->vap_mode == WLAN_VAP_MODE_BSS_STA) {
6584 phy_mode = hi_wifi_sta_get_protocol_mode();
6585 if (phy_mode == HISI_FAIL) {
6586 oam_warning_log0(0, OAM_SF_ANY, "{wal_get_protocol_mode::hi_wifi_sta_get_protocol_mode fail!}");
6587 return HI_FAIL;
6588 }
6589 } else if (mac_vap->vap_mode == WLAN_VAP_MODE_BSS_AP) {
6590 phy_mode = hi_wifi_softap_get_protocol_mode();
6591 if (phy_mode == HISI_FAIL) {
6592 oam_warning_log0(0, OAM_SF_ANY, "{wal_get_protocol_mode::hi_wifi_sta_get_protocol_mode fail!}");
6593 return HI_FAIL;
6594 }
6595 } else if (mac_vap->vap_mode == WLAN_VAP_MODE_MESH) {
6596 phy_mode = HI_WIFI_PHY_MODE_11BGN;
6597 } else {
6598 oam_warning_log0(0, OAM_SF_ANY, "{wal_get_protocol_mode::ifname err!}");
6599 return HI_FAIL;
6600 }
6601
6602 *protocol_mode = phy_mode;
6603 return HI_SUCCESS;
6604 }
6605
wal_is_set_rate_valid(hi_s32 protocol_mode,hi_s32 rate)6606 static hi_u32 wal_is_set_rate_valid(hi_s32 protocol_mode, hi_s32 rate)
6607 {
6608 if (protocol_mode == HI_WIFI_PHY_MODE_11B) {
6609 if (rate < 0 || rate > 3) { /* 0 3:11b 参数取值范围 */
6610 oam_warning_log0(0, OAM_SF_ANY, "{wal_is_set_rate_valid::protocol_mode 11b, rate or short gi err!}");
6611 return HI_FAIL;
6612 }
6613 } else if (protocol_mode == HI_WIFI_PHY_MODE_11BG) {
6614 if (!((rate >= 24 && rate <= 31) || (rate >= 0 && rate <= 3))) { /* 0 3 24 31:11bg 参数范围 */
6615 oam_warning_log0(0, OAM_SF_ANY, "{wal_is_set_rate_valid::protocol_mode 11bg, rate or short gi err!}");
6616 return HI_FAIL;
6617 }
6618 } else if (protocol_mode == HI_WIFI_PHY_MODE_11BGN) {
6619 if (!((rate >= 32 && rate <= 39) || (rate >= 24 && rate <= 31) || /* 32 39 24 31 参数范围 */
6620 (rate >= 0 && rate <= 3))) { /* 0 3 参数范围 */
6621 oam_warning_log0(0, OAM_SF_ANY, "{wal_is_set_rate_valid::protocol_mode 11bgn, rate err!}");
6622 return HI_FAIL;
6623 }
6624 } else {
6625 oam_warning_log0(0, OAM_SF_ANY, "{wal_is_set_rate_valid::protocol mode err!}");
6626 return HI_FAIL;
6627 }
6628 return HI_SUCCESS;
6629 }
6630
wal_set_rate_sgi(oal_net_device_stru * netdev,hi_u8 frame_type,hi_s32 protocol_mode,hi_s32 rate_value,hi_s8 sgi_val)6631 static hi_u32 wal_set_rate_sgi(oal_net_device_stru *netdev, hi_u8 frame_type, hi_s32 protocol_mode, hi_s32 rate_value,
6632 hi_s8 sgi_val)
6633 {
6634 wal_msg_write_stru write_msg;
6635
6636 if (wal_is_set_rate_valid(protocol_mode, rate_value) != HI_SUCCESS) {
6637 return HI_FAIL;
6638 }
6639 /* **************************************************************************
6640 抛事件到wal层处理
6641 ************************************************************************** */
6642 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_DSCR, sizeof(mac_cfg_set_dscr_param_stru));
6643 /* 解析并设置配置命令参数 */
6644 mac_cfg_set_dscr_param_stru *set_dscr_param = (mac_cfg_set_dscr_param_stru *)(write_msg.auc_value);
6645 set_dscr_param->type = frame_type;
6646 set_dscr_param->function_index = MAC_SET_DSCR_PARAM_RATE;
6647 set_dscr_param->l_value = rate_value;
6648 if (wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
6649 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_set_dscr_param_stru), (hi_u8 *)&write_msg, HI_FALSE,
6650 HI_NULL) != HI_SUCCESS) {
6651 oam_warning_log0(0, OAM_SF_ANY, "{wal_set_rate_sgi:: set rate return err!}");
6652 return HI_FAIL;
6653 }
6654
6655 /* 设置short gi参数值 */
6656 if (protocol_mode == HI_WIFI_PHY_MODE_11BGN) {
6657 /* **************************************************************************
6658 抛事件到wal层处理
6659 ************************************************************************** */
6660 set_dscr_param->type = frame_type;
6661 set_dscr_param->function_index = MAC_SET_DSCR_PARAM_SHORTGI;
6662 set_dscr_param->l_value = (hi_s32)sgi_val;
6663 if (wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
6664 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_set_dscr_param_stru), (hi_u8 *)&write_msg, HI_FALSE,
6665 HI_NULL) != HI_SUCCESS) {
6666 oam_warning_log0(0, OAM_SF_ANY, "{wal_set_rate_sgi::set sgi return err!}");
6667 return HI_FAIL;
6668 }
6669 }
6670 return HI_SUCCESS;
6671 }
6672
wal_at_set_rate(oal_net_device_stru * netdev,const hi_char * pc_param)6673 static hi_u32 wal_at_set_rate(oal_net_device_stru *netdev, const hi_char *pc_param)
6674 {
6675 hi_char ac_arg[WAL_HIPRIV_CMD_NAME_MAX_LEN];
6676 hi_char *ac_arg_ptr = ac_arg;
6677 hi_u32 off_set = 0;
6678 mac_set_dscr_frame_type_enum_uint8 frame_type = MAC_SET_DSCR_TYPE_UCAST_DATA; /* 仅支持配置单播数据帧 */
6679 hi_s32 rate_value = -1;
6680 hi_s8 sgi_val = 0; /* short gi 控制 */
6681 hi_s32 protocol_mode = -1;
6682
6683 if (g_auto_rate_flag == 1) {
6684 oam_warning_log0(0, OAM_SF_ANY, "{wal_at_set_rate::auto rate is on!}");
6685 return HI_FAIL;
6686 }
6687
6688 if (wal_get_protocol_mode(netdev, &protocol_mode) != HI_SUCCESS) {
6689 return HI_FAIL;
6690 }
6691 #if (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION)
6692 pc_param++;
6693 #endif
6694 for (hi_u32 i = 0; i < 3; i++) { /* 3: 分别取出3个参数 */
6695 if (wal_hipriv_get_value(pc_param, ac_arg_ptr, &off_set, 1) != HI_SUCCESS) {
6696 return HI_FAIL;
6697 }
6698 pc_param += off_set;
6699 if (i == 0) {
6700 if (strcmp("0", ac_arg_ptr) == 0) {
6701 frame_type = MAC_SET_DSCR_TYPE_UCAST_DATA; /* 第一个参数取值0,帧类型为单播数据帧 */
6702 } else {
6703 return HI_FAIL;
6704 }
6705 } else if (i == 1) {
6706 rate_value = oal_strtol(ac_arg_ptr, HI_NULL, 0);
6707 if ((protocol_mode == HI_WIFI_PHY_MODE_11B) || (protocol_mode == HI_WIFI_PHY_MODE_11BG)) {
6708 break;
6709 }
6710 } else if (i == 2) { /* 2: 第三个参数 short gi */
6711 if ((strcmp("0", ac_arg_ptr) == 0) || (strcmp("1", ac_arg_ptr) == 0)) {
6712 sgi_val = (hi_s8)oal_atoi(ac_arg_ptr);
6713 } else {
6714 return HI_FAIL;
6715 }
6716 }
6717 }
6718 /* 判断命令长度是否有问题 */
6719 if (*pc_param != '\0') {
6720 oam_warning_log0(0, OAM_SF_ANY, "{wal_at_set_rate::cmd len error}");
6721 return HI_FAIL;
6722 }
6723 /* 设置rate 和short gi参数值 */
6724 if (wal_set_rate_sgi(netdev, frame_type, protocol_mode, rate_value, sgi_val) != HI_SUCCESS) {
6725 return HI_FAIL;
6726 }
6727 #ifdef AT_DEBUG_CMD_SUPPORT
6728 hi_at_printf("OK\r\n");
6729 #endif
6730 return HI_SUCCESS;
6731 }
6732
6733 /* ****************************************************************************
6734 功能描述 : 处理私有配置命令
6735 输入参数 : pc_cmd: 命令
6736 返 回 值 : 错误码
6737 **************************************************************************** */
wal_at_cmd(oal_net_device_stru * netdev,hi_char * cmd,hi_u32 cmd_type)6738 static hi_u32 wal_at_cmd(oal_net_device_stru *netdev, hi_char *cmd, hi_u32 cmd_type)
6739 {
6740 hi_u32 ret = HI_SUCCESS;
6741
6742 if (cmd_type == HISI_AT_AL_TX) {
6743 ret = wal_hipriv_tx_proc(netdev, cmd);
6744 } else if (cmd_type == HISI_AT_AL_RX) {
6745 ret = wal_hipriv_rx_proc(netdev, cmd);
6746 } else if (cmd_type == HISI_AT_RX_INFO) {
6747 ret = wal_hipriv_rx_fcs_info(netdev, cmd);
6748 } else if (cmd_type == HISI_AT_SET_COUNTRY) {
6749 ret = wal_at_setcountry(netdev, cmd);
6750 } else if (cmd_type == HISI_AT_GET_COUNTRY) {
6751 ret = wal_hipriv_getcountry(netdev, cmd);
6752 } else if (cmd_type == HISI_AT_SET_WLAN0_BW) {
6753 ret = wal_hipriv_set_bw(netdev, cmd);
6754 } else if (cmd_type == HISI_AT_SET_AP0_BW) {
6755 ret = wal_hipriv_set_bw(netdev, cmd);
6756 } else if (cmd_type == HISI_AT_SET_MESH0_BW) {
6757 ret = wal_hipriv_set_bw(netdev, cmd);
6758 #ifdef _PRE_WLAN_FEATURE_MESH
6759 } else if ((cmd_type == HISI_AT_GET_WLAN0_MESHINFO) || (cmd_type == HISI_AT_GET_MESH0_MESHINFO)) {
6760 ret = wal_hipriv_get_mesh_node_info(netdev, cmd);
6761 #endif
6762 } else if (cmd_type == HISI_AT_SET_TPC) {
6763 ret = wal_at_set_tpc(netdev, cmd);
6764 } else if (cmd_type == HISI_AT_SET_TRC) {
6765 ret = wal_at_set_trc(netdev, cmd);
6766 } else if (cmd_type == HISI_AT_SET_RATE) {
6767 ret = wal_at_set_rate(netdev, cmd);
6768 } else {
6769 return HI_FAIL;
6770 }
6771
6772 return ret;
6773 }
6774
6775 /* ****************************************************************************
6776 功能描述 : 根据业务vap类型查询网口
6777 输入参数 : vap_mode VAP类型
6778 返 回 值 :网口名字,HI_NULL表示查找失败
6779 **************************************************************************** */
wal_at_find_netif_by_mode(wlan_vap_mode_enum vap_mode)6780 hi_char *wal_at_find_netif_by_mode(wlan_vap_mode_enum vap_mode)
6781 {
6782 oal_net_device_stru *netdev = HI_NULL;
6783 mac_vap_stru *mac_vap = HI_NULL;
6784 mac_device_stru *mac_dev = mac_res_get_dev();
6785 hi_u8 vap_idx;
6786
6787 for (vap_idx = 0; vap_idx < mac_dev->vap_num; vap_idx++) {
6788 mac_vap = mac_vap_get_vap_stru(mac_dev->auc_vap_id[vap_idx]);
6789 if (mac_vap == HI_NULL) {
6790 continue;
6791 }
6792 if (mac_vap->vap_mode == vap_mode) {
6793 break;
6794 }
6795 }
6796 if (mac_vap == HI_NULL) {
6797 return HI_NULL;
6798 }
6799 netdev = hmac_vap_get_net_device(mac_vap->vap_id);
6800 if (netdev == HI_NULL) {
6801 oam_error_log1(0, 0, "wal_at_find_netif_by_mode cannot find netdevice,vap_mode[%d].", vap_mode);
6802 return HI_NULL;
6803 }
6804
6805 return netdev->name;
6806 }
6807
6808 /* ****************************************************************************
6809 功能描述 : hipriv命令入口
6810 输入参数 : *pc_buffer 命令参数
6811 count 命令长度
6812 返 回 值 : 字节数,0表示hipriv失败
6813 **************************************************************************** */
wal_at_entry(hi_char * buffer,hi_u32 cmd_type)6814 hi_u32 wal_at_entry(hi_char *buffer, hi_u32 cmd_type)
6815 {
6816 hi_u32 ret;
6817 oal_net_device_stru *netdev = HI_NULL;
6818 hi_char *dev_name = HI_NULL;
6819 hi_char net_hisilicon[] = "Hisilicon0";
6820 hi_char ac_arg[WAL_HIPRIV_CMD_NAME_MAX_LEN];
6821 hi_char *ac_arg_ptr = ac_arg;
6822 hi_u32 off_set = 0;
6823 hi_char *cmd_buff = buffer;
6824
6825 if ((cmd_type == HISI_AT_SET_COUNTRY) || (cmd_type == HISI_AT_GET_COUNTRY) || (cmd_type == HISI_AT_SET_TPC) ||
6826 (cmd_type == HISI_AT_SET_TRC)) {
6827 dev_name = net_hisilicon;
6828 } else if (cmd_type == HISI_AT_SET_AP0_BW) {
6829 dev_name = wal_at_find_netif_by_mode(WLAN_VAP_MODE_BSS_AP);
6830 } else if ((cmd_type == HISI_AT_SET_MESH0_BW) || (cmd_type == HISI_AT_GET_MESH0_MESHINFO)) {
6831 dev_name = wal_at_find_netif_by_mode(WLAN_VAP_MODE_MESH);
6832 } else if (cmd_type == HISI_AT_SET_RATE) {
6833 /* 第一个参数为 wlan0 或者 ap0 */
6834 if (wal_hipriv_get_value(cmd_buff, ac_arg_ptr, &off_set, 0) != HI_SUCCESS) {
6835 return HI_FAIL;
6836 }
6837 dev_name = ac_arg_ptr;
6838 cmd_buff += off_set;
6839 } else {
6840 dev_name = wal_at_find_netif_by_mode(WLAN_VAP_MODE_BSS_STA);
6841 }
6842
6843 /* 根据dev_name找到dev */
6844 netdev = oal_get_netdev_by_name(dev_name);
6845 if (netdev == HI_NULL) {
6846 oam_warning_log0(0, OAM_SF_ANY, "{wal_at_entry::get netdev by name return null!}");
6847 return HI_ERR_CODE_PTR_NULL;
6848 }
6849
6850 ret = wal_at_cmd(netdev, cmd_buff, cmd_type);
6851 return ret;
6852 }
6853
hi_wifi_at_start(hi_s32 argc,const hi_char * argv[],hi_u32 cmd_type)6854 hi_u32 hi_wifi_at_start(hi_s32 argc, const hi_char *argv[], hi_u32 cmd_type)
6855 {
6856 hi_u32 total_len = 0;
6857 hi_s32 index;
6858 hi_char temp_buffer[3]; /* 3 存储buffer */
6859 hi_char *buffer = NULL;
6860 hi_char *buffer_temp = NULL;
6861 hi_char *buffer_index = NULL;
6862
6863 if (argv == HI_NULL) {
6864 oam_error_log0(0, OAM_SF_ANY, "hi_wifi_at_start: argv null!");
6865 return HI_ERR_FAILURE;
6866 }
6867 /* HISI_AT_RX_INFO和HISI_AT_GET_COUNTRY场景 */
6868 if (argc == 0) {
6869 temp_buffer[0] = '\0';
6870 buffer_temp = temp_buffer;
6871 } else {
6872 for (index = 0; index < argc; index++) {
6873 total_len += strlen((hi_char *)argv[index]) + 1;
6874 }
6875
6876 buffer = oal_memalloc(total_len);
6877 if (buffer == NULL) {
6878 oam_error_log0(0, OAM_SF_ANY, "hi_wifi_at_start: malloc failed!");
6879 return HI_ERR_FAILURE;
6880 }
6881
6882 buffer_index = buffer;
6883 for (index = 0; index < argc; index++) {
6884 hi_u32 len = strlen((hi_char *)argv[index]);
6885 if (memcpy_s(buffer_index, len, argv[index], len) != EOK) {
6886 oam_error_log0(0, 0, "{hi_wifi_at_start::mem safe function err!}");
6887 oal_free(buffer);
6888 return HI_ERR_FAILURE;
6889 }
6890 buffer_index[len] = ' ';
6891 buffer_index += (len + 1);
6892 }
6893 buffer[total_len - 1] = '\0';
6894 buffer_temp = buffer;
6895 }
6896
6897 if (wal_at_entry(buffer_temp, cmd_type) != HI_SUCCESS) {
6898 if (buffer != NULL) {
6899 oal_free(buffer);
6900 }
6901 return HI_ERR_FAILURE;
6902 }
6903
6904 if (buffer != NULL) {
6905 oal_free(buffer);
6906 }
6907 return HI_ERR_SUCCESS;
6908 }
6909 #endif
6910
6911 #ifdef _PRE_WLAN_FEATURE_MFG_TEST
6912 /* ****************************************************************************
6913 功能描述 : 对各band做平均功率补偿,传递补偿事件给hmac
6914 输入参数 : [1]band_num band序号
6915 [2]offset 功率补偿值
6916 输出参数 : 无
6917 返 回 值 : 对各band做平均功率补偿,传递补偿事件给hmac 是否成功的结果
6918 **************************************************************************** */
wal_set_cal_band_power(hi_u8 band_num,hi_s32 offset)6919 hi_u32 wal_set_cal_band_power(hi_u8 band_num, hi_s32 offset)
6920 {
6921 wal_msg_write_stru write_msg;
6922 mac_cfg_cal_bpower *cal_bpower = HI_NULL;
6923
6924 oal_net_device_stru *netdev = oal_get_netdev_by_name(WLAN_CFG_VAP_NAME);
6925 if (netdev == HI_NULL) {
6926 oam_error_log0(0, 0, "wal_set_cal_band_power:Hisilicon0 device not found.");
6927 return HI_FAIL;
6928 }
6929 /* 低功耗状态下不允许执行 */
6930 if (is_under_ps()) {
6931 oam_warning_log0(0, 0, "under ps mode,can not exec cmd");
6932 return HI_FAIL;
6933 }
6934 #if (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION)
6935 oal_dev_put(netdev);
6936 #endif
6937 if ((offset > CAL_BAND_POWER_OFFSET_MAX) || (offset < CAL_BAND_POWER_OFFSET_MIN)) {
6938 return HI_FAIL;
6939 }
6940
6941 /* **************************************************************************
6942 抛事件到wal层处理
6943 ************************************************************************** */
6944 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_CAL_BAND_POWER, sizeof(mac_cfg_cal_bpower));
6945
6946 /* 解析并设置配置命令参数 */
6947 cal_bpower = (mac_cfg_cal_bpower *)(write_msg.auc_value);
6948 cal_bpower->band_num = band_num;
6949 cal_bpower->offset = offset;
6950
6951 hi_u32 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
6952 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_cal_bpower), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
6953 if (ret != HI_SUCCESS) {
6954 oam_warning_log1(0, OAM_SF_ANY, "{wal_set_cal_band_power:: wal_send_cfg_event return Err=%u}", ret);
6955 }
6956 return ret;
6957 }
6958
wal_hipriv_set_cal_band_power(oal_net_device_stru * netdev,hi_char * pc_param)6959 hi_u32 wal_hipriv_set_cal_band_power(oal_net_device_stru *netdev, hi_char *pc_param)
6960 {
6961 hi_unref_param(netdev);
6962 hi_u32 ret;
6963 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
6964 hi_u32 off_set;
6965 hi_u8 band_num;
6966 hi_s32 offset;
6967
6968 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
6969 if (ret != HI_SUCCESS) {
6970 oam_warning_log1(0, OAM_SF_CFG, "{wal_hipriv_set_cal_band_power::wal_get_cmd_one_arg return err_code %d!}\r\n",
6971 ret);
6972 return ret;
6973 }
6974 pc_param += off_set;
6975
6976 band_num = (hi_u8)oal_atoi(ac_name);
6977 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
6978 if (ret != HI_SUCCESS) {
6979 oam_warning_log1(0, OAM_SF_CFG, "{wal_hipriv_set_cal_band_power::wal_get_cmd_one_arg return err_code %d!}\r\n",
6980 ret);
6981 return ret;
6982 }
6983
6984 offset = (hi_s32)oal_atoi(ac_name);
6985 ret = wal_set_cal_band_power(band_num, offset);
6986 if (ret != HI_SUCCESS) {
6987 return HI_FAIL;
6988 }
6989 return HI_SUCCESS;
6990 }
6991
6992 /* ****************************************************************************
6993 功能描述 : 对不同协议场景、不用速率分别做功率补偿,传递补偿事件给hmac
6994 输入参数 : [1]protol 协议序号
6995 [2]rate 速率
6996 [3]val 补偿值
6997 输出参数 : 无
6998 返 回 值 : 对不同协议场景、不用速率分别做功率补偿,传递补偿事件给hmac 是否成功的结果
6999 **************************************************************************** */
wal_set_cal_rate_power(hi_u8 protol,hi_u8 rate,hi_s32 val)7000 hi_u32 wal_set_cal_rate_power(hi_u8 protol, hi_u8 rate, hi_s32 val)
7001 {
7002 wal_msg_write_stru write_msg;
7003 mac_cfg_cal_rpower *cal_rpower = HI_NULL;
7004
7005 oal_net_device_stru *netdev = oal_get_netdev_by_name(WLAN_CFG_VAP_NAME);
7006 if (netdev == HI_NULL) {
7007 oam_error_log0(0, 0, "wal_set_cal_rate_power:Hisilicon0 device not found.");
7008 return HI_FAIL;
7009 }
7010 #if (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION)
7011 oal_dev_put(netdev);
7012 #endif
7013
7014 /* 低功耗状态下不允许执行 */
7015 if (is_under_ps()) {
7016 oam_warning_log0(0, 0, "under ps mode,can not exec cmd");
7017 return HI_FAIL;
7018 }
7019 /* **************************************************************************
7020 抛事件到wal层处理
7021 ************************************************************************** */
7022 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_CAL_RATE_POWER, sizeof(mac_cfg_cal_rpower));
7023
7024 /* 解析并设置配置命令参数 */
7025 cal_rpower = (mac_cfg_cal_rpower *)(write_msg.auc_value);
7026 cal_rpower->protol = protol;
7027 cal_rpower->rate = rate;
7028 cal_rpower->val = val;
7029
7030 hi_u32 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE,
7031 WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(mac_cfg_cal_rpower), (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
7032 if (ret != HI_SUCCESS) {
7033 oam_warning_log1(0, OAM_SF_ANY, "{wal_set_cal_rate_power:: wal_send_cfg_event return Err=%u}", ret);
7034 }
7035 return ret;
7036 }
7037
7038 /* ****************************************************************************
7039 功能描述 : 对不同协议场景、不用速率分别做功率补偿,at命令进行补偿参数校验.供产测用
7040 输入参数 : [1]argc 命令参数个数
7041 [2]argv 参数指针
7042 输出参数 : 无
7043 返 回 值 : 对不同协议场景、不用速率分别做功率补偿,at命令进行补偿参数校验 是否成功的结果
7044 **************************************************************************** */
wal_hipriv_set_cal_rate_power(oal_net_device_stru * netdev,hi_char * pc_param)7045 hi_u32 wal_hipriv_set_cal_rate_power(oal_net_device_stru *netdev, hi_char *pc_param)
7046 {
7047 hi_unref_param(netdev);
7048 hi_u32 ret;
7049 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
7050 hi_u32 off_set;
7051 hi_u8 protol;
7052 hi_u8 rate;
7053 hi_s32 val;
7054 hi_u8 ofs = 0;
7055 hi_u8 protol_ofs = 0;
7056 hi_s32 low_limit = -8; /* -8:产测命令下限 */
7057 hi_s32 up_limit = 7; /* 7:产测命令上限 */
7058
7059 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
7060 if (ret != HI_SUCCESS) {
7061 oam_warning_log1(0, OAM_SF_CFG, "{wal_hipriv_set_cal_rate_power::wal_get_cmd_one_arg return err_code %d!}\r\n",
7062 ret);
7063 return ret;
7064 }
7065 pc_param += off_set;
7066 protol = (hi_u8)oal_atoi(ac_name);
7067 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
7068 if (ret != HI_SUCCESS) {
7069 oam_warning_log1(0, OAM_SF_CFG, "{wal_hipriv_set_cal_rate_power::wal_get_cmd_one_arg return err_code %d!}\r\n",
7070 ret);
7071 return ret;
7072 }
7073 pc_param += off_set;
7074 rate = (hi_u8)oal_atoi(ac_name);
7075 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
7076 if (ret != HI_SUCCESS) {
7077 oam_warning_log1(0, OAM_SF_CFG, "{wal_hipriv_set_cal_rate_power::wal_get_cmd_one_arg return err_code %d!}\r\n",
7078 ret);
7079 return ret;
7080 }
7081 pc_param += off_set;
7082 val = (hi_s32)oal_atoi(ac_name);
7083 if (protol > 2) { /* 范围0~2 */
7084 return HI_FAIL;
7085 }
7086
7087 if (((protol == HI_WIFI_MODE_11BGN) && (rate > 7 + ofs)) || /* 11n范围0~7 */
7088 ((protol == HI_WIFI_MODE_11BG) && (rate > 7 + ofs)) || /* 11g范围0~7 */
7089 ((protol == HI_WIFI_MODE_11B) && (rate > 3 + ofs))) { /* 11b范围0~3 */
7090 return HI_ERR_FAILURE;
7091 }
7092
7093 if ((val < low_limit) || (val > up_limit)) {
7094 return HI_FAIL;
7095 }
7096
7097 protol += protol_ofs; /* 协议增加偏移区分是研发调试还是产测命令 */
7098 ret = wal_set_cal_rate_power(protol, rate, val);
7099 if (ret != HI_SUCCESS) {
7100 return HI_FAIL;
7101 }
7102 return HI_SUCCESS;
7103 }
7104
7105 /* ****************************************************************************
7106 功能描述 : 对不同协议场景、不用速率分别做功率补偿,供客户研发调试用,不写efuse
7107 输入参数 : [1]argc 命令参数个数
7108 [2]argv 参数指针
7109 输出参数 : 无
7110 返 回 值 : 对不同协议场景、不用速率分别做功率补偿,at命令进行补偿参数校验 是否成功的结果
7111 **************************************************************************** */
wal_hipriv_set_rate_power(oal_net_device_stru * netdev,hi_char * pc_param)7112 hi_u32 wal_hipriv_set_rate_power(oal_net_device_stru *netdev, hi_char *pc_param)
7113 {
7114 hi_unref_param(netdev);
7115 hi_u32 ret;
7116 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
7117 hi_u32 off_set;
7118 hi_u8 protol;
7119 hi_u8 rate;
7120 hi_s32 val;
7121 hi_u8 ofs = 1;
7122 hi_u8 protol_ofs = 10; /* 10:本命令的偏移,以便与产测的at_hi_wifi_set_rate_power做区分 */
7123 hi_s32 low_limit = -100; /* -100:调试命令下限 */
7124 hi_s32 up_limit = 40; /* 40:调试命令上限 */
7125
7126 /* 低功耗状态下不允许执行 */
7127 if (is_under_ps()) {
7128 oam_warning_log0(0, 0, "under ps mode,can not exec cmd");
7129 return HI_FAIL;
7130 }
7131 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
7132 if (ret != HI_SUCCESS) {
7133 oam_warning_log1(0, OAM_SF_CFG, "{wal_hipriv_set_rate_power::wal_get_cmd_one_arg return err_code %d!}\r\n",
7134 ret);
7135 return ret;
7136 }
7137 pc_param += off_set;
7138 protol = (hi_u8)oal_atoi(ac_name);
7139 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
7140 if (ret != HI_SUCCESS) {
7141 oam_warning_log1(0, OAM_SF_CFG, "{wal_hipriv_set_rate_power::wal_get_cmd_one_arg return err_code %d!}\r\n",
7142 ret);
7143 return ret;
7144 }
7145 pc_param += off_set;
7146 rate = (hi_u8)oal_atoi(ac_name);
7147 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
7148 if (ret != HI_SUCCESS) {
7149 oam_warning_log1(0, OAM_SF_CFG, "{wal_hipriv_set_rate_power::wal_get_cmd_one_arg return err_code %d!}\r\n",
7150 ret);
7151 return ret;
7152 }
7153 pc_param += off_set;
7154 val = (hi_s32)oal_atoi(ac_name);
7155 if (protol > 2) { /* 范围0~2 */
7156 return HI_FAIL;
7157 }
7158
7159 if (((protol == HI_WIFI_MODE_11BGN) && (rate > 7 + ofs)) || /* 11n范围0~7 */
7160 ((protol == HI_WIFI_MODE_11BG) && (rate > 7 + ofs)) || /* 11g范围0~7 */
7161 ((protol == HI_WIFI_MODE_11B) && (rate > 3 + ofs))) { /* 11b范围0~3 */
7162 return HI_ERR_FAILURE;
7163 }
7164
7165 if ((val < low_limit) || (val > up_limit)) {
7166 return HI_FAIL;
7167 }
7168
7169 protol += protol_ofs; /* 协议增加偏移区分是研发调试还是产测命令 */
7170 ret = wal_set_cal_rate_power(protol, rate, val);
7171 if (ret != HI_SUCCESS) {
7172 return HI_FAIL;
7173 }
7174 return HI_SUCCESS;
7175 }
7176
7177 /* ****************************************************************************
7178 功能描述 : 进行常温频偏功率补偿,传递补偿事件给hmac
7179 输入参数 : [1]freq_offset 补偿值
7180 输出参数 : 无
7181 返 回 值 : 进行常温频偏功率补偿,传递补偿事件给hmac 是否成功的结果
7182 **************************************************************************** */
wal_set_cal_freq(hi_s32 freq_offset)7183 hi_u32 wal_set_cal_freq(hi_s32 freq_offset)
7184 {
7185 wal_msg_write_stru write_msg;
7186 hi_s32 *param = HI_NULL;
7187
7188 /* 低功耗状态下不允许执行 */
7189 if (is_under_ps()) {
7190 oam_warning_log0(0, 0, "under ps mode,can not exec cmd");
7191 return HI_FAIL;
7192 }
7193 oal_net_device_stru *netdev = oal_get_netdev_by_name(WLAN_CFG_VAP_NAME);
7194 if (netdev == HI_NULL) {
7195 oam_error_log0(0, 0, "wal_set_cal_freq:Hisilicon0 device not found.");
7196 return HI_FAIL;
7197 }
7198 #if (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION)
7199 oal_dev_put(netdev);
7200 #endif
7201 if ((freq_offset > CAL_FREP_OFFSET_MAX) || (freq_offset < CAL_FREP_OFFSET_MIN)) {
7202 return HI_FAIL;
7203 }
7204
7205 /* **************************************************************************
7206 抛事件到wal层处理
7207 ************************************************************************** */
7208 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_CAL_FREQ, sizeof(hi_s32));
7209 /* 解析并设置配置命令参数 */
7210 param = (hi_s32 *)(write_msg.auc_value);
7211 *param = freq_offset;
7212
7213 hi_u32 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_s32),
7214 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
7215 if (ret != HI_SUCCESS) {
7216 oam_warning_log1(0, OAM_SF_ANY, "{wal_set_cal_freq:: wal_send_cfg_event return Err=%u}", ret);
7217 }
7218 return ret;
7219 }
7220
wal_hipriv_set_cal_freq_power(oal_net_device_stru * netdev,hi_char * pc_param)7221 hi_u32 wal_hipriv_set_cal_freq_power(oal_net_device_stru *netdev, hi_char *pc_param)
7222 {
7223 hi_unref_param(netdev);
7224 hi_u32 ret;
7225 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
7226 hi_s32 freq_offset;
7227 hi_u32 off_set;
7228
7229 /* 低功耗状态下不允许执行 */
7230 if (is_under_ps()) {
7231 oam_warning_log0(0, 0, "under ps mode,can not exec cmd");
7232 return HI_FAIL;
7233 }
7234 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
7235 if (ret != HI_SUCCESS) {
7236 oam_warning_log1(0, OAM_SF_CFG, "{wal_hipriv_set_cal_freq_power::wal_get_cmd_one_arg return err_code %d!}\r\n",
7237 ret);
7238 return ret;
7239 }
7240
7241 freq_offset = (hi_s32)oal_atoi(ac_name);
7242 ret = wal_set_cal_freq(freq_offset);
7243 if (ret != HI_SUCCESS) {
7244 return HI_FAIL;
7245 }
7246 return HI_SUCCESS;
7247 }
7248
7249 /* ****************************************************************************
7250 功能描述 : 读取efuse的MAC
7251 返 回 值 : 错误码
7252 **************************************************************************** */
wal_get_efuse_mac(hi_void)7253 hi_u32 wal_get_efuse_mac(hi_void)
7254 {
7255 oal_net_device_stru *netdev;
7256 wal_msg_write_stru write_msg = {0};
7257
7258 netdev = oal_get_netdev_by_name(WLAN_CFG_VAP_NAME);
7259 if (netdev == HI_NULL) {
7260 oam_error_log0(0, 0, "wal_get_efuse_mac::sta device not found.");
7261 return HI_FAIL;
7262 }
7263 #if (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION)
7264 oal_dev_put(netdev);
7265 #endif
7266 /* **************************************************************************
7267 抛事件到wal层处理
7268 ************************************************************************** */
7269 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_GET_EFUSE_MAC, sizeof(hi_s32));
7270
7271 hi_u32 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_s32),
7272 (hi_u8 *)(&write_msg), HI_FALSE, HI_NULL);
7273 if (oal_unlikely(ret != HI_SUCCESS)) {
7274 oam_warning_log1(0, OAM_SF_ANY, "{wal_get_efuse_mac::return err code [%u]!}\r\n", ret);
7275 }
7276
7277 return ret;
7278 }
7279
wal_hipriv_get_customer_mac(oal_net_device_stru * netdev,hi_char * pc_param)7280 hi_u32 wal_hipriv_get_customer_mac(oal_net_device_stru *netdev, hi_char *pc_param)
7281 {
7282 hi_unref_param(pc_param);
7283 hi_unref_param(netdev);
7284 hi_u32 ret;
7285 hi_uchar mac_addr[WLAN_MAC_ADDR_LEN] = {0};
7286
7287 /* 优先检查返回wifi_cfg中的mac地址 */
7288 if (cfg_get_mac(mac_addr, WLAN_MAC_ADDR_LEN) && (wal_macaddr_check(&mac_addr[0]) == HI_SUCCESS)) {
7289 printk("+EFUSEMAC:XX:XX:XX:%02x:%02x:%02x\r\nOK\r\n", mac_addr[3], mac_addr[4], mac_addr[5]); /* 0:1:2:3:4:5 */
7290 return HI_SUCCESS;
7291 }
7292 /* 从efuse读 */
7293 ret = wal_get_efuse_mac();
7294 if (ret != HI_SUCCESS) {
7295 return HI_FAIL;
7296 }
7297 return HI_SUCCESS;
7298 }
7299
7300 /* ****************************************************************************
7301 功能描述 : 将MAC写入efuse
7302 返 回 值 : 错误码
7303 **************************************************************************** */
wal_set_efuse_mac(const hi_char * mac_addr,hi_u32 type)7304 hi_u32 wal_set_efuse_mac(const hi_char *mac_addr, hi_u32 type)
7305 {
7306 hi_unref_param(type);
7307 wal_msg_write_stru write_msg;
7308 oal_net_device_stru *netdev;
7309
7310 netdev = oal_get_netdev_by_name(WLAN_CFG_VAP_NAME);
7311 if (netdev == HI_NULL) {
7312 oam_error_log0(0, 0, "wal_set_efuse_mac::sta device not found.");
7313 return HI_FAIL;
7314 }
7315 #if (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION)
7316 oal_dev_put(netdev);
7317 #endif
7318 if (mac_addr == HI_NULL) {
7319 oam_error_log0(0, OAM_SF_ANY, "wal_set_efuse_mac:: macaddr is NULL!");
7320 return HI_FAIL;
7321 }
7322 /* 设置配置命令参数 */
7323 if (memcpy_s(write_msg.auc_value, ETHER_ADDR_LEN, mac_addr, ETHER_ADDR_LEN) != EOK) {
7324 oam_error_log0(0, 0, "{wal_set_efuse_mac::mem safe function err!}");
7325 return HI_FAIL;
7326 }
7327 /* **************************************************************************
7328 抛事件到wal层处理
7329 ************************************************************************** */
7330 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_EFUSE_MAC, ETHER_ADDR_LEN);
7331
7332 hi_u32 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + ETHER_ADDR_LEN,
7333 (hi_u8 *)(&write_msg), HI_FALSE, HI_NULL);
7334 if (oal_unlikely(ret != HI_SUCCESS)) {
7335 oam_warning_log1(0, OAM_SF_ANY, "{wal_set_efuse_mac::return err code [%u]!}\r\n", ret);
7336 }
7337 return ret;
7338 }
7339
wal_hipriv_set_customer_mac(oal_net_device_stru * netdev,hi_char * pc_param)7340 hi_u32 wal_hipriv_set_customer_mac(oal_net_device_stru *netdev, hi_char *pc_param)
7341 {
7342 hi_unref_param(netdev);
7343 hi_u32 ret;
7344 hi_uchar mac_addr[WLAN_MAC_ADDR_LEN];
7345 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
7346 hi_char mac_str[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
7347 hi_u32 off_set;
7348 hi_u32 type = 0;
7349
7350 /* 获取mac地址 */
7351 ret = wal_get_cmd_one_arg(pc_param, mac_str, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
7352 if (ret != HI_SUCCESS) {
7353 oam_warning_log1(0, OAM_SF_ANY, "{wal_hipriv_set_customer_mac::wal_get_cmd_one_arg return err_code [%d]!}\r\n",
7354 ret);
7355 return ret;
7356 }
7357 pc_param += off_set;
7358 if (!parse_mac_addr((hi_u8 *)mac_str, strlen((const hi_char *)mac_str), mac_addr, WLAN_MAC_ADDR_LEN) ||
7359 (wal_macaddr_check(mac_addr) != HI_SUCCESS)) {
7360 printk("Mac addr is invalid.\r\n");
7361 return HI_FAIL;
7362 };
7363 hi_u8 mac_str_len = off_set;
7364 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
7365 if (ret == HI_SUCCESS) {
7366 type = (hi_u32)oal_atoi(ac_name);
7367 }
7368 pc_param += off_set;
7369 /* 配置为写入到wifi_cfg */
7370 if (type == 1) {
7371 if (firmware_write_cfg((hi_u8 *)WIFI_CFG_MAC, (hi_u8 *)mac_str, mac_str_len - 1) != HI_SUCCESS) { /* 减1 */
7372 oam_error_log0(0, OAM_SF_ANY, "wal_hipriv_set_customer_mac:: save to wifi_cfg failed!");
7373 return HI_FAIL;
7374 }
7375 printk("OK\r\n");
7376 return HI_SUCCESS;
7377 } else if (type == 0) { /* 配置为写入到efuse */
7378 ret = wal_set_efuse_mac((hi_char *)mac_addr, type);
7379 if (ret != HI_SUCCESS) {
7380 return HI_FAIL;
7381 }
7382 } else {
7383 oam_error_log0(0, OAM_SF_ANY, "wal_hipriv_set_customer_mac:: cmd para invalid!");
7384 return HI_FAIL;
7385 }
7386
7387 return HI_SUCCESS;
7388 }
7389
7390 /* ****************************************************************************
7391 功能描述 : 将校准值写入efuse
7392 返 回 值 : 错误码
7393 **************************************************************************** */
wal_set_dataefuse(hi_u32 type)7394 hi_u32 wal_set_dataefuse(hi_u32 type)
7395 {
7396 oal_net_device_stru *netdev;
7397 wal_msg_write_stru write_msg = {0};
7398 hi_s32 *param = HI_NULL;
7399
7400 netdev = oal_get_netdev_by_name(WLAN_CFG_VAP_NAME);
7401 if (netdev == HI_NULL) {
7402 oam_error_log0(0, 0, "wal_set_dataefuse::sta device not found.");
7403 return HI_FAIL;
7404 }
7405 #if (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION)
7406 oal_dev_put(netdev);
7407 #endif
7408 /* 解析并设置配置命令参数 */
7409 param = (hi_s32 *)(write_msg.auc_value);
7410 *param = type;
7411
7412 /* **************************************************************************
7413 抛事件到wal层处理
7414 ************************************************************************** */
7415 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_DATAEFUSE, sizeof(hi_s32));
7416
7417 hi_u32 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_s32),
7418 (hi_u8 *)(&write_msg), HI_FALSE, HI_NULL);
7419 if (oal_unlikely(ret != HI_SUCCESS)) {
7420 oam_warning_log1(0, OAM_SF_ANY, "{hi_wifi_set_dataefuse::return err code [%u]!}\r\n", ret);
7421 }
7422 return ret;
7423 }
7424
wal_hipriv_set_dataefuse(oal_net_device_stru * netdev,hi_char * pc_param)7425 hi_u32 wal_hipriv_set_dataefuse(oal_net_device_stru *netdev, hi_char *pc_param)
7426 {
7427 hi_unref_param(netdev);
7428 hi_unref_param(pc_param);
7429 hi_u32 ret;
7430 hi_u32 off_set;
7431 hi_u32 type = 0;
7432 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
7433
7434 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
7435 if (ret == HI_SUCCESS) {
7436 type = (hi_u32)oal_atoi(ac_name);
7437 }
7438
7439 ret = wal_set_dataefuse(type);
7440 if (ret != HI_SUCCESS) {
7441 return HI_FAIL;
7442 }
7443 return HI_SUCCESS;
7444 }
7445
7446 /* ****************************************************************************
7447 功能描述 : 读取校准数据
7448 返 回 值 : 错误码
7449 **************************************************************************** */
wal_get_cal_data(hi_void)7450 hi_u32 wal_get_cal_data(hi_void)
7451 {
7452 oal_net_device_stru *netdev;
7453 wal_msg_write_stru write_msg = {0};
7454 hi_u32 ret;
7455 netdev = oal_get_netdev_by_name(WLAN_CFG_VAP_NAME);
7456 if (netdev == HI_NULL) {
7457 oam_error_log0(0, 0, "wal_get_cal_data::sta device not found.");
7458 return HI_FAIL;
7459 }
7460 #if (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION)
7461 oal_dev_put(netdev);
7462 #endif
7463 /* **************************************************************************
7464 抛事件到wal层处理
7465 ************************************************************************** */
7466 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_GET_CAL_DATA, sizeof(hi_s32));
7467 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_s32),
7468 (hi_u8 *)(&write_msg), HI_FALSE, HI_NULL);
7469 if (oal_unlikely(ret != HI_SUCCESS)) {
7470 oam_warning_log1(0, OAM_SF_ANY, "{wal_get_cal_data::return err code [%u]!}\r\n", ret);
7471 return ret;
7472 }
7473 return HI_SUCCESS;
7474 }
7475
wal_hipriv_get_cal_data(oal_net_device_stru * netdev,hi_char * pc_param)7476 hi_u32 wal_hipriv_get_cal_data(oal_net_device_stru *netdev, hi_char *pc_param)
7477 {
7478 hi_unref_param(netdev);
7479 hi_u32 ret;
7480
7481 /* 判断命令长度是否有问题 */
7482 if (*pc_param != '\0') {
7483 oam_warning_log0(0, OAM_SF_ANY, "{wal_hipriv_get_cal_data::cmd len error}");
7484 return HI_FAIL;
7485 }
7486 ret = wal_get_cal_data();
7487 if (ret != HI_SUCCESS) {
7488 return HI_FAIL;
7489 }
7490 return HI_SUCCESS;
7491 }
7492 #endif /* _PRE_WLAN_FEATURE_MFG_TEST */
7493
hi_hipriv_set_tx_pwr_offset(oal_net_device_stru * netdev,hi_char * pc_param)7494 hi_u32 hi_hipriv_set_tx_pwr_offset(oal_net_device_stru *netdev, hi_char *pc_param)
7495 {
7496 wal_msg_write_stru write_msg = {0};
7497 hi_s32 *param = HI_NULL;
7498 hi_u32 ret;
7499 hi_s16 offset;
7500 hi_char ac_name[WAL_HIPRIV_CMD_NAME_MAX_LEN] = {0};
7501 hi_u32 off_set;
7502 if (netdev == HI_NULL) {
7503 oam_error_log0(0, 0, "hi_wifi_set_tx_pwr_offset:: device not found.");
7504 return HI_FAIL;
7505 }
7506 /* 低功耗状态下不允许执行 */
7507 if (is_under_ps()) {
7508 oam_warning_log0(0, 0, "under ps mode,can not exec cmd");
7509 return HI_FAIL;
7510 }
7511 #if (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION)
7512 oal_dev_put(netdev);
7513 #endif
7514 ret = wal_get_cmd_one_arg(pc_param, ac_name, WAL_HIPRIV_CMD_NAME_MAX_LEN, &off_set);
7515 if (ret != HI_SUCCESS) {
7516 oam_warning_log1(0, OAM_SF_CFG, "{hi_hipriv_set_tx_pwr_offset::wal_get_cmd_one_arg return err_code %d!}\r\n",
7517 ret);
7518 return ret;
7519 }
7520
7521 #if (_PRE_OS_VERSION_LITEOS == _PRE_OS_VERSION)
7522 offset = (hi_s16)atoi(ac_name);
7523 #elif (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION)
7524 offset = (hi_s16)oal_atoi(ac_name);
7525 #endif
7526 offset = (offset > 30) ? 30 : offset; /* 30:上限 */
7527 offset = (offset < -150) ? -150 : offset; /* -150:下限 */
7528 /* 解析并设置配置命令参数 */
7529 param = (hi_s32 *)(write_msg.auc_value);
7530 *param = offset;
7531
7532 /* **************************************************************************
7533 抛事件到wal层处理
7534 ************************************************************************** */
7535 wal_write_msg_hdr_init(&write_msg, WLAN_CFGID_SET_TX_PWR_OFFSET, sizeof(hi_s32));
7536 ret = wal_send_cfg_event(netdev, WAL_MSG_TYPE_WRITE, WAL_MSG_WRITE_MSG_HDR_LENGTH + sizeof(hi_s32),
7537 (hi_u8 *)&write_msg, HI_FALSE, HI_NULL);
7538 if (oal_unlikely(ret != HI_SUCCESS)) {
7539 oam_warning_log1(0, OAM_SF_ANY, "{hi_wifi_set_tx_pwr_offset::return err code [%u]!}\r\n", ret);
7540 return ret;
7541 }
7542 return HI_SUCCESS;
7543 }
7544
7545 #endif /* #ifdef _PRE_WLAN_FEATURE_HIPRIV */
7546
7547 #ifdef __cplusplus
7548 #if __cplusplus
7549 }
7550 #endif
7551 #endif
7552