1 /* 2 * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for 5 * any purpose with or without fee is hereby granted, provided that the 6 * above copyright notice and this permission notice appear in all 7 * copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 11 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 12 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 13 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 14 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 15 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16 * PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19 /** 20 * DOC: wlan_dp_ucfg_api.h 21 * 22 * TDLS north bound interface declaration 23 */ 24 25 #if !defined(_WLAN_DP_UCFG_API_H_) 26 #define _WLAN_DP_UCFG_API_H_ 27 28 #include <scheduler_api.h> 29 #include <wlan_objmgr_cmn.h> 30 #include <wlan_objmgr_psoc_obj.h> 31 #include <wlan_objmgr_pdev_obj.h> 32 #include <wlan_objmgr_vdev_obj.h> 33 #include "pld_common.h" 34 #include <wlan_dp_public_struct.h> 35 #include <cdp_txrx_misc.h> 36 #include "wlan_dp_objmgr.h" 37 #include "wlan_qmi_public_struct.h" 38 39 #define DP_IGNORE_NUD_FAIL 0 40 #define DP_DISCONNECT_AFTER_NUD_FAIL 1 41 #define DP_ROAM_AFTER_NUD_FAIL 2 42 #define DP_DISCONNECT_AFTER_ROAM_FAIL 3 43 44 #ifdef WLAN_NUD_TRACKING 45 bool 46 ucfg_dp_is_roam_after_nud_enabled(struct wlan_objmgr_psoc *psoc); 47 48 bool 49 ucfg_dp_is_disconect_after_roam_fail(struct wlan_objmgr_psoc *psoc); 50 #else 51 static inline bool 52 ucfg_dp_is_roam_after_nud_enabled(struct wlan_objmgr_psoc *psoc) 53 { 54 return false; 55 } 56 57 static inline bool 58 ucfg_dp_is_disconect_after_roam_fail(struct wlan_objmgr_psoc *psoc) 59 { 60 return false; 61 } 62 #endif 63 64 /** 65 * ucfg_dp_update_link_mac_addr() - Update the dp_link mac address, during MLO 66 * link switch. 67 * @vdev: Objmgr vdev corresponding to the dp_link 68 * @new_mac_addr: New mac address of the dp_link 69 * @is_link_switch: Flag to indicate if the link mac addr update is as a part 70 * of MLO link switch. 71 * 72 * Return: QDF_STATUS 73 */ 74 QDF_STATUS ucfg_dp_update_link_mac_addr(struct wlan_objmgr_vdev *vdev, 75 struct qdf_mac_addr *new_mac_addr, 76 bool is_link_switch); 77 78 /** 79 * ucfg_dp_update_def_link() - update DP interface default link 80 * @psoc: psoc handle 81 * @intf_mac: interface MAC address 82 * @vdev: objmgr vdev handle to set the def_link in dp_intf 83 * 84 */ 85 void ucfg_dp_update_def_link(struct wlan_objmgr_psoc *psoc, 86 struct qdf_mac_addr *intf_mac, 87 struct wlan_objmgr_vdev *vdev); 88 89 /** 90 * ucfg_dp_update_intf_mac() - update DP interface MAC address 91 * @psoc: psoc handle 92 * @cur_mac: Current MAC address 93 * @new_mac: new MAC address 94 * @vdev: objmgr vdev handle to set the def_link in dp_intf 95 * 96 */ 97 void ucfg_dp_update_intf_mac(struct wlan_objmgr_psoc *psoc, 98 struct qdf_mac_addr *cur_mac, 99 struct qdf_mac_addr *new_mac, 100 struct wlan_objmgr_vdev *vdev); 101 102 /** 103 * ucfg_dp_destroy_intf() - DP module interface deletion 104 * @psoc: psoc handle 105 * @intf_addr: Interface MAC address 106 * 107 */ 108 QDF_STATUS ucfg_dp_destroy_intf(struct wlan_objmgr_psoc *psoc, 109 struct qdf_mac_addr *intf_addr); 110 111 /** 112 * ucfg_dp_create_intf() - DP module interface creation 113 * @psoc: psoc handle 114 * @intf_addr: Interface MAC address 115 * @ndev : netdev object 116 * 117 */ 118 QDF_STATUS ucfg_dp_create_intf(struct wlan_objmgr_psoc *psoc, 119 struct qdf_mac_addr *intf_addr, 120 qdf_netdev_t ndev); 121 122 void ucfg_dp_set_hif_handle(struct wlan_objmgr_psoc *psoc, 123 struct hif_opaque_softc *hif_handle); 124 void ucfg_dp_set_cmn_dp_handle(struct wlan_objmgr_psoc *psoc, 125 ol_txrx_soc_handle soc); 126 /** 127 * ucfg_dp_init() - DP module initialization API 128 * 129 * Return: QDF_STATUS 130 */ 131 QDF_STATUS ucfg_dp_init(void); 132 133 /** 134 * ucfg_dp_deinit() - DP module deinitialization API 135 * 136 * Return: QDF_STATUS 137 */ 138 QDF_STATUS ucfg_dp_deinit(void); 139 140 /** 141 * ucfg_dp_psoc_open() - DP component Open 142 * @psoc: pointer to psoc object 143 * 144 * Return: QDF Status 145 */ 146 QDF_STATUS ucfg_dp_psoc_open(struct wlan_objmgr_psoc *psoc); 147 148 /** 149 * ucfg_dp_psoc_close() - DP component Close 150 * @psoc: pointer to psoc object 151 * 152 * Return: QDF Status 153 */ 154 QDF_STATUS ucfg_dp_psoc_close(struct wlan_objmgr_psoc *psoc); 155 156 /** 157 * ucfg_dp_suspend_wlan() - update suspend state in DP component 158 * @psoc: pointer to psoc object 159 * 160 * Return: None 161 */ 162 void ucfg_dp_suspend_wlan(struct wlan_objmgr_psoc *psoc); 163 164 /** 165 * ucfg_dp_resume_wlan() - update resume state in DP component 166 * @psoc: pointer to psoc object 167 * 168 * Return: None 169 */ 170 void ucfg_dp_resume_wlan(struct wlan_objmgr_psoc *psoc); 171 172 /** 173 * ucfg_dp_update_config() - DP module config update 174 * @psoc: pointer to psoc object 175 * @req : user config 176 * 177 * Return: QDF_STATUS 178 */ 179 QDF_STATUS 180 ucfg_dp_update_config(struct wlan_objmgr_psoc *psoc, 181 struct wlan_dp_user_config *req); 182 /** 183 * ucfg_dp_wait_complete_tasks() - wait for DP tasks to complete 184 * Called from legacy layer to wait DP tasks completion 185 * 186 * Return: None 187 */ 188 void 189 ucfg_dp_wait_complete_tasks(void); 190 191 /** 192 * ucfg_dp_remove_conn_info() - Remove DP STA intf connection info 193 * @vdev: vdev mapped to STA DP interface 194 * 195 * Return: QDF_STATUS 196 */ 197 void 198 ucfg_dp_remove_conn_info(struct wlan_objmgr_vdev *vdev); 199 200 /** 201 * ucfg_dp_conn_info_set_bssid() - set BSSID info in STA intf 202 * @vdev: vdev mapped to STA DP interface 203 * @bssid: BSSID mac 204 * 205 * Return: None 206 */ 207 void ucfg_dp_conn_info_set_bssid(struct wlan_objmgr_vdev *vdev, 208 struct qdf_mac_addr *bssid); 209 210 /** 211 * ucfg_dp_conn_info_set_arp_service() - set ARP service info 212 * @vdev: vdev mapped to STA DP interface 213 * @proxy_arp_service: ARP service info 214 * 215 * Return: None 216 */ 217 void ucfg_dp_conn_info_set_arp_service(struct wlan_objmgr_vdev *vdev, 218 uint8_t proxy_arp_service); 219 220 /** 221 * ucfg_dp_conn_info_set_peer_authenticate() - set Peer authenticated state 222 * @vdev: vdev mapped to STA DP interface 223 * @is_authenticated: Peer authenticated info 224 * 225 * Return: None 226 */ 227 void ucfg_dp_conn_info_set_peer_authenticate(struct wlan_objmgr_vdev *vdev, 228 uint8_t is_authenticated); 229 230 /** 231 * ucfg_dp_conn_info_set_peer_mac() - set peer mac info in DP intf 232 * @vdev: vdev mapped to STA DP interface 233 * @peer_mac: Peer MAC information 234 * 235 * Return: None 236 */ 237 void ucfg_dp_conn_info_set_peer_mac(struct wlan_objmgr_vdev *vdev, 238 struct qdf_mac_addr *peer_mac); 239 240 /** 241 * ucfg_dp_softap_check_wait_for_tx_eap_pkt() - wait for TX EAP pkt in SAP 242 * @vdev: vdev mapped to SAP DP interface 243 * @mac_addr: Peer MAC address info 244 * 245 * Return: None 246 */ 247 void ucfg_dp_softap_check_wait_for_tx_eap_pkt(struct wlan_objmgr_vdev *vdev, 248 struct qdf_mac_addr *mac_addr); 249 250 /** 251 * ucfg_dp_update_dhcp_state_on_disassoc() - update DHCP during disassoc 252 * @vdev: vdev mapped to SAP DP interface 253 * @mac_addr: Peer MAC address info 254 * 255 * Return: None 256 */ 257 void ucfg_dp_update_dhcp_state_on_disassoc(struct wlan_objmgr_vdev *vdev, 258 struct qdf_mac_addr *mac_addr); 259 260 /** 261 * ucfg_dp_set_dfs_cac_tx() - update DFS CAC TX block info 262 * @vdev: vdev mapped to SAP DP interface 263 * @tx_block: true if TX need to be blocked 264 * 265 * Return: None 266 */ 267 void ucfg_dp_set_dfs_cac_tx(struct wlan_objmgr_vdev *vdev, 268 bool tx_block); 269 270 /** 271 * ucfg_dp_set_bss_state_start() - update BSS state for SAP intf 272 * @vdev: vdev mapped to SAP DP interface 273 * @start: true if BSS state is started 274 * 275 * Return: None 276 */ 277 void ucfg_dp_set_bss_state_start(struct wlan_objmgr_vdev *vdev, bool start); 278 279 /** 280 * ucfg_dp_lro_set_reset() - LRO set/reset in DP 281 * @vdev: vdev mapped to DP interface 282 * @enable_flag: Enable/disable LRO feature 283 * 284 * Return: 0 on success and non zero on failure. 285 */ 286 QDF_STATUS ucfg_dp_lro_set_reset(struct wlan_objmgr_vdev *vdev, 287 uint8_t enable_flag); 288 /** 289 * ucfg_dp_is_ol_enabled() - Get ol enable/disable info 290 * @psoc: PSOC mapped to DP context 291 * 292 * Return: true if OL enabled 293 */ 294 bool ucfg_dp_is_ol_enabled(struct wlan_objmgr_psoc *psoc); 295 296 #ifdef RECEIVE_OFFLOAD 297 /** 298 * ucfg_dp_rx_handle_concurrency() - Handle concurrency setting in DP 299 * @psoc: PSOC mapped to DP context 300 * @disable: true/false to disable/enable the Rx offload 301 * 302 * Return: None 303 */ 304 void ucfg_dp_rx_handle_concurrency(struct wlan_objmgr_psoc *psoc, 305 bool disable); 306 #else 307 static inline 308 void ucfg_dp_rx_handle_concurrency(struct wlan_objmgr_psoc *psoc, 309 bool disable) { } 310 #endif 311 312 /** 313 * ucfg_dp_is_rx_common_thread_enabled() - Get common thread enable/disable info 314 * @psoc: PSOC mapped to DP context 315 * 316 * Return: true if common thread enabled 317 */ 318 bool ucfg_dp_is_rx_common_thread_enabled(struct wlan_objmgr_psoc *psoc); 319 320 /** 321 * ucfg_dp_is_rx_threads_enabled() - Get RX DP threads info 322 * @psoc: PSOC mapped to DP context 323 * 324 * Return: true if DP RX threads enabled 325 */ 326 bool ucfg_dp_is_rx_threads_enabled(struct wlan_objmgr_psoc *psoc); 327 328 /** 329 * ucfg_dp_rx_ol_init() - Initialize Rx offload mode (LRO or GRO) 330 * @psoc: PSOC mapped to DP context 331 * @is_wifi3_0_target: true if it wifi3.0 target 332 * 333 * Return: 0 on success and non zero on failure. 334 */ 335 QDF_STATUS ucfg_dp_rx_ol_init(struct wlan_objmgr_psoc *psoc, 336 bool is_wifi3_0_target); 337 338 /** 339 * ucfg_dp_start_xmit() - Transmit packet on STA interface 340 * @nbuf: n/w buffer to transmitted 341 * @vdev: vdev mapped to STA DP interface 342 * 343 * Return: 0 on success and non zero on failure. 344 */ 345 QDF_STATUS 346 ucfg_dp_start_xmit(qdf_nbuf_t nbuf, struct wlan_objmgr_vdev *vdev); 347 348 /** 349 * ucfg_dp_rx_packet_cbk() - Receive packet on STA interface 350 * @nbuf: n/w buffer to be received 351 * @vdev: vdev mapped to STA DP interface 352 * 353 * Return: 0 on success and non zero on failure. 354 */ 355 QDF_STATUS ucfg_dp_rx_packet_cbk(struct wlan_objmgr_vdev *vdev, 356 qdf_nbuf_t nbuf); 357 358 /** 359 * ucfg_dp_tx_timeout() - called during transmission timeout on STA 360 * @vdev: vdev mapped to STA DP interface 361 * 362 * Return: None 363 */ 364 void ucfg_dp_tx_timeout(struct wlan_objmgr_vdev *vdev); 365 366 /** 367 * ucfg_dp_softap_tx_timeout() - called during transmission timeout on SAP 368 * @vdev: vdev mapped to SAP DP interface 369 * 370 * Return: None 371 */ 372 void ucfg_dp_softap_tx_timeout(struct wlan_objmgr_vdev *vdev); 373 374 /** 375 * ucfg_dp_softap_start_xmit() - Transmit packet on SAP interface 376 * @nbuf: n/w buffer to transmitted 377 * @vdev: vdev mapped to SAP DP interface 378 * 379 * Return: 0 on success and non zero on failure. 380 */ 381 QDF_STATUS 382 ucfg_dp_softap_start_xmit(qdf_nbuf_t nbuf, struct wlan_objmgr_vdev *vdev); 383 384 /** 385 * ucfg_dp_get_dev_stats() - Get netdev stats info 386 * @dev: Pointer to network device 387 * 388 * Return: qdf_net_dev_stats info 389 */ 390 qdf_net_dev_stats *ucfg_dp_get_dev_stats(qdf_netdev_t dev); 391 392 /** 393 * ucfg_dp_inc_rx_pkt_stats() - DP increment RX pkt stats 394 * @vdev: VDEV mapped to DP interface 395 * @pkt_len: packet length to be incremented in stats 396 * @delivered: pkts delivered or not 397 * 398 * Return: None 399 */ 400 void ucfg_dp_inc_rx_pkt_stats(struct wlan_objmgr_vdev *vdev, 401 uint32_t pkt_len, 402 bool delivered); 403 404 /** 405 * ucfg_dp_get_rx_softirq_yield_duration() - Get rx soft IRQ yield duration 406 * @psoc: pointer to psoc object 407 * 408 * Return: soft IRQ yield duration 409 */ 410 uint64_t 411 ucfg_dp_get_rx_softirq_yield_duration(struct wlan_objmgr_psoc *psoc); 412 413 /** 414 * ucfg_dp_register_rx_mic_error_ind_handler : register mic error handler. 415 * @soc: soc handle 416 */ 417 void ucfg_dp_register_rx_mic_error_ind_handler(void *soc); 418 419 /** 420 * ucfg_dp_sta_register_txrx_ops() - Register ops for TX/RX operations in STA 421 * @vdev: vdev mapped to STA DP interface 422 * 423 * Return: 0 on success and non zero on failure. 424 */ 425 QDF_STATUS ucfg_dp_sta_register_txrx_ops(struct wlan_objmgr_vdev *vdev); 426 427 #ifdef FEATURE_WLAN_TDLS 428 /** 429 * ucfg_dp_tdlsta_register_txrx_ops() - Register ops for TX/RX operations 430 * @vdev: vdev mapped to TDLS STA DP interface 431 * 432 * Return: 0 on success and non zero on failure. 433 */ 434 QDF_STATUS ucfg_dp_tdlsta_register_txrx_ops(struct wlan_objmgr_vdev *vdev); 435 #else 436 static inline 437 QDF_STATUS ucfg_dp_tdlsta_register_txrx_ops(struct wlan_objmgr_vdev *vdev) 438 { 439 return QDF_STATUS_E_NOSUPPORT; 440 } 441 #endif 442 443 /** 444 * ucfg_dp_ocb_register_txrx_ops() - Register ops for TX/RX operations 445 * @vdev: vdev mapped to OCB DP interface 446 * 447 * Return: 0 on success and non zero on failure. 448 */ 449 QDF_STATUS ucfg_dp_ocb_register_txrx_ops(struct wlan_objmgr_vdev *vdev); 450 451 #ifdef FEATURE_MONITOR_MODE_SUPPORT 452 /** 453 * ucfg_dp_mon_register_txrx_ops() - Register ops for TX/RX operations 454 * @vdev: vdev mapped to Monitor mode DP interface 455 * 456 * Return: 0 on success and non zero on failure. 457 */ 458 QDF_STATUS ucfg_dp_mon_register_txrx_ops(struct wlan_objmgr_vdev *vdev); 459 #else 460 static inline 461 QDF_STATUS ucfg_dp_mon_register_txrx_ops(struct wlan_objmgr_vdev *vdev) 462 { 463 return QDF_STATUS_E_NOSUPPORT; 464 } 465 #endif 466 467 /** 468 * ucfg_dp_softap_register_txrx_ops() - Register ops for TX/RX operations 469 * @vdev: vdev mapped to SAP mode DP interface 470 * @txrx_ops: Tx and Rx data transfer ops 471 * 472 * Return: 0 on success and non zero on failure. 473 */ 474 QDF_STATUS ucfg_dp_softap_register_txrx_ops(struct wlan_objmgr_vdev *vdev, 475 struct ol_txrx_ops *txrx_ops); 476 477 /** 478 * ucfg_dp_register_pkt_capture_callbacks() - Register ops for pkt capture operations 479 * @vdev: vdev mapped to DP interface 480 * 481 * Return: 0 on success and non zero on failure. 482 */ 483 QDF_STATUS 484 ucfg_dp_register_pkt_capture_callbacks(struct wlan_objmgr_vdev *vdev); 485 486 /** 487 * ucfg_dp_bbm_context_init() - Initialize BBM context 488 * @psoc: psoc handle 489 * 490 * Returns: error code 491 */ 492 int ucfg_dp_bbm_context_init(struct wlan_objmgr_psoc *psoc); 493 494 /** 495 * ucfg_dp_bbm_context_deinit() - De-initialize BBM context 496 * @psoc: psoc handle 497 * 498 * Returns: None 499 */ 500 void ucfg_dp_bbm_context_deinit(struct wlan_objmgr_psoc *psoc); 501 502 /** 503 * ucfg_dp_bbm_apply_independent_policy() - Apply independent policies 504 * to set the bus bw level 505 * @psoc: psoc handle 506 * @params: BBM policy related params 507 * 508 * The function applies BBM related policies and appropriately sets the bus 509 * bandwidth level. 510 * 511 * Returns: None 512 */ 513 void ucfg_dp_bbm_apply_independent_policy(struct wlan_objmgr_psoc *psoc, 514 struct bbm_params *params); 515 516 /** 517 * ucfg_dp_periodic_sta_stats_start() - Start displaying periodic stats for STA 518 * @vdev: Pointer to the vdev 519 * 520 * Return: none 521 */ 522 void ucfg_dp_periodic_sta_stats_start(struct wlan_objmgr_vdev *vdev); 523 524 /** 525 * ucfg_dp_periodic_sta_stats_stop() - Stop displaying periodic stats for STA 526 * @vdev: Pointer to the vdev 527 * 528 * Return: none 529 */ 530 void ucfg_dp_periodic_sta_stats_stop(struct wlan_objmgr_vdev *vdev); 531 532 /** 533 * ucfg_dp_set_rx_mode_rps() - Enable/disable RPS in SAP mode 534 * @enable: Set true to enable RPS in SAP mode 535 * 536 * Callback function registered with datapath 537 * 538 * Return: none 539 */ 540 void ucfg_dp_set_rx_mode_rps(bool enable); 541 542 /** 543 * ucfg_dp_try_send_rps_ind() - send rps indication to daemon 544 * @vdev: vdev handle 545 * 546 * If RPS feature enabled by INI, send RPS enable indication to daemon 547 * Indication contents is the name of interface to find correct sysfs node 548 * Should send all available interfaces 549 * 550 * Return: none 551 */ 552 void ucfg_dp_try_send_rps_ind(struct wlan_objmgr_vdev *vdev); 553 554 /** 555 * ucfg_dp_reg_ipa_rsp_ind() - Resiter RSP IND cb with IPA component 556 * @pdev: pdev handle 557 * 558 * Returns: None 559 */ 560 void ucfg_dp_reg_ipa_rsp_ind(struct wlan_objmgr_pdev *pdev); 561 562 /** 563 * ucfg_dp_try_set_rps_cpu_mask - set RPS CPU mask for interfaces 564 * @psoc: psoc handle 565 * 566 * Return: none 567 */ 568 void ucfg_dp_try_set_rps_cpu_mask(struct wlan_objmgr_psoc *psoc); 569 570 /** 571 * ucfg_dp_add_latency_critical_client() - Add latency critical client 572 * @vdev: vdev handle (Should not be NULL) 573 * @phymode: the phymode of the connected adapter 574 * 575 * This function checks if the present connection is latency critical 576 * and adds to the latency critical clients count and informs the 577 * datapath about this connection being latency critical. 578 * 579 * Returns: None 580 */ 581 void ucfg_dp_add_latency_critical_client(struct wlan_objmgr_vdev *vdev, 582 enum qca_wlan_802_11_mode phymode); 583 584 /** 585 * ucfg_dp_del_latency_critical_client() - Remove latency critical client 586 * @vdev: vdev handle (Should not be NULL) 587 * @phymode: the phymode of the connected adapter 588 * 589 * This function checks if the present connection was latency critical 590 * and removes from the latency critical clients count and informs the 591 * datapath about the removed connection being latency critical. 592 * 593 * Returns: None 594 */ 595 void ucfg_dp_del_latency_critical_client(struct wlan_objmgr_vdev *vdev, 596 enum qca_wlan_802_11_mode phymode); 597 598 /** 599 * ucfg_dp_reset_tcp_delack() - Reset TCP delay ACK 600 * level 601 * @psoc: psoc handle 602 * 603 * Return: None 604 */ 605 void ucfg_dp_reset_tcp_delack(struct wlan_objmgr_psoc *psoc); 606 607 /** 608 * ucfg_dp_set_current_throughput_level() - update the current vote 609 * level 610 * @psoc: psoc handle 611 * @next_vote_level: pld_bus_width_type voting level 612 * 613 * This function updates the current vote level to the new level 614 * provided 615 * 616 * Return: None 617 */ 618 void 619 ucfg_dp_set_current_throughput_level(struct wlan_objmgr_psoc *psoc, 620 enum pld_bus_width_type next_vote_level); 621 622 /** 623 * ucfg_wlan_dp_display_tx_rx_histogram() - display tx rx histogram 624 * @psoc: psoc handle 625 * 626 * Return: none 627 */ 628 void ucfg_wlan_dp_display_tx_rx_histogram(struct wlan_objmgr_psoc *psoc); 629 630 /** 631 * ucfg_wlan_dp_clear_tx_rx_histogram() - clear tx rx histogram 632 * @psoc: psoc handle 633 * 634 * Return: none 635 */ 636 void ucfg_wlan_dp_clear_tx_rx_histogram(struct wlan_objmgr_psoc *psoc); 637 638 /** 639 * ucfg_dp_set_high_bus_bw_request() - Set high bandwidth request. 640 * @psoc: psoc handle 641 * @vdev_id: vdev_id 642 * @high_bus_bw : High bus bandwidth requested 643 * 644 * Return: None. 645 */ 646 void 647 ucfg_dp_set_high_bus_bw_request(struct wlan_objmgr_psoc *psoc, 648 uint8_t vdev_id, 649 bool high_bus_bw); 650 651 /** 652 * ucfg_dp_bus_bw_compute_timer_start() - start the bandwidth timer 653 * @psoc: psoc handle 654 * 655 * Return: None 656 */ 657 void ucfg_dp_bus_bw_compute_timer_start(struct wlan_objmgr_psoc *psoc); 658 659 /** 660 * ucfg_dp_bus_bw_compute_timer_try_start() - try to start the bandwidth timer 661 * @psoc: psoc handle 662 * 663 * This function ensures there is at least one intf in the associated state 664 * before starting the bandwidth timer. 665 * 666 * Return: None 667 */ 668 void ucfg_dp_bus_bw_compute_timer_try_start(struct wlan_objmgr_psoc *psoc); 669 670 /** 671 * ucfg_dp_bus_bw_compute_timer_stop() - stop the bandwidth timer 672 * @psoc: psoc handle 673 * 674 * Return: None 675 */ 676 void ucfg_dp_bus_bw_compute_timer_stop(struct wlan_objmgr_psoc *psoc); 677 678 /** 679 * ucfg_dp_bus_bw_compute_timer_try_stop() - try to stop the bandwidth timer 680 * @psoc: psoc handle 681 * 682 * This function ensures there are no interface in the associated state before 683 * stopping the bandwidth timer. 684 * 685 * Return: None 686 */ 687 void ucfg_dp_bus_bw_compute_timer_try_stop(struct wlan_objmgr_psoc *psoc); 688 689 /** 690 * ucfg_dp_bus_bw_compute_prev_txrx_stats() - get tx and rx stats 691 * @vdev: vdev handle 692 * 693 * This function get the collected tx and rx stats before starting 694 * the bus bandwidth timer. 695 * 696 * Return: None 697 */ 698 void ucfg_dp_bus_bw_compute_prev_txrx_stats(struct wlan_objmgr_vdev *vdev); 699 700 /** 701 * ucfg_dp_bus_bw_compute_reset_prev_txrx_stats() - reset previous txrx stats 702 * @vdev: vdev handle 703 * 704 * This function resets the adapter previous tx rx stats. 705 * 706 * Return: None 707 */ 708 void 709 ucfg_dp_bus_bw_compute_reset_prev_txrx_stats(struct wlan_objmgr_vdev *vdev); 710 711 /** 712 * ucfg_dp_nud_set_gateway_addr() - set gateway mac address 713 * @vdev: vdev handle 714 * @gw_mac_addr: mac address to be set 715 * 716 * Return: none 717 */ 718 void ucfg_dp_nud_set_gateway_addr(struct wlan_objmgr_vdev *vdev, 719 struct qdf_mac_addr gw_mac_addr); 720 721 /** 722 * ucfg_dp_nud_event() - netevent callback 723 * @netdev_mac_addr: netdev MAC addr 724 * @gw_mac_addr: Gateway MAC address 725 * @nud_state : NUD State 726 * 727 * Return: None 728 */ 729 void ucfg_dp_nud_event(struct qdf_mac_addr *netdev_mac_addr, 730 struct qdf_mac_addr *gw_mac_addr, 731 uint8_t nud_state); 732 733 /** 734 * ucfg_dp_get_arp_stats_event_handler - ARP get stats event handler 735 * 736 * @psoc: PSOC Handle 737 * @rsp : response message 738 * 739 * Return : 0 on success else error code. 740 */ 741 742 QDF_STATUS ucfg_dp_get_arp_stats_event_handler(struct wlan_objmgr_psoc *psoc, 743 struct dp_rsp_stats *rsp); 744 745 /** 746 * ucfg_dp_get_arp_request_ctx - Get ARP request context 747 * 748 * @psoc: PSOC Handle 749 * 750 * Return : ARP request context 751 */ 752 void *ucfg_dp_get_arp_request_ctx(struct wlan_objmgr_psoc *psoc); 753 754 /** 755 * ucfg_dp_nud_reset_tracking() - reset NUD tracking 756 * @vdev: vdev handle 757 * 758 * Return: None 759 */ 760 void ucfg_dp_nud_reset_tracking(struct wlan_objmgr_vdev *vdev); 761 762 /** 763 * ucfg_dp_nud_tracking_enabled - Check if NUD tracking is enabled 764 * 765 * @psoc: PSOC Handle 766 * 767 * Return : NUD tracking value. 768 */ 769 uint8_t ucfg_dp_nud_tracking_enabled(struct wlan_objmgr_psoc *psoc); 770 771 /** 772 * ucfg_dp_nud_indicate_roam() - reset NUD when roaming happens 773 * @vdev: vdev handle 774 * 775 * Return: None 776 */ 777 void ucfg_dp_nud_indicate_roam(struct wlan_objmgr_vdev *vdev); 778 779 /** 780 * ucfg_dp_clear_arp_stats() - Clear ARP Stats 781 * @vdev: vdev context 782 * 783 * Return: None 784 */ 785 void ucfg_dp_clear_arp_stats(struct wlan_objmgr_vdev *vdev); 786 787 /** 788 * ucfg_dp_clear_dns_stats() - Clear DNS Stats 789 * @vdev: vdev context 790 * 791 * Return: None 792 */ 793 void ucfg_dp_clear_dns_stats(struct wlan_objmgr_vdev *vdev); 794 795 /** 796 * ucfg_dp_clear_tcp_stats() - Clear TCP Stats 797 * @vdev: vdev context 798 * 799 * Return: None 800 */ 801 void ucfg_dp_clear_tcp_stats(struct wlan_objmgr_vdev *vdev); 802 803 /** 804 * ucfg_dp_clear_icmpv4_stats() - Clear ICMPv4 Stats 805 * @vdev: vdev context 806 * 807 * Return: None 808 */ 809 void ucfg_dp_clear_icmpv4_stats(struct wlan_objmgr_vdev *vdev); 810 811 /** 812 * ucfg_dp_clear_dns_payload_value() - Clear DNS payload value 813 * @vdev: vdev context 814 * 815 * Return: None 816 */ 817 void ucfg_dp_clear_dns_payload_value(struct wlan_objmgr_vdev *vdev); 818 819 /** 820 * ucfg_dp_set_pkt_type_bitmap_value() - Set Packet type bitmap value 821 * @vdev: vdev context 822 * @value: bitmap value 823 * 824 * Return: None 825 */ 826 void ucfg_dp_set_pkt_type_bitmap_value(struct wlan_objmgr_vdev *vdev, 827 uint32_t value); 828 829 /** 830 * ucfg_dp_intf_get_pkt_type_bitmap_value() - Get packt type bitmap info 831 * @intf_ctx: DP interface context 832 * 833 * Return: bitmap information 834 */ 835 uint32_t ucfg_dp_intf_get_pkt_type_bitmap_value(void *intf_ctx); 836 837 /** 838 * ucfg_dp_set_track_dest_ipv4_value() - Set track_dest_ipv4 value 839 * @vdev: vdev context 840 * @value: dest ipv4 value 841 * 842 * Return: None 843 */ 844 void ucfg_dp_set_track_dest_ipv4_value(struct wlan_objmgr_vdev *vdev, 845 uint32_t value); 846 847 /** 848 * ucfg_dp_set_track_dest_port_value() - Set track_dest_port value 849 * @vdev: vdev context 850 * @value: dest port value 851 * 852 * Return: None 853 */ 854 void ucfg_dp_set_track_dest_port_value(struct wlan_objmgr_vdev *vdev, 855 uint32_t value); 856 857 /** 858 * ucfg_dp_set_track_src_port_value() - Set track_dest_port value 859 * @vdev: vdev context 860 * @value: src port value 861 * 862 * Return: None 863 */ 864 void ucfg_dp_set_track_src_port_value(struct wlan_objmgr_vdev *vdev, 865 uint32_t value); 866 867 /** 868 * ucfg_dp_set_track_dns_domain_len_value() - Set track_dns_domain_len value 869 * @vdev: vdev context 870 * @value: dns domain len value 871 * 872 * Return: None 873 */ 874 void ucfg_dp_set_track_dns_domain_len_value(struct wlan_objmgr_vdev *vdev, 875 uint32_t value); 876 877 /** 878 * ucfg_dp_set_track_arp_ip_value() - Set track_arp_ip value 879 * @vdev: vdev context 880 * @value: ARP IP value 881 * 882 * Return: None 883 */ 884 void ucfg_dp_set_track_arp_ip_value(struct wlan_objmgr_vdev *vdev, 885 uint32_t value); 886 887 /** 888 * ucfg_dp_get_pkt_type_bitmap_value() - Get pkt_type_bitmap value 889 * @vdev: vdev context 890 * 891 * Return: pkt_type_bitmap value 892 */ 893 uint32_t ucfg_dp_get_pkt_type_bitmap_value(struct wlan_objmgr_vdev *vdev); 894 895 /** 896 * ucfg_dp_get_dns_payload_value() - Get dns_payload value 897 * @vdev: vdev context 898 * @dns_query : DNS query pointer 899 * 900 * Return: None 901 */ 902 void ucfg_dp_get_dns_payload_value(struct wlan_objmgr_vdev *vdev, 903 uint8_t *dns_query); 904 905 /** 906 * ucfg_dp_get_track_dns_domain_len_value() - Get track_dns_domain_len value 907 * @vdev: vdev context 908 * 909 * Return: track_dns_domain_len value 910 */ 911 uint32_t ucfg_dp_get_track_dns_domain_len_value(struct wlan_objmgr_vdev *vdev); 912 913 /** 914 * ucfg_dp_get_track_dest_port_value() - Get track_dest_port value 915 * @vdev: vdev context 916 * 917 * Return: track_dest_port value 918 */ 919 uint32_t ucfg_dp_get_track_dest_port_value(struct wlan_objmgr_vdev *vdev); 920 921 /** 922 * ucfg_dp_get_track_src_port_value() - Get track_src_port value 923 * @vdev: vdev context 924 * 925 * Return: track_src_port value 926 */ 927 uint32_t ucfg_dp_get_track_src_port_value(struct wlan_objmgr_vdev *vdev); 928 929 /** 930 * ucfg_dp_get_track_dest_ipv4_value() - Get track_dest_ipv4 value 931 * @vdev: vdev context 932 * 933 * Return: track_dest_ipv4 value 934 */ 935 uint32_t ucfg_dp_get_track_dest_ipv4_value(struct wlan_objmgr_vdev *vdev); 936 937 /** 938 * ucfg_dp_get_dad_value() - Get dad value 939 * @vdev: vdev context 940 * 941 * Return: dad value 942 */ 943 bool ucfg_dp_get_dad_value(struct wlan_objmgr_vdev *vdev); 944 945 /** 946 * ucfg_dp_get_con_status_value() - Get con_status value 947 * @vdev: vdev context 948 * 949 * Return: con_status value 950 */ 951 bool ucfg_dp_get_con_status_value(struct wlan_objmgr_vdev *vdev); 952 953 /** 954 * ucfg_dp_get_link_id() - Get link_id 955 * @vdev: vdev context 956 * 957 * Return: link_id 958 */ 959 uint8_t ucfg_dp_get_link_id(struct wlan_objmgr_vdev *vdev); 960 961 /** 962 * ucfg_dp_get_arp_stats() - Get ARP stats 963 * @vdev: vdev context 964 * 965 * Return: ARP Stats 966 */ 967 struct dp_arp_stats *ucfg_dp_get_arp_stats(struct wlan_objmgr_vdev *vdev); 968 969 /** 970 * ucfg_dp_get_icmpv4_stats() - Get ICMPv4 stats 971 * @vdev: vdev context 972 * 973 * Return: ICMPv4 Stats 974 */ 975 struct dp_icmpv4_stats 976 *ucfg_dp_get_icmpv4_stats(struct wlan_objmgr_vdev *vdev); 977 978 /** 979 * ucfg_dp_get_tcp_stats() - Get TCP stats 980 * @vdev: vdev context 981 * 982 * Return: TCP Stats 983 */ 984 struct dp_tcp_stats *ucfg_dp_get_tcp_stats(struct wlan_objmgr_vdev *vdev); 985 986 /** 987 * ucfg_dp_get_dns_stats() - Get DNS stats 988 * @vdev: vdev context 989 * 990 * Return: DNS Stats 991 */ 992 struct dp_dns_stats *ucfg_dp_get_dns_stats(struct wlan_objmgr_vdev *vdev); 993 994 /** 995 * ucfg_dp_set_nud_stats_cb() - Register callback with WMI 996 * @psoc: psoc context 997 * @cookie: callback context 998 * 999 * Return: None 1000 */ 1001 1002 void ucfg_dp_set_nud_stats_cb(struct wlan_objmgr_psoc *psoc, void *cookie); 1003 1004 /** 1005 * ucfg_dp_clear_nud_stats_cb() - Unregister callback with WMI 1006 * @psoc: psoc context 1007 * 1008 * Return: None 1009 */ 1010 void ucfg_dp_clear_nud_stats_cb(struct wlan_objmgr_psoc *psoc); 1011 1012 /** 1013 * ucfg_dp_set_dump_dp_trace() - set DP Trace 1014 * @cmd_type : command 1015 * @count : Number of lines to dump 1016 * 1017 * Return: None 1018 */ 1019 void ucfg_dp_set_dump_dp_trace(uint16_t cmd_type, uint16_t count); 1020 1021 /** 1022 * ucfg_dp_req_get_arp_stats() - Send Get ARP set request to FW 1023 * @psoc: psoc context 1024 * @params : Get ARP stats param 1025 * 1026 * Return: Status 1027 */ 1028 QDF_STATUS 1029 ucfg_dp_req_get_arp_stats(struct wlan_objmgr_psoc *psoc, 1030 struct dp_get_arp_stats_params *params); 1031 1032 /** 1033 * ucfg_dp_req_set_arp_stats() - Send Set ARP set request to FW 1034 * @psoc: psoc context 1035 * @params : Set ARP stats param 1036 * 1037 * Return: Status 1038 */ 1039 QDF_STATUS 1040 ucfg_dp_req_set_arp_stats(struct wlan_objmgr_psoc *psoc, 1041 struct dp_set_arp_stats_params *params); 1042 1043 /** 1044 * ucfg_dp_register_hdd_callbacks() - Resiter HDD callbacks with DP component 1045 * @psoc: psoc handle 1046 * @cb_obj: Callback object 1047 * 1048 * Returns: None 1049 */ 1050 void ucfg_dp_register_hdd_callbacks(struct wlan_objmgr_psoc *psoc, 1051 struct wlan_dp_psoc_callbacks *cb_obj); 1052 1053 /** 1054 * ucfg_dp_register_event_handler() - Resiter event handler with DP component 1055 * @psoc: psoc handle 1056 * @cb_obj: Callback object 1057 * 1058 * Returns: None 1059 */ 1060 void ucfg_dp_register_event_handler(struct wlan_objmgr_psoc *psoc, 1061 struct wlan_dp_psoc_nb_ops *cb_obj); 1062 1063 /** 1064 * ucfg_dp_get_bus_bw_compute_interval() - Get bus bandwidth compute interval 1065 * @psoc: psoc handle 1066 * 1067 * Returns: Bus bandwidth compute interval 1068 */ 1069 uint32_t ucfg_dp_get_bus_bw_compute_interval(struct wlan_objmgr_psoc *psoc); 1070 1071 /** 1072 * ucfg_dp_get_current_throughput_level() - get current bandwidth level 1073 * @psoc: psoc handle 1074 * 1075 * Return: current bandwidth level 1076 */ 1077 int ucfg_dp_get_current_throughput_level(struct wlan_objmgr_psoc *psoc); 1078 1079 /** 1080 * ucfg_dp_get_txrx_stats() - get dp txrx stats 1081 * @vdev: vdev handle 1082 * @dp_stats : dp_stats pointer 1083 * 1084 * This function update dp_stats pointer with DP component 1085 * txrx stats 1086 * Return: 0 on success 1087 */ 1088 QDF_STATUS ucfg_dp_get_txrx_stats(struct wlan_objmgr_vdev *vdev, 1089 struct dp_tx_rx_stats *dp_stats); 1090 1091 /* 1092 * ucfg_dp_get_net_dev_stats(): Get netdev stats 1093 * @vdev: vdev handle 1094 * @stats: To hold netdev stats 1095 * 1096 * Return: None 1097 */ 1098 void ucfg_dp_get_net_dev_stats(struct wlan_objmgr_vdev *vdev, 1099 qdf_net_dev_stats *stats); 1100 1101 /* 1102 * ucfg_dp_clear_net_dev_stats(): Clear netdev stats 1103 * @dev: Pointer to netdev 1104 * 1105 * Return: None 1106 */ 1107 void ucfg_dp_clear_net_dev_stats(qdf_netdev_t dev); 1108 1109 /** 1110 * ucfg_dp_reset_cont_txtimeout_cnt() - Reset Tx Timeout count 1111 * @vdev: vdev handle 1112 * 1113 * Return: None 1114 */ 1115 void ucfg_dp_reset_cont_txtimeout_cnt(struct wlan_objmgr_vdev *vdev); 1116 1117 /** 1118 * ucfg_dp_set_rx_thread_affinity() - Set rx thread affinity mask 1119 * @psoc: psoc handle 1120 * 1121 * Return: None 1122 */ 1123 void ucfg_dp_set_rx_thread_affinity(struct wlan_objmgr_psoc *psoc); 1124 1125 /** 1126 * ucfg_dp_get_disable_rx_ol_val() - Get Rx OL concurrency value 1127 * @psoc: psoc handle 1128 * @disable_conc : disable rx OL concurrency value 1129 * @disable_low_tput : disable rx OL low tput value 1130 * 1131 * this function reads and update value in pointer variable 1132 * passed as arguments to function. 1133 * 1134 * Return: None 1135 */ 1136 1137 void ucfg_dp_get_disable_rx_ol_val(struct wlan_objmgr_psoc *psoc, 1138 uint8_t *disable_conc, 1139 uint8_t *disable_low_tput); 1140 1141 /** 1142 * ucfg_dp_get_rx_aggregation_val() - Get Rx aggregation values 1143 * @psoc: psoc handle 1144 * 1145 * Return: Rx aggregation value 1146 */ 1147 uint32_t ucfg_dp_get_rx_aggregation_val(struct wlan_objmgr_psoc *psoc); 1148 1149 /** 1150 * ucfg_dp_set_rx_aggregation_val() - Set rx aggregation value 1151 * @psoc: psoc handle 1152 * @value : value to be set 1153 * 1154 * Return: None 1155 */ 1156 void ucfg_dp_set_rx_aggregation_val(struct wlan_objmgr_psoc *psoc, 1157 uint32_t value); 1158 1159 /** 1160 * ucfg_dp_set_tc_based_dyn_gro() - Set tc based dynamic gro 1161 * @psoc: psoc handle 1162 * @value : value to be set 1163 * 1164 * Return: None 1165 */ 1166 void ucfg_dp_set_tc_based_dyn_gro(struct wlan_objmgr_psoc *psoc, bool value); 1167 1168 /** 1169 * ucfg_dp_runtime_disable_rx_thread() - Disable rx thread 1170 * @vdev: vdev handle 1171 * @value : value to be set (true/false) 1172 * 1173 * Return: None 1174 */ 1175 void ucfg_dp_runtime_disable_rx_thread(struct wlan_objmgr_vdev *vdev, 1176 bool value); 1177 1178 /** 1179 * ucfg_dp_get_napi_enabled() - Get NAPI enabled/disabled info 1180 * @psoc: psoc handle mapped to DP context 1181 * 1182 * Return: true if NAPI enabled 1183 */ 1184 bool ucfg_dp_get_napi_enabled(struct wlan_objmgr_psoc *psoc); 1185 1186 /** 1187 * ucfg_dp_set_tc_ingress_prio() - Set tc ingress priority 1188 * @psoc: psoc handle mapped to DP context 1189 * @value: value to be set 1190 * 1191 * Return: None 1192 */ 1193 void ucfg_dp_set_tc_ingress_prio(struct wlan_objmgr_psoc *psoc, uint32_t value); 1194 1195 /** 1196 * ucfg_dp_nud_fail_data_stall_evt_enabled() - Check if NUD failuire data stall 1197 * detection is enabled 1198 * 1199 * Return: True if the data stall event is enabled 1200 */ 1201 bool ucfg_dp_nud_fail_data_stall_evt_enabled(void); 1202 1203 /** 1204 * ucfg_dp_fw_data_stall_evt_enabled() - Check if Fw data stall 1205 * detection is enabled 1206 * 1207 * Return: data stall event mask 1208 */ 1209 uint32_t ucfg_dp_fw_data_stall_evt_enabled(void); 1210 1211 /** 1212 * ucfg_dp_get_bus_bw_high_threshold() - Get the bus bw high threshold 1213 * @psoc: psoc handle 1214 * 1215 * Return: current bus bw high threshold 1216 */ 1217 uint32_t ucfg_dp_get_bus_bw_high_threshold(struct wlan_objmgr_psoc *psoc); 1218 1219 /** 1220 * ucfg_dp_event_eapol_log() - send event to wlan diag 1221 * @nbuf: Network buffer ptr 1222 * @dir: direction 1223 * 1224 * Return: None 1225 */ 1226 void ucfg_dp_event_eapol_log(qdf_nbuf_t nbuf, enum qdf_proto_dir dir); 1227 1228 /** 1229 * ucfg_dp_softap_inspect_dhcp_packet() - Inspect DHCP packet 1230 * @vdev: Vdev handle 1231 * @nbuf: pointer to network buffer 1232 * @dir: direction 1233 * 1234 * Inspect the Tx/Rx frame, and send DHCP START/STOP notification to the FW 1235 * through WMI message, during DHCP based IP address acquisition phase. 1236 * 1237 * Return: error number 1238 */ 1239 QDF_STATUS 1240 ucfg_dp_softap_inspect_dhcp_packet(struct wlan_objmgr_vdev *vdev, 1241 qdf_nbuf_t nbuf, enum qdf_proto_dir dir); 1242 1243 void 1244 dp_ucfg_enable_link_monitoring(struct wlan_objmgr_psoc *psoc, 1245 struct wlan_objmgr_vdev *vdev, 1246 uint32_t threshold); 1247 1248 void 1249 dp_ucfg_disable_link_monitoring(struct wlan_objmgr_psoc *psoc, 1250 struct wlan_objmgr_vdev *vdev); 1251 1252 #if defined(WLAN_SUPPORT_RX_FISA) 1253 /** 1254 * ucfg_dp_rx_skip_fisa() - Set flags to skip fisa aggregation 1255 * @value: allow or skip fisa 1256 * 1257 * Return: None 1258 */ 1259 void ucfg_dp_rx_skip_fisa(uint32_t value); 1260 1261 #else 1262 static inline 1263 void ucfg_dp_rx_skip_fisa(uint32_t value) 1264 { 1265 } 1266 #endif 1267 1268 #ifdef DP_TRAFFIC_END_INDICATION 1269 /** 1270 * ucfg_dp_traffic_end_indication_get() - Get data end indication info 1271 * @vdev: vdev handle 1272 * @info: variable to hold stored data end indication info 1273 * 1274 * Return: QDF_STATUS 1275 */ 1276 QDF_STATUS 1277 ucfg_dp_traffic_end_indication_get(struct wlan_objmgr_vdev *vdev, 1278 struct dp_traffic_end_indication *info); 1279 /** 1280 * ucfg_dp_traffic_end_indication_set() - Store data end indication info 1281 * @vdev: vdev handle 1282 * @info: variable holding new data end indication info 1283 * 1284 * Return: QDF_STATUS 1285 */ 1286 QDF_STATUS 1287 ucfg_dp_traffic_end_indication_set(struct wlan_objmgr_vdev *vdev, 1288 struct dp_traffic_end_indication info); 1289 /** 1290 * ucfg_dp_traffic_end_indication_update_dscp() - update dscp value to default 1291 * @psoc: psoc handle 1292 * @vdev_id: vdev id 1293 * @dscp: dscp value to be updated 1294 * 1295 * Return: void 1296 */ 1297 void 1298 ucfg_dp_traffic_end_indication_update_dscp(struct wlan_objmgr_psoc *psoc, 1299 uint8_t vdev_id, 1300 unsigned char *dscp); 1301 #else 1302 static inline QDF_STATUS 1303 ucfg_dp_traffic_end_indication_get(struct wlan_objmgr_vdev *vdev, 1304 struct dp_traffic_end_indication *info) 1305 { 1306 return QDF_STATUS_SUCCESS; 1307 } 1308 1309 static inline QDF_STATUS 1310 ucfg_dp_traffic_end_indication_set(struct wlan_objmgr_vdev *vdev, 1311 struct dp_traffic_end_indication info) 1312 { 1313 return QDF_STATUS_SUCCESS; 1314 } 1315 1316 static inline void 1317 ucfg_dp_traffic_end_indication_update_dscp(struct wlan_objmgr_psoc *psoc, 1318 uint8_t vdev_id, 1319 unsigned char *dscp) 1320 {} 1321 #endif 1322 1323 /* 1324 * ucfg_dp_prealloc_init() - Pre-allocate DP memory 1325 * @ctrl_psoc: objmgr psoc 1326 * 1327 * Return: QDF_STATUS_SUCCESS on success, error qdf status on failure 1328 */ 1329 QDF_STATUS ucfg_dp_prealloc_init(struct cdp_ctrl_objmgr_psoc *ctrl_psoc); 1330 1331 /* 1332 * ucfg_dp_prealloc_deinit() - Free pre-alloced DP memory 1333 * 1334 * Return: None 1335 */ 1336 void ucfg_dp_prealloc_deinit(void); 1337 1338 #ifdef DP_MEM_PRE_ALLOC 1339 /** 1340 * ucfg_dp_prealloc_get_consistent_mem_unaligned() - gets pre-alloc unaligned 1341 * consistent memory 1342 * @size: total memory size 1343 * @base_addr: pointer to dma address 1344 * @ring_type: HAL ring type that requires memory 1345 * 1346 * Return: memory virtual address pointer on success, NULL on failure 1347 */ 1348 void *ucfg_dp_prealloc_get_consistent_mem_unaligned(qdf_size_t size, 1349 qdf_dma_addr_t *base_addr, 1350 uint32_t ring_type); 1351 1352 /** 1353 * ucfg_dp_prealloc_put_consistent_mem_unaligned() - puts back pre-alloc 1354 * unaligned consistent memory 1355 * @va_unaligned: memory virtual address pointer 1356 * 1357 * Return: None 1358 */ 1359 void ucfg_dp_prealloc_put_consistent_mem_unaligned(void *va_unaligned); 1360 1361 /** 1362 * ucfg_dp_prealloc_get_multi_pages() - gets pre-alloc DP multi-pages memory 1363 * @desc_type: descriptor type 1364 * @elem_size: single element size 1365 * @elem_num: total number of elements should be allocated 1366 * @pages: multi page information storage 1367 * @cacheable: coherent memory or cacheable memory 1368 * 1369 * Return: None 1370 */ 1371 void ucfg_dp_prealloc_get_multi_pages(uint32_t desc_type, qdf_size_t elem_size, 1372 uint16_t elem_num, 1373 struct qdf_mem_multi_page_t *pages, 1374 bool cacheable); 1375 1376 /** 1377 * ucfg_dp_prealloc_put_multi_pages() - puts back pre-alloc DP multi-pages 1378 * memory 1379 * @desc_type: descriptor type 1380 * @pages: multi page information storage 1381 * 1382 * Return: None 1383 */ 1384 void ucfg_dp_prealloc_put_multi_pages(uint32_t desc_type, 1385 struct qdf_mem_multi_page_t *pages); 1386 #endif 1387 1388 #ifdef FEATURE_DIRECT_LINK 1389 /** 1390 * ucfg_dp_direct_link_init() - Initializes Direct Link datapath 1391 * @psoc: psoc handle 1392 * 1393 * Return: QDF status 1394 */ 1395 QDF_STATUS ucfg_dp_direct_link_init(struct wlan_objmgr_psoc *psoc); 1396 1397 /** 1398 * ucfg_dp_direct_link_deinit() - De-initializes Direct Link datapath 1399 * @psoc: psoc handle 1400 * @is_ssr: true if SSR is in progress else false 1401 * 1402 * Return: None 1403 */ 1404 void ucfg_dp_direct_link_deinit(struct wlan_objmgr_psoc *psoc, bool is_ssr); 1405 1406 /** 1407 * ucfg_dp_wfds_handle_request_mem_ind() - Process request memory indication 1408 * received from QMI server 1409 * @mem_msg: pointer to memory request indication message 1410 * 1411 * Return: None 1412 */ 1413 void 1414 ucfg_dp_wfds_handle_request_mem_ind(struct wlan_qmi_wfds_mem_ind_msg *mem_msg); 1415 1416 /** 1417 * ucfg_dp_wfds_handle_ipcc_map_n_cfg_ind() - Process IPCC map and configure 1418 * indication received from QMI server 1419 * @ipcc_msg: pointer to IPCC map and configure indication message 1420 * 1421 * Return: None 1422 */ 1423 void 1424 ucfg_dp_wfds_handle_ipcc_map_n_cfg_ind(struct wlan_qmi_wfds_ipcc_map_n_cfg_ind_msg *ipcc_msg); 1425 1426 /** 1427 * ucfg_dp_wfds_new_server() - New server callback triggered when service is up. 1428 * Connect to the service as part of this call. 1429 * 1430 * Return: QDF status 1431 */ 1432 QDF_STATUS ucfg_dp_wfds_new_server(void); 1433 1434 /** 1435 * ucfg_dp_wfds_del_server() - Del server callback triggered when service is 1436 * down. 1437 * 1438 * Return: None 1439 */ 1440 void ucfg_dp_wfds_del_server(void); 1441 1442 /** 1443 * ucfg_dp_config_direct_link() - Set direct link config for vdev 1444 * @dev: netdev 1445 * @config_direct_link: Flag to enable direct link path 1446 * @enable_low_latency: Flag to enable low link latency 1447 * 1448 * Return: QDF Status 1449 */ 1450 QDF_STATUS ucfg_dp_config_direct_link(qdf_netdev_t dev, 1451 bool config_direct_link, 1452 bool enable_low_latency); 1453 #else 1454 static inline 1455 QDF_STATUS ucfg_dp_direct_link_init(struct wlan_objmgr_psoc *psoc) 1456 { 1457 return QDF_STATUS_SUCCESS; 1458 } 1459 1460 static inline 1461 void ucfg_dp_direct_link_deinit(struct wlan_objmgr_psoc *psoc, bool is_ssr) 1462 { 1463 } 1464 1465 #ifdef QMI_WFDS 1466 static inline void 1467 ucfg_dp_wfds_handle_request_mem_ind(struct wlan_qmi_wfds_mem_ind_msg *mem_msg) 1468 { 1469 } 1470 1471 static inline void 1472 ucfg_dp_wfds_handle_ipcc_map_n_cfg_ind(struct wlan_qmi_wfds_ipcc_map_n_cfg_ind_msg *ipcc_msg) 1473 { 1474 } 1475 1476 static inline QDF_STATUS ucfg_dp_wfds_new_server(void) 1477 { 1478 return QDF_STATUS_SUCCESS; 1479 } 1480 1481 static inline void ucfg_dp_wfds_del_server(void) 1482 { 1483 } 1484 #endif 1485 1486 static inline 1487 QDF_STATUS ucfg_dp_config_direct_link(qdf_netdev_t dev, 1488 bool config_direct_link, 1489 bool enable_low_latency) 1490 { 1491 return QDF_STATUS_SUCCESS; 1492 } 1493 #endif 1494 1495 /** 1496 * ucfg_dp_bus_suspend() - BUS suspend DP handler 1497 * @soc: CDP SoC handle 1498 * @pdev_id: DP PDEV ID 1499 * 1500 * Return: QDF_STATUS 1501 */ 1502 QDF_STATUS ucfg_dp_bus_suspend(ol_txrx_soc_handle soc, uint8_t pdev_id); 1503 1504 /** 1505 * ucfg_dp_bus_resume() - BUS resume DP handler 1506 * @soc: CDP SoC handle 1507 * @pdev_id: DP PDEV ID 1508 * 1509 * Return: QDF_STATUS 1510 */ 1511 QDF_STATUS ucfg_dp_bus_resume(ol_txrx_soc_handle soc, uint8_t pdev_id); 1512 1513 /** 1514 * ucfg_dp_txrx_soc_attach() - Datapath soc attach 1515 * @params: SoC attach params 1516 * @is_wifi3_0_target: [OUT] Pointer to update if the target is wifi3.0 1517 * 1518 * Return: SoC handle 1519 */ 1520 void *ucfg_dp_txrx_soc_attach(struct dp_txrx_soc_attach_params *params, 1521 bool *is_wifi3_0_target); 1522 1523 /** 1524 * ucfg_dp_txrx_soc_detach() - Datapath SoC detach 1525 * @soc: DP SoC handle 1526 * 1527 * Return: None 1528 */ 1529 void ucfg_dp_txrx_soc_detach(ol_txrx_soc_handle soc); 1530 1531 /** 1532 * ucfg_dp_txrx_attach_target() - DP target attach 1533 * @soc: DP SoC handle 1534 * @pdev_id: DP pdev id 1535 * 1536 * Return: QDF_STATUS 1537 */ 1538 QDF_STATUS ucfg_dp_txrx_attach_target(ol_txrx_soc_handle soc, uint8_t pdev_id); 1539 1540 /** 1541 * ucfg_dp_txrx_pdev_attach() - DP pdev attach 1542 * @soc: DP SoC handle 1543 * 1544 * Return: QDF_STATUS 1545 */ 1546 QDF_STATUS ucfg_dp_txrx_pdev_attach(ol_txrx_soc_handle soc); 1547 1548 /** 1549 * ucfg_dp_txrx_pdev_detach() - DP pdev detach 1550 * @soc: DP SoC handle 1551 * @pdev_id: DP pdev id 1552 * @force: indicates if force detach is to be done or not 1553 * 1554 * Return: QDF_STATUS 1555 */ 1556 QDF_STATUS ucfg_dp_txrx_pdev_detach(ol_txrx_soc_handle soc, uint8_t pdev_id, 1557 int force); 1558 1559 /** 1560 * ucfg_dp_txrx_init() - initialize DP TXRX module 1561 * @soc: ol_txrx_soc_handle 1562 * @pdev_id: id of dp pdev handle 1563 * @config: configuration for DP TXRX modules 1564 * 1565 * Return: QDF_STATUS_SUCCESS on success, error qdf status on failure 1566 */ 1567 QDF_STATUS ucfg_dp_txrx_init(ol_txrx_soc_handle soc, uint8_t pdev_id, 1568 struct dp_txrx_config *config); 1569 1570 /** 1571 * ucfg_dp_txrx_deinit() - de-initialize DP TXRX module 1572 * @soc: ol_txrx_soc_handle 1573 * 1574 * Return: QDF_STATUS_SUCCESS on success, error qdf status on failure 1575 */ 1576 QDF_STATUS ucfg_dp_txrx_deinit(ol_txrx_soc_handle soc); 1577 1578 /** 1579 * ucfg_dp_txrx_ext_dump_stats() - dump txrx external module stats 1580 * @soc: ol_txrx_soc_handle object 1581 * @stats_id: id for the module whose stats are needed 1582 * 1583 * Return: QDF_STATUS_SUCCESS on success, error qdf status on failure 1584 */ 1585 QDF_STATUS ucfg_dp_txrx_ext_dump_stats(ol_txrx_soc_handle soc, 1586 uint8_t stats_id); 1587 /** 1588 * ucfg_dp_txrx_set_cpu_mask() - set CPU mask for RX threads 1589 * @soc: ol_txrx_soc_handle object 1590 * @new_mask: New CPU mask pointer 1591 * 1592 * Return: QDF_STATUS_SUCCESS on success, error qdf status on failure 1593 */ 1594 QDF_STATUS ucfg_dp_txrx_set_cpu_mask(ol_txrx_soc_handle soc, 1595 qdf_cpu_mask *new_mask); 1596 1597 /** 1598 * ucfg_dp_get_per_link_peer_stats() - Call to get per link peer stats 1599 * @soc: soc handle 1600 * @vdev_id: vdev_id of vdev object 1601 * @peer_mac: mac address of the peer 1602 * @peer_stats: destination buffer 1603 * @peer_type: Peer type 1604 * @num_link: Number of ML links 1605 * 1606 * NOTE: For peer_type = CDP_MLD_PEER_TYPE peer_stats should point to 1607 * buffer of size = (sizeof(*peer_stats) * num_link) 1608 * 1609 * Return: QDF_STATUS 1610 */ 1611 QDF_STATUS 1612 ucfg_dp_get_per_link_peer_stats(ol_txrx_soc_handle soc, uint8_t vdev_id, 1613 uint8_t *peer_mac, 1614 struct cdp_peer_stats *peer_stats, 1615 enum cdp_peer_type peer_type, 1616 uint8_t num_link); 1617 1618 #ifdef WLAN_FEATURE_LOCAL_PKT_CAPTURE 1619 /** 1620 * ucfg_dp_is_local_pkt_capture_enabled() - Get local packet capture config 1621 * @psoc: pointer to psoc object 1622 * 1623 * Return: true if local packet capture is enabled from ini 1624 * false otherwise 1625 */ 1626 bool 1627 ucfg_dp_is_local_pkt_capture_enabled(struct wlan_objmgr_psoc *psoc); 1628 #else 1629 static inline bool 1630 ucfg_dp_is_local_pkt_capture_enabled(struct wlan_objmgr_psoc *psoc) 1631 { 1632 return false; 1633 } 1634 #endif /* WLAN_FEATURE_LOCAL_PKT_CAPTURE */ 1635 1636 /** 1637 * ucfg_dp_get_vdev_stats () - API to get vdev stats 1638 * @soc: dp soc object 1639 * @vdev_id: Vdev ID of vdev for which stats is requested 1640 * @buf: Pointer to buffer in which stats need to be updated 1641 * 1642 * Return: QDF_STATUS_SUCCESS on success else error code 1643 */ 1644 QDF_STATUS ucfg_dp_get_vdev_stats(ol_txrx_soc_handle soc, uint8_t vdev_id, 1645 struct cdp_vdev_stats *buf); 1646 1647 /* 1648 * ucfg_dp_set_mon_conf_flags(): Set monitor configuration flags 1649 * @psoc: psoc handle 1650 * @flags: monitor configuration flags 1651 * 1652 * Return: None 1653 */ 1654 void ucfg_dp_set_mon_conf_flags(struct wlan_objmgr_psoc *psoc, uint32_t flags); 1655 #endif /* _WLAN_DP_UCFG_API_H_ */ 1656