xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8852be/include/rtw_rm_fsm.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun 
2*4882a593Smuzhiyun /******************************************************************************
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Copyright(c) 2007 - 2019 Realtek Corporation.
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or modify it
7*4882a593Smuzhiyun  * under the terms of version 2 of the GNU General Public License as
8*4882a593Smuzhiyun  * published by the Free Software Foundation.
9*4882a593Smuzhiyun  *
10*4882a593Smuzhiyun  * This program is distributed in the hope that it will be useful, but WITHOUT
11*4882a593Smuzhiyun  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12*4882a593Smuzhiyun  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13*4882a593Smuzhiyun  * more details.
14*4882a593Smuzhiyun  *
15*4882a593Smuzhiyun  *****************************************************************************/
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #ifndef __RTW_RM_FSM_H_
18*4882a593Smuzhiyun #define __RTW_RM_FSM_H_
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #ifdef CONFIG_RTW_80211K
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun #define RM_SUPPORT_IWPRIV_DBG	1
23*4882a593Smuzhiyun #define RM_MORE_DBG_MSG		0
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun #define DBG_BCN_REQ_DETAIL	0
26*4882a593Smuzhiyun #define DBG_BCN_REQ_WILDCARD	0
27*4882a593Smuzhiyun #define DBG_BCN_REQ_SSID	0
28*4882a593Smuzhiyun #define DBG_BCN_REQ_SSID_NAME	"RealKungFu"
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun #define RM_REQ_TIMEOUT		10000	/* 10 seconds */
31*4882a593Smuzhiyun #define RM_MEAS_TIMEOUT		10000	/* 10 seconds */
32*4882a593Smuzhiyun #define RM_REPT_SCAN_INTVL	5000	/*  5 seconds */
33*4882a593Smuzhiyun #define RM_REPT_POLL_INTVL	2000	/*  2 seconds */
34*4882a593Smuzhiyun #define RM_COND_INTVL		2000	/*  2 seconds */
35*4882a593Smuzhiyun #define RM_SCAN_DENY_TIMES	10
36*4882a593Smuzhiyun #define RM_BUSY_TRAFFIC_TIMES	10
37*4882a593Smuzhiyun #define RM_WAIT_BUSY_TIMEOUT	1000	/*  1 seconds */
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun #define MEAS_REQ_MOD_PARALLEL	BIT(0)
40*4882a593Smuzhiyun #define MEAS_REQ_MOD_ENABLE	BIT(1)
41*4882a593Smuzhiyun #define MEAS_REQ_MOD_REQUEST	BIT(2)
42*4882a593Smuzhiyun #define MEAS_REQ_MOD_REPORT	BIT(3)
43*4882a593Smuzhiyun #define MEAS_REQ_MOD_DUR_MAND	BIT(4)
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun #define MEAS_REP_MOD_LATE	BIT(0)
46*4882a593Smuzhiyun #define MEAS_REP_MOD_INCAP	BIT(1)
47*4882a593Smuzhiyun #define MEAS_REP_MOD_REFUSE	BIT(2)
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun #define RM_MASTER		BIT(0)	/* STA who issue meas_req */
50*4882a593Smuzhiyun #define RM_SLAVE		0	/* STA who do measurement */
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun #define CLOCK_UNIT		10	/* ms */
53*4882a593Smuzhiyun #define RTW_MAX_NB_RPT_IE_NUM	16
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun #define RM_GET_AID(rmid)	((rmid&0xffff0000)>>16)
56*4882a593Smuzhiyun #define RM_IS_ID_FOR_ALL(rmid)	(rmid&RM_ALL_MEAS)
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun /* IEEE 802.11-2012 Table 8-59 Measurement Type definitions
59*4882a593Smuzhiyun *  for measurement request
60*4882a593Smuzhiyun *  modify rm_meas_type_req_name() when adding new type
61*4882a593Smuzhiyun */
62*4882a593Smuzhiyun enum meas_type_of_req {
63*4882a593Smuzhiyun 	basic_req,	/* spectrum measurement */
64*4882a593Smuzhiyun 	cca_req,
65*4882a593Smuzhiyun 	rpi_histo_req,
66*4882a593Smuzhiyun 	ch_load_req,
67*4882a593Smuzhiyun 	noise_histo_req,
68*4882a593Smuzhiyun 	bcn_req,
69*4882a593Smuzhiyun 	frame_req,
70*4882a593Smuzhiyun 	sta_statis_req,
71*4882a593Smuzhiyun 	lci_req,
72*4882a593Smuzhiyun 	meas_type_req_max,
73*4882a593Smuzhiyun };
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun /* IEEE 802.11-2012 Table 8-81 Measurement Type definitions
76*4882a593Smuzhiyun *  for measurement report
77*4882a593Smuzhiyun *  modify rm_type_rep_name() when adding new type
78*4882a593Smuzhiyun */
79*4882a593Smuzhiyun enum meas_type_of_rep {
80*4882a593Smuzhiyun 	basic_rep,	/* spectrum measurement */
81*4882a593Smuzhiyun 	cca_rep,
82*4882a593Smuzhiyun 	rpi_histo_rep,
83*4882a593Smuzhiyun 	ch_load_rep,	/* radio measurement */
84*4882a593Smuzhiyun 	noise_histo_rep,
85*4882a593Smuzhiyun 	bcn_rep,
86*4882a593Smuzhiyun 	frame_rep,
87*4882a593Smuzhiyun 	sta_statis_rep,	/* Radio measurement and WNM */
88*4882a593Smuzhiyun 	lci_rep,
89*4882a593Smuzhiyun 	meas_type_rep_max
90*4882a593Smuzhiyun };
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun /*
93*4882a593Smuzhiyun * Beacon request
94*4882a593Smuzhiyun */
95*4882a593Smuzhiyun /* IEEE 802.11-2012 Table 8-64 Measurement mode for Beacon Request element */
96*4882a593Smuzhiyun enum bcn_req_meas_mode {
97*4882a593Smuzhiyun 	bcn_req_passive,
98*4882a593Smuzhiyun 	bcn_req_active,
99*4882a593Smuzhiyun 	bcn_req_bcn_table
100*4882a593Smuzhiyun };
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun /* IEEE 802.11-2012 Table 8-65 optional subelement IDs for Beacon Request */
103*4882a593Smuzhiyun enum bcn_req_opt_sub_id{
104*4882a593Smuzhiyun 	bcn_req_ssid = 0,		/* len 0-32 */
105*4882a593Smuzhiyun 	bcn_req_rep_info = 1,		/* len 2 */
106*4882a593Smuzhiyun 	bcn_req_rep_detail = 2,		/* len 1 */
107*4882a593Smuzhiyun 	bcn_req_req = 10,		/* len 0-237 */
108*4882a593Smuzhiyun 	bcn_req_ap_ch_rep = 51		/* len 1-237 */
109*4882a593Smuzhiyun };
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun /* IEEE 802.11-2012 Table 8-66 Reporting condition of Beacon Report */
112*4882a593Smuzhiyun enum bcn_rep_cound_id{
113*4882a593Smuzhiyun 	bcn_rep_cond_immediately,	/* default */
114*4882a593Smuzhiyun 	bcn_req_cond_rcpi_greater,
115*4882a593Smuzhiyun 	bcn_req_cond_rcpi_less,
116*4882a593Smuzhiyun 	bcn_req_cond_rsni_greater,
117*4882a593Smuzhiyun 	bcn_req_cond_rsni_less,
118*4882a593Smuzhiyun 	bcn_req_cond_max
119*4882a593Smuzhiyun };
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun struct opt_rep_info {
122*4882a593Smuzhiyun 	u8 cond;
123*4882a593Smuzhiyun 	u8 threshold;
124*4882a593Smuzhiyun };
125*4882a593Smuzhiyun 
126*4882a593Smuzhiyun #define BCN_REQ_OPT_MAX_NUM		16
127*4882a593Smuzhiyun #define BCN_REQ_REQ_OPT_MAX_NUM		16
128*4882a593Smuzhiyun #define BCN_REQ_OPT_AP_CH_RPT_MAX_NUM	12
129*4882a593Smuzhiyun struct bcn_req_opt {
130*4882a593Smuzhiyun 	/* all req cmd id */
131*4882a593Smuzhiyun 	u8 opt_id[BCN_REQ_OPT_MAX_NUM];
132*4882a593Smuzhiyun 	u8 opt_id_num;
133*4882a593Smuzhiyun 	u8 req_id_num;
134*4882a593Smuzhiyun 	u8 req_id[BCN_REQ_REQ_OPT_MAX_NUM];
135*4882a593Smuzhiyun 	u8 rep_detail;
136*4882a593Smuzhiyun 	NDIS_802_11_SSID ssid;
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun 	/* bcn report condition */
139*4882a593Smuzhiyun 	struct opt_rep_info rep_cond;
140*4882a593Smuzhiyun 
141*4882a593Smuzhiyun 	u8 ap_ch_rpt_num;
142*4882a593Smuzhiyun 	struct _RT_OPERATING_CLASS *ap_ch_rpt[BCN_REQ_OPT_AP_CH_RPT_MAX_NUM];
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun 	/* 0:default(Report to be issued after each measurement) */
145*4882a593Smuzhiyun 	u8 *req_start;	/*id : 10 request;start  */
146*4882a593Smuzhiyun 	u8 req_len;	/*id : 10 request;length */
147*4882a593Smuzhiyun };
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun /*
150*4882a593Smuzhiyun * channel load
151*4882a593Smuzhiyun */
152*4882a593Smuzhiyun /* IEEE 802.11-2012 Table 8-60 optional subelement IDs for channel load request */
153*4882a593Smuzhiyun enum ch_load_opt_sub_id{
154*4882a593Smuzhiyun 	ch_load_rsvd,
155*4882a593Smuzhiyun 	ch_load_rep_info
156*4882a593Smuzhiyun };
157*4882a593Smuzhiyun 
158*4882a593Smuzhiyun /* IEEE 802.11-2012 Table 8-61 Reporting condition for channel load Report */
159*4882a593Smuzhiyun enum ch_load_cound_id{
160*4882a593Smuzhiyun 	ch_load_cond_immediately,	/* default */
161*4882a593Smuzhiyun 	ch_load_cond_anpi_equal_greater,
162*4882a593Smuzhiyun 	ch_load_cond_anpi_equal_less,
163*4882a593Smuzhiyun 	ch_load_cond_max
164*4882a593Smuzhiyun };
165*4882a593Smuzhiyun 
166*4882a593Smuzhiyun /*
167*4882a593Smuzhiyun * Noise histogram
168*4882a593Smuzhiyun */
169*4882a593Smuzhiyun /* IEEE 802.11-2012 Table 8-62 optional subelement IDs for noise histogram */
170*4882a593Smuzhiyun enum noise_histo_opt_sub_id{
171*4882a593Smuzhiyun 	noise_histo_rsvd,
172*4882a593Smuzhiyun 	noise_histo_rep_info
173*4882a593Smuzhiyun };
174*4882a593Smuzhiyun 
175*4882a593Smuzhiyun /* IEEE 802.11-2012 Table 8-63 Reporting condition for noise historgarm Report */
176*4882a593Smuzhiyun enum noise_histo_cound_id{
177*4882a593Smuzhiyun 	noise_histo_cond_immediately,	/* default */
178*4882a593Smuzhiyun 	noise_histo_cond_anpi_equal_greater,
179*4882a593Smuzhiyun 	noise_histo_cond_anpi_equal_less,
180*4882a593Smuzhiyun 	noise_histo_cond_max
181*4882a593Smuzhiyun };
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun struct meas_req_opt {
184*4882a593Smuzhiyun 	/* report condition */
185*4882a593Smuzhiyun 	struct opt_rep_info rep_cond;
186*4882a593Smuzhiyun };
187*4882a593Smuzhiyun 
188*4882a593Smuzhiyun /*
189*4882a593Smuzhiyun * State machine
190*4882a593Smuzhiyun */
191*4882a593Smuzhiyun 
192*4882a593Smuzhiyun enum RM_STATE {
193*4882a593Smuzhiyun 	RM_ST_IDLE,
194*4882a593Smuzhiyun 	RM_ST_DO_MEAS,
195*4882a593Smuzhiyun 	RM_ST_WAIT_MEAS,
196*4882a593Smuzhiyun 	RM_ST_SEND_REPORT,
197*4882a593Smuzhiyun 	RM_ST_RECV_REPORT,
198*4882a593Smuzhiyun 	RM_ST_END,
199*4882a593Smuzhiyun 	RM_ST_MAX
200*4882a593Smuzhiyun };
201*4882a593Smuzhiyun 
202*4882a593Smuzhiyun struct rm_meas_req {
203*4882a593Smuzhiyun 	u8 category;
204*4882a593Smuzhiyun 	u8 action_code;		/* T8-206  */
205*4882a593Smuzhiyun 	u8 diag_token;
206*4882a593Smuzhiyun 	u16 rpt;
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun 	u8 e_id;
209*4882a593Smuzhiyun 	u8 len;
210*4882a593Smuzhiyun 	u8 m_token;
211*4882a593Smuzhiyun 	u8 m_mode;		/* req:F8-105, rep:F8-141 */
212*4882a593Smuzhiyun 	u8 m_type;		/* T8-59 */
213*4882a593Smuzhiyun 	u8 op_class;
214*4882a593Smuzhiyun 	u8 ch_num;
215*4882a593Smuzhiyun 	u16 rand_intvl;		/* units of TU */
216*4882a593Smuzhiyun 	u16 meas_dur;		/* units of TU */
217*4882a593Smuzhiyun 
218*4882a593Smuzhiyun 	u8 bssid[6];		/* for bcn_req */
219*4882a593Smuzhiyun 
220*4882a593Smuzhiyun 	u8 *pssid;
221*4882a593Smuzhiyun 	u8 *opt_s_elem_start;
222*4882a593Smuzhiyun 	int opt_s_elem_len;
223*4882a593Smuzhiyun 
224*4882a593Smuzhiyun 	s8 tx_pwr_used;		/* for link measurement */
225*4882a593Smuzhiyun 	s8 tx_pwr_max;		/* for link measurement */
226*4882a593Smuzhiyun 
227*4882a593Smuzhiyun 	union {
228*4882a593Smuzhiyun 		struct bcn_req_opt bcn;
229*4882a593Smuzhiyun 		struct meas_req_opt clm;
230*4882a593Smuzhiyun 		struct meas_req_opt nhm;
231*4882a593Smuzhiyun 	}opt;
232*4882a593Smuzhiyun 
233*4882a593Smuzhiyun 	struct rtw_ieee80211_channel ch_set[RTW_CHANNEL_SCAN_AMOUNT];
234*4882a593Smuzhiyun 	u8 ch_set_ch_amount;
235*4882a593Smuzhiyun 	s8 rx_pwr;		/* in dBm */
236*4882a593Smuzhiyun 	u8 rx_bw;
237*4882a593Smuzhiyun 	u8 rx_rsni;
238*4882a593Smuzhiyun 	u16 rx_rate;
239*4882a593Smuzhiyun };
240*4882a593Smuzhiyun 
241*4882a593Smuzhiyun struct rm_meas_rep {
242*4882a593Smuzhiyun 	u8 category;
243*4882a593Smuzhiyun 	u8 action_code;		/* T8-206  */
244*4882a593Smuzhiyun 	u8 diag_token;
245*4882a593Smuzhiyun 
246*4882a593Smuzhiyun 	u8 e_id;		/* T8-54, 38 request; 39 report */
247*4882a593Smuzhiyun 	u8 len;
248*4882a593Smuzhiyun 	u8 m_token;
249*4882a593Smuzhiyun 	u8 m_mode;		/* req:F8-105, rep:F8-141 */
250*4882a593Smuzhiyun 	u8 m_type;		/* T8-59 */
251*4882a593Smuzhiyun 	u8 op_class;
252*4882a593Smuzhiyun 	u8 ch_num;
253*4882a593Smuzhiyun 
254*4882a593Smuzhiyun 	u8 ch_load;
255*4882a593Smuzhiyun 	u8 anpi;
256*4882a593Smuzhiyun 	u8 ipi[11];
257*4882a593Smuzhiyun 
258*4882a593Smuzhiyun 	u16 rpt;
259*4882a593Smuzhiyun 	u8 bssid[6];		/* for bcn_req */
260*4882a593Smuzhiyun };
261*4882a593Smuzhiyun 
262*4882a593Smuzhiyun #define MAX_BUF_NUM	128
263*4882a593Smuzhiyun struct data_buf {
264*4882a593Smuzhiyun 	u8 *pbuf;
265*4882a593Smuzhiyun 	u16 len;
266*4882a593Smuzhiyun };
267*4882a593Smuzhiyun 
268*4882a593Smuzhiyun struct rm_obj {
269*4882a593Smuzhiyun 
270*4882a593Smuzhiyun 	/* aid << 16
271*4882a593Smuzhiyun 		|diag_token << 8
272*4882a593Smuzhiyun 		|B(1) 1/0:All_AID/UNIC
273*4882a593Smuzhiyun 		|B(0) 1/0:RM_MASTER/RM_SLAVE */
274*4882a593Smuzhiyun 	u32 rmid;
275*4882a593Smuzhiyun 
276*4882a593Smuzhiyun 	enum RM_STATE state;
277*4882a593Smuzhiyun 	struct rm_meas_req q;
278*4882a593Smuzhiyun 	struct rm_meas_rep p;
279*4882a593Smuzhiyun 	struct sta_info *psta;
280*4882a593Smuzhiyun 	struct rm_clock *pclock;
281*4882a593Smuzhiyun 
282*4882a593Smuzhiyun 	/* meas report */
283*4882a593Smuzhiyun 	u64 meas_start_time;
284*4882a593Smuzhiyun 	u64 meas_end_time;
285*4882a593Smuzhiyun 	int wait_busy;
286*4882a593Smuzhiyun 	u8 poll_mode;
287*4882a593Smuzhiyun 
288*4882a593Smuzhiyun 	struct data_buf buf[MAX_BUF_NUM];
289*4882a593Smuzhiyun 	bool from_ioctl;
290*4882a593Smuzhiyun 
291*4882a593Smuzhiyun 	_list list;
292*4882a593Smuzhiyun };
293*4882a593Smuzhiyun 
294*4882a593Smuzhiyun /*
295*4882a593Smuzhiyun * Measurement
296*4882a593Smuzhiyun */
297*4882a593Smuzhiyun struct opt_subelement {
298*4882a593Smuzhiyun 	u8 id;
299*4882a593Smuzhiyun 	u8 length;
300*4882a593Smuzhiyun 	u8 *data;
301*4882a593Smuzhiyun };
302*4882a593Smuzhiyun 
303*4882a593Smuzhiyun /* 802.11-2012 Table 8-206 Radio Measurment Action field */
304*4882a593Smuzhiyun enum rm_action_code {
305*4882a593Smuzhiyun 	RM_ACT_RADIO_MEAS_REQ,
306*4882a593Smuzhiyun 	RM_ACT_RADIO_MEAS_REP,
307*4882a593Smuzhiyun 	RM_ACT_LINK_MEAS_REQ,
308*4882a593Smuzhiyun 	RM_ACT_LINK_MEAS_REP,
309*4882a593Smuzhiyun 	RM_ACT_NB_REP_REQ,	/* 4 */
310*4882a593Smuzhiyun 	RM_ACT_NB_REP_RESP,
311*4882a593Smuzhiyun 	RM_ACT_RESV,
312*4882a593Smuzhiyun 	RM_ACT_MAX
313*4882a593Smuzhiyun };
314*4882a593Smuzhiyun 
315*4882a593Smuzhiyun /* 802.11-2012 Table 8-119 RM Enabled Capabilities definition */
316*4882a593Smuzhiyun enum rm_cap_en {
317*4882a593Smuzhiyun 	RM_LINK_MEAS_CAP_EN,
318*4882a593Smuzhiyun 	RM_NB_REP_CAP_EN,		/* neighbor report */
319*4882a593Smuzhiyun 	RM_PARAL_MEAS_CAP_EN,		/* parallel report */
320*4882a593Smuzhiyun 	RM_REPEAT_MEAS_CAP_EN,
321*4882a593Smuzhiyun 	RM_BCN_PASSIVE_MEAS_CAP_EN,
322*4882a593Smuzhiyun 	RM_BCN_ACTIVE_MEAS_CAP_EN,
323*4882a593Smuzhiyun 	RM_BCN_TABLE_MEAS_CAP_EN,
324*4882a593Smuzhiyun 	RM_BCN_MEAS_REP_COND_CAP_EN,	/* conditions */
325*4882a593Smuzhiyun 
326*4882a593Smuzhiyun 	RM_FRAME_MEAS_CAP_EN,
327*4882a593Smuzhiyun 	RM_CH_LOAD_CAP_EN,
328*4882a593Smuzhiyun 	RM_NOISE_HISTO_CAP_EN,		/* noise historgram */
329*4882a593Smuzhiyun 	RM_STATIS_MEAS_CAP_EN,		/* statistics */
330*4882a593Smuzhiyun 	RM_LCI_MEAS_CAP_EN,		/* 12 */
331*4882a593Smuzhiyun 	RM_LCI_AMIMUTH_CAP_EN,
332*4882a593Smuzhiyun 	RM_TRANS_STREAM_CAT_MEAS_CAP_EN,
333*4882a593Smuzhiyun 	RM_TRIG_TRANS_STREAM_CAT_MEAS_CAP_EN,
334*4882a593Smuzhiyun 
335*4882a593Smuzhiyun 	RM_AP_CH_REP_CAP_EN,
336*4882a593Smuzhiyun 	RM_RM_MIB_CAP_EN,
337*4882a593Smuzhiyun 	RM_OP_CH_MAX_MEAS_DUR0,		/* 18-20 */
338*4882a593Smuzhiyun 	RM_OP_CH_MAX_MEAS_DUR1,
339*4882a593Smuzhiyun 	RM_OP_CH_MAX_MEAS_DUR2,
340*4882a593Smuzhiyun 	RM_NONOP_CH_MAX_MEAS_DUR0,	/* 21-23 */
341*4882a593Smuzhiyun 	RM_NONOP_CH_MAX_MEAS_DUR1,
342*4882a593Smuzhiyun 	RM_NONOP_CH_MAX_MEAS_DUR2,
343*4882a593Smuzhiyun 
344*4882a593Smuzhiyun 	RM_MEAS_PILOT_CAP0,		/* 24-26 */
345*4882a593Smuzhiyun 	RM_MEAS_PILOT_CAP1,
346*4882a593Smuzhiyun 	RM_MEAS_PILOT_CAP2,
347*4882a593Smuzhiyun 	RM_MEAS_PILOT_TRANS_INFO_CAP_EN,
348*4882a593Smuzhiyun 	RM_NB_REP_TSF_OFFSET_CAP_EN,
349*4882a593Smuzhiyun 	RM_RCPI_MEAS_CAP_EN,		/* 29 */
350*4882a593Smuzhiyun 	RM_RSNI_MEAS_CAP_EN,
351*4882a593Smuzhiyun 	RM_BSS_AVG_ACCESS_DELAY_CAP_EN,
352*4882a593Smuzhiyun 
353*4882a593Smuzhiyun 	RM_AVALB_ADMIS_CAPACITY_CAP_EN,
354*4882a593Smuzhiyun 	RM_ANT_CAP_EN,
355*4882a593Smuzhiyun 	RM_RSVD,			/* 34-39 */
356*4882a593Smuzhiyun 	RM_MAX
357*4882a593Smuzhiyun };
358*4882a593Smuzhiyun 
359*4882a593Smuzhiyun char *rm_state_name(enum RM_STATE state);
360*4882a593Smuzhiyun char *rm_event_name(enum RM_EV_ID evid);
361*4882a593Smuzhiyun char *rm_type_req_name(u8 meas_type);
362*4882a593Smuzhiyun int _rm_post_event(_adapter *padapter, u32 rmid, enum RM_EV_ID evid);
363*4882a593Smuzhiyun int rm_enqueue_rmobj(_adapter *padapter, struct rm_obj *obj, bool to_head);
364*4882a593Smuzhiyun 
365*4882a593Smuzhiyun void rm_free_rmobj(struct rm_obj *prm);
366*4882a593Smuzhiyun struct rm_obj *rm_alloc_rmobj(_adapter *padapter);
367*4882a593Smuzhiyun struct rm_obj *rm_get_rmobj(_adapter *padapter, u32 rmid);
368*4882a593Smuzhiyun struct sta_info *rm_get_psta(_adapter *padapter, u32 rmid);
369*4882a593Smuzhiyun 
370*4882a593Smuzhiyun int retrieve_radio_meas_result(struct rm_obj *prm);
371*4882a593Smuzhiyun int rm_radio_meas_report_cond(struct rm_obj *prm);
372*4882a593Smuzhiyun int rm_recv_radio_mens_req(_adapter *padapter,
373*4882a593Smuzhiyun 	union recv_frame *precv_frame,struct sta_info *psta);
374*4882a593Smuzhiyun int rm_recv_radio_mens_rep(_adapter *padapter,
375*4882a593Smuzhiyun 	union recv_frame *precv_frame, struct sta_info *psta);
376*4882a593Smuzhiyun int rm_recv_link_mens_req(_adapter *padapter,
377*4882a593Smuzhiyun 	union recv_frame *precv_frame,struct sta_info *psta);
378*4882a593Smuzhiyun int rm_recv_link_mens_rep(_adapter *padapter,
379*4882a593Smuzhiyun 	union recv_frame *precv_frame, struct sta_info *psta);
380*4882a593Smuzhiyun int rm_radio_mens_nb_rep(_adapter *padapter,
381*4882a593Smuzhiyun 	union recv_frame *precv_frame, struct sta_info *psta);
382*4882a593Smuzhiyun int issue_null_reply(struct rm_obj *prm);
383*4882a593Smuzhiyun int issue_beacon_rep(struct rm_obj *prm);
384*4882a593Smuzhiyun int issue_nb_req(struct rm_obj *prm);
385*4882a593Smuzhiyun int issue_radio_meas_req(struct rm_obj *prm);
386*4882a593Smuzhiyun int issue_radio_meas_rep(struct rm_obj *prm);
387*4882a593Smuzhiyun int issue_link_meas_req(struct rm_obj *prm);
388*4882a593Smuzhiyun int issue_link_meas_rep(struct rm_obj *prm);
389*4882a593Smuzhiyun 
390*4882a593Smuzhiyun void rm_set_rep_mode(struct rm_obj *prm, u8 mode);
391*4882a593Smuzhiyun 
392*4882a593Smuzhiyun int ready_for_scan(struct rm_obj *prm);
393*4882a593Smuzhiyun int rm_sitesurvey(struct rm_obj *prm);
394*4882a593Smuzhiyun 
395*4882a593Smuzhiyun #endif /*CONFIG_RTW_80211K*/
396*4882a593Smuzhiyun #endif /*__RTW_RM_FSM_H_*/
397