1 /* 2 * Copyright (c) 2013-2019 The Linux Foundation. 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 * DOC: Implement API's specific to STA component. 20 */ 21 #include <wmi.h> 22 #include "wmi_unified_priv.h" 23 #include "wmi_unified_sta_api.h" 24 25 QDF_STATUS wmi_unified_set_sta_sa_query_param_cmd(void *wmi_hdl, 26 uint8_t vdev_id, 27 uint32_t max_retries, 28 uint32_t retry_interval) 29 { 30 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 31 32 if (wmi_handle->ops->send_set_sta_sa_query_param_cmd) 33 return wmi_handle->ops->send_set_sta_sa_query_param_cmd(wmi_handle, 34 vdev_id, max_retries, 35 retry_interval); 36 37 return QDF_STATUS_E_FAILURE; 38 } 39 40 QDF_STATUS 41 wmi_unified_set_sta_keep_alive_cmd(wmi_unified_t wmi_handle, 42 struct sta_keep_alive_params *params) 43 { 44 if (wmi_handle->ops->send_set_sta_keep_alive_cmd) 45 return wmi_handle->ops->send_set_sta_keep_alive_cmd(wmi_handle, 46 params); 47 48 return QDF_STATUS_E_FAILURE; 49 } 50 51 QDF_STATUS wmi_unified_vdev_set_gtx_cfg_cmd(void *wmi_hdl, uint32_t if_id, 52 struct wmi_gtx_config *gtx_info) 53 { 54 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 55 56 if (wmi_handle->ops->send_vdev_set_gtx_cfg_cmd) 57 return wmi_handle->ops->send_vdev_set_gtx_cfg_cmd(wmi_handle, 58 if_id, 59 gtx_info); 60 61 return QDF_STATUS_E_FAILURE; 62 } 63 64 QDF_STATUS wmi_unified_process_dhcp_ind(void *wmi_hdl, 65 wmi_peer_set_param_cmd_fixed_param *ta_dhcp_ind) 66 { 67 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 68 69 if (wmi_handle->ops->send_process_dhcp_ind_cmd) 70 return wmi_handle->ops->send_process_dhcp_ind_cmd(wmi_handle, 71 ta_dhcp_ind); 72 73 return QDF_STATUS_E_FAILURE; 74 } 75 76 QDF_STATUS wmi_unified_get_link_speed_cmd(void *wmi_hdl, 77 wmi_mac_addr peer_macaddr) 78 { 79 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 80 81 if (wmi_handle->ops->send_get_link_speed_cmd) 82 return wmi_handle->ops->send_get_link_speed_cmd(wmi_handle, 83 peer_macaddr); 84 85 return QDF_STATUS_E_FAILURE; 86 } 87 88 QDF_STATUS wmi_unified_fw_profiling_data_cmd(void *wmi_hdl, 89 uint32_t cmd, uint32_t value1, uint32_t value2) 90 { 91 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 92 93 if (wmi_handle->ops->send_fw_profiling_cmd) 94 return wmi_handle->ops->send_fw_profiling_cmd(wmi_handle, 95 cmd, 96 value1, 97 value2); 98 99 return QDF_STATUS_E_FAILURE; 100 } 101 102 QDF_STATUS wmi_unified_nat_keepalive_en_cmd(void *wmi_hdl, uint8_t vdev_id) 103 { 104 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 105 106 if (wmi_handle->ops->send_nat_keepalive_en_cmd) 107 return wmi_handle->ops->send_nat_keepalive_en_cmd(wmi_handle, 108 vdev_id); 109 110 return QDF_STATUS_E_FAILURE; 111 } 112 113 QDF_STATUS wmi_unified_wlm_latency_level_cmd(void *wmi_hdl, 114 struct wlm_latency_level_param *param) 115 { 116 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 117 118 if (wmi_handle->ops->send_wlm_latency_level_cmd) 119 return wmi_handle->ops->send_wlm_latency_level_cmd(wmi_handle, 120 param); 121 122 return QDF_STATUS_E_FAILURE; 123 } 124 125 QDF_STATUS wmi_unified_process_set_ie_info_cmd(void *wmi_hdl, 126 struct vdev_ie_info_param *ie_info) 127 { 128 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 129 130 if (wmi_handle->ops->send_process_set_ie_info_cmd) 131 return wmi_handle->ops->send_process_set_ie_info_cmd(wmi_handle, 132 ie_info); 133 134 return QDF_STATUS_E_FAILURE; 135 } 136 137 QDF_STATUS wmi_unified_set_base_macaddr_indicate_cmd(void *wmi_hdl, 138 uint8_t *custom_addr) 139 { 140 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 141 142 if (wmi_handle->ops->send_set_base_macaddr_indicate_cmd) 143 return wmi_handle->ops->send_set_base_macaddr_indicate_cmd(wmi_handle, 144 custom_addr); 145 146 return QDF_STATUS_E_FAILURE; 147 } 148 149 #ifdef FEATURE_WLAN_TDLS 150 QDF_STATUS wmi_unified_set_tdls_offchan_mode_cmd(void *wmi_hdl, 151 struct tdls_channel_switch_params *chan_switch_params) 152 { 153 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 154 155 if (wmi_handle->ops->send_set_tdls_offchan_mode_cmd) 156 return wmi_handle->ops->send_set_tdls_offchan_mode_cmd(wmi_handle, 157 chan_switch_params); 158 159 return QDF_STATUS_E_FAILURE; 160 } 161 162 QDF_STATUS wmi_unified_update_fw_tdls_state_cmd(void *wmi_hdl, 163 struct tdls_info *tdls_param, 164 enum wmi_tdls_state tdls_state) 165 { 166 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 167 168 if (wmi_handle->ops->send_update_fw_tdls_state_cmd) 169 return wmi_handle->ops->send_update_fw_tdls_state_cmd( 170 wmi_handle, tdls_param, tdls_state); 171 172 return QDF_STATUS_E_FAILURE; 173 } 174 175 QDF_STATUS wmi_unified_update_tdls_peer_state_cmd(wmi_unified_t wmi_handle, 176 struct tdls_peer_update_state *peer_state, 177 uint32_t *ch_mhz) 178 { 179 if (wmi_handle->ops->send_update_tdls_peer_state_cmd) 180 return wmi_handle->ops->send_update_tdls_peer_state_cmd(wmi_handle, 181 peer_state, ch_mhz); 182 183 return QDF_STATUS_E_FAILURE; 184 } 185 186 QDF_STATUS wmi_extract_vdev_tdls_ev_param(void *wmi_hdl, void *evt_buf, 187 struct tdls_event_info *param) 188 { 189 wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl; 190 191 if (wmi_handle->ops->extract_vdev_tdls_ev_param) 192 return wmi_handle->ops->extract_vdev_tdls_ev_param(wmi_handle, 193 evt_buf, param); 194 195 return QDF_STATUS_E_FAILURE; 196 } 197 #endif /* FEATURE_WLAN_TDLS */ 198 199 #ifdef WLAN_FEATURE_DISA 200 QDF_STATUS wmi_unified_encrypt_decrypt_send_cmd(void *wmi_hdl, 201 struct disa_encrypt_decrypt_req_params *params) 202 { 203 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 204 205 if (wmi_handle->ops->send_encrypt_decrypt_send_cmd) 206 return wmi_handle->ops->send_encrypt_decrypt_send_cmd( 207 wmi_handle, 208 params); 209 return QDF_STATUS_E_FAILURE; 210 } 211 212 QDF_STATUS wmi_extract_encrypt_decrypt_resp_params(void *wmi_hdl, 213 uint8_t *evt_buf, 214 struct disa_encrypt_decrypt_resp_params *resp) 215 { 216 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 217 218 if (wmi_handle->ops->extract_encrypt_decrypt_resp_event) 219 return wmi_handle->ops->extract_encrypt_decrypt_resp_event( 220 wmi_handle, evt_buf, resp); 221 222 return QDF_STATUS_E_FAILURE; 223 } 224 #endif /* WLAN_FEATURE_DISA */ 225 226 QDF_STATUS wmi_unified_send_sar_limit_cmd(void *wmi_hdl, 227 struct sar_limit_cmd_params *params) 228 { 229 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 230 231 if (wmi_handle->ops->send_sar_limit_cmd) 232 return wmi_handle->ops->send_sar_limit_cmd( 233 wmi_handle, 234 params); 235 return QDF_STATUS_E_FAILURE; 236 } 237 238 QDF_STATUS wmi_unified_get_sar_limit_cmd(void *wmi_hdl) 239 { 240 wmi_unified_t wmi_handle = wmi_hdl; 241 242 if (wmi_handle->ops->get_sar_limit_cmd) 243 return wmi_handle->ops->get_sar_limit_cmd(wmi_handle); 244 245 return QDF_STATUS_E_FAILURE; 246 } 247 248 QDF_STATUS wmi_unified_extract_sar_limit_event(void *wmi_hdl, 249 uint8_t *evt_buf, 250 struct sar_limit_event *event) 251 { 252 wmi_unified_t wmi_handle = wmi_hdl; 253 254 if (wmi_handle->ops->extract_sar_limit_event) 255 return wmi_handle->ops->extract_sar_limit_event(wmi_handle, 256 evt_buf, 257 event); 258 259 return QDF_STATUS_E_FAILURE; 260 } 261 262 QDF_STATUS wmi_unified_extract_sar2_result_event(void *handle, 263 uint8_t *event, uint32_t len) 264 { 265 wmi_unified_t wmi_handle = handle; 266 267 if (wmi_handle->ops->extract_sar2_result_event) 268 return wmi_handle->ops->extract_sar2_result_event(wmi_handle, 269 event, 270 len); 271 272 return QDF_STATUS_E_FAILURE; 273 } 274 275 QDF_STATUS wmi_unified_set_del_pmkid_cache(void *wmi_hdl, 276 struct wmi_unified_pmk_cache *req_buf) 277 { 278 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 279 280 if (wmi_handle->ops->send_set_del_pmkid_cache_cmd) 281 return wmi_handle->ops->send_set_del_pmkid_cache_cmd(wmi_handle, 282 req_buf); 283 284 return QDF_STATUS_E_FAILURE; 285 } 286 287 QDF_STATUS wmi_unified_del_ts_cmd(void *wmi_hdl, uint8_t vdev_id, 288 uint8_t ac) 289 { 290 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 291 292 if (wmi_handle->ops->send_del_ts_cmd) 293 return wmi_handle->ops->send_del_ts_cmd(wmi_handle, 294 vdev_id, ac); 295 296 return QDF_STATUS_E_FAILURE; 297 } 298 299 QDF_STATUS wmi_unified_aggr_qos_cmd(void *wmi_hdl, 300 struct aggr_add_ts_param *aggr_qos_rsp_msg) 301 { 302 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 303 304 if (wmi_handle->ops->send_aggr_qos_cmd) 305 return wmi_handle->ops->send_aggr_qos_cmd(wmi_handle, 306 aggr_qos_rsp_msg); 307 308 return QDF_STATUS_E_FAILURE; 309 } 310 311 QDF_STATUS wmi_unified_add_ts_cmd(void *wmi_hdl, 312 struct add_ts_param *msg) 313 { 314 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 315 316 if (wmi_handle->ops->send_add_ts_cmd) 317 return wmi_handle->ops->send_add_ts_cmd(wmi_handle, 318 msg); 319 320 return QDF_STATUS_E_FAILURE; 321 } 322 323 QDF_STATUS wmi_unified_process_add_periodic_tx_ptrn_cmd( 324 wmi_unified_t wmi_handle, 325 struct periodic_tx_pattern *pattern, 326 uint8_t vdev_id) 327 { 328 if (wmi_handle->ops->send_process_add_periodic_tx_ptrn_cmd) 329 return wmi_handle->ops->send_process_add_periodic_tx_ptrn_cmd( 330 wmi_handle, pattern, vdev_id); 331 332 return QDF_STATUS_E_FAILURE; 333 } 334 335 QDF_STATUS wmi_unified_process_del_periodic_tx_ptrn_cmd(void *wmi_hdl, 336 uint8_t vdev_id, 337 uint8_t pattern_id) 338 { 339 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 340 341 if (wmi_handle->ops->send_process_del_periodic_tx_ptrn_cmd) 342 return wmi_handle->ops->send_process_del_periodic_tx_ptrn_cmd( 343 wmi_handle, 344 vdev_id, 345 pattern_id); 346 347 return QDF_STATUS_E_FAILURE; 348 } 349 350 QDF_STATUS wmi_unified_set_auto_shutdown_timer_cmd(void *wmi_hdl, 351 uint32_t timer_val) 352 { 353 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 354 355 if (wmi_handle->ops->send_set_auto_shutdown_timer_cmd) 356 return wmi_handle->ops->send_set_auto_shutdown_timer_cmd( 357 wmi_handle, 358 timer_val); 359 360 return QDF_STATUS_E_FAILURE; 361 } 362 363 QDF_STATUS wmi_unified_set_led_flashing_cmd(void *wmi_hdl, 364 struct flashing_req_params *flashing) 365 { 366 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 367 368 if (wmi_handle->ops->send_set_led_flashing_cmd) 369 return wmi_handle->ops->send_set_led_flashing_cmd(wmi_handle, 370 flashing); 371 372 return QDF_STATUS_E_FAILURE; 373 } 374 375 QDF_STATUS wmi_unified_process_ch_avoid_update_cmd(void *wmi_hdl) 376 { 377 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 378 379 if (wmi_handle->ops->send_process_ch_avoid_update_cmd) 380 return wmi_handle->ops->send_process_ch_avoid_update_cmd( 381 wmi_handle); 382 383 return QDF_STATUS_E_FAILURE; 384 } 385 386 QDF_STATUS wmi_unified_pdev_set_pcl_cmd(void *wmi_hdl, 387 struct wmi_pcl_chan_weights *msg) 388 { 389 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 390 391 if (wmi_handle->ops->send_pdev_set_pcl_cmd) 392 return wmi_handle->ops->send_pdev_set_pcl_cmd(wmi_handle, msg); 393 394 return QDF_STATUS_E_FAILURE; 395 } 396 397 QDF_STATUS wmi_unified_soc_set_hw_mode_cmd(void *wmi_hdl, 398 uint32_t hw_mode_index) 399 { 400 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 401 402 if (wmi_handle->ops->send_pdev_set_hw_mode_cmd) 403 return wmi_handle->ops->send_pdev_set_hw_mode_cmd(wmi_handle, 404 hw_mode_index); 405 406 return QDF_STATUS_E_FAILURE; 407 } 408 409 #ifdef WLAN_POLICY_MGR_ENABLE 410 QDF_STATUS wmi_unified_pdev_set_dual_mac_config_cmd(void *wmi_hdl, 411 struct policy_mgr_dual_mac_config *msg) 412 { 413 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 414 415 if (wmi_handle->ops->send_pdev_set_dual_mac_config_cmd) 416 return wmi_handle->ops->send_pdev_set_dual_mac_config_cmd( 417 wmi_handle, 418 msg); 419 420 return QDF_STATUS_E_FAILURE; 421 } 422 #endif /* WLAN_POLICY_MGR_ENABLE */ 423 424 QDF_STATUS wmi_unified_send_adapt_dwelltime_params_cmd(void *wmi_hdl, 425 struct wmi_adaptive_dwelltime_params *dwelltime_params) 426 { 427 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 428 429 if (wmi_handle->ops->send_adapt_dwelltime_params_cmd) 430 return wmi_handle->ops-> 431 send_adapt_dwelltime_params_cmd(wmi_handle, 432 dwelltime_params); 433 434 return QDF_STATUS_E_FAILURE; 435 } 436 437 QDF_STATUS wmi_unified_send_dbs_scan_sel_params_cmd(void *wmi_hdl, 438 struct wmi_dbs_scan_sel_params *dbs_scan_params) 439 { 440 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 441 442 if (wmi_handle->ops->send_dbs_scan_sel_params_cmd) 443 return wmi_handle->ops-> 444 send_dbs_scan_sel_params_cmd(wmi_handle, 445 dbs_scan_params); 446 447 return QDF_STATUS_E_FAILURE; 448 } 449 450 QDF_STATUS wmi_unified_set_arp_stats_req(void *wmi_hdl, 451 struct set_arp_stats *req_buf) 452 { 453 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 454 455 if (wmi_handle->ops->send_set_arp_stats_req_cmd) 456 return wmi_handle->ops->send_set_arp_stats_req_cmd(wmi_handle, 457 req_buf); 458 459 return QDF_STATUS_E_FAILURE; 460 } 461 462 QDF_STATUS wmi_unified_get_arp_stats_req(void *wmi_hdl, 463 struct get_arp_stats *req_buf) 464 { 465 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 466 467 if (wmi_handle->ops->send_get_arp_stats_req_cmd) 468 return wmi_handle->ops->send_get_arp_stats_req_cmd(wmi_handle, 469 req_buf); 470 471 return QDF_STATUS_E_FAILURE; 472 } 473 474 QDF_STATUS wmi_unified_peer_unmap_conf_send(void *wmi_hdl, 475 uint8_t vdev_id, 476 uint32_t peer_id_cnt, 477 uint16_t *peer_id_list) 478 { 479 wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl; 480 481 if (wmi_handle->ops->send_peer_unmap_conf_cmd) 482 return wmi_handle->ops->send_peer_unmap_conf_cmd(wmi_handle, 483 vdev_id, peer_id_cnt, peer_id_list); 484 485 return QDF_STATUS_E_FAILURE; 486 } 487 488