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