xref: /wlan-dirver/qcacld-3.0/components/wmi/src/wmi_unified_roam_api.c (revision 0f7d749e5fe743e202d6437308cc35084335d604)
1 /*
2  * Copyright (c) 2013-2021, The Linux Foundation. All rights reserved.
3  * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16  */
17 
18 #include <osdep.h>
19 #include <wmi.h>
20 #include <wmi_unified_priv.h>
21 #include <wmi_unified_roam_param.h>
22 #include <wmi_unified_roam_api.h>
23 
24 #ifdef FEATURE_LFR_SUBNET_DETECTION
25 QDF_STATUS
26 wmi_unified_set_gateway_params_cmd(wmi_unified_t wmi_handle,
27 				   struct gateway_update_req_param *req)
28 {
29 	if (wmi_handle->ops->send_set_gateway_params_cmd)
30 		return wmi_handle->ops->send_set_gateway_params_cmd(wmi_handle,
31 								    req);
32 
33 	return QDF_STATUS_E_FAILURE;
34 }
35 #endif /* FEATURE_LFR_SUBNET_DETECTION */
36 
37 #ifdef FEATURE_RSSI_MONITOR
38 QDF_STATUS
39 wmi_unified_set_rssi_monitoring_cmd(wmi_unified_t wmi_handle,
40 				    struct rssi_monitor_param *req)
41 {
42 	if (wmi_handle->ops->send_set_rssi_monitoring_cmd)
43 		return wmi_handle->ops->send_set_rssi_monitoring_cmd(wmi_handle,
44 								     req);
45 
46 	return QDF_STATUS_E_FAILURE;
47 }
48 #endif /* FEATURE_RSSI_MONITOR */
49 
50 QDF_STATUS wmi_unified_roam_scan_offload_rssi_thresh_cmd(
51 		wmi_unified_t wmi_handle,
52 		struct wlan_roam_offload_scan_rssi_params *roam_req)
53 {
54 	if (wmi_handle->ops->send_roam_scan_offload_rssi_thresh_cmd)
55 		return wmi_handle->ops->send_roam_scan_offload_rssi_thresh_cmd(
56 				wmi_handle, roam_req);
57 
58 	return QDF_STATUS_E_FAILURE;
59 }
60 
61 QDF_STATUS
62 wmi_unified_roam_scan_offload_scan_period(
63 				wmi_unified_t wmi_handle,
64 				struct wlan_roam_scan_period_params *param)
65 {
66 	if (wmi_handle->ops->send_roam_scan_offload_scan_period_cmd)
67 		return wmi_handle->ops->send_roam_scan_offload_scan_period_cmd(
68 							wmi_handle, param);
69 
70 	return QDF_STATUS_E_FAILURE;
71 }
72 
73 QDF_STATUS wmi_unified_roam_mawc_params_cmd(
74 			wmi_unified_t wmi_handle,
75 			struct wlan_roam_mawc_params *params)
76 {
77 	if (wmi_handle->ops->send_roam_mawc_params_cmd)
78 		return wmi_handle->ops->send_roam_mawc_params_cmd(wmi_handle,
79 								  params);
80 
81 	return QDF_STATUS_E_FAILURE;
82 }
83 
84 QDF_STATUS
85 wmi_unified_roam_scan_filter_cmd(wmi_unified_t wmi_handle,
86 				 struct roam_scan_filter_params *roam_req)
87 {
88 	if (wmi_handle->ops->send_roam_scan_filter_cmd)
89 		return wmi_handle->ops->send_roam_scan_filter_cmd(wmi_handle,
90 								  roam_req);
91 
92 	return QDF_STATUS_E_FAILURE;
93 }
94 
95 #ifdef FEATURE_WLAN_ESE
96 QDF_STATUS wmi_unified_plm_stop_cmd(wmi_unified_t wmi_handle,
97 				    const struct plm_req_params *plm)
98 {
99 	if (wmi_handle->ops->send_plm_stop_cmd)
100 		return wmi_handle->ops->send_plm_stop_cmd(wmi_handle, plm);
101 
102 	return QDF_STATUS_E_FAILURE;
103 }
104 
105 QDF_STATUS wmi_unified_plm_start_cmd(wmi_unified_t wmi_handle,
106 				     const struct plm_req_params *plm)
107 {
108 	if (wmi_handle->ops->send_plm_start_cmd)
109 		return wmi_handle->ops->send_plm_start_cmd(wmi_handle, plm);
110 
111 	return QDF_STATUS_E_FAILURE;
112 }
113 #endif /* FEATURE_WLAN_ESE */
114 
115 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
116 QDF_STATUS wmi_unified_set_ric_req_cmd(wmi_unified_t wmi_handle, void *msg,
117 				       uint8_t is_add_ts)
118 {
119 	if (wmi_handle->ops->send_set_ric_req_cmd)
120 		return wmi_handle->ops->send_set_ric_req_cmd(wmi_handle, msg,
121 							     is_add_ts);
122 
123 	return QDF_STATUS_E_FAILURE;
124 }
125 
126 QDF_STATUS wmi_unified_roam_synch_complete_cmd(wmi_unified_t wmi_handle,
127 					       uint8_t vdev_id)
128 {
129 	if (wmi_handle->ops->send_process_roam_synch_complete_cmd)
130 		return wmi_handle->ops->send_process_roam_synch_complete_cmd(
131 				wmi_handle, vdev_id);
132 
133 	return QDF_STATUS_E_FAILURE;
134 }
135 
136 #ifdef WLAN_VENDOR_HANDOFF_CONTROL
137 QDF_STATUS
138 wmi_unified_roam_vendor_handoff_req_cmd(wmi_unified_t wmi_handle,
139 					uint8_t vdev_id, uint32_t param_id)
140 {
141 	if (wmi_handle->ops->send_process_roam_vendor_handoff_req_cmd)
142 	      return wmi_handle->ops->send_process_roam_vendor_handoff_req_cmd(
143 				wmi_handle, vdev_id, param_id);
144 
145 	return QDF_STATUS_E_FAILURE;
146 }
147 
148 QDF_STATUS
149 wmi_extract_roam_vendor_control_param_event(wmi_unified_t wmi_handle,
150 				uint8_t *event, uint32_t len,
151 				struct roam_vendor_handoff_params **data)
152 {
153 	if (wmi_handle->ops->extract_roam_vendor_control_param_event)
154 		return wmi_handle->ops->extract_roam_vendor_control_param_event(
155 					wmi_handle, event, len, data);
156 	return QDF_STATUS_E_FAILURE;
157 }
158 #endif
159 
160 #if defined(WLAN_FEATURE_ROAM_OFFLOAD) && defined(WLAN_FEATURE_11BE_MLO)
161 QDF_STATUS
162 wmi_extract_roam_synch_key_event(wmi_unified_t wmi_handle, uint8_t *event,
163 				 uint32_t len,
164 				 struct wlan_crypto_key_entry **keys,
165 				 uint8_t *num_keys,
166 				 struct qdf_mac_addr *mld_addr)
167 {
168 	if (wmi_handle->ops->extract_roam_synch_key_event)
169 		return wmi_handle->ops->extract_roam_synch_key_event(
170 							wmi_handle, event,
171 							len, keys, num_keys,
172 							mld_addr);
173 
174 	return QDF_STATUS_E_FAILURE;
175 }
176 #endif
177 
178 QDF_STATUS wmi_unified_roam_invoke_cmd(wmi_unified_t wmi_handle,
179 				       struct roam_invoke_req *roaminvoke)
180 {
181 	if (wmi_handle->ops->send_roam_invoke_cmd)
182 		return wmi_handle->ops->send_roam_invoke_cmd(wmi_handle,
183 							     roaminvoke);
184 
185 	return QDF_STATUS_E_FAILURE;
186 }
187 
188 QDF_STATUS
189 wmi_unified_send_disconnect_roam_params(wmi_unified_t wmi_handle,
190 					struct wlan_roam_disconnect_params *req)
191 {
192 	if (wmi_handle->ops->send_disconnect_roam_params)
193 		return wmi_handle->ops->send_disconnect_roam_params(wmi_handle,
194 								    req);
195 	return QDF_STATUS_E_FAILURE;
196 }
197 
198 QDF_STATUS
199 wmi_unified_send_idle_roam_params(wmi_unified_t wmi_handle,
200 				  struct wlan_roam_idle_params *req)
201 {
202 	if (wmi_handle->ops->send_idle_roam_params)
203 		return wmi_handle->ops->send_idle_roam_params(wmi_handle,
204 							      req);
205 	return QDF_STATUS_E_FAILURE;
206 }
207 
208 QDF_STATUS
209 wmi_unified_send_roam_preauth_status(wmi_unified_t wmi_handle,
210 				     struct wmi_roam_auth_status_params *params)
211 {
212 	if (wmi_handle->ops->send_roam_preauth_status)
213 		return wmi_handle->ops->send_roam_preauth_status(wmi_handle,
214 								 params);
215 	return QDF_STATUS_E_FAILURE;
216 }
217 
218 QDF_STATUS wmi_unified_vdev_set_pcl_cmd(wmi_unified_t wmi_handle,
219 					struct set_pcl_cmd_params *params)
220 {
221 	if (wmi_handle->ops->send_vdev_set_pcl_cmd)
222 		return wmi_handle->ops->send_vdev_set_pcl_cmd(wmi_handle,
223 							      params);
224 
225 	return QDF_STATUS_E_FAILURE;
226 }
227 #endif /* WLAN_FEATURE_ROAM_OFFLOAD */
228 
229 #ifdef WLAN_FEATURE_11BE_MLO
230 QDF_STATUS
231 wmi_unified_roam_mlo_config_cmd(wmi_unified_t wmi_handle,
232 				struct wlan_roam_mlo_config *req)
233 {
234 	if (wmi_handle->ops->send_roam_mlo_config)
235 		return wmi_handle->ops->send_roam_mlo_config(wmi_handle,
236 							     req);
237 	return QDF_STATUS_E_FAILURE;
238 }
239 #endif
240 
241 QDF_STATUS wmi_unified_roam_scan_offload_mode_cmd(
242 			wmi_unified_t wmi_handle,
243 			struct wlan_roam_scan_offload_params *rso_cfg)
244 {
245 	if (wmi_handle->ops->send_roam_scan_offload_mode_cmd)
246 		return wmi_handle->ops->send_roam_scan_offload_mode_cmd(
247 					wmi_handle, rso_cfg);
248 
249 	return QDF_STATUS_E_FAILURE;
250 }
251 
252 QDF_STATUS wmi_unified_send_roam_scan_offload_ap_cmd(
253 				wmi_unified_t wmi_handle,
254 				struct ap_profile_params *ap_profile)
255 {
256 	if (wmi_handle->ops->send_roam_scan_offload_ap_profile_cmd)
257 		return wmi_handle->ops->send_roam_scan_offload_ap_profile_cmd(
258 				  wmi_handle, ap_profile);
259 
260 	return QDF_STATUS_E_FAILURE;
261 }
262 
263 QDF_STATUS wmi_unified_roam_scan_offload_cmd(wmi_unified_t wmi_handle,
264 					     uint32_t command,
265 					     uint32_t vdev_id)
266 {
267 	if (wmi_handle->ops->send_roam_scan_offload_cmd)
268 		return wmi_handle->ops->send_roam_scan_offload_cmd(wmi_handle,
269 								   command,
270 								   vdev_id);
271 
272 	return QDF_STATUS_E_FAILURE;
273 }
274 
275 QDF_STATUS
276 wmi_unified_roam_scan_offload_chan_list_cmd(
277 		wmi_unified_t wmi_handle,
278 		struct wlan_roam_scan_channel_list *rso_ch_info)
279 {
280 	if (wmi_handle->ops->send_roam_scan_offload_chan_list_cmd)
281 		return wmi_handle->ops->send_roam_scan_offload_chan_list_cmd(
282 				wmi_handle, rso_ch_info);
283 
284 	return QDF_STATUS_E_FAILURE;
285 }
286 
287 QDF_STATUS wmi_unified_roam_scan_offload_rssi_change_cmd(
288 		wmi_unified_t wmi_handle,
289 		struct wlan_roam_rssi_change_params *params)
290 {
291 	if (wmi_handle->ops->send_roam_scan_offload_rssi_change_cmd)
292 		return wmi_handle->ops->send_roam_scan_offload_rssi_change_cmd(
293 					wmi_handle, params);
294 
295 	return QDF_STATUS_E_FAILURE;
296 }
297 
298 QDF_STATUS
299 wmi_unified_set_per_roam_config(wmi_unified_t wmi_handle,
300 				struct wlan_per_roam_config_req *req_buf)
301 {
302 	if (wmi_handle->ops->send_per_roam_config_cmd)
303 		return wmi_handle->ops->send_per_roam_config_cmd(wmi_handle,
304 								 req_buf);
305 
306 	return QDF_STATUS_E_FAILURE;
307 }
308 
309 QDF_STATUS wmi_unified_send_limit_off_chan_cmd(
310 		wmi_unified_t wmi_handle,
311 		struct wmi_limit_off_chan_param *limit_off_chan_param)
312 {
313 	if (wmi_handle->ops->send_limit_off_chan_cmd)
314 		return wmi_handle->ops->send_limit_off_chan_cmd(wmi_handle,
315 				limit_off_chan_param);
316 
317 	return QDF_STATUS_E_FAILURE;
318 }
319 
320 #ifdef WLAN_FEATURE_FILS_SK
321 QDF_STATUS wmi_unified_roam_send_hlp_cmd(wmi_unified_t wmi_handle,
322 					 struct hlp_params *req_buf)
323 {
324 	if (wmi_handle->ops->send_roam_scan_hlp_cmd)
325 		return wmi_handle->ops->send_roam_scan_hlp_cmd(wmi_handle,
326 							       req_buf);
327 
328 	return QDF_STATUS_E_FAILURE;
329 }
330 #endif /* WLAN_FEATURE_FILS_SK */
331 
332 QDF_STATUS wmi_unified_send_btm_config(wmi_unified_t wmi_handle,
333 				       struct wlan_roam_btm_config *params)
334 {
335 	if (wmi_handle->ops->send_btm_config)
336 		return wmi_handle->ops->send_btm_config(wmi_handle,
337 							params);
338 
339 	return QDF_STATUS_E_FAILURE;
340 }
341 
342 QDF_STATUS wmi_unified_send_bss_load_config(
343 			wmi_unified_t wmi_handle,
344 			struct wlan_roam_bss_load_config *params)
345 {
346 	if (wmi_handle->ops->send_roam_bss_load_config)
347 		return wmi_handle->ops->send_roam_bss_load_config(wmi_handle,
348 								  params);
349 
350 	return QDF_STATUS_E_FAILURE;
351 }
352 
353 QDF_STATUS
354 wmi_unified_offload_11k_cmd(wmi_unified_t wmi_handle,
355 			    struct wlan_roam_11k_offload_params *params)
356 {
357 	if (wmi_handle->ops->send_offload_11k_cmd)
358 		return wmi_handle->ops->send_offload_11k_cmd(wmi_handle,
359 							     params);
360 
361 	return QDF_STATUS_E_FAILURE;
362 }
363 
364 QDF_STATUS wmi_unified_invoke_neighbor_report_cmd(
365 			wmi_unified_t wmi_handle,
366 			struct wmi_invoke_neighbor_report_params *params)
367 {
368 	if (wmi_handle->ops->send_invoke_neighbor_report_cmd)
369 		return wmi_handle->ops->send_invoke_neighbor_report_cmd(
370 				wmi_handle, params);
371 
372 	return QDF_STATUS_E_FAILURE;
373 }
374 
375 QDF_STATUS wmi_unified_get_roam_scan_ch_list(wmi_unified_t wmi_handle,
376 					     uint8_t vdev_id)
377 {
378 	if (wmi_handle->ops->send_roam_scan_ch_list_req_cmd)
379 		return wmi_handle->ops->send_roam_scan_ch_list_req_cmd(
380 				wmi_handle, vdev_id);
381 
382 	return QDF_STATUS_E_FAILURE;
383 }
384 
385 #if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
386 QDF_STATUS
387 wmi_extract_roam_event(wmi_unified_t wmi_handle, uint8_t *event,
388 		       uint32_t data_len,
389 		       struct roam_offload_roam_event *roam_event)
390 {
391 	if (wmi_handle->ops->extract_roam_event)
392 		return wmi_handle->ops->extract_roam_event(wmi_handle, event,
393 							   data_len,
394 							   roam_event);
395 
396 	return QDF_STATUS_E_FAILURE;
397 }
398 #endif /* WLAN_FEATURE_HOST_ROAM || WLAN_FEATURE_ROAM_OFFLOAD */
399 
400 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
401 QDF_STATUS wmi_unified_set_roam_triggers(wmi_unified_t wmi_handle,
402 					 struct wlan_roam_triggers *triggers)
403 {
404 	if (wmi_handle->ops->send_set_roam_trigger_cmd)
405 		return wmi_handle->ops->send_set_roam_trigger_cmd(wmi_handle,
406 								  triggers);
407 
408 	return QDF_STATUS_E_FAILURE;
409 }
410 
411 QDF_STATUS wmi_extract_roam_sync_event(wmi_unified_t wmi_handle, void *evt_buf,
412 				       uint32_t len,
413 				       struct roam_offload_synch_ind **sync_ind)
414 {
415 	if (wmi_handle->ops->extract_roam_sync_event)
416 		return wmi_handle->ops->extract_roam_sync_event(wmi_handle,
417 								evt_buf,
418 								len,
419 								sync_ind);
420 
421 	return QDF_STATUS_E_FAILURE;
422 }
423 
424 QDF_STATUS
425 wmi_extract_roam_sync_frame_event(wmi_unified_t wmi_handle, void *event,
426 				  uint32_t len,
427 				  struct roam_synch_frame_ind *frame_ptr)
428 {
429 	if (wmi_handle->ops->extract_roam_sync_frame_event)
430 		return wmi_handle->ops->extract_roam_sync_frame_event(wmi_handle,
431 								      event,
432 								      len,
433 								      frame_ptr);
434 
435 	return QDF_STATUS_E_FAILURE;
436 }
437 
438 QDF_STATUS
439 wmi_extract_btm_denylist_event(wmi_unified_t wmi_handle,
440 			       uint8_t *event,
441 			       uint32_t data_len,
442 			       struct roam_denylist_event **dst_list)
443 {
444 	if (wmi_handle->ops->extract_btm_dl_event)
445 		return wmi_handle->ops->extract_btm_dl_event(wmi_handle,
446 							     event,
447 							     data_len,
448 							     dst_list);
449 	return QDF_STATUS_E_FAILURE;
450 }
451 
452 QDF_STATUS
453 wmi_extract_vdev_disconnect_event(wmi_unified_t wmi_handle,
454 				  uint8_t *event, uint32_t data_len,
455 				  struct vdev_disconnect_event_data *data)
456 {
457 	if (wmi_handle->ops->extract_vdev_disconnect_event)
458 		return wmi_handle->ops->extract_vdev_disconnect_event(
459 				wmi_handle, event, data_len, data);
460 	return QDF_STATUS_E_FAILURE;
461 }
462 
463 QDF_STATUS
464 wmi_extract_roam_scan_chan_list(wmi_unified_t wmi_handle,
465 				uint8_t *event, uint32_t data_len,
466 				struct cm_roam_scan_ch_resp **data)
467 {
468 	if (wmi_handle->ops->extract_roam_scan_chan_list)
469 		return wmi_handle->ops->extract_roam_scan_chan_list(
470 				wmi_handle, event, data_len, data);
471 	return QDF_STATUS_E_FAILURE;
472 }
473 
474 QDF_STATUS
475 wmi_unified_extract_roam_btm_response(wmi_unified_t wmi, void *evt_buf,
476 				      struct roam_btm_response_data *dst,
477 				      uint8_t idx)
478 {
479 	if (wmi->ops->extract_roam_btm_response_stats)
480 		return wmi->ops->extract_roam_btm_response_stats(wmi, evt_buf,
481 								 dst, idx);
482 
483 	return QDF_STATUS_E_FAILURE;
484 }
485 
486 QDF_STATUS
487 wmi_unified_extract_roam_initial_info(wmi_unified_t wmi, void *evt_buf,
488 				      struct roam_initial_data *dst,
489 				      uint8_t idx)
490 {
491 	if (wmi->ops->extract_roam_initial_info)
492 		return wmi->ops->extract_roam_initial_info(wmi, evt_buf,
493 							   dst, idx);
494 
495 	return QDF_STATUS_E_FAILURE;
496 }
497 
498 QDF_STATUS
499 wmi_unified_extract_roam_msg_info(wmi_unified_t wmi, void *evt_buf,
500 				  struct roam_msg_info *dst, uint8_t idx)
501 {
502 	if (wmi->ops->extract_roam_msg_info)
503 		return wmi->ops->extract_roam_msg_info(wmi, evt_buf, dst, idx);
504 
505 	return QDF_STATUS_E_FAILURE;
506 }
507 
508 QDF_STATUS
509 wmi_unified_extract_roam_extract_frame_info(wmi_unified_t wmi, void *evt_buf,
510 					    struct roam_frame_stats *dst,
511 					    uint8_t idx, uint8_t num_frames)
512 {
513 	if (wmi->ops->extract_roam_frame_info)
514 		return wmi->ops->extract_roam_frame_info(wmi, evt_buf,
515 							 dst, idx, num_frames);
516 
517 	return QDF_STATUS_E_FAILURE;
518 }
519 
520 QDF_STATUS
521 wmi_extract_roam_stats_event(wmi_unified_t wmi_handle,
522 			     uint8_t *event, uint32_t data_len,
523 			     struct roam_stats_event **stats_info)
524 {
525 	if (wmi_handle->ops->extract_roam_stats_event)
526 		return wmi_handle->ops->extract_roam_stats_event(wmi_handle,
527 								 event,
528 								 data_len,
529 								 stats_info);
530 
531 	return QDF_STATUS_E_FAILURE;
532 }
533 
534 QDF_STATUS
535 wmi_extract_auth_offload_event(wmi_unified_t wmi_handle,
536 			       uint8_t *event, uint32_t data_len,
537 			       struct auth_offload_event *auth_event)
538 {
539 	if (wmi_handle->ops->extract_auth_offload_event)
540 		return wmi_handle->ops->extract_auth_offload_event(wmi_handle,
541 								   event,
542 								   data_len,
543 								   auth_event);
544 	return QDF_STATUS_E_FAILURE;
545 }
546 
547 QDF_STATUS
548 wmi_extract_roam_pmkid_request(wmi_unified_t wmi_handle,
549 			       uint8_t *event, uint32_t data_len,
550 			       struct roam_pmkid_req_event **list)
551 {
552 	if (wmi_handle->ops->extract_roam_pmkid_request)
553 		return wmi_handle->ops->extract_roam_pmkid_request(wmi_handle,
554 								   event,
555 								   data_len,
556 								   list);
557 
558 	return QDF_STATUS_E_FAILURE;
559 }
560 
561 QDF_STATUS
562 wmi_extract_roam_candidate_frame_event(wmi_unified_t wmi_handle, uint8_t *event,
563 				       uint32_t len,
564 				       struct roam_scan_candidate_frame *data)
565 {
566 	if (wmi_handle->ops->extract_roam_candidate_frame)
567 		return wmi_handle->ops->extract_roam_candidate_frame(
568 								  wmi_handle,
569 								  event,
570 								  len, data);
571 	return QDF_STATUS_E_FAILURE;
572 }
573 #endif
574