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