WS63 SDK 文档 7021f4f@fbb_ws63
ws63 和 ws63e 解决方案的 SDK 文档
载入中...
搜索中...
未找到
alg_schedule.h
浏览该文件的文档.
1 /*
2 * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2020-2022. All rights reserved.
3 * Description: schedule algorithm
4 */
5
6#ifndef __ALG_SCHEDULE_H__
7#define __ALG_SCHEDULE_H__
8
9/******************************************************************************
10 1 其他头文件包含
11******************************************************************************/
12#include "alg_autorate.h"
13
14#ifdef _PRE_WLAN_FEATURE_SCHEDULE
15
16#ifdef __cplusplus
17#if __cplusplus
18extern "C" {
19#endif
20#endif
21
22/******************************************************************************
23 2 宏定义
24******************************************************************************/
25/* 调度日志相关参数 */
26#define ALG_SCH_LOG 1 /* 调度日志开关,默认只打开发送完成中断统计信息 */
27
28#ifdef _PRE_WLAN_FEATURE_SCH_STRATEGY_WMM_ENSURE
29#define ALG_SCH_LOG_EXT1 1 /* 调度日志第1级扩展,增量记录每次调度时各个tid的情况 */
30#define ALG_SCH_LOG_EXT2 0 /* 调度日志第2级扩展,增量记录流量控制相关信息 */
31#define ALG_SCHEDULE_LOG_MAX_NUM 40 /* 最大可记录日志条目 */
32#define ALG_SCHEDULE_LOG_TID_MAX_NUM 16 /* 所有用户非空TID个数 */
33#endif
34
35/* 业务调度相关参数 */
36#define ALG_SCHEDULE_SCH_CYCLE_MS 100 /* 业务调度定时器周期(ms) */
37#define ALG_SCHEUDLE_TIMER_MODIFY_MS 20 /* 定时器执行误差 */
38
39#ifdef _PRE_WLAN_FEATURE_SCH_STRATEGY_WMM_ENSURE
40/* WMM空口公平性参数 */
41#define ALG_SCH_WMM_AIR_USER_PERIOD_RATIO 50 /* 用户占空口总时间比例 */
42#define ALG_SCH_WMM_AIR_USER_PERIOD 1000 /* 总用户占空口时间 */
43#define ALG_SCH_WMM_DMAC_TIMEOUT_MS 1000 /* dmac每次同步时间 */
44#define ALG_SCH_WMM_AIR_USER_TARGET_TUOTA_MAX 16 /* 目标周期内的MPDU个数 */
45#define ALG_SCH_WMM_AIR_USER_TARGET_TUOTA_MIN 2 /* 目标周期内的MPDU个数 */
46#define ALG_SCH_WMM_AIR_USER_PERIOD_TORLERANCE 20 /* 周期时间的容忍度 */
47#define ALG_SCH_WMM_AIR_USER_VALID_TXBYTES_MIN 128 /* 用户级最低有效空口发送字节数 */
48#define ALG_SCH_WMM_AIR_TOTAL_VALID_TXBYTES_MIN 128 /* 总最低有效空口发送字节数 */
49#define ALG_SCH_WMM_AIR_TOTAL_VALID_TXTIME_MIN 2048 /* 总最低有效空口发送时间 单位10us */
50#define ALG_SCH_WMM_AIR_MAX_BUF_BYTES 1500 /* 报文大包字节数 */
51#define ALG_SCH_WMM_AIR_MOVE_STEP_MPDU 1 /* 每次移动MPDU数 */
52#define ALG_SCH_WMM_DMAC_DSCR_CAL_METHOD 1 /* 不用芯片上报的tx time, 使用描述符计算时间 */
53/* 统计 */
54#define ALG_SCHEUDLE_STAT_TIMER_MS 1000 /* 定时器执行误差 */
55#define ALG_SCHEDULE_SCH_NUMS_PER_AC 10 /* 每个周期内各个AC的最小调度次数 */
56
57/* WME 参数调整相关参数 */
58#define ALG_SCHEDULE_WME_ADJUST_CYCLE_MS 500 /* WME参数调整周期(ms) */
59#define ALG_SCHEDULE_WME_INC_VI_DELAY_MS 45 /* WME往上调整的视频时延阈值(ms) */
60#define ALG_SCHEDULE_WME_DEC_VI_DELAY_MS 40 /* WME往下调整的视频时延阈值(ms) */
61
62/* 定义最大链路速率 */
63#define ALG_SCHEDULE_MAX_LINK_RATE_KBPS 2000000 /* 2Gbps */
64
65#define oal_dlist_search_for_each_sch(_dlist_pos, i, user_num, _dilst_head) \
66 for ((_dlist_pos) = (_dilst_head), (i) = 0; \
67 (i) < (user_num) + 1 && (_dlist_pos) != NULL; \
68 (_dlist_pos) = (_dlist_pos)->next, (i)++)
69#endif
70
71/******************************************************************************
72 3 枚举定义
73******************************************************************************/
74typedef enum {
75#ifdef _PRE_WLAN_FEATURE_SCH_STRATEGY_WMM_ENSURE
76 ALG_SCH_STRATEGY_WMM_ENSURE, /* 优先级调度 */
77#endif
78 ALG_SCH_STRATEGY_ROUND_ROBIN, /* 轮询调度 */
79 ALG_SCH_STRATEGY_CERTIFY, /* 轮询调度 */
80 ALG_SCH_STRATEGY_BUTT
81} alg_sch_strategy_enum;
82
83typedef enum {
84 ALG_BUF_DROP_NULL,
85 ALG_BUF_DROP_VAP_FLOW_CONTROL,
86 ALG_BUF_DROP_USER_FLOW_CONTROL,
87 ALG_BUF_DROP_BUFFER_OVERFLOW,
88
89 ALG_BUF_DROP_BUTT
90} alg_schedule_buf_drop_reason_enum;
91typedef osal_u8 alg_schedule_buf_drop_reason_enum_uint8;
92
93typedef enum {
94 ALG_BUF_PROCESS_PASS = 0,
95
96#ifdef _PRE_WLAN_FEATURE_SCH_STRATEGY_WMM_ENSURE
97 ALG_BUF_PROCESS_COMING,
98 ALG_BUF_PROCESS_DROP,
99 ALG_BUF_PROCESS_SEIZED,
100#endif
101
102 ALG_BUF_PROCESS_BUTT
103} alg_schedule_buf_process_enum;
104typedef osal_u8 alg_schedule_buf_process_enum_uint8;
105
106/******************************************************************************
107 4 STRUCT定义
108******************************************************************************/
109#ifdef _PRE_WLAN_FEATURE_SCH_STRATEGY_WMM_ENSURE
110/* 每个user对应的调度私有信息结构体 */
111typedef struct {
112 struct osal_list_head user_dlist_entry; /* 用户链表头 */
113
114 /* WMM空口公平性参数 */
115 osal_u32 target_quota; /* 设定的该用户发包阈值 */
116 osal_u32 remain_quota; /* 该用户剩余的发包阈值 */
117 osal_u32 target_time;
118 osal_u8 user_id;
119 osal_u8 resv[3];
120
121 osal_u32 stat_out_mpdu_num[WLAN_TIDNO_BUTT]; /* 每个TID在周期内发包个数 */
122 osal_u32 stat_sch_num[WLAN_TIDNO_BUTT]; /* 每个TID在周期内调度次数 */
123 osal_u32 stat_in_mpdu_num[WLAN_TIDNO_BUTT]; /* 每个TID在周期内发包个数 */
124} alg_schedule_user_info_stru;
125
126#endif
127
128typedef struct {
129 struct osal_list_head ac_dlist_entry; /* ac双向链表元素 */
130 struct osal_list_head txtid_dlist_head; /* tid双向链表头结点指针 */
131} alg_sch_ac_txtid_dlist_stru;
132
133/* 每个device 对应的调度信息结构体 */
134typedef struct {
135 struct osal_list_head ac_dlist_head[HAL_TX_QUEUE_NUM]; /* 各ac对应的txtid链表头结点 */
136 /* 保持各tid的链表头结点,其中WLAN_TID_MAX_NUM = 8专用于节能用户 */
137 alg_sch_ac_txtid_dlist_stru ac_txtid_dlist[WLAN_TID_MAX_NUM];
138
139 /* 业务调度相关参数 */
140 frw_timeout_stru sch_timer; /* 调度周期定时器对象指针 */
141 oal_bool_enum_uint8 fix_sch_mode; /* 是否采用固定配置的调度方式 */
142 osal_u8 user_num; /* 当前调度维护的用户个数 */
143 osal_u8 resv1[2]; /* 字节对齐 */
144
145 hal_to_dmac_device_stru *hal_device; // 保存使用的hal device
146
147#ifdef _PRE_WLAN_FEATURE_SCH_STRATEGY_WMM_ENSURE
148 /* wmm 空口公平性调度 */
149 osal_u8 temp_cnt; /* 温保 */
150 osal_u8 target_user_id; /* 调度目标用户 */
151 osal_u16 quota_step; /* 每次移动步长 */
152 osal_u32 tolerance; /* 每次更新容忍度 */
153 osal_u32 target_mpdu_total; /* 所有用户总共的目标调度mpdu个数 */
154 osal_u32 sch_nums_per_ac[WLAN_WME_AC_BUTT]; /* 记录每个调度周期内AC的调度次数 */
155 /* 统计 */
156 frw_timeout_stru sch_stat_timer;
157
158#endif
159} alg_schedule_stru;
160
161/* 每个txtid对应的调度私有信息结构体 */
162typedef struct {
163 osal_u8 is_scheduling : 1, /* 本tid是否处于被调度状态 */
164 bad_link_flag : 1, /* 该链路是否被认定为badlink */
165 vap_id : 6; /* vap id */
166 osal_u8 tidno; /* tidno */
167 osal_u16 assoc_id; /* user对应资源池索引值 */
168
169 alg_schedule_stru *schedule; /* 本tid对应的私有device的指针 */
170 struct osal_list_head txtid_dlist_entry; /* 双向链表元素 */
171
172#ifdef _PRE_WLAN_FEATURE_SCH_STRATEGY_WMM_ENSURE
173 osal_u8 is_stopped; /* 本tid是否被拥塞控制的标志 */
174 osal_u8 resv2[3]; /* 字节对齐 */
175 alg_schedule_user_info_stru *sch_user_info; /* 本tid对应的私有USER的信息 */
176#endif
177} alg_schedule_txtid_info_stru;
178
179/* 每次调度输出信息结构体 */
180typedef struct {
181 osal_u8 tid_num; /* 被调度的tid号 */
182 osal_u8 mpdu_num; /* 需要发送的mpdu个数 */
183 osal_u8 resv[2]; /* 2:数组大小 字节对齐 */
184 hmac_user_stru *user; /* 需要发送的tid队列隶属的user */
185} mac_txtid_schedule_output_stru;
186
187typedef struct {
188 hmac_user_stru *user; /* 选出的user */
189 hmac_tid_stru *txtid; /* 选出的tid */
190 oal_bool_enum_uint8 sch_flag; /* 是否立即返回调度结果 */
191 osal_u8 resv[3]; /* 2:数组大小 */
192} alg_sch_output_stru;
193/******************************************************************************
194 5 外部函数声明
195******************************************************************************/
196
197/******************************************************************************
198 6 函数声明
199******************************************************************************/
200
201#ifdef __cplusplus
202#if __cplusplus
203}
204#endif
205#endif
206#endif /* #ifdef _PRE_WLAN_FEATURE_SCHEDULE */
207#endif /* end of alg_schedule.h */
osal_u16 resv2
Definition oal_net.h:3
osal_u8 resv1
Definition oal_net.h:1
osal_u8 oal_bool_enum_uint8
Definition oal_types_device_rom.h:45
unsigned char osal_u8
Definition osal_types.h:11
unsigned int osal_u32
Definition osal_types.h:13
unsigned short osal_u16
Definition osal_types.h:12
Definition frw_ext_common_rom.h:20
Definition mac_user_ext.h:463
Definition mac_user_ext.h:519
Definition osal_list.h:39
Definition hal_ops_common_rom.h:529
#define HAL_TX_QUEUE_NUM
Definition wlan_spec_hh503_rom.h:51
#define WLAN_TID_MAX_NUM
Definition wlan_types.h:389
@ WLAN_WME_AC_BUTT
Definition wlan_types_base_rom.h:54
@ WLAN_TIDNO_BUTT
Definition wlan_types_base_rom.h:72