WS63 SDK 文档 7021f4f@fbb_ws63
ws63 和 ws63e 解决方案的 SDK 文档
载入中...
搜索中...
未找到
alg_autorate_rom.h
浏览该文件的文档.
1/*
2 * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2020-2022. All rights reserved.
3 * Description: header file of alg_autorate_rom.h
4 */
5
6#ifndef ALG_AUTORATE_ROM_H
7#define ALG_AUTORATE_ROM_H
8
9/*****************************************************************************
10 1 其他头文件包含
11*****************************************************************************/
12#include "alg_main_rom.h"
13#include "hal_device_rom.h"
14#include "dmac_alg_if_part_rom.h"
16
17#ifdef __cplusplus
18#if __cplusplus
19extern "C" {
20#endif
21#endif
22
23#ifdef _PRE_WLAN_FEATURE_AUTORATE
24
25/*****************************************************************************
26 1 宏定义
27*****************************************************************************/
28#define BIT_0 ((osal_u32)(1 << 0))
29#define BIT_3 ((osal_u32)(1 << 3))
30/* 比较宏 */
31#define ar_min(_A, _B) (((_A) < (_B)) ? (_A) : (_B))
32
33/* 比较宏 */
34#define ar_max(_A, _B) (((_A) > (_B)) ? (_A) : (_B))
35#define ar_sub(_A, _B) (((_A) > (_B)) ? ((_A) - (_B)) : (0))
36
37#define rssi_mcs_tbl(_rate_index, _rssi) \
38 { \
39 _rate_index, _rssi, { 0, 0 } \
40 }
41
42#define rssi_mcs_group_tbl(_item, _cnt) \
43 { \
44 _item, _cnt, { 0, 0, 0 } \
45 }
46#define alg_array_size(_ast_array) (sizeof(_ast_array) / sizeof((_ast_array)[0]))
47
48#define RATE_TBL_11B_RATE_NUM 4 /* 11b速率数目 */
49#define RATE_TBL_11AG_RATE_NUM 8 /* 11a/g速率数目 */
50#define ALG_AUTORATE_MAX_AGGR_NUM (WLAN_AMPDU_TX_MAX_NUM) /* 默认的最大聚合长度 */
51#define ALG_AUTORATE_CFG_RANK_SHIFT 22 /* 用alg_autorate_tx_rate_rank_stru的resv字段保存rank */
52#define ALG_AUTORATE_CFG_RANK_BIT 0x3 /* 2bit */
53#define ALG_AUTORATE_CFG_FRAME_TYPE_SHIFT 24 /* 用alg_autorate_tx_rate_rank_stru的resv字段保存frame type */
54#define ALG_AUTORATE_CFG_FRAME_TYPE_BIT 0x3 /* 2bit */
55
56#define ALG_RATE_TABLE_INVALID_RATE_INDEX 0xFF
57#define ALG_AUTORATE_INVALID_RATE 0xff /* 无效速率索引 */
58#define ALG_AUTORATE_VHT_NSS_MCS_NONE 0xff /* vht该空间流不支持任何速率 */
59#define ALG_AUTORATE_HE_NSS_MCS_NONE 0xff
60#define ALG_AUTORATE_INVALID_PKTNUM 0xFFFFFFFF /* 无效的探测包pktnum */
61#define ALG_AUTORATE_PROBE_RATE_TX_COUNT 1 /* 探测速率发送次数 */
62#define ALG_RETRY_NUM_DCM 2 /* DCM可使用的rank个数 */
63#define ALG_AUTORATE_PER_STAT_NORMAL_RSSI_THR (-60) /* 更新PER时判定当前是否为强信号的门限 */
64#define ALG_RSSI_INIT_MARKER 127 /* RSSI平滑值初始值,单位db,对应127dBm */
65
66/* 用户gi ltf能力bitmap */
67#define ALG_AUTORATE_HE_SU_PPDU_1XLTF_GI1_BIT_MASK 0x1 /* BIT0 */
68#define ALG_HE_SU_PPDU_1XLTF_GI1_SHIFT 0
69#define ALG_AUTORATE_HE_ER_SU_PPDU_1XLTF_GI1_BIT_MASK 0x2 /* BIT1 */
70#define ALG_HE_ER_SU_PPDU_1XLTF_GI1_SHIFT 1
71#define ALG_AUTORATE_HE_ER_SU_PPDU_4XLTF_GI1_BIT_MASK 0x4 /* BIT2 */
72#define ALG_HE_ER_SU_PPDU_4XLTF_GI1_SHIFT 2
73#define ALG_AUTORATE_HE_SU_MU_PPDU_4XLTF_GI1_BIT_MASK 0x8 /* BIT3 */
74#define ALG_HE_SU_MU_PPDU_4XLTF_GI1_SHIFT 3
75#define ALG_AUTORATE_NDP_4XLTF_GI4_BIT_MASK 0x10 /* BIT4 */
76#define ALG_NDP_4XLTF_GI4_SHIFT 4
77/* 速率统计个数 ar_max(ar_max(WLAN_11B_BUTT, WLAN_11AG_BUTT), ar_max(WLAN_HT_SINGLE_NSS_END, WLAN_HE_MCS_BUTT)) */
78#define ALG_AUTORATE_USER_RATE_STAT_MAX_NUM (WLAN_HE_MCS_BUTT)
79#define ALG_AUTORATE_RATE_CAP_HT_BW_CNT 2 /* HT支持的带宽个数 */
80#define ALG_AUTORATE_RATE_CAP_VHT_BW_CNT_2G 2 /* VHT 2G支持的带宽个数 */
81#define ALG_AUTORATE_RATE_CAP_VHT_BW_CNT 4 /* VHT 5G支持的带宽个数 */
82#define ALG_AUTORATE_BYTE_TO_BIT_SHIFT 3 /* Byte->bit移位值 */
83#define ALG_AUTORATE_RATE_MBPS_TO_KBPS 1000 /* 速率扩大倍数(Mbps->kbps) */
84/* 各协议模式初始速率建议值 */
85#define ALG_RATE_STAT_INIT_START_INDEX_11B WLAN_11B_1_M_BPS
86#define ALG_RATE_STAT_INIT_START_INDEX_11AG WLAN_11AG_6M_BPS
87#define ALG_RATE_STAT_INIT_START_INDEX_11N WLAN_HT_MCS1
88#define ALG_RATE_STAT_INIT_START_INDEX_11AC WLAN_VHT_MCS1
89#define ALG_RATE_STAT_INIT_START_INDEX_11AX WLAN_HE_MCS1
90#define ALG_AUTORATE_HT_MAX_BITMAP_LEN (WLAN_HT_MAX_BITMAP_LEN) /* ht速率的bitmap最大位数 */
91#define ALG_AUTORATE_HT_MAX_BITMAP_SHIFT 3 /* ht速率的bitmap最大位数移位值 */
92
93/* rx 描述符bw枚举转算法bw枚举 */
94#define rx_desc_freq_bw_2_alg_ar_bw_cap(_rx_desc_freq_bw) \
95 (((_rx_desc_freq_bw) == WLAN_BAND_ASSEMBLE_20M) ? ALG_AR_BW_CAP_20M : \
96 ((_rx_desc_freq_bw) == WLAN_BAND_ASSEMBLE_SU_ER_106_TONE) ? ALG_AR_BW_HE_RU_106_TONE : \
97 ((_rx_desc_freq_bw) == WLAN_BAND_ASSEMBLE_40M) ? ALG_AR_BW_CAP_40M : \
98 ((_rx_desc_freq_bw) == WLAN_BAND_ASSEMBLE_40M_DUP) ? ALG_AR_BW_CAP_20M : ALG_AR_BW_CAP_BUTT)
99
100#define alg_autorate_get_vht_max_support_mcs(_nss_mcs_bit) \
101 ((3 == (_nss_mcs_bit)) ? ALG_AUTORATE_VHT_NSS_MCS_NONE : \
102 (2 == (_nss_mcs_bit)) ? WLAN_VHT_MCS9 : \
103 (1 == (_nss_mcs_bit)) ? WLAN_VHT_MCS8 : WLAN_VHT_MCS7)
104
105#define alg_autorate_get_he_max_support_mcs(_nss_mcs_bit) \
106 ((3 == (_nss_mcs_bit)) ? ALG_AUTORATE_HE_NSS_MCS_NONE : \
107 (2 == (_nss_mcs_bit)) ? WLAN_HE_MCS9 + 2 : \
108 (1 == (_nss_mcs_bit)) ? WLAN_HE_MCS9 : WLAN_HE_MCS7)
109
110/* 计算goodput需要的参数 */
111#define ALG_AGGR_11N_AGGR_BYTES_LIMIT 65535 /* 11n的最大聚合字节数限制 */
112#define ALG_AGGR_11AC_AGGR_BYTES_LIMIT 1048575 /* 11ac的最大聚合字节数限制 */
113#define ALG_AGGR_11AX_AGGR_BYTES_LIMIT 6500631 /* 11ax的最大聚合字节数限制 */
114#define ALG_TYPICAL_FRAME_LEN 1544 /* 典型包长 */
115#define ALG_AUTORATE_RATE_MBPS_TO_KBPS 1000 /* 速率扩大倍数(Mbps->kbps) */
116#define ALG_AUTORATE_TIME_KBPS_TO_BPS 1000 /* 速率扩大倍数(kbps->bps) */
117#define ALG_AUTORATE_TIME_MS_TO_US 1000 /* 时间扩大倍数(us->ns) */
118#define ALG_AUTORATE_TIME_NS_TO_US 1000 /* 时间缩小倍数(NS->us) */
119#define ALG_AUTORATE_DIFS_TIME_US 28 /* DIFS时间开销(单位:us) */
120#define ALG_AUTORATE_SIFS_TIME_US 10 /* SIFS时间开销(单位:us) */
121#define ALG_AUTORATE_BA_TIME_US 32 /* BA时间开销(单位:us) */
122#define ALG_AUTORATE_11AG_ACK_TIME_US 40 /* 11a/g ACK时间开销(单位:us) */
123#define ALG_AUTORATE_11B_ACK_TIME_US 208 /* 11b ACK时间开销(单位:us) */
124#define ALG_AUTORATE_11N_PHY_HEAD_TIME_US 32 /* 11n的phy头所占时间(单位:us)--HT-LTF与NSS相关,另外计算 */
125#define ALG_AUTORATE_11AC_PHY_HEAD_TIME_US 36 /* 11ac的phy头所占时间(单位:us)--VHT-LTF与NSS相关,另外计算 */
126#define ALG_AUTORATE_11AG_PHY_HEAD_TIME_US 20 /* 11a/g的phy头所占时间(单位:us) */
127#define ALG_AUTORATE_11B_PHY_HEAD_TIME_US 96 /* 11b的PHY头所占时间(单位:us) */
128#define ALG_AUTORATE_HE_LTF_4X_TIME_NS 1280 /* HE-LTF时间开销(单位:ns) */
129#define ALG_AUTORATE_HT_VHT_LTF_TIME_US 4 /* HT-LTF/VHT-LTF时间开销(单位:us) */
130#define ALG_AUTORATE_SUBFRAME_DELIMITER 4 /* 子帧delimiter字节数 */
131#define ALG_AUTORATE_11AX_HE_SU_PPDU_PHY_HEAD_TIME_US 36 /* 11ax的HESUPPDU PHY头所占时间(us) HE-LTF与NSS相关另外计算 */
132/* 描述符相关 */
133#define ALG_RATE_VALUE_MCS_SHIFT 4
134#define alg_ar_build_nss_mcs(_nss, _mcs) ((osal_u8)(((_nss) << ALG_RATE_VALUE_MCS_SHIFT) | (_mcs)))
135#define alg_ar_other_alg_probe_ppdu(_type) \
136 ((_type) != DMAC_USER_ALG_NON_PROBE && (_type) != DMAC_USER_ALG_AUOTRATE_PROBE)
137#define alg_ar_probe_ppdu(_type) (DMAC_USER_ALG_AUOTRATE_PROBE == (_type))
138#define alg_ar_lock_user(_lock) ((_lock) == ALG_LOCK_AUTORATE_PROBE)
139#define alg_ar_other_alg_lock_user(_lock) (((_lock) != ALG_LOCK_NON_PROBE) && ((_lock) != ALG_LOCK_AUTORATE_PROBE))
140
141/* 发送异常,数据帧没有真正发送到空口 */
142#define alg_autorate_tx_status_is_abandon_tx(_status, _data_send_cnt) \
143 ((HAL_TX_INVALID == (_status)) || (HAL_TX_KEY_SEARCH_FAIL == (_status)) || (HAL_TX_AMPDU_MISMATCH == (_status)) || \
144 (HAL_TX_FAIL_ABORT == (_status)) || (HAL_TX_TIMEOUT == (_status)) || ((_data_send_cnt) == 0))
145
146#define alg_rate_stat_smooth_short_per(_avg_per, _instant_per, _scale) \
147 ((((osal_u16)((_avg_per) * ((1ul << (ALG_AUTORATE_SHORT_STAT_SHIFT + (osal_u8)(_scale))) - 1))) >> \
148 (ALG_AUTORATE_SHORT_STAT_SHIFT + (osal_u8)(_scale))) + \
149 ((_instant_per) >> (ALG_AUTORATE_SHORT_STAT_SHIFT + (osal_u8)(_scale))))
150#define alg_ar_is_probe_rate_good(_rate1, _rate2) (((_rate1)->short_per <= ALG_AR_RATE_BAD_THRD) || \
151 ((_rate2)->short_per <= ALG_AR_RATE_BAD_THRD))
152
153#define is_rate_pro_bw_nss_diff(_rate_record_node, _probe_node) \
154 (((_rate_record_node)->en_protocol != (_probe_node)->en_protocol) || \
155 ((_rate_record_node)->en_bw != (_probe_node)->en_bw) || \
156 ((_rate_record_node)->en_nss != (_probe_node)->en_nss) || \
157 ((_rate_record_node)->en_gi_type != (_probe_node)->en_gi_type))
158
159/* 不同bw, rssi差值 */
160#define alg_ar_cali_rssi_based_bw(_bw, _ori_rssi) \
161 (((_bw) == ALG_AR_BW_CAP_20M) ? (_ori_rssi) : \
162 ((_bw) == ALG_AR_BW_CAP_40M) ? ((_ori_rssi) - 3) : \
163 ((_bw) == ALG_AR_BW_CAP_80M) ? ((_ori_rssi) - 6) : ((_ori_rssi) - 9))
164
165#define alg_ar_judge_is_same_stat_info(_pbest_rate, _best_rate) \
166 ((((_pbest_rate)->en_protocol) == ((_best_rate)->en_protocol)) && \
167 (((_pbest_rate)->en_bw) == ((_best_rate)->en_bw)) && \
168 (((_pbest_rate)->en_nss) == ((_best_rate)->en_nss)) && \
169 (((_pbest_rate)->en_gi_type) == ((_best_rate)->en_gi_type)) && \
170 (((_pbest_rate)->en_dcm_used) == ((_best_rate)->en_dcm_used)))
171
172/*****************************************************************************
173 3 枚举定义
174*****************************************************************************/
175/* AUTORATE 专用带宽能力枚举 */
176typedef enum {
177 ALG_AR_BW_HE_RU_26_TONE,
178 ALG_AR_BW_HE_RU_52_TONE,
179 ALG_AR_BW_HE_RU_106_TONE,
180 ALG_AR_BW_CAP_20M,
181 ALG_AR_BW_CAP_40M,
182 ALG_AR_BW_CAP_2G_BUTT,
183 ALG_AR_BW_CAP_80M = ALG_AR_BW_CAP_2G_BUTT,
184 ALG_AR_BW_CAP_160M,
185
186 ALG_AR_BW_CAP_BUTT
187} alg_ar_bw_cap_enum;
188typedef osal_u8 alg_ar_bw_cap_enum_uint8;
189/* 用于标识各协议模式rate table包含的带宽,rate table新增带宽则需要修改以下枚举 */
190typedef enum {
191 ALG_AR_RATE_TABLE_HT_20M,
192 ALG_AR_RATE_TABLE_HT_40M,
193 ALG_AR_RATE_TABLE_HT_BUTT,
194} alg_rate_table_ht_bw_type_enum;
195typedef osal_u8 alg_rate_table_ht_bw_type_enum_uint8;
196typedef enum {
197 ALG_AR_RATE_TABLE_VHT_20M,
198 ALG_AR_RATE_TABLE_VHT_40M,
199 ALG_AR_RATE_TABLE_VHT_BUTT,
200} alg_rate_table_vht_bw_type_enum;
201typedef osal_u8 alg_rate_table_vht_bw_type_enum_uint8;
202typedef enum {
203 ALG_AR_RATE_TABLE_HE_RU_26_TONE,
204 ALG_AR_RATE_TABLE_HE_RU_52_TONE,
205 ALG_AR_RATE_TABLE_HE_RU_106_TONE,
206 ALG_AR_RATE_TABLE_HE_20M,
207 ALG_AR_RATE_TABLE_HE_BUTT,
208} alg_rate_table_he_bw_type_enum;
209typedef osal_u8 alg_rate_table_he_bw_type_enum_uint8;
210
211/* he用户速率能力索引 */
212typedef enum {
213 ALG_AUTORATE_HE_RATE_SET_CAP_LE_80M_INDEX = 0, /* 带宽<=80M */
214 ALG_AUTORATE_HE_RATE_SET_CAP_160M_INDEX = 1, /* 带宽为160M */
215
216 ALG_AUTORATE_HE_RATE_SET_CAP_INDEX_BUTT
217} alg_autorate_he_rate_set_cap_index_enum;
218typedef osal_u8 alg_autorate_he_rate_set_cap_index_enum_uint8;
219
220/* AR探测模式索引 */
221typedef enum {
222 ALG_AUTORATE_PROBE_MCS,
223 ALG_AUTORATE_PROBE_BW,
224 ALG_AUTORATE_PROBE_PROTOCOL,
225
226 ALG_AUTORATE_PROBE_PHASE_BUTT
227} alg_autorate_probe_phase_enum;
228typedef osal_u8 alg_autorate_probe_phase_enum_uint8;
229
230/* 探测方向 */
231typedef enum {
232 ALG_AUTORATE_PROBE_UP = 0, /* mcs up/ascend bw/ascend protocol */
233 ALG_AUTORATE_PROBE_DOWN = 1, /* mcs down/descend bw/descend protocol */
234 ALG_AUTORATE_PROBE_DIRECTION_BUTT
235} alg_autorate_probe_direction_enum;
236typedef osal_u8 alg_autorate_probe_direction_enum_uint8;
237
238typedef enum {
239 ALG_AUTORATE_DESCEND_PROTOCOL,
240 ALG_AUTORATE_ASCEND_PROTOCOL,
241
242 ALG_AUTORATE_CROSS_PROTOCOL_PROBE_DIRECTION_BUTT
243} alg_autorate_cross_pro_probe_direction_enum;
244typedef osal_u8 alg_autorate_cross_pro_probe_direction_enum_uint8;
245
246typedef enum {
247 ALG_AR_CFG_FIX_RATE_UCAST_DATA,
248 ALG_AR_CFG_FIX_RATE_BCAST_DATA,
249 ALG_AR_CFG_FIX_RATE_UCAST_MGMT,
250 ALG_AR_CFG_FIX_RATE_BCAST_MGMT,
251
252 ALG_AR_CFG_FIX_RATE_BUTT
253} alg_ar_cfg_fix_rate_frame_type_enum;
254typedef osal_u8 alg_ar_cfg_fix_rate_frame_type_enum_uint8;
255/*****************************************************************************
256 4 全局变量声明
257*****************************************************************************/
258
259/*****************************************************************************
260 5 STRUCT定义
261*****************************************************************************/
262typedef struct {
263 osal_u32 rate_kbps; /* WLAN_LONG_GI */
264 osal_u32 sgi_rate_kbps; /* WLAN_SHORT_GI */
265 osal_u32 aggr_bytes_limit_4ms;
266} alg_rate_table_stru;
267
268/* 每个rank的速率信息,注意每元素要定义为4字节,只用于临时计算 */
269typedef struct {
270 osal_u32 protocol_mode; /* wlan_phy_protocol_enum */
271 osal_u32 freq_bw; /* hal_channel_assemble_enum */
272 osal_u32 preamble; /* wlan_phy_preamble_type */
273 osal_u32 fec_coding; /* wlan_channel_code_enum */
274 osal_u32 gi_type; /* wlan_phy_he_gi_type_enum_uint8 */
275 osal_u32 ltf_type; /* wlan_phy_he_ltf_type_enum */
276 osal_u32 tx_count; /* 发送次数 */
277 osal_u32 ppdu_dcm; /* wlan_phy_dcm_status */
278 osal_u32 nss_rate; /* wlan_phy_rate_enum */
279} alg_autorate_tx_rate_rank_stru;
280
281#ifdef _PRE_WLAN_FEATURE_INTRF_MODE
282/* 干扰场景优化配置信息结构体 */
283typedef struct {
284 osal_u8 fix_11b_switch; /* 固定11b模式下的发送速率 */
285 osal_u8 fix_11n_switch; /* 设置11n模式下的速率档位 */
286 osal_u8 no_11b_switch; /* 设置Autorate算法为不降协议至11b */
287 osal_u8 resv;
288} alg_autorate_intrf_mode_cfg_stru;
289#endif
290
291/* 速率自适应算法 VAP级别 结构体 */
292typedef struct {
293 dmac_vap_stru *dmac_vap;
297
298#ifdef _PRE_WLAN_FEATURE_INTRF_MODE
299 alg_autorate_intrf_mode_cfg_stru intrf_mode_cfg; /* 干扰场景优化配置信息 */
300#endif
301
302 osal_u8 en_registered;
303 osal_u8 resv[3];
304 osal_u8 *rom;
305} alg_autorate_vap_stru;
306
307typedef struct {
308 osal_u32 ht_rate_set_bitmap; /* 11n 20/40M 下各速率的 bitmap,bit0~bit15: MCS0~MCS15 */
309 oal_bool_enum_uint8 en_supp_short_gi[ALG_AR_BW_CAP_2G_BUTT]; /* 11n 20/40M 下是否支持 short_gi */
310 osal_u8 rev;
311} alg_autorate_ht_rate_set_stru;
312
313typedef struct {
314 osal_u16 vht_rate_set_bitmap[WLAN_NSS_MAX_NUM_LIMIT]; /* 11ac 各nss 速率的bitmap: MCS0~MCS11 */
315 oal_bool_enum_uint8 supp_short_gi[ALG_AR_BW_CAP_BUTT]; /* 11ac 20/40/80/160 下是否支持 short_gi */
316 osal_u8 rev;
317} alg_autorate_vht_rate_set_stru;
318
319typedef struct {
320 /* 11ax le80M/160M & 各nss 速率的bitmap: MCS0~MCS11 */
321 osal_u16 he_rate_set_bitmap[ALG_AUTORATE_HE_RATE_SET_CAP_INDEX_BUTT][WLAN_NSS_MAX_NUM_LIMIT];
322
323 /* ---------- optional HE-LTF + GIx capability ----------
324 *
325 * BIT0: HE_SU_PPDU 1 x HE-LTF + 0.8us
326 * BIT1: HE_ER_SU_PPDU 1 x HE-LTF + 0.8us
327 * BIT2: HE_ER_SU_PPDU 4 x HE-LTF + 0.8us
328 * BIT3: HE_SU/MU_PPDU 4 x HE-LTF + 0.8us
329 * BIT4: NDP 4 x HE-LTF + 3.2us
330 * BIT5: HE_SU/MU_PPDU 4 x HE-LTF + 0.4us
331*/
332 osal_u8 he_ltf_gi_cap_bitmap;
333 osal_u8 rev[3];
334} alg_autorate_he_rate_set_stru;
335
336/* 最底层 basic Rate Info结构 */
337typedef struct {
338 wlan_protocol_enum_uint8 en_protocol; /* !!! wlan_protocol_enum_uint8, tx param trans to wlan_phy_protocol_enum */
339 alg_ar_bw_cap_enum_uint8 en_bw; /* !!! alg_ar_bw_cap_enum_uint8, tx param trans to hal_channel_assemble_enum */
340 wlan_nss_enum_uint8 en_nss;
341 wlan_gi_type_enum_uint8 en_gi_type; /* !!! wlan_gi_type_enum, tx param [he] trans to wlan_phy_he_gi_type_enum */
342
343 oal_bool_enum_uint8 en_dcm_used;
344 osal_u8 rate_index; /* !!! mcs: wlan_11b_rate_index_enum_uint8/wlan_legacy_ofdm_mcs_enum_uint8/
345 wlan_ht_mcs_enum_uint8/wlan_vht_mcs_enum/wlan_he_mcs_enum,
346 tx param need trans to wlan_phy_rate_enum */
347 osal_u16 short_per;
348 osal_u16 long_per; /* best rate用,探测node不用 */
349 osal_u16 rev;
350 osal_u32 theory_goodput; /* 对应带宽下该速率的理论goodput */
351} alg_autorate_basic_rate_info_stru;
352
353typedef struct {
354 osal_u8 probe_intvl_pktcnt; /* 探测间隔包计数 */
355 osal_u8 probe_pktcnt_thrd; /* 探测间隔包门限 */
356 osal_u8 probe_cur_intvl_keep_cnt; /* 探测当前包间隔门限保持计数 */
357 osal_u8 probe_intvl_keep_cnt_thrd; /* 探测当前包间隔门限保持计数的门限 */
358} alg_autorate_probe_time_trigger_info_stru;
359
360typedef struct {
361 osal_u8 need_continue_probe; /* 当前探测速率是否需要再次探测 */
362 osal_u8 cur_probe_succ; /* 当前探测报文是否发送成功,作为继续探测的前提 */
363 osal_u8 rssi_sudden_flag; /* 用户RSSI突变标志 */
364 osal_u8 is_probe_up_reserve_rate_better; /* 约束探测间隔不要增大,探测间隔计数不累加 */
365 osal_u8 resv_rate_better_probe; /* 探测过程中最优速率per变化明显,说明环境变化明显, 触发向上探测 */
366 osal_u8 is_probe_other_gi; /* 标记当前是否在探测other gi */
367 osal_u16 probe_mpdu_cnt; /* 探测mpdu个数 */
368 osal_u16 rate_record_org_short_per; /* 探测前记录的short per */
369 osal_u16 rev;
370
371 alg_autorate_basic_rate_info_stru last_stage_best_probe_rate_info;
372 alg_autorate_probe_time_trigger_info_stru up_time_trig_info;
373 alg_autorate_probe_time_trigger_info_stru down_time_trig_info;
374} alg_autorate_probe_mcs_stru;
375typedef struct {
376 osal_u8 ascend_bw_rate_better_keep_cnt; /* 待升带宽速率比当前带宽最优速率gdpt高的持续计数,超过门限才能切换 */
377 osal_u8 descend_bw_rate_better_keep_cnt; /* 降带宽速率比最优速率gp高的计数,超过门限才能切换 */
378 osal_u8 en_enable_event_trig; /* 当前是否使能 event trig 降带宽探测 */
379 osal_u8 consecutive_event_trig_cnt; /* 记录event trig 连续降带宽探测未探测到最优速率的次数,超过上限去使能 */
380
381 alg_autorate_probe_time_trigger_info_stru ascend_bw_time_trig_info; /* 升带宽计数触发,降带宽事件触发 */
382 alg_autorate_probe_time_trigger_info_stru descend_bw_time_trig_info; /* 降带宽计数触发,降带宽事件触发 */
383} alg_autorate_probe_bw_stru;
384
385typedef struct {
386 /* probe mgmt info */
387 osal_u8 is_probing; /* 用户是否正在进行ar探测 */
388 osal_u8 is_event_trig; /* 是否事件触发本次探测 */
389 alg_autorate_probe_phase_enum_uint8 cur_probe_phase; /* 探测模式 mcs/bw/protocol */
390 alg_autorate_probe_direction_enum_uint8 cur_probe_direction;
391 osal_u8 probe_pktno_wait_cnt; /* 发送方式乒乓操作, 下次tx_complete获得的pktno不一定
392 为本次tx_process设置的probe_pktno, 设置wait_cnt避免卡死 */
393 osal_u8 rev[3];
394 osal_u32 probe_pktno; /* used to identify probe pkt */
395 osal_u32 last_probe_node_time_ms; /* 探测阶段内,上一次报文发送完成的时间戳 ms,距离当前时间太久则结束探测 */
396
397 alg_autorate_probe_mcs_stru probe_mcs_info;
398 alg_autorate_probe_bw_stru probe_bw_info;
399 alg_autorate_basic_rate_info_stru best_probe_rate_info;
400 alg_autorate_basic_rate_info_stru next_probe_rate_info;
401 osal_u8 *rom;
402} alg_autorate_probe_info_stru;
403
404/* 速率自适应算法 USER级别 结构体 */
405typedef struct {
406 /***** 基本能力信息 *****/
407 osal_u8 user_valid; /* 用户初始化成功标志: 初始化成功为True */
408 osal_u8 enable_ampdu; /* 是否支持AMPDU */
409 osal_u8 supp_ldpc; /* 是否支持LDPC */
410 osal_u8 is_initial_stage; /* 起步阶段识别状态量 */
411 osal_u8 initial_stage_pkt_cnt; /* 起步阶段历经包个数 */
412 alg_ar_bw_cap_enum_uint8 avail_bandwidth; /* 用户支持带宽上限 */
413 alg_ar_bw_cap_enum_uint8 cur_bandwidth; /* 用户当前工作带宽 */
414 wlan_protocol_enum_uint8 avail_protocol; /* 用户支持协议上限 */
415 wlan_protocol_enum_uint8 cur_protocol; /* 用户当前使用的协议 */
416 osal_u8 cur_max_nss; /* wlan_nss_enum_uint8 用户当前使用的最大空间流数目 */
417
418 /***** 碰撞检测相关 *****/
419 osal_u8 consecutive_all_fail_cnt; /* 连续所有rank发送失败的PPDU个数 */
420 osal_u8 collision_tolerant_ppdu_cnt; /* 疑似碰撞的PPDU个数 */
421 osal_s16 ack_rssi; /* 16 bit: ACK_RSSI平滑结果 */
422 /***** user支持的速率集 *****/
423 osal_u8 user_11b_rate_set_bitmap; /* bit0~bit3: 1M, 2M, 5.5M, 11M */
424 osal_u8 legacy_rate_set_bitmap; /* bit0~bit7: wlan_11ag_rate_value_enum */
425 union {
426 alg_autorate_he_rate_set_stru he_rate_set;
427 alg_autorate_vht_rate_set_stru vht_rate_set;
428 alg_autorate_ht_rate_set_stru ht_rate_set;
429 } un_rate_set;
430
431 /***** 速率统计信息 *****/
432 alg_autorate_basic_rate_info_stru best_rate_info;
433 alg_autorate_rate_stat_info_stru rate_stat_info[ALG_AUTORATE_USER_RATE_STAT_MAX_NUM]; /* 用户速率统计信息 */
434
435 /***** 自动速率探测相关信息 *****/
436 alg_autorate_probe_info_stru user_probe_info;
437
438 dmac_user_stru *user; /* 用户结构体指针 */
439 dmac_vap_stru *dmac_vap;
440 alg_autorate_dev_stru *autorate_dev;
441 osal_u8 *rom;
442} alg_autorate_user_stru;
443
444/* goodput计算的内部参数 */
445typedef struct {
446 osal_u16 mpdu_bytes;
447 osal_u16 aggr_subfrm;
448 osal_u32 rate_kbps;
449} alg_autorate_calc_goodput_param_stru;
450
451/*****************************************************************************
452 6 函数声明
453*****************************************************************************/
454typedef osal_u32 (*alg_autorate_init_cb)(osal_void);
455typedef osal_u32 (*alg_autorate_dev_init_cb)(alg_autorate_dev_stru *autorate_dev);
456typedef osal_u32 (*alg_autorate_add_vap_cb)(alg_autorate_vap_stru *autorate_vap);
457typedef osal_u32 (*alg_autorate_start_vap_cb)(alg_autorate_vap_stru *autorate_vap);
458typedef osal_u32 (*alg_autorate_del_vap_cb)(alg_autorate_vap_stru *autorate_vap);
459typedef osal_u32 (*alg_autorate_init_user_cb)(alg_autorate_user_stru *user_info);
460typedef osal_u32 (*alg_autorate_exit_user_cb)(alg_autorate_user_stru *user_info);
461typedef osal_u32 (*alg_autorate_tx_process_cb)(dmac_user_stru *user, mac_tx_ctl_stru *tx_ctl,
462 hal_tx_txop_alg_stru *txop_param, osal_u32 *ret);
463typedef osal_u32 (*alg_autorate_tx_process_set_fix_rate_cb)(dmac_vap_stru *dmac_vap, dmac_user_stru *user,
464 mac_tx_ctl_stru *tx_ctl, hal_tx_txop_alg_stru *txop_param, osal_u32 *ret);
465typedef osal_u32 (*alg_autorate_rx_process_cb)(dmac_vap_stru *vap, dmac_user_stru *user, oal_dmac_netbuf_stru *buf,
466 hal_rx_statistic_stru *rx_stats, osal_u32 *ret);
467typedef osal_u32 (*alg_ar_intf_change_proc_cb)(hal_to_dmac_device_stru *hal_device,
468 alg_intf_det_notify_info_stru *intf_det_notify);
469typedef osal_u32 (*alg_ar_tx_comp_process_abnormal_cb)(dmac_user_stru *user,
470 hal_tx_dscr_ctrl_one_param *tx_dscr, mac_tx_ctl_stru *cb, alg_autorate_user_stru *user_info);
471typedef osal_u32 (*alg_ar_tx_comp_process_cb)(dmac_user_stru *user,
472 hal_tx_dscr_ctrl_one_param *tx_dscr, mac_tx_ctl_stru *cb, alg_autorate_user_stru *user_info, osal_u32 *ret);
473typedef osal_u32 (*alg_ar_update_per_cb)(alg_autorate_dev_stru *autorate_dev,
474 dmac_user_stru *user, hal_tx_dscr_ctrl_one_param *tx_dscr, alg_autorate_user_stru *user_info);
475typedef osal_u32 (*alg_ar_event_trig_probe_cb)(alg_autorate_user_stru *user_info,
476 alg_autorate_probe_phase_enum_uint8 *probe_phase, alg_autorate_probe_direction_enum_uint8 *probe_direction);
477typedef osal_u32 (*alg_ar_probe_mcs_prepare_cb)(alg_autorate_user_stru *user_info,
478 oal_bool_enum_uint8 *continue_cur_stage_probe, alg_autorate_probe_direction_enum_uint8 probe_direction,
479 osal_u32 *ret);
480typedef osal_u32 (*alg_ar_probe_init_cb)(alg_autorate_user_stru *user_info, hal_tx_dscr_ctrl_one_param *tx_dscr,
481 alg_autorate_probe_phase_enum_uint8 probe_phase, alg_autorate_probe_direction_enum_uint8 probe_direction,
482 osal_u32 *ret);
483typedef osal_u32 (*alg_ar_probe_finish_cb)(alg_autorate_user_stru *user_info, oal_bool_enum_uint8 *update_bestrate,
484 osal_u32 *ret);
485typedef osal_u32 (*alg_ar_probe_finish_update_info_cb)(alg_autorate_user_stru *user_info, osal_u8 update_bestrate);
486typedef osal_u32 (*alg_ar_probe_result_update_cb)(alg_autorate_user_stru *user_info,
487 hal_tx_dscr_ctrl_one_param *tx_dscr, osal_u32 *ret);
488typedef osal_u32 (*alg_ar_probe_result_analysis_cb)(alg_autorate_user_stru *user_info,
489 hal_tx_dscr_ctrl_one_param *tx_dscr, oal_bool_enum_uint8 *continue_probe);
490hal_channel_assemble_enum_uint8 alg_ar_bw_cap_2_hal_channel_assemble_bw(alg_ar_bw_cap_enum_uint8 bw_cap);
491alg_ar_bw_cap_enum_uint8 hal_channel_assemble_bw_2_alg_ar_bw_cap(hal_channel_assemble_enum_uint8 assemble_bw);
492alg_ar_bw_cap_enum_uint8 wlan_he_ru_bw_2_alg_ar_bw_cap(wlan_he_ru_enum_uint8 he_ru_bw);
493alg_rate_table_he_bw_type_enum_uint8 alg_he_ar_bw_2_ar_he_rate_table_bw(alg_ar_bw_cap_enum_uint8 en_bw);
494alg_ar_bw_cap_enum_uint8 wlan_bw_cap_2_alg_ar_bw_cap(wlan_bw_cap_enum_uint8 wlan_bw_cap);
495wlan_bw_cap_enum_uint8 alg_ar_bw_cap_2_wlan_bw_cap(alg_ar_bw_cap_enum_uint8 ar_bw_cap);
496wlan_protocol_enum_uint8 wlan_protocol_2_alg_ar_protocol(wlan_protocol_enum_uint8 wlan_protocol);
497wlan_phy_he_gi_type_enum_uint8 wlan_gi_type_2_phy_gi_type(
499wlan_gi_type_enum_uint8 phy_gi_type_2_wlan_gi_type(
501osal_u16 alg_rate_stat_smooth_long_per(osal_u16 avg_per, osal_u16 instant_per, osal_u8 scale);
502osal_u16 alg_autorate_fast_smooth_per(osal_u16 avg_per, osal_u16 instant_per, osal_u8 shift);
503oal_bool_enum alg_ar_compare_bigger(osal_u32 _new, osal_u32 basic, osal_u16 prop);
504oal_bool_enum alg_ar_probe_better(
505 alg_autorate_basic_rate_info_stru *best_probe_rate_info,
506 alg_autorate_basic_rate_info_stru *best_rate_info,
507 osal_u16 gdpt_better_thrd);
508oal_bool_enum alg_ar_is_probe_both_rate_bad(
509 alg_autorate_basic_rate_info_stru *rate1, alg_autorate_basic_rate_info_stru *rate2);
510oal_bool_enum alg_ar_judge_best_and_probe_rate_diff(
511 alg_autorate_basic_rate_info_stru *pbest_rate, alg_autorate_basic_rate_info_stru *pprobe_rate);
512osal_u16 alg_ar_tx_complete_calc_instant_per(hal_tx_dscr_ctrl_one_param *tx_dscr);
513osal_u32 alg_ar_probe_mcs_get_next_probe_node(alg_autorate_user_stru *user_info,
514 oal_bool_enum_uint8 *tmp_continue_cur_stage_probe, alg_autorate_probe_direction_enum_uint8 probe_direction);
515void alg_ar_probe_mcs_result_update(alg_autorate_user_stru *user_info, osal_u16 instant_per,
517void alg_ar_probe_result_update_stat_info(alg_autorate_user_stru *user_info,
519osal_u32 alg_ar_probe_check_probe_aging(alg_autorate_user_stru *user_info);
520void alg_ar_update_best_rate(alg_autorate_basic_rate_info_stru *best_node,
521 alg_autorate_basic_rate_info_stru *cur_node);
522void alg_ar_probe_mcs_update_best_probe(alg_autorate_user_stru *user_info);
523osal_u32 alg_ar_prepare_probe_info_choose_next_probe_rate_idx(alg_autorate_user_stru *user_info,
524 osal_u32 probe_gdpt, alg_autorate_basic_rate_info_stru *next_probe_node);
525osal_u32 alg_ar_probe_try_find_next_bigger_valid_rate_idx(alg_autorate_user_stru *user_info,
526 alg_autorate_basic_rate_info_stru *next_probe_node);
527oal_bool_enum_uint8 alg_ar_probe_result_analysis_update_best_probe(alg_autorate_user_stru *user_info,
528 alg_autorate_basic_rate_info_stru *next_probe_node, alg_autorate_basic_rate_info_stru *best_probe_rate);
529
530#endif /* #ifdef _PRE_WLAN_FEATURE_AUTORATE */
531
532#ifdef __cplusplus
533#if __cplusplus
534}
535#endif
536#endif
537
538#endif /* end of alg_autorate_rom.h */
osal_u8 oal_bool_enum_uint8
Definition oal_types_device_rom.h:45
oal_bool_enum
Definition oal_types_device_rom.h:40
unsigned char osal_u8
Definition osal_types.h:11
short osal_s16
Definition osal_types.h:18
void osal_void
Definition osal_types.h:29
unsigned int osal_u32
Definition osal_types.h:13
unsigned short osal_u16
Definition osal_types.h:12
Definition alg_autorate_common_rom.h:131
Definition alg_autorate_common_rom.h:117
Definition alg_autorate_common_rom.h:103
Definition alg_common_rom.h:77
Definition dmac_ext_if_rom.h:106
Definition hal_common_ops_device_rom.h:886
Definition hal_common_ops_rom.h:56
Definition hal_ops_common_rom.h:240
Definition dmac_ext_if_device_rom.h:98
Definition oal_net_pkt_rom.h:83
Definition hal_ops_common_rom.h:529
osal_u8 hal_channel_assemble_enum_uint8
Definition wlan_custom_type.h:34
osal_u8 wlan_phy_he_gi_type_enum_uint8
Definition wlan_phy_common_rom.h:28
#define HAL_TX_RATE_MAX_NUM
Definition wlan_spec_hh503_rom.h:40
osal_u8 wlan_phy_protocol_enum_uint8
Definition wlan_spec_type_rom.h:33
osal_u8 wlan_he_ru_enum_uint8
Definition wlan_types.h:740
osal_u8 wlan_gi_type_enum_uint8
Definition wlan_types.h:668
osal_u8 wlan_bw_cap_enum_uint8
Definition wlan_types.h:455
#define WLAN_NSS_MAX_NUM_LIMIT
Definition wlan_types.h:43
td_u8 wlan_protocol_enum_uint8
Definition wlan_types.h:488
osal_u8 wlan_nss_enum_uint8
Definition wlan_types_base_rom.h:240