xref: /wlan-dirver/qcacld-3.0/components/pmo/dispatcher/inc/wlan_pmo_obj_mgmt_api.h (revision fa7ef9dc94d54d7249583ffc7a8a13fa1d3381e4)
1 /*
2  * Copyright (c) 2017-2019, 2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2022-2023 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: declare utility API related to the pmo component
21  * called by other components
22  */
23 
24 #ifndef _WLAN_PMO_OBJ_MGMT_API_H_
25 #define _WLAN_PMO_OBJ_MGMT_API_H_
26 
27 #include "wlan_pmo_common_public_struct.h"
28 #include "wlan_pmo_obj_mgmt_public_struct.h"
29 
30 #ifdef WLAN_POWER_MANAGEMENT_OFFLOAD
31 /**
32  * pmo_init() - initialize pmo_ctx context.
33  *
34  * This function initializes the power manager offloads (a.k.a pmo) context.
35  *
36  * Return: QDF_STATUS_SUCCESS - in case of success else return error
37  */
38 QDF_STATUS pmo_init(void);
39 
40 /**
41  * pmo_deinit() - De initialize pmo_ctx context.
42  *
43  * This function De initializes power manager offloads (a.k.a pmo) context.
44  *
45  * Return: QDF_STATUS_SUCCESS - in case of success else return error
46  */
47 QDF_STATUS pmo_deinit(void);
48 
49 /**
50  * pmo_psoc_object_created_notification(): pmo psoc create handler
51  * @psoc: psoc which is going to created by objmgr
52  * @arg: argument for vdev create handler
53  *
54  * PMO, register this api with objmgr to detect psoc is created in fwr
55  *
56  * Return QDF_STATUS status in case of success else return error
57  */
58 QDF_STATUS pmo_psoc_object_created_notification(struct wlan_objmgr_psoc *psoc,
59 						void *arg);
60 
61 /**
62  * pmo_psoc_object_destroyed_notification(): pmo psoc delete handler
63  * @psoc: psoc which is going to delete by objmgr
64  * @arg: argument for vdev delete handler
65  *
66  * PMO, register this api with objmgr to detect psoc is deleted in fwr
67  *
68  * Return QDF_STATUS status in case of success else return error
69  */
70 QDF_STATUS pmo_psoc_object_destroyed_notification(struct wlan_objmgr_psoc *psoc,
71 						  void *arg);
72 
73 /**
74  * pmo_vdev_object_created_notification(): pmo vdev create handler
75  * @vdev: vdev which is going to created by objmgr
76  * @arg: argument for vdev create handler
77  *
78  * PMO, register this api with objmgr to detect vdev is created in fwr
79  *
80  * Return QDF_STATUS status in case of success else return error
81  */
82 QDF_STATUS pmo_vdev_object_created_notification(struct wlan_objmgr_vdev *vdev,
83 						void *arg);
84 
85 /**
86  * pmo_vdev_ready() - handles vdev ready in firmware event
87  * @vdev: vdev which is ready in firmware
88  * @bridgeaddr: Bridge MAC address
89  *
90  * Objmgr vdev_create event does not guarantee vdev creation in firmware.
91  * Any logic that would normally go in the vdev_create event, but needs to
92  * communicate with firmware, needs to go here instead.
93  *
94  * Return QDF_STATUS
95  */
96 QDF_STATUS pmo_vdev_ready(struct wlan_objmgr_vdev *vdev,
97 			  struct qdf_mac_addr *bridgeaddr);
98 
99 /**
100  * pmo_vdev_object_destroyed_notification(): pmo vdev delete handler
101  * @vdev: vdev which is going to delete by objmgr
102  * @arg: argument for vdev delete handler
103  *
104  * PMO, register this api with objmgr to detect vdev is deleted in fwr
105  *
106  * Return QDF_STATUS status in case of success else return error
107  */
108 QDF_STATUS pmo_vdev_object_destroyed_notification(struct wlan_objmgr_vdev *vdev,
109 						  void *arg);
110 
111 /**
112  * pmo_register_suspend_handler(): register suspend handler for components
113  * @id: component id
114  * @handler: resume handler for the mention component
115  * @arg: argument to pass while calling resume handler
116  *
117  * Return QDF_STATUS status -in case of success else return error
118  */
119 QDF_STATUS pmo_register_suspend_handler(enum wlan_umac_comp_id id,
120 					pmo_psoc_suspend_handler handler,
121 					void *arg);
122 
123 /**
124  * pmo_unregister_suspend_handler():unregister suspend handler for components
125  * @id: component id
126  * @handler: resume handler for the mention component
127  *
128  * Return QDF_STATUS status -in case of success else return error
129  */
130 QDF_STATUS pmo_unregister_suspend_handler(enum wlan_umac_comp_id id,
131 					  pmo_psoc_suspend_handler handler);
132 
133 /**
134  * pmo_register_resume_handler(): API to register resume handler for components
135  * @id: component id
136  * @handler: resume handler for the mention component
137  * @arg: argument to pass while calling resume handler
138  *
139  * Return QDF_STATUS status - in case of success else return error
140  */
141 QDF_STATUS pmo_register_resume_handler(enum wlan_umac_comp_id id,
142 				       pmo_psoc_resume_handler handler,
143 				       void *arg);
144 
145 /**
146  * pmo_unregister_resume_handler(): unregister resume handler for components
147  * @id: component id
148  * @handler: resume handler for the mention component
149  *
150  * Return QDF_STATUS status - in case of success else return error
151  */
152 QDF_STATUS pmo_unregister_resume_handler(enum wlan_umac_comp_id id,
153 					 pmo_psoc_resume_handler handler);
154 
155 /**
156  * pmo_suspend_all_components(): API to suspend all component
157  * @psoc:objmgr psoc
158  * @suspend_type: Tell suspend type (apps suspend / runtime suspend)
159  *
160  * Return QDF_STATUS status - in case of success else return error
161  */
162 QDF_STATUS pmo_suspend_all_components(struct wlan_objmgr_psoc *psoc,
163 				      enum qdf_suspend_type suspend_type);
164 
165 /**
166  * pmo_resume_all_components(): API to resume all component
167  * @psoc:objmgr psoc
168  * @suspend_type: Tell suspend type from which resume is required
169  *
170  * Return QDF_STATUS status - in case of success else return error
171  */
172 QDF_STATUS pmo_resume_all_components(struct wlan_objmgr_psoc *psoc,
173 				     enum qdf_suspend_type suspend_type);
174 
175 /**
176  * pmo_register_pause_bitmap_notifier(): API to register pause bitmap notifier
177  * @psoc: objmgr psoc handle
178  * @handler: pause bitmap updated notifier
179  *
180  * Return QDF_STATUS status - in case of success else return error
181  */
182 QDF_STATUS pmo_register_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc,
183 					      pmo_notify_pause_bitmap handler);
184 
185 /**
186  * pmo_unregister_pause_bitmap_notifier(): API to unregister pause bitmap
187  * notifier
188  * @psoc: objmgr psoc handle
189  *
190  * Return QDF_STATUS status - in case of success else return error
191  */
192 QDF_STATUS pmo_unregister_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc);
193 
194 /**
195  * pmo_register_get_pause_bitmap(): API to get register pause bitmap notifier
196  * @psoc: objmgr psoc handle
197  * @handler: pause bitmap updated notifier
198  *
199  * Return QDF_STATUS status - in case of success else return error
200  */
201 QDF_STATUS pmo_register_get_pause_bitmap(struct wlan_objmgr_psoc *psoc,
202 					 pmo_get_pause_bitmap handler);
203 
204 /**
205  * pmo_unregister_get_pause_bitmap(): API to unregister get pause bitmap
206  * callback
207  * @psoc: objmgr psoc handle
208  *
209  * Return QDF_STATUS status - in case of success else return error
210  */
211 QDF_STATUS pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc);
212 
213 /**
214  * pmo_register_get_dtim_period_callback(): API to register callback that gets
215  * dtim period from mlme
216  * @psoc: objmgr psoc handle
217  * @handler: pointer to the callback function
218  *
219  * Return: QDF_STATUS_SUCCESS in case of success else error
220  */
221 QDF_STATUS pmo_register_get_dtim_period_callback(struct wlan_objmgr_psoc *psoc,
222 						 pmo_get_dtim_period handler);
223 
224 /**
225  * pmo_unregister_get_dtim_period_callback(): API to unregister callback that
226  * gets dtim period from mlme
227  * @psoc: objmgr psoc handle
228  *
229  * Return: QDF_STATUS_SUCCESS in case of success else error
230  */
231 QDF_STATUS
232 pmo_unregister_get_dtim_period_callback(struct wlan_objmgr_psoc *psoc);
233 
234 /**
235  * pmo_register_get_beacon_interval_callback(): API to register callback that
236  * gets beacon interval from mlme
237  * @psoc: objmgr psoc handle
238  * @handler: pointer to the callback function
239  *
240  * Return: QDF_STATUS_SUCCESS in case of success else error
241  */
242 QDF_STATUS
243 pmo_register_get_beacon_interval_callback(struct wlan_objmgr_psoc *psoc,
244 					  pmo_get_beacon_interval handler);
245 
246 /**
247  * pmo_unregister_get_beacon_interval_callback(): API to unregister callback
248  * that gets beacon interval from mlme
249  * @psoc: objmgr psoc handle
250  *
251  * Return: QDF_STATUS_SUCCESS in case of success else error
252  */
253 QDF_STATUS
254 pmo_unregister_get_beacon_interval_callback(struct wlan_objmgr_psoc *psoc);
255 
256 /**
257  * pmo_register_is_device_in_low_pwr_mode(): API to get register device  power
258  * save check notifier.
259  * @psoc: objmgr psoc handle
260  * @handler: device power save check notifier
261  *
262  * Return QDF_STATUS status - in case of success else return error
263  */
264 QDF_STATUS pmo_register_is_device_in_low_pwr_mode(struct wlan_objmgr_psoc *psoc,
265 					 pmo_is_device_in_low_pwr_mode handler);
266 
267 /**
268  * pmo_unregister_is_device_in_low_pwr_mode(): API to unregister device  power
269  * save check notifier.
270  * @psoc: objmgr psoc handle
271  *
272  * Return QDF_STATUS status - in case of success else return error
273  */
274 QDF_STATUS
275 pmo_unregister_is_device_in_low_pwr_mode(struct wlan_objmgr_psoc *psoc);
276 
277 /**
278  * wlan_pmo_get_sap_mode_bus_suspend(): API to get SAP bus suspend config
279  * @psoc: objmgr psoc handle
280  *
281  * Return true in case of peer connected SAP bus suspend is allowed
282  * else return false
283  */
284 bool
285 wlan_pmo_get_sap_mode_bus_suspend(struct wlan_objmgr_psoc *psoc);
286 
287 /**
288  * wlan_pmo_get_go_mode_bus_suspend(): API to get GO bus suspend config
289  * @psoc: objmgr psoc handle
290  *
291  * Return true in case of peer connected GO bus suspend is allowed
292  * else return false
293  */
294 bool
295 wlan_pmo_get_go_mode_bus_suspend(struct wlan_objmgr_psoc *psoc);
296 
297 /*
298  * wlan_pmo_enable_ssr_on_page_fault: Enable/disable ssr on pagefault
299  * @psoc: objmgr psoc
300  *
301  * Return: True if SSR is enabled on pagefault
302  */
303 bool wlan_pmo_enable_ssr_on_page_fault(struct wlan_objmgr_psoc *psoc);
304 
305 /*
306  * wlan_pmo_get_max_pagefault_wakeups_for_ssr: get max pagefault wakeups for ssr
307  * @psoc: objmgr psoc
308  *
309  * Return: Max pagefault wakeups for SSR
310  */
311 uint8_t
312 wlan_pmo_get_max_pagefault_wakeups_for_ssr(struct wlan_objmgr_psoc *psoc);
313 
314 /*
315  * wlan_pmo_get_interval_for_pagefault_wakeup_counts: get ssr interval for
316  * pagefault
317  * @psoc: objmgr psoc
318  *
319  * Return: SSR interval for pagefault
320  */
321 uint32_t
322 wlan_pmo_get_interval_for_pagefault_wakeup_counts(
323 						struct wlan_objmgr_psoc *psoc);
324 
325 QDF_STATUS wlan_pmo_get_listen_interval(struct wlan_objmgr_vdev *vdev,
326 					uint32_t *listen_interval);
327 
328 /**
329  * wlan_pmo_set_ps_params() - Set vdev OPM params
330  * @vdev: pointer to vdev object
331  * @ps_params: pointer to OPM params
332  *
333  * Return: None
334  */
335 void wlan_pmo_set_ps_params(struct wlan_objmgr_vdev *vdev,
336 			    struct pmo_ps_params *ps_params);
337 
338 /**
339  * wlan_pmo_get_ps_params() - Get vdev OPM params
340  * @vdev: pointer to vdev object
341  * @ps_params: Pointer to get OPM params
342  *
343  * Return: QDF Status
344  */
345 QDF_STATUS wlan_pmo_get_ps_params(struct wlan_objmgr_vdev *vdev,
346 				  struct pmo_ps_params *ps_params);
347 
348 #else /* WLAN_POWER_MANAGEMENT_OFFLOAD */
349 
350 static inline QDF_STATUS pmo_init(void)
351 {
352 	return QDF_STATUS_SUCCESS;
353 }
354 
355 static inline QDF_STATUS pmo_deinit(void)
356 {
357 	return QDF_STATUS_SUCCESS;
358 }
359 
360 static inline QDF_STATUS
361 pmo_psoc_object_created_notification(struct wlan_objmgr_psoc *psoc, void *arg)
362 {
363 	return QDF_STATUS_SUCCESS;
364 }
365 
366 static inline QDF_STATUS
367 pmo_psoc_object_destroyed_notification(struct wlan_objmgr_psoc *psoc, void *arg)
368 {
369 	return QDF_STATUS_SUCCESS;
370 }
371 
372 static inline QDF_STATUS
373 pmo_vdev_object_created_notification(struct wlan_objmgr_vdev *vdev, void *arg)
374 {
375 	return QDF_STATUS_SUCCESS;
376 }
377 
378 static inline QDF_STATUS
379 pmo_vdev_ready(struct wlan_objmgr_vdev *vdev, struct qdf_mac_addr *bridgeaddr)
380 {
381 	return QDF_STATUS_SUCCESS;
382 }
383 
384 static inline QDF_STATUS
385 pmo_vdev_object_destroyed_notification(struct wlan_objmgr_vdev *vdev, void *arg)
386 {
387 	return QDF_STATUS_SUCCESS;
388 }
389 
390 static inline QDF_STATUS
391 pmo_register_suspend_handler(enum wlan_umac_comp_id id,
392 			     pmo_psoc_suspend_handler handler,
393 			     void *arg)
394 {
395 	return QDF_STATUS_SUCCESS;
396 }
397 
398 static inline QDF_STATUS
399 pmo_unregister_suspend_handler(enum wlan_umac_comp_id id,
400 			       pmo_psoc_suspend_handler handler)
401 {
402 	return QDF_STATUS_SUCCESS;
403 }
404 
405 static inline QDF_STATUS
406 pmo_register_resume_handler(enum wlan_umac_comp_id id,
407 			    pmo_psoc_resume_handler handler,
408 			    void *arg)
409 {
410 	return QDF_STATUS_SUCCESS;
411 }
412 
413 static inline QDF_STATUS
414 pmo_unregister_resume_handler(enum wlan_umac_comp_id id,
415 			      pmo_psoc_resume_handler handler)
416 {
417 	return QDF_STATUS_SUCCESS;
418 }
419 
420 static inline QDF_STATUS
421 pmo_suspend_all_components(struct wlan_objmgr_psoc *psoc,
422 			   enum qdf_suspend_type suspend_type)
423 {
424 	return QDF_STATUS_SUCCESS;
425 }
426 
427 static inline QDF_STATUS
428 pmo_resume_all_components(struct wlan_objmgr_psoc *psoc,
429 			  enum qdf_suspend_type suspend_type)
430 {
431 	return QDF_STATUS_SUCCESS;
432 }
433 
434 static inline QDF_STATUS
435 pmo_register_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc,
436 				   pmo_notify_pause_bitmap handler)
437 {
438 	return QDF_STATUS_SUCCESS;
439 }
440 
441 static inline QDF_STATUS
442 pmo_unregister_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc)
443 {
444 	return QDF_STATUS_SUCCESS;
445 }
446 
447 static inline QDF_STATUS
448 pmo_register_get_pause_bitmap(struct wlan_objmgr_psoc *psoc,
449 			      pmo_get_pause_bitmap handler)
450 {
451 	return QDF_STATUS_SUCCESS;
452 }
453 
454 static inline QDF_STATUS
455 pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc)
456 {
457 	return QDF_STATUS_SUCCESS;
458 }
459 
460 static inline QDF_STATUS
461 pmo_register_is_device_in_low_pwr_mode(struct wlan_objmgr_psoc *psoc,
462 				       pmo_is_device_in_low_pwr_mode handler)
463 {
464 	return QDF_STATUS_SUCCESS;
465 }
466 
467 static inline QDF_STATUS
468 pmo_unregister_is_device_in_low_pwr_mode(struct wlan_objmgr_psoc *psoc)
469 {
470 	return QDF_STATUS_SUCCESS;
471 }
472 
473 static inline QDF_STATUS
474 pmo_register_get_dtim_period_callback(struct wlan_objmgr_psoc *psoc,
475 				      pmo_get_dtim_period handler)
476 {
477 	return QDF_STATUS_SUCCESS;
478 }
479 
480 static inline QDF_STATUS
481 pmo_unregister_get_dtim_period_callback(struct wlan_objmgr_psoc *psoc)
482 {
483 	return QDF_STATUS_SUCCESS;
484 }
485 
486 static inline QDF_STATUS
487 pmo_register_get_beacon_interval_callback(struct wlan_objmgr_psoc *psoc,
488 					  pmo_get_beacon_interval handler)
489 {
490 	return QDF_STATUS_SUCCESS;
491 }
492 
493 static inline QDF_STATUS
494 pmo_unregister_get_beacon_interval_callback(struct wlan_objmgr_psoc *psoc)
495 {
496 	return QDF_STATUS_SUCCESS;
497 }
498 
499 static inline bool
500 wlan_pmo_get_sap_mode_bus_suspend(struct wlan_objmgr_psoc *psoc)
501 {
502 	return false;
503 }
504 
505 static inline bool
506 wlan_pmo_get_go_mode_bus_suspend(struct wlan_objmgr_psoc *psoc)
507 {
508 	return false;
509 }
510 
511 static inline bool
512 wlan_pmo_enable_ssr_on_page_fault(struct wlan_objmgr_psoc *psoc)
513 {
514 	return 0;
515 }
516 
517 static inline uint8_t
518 wlan_pmo_get_max_pagefault_wakeups_for_ssr(struct wlan_objmgr_psoc *psoc)
519 {
520 	return 0;
521 }
522 
523 static inline uint32_t
524 wlan_pmo_get_interval_for_pagefault_wakeup_counts(struct wlan_objmgr_psoc *psoc)
525 {
526 	return 0;
527 }
528 
529 static QDF_STATUS wlan_pmo_get_listen_interval(struct wlan_objmgr_vdev *vdev,
530 					       uint32_t *listen_interval)
531 {
532 	return QDF_STATUS_SUCCESS;
533 }
534 
535 static inline
536 void wlan_pmo_set_ps_params(struct wlan_objmgr_vdev *vdev,
537 			    struct pmo_ps_params *ps_params)
538 {
539 }
540 
541 static inline QDF_STATUS
542 wlan_pmo_get_ps_params(struct wlan_objmgr_vdev *vdev,
543 		       struct pmo_ps_params *ps_params)
544 {
545 	return QDF_STATUS_SUCCESS;
546 }
547 #endif /* WLAN_POWER_MANAGEMENT_OFFLOAD */
548 
549 #endif /* end  of _WLAN_PMO_OBJ_MGMT_API_H_ */
550