1 /*
2 * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 * Description: Header file of mac_device_etc.c.
15 * Create: 2020-7-8
16 */
17 #ifndef __MAC_DEVICE_EXT_H__
18 #define __MAC_DEVICE_EXT_H__
19
20 #include "mac_frame.h"
21
22 #include "mac_regdomain.h"
23 #include "wlan_spec.h"
24 #include "wlan_mib_hcm.h"
25 #include "wlan_types_common.h"
26 #include "frw_osal.h"
27
28 #include "oam_ext_if.h"
29
30 #include "frw_ext_if.h"
31 #include "hal_common_ops.h"
32
33 #include "osal_types.h"
34 #include "osal_adapt.h"
35 #include "oal_ext_if.h"
36 #include "hal_ext_if.h"
37 #include "wlan_resource_common.h"
38 #ifdef CONFIG_HAS_EARLYSUSPEND
39 #include <linux/earlysuspend.h>
40 #endif
41
42 #ifdef __cplusplus
43 #if __cplusplus
44 extern "C" {
45 #endif
46 #endif
47
48 /*****************************************************************************
49 宏定义
50 *****************************************************************************/
51 #define MAC_NET_DEVICE_NAME_LENGTH 16
52 #define MAC_BAND_CAP_NAME_LENGTH 16
53 #define MAC_DATARATES_PHY_80211G_NUM 12
54
55 #define MAC_EXCEPTION_TIME_OUT 10000
56 #define MULTI_BSSID_BITMAP 32
57 #define WLAN_USER_MAX_SUPP_RATES 16 /* 用于记录对端设备支持的速率最大个数 */
58
59 /* 复位状态 */
60 #define mac_device_get_cap_bw(_pst_device) ((_pst_device)->device_cap.channel_width)
61 #define mac_device_get_nss_num(_pst_device) ((_pst_device)->device_cap.nss_num)
62 #define mac_device_get_cap_ldpc(_pst_device) ((_pst_device)->device_cap.ldpc_is_supp)
63 #define mac_device_get_cap_txstbc(_pst_device) ((_pst_device)->device_cap.tx_stbc_is_supp)
64 #define mac_device_get_cap_rxstbc(_pst_device) ((_pst_device)->device_cap.rx_stbc_is_supp)
65 #define mac_device_get_cap_subfer(_pst_device) ((_pst_device)->device_cap.su_bfmer_is_supp)
66 #define mac_device_get_cap_subfee(_pst_device) ((_pst_device)->device_cap.su_bfmee_is_supp)
67 #define mac_device_get_cap_mubfer(_pst_device) ((_pst_device)->device_cap.mu_bfmer_is_supp)
68 #define mac_device_get_cap_mubfee(_pst_device) ((_pst_device)->device_cap.mu_bfmee_is_supp)
69 #define mac_device_get_cap_rx_mtid(_pst_device) ((_pst_device)->device_cap.mtid_aggregation_rx_support)
70 #define mac_device_get_cap_32bitmap(_pst_device) ((_pst_device)->device_cap.ba_bitmap_support_32bit)
71 #ifdef _PRE_WLAN_FEATURE_SMPS
72 #define mac_device_get_mode_smps(_pst_device) ((_pst_device)->mac_smps_mode)
73 #endif
74
75 #define MAX_PNO_SSID_COUNT 16
76 #define MAX_PNO_REPEAT_TIMES 4
77 #define PNO_SCHED_SCAN_INTERVAL (60 * 1000)
78
79 /* DMAC SCANNER 扫描模式 */
80 #define MAC_SCAN_FUNC_MEAS 0x1
81 #define MAC_SCAN_FUNC_STATS 0x2
82 #define MAC_SCAN_FUNC_RADAR 0x4
83 #define MAC_SCAN_FUNC_BSS 0x8
84 #define MAC_SCAN_FUNC_P2P_LISTEN 0x10
85 #define MAC_SCAN_FUNC_ALL (MAC_SCAN_FUNC_MEAS | MAC_SCAN_FUNC_STATS | MAC_SCAN_FUNC_RADAR | MAC_SCAN_FUNC_BSS)
86
87 #define MAC_SCAN_CHANNEL_INTERVAL_DEFAULT 6 /* 间隔6个信道,切回工作信道工作一段时间 */
88 #define MAC_WORK_TIME_ON_HOME_CHANNEL_DEFAULT 110 /* 背景扫描时,返回工作信道工作的时间 */
89 #define MAC_SCAN_CHANNEL_INTERVAL_PERFORMANCE 2 /* 间隔2个信道,切回工作信道工作一段时间 */
90 #define MAC_WORK_TIME_ON_HOME_CHANNEL_PERFORMANCE 60 /* WLAN未关联,P2P关联,返回工作信道工作的时间 */
91
92 #ifdef _PRE_WLAN_FEATURE_DBAC
93 #define mac_dbac_enable(_pst_device) (_pst_device->en_dbac_enabled == OAL_TRUE)
94 #else
95 #define mac_dbac_enable(_pst_device) (OAL_FALSE)
96 #endif
97
98 #define MAC_FCS_DBAC_IGNORE 0 /* 不是DBAC场景 */
99 #define MAC_FCS_DBAC_NEED_CLOSE 1 /* DBAC需要关闭 */
100 #define MAC_FCS_DBAC_NEED_OPEN 2 /* DBAC需要开启 */
101
102 #define BTCOEX_BSS_NUM_IN_BLACKLIST 16
103
104 /* 特性宏END,第二阶段需要挪走 */
105
106 /*****************************************************************************
107 枚举定义
108 *****************************************************************************/
109 typedef enum {
110 MAC_CH_TYPE_NONE = 0,
111 MAC_CH_TYPE_PRIMARY = 1,
112 MAC_CH_TYPE_SECONDARY = 2,
113
114 MAC_CH_TYPE__BUTT
115 } mac_ch_type_enum;
116 typedef osal_u8 mac_ch_type_enum_uint8;
117
118 typedef enum {
119 MAC_CHAN_NOT_SUPPORT = 0, /* 管制域不支持该信道 */
120 MAC_CHAN_AVAILABLE_ALWAYS, /* 信道一直可以使用 */
121 MAC_CHAN_AVAILABLE_TO_OPERATE, /* 经过检测(CAC, etc...)后,该信道可以使用 */
122 MAC_CHAN_DFS_REQUIRED, /* 该信道需要进行雷达检测 */
123 MAC_CHAN_BLOCK_DUE_TO_RADAR, /* 由于检测到雷达导致该信道变的不可用 */
124
125 MAC_CHAN_STATUS_BUTT
126 } mac_chan_status_enum;
127 typedef osal_u8 mac_chan_status_enum_uint8;
128
129 /* device reset同步子类型枚举 */
130 typedef enum {
131 MAC_RESET_SWITCH_SET_TYPE,
132 MAC_RESET_SWITCH_GET_TYPE,
133 MAC_RESET_STATUS_GET_TYPE,
134 MAC_RESET_STATUS_SET_TYPE,
135 MAC_RESET_SWITCH_SYS_TYPE = MAC_RESET_SWITCH_SET_TYPE,
136 MAC_RESET_STATUS_SYS_TYPE = MAC_RESET_STATUS_SET_TYPE,
137
138 MAC_RESET_SYS_TYPE_BUTT
139 } mac_reset_sys_type_enum;
140 typedef osal_u8 mac_reset_sys_type_enum_uint8;
141
142 typedef enum {
143 MAC_REPORT_INFO_FLAGS_HARDWARE_INFO = BIT0,
144 MAC_REPORT_INFO_FLAGS_QUEUE_INFO = BIT1,
145 MAC_REPORT_INFO_FLAGS_MEMORY_INFO = BIT2,
146 MAC_REPORT_INFO_FLAGS_EVENT_INFO = BIT3,
147 MAC_REPORT_INFO_FLAGS_VAP_INFO = BIT4,
148 MAC_REPORT_INFO_FLAGS_USER_INFO = BIT5,
149 MAC_REPORT_INFO_FLAGS_TXRX_PACKET_STATISTICS = BIT6,
150 MAC_REPORT_INFO_FLAGS_BUTT,
151 } mac_report_info_flags;
152 typedef osal_u8 mac_report_info_flags_enum_uint8;
153
154 typedef enum {
155 MAC_DEVICE_DISABLE = 0,
156 MAC_DEVICE_2G,
157 MAC_DEVICE_5G,
158 MAC_DEVICE_2G_5G,
159
160 MAC_DEVICE_BUTT,
161 } mac_device_radio_cap_enum;
162 typedef osal_u8 mac_device_radio_cap_enum_uint8;
163
164 /* 特性枚举START,第二阶段需要挪走 */
165 typedef enum {
166 MAC_DFR_TIMER_STEP_1 = 0,
167 MAC_DFR_TIMER_STEP_2 = 1,
168 } mac_dfr_timer_step_enum;
169 typedef osal_u8 mac_dfr_timer_step_enum_uint8;
170
171 #if (_PRE_OS_VERSION_LITEOS == _PRE_OS_VERSION)
172 /* 设置发送描述符帧类型枚举 */
173 typedef enum {
174 MAC_SET_DSCR_TYPE_UCAST_DATA = 0, /* 单播数据帧 */
175 MAC_SET_DSCR_TYPE_MCAST_DATA, /* 组播数据帧 */
176 MAC_SET_DSCR_TYPE_BCAST_DATA, /* 广播数据帧 */
177 MAC_SET_DSCR_TYPE_UCAST_MGMT_2G, /* 单播管理帧,仅2G */
178 MAC_SET_DSCR_TYPE_MBCAST_MGMT_2G, /* 组、广播管理帧,仅2G */
179
180 MAC_SET_DSCR_TYPE_BUTT,
181 } mac_set_dscr_frame_type_enum;
182 typedef td_u8 mac_set_dscr_frame_type_enum_uint8;
183 #endif
184
185 typedef enum {
186 MAC_SDT_MODE_WRITE = 0,
187 MAC_SDT_MODE_READ,
188 MAC_SDT_MODE_WRITE16,
189 MAC_SDT_MODE_READ16,
190
191 MAC_SDT_MODE_BUTT
192 } mac_sdt_rw_mode_enum;
193 typedef osal_u8 mac_sdt_rw_mode_enum_uint8;
194
195 typedef enum {
196 MAC_CSA_FLAG_NORMAL = 0,
197 MAC_CSA_FLAG_START_DEBUG, /* 固定csa ie 在beacon帧中 */
198 MAC_CSA_FLAG_CANCLE_DEBUG,
199
200 MAC_CSA_FLAG_BUTT
201 } mac_csa_flag_enum;
202 typedef osal_u8 mac_csa_flag_enum_uint8;
203
204 /* 配置命令使用,mimo-siso切换mode */
205 typedef enum {
206 MAC_M2S_MODE_QUERY = 0, /* 参数查询模式 */
207 MAC_M2S_MODE_MSS = 1, /* MSS下发模式 */
208 MAC_M2S_MODE_DELAY_SWITCH = 2, /* 延迟切换测试模式 */
209 MAC_M2S_MODE_SW_TEST = 3, /* 软切换测试模式,测试siso和mimo */
210 MAC_M2S_MODE_HW_TEST = 4, /* 硬切换测试模式,测试siso和mimo */
211 MAC_M2S_MODE_RSSI = 5, /* rssi切换 */
212
213 MAC_M2S_MODE_BUTT,
214 } mac_m2s_mode_enum;
215 typedef osal_u8 mac_m2s_mode_enum_uint8;
216
217 /* 配置命令使用,期望切换状态 */
218 typedef enum {
219 MAC_M2S_COMMAND_STATE_SISO_C0 = 0,
220 MAC_M2S_COMMAND_STATE_SISO_C1 = 1,
221 MAC_M2S_COMMAND_STATE_MIMO = 2,
222 MAC_M2S_COMMAND_STATE_MISO_C0 = 3,
223 MAC_M2S_COMMAND_STATE_MISO_C1 = 4,
224
225 MAC_M2S_COMMAND_STATE_BUTT,
226 } mac_m2s_command_state_enum;
227 typedef osal_u8 mac_m2s_command_state_enum_uint8;
228
229 /* MSS使用时命令形式 */
230 typedef enum {
231 MAC_M2S_COMMAND_MODE_SET_AUTO = 0,
232 MAC_M2S_COMMAND_MODE_SET_SISO_C0 = 1,
233 MAC_M2S_COMMAND_MODE_SET_SISO_C1 = 2,
234 MAC_M2S_COMMAND_MODE_SET_MIMO = 3,
235 MAC_M2S_COMMAND_MODE_GET_STATE = 4,
236
237 MAC_M2S_COMMAND_MODE_BUTT,
238 } mac_m2s_command_mode_enum;
239 typedef osal_u8 mac_m2s_command_mode_enum_uint8;
240
241 /* 配置接收功率参数 */
242 typedef enum {
243 HAL_M2S_RSSI_SHOW_TH,
244 HAL_M2S_RSSI_SHOW_MGMT,
245 HAL_M2S_RSSI_SHOW_DATA,
246 HAL_M2S_RSSI_SET_MIN_TH,
247 HAL_M2S_RSSI_SET_DIFF_TH,
248 } hal_dev_rssi_enum;
249 typedef osal_u8 hal_dev_rssi_enum_uint8;
250
251 typedef enum {
252 MAC_PM_DEBUG_SISO_RECV_BCN = 0,
253 MAC_PM_DEBUG_NO_PS_FRM_INT = 1,
254 MAC_PM_DEBUG_APF = 2,
255 MAC_PM_DEBUG_AO = 3,
256
257 MAC_PM_DEBUG_CFG_BUTT
258 } mac_pm_debug_cfg_enum;
259 typedef osal_u8 mac_pm_debug_cfg_enum_uint8;
260
261 typedef enum {
262 MAC_DBDC_CHANGE_HAL_DEV = 0, /* vap change hal device hal vap */
263 MAC_DBDC_SWITCH = 1, /* DBDC软件开关 */
264 MAC_FAST_SCAN_SWITCH = 2, /* 并发扫描开关 */
265 MAC_DBDC_STATUS = 3, /* DBDC状态查询 */
266
267 MAC_DBDC_CMD_BUTT
268 } mac_dbdc_cmd_enum;
269 typedef osal_u8 mac_dbdc_cmd_enum_uint8;
270
271 typedef enum {
272 MAC_ACS_RSN_INIT,
273 MAC_ACS_RSN_LONG_TX_BUF,
274 MAC_ACS_RSN_LARGE_PER,
275 MAC_ACS_RSN_MWO_DECT,
276 MAC_ACS_RSN_RADAR_DECT,
277
278 MAC_ACS_RSN_BUTT
279 } mac_acs_rsn_enum;
280 typedef osal_u8 mac_acs_rsn_enum_uint8;
281
282 typedef enum {
283 MAC_ACS_SW_NONE = 0x0,
284 MAC_ACS_SW_INIT = 0x1,
285 MAC_ACS_SW_DYNA = 0x2,
286 MAC_ACS_SW_BOTH = 0x3,
287
288 MAC_ACS_SW_BUTT
289 } mac_acs_sw_enum;
290 typedef osal_u8 mac_acs_sw_enum_uint8;
291
292 typedef enum {
293 MAC_ACS_SET_CH_DNYA = 0x0,
294 MAC_ACS_SET_CH_INIT = 0x1,
295
296 MAC_ACS_SET_CH_BUTT
297 } mac_acs_set_ch_enum;
298 typedef osal_u8 mac_acs_set_ch_enum_uint8;
299
300 typedef enum {
301 MAC_RSSI_LIMIT_SHOW_INFO,
302 MAC_RSSI_LIMIT_ENABLE,
303 MAC_RSSI_LIMIT_DELTA,
304 MAC_RSSI_LIMIT_THRESHOLD,
305
306 MAC_RSSI_LIMIT_TYPE_BUTT
307 } mac_rssi_limit_type_enum;
308 typedef osal_u8 mac_rssi_limit_type_enum_uint8;
309
310 typedef struct {
311 oal_bool_enum_uint8 en_11k;
312 oal_bool_enum_uint8 en_11v;
313 oal_bool_enum_uint8 en_11r;
314 oal_bool_enum_uint8 en_11r_ds;
315 } mac_device_voe_custom_stru;
316
317 /*****************************************************************************
318 结构体定义
319 *****************************************************************************/
320 typedef struct {
321 osal_u8 rx_ba_lut_idx_table[MAC_RX_BA_LUT_BMAP_LEN]; /* 接收端BA LUT表位图 */
322 } mac_lut_table_stru;
323
324 /* chip结构体 */
325 typedef struct {
326 /* CHIP下挂的DEV,仅记录对应的ID索引值 */
327 osal_u8 device_id[WLAN_SERVICE_DEVICE_MAX_NUM_PER_CHIP];
328 osal_u8 device_nums; /* chip下device的数目 */
329 osal_u8 chip_id; /* 芯片ID */
330 oal_bool_enum_uint8 chip_state; /* 标识是否已初始化 */
331 osal_u32 chip_ver; /* 芯片版本 */
332 hal_to_dmac_chip_stru *hal_chip; /* 硬mac结构指针,HAL提供,用于逻辑和物理chip的对应 */
333 mac_lut_table_stru lut_table; /* 软件维护LUT表资源的结构体 */
334 void *p_alg_priv; /* chip级别算法私有结构体 */
335
336 /* 用户相关成员变量 */
337 frw_timeout_stru active_user_timer; /* 用户活跃定时器 */
338 } mac_chip_stru;
339
340 /* board结构体 */
341 typedef struct {
342 mac_chip_stru chip[WLAN_CHIP_MAX_NUM_PER_BOARD]; /* board挂接的芯片 */
343 osal_u8 chip_id_bitmap; /* 标识chip是否被分配的位图 */
344 osal_u8 auc_resv[3]; /* 字节对齐 */
345 } mac_board_stru;
346
347 typedef struct {
348 osal_u16 num_networks; /* 记录当前信道下扫描到的BSS个数 */
349 osal_u8 resv[2]; /* 预留2字节对齐 */
350 osal_u8 bssid_array[WLAN_MAX_SCAN_BSS_PER_CH][WLAN_MAC_ADDR_LEN]; /* 记录当前信道下扫描到的所有BSSID */
351 } mac_bss_id_list_stru;
352
353 /* device reset事件同步结构体 */
354 typedef struct {
355 mac_reset_sys_type_enum_uint8 reset_sys_type; /* 复位同步类型 */
356 osal_u8 value; /* 同步信息值 */
357 osal_u8 resv[2]; /* 预留2字节对齐 */
358 } mac_reset_sys_stru;
359
360 typedef struct {
361 osal_u16 num_networks;
362 mac_ch_type_enum_uint8 ch_type;
363 #ifdef _PRE_WLAN_FEATURE_DFS
364 mac_chan_status_enum_uint8 ch_status;
365 #else
366 osal_u8 auc_resv[1];
367 #endif
368 } mac_ap_ch_info_stru;
369
370 typedef struct {
371 /* 支持2*2 */ /* 支持MU-MIMO */
372 wlan_nss_enum_uint8 nss_num : 4; /* device Nss 空间流最大个数 */
373 wlan_bw_cap_enum_uint8 channel_width : 4; /* 支持的带宽 */
374
375 oal_bool_enum_uint8 nb_is_supp : 1; /* 支持窄带 */
376 oal_bool_enum_uint8 is_supp_1024qam : 1; /* 支持1024QAM速率 */
377 oal_bool_enum_uint8 mc_is_supp_80211 : 1; /* 支持80211 mc */
378 oal_bool_enum_uint8 ldpc_is_supp : 1; /* 是否支持接收LDPC编码的包 */
379 oal_bool_enum_uint8 tx_stbc_is_supp : 1; /* 是否支持最少2x1 STBC发送 */
380 oal_bool_enum_uint8 rx_stbc_is_supp : 1; /* 是否支持stbc接收,支持2个空间流 */
381 oal_bool_enum_uint8 su_bfmer_is_supp : 1; /* 是否支持单用户beamformer */
382 oal_bool_enum_uint8 su_bfmee_is_supp : 1; /* 是否支持单用户beamformee */
383
384 oal_bool_enum_uint8 mu_bfmer_is_supp : 1; /* 是否支持多用户beamformer */
385 oal_bool_enum_uint8 mu_bfmee_is_supp : 1; /* 是否支持多用户beamformee */
386 oal_bool_enum_uint8 switch_11ax : 1; /* 11ax开关 */
387 oal_bool_enum_uint8 ba_bitmap_support_32bit : 1;
388 osal_u8 mtid_aggregation_rx_support : 3;
389 oal_bool_enum_uint8 resv : 1;
390
391 oal_bool_enum_uint8 resv1;
392 } mac_device_capability_stru;
393
394 typedef struct {
395 osal_u32 cmd_bit_map;
396 osal_u8 srb_switch; /* siso收beacon开关 */
397 osal_u8 dto_switch; /* 动态tbtt offset开关 */
398 osal_u8 nfi_switch;
399 osal_u8 apf_switch;
400 osal_u8 ao_switch;
401 } mac_pm_debug_cfg_stru;
402
403 #ifdef _PRE_WLAN_FEATURE_11AX
404 /* 80211ax新增的ELEMENT结构 */
405 typedef struct {
406 osal_u8 ext_eid;
407 osal_u8 element_body_len;
408 osal_u8 *element_body;
409 } mac_11ax_element_stru;
410 #endif
411
412 typedef struct {
413 osal_u32 tx_seqnum; /* 最近一次tx上报的SN号 */
414 osal_u16 seqnum_used_times; /* 软件使用了tx_seqnum的次数 */
415 osal_u16 incr_constant; /* 维护非Qos 分片帧的递增常量 */
416 } mac_tx_seqnum_struc;
417
418 /* hmac侧扫描结果超过阈值信息的结构体 */
419 typedef struct {
420 osal_u8 exceed_count; // 当前超过阈值的次数
421 osal_u8 exceed_limit; // 超过阈值的限制次数 当exceed_count >= exceed_limit时, 信道随机化
422 osal_bool randomize; // 信道是否需要随机化
423 } hmac_bss_list_exceed_info_stru;
424
425 /* 存储在hmac device下的扫描结果维护的结构体 */
426 typedef struct {
427 osal_spinlock lock;
428 struct osal_list_head bss_list_head;
429 osal_u32 bss_num;
430 hmac_bss_list_exceed_info_stru bss_list_exceed_info;
431 } hmac_bss_mgmt_stru;
432
433 typedef struct {
434 wlan_m2s_mgr_vap_stru m2s_blacklist[WLAN_M2S_BLACKLIST_MAX_NUM];
435 osal_u8 blacklist_cnt;
436 } mac_m2s_ie_stru;
437
438 typedef struct {
439 mac_rssi_limit_type_enum_uint8 rssi_limit_type; /* 4种参数类型 */
440 oal_bool_enum_uint8 rssi_limit_enable_flag;
441 osal_s8 rssi;
442 osal_s8 rssi_delta;
443 } mac_cfg_rssi_limit_stru;
444
445 #ifdef _PRE_WLAN_FEATURE_NEGTIVE_DET
446 typedef struct {
447 oal_bool_enum_uint8 is_pk_mode;
448 wlan_bw_cap_enum_uint8 curr_bw_cap; /* 目前使用的带宽,本参数仅在lagency sta模式下生效 */
449 wlan_protocol_cap_enum_uint8 curr_protocol_cap; /* 目前使用的协议模式,本参数仅在lagency sta模式下生效 */
450 wlan_nss_enum_uint8 curr_num_spatial_stream; /* 目前单双流的计数 */
451
452 osal_u32 tx_bytes; /* WIFI 业务发送帧统计 */
453 osal_u32 rx_bytes; /* WIFI 业务接收帧统计 */
454 osal_u32 dur_time; /* 统计时间间隔 */
455 } mac_cfg_pk_mode_stru;
456 #endif
457
458 /* 黑名单 */
459 typedef struct {
460 osal_u8 auc_mac_addr[OAL_MAC_ADDR_LEN]; /* mac地址 */
461 osal_u8 reserved[2]; /* 字节对齐 */
462 osal_u32 cfg_time; /* 加入黑名单的时间 */
463 osal_u32 aging_time; /* 老化时间 */
464 osal_u32 drop_counter; /* 报文丢弃统计 */
465 } mac_blacklist_stru;
466
467 /* 自动黑名单 */
468 typedef struct {
469 osal_u8 auc_mac_addr[OAL_MAC_ADDR_LEN]; /* mac地址 */
470 osal_u8 reserved[2]; /* 字节对齐 */
471 osal_u32 cfg_time; /* 初始时间 */
472 osal_u32 asso_counter; /* 关联计数 */
473 } mac_autoblacklist_stru;
474
475 /* 自动黑名单信息 */
476 typedef struct {
477 osal_u8 enabled; /* 使能标志 0:未使能 1:使能 */
478 osal_u8 list_num; /* 有多少个自动黑名单 */
479 osal_u8 reserved[2]; /* 字节对齐 */
480 osal_u32 ul_threshold; /* 门限 */
481 osal_u32 reset_time; /* 重置时间 */
482 osal_u32 aging_time; /* 老化时间 */
483 mac_autoblacklist_stru autoblack_list[WLAN_BLACKLIST_MAX]; /* 自动黑名单表 */
484 } mac_autoblacklist_info_stru;
485
486 /* 黑白名单信息 */
487 typedef struct {
488 osal_u8 mode; /* 黑白名单模式 */
489 osal_u8 list_num; /* 名单数 */
490 osal_u8 blacklist_vap_index; /* 黑名单vap index */
491 osal_u8 blacklist_device_index; /* 黑名单device index */
492 mac_autoblacklist_info_stru autoblacklist_info; /* 自动黑名单信息 */
493 mac_blacklist_stru black_list[WLAN_BLACKLIST_MAX]; /* 有效黑白名单表 */
494 } mac_blacklist_info_stru;
495
496 typedef struct {
497 osal_u8 p2p_mode; /* 当前device下的P2P_模式 0 无P2P设备 1 DEV 2 GO 3 GC */
498 mac_vap_state_enum_uint8 last_vap_state; /* P2P0/P2P_CL共用VAP结构.保存VAP进入listen前的状态 */
499 osal_u8 roc_need_switch; /* remain on channel后需要切回原信道 */
500 osal_u8 p2p_ps_pause; /* P2P 节能是否处于pause状态 */
501 oal_net_device_stru *p2p_net_device; /* P2P 共存场景下主net_device(p2p0) 指针 */
502 osal_u64 ull_send_action_id; /* P2P action id/cookie */
503 osal_u64 ull_last_roc_id;
504 oal_ieee80211_channel_stru st_listen_channel;
505 oal_nl80211_channel_type listen_channel_type;
506 oal_net_device_stru *primary_net_device; /* P2P 共存场景下主net_device(wlan0) 指针 */
507 oal_net_device_stru *second_net_device; /* 信道跟随增加,后续不使用可以删除 */
508 } mac_p2p_info_stru;
509
510 /* 扫描完成事件返回状态码 */
511 typedef enum {
512 MAC_SCAN_SUCCESS = 0, /* 扫描成功 */
513 MAC_SCAN_PNO = 1, /* pno扫描结束 */
514 MAC_SCAN_TIMEOUT = 2, /* 扫描超时 */
515 MAC_SCAN_REFUSED = 3, /* 扫描被拒绝 */
516 MAC_SCAN_ABORT = 4, /* 终止扫描 */
517 MAC_SCAN_ABORT_SYNC = 5, /* 扫描被终止同步状态,用于上层去关联命令时强制abort不往内核上报等dmac响应abort往上报 */
518 MAC_SCAN_STATUS_BUTT, /* 无效状态码,初始化时使用此状态码 */
519 } mac_scan_status_enum;
520 typedef osal_u8 mac_scan_status_enum_uint8;
521
522 /* 扫描结果 */
523 typedef struct {
524 mac_scan_status_enum_uint8 scan_rsp_status;
525 osal_u8 resv[3];
526 osal_u64 cookie;
527 } mac_scan_rsp_stru;
528
529 /* 扫描参数结构体 */
530 typedef osal_void (*mac_scan_cb_fn)(osal_void *p_scan_record);
531
532 #pragma pack(push, 1)
533 /* 上报的扫描结果的扩展信息,放在上报host侧的管理帧netbuf的后面 */
534 typedef struct {
535 osal_s32 rssi; /* 信号强度 */
536 osal_s8 ant0_rssi; /* 天线0的rssi */
537 osal_s8 ant1_rssi; /* 天线1的rssi */
538 wlan_mib_desired_bsstype_enum_uint8 bss_type; /* 扫描到的bss类型 */
539
540 osal_u8 channel; /* 当前扫描的信道 */
541 osal_s8 snr_ant0; /* ant0 SNR */
542 osal_s8 snr_ant1; /* ant1 SNR */
543
544 osal_u8 resv[2]; /* 预留字段 */
545
546 osal_u32 parent_tsf; /* 收帧TSF Timer */
547
548 wlan_nss_enum_uint8 support_max_nss; /* 该AP支持的最大空间流数 */
549 oal_bool_enum_uint8 support_opmode; /* 该AP是否支持OPMODE */
550 osal_u8 num_sounding_dim; /* 该AP发送txbf的天线数 */
551 osal_u8 resv1; /* 预留字段 */
552 } mac_scanned_result_extend_info_stru;
553 #pragma pack(pop)
554
555 /* 扫描运行结果记录 */
556 typedef struct {
557 hmac_bss_mgmt_stru bss_mgmt; /* 存储扫描BSS结果的管理结构 */
558 wlan_scan_chan_stats_stru chan_results[WLAN_MAX_CHANNEL_NUM]; /* 信道统计/测量结果 */
559 osal_u8 chan_numbers; /* 此次扫描总共需要扫描的信道个数 */
560 osal_u8 device_id : 4;
561 osal_u8 chip_id : 4;
562 osal_u8 vap_id; /* 本次执行扫描的vap id */
563 mac_scan_status_enum_uint8 scan_rsp_status; /* 本次扫描完成返回的状态码,是成功还是被拒绝 */
564
565 oal_time_us_stru scan_start_timestamp; /* 扫描维测使用 */
566 mac_scan_cb_fn p_fn_cb; /* 此次扫描结束的回调函数指针 */
567
568 #if (_PRE_OS_VERSION_LITEOS == _PRE_OS_VERSION)
569 osal_u8 is_any_scan;
570 osal_u8 n_is_mesh_sta_scan; /* 是否是mesh sta的扫描 */
571 osal_u8 resv[2]; /* 2 保留字节 */
572 #endif
573
574 osal_u64 ull_cookie; /* 保存P2P 监听结束上报的cookie 值 */
575 mac_vap_state_enum_uint8 vap_last_state; /* 保存VAP进入扫描前的状态,AP/P2P GO模式下20/40M扫描专用 */
576 osal_u64 scan_start_time; /* 扫描起始时间戳 */
577 // 增加记录扫描类型,以便识别CHBA RRM扫描的相关处理
578 osal_u8 is_chan_meas_scan;
579 osal_u8 rsv[3]; /* 3个保留字节 */
580 } hmac_scan_record_stru;
581
582 /* 扫描相关相关控制信息 */
583 typedef struct {
584 /* scan 相关控制信息 */
585 oal_bool_enum_uint8 is_scanning; /* host侧的扫描请求是否正在执行 */
586 osal_u8 is_random_mac_addr_scan; /* 是否为随机mac addr扫描,0:关闭(默认) 1:条件(mac ie)开启;2:强制开启 */
587 oal_bool_enum_uint8 complete; /* 内核普通扫描请求是否完成标志 */
588 oal_bool_enum_uint8 sched_scan_complete; /* 调度扫描是否正在运行标记 */
589
590 oal_cfg80211_scan_request_stru *request; /* 内核下发的扫描请求结构体 */
591 oal_cfg80211_sched_scan_request_stru *sched_scan_req; /* 内核下发的调度扫描请求结构体 */
592 osal_wait wait_queue;
593 osal_mutex scan_request_mutexlock; /* scan_request使用互斥锁 */
594
595 frw_timeout_stru scan_timeout; /* 扫描模块host侧的超时保护所使用的定时器 */
596 osal_u8 random_mac[WLAN_MAC_ADDR_LEN]; /* 扫描时候用的随机MAC */
597 osal_u8 auc_resv[2];
598
599 /* 扫描运行记录管理信息,包括扫描结果和发起扫描者的相关信息 */
600 hmac_scan_record_stru scan_record_mgmt;
601
602 /* 记录请求信道列表的map,11b模式下收到非当前信道扫描帧过滤使用,5g管理帧不使用11b速率 */
603 osal_u32 scan_2g_ch_list_map;
604 } hmac_scan_stru;
605
606 /* 扫描到的BSS描述结构体 */
607 typedef struct {
608 /* 基本信息 */
609 wlan_mib_desired_bsstype_enum_uint8 bss_type; /* bss网络类型 */
610 osal_u8 dtim_period; /* dtime周期 */
611 osal_u8 dtim_cnt; /* dtime cnt */
612 oal_bool_enum_uint8 en_11ntxbf; /* 11n txbf */
613
614 oal_bool_enum_uint8 new_scan_bss; /* 是否是新扫描到的BSS */
615 osal_u8 multi_bssid_capa; /* AP的multiple bssid能力位 */
616 osal_s8 c_rssi; /* bss的信号强度 */
617 osal_char ac_ssid[WLAN_SSID_MAX_LEN]; /* 网络ssid */
618 osal_u16 beacon_period; /* beacon周期 */
619 osal_u16 us_cap_info; /* 基本能力信息 */
620 osal_u8 auc_mac_addr[WLAN_MAC_ADDR_LEN]; /* 基础型网络 mac地址与bssid相同 */
621 osal_u8 bssid[WLAN_MAC_ADDR_LEN]; /* 网络bssid */
622 mac_channel_stru st_channel; /* bss所在的信道 */
623 osal_u8 wmm_cap; /* 是否支持wmm */
624 osal_u8 uapsd_cap; /* 是否支持uapsd */
625 oal_bool_enum_uint8 desired; /* 标志位,此bss是否是期望的 */
626 osal_u8 num_supp_rates; /* 支持的速率集个数 */
627 osal_u8 supp_rates[WLAN_USER_MAX_SUPP_RATES]; /* 支持的速率集 */
628
629 #ifdef _PRE_WLAN_FEATURE_11D
630 osal_s8 ac_country[WLAN_COUNTRY_STR_LEN]; /* 国家字符串 */
631 osal_u8 resv2[1];
632 #endif
633
634 /* 安全相关的信息 */
635 osal_u8 *rsn_ie; /* 用于存放beacon、probe rsp的rsn ie */
636 osal_u8 *wpa_ie; /* 用于存放beacon、probe rsp的wpa ie */
637 osal_u8 *ssid_ie; /* 网络ssid ie, 非字符串 */
638 osal_u8 ssid_ie_len; /* 网络ssid ie长度, 非字符串 */
639
640 /* 11n 11ac信息 */
641 oal_bool_enum_uint8 ht_capable; /* 是否支持ht */
642 oal_bool_enum_uint8 vht_capable; /* 是否支持vht */
643 oal_bool_enum_uint8 vendor_vht_capable; /* 是否支持hidden vendor vht */
644 wlan_bw_cap_enum_uint8 bw_cap; /* 支持的带宽 0-20M 1-40M */
645 wlan_channel_bandwidth_enum_uint8 channel_bandwidth; /* 信道带宽 */
646 osal_u8 coex_mgmt_supp; /* 是否支持共存管理 */
647 oal_bool_enum_uint8 ht_ldpc; /* 是否支持ldpc */
648 oal_bool_enum_uint8 ht_stbc; /* 是否支持stbc */
649 osal_u8 wapi;
650 osal_u8 vendor_novht_capable; /* 私有vendor中不需再携带 */
651 #ifdef _PRE_WLAN_MP13_DDC_BUGFIX
652 oal_bool_enum_uint8 ddc_whitelist_chip_oui;
653 #else
654 osal_u8 resv0;
655 #endif
656 osal_u32 timestamp; /* 更新此bss的时间戳 */
657 osal_u8 phy_type;
658 osal_s8 ac_rsni[2];
659 osal_u8 need_drop; /* 判断当前扫描结果是否需要过滤 */
660 osal_u32 parent_tsf;
661 #ifdef _PRE_WLAN_WIRELESS_EXT
662 osal_u16 ht_cap_info; /* ht capabilities 支持能力 */
663 wlan_bw_cap_enum_uint8 real_bw; /* 只记录当前实际bw */
664 osal_u8 resv4; /* 表示预留字节对齐 */
665 osal_u8 *wps_ie; /* 用于存放beacon、probe rsp的wps ie */
666 osal_u8 *wapi_ie; /* 用于存放beacon、probe rsp的wapi_ie */
667 #endif
668
669 oal_bool_enum_uint8 btcoex_ps_blacklist_chip_oui; /* ps机制one pkt帧类型需要修订为self-cts */
670 wlan_nss_enum_uint8 support_max_nss; /* 该AP支持的最大空间流数 */
671 oal_bool_enum_uint8 support_opmode; /* 该AP是否支持OPMODE */
672 osal_u8 num_sounding_dim; /* 该AP发送txbf的天线数 */
673
674 oal_bool_enum_uint8 he_capable; /* 是否支持11ax */
675 #ifdef _PRE_WLAN_FEATURE_11AX
676 mac_11ax_element_stru he_capabilities;
677 #endif
678 osal_u8 bss_assoc_disallowed; /* MBO IE中指示AP是否允许关联 */
679 oal_bool_enum_uint8 support_rrm; /* 是否支持RRM */
680 #ifdef _PRE_WLAN_FEATURE_1024QAM
681 oal_bool_enum_uint8 support_1024qam;
682 #endif
683 osal_s8 c_ant0_rssi; /* 天线0的rssi */
684 osal_s8 c_ant1_rssi; /* 天线1的rssi */
685
686 mac_scanned_all_bss_info all_bss_info; /* multiple bssid信息 */
687
688 /* 管理帧信息 */
689 osal_u32 mgmt_len; /* 管理帧的长度 */
690 osal_u8 mgmt_buff[MAC_80211_QOS_HTC_4ADDR_FRAME_LEN]; /* 记录beacon帧或probe rsp帧 */
691 } mac_bss_dscr_stru;
692
693 typedef struct {
694 wlan_mib_desired_bsstype_enum_uint8 bss_type; /* 要扫描的bss类型 */
695 wlan_scan_type_enum_uint8 scan_type; /* 主动/被动 */
696 osal_u8 bssid_num; /* 期望扫描的bssid个数 */
697 osal_u8 ssid_num; /* 期望扫描的ssid个数 */
698
699 osal_u8 sour_mac_addr[WLAN_MAC_ADDR_LEN]; /* probe req帧中携带的发送端地址 */
700 osal_u8 p2p0_listen_channel;
701 osal_u8 max_scan_count_per_channel; /* 每个信道的扫描次数 */
702
703 osal_u8 bssid[WLAN_SCAN_REQ_MAX_BSSID][WLAN_MAC_ADDR_LEN]; /* 期望的bssid */
704 mac_ssid_stru mac_ssid_set[WLAN_SCAN_REQ_MAX_SSID]; /* 期望的ssid */
705
706 osal_u8 max_send_probe_req_count_per_channel; /* 每次信道发送扫描请求帧的个数,默认为1 */
707 osal_u8 is_p2p0_scan : 1; /* 是否为p2p0 发起扫描 */
708 osal_u8 is_radom_mac_saved : 1; /* 是否已经保存随机mac */
709 osal_u8 radom_mac_saved_to_dev : 2; /* 用于并发扫描 */
710 osal_u8 desire_fast_scan : 1; /* 本次扫描期望使用并发 */
711 osal_u8 bit_rsv : 3; /* 保留位 */
712
713 oal_bool_enum_uint8 abort_scan_flag; /* 终止扫描 */
714 oal_bool_enum_uint8 is_random_mac_addr_scan; /* 是否是随机mac addr扫描 */
715
716 oal_bool_enum_uint8 need_switch_back_home_channel; /* 背景扫描时,扫描完一个信道,判断是否需要切回工作信道工作 */
717 osal_u8 scan_channel_interval; /* 间隔n个信道,切回工作信道工作一段时间 */
718 osal_u16 work_time_on_home_channel; /* 背景扫描时,返回工作信道工作的时间 */
719
720 mac_channel_stru channel_list[WLAN_MAX_CHANNEL_NUM];
721
722 osal_u8 channel_nums; /* 信道列表中信道的个数 */
723 osal_u8 probe_delay; /* 主动扫描发probe request帧之前的等待时间 */
724 osal_u16 scan_time; /* 扫描在某一信道停留此时间后,扫描结束, ms,必须是10的整数倍 */
725
726 wlan_scan_mode_enum_uint8 scan_mode; /* 扫描模式:前景扫描 or 背景扫描 */
727 osal_u8 scan_flag; /* 内核下发的扫描模式,每个bit意义见wlan_scan_flag_enum,暂时只解析是否为并发扫描 */
728 osal_u8 scan_func; /* DMAC SCANNER 扫描模式 */
729 osal_u8 vap_id; /* 下发扫描请求的vap id */
730 osal_u64 cookie; /* P2P 监听下发的cookie 值 */
731
732 /* 重要:回调函数指针:函数指针必须放最后否则核间通信出问题 */
733 mac_scan_cb_fn fn_cb;
734 } mac_scan_req_stru;
735
736 typedef struct {
737 frw_timeout_stru rx_dscr_opt_timer; /* rx_dscr调整定时器 */
738 osal_u32 rx_pkt_num;
739 osal_u32 rx_pkt_opt_limit;
740 osal_u32 rx_pkt_reset_limit;
741 oal_bool_enum_uint8 dscr_opt_state; /* TRUE表示已调整 */
742 oal_bool_enum_uint8 dscr_opt_enable;
743 } hmac_rx_dscr_opt_stru;
744
745 /* m2s device信息结构体 */
746 typedef struct {
747 wlan_nss_enum_uint8 nss_num; /* device的接收空间流个数 */
748 wlan_mib_mimo_power_save_enum_uint8 smps_mode; /* mac device的smps能力,用于切换后vap能力初始化 */
749 osal_u8 reserved[2];
750 } mac_device_m2s_stru;
751
752 typedef struct {
753 mac_m2s_mode_enum_uint8 cfg_m2s_mode; /* 0:参数查询模式;
754 1:参数配置模式;2.切换模式;3.软切换测试模式;4.硬切换测试模式 5.RSSI配置命令
755 */
756 union {
757 struct {
758 oal_bool_enum_uint8 m2s_type; /* 切换类型 */
759 osal_u8 master_id; /* 主辅路id */
760 mac_m2s_command_state_enum_uint8 m2s_state; /* 期望切换到状态 */
761 wlan_m2s_trigger_mode_enum_uint8 trigger_mode; /* 切换触发业务模式 */
762 } test_mode;
763
764 struct {
765 oal_bool_enum_uint8 mss_on;
766 } mss_mode;
767
768 struct {
769 osal_u8 opt;
770 osal_char value;
771 } rssi_mode;
772 } pri_data;
773 } mac_m2s_mgr_stru;
774
775 typedef struct {
776 osal_u8 user_idx; /* CSI白名单用户index 取值范围0~3,最多4个用户 */
777 osal_u8 enable; /* CSI白名单用户开关,0去使能,忽略以下所有参数, 1使能,校验后续参数 */
778 osal_u8 cfg_match_ta_ra_sel; /* CSI白名单地址过滤类型 0 RA 1 TA */
779 osal_u8 resv; /* 保留1位,字节对齐 */
780 osal_u8 mac_addr[WLAN_MAC_ADDR_LEN]; /* 白名单MAC地址 */
781 osal_u8 frame_type_filter_bitmap; /* 帧类型过滤具体参数 取值范围0~7,bit0管理帧 bit1控制帧 bit2数据帧 */
782 osal_u8 sub_type_filter_enable; /* 帧子类型过滤开关,0关闭 1打开,只有在1时才会校验sub_type_filter_bitmap */
783 osal_u8 sub_type_filter; /* 帧子类型过滤具体参数 4位二进制数对应的十进制结果(如 1100即为12) */
784 osal_u8 ppdu_filter_bitmap; /* ppdu format过滤具体参数 取值范围0~63
785 bit[0]:non-HT
786 bit[1]:HE_(ER)SU
787 bit[2]:HE_MU_MIMO
788 bit[3]:HE_MU_OFDMA
789 bit[4]:HT
790 bit[5]:VHT */
791 osal_u16 period; /* CSI上报时间间隔 单位ms */
792 } mac_csi_usr_config_stru;
793
794 typedef struct {
795 osal_u8 csi_data_blk_num;
796 osal_u16 csi_data_max_len;
797 osal_u8 resv[1];
798 } mac_csi_buffer_stru;
799
800 typedef struct {
801 osal_u8 category;
802 osal_u8 action_code;
803 osal_u8 oui[3]; /* 3字节组织码 */
804 osal_u8 eid;
805 osal_u8 lenth;
806 osal_u8 location_type;
807 osal_u8 mac_server[WLAN_MAC_ADDR_LEN];
808 osal_u8 mac_client[WLAN_MAC_ADDR_LEN];
809 osal_u8 payload[4]; /* 4字节上层数据 */
810 } mac_location_event_stru;
811
812 #ifdef _PRE_WLAN_FEATURE_PNO_SCAN
813
814 /* PNO扫描信息结构体 */
815 typedef struct {
816 osal_u8 ssid[WLAN_SSID_MAX_LEN];
817 oal_bool_enum_uint8 scan_ssid;
818 osal_u8 auc_resv[2]; /* 预留2字节对齐 */
819 } pno_match_ssid_stru;
820
821 typedef struct {
822 pno_match_ssid_stru match_ssid_set[MAX_PNO_SSID_COUNT];
823 osal_s32 ssid_count; /* 下发的需要匹配的ssid集的个数 */
824 osal_s32 rssi_thold; /* 可上报的rssi门限 */
825 osal_u32 pno_scan_interval; /* pno扫描间隔 */
826 osal_u8 sour_mac_addr[WLAN_MAC_ADDR_LEN]; /* probe req帧中携带的发送端地址 */
827 osal_u8 pno_scan_repeat; /* pno扫描重复次数 */
828 oal_bool_enum_uint8 is_random_mac_addr_scan; /* 是否随机mac */
829
830 mac_scan_cb_fn fn_cb; /* 函数指针必须放最后否则核间通信出问题 */
831 } mac_pno_scan_stru;
832
833 typedef struct {
834 wlan_mib_desired_bsstype_enum_uint8 bss_type; /* 要扫描的bss类型 */
835 wlan_scan_type_enum_uint8 scan_type; /* 主动/被动 */
836 wlan_scan_mode_enum_uint8 scan_mode; /* 扫描模式:前景扫描 or 背景扫描 */
837 osal_u8 probe_delay; /* 主动扫描发probe request帧之前的等待时间 */
838 osal_u8 scan_func; /* DMAC SCANNER 扫描模式 */
839 osal_u8 max_scan_count_per_channel; /* 每个信道的扫描次数 */
840 osal_u8 max_send_probe_req_count_per_channel; /* 每次信道发送扫描请求帧的个数,默认为1 */
841 osal_u8 scan_flag;
842 osal_u16 scan_time; /* 扫描在某一信道停留此时间后,扫描结束, ms,必须是10的整数倍 */
843 osal_u16 work_time_on_home_channel; /* 背景扫描时,返回工作信道工作的时间 */
844 } mac_pno_scan_ctrl;
845
846 typedef struct {
847 mac_pno_scan_stru sched;
848 mac_pno_scan_ctrl ctrl;
849 } mac_pno_scan_param;
850
851
852 /* PNO调度扫描管理结构体 */
853 typedef struct {
854 mac_pno_scan_param pno_sched_scan_params; /* pno调度扫描请求的参数 */
855 osal_void *hmac_vap; /* 保存启动pno扫描的vap handle */
856 #if (_PRE_OS_VERSION_LITEOS == _PRE_OS_VERSION)
857 osal_timer pno_sched_scan_timer;
858 osal_u32 pno_sched_scan_timer_id;
859 #endif
860 osal_u8 curr_pno_sched_scan_times; /* 当前pno调度扫描次数 */
861 oal_bool_enum_uint8 is_found_match_ssid; /* 是否扫描到了匹配的ssid */
862 osal_u8 auc_resv[2]; /* 预留2字节对齐 */
863 } mac_pno_sched_scan_mgmt_stru;
864 /* 特性结构体END,第二阶段需要挪走 */
865 #endif
866
867 typedef struct {
868 /********************************** HMAC&DMAC公共成员START **********************************/
869 osal_u8 vap_id[WLAN_SERVICE_VAP_MAX_NUM_PER_DEVICE]; /* device下的业务vap,此处只记录VAP ID */
870 osal_u8 resv;
871
872 osal_u8 cfg_vap_id : 4; /* 配置vap ID */
873 osal_u8 vap_num : 4; /* 当前device下的业务VAP数量(AP+STA) */
874 osal_u8 up_vap_num : 4; /* 维护当前整个device up状态vap个数 */
875 osal_u8 mac_vap_id : 4; /* 多vap共存时,保存睡眠前的mac vap id */
876 osal_u8 sta_num; /* 当前device下的STA数量 */
877
878 oal_bool_enum_uint8 device_state : 1; /* 标识是否已经被分配,(OAL_TRUE初始化完成,OAL_FALSE未初始化 ) */
879 oal_bool_enum_uint8 is_random_mac_addr_scan : 1; /* 随机mac扫描开关,从hmac下发 */
880 osal_u8 resv0 : 6;
881
882 /* device能力 */
883 wlan_protocol_cap_enum_uint8 protocol_cap : 4; /* 协议能力 */
884 wlan_band_cap_enum_uint8 band_cap : 4; /* 频段能力 */
885 wlan_channel_band_enum_uint8 max_band : 4; /* 已配置VAP的频段,其后的VAP配置值不能与此值矛盾,仅在非DBAC时使用 */
886 wlan_channel_bandwidth_enum_uint8 max_bandwidth : 4; /* VAP的最大带宽值,其后的VAP配置不能与此矛盾,仅在非DBAC时使用 */
887
888 osal_u8 max_channel; /* 已配置VAP的信道号,其后的VAP配置值不能与此值矛盾,仅在非DBAC时使用 */
889
890 osal_u8 hw_addr[WLAN_MAC_ADDR_LEN]; /* 从eeprom或flash获得的mac地址,ko加载时调用hal接口赋值 */
891 osal_u8 mac_oui[WLAN_RANDOM_MAC_OUI_LEN]; /* 随机mac地址OUI,由Android下发 */
892
893 mac_data_rate_stru mac_rates_11g[MAC_DATARATES_PHY_80211G_NUM]; /* 11g速率 */
894
895 mac_scan_req_stru scan_params; /* 最新一次的扫描参数信息 */
896 frw_timeout_stru obss_scan_timer; /* obss扫描定时器,循环定时器 */
897
898 /* linux内核中的device物理信息 */
899 oal_wiphy_stru *wiphy; /* 用于存放和VAP相关的wiphy设备信息,在AP/STA模式下均要使用;可以多个VAP对应一个wiphy */
900
901 mac_bss_id_list_stru bss_id_list; /* 当前信道下的扫描结果 */
902
903 mac_device_capability_stru device_cap; /* device的部分能力,包括定制化 */
904
905 mac_ap_ch_info_stru ap_channel_list[MAC_MAX_SUPP_CHANNEL];
906 /********************************** HMAC&DMAC公共成员END **********************************/
907
908 /********************************** HMAC私有成员START **********************************/
909 osal_u8 device_id; /* 芯片ID */
910 osal_u8 chip_id; /* 设备ID */
911 osal_u8 uc_in_suspend;
912 osal_u8 wapi;
913 hmac_scan_stru scan_mgmt; /* 扫描管理结构体 */
914 hmac_rx_dscr_opt_stru rx_dscr_opt;
915
916 mac_p2p_info_stru st_p2p_info; /* P2P 相关信息 */
917 #ifdef _PRE_WLAN_FEATURE_SMPS
918 /* SMPS是MAC的能力,需要device上所有的VAP都支持SMPS才会开启MAC的SMPS能力 */
919 wlan_mib_mimo_power_save_enum_uint8 mac_smps_mode; /* 记录当前MAC工作的SMPS能力(放在mac侧,hmac也会用于判断) */
920 #endif
921
922 #ifdef _PRE_WIFI_DMT
923 osal_u8 desired_bss_num; /* 扫描到的期望的bss个数 */
924 osal_u8 desired_bss_idx[WLAN_MAX_SCAN_BSS_NUM]; /* 期望加入的bss在bss list中的位置 */
925 #endif
926 osal_wait netif_change_event;
927
928 #ifdef _PRE_WLAN_TCP_OPT
929 oal_bool_enum_uint8 sys_tcp_rx_ack_opt_enable;
930 oal_bool_enum_uint8 sys_tcp_tx_ack_opt_enable;
931 #endif
932 oal_bool_enum_uint8 start_via_priv : 1;
933 oal_bool_enum_uint8 en_dbac_enabled : 1;
934 oal_bool_enum_uint8 en_dbac_running : 1; /* DBAC是否在运行 */
935 osal_u8 resv3 : 5;
936
937 #ifdef _PRE_WLAN_FEATURE_P2P
938 osal_u8 set_mode_iftype; /* 表示在GC连接过程中是否清空hmac_device */
939 osal_u8 p2p_listen_channel; /* 在hmac_device中保存P2P的监听信道值 */
940 osal_u16 beacon_interval; /* device级别beacon interval,device下所有VAP约束为同一值 */
941 osal_u32 p2p_intf_status;
942 #endif
943
944 #ifdef CONFIG_HAS_EARLYSUSPEND
945 struct early_suspend early_suspend; /* early_suspend支持 */
946 #endif
947
948 osal_void **hmac_device_feature_arr;
949 /********************************** HMAC私有成员END **********************************/
950
951 /********************************** DMAC私有成员START **********************************/
952 oal_bool_enum_uint8 in_suspend : 1;
953 oal_bool_enum_uint8 txop_enable : 1; /* 发送无聚合时采用TXOP模式 */
954 /* 当前扫描状态,根据此状态处理obss扫描和host侧下发的扫描请求,以及扫描结果的上报处理 */
955 mac_scan_state_enum_uint8 curr_scan_state : 4;
956 osal_u8 resv4 : 2;
957
958 osal_u16 aus_ac_mpdu_num[WLAN_WME_AC_BUTT]; /* device下各个AC对应的mpdu_num数 */
959 osal_u16 total_mpdu_num; /* device下所有TID中总共的mpdu_num数量 */
960 osal_u16 psm_mpdu_num; /* 节能队列mpdu_num总数 */
961
962 osal_u32 scan_timestamp; /* 记录最新一次扫描开始的时间 */
963
964 mac_fcs_cfg_stru fcs_cfg;
965 mac_fcs_mgr_stru fcs_mgr;
966
967 osal_u8 ra_lut_index_table[WLAN_ACTIVE_USER_IDX_BMAP_LEN]; /* 关联用户 软件维护LUT表位图 大小2 */
968
969 frw_timeout_stru keepalive_timer; /* keepalive定时器 */
970 mac_cfg_rssi_limit_stru rssi_limit;
971
972 hal_to_dmac_device_stru *hal_device[WLAN_DEVICE_MAX_NUM_PER_CHIP]; /* 03动态dbdc 两个hal */
973
974 oal_bool_enum_uint8 wmm : 1; /* wmm使能开关 */
975 oal_bool_enum_uint8 en_2040bss_switch : 1; /* 20/40 bss检测开关 */
976 oal_bool_enum_uint8 arpoffload_switch : 1; /* arp offload功能切换开关 */
977 oal_bool_enum_uint8 dbac_enabled : 1; /* DBAC是否已经使能 */
978 oal_bool_enum_uint8 dbac_running : 1; /* DBAC是否在运行 */
979 oal_bool_enum_uint8 intol_bit_recd_40mhz : 1;
980 oal_bool_enum_uint8 sniffer_switch : 1; /* 抓包功能开关 */
981 oal_bool_enum_uint8 en_wmm : 1; /* wmm使能开关 根据对端wmm能力更新 */
982
983 oal_bool_enum_uint8 arp_offload_switch;
984 #ifdef _PRE_WLAN_FEATURE_PNO_SCAN
985 mac_pno_sched_scan_mgmt_stru *pno_sched_scan_mgmt; /* pno调度扫描管理结构体指针,内存动态申请,从而节省内存 */
986 #endif
987 mac_channel_stru p2p_vap_channel; /* p2p listen时记录p2p的信道,用于p2p listen结束后恢复 */
988
989 osal_u32 vap_pause_bitmap;
990
991 #if (_PRE_OS_VERSION_LITEOS != _PRE_OS_VERSION)
992 osal_spinlock lock; /* tid enqueue/dequeue lock */
993 #endif
994 /********************************** DMAC私有成员END **********************************/
995 } hmac_device_stru;
996
997 typedef struct {
998 hmac_device_stru *hmac_device;
999 } mac_wiphy_priv_stru;
1000
1001 /*****************************************************************************
1002 函数声明
1003 *****************************************************************************/
1004 osal_u32 mac_device_init_etc(hmac_device_stru *hmac_device, osal_u32 chip_ver,
1005 osal_u8 chip_id, osal_u8 device_id);
1006 osal_u32 mac_chip_init_etc(mac_chip_stru *chip, osal_u8 device_max);
1007 osal_u32 mac_board_init_etc(void);
1008
1009 osal_u32 mac_device_exit_etc(hmac_device_stru *hmac_device);
1010 osal_u32 mac_chip_exit_etc(const mac_board_stru *board, mac_chip_stru *chip);
1011 osal_u32 mac_board_exit_etc(const mac_board_stru *board);
1012 osal_void hmac_chip_inc_active_user(hmac_device_stru *hmac_device);
1013 osal_void hmac_chip_dec_active_user(hmac_device_stru *hmac_device);
1014
1015 wlan_mib_vht_supp_width_enum_uint8 hmac_device_trans_bandwith_to_vht_capinfo(wlan_bw_cap_enum_uint8 max_op_bd);
1016
1017 void mac_blacklist_get_pointer(wlan_vap_mode_enum_uint8 vap_mode, osal_u8 dev_id, osal_u8 chip_id,
1018 osal_u8 vap_id, mac_blacklist_info_stru **blacklist_info);
1019
1020 osal_void *hmac_device_get_all_rates_etc(const hmac_device_stru *hmac_device);
1021
1022 osal_u32 hmac_device_check_5g_enable(osal_u8 device_id);
1023
1024 mac_device_capability_stru *mac_device_get_capability(osal_void);
1025 osal_u8 *mac_get_device_radio_cap(osal_void);
1026 mac_board_stru *mac_get_pst_mac_board(osal_void);
1027 mac_device_voe_custom_stru *mac_get_pst_mac_voe_custom_param(osal_void);
1028 osal_void mac_device_set_random_scan_oui(osal_u32 scan_oui);
1029 osal_void mac_set_pst_mac_voe_custom_over_ds_param(osal_u8 over_ds_en);
1030 osal_u8 mac_get_user_res_num(osal_void);
1031 osal_u8 *mac_get_user_res_num_addr(osal_void);
1032 wlan_bw_cap_enum_uint8 hmac_get_device_bw_mode(const hal_to_dmac_device_stru *hal_device);
1033
1034 /*****************************************************************************
1035 函数定义
1036 *****************************************************************************/
1037
1038 /* 特性函数START,第二阶段需要挪走 */
1039 /*****************************************************************************
1040 功能描述 : 判断对应device上dbac功能是否使能
1041 *****************************************************************************/
mac_is_dbac_enabled(const hmac_device_stru * hmac_device)1042 static INLINE__ oal_bool_enum_uint8 mac_is_dbac_enabled(const hmac_device_stru *hmac_device)
1043 {
1044 return hmac_device->en_dbac_enabled;
1045 }
1046
1047 /*****************************************************************************
1048 功能描述 : 判断对应device上dbac功能是否在运行
1049 *****************************************************************************/
mac_is_dbac_running(const hmac_device_stru * hmac_device)1050 static INLINE__ oal_bool_enum_uint8 mac_is_dbac_running(const hmac_device_stru *hmac_device)
1051 {
1052 if (hmac_device->en_dbac_enabled == OAL_FALSE) {
1053 return OAL_FALSE;
1054 }
1055
1056 return hmac_device->en_dbac_running;
1057 }
1058
1059 #ifdef _PRE_WLAN_FEATURE_20_40_80_COEXIST
mac_get_2040bss_switch(hmac_device_stru * hmac_device)1060 static INLINE__ oal_bool_enum_uint8 mac_get_2040bss_switch(hmac_device_stru *hmac_device)
1061 {
1062 return hmac_device->en_2040bss_switch;
1063 }
mac_set_2040bss_switch(hmac_device_stru * hmac_device,oal_bool_enum_uint8 en_switch)1064 static INLINE__ void mac_set_2040bss_switch(hmac_device_stru *hmac_device, oal_bool_enum_uint8 en_switch)
1065 {
1066 hmac_device->en_2040bss_switch = en_switch;
1067 }
1068 #endif
1069
1070 /* 特性函数END,第二阶段需要挪走 */
1071
1072 /*****************************************************************************
1073 功能描述 : 检查芯片是否需要使能5g功能
1074 *****************************************************************************/
mac_device_check_5g_enable_per_chip(void)1075 static INLINE__ oal_bool_enum_uint8 mac_device_check_5g_enable_per_chip(void)
1076 {
1077 osal_u8 dev_idx = 0;
1078
1079 while (dev_idx < WLAN_SERVICE_DEVICE_MAX_NUM_PER_CHIP) {
1080 if (hmac_device_check_5g_enable(dev_idx) != 0) {
1081 return OAL_TRUE;
1082 }
1083 dev_idx++;
1084 }
1085
1086 return OAL_FALSE;
1087 }
1088
1089 /*****************************************************************************
1090 功能描述 : 是否为隐藏ssid
1091 *****************************************************************************/
mac_is_hide_ssid(const osal_u8 * ssid_ie,osal_u8 ssid_len)1092 static INLINE__ oal_bool_enum_uint8 mac_is_hide_ssid(const osal_u8 *ssid_ie, osal_u8 ssid_len)
1093 {
1094 return (oal_bool_enum_uint8)((ssid_ie == OAL_PTR_NULL) || (ssid_len == 0) || (ssid_ie[0] == '\0'));
1095 }
1096
1097 /*****************************************************************************
1098 功能描述 : 是否开启自动信道选择
1099 *****************************************************************************/
mac_device_is_auto_chan_sel_enabled(const hmac_device_stru * hmac_device)1100 static INLINE__ oal_bool_enum_uint8 mac_device_is_auto_chan_sel_enabled(const hmac_device_stru *hmac_device)
1101 {
1102 /* BSS启动时,如果用户没有设置信道,则默认为开启自动信道选择 */
1103 if (hmac_device->max_channel == 0) {
1104 return OAL_TRUE;
1105 }
1106
1107 return OAL_FALSE;
1108 }
1109
mac_device_is_scaning(const hmac_device_stru * hmac_device)1110 static INLINE__ oal_bool_enum_uint8 mac_device_is_scaning(const hmac_device_stru *hmac_device)
1111 {
1112 return (hmac_device->curr_scan_state == MAC_SCAN_STATE_RUNNING) ? OSAL_TRUE : OSAL_FALSE;
1113 }
1114
mac_device_is_listening(const hmac_device_stru * hmac_device)1115 static INLINE__ oal_bool_enum_uint8 mac_device_is_listening(const hmac_device_stru *hmac_device)
1116 {
1117 return ((hmac_device->curr_scan_state == MAC_SCAN_STATE_RUNNING) &&
1118 ((hmac_device->scan_params.scan_func & MAC_SCAN_FUNC_P2P_LISTEN) != 0)) ? OSAL_TRUE : OSAL_FALSE;
1119 }
1120
1121 /*****************************************************************************
1122 函 数 名 : mac_m2s_cali_smps_mode
1123 功能描述 : 根据空间流数获取smps模式
1124 *****************************************************************************/
mac_m2s_cali_smps_mode(wlan_nss_enum_uint8 nss)1125 static INLINE__ wlan_mib_mimo_power_save_enum_uint8 mac_m2s_cali_smps_mode(wlan_nss_enum_uint8 nss)
1126 {
1127 return (nss == WLAN_SINGLE_NSS) ? WLAN_MIB_MIMO_POWER_SAVE_STATIC : WLAN_MIB_MIMO_POWER_SAVE_MIMO;
1128 }
1129
1130 #ifdef _PRE_WLAN_FEATURE_M2S
1131 /*****************************************************************************
1132 函 数 名 : mac_m2s_cali_nss_from_smps_mode
1133 功能描述 : 根据smps模式获取空间流数
1134 *****************************************************************************/
mac_m2s_cali_nss_from_smps_mode(wlan_mib_mimo_power_save_enum_uint8 smps_mode)1135 static INLINE__ wlan_nss_enum_uint8 mac_m2s_cali_nss_from_smps_mode(wlan_mib_mimo_power_save_enum_uint8 smps_mode)
1136 {
1137 return (smps_mode == WLAN_MIB_MIMO_POWER_SAVE_STATIC) ? WLAN_SINGLE_NSS : WLAN_DOUBLE_NSS;
1138 }
1139 #endif
1140
1141 #ifdef __cplusplus
1142 #if __cplusplus
1143 }
1144 #endif
1145 #endif
1146
1147 #endif
1148