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