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 #ifndef __MAC_VAP_H__
20 #define __MAC_VAP_H__
21
22 /* ****************************************************************************
23 1 其他头文件包含
24 **************************************************************************** */
25 #include "oal_ext_if.h"
26 #include "oam_ext_if.h"
27 #include "mac_user.h"
28 #include "mac_cfg.h"
29 #include "mac_regdomain.h"
30
31 #ifdef __cplusplus
32 #if __cplusplus
33 extern "C" {
34 #endif
35 #endif
36
37 /* ****************************************************************************
38 2 宏定义
39 **************************************************************************** */
40 #define MAC_VAP_RES_ID_INVALID 0xFF /* 非法的vap res id值 */
41 #define MAC_NUM_DR_802_11A 8 /* 11A 5g模式时的数据速率(DR)个数 */
42 #define MAC_NUM_BR_802_11A 3 /* 11A 5g模式时的基本速率(BR)个数 */
43 #define MAC_NUM_NBR_802_11A 5 /* 11A 5g模式时的非基本速率(NBR)个数 */
44
45 #define MAC_NUM_DR_802_11B 4 /* 11B 2.4G模式时的数据速率(DR)个数 */
46 #define MAC_NUM_BR_802_11B 2 /* 11B 2.4G模式时的数据速率(BR)个数 */
47 #define MAC_NUM_NBR_802_11B 2 /* 11B 2.4G模式时的数据速率(NBR)个数 */
48
49 #define MAC_NUM_DR_802_11G 8 /* 11G 2.4G模式时的数据速率(DR)个数 */
50 #define MAC_NUM_BR_802_11G 3 /* 11G 2.4G模式时的基本速率(BR)个数 */
51 #define MAC_NUM_NBR_802_11G 5 /* 11G 2.4G模式时的非基本速率(NBR)个数 */
52
53 #define MAC_NUM_DR_802_11G_MIXED 12 /* 11G 混合模式时的数据速率(DR)个数 */
54 #define MAC_NUM_BR_802_11G_MIXED_ONE 4 /* 11G 混合1模式时的基本速率(BR)个数 */
55 #define MAC_NUM_NBR_802_11G_MIXED_ONE 8 /* 11G 混合1模式时的非基本速率(NBR)个数 */
56
57 #define MAC_NUM_BR_802_11G_MIXED_TWO 7 /* 11G 混合2模式时的基本速率(BR)个数 */
58 #define MAC_NUM_NBR_802_11G_MIXED_TWO 5 /* 11G 混合2模式时的非基本速率(NBR)个数 */
59
60 #define MAC_MAX_RATE_SINGLE_NSS_20M_11N 0 /* 1个空间流20MHz的最大速率 */
61 #define MAC_MAX_RATE_SINGLE_NSS_40M_11N 0 /* 1个空间流40MHz的最大速率 */
62 #define MAC_MAX_RATE_DOUBLE_NSS_20M_11N 0 /* 1个空间流80MHz的最大速率 */
63 #define MAC_MAX_RATE_DOUBLE_NSS_40M_11N 0 /* 2个空间流20MHz的最大速率 */
64 /* 11AC MCS相关的内容 */
65 #define MAC_MAX_SUP_MCS7_11AC_EACH_NSS 0 /* 11AC各空间流支持的最大MCS序号,支持0-7 */
66 #define MAC_MAX_SUP_MCS8_11AC_EACH_NSS 1 /* 11AC各空间流支持的最大MCS序号,支持0-8 */
67 #define MAC_MAX_SUP_MCS9_11AC_EACH_NSS 2 /* 11AC各空间流支持的最大MCS序号,支持0-9 */
68 #define MAC_MAX_UNSUP_MCS_11AC_EACH_NSS 3 /* 11AC各空间流支持的最大MCS序号,不支持n个空间流 */
69
70 #define MAC_MAX_RATE_SINGLE_NSS_20M_11AC 86 /* 1个空间流20MHz的最大速率 */
71 #define MAC_MAX_RATE_SINGLE_NSS_40M_11AC 200 /* 1个空间流40MHz的最大速率 */
72 #define MAC_MAX_RATE_SINGLE_NSS_80M_11AC 433 /* 1个空间流80MHz的最大速率 */
73 #define MAC_MAX_RATE_DOUBLE_NSS_20M_11AC 173 /* 2个空间流20MHz的最大速率 */
74 #define MAC_MAX_RATE_DOUBLE_NSS_40M_11AC 400 /* 2个空间流40MHz的最大速率 */
75 #define MAC_MAX_RATE_DOUBLE_NSS_80M_11AC 866 /* 2个空间流80MHz的最大速率 */
76
77 #define MAC_MESH_MAX_ID 64 /* MBR+MR节点最大ID号 */
78 #define MAC_MESH_INVALID_ID 0 /* Mesh MBR/MR节点无效ID号 */
79 #define MAC_MESH_DEFAULT_ID 255 /* Mesh MBR节点默认ID号,分配默认id进行tbtt计算后的值 */
80 #define MAC_MESH_MAX_MBR_NUM 5 /* MBR节点最大数目 */
81
82 #define MAC_VAP_USER_HASH_MAX_VALUE 4 /* 31H最大支持8个用户 数量少HASH桶缩减1倍 */
83 /* HASH计算取MAC最后两个相加 降低复杂度 */
84 #define mac_calculate_hash_value(_puc_mac_addr) \
85 (((_puc_mac_addr)[4] + (_puc_mac_addr)[5]) & (MAC_VAP_USER_HASH_MAX_VALUE - 1))
86
87 #define is_ap(_pst_mac_vap) ((WLAN_VAP_MODE_BSS_AP == (_pst_mac_vap)->vap_mode) || \
88 ((_pst_mac_vap)->vap_mode == WLAN_VAP_MODE_MESH))
89
90 #define is_sta(_pst_mac_vap) (WLAN_VAP_MODE_BSS_STA == (_pst_mac_vap)->vap_mode)
91 #define is_p2p_dev(_pst_mac_vap) (WLAN_P2P_DEV_MODE == (_pst_mac_vap)->p2p_mode)
92 #define is_p2p_go(_pst_mac_vap) (WLAN_P2P_GO_MODE == (_pst_mac_vap)->p2p_mode)
93 #define is_p2p_cl(_pst_mac_vap) (WLAN_P2P_CL_MODE == (_pst_mac_vap)->p2p_mode)
94 #define is_legacy_vap(_pst_mac_vap) (WLAN_LEGACY_VAP_MODE == (_pst_mac_vap)->p2p_mode)
95
96 #define MAC_SEND_TWO_DEAUTH_FLAG 0xf000
97
98 #ifdef _PRE_WLAN_FEATURE_WOW
99 #define MAC_SSID_WAKEUP_TIME (50 * 60) /* 5 分钟,单位100ms */
100 #endif
101
102 #ifdef _PRE_WLAN_FEATURE_MESH_ROM
103 #define MAC_MAX_REPORT_TIME 6 /* 状态为TX_SUCC时的连续上报的个数阈值 */
104 #define MAC_MAX_REPORT_TX_CNT 10 /* 需要上报的发送次数阈值,初始值同DMAC_MAX_SW_RETRIES */
105 #endif
106
107 #ifdef _PRE_WLAN_FEATURE_WOW_ROM
108 #define WOW_NETPATTERN_MAX_NUM 4
109 #define WOW_NETPATTERN_MAX_LEN 64
110 #endif
111
112 #define H2D_SYNC_MASK_BARK_PREAMBLE (1<<1)
113 #define H2D_SYNC_MASK_MIB (1<<2)
114 #define H2D_SYNC_MASK_PROT (1<<3)
115
116 /* ****************************************************************************
117 3 枚举定义
118 **************************************************************************** */
119 /* VAP状态机,AP STA共用一个状态枚举 */
120 typedef enum {
121 /* ap sta公共状态 */
122 MAC_VAP_STATE_INIT = 0,
123 MAC_VAP_STATE_UP = 1, /* VAP UP */
124 MAC_VAP_STATE_PAUSE = 2, /* pause , for ap &sta */
125 /* ap 独有状态 */
126 MAC_VAP_STATE_AP_WAIT_START = 3,
127 /* sta独有状态 */
128 MAC_VAP_STATE_STA_FAKE_UP = 4,
129 MAC_VAP_STATE_STA_WAIT_SCAN = 5,
130 MAC_VAP_STATE_STA_SCAN_COMP = 6,
131 MAC_VAP_STATE_STA_JOIN_COMP = 7,
132 MAC_VAP_STATE_STA_WAIT_AUTH_SEQ2 = 8,
133 MAC_VAP_STATE_STA_WAIT_AUTH_SEQ4 = 9,
134 MAC_VAP_STATE_STA_AUTH_COMP = 10,
135 MAC_VAP_STATE_STA_WAIT_ASOC = 11,
136 MAC_VAP_STATE_STA_OBSS_SCAN = 12,
137 MAC_VAP_STATE_STA_BG_SCAN = 13,
138 MAC_VAP_STATE_STA_LISTEN = 14, /* p2p0 监听 */
139 MAC_VAP_STATE_BUTT,
140 } mac_vap_state_enum;
141 typedef hi_u8 mac_vap_state_enum_uint8;
142
143 /* 芯片验证,控制帧/管理帧类型 */
144 typedef enum {
145 MAC_TEST_MGMT_BCST = 0, /* 非beacon广播管理帧 */
146 MAC_TEST_MGMT_MCST = 1, /* 非beacon组播管理帧 */
147 MAC_TEST_ATIM_UCST = 2, /* 单播ATIM帧 */
148 MAC_TEST_UCST = 3, /* 单播管理帧 */
149 MAC_TEST_CTL_BCST = 4, /* 广播控制帧 */
150 MAC_TEST_CTL_MCST = 5, /* 组播控制帧 */
151 MAC_TEST_CTL_UCST = 6, /* 单播控制帧 */
152 MAC_TEST_ACK_UCST = 7, /* ACK控制帧 */
153 MAC_TEST_CTS_UCST = 8, /* CTS控制帧 */
154 MAC_TEST_RTS_UCST = 9, /* RTS控制帧 */
155 MAC_TEST_BA_UCST = 10, /* BA控制帧 */
156 MAC_TEST_CF_END_UCST = 11, /* CF-End控制帧 */
157 MAC_TEST_TA_RA_EUQAL = 12, /* RA,TA相同帧 */
158 MAC_TEST_MAX_TYPE_NUM
159 } mac_test_frame_type;
160 typedef hi_u8 mac_test_frame_type_enum_uint8;
161
162 /* 设置发送描述符参数枚举 */
163 typedef enum {
164 MAC_SET_DSCR_PARAM_DATA0, /* data0:对应发送描述符14行,32bit 10进制值 */
165 MAC_SET_DSCR_PARAM_DATA1, /* data1:对应发送描述符19行 */
166 MAC_SET_DSCR_PARAM_DATA2, /* data2:对应发送描述符20行 */
167 MAC_SET_DSCR_PARAM_DATA3, /* data3:对应发送描述符21行 */
168 MAC_SET_DSCR_PARAM_RATE, /* 配置11b/g/n速率 */
169 MAC_SET_DSCR_PARAM_POWER, /* tx power: 对应发送描述符22行 */
170 MAC_SET_DSCR_PARAM_SHORTGI, /* 配置short GI或long GI */
171
172 MAC_SET_DSCR_PARAM_BUTT
173 } mac_set_dscr_param_enum;
174 typedef hi_u8 mac_set_dscr_param_enum_uint8;
175
176 typedef enum {
177 /* 业务调度算法配置参数,请添加到对应的START和END之间 */
178 MAC_ALG_CFG_SCHEDULE_START,
179
180 MAC_ALG_CFG_SCHEDULE_VI_CTRL_ENA,
181 MAC_ALG_CFG_SCHEDULE_BEBK_MIN_BW_ENA,
182 MAC_ALG_CFG_SCHEDULE_MVAP_SCH_ENA,
183 MAC_ALG_CFG_FLOWCTRL_ENABLE_FLAG,
184 MAC_ALG_CFG_SCHEDULE_VI_SCH_LIMIT,
185 MAC_ALG_CFG_SCHEDULE_VO_SCH_LIMIT,
186 MAC_ALG_CFG_SCHEDULE_VI_DROP_LIMIT,
187 MAC_ALG_CFG_SCHEDULE_VI_MSDU_LIFE_MS,
188 MAC_ALG_CFG_SCHEDULE_VO_MSDU_LIFE_MS,
189 MAC_ALG_CFG_SCHEDULE_BE_MSDU_LIFE_MS,
190 MAC_ALG_CFG_SCHEDULE_BK_MSDU_LIFE_MS,
191 MAC_ALG_CFG_SCHEDULE_VI_LOW_DELAY_MS,
192 MAC_ALG_CFG_SCHEDULE_VI_HIGH_DELAY_MS,
193 MAC_ALG_CFG_SCHEDULE_VI_CTRL_MS,
194 MAC_ALG_CFG_SCHEDULE_SCH_CYCLE_MS,
195 MAC_ALG_CFG_SCHEDULE_TRAFFIC_CTRL_CYCLE,
196 MAC_ALG_CFG_SCHEDULE_CIR_NVIP_KBPS,
197 MAC_ALG_CFG_SCHEDULE_CIR_NVIP_KBPS_BE,
198 MAC_ALG_CFG_SCHEDULE_CIR_NVIP_KBPS_BK,
199 MAC_ALG_CFG_SCHEDULE_CIR_VIP_KBPS,
200 MAC_ALG_CFG_SCHEDULE_CIR_VIP_KBPS_BE,
201 MAC_ALG_CFG_SCHEDULE_CIR_VIP_KBPS_BK,
202 MAC_ALG_CFG_SCHEDULE_CIR_VAP_KBPS,
203 MAC_ALG_CFG_SCHEDULE_SM_TRAIN_DELAY,
204 MAC_ALG_CFG_VIDEO_DROP_PKT_LIMIT,
205 MAC_ALG_CFG_SCHEDULE_LOG_START,
206 MAC_ALG_CFG_SCHEDULE_VAP_SCH_PRIO,
207 MAC_ALG_CFG_SCHEDULE_LOG_END,
208 MAC_ALG_CFG_SCHEDULE_END,
209 /* AUTORATE算法配置参数,请添加到对应的START和END之间 */
210 MAC_ALG_CFG_AUTORATE_START,
211 MAC_ALG_CFG_AUTORATE_ENABLE,
212 MAC_ALG_CFG_AUTORATE_USE_LOWEST_RATE,
213 MAC_ALG_CFG_AUTORATE_SHORT_STAT_NUM,
214 MAC_ALG_CFG_AUTORATE_SHORT_STAT_SHIFT,
215 MAC_ALG_CFG_AUTORATE_LONG_STAT_NUM,
216 MAC_ALG_CFG_AUTORATE_LONG_STAT_SHIFT,
217 MAC_ALG_CFG_AUTORATE_MIN_PROBE_INTVL_PKTNUM,
218 MAC_ALG_CFG_AUTORATE_MAX_PROBE_INTVL_PKTNUM,
219 MAC_ALG_CFG_AUTORATE_PROBE_INTVL_KEEP_TIMES,
220 MAC_ALG_CFG_AUTORATE_DELTA_GOODPUT_RATIO,
221 MAC_ALG_CFG_AUTORATE_VI_PROBE_PER_LIMIT,
222 MAC_ALG_CFG_AUTORATE_VO_PROBE_PER_LIMIT,
223 MAC_ALG_CFG_AUTORATE_AMPDU_DURATION,
224 MAC_ALG_CFG_AUTORATE_MCS0_CONT_LOSS_NUM,
225 MAC_ALG_CFG_AUTORATE_UP_PROTOCOL_DIFF_RSSI,
226 MAC_ALG_CFG_AUTORATE_RTS_MODE,
227 MAC_ALG_CFG_AUTORATE_LEGACY_1ST_LOSS_RATIO_TH,
228 MAC_ALG_CFG_AUTORATE_HT_VHT_1ST_LOSS_RATIO_TH,
229 MAC_ALG_CFG_AUTORATE_LOG_ENABLE,
230 MAC_ALG_CFG_AUTORATE_VO_RATE_LIMIT,
231 MAC_ALG_CFG_AUTORATE_JUDGE_FADING_PER_TH,
232 MAC_ALG_CFG_AUTORATE_AGGR_OPT,
233 MAC_ALG_CFG_AUTORATE_AGGR_PROBE_INTVL_NUM,
234 MAC_ALG_CFG_AUTORATE_DBG_VI_STATUS,
235 MAC_ALG_CFG_AUTORATE_DBG_AGGR_LOG,
236 MAC_ALG_CFG_AUTORATE_AGGR_NON_PROBE_PCK_NUM,
237 MAC_ALG_CFG_AUTORATE_AGGR_MIN_AGGR_TIME_IDX,
238 MAC_ALG_CFG_AUTORATE_MAX_AGGR_NUM,
239 MAC_ALG_CFG_AUTORATE_LIMIT_1MPDU_PER_TH,
240 MAC_ALG_CFG_AUTORATE_BTCOEX_PROBE_ENABLE,
241 MAC_ALG_CFG_AUTORATE_BTCOEX_AGGR_ENABLE,
242 MAC_ALG_CFG_AUTORATE_COEX_STAT_INTVL,
243 MAC_ALG_CFG_AUTORATE_COEX_LOW_ABORT_TH,
244 MAC_ALG_CFG_AUTORATE_COEX_HIGH_ABORT_TH,
245 MAC_ALG_CFG_AUTORATE_COEX_AGRR_NUM_ONE_TH,
246 MAC_ALG_CFG_AUTORATE_DYNAMIC_BW_ENABLE,
247 MAC_ALG_CFG_AUTORATE_THRPT_WAVE_OPT,
248 MAC_ALG_CFG_AUTORATE_GOODPUT_DIFF_TH,
249 MAC_ALG_CFG_AUTORATE_PER_WORSE_TH,
250 MAC_ALG_CFG_AUTORATE_RX_CTS_NO_BA_NUM,
251 MAL_ALG_CFG_AUTORATE_VOICE_AGGR,
252 MAC_ALG_CFG_AUTORATE_FAST_SMOOTH_SHIFT,
253 MAC_ALG_CFG_AUTORATE_FAST_SMOOTH_AGGR_NUM,
254 MAC_ALG_CFG_AUTORATE_SGI_PUNISH_PER,
255 MAC_ALG_CFG_AUTORATE_SGI_PUNISH_NUM,
256 MAC_ALG_CFG_AUTORATE_VI_HOLD_RATE_RSSI_TH,
257 MAC_ALG_CFG_AUTORATE_VI_HOLDING_RATE,
258 MAC_ALG_CFG_AUTORATE_END,
259 /* AUTORATE算法日志配置参数,请添加到对应的START和END之间 */
260 MAC_ALG_CFG_AUTORATE_LOG_START,
261 MAC_ALG_CFG_AUTORATE_STAT_LOG_START,
262 MAC_ALG_CFG_AUTORATE_SELECTION_LOG_START,
263 MAC_ALG_CFG_AUTORATE_FIX_RATE_LOG_START,
264 MAC_ALG_CFG_AUTORATE_STAT_LOG_WRITE,
265 MAC_ALG_CFG_AUTORATE_SELECTION_LOG_WRITE,
266 MAC_ALG_CFG_AUTORATE_FIX_RATE_LOG_WRITE,
267 MAC_ALG_CFG_AUTORATE_AGGR_STAT_LOG_START,
268 MAC_ALG_CFG_AUTORATE_AGGR_STAT_LOG_WRITE,
269 MAC_ALG_CFG_AUTORATE_LOG_END,
270 /* AUTORATE算法系统测试命令,请添加到对应的START和END之间 */
271 MAC_ALG_CFG_AUTORATE_TEST_START,
272 MAC_ALG_CFG_AUTORATE_DISPLAY_RATE_SET,
273 MAC_ALG_CFG_AUTORATE_CONFIG_FIX_RATE,
274 MAC_ALG_CFG_AUTORATE_CYCLE_RATE,
275 MAC_ALG_CFG_AUTORATE_DISPLAY_RX_RATE,
276 MAC_ALG_CFG_AUTORATE_TEST_END,
277 /* 抗干扰算法配置参数,请添加到对应的START和END之间 */
278 MAC_ALG_CFG_ANTI_INTF_START,
279 MAC_ALG_CFG_ANTI_INTF_IMM_ENABLE,
280 MAC_ALG_CFG_ANTI_INTF_UNLOCK_ENABLE,
281 MAC_ALG_CFG_ANTI_INTF_RSSI_STAT_CYCLE,
282 MAC_ALG_CFG_ANTI_INTF_UNLOCK_CYCLE,
283 MAC_ALG_CFG_ANTI_INTF_UNLOCK_DUR_TIME,
284 MAC_ALG_CFG_ANTI_INTF_NAV_IMM_ENABLE,
285 MAC_ALG_CFG_ANTI_INTF_GOODPUT_FALL_TH,
286 MAC_ALG_CFG_ANTI_INTF_KEEP_CYC_MAX_NUM,
287 MAC_ALG_CFG_ANTI_INTF_KEEP_CYC_MIN_NUM,
288 MAC_ALG_CFG_ANTI_INTF_TX_TIME_FALL_TH,
289 MAC_ALG_CFG_ANTI_INTF_PER_PROBE_EN,
290 MAC_ALG_CFG_ANTI_INTF_PER_FALL_TH,
291 MAC_ALG_CFG_ANTI_INTF_GOODPUT_JITTER_TH,
292 MAC_ALG_CFG_ANTI_INTF_DEBUG_MODE,
293 MAC_ALG_CFG_ANTI_INTF_END,
294 /* EDCA优化算法配置参数,请添加到对应的START和END之间 */
295 MAC_ALG_CFG_EDCA_OPT_START,
296 MAC_ALG_CFG_EDCA_OPT_CO_CH_DET_CYCLE,
297 MAC_ALG_CFG_EDCA_OPT_AP_EN_MODE,
298 MAC_ALG_CFG_EDCA_OPT_STA_EN,
299 MAC_ALG_CFG_EDCA_OPT_STA_WEIGHT,
300 MAC_ALG_CFG_EDCA_OPT_NONDIR_TH,
301 MAC_ALG_CFG_EDCA_OPT_TH_UDP,
302 MAC_ALG_CFG_EDCA_OPT_TH_TCP,
303 MAC_ALG_CFG_EDCA_OPT_DEBUG_MODE,
304 MAC_ALG_CFG_EDCA_OPT_END,
305 /* CCA优化算法配置参数,请添加到对应的START和END之间 */
306 MAC_ALG_CFG_CCA_OPT_START,
307 MAC_ALG_CFG_CCA_OPT_ALG_EN_MODE,
308 MAC_ALG_CFG_CCA_OPT_DEBUG_MODE,
309 MAC_ALG_CFG_CCA_OPT_SET_T1_COUNTER_TIME,
310 MAC_ALG_CFG_CCA_OPT_END,
311 /* CCA OPT算法日志配置参数,请添加到对应的START和END之间 */
312 MAC_ALG_CFG_CCA_OPT_LOG_START,
313 MAC_ALG_CFG_CCA_OPT_STAT_LOG_START,
314 MAC_ALG_CFG_CCA_OPT_STAT_LOG_WRITE,
315 MAC_ALG_CFG_CCA_OPT_LOG_END,
316
317 /* TPC算法配置参数, 请添加到对应的START和END之间 */
318 MAC_ALG_CFG_TPC_START,
319 MAC_ALG_CFG_TPC_MODE,
320 MAC_ALG_CFG_TPC_DEBUG,
321 MAC_ALG_CFG_TPC_POWER_LEVEL,
322 MAC_ALG_CFG_TPC_LOG,
323 MAC_ALG_CFG_TPC_MANAGEMENT_MCAST_FRM_POWER_LEVEL,
324 MAC_ALG_CFG_TPC_CONTROL_FRM_POWER_LEVEL,
325 MAC_ALG_CFG_TPC_OVER_TMP_TH,
326 MAC_ALG_CFG_TPC_DPD_ENABLE_RATE,
327 MAC_ALG_CFG_TPC_TARGET_RATE_11B,
328 MAC_ALG_CFG_TPC_TARGET_RATE_11AG,
329 MAC_ALG_CFG_TPC_TARGET_RATE_HT20,
330 MAC_ALG_CFG_TPC_NO_MARGIN_POW,
331 MAC_ALG_CFG_TPC_POWER_AMEND,
332 MAC_ALG_CFG_TPC_END,
333 /* TPC算法日志配置参数,请添加到对应的START和END之间 */
334 MAC_ALG_CFG_TPC_LOG_START,
335 MAC_ALG_CFG_TPC_STAT_LOG_START,
336 MAC_ALG_CFG_TPC_STAT_LOG_WRITE,
337 MAC_ALG_CFG_TPC_PER_PKT_LOG_START,
338 MAC_ALG_CFG_TPC_PER_PKT_LOG_WRITE,
339 MAC_ALG_CFG_TPC_GET_FRAME_POW,
340 MAC_ALG_CFG_TPC_RESET_STAT,
341 MAC_ALG_CFG_TPC_RESET_PKT,
342 MAC_ALG_CFG_TPC_LOG_END,
343 MAC_ALG_CFG_BUTT
344 } mac_alg_cfg_enum;
345 typedef hi_u8 mac_alg_cfg_enum_uint8;
346
347 typedef enum { /* hi1131-cb */
348 SHORTGI_20_CFG_ENUM,
349 SHORTGI_40_CFG_ENUM,
350 SHORTGI_80_CFG_ENUM,
351 SHORTGI_BUTT_CFG
352 } short_gi_cfg_type;
353
354 typedef enum {
355 MAC_SET_BEACON = 0,
356 MAC_ADD_BEACON = 1,
357
358 MAC_BEACON_OPERATION_BUTT
359 } mac_beacon_operation_type;
360 typedef hi_u8 mac_beacon_operation_type_uint8;
361
362 typedef enum {
363 MAC_WMM_SET_PARAM_TYPE_DEFAULT,
364 MAC_WMM_SET_PARAM_TYPE_UPDATE_EDCA,
365
366 MAC_WMM_SET_PARAM_TYPE_BUTT
367 } mac_wmm_set_param_type_enum;
368 typedef hi_u8 mac_wmm_set_param_type_enum_uint8;
369
370 #ifdef _PRE_WLAN_FEATURE_STA_UAPSD
371 typedef enum {
372 MAC_APSD_SP_LEN_ALL = 0, /* 对应bit5 bit6 为00 */
373 MAC_APSD_SP_LEN_TWO = 2, /* 对应bit5 bit6 为01 */
374 MAC_APSD_SP_LEN_FOUR = 4, /* 对应bit5 bit6 为10 */
375 MAC_APSD_SP_LEN_SIX = 6, /* 对应bit5 bit6 为11 */
376 MAC_APSD_SP_LEN_BUTT
377 } mac_apsd_sp_len_enum;
378 typedef hi_u8 mac_apsd_sp_len_enum_uint8;
379 #endif
380
381 #ifdef _PRE_WLAN_FEATURE_STA_PM
382 /* Power save modes specified by the user */
383 typedef enum {
384 NO_POWERSAVE = 0,
385 MIN_FAST_PS = 1,
386 MAX_FAST_PS = 2,
387 MIN_PSPOLL_PS = 3,
388 MAX_PSPOLL_PS = 4,
389 NUM_PS_MODE = 5
390 } ps_user_mode_enum;
391 typedef hi_u8 ps_user_mode_enum_uint8;
392 #endif
393
394 #define MAC_VAP_AP_STATE_BUTT (MAC_VAP_STATE_AP_WAIT_START + 1)
395 #define MAC_VAP_STA_STATE_BUTT MAC_VAP_STATE_BUTT
396
397 typedef enum {
398 HISTREAM_SWITCH_OFF = 0, /* Histream 功能使能关闭 */
399 HISTREAM_SWITCH_ON = 1, /* Histream 功能使能打开 */
400 HISTREAM_SWITCH_ON_BUTT, /* 最大类型,应小于 8 */
401 } mac_histream_switch_enum;
402
403 #ifdef _PRE_WLAN_FEATURE_WOW
404 typedef enum {
405 MAC_WOW_DISABLE,
406 MAC_WOW_ENABLE,
407 MAC_WOW_EN_BUTT
408 } mac_wow_en_enum;
409
410 typedef enum {
411 MAC_WOW_WAKEUP_NOTIFY,
412 MAC_WOW_SLEEP_REQUEST,
413 MAC_WOW_NOTIFY_TYPE_BUTT
414 } mac_wow_notify_type_enum;
415
416 /* 去关联开关统一到 MAC_WOW_FIELD_DISASSOC,
417 MAC_WOW_FIELD_DISASSOC_RX 因没有 netbuf 备份,目前合入 MAC_WOW_FIELD_DISASSOC_TX 开关类别 */
418 typedef enum {
419 MAC_WOW_FIELD_ALL_CLEAR = 0, /* Clear all events */
420 MAC_WOW_FIELD_MAGIC_PACKET = BIT0, /* Wakeup on Magic Packet */
421 MAC_WOW_FIELD_NETPATTERN_TCP = BIT1, /* Wakeup on TCP NetPattern */
422 MAC_WOW_FIELD_NETPATTERN_UDP = BIT2, /* Wakeup on UDP NetPattern */
423 MAC_WOW_FIELD_DISASSOC = BIT3, /* 去关联/去认证,Wakeup on Disassociation/Deauth */
424 MAC_WOW_FIELD_AUTH_RX = BIT4, /* 对端关联请求,Wakeup on auth */
425 MAC_WOW_FIELD_HOST_WAKEUP = BIT5, /* Host wakeup */
426 MAC_WOW_FIELD_TCP_UDP_KEEP_ALIVE = BIT6, /* Wakeup on TCP/UDP keep alive timeout */
427 MAC_WOW_FIELD_OAM_LOG_WAKEUP = BIT7, /* OAM LOG wakeup */
428 MAC_WOW_FIELD_SSID_WAKEUP = BIT8, /* SSID Scan wakeup */
429 } mac_wow_field_enum;
430
431 typedef enum {
432 MAC_WOW_WKUP_REASON_TYPE_NULL = 0, /* None */
433 MAC_WOW_WKUP_REASON_TYPE_MAGIC_PACKET = 1, /* Wakeup on Magic Packet */
434 MAC_WOW_WKUP_REASON_TYPE_NETPATTERN_TCP = 2, /* Wakeup on TCP NetPattern */
435 MAC_WOW_WKUP_REASON_TYPE_NETPATTERN_UDP = 3, /* Wakeup on UDP NetPattern */
436 MAC_WOW_WKUP_REASON_TYPE_DISASSOC_RX = 4, /* 对端去关联/去认证,Wakeup on Disassociation/Deauth */
437 MAC_WOW_WKUP_REASON_TYPE_DISASSOC_TX = 5, /* 对端去关联/去认证,Wakeup on Disassociation/Deauth */
438 MAC_WOW_WKUP_REASON_TYPE_AUTH_RX = 6, /* 本端端关联请求,Wakeup on auth */
439 MAC_WOW_WKUP_REASON_TYPE_TCP_UDP_KEEP_ALIVE = 7, /* Wakeup on TCP/UDP keep alive timeout */
440 MAC_WOW_WKUP_REASON_TYPE_HOST_WAKEUP = 8, /* Host wakeup */
441 MAC_WOW_WKUP_REASON_TYPE_OAM_LOG = 9, /* OAM LOG wakeup */
442 MAC_WOW_WKUP_REASON_TYPE_SSID_SCAN = 10, /* SSID Scan wakeup */
443 MAC_WOW_WKUP_REASON_TYPE_BUT
444 } mac_wow_wakeup_reason_type_enum;
445 #endif
446
447 /* ****************************************************************************
448 STRUCT定义
449 **************************************************************************** */
450 /* channel结构体 */
451 typedef struct {
452 hi_u8 chan_number; /* 主20MHz信道号 */
453 wlan_channel_band_enum_uint8 band; /* 频段 */
454 wlan_channel_bandwidth_enum_uint8 en_bandwidth; /* 带宽模式 */
455 hi_u8 idx; /* 信道索引号 */
456 } mac_channel_stru;
457
458 #if (_PRE_MULTI_CORE_MODE_OFFLOAD_DMAC == _PRE_MULTI_CORE_MODE)
459 typedef struct {
460 hi_u8 type; /* shortgi 20/40/80 */
461 hi_u8 enable; /* 1:enable; 0:disable */
462 hi_u8 resv[2]; /* 2 byte保留字段 */
463 } shortgi_cfg_stru;
464 #endif
465
466 #define SHORTGI_CFG_STRU_LEN 4
467
468 typedef struct {
469 hi_u8 announced_channel; /* 新信道号 AP用 */
470 hi_u8 ch_switch_cnt; /* 信道切换计数 AP用 */
471 hi_u8 new_channel; /* STA用 可以考虑跟上面合并 */
472 hi_u8 new_ch_swt_cnt; /* STA用 可以考虑跟上面合并 */
473
474 wlan_channel_bandwidth_enum_uint8 announced_bandwidth : 4; /* 新带宽模式 AP用 */
475 wlan_channel_bandwidth_enum_uint8 new_bandwidth : 4; /* STA用 可以考虑跟上面合并 */
476 hi_u8 ch_swt_cnt; /* ap上一次发送的切换个数 */
477 hi_u8 csa_rsv_cnt; /* ap csa 计数不减的计数 */
478 wlan_ch_switch_status_enum_uint8 ch_switch_status : 2; /* 信道切换状态 */
479 wlan_bw_switch_status_enum_uint8 bw_switch_status : 2; /* 带宽切换状态 31H只支持20M 功能不支持 */
480 hi_u8 csa_present_in_bcn : 1, /* Beacon帧中是否包含CSA IE */
481 waiting_to_shift_channel : 1,
482 channel_swt_cnt_zero : 1,
483 bad_ap : 1 ; /* 场景识别出ap发送beacon带csa但不切信道 */
484 /*
485 * ---|--------|--------------------|-----------------|-----------
486 * 0 3 0 0
487 * X A B C
488 *
489 * sta的信道切换可通过上图帮助理解, 数字为切换计数器,
490 * X->A A之前为未发生任务信道切换时,切换计数器为0
491 * 从A->B时间段为sta等待切换状态: en_waiting_to_shift_channel为true
492 * 从B->C为sta信道切换中,即等待ap加beacon状态: en_waiting_for_ap为true
493 * C-> 为sta收到了ap的beacon,标准信道切换结束
494 *
495 * A点通常中收到csa ie(beacon/action...), B点通常为tbtt中断中切换计数器变为
496 * 0或者csa ie中计数器为0,C点则为收到beacon
497 *
498 * 从A->C的过程中,会过滤重复收到的csa ie或者信道切换动作
499 *
500 */
501 } mac_ch_switch_info_stru;
502
503 typedef struct {
504 hi_u8 mac_rate; /* MAC对应速率 */
505 hi_u8 phy_rate; /* PHY对应速率 */
506 hi_u8 mbps; /* 速率 */
507 hi_u8 auc_resv[1];
508 } mac_data_rate_stru;
509
510 typedef struct {
511 hi_u8 rs_nrates; /* 速率个数 */
512 hi_u8 auc_resv[3]; /* 3 BYTE保留字段 */
513 mac_data_rate_stru ast_rs_rates[WLAN_MAX_SUPP_RATES];
514 } mac_rateset_stru;
515
516 typedef struct {
517 hi_u8 br_rate_num; /* 基本速率个数 */
518 hi_u8 nbr_rate_num; /* 非基本速率个数 */
519 hi_u8 max_rate; /* 最大基本速率 */
520 hi_u8 min_rate; /* 最小基本速率 */
521 mac_rateset_stru rate;
522 } mac_curr_rateset_stru;
523
524 /* wme参数 */
525 typedef struct {
526 hi_u8 aifsn; /* AIFSN parameters 逻辑4bit mib使用uint32 */
527 hi_u8 logcwmin; /* cwmin in exponential form, 单位2^n -1 slot 逻辑4bit mib使用uint32 */
528 hi_u16 us_logcwmax; /* cwmax in exponential form, 单位2^n -1 slot 同cwin 对齐使用u16 */
529 hi_u32 txop_limit; /* txopLimit, us */
530 } mac_wme_param_stru;
531
532 /* MAC vap能力特性标识 */
533 typedef struct {
534 hi_u32 uapsd : 1,
535 txop_ps : 1,
536 wpa : 1,
537 wpa2 : 1,
538 dsss_cck_mode_40mhz : 1, /* 是否允许在40M上使用DSSS/CCK, 1-允许, 0-不允许 */
539 rifs_tx_on : 1,
540 tdls_prohibited : 1, /* tdls全局禁用开关, 0-不关闭, 1-关闭 */
541 tdls_channel_switch_prohibited : 1, /* tdls信道切换全局禁用开关, 0-不关闭, 1-关闭 */
542 hide_ssid : 1, /* AP开启隐藏ssid, 0-关闭, 1-开启 */
543 wps : 1, /* AP WPS功能:0-关闭, 1-开启 */
544 ac2g : 1, /* 2.4G下的11ac:0-关闭, 1-开启 */
545 keepalive : 1, /* vap KeepAlive功能开关: 0-关闭, 1-开启 */
546 smps : 2, /* vap 当前SMPS能力 */
547 dpd_enbale : 1, /* dpd是否开启 */
548 dpd_done : 1, /* dpd是否完成 */
549 ntxbf : 1, /* 11n txbf能力 */
550 disable_2ght40 : 1, /* 2ght40禁止位,1-禁止,0-不禁止 */
551 auto_dtim_enbale : 1, /* 动态DTIM能力 */
552 hide_meshid :1, /* 是否隐藏MeshID */
553 bit_resv : 12;
554 } mac_cap_flag_stru;
555
556 /* VAP收发包统计 */
557 typedef struct {
558 /* net_device用统计信息, net_device统计经过以太网的报文 */
559 hi_u32 rx_packets_to_lan; /* 接收流程到LAN的包数 */
560 hi_u32 rx_bytes_to_lan; /* 接收流程到LAN的字节数 */
561 hi_u32 rx_dropped_packets; /* 接收流程中丢弃的包数 */
562 hi_u32 rx_vap_non_up_dropped; /* vap没有up丢弃的包的个数 */
563 hi_u32 rx_dscr_error_dropped; /* 描述符出错丢弃的包的个数 */
564 hi_u32 rx_first_dscr_excp_dropped; /* 描述符首包异常丢弃的包的个数 */
565 hi_u32 rx_alg_filter_dropped; /* 算法过滤丢弃的包的个数 */
566 hi_u32 rx_feature_ap_dropped; /* AP特性帧过滤丢包个数 */
567 hi_u32 rx_null_frame_dropped; /* 收到NULL帧的数目 */
568 hi_u32 rx_transmit_addr_checked_dropped; /* 发送端地址过滤失败丢弃 */
569 hi_u32 rx_dest_addr_checked_dropped; /* 目的地址过滤失败丢弃 */
570 hi_u32 rx_multicast_dropped; /* 组播帧失败(netbuf copy失败)丢弃 */
571
572 hi_u32 tx_packets_from_lan; /* 发送流程LAN过来的包数 */
573 hi_u32 tx_bytes_from_lan; /* 发送流程LAN过来的字节数 */
574 hi_u32 tx_dropped_packets; /* 发送流程中丢弃的包数 */
575
576 /* 其它报文统计信息 */
577 } mac_vap_stats_stru;
578
579 typedef struct {
580 hi_u8 user_idx;
581 wlan_protocol_enum_uint8 avail_protocol_mode; /* 用户协议模式 */
582 wlan_protocol_enum_uint8 cur_protocol_mode;
583 wlan_protocol_enum_uint8 protocol_mode;
584 } mac_h2d_user_protocol_stru;
585
586 typedef struct {
587 hi_u8 user_idx;
588 hi_u8 arg1;
589 hi_u8 arg2;
590 hi_u8 uc_resv;
591
592 /* 协议模式信息 */
593 wlan_protocol_enum_uint8 cur_protocol_mode;
594 wlan_protocol_enum_uint8 protocol_mode;
595 hi_u8 avail_protocol_mode; /* 用户和VAP协议模式交集, 供算法调用 */
596
597 wlan_bw_cap_enum_uint8 bandwidth_cap; /* 用户带宽能力信息 */
598 wlan_bw_cap_enum_uint8 avail_bandwidth; /* 用户和VAP带宽能力交集,供算法调用 */
599 wlan_bw_cap_enum_uint8 cur_bandwidth; /* 默认值与en_avail_bandwidth相同,供算法调用修改 */
600
601 hi_u8 user_pmf;
602 mac_user_asoc_state_enum_uint8 user_asoc_state; /* 用户关联状态 */
603 } mac_h2d_usr_info_stru;
604
605 typedef struct {
606 mac_user_cap_info_stru user_cap_info; /* 用户能力信息 */
607 hi_u8 user_idx;
608 hi_u8 auc_resv[3]; /* 3 BYTE保留字段 */
609 } mac_h2d_usr_cap_stru;
610
611 typedef struct {
612 hi_u8 user_idx;
613 hi_u8 uc_resv;
614 wlan_protocol_enum_uint8 protocol_mode; /* 用户协议模式 */
615 /* legacy速率集信息 */
616 hi_u8 avail_rs_nrates;
617 hi_u8 auc_avail_rs_rates[WLAN_MAX_SUPP_RATES];
618 /* ht速率集信息 */
619 mac_user_ht_hdl_stru ht_hdl;
620 } mac_h2d_usr_rate_info_stru;
621
622 typedef struct {
623 hi_u16 us_sta_aid;
624 hi_u8 uapsd_cap;
625 hi_u8 auc_resv[1];
626 }mac_h2d_vap_info_stru;
627
628 typedef struct {
629 hi_u8 user_idx;
630 wlan_protocol_enum_uint8 avail_protocol_mode; /* 用户协议模式 */
631 wlan_bw_cap_enum_uint8 bandwidth_cap; /* 用户带宽能力信息 */
632 wlan_bw_cap_enum_uint8 avail_bandwidth; /* 用户和VAP带宽能力交集,供算法调用 */
633 wlan_bw_cap_enum_uint8 cur_bandwidth; /* 默认值与en_avail_bandwidth相同,供算法调用修改 */
634 hi_u8 auc_rsv[3]; /* 3 BYTE保留字段 */
635 } mac_h2d_user_bandwidth_stru;
636
637 typedef struct {
638 mac_channel_stru channel;
639 hi_u8 user_idx;
640 wlan_bw_cap_enum_uint8 bandwidth_cap; /* 用户带宽能力信息 */
641 wlan_bw_cap_enum_uint8 avail_bandwidth; /* 用户和VAP带宽能力交集,供算法调用 */
642 wlan_bw_cap_enum_uint8 cur_bandwidth; /* 默认值与en_avail_bandwidth相同,供算法调用修改 */
643 } mac_d2h_syn_info_stru;
644
645 typedef struct {
646 mac_channel_stru channel; /* vap所在的信道 */
647 mac_ch_switch_info_stru ch_switch_info;
648 hi_u8 user_idx;
649 hi_u8 vap_id;
650 hi_u8 auc_rsv[2]; /* 2 BYTE保留字段 */
651 } mac_d2h_syn_data_stru;
652
653 typedef struct {
654 hi_u32 data_blk_cnt; /* 需要传输的数据块个数 */
655 hi_u32 wakeup_reason;
656 } mac_d2h_syn_hdr_stru;
657
658 typedef struct {
659 mac_channel_stru channel; /* vap所在的信道 */
660 mac_ch_switch_info_stru ch_switch_info;
661 mac_user_ht_hdl_stru ht_hdl; /* HT capability IE和 operation IE的解析信息 */
662 mac_vht_hdl_stru vht_hdl; /* VHT capability IE和 operation IE的解析信息 */
663 hi_u8 user_idx;
664 hi_u8 vap_id;
665 wlan_bw_cap_enum_uint8 bandwidth_cap; /* 用户带宽能力信息 */
666 wlan_bw_cap_enum_uint8 avail_bandwidth; /* 用户和VAP带宽能力交集,供算法调用 */
667 wlan_bw_cap_enum_uint8 cur_bandwidth; /* 默认值与en_avail_bandwidth相同,供算法调用修改 */
668 hi_u8 auc_rsv[3]; /* 3 BYTE保留字段 */
669 } mac_h2d_syn_data_stru;
670
671 /* WOW传输消息类型 */
672 typedef enum {
673 MAC_WOW_SLEEP_NOTIFY_MSG,
674 MAC_WOW_SYNC_DATA_MSG,
675 MAC_WOW_MSG_BUTT,
676 } mac_wow_msg_enum;
677 typedef hi_u8 mac_wow_msg_enum_uint8;
678
679 typedef struct {
680 mac_wow_msg_enum_uint8 msg_type; /* 传输的消息类型 */
681 hi_u8 notify_param; /* 睡眠通知参数 */
682 hi_u8 auc_resv[2]; /* 2 BYTE保留字段 */
683 hi_u32 data_blk_cnt; /* 需要传输的数据块个数 */
684 } mac_h2d_syn_info_hdr_stru;
685
686 typedef struct {
687 hi_u8 user_idx;
688 mac_user_asoc_state_enum_uint8 asoc_state;
689 hi_u8 rsv[2]; /* 2 BYTE保留字段 */
690 } mac_h2d_user_asoc_state_stru;
691
692 typedef struct {
693 hi_u8 auc_addr[WLAN_MAC_ADDR_LEN];
694 hi_u8 auc_pmkid[WLAN_PMKID_LEN];
695 hi_u8 auc_resv0[2]; /* 2 BYTE保留字段 */
696 } mac_pmkid_info_stu;
697
698 typedef struct {
699 hi_u8 num_elems;
700 hi_u8 auc_resv0[3]; /* 3 BYTE保留字段 */
701 mac_pmkid_info_stu ast_elem[WLAN_PMKID_CACHE_SIZE];
702 } mac_pmkid_cache_stru;
703
704 typedef struct {
705 /* word 0 */
706 wlan_prot_mode_enum_uint8 protection_mode; /* 保护模式 */
707 hi_u8 obss_non_erp_aging_cnt; /* 指示OBSS中non erp 站点的老化时间 */
708 hi_u8 obss_non_ht_aging_cnt; /* 指示OBSS中non ht 站点的老化时间 */
709 /* 指示保护策略是否开启,HI_SWITCH_ON 打开, HI_SWITCH_OFF 关闭 */
710 hi_u8 auto_protection : 1;
711 hi_u8 obss_non_erp_present : 1; /* 指示obss中是否存在non ERP的站点 */
712 hi_u8 obss_non_ht_present : 1; /* 指示obss中是否存在non HT的站点 */
713 /* 指rts_cts 保护机制是否打开, HI_SWITCH_ON 打开, HI_SWITCH_OFF 关闭 */
714 hi_u8 rts_cts_protect_mode : 1;
715 /* 指示L-SIG protect是否打开, HI_SWITCH_ON 打开, HI_SWITCH_OFF 关闭 */
716 hi_u8 lsig_txop_protect_mode : 1;
717 hi_u8 reserved : 3;
718
719 /* word 1 */
720 hi_u8 sta_no_short_slot_num; /* 不支持short slot的STA个数 */
721 hi_u8 sta_no_short_preamble_num; /* 不支持short preamble的STA个数 */
722 hi_u8 sta_non_erp_num; /* 不支持ERP的STA个数 */
723 hi_u8 sta_non_ht_num; /* 不支持HT的STA个数 */
724 /* word 2 */
725 hi_u8 sta_non_gf_num; /* 支持ERP/HT,不支持GF的STA个数 */
726 hi_u8 sta_20_m_only_num; /* 只支持20M 频段的STA个数 */
727 hi_u8 sta_no_40dsss_cck_num; /* 不用40M DSSS-CCK STA个数 */
728 hi_u8 sta_no_lsig_txop_num; /* 不支持L-SIG TXOP Protection STA个数 */
729 } mac_protection_stru;
730
731 /* 用于同步保护相关的参数 */
732 typedef struct {
733 wlan_mib_ht_protection_enum_uint8 dot11_ht_protection;
734 hi_u8 dot11_rifs_mode;
735 hi_u8 dot11_lsigtxop_full_protection_activated;
736 hi_u8 dot11_non_gf_entities_present;
737 mac_protection_stru protection;
738 } mac_h2d_protection_stru;
739
740 typedef struct {
741 hi_u8 *puc_ie; /* APP 信息元素 */
742 hi_u32 ie_len; /* APP 信息元素长度 */
743 } mac_app_ie_stru;
744
745 #ifdef _PRE_WLAN_FEATURE_STA_UAPSD
746 /* STA UAPSD 配置命令 */
747 typedef struct {
748 hi_u8 max_sp_len;
749 hi_u8 delivery_map;
750 hi_u8 trigger_map;
751 hi_u8 uc_resv;
752 } mac_cfg_uapsd_sta_stru;
753 #endif
754
755 /* RTS 发送参数 */
756 typedef struct {
757 wlan_legacy_rate_value_enum_uint8 auc_rate[WLAN_TX_RATE_MAX_NUM]; /* 发送速率,单位mpbs */
758 /* 协议模式, 取值参见wlan_phy_protocol_enum_uint8 */
759 wlan_phy_protocol_enum_uint8 auc_protocol_mode[WLAN_TX_RATE_MAX_NUM];
760 wlan_channel_band_enum_uint8 band;
761 hi_u8 auc_recv[3]; /* 3 byte保留字段 */
762 } mac_cfg_rts_tx_param_stru;
763
764 /* VAP的数据结构 */
765 typedef struct {
766 hi_u8 vap_id; /* vap ID 即资源池索引值 */
767 wlan_vap_mode_enum_uint8 vap_mode; /* vap模式 */
768 /* BSSID,非MAC地址,MAC地址是mib中的auc_dot11StationID */
769 hi_u8 auc_bssid[WLAN_MAC_ADDR_LEN];
770
771 mac_vap_state_enum_uint8 vap_state; /* VAP状态 */
772 wlan_protocol_enum_uint8 protocol; /* 工作的协议模式 */
773 hi_u8 tx_power; /* 传输功率, 单位dBm */
774 /* 初始为0,AP模式下,每跟新一次wmm参数这个变量加1,在beacon帧和assoc rsp中会填写,4bit,不能超过15;STA模式下
775 解析帧并更新这个值 */
776 hi_u8 wmm_params_update_count;
777
778 mac_channel_stru channel; /* vap所在的信道 */
779 mac_ch_switch_info_stru ch_switch_info;
780
781 hi_u8 has_user_bw_limit : 1, /* 该vap是否存在user限速 */
782 vap_bw_limit : 1, /* 该vap是否已限速 */
783 voice_aggr : 1, /* 该vap是否针对VO业务支持聚合 */
784 support_any : 1, /* 该vap是否当前支持ANY功能 */
785 uapsd_cap : 1, /* 保存与STA关联的AP是否支持uapsd能力信息 */
786 user_pmf_cap : 1, /* STA侧在未创建user前,存储目标user的pmf使能信息 */
787 mesh_accept_sta : 1, /* 表示当前Mesh是否支持sta关联(与Accepting Peer不同) */
788 mesh_tbtt_adjusting : 1; /* 表示Mesh是否正在调整TBTT */
789
790 hi_u8 user_nums; /* VAP下已挂接的用户个数 */
791 hi_u8 multi_user_idx; /* 组播用户ID */
792 hi_u8 cache_user_id; /* cache user对应的userID */
793
794 hi_u8 al_tx_flag : 1, /* 常发标志 */
795 payload_flag: 2, /* payload内容:0:全0 1:全1 2:random */
796 first_run : 1, /* 常发关闭再次打开标志 */
797 need_send_keepalive_null : 1, /* 标志sta Pause状态下是否需要发送Keepalive帧 */
798 is_conn_to_mesh : 1, /* 标志sta是否关联到Mesh */
799 csi_flag : 1, /* 标志当前MAC_VAP下CSI功能是否挂载 */
800 reserved : 1;
801 wlan_p2p_mode_enum_uint8 p2p_mode; /* 0:非P2P设备; 1:P2P_GO; 2:P2P_Device; 3:P2P_CL */
802 hi_u8 p2p_listen_channel; /* P2P Listen channel */
803 /* VAP为STA模式时保存user(ap)的资源池索引;VAP为AP模式时,不用此成员变量 */
804 hi_u8 assoc_vap_id;
805
806 hi_u8 report_times_limit; /* MESH 状态不变,连续上报该次数后无需继续上报发送信息 */
807 hi_u8 report_tx_cnt_limit; /* MESH 需上报的发送次数阈值 */
808 hi_u8 priority; /* 当前mesh节点的优先级,用于选择潜在配对节点(0-256) */
809 hi_u8 mnid; /* 供决定节点发送时隙,由mesh协议栈提供(0表示非法值) */
810
811 hi_u8 is_mbr; /* 标识是否是MBR节点(true:MBR,false:MR) */
812 hi_u8 vap_rx_nss;
813 hi_u8 auc_cache_user_mac_addr[WLAN_MAC_ADDR_LEN]; /* cache user对应的MAC地址 */
814
815 /* VAP为STA模式时保存AP分配给STA的AID(从响应帧获取),取值范围1~2007; VAP为AP模式时,不用此成员变量 */
816 hi_u16 us_sta_aid;
817 hi_u16 us_assoc_user_cap_info; /* sta要关联的用户的能力信息 */
818
819 hi_list ast_user_hash[MAC_VAP_USER_HASH_MAX_VALUE]; /* hash数组,使用HASH结构内的DLIST */
820 hi_list mac_user_list_head; /* 关联用户节点双向链表,使用USER结构内的DLIST */
821 mac_cap_flag_stru cap_flag; /* vap能力特性标识 */
822 wlan_mib_ieee802dot11_stru *mib_info; /* mib信息(当时配置vap时,可以直接将指针值为NULL,节省空间) */
823 mac_curr_rateset_stru curr_sup_rates; /* 当前支持的速率集 */
824 mac_protection_stru protection; /* 与保护相关变量 */
825 mac_app_ie_stru ast_app_ie[OAL_APP_IE_NUM];
826 #ifdef _PRE_WLAN_FEATURE_STA_UAPSD
827 mac_cfg_uapsd_sta_stru sta_uapsd_cfg; /* UAPSD的配置信息 */
828 #endif
829 oal_spin_lock_stru cache_user_lock; /* cache_user lock */
830 #ifdef _PRE_WLAN_FEATURE_BW_HIEX
831 hi_u8 selfcts; /* 是否使能窄带切宽带发送selfcts */
832 hi_u8 duration; /* selfcts的占用信道时间,单位ms */
833 hi_u16 us_per; /* 发送selfcts的PER阈值 */
834 #endif
835 } mac_vap_stru;
836
837 typedef struct {
838 mac_vap_stru *mac_vap;
839 hi_s8 pc_param[4]; /* 查询或配置信息,占4 byte */
840 } mac_cfg_event_stru;
841
842 /* HOSTAPD 设置 Beacon 信息 */
843 typedef struct {
844 hi_s32 l_interval; /* beacon interval */
845 hi_s32 l_dtim_period; /* DTIM period */
846 hi_u8 privacy;
847 hi_u8 crypto_mode; /* WPA/WPA2 */
848 hi_u8 group_crypto; /* 组播密钥类型 */
849 hi_u8 hidden_ssid;
850 hi_u8 auc_auth_type[MAC_AUTHENTICATION_SUITE_NUM]; /* akm 类型 */
851 hi_u8 auc_pairwise_crypto_wpa[MAC_PAIRWISE_CIPHER_SUITES_NUM];
852 hi_u8 auc_pairwise_crypto_wpa2[MAC_PAIRWISE_CIPHER_SUITES_NUM];
853 hi_u16 us_rsn_capability;
854 hi_u8 shortgi_20;
855 hi_u8 shortgi_40;
856 hi_u8 shortgi_80;
857 wlan_protocol_enum_uint8 protocol;
858
859 hi_u8 smps_mode;
860 mac_beacon_operation_type_uint8 operation_type;
861 hi_u8 auc_resv1[2]; /* 2 byte保留字段 */
862 #ifdef _PRE_WLAN_FEATURE_MESH
863 hi_u8 mesh_auth_protocol;
864 hi_u8 mesh_formation_info;
865 hi_u8 mesh_capability;
866 hi_u8 auc_resv2[1];
867 #endif
868 } mac_beacon_param_stru;
869
870 /* CSI参数配置结构体 */
871 typedef struct {
872 hi_u8 mac_addr[WLAN_MAC_ADDR_LEN]; /* 配置的MAC地址 */
873 hi_u8 sample_period; /* 配置的采样周期 */
874 hi_u8 frame_type; /* 配置的帧类型 */
875 } csi_entry_stru;
876
877 typedef struct {
878 csi_entry_stru ast_csi_param[OAL_CSI_MAX_MAC_NUM]; /* 最多配置6个mac地址上报 */
879 hi_u32 report_min_interval;
880 hi_u8 entry_num;
881 hi_u8 resv[3]; /* 3 byte保留字段 */
882 } mac_csi_config_stru;
883
884 /* 上报的CSI数据结构体 */
885 typedef struct {
886 hi_u8 csi_data[OAL_CSI_DATA_BUFF_SIZE]; /* 将184字节CSI数据上报到wal层 */
887 hi_u32 data_len;
888 } mac_csi_data_stru;
889
890 typedef struct {
891 hi_u8 default_key;
892 hi_u8 key_index;
893 hi_u8 key_len;
894 hi_u8 auc_wep_key[WLAN_WEP104_KEY_LEN];
895 } mac_wep_key_param_stru;
896
897 typedef struct mac_pmksa_tag {
898 hi_u8 auc_bssid[OAL_MAC_ADDR_LEN];
899 hi_u8 auc_pmkid[OAL_PMKID_LEN];
900 } mac_pmksa_stru;
901
902 typedef struct {
903 hi_u8 key_index;
904 hi_u8 pairwise;
905 hi_u8 auc_mac_addr[OAL_MAC_ADDR_LEN];
906 mac_key_params_stru key;
907 } mac_addkey_param_stru;
908
909 typedef struct {
910 hi_s32 key_len;
911 hi_u8 auc_key[OAL_WPA_KEY_LEN];
912 } mac_key_stru;
913
914 typedef struct {
915 hi_s32 seq_len;
916 hi_u8 auc_seq[OAL_WPA_SEQ_LEN];
917 } mac_seq_stru;
918
919 typedef struct {
920 hi_u8 key_index;
921 hi_u8 pairwise;
922 hi_u8 auc_mac_addr[OAL_MAC_ADDR_LEN];
923 hi_u8 cipher;
924 hi_u8 auc_rsv[3]; /* 3 byte保留字段 */
925 mac_key_stru key;
926 mac_seq_stru seq;
927 } mac_addkey_hmac2dmac_param_stru;
928
929 typedef struct {
930 oal_net_device_stru *netdev;
931 hi_u8 key_index;
932 hi_u8 pairwise;
933 hi_u8 auc_resv1[2]; /* 2 byte保留字段 */
934 hi_u8 *puc_mac_addr;
935 hi_void *cookie;
936 hi_void (*callback)(hi_void *cookie, oal_key_params_stru *key_param);
937 } mac_getkey_param_stru;
938
939 typedef struct {
940 hi_u8 key_index;
941 hi_u8 pairwise;
942 hi_u8 auc_mac_addr[OAL_MAC_ADDR_LEN];
943 } mac_removekey_param_stru;
944
945 typedef struct {
946 hi_u8 key_index;
947 hi_u8 unicast;
948 hi_u8 multicast;
949 hi_u8 auc_resv1[1];
950 } mac_setdefaultkey_param_stru;
951
952 /* 算法参数枚举,参数值 */
953 typedef struct {
954 mac_alg_cfg_enum_uint8 alg_cfg; /* 配置命令枚举 */
955 hi_u8 is_negtive; /* 配置参数值是否为负 */
956 hi_u8 uc_resv[2]; /* 2 字节对齐 */
957 hi_u32 value; /* 配置参数值 */
958 } mac_ioctl_alg_param_stru;
959
960 /* AUTORATE LOG 算法参数枚举,参数值 */
961 typedef struct {
962 mac_alg_cfg_enum_uint8 alg_cfg; /* 配置命令枚举 */
963 hi_u8 auc_mac_addr[WLAN_MAC_ADDR_LEN]; /* MAC地址 */
964 hi_u8 ac_no; /* AC类型 */
965 hi_u8 auc_resv[2]; /* 2 BYTE保留字段 */
966 hi_u16 us_value; /* 配置参数值 */
967 } mac_ioctl_alg_ar_log_param_stru;
968
969 /* AUTORATE 测试相关的命令参数 */
970 typedef struct {
971 mac_alg_cfg_enum_uint8 alg_cfg; /* 配置命令枚举 */
972 hi_u8 auc_mac_addr[WLAN_MAC_ADDR_LEN]; /* MAC地址 */
973 hi_u8 auc_resv[1];
974 hi_u16 us_value; /* 命令参数 */
975 } mac_ioctl_alg_ar_test_param_stru;
976
977 /* TXMODE LOG 算法参数枚举,参数值 */
978 typedef struct {
979 mac_alg_cfg_enum_uint8 alg_cfg; /* 配置命令枚举 */
980 hi_u8 ac_no; /* AC类型 */
981 hi_u8 auc_mac_addr[WLAN_MAC_ADDR_LEN]; /* MAC地址 */
982 hi_u8 auc_resv1[2]; /* 2 BYTE保留字段 */
983 hi_u16 us_value; /* 配置参数值 */
984 } mac_ioctl_alg_txbf_log_param_stru;
985 /* 算法配置命令接口 */
986 typedef struct {
987 hi_u8 argc;
988 hi_u8 auc_argv_offset[DMAC_ALG_CONFIG_MAX_ARG];
989 } mac_ioctl_alg_config_stru;
990
991 /* TPC LOG 算法参数枚举,参数值 */
992 typedef struct {
993 mac_alg_cfg_enum_uint8 alg_cfg; /* 配置命令枚举 */
994 hi_u8 auc_mac_addr[WLAN_MAC_ADDR_LEN]; /* MAC地址 */
995 hi_u8 ac_no; /* AC类型 */
996 hi_u16 us_value; /* 配置参数值 */
997 hi_u16 resv;
998 hi_char *pc_frame_name; /* 获取特定帧功率使用该变量 */
999 } mac_ioctl_alg_tpc_log_param_stru;
1000
1001 /* cca opt LOG 算法参数枚举,参数值 */
1002 typedef struct {
1003 hi_u16 us_value; /* 统计总时间 */
1004 mac_alg_cfg_enum_uint8 alg_cfg; /* 配置命令枚举 */
1005 hi_u8 auc_resv;
1006 } mac_ioctl_alg_cca_opt_log_param_stru;
1007
1008 /* 加组播转单播黑名单 */
1009 typedef struct {
1010 hi_u32 deny_group_addr;
1011 } mac_add_m2u_deny_table_stru;
1012
1013 /* 清空组播转单播黑名单 */
1014 typedef struct {
1015 hi_u8 m2u_clear_deny_table;
1016 hi_u8 m2u_show_deny_table;
1017 } mac_clg_m2u_deny_table_stru;
1018
1019 /* print snoop table */
1020 typedef struct {
1021 hi_u8 m2u_show_snoop_table;
1022 } mac_show_m2u_snoop_table_stru;
1023
1024 /* add snoop table */
1025 typedef struct {
1026 hi_u8 m2u_add_snoop_table;
1027 } mac_add_m2u_snoop_table_stru;
1028
1029 typedef struct {
1030 hi_u8 proxyarp;
1031 hi_u8 auc_rsv[3]; /* 3 BYTE保留字段 */
1032 } mac_proxyarp_en_stru;
1033
1034 typedef struct {
1035 hi_u64 ull_cookie;
1036 hi_u32 listen_duration; /* 监听时间 */
1037 hi_u8 uc_listen_channel; /* 监听的信道 */
1038 wlan_channel_bandwidth_enum_uint8 listen_channel_type; /* 监听信道类型 */
1039 hi_u8 home_channel; /* 监听结束返回的信道 */
1040 wlan_channel_bandwidth_enum_uint8 home_channel_type; /* 监听结束,返回主信道类型 */
1041 /* P2P0和P2P_CL 公用VAP 结构,保存进入监听前VAP 的状态,便于监听结束时恢复该状态 */
1042 mac_vap_state_enum_uint8 last_vap_state;
1043 wlan_channel_band_enum_uint8 band;
1044 hi_u16 resv;
1045 oal_ieee80211_channel_stru st_listen_channel;
1046 } mac_remain_on_channel_param_stru;
1047
1048 /* WPAS 管理帧发送结构 */
1049 typedef struct {
1050 hi_s32 channel;
1051 hi_u8 mgmt_frame_id;
1052 hi_u8 rsv;
1053 hi_u16 us_len;
1054 const hi_u8 *puc_frame;
1055 } mac_mgmt_frame_stru;
1056
1057 /* P2P发送action帧状态结构体 */
1058 typedef struct {
1059 hi_u8 *puc_buf;
1060 hi_u32 len;
1061 hi_u8 ack;
1062 hi_u8 resv[3]; /* 3 BYTE保留字段 */
1063 } mac_p2p_tx_status_stru;
1064
1065 #ifdef _PRE_WLAN_FEATURE_WOW
1066 /* WOW ssid wakeup 参数配置,所有配置 */
1067 typedef struct {
1068 hi_u8 ssid_set_flag;
1069 hi_s8 ac_ssid[WLAN_SSID_MAX_LEN]; /* 32+1 */
1070 hi_u8 auc_res[2]; /* 2 BYTE保留字段 */
1071 } wow_ssid_cfg_stru;
1072 #endif
1073
1074 #ifdef _PRE_WLAN_FEATURE_WOW_ROM
1075 /* WOW netpattern 参数配置,单个配置 */
1076 typedef struct {
1077 hi_u8 auc_pattern_data[WOW_NETPATTERN_MAX_LEN];
1078 hi_u32 pattern_len;
1079 } wow_pattern_stru;
1080
1081 /* WOW netpattern 参数配置,所有配置 */
1082 typedef struct {
1083 wow_pattern_stru ast_pattern[WOW_NETPATTERN_MAX_NUM];
1084 hi_u16 us_pattern_map;
1085 hi_u16 us_pattern_num;
1086 } wow_pattern_cfg_stru;
1087
1088 typedef struct {
1089 hi_u8 wow_en;
1090 hi_u8 auc_res[3]; /* 复用为pno配置auc_res[0]为扫描信道,auc_res[1]和auc_res[2]为pno周期,总3byte */
1091 hi_u32 wow_event;
1092 wow_pattern_cfg_stru wow_pattern;
1093 } mac_wow_cfg_stu;
1094 #endif
1095
1096 /* RF寄存器定制化结构体 */
1097 typedef struct {
1098 hi_u16 us_rf_reg117;
1099 hi_u16 us_rf_reg123;
1100 hi_u16 us_rf_reg124;
1101 hi_u16 us_rf_reg125;
1102 hi_u16 us_rf_reg126;
1103 hi_u8 auc_resv[2]; /* 2 BYTE 保留字段 */
1104 } mac_cus_dts_rf_reg;
1105
1106 /* FCC认证 参数结构体 */
1107 typedef struct {
1108 hi_u8 index; /* 下标表示偏移 */
1109 hi_u8 max_txpower; /* 最大发送功率 */
1110 hi_u8 dbb_scale; /* dbb scale */
1111 hi_u8 uc_resv;
1112 } mac_cus_band_edge_limit_stru;
1113
1114 /* 定制化 校准配置参数 */
1115 typedef struct {
1116 /* dts */
1117 hi_u16 aus_cali_txpwr_pa_dc_ref_2g_val[13]; /* txpwr分信道ref值,占13 short */
1118 hi_s16 us_cali_txpwr_pa_dc_ref_5g_val_band1;
1119 hi_s16 us_cali_txpwr_pa_dc_ref_5g_val_band2;
1120 hi_s16 us_cali_txpwr_pa_dc_ref_5g_val_band3;
1121 hi_s16 us_cali_txpwr_pa_dc_ref_5g_val_band4;
1122 hi_s16 us_cali_txpwr_pa_dc_ref_5g_val_band5;
1123 hi_s16 us_cali_txpwr_pa_dc_ref_5g_val_band6;
1124 hi_s16 us_cali_txpwr_pa_dc_ref_5g_val_band7;
1125 hi_s8 band_5g_enable;
1126 hi_u8 tone_amp_grade;
1127 hi_s8 auc_resv_wifi_cali[2]; /* 占2 BYTE */
1128 /* bt tmp */
1129 hi_u16 us_cali_bt_txpwr_pa_ref_band1;
1130 hi_u16 us_cali_bt_txpwr_pa_ref_band2;
1131 hi_u16 us_cali_bt_txpwr_pa_ref_band3;
1132 hi_u16 us_cali_bt_txpwr_pa_ref_band4;
1133 hi_u16 us_cali_bt_txpwr_pa_ref_band5;
1134 hi_u16 us_cali_bt_txpwr_pa_ref_band6;
1135 hi_u16 us_cali_bt_txpwr_pa_ref_band7;
1136 hi_u16 us_cali_bt_txpwr_pa_ref_band8;
1137 hi_u16 us_cali_bt_txpwr_numb;
1138 hi_u16 us_cali_bt_txpwr_pa_fre1;
1139 hi_u16 us_cali_bt_txpwr_pa_fre2;
1140 hi_u16 us_cali_bt_txpwr_pa_fre3;
1141 hi_u16 us_cali_bt_txpwr_pa_fre4;
1142 hi_u16 us_cali_bt_txpwr_pa_fre5;
1143 hi_u16 us_cali_bt_txpwr_pa_fre6;
1144 hi_u16 us_cali_bt_txpwr_pa_fre7;
1145 hi_u16 us_cali_bt_txpwr_pa_fre8;
1146 hi_u8 bt_tone_amp_grade;
1147 hi_u8 auc_resv_bt_cali[1];
1148 } mac_cus_dts_cali_stru;
1149
1150 /* dbb scaling 参数结构体 */
1151 typedef struct {
1152 hi_u32 dbb_scale[9]; /* DBB幅值 9 WORD */
1153 } dbb_scaling_stru;
1154
1155 typedef struct {
1156 hi_u32 tx_pwr[MAC_NUM_2G_CH_NUM]; /* FCC各信道各速率的发送功率 */
1157 } fcc_tx_pwr_stru;
1158
1159 typedef struct {
1160 hi_s16 high_temp_th; /* 高温阈值 */
1161 hi_s16 low_temp_th; /* 回滞低温阈值 */
1162 hi_s16 comp_val; /* 补偿值 */
1163 } freq_comp_stru;
1164 /* ======================== cfg id对应的get set函数 ==================================== */
1165 typedef struct {
1166 wlan_cfgid_enum_uint16 cfgid;
1167 hi_u8 auc_resv[2]; /* 2 字节对齐 */
1168 hi_u32 (*get_func)(mac_vap_stru *mac_vap, hi_u8 *puc_len, hi_u8 *puc_param);
1169 hi_u32 (*set_func)(mac_vap_stru *mac_vap, hi_u8 uc_len, hi_u8 *puc_param);
1170 } mac_cfgid_stru;
1171
1172 /* ****************************************************************************
1173 内联函数定义
1174 **************************************************************************** */
1175 #ifdef _PRE_WLAN_FEATURE_UAPSD
1176 /* ****************************************************************************
1177 功能描述 : 设置U-APSD使能
1178 修改历史 :
1179 **************************************************************************** */
mac_vap_set_uapsd_en(mac_vap_stru * mac_vap,hi_u8 value)1180 static inline hi_void mac_vap_set_uapsd_en(mac_vap_stru *mac_vap, hi_u8 value)
1181 {
1182 mac_vap->cap_flag.uapsd = (value) ? HI_TRUE : HI_FALSE;
1183 }
1184
1185 /* ****************************************************************************
1186 功能描述 : 读取beacon interval的值
1187 修改历史 :
1188 1.日 期 : 2013年1月15日
1189 作 者 : HiSilicon
1190 修改内容 : 新生成函数
1191 **************************************************************************** */
mac_vap_get_uapsd_en(const mac_vap_stru * mac_vap)1192 static inline hi_u8 mac_vap_get_uapsd_en(const mac_vap_stru *mac_vap)
1193 {
1194 return mac_vap->cap_flag.uapsd;
1195 }
1196
1197 /* ****************************************************************************
1198 功能描述 : 设置vap的uapsd参数
1199 返 回 值 : hi_void
1200 修改历史 :
1201 1.日 期 : 2015年4月20日
1202 作 者 : HiSilicon
1203 修改内容 : 新生成函数
1204 **************************************************************************** */
mac_vap_set_uapsd_para(mac_vap_stru * mac_vap,const mac_cfg_uapsd_sta_stru * uapsd_info)1205 static inline hi_void mac_vap_set_uapsd_para(mac_vap_stru *mac_vap, const mac_cfg_uapsd_sta_stru *uapsd_info)
1206 {
1207 hi_u8 ac;
1208
1209 mac_vap->sta_uapsd_cfg.max_sp_len = uapsd_info->max_sp_len;
1210 for (ac = 0; ac < WLAN_WME_AC_BUTT; ac++) {
1211 mac_vap->sta_uapsd_cfg.delivery_map = uapsd_info->delivery_map;
1212 mac_vap->sta_uapsd_cfg.trigger_map = uapsd_info->trigger_map;
1213 }
1214 }
1215 #endif
1216
1217 /* ****************************************************************************
1218 功能描述 : 检查dmac list的检查
1219 修改历史 :
1220 1.日 期 : 2015年04月02日
1221 作 者 : HiSilicon
1222 修改内容 : 新生成函数
1223 2.日 期 : 2015年05月02日
1224 作 者 : HiSilicon
1225 修改内容 : 修改函数名及返回值
1226 **************************************************************************** */
mac_vap_user_exist(const hi_list * new_code,const hi_list * head)1227 static inline hi_u8 mac_vap_user_exist(const hi_list *new_code, const hi_list *head)
1228 {
1229 hi_list *user_list_head = HI_NULL;
1230 hi_list *member_entry = HI_NULL;
1231
1232 hi_list_for_each_safe(member_entry, user_list_head, head) {
1233 if (new_code == member_entry) {
1234 return HI_TRUE;
1235 }
1236 }
1237 return HI_FALSE;
1238 }
1239
1240 #ifdef _PRE_WLAN_FEATURE_MESH_ROM
1241 /* ****************************************************************************
1242 功能描述 : 初始化Mesh相关Mib值
1243 修改历史 :
1244 1.日 期 : 2019年1月29日
1245 作 者 : HiSilicon
1246 修改内容 : 新生成函数
1247 **************************************************************************** */
mac_vap_init_mib_mesh(const mac_vap_stru * mac_vap)1248 static inline hi_void mac_vap_init_mib_mesh(const mac_vap_stru *mac_vap)
1249 {
1250 wlan_mib_ieee802dot11_stru *mib_info;
1251 mib_info = mac_vap->mib_info;
1252 mib_info->wlan_mib_sta_config.dot11_mesh_activated = (mac_vap->vap_mode == WLAN_VAP_MODE_MESH) ?
1253 HI_TRUE : HI_FALSE;
1254 mib_info->wlan_mib_mesh_sta_cfg.dot11_mesh_accepting_additional_peerings = HI_TRUE;
1255 mib_info->wlan_mib_mesh_sta_cfg.dot11_mesh_security_activated = HI_FALSE;
1256 mib_info->wlan_mib_mesh_sta_cfg.dot11_mesh_active_authentication_protocol = 0;
1257 mib_info->wlan_mib_mesh_sta_cfg.dot11_mbca_activated = HI_FALSE;
1258 }
1259 #endif
1260
1261 /* ****************************************************************************
1262 功能描述 : 设置vap的发送功率
1263 修改历史 :
1264 1.日 期 : 2015年4月20日
1265 作 者 : HiSilicon
1266 修改内容 : 新生成函数
1267 **************************************************************************** */
mac_vap_set_tx_power(mac_vap_stru * mac_vap,hi_u8 tx_power)1268 static inline hi_void mac_vap_set_tx_power(mac_vap_stru *mac_vap, hi_u8 tx_power)
1269 {
1270 mac_vap->tx_power = tx_power;
1271 }
1272
1273 /* ****************************************************************************
1274 功能描述 : 设置vap的aid
1275 修改历史 :
1276 1.日 期 : 2015年4月20日
1277 作 者 : HiSilicon
1278 修改内容 : 新生成函数
1279 **************************************************************************** */
mac_vap_set_aid(mac_vap_stru * mac_vap,hi_u16 us_aid)1280 static inline hi_void mac_vap_set_aid(mac_vap_stru *mac_vap, hi_u16 us_aid)
1281 {
1282 mac_vap->us_sta_aid = us_aid;
1283 }
1284
1285 /* ****************************************************************************
1286 功能描述 : 设置vap的assoc_vap_id 该参数只在STA有效
1287 修改历史 :
1288 1.日 期 : 2015年4月20日
1289 作 者 : HiSilicon
1290 修改内容 : 新生成函数
1291
1292 **************************************************************************** */
mac_vap_set_assoc_id(mac_vap_stru * mac_vap,hi_u8 assoc_vap_id)1293 static inline hi_void mac_vap_set_assoc_id(mac_vap_stru *mac_vap, hi_u8 assoc_vap_id)
1294 {
1295 mac_vap->assoc_vap_id = assoc_vap_id;
1296 }
1297
1298 /* ****************************************************************************
1299 功能描述 : 设置vap的assoc_vap_id 该参数只在STA有效
1300 修改历史 :
1301 1.日 期 : 2015年4月20日
1302 作 者 : HiSilicon
1303 修改内容 : 新生成函数
1304 **************************************************************************** */
mac_vap_set_uapsd_cap(mac_vap_stru * mac_vap,hi_u8 uapsd_cap)1305 static inline hi_void mac_vap_set_uapsd_cap(mac_vap_stru *mac_vap, hi_u8 uapsd_cap)
1306 {
1307 mac_vap->uapsd_cap = uapsd_cap & BIT0;
1308 }
1309
1310 /* ****************************************************************************
1311 功能描述 : 设置vap的p2p模式
1312 修改历史 :
1313 1.日 期 : 2015年4月20日
1314 作 者 : HiSilicon
1315 修改内容 : 新生成函数
1316 **************************************************************************** */
mac_vap_set_p2p_mode(mac_vap_stru * mac_vap,wlan_p2p_mode_enum_uint8 p2p_mode)1317 static inline hi_void mac_vap_set_p2p_mode(mac_vap_stru *mac_vap, wlan_p2p_mode_enum_uint8 p2p_mode)
1318 {
1319 mac_vap->p2p_mode = p2p_mode;
1320 }
1321
1322 /* ****************************************************************************
1323 功能描述 : 设置vap的组播用户id
1324 修改历史 :
1325 1.日 期 : 2015年4月20日
1326 作 者 : HiSilicon
1327 修改内容 : 新生成函数
1328 **************************************************************************** */
mac_vap_set_multi_user_idx(mac_vap_stru * mac_vap,hi_u8 multi_user_idx)1329 static inline hi_void mac_vap_set_multi_user_idx(mac_vap_stru *mac_vap, hi_u8 multi_user_idx)
1330 {
1331 mac_vap->multi_user_idx = multi_user_idx;
1332 }
1333
1334 /* ****************************************************************************
1335 功能描述 : 设置vap的常发payload长度
1336 修改历史 :
1337 1.日 期 : 2015年4月20日
1338 作 者 : HiSilicon
1339 修改内容 : 新生成函数
1340 **************************************************************************** */
mac_vap_set_al_tx_payload_flag(mac_vap_stru * mac_vap,hi_u8 paylod)1341 static inline hi_void mac_vap_set_al_tx_payload_flag(mac_vap_stru *mac_vap, hi_u8 paylod)
1342 {
1343 mac_vap->payload_flag = paylod;
1344 }
1345
1346 /* ****************************************************************************
1347 功能描述 : 设置vap的常发模式
1348 修改历史 :
1349 1.日 期 : 2015年4月20日
1350 作 者 : HiSilicon
1351 修改内容 : 新生成函数
1352 **************************************************************************** */
mac_vap_set_al_tx_first_run(mac_vap_stru * mac_vap,hi_u8 flag)1353 static inline hi_void mac_vap_set_al_tx_first_run(mac_vap_stru *mac_vap, hi_u8 flag)
1354 {
1355 mac_vap->first_run = flag;
1356 }
1357
1358 /* ****************************************************************************
1359 功能描述 : 设置vap的wmm update count
1360 修改历史 :
1361 1.日 期 : 2015年4月20日
1362 作 者 : HiSilicon
1363 修改内容 : 新生成函数
1364 **************************************************************************** */
mac_vap_set_wmm_params_update_count(mac_vap_stru * mac_vap,hi_u8 update_count)1365 static inline hi_void mac_vap_set_wmm_params_update_count(mac_vap_stru *mac_vap, hi_u8 update_count)
1366 {
1367 mac_vap->wmm_params_update_count = update_count;
1368 }
1369
1370 /* ****************************************************************************
1371 功能描述 : 设置vap的hide ssid
1372 修改历史 :
1373 1.日 期 : 2015年4月20日
1374 作 者 : HiSilicon
1375 修改内容 : 新生成函数
1376 **************************************************************************** */
mac_vap_set_hide_ssid(mac_vap_stru * mac_vap,hi_u8 value)1377 static inline hi_void mac_vap_set_hide_ssid(mac_vap_stru *mac_vap, hi_u8 value)
1378 {
1379 mac_vap->cap_flag.hide_ssid = value;
1380 }
1381
1382 /* ****************************************************************************
1383 功能描述 : 获取Vap的P2P模式
1384 修改历史 :
1385 1.日 期 : 2014年11月24日
1386 作 者 : HiSilicon
1387 修改内容 : 新生成函数
1388 **************************************************************************** */
mac_get_p2p_mode(const mac_vap_stru * mac_vap)1389 static inline wlan_p2p_mode_enum_uint8 mac_get_p2p_mode(const mac_vap_stru *mac_vap)
1390 {
1391 return (mac_vap->p2p_mode);
1392 }
1393
1394 /* ****************************************************************************
1395 功能描述 : 清除保存的ie
1396 输入参数 : mac_vap_stru *pst_mac_vap
1397 enum WPS_IE_TYPE en_type
1398 修改历史 :
1399 1.日 期 : 2015年4月28日
1400 作 者 : HiSilicon
1401 修改内容 : 新生成函数
1402 **************************************************************************** */
mac_vap_clear_app_ie(mac_vap_stru * mac_vap,en_app_ie_type_uint8 type)1403 static inline hi_void mac_vap_clear_app_ie(mac_vap_stru *mac_vap, en_app_ie_type_uint8 type)
1404 {
1405 if (type < OAL_APP_IE_NUM) {
1406 if (mac_vap->ast_app_ie[type].puc_ie != HI_NULL) {
1407 oal_mem_free(mac_vap->ast_app_ie[type].puc_ie);
1408 mac_vap->ast_app_ie[type].puc_ie = HI_NULL;
1409 }
1410 mac_vap->ast_app_ie[type].ie_len = 0;
1411 }
1412 return;
1413 }
1414
mac_vap_free_mib(mac_vap_stru * mac_vap)1415 static inline hi_void mac_vap_free_mib(mac_vap_stru *mac_vap)
1416 {
1417 if (mac_vap->mib_info != HI_NULL) {
1418 wlan_mib_ieee802dot11_stru *mib_info = mac_vap->mib_info;
1419 /* 先置空再释放 */
1420 mac_vap->mib_info = HI_NULL;
1421 oal_mem_free(mib_info);
1422 }
1423 }
1424
1425 /* ****************************************************************************
1426 功能描述 : legacy协议初始化vap能力
1427 修改历史 :
1428 1.日 期 : 2013年11月18日
1429 作 者 : HiSilicon
1430 修改内容 : 新生成函数
1431 **************************************************************************** */
mac_vap_cap_init_legacy(mac_vap_stru * mac_vap)1432 static inline hi_void mac_vap_cap_init_legacy(mac_vap_stru *mac_vap)
1433 {
1434 mac_vap->cap_flag.rifs_tx_on = HI_FALSE;
1435 mac_vap->cap_flag.smps = WLAN_MIB_MIMO_POWER_SAVE_MIMO;
1436 }
1437
1438 /* ****************************************************************************
1439 功能描述 : ht vht协议初始化vap能力
1440 修改历史 :
1441 1.日 期 : 2013年11月18日
1442 作 者 : HiSilicon
1443 修改内容 : 新生成函数
1444 **************************************************************************** */
mac_vap_cap_init_htvht(mac_vap_stru * mac_vap)1445 static inline hi_void mac_vap_cap_init_htvht(mac_vap_stru *mac_vap)
1446 {
1447 mac_vap->cap_flag.rifs_tx_on = HI_FALSE;
1448 mac_vap->cap_flag.smps = WLAN_MIB_MIMO_POWER_SAVE_MIMO;
1449 }
1450
1451 /* ****************************************************************************
1452 功能描述 : 设置BSSID
1453 输入参数 : [1]mac_vap,
1454 [2]puc_bssid
1455 [3]ssid_len
1456 返 回 值 : 无
1457 **************************************************************************** */
mac_vap_set_bssid(mac_vap_stru * mac_vap,const hi_u8 * puc_bssid,hi_u8 ssid_len)1458 static inline hi_void mac_vap_set_bssid(mac_vap_stru *mac_vap, const hi_u8 *puc_bssid, hi_u8 ssid_len)
1459 {
1460 if (memcpy_s(mac_vap->auc_bssid, WLAN_MAC_ADDR_LEN, puc_bssid, ssid_len) != EOK) {
1461 return;
1462 }
1463 }
1464
1465 /* ****************************************************************************
1466 功能描述 : VAP状态迁移事件以消息形式上报SDT
1467 输入参数 : en_vap_state:将要变为的状态
1468 修改历史 :
1469 1.日 期 : 2013年12月3日
1470 作 者 : HiSilicon
1471 修改内容 : 新生成函数
1472 **************************************************************************** */
mac_vap_state_change(mac_vap_stru * mac_vap,mac_vap_state_enum_uint8 vap_state)1473 static inline hi_void mac_vap_state_change(mac_vap_stru *mac_vap, mac_vap_state_enum_uint8 vap_state)
1474 {
1475 mac_vap->vap_state = vap_state;
1476 }
1477
1478 /* ****************************************************************************
1479 功能描述 : 查询自动保护机制是否开启
1480 修改历史 :
1481 1.日 期 : 2014年1月18日
1482 作 者 : HiSilicon
1483 修改内容 : 新生成函数
1484 **************************************************************************** */
mac_vap_protection_autoprot_is_enabled(const mac_vap_stru * mac_vap)1485 static inline hi_u8 mac_vap_protection_autoprot_is_enabled(const mac_vap_stru *mac_vap)
1486 {
1487 return mac_vap->protection.auto_protection;
1488 }
1489
1490 /* ****************************************************************************
1491 功能描述 : 获取vap的 mac地址
1492 输入参数 : dmac_vap_stru *pst_dmac_vap
1493 修改历史 :
1494 1.日 期 : 2015年7月17日
1495 作 者 : HiSilicon
1496 修改内容 : 新生成函数
1497 **************************************************************************** */
mac_vap_get_mac_addr(const mac_vap_stru * mac_vap)1498 static inline hi_u8 *mac_vap_get_mac_addr(const mac_vap_stru *mac_vap)
1499 {
1500 /* _PRE_WLAN_FEATURE_P2P + */
1501 if (is_p2p_dev(mac_vap)) {
1502 /* 获取P2P DEV MAC 地址,赋值到probe req 帧中 */
1503 return mac_vap->mib_info->wlan_mib_sta_config.auc_p2p0_dot11_station_id;
1504 } else {
1505 /* 设置地址2为自己的MAC地址 */
1506 return mac_vap->mib_info->wlan_mib_sta_config.auc_dot11_station_id;
1507 }
1508 }
1509
mac_protection_set_lsig_txop_mechanism(mac_vap_stru * mac_vap,hi_u8 flag)1510 static inline hi_void mac_protection_set_lsig_txop_mechanism(mac_vap_stru *mac_vap, hi_u8 flag)
1511 {
1512 /* 数据帧/管理帧发送时候,需要根据bit_lsig_txop_protect_mode值填写发送描述符中的L-SIG TXOP enable位 */
1513 mac_vap->protection.lsig_txop_protect_mode = flag;
1514 }
1515
1516 /* ****************************************************************************
1517 功能描述 : 检测认证方式是否匹配
1518 输入参数 : wlan_mib_ieee802dot11_stru *pst_mib_info
1519 hi_u8 uc_policy
1520 返 回 值 : hi_u8 HI_TRUE:匹配成功
1521 HI_FALSE:匹配失败
1522 修改历史 :
1523 1.日 期 : 2013年8月31日
1524 作 者 : HiSilicon
1525 修改内容 : 新生成函数
1526 **************************************************************************** */
mac_check_auth_policy(const wlan_mib_ieee802dot11_stru * mib_info,hi_u8 policy)1527 static inline hi_u8 mac_check_auth_policy(const wlan_mib_ieee802dot11_stru *mib_info, hi_u8 policy)
1528 {
1529 hi_u8 loop;
1530
1531 for (loop = 0; loop < MAC_AUTHENTICATION_SUITE_NUM; loop++) {
1532 /* 检测认证套件是否使能和匹配 */
1533 if ((mib_info->ast_wlan_mib_rsna_cfg_auth_suite[loop].dot11_rsna_config_authentication_suite_activated) &&
1534 (policy ==
1535 mib_info->ast_wlan_mib_rsna_cfg_auth_suite[loop].dot11_rsna_config_authentication_suite_implemented)) {
1536 return HI_TRUE;
1537 }
1538 }
1539 return HI_FALSE;
1540 }
1541
1542 /* ****************************************************************************
1543 函数声明
1544 **************************************************************************** */
1545 hi_void mac_dec_p2p_num(const mac_vap_stru *mac_vap);
1546 hi_void mac_inc_p2p_num(const mac_vap_stru *mac_vap);
1547 hi_u8 mac_is_wep_allowed(const mac_vap_stru *mac_vap);
1548 mac_wme_param_stru *mac_get_wmm_cfg(wlan_vap_mode_enum_uint8 vap_mode);
1549 hi_u32 mac_device_find_user_by_macaddr(const mac_vap_stru *mac_vap, const hi_u8 *sta_mac_addr, hi_u8 addr_len,
1550 hi_u8 *puc_user_idx);
1551 hi_void mac_protection_set_rts_tx_param(mac_vap_stru *mac_vap, hi_u8 flag, wlan_prot_mode_enum_uint8 prot_mode,
1552 mac_cfg_rts_tx_param_stru *rts_tx_param);
1553 hi_bool mac_protection_lsigtxop_check(const mac_vap_stru *mac_vap);
1554
1555 /* ****************************************************************************
1556 VAP操作函数
1557 **************************************************************************** */
1558 hi_u32 mac_vap_res_exit(hi_void);
1559 hi_u32 mac_vap_res_init(const hi_u8 vap_num);
1560 hi_u8 mac_vap_alloc_vap_res(hi_void);
1561 hi_void mac_vap_free_vap_res(hi_u8 idx);
1562 mac_vap_stru *mac_vap_get_vap_stru(hi_u8 idx);
1563 hi_u32 mac_vap_is_valid(hi_u8 idx);
1564 hi_void mac_vap_exit(mac_vap_stru *mac_vap);
1565 hi_void mac_vap_init_rates(mac_vap_stru *mac_vap);
1566 hi_void mac_vap_init_rates_by_protocol(mac_vap_stru *mac_vap, wlan_protocol_enum_uint8 vap_protocol,
1567 mac_data_rate_stru *rates);
1568 hi_u32 mac_vap_del_user(mac_vap_stru *mac_vap, hi_u8 user_idx);
1569 hi_u32 mac_vap_add_assoc_user(mac_vap_stru *mac_vap, hi_u8 user_idx);
1570 hi_u32 mac_vap_find_user_by_macaddr(mac_vap_stru *mac_vap, const hi_u8 *sta_mac_addr, hi_u8 mac_addr_len,
1571 hi_u8 *puc_user_idx);
1572 hi_u32 mac_vap_init(mac_vap_stru *mac_vap, hi_u8 vap_id, const mac_cfg_add_vap_param_stru *param);
1573 hi_void mac_vap_init_wme_param(const mac_vap_stru *mac_vap);
1574 hi_void mac_vap_check_bss_cap_info_phy_ap(hi_u16 us_cap_info, const mac_vap_stru *mac_vap);
1575 hi_void mac_vap_get_bandwidth_cap(mac_vap_stru *mac_vap, wlan_bw_cap_enum_uint8 *pen_cap);
1576 hi_void mac_vap_init_user_security_port(const mac_vap_stru *mac_vap, mac_user_stru *mac_user);
1577 hi_void mac_vap_change_mib_by_bandwidth(const mac_vap_stru *mac_vap, wlan_channel_bandwidth_enum_uint8 bandwidth);
1578 hi_u32 mac_vap_config_vht_ht_mib_by_protocol(const mac_vap_stru *mac_vap);
1579 hi_u32 mac_vap_set_default_key(const mac_vap_stru *mac_vap, hi_u8 key_index);
1580 hi_u32 mac_vap_set_default_mgmt_key(const mac_vap_stru *mac_vap, hi_u8 key_index);
1581 hi_u32 mac_vap_set_beacon(mac_vap_stru *mac_vap, const mac_beacon_param_stru *beacon_param);
1582 hi_u32 mac_vap_add_beacon(mac_vap_stru *mac_vap, const mac_beacon_param_stru *beacon_param);
1583 hi_u32 mac_vap_init_by_protocol(mac_vap_stru *mac_vap, wlan_protocol_enum_uint8 protocol);
1584 hi_u32 mac_vap_save_app_ie(mac_vap_stru *mac_vap, const oal_app_ie_stru *app_ie, en_app_ie_type_uint8 type);
1585 hi_u32 mac_vap_init_privacy(mac_vap_stru *mac_vap, mac_cfg80211_connect_security_stru *mac_sec_param);
1586 hi_u32 mac_vap_set_current_channel(mac_vap_stru *mac_vap, wlan_channel_band_enum_uint8 band, hi_u8 channel);
1587 hi_u32 mac_vap_add_key(const mac_vap_stru *mac_vap, mac_user_stru *mac_user, hi_u8 key_id,
1588 const mac_key_params_stru *key);
1589 hi_u8 mac_vap_get_default_key_id(const mac_vap_stru *mac_vap);
1590 hi_u8 mac_vap_get_curr_baserate(mac_vap_stru *mac_vap, hi_u8 br_idx);
1591 mac_user_stru *mac_vap_get_user_by_addr(mac_vap_stru *mac_vap, const hi_u8 *mac_addr);
1592 #ifdef _PRE_WLAN_FEATURE_MESH
1593 hi_void mac_vap_set_mib_mesh(const mac_vap_stru *mac_vap, hi_u8 mesh_auth_protocol);
1594 #endif
1595 wlan_prot_mode_enum_uint8 mac_vap_get_user_protection_mode(const mac_vap_stru *mac_vap, const mac_user_stru *mac_user);
1596 hi_void mac_vap_set_cb_tx_user_idx(mac_vap_stru *mac_vap, hi_void *tx_ctl, const hi_u8 *mac_addr);
1597
1598 #ifdef __cplusplus
1599 #if __cplusplus
1600 }
1601 #endif
1602 #endif
1603 #endif /* __MAC_VAP_H__ */
1604