forked from HRex39/rtl8852be
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrtw_scan.h
288 lines (252 loc) · 9.42 KB
/
rtw_scan.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
/******************************************************************************
*
* Copyright(c) 2007 - 2019 Realtek Corporation.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of version 2 of the GNU General Public License as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
*****************************************************************************/
#ifndef __RTW_SCAN_H_
#define __RTW_SCAN_H_
/*rtw_mlme.h*/
void rtw_drv_scan_by_self(_adapter *padapter, u8 reason);
void rtw_scan_abort_no_wait(_adapter *adapter);
u32 rtw_scan_abort(_adapter *adapter, u32 timeout_ms);
void rtw_scan_timeout_handler(void *ctx);
void rtw_survey_event_callback(_adapter *adapter, u8 *pbuf);
void rtw_surveydone_event_callback(_adapter *adapter, u8 *pbuf);
enum {
SS_DENY_MP_MODE,
SS_DENY_RSON_SCANING,
SS_DENY_BLOCK_SCAN,
SS_DENY_BY_DRV,
SS_DENY_SELF_AP_UNDER_WPS,
SS_DENY_SELF_AP_UNDER_LINKING,
SS_DENY_SELF_AP_UNDER_SURVEY,
/*SS_DENY_SELF_STA_UNDER_WPS,*/
SS_DENY_SELF_STA_UNDER_LINKING,
SS_DENY_SELF_STA_UNDER_SURVEY,
SS_DENY_BUDDY_UNDER_LINK_WPS,
SS_DENY_BUDDY_UNDER_SURVEY,
SS_DENY_BUSY_TRAFFIC,
SS_ALLOW,
#ifdef DBG_LA_MODE
SS_DENY_LA_MODE,
#endif
SS_DENY_ADAPTIVITY,
};
u8 _rtw_sitesurvey_condition_check(const char *caller, _adapter *adapter, bool check_sc_interval);
#define rtw_sitesurvey_condition_check(adapter, check_sc_interval) _rtw_sitesurvey_condition_check(__func__, adapter, check_sc_interval)
#ifdef CONFIG_SET_SCAN_DENY_TIMER
bool rtw_is_scan_deny(_adapter *adapter);
void rtw_clear_scan_deny(_adapter *adapter);
void rtw_set_scan_deny_timer_hdl(void *ctx);
void rtw_set_scan_deny(_adapter *adapter, u32 ms);
#else
#define rtw_is_scan_deny(adapter) _FALSE
#define rtw_clear_scan_deny(adapter) do {} while (0)
#define rtw_set_scan_deny(adapter, ms) do {} while (0)
#endif
#ifdef CONFIG_RTW_ACS
u8 rtw_set_acs_sitesurvey(_adapter *adapter);
#endif
/*rtw_mlme_ext.h*/
void sitesurvey_set_offch_state(_adapter *adapter, u8 scan_state);
/*const char *scan_state_str(u8 state);*/
#define mlmeext_scan_state(mlmeext) ((mlmeext)->sitesurvey_res.state)
/*#define mlmeext_scan_state_str(mlmeext) scan_state_str((mlmeext)->sitesurvey_res.state)*/
#define mlmeext_chk_scan_state(mlmeext, _state) ((mlmeext)->sitesurvey_res.state == (_state))
#define mlmeext_set_scan_state(mlmeext, _state) \
do { \
((mlmeext)->sitesurvey_res.state = (_state)); \
((mlmeext)->sitesurvey_res.next_state = (_state)); \
rtw_mi_update_iface_status(&((container_of(mlmeext, _adapter, mlmeextpriv)->mlmepriv)), 0); \
/* RTW_INFO("set_scan_state:%s\n", scan_state_str(_state)); */ \
sitesurvey_set_offch_state(container_of(mlmeext, _adapter, mlmeextpriv), _state); \
} while (0)
#if 0
#define mlmeext_scan_next_state(mlmeext) ((mlmeext)->sitesurvey_res.next_state)
#define mlmeext_set_scan_next_state(mlmeext, _state) \
do { \
((mlmeext)->sitesurvey_res.next_state = (_state)); \
/* RTW_INFO("set_scan_next_state:%s\n", scan_state_str(_state)); */ \
} while (0)
#endif
#ifdef CONFIG_SCAN_BACKOP
#define mlmeext_scan_backop_flags(mlmeext) ((mlmeext)->sitesurvey_res.backop_flags)
#define mlmeext_chk_scan_backop_flags(mlmeext, flags) ((mlmeext)->sitesurvey_res.backop_flags & (flags))
#define mlmeext_assign_scan_backop_flags(mlmeext, flags) \
do { \
((mlmeext)->sitesurvey_res.backop_flags = (flags)); \
RTW_INFO("assign_scan_backop_flags:0x%02x\n", (mlmeext)->sitesurvey_res.backop_flags); \
} while (0)
#define mlmeext_scan_backop_flags_sta(mlmeext) ((mlmeext)->sitesurvey_res.backop_flags_sta)
#define mlmeext_chk_scan_backop_flags_sta(mlmeext, flags) ((mlmeext)->sitesurvey_res.backop_flags_sta & (flags))
#define mlmeext_assign_scan_backop_flags_sta(mlmeext, flags) \
do { \
((mlmeext)->sitesurvey_res.backop_flags_sta = (flags)); \
} while (0)
#else
#define mlmeext_scan_backop_flags(mlmeext) (0)
#define mlmeext_chk_scan_backop_flags(mlmeext, flags) (0)
#define mlmeext_assign_scan_backop_flags(mlmeext, flags) do {} while (0)
#define mlmeext_scan_backop_flags_sta(mlmeext) (0)
#define mlmeext_chk_scan_backop_flags_sta(mlmeext, flags) (0)
#define mlmeext_assign_scan_backop_flags_sta(mlmeext, flags) do {} while (0)
#endif /* CONFIG_SCAN_BACKOP */
#if defined(CONFIG_SCAN_BACKOP) && defined(CONFIG_AP_MODE)
#define mlmeext_scan_backop_flags_ap(mlmeext) ((mlmeext)->sitesurvey_res.backop_flags_ap)
#define mlmeext_chk_scan_backop_flags_ap(mlmeext, flags) ((mlmeext)->sitesurvey_res.backop_flags_ap & (flags))
#define mlmeext_assign_scan_backop_flags_ap(mlmeext, flags) \
do { \
((mlmeext)->sitesurvey_res.backop_flags_ap = (flags)); \
} while (0)
#else
#define mlmeext_scan_backop_flags_ap(mlmeext) (0)
#define mlmeext_chk_scan_backop_flags_ap(mlmeext, flags) (0)
#define mlmeext_assign_scan_backop_flags_ap(mlmeext, flags) do {} while (0)
#endif /* defined(CONFIG_SCAN_BACKOP) && defined(CONFIG_AP_MODE) */
#if defined(CONFIG_SCAN_BACKOP) && defined(CONFIG_RTW_MESH)
#define mlmeext_scan_backop_flags_mesh(mlmeext) ((mlmeext)->sitesurvey_res.backop_flags_mesh)
#define mlmeext_chk_scan_backop_flags_mesh(mlmeext, flags) ((mlmeext)->sitesurvey_res.backop_flags_mesh & (flags))
#define mlmeext_assign_scan_backop_flags_mesh(mlmeext, flags) \
do { \
((mlmeext)->sitesurvey_res.backop_flags_mesh = (flags)); \
} while (0)
#else
#define mlmeext_scan_backop_flags_mesh(mlmeext) (0)
#define mlmeext_chk_scan_backop_flags_mesh(mlmeext, flags) (0)
#define mlmeext_assign_scan_backop_flags_mesh(mlmeext, flags) do {} while (0)
#endif /* defined(CONFIG_SCAN_BACKOP) && defined(CONFIG_RTW_MESH) */
#if 0
void survey_timer_hdl(void *ctx);
#define set_survey_timer(mlmeext, ms) \
do { \
/*RTW_INFO("%s set_survey_timer(%p, %d)\n", __FUNCTION__, (mlmeext), (ms));*/ \
_set_timer(&(mlmeext)->survey_timer, (ms)); \
} while (0)
#define cancel_survey_timer(mlmeext) \
do { \
/*RTW_INFO("%s cancel_survey_timer(%p)\n", __FUNCTION__, (mlmeext));*/ \
_cancel_timer_ex(&(mlmeext)->survey_timer); \
} while (0)
#endif
enum SCAN_STATE {
SCAN_DISABLE = 0,
SCAN_START = 1,
SCAN_PS_ANNC_WAIT = 2,
SCAN_ENTER = 3,
SCAN_PROCESS = 4,
/* backop */
SCAN_BACKING_OP = 5,
SCAN_BACK_OP = 6,
SCAN_LEAVING_OP = 7,
SCAN_LEAVE_OP = 8,
/* SW antenna diversity (before linked) */
SCAN_SW_ANTDIV_BL = 9,
/* legacy p2p */
SCAN_TO_P2P_LISTEN = 10,
SCAN_P2P_LISTEN = 11,
SCAN_COMPLETE = 12,
SCAN_STATE_MAX,
};
enum ss_backop_flag {
SS_BACKOP_EN = BIT0, /* backop when linked */
SS_BACKOP_EN_NL = BIT1, /* backop even when no linked */
SS_BACKOP_PS_ANNC = BIT4,
SS_BACKOP_TX_RESUME = BIT5,
};
#define RTW_SSID_SCAN_AMOUNT 9 /* for WEXT_CSCAN_AMOUNT 9 */
#define RTW_CHANNEL_SCAN_AMOUNT (14+37)
struct ss_res {
u8 state;
u8 next_state; /* will set to state on next cmd hdl */
int bss_cnt;
u8 activate_ch_cnt;
#ifdef CONFIG_CMD_SCAN
struct rtw_phl_scan_param *scan_param;
#endif
struct submit_ctx sctx;
u16 scan_ch_ms;
u32 scan_timeout_ms;
u8 rx_ampdu_accept;
u8 rx_ampdu_size;
#if 0
int channel_idx;
u8 force_ssid_scan;
int scan_mode;
u8 igi_scan;
u8 igi_before_scan; /* used for restoring IGI value without enable DIG & FA_CNT */
#endif
#ifdef CONFIG_SCAN_BACKOP
u8 backop_flags_sta; /* policy for station mode*/
#ifdef CONFIG_AP_MODE
u8 backop_flags_ap; /* policy for ap mode */
#endif
#ifdef CONFIG_RTW_MESH
u8 backop_flags_mesh; /* policy for mesh mode */
#endif
u8 backop_flags; /* per backop runtime decision */
#if 0
u8 scan_cnt;
#endif
u8 scan_cnt_max;
systime backop_time; /* the start time of backop */
u16 backop_ms;
#endif
#if defined(CONFIG_ANTENNA_DIVERSITY) || defined(DBG_SCAN_SW_ANTDIV_BL)
u8 is_sw_antdiv_bl_scan;
#endif
u8 ssid_num;
u8 ch_num;
NDIS_802_11_SSID ssid[RTW_SSID_SCAN_AMOUNT];
struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
u32 token; /* 0: use to identify caller */
u16 duration; /* 0: use default */
u8 igi; /* 0: use defalut */
u8 bw; /* 0: use default */
bool acs; /* aim to trigger channel selection when scan done */
};
enum rtw_scan_type {
RTW_SCAN_NORMAL,
RTW_SCAN_P2P,
RTW_SCAN_RRM
};
struct sitesurvey_parm {
enum rtw_phl_scan_type scan_mode; /* active: 1, passive: 0 */
/* sint bsslimit; // 1 ~ 48 */
u8 ssid_num;
u8 ch_num;
NDIS_802_11_SSID ssid[RTW_SSID_SCAN_AMOUNT];
struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
u32 rrm_token; /* 80211k use it to identify caller */
u16 duration; /* 0: use default, otherwise: channel scan time */
u8 igi; /* 0: use defalut */
u8 bw; /* 0: use default */
bool acs; /* aim to trigger channel selection when scan done */
enum rtw_scan_type scan_type;
};
void rtw_init_sitesurvey_parm(_adapter *padapter, struct sitesurvey_parm *pparm);
u8 rtw_sitesurvey_cmd(_adapter *padapter, struct sitesurvey_parm *pparm);
#ifndef CONFIG_CMD_SCAN
u32 rtw_site_survey_fsm(_adapter *padapter, struct cmd_obj *pcmd);
#endif
#if 1 /*#ifndef CONFIG_PHL_ARCH*/
u8 sitesurvey_cmd_hdl(_adapter *padapter, u8 *pbuf);
void rtw_survey_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd);
#endif
#ifdef CONFIG_IOCTL_CFG80211
u8 rtw_phl_remain_on_ch_cmd(_adapter *padapter, u64 cookie, struct wireless_dev *wdev,
struct ieee80211_channel *ch, u8 ch_type, unsigned int duration,
struct back_op_param *bkop_parm, u8 is_p2p);
#endif
#ifdef CONFIG_STA_CMD_DISPR
u8 scan_issu_null_data_cb(void *priv, u8 ridx, bool ps);
#endif
#endif /* __RTW_SCAN_H_ */