xref: /wlan-dirver/qca-wifi-host-cmn/wmi/src/wmi_unified_sta_api.c (revision 27d564647e9b50e713c60b0d7e5ea2a9b0a3ae74)
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