• 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: HMAC to ALG的API接口文件。
15  * Create: 2020-7-3
16  */
17 
18 #ifndef __HMAC_ALG_IF_STRUCT_DEFINE_H__
19 #define __HMAC_ALG_IF_STRUCT_DEFINE_H__
20 
21 /*****************************************************************************
22   1 其他头文件包含
23 *****************************************************************************/
24 #include "hmac_vap.h"
25 #include "alg_common_rom.h"
26 #include "msg_alg_rom.h"
27 #ifdef __cplusplus
28 #if __cplusplus
29 extern "C" {
30 #endif
31 #endif
32 /*****************************************************************************
33   2 枚举定义
34 *****************************************************************************/
35 /* 算法ID,唯一识别某个算法,ID=2的整数值 */
36 typedef enum {
37     HMAC_ALG_ID_SCHEDULE     = 0x00000001,
38     HMAC_ALG_ID_AUTORATE     = 0x00000002,
39     HMAC_ALG_ID_SMARTANT     = 0x00000004,
40     HMAC_ALG_ID_ACS          = 0x00000008,
41     HMAC_ALG_ID_TPC          = 0x00000010,
42     HMAC_ALG_ID_TRAFFIC_CTL  = 0x00000020,
43     HMAC_ALG_ID_TXBF         = 0x00000040,
44     HMAC_ALG_ID_DBAC         = 0x00000080,
45     HMAC_ALG_ID_ANTI_INTF    = 0x00000100,
46     HMAC_ALG_ID_MWO_DET      = 0x00000200,
47     HMAC_ALG_ID_EDCA_OPT     = 0x00000400,
48     HMAC_ALG_ID_CCA_OPT      = 0x00000800,
49     HMAC_ALG_ID_INTF_DET     = 0x00001000,
50     HMAC_ALG_ID_RX_DSCR_CTL  = 0x00002000,
51     HMAC_ALG_ID_TEMP_PROTECT = 0x00004000,
52     HMAC_ALG_ID_BUTT
53 } hmac_alg_id_enum;
54 typedef osal_u32 hmac_alg_id_enum_uint32;
55 
56 /* 数据结构类型枚举定义 */
57 typedef enum {
58     HMAC_ALG_CHIP_STRU_ID_START,
59     HMAC_ALG_CHIP_STRU_ID_BUTT
60 } hmac_alg_chip_stru_id_enum;
61 typedef osal_u8 hmac_alg_chip_stru_id_enum_uint8;
62 
63 typedef enum {
64     HMAC_ALG_USER_STRU_ID_SCHEDULE,
65     HMAC_ALG_USER_STRU_ID_AUTORATE,
66     HMAC_ALG_USER_STRU_ID_SMARTANT,
67     HMAC_ALG_USER_STRU_ID_TXBF,
68     HMAC_ALG_USER_STRU_ID_ANTI_INTF,
69     HMAC_ALG_USER_STRU_ID_MWO_DET,
70     HMAC_ALG_USER_STRU_ID_TPC_POW,      // 功率信息结构体
71     HMAC_ALG_USER_STRU_ID_TPC_DIS,      // 距离信息结构体
72     HMAC_ALG_USER_STRU_ID_TPC_RSSI,     // rssi信息结构体
73     HMAC_ALG_USER_STRU_ID_CCA_OPT,
74     HMAC_ALG_USER_STRU_ID_INTF_DET,
75     HMAC_ALG_USER_STRU_ID_TRAFFIC_CTL,
76 
77     HMAC_ALG_USER_STRU_ID_BUTT
78 } hmac_alg_user_stru_id_enum;
79 typedef osal_u8 hmac_alg_user_stru_id_enum_uint8;
80 
81 typedef enum {
82     HMAC_ALG_TID_STRU_ID_SCHEDULE,
83     HMAC_ALG_TID_STRU_ID_DBAC,
84 
85     HMAC_ALG_TID_STRU_ID_BUTT
86 } hmac_alg_tid_stru_id_enum;
87 typedef osal_u8 hmac_alg_tid_stru_id_enum_uint8;
88 
89 typedef enum {
90     HMAC_ALG_VAP_UP_START  = 0,
91     HMAC_ALG_VAP_UP_DBAC   = HMAC_ALG_VAP_UP_START,
92     HMAC_ALG_VAP_UP_TPC,
93 
94     HMAC_ALG_VAP_UP_BUTT
95 } hmac_alg_vap_up_notify_enum;
96 typedef osal_u8 hmac_alg_vap_up_notify_enum_uint8;
97 
98 typedef enum {
99     HMAC_ALG_VAP_DOWN_START  = 0,
100     HMAC_ALG_VAP_DOWN_DBAC   = HMAC_ALG_VAP_DOWN_START,
101 
102     HMAC_ALG_VAP_DOWN_BUTT
103 } hmac_alg_vap_down_notify_enum;
104 typedef osal_u8 hmac_alg_vap_down_notify_enum_uint8;
105 
106 /* 数据帧发送流程上获取发送参数的回调函数 */
107 typedef enum {
108     HMAC_ALG_TX_START = 0,
109     HMAC_ALG_TX_AUTORATE = HMAC_ALG_TX_START,
110     HMAC_ALG_TX_TPC,
111     HMAC_ALG_TX_TXBF,
112     HMAC_ALG_TX_DBAC,
113     HMAC_ALG_TX_EDCA_OPT,
114     HMAC_ALG_TX_COMMON,
115     HMAC_ALG_TX_CCA_OPT,
116 
117     HMAC_ALG_TX_NOTIFY_BUTT
118 } hmac_alg_tx_notify_enum;
119 typedef osal_u8 hmac_alg_tx_notify_enum_uint8;
120 
121 /* 接收流程上的回调函数 */
122 typedef enum {
123     HMAC_ALG_RX_START = 0,
124     HMAC_ALG_RX_AUTORATE = HMAC_ALG_RX_START,
125     HMAC_ALG_RX_CCA_OPT,
126     HMAC_ALG_RX_DBAC,
127     HMAC_ALG_RX_ACS,
128     HMAC_ALG_RX_ANTI_INTF,
129     HMAC_ALG_RX_TPC,
130     HMAC_ALG_RX_TXBF,
131     HMAC_ALG_RX_EDCA_OPT,
132 
133     HMAC_ALG_RX_NOTIFY_BUTT
134 } hmac_alg_rx_notify_enum;
135 typedef osal_u8 hmac_alg_rx_notify_enum_uint8;
136 
137 /* 添加关联用户回调函数枚举定义 */
138 typedef enum {
139     HMAC_ALG_ADD_USER_NOTIFY_SCHEDULE,
140     HMAC_ALG_ADD_USER_NOTIFY_AUTROATE,
141     HMAC_ALG_ADD_USER_NOTIFY_SMARTANT,
142     HMAC_ALG_ADD_USER_NOTIFY_DBAC,
143     HMAC_ALG_ADD_USER_NOTIFY_ACS,
144     HMAC_ALG_ADD_USER_NOTIFY_ANTI_INTF,
145     HMAC_ALG_ADD_USER_NOTIFY_CCA,
146     HMAC_ALG_ADD_USER_NOTIFY_TXBF,
147     HMAC_ALG_ADD_USER_NOTIFY_TPC,
148     HMAC_ALG_ADD_USER_NOTIFY_MWO_DET,
149 
150     HMAC_ALG_ADD_USER_NOTIFY_INTF_DET,
151     HMAC_ALG_ADD_USER_NOTIFY_TRAFFIC_CTL,
152     HMAC_ALG_ADD_USER_NOTIFY_EDCA,
153 
154     HMAC_ALG_ADD_USER_NOTIFY_BUTT,
155 } hmac_alg_add_user_notify_enum;
156 typedef osal_u8 hmac_alg_add_user_notify_enum_uint8;
157 
158 /* 删除关联用户回调函数枚举定义 */
159 typedef enum {
160     HMAC_ALG_DEL_USER_NOTIFY_SCHEDULE,
161     HMAC_ALG_DEL_USER_NOTIFY_AUTORATE,
162     HMAC_ALG_DEL_USER_NOTIFY_SMARTANT,
163     HMAC_ALG_DEL_USER_NOTIFY_DBAC,
164     HMAC_ALG_DEL_USER_NOTIFY_ACS,
165     HMAC_ALG_DEL_USER_NOTIFY_ANTI_INTF,
166     HMAC_ALG_DEL_USER_NOTIFY_CCA,
167     HMAC_ALG_DEL_USER_NOTIFY_TXBF,
168     HMAC_ALG_DEL_USER_NOTIFY_TPC,
169     HMAC_ALG_DEL_USER_NOTIFY_INTF_DET,
170     HMAC_ALG_DEL_USER_NOTIFY_CCA_OPT,
171     HMAC_ALG_DEL_USER_NOTIFY_TRAFFIC_CTL,
172 
173     HMAC_ALG_DEL_USER_NOTIFY_BUTT,
174 } hmac_alg_del_user_notify_enum;
175 typedef osal_u8 hmac_alg_del_user_notify_enum_uint8;
176 
177 /* 设置信道回调函数枚举定义 */
178 typedef enum {
179     HMAC_ALG_CFG_CHANNEL_NOTIFY_ACS,
180     HMAC_ALG_CFG_CHANNEL_NOTIFY_TXBF,
181 #ifdef _PRE_PLAT_FEATURE_CUSTOMIZE
182     HMAC_ALG_CFG_CHANNEL_NOTIFY_CCA_OPT,
183 #endif
184     HMAC_ALG_CFG_CHANNEL_NOTIFY_BUTT,
185 } hmac_alg_cfg_channel_notify_enum;
186 typedef osal_u8 hmac_alg_cfg_channel_notify_enum_uint8;
187 
188 /* 参数配置钩子枚举定义 */
189 typedef enum {
190     ALG_PARAM_CFG_START = 0,
191     ALG_PARAM_CFG_SCHEDULE = ALG_PARAM_CFG_START,
192     ALG_PARAM_CFG_ANTI_INTF,
193     ALG_PARAM_CFG_INTF_DET,
194     ALG_PARAM_CFG_EDCA,
195     ALG_PARAM_CFG_CCA_OPT,
196     ALG_PARAM_CFG_TEMP_PROTECT,
197     ALG_PARAM_CFG_TPC,
198     ALG_PARAM_CFG_AUTORATE,
199     ALG_PARAM_CFG_AGGR,
200     ALG_PARAM_CFG_RTS,
201     ALG_PARAM_CFG_TRAFFIC_CTL,
202     ALG_PARAM_CFG_DBAC,
203     ALG_PARAM_CFG_GLA,
204     ALG_PARAM_CFG_NOTIFY_BUTT
205 } alg_param_cfg_notify_enum;
206 typedef osal_u8 alg_param_cfg_notify_enum_uint8;
207 
208 /* 设置BT状态通知枚举定义 */
209 typedef enum {
210     HMAC_ALG_CFG_BTCOEX_STATE_NOTIFY_AUTORATE,
211     HMAC_ALG_CFG_BTCOEX_STATE_NOTIFY_BUTT,
212 } hmac_alg_cfg_btcoex_state_notify_enum;
213 typedef osal_u8 hmac_alg_cfg_btcoex_state_notify_enum_uint8;
214 
215 typedef enum {
216     HMAC_ALG_BT_AGGR_TIME_OFF = 0,
217     HMAC_ALG_BT_AGGR_TIME_4MS = 1,
218     HMAC_ALG_BT_AGGR_TIME_2MS = 2,
219     HMAC_ALG_BT_AGGR_TIME_1MS = 3,
220 
221     HMAC_ALG_BT_AGGR_TIME_BUTT
222 } hmac_alg_bt_aggr_time;
223 typedef osal_u8 hmac_alg_bt_aggr_time_uint8;
224 
225 /* 接收管理帧的回调函数 */
226 typedef enum {
227     HMAC_ALG_RX_MGMT_CCA_OPT,
228     HMAC_ALG_RX_MGMT_TXBF,
229     HMAC_ALG_RX_MGMT_ANTI_INTF,
230     HMAC_ALG_RX_MGMT_EDCA_OPT,
231     HMAC_ALG_RX_MGMT_TPC,
232 
233     HMAC_ALG_RX_MGMT_NOTIFY_BUTT
234 } hmac_alg_rx_mgmt_notify_enum;
235 typedef osal_u8 hmac_alg_rx_mgmt_notify_enum_uint8;
236 /* 接收控制帧的回调函数 */
237 typedef enum {
238     HMAC_ALG_RX_CNTL_AUTORATE,
239 
240     HMAC_ALG_RX_CNTL_NOTIFY_BUTT
241 } hmac_alg_rx_cntl_notify_enum;
242 typedef osal_u8 hmac_alg_rx_cntl_notify_enum_uint8;
243 
244 /*****************************************************************************
245   3 宏定义
246 *****************************************************************************/
247 /* 控制面回调函数类型定义 */
248 typedef osal_u32 (*p_alg_cfg_channel_notify_func)(hmac_vap_stru *hmac_vap, mac_alg_channel_bw_chg_type_uint8 type);
249 
250 typedef void (*p_alg_cfg_btcoex_state_notify_func)(hal_to_dmac_device_stru *hal_device,
251     hmac_alg_bt_aggr_time_uint8 type);
252 
253 typedef osal_u32 (*p_alg_add_assoc_user_notify_func)(hmac_vap_stru *hmac_vap, hmac_user_stru *hmac_user);
254 typedef osal_u32 (*p_alg_delete_assoc_user_notify_func)(hmac_vap_stru *hmac_vap, hmac_user_stru *hmac_user);
255 
256 /* 收发流程相关回调 */
257 typedef osal_u32 (*p_alg_rx_notify_func)(hmac_vap_stru *hmac_vap, hmac_user_stru *hmac_user, oal_netbuf_stru *buf,
258     hal_rx_statistic_stru *rx_stats);
259 typedef osal_u32 (*p_alg_vap_up_notify_func)(hmac_vap_stru *hmac_vap);
260 typedef osal_u32 (*p_alg_vap_down_notify_func)(hmac_vap_stru *hmac_vap);
261 typedef osal_u32 (*p_alg_tx_notify_func)(hmac_user_stru *hmac_user, mac_tx_ctl_stru *cb,
262     hal_tx_txop_alg_stru *txop_param);
263 
264 /* 调度相关回调 */
265 typedef osal_u32 (*p_alg_tx_schedule_func)(const hal_to_dmac_device_stru *device, osal_u8 ac_num,
266     mac_tid_schedule_output_stru *sch_output);
267 typedef osal_u32 (*p_alg_tx_schedule_timer_func)(const hal_to_dmac_device_stru *device);
268 typedef osal_u32 (*p_alg_update_tid_notify_func)(hmac_tid_stru *pst_tid, osal_u8 in_mpdu_num);
269 typedef osal_u32 (*p_alg_update_user_info_notify_func)(const hal_to_dmac_device_stru *hal_device,
270     hmac_user_stru *hmac_user, mac_tid_schedule_output_stru schedule_ouput, osal_u8 device_mpdu_full);
271 /* 事件回调 */
272 /* 接收管理帧回调 */
273 typedef osal_u32  (*p_alg_rx_mgmt_notify_func)(const hmac_vap_stru *hmac_vap, hmac_user_stru *hmac_user,
274     oal_netbuf_stru *buf);
275 typedef osal_u32  (*p_alg_anti_intf_tbtt_notify_func)(hmac_vap_stru *hmac_vap, hal_to_dmac_device_stru *hal_device);
276 
277 /* 处理接收控制帧回调 */
278 typedef osal_u32  (*p_alg_rx_cntl_notify_func)(const hmac_vap_stru *hmac_vap, const hmac_user_stru *hmac_user,
279     const oal_netbuf_stru *buf);
280 
281 /* 功率表刷新通知TPC算法回调 */
282 typedef osal_u32 (*p_alg_pow_table_refresh_notify_func)(hmac_vap_stru *hmac_vap);
283 
284 /* cb更新通知TPC算法回调 */
285 typedef osal_void (*p_alg_update_cb_rssi_level_notify_func)(hmac_vap_stru *hmac_vap, mac_tx_ctl_stru *cb,
286     hmac_user_stru *hmac_user);
287 #ifdef _PRE_RADAR_CCA_SW_OPT
288 /* 雷达开启需要将CCA能量门限和协议门限都设置到不小于-60,避免影响雷达帧间隔 */
289 typedef osal_void (*p_alg_cca_opt_radar_notify_func)(osal_bool radar_switch);
290 #endif
291 typedef osal_u32 (*p_alg_para_sync_notify_func)(alg_param_sync_stru *para);
292 typedef osal_u32 (*p_alg_para_cfg_notify_func)(hmac_vap_stru *hmac_vap, frw_msg *msg);
293 
294 typedef osal_u32 (*p_alg_distance_notify_func)(hal_to_dmac_device_stru *hal_device, osal_u8 distance);
295 typedef void (*p_alg_intf_det_pk_mode_notify_func)(hmac_vap_stru *hmac_vap, oal_bool_enum_uint8 is_pk_mode);
296 typedef osal_u32 (*p_alg_intf_det_edca_notify_func)(osal_void);
297 typedef osal_u32 (*p_alg_intf_det_cca_notify_func)(hal_to_dmac_device_stru *hal_device, osal_u8 old_intf_mode,
298     osal_u8 cur_intf_mode);
299 typedef osal_void (*p_alg_intf_det_cca_chk_noise_notify_func)(osal_s8 avg_rssi_20,
300     oal_bool_enum_uint8 coch_intf_state_sta, osal_u8 cur_intf);
301 typedef osal_u32 (*p_alg_scan_param_func)(const mac_scan_req_stru *scan_req_params);
302 typedef osal_void (*p_alg_intf_det_scan_chn_cb_func)(const osal_void *param);
303 /*****************************************************************************
304   7 STRUCT定义
305 *****************************************************************************/
306 /* 挂在chip上的数据结构 */
307 typedef struct {
308     void       *alg_info[HMAC_ALG_CHIP_STRU_ID_BUTT];
309 } hmac_alg_dev_stru;
310 
311 /* 挂在各个user上的数据结构 */
312 typedef struct {
313     void        *alg_info[HMAC_ALG_USER_STRU_ID_BUTT];
314 } hmac_alg_user_stru;
315 
316 /* 挂在各个tid上的数据结构 */
317 typedef struct {
318     void        *alg_info[HMAC_ALG_TID_STRU_ID_BUTT];
319 } hmac_alg_tid_stru;
320 
321 typedef struct {
322     osal_u16 head_mpdu_num;
323     osal_u16 min_mpdu_len;
324     osal_u16 max_mpdu_len;
325     osal_u16 resv;    // 预留
326 } hmac_alg_mpdu_len_stru;
327 
328 /* 算法主结构体,挂在DEVICE上 */
329 typedef struct {
330     osal_u32 alg_bitmap; /* 算法位图,每位表示一个算法是否注册 */
331     p_alg_tx_notify_func pa_tx_notify_func[HMAC_ALG_TX_NOTIFY_BUTT];
332     p_alg_rx_notify_func pa_rx_notify_func[HMAC_ALG_RX_NOTIFY_BUTT];
333     p_alg_update_tid_notify_func tid_update_func;
334     p_alg_update_user_info_notify_func user_info_update_func;
335     p_alg_tx_schedule_func tx_schedule_func;
336     p_alg_tx_schedule_timer_func tx_schedule_timer_func;
337     p_alg_add_assoc_user_notify_func pa_add_assoc_user_notify_func[HMAC_ALG_ADD_USER_NOTIFY_BUTT];
338     p_alg_delete_assoc_user_notify_func pa_delete_assoc_user_notify_func[HMAC_ALG_DEL_USER_NOTIFY_BUTT];
339     p_alg_cfg_channel_notify_func pa_cfg_channel_notify_func[HMAC_ALG_CFG_CHANNEL_NOTIFY_BUTT];
340     p_alg_cfg_btcoex_state_notify_func pa_cfg_btcoex_state_notify_func[HMAC_ALG_CFG_BTCOEX_STATE_NOTIFY_BUTT];
341 
342     p_alg_rx_mgmt_notify_func rx_mgmt_func[HMAC_ALG_RX_MGMT_NOTIFY_BUTT];
343     p_alg_rx_cntl_notify_func rx_cntl_func[HMAC_ALG_RX_CNTL_NOTIFY_BUTT];
344     p_alg_vap_up_notify_func pa_alg_vap_up_notify_func[HMAC_ALG_VAP_UP_BUTT];
345     p_alg_vap_down_notify_func pa_alg_vap_down_notify_func[HMAC_ALG_VAP_DOWN_BUTT];
346     p_alg_anti_intf_tbtt_notify_func anti_intf_tbtt_func;
347 
348     p_alg_scan_param_func scan_param_func;
349     p_alg_intf_det_scan_chn_cb_func scan_comp_cb_func;
350     p_alg_bfee_report_pow_adjust_notify bfee_report_pow_adjust_notify;
351     p_alg_pow_table_refresh_notify_func alg_pow_table_refresh_notify_func;
352     p_alg_update_cb_rssi_level_notify_func alg_update_cb_rssi_level_notify_func;
353 #ifdef _PRE_RADAR_CCA_SW_OPT
354     p_alg_cca_opt_radar_notify_func alg_cca_opt_radar_notify_func;
355 #endif
356 #ifdef _PRE_WLAN_FEATURE_ANTI_INTERF
357     p_alg_anti_intf_switch_func anti_intf_switch_func;
358     p_alg_anti_intf_tx_time_notify_func anti_intf_tx_time_notify_func;
359 #endif
360     p_alg_para_sync_notify_func alg_para_sync_notify_func[ALG_PARAM_SYNC_NOTIFY_BUTT];
361     p_alg_para_cfg_notify_func alg_para_cfg_notify_func[ALG_PARAM_CFG_NOTIFY_BUTT];
362 } hmac_alg_stru;
363 
364 #ifdef __cplusplus
365 #if __cplusplus
366 }
367 #endif
368 #endif
369 
370 #endif /* end of hmac_alg_if_strutc_define.h */
371