1 /* 2 * Copyright (c) 2013-2021 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for 6 * any purpose with or without fee is hereby granted, provided that the 7 * above copyright notice and this permission notice appear in all 8 * copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17 * PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20 #ifndef WMA_INTERNAL_H 21 #define WMA_INTERNAL_H 22 #include <cdp_txrx_handle.h> 23 #if !defined(REMOVE_PKT_LOG) 24 #include "pktlog_ac.h" 25 #endif 26 27 /* ################### defines ################### */ 28 /* 29 * TODO: Following constant should be shared by firmware in 30 * wmi_unified.h. This will be done once wmi_unified.h is updated. 31 */ 32 #define WMI_PEER_STATE_AUTHORIZED 0x2 33 34 #define WMA_2_4_GHZ_MAX_FREQ 3000 35 36 /*AR9888/AR6320 noise floor approx value 37 * similar to the mentioned the WMA 38 */ 39 #define WMA_TGT_NOISE_FLOOR_DBM (-96) 40 #define WMA_INVALID_PER_CHAIN_SNR (0x80) 41 #define WMA_INVALID_PER_CHAIN_RSSI (0xFF) 42 43 /* 44 * Make sure that link monitor and keep alive 45 * default values should be in sync with CFG. 46 */ 47 #define WMA_LINK_MONITOR_DEFAULT_TIME_SECS 10 48 #define WMA_KEEP_ALIVE_DEFAULT_TIME_SECS 5 49 50 #define WMA_WMM_EXPO_TO_VAL(val) ((1 << (val)) - 1) 51 52 #define INVALID_MCS_IDX 255 53 54 #define IS_MCS_HAS_DCM_RATE(val) \ 55 ((val) == 0 || (val) == 1 || \ 56 (val) == 3 || (val) == 4) 57 58 #define LINK_STATUS_LEGACY 0 59 #define LINK_STATUS_VHT 0x1 60 #define LINK_STATUS_MIMO 0x2 61 #define LINK_SUPPORT_VHT 0x4 62 #define LINK_SUPPORT_MIMO 0x8 63 64 #define LINK_RATE_VHT 0x3 65 66 #define MAX_ENTRY_HOLD_REQ_QUEUE 2 67 #define MAX_ENTRY_VDEV_RESP_QUEUE 10 68 69 /** 70 * struct index_data_rate_type - non vht data rate type 71 * @mcs_index: mcs rate index 72 * @ht20_rate: HT20 supported rate table 73 * @ht40_rate: HT40 supported rate table 74 */ 75 struct index_data_rate_type { 76 uint8_t mcs_index; 77 uint16_t ht20_rate[2]; 78 uint16_t ht40_rate[2]; 79 }; 80 81 /** 82 * struct index_vht_data_rate_type - vht data rate type 83 * @mcs_index: mcs rate index 84 * @ht20_rate: VHT20 supported rate table 85 * @ht40_rate: VHT40 supported rate table 86 * @ht80_rate: VHT80 supported rate table 87 * @ht160_rate: VHT160 supported rate table 88 */ 89 struct index_vht_data_rate_type { 90 uint8_t mcs_index; 91 uint16_t ht20_rate[2]; 92 uint16_t ht40_rate[2]; 93 uint16_t ht80_rate[2]; 94 uint16_t ht160_rate[2]; 95 }; 96 97 #ifdef WLAN_FEATURE_11AX 98 #define MAX_HE_DCM_INDEX 2 99 /** 100 * struct index_he_data_rate_type - he data rate type 101 * @beacon_rate_index: Beacon rate index 102 * @supported_he80_rate: he80 rate 103 * @supported_he40_rate: he40 rate 104 * @supported_he20_rate: he20 rate 105 * @supported_he160_rate: he160 rate 106 */ 107 struct index_he_data_rate_type { 108 uint8_t beacon_rate_index; 109 uint16_t supported_he20_rate[MAX_HE_DCM_INDEX][3]; 110 uint16_t supported_he40_rate[MAX_HE_DCM_INDEX][3]; 111 uint16_t supported_he80_rate[MAX_HE_DCM_INDEX][3]; 112 uint16_t supported_he160_rate[MAX_HE_DCM_INDEX][3]; 113 }; 114 #endif 115 116 struct wifi_scan_cmd_req_params; 117 /* 118 * wma_main.c functions declarations 119 */ 120 121 /** 122 * wma_send_msg_by_priority() - Send wma message to PE with priority. 123 * @wma_handle: wma handle 124 * @msg_type: message type 125 * @body_ptr: message body ptr 126 * @body_val: message body value 127 * @is_high_priority: if msg is high priority 128 * 129 * Return: none 130 */ 131 void wma_send_msg_by_priority(tp_wma_handle wma_handle, uint16_t msg_type, 132 void *body_ptr, uint32_t body_val, bool is_high_priority); 133 134 /** 135 * wma_send_msg() - Send wma message to PE. 136 * @wma_handle: wma handle 137 * @msg_type: message type 138 * @body_ptr: message body ptr 139 * @body_val: message body value 140 * 141 * Return: none 142 */ 143 void wma_send_msg(tp_wma_handle wma_handle, uint16_t msg_type, 144 void *body_ptr, uint32_t body_val); 145 146 /** 147 * wma_send_msg_high_priority() - Send wma message to PE with high priority. 148 * @wma_handle: wma handle 149 * @msg_type: message type 150 * @body_ptr: message body ptr 151 * @body_val: message body value 152 * 153 * Return: none 154 */ 155 void wma_send_msg_high_priority(tp_wma_handle wma_handle, uint16_t msg_type, 156 void *body_ptr, uint32_t body_val); 157 158 void wma_data_tx_ack_comp_hdlr(void *wma_context, 159 qdf_nbuf_t netbuf, int32_t status); 160 161 QDF_STATUS wma_set_ppsconfig(uint8_t vdev_id, uint16_t pps_param, 162 int value); 163 164 /* 165 * wma_scan_roam.c functions declarations 166 */ 167 168 #ifdef WLAN_FEATURE_ROAM_OFFLOAD 169 170 #ifdef WLAN_FEATURE_FIPS 171 /** 172 * wma_register_pmkid_req_event_handler() - Register pmkid request event handler 173 * @wma_handle: wma_handle 174 * 175 * This function register pmkid request event handler. 176 */ 177 void wma_register_pmkid_req_event_handler(tp_wma_handle wma_handle); 178 179 /** 180 * wma_roam_pmkid_request_event_handler() - Handles roam pmkid request event 181 * @handle: wma_handle 182 * @event: pmkid request event data pointer 183 * @len: length of the data 184 * 185 * Handles pmkid request event from firmware which is triggered after roam 186 * candidate selection. 187 */ 188 int wma_roam_pmkid_request_event_handler(void *handle, 189 uint8_t *event, 190 uint32_t len); 191 #else 192 static inline void 193 wma_register_pmkid_req_event_handler(tp_wma_handle wma_handle) 194 { 195 } 196 197 static inline int 198 wma_roam_pmkid_request_event_handler(void *handle, 199 uint8_t *event, 200 uint32_t len) 201 { 202 return 0; 203 } 204 #endif /* WLAN_FEATURE_FIPS */ 205 206 /** 207 * wma_roam_stats_event_handler() - Handle the WMI_ROAM_STATS_EVENTID 208 * from target 209 * @handle: wma_handle 210 * @event: roam debug stats event data pointer 211 * @len: length of the data 212 * 213 * This function handles the roam debug stats from the target and logs it 214 * to kmsg. This WMI_ROAM_STATS_EVENTID event is received whenever roam 215 * scan trigger happens or when neighbor report is sent by the firmware. 216 * 217 * Return: Success or Failure status 218 */ 219 int wma_roam_stats_event_handler(WMA_HANDLE handle, uint8_t *event, 220 uint32_t len); 221 222 /** 223 * wma_roam_vdev_disconnect_event_handler() - Handles roam vdev disconnect event 224 * @handle: wma_handle 225 * @event: pmkid request event data pointer 226 * @len: length of the data 227 * 228 * @Return: 0 on sucees else error code 229 */ 230 int wma_roam_vdev_disconnect_event_handler(void *handle, uint8_t *event, 231 uint32_t len); 232 233 #else 234 static inline int wma_mlme_roam_synch_event_handler_cb(void *handle, 235 uint8_t *event, 236 uint32_t len) 237 { 238 return 0; 239 } 240 241 static inline int 242 wma_roam_vdev_disconnect_event_handler(void *handle, uint8_t *event, 243 uint32_t len) 244 { 245 return 0; 246 } 247 248 static inline int 249 wma_roam_stats_event_handler(WMA_HANDLE handle, uint8_t *event, 250 uint32_t len) 251 { 252 return 0; 253 } 254 255 static inline int 256 wma_roam_pmkid_request_event_handler(void *handle, 257 uint8_t *event, 258 uint32_t len) 259 { 260 return 0; 261 } 262 #endif 263 264 #ifdef WLAN_FEATURE_ROAM_OFFLOAD 265 /** 266 * wma_roam_scan_chan_list_event_handler() - roam scan chan list event handler 267 * @handle: wma handle 268 * @event: pointer to fw event 269 * @len: length of event 270 * 271 * Return: Success or Failure status 272 */ 273 int wma_roam_scan_chan_list_event_handler(WMA_HANDLE handle, 274 uint8_t *event, 275 uint32_t len); 276 #else 277 static inline int 278 wma_roam_scan_chan_list_event_handler(WMA_HANDLE handle, uint8_t *event, 279 uint32_t len) 280 { 281 return 0; 282 } 283 #endif 284 285 QDF_STATUS wma_update_channel_list(WMA_HANDLE handle, 286 tSirUpdateChanList *chan_list); 287 288 QDF_STATUS wma_roam_scan_bmiss_cnt(tp_wma_handle wma_handle, 289 A_INT32 first_bcnt, 290 A_UINT32 final_bcnt, uint32_t vdev_id); 291 292 #ifdef WLAN_FEATURE_ROAM_OFFLOAD 293 void wma_set_ric_req(tp_wma_handle wma, void *msg, uint8_t is_add_ts); 294 #endif 295 296 #ifdef FEATURE_WLAN_EXTSCAN 297 298 int wma_extscan_start_stop_event_handler(void *handle, 299 uint8_t *cmd_param_info, 300 uint32_t len); 301 302 int wma_extscan_operations_event_handler(void *handle, 303 uint8_t *cmd_param_info, 304 uint32_t len); 305 306 int wma_extscan_table_usage_event_handler(void *handle, 307 uint8_t *cmd_param_info, 308 uint32_t len); 309 310 int wma_extscan_capabilities_event_handler(void *handle, 311 uint8_t *cmd_param_info, 312 uint32_t len); 313 314 int wma_extscan_hotlist_match_event_handler(void *handle, 315 uint8_t *cmd_param_info, 316 uint32_t len); 317 318 int wma_extscan_cached_results_event_handler(void *handle, 319 uint8_t *cmd_param_info, 320 uint32_t len); 321 322 int wma_extscan_change_results_event_handler(void *handle, 323 uint8_t *cmd_param_info, 324 uint32_t len); 325 326 int wma_passpoint_match_event_handler(void *handle, 327 uint8_t *cmd_param_info, 328 uint32_t len); 329 330 #endif 331 332 #ifdef FEATURE_WLAN_EXTSCAN 333 int wma_extscan_wow_event_callback(void *handle, void *event, uint32_t len); 334 335 void wma_register_extscan_event_handler(tp_wma_handle wma_handle); 336 337 /** 338 * wma_start_extscan() - start extscan command to fw. 339 * @wma: wma handle 340 * @params: extscan command request params 341 * 342 * This function sends start extscan request to fw. 343 * 344 * Return: QDF Status. 345 */ 346 QDF_STATUS wma_start_extscan(tp_wma_handle wma, 347 struct wifi_scan_cmd_req_params *pstart); 348 349 /** 350 * wma_stop_extscan() - stop extscan command to fw. 351 * @wma: wma handle 352 * @params: stop scan command request params 353 * 354 * This function sends stop extscan request to fw. 355 * 356 * Return: QDF Status. 357 */ 358 QDF_STATUS wma_stop_extscan(tp_wma_handle wma, 359 struct extscan_stop_req_params *params); 360 361 /** 362 * wma_extscan_start_hotlist_monitor() - start hotlist monitor 363 * @wma: wma handle 364 * @params: hotlist request params 365 * 366 * This function configures hotlist monitor in fw. 367 * 368 * Return: QDF status 369 */ 370 QDF_STATUS wma_extscan_start_hotlist_monitor(tp_wma_handle wma, 371 struct extscan_bssid_hotlist_set_params *params); 372 373 /** 374 * wma_extscan_stop_hotlist_monitor() - stop hotlist monitor 375 * @wma: wma handle 376 * @params: hotlist request params 377 * 378 * This function configures hotlist monitor to stop in fw. 379 * 380 * Return: QDF status 381 */ 382 QDF_STATUS wma_extscan_stop_hotlist_monitor(tp_wma_handle wma, 383 struct extscan_bssid_hotlist_reset_params *params); 384 385 /** 386 * wma_extscan_start_change_monitor() - send start change monitor cmd 387 * @wma: wma handle 388 * @params: change monitor request params 389 * 390 * This function sends start change monitor request to fw. 391 * 392 * Return: QDF status 393 */ 394 QDF_STATUS 395 wma_extscan_start_change_monitor(tp_wma_handle wma, 396 struct extscan_set_sig_changereq_params *params); 397 398 /** 399 * wma_extscan_stop_change_monitor() - send stop change monitor cmd 400 * @wma: wma handle 401 * @params: change monitor request params 402 * 403 * This function sends stop change monitor request to fw. 404 * 405 * Return: QDF status 406 */ 407 QDF_STATUS 408 wma_extscan_stop_change_monitor(tp_wma_handle wma, 409 struct extscan_capabilities_reset_params *params); 410 411 /** 412 * wma_extscan_get_cached_results() - extscan get cached results 413 * @wma: wma handle 414 * @params: cached results parameters 415 * 416 * This function send request to fw to get cached results. 417 * 418 * Return: QDF status 419 */ 420 QDF_STATUS 421 wma_extscan_get_cached_results(tp_wma_handle wma, 422 struct extscan_cached_result_params *params); 423 424 /** 425 * wma_extscan_get_capabilities() - extscan get capabilities 426 * @wma: wma handle 427 * @params: get capabilities params 428 * 429 * This function sends request to fw to get extscan capabilities. 430 * 431 * Return: QDF status 432 */ 433 QDF_STATUS 434 wma_extscan_get_capabilities(tp_wma_handle wma, 435 struct extscan_capabilities_params *params); 436 437 /** 438 * wma_set_epno_network_list() - set epno network list 439 * @wma: WMA handle 440 * @req: epno config params request structure 441 * 442 * This function reads the incoming epno config request structure 443 * and constructs the WMI message to the firmware. 444 * 445 * Return: 0 on success, error number otherwise 446 */ 447 QDF_STATUS wma_set_epno_network_list(tp_wma_handle wma, 448 struct wifi_enhanced_pno_params *req); 449 450 /** 451 * wma_set_passpoint_network_list() - set passpoint network list 452 * @wma: WMA handle 453 * @params: passpoint network request structure 454 * 455 * This function sends the passpoint configs down to the firmware 456 * 457 * Return: QDF_STATUS enumeration 458 */ 459 QDF_STATUS 460 wma_set_passpoint_network_list(tp_wma_handle wma, 461 struct wifi_passpoint_req_param *params); 462 463 /** 464 * wma_reset_passpoint_network_list() - reset passpoint network list 465 * @wma: WMA handle 466 * @params: passpoint network request structure 467 * 468 * This function sends down WMI command with network id set to wildcard id. 469 * firmware shall clear all the config entries 470 * 471 * Return: QDF_STATUS enumeration 472 */ 473 QDF_STATUS 474 wma_reset_passpoint_network_list(tp_wma_handle wma, 475 struct wifi_passpoint_req_param *params); 476 #endif 477 478 /** 479 * wma_scan_probe_setoui() - set scan probe OUI 480 * @wma: wma handle 481 * @set_oui: OUI parameters 482 * 483 * set scan probe OUI parameters in firmware 484 * 485 * Return: QDF status 486 */ 487 QDF_STATUS wma_scan_probe_setoui(tp_wma_handle wma, 488 struct scan_mac_oui *set_oui); 489 490 void wma_roam_better_ap_handler(tp_wma_handle wma, uint32_t vdev_id); 491 492 /* 493 * wma_dev_if.c functions declarations 494 */ 495 496 /** 497 * wma_find_vdev_id_by_addr() - find vdev_id from mac address 498 * @wma: wma handle 499 * @addr: mac address 500 * @vdev_id: return vdev_id 501 * 502 * Return: SUCCESS or FAILURE 503 */ 504 QDF_STATUS wma_find_vdev_id_by_addr(tp_wma_handle wma, uint8_t *addr, 505 uint8_t *vdev_id); 506 507 bool wma_is_vdev_in_ap_mode(tp_wma_handle wma, uint8_t vdev_id); 508 509 /** 510 * wma_get_vdev_bssid() - Get BSSID from mlme_obj 511 * @vdev - pointer to vdev 512 * 513 * This API is used to get BSSID stored in vdev mlme object. 514 * 515 * Return: pointer to bssid on success else NULL. 516 */ 517 uint8_t *wma_get_vdev_bssid(struct wlan_objmgr_vdev *vdev); 518 519 /** 520 * wma_find_bssid_by_vdev_id() - Get the BSS ID corresponding to the vdev ID 521 * @wma - wma handle 522 * @vdev_id - vdev ID 523 * 524 * Return: Returns pointer to bssid on success, 525 * otherwise returns NULL. 526 */ 527 static inline uint8_t *wma_find_bssid_by_vdev_id(tp_wma_handle wma, 528 uint8_t vdev_id) 529 { 530 if (vdev_id >= wma->max_bssid) 531 return NULL; 532 533 return wma_get_vdev_bssid(wma->interfaces[vdev_id].vdev); 534 } 535 536 /** 537 * wma_find_vdev_id_by_bssid() - Get the corresponding vdev_id from BSSID 538 * @wma - wma handle 539 * @bssid - bssid address 540 * @vdev_id - vdev ID 541 * 542 * Return: SUCCESS or FAILURE. 543 */ 544 QDF_STATUS wma_find_vdev_id_by_bssid(tp_wma_handle wma, uint8_t *bssid, 545 uint8_t *vdev_id); 546 547 QDF_STATUS wma_vdev_set_param(wmi_unified_t wmi_handle, uint32_t if_id, 548 uint32_t param_id, uint32_t param_value); 549 550 QDF_STATUS wma_remove_peer(tp_wma_handle wma, uint8_t *mac_addr, 551 uint8_t vdev_id, bool no_fw_peer_delete); 552 553 QDF_STATUS wma_peer_unmap_conf_send(tp_wma_handle wma, 554 struct send_peer_unmap_conf_params *msg); 555 556 /** 557 * wma_send_del_bss_response() - send delete bss resp 558 * @wma: wma handle 559 * @resp: pointer to del bss response 560 * 561 * Return: none 562 */ 563 void wma_send_del_bss_response(tp_wma_handle wma, struct del_bss_resp *resp); 564 565 /** 566 * __wma_handle_vdev_stop_rsp() - vdev stop response handler 567 * @resp_event: pointer to response received 568 * 569 * Return: QDF_STATUS_SUCCESS for success or QDF_ERROR code 570 */ 571 QDF_STATUS 572 __wma_handle_vdev_stop_rsp(struct vdev_stop_response *resp_event); 573 574 void wma_hold_req_timer(void *data); 575 struct wma_target_req *wma_fill_hold_req(tp_wma_handle wma, 576 uint8_t vdev_id, uint32_t msg_type, 577 uint8_t type, void *params, 578 uint32_t timeout); 579 580 /** 581 * wma_add_bss() - Add BSS request to fw as per opmode 582 * @wma: wma handle 583 * @params: add bss params 584 * 585 * Return: none 586 */ 587 void wma_add_bss(tp_wma_handle wma, struct bss_params *params); 588 589 /** 590 * wma_add_sta() - process add sta request as per opmode 591 * @wma: wma handle 592 * @add_Sta: add sta params 593 * 594 * Return: none 595 */ 596 void wma_add_sta(tp_wma_handle wma, tpAddStaParams add_sta); 597 598 /** 599 * wma_delete_sta() - process del sta request as per opmode 600 * @wma: wma handle 601 * @del_sta: delete sta params 602 * 603 * Return: none 604 */ 605 void wma_delete_sta(tp_wma_handle wma, tpDeleteStaParams del_sta); 606 607 /** 608 * wma_delete_bss() - process delete bss request from upper layer 609 * @wma: wma handle 610 * @vdev_id: vdev id 611 * 612 * Return: none 613 */ 614 void wma_delete_bss(tp_wma_handle wma, uint8_t vdev_id); 615 616 int32_t wma_find_vdev_by_type(tp_wma_handle wma, int32_t type); 617 618 /** 619 * wma_set_vdev_intrabss_fwd() - set intra_fwd value to wni_in. 620 * @wma_handle: wma handle 621 * @pdis_intra_fwd: Pointer to DisableIntraBssFwd struct 622 * 623 * Return: none 624 */ 625 void wma_set_vdev_intrabss_fwd(tp_wma_handle wma_handle, 626 tpDisableIntraBssFwd pdis_intra_fwd); 627 628 /** 629 * wma_delete_bss_ho_fail() - process delete bss request for handoff failure 630 * @wma: wma handle 631 * @vdev_id: vdev id 632 * 633 * Delete BSS in case of ROAM_HO_FAIL processing is handled separately in 634 * this routine. It needs to be done without sending any commands to firmware 635 * because firmware has already stopped and deleted peer and vdev is down. 636 * Relevant logic is aggregated from other routines. It changes the host 637 * data structures without sending VDEV_STOP, PEER_FLUSH_TIDS, PEER_DELETE 638 * and VDEV_DOWN commands to firmware. 639 * 640 * Return: none 641 */ 642 void wma_delete_bss_ho_fail(tp_wma_handle wma, uint8_t vdev_id); 643 644 uint32_t wma_get_bcn_rate_code(uint16_t rate); 645 646 /* 647 * wma_mgmt.c functions declarations 648 */ 649 #ifdef WLAN_WMI_BCN 650 int wma_beacon_swba_handler(void *handle, uint8_t *event, uint32_t len); 651 #endif 652 653 /** 654 * wma_peer_sta_kickout_event_handler() - kickout event handler 655 * @handle: wma handle 656 * @event: event data 657 * @len: data length 658 * 659 * Kickout event is received from firmware on observing beacon miss 660 * It handles kickout event for different modes and indicate to 661 * upper layers. 662 * 663 * Return: 0 for success or error code 664 */ 665 int wma_peer_sta_kickout_event_handler(void *handle, uint8_t *event, 666 uint32_t len); 667 668 /** 669 * wma_unified_bcntx_status_event_handler() - beacon tx status event handler 670 * @handle: wma handle 671 * @cmd_param_info: event data 672 * @len: data length 673 * 674 * WMI Handler for WMI_OFFLOAD_BCN_TX_STATUS_EVENTID event from firmware. 675 * This event is generated by FW when the beacon transmission is offloaded 676 * and the host performs beacon template modification using WMI_BCN_TMPL_CMDID 677 * The FW generates this event when the first successful beacon transmission 678 * after template update 679 * 680 * Return: 0 for success or error code 681 */ 682 int wma_unified_bcntx_status_event_handler(void *handle, 683 uint8_t *cmd_param_info, 684 uint32_t len); 685 686 void wma_set_sta_sa_query_param(tp_wma_handle wma, 687 uint8_t vdev_id); 688 689 void wma_set_sta_keep_alive(tp_wma_handle wma, uint8_t vdev_id, 690 uint32_t method, uint32_t timeperiod, 691 uint8_t *hostv4addr, uint8_t *destv4addr, 692 uint8_t *destmac); 693 694 /** 695 * wma_objmgr_set_peer_mlme_phymode() - set phymode to peer object 696 * @wma: wma handle 697 * @mac_addr: mac addr of peer 698 * @phymode: phymode value to set 699 * 700 * Return: None 701 */ 702 void wma_objmgr_set_peer_mlme_phymode(tp_wma_handle wma, uint8_t *mac_addr, 703 enum wlan_phymode phymode); 704 705 /** 706 * wma_objmgr_set_peer_mlme_nss() - set nss to peer object 707 * @wma: wma handle 708 * @mac_addr: mac addr of peer 709 * @nss: nss value to set 710 * 711 * Return: None 712 */ 713 void wma_objmgr_set_peer_mlme_nss(tp_wma_handle wma, uint8_t *mac_addr, 714 uint8_t nss); 715 716 /** 717 * wma_objmgr_get_peer_mlme_nss() - set nss to peer object 718 * @wma: wma handle 719 * @mac_addr: mac addr of peer 720 * 721 * Return: Peer NSS 722 */ 723 uint8_t wma_objmgr_get_peer_mlme_nss(tp_wma_handle wma, uint8_t *mac_addr); 724 725 QDF_STATUS wma_send_peer_assoc(tp_wma_handle wma, 726 tSirNwType nw_type, 727 tpAddStaParams params); 728 729 QDF_STATUS wmi_unified_vdev_set_gtx_cfg_send(wmi_unified_t wmi_handle, 730 uint32_t if_id, 731 gtx_config_t *gtx_info); 732 733 void wma_update_protection_mode(tp_wma_handle wma, uint8_t vdev_id, 734 uint8_t llbcoexist); 735 736 void wma_process_update_beacon_params(tp_wma_handle wma, 737 tUpdateBeaconParams *bcn_params); 738 739 /** 740 * wma_update_rts_params() - update cfg parameters to target 741 * @wma: wma handle 742 * @value: rts_threshold 743 * 744 * Return: none 745 */ 746 void wma_update_rts_params(tp_wma_handle wma, uint32_t value); 747 748 /** 749 * wma_update_frag_params() - update cfg parameters to target 750 * @wma: wma handle 751 * @value: frag_threshold 752 * 753 * Return: none 754 */ 755 void wma_update_frag_params(tp_wma_handle wma, uint32_t value); 756 757 QDF_STATUS wma_process_update_edca_param_req(WMA_HANDLE handle, 758 tEdcaParams *edca_params); 759 760 /** 761 * wma_tbttoffset_update_event_handler() - tbtt offset update handler 762 * @handle: wma handle 763 * @event: event buffer 764 * @len: data length 765 * 766 * Return: 0 for success or error code 767 */ 768 int wma_tbttoffset_update_event_handler(void *handle, uint8_t *event, 769 uint32_t len); 770 771 void wma_send_probe_rsp_tmpl(tp_wma_handle wma, 772 tpSendProbeRespParams probe_rsp_info); 773 774 /** 775 * wma_set_ap_vdev_up() - send vdev up req 776 * @wma: wma handle 777 * @vdev_id: vdev id 778 * 779 * Return: QDF_STATUS 780 */ 781 QDF_STATUS wma_set_ap_vdev_up(tp_wma_handle wma, uint8_t vdev_id); 782 783 void wma_send_beacon(tp_wma_handle wma, tpSendbeaconParams bcn_info); 784 785 void wma_set_keepalive_req(tp_wma_handle wma, 786 struct keep_alive_req *keepalive); 787 788 void wma_beacon_miss_handler(tp_wma_handle wma, uint32_t vdev_id, 789 int32_t rssi); 790 791 void wma_process_update_opmode(tp_wma_handle wma_handle, 792 tUpdateVHTOpMode *update_vht_opmode); 793 794 void wma_process_update_rx_nss(tp_wma_handle wma_handle, 795 tUpdateRxNss *update_rx_nss); 796 797 void wma_process_update_membership(tp_wma_handle wma_handle, 798 tUpdateMembership *membership); 799 800 void wma_process_update_userpos(tp_wma_handle wma_handle, 801 tUpdateUserPos *userpos); 802 803 /* 804 * wma_power.c functions declarations 805 */ 806 807 /** 808 * wma_enable_sta_ps_mode() - enable sta powersave params in fw 809 * @ps_req: power save request 810 * 811 * Return: none 812 */ 813 void wma_enable_sta_ps_mode(tpEnablePsParams ps_req); 814 815 QDF_STATUS wma_unified_set_sta_ps_param(wmi_unified_t wmi_handle, 816 uint32_t vdev_id, uint32_t param, 817 uint32_t value); 818 819 QDF_STATUS wma_set_ap_peer_uapsd(tp_wma_handle wma, uint32_t vdev_id, 820 uint8_t *peer_addr, uint8_t uapsd_value, 821 uint8_t max_sp); 822 823 void wma_update_edca_params_for_ac(tSirMacEdcaParamRecord *edca_param, 824 struct wmi_host_wme_vparams *wmm_param, 825 int ac, bool mu_edca_param, 826 uint8_t *debug_str, 827 uint32_t debug_str_size, uint32_t *len); 828 829 void wma_set_tx_power(WMA_HANDLE handle, 830 tMaxTxPowerParams *tx_pwr_params); 831 832 void wma_set_max_tx_power(WMA_HANDLE handle, 833 tMaxTxPowerParams *tx_pwr_params); 834 835 void wma_disable_sta_ps_mode(tpDisablePsParams ps_req); 836 837 /** 838 * wma_enable_uapsd_mode() - enable uapsd mode in fw 839 * @wma: wma handle 840 * @ps_req: power save request 841 * 842 * Return: none 843 */ 844 void wma_enable_uapsd_mode(tp_wma_handle wma, tpEnableUapsdParams ps_req); 845 846 void wma_disable_uapsd_mode(tp_wma_handle wma, tpDisableUapsdParams ps_req); 847 848 QDF_STATUS wma_get_temperature(tp_wma_handle wma_handle); 849 850 int wma_pdev_temperature_evt_handler(void *handle, uint8_t *event, 851 uint32_t len); 852 853 QDF_STATUS wma_process_tx_power_limits(WMA_HANDLE handle, 854 struct tx_power_limit *ptxlim); 855 856 void wma_update_noa(struct beacon_info *beacon, 857 struct p2p_sub_element_noa *noa_ie); 858 859 void wma_update_probe_resp_noa(tp_wma_handle wma_handle, 860 struct p2p_sub_element_noa *noa_ie); 861 862 void wma_process_set_mimops_req(tp_wma_handle wma_handle, 863 tSetMIMOPS *mimops); 864 865 QDF_STATUS wma_set_mimops(tp_wma_handle wma, uint8_t vdev_id, int value); 866 867 QDF_STATUS wma_notify_modem_power_state(void *wma_ptr, 868 tSirModemPowerStateInd *pReq); 869 870 QDF_STATUS wma_set_smps_params(tp_wma_handle wma, uint8_t vdev_id, 871 int value); 872 873 /* 874 * wma_data.c functions declarations 875 */ 876 /** 877 * wma_set_bss_rate_flags() - set rate flags based on BSS capability 878 * @wma: pointer to wma handle 879 * @vdev_id: vdev id 880 * @add_bss: pointer to bss params 881 * 882 * Return: none 883 */ 884 void wma_set_bss_rate_flags(tp_wma_handle wma, uint8_t vdev_id, 885 struct bss_params *add_bss); 886 887 /** 888 * wma_get_vht_rate_flags() - Return the VHT rate flags corresponding to the BW 889 * @ch_width: BW for which rate flags is required 890 * 891 * Return: Rate flags corresponding to ch_width 892 */ 893 enum tx_rate_info wma_get_vht_rate_flags(enum phy_ch_width ch_width); 894 895 /** 896 * wma_get_ht_rate_flags() - Return the HT rate flags corresponding to the BW 897 * @ch_width: BW for which rate flags is required 898 * 899 * Return: Rate flags corresponding to ch_width 900 */ 901 enum tx_rate_info wma_get_ht_rate_flags(enum phy_ch_width ch_width); 902 903 /** 904 * wma_get_he_rate_flags() - Return the HE rate flags corresponding to the BW 905 * @ch_width: BW for which rate flags is required 906 * 907 * Return: Rate flags corresponding to ch_width 908 */ 909 enum tx_rate_info wma_get_he_rate_flags(enum phy_ch_width ch_width); 910 911 /** 912 * wma_set_vht_txbf_cfg() - set VHT Tx beamforming capability to FW 913 * @mac: Global MAC context 914 * @vdev_id: VDEV id 915 * 916 * Return: None 917 */ 918 void wma_set_vht_txbf_cfg(struct mac_context *mac, uint8_t vdev_id); 919 920 int32_t wmi_unified_send_txbf(tp_wma_handle wma, tpAddStaParams params); 921 922 /** 923 * wma_check_txrx_chainmask() - check txrx chainmask 924 * @num_rf_chains: number of rf chains 925 * @cmd_value: command value 926 * 927 * Return: QDF_STATUS_SUCCESS for success or error code 928 */ 929 QDF_STATUS wma_check_txrx_chainmask(int num_rf_chains, int cmd_value); 930 931 QDF_STATUS wma_set_enable_disable_mcc_adaptive_scheduler(uint32_t 932 mcc_adaptive_scheduler); 933 934 QDF_STATUS wma_set_mcc_channel_time_latency 935 (tp_wma_handle wma, 936 uint32_t mcc_channel, uint32_t mcc_channel_time_latency); 937 938 QDF_STATUS wma_set_mcc_channel_time_quota 939 (tp_wma_handle wma, 940 uint32_t adapter_1_chan_number, 941 uint32_t adapter_1_quota, uint32_t adapter_2_chan_number); 942 943 /** 944 * wma_process_rate_update_indate() - rate update indication 945 * @wma: wma handle 946 * @pRateUpdateParams: Rate update params 947 * 948 * This function update rate & short GI interval to fw based on params 949 * send by SME. 950 * 951 * Return: QDF status 952 */ 953 QDF_STATUS wma_process_rate_update_indicate(tp_wma_handle wma, 954 tSirRateUpdateInd * 955 pRateUpdateParams); 956 957 QDF_STATUS wma_tx_attach(tp_wma_handle wma_handle); 958 959 QDF_STATUS wma_tx_detach(tp_wma_handle wma_handle); 960 961 #if defined(QCA_LL_LEGACY_TX_FLOW_CONTROL) || \ 962 defined(QCA_LL_TX_FLOW_CONTROL_V2) || defined(CONFIG_HL_SUPPORT) 963 964 /** 965 * wma_mcc_vdev_tx_pause_evt_handler() - pause event handler 966 * @handle: wma handle 967 * @event: event buffer 968 * @len: data length 969 * 970 * This function handle pause event from fw and pause/unpause 971 * vdev. 972 * 973 * Return: 0 for success or error code. 974 */ 975 int wma_mcc_vdev_tx_pause_evt_handler(void *handle, uint8_t *event, 976 uint32_t len); 977 #endif 978 979 #if defined(CONFIG_HL_SUPPORT) && defined(QCA_BAD_PEER_TX_FLOW_CL) 980 QDF_STATUS wma_process_init_bad_peer_tx_ctl_info(tp_wma_handle wma, 981 struct t_bad_peer_txtcl_config *config); 982 #else 983 static inline QDF_STATUS 984 wma_process_init_bad_peer_tx_ctl_info(tp_wma_handle wma, 985 struct t_bad_peer_txtcl_config *config) 986 { 987 return QDF_STATUS_E_FAILURE; 988 } 989 #endif 990 991 QDF_STATUS wma_process_init_thermal_info(tp_wma_handle wma, 992 t_thermal_mgmt *pThermalParams); 993 994 QDF_STATUS wma_process_set_thermal_level(tp_wma_handle wma, 995 uint8_t thermal_level); 996 997 QDF_STATUS wma_set_thermal_mgmt(tp_wma_handle wma_handle, 998 t_thermal_cmd_params thermal_info); 999 1000 int wma_thermal_mgmt_evt_handler(void *handle, uint8_t *event, 1001 uint32_t len); 1002 /* 1003 * wma_utils.c functions declarations 1004 */ 1005 1006 #ifdef WLAN_FEATURE_STATS_EXT 1007 /** 1008 * wma_stats_ext_event_handler() - extended stats event handler 1009 * @handle: wma handle 1010 * @event_buf: event buffer received from fw 1011 * @len: length of data 1012 * 1013 * Return: 0 for success or error code 1014 */ 1015 int wma_stats_ext_event_handler(void *handle, uint8_t *event_buf, 1016 uint32_t len); 1017 #endif 1018 1019 enum eSmpsModeValue host_map_smps_mode(A_UINT32 fw_smps_mode); 1020 int wma_smps_mode_to_force_mode_param(uint8_t smps_mode); 1021 1022 #ifdef WLAN_FEATURE_LINK_LAYER_STATS 1023 void wma_register_ll_stats_event_handler(tp_wma_handle wma_handle); 1024 1025 /** 1026 * wma_process_ll_stats_clear_req() - clear link layer stats 1027 * @wma: wma handle 1028 * @clearReq: ll stats clear request command params 1029 * 1030 * Return: QDF_STATUS_SUCCESS for success or error code 1031 */ 1032 QDF_STATUS wma_process_ll_stats_clear_req 1033 (tp_wma_handle wma, const tpSirLLStatsClearReq clearReq); 1034 1035 QDF_STATUS wma_process_ll_stats_set_req 1036 (tp_wma_handle wma, const tpSirLLStatsSetReq setReq); 1037 1038 /** 1039 * wma_process_ll_stats_get_req() - link layer stats get request 1040 * @wma:wma handle 1041 * @getReq:ll stats get request command params 1042 * 1043 * Return: QDF_STATUS_SUCCESS for success or error code 1044 */ 1045 QDF_STATUS wma_process_ll_stats_get_req 1046 (tp_wma_handle wma, const tpSirLLStatsGetReq getReq); 1047 1048 int wma_unified_link_iface_stats_event_handler(void *handle, 1049 uint8_t *cmd_param_info, 1050 uint32_t len); 1051 void wma_config_stats_ext_threshold(tp_wma_handle wma, 1052 struct sir_ll_ext_stats_threshold *thresh); 1053 #endif 1054 1055 void wma_post_link_status(tAniGetLinkStatus *pGetLinkStatus, 1056 uint8_t link_status); 1057 1058 /** 1059 * wma_link_status_event_handler() - link status event handler 1060 * @handle: wma handle 1061 * @cmd_param_info: data from event 1062 * @len: length 1063 * 1064 * Return: 0 for success or error code 1065 */ 1066 int wma_link_status_event_handler(void *handle, uint8_t *cmd_param_info, 1067 uint32_t len); 1068 1069 /** 1070 * wma_rso_cmd_status_event_handler() - RSO Command status event handler 1071 * @vdev_id: VDEV id 1072 * @notif: roam notification 1073 * 1074 * This function is used to send RSO command status to upper layer 1075 * 1076 * Return: 0 for success 1077 */ 1078 int wma_rso_cmd_status_event_handler(uint8_t vdev_id, uint32_t notif); 1079 1080 QDF_STATUS wma_send_link_speed(uint32_t link_speed); 1081 1082 int wma_link_speed_event_handler(void *handle, uint8_t *cmd_param_info, 1083 uint32_t len); 1084 1085 int wma_unified_debug_print_event_handler(void *handle, uint8_t *datap, 1086 uint32_t len); 1087 1088 /** 1089 * wma_peer_phymode() - get phymode 1090 * @nw_type: nw type 1091 * @sta_type: sta type 1092 * @is_ht: is ht supported 1093 * @ch_width: supported channel width 1094 * @is_vht: is vht supported 1095 * @is_he: is HE supported 1096 * @is_eht: is EHT supported 1097 * 1098 * Return: host phymode 1099 */ 1100 enum wlan_phymode 1101 wma_peer_phymode(tSirNwType nw_type, uint8_t sta_type, 1102 uint8_t is_ht, uint8_t ch_width, 1103 uint8_t is_vht, bool is_he, bool is_eht); 1104 1105 int32_t wma_txrx_fw_stats_reset(tp_wma_handle wma_handle, 1106 uint8_t vdev_id, uint32_t value); 1107 1108 int32_t wma_set_txrx_fw_stats_level(tp_wma_handle wma_handle, 1109 uint8_t vdev_id, uint32_t value); 1110 1111 /* 1112 * wma_features.c functions declarations 1113 */ 1114 1115 /** 1116 * wma_sar_register_event_handlers() - Register SAR event handlers 1117 * @handle: WMA Handle 1118 * 1119 * Function to be called during WMA initialization to register SAR 1120 * event handlers with WMI 1121 * 1122 * Return: QDF_STATUS_SUCCESS if registration is successful, otherwise 1123 * an error enumeration 1124 */ 1125 QDF_STATUS wma_sar_register_event_handlers(WMA_HANDLE handle); 1126 1127 void wma_process_link_status_req(tp_wma_handle wma, 1128 tAniGetLinkStatus *pGetLinkStatus); 1129 1130 /** 1131 * wma_get_isolation() - get antenna isolation 1132 * @handle: wma interface 1133 * 1134 * This function will send WMI_COEX_GET_ANTENNA_ISOLATION_CMDID to FW 1135 * 1136 * Return: 0 on success, otherwise error value 1137 */ 1138 QDF_STATUS wma_get_isolation(tp_wma_handle wma); 1139 1140 int wma_profile_data_report_event_handler(void *handle, uint8_t *event_buf, 1141 uint32_t len); 1142 1143 QDF_STATUS wma_unified_fw_profiling_cmd(wmi_unified_t wmi_handle, 1144 uint32_t cmd, uint32_t value1, uint32_t value2); 1145 1146 int wma_unified_csa_offload_enable(tp_wma_handle wma, uint8_t vdev_id); 1147 1148 #ifdef FEATURE_WLAN_TDLS 1149 int wma_tdls_event_handler(void *handle, uint8_t *event, uint32_t len); 1150 #endif 1151 1152 int wma_csa_offload_handler(void *handle, uint8_t *event, uint32_t len); 1153 1154 #ifdef FEATURE_OEM_DATA_SUPPORT 1155 int wma_oem_data_response_handler(void *handle, uint8_t *datap, 1156 uint32_t len); 1157 #endif 1158 1159 #if !defined(REMOVE_PKT_LOG) 1160 QDF_STATUS wma_pktlog_wmi_send_cmd(WMA_HANDLE handle, 1161 struct ath_pktlog_wmi_params *params); 1162 #endif 1163 1164 int wma_wow_wakeup_host_event(void *handle, uint8_t *event, 1165 uint32_t len); 1166 1167 int wma_d0_wow_disable_ack_event(void *handle, uint8_t *event, uint32_t len); 1168 1169 int wma_pdev_resume_event_handler(void *handle, uint8_t *event, uint32_t len); 1170 1171 void wma_del_ts_req(tp_wma_handle wma, struct del_ts_params *msg); 1172 1173 /** 1174 * wma_aggr_qos_req() - send aggr qos request to fw 1175 * @wma: handle to wma 1176 * @pAggrQosRspMsg - combined struct for all ADD_TS requests. 1177 * 1178 * A function to handle WMA_AGGR_QOS_REQ. This will send out 1179 * ADD_TS requests to firmware in loop for all the ACs with 1180 * active flow. 1181 * 1182 * Return: none 1183 */ 1184 void wma_aggr_qos_req(tp_wma_handle wma, 1185 struct aggr_add_ts_param *pAggrQosRspMsg); 1186 1187 void wma_add_ts_req(tp_wma_handle wma, struct add_ts_param *msg); 1188 1189 #ifdef FEATURE_WLAN_ESE 1190 QDF_STATUS wma_process_tsm_stats_req(tp_wma_handle wma_handler, 1191 void *pTsmStatsMsg); 1192 void wma_config_plm(tp_wma_handle wma, struct plm_req_params *plm); 1193 #endif 1194 1195 QDF_STATUS wma_process_mcbc_set_filter_req(tp_wma_handle wma_handle, 1196 tSirRcvFltMcAddrList * mcbc_param); 1197 1198 QDF_STATUS wma_process_add_periodic_tx_ptrn_ind(WMA_HANDLE handle, 1199 tSirAddPeriodicTxPtrn *pattern); 1200 1201 QDF_STATUS wma_process_del_periodic_tx_ptrn_ind(WMA_HANDLE handle, 1202 tSirDelPeriodicTxPtrn * 1203 pDelPeriodicTxPtrnParams); 1204 1205 #ifdef WLAN_FEATURE_STATS_EXT 1206 /** 1207 * wma_stats_ext_req() - request ext stats from fw 1208 * @wma_ptr: wma handle 1209 * @preq: stats ext params 1210 * 1211 * Return: QDF status 1212 */ 1213 QDF_STATUS wma_stats_ext_req(void *wma_ptr, tpStatsExtRequest preq); 1214 #endif 1215 1216 #ifdef WLAN_FEATURE_EXTWOW_SUPPORT 1217 QDF_STATUS wma_enable_ext_wow(tp_wma_handle wma, tpSirExtWoWParams params); 1218 1219 int wma_set_app_type1_params_in_fw(tp_wma_handle wma, 1220 tpSirAppType1Params appType1Params); 1221 1222 QDF_STATUS wma_set_app_type2_params_in_fw(tp_wma_handle wma, 1223 tpSirAppType2Params appType2Params); 1224 #endif 1225 1226 #ifdef FEATURE_WLAN_AUTO_SHUTDOWN 1227 int wma_auto_shutdown_event_handler(void *handle, uint8_t *event, 1228 uint32_t len); 1229 1230 /** 1231 * wma_set_auto_shutdown_timer_req() - sets auto shutdown timer in firmware 1232 * @wma_handle: wma handle 1233 * @auto_sh_cmd: auto shutdown timer params 1234 * 1235 * Return: QDF status 1236 */ 1237 QDF_STATUS 1238 wma_set_auto_shutdown_timer_req(tp_wma_handle wma_handle, 1239 struct auto_shutdown_cmd *auto_sh_cmd); 1240 #endif 1241 1242 #ifdef WLAN_FEATURE_TSF 1243 int wma_vdev_tsf_handler(void *handle, uint8_t *data, uint32_t data_len); 1244 QDF_STATUS wma_capture_tsf(tp_wma_handle wma_handle, uint32_t vdev_id); 1245 QDF_STATUS wma_reset_tsf_gpio(tp_wma_handle wma_handle, uint32_t vdev_id); 1246 QDF_STATUS wma_set_tsf_gpio_pin(WMA_HANDLE handle, uint32_t pin); 1247 1248 #ifdef WLAN_FEATURE_TSF_AUTO_REPORT 1249 /** 1250 * wma_set_tsf_auto_report() - Set TSF auto report in firmware 1251 * @wma_handle: wma handle 1252 * @vdev_id: vdev id 1253 * @param_id: enum GEN_PARAM 1254 * @ena: true for enable, and false for disable 1255 * 1256 * Return: QDF_STATUS_SUCCESS for success, otherwise for failure 1257 */ 1258 QDF_STATUS wma_set_tsf_auto_report(WMA_HANDLE handle, uint32_t vdev_id, 1259 uint32_t param_id, bool ena); 1260 #else /* !WLAN_FEATURE_TSF_AUTO_REPORT */ 1261 static inline QDF_STATUS wma_set_tsf_auto_report(WMA_HANDLE handle, 1262 uint32_t vdev_id, 1263 uint32_t param_id, bool ena) 1264 { 1265 return QDF_STATUS_E_NOSUPPORT; 1266 } 1267 #endif /* WLAN_FEATURE_TSF_AUTO_REPORT */ 1268 1269 #else 1270 static inline QDF_STATUS wma_capture_tsf(tp_wma_handle wma_handle, 1271 uint32_t vdev_id) 1272 { 1273 return QDF_STATUS_SUCCESS; 1274 } 1275 1276 static inline QDF_STATUS wma_reset_tsf_gpio(tp_wma_handle wma_handle, 1277 uint32_t vdev_id) 1278 { 1279 return QDF_STATUS_SUCCESS; 1280 } 1281 1282 static inline int wma_vdev_tsf_handler(void *handle, uint8_t *data, 1283 uint32_t data_len) 1284 { 1285 return 0; 1286 } 1287 1288 static inline QDF_STATUS wma_set_tsf_gpio_pin(WMA_HANDLE handle, uint32_t pin) 1289 { 1290 return QDF_STATUS_E_INVAL; 1291 } 1292 #endif 1293 1294 QDF_STATUS wma_set_wisa_params(tp_wma_handle wma, struct sir_wisa_params *wisa); 1295 1296 #ifdef DHCP_SERVER_OFFLOAD 1297 /** 1298 * wma_process_dhcpserver_offload() - enable DHCP server offload 1299 * @wma_handle: wma handle 1300 * @params: DHCP server offload information 1301 * 1302 * Return: QDF_STATUS_SUCCESS for success or error code 1303 */ 1304 QDF_STATUS 1305 wma_process_dhcpserver_offload(tp_wma_handle wma_handle, 1306 struct dhcp_offload_info_params *params); 1307 #endif 1308 1309 #ifdef WLAN_FEATURE_GPIO_LED_FLASHING 1310 QDF_STATUS wma_set_led_flashing(tp_wma_handle wma_handle, 1311 struct flashing_req_params *flashing); 1312 #endif 1313 1314 /** 1315 * wma_sar_rsp_evt_handler() - process sar response event from FW. 1316 * @handle: ol scn handle 1317 * @event: event buffer 1318 * @len: buffer length 1319 * 1320 * Return: 0 for success or error code 1321 */ 1322 int wma_sar_rsp_evt_handler(ol_scn_t handle, uint8_t *event, uint32_t len); 1323 1324 #ifdef FEATURE_WLAN_CH_AVOID 1325 QDF_STATUS wma_process_ch_avoid_update_req(tp_wma_handle wma_handle, 1326 tSirChAvoidUpdateReq * 1327 ch_avoid_update_req); 1328 #endif 1329 1330 #ifdef FEATURE_WLAN_TDLS 1331 int wma_update_tdls_peer_state(WMA_HANDLE handle, 1332 struct tdls_peer_update_state *peer_state); 1333 #endif 1334 1335 void wma_set_vdev_mgmt_rate(tp_wma_handle wma, uint8_t vdev_id); 1336 void wma_set_sap_keepalive(tp_wma_handle wma, uint8_t vdev_id); 1337 1338 #ifdef FEATURE_RSSI_MONITOR 1339 int wma_rssi_breached_event_handler(void *handle, 1340 u_int8_t *cmd_param_info, u_int32_t len); 1341 #else /* FEATURE_RSSI_MONITOR */ 1342 static inline 1343 int wma_rssi_breached_event_handler(void *handle, 1344 u_int8_t *cmd_param_info, u_int32_t len) 1345 { 1346 return 0; 1347 } 1348 #endif /* FEATURE_RSSI_MONITOR */ 1349 1350 QDF_STATUS wma_process_cfg_action_frm_tb_ppdu(tp_wma_handle wma, 1351 struct cfg_action_frm_tb_ppdu *cfg_info); 1352 1353 QDF_STATUS wma_process_set_ie_info(tp_wma_handle wma, 1354 struct vdev_ie_info *ie_info); 1355 int wma_peer_assoc_conf_handler(void *handle, uint8_t *cmd_param_info, 1356 uint32_t len); 1357 1358 /** 1359 * wma_peer_create_confirm_handler - Handle peer create confirmation 1360 * result 1361 * @handle: wma_handle 1362 * @evt_param_info: event data 1363 * @len: event length 1364 * 1365 * Return: 0 on success. Error value on failure 1366 */ 1367 int wma_peer_create_confirm_handler(void *handle, uint8_t *evt_param_info, 1368 uint32_t len); 1369 1370 int wma_peer_delete_handler(void *handle, uint8_t *cmd_param_info, 1371 uint32_t len); 1372 1373 void wma_remove_req(tp_wma_handle wma, uint8_t vdev_id, 1374 uint8_t type); 1375 1376 /** 1377 * wma_find_remove_req_msgtype() - find and remove request for vdev id 1378 * @wma: wma handle 1379 * @vdev_id: vdev id 1380 * @msg_type: message request type 1381 * 1382 * Find target request for given vdev id & sub type of request. 1383 * Remove the same from active list. 1384 * 1385 * Return: Success if request found, failure other wise 1386 */ 1387 struct wma_target_req *wma_find_remove_req_msgtype(tp_wma_handle wma, 1388 uint8_t vdev_id, 1389 uint32_t msg_type); 1390 1391 /** 1392 * wma_remove_peer_req - Remove the peer create 1393 * request from WMA queue 1394 * @wma: wma handle 1395 * @vdev_id: vdev id 1396 * @type: peer type 1397 * @peer_addr: peer address 1398 */ 1399 void wma_remove_peer_req(tp_wma_handle wma, uint8_t vdev_id, 1400 uint8_t type, struct qdf_mac_addr *peer_addr); 1401 1402 QDF_STATUS wma_process_hal_pwr_dbg_cmd(WMA_HANDLE handle, 1403 struct sir_mac_pwr_dbg_cmd * 1404 sir_pwr_dbg_params); 1405 1406 /** 1407 * wma_lost_link_info_handler() - collect lost link information and inform SME 1408 * @wma: WMA handle 1409 * @vdev_id: vdev ID 1410 * @rssi: rssi at disconnection time 1411 * 1412 * Return: none 1413 */ 1414 void wma_lost_link_info_handler(tp_wma_handle wma, uint32_t vdev_id, 1415 int32_t rssi); 1416 int wma_unified_power_debug_stats_event_handler(void *handle, 1417 uint8_t *cmd_param_info, uint32_t len); 1418 /** 1419 * wma_unified_beacon_debug_stats_event_handler() - collect beacon debug stats 1420 * @handle: WMA handle 1421 * @cmd_param_info: data from event 1422 * @len: length 1423 * 1424 * Return: 0 for success or error code 1425 */ 1426 int wma_unified_beacon_debug_stats_event_handler(void *handle, 1427 uint8_t *cmd_param_info, 1428 uint32_t len); 1429 1430 #if defined(CLD_PM_QOS) && defined(WLAN_FEATURE_LL_MODE) 1431 /** 1432 * wma_vdev_bcn_latency_event_handler() - Get the latency info received in bcn 1433 * @handle: WMA handle 1434 * @event: data in event 1435 * @len: length 1436 * 1437 * Return: 0 for success or error code 1438 */ 1439 int wma_vdev_bcn_latency_event_handler(void *handle, uint8_t *event, 1440 uint32_t len); 1441 #else 1442 static inline int wma_vdev_bcn_latency_event_handler(void *handle, 1443 uint8_t *event, 1444 uint32_t len) 1445 { 1446 return 0; 1447 } 1448 #endif 1449 1450 #ifdef FEATURE_WLAN_DIAG_SUPPORT 1451 /** 1452 * wma_sta_kickout_event()- send sta kickout event 1453 * @kickout_reason - reasoncode for kickout 1454 * @macaddr[QDF_MAC_ADDR_SIZE]: Peer mac address 1455 * @vdev_id: Unique id for identifying the VDEV 1456 * 1457 * This function sends sta kickout diag event 1458 * 1459 * Return: void. 1460 */ 1461 void wma_sta_kickout_event(uint32_t kickout_reason, uint8_t vdev_id, 1462 uint8_t *macaddr); 1463 #else 1464 static inline void wma_sta_kickout_event(uint32_t kickout_reason, 1465 uint8_t vdev_id, uint8_t *macaddr) 1466 { 1467 1468 }; 1469 #endif /* FEATURE_WLAN_DIAG_SUPPORT */ 1470 1471 /** 1472 * wma_get_rcpi_req() - get rcpi request 1473 * @handle: wma handle 1474 * @rcpi_request: rcpi params 1475 * 1476 * Return: none 1477 */ 1478 QDF_STATUS wma_get_rcpi_req(WMA_HANDLE handle, 1479 struct sme_rcpi_req *rcpi_request); 1480 1481 /** 1482 * wma_rcpi_event_handler() - rcpi event handler 1483 * @handle: wma handle 1484 * @cmd_param_info: data from event 1485 * @len: length 1486 * 1487 * Return: 0 for success or error code 1488 */ 1489 int wma_rcpi_event_handler(void *handle, uint8_t *cmd_param_info, 1490 uint32_t len); 1491 1492 /** 1493 * wma_acquire_wakelock() - acquire the given wakelock 1494 * @wl: the wakelock to acquire 1495 * @msec: the wakelock duration in milliseconds 1496 * 1497 * This also acquires the wma runtime pm lock. 1498 * 1499 * Return: None 1500 */ 1501 void wma_acquire_wakelock(qdf_wake_lock_t *wl, uint32_t msec); 1502 1503 /** 1504 * wma_release_wakelock() - release the given wakelock 1505 * @wl: the wakelock to release 1506 * 1507 * This also releases the wma runtime pm lock. 1508 * 1509 * Return: None 1510 */ 1511 void wma_release_wakelock(qdf_wake_lock_t *wl); 1512 1513 /** 1514 * wma_send_vdev_stop_to_fw() - send the vdev stop command to firmware 1515 * @wma: a reference to the global WMA handle 1516 * @vdev_id: the Id of the vdev to stop 1517 * 1518 * Consumers should call wma_release_wakelock() upon receipt of the vdev stop 1519 * response from firmware to avoid power penalties. 1520 * 1521 * Return: QDF_STATUS 1522 */ 1523 QDF_STATUS wma_send_vdev_stop_to_fw(t_wma_handle *wma, uint8_t vdev_id); 1524 1525 int wma_get_arp_stats_handler(void *handle, uint8_t *data, uint32_t data_len); 1526 1527 /** 1528 * wma_send_vdev_down_to_fw() - send the vdev down command to firmware 1529 * @wma: a reference to the global WMA handle 1530 * @vdev_id: the Id of the vdev to down 1531 * 1532 * This also releases the vdev start wakelock. 1533 * 1534 * Return: QDF_STATUS 1535 */ 1536 QDF_STATUS wma_send_vdev_down_to_fw(t_wma_handle *wma, uint8_t vdev_id); 1537 1538 /* 1539 * wma_rx_aggr_failure_event_handler - event handler to handle rx aggr failure 1540 * @handle: the wma handle 1541 * @event_buf: buffer with event 1542 * @len: buffer length 1543 * 1544 * This function receives rx aggregation failure event and then pass to upper 1545 * layer 1546 * 1547 * Return: 0 on success 1548 */ 1549 int wma_rx_aggr_failure_event_handler(void *handle, u_int8_t *event_buf, 1550 u_int32_t len); 1551 1552 /** 1553 * wma_wlan_bt_activity_evt_handler - event handler to handle bt activity 1554 * @handle: the WMA handle 1555 * @event: buffer with the event parameters 1556 * @len: length of the buffer 1557 * 1558 * This function receives BT activity event from firmware and passes the event 1559 * information to upper layers 1560 * 1561 * Return: 0 on success 1562 */ 1563 int wma_wlan_bt_activity_evt_handler(void *handle, uint8_t *event, 1564 uint32_t len); 1565 1566 /** 1567 * wma_pdev_div_info_evt_handler - event handler to handle antenna info 1568 * @handle: the wma handle 1569 * @event_buf: buffer with event 1570 * @len: buffer length 1571 * 1572 * This function receives antenna info from firmware and passes the event 1573 * to upper layer 1574 * 1575 * Return: 0 on success 1576 */ 1577 int wma_pdev_div_info_evt_handler(void *handle, u_int8_t *event_buf, 1578 u_int32_t len); 1579 1580 /** 1581 * wma_update_beacon_interval() - update beacon interval in fw 1582 * @wma: wma handle 1583 * @vdev_id: vdev id 1584 * @beaconInterval: becon interval 1585 * 1586 * Return: none 1587 */ 1588 void 1589 wma_update_beacon_interval(tp_wma_handle wma, uint8_t vdev_id, 1590 uint16_t beaconInterval); 1591 1592 #define RESET_BEACON_INTERVAL_TIMEOUT 200 1593 1594 struct wma_beacon_interval_reset_req { 1595 qdf_timer_t event_timeout; 1596 uint8_t vdev_id; 1597 uint16_t interval; 1598 }; 1599 1600 /** 1601 * wma_fill_beacon_interval_reset_req() - req to reset beacon interval 1602 * @wma: wma handle 1603 * @vdev_id: vdev id 1604 * @beacon_interval: beacon interval 1605 * @timeout: timeout val 1606 * 1607 * Return: status 1608 */ 1609 int wma_fill_beacon_interval_reset_req(tp_wma_handle wma, uint8_t vdev_id, 1610 uint16_t beacon_interval, uint32_t timeout); 1611 /* 1612 * wma_is_vdev_valid() - check the vdev status 1613 * @vdev_id: vdev identifier 1614 * 1615 * This function verifies the vdev validity 1616 * 1617 * Return: 'true' on valid vdev else 'false' 1618 */ 1619 bool wma_is_vdev_valid(uint32_t vdev_id); 1620 1621 /** 1622 * wma_vdev_obss_detection_info_handler - event handler to handle obss detection 1623 * @handle: the wma handle 1624 * @event: buffer with event 1625 * @len: buffer length 1626 * 1627 * This function receives obss detection info from firmware which is used to 1628 * decide obss protection. 1629 * 1630 * Return: 0 on success 1631 */ 1632 int wma_vdev_obss_detection_info_handler(void *handle, uint8_t *event, 1633 uint32_t len); 1634 1635 /** 1636 * wma_vdev_bss_color_collision_info_handler - event handler to 1637 * handle obss color collision detection. 1638 * @handle: the wma handle 1639 * @event: buffer with event 1640 * @len: buffer length 1641 * 1642 * This function receives obss color collision detection info from firmware 1643 * which is used to select new bss color. 1644 * 1645 * Return: 0 on success 1646 */ 1647 int wma_vdev_bss_color_collision_info_handler(void *handle, 1648 uint8_t *event, 1649 uint32_t len); 1650 1651 #ifdef WLAN_SUPPORT_TWT 1652 /** 1653 * wma_register_twt_events - Register TWT wmi event handlers 1654 * @handle: wma handle 1655 * 1656 * Return: None 1657 */ 1658 void wma_register_twt_events(tp_wma_handle wma_handle); 1659 #endif 1660 1661 /** 1662 * wma_get_roam_scan_stats() - Get roam scan stats request 1663 * @handle: wma handle 1664 * @req: request details 1665 * 1666 * Return: QDF_STATUS 1667 */ 1668 QDF_STATUS wma_get_roam_scan_stats(WMA_HANDLE handle, 1669 struct sir_roam_scan_stats *req); 1670 1671 /** 1672 * wma_roam_scan_stats_event_handler() - roam scan stats event handler 1673 * @handle: wma handle 1674 * @event: event data 1675 * @len: length of data 1676 * 1677 * Return: Success or Failure status 1678 */ 1679 int wma_roam_scan_stats_event_handler(void *handle, uint8_t *event, 1680 uint32_t len); 1681 1682 /** 1683 * wma_send_vdev_down() - send del bss req to firmware 1684 * @wma: wma handle. 1685 * @req: pointer to del bss response 1686 * 1687 * This function sends del bss resp to upper layer 1688 * 1689 * Return: Success or Failure status 1690 */ 1691 QDF_STATUS wma_send_vdev_down(tp_wma_handle wma, struct del_bss_resp *req); 1692 1693 /** 1694 * wma_cold_boot_cal_event_handler() - Cold boot cal event handler 1695 * @wma_ctx: wma handle 1696 * @event_buff: event data 1697 * @len: length of data 1698 * 1699 * Return: Success or Failure status 1700 */ 1701 int wma_cold_boot_cal_event_handler(void *wma_ctx, uint8_t *event_buff, 1702 uint32_t len); 1703 1704 #ifdef FEATURE_OEM_DATA 1705 /** 1706 * wma_oem_event_handler() - oem data event handler 1707 * @wma_ctx: wma handle 1708 * @event_buff: event data 1709 * @len: length of event buffer 1710 * 1711 * Return: Success or Failure status 1712 */ 1713 int wma_oem_event_handler(void *wma_ctx, uint8_t *event_buff, uint32_t len); 1714 #endif 1715 1716 #ifdef MULTI_CLIENT_LL_SUPPORT 1717 /** 1718 * wma_latency_level_event_handler() - latency level event handler 1719 * @wma_ctx: wma handle 1720 * @event_buff: event data 1721 * @len: length of event buffer 1722 * 1723 * Return: Success or Failure status 1724 */ 1725 int wma_latency_level_event_handler(void *wma_ctx, uint8_t *event_buff, 1726 uint32_t len); 1727 #endif 1728 1729 /** 1730 * wma_get_ani_level_evt_handler - event handler to fetch ani level 1731 * @handle: the wma handle 1732 * @event_buf: buffer with event 1733 * @len: buffer length 1734 * 1735 * This function receives ani level from firmware and passes the event 1736 * to upper layer 1737 * 1738 * Return: 0 on success 1739 */ 1740 int wma_get_ani_level_evt_handler(void *handle, uint8_t *event_buf, 1741 uint32_t len); 1742 /** 1743 * wma_mcs_rate_match() - find the match mcs rate 1744 * @raw_rate: the rate to look up 1745 * @is_he: if it is he rate 1746 * @nss1_rate: the nss1 rate 1747 * @nss2_rate: the nss2 rate 1748 * @nss: the nss in use 1749 * @guard_interval: to get guard interval from rate 1750 * 1751 * This is a helper function to find the match of the tx_rate 1752 * and return nss/guard interval. 1753 * 1754 * Return: the found rate or 0 otherwise 1755 */ 1756 uint16_t wma_mcs_rate_match(uint16_t raw_rate, bool is_he, 1757 const uint16_t *nss1_rate, 1758 const uint16_t *nss2_rate, 1759 uint8_t *nss, enum txrate_gi *guard_interval); 1760 1761 /** 1762 * wma_update_edca_pifs_param() - Update edca/pifs param 1763 * @handle: wma handle 1764 * @edca_pifs_param: pointer to edca_pifs_vparam struct 1765 * 1766 * This is a helper function to update edca/pifs param for ll sap 1767 * 1768 * Return: QDF_STATUS 1769 */ 1770 QDF_STATUS 1771 wma_update_edca_pifs_param(WMA_HANDLE handle, 1772 struct edca_pifs_vparam *edca_pifs_param); 1773 1774 /** 1775 * wma_update_bss_peer_phy_mode() - Update phymode of peer object 1776 * @des_chan: des_chan object which has channel information 1777 * @vdev: pointer to vdev object 1778 * 1779 * This is a helper function to update phymode of peer object 1780 * 1781 * Return: QDF_STATUS 1782 */ 1783 QDF_STATUS 1784 wma_update_bss_peer_phy_mode(struct wlan_channel *des_chan, 1785 struct wlan_objmgr_vdev *vdev); 1786 #endif 1787