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