1 /* 2 * Copyright (c) 2016-2019, 2021 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2021-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: Public APIs to perform operations on Global objects 21 */ 22 #ifndef _WLAN_OBJMGR_GLOBAL_OBJ_H_ 23 #define _WLAN_OBJMGR_GLOBAL_OBJ_H_ 24 25 /** 26 * wlan_objmgr_global_obj_init() - global object initialization 27 * 28 * Creates global object, initializes with default values 29 * 30 * Return: SUCCESS on successful creation, 31 * FAILURE on Mem alloc failure or allocated already 32 * 33 */ 34 QDF_STATUS wlan_objmgr_global_obj_init(void); 35 36 /** 37 * wlan_objmgr_global_obj_deinit() - global object deinitialization 38 * 39 * Deletes global object 40 * 41 * Return: SUCCESS on successful deletion, 42 * FAILURE on object is not found 43 * 44 */ 45 QDF_STATUS wlan_objmgr_global_obj_deinit(void); 46 47 /** 48 * wlan_objmgr_global_obj_can_destroyed() - Checks whether global object 49 * can be destroyed 50 * 51 * Checks the psoc table of global object, if psoc table is empty 52 * returns the SUCCESS 53 * 54 * Return: SUCCESS on can be destroyed, 55 * FAILURE on can't be destroyed 56 * 57 */ 58 QDF_STATUS wlan_objmgr_global_obj_can_destroyed(void); 59 60 /** 61 * wlan_objmgr_register_psoc_create_handler() - register psoc create handler 62 * @id: component id 63 * @handler: function pointer of the component 64 * @args: args, if component wants certain args to be passed on PSOC creation 65 * 66 * API, allows other UMAC components to register handler 67 * The registered handler would be invoked on PSOC creation 68 * 69 * Return: SUCCESS, 70 * Failure (if registration fails, each failure has different error 71 * code) 72 */ 73 QDF_STATUS wlan_objmgr_register_psoc_create_handler( 74 enum wlan_umac_comp_id id, 75 wlan_objmgr_psoc_create_handler handler, 76 void *args); 77 78 /** 79 * wlan_objmgr_unregister_psoc_create_handler() - unregister psoc create handler 80 * @id: component id 81 * @handler: function pointer of the component 82 * @args: args, if component wants certain args to be passed on PSOC creation 83 * 84 * API, allows other UMAC components to unregister handler 85 * 86 * Return: SUCCESS, 87 * Failure (if handler is not present, each failure has different error 88 * code) 89 */ 90 QDF_STATUS wlan_objmgr_unregister_psoc_create_handler( 91 enum wlan_umac_comp_id id, 92 wlan_objmgr_psoc_create_handler handler, 93 void *args); 94 95 /** 96 * wlan_objmgr_register_psoc_destroy_handler() - register destroy handler 97 * @id: component id 98 * @handler: function pointer of the component 99 * @args: args, if component wants certain args to be passed on PSOC deletion 100 * 101 * API, allows other UMAC components to register handler 102 * The registered handler would be invoked on PSOC deletion 103 * 104 * Return: SUCCESS, 105 * Failure (if registration fails, each failure has different error 106 * code) 107 */ 108 QDF_STATUS wlan_objmgr_register_psoc_destroy_handler( 109 enum wlan_umac_comp_id id, 110 wlan_objmgr_psoc_destroy_handler handler, 111 void *args); 112 113 /** 114 * wlan_objmgr_unregister_psoc_destroy_handler() - unregister destroy handler 115 * @id: component id 116 * @handler: function pointer of the component 117 * @args: args, if component wants certain args to be passed on PSOC deletion 118 * 119 * API, allows other UMAC components to unregister handler 120 * 121 * Return: SUCCESS, 122 * Failure (if handler is not present, each failure has different error 123 * code) 124 */ 125 QDF_STATUS wlan_objmgr_unregister_psoc_destroy_handler( 126 enum wlan_umac_comp_id id, 127 wlan_objmgr_psoc_destroy_handler handler, 128 void *args); 129 130 /** 131 * wlan_objmgr_register_psoc_status_handler() - register status handler 132 * @id: component id 133 * @handler: function pointer of the component 134 * @args: args, if component wants certain args to be passed on PSOC status 135 * change 136 * 137 * API, allows other UMAC components to register handler 138 * The registered handler would be invoked on PSOC object status change 139 * 140 * Return: SUCCESS, 141 * Failure (if registration fails, each failure has different error 142 * code) 143 */ 144 QDF_STATUS wlan_objmgr_register_psoc_status_handler( 145 enum wlan_umac_comp_id id, 146 wlan_objmgr_psoc_status_handler handler, 147 void *args); 148 149 /** 150 * wlan_objmgr_unregister_psoc_status_handler() - unregister status handler 151 * @id: component id 152 * @handler: function pointer of the component 153 * @args: args, if component wants certain args to be passed on PSOC status 154 * 155 * API, allows other UMAC components to unregister handler 156 * 157 * Return: SUCCESS, 158 * Failure (if handler is not present, each failure has different error 159 * code) 160 */ 161 QDF_STATUS wlan_objmgr_unregister_psoc_status_handler( 162 enum wlan_umac_comp_id id, 163 wlan_objmgr_psoc_status_handler handler, 164 void *args); 165 166 /** 167 * wlan_objmgr_register_pdev_create_handler() - register pdev create handler 168 * @id: component id 169 * @handler: function pointer of the component 170 * @args: args, if component wants certain args to be passed on PDEV creation 171 * 172 * API, allows other UMAC components to register handler 173 * The registered handler would be invoked on PDEV creation 174 * 175 * Return: SUCCESS, 176 * Failure (if registration fails, each failure has different error 177 * code) 178 */ 179 QDF_STATUS wlan_objmgr_register_pdev_create_handler( 180 enum wlan_umac_comp_id id, 181 wlan_objmgr_pdev_create_handler handler, 182 void *args); 183 184 /** 185 * wlan_objmgr_unregister_pdev_create_handler() - unregister pdev create handler 186 * @id: component id 187 * @handler: function pointer of the component 188 * @args: args, if component wants certain args to be passed on PDEV creation 189 * 190 * API, allows other UMAC components to unregister handler 191 * 192 * Return: SUCCESS, 193 * Failure (if handler is not present, each failure has different error 194 * code) 195 */ 196 QDF_STATUS wlan_objmgr_unregister_pdev_create_handler( 197 enum wlan_umac_comp_id id, 198 wlan_objmgr_pdev_create_handler handler, 199 void *args); 200 201 /** 202 * wlan_objmgr_register_pdev_destroy_handler() - register pdev destroy handler 203 * @id: component id 204 * @handler: function pointer of the component 205 * @args: args, if component wants certain args to be passed on PDEV deletion 206 * 207 * API, allows other UMAC components to register handler 208 * The registered handler would be invoked on PDEV deletion 209 * 210 * Return: SUCCESS, 211 * Failure (if registration fails, each failure has different error 212 * code) 213 */ 214 QDF_STATUS wlan_objmgr_register_pdev_destroy_handler( 215 enum wlan_umac_comp_id id, 216 wlan_objmgr_pdev_destroy_handler handler, 217 void *args); 218 219 /** 220 * wlan_objmgr_unregister_pdev_destroy_handler() - unregister pdev destroy handler 221 * @id: component id 222 * @handler: function pointer of the component 223 * @args: args, if component wants certain args to be passed on PDEV deletion 224 * 225 * API, allows other UMAC components to unregister handler 226 * 227 * Return: SUCCESS, 228 * Failure (if handler is not present, each failure has different error 229 * code) 230 */ 231 QDF_STATUS wlan_objmgr_unregister_pdev_destroy_handler( 232 enum wlan_umac_comp_id id, 233 wlan_objmgr_pdev_destroy_handler handler, 234 void *args); 235 236 /** 237 * wlan_objmgr_register_pdev_status_handler() - register pdev status handler 238 * @id: component id 239 * @handler: function pointer of the component 240 * @args: args, if component wants certain args to be passed on PDEV status 241 * change 242 * 243 * API, allows other UMAC components to register handler 244 * The registered handler would be invoked on PDEV object status change 245 * 246 * Return: SUCCESS, 247 * Failure (if registration fails, each failure has different error 248 * code) 249 */ 250 QDF_STATUS wlan_objmgr_register_pdev_status_handler( 251 enum wlan_umac_comp_id id, 252 wlan_objmgr_pdev_status_handler handler, 253 void *args); 254 255 /** 256 * wlan_objmgr_unregister_pdev_status_handler() - unregister pdev status handler 257 * @id: component id 258 * @handler: function pointer of the component 259 * @args: args, if component wants certain args to be passed on PDEV status 260 * 261 * API, allows other UMAC components to unregister handler 262 * 263 * Return: SUCCESS, 264 * Failure (if handler is not present, each failure has different error 265 * code) 266 */ 267 QDF_STATUS wlan_objmgr_unregister_pdev_status_handler( 268 enum wlan_umac_comp_id id, 269 wlan_objmgr_pdev_status_handler handler, 270 void *args); 271 272 /** 273 * wlan_objmgr_register_vdev_create_handler() - register vdev create handler 274 * @id: component id 275 * @handler: function pointer of the component 276 * @args: args, if component wants certain args to be passed on VDEV creation 277 * 278 * API, allows other UMAC components to register handler 279 * The registered handler would be invoked on VDEV creation 280 * 281 * Return: SUCCESS, 282 * Failure (if registration fails, each failure has different error 283 * code) 284 */ 285 QDF_STATUS wlan_objmgr_register_vdev_create_handler( 286 enum wlan_umac_comp_id id, 287 wlan_objmgr_vdev_create_handler handler, 288 void *args); 289 290 /** 291 * wlan_objmgr_unregister_vdev_create_handler() - unregister vdev create handler 292 * @id: component id 293 * @handler: function pointer of the component 294 * @args: args, if component wants certain args to be passed on VDEV creation 295 * 296 * API, allows other UMAC components to unregister handler 297 * 298 * Return: SUCCESS, 299 * Failure (if handler is not present, each failure has different error 300 * code) 301 */ 302 QDF_STATUS wlan_objmgr_unregister_vdev_create_handler( 303 enum wlan_umac_comp_id id, 304 wlan_objmgr_vdev_create_handler handler, 305 void *args); 306 307 /** 308 * wlan_objmgr_register_vdev_destroy_handler() - register vdev destroy handler 309 * @id: component id 310 * @handler: function pointer of the component 311 * @args: args, if component wants certain args to be passed on VDEV deletion 312 * 313 * API, allows other UMAC components to register handler 314 * The registered handler would be invoked on VDEV deletion 315 * 316 * Return: SUCCESS, 317 * Failure (if registration fails, each failure has different error 318 * code) 319 */ 320 QDF_STATUS wlan_objmgr_register_vdev_destroy_handler( 321 enum wlan_umac_comp_id id, 322 wlan_objmgr_vdev_destroy_handler handler, 323 void *args); 324 325 /** 326 * wlan_objmgr_unregister_vdev_destroy_handler() - unregister vdev destroy handler 327 * @id: component id 328 * @handler: function pointer of the component 329 * @args: args, if component wants certain args to be passed on VDEV deletion 330 * 331 * API, allows other UMAC components to unregister handler 332 * 333 * Return: SUCCESS, 334 * Failure (if handler is not present, each failure has different error 335 * code) 336 */ 337 QDF_STATUS wlan_objmgr_unregister_vdev_destroy_handler( 338 enum wlan_umac_comp_id id, 339 wlan_objmgr_vdev_destroy_handler handler, 340 void *args); 341 342 /** 343 * wlan_objmgr_register_vdev_status_handler() - register vdev status handler 344 * @id: component id 345 * @handler: function pointer of the component 346 * @args: args, if component wants certain args to be passed on VDEV status 347 * change 348 * 349 * API, allows other UMAC components to register handler 350 * The registered handler would be invoked on VDEV object status change 351 * 352 * Return: SUCCESS, 353 * Failure (if registration fails, each failure has different error 354 * code) 355 */ 356 QDF_STATUS wlan_objmgr_register_vdev_status_handler( 357 enum wlan_umac_comp_id id, 358 wlan_objmgr_vdev_status_handler handler, 359 void *args); 360 361 /** 362 * wlan_objmgr_unregister_vdev_status_handler() - unregister vdev status handler 363 * @id: component id 364 * @handler: function pointer of the component 365 * @args: args, if component wants certain args to be passed on VDEV status 366 * 367 * API, allows other UMAC components to unregister handler 368 * 369 * Return: SUCCESS, 370 * Failure (if handler is not present, each failure has different error 371 * code) 372 */ 373 QDF_STATUS wlan_objmgr_unregister_vdev_status_handler( 374 enum wlan_umac_comp_id id, 375 wlan_objmgr_vdev_status_handler handler, 376 void *args); 377 378 /** 379 * wlan_objmgr_register_vdev_peer_free_notify_handler() - register vdev peer 380 * free handler 381 * @id: component id 382 * @handler: function pointer of the component 383 * 384 * API, allows other UMAC components to register handler 385 * The registered handler would be invoked on VDEV Peer gets freed 386 * 387 * Return: SUCCESS, 388 * Failure (if registration fails, each failure has different error 389 * code) 390 */ 391 QDF_STATUS wlan_objmgr_register_vdev_peer_free_notify_handler( 392 enum wlan_umac_comp_id id, 393 wlan_objmgr_vdev_peer_free_notify_handler handler); 394 395 /** 396 * wlan_objmgr_unregister_vdev_peer_free_notify_handler() - unregister vdev 397 * peer free handler 398 * @id: component id 399 * @handler: function pointer of the component 400 * 401 * API, allows other UMAC components to unregister handler 402 * 403 * Return: SUCCESS, 404 * Failure (if handler is not present, each failure has different error 405 * code) 406 */ 407 QDF_STATUS wlan_objmgr_unregister_vdev_peer_free_notify_handler( 408 enum wlan_umac_comp_id id, 409 wlan_objmgr_vdev_peer_free_notify_handler handler); 410 411 /** 412 * wlan_objmgr_register_peer_create_handler() - register peer create handler 413 * @id: component id 414 * @handler: function pointer of the component 415 * @args: args, if component wants certain args to be passed on PEER creation 416 * 417 * API, allows other UMAC components to register handler 418 * The registered handler would be invoked on PEER creation 419 * 420 * Return: SUCCESS, 421 * Failure (if registration fails, each failure has different error 422 * code) 423 */ 424 QDF_STATUS wlan_objmgr_register_peer_create_handler( 425 enum wlan_umac_comp_id id, 426 wlan_objmgr_peer_create_handler handler, 427 void *args); 428 429 /** 430 * wlan_objmgr_unregister_peer_create_handler() - unregister peer create handler 431 * @id: component id 432 * @handler: function pointer of the component 433 * @args: args, if component wants certain args to be passed on PEER creation 434 * 435 * API, allows other UMAC components to unregister handler 436 * 437 * Return: SUCCESS, 438 * Failure (if handler is not present, each failure has different error 439 * code) 440 */ 441 QDF_STATUS wlan_objmgr_unregister_peer_create_handler( 442 enum wlan_umac_comp_id id, 443 wlan_objmgr_peer_create_handler handler, 444 void *args); 445 446 /** 447 * wlan_objmgr_register_peer_destroy_handler() - register peer destroy handler 448 * @id: component id 449 * @handler: function pointer of the component 450 * @args: args, if component wants certain args to be passed on PEER deletion 451 * 452 * API, allows other UMAC components to register handler 453 * The registered handler would be invoked on PEER deletion 454 * 455 * Return: SUCCESS, 456 * Failure (if registration fails, each failure has different error 457 * code) 458 */ 459 QDF_STATUS wlan_objmgr_register_peer_destroy_handler( 460 enum wlan_umac_comp_id id, 461 wlan_objmgr_peer_destroy_handler handler, 462 void *args); 463 464 /** 465 * wlan_objmgr_unregister_peer_destroy_handler() - unregister peer destroy handler 466 * @id: component id 467 * @handler: function pointer of the component 468 * @args: args, if component wants certain args to be passed on PEER deletion 469 * 470 * API, allows other UMAC components to unregister handler 471 * 472 * Return: SUCCESS, 473 * Failure (if handler is not present, each failure has different error 474 * code) 475 */ 476 QDF_STATUS wlan_objmgr_unregister_peer_destroy_handler( 477 enum wlan_umac_comp_id id, 478 wlan_objmgr_peer_destroy_handler handler, 479 void *args); 480 481 /** 482 * wlan_objmgr_register_peer_status_handler() - register peer status handler 483 * @id: component id 484 * @handler: function pointer of the component 485 * @args: args, if component wants certain args to be passed on PEER status 486 * change 487 * 488 * API, allows other UMAC components to register handler 489 * The registered handler would be invoked on PEER object status change 490 * 491 * Return: SUCCESS, 492 * Failure (if registration fails, each failure has different error 493 * code) 494 */ 495 QDF_STATUS wlan_objmgr_register_peer_status_handler( 496 enum wlan_umac_comp_id id, 497 wlan_objmgr_peer_status_handler handler, 498 void *args); 499 500 /** 501 * wlan_objmgr_unregister_peer_status_handler() - unregister peer status handler 502 * @id: component id 503 * @handler: function pointer of the component 504 * @args: args, if component wants certain args to be passed on PEER status 505 * 506 * API, allows other UMAC components to unregister handler 507 * 508 * Return: SUCCESS, 509 * Failure (if handler is not present, each failure has different error 510 * code) 511 */ 512 QDF_STATUS wlan_objmgr_unregister_peer_status_handler( 513 enum wlan_umac_comp_id id, 514 wlan_objmgr_peer_status_handler handler, 515 void *args); 516 517 /* 518 * APIs to operations on psoc 519 */ 520 typedef void (*wlan_objmgr_psoc_handler)(struct wlan_objmgr_psoc *psoc, 521 void *arg, 522 uint8_t index); 523 524 /** 525 * wlan_objmgr_iterate_psoc_list() - iterate through all psocs 526 * 527 * @handler: the handler will be called for each psoc 528 * the handler should be implemented to perform required operation 529 * @arg: arguments passed by caller 530 * @dbg_id: id of the caller 531 * 532 * API to be used for performing the operations on all psoc 533 * The "handler" here shouldn't take g_umac_glb_obj->global_lock lock when 534 * processing 535 * 536 * Return: SUCCESS/FAILURE 537 */ 538 QDF_STATUS wlan_objmgr_iterate_psoc_list( 539 wlan_objmgr_psoc_handler handler, 540 void *arg, wlan_objmgr_ref_dbgid dbg_id); 541 542 /** 543 * wlan_objmgr_get_psoc_by_id() - find psoc by psoc id 544 * 545 * @psoc_id: Id of PSOC to be retrieved 546 * @dbg_id: id of the caller 547 * 548 * API to find psoc object pointer by psoc id 549 * 550 * This API increments the ref count of the psoc object internally, the 551 * caller has to invoke the wlan_objmgr_psoc_release_ref() to decrement 552 * ref count 553 * 554 * Return: psoc pointer 555 * NULL on FAILURE 556 */ 557 struct wlan_objmgr_psoc 558 *wlan_objmgr_get_psoc_by_id(uint8_t psoc_id, wlan_objmgr_ref_dbgid dbg_id); 559 560 #ifdef QCA_SUPPORT_GLOBAL_DESC 561 /** 562 * wlan_objmgr_get_desc_ctx() - Get global desc context from global umac object 563 * 564 * This API is used to get desc context object from the global umac object 565 * 566 * Return: Pointer to the desc context 567 */ 568 struct dp_global_desc_context *wlan_objmgr_get_desc_ctx(void); 569 570 /** 571 * wlan_objmgr_set_desc_ctx() - Set global desc context in global umac object 572 * @ctx: desc context to be set 573 * 574 * This API is used to set desc context object in the global umac object 575 * 576 * Return: 577 */ 578 void wlan_objmgr_set_desc_ctx(struct dp_global_desc_context *ctx); 579 #endif 580 581 #ifdef WLAN_FEATURE_11BE_MLO 582 /** 583 * wlan_objmgr_get_mlo_ctx() - Get MLO context from global umac object 584 * 585 * This API is used to get MLO context object from the global umac object 586 * 587 * Return: Pointer to the mlo context 588 */ 589 struct mlo_mgr_context *wlan_objmgr_get_mlo_ctx(void); 590 591 /** 592 * wlan_objmgr_set_mlo_ctx() - Set MLO context at global umac object 593 * @ctx: MLO context 594 * 595 * This API is used to set MLO context object at the global umac object 596 * 597 * Return: None 598 */ 599 void wlan_objmgr_set_mlo_ctx(struct mlo_mgr_context *ctx); 600 601 /** 602 * wlan_objmgr_set_dp_mlo_ctx() - set dp handle in mlo context 603 * @dp_handle: Data path module handle 604 * @grp_id: MLO group id which it belongs too 605 * 606 * Return: void 607 */ 608 void wlan_objmgr_set_dp_mlo_ctx(void *dp_handle, uint8_t grp_id); 609 610 /** 611 * wlan_objmgr_get_dp_mlo_ctx() - get dp handle from mlo_context 612 * @grp_id: MLO Group id which it belongs to 613 * 614 * Return: dp handle 615 */ 616 void *wlan_objmgr_get_dp_mlo_ctx(uint8_t grp_id); 617 #else 618 static inline struct mlo_mgr_context *wlan_objmgr_get_mlo_ctx(void) 619 { 620 return NULL; 621 } 622 623 static inline void wlan_objmgr_set_mlo_ctx(struct mlo_mgr_context *ctx) 624 {} 625 626 static inline void *wlan_objmgr_get_dp_mlo_ctx(uint8_t grp_id) 627 { 628 return NULL; 629 } 630 631 static inline void wlan_objmgr_set_dp_mlo_ctx(void *dp_handle, uint8_t grp_id) 632 { 633 } 634 #endif /* WLAN_FEATURE_11BE_MLO */ 635 636 #endif /* _WLAN_OBJMGR_GLOBAL_OBJ_H_*/ 637