WS63 SDK 文档 7021f4f@fbb_ws63
ws63 和 ws63e 解决方案的 SDK 文档
载入中...
搜索中...
未找到
alg_dbac_rom.h
浏览该文件的文档.
1 /*
2 * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2020-2022. All rights reserved.
3 * Description: dbac algorithm
4 */
5
6#ifndef ALG_DBAC_ROM_H
7#define ALG_DBAC_ROM_H
8
9#ifdef _PRE_WLAN_FEATURE_DBAC
10/******************************************************************************
11 1 其他头文件包含
12******************************************************************************/
14#include "frw_ext_if_rom.h"
15#include "mac_device_rom.h"
16#include "alg_main_rom.h"
17
18#ifdef __cplusplus
19#if __cplusplus
20extern "C" {
21#endif
22#endif
23
24/******************************************************************************
25 2 宏定义
26******************************************************************************/
27/* 在slot结束前提前暂停VAP的时间 */
28#define DBAC_MAX_SLOT_NUM 40 /* 按照1000ms 最大40个slot */
29
30#define DBAC_MAX_BEACON_INTERVAL 3000
31#define DBAC_DEFAULT_LED_SLOT_RATIO 50
32#define DBAC_SLOT_RATIO_MULTIPLE 100
33#define DBAC_SLOT_RATIO_LED_MIN 20
34#define DBAC_SLOT_RATIO_LED_MAX 80
35#define CFG_DBAC_BEACON_INTERVAL_TU (100U)
36#define CFG_DBAC_SCHED_PERIOD_TU (CFG_DBAC_BEACON_INTERVAL_TU >> 1)
37#define CFG_DBAC_LED_VAP_DWELL_TU (CFG_DBAC_SCHED_PERIOD_TU >> 1)
38
39#define DBAC_NOA_CHECK_OFFSET 1000 /* us */
40
41#define DBAC_DUAL_STA_MARGIN 5 /* ms, 双STA模式时tbtt与切信道之间的最小距离 */
42#define DBAC_DUAL_STA_SAMETIME_THRES (DBAC_DUAL_STA_MARGIN * 2)
43#define DBAC_DUAL_STA_MODE_UPDATE_THRES (40 * 4) /* 1个时隙长度25ms,25ms*40*4=4S,过多久后更新双STA的模式 */
44#define DBAC_STA_GO_UPDATE_THRES (16) /* 1个时隙长度25ms,25ms*40*4=4S,过多久后重设NoA */
45#define DBAC_STA_GO_SYNC_CNT 7 /* GO多久与STA的tsf同步一次,单位beacon周期 */
46
47#define DBAC_US_TO_TU_FRACTION_BITS 10 /* us转换为tu */
48
49#define dbac_us2tu(us) ((us) >> DBAC_US_TO_TU_FRACTION_BITS)
50#define dbac_tu2us(tu) ((tu) << DBAC_US_TO_TU_FRACTION_BITS)
51
52#define DBAC_TBTT_PREV_MARGIN 3 /* 单位ms */
53#define DBAC_TBTT_POST_MARGIN 3 /* 单位ms */
54
55#define alg_dbac_annother_vap_index(en_vap_index) \
56 (((en_vap_index) == CFG_DBAC_LED_VAP_IDX) ? CFG_DBAC_FLW_VAP_IDX : CFG_DBAC_LED_VAP_IDX)
57
58#define DBAC_PERIODIC_NOA_COUNT 255
59#define DBAC_FIRST_TWO_SLOT 2
60#define DBAC_ODD_SLOT_FLAG 1
61/******************************************************************************
62 3 枚举定义
63******************************************************************************/
64/* 双sta模式下的场景区分 */
65typedef enum {
66 ALG_DBAC_DUAL_STA_EQBI_SAME_TIME, /* beacon周期相同 tbtt相距小于阈值 */
67 ALG_DBAC_DUAL_STA_EQBI_SAME_SUBPERIOD, /* beacon周期相同 tbtt相距大于10ms且在同一个子周期内 */
68 ALG_DBAC_DUAL_STA_EQBI_DIFF_SUBPERIOD, /* beacon周期相同 tbtt相距大于10ms且不在同一个子周期内 */
69 ALG_DBAC_DUAL_STA_NEBI, /* beacon周期不同 */
70
71 ALG_DBAC_DUAL_STA_MODE_BUTT,
72} alg_dbac_dual_sta_mode_enum;
73typedef osal_u8 alg_dbac_dual_sta_mode_enum_uint8;
74
75/******************************************************************************
76 4 STRUCT定义
77******************************************************************************/
78struct tag_alg_dbac_mgr_stru;
79typedef osal_u32 (*alg_dbac_sched_func)(struct tag_alg_dbac_mgr_stru *dbac_mgr);
80
81/* slot结构体 */
82typedef struct {
83 osal_u16 time; /* 时隙长度, 单位tu */
84 alg_dbac_vap_idx_enum_uint8 idx; /* 此时隙所属的VAP */
85 osal_u8 resv;
86} alg_dbac_slot_stru;
87
88typedef struct tag_alg_dbac_sched_mgr_stru {
89 /* 调度管理器关键参数 */
90 osal_u16 dbac_period; /* DBAC时隙分配周期,规定等于led vap的beacon周期 */
91 osal_u16 sched_period; /* 时隙分配子周期 */
92
93 osal_u16 sched_period_half; /* 时隙分配子周期的一半 即1:1时隙分配时1个时隙的长度 */
94 osal_u16 flw_vap_bi; /* flw vap的beacon周期, 只在双sta beacon周期不同时使用 */
95
96 osal_u16 led_beacon_offset_tu; /* led vap tbtt相对于dbac周期开始的偏移 */
97 osal_u16 flw_beacon_offset_tu; /* flw vap tbtt相对于dbac周期开始的偏移, 双sta模式下不使用 */
98
99 /* 时隙分配结果 */
100 osal_u8 sched_period_num; /* 一个DBAC时隙分配周期中 子周期的个数 */
101 osal_u8 slot_num; /* 一个DBAC时隙分配周期内的时隙个数 */
102 osal_u8 cur_slot; /* 当前时隙编号 */
103 osal_u8 resv0;
104
105 osal_u16 slot_stats; /* 每个时隙(25ms)++ */
106 osal_u8 slot_ratio[CFG_DBAC_VAP_IDX_BUTT]; /* 每个频带的时隙比例(%) */
107
108 alg_dbac_slot_stru slot_time[DBAC_MAX_SLOT_NUM]; /* 每个时隙的时长 单位tu */
109
110 oal_bool_enum_uint8 fix_ratio; /* 是否固定时隙比例的标志 */
111 oal_bool_enum_uint8 fix_ratio_update; /* 固定比例是否调整 */
112 alg_dbac_dual_sta_mode_enum_uint8 dual_sta_mode; /* 双sta模式,只在双sta时隙分配时使用 */
113 oal_bool_enum_uint8 flw_tbtt_present; /* 此次调度是否flw tbtt在线(双STA场景存在轮流tbtt在线的场景) */
114
115 oal_bool_enum_uint8 noa_need_update; /* NoA是否需要更新 仅在sta+go模式下使用 */
116 osal_u8 flw_tbtt_slot_num; /* 等时隙分配时 flw vap tbtt时刻所在时隙编号,编号从0开始 */
117 osal_u8 bit_gc_slot_preempting : 1;
118 osal_u8 bit_gc_slot_protect_flag : 1;
119 osal_u8 bit_gc_slot_protect_period : 6;
121} alg_dbac_sched_mgr_stru;
122
123/* DBAC状态定义 */
124typedef enum {
125 DBAC_STATE_NOT_INIT = 0,
126 DBAC_STATE_INITED,
127 DBAC_STATE_SWITCH_READY,
128 DBAC_STATE_BUTT
129} alg_dbac_state_enum;
130typedef osal_u8 alg_dbac_state_enum_uint8;
131
132/* DBAC状态定义 */
133typedef enum {
134 DBAC_TYPE_NONE = 0, /* 初始化,不存在的类型 */
135 DBAC_TYPE_STA_GO, /* STA+GO异频共存 */
136 DBAC_TYPE_STA_CL, /* STA+CL异频共存 */
137 DBAC_TYPE_STA_CL_NOA, /* STA+CL异频共存并且CL侧有count 255的NOA */
138 DBAC_TYPE_STA_AP, /* 为支持STA + SOFTAP信道跟随中间态 */
139 DBAC_TYPE_STA_CHBA, /* STA+CHBA异信道共存 */
140
141 DBAC_TYPE_BUTT
142} alg_dbac_type_enum;
143typedef osal_u8 alg_dbac_type_enum_uint8;
144
145typedef enum {
146 DBAC_TX_NETBUF_CHECK = 0,
147 DBAC_TX_CB_CHECK,
148 DBAC_TX_PAUSE_CHECK,
149 DBAC_TX_VAP_ID_CHECK,
150
151 DBAC_TX_BUTT
152} alg_dbac_tx_check_enum;
153typedef osal_u8 alg_dbac_tx_check_enum_uint8;
154
155typedef struct {
156 osal_u8 mac_vap_id;
157 osal_u8 hal_vap_id;
158 osal_u16 beacon_period;
159
160 dmac_vap_stru *dmac_vap;
161 hal_to_dmac_vap_stru *hal_vap;
162} alg_dbac_switch_info;
163
164typedef struct {
165 alg_dbac_switch_info switch_info[CFG_DBAC_VAP_IDX_BUTT]; /* 0-leader */
166 alg_dbac_type_enum_uint8 dbac_type; /* DBAC场景 */
167 alg_dbac_vap_idx_enum_uint8 sta_dbac_idx;
168 osal_u8 resv[2];
169} alg_dbac_cfg_stru;
170
171typedef struct tag_alg_dbac_mgr_stru {
172 alg_param_sync_dbac_stru *dbac_para;
173 osal_u32 fcs_timer; /* fcs切换信道定时器handle */
174 osal_u32 led_tbtt_delay_timer; /* led vap tbtt delay定时器 */
175 osal_u32 flw_tbtt_delay_timer; /* flw vap tbtt delay定时器 */
176 mac_fcs_cfg_stru fcs_cfg[CFG_DBAC_VAP_IDX_BUTT]; /* FCS配置 */
177 alg_dbac_cfg_stru dbac_cfg;
178 alg_dbac_sched_mgr_stru sched_mgr; /* 分时调度统计 */
179
180 alg_dbac_state_enum_uint8 dbac_state; /* DBAC状态 */
181 oal_bool_enum_uint8 dbac_pause : 1; /* 是否暂停DBAC */
182 oal_bool_enum_uint8 dbac_schedule_log : 1; /* dbac schedule log */
183 oal_bool_enum_uint8 dbac_linkloss_log : 1; /* dbac log */
184 oal_bool_enum_uint8 vip_frame_protect_cnt : 5;
185 osal_s8 sta_ap_sync_cnt; /* 多少个tbtt GO同步一次tsf */
186 osal_u8 resv;
187 osal_u32 tick;
188
189 alg_dbac_vap_stats_info vap_stats[CFG_DBAC_VAP_IDX_BUTT]; /* DBAC VAP统计信息 */
190 alg_dbac_dev_stats_info dev_stats;
191} alg_dbac_mgr_stru;
192
193typedef osal_void (*alg_dbac_timer_isr_callback)(osal_u32 param);
194typedef osal_u32 (*alg_dbac_sched_dual_sta_policy_cb)(alg_dbac_mgr_stru *dbac_mgr);
195typedef osal_u32 (*alg_dbac_sched_sta_go_policy_cb)(alg_dbac_mgr_stru *dbac_mgr);
196typedef osal_u32 (*alg_dbac_start_work_cb)(dmac_device_stru *dmac_device, hal_to_dmac_device_stru *hal_device,
197 alg_dbac_mgr_stru *dbac_mgr, dmac_vap_stru *dmac_vap);
198typedef osal_u32 (*alg_dbac_stop_auto_work_cb)(dmac_vap_stru *dmac_vap, dmac_device_stru *device,
199 hal_to_dmac_device_stru *hal_device, alg_dbac_mgr_stru *dbac_mgr);
200typedef osal_u32 (*alg_dbac_sync_sta_ap_tbtt_cb)(alg_dbac_mgr_stru *dbac_mgr, osal_bool is_led_tbtt);
201typedef osal_bool (*alg_dbac_is_dbac_not_ready_cb)(osal_void);
202typedef osal_u32 (*alg_dbac_prepare_fcs_config_cb)(mac_fcs_cfg_stru *config, alg_dbac_mgr_stru *dbac_mgr,
203 const dmac_vap_stru *src_vap, const dmac_vap_stru *dst_vap);
204typedef osal_u32 (*alg_dbac_parse_2vap_type_cb)(const dmac_vap_stru *dmac_vap0, const dmac_vap_stru *dmac_vap1,
205 alg_dbac_type_enum_uint8 *dbac_type, osal_u8 *led_vapid, osal_u8 *flw_vapid);
206typedef osal_u32 (*alg_dbac_tx_process_cb)(dmac_user_stru *dmac_user,
207 mac_tx_ctl_stru *cb, hal_tx_txop_alg_stru *txop_param);
208typedef osal_u32 (*alg_dbac_rx_process_cb)(dmac_vap_stru *vap, dmac_user_stru *user, oal_dmac_netbuf_stru *netbuf,
209 hal_rx_statistic_stru *rx_stats);
210typedef osal_u32 (*alg_dbac_tbtt_isr_cb)(osal_u8 vap_id, osal_void *arg);
211typedef osal_u32 (*alg_dbac_noa_isr_cb)(osal_u8 vap_id, osal_void *arg, oal_bool_enum_uint8 absent_start);
212typedef osal_u32 (*alg_dbac_tbtt_delay_isr_cb)(osal_bool is_led_tbtt);
213typedef osal_u32 (*alg_dbac_set_noa_cb)(alg_dbac_mgr_stru *dbac_mgr);
214typedef osal_u32 (*alg_dbac_sched_restart_dynamic_proc_cb)(alg_dbac_mgr_stru *dbac_mgr, const dmac_vap_stru *led_vap,
215 hal_to_dmac_vap_stru *led_hal_vap, dmac_vap_stru *flw_vap, hal_to_dmac_vap_stru *flw_hal_vap);
216typedef osal_u8 (*alg_dbac_resume_select_vap_idx_cb)(const alg_dbac_mgr_stru *dbac_mgr);
217typedef osal_s32 (*alg_dbac_fcs_event_handle_cb)(dmac_vap_stru *dmac_vap, frw_msg *msg);
218typedef osal_u32 (*alg_dbac_timer_isr_cb)(osal_u32 param);
219typedef osal_u32 (*alg_dbac_update_sta_chba_mode_cb)(alg_dbac_mgr_stru *dbac_mgr,
220 dmac_vap_stru *led_vap, dmac_vap_stru *flw_vap);
221typedef osal_u32 (*alg_dbac_tx_netbuf_resverve_cb)(alg_dbac_vap_idx_enum_uint8 dbac_vap_type);
222
223typedef osal_u32 (*dmac_chba_dbac_calc_preempt_bitmap_cb)(osal_u32 channel_seq_bitmap,
224 osal_u32 *tbtt_timer_array, osal_u32 tbtt_timer_count);
225/******************************************************************************
226 5 函数声明
227******************************************************************************/
228osal_u32 alg_dbac_init(osal_void);
229osal_u32 alg_dbac_exit(osal_void);
230osal_u32 alg_dbac_param_sync(const alg_param_sync_stru *sync);
231osal_s32 alg_dbac_set_resume(dmac_vap_stru *dmac_vap, frw_msg *msg);
232osal_s32 alg_dbac_set_pause(dmac_vap_stru *dmac_vap, frw_msg *msg);
233osal_s32 alg_dbac_set_state_down(dmac_vap_stru *dmac_vap, frw_msg *msg);
234osal_s32 alg_dbac_update_fcs_config(dmac_vap_stru *dmac_vap, frw_msg *msg);
235osal_s32 alg_dbac_fcs_event_handle(dmac_vap_stru *dmac_vap, frw_msg *msg);
236osal_void alg_dbac_post_fcs_event(const alg_dbac_mgr_stru *dbac_mgr, const mac_fcs_cfg_stru *fcs_cfg);
237osal_bool alg_dbac_is_delay_switch_chan(osal_u8 chan_number);
238alg_dbac_mgr_stru *alg_dbac_get_dbac_stru(osal_void);
239osal_void alg_dbac_stop_timer(osal_void);
240osal_bool alg_dbac_is_need_fcs(alg_dbac_sched_mgr_stru *sched_mgr, osal_u8 curr_slot);
241osal_void alg_dbac_assign_slot(alg_dbac_slot_stru *slot_time, osal_u16 time, osal_u8 vap_idx);
242osal_u32 alg_dbac_stop_vap(dmac_vap_stru *dmac_vap);
243osal_u32 alg_dbac_start_vap(dmac_vap_stru *dmac_vap);
244osal_void alg_dbac_log_info(const alg_dbac_mgr_stru *dbac_mgr);
245osal_void alg_dbac_shedule_log_info_condition(const alg_dbac_mgr_stru *dbac_mgr);
246osal_void alg_dbac_shedule_log_info(const alg_dbac_mgr_stru *dbac_mgr);
247osal_s32 alg_dbac_wait_send_disassoc(dmac_vap_stru *dmac_vap, frw_msg *msg);
248osal_bool alg_dbac_is_dbac_not_ready_or_paused(osal_void);
249osal_u32 alg_dbac_config(dmac_vap_stru *dmac_vap, frw_msg *msg);
250osal_u32 alg_dbac_record_2vap_fcs_config(alg_dbac_mgr_stru *dbac_mgr, osal_u8 led_vapid, osal_u8 flw_vapid);
251osal_void alg_dbac_start_timer(osal_u32 us, alg_dbac_timer_isr_callback timer_isr);
252osal_void alg_dbac_timer_isr(osal_u32 param);
253osal_void alg_dbac_sync_sta_ap_tbtt(alg_dbac_mgr_stru *dbac_mgr, osal_bool is_led_tbtt);
254osal_void alg_dbac_stop_all_timer(osal_void);
255#ifdef __cplusplus
256#if __cplusplus
257}
258#endif
259#endif
260
261#endif /* _PRE_WLAN_FEATURE_DBAC */
262#endif
osal_u8 alg_dbac_vap_idx_enum_uint8
Definition alg_common_rom.h:122
@ CFG_DBAC_VAP_IDX_BUTT
Definition alg_common_rom.h:120
osal_u8 resv1
Definition oal_net.h:1
osal_u8 oal_bool_enum_uint8
Definition oal_types_device_rom.h:45
int osal_s32
Definition osal_types.h:19
unsigned char osal_u8
Definition osal_types.h:11
osal_u8 osal_bool
Definition osal_types.h:27
signed char osal_s8
Definition osal_types.h:17
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_common_rom.h:279
Definition alg_common_rom.h:266
Definition alg_common_rom.h:356
Definition alg_common_rom.h:411
Definition dmac_ext_if_rom.h:106
Definition frw_msg_rom.h:74
Definition hal_common_ops_device_rom.h:886
Definition hal_ops_common_rom.h:240
Definition wlan_resource_common_rom.h:256
Definition dmac_ext_if_device_rom.h:98
Definition oal_net_pkt_rom.h:83
Definition hal_ops_common_rom.h:529
Definition hal_common_ops_device_rom.h:870