6#ifndef ALG_AUTORATE_ROM_H
7#define ALG_AUTORATE_ROM_H
14#include "dmac_alg_if_part_rom.h"
23#ifdef _PRE_WLAN_FEATURE_AUTORATE
28#define BIT_0 ((osal_u32)(1 << 0))
29#define BIT_3 ((osal_u32)(1 << 3))
31#define ar_min(_A, _B) (((_A) < (_B)) ? (_A) : (_B))
34#define ar_max(_A, _B) (((_A) > (_B)) ? (_A) : (_B))
35#define ar_sub(_A, _B) (((_A) > (_B)) ? ((_A) - (_B)) : (0))
37#define rssi_mcs_tbl(_rate_index, _rssi) \
39 _rate_index, _rssi, { 0, 0 } \
42#define rssi_mcs_group_tbl(_item, _cnt) \
44 _item, _cnt, { 0, 0, 0 } \
46#define alg_array_size(_ast_array) (sizeof(_ast_array) / sizeof((_ast_array)[0]))
48#define RATE_TBL_11B_RATE_NUM 4
49#define RATE_TBL_11AG_RATE_NUM 8
50#define ALG_AUTORATE_MAX_AGGR_NUM (WLAN_AMPDU_TX_MAX_NUM)
51#define ALG_AUTORATE_CFG_RANK_SHIFT 22
52#define ALG_AUTORATE_CFG_RANK_BIT 0x3
53#define ALG_AUTORATE_CFG_FRAME_TYPE_SHIFT 24
54#define ALG_AUTORATE_CFG_FRAME_TYPE_BIT 0x3
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
59#define ALG_AUTORATE_HE_NSS_MCS_NONE 0xff
60#define ALG_AUTORATE_INVALID_PKTNUM 0xFFFFFFFF
61#define ALG_AUTORATE_PROBE_RATE_TX_COUNT 1
62#define ALG_RETRY_NUM_DCM 2
63#define ALG_AUTORATE_PER_STAT_NORMAL_RSSI_THR (-60)
64#define ALG_RSSI_INIT_MARKER 127
67#define ALG_AUTORATE_HE_SU_PPDU_1XLTF_GI1_BIT_MASK 0x1
68#define ALG_HE_SU_PPDU_1XLTF_GI1_SHIFT 0
69#define ALG_AUTORATE_HE_ER_SU_PPDU_1XLTF_GI1_BIT_MASK 0x2
70#define ALG_HE_ER_SU_PPDU_1XLTF_GI1_SHIFT 1
71#define ALG_AUTORATE_HE_ER_SU_PPDU_4XLTF_GI1_BIT_MASK 0x4
72#define ALG_HE_ER_SU_PPDU_4XLTF_GI1_SHIFT 2
73#define ALG_AUTORATE_HE_SU_MU_PPDU_4XLTF_GI1_BIT_MASK 0x8
74#define ALG_HE_SU_MU_PPDU_4XLTF_GI1_SHIFT 3
75#define ALG_AUTORATE_NDP_4XLTF_GI4_BIT_MASK 0x10
76#define ALG_NDP_4XLTF_GI4_SHIFT 4
78#define ALG_AUTORATE_USER_RATE_STAT_MAX_NUM (WLAN_HE_MCS_BUTT)
79#define ALG_AUTORATE_RATE_CAP_HT_BW_CNT 2
80#define ALG_AUTORATE_RATE_CAP_VHT_BW_CNT_2G 2
81#define ALG_AUTORATE_RATE_CAP_VHT_BW_CNT 4
82#define ALG_AUTORATE_BYTE_TO_BIT_SHIFT 3
83#define ALG_AUTORATE_RATE_MBPS_TO_KBPS 1000
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)
91#define ALG_AUTORATE_HT_MAX_BITMAP_SHIFT 3
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)
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)
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)
111#define ALG_AGGR_11N_AGGR_BYTES_LIMIT 65535
112#define ALG_AGGR_11AC_AGGR_BYTES_LIMIT 1048575
113#define ALG_AGGR_11AX_AGGR_BYTES_LIMIT 6500631
114#define ALG_TYPICAL_FRAME_LEN 1544
115#define ALG_AUTORATE_RATE_MBPS_TO_KBPS 1000
116#define ALG_AUTORATE_TIME_KBPS_TO_BPS 1000
117#define ALG_AUTORATE_TIME_MS_TO_US 1000
118#define ALG_AUTORATE_TIME_NS_TO_US 1000
119#define ALG_AUTORATE_DIFS_TIME_US 28
120#define ALG_AUTORATE_SIFS_TIME_US 10
121#define ALG_AUTORATE_BA_TIME_US 32
122#define ALG_AUTORATE_11AG_ACK_TIME_US 40
123#define ALG_AUTORATE_11B_ACK_TIME_US 208
124#define ALG_AUTORATE_11N_PHY_HEAD_TIME_US 32
125#define ALG_AUTORATE_11AC_PHY_HEAD_TIME_US 36
126#define ALG_AUTORATE_11AG_PHY_HEAD_TIME_US 20
127#define ALG_AUTORATE_11B_PHY_HEAD_TIME_US 96
128#define ALG_AUTORATE_HE_LTF_4X_TIME_NS 1280
129#define ALG_AUTORATE_HT_VHT_LTF_TIME_US 4
130#define ALG_AUTORATE_SUBFRAME_DELIMITER 4
131#define ALG_AUTORATE_11AX_HE_SU_PPDU_PHY_HEAD_TIME_US 36
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))
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))
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))
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))
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))
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)))
177 ALG_AR_BW_HE_RU_26_TONE,
178 ALG_AR_BW_HE_RU_52_TONE,
179 ALG_AR_BW_HE_RU_106_TONE,
182 ALG_AR_BW_CAP_2G_BUTT,
183 ALG_AR_BW_CAP_80M = ALG_AR_BW_CAP_2G_BUTT,
188typedef osal_u8 alg_ar_bw_cap_enum_uint8;
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;
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;
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;
213 ALG_AUTORATE_HE_RATE_SET_CAP_LE_80M_INDEX = 0,
214 ALG_AUTORATE_HE_RATE_SET_CAP_160M_INDEX = 1,
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;
222 ALG_AUTORATE_PROBE_MCS,
223 ALG_AUTORATE_PROBE_BW,
224 ALG_AUTORATE_PROBE_PROTOCOL,
226 ALG_AUTORATE_PROBE_PHASE_BUTT
227} alg_autorate_probe_phase_enum;
228typedef osal_u8 alg_autorate_probe_phase_enum_uint8;
232 ALG_AUTORATE_PROBE_UP = 0,
233 ALG_AUTORATE_PROBE_DOWN = 1,
234 ALG_AUTORATE_PROBE_DIRECTION_BUTT
235} alg_autorate_probe_direction_enum;
236typedef osal_u8 alg_autorate_probe_direction_enum_uint8;
239 ALG_AUTORATE_DESCEND_PROTOCOL,
240 ALG_AUTORATE_ASCEND_PROTOCOL,
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;
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,
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;
266} alg_rate_table_stru;
279} alg_autorate_tx_rate_rank_stru;
281#ifdef _PRE_WLAN_FEATURE_INTRF_MODE
288} alg_autorate_intrf_mode_cfg_stru;
298#ifdef _PRE_WLAN_FEATURE_INTRF_MODE
299 alg_autorate_intrf_mode_cfg_stru intrf_mode_cfg;
305} alg_autorate_vap_stru;
311} alg_autorate_ht_rate_set_stru;
317} alg_autorate_vht_rate_set_stru;
334} alg_autorate_he_rate_set_stru;
339 alg_ar_bw_cap_enum_uint8 en_bw;
351} alg_autorate_basic_rate_info_stru;
356 osal_u8 probe_cur_intvl_keep_cnt;
357 osal_u8 probe_intvl_keep_cnt_thrd;
358} alg_autorate_probe_time_trigger_info_stru;
364 osal_u8 is_probe_up_reserve_rate_better;
365 osal_u8 resv_rate_better_probe;
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;
376 osal_u8 ascend_bw_rate_better_keep_cnt;
377 osal_u8 descend_bw_rate_better_keep_cnt;
379 osal_u8 consecutive_event_trig_cnt;
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;
389 alg_autorate_probe_phase_enum_uint8 cur_probe_phase;
390 alg_autorate_probe_direction_enum_uint8 cur_probe_direction;
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;
402} alg_autorate_probe_info_stru;
412 alg_ar_bw_cap_enum_uint8 avail_bandwidth;
413 alg_ar_bw_cap_enum_uint8 cur_bandwidth;
419 osal_u8 consecutive_all_fail_cnt;
420 osal_u8 collision_tolerant_ppdu_cnt;
423 osal_u8 user_11b_rate_set_bitmap;
424 osal_u8 legacy_rate_set_bitmap;
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;
432 alg_autorate_basic_rate_info_stru best_rate_info;
436 alg_autorate_probe_info_stru user_probe_info;
438 dmac_user_stru *user;
442} alg_autorate_user_stru;
449} alg_autorate_calc_goodput_param_stru;
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);
463typedef osal_u32 (*alg_autorate_tx_process_set_fix_rate_cb)(
dmac_vap_stru *dmac_vap, dmac_user_stru *user,
469typedef osal_u32 (*alg_ar_tx_comp_process_abnormal_cb)(dmac_user_stru *user,
471typedef osal_u32 (*alg_ar_tx_comp_process_cb)(dmac_user_stru *user,
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,
481 alg_autorate_probe_phase_enum_uint8 probe_phase, alg_autorate_probe_direction_enum_uint8 probe_direction,
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,
488typedef osal_u32 (*alg_ar_probe_result_analysis_cb)(alg_autorate_user_stru *user_info,
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);
505 alg_autorate_basic_rate_info_stru *best_probe_rate_info,
506 alg_autorate_basic_rate_info_stru *best_rate_info,
509 alg_autorate_basic_rate_info_stru *rate1, alg_autorate_basic_rate_info_stru *rate2);
511 alg_autorate_basic_rate_info_stru *pbest_rate, alg_autorate_basic_rate_info_stru *pprobe_rate);
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);
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