xref: /wlan-driver/qcacld-3.0/components/mlme/dispatcher/src/wlan_mlme_twt_ucfg_api.c (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for any
6*5113495bSYour Name  * purpose with or without fee is hereby granted, provided that the above
7*5113495bSYour Name  * copyright notice and this permission notice appear in all copies.
8*5113495bSYour Name  *
9*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10*5113495bSYour Name  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11*5113495bSYour Name  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12*5113495bSYour Name  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13*5113495bSYour Name  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14*5113495bSYour Name  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15*5113495bSYour Name  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*5113495bSYour Name  */
17*5113495bSYour Name 
18*5113495bSYour Name /**
19*5113495bSYour Name  * DOC: define UCFG APIs exposed for TWT by the mlme component
20*5113495bSYour Name  */
21*5113495bSYour Name 
22*5113495bSYour Name #include "wlan_mlme_main.h"
23*5113495bSYour Name #include "wlan_mlme_api.h"
24*5113495bSYour Name #include "wlan_mlme_ucfg_api.h"
25*5113495bSYour Name #include "cfg_mlme_twt.h"
26*5113495bSYour Name #include "wlan_mlme_twt_ucfg_api.h"
27*5113495bSYour Name 
28*5113495bSYour Name #if defined(WLAN_SUPPORT_TWT) && defined(WLAN_FEATURE_11AX) && \
29*5113495bSYour Name 	!defined(WLAN_TWT_CONV_SUPPORTED)
30*5113495bSYour Name QDF_STATUS
ucfg_mlme_get_twt_requestor(struct wlan_objmgr_psoc * psoc,bool * val)31*5113495bSYour Name ucfg_mlme_get_twt_requestor(struct wlan_objmgr_psoc *psoc,
32*5113495bSYour Name 			    bool *val)
33*5113495bSYour Name {
34*5113495bSYour Name 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
35*5113495bSYour Name 
36*5113495bSYour Name 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
37*5113495bSYour Name 	if (!mlme_obj) {
38*5113495bSYour Name 		*val = cfg_default(CFG_TWT_REQUESTOR);
39*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
40*5113495bSYour Name 	}
41*5113495bSYour Name 
42*5113495bSYour Name 	*val = mlme_obj->cfg.he_caps.dot11_he_cap.twt_request;
43*5113495bSYour Name 
44*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
45*5113495bSYour Name }
46*5113495bSYour Name 
47*5113495bSYour Name QDF_STATUS
ucfg_mlme_set_twt_requestor(struct wlan_objmgr_psoc * psoc,bool val)48*5113495bSYour Name ucfg_mlme_set_twt_requestor(struct wlan_objmgr_psoc *psoc,
49*5113495bSYour Name 			    bool val)
50*5113495bSYour Name {
51*5113495bSYour Name 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
52*5113495bSYour Name 
53*5113495bSYour Name 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
54*5113495bSYour Name 	if (!mlme_obj)
55*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
56*5113495bSYour Name 
57*5113495bSYour Name 	mlme_obj->cfg.he_caps.dot11_he_cap.twt_request = val;
58*5113495bSYour Name 
59*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
60*5113495bSYour Name }
61*5113495bSYour Name 
62*5113495bSYour Name QDF_STATUS
ucfg_mlme_get_twt_responder(struct wlan_objmgr_psoc * psoc,bool * val)63*5113495bSYour Name ucfg_mlme_get_twt_responder(struct wlan_objmgr_psoc *psoc,
64*5113495bSYour Name 			    bool *val)
65*5113495bSYour Name {
66*5113495bSYour Name 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
67*5113495bSYour Name 
68*5113495bSYour Name 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
69*5113495bSYour Name 	if (!mlme_obj) {
70*5113495bSYour Name 		*val = cfg_default(CFG_TWT_RESPONDER);
71*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
72*5113495bSYour Name 	}
73*5113495bSYour Name 
74*5113495bSYour Name 	*val = mlme_obj->cfg.he_caps.dot11_he_cap.twt_responder;
75*5113495bSYour Name 
76*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
77*5113495bSYour Name }
78*5113495bSYour Name 
79*5113495bSYour Name QDF_STATUS
ucfg_mlme_set_twt_responder(struct wlan_objmgr_psoc * psoc,bool val)80*5113495bSYour Name ucfg_mlme_set_twt_responder(struct wlan_objmgr_psoc *psoc,
81*5113495bSYour Name 			    bool val)
82*5113495bSYour Name {
83*5113495bSYour Name 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
84*5113495bSYour Name 
85*5113495bSYour Name 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
86*5113495bSYour Name 	if (!mlme_obj)
87*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
88*5113495bSYour Name 
89*5113495bSYour Name 	mlme_obj->cfg.he_caps.dot11_he_cap.twt_responder = val;
90*5113495bSYour Name 
91*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
92*5113495bSYour Name }
93*5113495bSYour Name 
94*5113495bSYour Name QDF_STATUS
ucfg_mlme_set_twt_requestor_flag(struct wlan_objmgr_psoc * psoc,bool val)95*5113495bSYour Name ucfg_mlme_set_twt_requestor_flag(struct wlan_objmgr_psoc *psoc, bool val)
96*5113495bSYour Name {
97*5113495bSYour Name 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
98*5113495bSYour Name 
99*5113495bSYour Name 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
100*5113495bSYour Name 	if (!mlme_obj)
101*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
102*5113495bSYour Name 
103*5113495bSYour Name 	mlme_obj->cfg.twt_cfg.req_flag = val;
104*5113495bSYour Name 
105*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
106*5113495bSYour Name }
107*5113495bSYour Name 
108*5113495bSYour Name QDF_STATUS
ucfg_mlme_set_twt_responder_flag(struct wlan_objmgr_psoc * psoc,bool val)109*5113495bSYour Name ucfg_mlme_set_twt_responder_flag(struct wlan_objmgr_psoc *psoc, bool val)
110*5113495bSYour Name {
111*5113495bSYour Name 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
112*5113495bSYour Name 
113*5113495bSYour Name 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
114*5113495bSYour Name 	if (!mlme_obj)
115*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
116*5113495bSYour Name 
117*5113495bSYour Name 	mlme_obj->cfg.twt_cfg.res_flag = val;
118*5113495bSYour Name 
119*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
120*5113495bSYour Name }
121*5113495bSYour Name 
122*5113495bSYour Name QDF_STATUS
ucfg_mlme_reset_twt_active_cmd(struct wlan_objmgr_psoc * psoc,struct qdf_mac_addr * peer_macaddr,uint8_t dialog_id)123*5113495bSYour Name ucfg_mlme_reset_twt_active_cmd(struct wlan_objmgr_psoc *psoc,
124*5113495bSYour Name 			       struct qdf_mac_addr *peer_macaddr,
125*5113495bSYour Name 			       uint8_t dialog_id)
126*5113495bSYour Name {
127*5113495bSYour Name 	mlme_set_twt_command_in_progress(psoc, peer_macaddr, dialog_id,
128*5113495bSYour Name 					 WLAN_TWT_NONE);
129*5113495bSYour Name 
130*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
131*5113495bSYour Name }
132*5113495bSYour Name 
133*5113495bSYour Name QDF_STATUS
ucfg_mlme_get_twt_congestion_timeout(struct wlan_objmgr_psoc * psoc,uint32_t * val)134*5113495bSYour Name ucfg_mlme_get_twt_congestion_timeout(struct wlan_objmgr_psoc *psoc,
135*5113495bSYour Name 				     uint32_t *val)
136*5113495bSYour Name {
137*5113495bSYour Name 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
138*5113495bSYour Name 
139*5113495bSYour Name 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
140*5113495bSYour Name 	if (!mlme_obj) {
141*5113495bSYour Name 		*val = cfg_default(CFG_TWT_CONGESTION_TIMEOUT);
142*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
143*5113495bSYour Name 	}
144*5113495bSYour Name 
145*5113495bSYour Name 	*val = mlme_obj->cfg.twt_cfg.twt_congestion_timeout;
146*5113495bSYour Name 
147*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
148*5113495bSYour Name }
149*5113495bSYour Name 
150*5113495bSYour Name QDF_STATUS
ucfg_mlme_set_twt_congestion_timeout(struct wlan_objmgr_psoc * psoc,uint32_t val)151*5113495bSYour Name ucfg_mlme_set_twt_congestion_timeout(struct wlan_objmgr_psoc *psoc,
152*5113495bSYour Name 				     uint32_t val)
153*5113495bSYour Name {
154*5113495bSYour Name 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
155*5113495bSYour Name 
156*5113495bSYour Name 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
157*5113495bSYour Name 	if (!mlme_obj)
158*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
159*5113495bSYour Name 
160*5113495bSYour Name 	mlme_obj->cfg.twt_cfg.twt_congestion_timeout = val;
161*5113495bSYour Name 
162*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
163*5113495bSYour Name }
164*5113495bSYour Name 
165*5113495bSYour Name QDF_STATUS
ucfg_mlme_set_enable_twt(struct wlan_objmgr_psoc * psoc,bool val)166*5113495bSYour Name ucfg_mlme_set_enable_twt(struct wlan_objmgr_psoc *psoc,
167*5113495bSYour Name 			 bool val)
168*5113495bSYour Name {
169*5113495bSYour Name 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
170*5113495bSYour Name 
171*5113495bSYour Name 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
172*5113495bSYour Name 	if (!mlme_obj)
173*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
174*5113495bSYour Name 
175*5113495bSYour Name 	mlme_obj->cfg.twt_cfg.is_twt_enabled = val;
176*5113495bSYour Name 
177*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
178*5113495bSYour Name }
179*5113495bSYour Name 
180*5113495bSYour Name QDF_STATUS
ucfg_mlme_get_twt_bcast_requestor(struct wlan_objmgr_psoc * psoc,bool * val)181*5113495bSYour Name ucfg_mlme_get_twt_bcast_requestor(struct wlan_objmgr_psoc *psoc,
182*5113495bSYour Name 				  bool *val)
183*5113495bSYour Name {
184*5113495bSYour Name 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
185*5113495bSYour Name 
186*5113495bSYour Name 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
187*5113495bSYour Name 	if (!mlme_obj) {
188*5113495bSYour Name 		uint32_t b_req_res;
189*5113495bSYour Name 
190*5113495bSYour Name 		b_req_res = cfg_default(CFG_BCAST_TWT_REQ_RESP);
191*5113495bSYour Name 		*val = CFG_TWT_GET_BCAST_REQ(b_req_res);
192*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
193*5113495bSYour Name 	}
194*5113495bSYour Name 
195*5113495bSYour Name 	*val = mlme_obj->cfg.twt_cfg.is_bcast_requestor_enabled;
196*5113495bSYour Name 
197*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
198*5113495bSYour Name }
199*5113495bSYour Name 
200*5113495bSYour Name QDF_STATUS
ucfg_mlme_get_twt_bcast_responder(struct wlan_objmgr_psoc * psoc,bool * val)201*5113495bSYour Name ucfg_mlme_get_twt_bcast_responder(struct wlan_objmgr_psoc *psoc,
202*5113495bSYour Name 				  bool *val)
203*5113495bSYour Name {
204*5113495bSYour Name 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
205*5113495bSYour Name 
206*5113495bSYour Name 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
207*5113495bSYour Name 	if (!mlme_obj) {
208*5113495bSYour Name 		uint32_t b_req_res;
209*5113495bSYour Name 
210*5113495bSYour Name 		b_req_res = cfg_default(CFG_BCAST_TWT_REQ_RESP);
211*5113495bSYour Name 		*val = CFG_TWT_GET_BCAST_RES(b_req_res);
212*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
213*5113495bSYour Name 	}
214*5113495bSYour Name 
215*5113495bSYour Name 	*val = mlme_obj->cfg.twt_cfg.is_bcast_responder_enabled;
216*5113495bSYour Name 
217*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
218*5113495bSYour Name }
219*5113495bSYour Name 
220*5113495bSYour Name QDF_STATUS
ucfg_mlme_set_twt_bcast_requestor(struct wlan_objmgr_psoc * psoc,bool val)221*5113495bSYour Name ucfg_mlme_set_twt_bcast_requestor(struct wlan_objmgr_psoc *psoc,
222*5113495bSYour Name 				  bool val)
223*5113495bSYour Name {
224*5113495bSYour Name 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
225*5113495bSYour Name 
226*5113495bSYour Name 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
227*5113495bSYour Name 	if (!mlme_obj)
228*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
229*5113495bSYour Name 
230*5113495bSYour Name 	mlme_obj->cfg.twt_cfg.is_bcast_requestor_enabled = val;
231*5113495bSYour Name 
232*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
233*5113495bSYour Name }
234*5113495bSYour Name 
235*5113495bSYour Name QDF_STATUS
ucfg_mlme_set_twt_bcast_responder(struct wlan_objmgr_psoc * psoc,bool val)236*5113495bSYour Name ucfg_mlme_set_twt_bcast_responder(struct wlan_objmgr_psoc *psoc,
237*5113495bSYour Name 				  bool val)
238*5113495bSYour Name {
239*5113495bSYour Name 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
240*5113495bSYour Name 
241*5113495bSYour Name 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
242*5113495bSYour Name 	if (!mlme_obj)
243*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
244*5113495bSYour Name 
245*5113495bSYour Name 	mlme_obj->cfg.twt_cfg.is_bcast_responder_enabled = val;
246*5113495bSYour Name 
247*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
248*5113495bSYour Name }
249*5113495bSYour Name 
250*5113495bSYour Name QDF_STATUS
ucfg_mlme_set_twt_nudge_tgt_cap(struct wlan_objmgr_psoc * psoc,bool val)251*5113495bSYour Name ucfg_mlme_set_twt_nudge_tgt_cap(struct wlan_objmgr_psoc *psoc, bool val)
252*5113495bSYour Name {
253*5113495bSYour Name 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
254*5113495bSYour Name 
255*5113495bSYour Name 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
256*5113495bSYour Name 	if (!mlme_obj)
257*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
258*5113495bSYour Name 
259*5113495bSYour Name 	mlme_obj->cfg.twt_cfg.is_twt_nudge_tgt_cap_enabled = val;
260*5113495bSYour Name 
261*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
262*5113495bSYour Name }
263*5113495bSYour Name 
ucfg_mlme_get_twt_peer_bcast_capabilities(struct wlan_objmgr_psoc * psoc,struct qdf_mac_addr * peer_mac)264*5113495bSYour Name bool ucfg_mlme_get_twt_peer_bcast_capabilities(struct wlan_objmgr_psoc *psoc,
265*5113495bSYour Name 					       struct qdf_mac_addr *peer_mac)
266*5113495bSYour Name {
267*5113495bSYour Name 	uint8_t peer_cap;
268*5113495bSYour Name 
269*5113495bSYour Name 	peer_cap = mlme_get_twt_peer_capabilities(psoc, peer_mac);
270*5113495bSYour Name 
271*5113495bSYour Name 	if (peer_cap & WLAN_TWT_CAPA_BROADCAST)
272*5113495bSYour Name 		return true;
273*5113495bSYour Name 
274*5113495bSYour Name 	return false;
275*5113495bSYour Name }
276*5113495bSYour Name 
ucfg_mlme_get_twt_peer_responder_capabilities(struct wlan_objmgr_psoc * psoc,struct qdf_mac_addr * peer_mac)277*5113495bSYour Name bool ucfg_mlme_get_twt_peer_responder_capabilities(
278*5113495bSYour Name 					struct wlan_objmgr_psoc *psoc,
279*5113495bSYour Name 					struct qdf_mac_addr *peer_mac)
280*5113495bSYour Name {
281*5113495bSYour Name 	uint8_t peer_cap;
282*5113495bSYour Name 
283*5113495bSYour Name 	peer_cap = mlme_get_twt_peer_capabilities(psoc, peer_mac);
284*5113495bSYour Name 
285*5113495bSYour Name 	if (peer_cap & WLAN_TWT_CAPA_RESPONDER)
286*5113495bSYour Name 		return true;
287*5113495bSYour Name 
288*5113495bSYour Name 	return false;
289*5113495bSYour Name }
290*5113495bSYour Name 
291*5113495bSYour Name QDF_STATUS
ucfg_mlme_get_twt_nudge_tgt_cap(struct wlan_objmgr_psoc * psoc,bool * val)292*5113495bSYour Name ucfg_mlme_get_twt_nudge_tgt_cap(struct wlan_objmgr_psoc *psoc, bool *val)
293*5113495bSYour Name {
294*5113495bSYour Name 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
295*5113495bSYour Name 
296*5113495bSYour Name 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
297*5113495bSYour Name 	if (!mlme_obj)
298*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
299*5113495bSYour Name 
300*5113495bSYour Name 	*val = mlme_obj->cfg.twt_cfg.is_twt_nudge_tgt_cap_enabled;
301*5113495bSYour Name 
302*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
303*5113495bSYour Name }
304*5113495bSYour Name 
305*5113495bSYour Name QDF_STATUS
ucfg_mlme_set_twt_all_twt_tgt_cap(struct wlan_objmgr_psoc * psoc,bool val)306*5113495bSYour Name ucfg_mlme_set_twt_all_twt_tgt_cap(struct wlan_objmgr_psoc *psoc, bool val)
307*5113495bSYour Name {
308*5113495bSYour Name 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
309*5113495bSYour Name 
310*5113495bSYour Name 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
311*5113495bSYour Name 	if (!mlme_obj)
312*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
313*5113495bSYour Name 
314*5113495bSYour Name 	mlme_obj->cfg.twt_cfg.is_all_twt_tgt_cap_enabled = val;
315*5113495bSYour Name 
316*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
317*5113495bSYour Name }
318*5113495bSYour Name 
319*5113495bSYour Name QDF_STATUS
ucfg_mlme_get_twt_all_twt_tgt_cap(struct wlan_objmgr_psoc * psoc,bool * val)320*5113495bSYour Name ucfg_mlme_get_twt_all_twt_tgt_cap(struct wlan_objmgr_psoc *psoc, bool *val)
321*5113495bSYour Name {
322*5113495bSYour Name 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
323*5113495bSYour Name 
324*5113495bSYour Name 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
325*5113495bSYour Name 	if (!mlme_obj)
326*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
327*5113495bSYour Name 
328*5113495bSYour Name 	*val = mlme_obj->cfg.twt_cfg.is_all_twt_tgt_cap_enabled;
329*5113495bSYour Name 
330*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
331*5113495bSYour Name }
332*5113495bSYour Name 
333*5113495bSYour Name QDF_STATUS
ucfg_mlme_set_twt_statistics_tgt_cap(struct wlan_objmgr_psoc * psoc,bool val)334*5113495bSYour Name ucfg_mlme_set_twt_statistics_tgt_cap(struct wlan_objmgr_psoc *psoc, bool val)
335*5113495bSYour Name {
336*5113495bSYour Name 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
337*5113495bSYour Name 
338*5113495bSYour Name 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
339*5113495bSYour Name 	if (!mlme_obj)
340*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
341*5113495bSYour Name 
342*5113495bSYour Name 	mlme_obj->cfg.twt_cfg.is_twt_statistics_tgt_cap_enabled = val;
343*5113495bSYour Name 
344*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
345*5113495bSYour Name }
346*5113495bSYour Name 
347*5113495bSYour Name QDF_STATUS
ucfg_mlme_get_twt_statistics_tgt_cap(struct wlan_objmgr_psoc * psoc,bool * val)348*5113495bSYour Name ucfg_mlme_get_twt_statistics_tgt_cap(struct wlan_objmgr_psoc *psoc, bool *val)
349*5113495bSYour Name {
350*5113495bSYour Name 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
351*5113495bSYour Name 
352*5113495bSYour Name 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
353*5113495bSYour Name 	if (!mlme_obj)
354*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
355*5113495bSYour Name 
356*5113495bSYour Name 	*val = mlme_obj->cfg.twt_cfg.is_twt_statistics_tgt_cap_enabled;
357*5113495bSYour Name 
358*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
359*5113495bSYour Name }
360*5113495bSYour Name 
361*5113495bSYour Name QDF_STATUS
ucfg_mlme_set_twt_res_service_cap(struct wlan_objmgr_psoc * psoc,bool val)362*5113495bSYour Name ucfg_mlme_set_twt_res_service_cap(struct wlan_objmgr_psoc *psoc, bool val)
363*5113495bSYour Name {
364*5113495bSYour Name 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
365*5113495bSYour Name 
366*5113495bSYour Name 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
367*5113495bSYour Name 	if (!mlme_obj)
368*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
369*5113495bSYour Name 
370*5113495bSYour Name 	mlme_obj->cfg.twt_cfg.twt_res_svc_cap = val;
371*5113495bSYour Name 
372*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
373*5113495bSYour Name }
374*5113495bSYour Name 
375*5113495bSYour Name QDF_STATUS
ucfg_mlme_get_twt_res_service_cap(struct wlan_objmgr_psoc * psoc,bool * val)376*5113495bSYour Name ucfg_mlme_get_twt_res_service_cap(struct wlan_objmgr_psoc *psoc, bool *val)
377*5113495bSYour Name {
378*5113495bSYour Name 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
379*5113495bSYour Name 
380*5113495bSYour Name 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
381*5113495bSYour Name 	if (!mlme_obj)
382*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
383*5113495bSYour Name 
384*5113495bSYour Name 	*val = mlme_obj->cfg.twt_cfg.twt_res_svc_cap;
385*5113495bSYour Name 
386*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
387*5113495bSYour Name }
388*5113495bSYour Name 
389*5113495bSYour Name #endif
390