xref: /wlan-driver/qcacld-3.0/components/fw_offload/dispatcher/src/wlan_fwol_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) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name  * above copyright notice and this permission notice appear in all
8*5113495bSYour Name  * copies.
9*5113495bSYour Name  *
10*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name  */
19*5113495bSYour Name /**
20*5113495bSYour Name  * DOC: define internal APIs related to the fwol component
21*5113495bSYour Name  */
22*5113495bSYour Name 
23*5113495bSYour Name #include "wlan_fw_offload_main.h"
24*5113495bSYour Name #include "wlan_fwol_public_structs.h"
25*5113495bSYour Name #include "wlan_fwol_ucfg_api.h"
26*5113495bSYour Name #include "wlan_fwol_tgt_api.h"
27*5113495bSYour Name #include "target_if_fwol.h"
28*5113495bSYour Name #include "wlan_objmgr_vdev_obj.h"
29*5113495bSYour Name 
ucfg_fwol_psoc_open(struct wlan_objmgr_psoc * psoc)30*5113495bSYour Name QDF_STATUS ucfg_fwol_psoc_open(struct wlan_objmgr_psoc *psoc)
31*5113495bSYour Name {
32*5113495bSYour Name 	QDF_STATUS status;
33*5113495bSYour Name 
34*5113495bSYour Name 	status = fwol_cfg_on_psoc_enable(psoc);
35*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status))
36*5113495bSYour Name 		fwol_err("Failed to initialize FWOL CFG");
37*5113495bSYour Name 
38*5113495bSYour Name 	return status;
39*5113495bSYour Name }
40*5113495bSYour Name 
ucfg_fwol_psoc_close(struct wlan_objmgr_psoc * psoc)41*5113495bSYour Name void ucfg_fwol_psoc_close(struct wlan_objmgr_psoc *psoc)
42*5113495bSYour Name {
43*5113495bSYour Name 	/* Clear the FWOL CFG Structure */
44*5113495bSYour Name }
45*5113495bSYour Name 
ucfg_fwol_psoc_enable(struct wlan_objmgr_psoc * psoc)46*5113495bSYour Name QDF_STATUS ucfg_fwol_psoc_enable(struct wlan_objmgr_psoc *psoc)
47*5113495bSYour Name {
48*5113495bSYour Name 	tgt_fwol_register_ev_handler(psoc);
49*5113495bSYour Name 
50*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
51*5113495bSYour Name }
52*5113495bSYour Name 
ucfg_fwol_psoc_disable(struct wlan_objmgr_psoc * psoc)53*5113495bSYour Name void ucfg_fwol_psoc_disable(struct wlan_objmgr_psoc *psoc)
54*5113495bSYour Name {
55*5113495bSYour Name 	tgt_fwol_unregister_ev_handler(psoc);
56*5113495bSYour Name }
57*5113495bSYour Name 
58*5113495bSYour Name /**
59*5113495bSYour Name  * fwol_psoc_object_created_notification(): fwol psoc create handler
60*5113495bSYour Name  * @psoc: psoc which is going to created by objmgr
61*5113495bSYour Name  * @arg: argument for vdev create handler
62*5113495bSYour Name  *
63*5113495bSYour Name  * Register this api with objmgr to detect psoc is created
64*5113495bSYour Name  *
65*5113495bSYour Name  * Return QDF_STATUS status in case of success else return error
66*5113495bSYour Name  */
67*5113495bSYour Name static QDF_STATUS
fwol_psoc_object_created_notification(struct wlan_objmgr_psoc * psoc,void * arg)68*5113495bSYour Name fwol_psoc_object_created_notification(struct wlan_objmgr_psoc *psoc, void *arg)
69*5113495bSYour Name {
70*5113495bSYour Name 	QDF_STATUS status;
71*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
72*5113495bSYour Name 
73*5113495bSYour Name 	fwol_obj = qdf_mem_malloc(sizeof(*fwol_obj));
74*5113495bSYour Name 	if (!fwol_obj)
75*5113495bSYour Name 		return QDF_STATUS_E_NOMEM;
76*5113495bSYour Name 
77*5113495bSYour Name 	status = wlan_objmgr_psoc_component_obj_attach(psoc,
78*5113495bSYour Name 						       WLAN_UMAC_COMP_FWOL,
79*5113495bSYour Name 						       fwol_obj,
80*5113495bSYour Name 						       QDF_STATUS_SUCCESS);
81*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status)) {
82*5113495bSYour Name 		fwol_err("Failed to attach psoc_ctx with psoc");
83*5113495bSYour Name 		qdf_mem_free(fwol_obj);
84*5113495bSYour Name 		return status;
85*5113495bSYour Name 	}
86*5113495bSYour Name 
87*5113495bSYour Name 	tgt_fwol_register_rx_ops(&fwol_obj->rx_ops);
88*5113495bSYour Name 	target_if_fwol_register_tx_ops(&fwol_obj->tx_ops);
89*5113495bSYour Name 
90*5113495bSYour Name 	return status;
91*5113495bSYour Name }
92*5113495bSYour Name 
93*5113495bSYour Name /**
94*5113495bSYour Name  * fwol_psoc_object_destroyed_notification(): fwol psoc delete handler
95*5113495bSYour Name  * @psoc: psoc which is going to delete by objmgr
96*5113495bSYour Name  * @arg: argument for vdev delete handler
97*5113495bSYour Name  *
98*5113495bSYour Name  * Register this api with objmgr to detect psoc is deleted
99*5113495bSYour Name  *
100*5113495bSYour Name  * Return QDF_STATUS status in case of success else return error
101*5113495bSYour Name  */
fwol_psoc_object_destroyed_notification(struct wlan_objmgr_psoc * psoc,void * arg)102*5113495bSYour Name static QDF_STATUS fwol_psoc_object_destroyed_notification(
103*5113495bSYour Name 		struct wlan_objmgr_psoc *psoc, void *arg)
104*5113495bSYour Name {
105*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
106*5113495bSYour Name 	QDF_STATUS status;
107*5113495bSYour Name 
108*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
109*5113495bSYour Name 	if (!fwol_obj)
110*5113495bSYour Name 		return QDF_STATUS_E_NOMEM;
111*5113495bSYour Name 
112*5113495bSYour Name 	status = wlan_objmgr_psoc_component_obj_detach(psoc,
113*5113495bSYour Name 						       WLAN_UMAC_COMP_FWOL,
114*5113495bSYour Name 						       fwol_obj);
115*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status)) {
116*5113495bSYour Name 		fwol_err("Failed to detach psoc_ctx from psoc");
117*5113495bSYour Name 		return status;
118*5113495bSYour Name 	}
119*5113495bSYour Name 
120*5113495bSYour Name 	qdf_mem_free(fwol_obj);
121*5113495bSYour Name 
122*5113495bSYour Name 	return status;
123*5113495bSYour Name }
124*5113495bSYour Name 
ucfg_fwol_init(void)125*5113495bSYour Name QDF_STATUS ucfg_fwol_init(void)
126*5113495bSYour Name {
127*5113495bSYour Name 	QDF_STATUS status;
128*5113495bSYour Name 
129*5113495bSYour Name 	status = wlan_objmgr_register_psoc_create_handler(
130*5113495bSYour Name 			WLAN_UMAC_COMP_FWOL,
131*5113495bSYour Name 			fwol_psoc_object_created_notification,
132*5113495bSYour Name 			NULL);
133*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status)) {
134*5113495bSYour Name 		fwol_err("unable to register psoc create handle");
135*5113495bSYour Name 		return status;
136*5113495bSYour Name 	}
137*5113495bSYour Name 
138*5113495bSYour Name 	status = wlan_objmgr_register_psoc_destroy_handler(
139*5113495bSYour Name 			WLAN_UMAC_COMP_FWOL,
140*5113495bSYour Name 			fwol_psoc_object_destroyed_notification,
141*5113495bSYour Name 			NULL);
142*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status)) {
143*5113495bSYour Name 		fwol_err("unable to register psoc create handle");
144*5113495bSYour Name 		wlan_objmgr_unregister_psoc_create_handler(
145*5113495bSYour Name 			WLAN_UMAC_COMP_FWOL,
146*5113495bSYour Name 			fwol_psoc_object_created_notification,
147*5113495bSYour Name 			NULL);
148*5113495bSYour Name 	}
149*5113495bSYour Name 
150*5113495bSYour Name 	return status;
151*5113495bSYour Name }
152*5113495bSYour Name 
ucfg_fwol_deinit(void)153*5113495bSYour Name void ucfg_fwol_deinit(void)
154*5113495bSYour Name {
155*5113495bSYour Name 	QDF_STATUS status;
156*5113495bSYour Name 
157*5113495bSYour Name 	status = wlan_objmgr_unregister_psoc_destroy_handler(
158*5113495bSYour Name 			WLAN_UMAC_COMP_FWOL,
159*5113495bSYour Name 			fwol_psoc_object_destroyed_notification,
160*5113495bSYour Name 			NULL);
161*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status))
162*5113495bSYour Name 		fwol_err("unable to unregister psoc destroy handle");
163*5113495bSYour Name 
164*5113495bSYour Name 	status = wlan_objmgr_unregister_psoc_create_handler(
165*5113495bSYour Name 			WLAN_UMAC_COMP_FWOL,
166*5113495bSYour Name 			fwol_psoc_object_created_notification,
167*5113495bSYour Name 			NULL);
168*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status))
169*5113495bSYour Name 		fwol_err("unable to unregister psoc create handle");
170*5113495bSYour Name }
171*5113495bSYour Name 
172*5113495bSYour Name #ifdef FW_THERMAL_THROTTLE_SUPPORT
ucfg_fwol_thermal_register_callbacks(struct wlan_objmgr_psoc * psoc,struct fwol_thermal_callbacks * cb)173*5113495bSYour Name QDF_STATUS ucfg_fwol_thermal_register_callbacks(
174*5113495bSYour Name 				struct wlan_objmgr_psoc *psoc,
175*5113495bSYour Name 				struct fwol_thermal_callbacks *cb)
176*5113495bSYour Name {
177*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
178*5113495bSYour Name 
179*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
180*5113495bSYour Name 	if (!fwol_obj) {
181*5113495bSYour Name 		fwol_err("Failed to get fwol obj");
182*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
183*5113495bSYour Name 	}
184*5113495bSYour Name 	fwol_obj->thermal_cbs = *cb;
185*5113495bSYour Name 
186*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
187*5113495bSYour Name }
188*5113495bSYour Name 
ucfg_fwol_thermal_unregister_callbacks(struct wlan_objmgr_psoc * psoc)189*5113495bSYour Name QDF_STATUS ucfg_fwol_thermal_unregister_callbacks(
190*5113495bSYour Name 				struct wlan_objmgr_psoc *psoc)
191*5113495bSYour Name {
192*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
193*5113495bSYour Name 
194*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
195*5113495bSYour Name 	if (!fwol_obj) {
196*5113495bSYour Name 		fwol_err("Failed to get fwol obj");
197*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
198*5113495bSYour Name 	}
199*5113495bSYour Name 	qdf_mem_zero(&fwol_obj->thermal_cbs, sizeof(fwol_obj->thermal_cbs));
200*5113495bSYour Name 
201*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
202*5113495bSYour Name }
203*5113495bSYour Name 
204*5113495bSYour Name QDF_STATUS
ucfg_fwol_thermal_get_target_level(struct wlan_objmgr_psoc * psoc,enum thermal_throttle_level * level)205*5113495bSYour Name ucfg_fwol_thermal_get_target_level(struct wlan_objmgr_psoc *psoc,
206*5113495bSYour Name 				   enum thermal_throttle_level *level)
207*5113495bSYour Name {
208*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
209*5113495bSYour Name 
210*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
211*5113495bSYour Name 	if (!fwol_obj) {
212*5113495bSYour Name 		fwol_err("Failed to get fwol obj");
213*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
214*5113495bSYour Name 	}
215*5113495bSYour Name 	*level = fwol_obj->thermal_throttle.level;
216*5113495bSYour Name 
217*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
218*5113495bSYour Name }
219*5113495bSYour Name #endif
220*5113495bSYour Name 
221*5113495bSYour Name QDF_STATUS
ucfg_fwol_get_coex_config_params(struct wlan_objmgr_psoc * psoc,struct wlan_fwol_coex_config * coex_config)222*5113495bSYour Name ucfg_fwol_get_coex_config_params(struct wlan_objmgr_psoc *psoc,
223*5113495bSYour Name 				 struct wlan_fwol_coex_config *coex_config)
224*5113495bSYour Name {
225*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
226*5113495bSYour Name 
227*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
228*5113495bSYour Name 	if (!fwol_obj) {
229*5113495bSYour Name 		fwol_err("Failed to get fwol obj");
230*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
231*5113495bSYour Name 	}
232*5113495bSYour Name 
233*5113495bSYour Name 	*coex_config = fwol_obj->cfg.coex_config;
234*5113495bSYour Name 
235*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
236*5113495bSYour Name }
237*5113495bSYour Name 
238*5113495bSYour Name QDF_STATUS
ucfg_fwol_get_thermal_temp(struct wlan_objmgr_psoc * psoc,struct wlan_fwol_thermal_temp * thermal_info)239*5113495bSYour Name ucfg_fwol_get_thermal_temp(struct wlan_objmgr_psoc *psoc,
240*5113495bSYour Name 			   struct wlan_fwol_thermal_temp *thermal_info)
241*5113495bSYour Name {
242*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
243*5113495bSYour Name 
244*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
245*5113495bSYour Name 	if (!fwol_obj) {
246*5113495bSYour Name 		fwol_err("Failed to get fwol obj");
247*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
248*5113495bSYour Name 	}
249*5113495bSYour Name 
250*5113495bSYour Name 	*thermal_info = fwol_obj->cfg.thermal_temp_cfg;
251*5113495bSYour Name 
252*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
253*5113495bSYour Name }
254*5113495bSYour Name 
255*5113495bSYour Name QDF_STATUS
ucfg_fwol_is_neighbor_report_req_supported(struct wlan_objmgr_psoc * psoc,bool * neighbor_report_req)256*5113495bSYour Name ucfg_fwol_is_neighbor_report_req_supported(struct wlan_objmgr_psoc *psoc,
257*5113495bSYour Name 					   bool *neighbor_report_req)
258*5113495bSYour Name {
259*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
260*5113495bSYour Name 
261*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
262*5113495bSYour Name 	if (!fwol_obj) {
263*5113495bSYour Name 		fwol_err("Failed to get fwol obj");
264*5113495bSYour Name 		*neighbor_report_req =
265*5113495bSYour Name 			 !!(cfg_get(psoc,
266*5113495bSYour Name 			    CFG_OFFLOAD_11K_ENABLE_BITMASK) &
267*5113495bSYour Name 			    OFFLOAD_11K_BITMASK_NEIGHBOR_REPORT_REQUEST);
268*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
269*5113495bSYour Name 	}
270*5113495bSYour Name 
271*5113495bSYour Name 	*neighbor_report_req =
272*5113495bSYour Name 		!!(fwol_obj->cfg.neighbor_report_cfg.enable_bitmask &
273*5113495bSYour Name 		   OFFLOAD_11K_BITMASK_NEIGHBOR_REPORT_REQUEST);
274*5113495bSYour Name 
275*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
276*5113495bSYour Name }
277*5113495bSYour Name 
278*5113495bSYour Name QDF_STATUS
ucfg_fwol_get_ie_allowlist(struct wlan_objmgr_psoc * psoc,bool * ie_allowlist)279*5113495bSYour Name ucfg_fwol_get_ie_allowlist(struct wlan_objmgr_psoc *psoc, bool *ie_allowlist)
280*5113495bSYour Name {
281*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
282*5113495bSYour Name 
283*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
284*5113495bSYour Name 	if (!fwol_obj) {
285*5113495bSYour Name 		fwol_err("Failed to get fwol obj");
286*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
287*5113495bSYour Name 	}
288*5113495bSYour Name 
289*5113495bSYour Name 	*ie_allowlist = fwol_obj->cfg.ie_allowlist_cfg.ie_allowlist;
290*5113495bSYour Name 
291*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
292*5113495bSYour Name }
293*5113495bSYour Name 
294*5113495bSYour Name QDF_STATUS
ucfg_fwol_set_ie_allowlist(struct wlan_objmgr_psoc * psoc,bool ie_allowlist)295*5113495bSYour Name ucfg_fwol_set_ie_allowlist(struct wlan_objmgr_psoc *psoc, bool ie_allowlist)
296*5113495bSYour Name {
297*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
298*5113495bSYour Name 
299*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
300*5113495bSYour Name 	if (!fwol_obj) {
301*5113495bSYour Name 		fwol_err("Failed to get fwol obj");
302*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
303*5113495bSYour Name 	}
304*5113495bSYour Name 
305*5113495bSYour Name 	fwol_obj->cfg.ie_allowlist_cfg.ie_allowlist = ie_allowlist;
306*5113495bSYour Name 
307*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
308*5113495bSYour Name }
309*5113495bSYour Name 
ucfg_fwol_get_ani_enabled(struct wlan_objmgr_psoc * psoc,bool * ani_enabled)310*5113495bSYour Name QDF_STATUS ucfg_fwol_get_ani_enabled(struct wlan_objmgr_psoc *psoc,
311*5113495bSYour Name 				     bool *ani_enabled)
312*5113495bSYour Name {
313*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
314*5113495bSYour Name 
315*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
316*5113495bSYour Name 	if (!fwol_obj) {
317*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
318*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
319*5113495bSYour Name 	}
320*5113495bSYour Name 
321*5113495bSYour Name 	*ani_enabled = fwol_obj->cfg.ani_enabled;
322*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
323*5113495bSYour Name }
324*5113495bSYour Name 
ucfg_fwol_get_pcie_config(struct wlan_objmgr_psoc * psoc,uint8_t * pcie_config)325*5113495bSYour Name QDF_STATUS ucfg_fwol_get_pcie_config(struct wlan_objmgr_psoc *psoc,
326*5113495bSYour Name 				     uint8_t *pcie_config)
327*5113495bSYour Name {
328*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
329*5113495bSYour Name 
330*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
331*5113495bSYour Name 	if (!fwol_obj) {
332*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
333*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
334*5113495bSYour Name 	}
335*5113495bSYour Name 
336*5113495bSYour Name 	*pcie_config = fwol_obj->cfg.pcie_config;
337*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
338*5113495bSYour Name }
339*5113495bSYour Name 
ucfg_fwol_get_ilp_config(struct wlan_objmgr_psoc * psoc,uint32_t * enable_ilp)340*5113495bSYour Name static QDF_STATUS ucfg_fwol_get_ilp_config(struct wlan_objmgr_psoc *psoc,
341*5113495bSYour Name 					   uint32_t *enable_ilp)
342*5113495bSYour Name {
343*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
344*5113495bSYour Name 
345*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
346*5113495bSYour Name 	if (!fwol_obj) {
347*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
348*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
349*5113495bSYour Name 	}
350*5113495bSYour Name 
351*5113495bSYour Name 	*enable_ilp = fwol_obj->cfg.enable_ilp;
352*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
353*5113495bSYour Name }
354*5113495bSYour Name 
ucfg_fwol_get_sap_sho(struct wlan_objmgr_psoc * psoc,uint32_t * sap_sho)355*5113495bSYour Name static QDF_STATUS ucfg_fwol_get_sap_sho(struct wlan_objmgr_psoc *psoc,
356*5113495bSYour Name 					uint32_t *sap_sho)
357*5113495bSYour Name {
358*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
359*5113495bSYour Name 
360*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
361*5113495bSYour Name 	if (!fwol_obj) {
362*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
363*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
364*5113495bSYour Name 	}
365*5113495bSYour Name 
366*5113495bSYour Name 	*sap_sho = fwol_obj->cfg.sap_sho;
367*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
368*5113495bSYour Name }
369*5113495bSYour Name 
ucfg_fwol_get_hw_assist_config(struct wlan_objmgr_psoc * psoc,bool * disable_hw_assist)370*5113495bSYour Name static QDF_STATUS ucfg_fwol_get_hw_assist_config(struct wlan_objmgr_psoc *psoc,
371*5113495bSYour Name 						 bool *disable_hw_assist)
372*5113495bSYour Name {
373*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
374*5113495bSYour Name 
375*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
376*5113495bSYour Name 	if (!fwol_obj) {
377*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
378*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
379*5113495bSYour Name 	}
380*5113495bSYour Name 
381*5113495bSYour Name 	*disable_hw_assist = fwol_obj->cfg.disable_hw_assist;
382*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
383*5113495bSYour Name }
384*5113495bSYour Name 
ucfg_get_enable_rts_sifsbursting(struct wlan_objmgr_psoc * psoc,bool * enable_rts_sifsbursting)385*5113495bSYour Name QDF_STATUS ucfg_get_enable_rts_sifsbursting(struct wlan_objmgr_psoc *psoc,
386*5113495bSYour Name 					    bool *enable_rts_sifsbursting)
387*5113495bSYour Name {
388*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
389*5113495bSYour Name 
390*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
391*5113495bSYour Name 	if (!fwol_obj) {
392*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
393*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
394*5113495bSYour Name 	}
395*5113495bSYour Name 
396*5113495bSYour Name 	*enable_rts_sifsbursting = fwol_obj->cfg.enable_rts_sifsbursting;
397*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
398*5113495bSYour Name }
399*5113495bSYour Name 
ucfg_get_enable_sifs_burst(struct wlan_objmgr_psoc * psoc,uint8_t * enable_sifs_burst)400*5113495bSYour Name QDF_STATUS ucfg_get_enable_sifs_burst(struct wlan_objmgr_psoc *psoc,
401*5113495bSYour Name 				      uint8_t *enable_sifs_burst)
402*5113495bSYour Name {
403*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
404*5113495bSYour Name 
405*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
406*5113495bSYour Name 	if (!fwol_obj) {
407*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
408*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
409*5113495bSYour Name 	}
410*5113495bSYour Name 
411*5113495bSYour Name 	*enable_sifs_burst = fwol_obj->cfg.enable_sifs_burst;
412*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
413*5113495bSYour Name }
414*5113495bSYour Name 
ucfg_get_max_mpdus_inampdu(struct wlan_objmgr_psoc * psoc,uint8_t * max_mpdus_inampdu)415*5113495bSYour Name QDF_STATUS ucfg_get_max_mpdus_inampdu(struct wlan_objmgr_psoc *psoc,
416*5113495bSYour Name 				      uint8_t *max_mpdus_inampdu)
417*5113495bSYour Name {
418*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
419*5113495bSYour Name 
420*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
421*5113495bSYour Name 	if (!fwol_obj) {
422*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
423*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
424*5113495bSYour Name 	}
425*5113495bSYour Name 
426*5113495bSYour Name 	*max_mpdus_inampdu = fwol_obj->cfg.max_mpdus_inampdu;
427*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
428*5113495bSYour Name }
429*5113495bSYour Name 
ucfg_get_enable_phy_reg_retention(struct wlan_objmgr_psoc * psoc,uint8_t * enable_phy_reg_retention)430*5113495bSYour Name QDF_STATUS ucfg_get_enable_phy_reg_retention(struct wlan_objmgr_psoc *psoc,
431*5113495bSYour Name 					     uint8_t *enable_phy_reg_retention)
432*5113495bSYour Name {
433*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
434*5113495bSYour Name 
435*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
436*5113495bSYour Name 	if (!fwol_obj) {
437*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
438*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
439*5113495bSYour Name 	}
440*5113495bSYour Name 
441*5113495bSYour Name 	*enable_phy_reg_retention = fwol_obj->cfg.enable_phy_reg_retention;
442*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
443*5113495bSYour Name }
444*5113495bSYour Name 
445*5113495bSYour Name QDF_STATUS
ucfg_fwol_get_all_allowlist_params(struct wlan_objmgr_psoc * psoc,struct wlan_fwol_ie_allowlist * allowlist)446*5113495bSYour Name ucfg_fwol_get_all_allowlist_params(struct wlan_objmgr_psoc *psoc,
447*5113495bSYour Name 				   struct wlan_fwol_ie_allowlist *allowlist)
448*5113495bSYour Name {
449*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
450*5113495bSYour Name 
451*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
452*5113495bSYour Name 	if (!fwol_obj) {
453*5113495bSYour Name 		fwol_err("Failed to get fwol obj");
454*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
455*5113495bSYour Name 	}
456*5113495bSYour Name 
457*5113495bSYour Name 	*allowlist = fwol_obj->cfg.ie_allowlist_cfg;
458*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
459*5113495bSYour Name }
460*5113495bSYour Name 
ucfg_get_upper_brssi_thresh(struct wlan_objmgr_psoc * psoc,uint16_t * upper_brssi_thresh)461*5113495bSYour Name QDF_STATUS ucfg_get_upper_brssi_thresh(struct wlan_objmgr_psoc *psoc,
462*5113495bSYour Name 				       uint16_t *upper_brssi_thresh)
463*5113495bSYour Name {
464*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
465*5113495bSYour Name 
466*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
467*5113495bSYour Name 	if (!fwol_obj) {
468*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
469*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
470*5113495bSYour Name 	}
471*5113495bSYour Name 
472*5113495bSYour Name 	*upper_brssi_thresh = fwol_obj->cfg.upper_brssi_thresh;
473*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
474*5113495bSYour Name }
475*5113495bSYour Name 
ucfg_get_lower_brssi_thresh(struct wlan_objmgr_psoc * psoc,uint16_t * lower_brssi_thresh)476*5113495bSYour Name QDF_STATUS ucfg_get_lower_brssi_thresh(struct wlan_objmgr_psoc *psoc,
477*5113495bSYour Name 				       uint16_t *lower_brssi_thresh)
478*5113495bSYour Name {
479*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
480*5113495bSYour Name 
481*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
482*5113495bSYour Name 	if (!fwol_obj) {
483*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
484*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
485*5113495bSYour Name 	}
486*5113495bSYour Name 
487*5113495bSYour Name 	*lower_brssi_thresh = fwol_obj->cfg.lower_brssi_thresh;
488*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
489*5113495bSYour Name }
490*5113495bSYour Name 
ucfg_get_enable_dtim_1chrx(struct wlan_objmgr_psoc * psoc,bool * enable_dtim_1chrx)491*5113495bSYour Name QDF_STATUS ucfg_get_enable_dtim_1chrx(struct wlan_objmgr_psoc *psoc,
492*5113495bSYour Name 				      bool *enable_dtim_1chrx)
493*5113495bSYour Name {
494*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
495*5113495bSYour Name 
496*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
497*5113495bSYour Name 	if (!fwol_obj) {
498*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
499*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
500*5113495bSYour Name 	}
501*5113495bSYour Name 
502*5113495bSYour Name 	*enable_dtim_1chrx = fwol_obj->cfg.enable_dtim_1chrx;
503*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
504*5113495bSYour Name }
505*5113495bSYour Name 
506*5113495bSYour Name QDF_STATUS
ucfg_get_alternative_chainmask_enabled(struct wlan_objmgr_psoc * psoc,bool * alternative_chainmask_enabled)507*5113495bSYour Name ucfg_get_alternative_chainmask_enabled(struct wlan_objmgr_psoc *psoc,
508*5113495bSYour Name 				       bool *alternative_chainmask_enabled)
509*5113495bSYour Name {
510*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
511*5113495bSYour Name 
512*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
513*5113495bSYour Name 	if (!fwol_obj) {
514*5113495bSYour Name 		fwol_err("Failed to get fwol obj");
515*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
516*5113495bSYour Name 	}
517*5113495bSYour Name 
518*5113495bSYour Name 	*alternative_chainmask_enabled =
519*5113495bSYour Name 				fwol_obj->cfg.alternative_chainmask_enabled;
520*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
521*5113495bSYour Name }
522*5113495bSYour Name 
ucfg_get_smart_chainmask_enabled(struct wlan_objmgr_psoc * psoc,bool * smart_chainmask_enabled)523*5113495bSYour Name QDF_STATUS ucfg_get_smart_chainmask_enabled(struct wlan_objmgr_psoc *psoc,
524*5113495bSYour Name 					    bool *smart_chainmask_enabled)
525*5113495bSYour Name {
526*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
527*5113495bSYour Name 
528*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
529*5113495bSYour Name 	if (!fwol_obj) {
530*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
531*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
532*5113495bSYour Name 	}
533*5113495bSYour Name 
534*5113495bSYour Name 	*smart_chainmask_enabled =
535*5113495bSYour Name 				fwol_obj->cfg.smart_chainmask_enabled;
536*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
537*5113495bSYour Name }
538*5113495bSYour Name 
ucfg_fwol_get_rts_profile(struct wlan_objmgr_psoc * psoc,uint16_t * get_rts_profile)539*5113495bSYour Name QDF_STATUS ucfg_fwol_get_rts_profile(struct wlan_objmgr_psoc *psoc,
540*5113495bSYour Name 				     uint16_t *get_rts_profile)
541*5113495bSYour Name {
542*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
543*5113495bSYour Name 
544*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
545*5113495bSYour Name 	if (!fwol_obj) {
546*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
547*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
548*5113495bSYour Name 	}
549*5113495bSYour Name 
550*5113495bSYour Name 	*get_rts_profile = fwol_obj->cfg.get_rts_profile;
551*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
552*5113495bSYour Name }
553*5113495bSYour Name 
ucfg_fwol_get_enable_fw_log_level(struct wlan_objmgr_psoc * psoc,uint16_t * enable_fw_log_level)554*5113495bSYour Name QDF_STATUS ucfg_fwol_get_enable_fw_log_level(struct wlan_objmgr_psoc *psoc,
555*5113495bSYour Name 					     uint16_t *enable_fw_log_level)
556*5113495bSYour Name {
557*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
558*5113495bSYour Name 
559*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
560*5113495bSYour Name 	if (!fwol_obj) {
561*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
562*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
563*5113495bSYour Name 	}
564*5113495bSYour Name 
565*5113495bSYour Name 	*enable_fw_log_level = fwol_obj->cfg.enable_fw_log_level;
566*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
567*5113495bSYour Name }
568*5113495bSYour Name 
ucfg_fwol_get_enable_fw_log_type(struct wlan_objmgr_psoc * psoc,uint16_t * enable_fw_log_type)569*5113495bSYour Name QDF_STATUS ucfg_fwol_get_enable_fw_log_type(struct wlan_objmgr_psoc *psoc,
570*5113495bSYour Name 					    uint16_t *enable_fw_log_type)
571*5113495bSYour Name {
572*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
573*5113495bSYour Name 
574*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
575*5113495bSYour Name 	if (!fwol_obj) {
576*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
577*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
578*5113495bSYour Name 	}
579*5113495bSYour Name 
580*5113495bSYour Name 	*enable_fw_log_type = fwol_obj->cfg.enable_fw_log_type;
581*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
582*5113495bSYour Name }
583*5113495bSYour Name 
ucfg_fwol_get_enable_fw_module_log_level(struct wlan_objmgr_psoc * psoc,uint8_t ** enable_fw_module_log_level,uint8_t * enable_fw_module_log_level_num)584*5113495bSYour Name QDF_STATUS ucfg_fwol_get_enable_fw_module_log_level(
585*5113495bSYour Name 				struct wlan_objmgr_psoc *psoc,
586*5113495bSYour Name 				uint8_t **enable_fw_module_log_level,
587*5113495bSYour Name 				uint8_t *enable_fw_module_log_level_num)
588*5113495bSYour Name {
589*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
590*5113495bSYour Name 
591*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
592*5113495bSYour Name 	if (!fwol_obj) {
593*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
594*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
595*5113495bSYour Name 	}
596*5113495bSYour Name 
597*5113495bSYour Name 	*enable_fw_module_log_level = fwol_obj->cfg.enable_fw_module_log_level;
598*5113495bSYour Name 	*enable_fw_module_log_level_num =
599*5113495bSYour Name 				fwol_obj->cfg.enable_fw_module_log_level_num;
600*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
601*5113495bSYour Name }
602*5113495bSYour Name 
ucfg_fwol_wow_get_enable_fw_module_log_level(struct wlan_objmgr_psoc * psoc,uint8_t ** enable_fw_wow_module_log_level,uint8_t * enable_fw_wow_module_log_level_num)603*5113495bSYour Name QDF_STATUS ucfg_fwol_wow_get_enable_fw_module_log_level(
604*5113495bSYour Name 				struct wlan_objmgr_psoc *psoc,
605*5113495bSYour Name 				uint8_t **enable_fw_wow_module_log_level,
606*5113495bSYour Name 				uint8_t *enable_fw_wow_module_log_level_num)
607*5113495bSYour Name {
608*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
609*5113495bSYour Name 
610*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
611*5113495bSYour Name 	if (!fwol_obj) {
612*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
613*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
614*5113495bSYour Name 	}
615*5113495bSYour Name 
616*5113495bSYour Name 	*enable_fw_wow_module_log_level =
617*5113495bSYour Name 				fwol_obj->cfg.enable_fw_mod_wow_log_level;
618*5113495bSYour Name 	*enable_fw_wow_module_log_level_num =
619*5113495bSYour Name 				fwol_obj->cfg.enable_fw_mod_wow_log_level_num;
620*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
621*5113495bSYour Name }
622*5113495bSYour Name 
ucfg_fwol_get_sap_xlna_bypass(struct wlan_objmgr_psoc * psoc,bool * sap_xlna_bypass)623*5113495bSYour Name QDF_STATUS ucfg_fwol_get_sap_xlna_bypass(struct wlan_objmgr_psoc *psoc,
624*5113495bSYour Name 					 bool *sap_xlna_bypass)
625*5113495bSYour Name {
626*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
627*5113495bSYour Name 
628*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
629*5113495bSYour Name 	if (!fwol_obj) {
630*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
631*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
632*5113495bSYour Name 	}
633*5113495bSYour Name 
634*5113495bSYour Name 	*sap_xlna_bypass = fwol_obj->cfg.sap_xlna_bypass;
635*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
636*5113495bSYour Name }
637*5113495bSYour Name 
638*5113495bSYour Name #ifdef FEATURE_WLAN_RA_FILTERING
ucfg_fwol_set_is_rate_limit_enabled(struct wlan_objmgr_psoc * psoc,bool is_rate_limit_enabled)639*5113495bSYour Name QDF_STATUS ucfg_fwol_set_is_rate_limit_enabled(struct wlan_objmgr_psoc *psoc,
640*5113495bSYour Name 					       bool is_rate_limit_enabled)
641*5113495bSYour Name {
642*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
643*5113495bSYour Name 
644*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
645*5113495bSYour Name 	if (!fwol_obj) {
646*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
647*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
648*5113495bSYour Name 	}
649*5113495bSYour Name 
650*5113495bSYour Name 	fwol_obj->cfg.is_rate_limit_enabled = is_rate_limit_enabled;
651*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
652*5113495bSYour Name }
653*5113495bSYour Name 
ucfg_fwol_get_is_rate_limit_enabled(struct wlan_objmgr_psoc * psoc,bool * is_rate_limit_enabled)654*5113495bSYour Name QDF_STATUS ucfg_fwol_get_is_rate_limit_enabled(struct wlan_objmgr_psoc *psoc,
655*5113495bSYour Name 					       bool *is_rate_limit_enabled)
656*5113495bSYour Name {
657*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
658*5113495bSYour Name 
659*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
660*5113495bSYour Name 	if (!fwol_obj) {
661*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
662*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
663*5113495bSYour Name 	}
664*5113495bSYour Name 
665*5113495bSYour Name 	*is_rate_limit_enabled = fwol_obj->cfg.is_rate_limit_enabled;
666*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
667*5113495bSYour Name }
668*5113495bSYour Name #endif
669*5113495bSYour Name 
670*5113495bSYour Name #ifdef WLAN_FEATURE_TSF
ucfg_fwol_get_tsf_gpio_pin(struct wlan_objmgr_psoc * psoc,uint32_t * tsf_gpio_pin)671*5113495bSYour Name QDF_STATUS ucfg_fwol_get_tsf_gpio_pin(struct wlan_objmgr_psoc *psoc,
672*5113495bSYour Name 				      uint32_t *tsf_gpio_pin)
673*5113495bSYour Name {
674*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
675*5113495bSYour Name 
676*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
677*5113495bSYour Name 	if (!fwol_obj) {
678*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
679*5113495bSYour Name 		*tsf_gpio_pin = cfg_default(CFG_SET_TSF_GPIO_PIN);
680*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
681*5113495bSYour Name 	}
682*5113495bSYour Name 
683*5113495bSYour Name 	*tsf_gpio_pin = fwol_obj->cfg.tsf_gpio_pin;
684*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
685*5113495bSYour Name }
686*5113495bSYour Name 
687*5113495bSYour Name #ifdef WLAN_FEATURE_TSF_PLUS
ucfg_fwol_get_tsf_ptp_options(struct wlan_objmgr_psoc * psoc,uint32_t * tsf_ptp_options)688*5113495bSYour Name QDF_STATUS ucfg_fwol_get_tsf_ptp_options(struct wlan_objmgr_psoc *psoc,
689*5113495bSYour Name 					 uint32_t *tsf_ptp_options)
690*5113495bSYour Name {
691*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
692*5113495bSYour Name 
693*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
694*5113495bSYour Name 	if (!fwol_obj) {
695*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
696*5113495bSYour Name 		*tsf_ptp_options = cfg_default(CFG_SET_TSF_PTP_OPT);
697*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
698*5113495bSYour Name 	}
699*5113495bSYour Name 
700*5113495bSYour Name 	*tsf_ptp_options = fwol_obj->cfg.tsf_ptp_options;
701*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
702*5113495bSYour Name }
703*5113495bSYour Name 
ucfg_fwol_get_tsf_sync_enable(struct wlan_objmgr_psoc * psoc,bool * tsf_sync_enable)704*5113495bSYour Name QDF_STATUS ucfg_fwol_get_tsf_sync_enable(struct wlan_objmgr_psoc *psoc,
705*5113495bSYour Name 					 bool *tsf_sync_enable)
706*5113495bSYour Name {
707*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
708*5113495bSYour Name 
709*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
710*5113495bSYour Name 	if (!fwol_obj) {
711*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
712*5113495bSYour Name 		*tsf_sync_enable = cfg_default(CFG_TSF_SYNC_ENABLE);
713*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
714*5113495bSYour Name 	}
715*5113495bSYour Name 
716*5113495bSYour Name 	*tsf_sync_enable = fwol_obj->cfg.tsf_sync_enable;
717*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
718*5113495bSYour Name }
719*5113495bSYour Name 
720*5113495bSYour Name #ifdef WLAN_FEATURE_TSF_ACCURACY
ucfg_fwol_get_tsf_accuracy_configs(struct wlan_objmgr_psoc * psoc,struct wlan_fwol_tsf_accuracy_configs ** config)721*5113495bSYour Name QDF_STATUS ucfg_fwol_get_tsf_accuracy_configs(struct wlan_objmgr_psoc *psoc,
722*5113495bSYour Name 					      struct wlan_fwol_tsf_accuracy_configs **config)
723*5113495bSYour Name {
724*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
725*5113495bSYour Name 
726*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
727*5113495bSYour Name 	if (!fwol_obj) {
728*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
729*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
730*5113495bSYour Name 	}
731*5113495bSYour Name 
732*5113495bSYour Name 	*config = &fwol_obj->cfg.tsf_accuracy_configs;
733*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
734*5113495bSYour Name }
735*5113495bSYour Name #endif
736*5113495bSYour Name 
737*5113495bSYour Name #ifdef WLAN_FEATURE_TSF_PLUS_EXT_GPIO_IRQ
738*5113495bSYour Name QDF_STATUS
ucfg_fwol_get_tsf_irq_host_gpio_pin(struct wlan_objmgr_psoc * psoc,uint32_t * tsf_irq_host_gpio_pin)739*5113495bSYour Name ucfg_fwol_get_tsf_irq_host_gpio_pin(struct wlan_objmgr_psoc *psoc,
740*5113495bSYour Name 				    uint32_t *tsf_irq_host_gpio_pin)
741*5113495bSYour Name {
742*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
743*5113495bSYour Name 
744*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
745*5113495bSYour Name 	if (!fwol_obj) {
746*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
747*5113495bSYour Name 		*tsf_irq_host_gpio_pin =
748*5113495bSYour Name 			cfg_default(CFG_SET_TSF_IRQ_HOST_GPIO_PIN);
749*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
750*5113495bSYour Name 	}
751*5113495bSYour Name 
752*5113495bSYour Name 	*tsf_irq_host_gpio_pin = fwol_obj->cfg.tsf_irq_host_gpio_pin;
753*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
754*5113495bSYour Name }
755*5113495bSYour Name 
756*5113495bSYour Name #endif
757*5113495bSYour Name 
758*5113495bSYour Name #ifdef WLAN_FEATURE_TSF_PLUS_EXT_GPIO_SYNC
759*5113495bSYour Name QDF_STATUS
ucfg_fwol_get_tsf_sync_host_gpio_pin(struct wlan_objmgr_psoc * psoc,uint32_t * tsf_sync_host_gpio_pin)760*5113495bSYour Name ucfg_fwol_get_tsf_sync_host_gpio_pin(struct wlan_objmgr_psoc *psoc,
761*5113495bSYour Name 				     uint32_t *tsf_sync_host_gpio_pin)
762*5113495bSYour Name {
763*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
764*5113495bSYour Name 
765*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
766*5113495bSYour Name 	if (!fwol_obj) {
767*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
768*5113495bSYour Name 		*tsf_sync_host_gpio_pin =
769*5113495bSYour Name 			cfg_default(CFG_SET_TSF_SYNC_HOST_GPIO_PIN);
770*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
771*5113495bSYour Name 	}
772*5113495bSYour Name 
773*5113495bSYour Name 	*tsf_sync_host_gpio_pin = fwol_obj->cfg.tsf_sync_host_gpio_pin;
774*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
775*5113495bSYour Name }
776*5113495bSYour Name 
777*5113495bSYour Name #endif
778*5113495bSYour Name #endif
779*5113495bSYour Name #else
ucfg_fwol_get_tsf_gpio_pin(struct wlan_objmgr_psoc * psoc,uint32_t * tsf_gpio_pin)780*5113495bSYour Name QDF_STATUS ucfg_fwol_get_tsf_gpio_pin(struct wlan_objmgr_psoc *psoc,
781*5113495bSYour Name 				      uint32_t *tsf_gpio_pin)
782*5113495bSYour Name {
783*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
784*5113495bSYour Name }
785*5113495bSYour Name 
ucfg_fwol_get_tsf_ptp_options(struct wlan_objmgr_psoc * psoc,uint32_t * tsf_ptp_options)786*5113495bSYour Name QDF_STATUS ucfg_fwol_get_tsf_ptp_options(struct wlan_objmgr_psoc *psoc,
787*5113495bSYour Name 					 uint32_t *tsf_ptp_options)
788*5113495bSYour Name {
789*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
790*5113495bSYour Name }
791*5113495bSYour Name 
792*5113495bSYour Name #endif
793*5113495bSYour Name 
794*5113495bSYour Name #ifdef WLAN_FEATURE_SAE
ucfg_fwol_get_sae_enable(struct wlan_objmgr_psoc * psoc)795*5113495bSYour Name bool ucfg_fwol_get_sae_enable(struct wlan_objmgr_psoc *psoc)
796*5113495bSYour Name {
797*5113495bSYour Name 	return cfg_get(psoc, CFG_IS_SAE_ENABLED);
798*5113495bSYour Name }
799*5113495bSYour Name 
800*5113495bSYour Name #else
ucfg_fwol_get_sae_enable(struct wlan_objmgr_psoc * psoc)801*5113495bSYour Name bool ucfg_fwol_get_sae_enable(struct wlan_objmgr_psoc *psoc)
802*5113495bSYour Name {
803*5113495bSYour Name 	return false;
804*5113495bSYour Name }
805*5113495bSYour Name #endif
806*5113495bSYour Name 
ucfg_fwol_get_gcmp_enable(struct wlan_objmgr_psoc * psoc)807*5113495bSYour Name bool ucfg_fwol_get_gcmp_enable(struct wlan_objmgr_psoc *psoc)
808*5113495bSYour Name {
809*5113495bSYour Name 	return cfg_get(psoc, CFG_ENABLE_GCMP);
810*5113495bSYour Name }
811*5113495bSYour Name 
ucfg_fwol_get_enable_tx_sch_delay(struct wlan_objmgr_psoc * psoc,uint8_t * enable_tx_sch_delay)812*5113495bSYour Name QDF_STATUS ucfg_fwol_get_enable_tx_sch_delay(struct wlan_objmgr_psoc *psoc,
813*5113495bSYour Name 					     uint8_t *enable_tx_sch_delay)
814*5113495bSYour Name {
815*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
816*5113495bSYour Name 
817*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
818*5113495bSYour Name 	if (!fwol_obj) {
819*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
820*5113495bSYour Name 		*enable_tx_sch_delay = cfg_default(CFG_TX_SCH_DELAY);
821*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
822*5113495bSYour Name 	}
823*5113495bSYour Name 
824*5113495bSYour Name 	*enable_tx_sch_delay = fwol_obj->cfg.enable_tx_sch_delay;
825*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
826*5113495bSYour Name }
827*5113495bSYour Name 
828*5113495bSYour Name #ifdef WLAN_FEATURE_OFDM_SCRAMBLER_SEED
ucfg_fwol_get_ofdm_scrambler_seed(struct wlan_objmgr_psoc * psoc,bool * enable_ofdm_scrambler_seed)829*5113495bSYour Name QDF_STATUS ucfg_fwol_get_ofdm_scrambler_seed(struct wlan_objmgr_psoc *psoc,
830*5113495bSYour Name 					     bool *enable_ofdm_scrambler_seed)
831*5113495bSYour Name {
832*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
833*5113495bSYour Name 
834*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
835*5113495bSYour Name 	if (!fwol_obj) {
836*5113495bSYour Name 		*enable_ofdm_scrambler_seed =
837*5113495bSYour Name 				cfg_default(CFG_ENABLE_OFDM_SCRAMBLER_SEED);
838*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
839*5113495bSYour Name 	}
840*5113495bSYour Name 
841*5113495bSYour Name 	*enable_ofdm_scrambler_seed =
842*5113495bSYour Name 				fwol_obj->cfg.enable_ofdm_scrambler_seed;
843*5113495bSYour Name 
844*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
845*5113495bSYour Name }
846*5113495bSYour Name #endif
847*5113495bSYour Name 
ucfg_fwol_get_enable_secondary_rate(struct wlan_objmgr_psoc * psoc,uint32_t * enable_secondary_rate)848*5113495bSYour Name QDF_STATUS ucfg_fwol_get_enable_secondary_rate(struct wlan_objmgr_psoc *psoc,
849*5113495bSYour Name 					       uint32_t *enable_secondary_rate)
850*5113495bSYour Name {
851*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
852*5113495bSYour Name 
853*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
854*5113495bSYour Name 	if (!fwol_obj) {
855*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
856*5113495bSYour Name 		*enable_secondary_rate = cfg_default(CFG_ENABLE_SECONDARY_RATE);
857*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
858*5113495bSYour Name 	}
859*5113495bSYour Name 
860*5113495bSYour Name 	*enable_secondary_rate = fwol_obj->cfg.enable_secondary_rate;
861*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
862*5113495bSYour Name }
863*5113495bSYour Name 
864*5113495bSYour Name #ifdef DHCP_SERVER_OFFLOAD
865*5113495bSYour Name QDF_STATUS
ucfg_fwol_get_enable_dhcp_server_offload(struct wlan_objmgr_psoc * psoc,bool * enable_dhcp_server_offload)866*5113495bSYour Name ucfg_fwol_get_enable_dhcp_server_offload(struct wlan_objmgr_psoc *psoc,
867*5113495bSYour Name 					 bool *enable_dhcp_server_offload)
868*5113495bSYour Name {
869*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
870*5113495bSYour Name 
871*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
872*5113495bSYour Name 	if (!fwol_obj) {
873*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
874*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
875*5113495bSYour Name 	}
876*5113495bSYour Name 
877*5113495bSYour Name 	*enable_dhcp_server_offload = fwol_obj->cfg.enable_dhcp_server_offload;
878*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
879*5113495bSYour Name }
880*5113495bSYour Name 
ucfg_fwol_get_dhcp_max_num_clients(struct wlan_objmgr_psoc * psoc,uint32_t * dhcp_max_num_clients)881*5113495bSYour Name QDF_STATUS ucfg_fwol_get_dhcp_max_num_clients(struct wlan_objmgr_psoc *psoc,
882*5113495bSYour Name 					      uint32_t *dhcp_max_num_clients)
883*5113495bSYour Name {
884*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
885*5113495bSYour Name 
886*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
887*5113495bSYour Name 	if (!fwol_obj) {
888*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
889*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
890*5113495bSYour Name 	}
891*5113495bSYour Name 
892*5113495bSYour Name 	*dhcp_max_num_clients = fwol_obj->cfg.dhcp_max_num_clients;
893*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
894*5113495bSYour Name }
895*5113495bSYour Name 
896*5113495bSYour Name #endif
897*5113495bSYour Name 
898*5113495bSYour Name QDF_STATUS
ucfg_fwol_get_all_adaptive_dwelltime_params(struct wlan_objmgr_psoc * psoc,struct adaptive_dwelltime_params * dwelltime_params)899*5113495bSYour Name ucfg_fwol_get_all_adaptive_dwelltime_params(
900*5113495bSYour Name 			struct wlan_objmgr_psoc *psoc,
901*5113495bSYour Name 			struct adaptive_dwelltime_params *dwelltime_params)
902*5113495bSYour Name {
903*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
904*5113495bSYour Name 
905*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
906*5113495bSYour Name 	if (!fwol_obj) {
907*5113495bSYour Name 		fwol_err("Failed to get fwol obj");
908*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
909*5113495bSYour Name 	}
910*5113495bSYour Name 
911*5113495bSYour Name 	*dwelltime_params = fwol_obj->cfg.dwelltime_params;
912*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
913*5113495bSYour Name }
914*5113495bSYour Name 
915*5113495bSYour Name QDF_STATUS
ucfg_fwol_get_adaptive_dwell_mode_enabled(struct wlan_objmgr_psoc * psoc,bool * adaptive_dwell_mode_enabled)916*5113495bSYour Name ucfg_fwol_get_adaptive_dwell_mode_enabled(
917*5113495bSYour Name 				struct wlan_objmgr_psoc *psoc,
918*5113495bSYour Name 				bool *adaptive_dwell_mode_enabled)
919*5113495bSYour Name {
920*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
921*5113495bSYour Name 
922*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
923*5113495bSYour Name 	if (!fwol_obj) {
924*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
925*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
926*5113495bSYour Name 	}
927*5113495bSYour Name 
928*5113495bSYour Name 	*adaptive_dwell_mode_enabled =
929*5113495bSYour Name 			fwol_obj->cfg.dwelltime_params.is_enabled;
930*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
931*5113495bSYour Name }
932*5113495bSYour Name 
933*5113495bSYour Name QDF_STATUS
ucfg_fwol_get_global_adapt_dwelltime_mode(struct wlan_objmgr_psoc * psoc,uint8_t * global_adapt_dwelltime_mode)934*5113495bSYour Name ucfg_fwol_get_global_adapt_dwelltime_mode(struct wlan_objmgr_psoc *psoc,
935*5113495bSYour Name 					  uint8_t *global_adapt_dwelltime_mode)
936*5113495bSYour Name {
937*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
938*5113495bSYour Name 
939*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
940*5113495bSYour Name 	if (!fwol_obj) {
941*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
942*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
943*5113495bSYour Name 	}
944*5113495bSYour Name 
945*5113495bSYour Name 	*global_adapt_dwelltime_mode =
946*5113495bSYour Name 			fwol_obj->cfg.dwelltime_params.dwelltime_mode;
947*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
948*5113495bSYour Name }
949*5113495bSYour Name 
950*5113495bSYour Name QDF_STATUS
ucfg_fwol_get_adapt_dwell_lpf_weight(struct wlan_objmgr_psoc * psoc,uint8_t * adapt_dwell_lpf_weight)951*5113495bSYour Name ucfg_fwol_get_adapt_dwell_lpf_weight(struct wlan_objmgr_psoc *psoc,
952*5113495bSYour Name 				     uint8_t *adapt_dwell_lpf_weight)
953*5113495bSYour Name {
954*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
955*5113495bSYour Name 
956*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
957*5113495bSYour Name 	if (!fwol_obj) {
958*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
959*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
960*5113495bSYour Name 	}
961*5113495bSYour Name 
962*5113495bSYour Name 	*adapt_dwell_lpf_weight = fwol_obj->cfg.dwelltime_params.lpf_weight;
963*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
964*5113495bSYour Name }
965*5113495bSYour Name 
ucfg_fwol_get_adapt_dwell_passive_mon_intval(struct wlan_objmgr_psoc * psoc,uint8_t * adapt_dwell_passive_mon_intval)966*5113495bSYour Name QDF_STATUS ucfg_fwol_get_adapt_dwell_passive_mon_intval(
967*5113495bSYour Name 				struct wlan_objmgr_psoc *psoc,
968*5113495bSYour Name 				uint8_t *adapt_dwell_passive_mon_intval)
969*5113495bSYour Name {
970*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
971*5113495bSYour Name 
972*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
973*5113495bSYour Name 	if (!fwol_obj) {
974*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
975*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
976*5113495bSYour Name 	}
977*5113495bSYour Name 
978*5113495bSYour Name 	*adapt_dwell_passive_mon_intval =
979*5113495bSYour Name 			fwol_obj->cfg.dwelltime_params.passive_mon_intval;
980*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
981*5113495bSYour Name }
982*5113495bSYour Name 
ucfg_fwol_get_adapt_dwell_wifi_act_threshold(struct wlan_objmgr_psoc * psoc,uint8_t * adapt_dwell_wifi_act_threshold)983*5113495bSYour Name QDF_STATUS ucfg_fwol_get_adapt_dwell_wifi_act_threshold(
984*5113495bSYour Name 				struct wlan_objmgr_psoc *psoc,
985*5113495bSYour Name 				uint8_t *adapt_dwell_wifi_act_threshold)
986*5113495bSYour Name {
987*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
988*5113495bSYour Name 
989*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
990*5113495bSYour Name 	if (!fwol_obj) {
991*5113495bSYour Name 		fwol_err("Failed to get FWOL obj");
992*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
993*5113495bSYour Name 	}
994*5113495bSYour Name 
995*5113495bSYour Name 	*adapt_dwell_wifi_act_threshold =
996*5113495bSYour Name 			fwol_obj->cfg.dwelltime_params.wifi_act_threshold;
997*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
998*5113495bSYour Name }
999*5113495bSYour Name 
1000*5113495bSYour Name #ifdef WLAN_FEATURE_ELNA
ucfg_fwol_set_elna_bypass(struct wlan_objmgr_vdev * vdev,struct set_elna_bypass_request * req)1001*5113495bSYour Name QDF_STATUS ucfg_fwol_set_elna_bypass(struct wlan_objmgr_vdev *vdev,
1002*5113495bSYour Name 				     struct set_elna_bypass_request *req)
1003*5113495bSYour Name {
1004*5113495bSYour Name 	QDF_STATUS status;
1005*5113495bSYour Name 	struct wlan_objmgr_psoc *psoc;
1006*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
1007*5113495bSYour Name 	struct wlan_fwol_tx_ops *tx_ops;
1008*5113495bSYour Name 
1009*5113495bSYour Name 	psoc = wlan_vdev_get_psoc(vdev);
1010*5113495bSYour Name 	if (!psoc) {
1011*5113495bSYour Name 		fwol_err("NULL pointer for psoc");
1012*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
1013*5113495bSYour Name 	}
1014*5113495bSYour Name 
1015*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
1016*5113495bSYour Name 	if (!fwol_obj) {
1017*5113495bSYour Name 		fwol_err("Failed to get FWOL Obj");
1018*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
1019*5113495bSYour Name 	}
1020*5113495bSYour Name 
1021*5113495bSYour Name 	tx_ops = &fwol_obj->tx_ops;
1022*5113495bSYour Name 	if (tx_ops->set_elna_bypass)
1023*5113495bSYour Name 		status = tx_ops->set_elna_bypass(psoc, req);
1024*5113495bSYour Name 	else
1025*5113495bSYour Name 		status = QDF_STATUS_E_IO;
1026*5113495bSYour Name 
1027*5113495bSYour Name 	return status;
1028*5113495bSYour Name }
1029*5113495bSYour Name 
ucfg_fwol_get_elna_bypass(struct wlan_objmgr_vdev * vdev,struct get_elna_bypass_request * req,void (* callback)(void * context,struct get_elna_bypass_response * response),void * context)1030*5113495bSYour Name QDF_STATUS ucfg_fwol_get_elna_bypass(struct wlan_objmgr_vdev *vdev,
1031*5113495bSYour Name 				     struct get_elna_bypass_request *req,
1032*5113495bSYour Name 				     void (*callback)(void *context,
1033*5113495bSYour Name 				     struct get_elna_bypass_response *response),
1034*5113495bSYour Name 				     void *context)
1035*5113495bSYour Name {
1036*5113495bSYour Name 	QDF_STATUS status;
1037*5113495bSYour Name 	struct wlan_objmgr_psoc *psoc;
1038*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
1039*5113495bSYour Name 	struct wlan_fwol_tx_ops *tx_ops;
1040*5113495bSYour Name 	struct wlan_fwol_callbacks *cbs;
1041*5113495bSYour Name 
1042*5113495bSYour Name 	psoc = wlan_vdev_get_psoc(vdev);
1043*5113495bSYour Name 	if (!psoc) {
1044*5113495bSYour Name 		fwol_err("NULL pointer for psoc");
1045*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
1046*5113495bSYour Name 	}
1047*5113495bSYour Name 
1048*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
1049*5113495bSYour Name 	if (!fwol_obj) {
1050*5113495bSYour Name 		fwol_err("Failed to get FWOL Obj");
1051*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
1052*5113495bSYour Name 	}
1053*5113495bSYour Name 
1054*5113495bSYour Name 	cbs = &fwol_obj->cbs;
1055*5113495bSYour Name 	cbs->get_elna_bypass_callback = callback;
1056*5113495bSYour Name 	cbs->get_elna_bypass_context = context;
1057*5113495bSYour Name 
1058*5113495bSYour Name 	tx_ops = &fwol_obj->tx_ops;
1059*5113495bSYour Name 	if (tx_ops->get_elna_bypass)
1060*5113495bSYour Name 		status = tx_ops->get_elna_bypass(psoc, req);
1061*5113495bSYour Name 	else
1062*5113495bSYour Name 		status = QDF_STATUS_E_IO;
1063*5113495bSYour Name 
1064*5113495bSYour Name 	return status;
1065*5113495bSYour Name }
1066*5113495bSYour Name #endif /* WLAN_FEATURE_ELNA */
1067*5113495bSYour Name 
1068*5113495bSYour Name #ifdef WLAN_SEND_DSCP_UP_MAP_TO_FW
ucfg_fwol_send_dscp_up_map_to_fw(struct wlan_objmgr_vdev * vdev,uint32_t * dscp_to_up_map)1069*5113495bSYour Name QDF_STATUS ucfg_fwol_send_dscp_up_map_to_fw(struct wlan_objmgr_vdev *vdev,
1070*5113495bSYour Name 					   uint32_t *dscp_to_up_map)
1071*5113495bSYour Name {
1072*5113495bSYour Name 	QDF_STATUS status;
1073*5113495bSYour Name 	struct wlan_objmgr_psoc *psoc;
1074*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
1075*5113495bSYour Name 	struct wlan_fwol_tx_ops *tx_ops;
1076*5113495bSYour Name 
1077*5113495bSYour Name 	psoc = wlan_vdev_get_psoc(vdev);
1078*5113495bSYour Name 	if (!psoc) {
1079*5113495bSYour Name 		fwol_err("NULL pointer for psoc");
1080*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
1081*5113495bSYour Name 	}
1082*5113495bSYour Name 
1083*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
1084*5113495bSYour Name 	if (!fwol_obj) {
1085*5113495bSYour Name 		fwol_err("Failed to get FWOL Obj");
1086*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
1087*5113495bSYour Name 	}
1088*5113495bSYour Name 
1089*5113495bSYour Name 	tx_ops = &fwol_obj->tx_ops;
1090*5113495bSYour Name 	if (tx_ops && tx_ops->send_dscp_up_map_to_fw)
1091*5113495bSYour Name 		status = tx_ops->send_dscp_up_map_to_fw(psoc, dscp_to_up_map);
1092*5113495bSYour Name 	else
1093*5113495bSYour Name 		status = QDF_STATUS_E_IO;
1094*5113495bSYour Name 
1095*5113495bSYour Name 	return status;
1096*5113495bSYour Name }
1097*5113495bSYour Name #endif /* WLAN_SEND_DSCP_UP_MAP_TO_FW */
1098*5113495bSYour Name 
1099*5113495bSYour Name #ifdef WLAN_FEATURE_MDNS_OFFLOAD
ucfg_fwol_set_mdns_config(struct wlan_objmgr_psoc * psoc,struct mdns_config_info * mdns_info)1100*5113495bSYour Name QDF_STATUS ucfg_fwol_set_mdns_config(struct wlan_objmgr_psoc *psoc,
1101*5113495bSYour Name 				     struct mdns_config_info *mdns_info)
1102*5113495bSYour Name {
1103*5113495bSYour Name 	QDF_STATUS status;
1104*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
1105*5113495bSYour Name 	struct wlan_fwol_tx_ops *tx_ops;
1106*5113495bSYour Name 
1107*5113495bSYour Name 	if (!psoc) {
1108*5113495bSYour Name 		fwol_err("NULL pointer for psoc");
1109*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
1110*5113495bSYour Name 	}
1111*5113495bSYour Name 
1112*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
1113*5113495bSYour Name 	if (!fwol_obj) {
1114*5113495bSYour Name 		fwol_err("Failed to get FWOL Obj");
1115*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
1116*5113495bSYour Name 	}
1117*5113495bSYour Name 
1118*5113495bSYour Name 	tx_ops = &fwol_obj->tx_ops;
1119*5113495bSYour Name 	if (tx_ops->set_mdns_config)
1120*5113495bSYour Name 		status = tx_ops->set_mdns_config(psoc, mdns_info);
1121*5113495bSYour Name 	else
1122*5113495bSYour Name 		status = QDF_STATUS_E_IO;
1123*5113495bSYour Name 
1124*5113495bSYour Name 	return status;
1125*5113495bSYour Name }
1126*5113495bSYour Name #endif /* WLAN_FEATURE_MDNS_OFFLOAD */
1127*5113495bSYour Name 
ucfg_fwol_update_fw_cap_info(struct wlan_objmgr_psoc * psoc,struct wlan_fwol_capability_info * caps)1128*5113495bSYour Name void ucfg_fwol_update_fw_cap_info(struct wlan_objmgr_psoc *psoc,
1129*5113495bSYour Name 				  struct wlan_fwol_capability_info *caps)
1130*5113495bSYour Name {
1131*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
1132*5113495bSYour Name 
1133*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
1134*5113495bSYour Name 	if (!fwol_obj) {
1135*5113495bSYour Name 		fwol_err("Failed to get fwol obj");
1136*5113495bSYour Name 		return;
1137*5113495bSYour Name 	}
1138*5113495bSYour Name 
1139*5113495bSYour Name 	qdf_mem_copy(&fwol_obj->capability_info, caps,
1140*5113495bSYour Name 		     sizeof(fwol_obj->capability_info));
1141*5113495bSYour Name }
1142*5113495bSYour Name 
1143*5113495bSYour Name #ifdef THERMAL_STATS_SUPPORT
1144*5113495bSYour Name static QDF_STATUS
ucfg_fwol_get_cap(struct wlan_objmgr_psoc * psoc,struct wlan_fwol_capability_info * cap_info)1145*5113495bSYour Name ucfg_fwol_get_cap(struct wlan_objmgr_psoc *psoc,
1146*5113495bSYour Name 		  struct wlan_fwol_capability_info *cap_info)
1147*5113495bSYour Name {
1148*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
1149*5113495bSYour Name 
1150*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
1151*5113495bSYour Name 	if (!fwol_obj) {
1152*5113495bSYour Name 		fwol_err("Failed to get fwol obj");
1153*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1154*5113495bSYour Name 	}
1155*5113495bSYour Name 
1156*5113495bSYour Name 	if (!cap_info) {
1157*5113495bSYour Name 		fwol_err("Failed to get fwol obj");
1158*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1159*5113495bSYour Name 	}
1160*5113495bSYour Name 	*cap_info = fwol_obj->capability_info;
1161*5113495bSYour Name 
1162*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1163*5113495bSYour Name }
1164*5113495bSYour Name 
ucfg_fwol_send_get_thermal_stats_cmd(struct wlan_objmgr_psoc * psoc,enum thermal_stats_request_type req_type,void (* callback)(void * context,struct thermal_throttle_info * response),void * context)1165*5113495bSYour Name QDF_STATUS ucfg_fwol_send_get_thermal_stats_cmd(struct wlan_objmgr_psoc *psoc,
1166*5113495bSYour Name 				       enum thermal_stats_request_type req_type,
1167*5113495bSYour Name 				       void (*callback)(void *context,
1168*5113495bSYour Name 				       struct thermal_throttle_info *response),
1169*5113495bSYour Name 				       void *context)
1170*5113495bSYour Name {
1171*5113495bSYour Name 	QDF_STATUS status;
1172*5113495bSYour Name 	struct wlan_fwol_psoc_obj *fwol_obj;
1173*5113495bSYour Name 	struct wlan_fwol_tx_ops *tx_ops;
1174*5113495bSYour Name 	struct wlan_fwol_thermal_temp thermal_temp = {0};
1175*5113495bSYour Name 	struct wlan_fwol_capability_info cap_info;
1176*5113495bSYour Name 	struct wlan_fwol_callbacks *cbs;
1177*5113495bSYour Name 
1178*5113495bSYour Name 	fwol_obj = fwol_get_psoc_obj(psoc);
1179*5113495bSYour Name 	if (!fwol_obj) {
1180*5113495bSYour Name 		fwol_err("Failed to get FWOL Obj");
1181*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
1182*5113495bSYour Name 	}
1183*5113495bSYour Name 
1184*5113495bSYour Name 	status = ucfg_fwol_get_thermal_temp(psoc, &thermal_temp);
1185*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status))
1186*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
1187*5113495bSYour Name 
1188*5113495bSYour Name 	status = ucfg_fwol_get_cap(psoc, &cap_info);
1189*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status))
1190*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
1191*5113495bSYour Name 
1192*5113495bSYour Name 	if (!thermal_temp.therm_stats_offset ||
1193*5113495bSYour Name 	    !cap_info.fw_thermal_stats_cap) {
1194*5113495bSYour Name 		fwol_err("Command Disabled in Ini gThermalStatsTempOffset %d or not enabled in FW %d",
1195*5113495bSYour Name 			 thermal_temp.therm_stats_offset,
1196*5113495bSYour Name 			 cap_info.fw_thermal_stats_cap);
1197*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
1198*5113495bSYour Name 	}
1199*5113495bSYour Name 
1200*5113495bSYour Name 	/* Registering Callback for the Request command */
1201*5113495bSYour Name 	if (callback && context) {
1202*5113495bSYour Name 		cbs = &fwol_obj->cbs;
1203*5113495bSYour Name 		cbs->get_thermal_stats_callback = callback;
1204*5113495bSYour Name 		cbs->get_thermal_stats_context = context;
1205*5113495bSYour Name 	}
1206*5113495bSYour Name 
1207*5113495bSYour Name 	tx_ops = &fwol_obj->tx_ops;
1208*5113495bSYour Name 	if (tx_ops && tx_ops->get_thermal_stats)
1209*5113495bSYour Name 		status = tx_ops->get_thermal_stats(psoc, req_type,
1210*5113495bSYour Name 					thermal_temp.therm_stats_offset);
1211*5113495bSYour Name 	else
1212*5113495bSYour Name 		status = QDF_STATUS_E_INVAL;
1213*5113495bSYour Name 
1214*5113495bSYour Name 	return status;
1215*5113495bSYour Name }
1216*5113495bSYour Name #endif /* THERMAL_STATS_SUPPORT */
1217*5113495bSYour Name 
ucfg_fwol_configure_global_params(struct wlan_objmgr_psoc * psoc,struct wlan_objmgr_pdev * pdev)1218*5113495bSYour Name QDF_STATUS ucfg_fwol_configure_global_params(struct wlan_objmgr_psoc *psoc,
1219*5113495bSYour Name 					     struct wlan_objmgr_pdev *pdev)
1220*5113495bSYour Name {
1221*5113495bSYour Name 	QDF_STATUS status;
1222*5113495bSYour Name 	uint32_t enable_ilp;
1223*5113495bSYour Name 	bool value;
1224*5113495bSYour Name 
1225*5113495bSYour Name 	/* Configure ILP feature in FW */
1226*5113495bSYour Name 	status = ucfg_fwol_get_ilp_config(psoc, &enable_ilp);
1227*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status))
1228*5113495bSYour Name 		return status;
1229*5113495bSYour Name 	status = fwol_set_ilp_config(pdev, enable_ilp);
1230*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status))
1231*5113495bSYour Name 		return status;
1232*5113495bSYour Name 
1233*5113495bSYour Name 	/* Configure HW assist feature in FW */
1234*5113495bSYour Name 	status = ucfg_fwol_get_hw_assist_config(psoc, &value);
1235*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status))
1236*5113495bSYour Name 		return status;
1237*5113495bSYour Name 	status = fwol_configure_hw_assist(pdev, value);
1238*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status))
1239*5113495bSYour Name 		return status;
1240*5113495bSYour Name 
1241*5113495bSYour Name 	return status;
1242*5113495bSYour Name }
1243*5113495bSYour Name 
ucfg_fwol_set_ilp_config(struct wlan_objmgr_psoc * psoc,struct wlan_objmgr_pdev * pdev,uint32_t enable_ilp)1244*5113495bSYour Name QDF_STATUS ucfg_fwol_set_ilp_config(struct wlan_objmgr_psoc *psoc,
1245*5113495bSYour Name 				    struct wlan_objmgr_pdev *pdev,
1246*5113495bSYour Name 				    uint32_t enable_ilp)
1247*5113495bSYour Name {
1248*5113495bSYour Name 	return fwol_set_ilp_config(pdev, enable_ilp);
1249*5113495bSYour Name }
1250*5113495bSYour Name 
ucfg_fwol_configure_vdev_params(struct wlan_objmgr_psoc * psoc,struct wlan_objmgr_vdev * vdev)1251*5113495bSYour Name QDF_STATUS ucfg_fwol_configure_vdev_params(struct wlan_objmgr_psoc *psoc,
1252*5113495bSYour Name 					   struct wlan_objmgr_vdev *vdev)
1253*5113495bSYour Name {
1254*5113495bSYour Name 	uint32_t value;
1255*5113495bSYour Name 	QDF_STATUS status;
1256*5113495bSYour Name 	uint8_t vdev_id = wlan_vdev_get_id(vdev);
1257*5113495bSYour Name 
1258*5113495bSYour Name 	switch (wlan_vdev_mlme_get_opmode(vdev)) {
1259*5113495bSYour Name 	case QDF_SAP_MODE:
1260*5113495bSYour Name 		status = ucfg_fwol_get_sap_sho(psoc, &value);
1261*5113495bSYour Name 		if (QDF_IS_STATUS_ERROR(status))
1262*5113495bSYour Name 			break;
1263*5113495bSYour Name 
1264*5113495bSYour Name 		status = fwol_set_sap_sho(psoc, vdev_id, value);
1265*5113495bSYour Name 		if (QDF_IS_STATUS_ERROR(status))
1266*5113495bSYour Name 			break;
1267*5113495bSYour Name 
1268*5113495bSYour Name 		status = fwol_set_sap_wds_config(psoc, vdev_id);
1269*5113495bSYour Name 		break;
1270*5113495bSYour Name 	default:
1271*5113495bSYour Name 		status = QDF_STATUS_SUCCESS;
1272*5113495bSYour Name 		break;
1273*5113495bSYour Name 	}
1274*5113495bSYour Name 
1275*5113495bSYour Name 	return status;
1276*5113495bSYour Name }
1277