1 /* 2 * Copyright (c) 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 any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 #ifndef _WLAN_MGMT_TXRX_RX_REO_UTILS_API_H_ 19 #define _WLAN_MGMT_TXRX_RX_REO_UTILS_API_H_ 20 21 /** 22 * DOC: wlan_mgmt_txrx_rx_reo_utils_api.h 23 * 24 * management rx-reorder public APIs and structures 25 * for umac converged components. 26 * 27 */ 28 29 #include <wlan_mgmt_txrx_utils_api.h> 30 31 struct mgmt_txrx_priv_pdev_context; 32 33 /** 34 * wlan_get_mlo_link_id_from_pdev() - Helper API to get the MLO HW link id 35 * from the pdev object. 36 * @pdev: Pointer to pdev object 37 * 38 * Return: On success returns the MLO HW link id corresponding to the pdev 39 * object. On failure returns -1. 40 */ 41 int8_t 42 wlan_get_mlo_link_id_from_pdev(struct wlan_objmgr_pdev *pdev); 43 44 /** 45 * wlan_get_mlo_grp_id_from_pdev() - Helper API to get the MLO Group id 46 * from the pdev object. 47 * @pdev: Pointer to pdev object 48 * 49 * Return: On success returns the MLO Group id corresponding to the pdev 50 * object. On failure returns -1. 51 */ 52 int8_t 53 wlan_get_mlo_grp_id_from_pdev(struct wlan_objmgr_pdev *pdev); 54 55 /** 56 * wlan_get_pdev_from_mlo_link_id() - Helper API to get the pdev 57 * object from the link id. 58 * @mlo_link_id: MLO HW link id 59 * @ml_grp_id: MLO Group id which it belongs to 60 * @refdbgid: Reference debug id 61 * 62 * Return: On success returns the pdev object from the link_id. 63 * On failure returns NULL. 64 */ 65 struct wlan_objmgr_pdev * 66 wlan_get_pdev_from_mlo_link_id(uint8_t mlo_link_id, uint8_t ml_grp_id, 67 wlan_objmgr_ref_dbgid refdbgid); 68 69 #ifdef WLAN_MGMT_RX_REO_SUPPORT 70 71 #define mgmt_rx_reo_alert(params...) \ 72 QDF_TRACE_FATAL(QDF_MODULE_ID_MGMT_RX_REO, params) 73 #define mgmt_rx_reo_err(params...) \ 74 QDF_TRACE_ERROR(QDF_MODULE_ID_MGMT_RX_REO, params) 75 #define mgmt_rx_reo_warn(params...) \ 76 QDF_TRACE_WARN(QDF_MODULE_ID_MGMT_RX_REO, params) 77 #define mgmt_rx_reo_notice(params...) \ 78 QDF_TRACE_INFO(QDF_MODULE_ID_MGMT_RX_REO, params) 79 #define mgmt_rx_reo_info(params...) \ 80 QDF_TRACE_INFO(QDF_MODULE_ID_MGMT_RX_REO, params) 81 #define mgmt_rx_reo_debug(params...) \ 82 QDF_TRACE_DEBUG(QDF_MODULE_ID_MGMT_RX_REO, params) 83 84 #define mgmt_rx_reo_alert_no_fl(params...) \ 85 QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_MGMT_RX_REO, params) 86 #define mgmt_rx_reo_err_no_fl(params...) \ 87 QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_MGMT_RX_REO, params) 88 #define mgmt_rx_reo_warn_no_fl(params...) \ 89 QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_MGMT_RX_REO, params) 90 #define mgmt_rx_reo_notice_no_fl(params...) \ 91 QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_MGMT_RX_REO, params) 92 #define mgmt_rx_reo_info_no_fl(params...) \ 93 QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_MGMT_RX_REO, params) 94 #define mgmt_rx_reo_debug_no_fl(params...) \ 95 QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_MGMT_RX_REO, params) 96 97 #define mgmt_rx_reo_alert_rl(params...) \ 98 QDF_TRACE_FATAL_RL(QDF_MODULE_ID_MGMT_RX_REO, params) 99 #define mgmt_rx_reo_err_rl(params...) \ 100 QDF_TRACE_ERROR_RL(QDF_MODULE_ID_MGMT_RX_REO, params) 101 #define mgmt_rx_reo_warn_rl(params...) \ 102 QDF_TRACE_WARN_RL(QDF_MODULE_ID_MGMT_RX_REO, params) 103 #define mgmt_rx_reo_notice_rl(params...) \ 104 QDF_TRACE_INFO_RL(QDF_MODULE_ID_MGMT_RX_REO, params) 105 #define mgmt_rx_reo_info_rl(params...) \ 106 QDF_TRACE_INFO_RL(QDF_MODULE_ID_MGMT_RX_REO, params) 107 #define mgmt_rx_reo_debug_rl(params...) \ 108 QDF_TRACE_DEBUG_RL(QDF_MODULE_ID_MGMT_RX_REO, params) 109 110 #ifdef WLAN_MGMT_RX_REO_SIM_SUPPORT 111 /** 112 * wlan_mgmt_rx_reo_sim_start() - Helper API to start management Rx reorder 113 * simulation 114 * 115 * This API starts the simulation framework which mimics the management frame 116 * generation by target. MAC HW is modelled as a kthread. FW and host layers 117 * are modelled as an ordered work queues. 118 * @ml_grp_id: MLO group id of the required mlo context 119 * 120 * Return: QDF_STATUS 121 */ 122 QDF_STATUS 123 wlan_mgmt_rx_reo_sim_start(uint8_t ml_grp_id); 124 125 /** 126 * wlan_mgmt_rx_reo_sim_stop() - Helper API to stop management Rx reorder 127 * simulation 128 * @ml_grp_id: MLO group id of the required mlo context 129 * 130 * This API stops the simulation framework which mimics the management frame 131 * generation by target. MAC HW is modelled as a kthread. FW and host layers 132 * are modelled as an ordered work queues. 133 * 134 * Return: QDF_STATUS 135 */ 136 QDF_STATUS 137 wlan_mgmt_rx_reo_sim_stop(uint8_t ml_grp_id); 138 #else 139 /** 140 * wlan_mgmt_rx_reo_sim_start() - Helper API to start management Rx reorder 141 * simulation 142 * @ml_grp_id: MLO group id of the required mlo context 143 * 144 * Error print is added to indicate that simulation framework is not compiled. 145 * 146 * Return: QDF_STATUS_E_INVAL 147 */ 148 static inline QDF_STATUS 149 wlan_mgmt_rx_reo_sim_start(uint8_t ml_grp_id) 150 { 151 mgmt_txrx_err("Mgmt rx reo simulation is not compiled"); 152 153 return QDF_STATUS_E_INVAL; 154 } 155 156 /** 157 * wlan_mgmt_rx_reo_sim_stop() - Helper API to stop management Rx reorder 158 * simulation 159 * @ml_grp_id: MLO group id of the required mlo context 160 * 161 * Error print is added to indicate that simulation framework is not compiled. 162 * 163 * Return: QDF_STATUS_E_INVAL 164 */ 165 static inline QDF_STATUS 166 wlan_mgmt_rx_reo_sim_stop(uint8_t ml_grp_id) 167 { 168 mgmt_txrx_err("Mgmt rx reo simulation is not compiled"); 169 170 return QDF_STATUS_E_INVAL; 171 } 172 #endif /* WLAN_MGMT_RX_REO_SIM_SUPPORT */ 173 174 /** 175 * wlan_mgmt_rx_reo_get_snapshot_info() - Get snapshot info 176 * @pdev: pointer to pdev 177 * @id: snapshot identifier 178 * @snapshot_info: pointer to snapshot info 179 * 180 * Helper API to get information of snapshot @id for pdev @pdev. 181 * 182 * Return: QDF_STATUS 183 */ 184 QDF_STATUS 185 wlan_mgmt_rx_reo_get_snapshot_info 186 (struct wlan_objmgr_pdev *pdev, 187 enum mgmt_rx_reo_shared_snapshot_id id, 188 struct mgmt_rx_reo_snapshot_info *snapshot_info); 189 190 /** 191 * wlan_mgmt_txrx_process_rx_frame() - API to process the incoming management 192 * frame 193 * @pdev: pointer to pdev 194 * @buf: pointer to buffer 195 * @mgmt_rx_params: pointer to management rx params 196 * 197 * API to process the incoming management frame. 198 * 199 * Return: QDF_STATUS 200 */ 201 QDF_STATUS wlan_mgmt_txrx_process_rx_frame( 202 struct wlan_objmgr_pdev *pdev, 203 qdf_nbuf_t buf, 204 struct mgmt_rx_event_params *mgmt_rx_params); 205 206 /** 207 * wlan_mgmt_rx_reo_init() - Initializes the management rx-reorder module 208 * 209 * This function gets called from dispatcher init and initializes the management 210 * rx-reorder module. 211 * 212 * Return: QDF_STATUS 213 */ 214 QDF_STATUS 215 wlan_mgmt_rx_reo_init(void); 216 217 /** 218 * wlan_mgmt_rx_reo_deinit() - De initializes the management rx-reorder module 219 * 220 * This function gets called from dispatcher deinit and de initializes the 221 * management rx-reorder module. 222 * 223 * Return: QDF_STATUS 224 */ 225 QDF_STATUS 226 wlan_mgmt_rx_reo_deinit(void); 227 228 /** 229 * wlan_mgmt_rx_reo_validate_mlo_link_info() - Validate the MLO HW link 230 * related information extracted from the MLO global shared memory arena 231 * @psoc: pointer to psoc object 232 * 233 * This function validates the MLO HW link related information extracted from 234 * the MLO global shared memory arena. This includes number of active HW links 235 * and the valid link bitmap. Same information is available with MLO manager and 236 * it is considered as the source of truth. 237 * 238 * Return: QDF_STATUS 239 */ 240 QDF_STATUS 241 wlan_mgmt_rx_reo_validate_mlo_link_info(struct wlan_objmgr_psoc *psoc); 242 243 /** 244 * wlan_mgmt_rx_reo_pdev_obj_create_notification() - pdev create handler for 245 * management rx-reorder module 246 * @pdev: pointer to pdev object 247 * @mgmt_txrx_pdev_ctx: pdev private object of mgmt txrx module 248 * 249 * This function gets called from object manager when pdev is being created and 250 * creates management rx-reorder pdev context 251 * 252 * Return: QDF_STATUS 253 */ 254 QDF_STATUS 255 wlan_mgmt_rx_reo_pdev_obj_create_notification( 256 struct wlan_objmgr_pdev *pdev, 257 struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx); 258 259 /** 260 * wlan_mgmt_rx_reo_pdev_obj_destroy_notification() - pdev destroy handler for 261 * management rx-reorder feature 262 * @pdev: pointer to pdev object 263 * @mgmt_txrx_pdev_ctx: pdev private object of mgmt txrx module 264 * 265 * This function gets called from object manager when pdev is being destroyed 266 * and destroys management rx-reorder pdev context 267 * 268 * Return: QDF_STATUS 269 */ 270 QDF_STATUS 271 wlan_mgmt_rx_reo_pdev_obj_destroy_notification( 272 struct wlan_objmgr_pdev *pdev, 273 struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx); 274 275 /** 276 * wlan_mgmt_rx_reo_psoc_obj_create_notification() - psoc create handler for 277 * management rx-reorder module 278 * @psoc: pointer to psoc object 279 * 280 * This function gets called from object manager when psoc is being created. 281 * 282 * Return: QDF_STATUS 283 */ 284 QDF_STATUS 285 wlan_mgmt_rx_reo_psoc_obj_create_notification(struct wlan_objmgr_psoc *psoc); 286 287 /** 288 * wlan_mgmt_rx_reo_psoc_obj_destroy_notification() - psoc destroy handler for 289 * management rx-reorder feature 290 * @psoc: pointer to psoc object 291 * 292 * This function gets called from object manager when psoc is being destroyed. 293 * 294 * Return: QDF_STATUS 295 */ 296 QDF_STATUS 297 wlan_mgmt_rx_reo_psoc_obj_destroy_notification(struct wlan_objmgr_psoc *psoc); 298 299 /** 300 * wlan_mgmt_rx_reo_attach() - Initializes the per pdev data structures related 301 * to management rx-reorder module 302 * @pdev: pointer to pdev object 303 * 304 * Return: QDF_STATUS 305 */ 306 QDF_STATUS 307 wlan_mgmt_rx_reo_attach(struct wlan_objmgr_pdev *pdev); 308 309 /** 310 * wlan_mgmt_rx_reo_detach() - Clears the per pdev data structures related to 311 * management rx-reorder module 312 * @pdev: pointer to pdev object 313 * 314 * Return: QDF_STATUS 315 */ 316 QDF_STATUS 317 wlan_mgmt_rx_reo_detach(struct wlan_objmgr_pdev *pdev); 318 319 /** 320 * wlan_mgmt_rx_reo_is_feature_enabled_at_psoc() - Check if MGMT Rx REO feature 321 * is enabled on a given psoc 322 * @psoc: pointer to psoc object 323 * 324 * Return: true if the feature is enabled, else false 325 */ 326 bool 327 wlan_mgmt_rx_reo_is_feature_enabled_at_psoc(struct wlan_objmgr_psoc *psoc); 328 329 /** 330 * wlan_mgmt_rx_reo_is_feature_enabled_at_pdev() - Check if MGMT Rx REO feature 331 * is enabled on a given pdev 332 * @pdev: pointer to pdev object 333 * 334 * Return: true if the feature is enabled, else false 335 */ 336 bool 337 wlan_mgmt_rx_reo_is_feature_enabled_at_pdev(struct wlan_objmgr_pdev *pdev); 338 339 /** 340 * wlan_mgmt_rx_reo_get_pkt_ctr_delta_thresh() - Get the packet counter delta 341 * threshold value 342 * @psoc: pointer to psoc object 343 * 344 * Return: Packet counter delta threshold value 345 */ 346 uint16_t 347 wlan_mgmt_rx_reo_get_pkt_ctr_delta_thresh(struct wlan_objmgr_psoc *psoc); 348 349 /** 350 * wlan_mgmt_rx_reo_get_ingress_frame_debug_list_size() - Get the size of 351 * ingress frame debug list 352 * @psoc: pointer to psoc object 353 * 354 * Return: Size of ingress frame debug list 355 */ 356 uint16_t 357 wlan_mgmt_rx_reo_get_ingress_frame_debug_list_size 358 (struct wlan_objmgr_psoc *psoc); 359 360 /** 361 * wlan_mgmt_rx_reo_get_egress_frame_debug_list_size() - Get the size of 362 * egress frame debug list 363 * @psoc: pointer to psoc object 364 * 365 * Return: Size of egress frame debug list 366 */ 367 uint16_t 368 wlan_mgmt_rx_reo_get_egress_frame_debug_list_size 369 (struct wlan_objmgr_psoc *psoc); 370 371 /** 372 * wlan_mgmt_rx_reo_is_simulation_in_progress() - API to check whether 373 * simulation is in progress 374 * @ml_grp_id: MLO group id of the required mlo context 375 * 376 * Return: true if simulation is in progress, else false 377 */ 378 bool 379 wlan_mgmt_rx_reo_is_simulation_in_progress(uint8_t ml_grp_id); 380 381 /** 382 * wlan_mgmt_rx_reo_print_ingress_frame_stats() - Helper API to print 383 * stats related to incoming management frames 384 * @ml_grp_id: MLO group id of the required mlo context 385 * 386 * This API prints stats related to management frames entering management 387 * Rx reorder module. 388 * 389 * Return: QDF_STATUS 390 */ 391 QDF_STATUS 392 wlan_mgmt_rx_reo_print_ingress_frame_stats(uint8_t ml_grp_id); 393 394 /** 395 * wlan_mgmt_rx_reo_print_ingress_frame_info() - Print the debug information 396 * about the latest frames entered the reorder module 397 * @ml_grp_id: MLO group id of the required mlo context 398 * @num_frames: Number of frames for which the debug information is to be 399 * printed. If @num_frames is 0, then debug information about all the frames 400 * in the ring buffer will be printed. 401 * 402 * Return: QDF_STATUS of operation 403 */ 404 QDF_STATUS 405 wlan_mgmt_rx_reo_print_ingress_frame_info(uint8_t ml_grp_id, 406 uint16_t num_frames); 407 408 /** 409 * wlan_mgmt_rx_reo_print_egress_frame_stats() - Helper API to print 410 * stats related to outgoing management frames 411 * @ml_grp_id: MLO group id of the required mlo context 412 * 413 * This API prints stats related to management frames exiting management 414 * Rx reorder module. 415 * 416 * Return: QDF_STATUS 417 */ 418 QDF_STATUS 419 wlan_mgmt_rx_reo_print_egress_frame_stats(uint8_t ml_grp_id); 420 421 /** 422 * wlan_mgmt_rx_reo_print_egress_frame_info() - Print the debug information 423 * about the latest frames leaving the reorder module 424 * @num_frames: Number of frames for which the debug information is to be 425 * printed. If @num_frames is 0, then debug information about all the frames 426 * in the ring buffer will be printed. 427 * @ml_grp_id: MLO group id of the required mlo context 428 * 429 * Return: QDF_STATUS of operation 430 */ 431 QDF_STATUS 432 wlan_mgmt_rx_reo_print_egress_frame_info(uint8_t ml_grp_id, 433 uint16_t num_frames); 434 #else 435 static inline QDF_STATUS 436 wlan_mgmt_rx_reo_validate_mlo_link_info(struct wlan_objmgr_psoc *psoc) 437 { 438 return QDF_STATUS_SUCCESS; 439 } 440 441 /** 442 * wlan_mgmt_rx_reo_pdev_obj_create_notification() - pdev create handler for 443 * management rx-reorder feature 444 * @pdev: pointer to pdev object 445 * @mgmt_txrx_pdev_ctx: pdev private object of mgmt txrx module 446 * 447 * This function gets called from object manager when pdev is being created and 448 * creates management rx-reorder pdev context 449 * 450 * Return: QDF_STATUS 451 */ 452 static inline QDF_STATUS 453 wlan_mgmt_rx_reo_pdev_obj_create_notification( 454 struct wlan_objmgr_pdev *pdev, 455 struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx) 456 { 457 return QDF_STATUS_SUCCESS; 458 } 459 460 /** 461 * wlan_mgmt_rx_reo_pdev_obj_destroy_notification() - pdev destroy handler for 462 * management rx-reorder feature 463 * @pdev: pointer to pdev object 464 * @mgmt_txrx_pdev_ctx: pdev private object of mgmt txrx module 465 * 466 * This function gets called from object manager when pdev is being destroyed 467 * and destroys management rx-reorder pdev context 468 * 469 * Return: QDF_STATUS 470 */ 471 static inline QDF_STATUS 472 wlan_mgmt_rx_reo_pdev_obj_destroy_notification( 473 struct wlan_objmgr_pdev *pdev, 474 struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx) 475 { 476 return QDF_STATUS_SUCCESS; 477 } 478 479 /** 480 * wlan_mgmt_rx_reo_psoc_obj_create_notification() - psoc create handler for 481 * management rx-reorder module 482 * @psoc: pointer to psoc object 483 * 484 * This function gets called from object manager when psoc is being created. 485 * 486 * Return: QDF_STATUS 487 */ 488 static inline QDF_STATUS 489 wlan_mgmt_rx_reo_psoc_obj_create_notification(struct wlan_objmgr_psoc *psoc) 490 { 491 return QDF_STATUS_SUCCESS; 492 } 493 494 /** 495 * wlan_mgmt_rx_reo_psoc_obj_destroy_notification() - psoc destroy handler for 496 * management rx-reorder feature 497 * @psoc: pointer to psoc object 498 * 499 * This function gets called from object manager when psoc is being destroyed. 500 * 501 * Return: QDF_STATUS 502 */ 503 static inline QDF_STATUS 504 wlan_mgmt_rx_reo_psoc_obj_destroy_notification(struct wlan_objmgr_psoc *psoc) 505 { 506 return QDF_STATUS_SUCCESS; 507 } 508 509 /** 510 * wlan_mgmt_rx_reo_attach() - Initializes the per pdev data structures related 511 * to management rx-reorder module 512 * @pdev: pointer to pdev object 513 * 514 * Return: QDF_STATUS 515 */ 516 static inline QDF_STATUS 517 wlan_mgmt_rx_reo_attach(struct wlan_objmgr_pdev *pdev) 518 { 519 return QDF_STATUS_SUCCESS; 520 } 521 522 /** 523 * wlan_mgmt_rx_reo_detach() - Clears the per pdev data structures related to 524 * management rx-reorder module 525 * @pdev: pointer to pdev object 526 * 527 * Return: QDF_STATUS 528 */ 529 static inline QDF_STATUS 530 wlan_mgmt_rx_reo_detach(struct wlan_objmgr_pdev *pdev) 531 { 532 return QDF_STATUS_SUCCESS; 533 } 534 535 /** 536 * wlan_mgmt_rx_reo_init() - Initializes the management rx-reorder module 537 * 538 * This function gets called from dispatcher init and initializes the management 539 * rx-reorder module. 540 * 541 * Return: QDF_STATUS 542 */ 543 static inline QDF_STATUS 544 wlan_mgmt_rx_reo_init(void) 545 { 546 return QDF_STATUS_SUCCESS; 547 } 548 549 /** 550 * wlan_mgmt_rx_reo_deinit() - De initializes the management rx-reorder module 551 * 552 * This function gets called from dispatcher deinit and de initializes the 553 * management rx-reorder module. 554 * 555 * Return: QDF_STATUS 556 */ 557 static inline QDF_STATUS 558 wlan_mgmt_rx_reo_deinit(void) 559 { 560 return QDF_STATUS_SUCCESS; 561 } 562 #endif /* WLAN_MGMT_RX_REO_SUPPORT */ 563 #endif /* _WLAN_MGMT_TXRX_RX_REO_UTILS_API_H_ */ 564