hc
2024-03-25 edb30157bad0c0001c32b854271ace01d3b9a16a
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
/******************************************************************************
 *
 * Copyright(c) 2019 - 2020 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 __PHL_SCAN_H__
#define __PHL_SCAN_H__
 
/* Header file for application to invoke scan service */
#define PHL_SSID_LEN 32
struct rtw_phl_ssid {
   u32 ssid_len;
   u8 ssid[PHL_SSID_LEN];
};
 
enum phl_scan_mode {
   NULL_MODE,  /* End of Scanning */
   NORMAL_SCAN_MODE, /* OFF CHANNEL : non-operation channel*/
   BACKOP_MODE,
   P2P_SCAN_MODE,
   P2P_LISTEN_MODE,
   MAX_MODE,
};
 
/* Scan type including active and passive scan. */
enum rtw_phl_scan_type {
   RTW_PHL_SCAN_PASSIVE,
   RTW_PHL_SCAN_ACTIVE,
   RTW_PHL_SCAN_MIX,
};
 
enum phl_ext_act_scan_state {
   EXT_ACT_SCAN_DISABLE,
   EXT_ACT_SCAN_ENABLE,
   EXT_ACT_SCAN_TRIGGER,
   EXT_ACT_SCAN_DONE,
};
 
struct phl_scan_channel {
   _os_list list;
 
   enum band_type band;
   u16 channel; /* channel number */
   u16 duration; /* 0: use default, otherwise: channel scan time */
   enum channel_width bw; /* 0: use default 20Mhz */
   enum chan_offset offset;
   enum rtw_phl_scan_type type; /* active scan: 1, passive scan: 0 */
   u8 scan_mode; /* according to phl_scan_mode */
   u8 ext_act_scan; /* according to phl_ext_act_scan_state */
};
 
enum scan_result {
   SCAN_REQ_ABORT, /* abort a non-started(queued) scan */
   SCAN_REQ_CANCEL, /* cancel a started scan */
   SCAN_REQ_COMPLETE /* scan complete */
};
 
enum scan_bkop_mode {
   SCAN_BKOP_NONE,
   SCAN_BKOP_CNT,
   SCAN_BKOP_TIMER
};
 
#define SCAN_SSID_AMOUNT 9 /* for WEXT_CSCAN_AMOUNT 9 */
#define SCAN_CH_AMOUNT (14+37)
struct rtw_phl_scan_param {
   u32 max_scan_time;
   #ifdef CONFIG_PHL_CMD_SCAN_BKOP_TIME
   u32 max_listen_time;
   #endif
   struct rtw_phl_ssid ssid[SCAN_SSID_AMOUNT];
   u8 ssid_num;
   u8 repeat; /* 255 means scan forever until cancel */
 
   u8 ch_num;
   struct phl_scan_channel *ch;
   u32 ch_sz;
   int ch_idx; /* current scaned cahnnel index, init vaule = (-1) */
 
   /* back op param */
   enum scan_bkop_mode back_op_mode;
   u8 back_op_ch_cnt; /* every back_op_ch_cnt go back to op ch */
 
   /* every 'back_op_off_ch_dur_ms' go back to op ch
    * back_op_off_ch_dur_ms have to large than ch->duration
    * 0 : not specify
   */
   u16 back_op_ch_dur_ms; /* op ch stay time; 0 : use default value */
   u16 back_op_off_ch_dur_ms;
   u16 back_op_off_ch_ext_dur_ms; /* extend when off_ch_tx (MGNT_TX) */
 
   struct rtw_phl_scan_ops *ops;
   void *priv; /* ops private */
 
   struct rtw_wifi_role_t *wifi_role;
   /* scan fsm internal use
    * represent current scanning channel
    */
   struct phl_scan_channel *scan_ch;
 
#ifdef CONFIG_PHL_CMD_SCAN
   struct phl_queue chlist;
   struct phl_scan_channel back_op_ch[MAX_WIFI_ROLE_NUMBER];
 
   _os_timer scan_timer; /* handle in phl_cmd_scan */
   u8 fltr_mode; /* backup filter mode before off channel */
   u8 state;
#endif
   /* create for computing scan time */
   u32 enqueue_time;
   u32 start_time;
   u32 end_time;
   u32 total_scan_time;
 
   u32 token; /* unique id, generated by rtw_phl_scan_request() */
   const char *name;
   enum scan_result result;
   u32 ext_act_scan_period;
};
 
enum PRECEDE {
   TO_TAIL, /* normal case */
   TO_HEAD, /* insert to head */
   IMMEDIATE /* cancel previous scan and run immediately */
};
 
struct rtw_phl_scan_ops {
   int (*scan_issue_pbreq)(void *priv, struct rtw_phl_scan_param *param);
   u8 (*scan_issue_null_data)(void *priv, u8 ridx, bool ps);
   int (*scan_start)(void *priv, struct rtw_phl_scan_param *param);
   int (*scan_ch_ready)(void *priv, struct rtw_phl_scan_param *param);
   int (*scan_off_ch_tx)(void *priv,
       struct rtw_phl_scan_param *param, void *data);
   int (*scan_complete)(void *priv, struct rtw_phl_scan_param *param);
};
 
enum rtw_phl_status rtw_phl_scan_cancel(void *phl);
enum rtw_phl_status rtw_phl_scan_request(void *phl,
   struct rtw_phl_scan_param *pbuf, enum PRECEDE order);
enum rtw_phl_status rtw_phl_scan_del_request(void *phl,
   u32 token);
enum rtw_phl_status rtw_phl_scan_pause(void *phl);
enum rtw_phl_status rtw_phl_scan_resume(void *phl);
enum rtw_phl_status rtw_phl_scan_force_active_scan(void *phl,
   u16 channel, u16 duration);
int rtw_phl_scan_inprogress_req_num(void *phl);
enum rtw_phl_status rtw_phl_scan_running_req(void *phl,
   struct rtw_phl_scan_param **param);
bool rtw_phl_scan_scanning_req(void *phl, u32 token, u32 *token_running);
enum rtw_phl_status rtw_phl_scan_off_ch_tx(void *phl, void *data, int len);
 
/* CMD_DISP SCAN*/
enum rtw_phl_status rtw_phl_cmd_scan_request(void *phl,
   struct rtw_phl_scan_param *param, enum PRECEDE order);
enum rtw_phl_status rtw_phl_cmd_scan_cancel(void *phl,
               struct rtw_phl_scan_param *param);
int rtw_phl_cmd_scan_inprogress(void *phl, u8 band_idx);
 
#endif /* __PHL_SCAN_H__ */