xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8852be/phl/phl_mr.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /******************************************************************************
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * Copyright(c) 2019 Realtek Corporation.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or modify it
6*4882a593Smuzhiyun  * under the terms of version 2 of the GNU General Public License as
7*4882a593Smuzhiyun  * published by the Free Software Foundation.
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * This program is distributed in the hope that it will be useful, but WITHOUT
10*4882a593Smuzhiyun  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11*4882a593Smuzhiyun  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12*4882a593Smuzhiyun  * more details.
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  *****************************************************************************/
15*4882a593Smuzhiyun #ifndef _PHL_MR_H_
16*4882a593Smuzhiyun #define _PHL_MR_H_
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun static inline int
phl_mr_get_chanctx_num(struct phl_info_t * phl_info,struct hw_band_ctl_t * band_ctrl)19*4882a593Smuzhiyun phl_mr_get_chanctx_num(struct phl_info_t *phl_info, struct hw_band_ctl_t *band_ctrl)
20*4882a593Smuzhiyun {
21*4882a593Smuzhiyun 	void *drv = phl_to_drvpriv(phl_info);
22*4882a593Smuzhiyun 	int chanctx_num = 0;
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun 	_os_spinlock(drv, &band_ctrl->chan_ctx_queue.lock, _ps, NULL);
25*4882a593Smuzhiyun 	chanctx_num = band_ctrl->chan_ctx_queue.cnt;
26*4882a593Smuzhiyun 	_os_spinunlock(drv, &band_ctrl->chan_ctx_queue.lock, _ps, NULL);
27*4882a593Smuzhiyun 	return chanctx_num;
28*4882a593Smuzhiyun }
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun static inline u8
phl_mr_get_role_num(struct phl_info_t * phl_info,struct hw_band_ctl_t * band_ctrl)31*4882a593Smuzhiyun phl_mr_get_role_num(struct phl_info_t *phl_info,
32*4882a593Smuzhiyun 				struct hw_band_ctl_t *band_ctrl)
33*4882a593Smuzhiyun {
34*4882a593Smuzhiyun 	void *drv = phl_to_drvpriv(phl_info);
35*4882a593Smuzhiyun 	u8 i;
36*4882a593Smuzhiyun 	u8 role_num = 0;
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun 	_os_spinlock(drv, &band_ctrl->lock, _ps, NULL);
39*4882a593Smuzhiyun 	for (i = 0; i < MAX_WIFI_ROLE_NUMBER; i++) {
40*4882a593Smuzhiyun 		if (band_ctrl->role_map & BIT(i)) {
41*4882a593Smuzhiyun 			role_num++;
42*4882a593Smuzhiyun 		}
43*4882a593Smuzhiyun 	}
44*4882a593Smuzhiyun 	_os_spinunlock(drv, &band_ctrl->lock, _ps, NULL);
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun 	return role_num;
47*4882a593Smuzhiyun }
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun enum rtw_phl_status
50*4882a593Smuzhiyun phl_mr_sync_chandef(struct phl_info_t *phl_info, struct hw_band_ctl_t *band_ctrl,
51*4882a593Smuzhiyun 			struct rtw_chan_ctx *chanctx, struct rtw_chan_def *chandef);
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun enum rtw_phl_status
54*4882a593Smuzhiyun phl_mr_chandef_chg(struct phl_info_t *phl,
55*4882a593Smuzhiyun 		struct rtw_wifi_role_t *wrole, struct rtw_chan_def *new_chan,
56*4882a593Smuzhiyun 		struct rtw_chan_def *chctx_result);
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun enum rtw_phl_status
59*4882a593Smuzhiyun phl_mr_chandef_upt(struct phl_info_t *phl_info,
60*4882a593Smuzhiyun 		struct hw_band_ctl_t *band_ctrl, struct rtw_chan_ctx *chanctx);
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun enum rtw_phl_status
63*4882a593Smuzhiyun phl_mr_get_chandef(struct phl_info_t *phl_info, struct rtw_wifi_role_t *wifi_role,
64*4882a593Smuzhiyun 			bool sync, struct rtw_chan_def *chandef);
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun enum rtw_phl_status
67*4882a593Smuzhiyun phl_mr_ctrl_init(struct phl_info_t *phl_info);
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun enum rtw_phl_status
70*4882a593Smuzhiyun phl_mr_ctrl_deinit(struct phl_info_t *phl_info);
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun enum rtw_phl_status
73*4882a593Smuzhiyun phl_mr_err_recovery(struct phl_info_t *phl, enum phl_msg_evt_id eid);
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun #ifdef CONFIG_MCC_SUPPORT
76*4882a593Smuzhiyun enum rtw_phl_status
77*4882a593Smuzhiyun phl_mr_mcc_query_role_time_slot_lim (struct phl_info_t *phl_info, struct rtw_wifi_role_t *wrole,
78*4882a593Smuzhiyun 								struct phl_mcc_dur_lim_req_info *limit_req_info);
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun enum rtw_phl_status
82*4882a593Smuzhiyun phl_mr_coex_handle(struct phl_info_t *phl, struct rtw_wifi_role_t *cur_wrole,
83*4882a593Smuzhiyun 	u16 slot, enum phl_band_idx band_idx, enum mr_coex_trigger trgger);
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun enum rtw_phl_status
86*4882a593Smuzhiyun phl_mr_coex_disable(struct phl_info_t *phl,
87*4882a593Smuzhiyun 		struct rtw_wifi_role_t *cur_wrole, enum phl_band_idx band_idx,
88*4882a593Smuzhiyun 		enum mr_coex_trigger trgger);
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun #endif
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun #ifdef CONFIG_PHL_P2PPS
93*4882a593Smuzhiyun bool phl_mr_noa_dur_lim_change (struct phl_info_t *phl_info, struct rtw_wifi_role_t *wrole,
94*4882a593Smuzhiyun 								struct rtw_phl_noa_desc *noa_desc);
95*4882a593Smuzhiyun #endif
96*4882a593Smuzhiyun enum rtw_phl_status
97*4882a593Smuzhiyun phl_mr_info_upt(struct phl_info_t *phl_info, struct rtw_wifi_role_t *wrole);
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun enum rtw_phl_status
100*4882a593Smuzhiyun phl_mr_state_upt(struct phl_info_t *phl_info, struct rtw_wifi_role_t *wrole);
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun enum rtw_phl_status
103*4882a593Smuzhiyun rtw_phl_mr_rx_filter(void *phl, struct rtw_wifi_role_t *wrole);
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun enum rtw_phl_status
106*4882a593Smuzhiyun phl_mr_tsf_sync(void *phl, struct rtw_wifi_role_t *wrole,
107*4882a593Smuzhiyun 					enum role_state state);
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun void phl_mr_stop_all_beacon(struct phl_info_t *phl_info,
110*4882a593Smuzhiyun 			    struct rtw_wifi_role_t *wrole,
111*4882a593Smuzhiyun 			    bool stop);
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun enum rtw_phl_status
114*4882a593Smuzhiyun phl_mr_offch_hdl(struct phl_info_t *phl_info,
115*4882a593Smuzhiyun 		  struct rtw_wifi_role_t *wrole,
116*4882a593Smuzhiyun 		  bool off_ch,
117*4882a593Smuzhiyun 		  void *obj_priv,
118*4882a593Smuzhiyun 		  u8 (*issue_null_data)(void *priv, u8 ridx, bool ps));
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun enum rtw_phl_status phl_mr_watchdog(struct phl_info_t *phl_info);
121*4882a593Smuzhiyun 
122*4882a593Smuzhiyun u8 rtw_phl_mr_get_opch_list(void *phl, struct rtw_wifi_role_t *wifi_role,
123*4882a593Smuzhiyun 			    struct rtw_chan_def *chdef_list, u8 list_size);
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun void
126*4882a593Smuzhiyun phl_mr_check_ecsa(struct phl_info_t *phl_info,
127*4882a593Smuzhiyun 		  struct rtw_wifi_role_t *wrole);
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun void
130*4882a593Smuzhiyun phl_mr_check_ecsa_cancel(struct phl_info_t *phl_info,
131*4882a593Smuzhiyun 			 struct rtw_wifi_role_t *wrole);
132*4882a593Smuzhiyun 
133*4882a593Smuzhiyun #ifdef CONFIG_MCC_SUPPORT
134*4882a593Smuzhiyun u8 phl_mr_query_mcc_inprogress (struct phl_info_t *phl_info, struct rtw_wifi_role_t *wrole,
135*4882a593Smuzhiyun 				enum rtw_phl_mcc_chk_inprocess_type check_type);
136*4882a593Smuzhiyun #endif
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun #ifdef DBG_PHL_MR
139*4882a593Smuzhiyun enum rtw_phl_status phl_mr_info_dbg(struct phl_info_t *phl_info);
140*4882a593Smuzhiyun 
141*4882a593Smuzhiyun void phl_mr_dump_cur_chandef(const char *caller, const int line, bool show_caller,
142*4882a593Smuzhiyun 		struct phl_info_t *phl_info, struct rtw_wifi_role_t *wifi_role);
143*4882a593Smuzhiyun #define PHL_DUMP_CUR_CHANDEF(_phl_info, _wrole) \
144*4882a593Smuzhiyun 	phl_mr_dump_cur_chandef(__FUNCTION__, __LINE__, false, _phl_info, _wrole);
145*4882a593Smuzhiyun #define PHL_DUMP_CUR_CHANDEF_EX(_phl_info, _wrole) \
146*4882a593Smuzhiyun 	phl_mr_dump_cur_chandef(__FUNCTION__, __LINE__, true, _phl_info, _wrole);
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun void phl_mr_dump_chctx_info(const char *caller, const int line, bool show_caller,
149*4882a593Smuzhiyun 	struct phl_info_t *phl_info, struct phl_queue *chan_ctx_queue, struct rtw_chan_ctx *chanctx);
150*4882a593Smuzhiyun #define PHL_DUMP_CHAN_CTX(_phl_info, _chctx_q, _chctx) \
151*4882a593Smuzhiyun 		phl_mr_dump_chctx_info(__FUNCTION__, __LINE__, false, _phl_info, _chctx_q, _chctx);
152*4882a593Smuzhiyun #define PHL_DUMP_CHAN_CTX_EX(_phl_info, _chctx_q, _chctx) \
153*4882a593Smuzhiyun 		phl_mr_dump_chctx_info(__FUNCTION__, __LINE__, true, _phl_info, _chctx_q, _chctx);
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun void phl_mr_dump_band_info(const char *caller, const int line, bool show_caller,
156*4882a593Smuzhiyun 	struct phl_info_t *phl_info, struct hw_band_ctl_t *band_ctrl);
157*4882a593Smuzhiyun #define PHL_DUMP_BAND_CTL(_phl_info, band_ctl) \
158*4882a593Smuzhiyun 		phl_mr_dump_band_info(__FUNCTION__, __LINE__, false, _phl_info, band_ctl)
159*4882a593Smuzhiyun #define PHL_DUMP_BAND_CTL_EX(_phl_info, band_ctl) \
160*4882a593Smuzhiyun 		phl_mr_dump_band_info(__FUNCTION__, __LINE__, true, _phl_info, band_ctl)
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun void phl_mr_dump_role_info(const char *caller, const int line, bool show_caller,
163*4882a593Smuzhiyun 	struct phl_info_t *phl_info, struct rtw_wifi_role_t *wrole);
164*4882a593Smuzhiyun #define PHL_DUMP_ROLE(_phl_info, _wrole) \
165*4882a593Smuzhiyun 		phl_mr_dump_role_info(__FUNCTION__, __LINE__, false, _phl_info, _wrole)
166*4882a593Smuzhiyun #define PHL_DUMP_ROLE_EX(_phl_info, _wrole) \
167*4882a593Smuzhiyun 		phl_mr_dump_role_info(__FUNCTION__, __LINE__, true, _phl_info, _wrole)
168*4882a593Smuzhiyun 
169*4882a593Smuzhiyun void phl_mr_dump_info(const char *caller, const int line, bool show_caller,
170*4882a593Smuzhiyun 	struct phl_info_t *phl_info);
171*4882a593Smuzhiyun #define PHL_DUMP_MR(_phl_info) phl_mr_dump_info(__FUNCTION__, __LINE__, false, _phl_info)
172*4882a593Smuzhiyun #define PHL_DUMP_MR_EX(_phl_info) phl_mr_dump_info(__FUNCTION__, __LINE__, true, _phl_info)
173*4882a593Smuzhiyun 
174*4882a593Smuzhiyun #else
175*4882a593Smuzhiyun #define PHL_DUMP_CUR_CHANDEF(_phl_info, _wrole)
176*4882a593Smuzhiyun #define PHL_DUMP_CUR_CHANDEF_EX(_phl_info, _wrole)
177*4882a593Smuzhiyun #define PHL_DUMP_CHAN_CTX(_phl_info, _chctx_q, _chctx)
178*4882a593Smuzhiyun #define PHL_DUMP_CHAN_CTX_EX(_phl_info, _chctx_q, _chctx)
179*4882a593Smuzhiyun #define PHL_DUMP_BAND_CTL(_phl_info, band_ctl)
180*4882a593Smuzhiyun #define PHL_DUMP_BAND_CTL_EX(_phl_info, band_ctl)
181*4882a593Smuzhiyun #define PHL_DUMP_ROLE(_phl_info, _wrole)
182*4882a593Smuzhiyun #define PHL_DUMP_ROLE_EX(_phl_info, _wrole)
183*4882a593Smuzhiyun #define PHL_DUMP_MR(_phl_info)
184*4882a593Smuzhiyun #define PHL_DUMP_MR_EX(_phl_info)
185*4882a593Smuzhiyun #endif
186*4882a593Smuzhiyun 
187*4882a593Smuzhiyun #endif  /*_PHL_MR_H_*/
188*4882a593Smuzhiyun 
189