1 /*
2 * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
3 * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
4 *
5 * Permission to use, copy, modify, and/or distribute this software for
6 * any purpose with or without fee is hereby granted, provided that the
7 * above copyright notice and this permission notice appear in all
8 * copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17 * PERFORMANCE OF THIS SOFTWARE.
18 */
19 /**
20 * DOC: public API related to the pmo called by north bound HDD/OSIF
21 */
22
23 #include "wlan_pmo_ucfg_api.h"
24 #include "wlan_pmo_apf.h"
25 #include "wlan_pmo_arp.h"
26 #include "wlan_pmo_ns.h"
27 #include "wlan_pmo_gtk.h"
28 #include "wlan_pmo_wow.h"
29 #include "wlan_pmo_mc_addr_filtering.h"
30 #include "wlan_pmo_main.h"
31 #include "wlan_pmo_lphb.h"
32 #include "wlan_pmo_suspend_resume.h"
33 #include "wlan_pmo_pkt_filter.h"
34 #include "wlan_pmo_hw_filter.h"
35 #include "wlan_pmo_cfg.h"
36 #include "wlan_pmo_static_config.h"
37 #include "cfg_ucfg_api.h"
38 #include "wlan_pmo_icmp.h"
39
ucfg_pmo_psoc_open(struct wlan_objmgr_psoc * psoc)40 QDF_STATUS ucfg_pmo_psoc_open(struct wlan_objmgr_psoc *psoc)
41 {
42 return pmo_psoc_open(psoc);
43 }
44
ucfg_pmo_psoc_close(struct wlan_objmgr_psoc * psoc)45 QDF_STATUS ucfg_pmo_psoc_close(struct wlan_objmgr_psoc *psoc)
46 {
47 return pmo_psoc_close(psoc);
48 }
49
ucfg_pmo_get_apf_instruction_size(struct wlan_objmgr_psoc * psoc)50 uint32_t ucfg_pmo_get_apf_instruction_size(struct wlan_objmgr_psoc *psoc)
51 {
52 QDF_BUG(psoc);
53 if (!psoc)
54 return 0;
55
56 return pmo_get_apf_instruction_size(psoc);
57 }
58
ucfg_pmo_get_num_wow_filters(struct wlan_objmgr_psoc * psoc)59 uint8_t ucfg_pmo_get_num_wow_filters(struct wlan_objmgr_psoc *psoc)
60 {
61 QDF_BUG(psoc);
62 if (!psoc)
63 return 0;
64
65 return pmo_get_num_wow_filters(psoc);
66 }
67
ucfg_pmo_get_psoc_config(struct wlan_objmgr_psoc * psoc,struct pmo_psoc_cfg * psoc_cfg)68 QDF_STATUS ucfg_pmo_get_psoc_config(struct wlan_objmgr_psoc *psoc,
69 struct pmo_psoc_cfg *psoc_cfg)
70 {
71 return pmo_core_get_psoc_config(psoc, psoc_cfg);
72 }
73
ucfg_pmo_update_psoc_config(struct wlan_objmgr_psoc * psoc,struct pmo_psoc_cfg * psoc_cfg)74 QDF_STATUS ucfg_pmo_update_psoc_config(struct wlan_objmgr_psoc *psoc,
75 struct pmo_psoc_cfg *psoc_cfg)
76 {
77 return pmo_core_update_psoc_config(psoc, psoc_cfg);
78 }
79
ucfg_pmo_psoc_set_caps(struct wlan_objmgr_psoc * psoc,struct pmo_device_caps * caps)80 QDF_STATUS ucfg_pmo_psoc_set_caps(struct wlan_objmgr_psoc *psoc,
81 struct pmo_device_caps *caps)
82 {
83 QDF_BUG(psoc);
84 if (!psoc)
85 return QDF_STATUS_E_INVAL;
86
87 QDF_BUG(caps);
88 if (!caps)
89 return QDF_STATUS_E_INVAL;
90
91 pmo_psoc_set_caps(psoc, caps);
92
93 return QDF_STATUS_SUCCESS;
94 }
95
ucfg_pmo_is_ap_mode_supports_arp_ns(struct wlan_objmgr_psoc * psoc,enum QDF_OPMODE vdev_opmode)96 bool ucfg_pmo_is_ap_mode_supports_arp_ns(struct wlan_objmgr_psoc *psoc,
97 enum QDF_OPMODE vdev_opmode)
98 {
99 return pmo_core_is_ap_mode_supports_arp_ns(psoc, vdev_opmode);
100 }
101
ucfg_pmo_is_vdev_connected(struct wlan_objmgr_vdev * vdev)102 bool ucfg_pmo_is_vdev_connected(struct wlan_objmgr_vdev *vdev)
103 {
104 if (wlan_vdev_is_up(vdev) == QDF_STATUS_SUCCESS)
105 return true;
106 else
107 return false;
108 }
109
ucfg_pmo_is_vdev_supports_offload(struct wlan_objmgr_vdev * vdev)110 bool ucfg_pmo_is_vdev_supports_offload(struct wlan_objmgr_vdev *vdev)
111 {
112 return pmo_core_is_vdev_supports_offload(vdev);
113 }
114
ucfg_pmo_enable_wakeup_event(struct wlan_objmgr_psoc * psoc,uint32_t vdev_id,WOW_WAKE_EVENT_TYPE wow_event)115 void ucfg_pmo_enable_wakeup_event(struct wlan_objmgr_psoc *psoc,
116 uint32_t vdev_id,
117 WOW_WAKE_EVENT_TYPE wow_event)
118 {
119 pmo_core_enable_wakeup_event(psoc, vdev_id, wow_event);
120 }
121
ucfg_pmo_disable_wakeup_event(struct wlan_objmgr_psoc * psoc,uint32_t vdev_id,WOW_WAKE_EVENT_TYPE wow_event)122 void ucfg_pmo_disable_wakeup_event(struct wlan_objmgr_psoc *psoc,
123 uint32_t vdev_id,
124 WOW_WAKE_EVENT_TYPE wow_event)
125 {
126 pmo_core_disable_wakeup_event(psoc, vdev_id, wow_event);
127 }
128
ucfg_pmo_cache_arp_offload_req(struct pmo_arp_req * arp_req)129 QDF_STATUS ucfg_pmo_cache_arp_offload_req(struct pmo_arp_req *arp_req)
130 {
131 return pmo_core_cache_arp_offload_req(arp_req);
132 }
133
ucfg_pmo_check_arp_offload(struct wlan_objmgr_psoc * psoc,enum pmo_offload_trigger trigger,uint8_t vdev_id)134 QDF_STATUS ucfg_pmo_check_arp_offload(struct wlan_objmgr_psoc *psoc,
135 enum pmo_offload_trigger trigger,
136 uint8_t vdev_id)
137 {
138 return pmo_core_arp_check_offload(psoc, trigger, vdev_id);
139 }
140
ucfg_pmo_flush_arp_offload_req(struct wlan_objmgr_vdev * vdev)141 QDF_STATUS ucfg_pmo_flush_arp_offload_req(struct wlan_objmgr_vdev *vdev)
142 {
143 return pmo_core_flush_arp_offload_req(vdev);
144 }
145
ucfg_pmo_enable_arp_offload_in_fwr(struct wlan_objmgr_vdev * vdev,enum pmo_offload_trigger trigger)146 QDF_STATUS ucfg_pmo_enable_arp_offload_in_fwr(struct wlan_objmgr_vdev *vdev,
147 enum pmo_offload_trigger trigger)
148 {
149 return pmo_core_enable_arp_offload_in_fwr(vdev, trigger);
150 }
151
152 QDF_STATUS
ucfg_pmo_disable_arp_offload_in_fwr(struct wlan_objmgr_vdev * vdev,enum pmo_offload_trigger trigger)153 ucfg_pmo_disable_arp_offload_in_fwr(struct wlan_objmgr_vdev *vdev,
154 enum pmo_offload_trigger trigger)
155 {
156 return pmo_core_disable_arp_offload_in_fwr(vdev, trigger);
157 }
158
159 QDF_STATUS
ucfg_pmo_get_arp_offload_params(struct wlan_objmgr_vdev * vdev,struct pmo_arp_offload_params * params)160 ucfg_pmo_get_arp_offload_params(struct wlan_objmgr_vdev *vdev,
161 struct pmo_arp_offload_params *params)
162 {
163 return pmo_core_get_arp_offload_params(vdev, params);
164 }
165
166 #ifdef WLAN_NS_OFFLOAD
ucfg_pmo_cache_ns_offload_req(struct pmo_ns_req * ns_req)167 QDF_STATUS ucfg_pmo_cache_ns_offload_req(struct pmo_ns_req *ns_req)
168 {
169 return pmo_core_cache_ns_offload_req(ns_req);
170 }
171
ucfg_pmo_ns_offload_check(struct wlan_objmgr_psoc * psoc,enum pmo_offload_trigger trigger,uint8_t vdev_id)172 QDF_STATUS ucfg_pmo_ns_offload_check(struct wlan_objmgr_psoc *psoc,
173 enum pmo_offload_trigger trigger,
174 uint8_t vdev_id)
175 {
176 return pmo_core_ns_check_offload(psoc, trigger, vdev_id);
177 }
178
ucfg_pmo_flush_ns_offload_req(struct wlan_objmgr_vdev * vdev)179 QDF_STATUS ucfg_pmo_flush_ns_offload_req(struct wlan_objmgr_vdev *vdev)
180 {
181 return pmo_core_flush_ns_offload_req(vdev);
182 }
183
184 QDF_STATUS
ucfg_pmo_enable_ns_offload_in_fwr(struct wlan_objmgr_vdev * vdev,enum pmo_offload_trigger trigger)185 ucfg_pmo_enable_ns_offload_in_fwr(struct wlan_objmgr_vdev *vdev,
186 enum pmo_offload_trigger trigger)
187 {
188 return pmo_core_enable_ns_offload_in_fwr(vdev, trigger);
189 }
190
191 QDF_STATUS
ucfg_pmo_disable_ns_offload_in_fwr(struct wlan_objmgr_vdev * vdev,enum pmo_offload_trigger trigger)192 ucfg_pmo_disable_ns_offload_in_fwr(struct wlan_objmgr_vdev *vdev,
193 enum pmo_offload_trigger trigger)
194 {
195 return pmo_core_disable_ns_offload_in_fwr(vdev, trigger);
196 }
197 #endif /* WLAN_NS_OFFLOAD */
198
199 #ifdef FEATURE_WLAN_DYNAMIC_ARP_NS_OFFLOAD
200 QDF_STATUS
ucfg_pmo_dynamic_arp_ns_offload_enable(struct wlan_objmgr_vdev * vdev)201 ucfg_pmo_dynamic_arp_ns_offload_enable(struct wlan_objmgr_vdev *vdev)
202 {
203 return pmo_core_dynamic_arp_ns_offload_enable(vdev);
204 }
205
206 QDF_STATUS
ucfg_pmo_dynamic_arp_ns_offload_disable(struct wlan_objmgr_vdev * vdev)207 ucfg_pmo_dynamic_arp_ns_offload_disable(struct wlan_objmgr_vdev *vdev)
208 {
209 return pmo_core_dynamic_arp_ns_offload_disable(vdev);
210 }
211
212 bool
ucfg_pmo_get_arp_ns_offload_dynamic_disable(struct wlan_objmgr_vdev * vdev)213 ucfg_pmo_get_arp_ns_offload_dynamic_disable(struct wlan_objmgr_vdev *vdev)
214 {
215 return pmo_core_get_dynamic_arp_ns_offload_disable(vdev);
216 }
217
218 void
ucfg_pmo_dynamic_arp_ns_offload_runtime_prevent(struct wlan_objmgr_vdev * vdev)219 ucfg_pmo_dynamic_arp_ns_offload_runtime_prevent(struct wlan_objmgr_vdev *vdev)
220 {
221 return pmo_core_dynamic_arp_ns_offload_runtime_prevent(vdev);
222 }
223
224 void
ucfg_pmo_dynamic_arp_ns_offload_runtime_allow(struct wlan_objmgr_vdev * vdev)225 ucfg_pmo_dynamic_arp_ns_offload_runtime_allow(struct wlan_objmgr_vdev *vdev)
226 {
227 return pmo_core_dynamic_arp_ns_offload_runtime_allow(vdev);
228 }
229 #endif
230
231 QDF_STATUS
ucfg_pmo_get_ns_offload_params(struct wlan_objmgr_vdev * vdev,struct pmo_ns_offload_params * params)232 ucfg_pmo_get_ns_offload_params(struct wlan_objmgr_vdev *vdev,
233 struct pmo_ns_offload_params *params)
234 {
235 return pmo_core_get_ns_offload_params(vdev, params);
236 }
237
238 enum pmo_ns_addr_scope
ucfg_pmo_ns_addr_scope(uint32_t ipv6_scope)239 ucfg_pmo_ns_addr_scope(uint32_t ipv6_scope)
240 {
241 switch (ipv6_scope) {
242 case IPV6_ADDR_SCOPE_NODELOCAL:
243 return PMO_NS_ADDR_SCOPE_NODELOCAL;
244 case IPV6_ADDR_SCOPE_LINKLOCAL:
245 return PMO_NS_ADDR_SCOPE_LINKLOCAL;
246 case IPV6_ADDR_SCOPE_SITELOCAL:
247 return PMO_NS_ADDR_SCOPE_SITELOCAL;
248 case IPV6_ADDR_SCOPE_ORGLOCAL:
249 return PMO_NS_ADDR_SCOPE_ORGLOCAL;
250 case IPV6_ADDR_SCOPE_GLOBAL:
251 return PMO_NS_ADDR_SCOPE_GLOBAL;
252 }
253
254 return PMO_NS_ADDR_SCOPE_INVALID;
255 }
256
ucfg_pmo_cache_mc_addr_list(struct pmo_mc_addr_list_params * mc_list_config)257 QDF_STATUS ucfg_pmo_cache_mc_addr_list(
258 struct pmo_mc_addr_list_params *mc_list_config)
259 {
260 return pmo_core_cache_mc_addr_list(mc_list_config);
261 }
262
ucfg_pmo_flush_mc_addr_list(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id)263 QDF_STATUS ucfg_pmo_flush_mc_addr_list(struct wlan_objmgr_psoc *psoc,
264 uint8_t vdev_id)
265 {
266 return pmo_core_flush_mc_addr_list(psoc, vdev_id);
267 }
268
ucfg_pmo_enable_mc_addr_filtering_in_fwr(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,enum pmo_offload_trigger trigger)269 QDF_STATUS ucfg_pmo_enable_mc_addr_filtering_in_fwr(
270 struct wlan_objmgr_psoc *psoc,
271 uint8_t vdev_id,
272 enum pmo_offload_trigger trigger)
273 {
274 return pmo_core_enable_mc_addr_filtering_in_fwr(psoc,
275 vdev_id, trigger);
276 }
277
ucfg_pmo_disable_mc_addr_filtering_in_fwr(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,enum pmo_offload_trigger trigger)278 QDF_STATUS ucfg_pmo_disable_mc_addr_filtering_in_fwr(
279 struct wlan_objmgr_psoc *psoc,
280 uint8_t vdev_id,
281 enum pmo_offload_trigger trigger)
282 {
283 return pmo_core_disable_mc_addr_filtering_in_fwr(psoc,
284 vdev_id, trigger);
285 }
286
ucfg_pmo_max_mc_addr_supported(struct wlan_objmgr_psoc * psoc)287 uint8_t ucfg_pmo_max_mc_addr_supported(struct wlan_objmgr_psoc *psoc)
288 {
289 return pmo_core_max_mc_addr_supported(psoc);
290 }
291
292 QDF_STATUS
ucfg_pmo_get_mc_addr_list(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,struct pmo_mc_addr_list * mc_list_req)293 ucfg_pmo_get_mc_addr_list(struct wlan_objmgr_psoc *psoc,
294 uint8_t vdev_id,
295 struct pmo_mc_addr_list *mc_list_req)
296 {
297 return pmo_core_get_mc_addr_list(psoc, vdev_id, mc_list_req);
298 }
299
300 QDF_STATUS
ucfg_pmo_cache_gtk_offload_req(struct wlan_objmgr_vdev * vdev,struct pmo_gtk_req * gtk_req)301 ucfg_pmo_cache_gtk_offload_req(struct wlan_objmgr_vdev *vdev,
302 struct pmo_gtk_req *gtk_req)
303 {
304 return pmo_core_cache_gtk_offload_req(vdev, gtk_req);
305 }
306
ucfg_pmo_flush_gtk_offload_req(struct wlan_objmgr_vdev * vdev)307 QDF_STATUS ucfg_pmo_flush_gtk_offload_req(struct wlan_objmgr_vdev *vdev)
308 {
309 return pmo_core_flush_gtk_offload_req(vdev);
310 }
311
ucfg_pmo_enable_gtk_offload_in_fwr(struct wlan_objmgr_vdev * vdev)312 QDF_STATUS ucfg_pmo_enable_gtk_offload_in_fwr(struct wlan_objmgr_vdev *vdev)
313 {
314 return pmo_core_enable_gtk_offload_in_fwr(vdev);
315 }
316
317 #ifdef WLAN_FEATURE_IGMP_OFFLOAD
ucfg_pmo_enable_igmp_offload(struct wlan_objmgr_vdev * vdev,struct pmo_igmp_offload_req * igmp_req)318 QDF_STATUS ucfg_pmo_enable_igmp_offload(struct wlan_objmgr_vdev *vdev,
319 struct pmo_igmp_offload_req *igmp_req)
320 {
321 return pmo_core_enable_igmp_offload(vdev, igmp_req);
322 }
323 #endif
324
ucfg_pmo_disable_gtk_offload_in_fwr(struct wlan_objmgr_vdev * vdev)325 QDF_STATUS ucfg_pmo_disable_gtk_offload_in_fwr(struct wlan_objmgr_vdev *vdev)
326 {
327 return pmo_core_disable_gtk_offload_in_fwr(vdev);
328 }
329
330 #ifdef WLAN_FEATURE_PACKET_FILTERING
ucfg_pmo_get_pkt_filter_bitmap(struct wlan_objmgr_psoc * psoc)331 uint8_t ucfg_pmo_get_pkt_filter_bitmap(struct wlan_objmgr_psoc *psoc)
332 {
333 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
334
335 return pmo_psoc_ctx->psoc_cfg.packet_filters_bitmap;
336 }
337
ucfg_pmo_get_num_packet_filters(struct wlan_objmgr_psoc * psoc)338 uint32_t ucfg_pmo_get_num_packet_filters(struct wlan_objmgr_psoc *psoc)
339 {
340 QDF_BUG(psoc);
341 if (!psoc)
342 return 0;
343
344 return pmo_get_num_packet_filters(psoc);
345 }
346
347 QDF_STATUS
ucfg_pmo_set_pkt_filter(struct wlan_objmgr_psoc * psoc,struct pmo_rcv_pkt_fltr_cfg * pmo_set_pkt_fltr_req,uint8_t vdev_id)348 ucfg_pmo_set_pkt_filter(struct wlan_objmgr_psoc *psoc,
349 struct pmo_rcv_pkt_fltr_cfg *pmo_set_pkt_fltr_req,
350 uint8_t vdev_id)
351 {
352 return pmo_core_set_pkt_filter(psoc, pmo_set_pkt_fltr_req, vdev_id);
353 }
354
ucfg_pmo_clear_pkt_filter(struct wlan_objmgr_psoc * psoc,struct pmo_rcv_pkt_fltr_clear_param * pmo_clr_pkt_fltr_param,uint8_t vdev_id)355 QDF_STATUS ucfg_pmo_clear_pkt_filter(
356 struct wlan_objmgr_psoc *psoc,
357 struct pmo_rcv_pkt_fltr_clear_param *pmo_clr_pkt_fltr_param,
358 uint8_t vdev_id)
359 {
360 return pmo_core_clear_pkt_filter(psoc,
361 pmo_clr_pkt_fltr_param, vdev_id);
362 }
363 #endif
364
ucfg_pmo_get_gtk_rsp(struct wlan_objmgr_vdev * vdev,struct pmo_gtk_rsp_req * gtk_rsp_req)365 QDF_STATUS ucfg_pmo_get_gtk_rsp(struct wlan_objmgr_vdev *vdev,
366 struct pmo_gtk_rsp_req *gtk_rsp_req)
367 {
368 return pmo_core_get_gtk_rsp(vdev, gtk_rsp_req);
369 }
370
ucfg_pmo_update_extscan_in_progress(struct wlan_objmgr_vdev * vdev,bool value)371 void ucfg_pmo_update_extscan_in_progress(struct wlan_objmgr_vdev *vdev,
372 bool value)
373 {
374 pmo_core_update_extscan_in_progress(vdev, value);
375 }
376
ucfg_pmo_update_p2plo_in_progress(struct wlan_objmgr_vdev * vdev,bool value)377 void ucfg_pmo_update_p2plo_in_progress(struct wlan_objmgr_vdev *vdev,
378 bool value)
379 {
380 pmo_core_update_p2plo_in_progress(vdev, value);
381 }
382
ucfg_pmo_lphb_config_req(struct wlan_objmgr_psoc * psoc,struct pmo_lphb_req * lphb_req,void * lphb_cb_ctx,pmo_lphb_callback callback)383 QDF_STATUS ucfg_pmo_lphb_config_req(struct wlan_objmgr_psoc *psoc,
384 struct pmo_lphb_req *lphb_req,
385 void *lphb_cb_ctx,
386 pmo_lphb_callback callback)
387 {
388 return pmo_core_lphb_config_req(psoc, lphb_req, lphb_cb_ctx, callback);
389 }
390
ucfg_pmo_psoc_update_power_save_mode(struct wlan_objmgr_psoc * psoc,uint8_t value)391 void ucfg_pmo_psoc_update_power_save_mode(struct wlan_objmgr_psoc *psoc,
392 uint8_t value)
393 {
394 pmo_core_psoc_update_power_save_mode(psoc, value);
395 }
396
ucfg_pmo_psoc_update_dp_handle(struct wlan_objmgr_psoc * psoc,void * dp_handle)397 void ucfg_pmo_psoc_update_dp_handle(struct wlan_objmgr_psoc *psoc,
398 void *dp_handle)
399 {
400 pmo_core_psoc_update_dp_handle(psoc, dp_handle);
401 }
402
ucfg_pmo_psoc_update_htc_handle(struct wlan_objmgr_psoc * psoc,void * htc_handle)403 void ucfg_pmo_psoc_update_htc_handle(struct wlan_objmgr_psoc *psoc,
404 void *htc_handle)
405 {
406 pmo_core_psoc_update_htc_handle(psoc, htc_handle);
407 }
408
ucfg_pmo_psoc_set_hif_handle(struct wlan_objmgr_psoc * psoc,void * hif_handle)409 void ucfg_pmo_psoc_set_hif_handle(struct wlan_objmgr_psoc *psoc,
410 void *hif_handle)
411 {
412 pmo_core_psoc_set_hif_handle(psoc, hif_handle);
413 }
414
ucfg_pmo_psoc_set_txrx_pdev_id(struct wlan_objmgr_psoc * psoc,uint8_t txrx_pdev_id)415 void ucfg_pmo_psoc_set_txrx_pdev_id(struct wlan_objmgr_psoc *psoc,
416 uint8_t txrx_pdev_id)
417 {
418 pmo_core_psoc_set_txrx_pdev_id(psoc, txrx_pdev_id);
419 }
420
ucfg_pmo_psoc_handle_initial_wake_up(void * cb_ctx)421 void ucfg_pmo_psoc_handle_initial_wake_up(void *cb_ctx)
422 {
423 return pmo_core_psoc_handle_initial_wake_up(cb_ctx);
424 }
425
426 QDF_STATUS
ucfg_pmo_psoc_user_space_suspend_req(struct wlan_objmgr_psoc * psoc,enum qdf_suspend_type type)427 ucfg_pmo_psoc_user_space_suspend_req(struct wlan_objmgr_psoc *psoc,
428 enum qdf_suspend_type type)
429 {
430 return pmo_core_psoc_user_space_suspend_req(psoc, type);
431 }
432
433 QDF_STATUS
ucfg_pmo_psoc_user_space_resume_req(struct wlan_objmgr_psoc * psoc,enum qdf_suspend_type type)434 ucfg_pmo_psoc_user_space_resume_req(struct wlan_objmgr_psoc *psoc,
435 enum qdf_suspend_type type)
436 {
437 return pmo_core_psoc_user_space_resume_req(psoc, type);
438 }
439
ucfg_pmo_suspend_all_components(struct wlan_objmgr_psoc * psoc,enum qdf_suspend_type type)440 QDF_STATUS ucfg_pmo_suspend_all_components(struct wlan_objmgr_psoc *psoc,
441 enum qdf_suspend_type type)
442 {
443 return pmo_suspend_all_components(psoc, type);
444 }
445
ucfg_pmo_resume_all_components(struct wlan_objmgr_psoc * psoc,enum qdf_suspend_type type)446 QDF_STATUS ucfg_pmo_resume_all_components(struct wlan_objmgr_psoc *psoc,
447 enum qdf_suspend_type type)
448 {
449 return pmo_resume_all_components(psoc, type);
450 }
451
452 QDF_STATUS
ucfg_pmo_psoc_bus_suspend_req(struct wlan_objmgr_psoc * psoc,enum qdf_suspend_type type,struct pmo_wow_enable_params * wow_params)453 ucfg_pmo_psoc_bus_suspend_req(struct wlan_objmgr_psoc *psoc,
454 enum qdf_suspend_type type,
455 struct pmo_wow_enable_params *wow_params)
456 {
457 return pmo_core_psoc_bus_suspend_req(psoc, type, wow_params);
458 }
459
460 #ifdef FEATURE_RUNTIME_PM
ucfg_pmo_psoc_bus_runtime_suspend(struct wlan_objmgr_psoc * psoc,pmo_pld_auto_suspend_cb pld_cb)461 QDF_STATUS ucfg_pmo_psoc_bus_runtime_suspend(struct wlan_objmgr_psoc *psoc,
462 pmo_pld_auto_suspend_cb pld_cb)
463 {
464 return pmo_core_psoc_bus_runtime_suspend(psoc, pld_cb);
465 }
466
ucfg_pmo_psoc_bus_runtime_resume(struct wlan_objmgr_psoc * psoc,pmo_pld_auto_suspend_cb pld_cb)467 QDF_STATUS ucfg_pmo_psoc_bus_runtime_resume(struct wlan_objmgr_psoc *psoc,
468 pmo_pld_auto_suspend_cb pld_cb)
469 {
470 return pmo_core_psoc_bus_runtime_resume(psoc, pld_cb);
471 }
472 #endif
473
474 QDF_STATUS
ucfg_pmo_psoc_suspend_target(struct wlan_objmgr_psoc * psoc,int disable_target_intr)475 ucfg_pmo_psoc_suspend_target(struct wlan_objmgr_psoc *psoc,
476 int disable_target_intr)
477 {
478 return pmo_core_psoc_suspend_target(psoc, disable_target_intr);
479 }
480
481 QDF_STATUS
ucfg_pmo_add_wow_user_pattern(struct wlan_objmgr_vdev * vdev,struct pmo_wow_add_pattern * ptrn)482 ucfg_pmo_add_wow_user_pattern(struct wlan_objmgr_vdev *vdev,
483 struct pmo_wow_add_pattern *ptrn)
484 {
485 return pmo_core_add_wow_user_pattern(vdev, ptrn);
486 }
487
ucfg_pmo_register_wow_default_patterns(struct wlan_objmgr_vdev * vdev)488 void ucfg_pmo_register_wow_default_patterns(struct wlan_objmgr_vdev *vdev)
489 {
490 pmo_register_wow_default_patterns(vdev);
491 }
492
493 QDF_STATUS
ucfg_pmo_del_wow_pattern(struct wlan_objmgr_vdev * vdev)494 ucfg_pmo_del_wow_pattern(struct wlan_objmgr_vdev *vdev)
495 {
496 return pmo_core_del_wow_pattern(vdev);
497 }
498
499 QDF_STATUS
ucfg_pmo_del_wow_user_pattern(struct wlan_objmgr_vdev * vdev,uint8_t pattern_id)500 ucfg_pmo_del_wow_user_pattern(struct wlan_objmgr_vdev *vdev,
501 uint8_t pattern_id)
502 {
503 return pmo_core_del_wow_user_pattern(vdev, pattern_id);
504 }
505
506 QDF_STATUS
ucfg_pmo_psoc_bus_resume_req(struct wlan_objmgr_psoc * psoc,enum qdf_suspend_type type)507 ucfg_pmo_psoc_bus_resume_req(struct wlan_objmgr_psoc *psoc,
508 enum qdf_suspend_type type)
509 {
510 return pmo_core_psoc_bus_resume_req(psoc, type);
511 }
512
ucfg_pmo_get_wow_bus_suspend(struct wlan_objmgr_psoc * psoc)513 bool ucfg_pmo_get_wow_bus_suspend(struct wlan_objmgr_psoc *psoc)
514 {
515 return pmo_core_get_wow_bus_suspend(psoc);
516 }
517
ucfg_pmo_psoc_is_target_wake_up_received(struct wlan_objmgr_psoc * psoc)518 int ucfg_pmo_psoc_is_target_wake_up_received(struct wlan_objmgr_psoc *psoc)
519 {
520 return pmo_core_psoc_is_target_wake_up_received(psoc);
521 }
522
ucfg_pmo_psoc_clear_target_wake_up(struct wlan_objmgr_psoc * psoc)523 int ucfg_pmo_psoc_clear_target_wake_up(struct wlan_objmgr_psoc *psoc)
524 {
525 return pmo_core_psoc_clear_target_wake_up(psoc);
526 }
527
ucfg_pmo_psoc_target_suspend_acknowledge(void * context,bool wow_nack,uint16_t reason_code)528 void ucfg_pmo_psoc_target_suspend_acknowledge(void *context, bool wow_nack,
529 uint16_t reason_code)
530 {
531 pmo_core_psoc_target_suspend_acknowledge(context, wow_nack,
532 reason_code);
533 }
534
ucfg_pmo_psoc_wakeup_host_event_received(struct wlan_objmgr_psoc * psoc)535 void ucfg_pmo_psoc_wakeup_host_event_received(struct wlan_objmgr_psoc *psoc)
536 {
537 pmo_core_psoc_wakeup_host_event_received(psoc);
538 }
539
ucfg_pmo_enable_hw_filter_in_fwr(struct wlan_objmgr_vdev * vdev)540 QDF_STATUS ucfg_pmo_enable_hw_filter_in_fwr(struct wlan_objmgr_vdev *vdev)
541 {
542 return pmo_core_enable_hw_filter_in_fwr(vdev);
543 }
544
545 QDF_STATUS
ucfg_pmo_enable_action_frame_patterns(struct wlan_objmgr_vdev * vdev,enum qdf_suspend_type suspend_type)546 ucfg_pmo_enable_action_frame_patterns(struct wlan_objmgr_vdev *vdev,
547 enum qdf_suspend_type suspend_type)
548 {
549 return pmo_register_action_frame_patterns(vdev, suspend_type);
550 }
551
ucfg_pmo_disable_action_frame_patterns(struct wlan_objmgr_vdev * vdev)552 QDF_STATUS ucfg_pmo_disable_action_frame_patterns(struct wlan_objmgr_vdev *vdev)
553 {
554 return pmo_clear_action_frame_patterns(vdev);
555 }
556
ucfg_pmo_disable_hw_filter_in_fwr(struct wlan_objmgr_vdev * vdev)557 QDF_STATUS ucfg_pmo_disable_hw_filter_in_fwr(struct wlan_objmgr_vdev *vdev)
558 {
559 return pmo_core_disable_hw_filter_in_fwr(vdev);
560 }
561
ucfg_pmo_config_listen_interval(struct wlan_objmgr_vdev * vdev,uint32_t listen_interval)562 QDF_STATUS ucfg_pmo_config_listen_interval(struct wlan_objmgr_vdev *vdev,
563 uint32_t listen_interval)
564 {
565 return pmo_core_config_listen_interval(vdev, listen_interval);
566 }
567
ucfg_pmo_get_listen_interval(struct wlan_objmgr_vdev * vdev,uint32_t * listen_interval)568 QDF_STATUS ucfg_pmo_get_listen_interval(struct wlan_objmgr_vdev *vdev,
569 uint32_t *listen_interval)
570 {
571 return pmo_core_get_listen_interval(vdev, listen_interval);
572 }
573
ucfg_pmo_config_modulated_dtim(struct wlan_objmgr_vdev * vdev,uint32_t mod_dtim)574 QDF_STATUS ucfg_pmo_config_modulated_dtim(struct wlan_objmgr_vdev *vdev,
575 uint32_t mod_dtim)
576 {
577 return pmo_core_config_modulated_dtim(vdev, mod_dtim);
578 }
579
580 enum pmo_wow_enable_type
ucfg_pmo_get_wow_enable(struct wlan_objmgr_psoc * psoc)581 ucfg_pmo_get_wow_enable(struct wlan_objmgr_psoc *psoc)
582 {
583 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
584
585 return pmo_psoc_ctx->psoc_cfg.wow_enable;
586 }
587
588 void
ucfg_pmo_set_wow_enable(struct wlan_objmgr_psoc * psoc,enum pmo_wow_enable_type val)589 ucfg_pmo_set_wow_enable(struct wlan_objmgr_psoc *psoc,
590 enum pmo_wow_enable_type val)
591 {
592 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
593
594 pmo_psoc_ctx->psoc_cfg.wow_enable = val;
595 }
596
597 void
ucfg_pmo_set_ps_params(struct wlan_objmgr_vdev * vdev,struct pmo_ps_params * ps_params)598 ucfg_pmo_set_ps_params(struct wlan_objmgr_vdev *vdev,
599 struct pmo_ps_params *ps_params)
600 {
601 pmo_core_vdev_set_ps_params(vdev, ps_params);
602 }
603
ucfg_pmo_get_ps_params(struct wlan_objmgr_vdev * vdev,struct pmo_ps_params * ps_params)604 QDF_STATUS ucfg_pmo_get_ps_params(struct wlan_objmgr_vdev *vdev,
605 struct pmo_ps_params *ps_params)
606 {
607 return pmo_core_vdev_get_ps_params(vdev, ps_params);
608 }
609
ucfg_pmo_core_vdev_set_ps_opm_mode(struct wlan_objmgr_vdev * vdev,enum powersave_mode opm_mode)610 QDF_STATUS ucfg_pmo_core_vdev_set_ps_opm_mode(struct wlan_objmgr_vdev *vdev,
611 enum powersave_mode opm_mode)
612 {
613 return pmo_vdev_set_ps_opm_mode(vdev, opm_mode);
614 }
615
ucfg_pmo_core_vdev_get_ps_opm_mode(struct wlan_objmgr_vdev * vdev,enum powersave_mode * opm_mode)616 QDF_STATUS ucfg_pmo_core_vdev_get_ps_opm_mode(struct wlan_objmgr_vdev *vdev,
617 enum powersave_mode *opm_mode)
618 {
619 return pmo_vdev_get_ps_opm_mode(vdev, opm_mode);
620 }
621
622 bool
ucfg_pmo_is_arp_offload_enabled(struct wlan_objmgr_psoc * psoc)623 ucfg_pmo_is_arp_offload_enabled(struct wlan_objmgr_psoc *psoc)
624 {
625 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
626
627 return pmo_psoc_ctx->psoc_cfg.arp_offload_enable;
628 }
629
630 #ifdef WLAN_FEATURE_IGMP_OFFLOAD
631 bool
ucfg_pmo_is_igmp_offload_enabled(struct wlan_objmgr_psoc * psoc)632 ucfg_pmo_is_igmp_offload_enabled(struct wlan_objmgr_psoc *psoc)
633 {
634 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
635
636 return pmo_psoc_ctx->psoc_cfg.igmp_offload_enable;
637 }
638 #endif
639
640 void
ucfg_pmo_set_arp_offload_enabled(struct wlan_objmgr_psoc * psoc,bool val)641 ucfg_pmo_set_arp_offload_enabled(struct wlan_objmgr_psoc *psoc,
642 bool val)
643 {
644 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
645
646 pmo_psoc_ctx->psoc_cfg.arp_offload_enable = val;
647 }
648
649 #ifdef WLAN_FEATURE_IGMP_OFFLOAD
650 void
ucfg_pmo_set_igmp_offload_enabled(struct wlan_objmgr_psoc * psoc,bool val)651 ucfg_pmo_set_igmp_offload_enabled(struct wlan_objmgr_psoc *psoc,
652 bool val)
653 {
654 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
655
656 pmo_psoc_ctx->psoc_cfg.igmp_offload_enable = val;
657 }
658 #endif
659
660 enum pmo_auto_pwr_detect_failure_mode
ucfg_pmo_get_auto_power_fail_mode(struct wlan_objmgr_psoc * psoc)661 ucfg_pmo_get_auto_power_fail_mode(struct wlan_objmgr_psoc *psoc)
662 {
663 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
664
665 return pmo_psoc_ctx->psoc_cfg.auto_power_save_fail_mode;
666 }
667
668 #ifdef WLAN_FEATURE_WOW_PULSE
ucfg_pmo_is_wow_pulse_enabled(struct wlan_objmgr_psoc * psoc)669 bool ucfg_pmo_is_wow_pulse_enabled(struct wlan_objmgr_psoc *psoc)
670 {
671 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
672
673 return pmo_psoc_ctx->psoc_cfg.is_wow_pulse_supported;
674 }
675
ucfg_pmo_get_wow_pulse_pin(struct wlan_objmgr_psoc * psoc)676 uint8_t ucfg_pmo_get_wow_pulse_pin(struct wlan_objmgr_psoc *psoc)
677 {
678 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
679
680 return pmo_psoc_ctx->psoc_cfg.wow_pulse_pin;
681 }
682
ucfg_pmo_get_wow_pulse_interval_high(struct wlan_objmgr_psoc * psoc)683 uint16_t ucfg_pmo_get_wow_pulse_interval_high(struct wlan_objmgr_psoc *psoc)
684 {
685 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
686
687 return pmo_psoc_ctx->psoc_cfg.wow_pulse_interval_high;
688 }
689
ucfg_pmo_get_wow_pulse_interval_low(struct wlan_objmgr_psoc * psoc)690 uint16_t ucfg_pmo_get_wow_pulse_interval_low(struct wlan_objmgr_psoc *psoc)
691 {
692 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
693
694 return pmo_psoc_ctx->psoc_cfg.wow_pulse_interval_low;
695 }
696
ucfg_pmo_get_wow_pulse_repeat_count(struct wlan_objmgr_psoc * psoc)697 uint32_t ucfg_pmo_get_wow_pulse_repeat_count(struct wlan_objmgr_psoc *psoc)
698 {
699 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
700
701 return pmo_psoc_ctx->psoc_cfg.wow_pulse_repeat_count;
702 }
703
ucfg_pmo_get_wow_pulse_init_state(struct wlan_objmgr_psoc * psoc)704 uint32_t ucfg_pmo_get_wow_pulse_init_state(struct wlan_objmgr_psoc *psoc)
705 {
706 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
707
708 return pmo_psoc_ctx->psoc_cfg.wow_pulse_init_state;
709 }
710 #endif
711
ucfg_pmo_is_active_mode_offloaded(struct wlan_objmgr_psoc * psoc)712 bool ucfg_pmo_is_active_mode_offloaded(struct wlan_objmgr_psoc *psoc)
713 {
714 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
715
716 return pmo_psoc_ctx->psoc_cfg.active_mode_offload;
717 }
718
719 #ifdef FEATURE_WLAN_APF
ucfg_pmo_is_apf_enabled(struct wlan_objmgr_psoc * psoc)720 bool ucfg_pmo_is_apf_enabled(struct wlan_objmgr_psoc *psoc)
721 {
722 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
723
724 return pmo_intersect_apf(pmo_psoc_ctx);
725 }
726 #endif
727
728 bool
ucfg_pmo_is_ssdp_enabled(struct wlan_objmgr_psoc * psoc)729 ucfg_pmo_is_ssdp_enabled(struct wlan_objmgr_psoc *psoc)
730 {
731 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
732
733 return pmo_psoc_ctx->psoc_cfg.ssdp;
734 }
735
736 #ifdef FEATURE_RUNTIME_PM
737 uint32_t
ucfg_pmo_get_runtime_pm_delay(struct wlan_objmgr_psoc * psoc)738 ucfg_pmo_get_runtime_pm_delay(struct wlan_objmgr_psoc *psoc)
739 {
740 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
741
742 if (!pmo_psoc_ctx)
743 return 0;
744
745 return pmo_psoc_ctx->psoc_cfg.runtime_pm_delay;
746 }
747 #endif /* FEATURE_RUNTIME_PM */
748
749 bool
ucfg_pmo_is_ns_offloaded(struct wlan_objmgr_psoc * psoc)750 ucfg_pmo_is_ns_offloaded(struct wlan_objmgr_psoc *psoc)
751 {
752 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
753
754 return pmo_psoc_ctx->psoc_cfg.ns_offload_enable_static;
755 }
756
757 uint8_t
ucfg_pmo_get_sta_dynamic_dtim(struct wlan_objmgr_psoc * psoc)758 ucfg_pmo_get_sta_dynamic_dtim(struct wlan_objmgr_psoc *psoc)
759 {
760 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
761
762 return pmo_psoc_ctx->psoc_cfg.sta_dynamic_dtim;
763 }
764
765 uint8_t
ucfg_pmo_get_sta_mod_dtim(struct wlan_objmgr_psoc * psoc)766 ucfg_pmo_get_sta_mod_dtim(struct wlan_objmgr_psoc *psoc)
767 {
768 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
769
770 return pmo_psoc_ctx->psoc_cfg.sta_mod_dtim;
771 }
772
773 void
ucfg_pmo_set_sta_mod_dtim(struct wlan_objmgr_psoc * psoc,uint8_t val)774 ucfg_pmo_set_sta_mod_dtim(struct wlan_objmgr_psoc *psoc,
775 uint8_t val)
776 {
777 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
778
779 pmo_psoc_ctx->psoc_cfg.sta_mod_dtim = val;
780 }
781
782 bool
ucfg_pmo_is_mc_addr_list_enabled(struct wlan_objmgr_psoc * psoc)783 ucfg_pmo_is_mc_addr_list_enabled(struct wlan_objmgr_psoc *psoc)
784 {
785 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
786
787 return pmo_psoc_ctx->psoc_cfg.enable_mc_list;
788 }
789
790 enum powersave_mode
ucfg_pmo_get_power_save_mode(struct wlan_objmgr_psoc * psoc)791 ucfg_pmo_get_power_save_mode(struct wlan_objmgr_psoc *psoc)
792 {
793 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
794
795 return pmo_psoc_ctx->psoc_cfg.power_save_mode;
796 }
797
798 enum powersave_mode
ucfg_pmo_get_default_power_save_mode(struct wlan_objmgr_psoc * psoc)799 ucfg_pmo_get_default_power_save_mode(struct wlan_objmgr_psoc *psoc)
800 {
801 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
802
803 return pmo_psoc_ctx->psoc_cfg.default_power_save_mode;
804 }
805
806 void
ucfg_pmo_set_power_save_mode(struct wlan_objmgr_psoc * psoc,enum powersave_mode val)807 ucfg_pmo_set_power_save_mode(struct wlan_objmgr_psoc *psoc,
808 enum powersave_mode val)
809 {
810 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
811
812 pmo_psoc_ctx->psoc_cfg.power_save_mode = val;
813 }
814
815 uint8_t
ucfg_pmo_get_max_ps_poll(struct wlan_objmgr_psoc * psoc)816 ucfg_pmo_get_max_ps_poll(struct wlan_objmgr_psoc *psoc)
817 {
818 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
819
820 return pmo_psoc_ctx->psoc_cfg.max_ps_poll;
821 }
822
823 uint8_t
ucfg_pmo_power_save_offload_enabled(struct wlan_objmgr_psoc * psoc)824 ucfg_pmo_power_save_offload_enabled(struct wlan_objmgr_psoc *psoc)
825 {
826 uint8_t powersave_offload_enabled = PMO_PS_ADVANCED_POWER_SAVE_ENABLE;
827 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
828
829 if (!pmo_psoc_ctx->psoc_cfg.max_ps_poll ||
830 !pmo_psoc_ctx->psoc_cfg.power_save_mode)
831 powersave_offload_enabled =
832 pmo_psoc_ctx->psoc_cfg.power_save_mode;
833
834 pmo_debug("powersave offload enabled type:%d",
835 powersave_offload_enabled);
836
837 return powersave_offload_enabled;
838 }
839
840 QDF_STATUS
ucfg_pmo_tgt_psoc_send_idle_roam_suspend_mode(struct wlan_objmgr_psoc * psoc,uint8_t val)841 ucfg_pmo_tgt_psoc_send_idle_roam_suspend_mode(struct wlan_objmgr_psoc *psoc,
842 uint8_t val)
843 {
844 return pmo_tgt_psoc_send_idle_roam_monitor(psoc, val);
845 }
846
847 #ifdef WLAN_FEATURE_EXTWOW_SUPPORT
848 bool
ucfg_pmo_extwow_is_goto_suspend_enabled(struct wlan_objmgr_psoc * psoc)849 ucfg_pmo_extwow_is_goto_suspend_enabled(struct wlan_objmgr_psoc *psoc)
850 {
851 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
852
853 return pmo_psoc_ctx->psoc_cfg.extwow_goto_suspend;
854 }
855
856 uint8_t
ucfg_pmo_extwow_app1_wakeup_pin_num(struct wlan_objmgr_psoc * psoc)857 ucfg_pmo_extwow_app1_wakeup_pin_num(struct wlan_objmgr_psoc *psoc)
858 {
859 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
860
861 return pmo_psoc_ctx->psoc_cfg.extwow_app1_wakeup_pin_num;
862 }
863
864 uint8_t
ucfg_pmo_extwow_app2_wakeup_pin_num(struct wlan_objmgr_psoc * psoc)865 ucfg_pmo_extwow_app2_wakeup_pin_num(struct wlan_objmgr_psoc *psoc)
866 {
867 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
868
869 return pmo_psoc_ctx->psoc_cfg.extwow_app2_wakeup_pin_num;
870 }
871
872 uint32_t
ucfg_pmo_extwow_app2_init_ping_interval(struct wlan_objmgr_psoc * psoc)873 ucfg_pmo_extwow_app2_init_ping_interval(struct wlan_objmgr_psoc *psoc)
874 {
875 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
876
877 return pmo_psoc_ctx->psoc_cfg.extwow_app2_init_ping_interval;
878 }
879
880 uint32_t
ucfg_pmo_extwow_app2_min_ping_interval(struct wlan_objmgr_psoc * psoc)881 ucfg_pmo_extwow_app2_min_ping_interval(struct wlan_objmgr_psoc *psoc)
882 {
883 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
884
885 return pmo_psoc_ctx->psoc_cfg.extwow_app2_min_ping_interval;
886 }
887
888 uint32_t
ucfg_pmo_extwow_app2_max_ping_interval(struct wlan_objmgr_psoc * psoc)889 ucfg_pmo_extwow_app2_max_ping_interval(struct wlan_objmgr_psoc *psoc)
890 {
891 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
892
893 return pmo_psoc_ctx->psoc_cfg.extwow_app2_max_ping_interval;
894 }
895
896 uint32_t
ucfg_pmo_extwow_app2_inc_ping_interval(struct wlan_objmgr_psoc * psoc)897 ucfg_pmo_extwow_app2_inc_ping_interval(struct wlan_objmgr_psoc *psoc)
898 {
899 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
900
901 return pmo_psoc_ctx->psoc_cfg.extwow_app2_inc_ping_interval;
902 }
903
904 uint16_t
ucfg_pmo_extwow_app2_tcp_src_port(struct wlan_objmgr_psoc * psoc)905 ucfg_pmo_extwow_app2_tcp_src_port(struct wlan_objmgr_psoc *psoc)
906 {
907 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
908
909 return pmo_psoc_ctx->psoc_cfg.extwow_app2_tcp_src_port;
910 }
911
912 uint16_t
ucfg_pmo_extwow_app2_tcp_dst_port(struct wlan_objmgr_psoc * psoc)913 ucfg_pmo_extwow_app2_tcp_dst_port(struct wlan_objmgr_psoc *psoc)
914 {
915 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
916
917 return pmo_psoc_ctx->psoc_cfg.extwow_app2_tcp_dst_port;
918 }
919
920 uint32_t
ucfg_pmo_extwow_app2_tcp_tx_timeout(struct wlan_objmgr_psoc * psoc)921 ucfg_pmo_extwow_app2_tcp_tx_timeout(struct wlan_objmgr_psoc *psoc)
922 {
923 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
924
925 return pmo_psoc_ctx->psoc_cfg.extwow_app2_tcp_tx_timeout;
926 }
927
928 uint32_t
ucfg_pmo_extwow_app2_tcp_rx_timeout(struct wlan_objmgr_psoc * psoc)929 ucfg_pmo_extwow_app2_tcp_rx_timeout(struct wlan_objmgr_psoc *psoc)
930 {
931 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
932
933 return pmo_psoc_ctx->psoc_cfg.extwow_app2_tcp_rx_timeout;
934 }
935 #endif
936
937 bool
ucfg_pmo_get_enable_sap_suspend(struct wlan_objmgr_psoc * psoc)938 ucfg_pmo_get_enable_sap_suspend(struct wlan_objmgr_psoc *psoc)
939 {
940 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
941
942 return pmo_psoc_ctx->psoc_cfg.enable_sap_suspend;
943 }
944
945 void
ucfg_pmo_set_wow_data_inactivity_timeout(struct wlan_objmgr_psoc * psoc,uint8_t val)946 ucfg_pmo_set_wow_data_inactivity_timeout(struct wlan_objmgr_psoc *psoc,
947 uint8_t val)
948 {
949 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
950
951 pmo_psoc_ctx->psoc_cfg.wow_data_inactivity_timeout = val;
952 }
953
ucfg_pmo_is_pkt_filter_enabled(struct wlan_objmgr_psoc * psoc)954 bool ucfg_pmo_is_pkt_filter_enabled(struct wlan_objmgr_psoc *psoc)
955 {
956 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
957
958 return pmo_psoc_ctx->psoc_cfg.packet_filter_enabled;
959 }
960
961 enum active_apf_mode
ucfg_pmo_get_active_uc_apf_mode(struct wlan_objmgr_psoc * psoc)962 ucfg_pmo_get_active_uc_apf_mode(struct wlan_objmgr_psoc *psoc)
963 {
964 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
965
966 return pmo_psoc_ctx->psoc_cfg.active_uc_apf_mode;
967 }
968
969 enum active_apf_mode
ucfg_pmo_get_active_mc_bc_apf_mode(struct wlan_objmgr_psoc * psoc)970 ucfg_pmo_get_active_mc_bc_apf_mode(struct wlan_objmgr_psoc *psoc)
971 {
972 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
973
974 return pmo_psoc_ctx->psoc_cfg.active_mc_bc_apf_mode;
975 }
976
977 #ifdef WLAN_ENABLE_GPIO_WAKEUP
ucfg_pmo_is_gpio_wakeup_enabled(struct wlan_objmgr_psoc * psoc)978 bool ucfg_pmo_is_gpio_wakeup_enabled(struct wlan_objmgr_psoc *psoc)
979 {
980 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
981
982 return pmo_psoc_ctx->psoc_cfg.enable_gpio_wakeup;
983 }
984
ucfg_pmo_get_gpio_wakeup_pin(struct wlan_objmgr_psoc * psoc)985 uint32_t ucfg_pmo_get_gpio_wakeup_pin(struct wlan_objmgr_psoc *psoc)
986 {
987 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
988
989 return pmo_psoc_ctx->psoc_cfg.gpio_wakeup_pin;
990 }
991
992 enum pmo_gpio_wakeup_mode
ucfg_pmo_get_gpio_wakeup_mode(struct wlan_objmgr_psoc * psoc)993 ucfg_pmo_get_gpio_wakeup_mode(struct wlan_objmgr_psoc *psoc)
994 {
995 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
996
997 return pmo_psoc_ctx->psoc_cfg.gpio_wakeup_mode;
998 }
999 #endif
1000
1001 bool
ucfg_pmo_get_sap_mode_bus_suspend(struct wlan_objmgr_psoc * psoc)1002 ucfg_pmo_get_sap_mode_bus_suspend(struct wlan_objmgr_psoc *psoc)
1003 {
1004 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
1005
1006 return pmo_psoc_ctx->psoc_cfg.is_bus_suspend_enabled_in_sap_mode;
1007 }
1008
1009 bool
ucfg_pmo_get_go_mode_bus_suspend(struct wlan_objmgr_psoc * psoc)1010 ucfg_pmo_get_go_mode_bus_suspend(struct wlan_objmgr_psoc *psoc)
1011 {
1012 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
1013
1014 return pmo_psoc_ctx->psoc_cfg.is_bus_suspend_enabled_in_go_mode;
1015 }
1016
1017 enum pmo_suspend_mode
ucfg_pmo_get_suspend_mode(struct wlan_objmgr_psoc * psoc)1018 ucfg_pmo_get_suspend_mode(struct wlan_objmgr_psoc *psoc)
1019 {
1020 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
1021
1022 return pmo_psoc_ctx->psoc_cfg.suspend_mode;
1023 }
1024
ucfg_pmo_core_txrx_suspend(struct wlan_objmgr_psoc * psoc)1025 QDF_STATUS ucfg_pmo_core_txrx_suspend(struct wlan_objmgr_psoc *psoc)
1026 {
1027 return pmo_core_txrx_suspend(psoc);
1028 }
1029
ucfg_pmo_core_txrx_resume(struct wlan_objmgr_psoc * psoc)1030 QDF_STATUS ucfg_pmo_core_txrx_resume(struct wlan_objmgr_psoc *psoc)
1031 {
1032 return pmo_core_txrx_resume(psoc);
1033 }
1034
1035 #ifdef SYSTEM_PM_CHECK
ucfg_pmo_notify_system_resume(struct wlan_objmgr_psoc * psoc)1036 void ucfg_pmo_notify_system_resume(struct wlan_objmgr_psoc *psoc)
1037 {
1038 pmo_core_system_resume(psoc);
1039 }
1040 #endif
1041
ucfg_pmo_get_moddtim_user_enable(struct wlan_objmgr_vdev * vdev)1042 bool ucfg_pmo_get_moddtim_user_enable(struct wlan_objmgr_vdev *vdev)
1043 {
1044 return pmo_core_vdev_get_moddtim_user_enabled(vdev);
1045 }
1046
ucfg_pmo_set_moddtim_user_enable(struct wlan_objmgr_vdev * vdev,bool value)1047 void ucfg_pmo_set_moddtim_user_enable(struct wlan_objmgr_vdev *vdev,
1048 bool value)
1049 {
1050 pmo_core_vdev_set_moddtim_user_enabled(vdev, value);
1051 }
1052
ucfg_pmo_get_moddtim_user_active(struct wlan_objmgr_vdev * vdev)1053 bool ucfg_pmo_get_moddtim_user_active(struct wlan_objmgr_vdev *vdev)
1054 {
1055 return pmo_core_vdev_get_moddtim_user_active(vdev);
1056 }
1057
ucfg_pmo_get_moddtim_user(struct wlan_objmgr_vdev * vdev)1058 uint32_t ucfg_pmo_get_moddtim_user(struct wlan_objmgr_vdev *vdev)
1059 {
1060 return pmo_core_vdev_get_moddtim_user(vdev);
1061 }
1062
1063 uint32_t
ucfg_pmo_get_ssr_frequency_on_pagefault(struct wlan_objmgr_psoc * psoc)1064 ucfg_pmo_get_ssr_frequency_on_pagefault(struct wlan_objmgr_psoc *psoc)
1065 {
1066 return pmo_get_ssr_frequency_on_pagefault(psoc);
1067 }
1068
1069 bool
ucfg_pmo_get_disconnect_sap_tdls_in_wow(struct wlan_objmgr_psoc * psoc)1070 ucfg_pmo_get_disconnect_sap_tdls_in_wow(struct wlan_objmgr_psoc *psoc)
1071 {
1072 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
1073
1074 return pmo_psoc_ctx->psoc_cfg.disconnect_sap_tdls_in_wow;
1075 }
1076
1077 #ifdef WLAN_FEATURE_ICMP_OFFLOAD
ucfg_pmo_check_icmp_offload(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id)1078 QDF_STATUS ucfg_pmo_check_icmp_offload(struct wlan_objmgr_psoc *psoc,
1079 uint8_t vdev_id)
1080 {
1081 return pmo_core_icmp_check_offload(psoc, vdev_id);
1082 }
1083
1084 bool
ucfg_pmo_is_icmp_offload_enabled(struct wlan_objmgr_psoc * psoc)1085 ucfg_pmo_is_icmp_offload_enabled(struct wlan_objmgr_psoc *psoc)
1086 {
1087 struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
1088
1089 return pmo_psoc_ctx->psoc_cfg.is_icmp_offload_enable;
1090 }
1091
ucfg_pmo_config_icmp_offload(struct wlan_objmgr_psoc * psoc,struct pmo_icmp_offload * pmo_icmp_req)1092 QDF_STATUS ucfg_pmo_config_icmp_offload(struct wlan_objmgr_psoc *psoc,
1093 struct pmo_icmp_offload *pmo_icmp_req)
1094 {
1095 return pmo_tgt_config_icmp_offload_req(psoc, pmo_icmp_req);
1096 }
1097 #endif
1098
ucfg_pmo_set_vdev_bridge_addr(struct wlan_objmgr_vdev * vdev,struct qdf_mac_addr * bridgeaddr)1099 QDF_STATUS ucfg_pmo_set_vdev_bridge_addr(struct wlan_objmgr_vdev *vdev,
1100 struct qdf_mac_addr *bridgeaddr)
1101 {
1102 return pmo_set_vdev_bridge_addr(vdev, bridgeaddr);
1103 }
1104
ucfg_pmo_get_vdev_bridge_addr(struct wlan_objmgr_vdev * vdev,struct qdf_mac_addr * bridgeaddr)1105 QDF_STATUS ucfg_pmo_get_vdev_bridge_addr(struct wlan_objmgr_vdev *vdev,
1106 struct qdf_mac_addr *bridgeaddr)
1107 {
1108 return pmo_get_vdev_bridge_addr(vdev, bridgeaddr);
1109 }
1110