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