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