• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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