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