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