• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 HiSilicon (Shanghai) Technologies CO., LIMITED.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17  */
18 
19 #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