xref: /wlan-dirver/qca-wifi-host-cmn/wmi/src/wmi_unified_api.c (revision dd4dc88b837a295134aa9869114a2efee0f4894b)
1 /*
2  * Copyright (c) 2016-2019 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 #include "wmi_unified_priv.h"
20 #include "wmi_unified_param.h"
21 #include "qdf_module.h"
22 #include "cdp_txrx_cmn_struct.h"
23 
24 static const wmi_host_channel_width mode_to_width[WMI_HOST_MODE_MAX] = {
25 	[WMI_HOST_MODE_11A]           = WMI_HOST_CHAN_WIDTH_20,
26 	[WMI_HOST_MODE_11G]           = WMI_HOST_CHAN_WIDTH_20,
27 	[WMI_HOST_MODE_11B]           = WMI_HOST_CHAN_WIDTH_20,
28 	[WMI_HOST_MODE_11GONLY]       = WMI_HOST_CHAN_WIDTH_20,
29 	[WMI_HOST_MODE_11NA_HT20]     = WMI_HOST_CHAN_WIDTH_20,
30 	[WMI_HOST_MODE_11NG_HT20]     = WMI_HOST_CHAN_WIDTH_20,
31 	[WMI_HOST_MODE_11AC_VHT20]    = WMI_HOST_CHAN_WIDTH_20,
32 	[WMI_HOST_MODE_11AC_VHT20_2G] = WMI_HOST_CHAN_WIDTH_20,
33 	[WMI_HOST_MODE_11NA_HT40]     = WMI_HOST_CHAN_WIDTH_40,
34 	[WMI_HOST_MODE_11NG_HT40]     = WMI_HOST_CHAN_WIDTH_40,
35 	[WMI_HOST_MODE_11AC_VHT40]    = WMI_HOST_CHAN_WIDTH_40,
36 	[WMI_HOST_MODE_11AC_VHT40_2G] = WMI_HOST_CHAN_WIDTH_40,
37 	[WMI_HOST_MODE_11AC_VHT80]    = WMI_HOST_CHAN_WIDTH_80,
38 	[WMI_HOST_MODE_11AC_VHT80_2G] = WMI_HOST_CHAN_WIDTH_80,
39 #if CONFIG_160MHZ_SUPPORT
40 	[WMI_HOST_MODE_11AC_VHT80_80] = WMI_HOST_CHAN_WIDTH_80P80,
41 	[WMI_HOST_MODE_11AC_VHT160]   = WMI_HOST_CHAN_WIDTH_160,
42 #endif
43 
44 #if SUPPORT_11AX
45 	[WMI_HOST_MODE_11AX_HE20]     = WMI_HOST_CHAN_WIDTH_20,
46 	[WMI_HOST_MODE_11AX_HE40]     = WMI_HOST_CHAN_WIDTH_40,
47 	[WMI_HOST_MODE_11AX_HE80]     = WMI_HOST_CHAN_WIDTH_80,
48 	[WMI_HOST_MODE_11AX_HE80_80]  = WMI_HOST_CHAN_WIDTH_80P80,
49 	[WMI_HOST_MODE_11AX_HE160]    = WMI_HOST_CHAN_WIDTH_160,
50 	[WMI_HOST_MODE_11AX_HE20_2G]  = WMI_HOST_CHAN_WIDTH_20,
51 	[WMI_HOST_MODE_11AX_HE40_2G]  = WMI_HOST_CHAN_WIDTH_40,
52 	[WMI_HOST_MODE_11AX_HE80_2G]  = WMI_HOST_CHAN_WIDTH_80,
53 #endif
54 };
55 
56 /**
57  * wmi_unified_vdev_create_send() - send VDEV create command to fw
58  * @wmi_handle: wmi handle
59  * @param: pointer to hold vdev create parameter
60  * @macaddr: vdev mac address
61  *
62  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
63  */
64 QDF_STATUS wmi_unified_vdev_create_send(void *wmi_hdl,
65 				 uint8_t macaddr[QDF_MAC_ADDR_SIZE],
66 				 struct vdev_create_params *param)
67 {
68 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
69 
70 	if (wmi_handle->ops->send_vdev_create_cmd)
71 		return wmi_handle->ops->send_vdev_create_cmd(wmi_handle,
72 			   macaddr, param);
73 
74 	return QDF_STATUS_E_FAILURE;
75 }
76 
77 /**
78  * wmi_unified_vdev_delete_send() - send VDEV delete command to fw
79  * @wmi_handle: wmi handle
80  * @if_id: vdev id
81  *
82  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
83  */
84 QDF_STATUS wmi_unified_vdev_delete_send(void *wmi_hdl,
85 					  uint8_t if_id)
86 {
87 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
88 
89 	if (wmi_handle->ops->send_vdev_delete_cmd)
90 		return wmi_handle->ops->send_vdev_delete_cmd(wmi_handle,
91 			   if_id);
92 
93 	return QDF_STATUS_E_FAILURE;
94 }
95 
96 QDF_STATUS
97 wmi_unified_vdev_nss_chain_params_send(void *wmi_hdl,
98 				       uint8_t vdev_id,
99 				       struct vdev_nss_chains *user_cfg)
100 {
101 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
102 
103 	if (wmi_handle->ops->send_vdev_nss_chain_params_cmd)
104 		return wmi_handle->ops->send_vdev_nss_chain_params_cmd(
105 							wmi_handle,
106 							vdev_id,
107 							user_cfg);
108 
109 	return QDF_STATUS_E_FAILURE;
110 }
111 
112 /**
113  * wmi_unified_vdev_stop_send() - send vdev stop command to fw
114  * @wmi: wmi handle
115  * @vdev_id: vdev id
116  *
117  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
118  */
119 QDF_STATUS wmi_unified_vdev_stop_send(void *wmi_hdl,
120 					uint8_t vdev_id)
121 {
122 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
123 
124 	if (wmi_handle->ops->send_vdev_stop_cmd)
125 		return wmi_handle->ops->send_vdev_stop_cmd(wmi_handle,
126 			   vdev_id);
127 
128 	return QDF_STATUS_E_FAILURE;
129 }
130 
131 /**
132  * wmi_unified_vdev_down_send() - send vdev down command to fw
133  * @wmi: wmi handle
134  * @vdev_id: vdev id
135  *
136  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
137  */
138 QDF_STATUS wmi_unified_vdev_down_send(void *wmi_hdl, uint8_t vdev_id)
139 {
140 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
141 
142 	if (wmi_handle->ops->send_vdev_down_cmd)
143 		return wmi_handle->ops->send_vdev_down_cmd(wmi_handle, vdev_id);
144 
145 	return QDF_STATUS_E_FAILURE;
146 }
147 
148 /**
149  * wmi_unified_vdev_start_send() - send vdev start command to fw
150  * @wmi: wmi handle
151  * @vdev_id: vdev id
152  *
153  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
154  */
155 QDF_STATUS wmi_unified_vdev_start_send(void *wmi_hdl,
156 			struct vdev_start_params *req)
157 {
158 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
159 
160 	if (wmi_handle->ops->send_vdev_start_cmd)
161 		return wmi_handle->ops->send_vdev_start_cmd(wmi_handle, req);
162 
163 	return QDF_STATUS_E_FAILURE;
164 }
165 
166 /**
167  * wmi_unified_vdev_set_nac_rssi_send() - send NAC_RSSI command to fw
168  * @wmi: wmi handle
169  * @req: pointer to hold nac rssi request data
170  *
171  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
172  */
173 QDF_STATUS wmi_unified_vdev_set_nac_rssi_send(void *wmi_hdl,
174 			struct vdev_scan_nac_rssi_params *req)
175 {
176 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
177 
178 	if (wmi_handle->ops->send_vdev_set_nac_rssi_cmd)
179 		return wmi_handle->ops->send_vdev_set_nac_rssi_cmd(wmi_handle, req);
180 
181 	return QDF_STATUS_E_FAILURE;
182 }
183 
184 /**
185  * wmi_unified_hidden_ssid_vdev_restart_send() - restart vdev to set hidden ssid
186  * @wmi: wmi handle
187  * @restart_params: vdev restart params
188  *
189  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
190  */
191 QDF_STATUS wmi_unified_hidden_ssid_vdev_restart_send(void *wmi_hdl,
192 			struct hidden_ssid_vdev_restart_params *restart_params)
193 {
194 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
195 
196 	if (wmi_handle->ops->send_hidden_ssid_vdev_restart_cmd)
197 		return wmi_handle->ops->send_hidden_ssid_vdev_restart_cmd(
198 			wmi_handle, restart_params);
199 
200 	return QDF_STATUS_E_FAILURE;
201 }
202 
203 /**
204  * wmi_unified_peer_flush_tids_send() - flush peer tids packets in fw
205  * @wmi: wmi handle
206  * @peer_addr: peer mac address
207  * @param: pointer to hold peer flush tid parameter
208  *
209  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
210  */
211 QDF_STATUS wmi_unified_peer_flush_tids_send(void *wmi_hdl,
212 					 uint8_t peer_addr[QDF_MAC_ADDR_SIZE],
213 					 struct peer_flush_params *param)
214 {
215 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
216 
217 	if (wmi_handle->ops->send_peer_flush_tids_cmd)
218 		return wmi_handle->ops->send_peer_flush_tids_cmd(wmi_handle,
219 				  peer_addr, param);
220 
221 	return QDF_STATUS_E_FAILURE;
222 }
223 
224 /**
225  * wmi_unified_peer_delete_send() - send PEER delete command to fw
226  * @wmi: wmi handle
227  * @peer_addr: peer mac addr
228  * @vdev_id: vdev id
229  *
230  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
231  */
232 QDF_STATUS wmi_unified_peer_delete_send(void *wmi_hdl,
233 				    uint8_t
234 				    peer_addr[QDF_MAC_ADDR_SIZE],
235 				    uint8_t vdev_id)
236 {
237 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
238 
239 	if (wmi_handle->ops->send_peer_delete_cmd)
240 		return wmi_handle->ops->send_peer_delete_cmd(wmi_handle,
241 				  peer_addr, vdev_id);
242 
243 	return QDF_STATUS_E_FAILURE;
244 }
245 
246 /**
247  * wmi_set_peer_param() - set peer parameter in fw
248  * @wmi_ctx: wmi handle
249  * @peer_addr: peer mac address
250  * @param    : pointer to hold peer set parameter
251  *
252  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
253  */
254 QDF_STATUS wmi_set_peer_param_send(void *wmi_hdl,
255 				uint8_t peer_addr[QDF_MAC_ADDR_SIZE],
256 				struct peer_set_params *param)
257 {
258 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
259 
260 	if (wmi_handle->ops->send_peer_param_cmd)
261 		return wmi_handle->ops->send_peer_param_cmd(wmi_handle,
262 				peer_addr, param);
263 
264 	return QDF_STATUS_E_FAILURE;
265 }
266 
267 /**
268  * wmi_unified_vdev_up_send() - send vdev up command in fw
269  * @wmi: wmi handle
270  * @bssid: bssid
271  * @vdev_up_params: pointer to hold vdev up parameter
272  *
273  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
274  */
275 QDF_STATUS wmi_unified_vdev_up_send(void *wmi_hdl,
276 			     uint8_t bssid[QDF_MAC_ADDR_SIZE],
277 				 struct vdev_up_params *params)
278 {
279 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
280 
281 	if (wmi_handle->ops->send_vdev_up_cmd)
282 		return wmi_handle->ops->send_vdev_up_cmd(wmi_handle, bssid,
283 					params);
284 
285 	return QDF_STATUS_E_FAILURE;
286 }
287 
288 /**
289  * wmi_unified_peer_create_send() - send peer create command to fw
290  * @wmi: wmi handle
291  * @peer_addr: peer mac address
292  * @peer_type: peer type
293  * @vdev_id: vdev id
294  *
295  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
296  */
297 QDF_STATUS wmi_unified_peer_create_send(void *wmi_hdl,
298 					struct peer_create_params *param)
299 {
300 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
301 
302 	if (wmi_handle->ops->send_peer_create_cmd)
303 		return wmi_handle->ops->send_peer_create_cmd(wmi_handle, param);
304 
305 	return QDF_STATUS_E_FAILURE;
306 }
307 
308 /**
309  * wmi_unified_peer_rx_reorder_queue_setup_send() - send rx reorder queue
310  * 	setup command to fw
311  * @wmi: wmi handle
312  * @rx_reorder_queue_setup_params: Rx reorder queue setup parameters
313  *
314  * Return: QDF_STATUS for success and QDF_STATUS_E_FAILURE for failure
315  */
316 QDF_STATUS wmi_unified_peer_rx_reorder_queue_setup_send(void *wmi_hdl,
317 					struct rx_reorder_queue_setup_params *param)
318 {
319 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
320 
321 	if (wmi_handle->ops->send_peer_rx_reorder_queue_setup_cmd)
322 		return wmi_handle->ops->send_peer_rx_reorder_queue_setup_cmd(
323 			wmi_handle, param);
324 
325 	return QDF_STATUS_E_FAILURE;
326 }
327 
328 /**
329  * wmi_unified_peer_rx_reorder_queue_remove_send() - send rx reorder queue
330  * 	remove command to fw
331  * @wmi: wmi handle
332  * @rx_reorder_queue_remove_params: Rx reorder queue remove parameters
333  *
334  * Return: QDF_STATUS for success and QDF_STATUS_E_FAILURE for failure
335  */
336 QDF_STATUS wmi_unified_peer_rx_reorder_queue_remove_send(void *wmi_hdl,
337 					struct rx_reorder_queue_remove_params *param)
338 {
339 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
340 
341 	if (wmi_handle->ops->send_peer_rx_reorder_queue_remove_cmd)
342 		return wmi_handle->ops->send_peer_rx_reorder_queue_remove_cmd(
343 			wmi_handle, param);
344 
345 	return QDF_STATUS_E_FAILURE;
346 }
347 
348 #ifdef WLAN_SUPPORT_GREEN_AP
349 /**
350  * wmi_unified_green_ap_ps_send() - enable green ap powersave command
351  * @wmi_handle: wmi handle
352  * @value: value
353  * @pdev_id: pdev id to have radio context
354  *
355  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
356  */
357 QDF_STATUS wmi_unified_green_ap_ps_send(void *wmi_hdl,
358 						uint32_t value, uint8_t pdev_id)
359 {
360 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
361 
362 	if (wmi_handle->ops->send_green_ap_ps_cmd)
363 		return wmi_handle->ops->send_green_ap_ps_cmd(wmi_handle, value,
364 				  pdev_id);
365 
366 	return QDF_STATUS_E_FAILURE;
367 }
368 #else
369 QDF_STATUS wmi_unified_green_ap_ps_send(void *wmi_hdl,
370 						uint32_t value, uint8_t pdev_id)
371 {
372 	return QDF_STATUS_SUCCESS;
373 }
374 #endif /* WLAN_SUPPORT_GREEN_AP */
375 
376 /**
377  * wmi_unified_pdev_utf_cmd() - send utf command to fw
378  * @wmi_handle: wmi handle
379  * @param: pointer to pdev_utf_params
380  * @mac_id: mac id to have radio context
381  *
382  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
383  */
384 QDF_STATUS
385 wmi_unified_pdev_utf_cmd_send(void *wmi_hdl,
386 				struct pdev_utf_params *param,
387 				uint8_t mac_id)
388 {
389 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
390 
391 	if (wmi_handle->ops->send_pdev_utf_cmd)
392 		return wmi_handle->ops->send_pdev_utf_cmd(wmi_handle, param,
393 				  mac_id);
394 
395 	return QDF_STATUS_E_FAILURE;
396 }
397 
398 /**
399  * wmi_unified_pdev_param_send() - set pdev parameters
400  * @wmi_handle: wmi handle
401  * @param: pointer to pdev parameter
402  * @mac_id: radio context
403  *
404  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failures,
405  *         errno on failure
406  */
407 QDF_STATUS
408 wmi_unified_pdev_param_send(void *wmi_hdl,
409 			   struct pdev_params *param,
410 				uint8_t mac_id)
411 {
412 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
413 
414 	if (wmi_handle->ops->send_pdev_param_cmd)
415 		return wmi_handle->ops->send_pdev_param_cmd(wmi_handle, param,
416 				  mac_id);
417 
418 	return QDF_STATUS_E_FAILURE;
419 }
420 
421 /**
422  *  wmi_unified_suspend_send() - WMI suspend function
423  *  @param wmi_handle      : handle to WMI.
424  *  @param param    : pointer to hold suspend parameter
425  *  @mac_id: radio context
426  *
427  *  Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
428  */
429 QDF_STATUS wmi_unified_suspend_send(void *wmi_hdl,
430 				struct suspend_params *param,
431 				uint8_t mac_id)
432 {
433 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
434 
435 	if (wmi_handle->ops->send_suspend_cmd)
436 		return wmi_handle->ops->send_suspend_cmd(wmi_handle, param,
437 				  mac_id);
438 
439 	return QDF_STATUS_E_FAILURE;
440 }
441 
442 /**
443  *  wmi_unified_resume_send - WMI resume function
444  *  @param wmi_handle      : handle to WMI.
445  *  @mac_id: radio context
446  *
447  *  Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
448  */
449 QDF_STATUS wmi_unified_resume_send(void *wmi_hdl,
450 				uint8_t mac_id)
451 {
452 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
453 
454 	if (wmi_handle->ops->send_resume_cmd)
455 		return wmi_handle->ops->send_resume_cmd(wmi_handle,
456 				  mac_id);
457 
458 	return QDF_STATUS_E_FAILURE;
459 }
460 
461 /**
462  *  wmi_unified_wow_enable_send() - WMI wow enable function
463  *  @param wmi_handle      : handle to WMI.
464  *  @param param    : pointer to hold wow enable parameter
465  *  @mac_id: radio context
466  *
467  *  Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
468  */
469 QDF_STATUS wmi_unified_wow_enable_send(void *wmi_hdl,
470 				struct wow_cmd_params *param,
471 				uint8_t mac_id)
472 {
473 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
474 
475 	if (wmi_handle->ops->send_wow_enable_cmd)
476 		return wmi_handle->ops->send_wow_enable_cmd(wmi_handle, param,
477 				  mac_id);
478 
479 	return QDF_STATUS_E_FAILURE;
480 }
481 
482 /**
483  *  wmi_unified_wow_wakeup_send() - WMI wow wakeup function
484  *  @param wmi_hdl      : handle to WMI.
485  *
486  *  Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
487  */
488 QDF_STATUS wmi_unified_wow_wakeup_send(void *wmi_hdl)
489 {
490 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
491 
492 	if (wmi_handle->ops->send_wow_wakeup_cmd)
493 		return wmi_handle->ops->send_wow_wakeup_cmd(wmi_handle);
494 
495 	return QDF_STATUS_E_FAILURE;
496 }
497 
498 /**
499  *  wmi_unified_wow_add_wakeup_event_send() - WMI wow wakeup function
500  *  @param wmi_handle      : handle to WMI.
501  *  @param: pointer to wow wakeup event parameter structure
502  *
503  *  Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
504  */
505 QDF_STATUS wmi_unified_wow_add_wakeup_event_send(void *wmi_hdl,
506 		struct wow_add_wakeup_params *param)
507 {
508 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
509 
510 	if (wmi->ops->send_wow_add_wakeup_event_cmd)
511 		return wmi->ops->send_wow_add_wakeup_event_cmd(wmi,
512 				param);
513 
514 	return QDF_STATUS_E_FAILURE;
515 }
516 
517 /**
518  *  wmi_unified_wow_add_wakeup_pattern_send() - WMI wow wakeup pattern function
519  *  @param wmi_handle      : handle to WMI.
520  *  @param: pointer to wow wakeup pattern parameter structure
521  *
522  *  Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
523  */
524 QDF_STATUS wmi_unified_wow_add_wakeup_pattern_send(void *wmi_hdl,
525 		struct wow_add_wakeup_pattern_params *param)
526 {
527 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
528 
529 	if (wmi->ops->send_wow_add_wakeup_pattern_cmd)
530 		return wmi->ops->send_wow_add_wakeup_pattern_cmd(wmi, param);
531 
532 	return QDF_STATUS_E_FAILURE;
533 }
534 
535 /**
536  *  wmi_unified_wow_remove_wakeup_pattern_send() - WMI wow wakeup pattern function
537  *  @param wmi_handle      : handle to WMI.
538  *  @param: pointer to wow wakeup pattern parameter structure
539  *
540  *  Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
541  */
542 QDF_STATUS wmi_unified_wow_remove_wakeup_pattern_send(void *wmi_hdl,
543 		struct wow_remove_wakeup_pattern_params *param)
544 {
545 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
546 
547 	if (wmi->ops->send_wow_remove_wakeup_pattern_cmd)
548 		return wmi->ops->send_wow_remove_wakeup_pattern_cmd(wmi, param);
549 
550 	return QDF_STATUS_E_FAILURE;
551 }
552 
553 /**
554  * wmi_unified_ap_ps_cmd_send() - set ap powersave parameters
555  * @wma_ctx: wma context
556  * @peer_addr: peer mac address
557  * @param: pointer to ap_ps parameter structure
558  *
559  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
560  */
561 QDF_STATUS wmi_unified_ap_ps_cmd_send(void *wmi_hdl,
562 					   uint8_t *peer_addr,
563 					   struct ap_ps_params *param)
564 {
565 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
566 
567 	if (wmi_handle->ops->send_set_ap_ps_param_cmd)
568 		return wmi_handle->ops->send_set_ap_ps_param_cmd(wmi_handle,
569 				  peer_addr,
570 				  param);
571 
572 	return QDF_STATUS_E_FAILURE;
573 }
574 
575 /**
576  * wmi_unified_sta_ps_cmd_send() - set sta powersave parameters
577  * @wma_ctx: wma context
578  * @peer_addr: peer mac address
579  * @param: pointer to sta_ps parameter structure
580  *
581  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
582  */
583 QDF_STATUS wmi_unified_sta_ps_cmd_send(void *wmi_hdl,
584 					   struct sta_ps_params *param)
585 {
586 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
587 
588 	if (wmi_handle->ops->send_set_sta_ps_param_cmd)
589 		return wmi_handle->ops->send_set_sta_ps_param_cmd(wmi_handle,
590 				  param);
591 
592 	return QDF_STATUS_E_FAILURE;
593 }
594 
595 /**
596  * wmi_crash_inject() - inject fw crash
597  * @wma_handle: wma handle
598  * @param: ponirt to crash inject parameter structure
599  *
600  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
601  */
602 QDF_STATUS wmi_crash_inject(void *wmi_hdl,
603 			 struct crash_inject *param)
604 {
605 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
606 
607 	if (wmi_handle->ops->send_crash_inject_cmd)
608 		return wmi_handle->ops->send_crash_inject_cmd(wmi_handle,
609 				  param);
610 
611 	return QDF_STATUS_E_FAILURE;
612 }
613 
614 #ifdef FEATURE_FW_LOG_PARSING
615 /**
616  *  wmi_unified_dbglog_cmd_send() - set debug log level
617  *  @param wmi_handle      : handle to WMI.
618  *  @param param    : pointer to hold dbglog level parameter
619  *
620  *  Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
621  */
622 QDF_STATUS
623 wmi_unified_dbglog_cmd_send(void *wmi_hdl,
624 				struct dbglog_params *dbglog_param)
625 {
626 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
627 
628 	if (wmi_handle->ops->send_dbglog_cmd)
629 		return wmi_handle->ops->send_dbglog_cmd(wmi_handle,
630 				  dbglog_param);
631 
632 	return QDF_STATUS_E_FAILURE;
633 }
634 qdf_export_symbol(wmi_unified_dbglog_cmd_send);
635 #endif
636 
637 /**
638  *  wmi_unified_vdev_set_param_send() - WMI vdev set parameter function
639  *  @param wmi_handle      : handle to WMI.
640  *  @param macaddr        : MAC address
641  *  @param param    : pointer to hold vdev set parameter
642  *
643  *  Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
644  */
645 QDF_STATUS wmi_unified_vdev_set_param_send(void *wmi_hdl,
646 				struct vdev_set_params *param)
647 {
648 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
649 
650 	if (wmi_handle->ops->send_vdev_set_param_cmd)
651 		return wmi_handle->ops->send_vdev_set_param_cmd(wmi_handle,
652 				  param);
653 
654 	return QDF_STATUS_E_FAILURE;
655 }
656 
657 /**
658  *  wmi_unified_sifs_trigger_send() - WMI vdev sifs trigger parameter function
659  *  @param wmi_handle      : handle to WMI.
660  *  @param param    : pointer to hold sifs trigger parameter
661  *
662  *  Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
663  */
664 QDF_STATUS wmi_unified_sifs_trigger_send(void *wmi_hdl,
665 					 struct sifs_trigger_param *param)
666 {
667 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
668 
669 	if (wmi_handle->ops->send_vdev_sifs_trigger_cmd)
670 		return wmi_handle->ops->send_vdev_sifs_trigger_cmd(wmi_handle,
671 				param);
672 
673 	return QDF_STATUS_E_FAILURE;
674 }
675 
676 /**
677  *  wmi_unified_stats_request_send() - WMI request stats function
678  *  @param wmi_handle      : handle to WMI.
679  *  @param macaddr        : MAC address
680  *  @param param    : pointer to hold stats request parameter
681  *
682  *  Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
683  */
684 QDF_STATUS wmi_unified_stats_request_send(wmi_unified_t wmi_handle,
685 					  uint8_t macaddr[QDF_MAC_ADDR_SIZE],
686 					  struct stats_request_params *param)
687 {
688 	if (wmi_handle->ops->send_stats_request_cmd)
689 		return wmi_handle->ops->send_stats_request_cmd(wmi_handle,
690 				   macaddr, param);
691 
692 	return QDF_STATUS_E_FAILURE;
693 }
694 
695 #ifdef CONFIG_MCL
696 /**
697  *  wmi_unified_packet_log_enable_send() - WMI request stats function
698  *  @param wmi_handle      : handle to WMI.
699  *  @param macaddr        : MAC address
700  *  @param param    : pointer to hold stats request parameter
701  *
702  *  Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
703  */
704 QDF_STATUS wmi_unified_packet_log_enable_send(void *wmi_hdl,
705 				uint8_t macaddr[QDF_MAC_ADDR_SIZE],
706 				struct packet_enable_params *param)
707 {
708 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
709 
710 	if (wmi_handle->ops->send_packet_log_enable_cmd)
711 		return wmi_handle->ops->send_packet_log_enable_cmd(wmi_handle,
712 				  macaddr, param);
713 
714 	return QDF_STATUS_E_FAILURE;
715 }
716 #else
717 /**
718  *  wmi_unified_packet_log_enable_send() - WMI request stats function
719  *  @param wmi_handle      : handle to WMI.
720  *  @param macaddr        : MAC address
721  *  @param param    : pointer to hold stats request parameter
722  *
723  *  Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
724  */
725 QDF_STATUS wmi_unified_packet_log_enable_send(void *wmi_hdl,
726 			WMI_HOST_PKTLOG_EVENT PKTLOG_EVENT, uint8_t mac_id)
727 {
728 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
729 
730 	if (wmi_handle->ops->send_packet_log_enable_cmd)
731 		return wmi_handle->ops->send_packet_log_enable_cmd(wmi_handle,
732 				  PKTLOG_EVENT, mac_id);
733 
734 	return QDF_STATUS_E_FAILURE;
735 }
736 
737 /**
738  *  wmi_unified_peer_based_pktlog_send() - WMI request enable peer
739  *  based filtering
740  *  @wmi_handle: handle to WMI.
741  *  @macaddr: PEER mac address to be filtered
742  *  @mac_id: Mac id
743  *  @enb_dsb: Enable or Disable peer based pktlog
744  *            filtering
745  *
746  *  Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
747  */
748 QDF_STATUS wmi_unified_peer_based_pktlog_send(void *wmi_hdl,
749 					      uint8_t *macaddr,
750 					      uint8_t mac_id,
751 					      uint8_t enb_dsb)
752 {
753 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
754 
755 	if (wmi_handle->ops->send_peer_based_pktlog_cmd)
756 		return wmi_handle->ops->send_peer_based_pktlog_cmd
757 			(wmi_handle, macaddr, mac_id, enb_dsb);
758 
759 	return QDF_STATUS_E_FAILURE;
760 }
761 #endif
762 /**
763  *  wmi_unified_packet_log_disable__send() - WMI pktlog disable function
764  *  @param wmi_handle      : handle to WMI.
765  *  @param PKTLOG_EVENT    : packet log event
766  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
767  */
768 QDF_STATUS wmi_unified_packet_log_disable_send(void *wmi_hdl, uint8_t mac_id)
769 {
770 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
771 
772 	if (wmi_handle->ops->send_packet_log_disable_cmd)
773 		return wmi_handle->ops->send_packet_log_disable_cmd(wmi_handle,
774 			mac_id);
775 
776 	return QDF_STATUS_E_FAILURE;
777 }
778 
779 /**
780  *  wmi_unified_beacon_tmpl_send_cmd() - WMI beacon send function
781  *  @param wmi_handle      : handle to WMI.
782  *  @param macaddr        : MAC address
783  *  @param param    : pointer to hold beacon send cmd parameter
784  *
785  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
786  */
787 QDF_STATUS wmi_unified_beacon_tmpl_send_cmd(void *wmi_hdl,
788 				struct beacon_tmpl_params *param)
789 {
790 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
791 
792 	if (wmi_handle->ops->send_beacon_tmpl_send_cmd)
793 		return wmi_handle->ops->send_beacon_tmpl_send_cmd(wmi_handle,
794 				  param);
795 
796 	return QDF_STATUS_E_FAILURE;
797 }
798 /**
799  *  wmi_unified_peer_assoc_send() - WMI peer assoc function
800  *  @param wmi_handle      : handle to WMI.
801  *  @param macaddr        : MAC address
802  *  @param param    : pointer to peer assoc parameter
803  *
804  *  Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
805  */
806 QDF_STATUS wmi_unified_peer_assoc_send(void *wmi_hdl,
807 				struct peer_assoc_params *param)
808 {
809 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
810 
811 	if (wmi_handle->ops->send_peer_assoc_cmd)
812 		return wmi_handle->ops->send_peer_assoc_cmd(wmi_handle,
813 				  param);
814 
815 	return QDF_STATUS_E_FAILURE;
816 }
817 
818 /**
819  *  wmi_unified_scan_start_cmd_send() - WMI scan start function
820  *  @param wmi_handle      : handle to WMI.
821  *  @param macaddr        : MAC address
822  *  @param param    : pointer to hold scan start cmd parameter
823  *
824  *  Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
825  */
826 QDF_STATUS wmi_unified_scan_start_cmd_send(void *wmi_hdl,
827 				struct scan_req_params *param)
828 {
829 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
830 
831 	if (wmi_handle->ops->send_scan_start_cmd)
832 		return wmi_handle->ops->send_scan_start_cmd(wmi_handle,
833 				  param);
834 
835 	return QDF_STATUS_E_FAILURE;
836 }
837 
838 /**
839  *  wmi_unified_scan_stop_cmd_send() - WMI scan start function
840  *  @param wmi_handle      : handle to WMI.
841  *  @param macaddr        : MAC address
842  *  @param param    : pointer to hold scan start cmd parameter
843  *
844  *  Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
845  */
846 QDF_STATUS wmi_unified_scan_stop_cmd_send(void *wmi_hdl,
847 				struct scan_cancel_param *param)
848 {
849 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
850 
851 	if (wmi_handle->ops->send_scan_stop_cmd)
852 		return wmi_handle->ops->send_scan_stop_cmd(wmi_handle,
853 				  param);
854 
855 	return QDF_STATUS_E_FAILURE;
856 }
857 
858 /**
859  *  wmi_unified_scan_chan_list_cmd_send() - WMI scan channel list function
860  *  @param wmi_handle      : handle to WMI.
861  *  @param macaddr        : MAC address
862  *  @param param    : pointer to hold scan channel list parameter
863  *
864  *  Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
865  */
866 QDF_STATUS wmi_unified_scan_chan_list_cmd_send(void *wmi_hdl,
867 				struct scan_chan_list_params *param)
868 {
869 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
870 
871 	if (wmi_handle->ops->send_scan_chan_list_cmd)
872 		return wmi_handle->ops->send_scan_chan_list_cmd(wmi_handle,
873 				  param);
874 
875 	return QDF_STATUS_E_FAILURE;
876 }
877 
878 /**
879  *  wmi_mgmt_unified_cmd_send() - management cmd over wmi layer
880  *  @wmi_hdl      : handle to WMI.
881  *  @param    : pointer to hold mgmt cmd parameter
882  *
883  *  Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
884  */
885 QDF_STATUS wmi_mgmt_unified_cmd_send(void *wmi_hdl,
886 				struct wmi_mgmt_params *param)
887 {
888 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
889 
890 	if (wmi_handle->ops->send_mgmt_cmd)
891 		return wmi_handle->ops->send_mgmt_cmd(wmi_handle,
892 				  param);
893 
894 	return QDF_STATUS_E_FAILURE;
895 }
896 
897 /**
898  *  wmi_offchan_data_tx_cmd_send() - Send offchan data tx cmd over wmi layer
899  *  @wmi_hdl      : handle to WMI.
900  *  @param    : pointer to hold offchan data cmd parameter
901  *
902  *  Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
903  */
904 QDF_STATUS wmi_offchan_data_tx_cmd_send(void *wmi_hdl,
905 				struct wmi_offchan_data_tx_params *param)
906 {
907 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
908 
909 	if (wmi_handle->ops->send_offchan_data_tx_cmd)
910 		return wmi_handle->ops->send_offchan_data_tx_cmd(wmi_handle,
911 				  param);
912 
913 	return QDF_STATUS_E_FAILURE;
914 }
915 
916 /**
917  * wmi_unified_modem_power_state() - set modem power state to fw
918  * @wmi_hdl: wmi handle
919  * @param_value: parameter value
920  *
921  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
922  */
923 QDF_STATUS wmi_unified_modem_power_state(void *wmi_hdl,
924 		uint32_t param_value)
925 {
926 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
927 
928 	if (wmi_handle->ops->send_modem_power_state_cmd)
929 		return wmi_handle->ops->send_modem_power_state_cmd(wmi_handle,
930 				  param_value);
931 
932 	return QDF_STATUS_E_FAILURE;
933 }
934 
935 /**
936  * wmi_unified_set_sta_ps_mode() - set sta powersave params in fw
937  * @wmi_hdl: wmi handle
938  * @vdev_id: vdev id
939  * @val: value
940  *
941  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure.
942  */
943 QDF_STATUS wmi_unified_set_sta_ps_mode(void *wmi_hdl,
944 			       uint32_t vdev_id, uint8_t val)
945 {
946 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
947 
948 	if (wmi_handle->ops->send_set_sta_ps_mode_cmd)
949 		return wmi_handle->ops->send_set_sta_ps_mode_cmd(wmi_handle,
950 				  vdev_id, val);
951 
952 	return QDF_STATUS_E_FAILURE;
953 }
954 
955 QDF_STATUS
956 wmi_unified_send_idle_trigger_monitor(wmi_unified_t wmi_handle, uint8_t val)
957 {
958 	if (wmi_handle->ops->send_idle_roam_monitor_cmd)
959 		return wmi_handle->ops->send_idle_roam_monitor_cmd(wmi_handle,
960 								   val);
961 
962 	return QDF_STATUS_E_FAILURE;
963 }
964 
965 /**
966  * wmi_set_mimops() - set MIMO powersave
967  * @wmi_hdl: wmi handle
968  * @vdev_id: vdev id
969  * @value: value
970  *
971  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure.
972  */
973 QDF_STATUS wmi_unified_set_mimops(void *wmi_hdl, uint8_t vdev_id, int value)
974 {
975 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
976 
977 	if (wmi_handle->ops->send_set_mimops_cmd)
978 		return wmi_handle->ops->send_set_mimops_cmd(wmi_handle,
979 				  vdev_id, value);
980 
981 	return QDF_STATUS_E_FAILURE;
982 }
983 
984 /**
985  * wmi_set_smps_params() - set smps params
986  * @wmi_hdl: wmi handle
987  * @vdev_id: vdev id
988  * @value: value
989  *
990  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure.
991  */
992 QDF_STATUS wmi_unified_set_smps_params(void *wmi_hdl, uint8_t vdev_id,
993 			       int value)
994 {
995 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
996 
997 	if (wmi_handle->ops->send_set_smps_params_cmd)
998 		return wmi_handle->ops->send_set_smps_params_cmd(wmi_handle,
999 				  vdev_id, value);
1000 
1001 	return QDF_STATUS_E_FAILURE;
1002 }
1003 
1004 /**
1005  * wmi_get_temperature() - get pdev temperature req
1006  * @wmi_hdl: wmi handle
1007  *
1008  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure.
1009  */
1010 QDF_STATUS wmi_unified_get_temperature(void *wmi_hdl)
1011 {
1012 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1013 
1014 	if (wmi_handle->ops->send_get_temperature_cmd)
1015 		return wmi_handle->ops->send_get_temperature_cmd(wmi_handle);
1016 
1017 	return QDF_STATUS_E_FAILURE;
1018 }
1019 
1020 /**
1021  * wmi_unified_set_sta_uapsd_auto_trig_cmd() - set uapsd auto trigger command
1022  * @wmi_hdl: wmi handle
1023  * @end_set_sta_ps_mode_cmd: cmd parameter strcture
1024  *
1025  * This function sets the trigger
1026  * uapsd params such as service interval, delay interval
1027  * and suspend interval which will be used by the firmware
1028  * to send trigger frames periodically when there is no
1029  * traffic on the transmit side.
1030  *
1031  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure.
1032  */
1033 QDF_STATUS
1034 wmi_unified_set_sta_uapsd_auto_trig_cmd(void *wmi_hdl,
1035 				struct sta_uapsd_trig_params *param)
1036 {
1037 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1038 
1039 	if (wmi_handle->ops->send_set_sta_uapsd_auto_trig_cmd)
1040 		return wmi_handle->ops->send_set_sta_uapsd_auto_trig_cmd(wmi_handle,
1041 					param);
1042 
1043 	return QDF_STATUS_E_FAILURE;
1044 }
1045 
1046 
1047 /**
1048  * wmi_unified_set_thermal_mgmt_cmd() - set thermal mgmt command to fw
1049  * @wmi_handle: Pointer to wmi handle
1050  * @thermal_info: Thermal command information
1051  *
1052  * This function sends the thermal management command
1053  * to the firmware
1054  *
1055  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1056  */
1057 QDF_STATUS wmi_unified_set_thermal_mgmt_cmd(void *wmi_hdl,
1058 				struct thermal_cmd_params *thermal_info)
1059 {
1060 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1061 
1062 	if (wmi_handle->ops->send_set_thermal_mgmt_cmd)
1063 		return wmi_handle->ops->send_set_thermal_mgmt_cmd(wmi_handle,
1064 					thermal_info);
1065 
1066 	return QDF_STATUS_E_FAILURE;
1067 }
1068 
1069 
1070 /**
1071  * wmi_unified_lro_config_cmd() - process the LRO config command
1072  * @wmi: Pointer to wmi handle
1073  * @wmi_lro_cmd: Pointer to LRO configuration parameters
1074  *
1075  * This function sends down the LRO configuration parameters to
1076  * the firmware to enable LRO, sets the TCP flags and sets the
1077  * seed values for the toeplitz hash generation
1078  *
1079  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1080  */
1081 QDF_STATUS wmi_unified_lro_config_cmd(void *wmi_hdl,
1082 	 struct wmi_lro_config_cmd_t *wmi_lro_cmd)
1083 {
1084 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1085 
1086 	if (wmi_handle->ops->send_lro_config_cmd)
1087 		return wmi_handle->ops->send_lro_config_cmd(wmi_handle,
1088 					wmi_lro_cmd);
1089 
1090 	return QDF_STATUS_E_FAILURE;
1091 }
1092 
1093 #ifdef CONFIG_MCL
1094 /**
1095  * wmi_unified_peer_rate_report_cmd() - process the peer rate report command
1096  * @wmi_hdl: Pointer to wmi handle
1097  * @rate_report_params: Pointer to peer rate report parameters
1098  *
1099  *
1100  * Return: QDF_STATUS_SUCCESS for success otherwise failure
1101  */
1102 QDF_STATUS wmi_unified_peer_rate_report_cmd(void *wmi_hdl,
1103 		struct wmi_peer_rate_report_params *rate_report_params)
1104 {
1105 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1106 
1107 	if (wmi_handle->ops->send_peer_rate_report_cmd)
1108 		return wmi_handle->ops->send_peer_rate_report_cmd(wmi_handle,
1109 					rate_report_params);
1110 
1111 	return QDF_STATUS_E_FAILURE;
1112 }
1113 #endif
1114 
1115 /**
1116  * wmi_unified_process_update_edca_param() - update EDCA params
1117  * @wmi_hdl: wmi handle
1118  * @vdev_id: vdev id.
1119  * @mu_edca_param: mu_edca_param.
1120  * @wmm_vparams: edca parameters
1121  *
1122  * This function updates EDCA parameters to the target
1123  *
1124  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1125  */
1126 QDF_STATUS wmi_unified_process_update_edca_param(void *wmi_hdl,
1127 				uint8_t vdev_id, bool mu_edca_param,
1128 				struct wmi_host_wme_vparams wmm_vparams[WMI_MAX_NUM_AC])
1129 {
1130 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1131 
1132 	if (wmi_handle->ops->send_process_update_edca_param_cmd)
1133 		return wmi_handle->ops->send_process_update_edca_param_cmd(wmi_handle,
1134 					 vdev_id, mu_edca_param, wmm_vparams);
1135 
1136 	return QDF_STATUS_E_FAILURE;
1137 }
1138 
1139 /**
1140  * wmi_unified_probe_rsp_tmpl_send_cmd() - send probe response template to fw
1141  * @wmi_hdl: wmi handle
1142  * @vdev_id: vdev id
1143  * @probe_rsp_info: probe response info
1144  *
1145  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1146  */
1147 QDF_STATUS wmi_unified_probe_rsp_tmpl_send_cmd(void *wmi_hdl,
1148 				uint8_t vdev_id,
1149 				struct wmi_probe_resp_params *probe_rsp_info)
1150 {
1151 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1152 
1153 	if (wmi_handle->ops->send_probe_rsp_tmpl_send_cmd)
1154 		return wmi_handle->ops->send_probe_rsp_tmpl_send_cmd(wmi_handle,
1155 						 vdev_id, probe_rsp_info);
1156 
1157 	return QDF_STATUS_E_FAILURE;
1158 }
1159 
1160 /**
1161  * wmi_unified_setup_install_key_cmd - send key to install to fw
1162  * @wmi_hdl: wmi handle
1163  * @key_params: key parameters
1164  *
1165  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1166  */
1167 QDF_STATUS wmi_unified_setup_install_key_cmd(void *wmi_hdl,
1168 				struct set_key_params *key_params)
1169 {
1170 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1171 
1172 	if (wmi_handle->ops->send_setup_install_key_cmd)
1173 		return wmi_handle->ops->send_setup_install_key_cmd(wmi_handle,
1174 							key_params);
1175 
1176 	return QDF_STATUS_E_FAILURE;
1177 }
1178 
1179 /**
1180  * wmi_unified_p2p_go_set_beacon_ie_cmd() - set beacon IE for p2p go
1181  * @wma_handle: wma handle
1182  * @vdev_id: vdev id
1183  * @p2p_ie: p2p IE
1184  *
1185  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1186  */
1187 QDF_STATUS wmi_unified_p2p_go_set_beacon_ie_cmd(void *wmi_hdl,
1188 				    uint32_t vdev_id, uint8_t *p2p_ie)
1189 {
1190 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1191 
1192 	if (wmi_handle->ops->send_p2p_go_set_beacon_ie_cmd)
1193 		return wmi_handle->ops->send_p2p_go_set_beacon_ie_cmd(wmi_handle,
1194 						 vdev_id, p2p_ie);
1195 
1196 	return QDF_STATUS_E_FAILURE;
1197 }
1198 
1199 /**
1200  * wmi_unified_scan_probe_setoui_cmd() - set scan probe OUI
1201  * @wmi_hdl: wmi handle
1202  * @psetoui: OUI parameters
1203  *
1204  * set scan probe OUI parameters in firmware
1205  *
1206  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1207  */
1208 QDF_STATUS wmi_unified_scan_probe_setoui_cmd(void *wmi_hdl,
1209 			  struct scan_mac_oui *psetoui)
1210 {
1211 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1212 
1213 	if (wmi_handle->ops->send_scan_probe_setoui_cmd)
1214 		return wmi_handle->ops->send_scan_probe_setoui_cmd(wmi_handle,
1215 			    psetoui);
1216 
1217 	return QDF_STATUS_E_FAILURE;
1218 }
1219 
1220 #ifdef IPA_OFFLOAD
1221 /** wmi_unified_ipa_offload_control_cmd() - ipa offload control parameter
1222  * @wmi_hdl: wmi handle
1223  * @ipa_offload: ipa offload control parameter
1224  *
1225  * Returns: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failures,
1226  *          error number otherwise
1227  */
1228 QDF_STATUS  wmi_unified_ipa_offload_control_cmd(void *wmi_hdl,
1229 		struct ipa_uc_offload_control_params *ipa_offload)
1230 {
1231 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1232 
1233 	if (!wmi_handle)
1234 		return QDF_STATUS_E_FAILURE;
1235 
1236 	if (wmi_handle->ops->send_ipa_offload_control_cmd)
1237 		return wmi_handle->ops->send_ipa_offload_control_cmd(wmi_handle,
1238 			    ipa_offload);
1239 
1240 	return QDF_STATUS_E_FAILURE;
1241 }
1242 #endif
1243 
1244 /**
1245  * send_pno_stop_cmd() - PNO stop request
1246  * @wmi_hdl: wmi handle
1247  * @vdev_id: vdev id
1248  *
1249  * This function request FW to stop ongoing PNO operation.
1250  *
1251  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1252  */
1253 QDF_STATUS wmi_unified_pno_stop_cmd(void *wmi_hdl, uint8_t vdev_id)
1254 {
1255 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1256 
1257 	if (wmi_handle->ops->send_pno_stop_cmd)
1258 		return wmi_handle->ops->send_pno_stop_cmd(wmi_handle,
1259 			    vdev_id);
1260 
1261 	return QDF_STATUS_E_FAILURE;
1262 }
1263 
1264 /**
1265  * wmi_unified_pno_start_cmd() - PNO start request
1266  * @wmi_hdl: wmi handle
1267  * @pno: PNO request
1268  *
1269  * This function request FW to start PNO request.
1270  * Request: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1271  */
1272 #ifdef FEATURE_WLAN_SCAN_PNO
1273 QDF_STATUS wmi_unified_pno_start_cmd(void *wmi_hdl,
1274 		   struct pno_scan_req_params *pno)
1275 {
1276 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1277 
1278 	if (wmi_handle->ops->send_pno_start_cmd)
1279 		return wmi_handle->ops->send_pno_start_cmd(wmi_handle,
1280 			    pno);
1281 
1282 	return QDF_STATUS_E_FAILURE;
1283 }
1284 #endif
1285 
1286 /**
1287  * wmi_unified_nlo_mawc_cmd() - NLO MAWC cmd configuration
1288  * @wmi_hdl: wmi handle
1289  * @params: Configuration parameters
1290  *
1291  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1292  */
1293 QDF_STATUS wmi_unified_nlo_mawc_cmd(void *wmi_hdl,
1294 		struct nlo_mawc_params *params)
1295 {
1296 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1297 
1298 	if (wmi_handle->ops->send_nlo_mawc_cmd)
1299 		return wmi_handle->ops->send_nlo_mawc_cmd(wmi_handle, params);
1300 
1301 	return QDF_STATUS_E_FAILURE;
1302 }
1303 
1304 #ifdef WLAN_FEATURE_LINK_LAYER_STATS
1305 QDF_STATUS wmi_unified_process_ll_stats_clear_cmd(wmi_unified_t wmi_handle,
1306 				 const struct ll_stats_clear_params *clear_req)
1307 {
1308 	if (wmi_handle->ops->send_process_ll_stats_clear_cmd)
1309 		return wmi_handle->ops->send_process_ll_stats_clear_cmd(wmi_handle,
1310 									clear_req);
1311 
1312 	return QDF_STATUS_E_FAILURE;
1313 }
1314 
1315 QDF_STATUS wmi_unified_process_ll_stats_set_cmd(wmi_unified_t wmi_handle,
1316 				 const struct ll_stats_set_params *set_req)
1317 {
1318 	if (wmi_handle->ops->send_process_ll_stats_set_cmd)
1319 		return wmi_handle->ops->send_process_ll_stats_set_cmd(wmi_handle,
1320 								      set_req);
1321 
1322 	return QDF_STATUS_E_FAILURE;
1323 }
1324 
1325 QDF_STATUS wmi_unified_process_ll_stats_get_cmd(wmi_unified_t wmi_handle,
1326 				 const struct ll_stats_get_params *get_req)
1327 {
1328 	if (wmi_handle->ops->send_process_ll_stats_get_cmd)
1329 		return wmi_handle->ops->send_process_ll_stats_get_cmd(wmi_handle,
1330 								      get_req);
1331 
1332 	return QDF_STATUS_E_FAILURE;
1333 }
1334 #endif /* WLAN_FEATURE_LINK_LAYER_STATS */
1335 
1336 /**
1337  * wmi_unified_congestion_request_cmd() - send request to fw to get CCA
1338  * @wmi_hdl: wma handle
1339  * @vdev_id: vdev id
1340  *
1341  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1342  */
1343 QDF_STATUS wmi_unified_congestion_request_cmd(void *wmi_hdl,
1344 		uint8_t vdev_id)
1345 {
1346 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1347 
1348 	if (wmi_handle->ops->send_congestion_cmd)
1349 		return wmi_handle->ops->send_congestion_cmd(wmi_handle,
1350 			   vdev_id);
1351 
1352 	return QDF_STATUS_E_FAILURE;
1353 }
1354 
1355 /**
1356  * wmi_unified_snr_request_cmd() - send request to fw to get RSSI stats
1357  * @wmi_handle: wmi handle
1358  * @rssi_req: get RSSI request
1359  *
1360  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1361  */
1362 QDF_STATUS wmi_unified_snr_request_cmd(void *wmi_hdl)
1363 {
1364 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1365 
1366 	if (wmi_handle->ops->send_snr_request_cmd)
1367 		return wmi_handle->ops->send_snr_request_cmd(wmi_handle);
1368 
1369 	return QDF_STATUS_E_FAILURE;
1370 }
1371 
1372 /**
1373  * wmi_unified_snr_cmd() - get RSSI from fw
1374  * @wmi_handle: wmi handle
1375  * @vdev_id: vdev id
1376  *
1377  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1378  */
1379 QDF_STATUS wmi_unified_snr_cmd(void *wmi_hdl, uint8_t vdev_id)
1380 {
1381 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1382 
1383 	if (wmi_handle->ops->send_snr_cmd)
1384 		return wmi_handle->ops->send_snr_cmd(wmi_handle,
1385 			    vdev_id);
1386 
1387 	return QDF_STATUS_E_FAILURE;
1388 }
1389 
1390 /**
1391  * wmi_unified_link_status_req_cmd() - process link status request from UMAC
1392  * @wmi_handle: wmi handle
1393  * @params: get link status params
1394  *
1395  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1396  */
1397 QDF_STATUS wmi_unified_link_status_req_cmd(wmi_unified_t wmi_handle,
1398 					   struct link_status_params *params)
1399 {
1400 	if (wmi_handle->ops->send_link_status_req_cmd)
1401 		return wmi_handle->ops->send_link_status_req_cmd(wmi_handle,
1402 								 params);
1403 
1404 	return QDF_STATUS_E_FAILURE;
1405 }
1406 
1407 #ifdef WLAN_SUPPORT_GREEN_AP
1408 /**
1409  * wmi_unified_egap_conf_params_cmd() - send wmi cmd of egap configuration params
1410  * @wmi_handle:	 wmi handler
1411  * @egap_params: pointer to egap_params
1412  *
1413  * Return:	 0 for success, otherwise appropriate error code
1414  */
1415 QDF_STATUS wmi_unified_egap_conf_params_cmd(void *wmi_hdl,
1416 				struct wlan_green_ap_egap_params *egap_params)
1417 {
1418 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1419 
1420 	if (wmi_handle->ops->send_egap_conf_params_cmd)
1421 		return wmi_handle->ops->send_egap_conf_params_cmd(wmi_handle,
1422 			    egap_params);
1423 
1424 	return QDF_STATUS_E_FAILURE;
1425 }
1426 #endif
1427 
1428 /**
1429  * wmi_unified_csa_offload_enable() - send CSA offload enable command
1430  * @wmi_hdl: wmi handle
1431  * @vdev_id: vdev id
1432  *
1433  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1434  */
1435 QDF_STATUS wmi_unified_csa_offload_enable(void *wmi_hdl, uint8_t vdev_id)
1436 {
1437 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1438 
1439 	if (wmi_handle->ops->send_csa_offload_enable_cmd)
1440 		return wmi_handle->ops->send_csa_offload_enable_cmd(wmi_handle,
1441 			    vdev_id);
1442 
1443 	return QDF_STATUS_E_FAILURE;
1444 }
1445 
1446 #ifdef WLAN_FEATURE_CIF_CFR
1447 QDF_STATUS wmi_unified_oem_dma_ring_cfg(void *wmi_hdl,
1448 				wmi_oem_dma_ring_cfg_req_fixed_param *cfg)
1449 {
1450 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1451 
1452 	if (wmi_handle->ops->send_start_oem_data_cmd)
1453 		return wmi_handle->ops->send_oem_dma_cfg_cmd(wmi_handle, cfg);
1454 
1455 	return QDF_STATUS_E_FAILURE;
1456 }
1457 #endif
1458 
1459 /**
1460  * wmi_unified_start_oem_data_cmd() - start OEM data request to target
1461  * @wmi_handle: wmi handle
1462  * @startOemDataReq: start request params
1463  *
1464  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1465  */
1466 QDF_STATUS wmi_unified_start_oem_data_cmd(void *wmi_hdl,
1467 			  uint32_t data_len,
1468 			  uint8_t *data)
1469 {
1470 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1471 
1472 	if (wmi_handle->ops->send_start_oem_data_cmd)
1473 		return wmi_handle->ops->send_start_oem_data_cmd(wmi_handle,
1474 			    data_len, data);
1475 
1476 	return QDF_STATUS_E_FAILURE;
1477 }
1478 
1479 /**
1480  * wmi_unified_dfs_phyerr_filter_offload_en_cmd() - enable dfs phyerr filter
1481  * @wmi_handle: wmi handle
1482  * @dfs_phyerr_filter_offload: is dfs phyerr filter offload
1483  *
1484  * Send WMI_DFS_PHYERR_FILTER_ENA_CMDID or
1485  * WMI_DFS_PHYERR_FILTER_DIS_CMDID command
1486  * to firmware based on phyerr filtering
1487  * offload status.
1488  *
1489  * Return: 1 success, 0 failure
1490  */
1491 QDF_STATUS
1492 wmi_unified_dfs_phyerr_filter_offload_en_cmd(void *wmi_hdl,
1493 			bool dfs_phyerr_filter_offload)
1494 {
1495 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1496 
1497 	if (wmi_handle->ops->send_dfs_phyerr_filter_offload_en_cmd)
1498 		return wmi_handle->ops->send_dfs_phyerr_filter_offload_en_cmd(wmi_handle,
1499 			    dfs_phyerr_filter_offload);
1500 
1501 	return QDF_STATUS_E_FAILURE;
1502 }
1503 
1504 #if !defined(REMOVE_PKT_LOG)
1505 /**
1506  * wmi_unified_pktlog_wmi_send_cmd() - send pktlog enable/disable command to target
1507  * @wmi_handle: wmi handle
1508  * @pktlog_event: pktlog event
1509  * @cmd_id: pktlog cmd id
1510  *
1511  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1512  */
1513 #ifdef CONFIG_MCL
1514 QDF_STATUS wmi_unified_pktlog_wmi_send_cmd(void *wmi_hdl,
1515 				   WMI_PKTLOG_EVENT pktlog_event,
1516 				   uint32_t cmd_id,
1517 				   uint8_t user_triggered)
1518 {
1519 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1520 
1521 	if (wmi_handle->ops->send_pktlog_wmi_send_cmd)
1522 		return wmi_handle->ops->send_pktlog_wmi_send_cmd(wmi_handle,
1523 			    pktlog_event, cmd_id, user_triggered);
1524 
1525 	return QDF_STATUS_E_FAILURE;
1526 }
1527 #endif
1528 #endif /* REMOVE_PKT_LOG */
1529 
1530 /**
1531  * wmi_unified_stats_ext_req_cmd() - request ext stats from fw
1532  * @wmi_handle: wmi handle
1533  * @preq: stats ext params
1534  *
1535  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1536  */
1537 QDF_STATUS wmi_unified_stats_ext_req_cmd(void *wmi_hdl,
1538 			struct stats_ext_params *preq)
1539 {
1540 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1541 
1542 	if (wmi_handle->ops->send_stats_ext_req_cmd)
1543 		return wmi_handle->ops->send_stats_ext_req_cmd(wmi_handle,
1544 			    preq);
1545 
1546 	return QDF_STATUS_E_FAILURE;
1547 }
1548 
1549 /**
1550  * wmi_unified_process_dhcpserver_offload_cmd() - enable DHCP server offload
1551  * @wmi_handle: wmi handle
1552  * @pDhcpSrvOffloadInfo: DHCP server offload info
1553  *
1554  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1555  */
1556 QDF_STATUS wmi_unified_process_dhcpserver_offload_cmd(void *wmi_hdl,
1557 				struct dhcp_offload_info_params *params)
1558 {
1559 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1560 
1561 	if (wmi_handle->ops->send_process_dhcpserver_offload_cmd)
1562 		return wmi_handle->ops->send_process_dhcpserver_offload_cmd(wmi_handle,
1563 			    params);
1564 
1565 	return QDF_STATUS_E_FAILURE;
1566 }
1567 
1568 /**
1569  * wmi_unified_send_regdomain_info_to_fw_cmd() - send regdomain info to fw
1570  * @wmi_handle: wmi handle
1571  * @reg_dmn: reg domain
1572  * @regdmn2G: 2G reg domain
1573  * @regdmn5G: 5G reg domain
1574  * @ctl2G: 2G test limit
1575  * @ctl5G: 5G test limit
1576  *
1577  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1578  */
1579 QDF_STATUS wmi_unified_send_regdomain_info_to_fw_cmd(void *wmi_hdl,
1580 				   uint32_t reg_dmn, uint16_t regdmn2G,
1581 				   uint16_t regdmn5G, uint8_t ctl2G,
1582 				   uint8_t ctl5G)
1583 {
1584 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1585 
1586 	if (wmi_handle->ops->send_regdomain_info_to_fw_cmd)
1587 		return wmi_handle->ops->send_regdomain_info_to_fw_cmd(wmi_handle,
1588 			    reg_dmn, regdmn2G,
1589 				regdmn5G, ctl2G,
1590 				ctl5G);
1591 
1592 	return QDF_STATUS_E_FAILURE;
1593 }
1594 
1595 /**
1596  * wmi_unified_cfg_action_frm_tb_ppdu_cmd()-send action frame TB PPDU cfg to FW
1597  * @wmi_handle:    Pointer to WMi handle
1598  * @cfg_info:      Pointer to cfg msg
1599  *
1600  * This function sends action frame TB PPDU cfg to firmware
1601  *
1602  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1603  *
1604  */
1605 QDF_STATUS
1606 wmi_unified_cfg_action_frm_tb_ppdu_cmd(void *wmi_hdl,
1607 				       struct cfg_action_frm_tb_ppdu_param
1608 				       *cfg_info)
1609 {
1610 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1611 
1612 	if (wmi_handle->ops->send_cfg_action_frm_tb_ppdu_cmd)
1613 		return wmi_handle->ops->send_cfg_action_frm_tb_ppdu_cmd(
1614 						wmi_handle, cfg_info);
1615 
1616 	return QDF_STATUS_E_FAILURE;
1617 }
1618 
1619 /**
1620  * wmi_unified_save_fw_version_cmd() - save fw version
1621  * @wmi_handle:      pointer to wmi handle
1622  * @res_cfg:         resource config
1623  * @num_mem_chunks:  no of mem chunck
1624  * @mem_chunk:       pointer to mem chunck structure
1625  *
1626  * This function sends IE information to firmware
1627  *
1628  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1629  *
1630  */
1631 QDF_STATUS wmi_unified_save_fw_version_cmd(void *wmi_hdl,
1632 		void *evt_buf)
1633 {
1634 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1635 
1636 	if (wmi_handle->ops->save_fw_version_cmd)
1637 		return wmi_handle->ops->save_fw_version_cmd(wmi_handle,
1638 			    evt_buf);
1639 
1640 	return QDF_STATUS_E_FAILURE;
1641 }
1642 
1643 /**
1644  * wmi_unified_log_supported_evt_cmd() - Enable/Disable FW diag/log events
1645  * @wmi_hdl: wmi handle
1646  * @event:  Event received from FW
1647  * @len:    Length of the event
1648  *
1649  * Enables the low frequency events and disables the high frequency
1650  * events. Bit 17 indicates if the event if low/high frequency.
1651  * 1 - high frequency, 0 - low frequency
1652  *
1653  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failures
1654  */
1655 QDF_STATUS wmi_unified_log_supported_evt_cmd(void *wmi_hdl,
1656 		uint8_t *event,
1657 		uint32_t len)
1658 {
1659 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1660 
1661 	if (wmi_handle->ops->send_log_supported_evt_cmd)
1662 		return wmi_handle->ops->send_log_supported_evt_cmd(wmi_handle,
1663 			    event, len);
1664 
1665 	return QDF_STATUS_E_FAILURE;
1666 }
1667 
1668 void wmi_send_time_stamp_sync_cmd_tlv(void *wmi_hdl)
1669 {
1670 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1671 	if (wmi_handle->ops->send_time_stamp_sync_cmd)
1672 		wmi_handle->ops->send_time_stamp_sync_cmd(wmi_handle);
1673 
1674 }
1675 /**
1676  * wmi_unified_enable_specific_fw_logs_cmd() - Start/Stop logging of diag log id
1677  * @wmi_hdl: wmi handle
1678  * @start_log: Start logging related parameters
1679  *
1680  * Send the command to the FW based on which specific logging of diag
1681  * event/log id can be started/stopped
1682  *
1683  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1684  */
1685 QDF_STATUS wmi_unified_enable_specific_fw_logs_cmd(void *wmi_hdl,
1686 		struct wmi_wifi_start_log *start_log)
1687 {
1688 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1689 
1690 	if (wmi_handle->ops->send_enable_specific_fw_logs_cmd)
1691 		return wmi_handle->ops->send_enable_specific_fw_logs_cmd(wmi_handle,
1692 			    start_log);
1693 
1694 	return QDF_STATUS_E_FAILURE;
1695 }
1696 
1697 /**
1698  * wmi_unified_flush_logs_to_fw_cmd() - Send log flush command to FW
1699  * @wmi_hdl: WMI handle
1700  *
1701  * This function is used to send the flush command to the FW,
1702  * that will flush the fw logs that are residue in the FW
1703  *
1704  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1705  */
1706 QDF_STATUS wmi_unified_flush_logs_to_fw_cmd(void *wmi_hdl)
1707 {
1708 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1709 
1710 	if (wmi_handle->ops->send_flush_logs_to_fw_cmd)
1711 		return wmi_handle->ops->send_flush_logs_to_fw_cmd(wmi_handle);
1712 
1713 	return QDF_STATUS_E_FAILURE;
1714 }
1715 
1716 /**
1717  * wmi_unified_fw_test_cmd() - send fw test command to fw.
1718  * @wmi_hdl: wmi handle
1719  * @wmi_fwtest: fw test command
1720  *
1721  * This function sends fw test command to fw.
1722  *
1723  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1724  */
1725 QDF_STATUS wmi_unified_fw_test_cmd(void *wmi_hdl,
1726 				   struct set_fwtest_params *wmi_fwtest)
1727 {
1728 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1729 
1730 	if (wmi_handle->ops->send_fw_test_cmd)
1731 		return wmi_handle->ops->send_fw_test_cmd(wmi_handle,
1732 				  wmi_fwtest);
1733 
1734 	return QDF_STATUS_E_FAILURE;
1735 
1736 }
1737 
1738 /**
1739  * wmi_unified_unit_test_cmd() - send unit test command to fw.
1740  * @wmi_hdl: wmi handle
1741  * @wmi_utest: unit test command
1742  *
1743  * This function send unit test command to fw.
1744  *
1745  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1746  */
1747 QDF_STATUS wmi_unified_unit_test_cmd(void *wmi_hdl,
1748 			       struct wmi_unit_test_cmd *wmi_utest)
1749 {
1750 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1751 
1752 	if (wmi_handle->ops->send_unit_test_cmd)
1753 		return wmi_handle->ops->send_unit_test_cmd(wmi_handle,
1754 				  wmi_utest);
1755 
1756 	return QDF_STATUS_E_FAILURE;
1757 }
1758 
1759 #ifdef FEATURE_WLAN_APF
1760 QDF_STATUS
1761 wmi_unified_set_active_apf_mode_cmd(wmi_unified_t wmi, uint8_t vdev_id,
1762 				    enum wmi_host_active_apf_mode ucast_mode,
1763 				    enum wmi_host_active_apf_mode
1764 							       mcast_bcast_mode)
1765 {
1766 	if (wmi->ops->send_set_active_apf_mode_cmd)
1767 		return wmi->ops->send_set_active_apf_mode_cmd(wmi, vdev_id,
1768 							      ucast_mode,
1769 							      mcast_bcast_mode);
1770 	return QDF_STATUS_E_FAILURE;
1771 }
1772 
1773 QDF_STATUS
1774 wmi_unified_send_apf_enable_cmd(wmi_unified_t wmi,
1775 				uint32_t vdev_id, bool enable)
1776 {
1777 	if (wmi->ops->send_apf_enable_cmd)
1778 		return wmi->ops->send_apf_enable_cmd(wmi, vdev_id, enable);
1779 	return QDF_STATUS_E_FAILURE;
1780 }
1781 
1782 QDF_STATUS
1783 wmi_unified_send_apf_write_work_memory_cmd(wmi_unified_t wmi,
1784 					   struct wmi_apf_write_memory_params
1785 								  *write_params)
1786 {
1787 	if (wmi->ops->send_apf_write_work_memory_cmd)
1788 		return wmi->ops->send_apf_write_work_memory_cmd(wmi,
1789 								write_params);
1790 
1791 	return QDF_STATUS_E_FAILURE;
1792 }
1793 
1794 QDF_STATUS
1795 wmi_unified_send_apf_read_work_memory_cmd(wmi_unified_t wmi,
1796 					  struct wmi_apf_read_memory_params
1797 								   *read_params)
1798 {
1799 	if (wmi->ops->send_apf_read_work_memory_cmd)
1800 		return wmi->ops->send_apf_read_work_memory_cmd(wmi,
1801 							       read_params);
1802 
1803 	return QDF_STATUS_E_FAILURE;
1804 }
1805 
1806 QDF_STATUS
1807 wmi_extract_apf_read_memory_resp_event(wmi_unified_t wmi, void *evt_buf,
1808 				struct wmi_apf_read_memory_resp_event_params
1809 								*read_mem_evt)
1810 {
1811 	if (wmi->ops->extract_apf_read_memory_resp_event)
1812 		return wmi->ops->extract_apf_read_memory_resp_event(wmi,
1813 								evt_buf,
1814 								read_mem_evt);
1815 
1816 	return QDF_STATUS_E_FAILURE;
1817 }
1818 #endif /* FEATURE_WLAN_APF */
1819 
1820 /**
1821  *  wmi_unified_pdev_fips_cmd_send() - WMI pdev fips cmd function
1822  *  @param wmi_handle      : handle to WMI.
1823  *  @param param    : pointer to hold pdev fips param
1824  *
1825  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1826  */
1827 QDF_STATUS wmi_unified_pdev_fips_cmd_send(void *wmi_hdl,
1828 				struct fips_params *param)
1829 {
1830 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1831 
1832 	if (wmi_handle->ops->send_pdev_fips_cmd)
1833 		return wmi_handle->ops->send_pdev_fips_cmd(wmi_handle, param);
1834 
1835 	return QDF_STATUS_E_FAILURE;
1836 }
1837 
1838 /**
1839  *  wmi_unified_wlan_profile_enable_cmd_send() - WMI wlan profile enable cmd function
1840  *  @param wmi_handle      : handle to WMI.
1841  *  @param param    : pointer to hold wlan profile param
1842  *
1843  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1844  */
1845 QDF_STATUS wmi_unified_wlan_profile_enable_cmd_send(void *wmi_hdl,
1846 				struct wlan_profile_params *param)
1847 {
1848 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1849 
1850 	if (wmi_handle->ops->send_wlan_profile_enable_cmd)
1851 		return wmi_handle->ops->send_wlan_profile_enable_cmd(wmi_handle,
1852 				param);
1853 
1854 	return QDF_STATUS_E_FAILURE;
1855 }
1856 
1857 /**
1858  *  wmi_unified_wlan_profile_trigger_cmd_send() - WMI wlan profile trigger cmd function
1859  *  @param wmi_handle      : handle to WMI.
1860  *  @param param    : pointer to hold wlan profile param
1861  *
1862  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1863  */
1864 QDF_STATUS wmi_unified_wlan_profile_trigger_cmd_send(void *wmi_hdl,
1865 				struct wlan_profile_params *param)
1866 {
1867 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
1868 
1869 	if (wmi->ops->send_wlan_profile_trigger_cmd)
1870 		return wmi->ops->send_wlan_profile_trigger_cmd(wmi,
1871 				param);
1872 
1873 	return QDF_STATUS_E_FAILURE;
1874 }
1875 
1876 /**
1877  *  wmi_unified_set_chan_cmd_send() - WMI set channel cmd function
1878  *  @param wmi_handle      : handle to WMI.
1879  *  @param param    : pointer to hold channel param
1880  *
1881  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1882  */
1883 QDF_STATUS wmi_unified_set_chan_cmd_send(void *wmi_hdl,
1884 				struct channel_param *param)
1885 {
1886 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1887 
1888 	if (wmi_handle->ops->send_pdev_set_chan_cmd)
1889 		return wmi_handle->ops->send_pdev_set_chan_cmd(wmi_handle,
1890 				param);
1891 
1892 	return QDF_STATUS_E_FAILURE;
1893 }
1894 
1895 /**
1896  *  wmi_unified_set_ratepwr_table_cmd_send() - WMI ratepwr table cmd function
1897  *  @param wmi_handle      : handle to WMI.
1898  *  @param param    : pointer to hold ratepwr table param
1899  *
1900  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1901  */
1902 QDF_STATUS wmi_unified_set_ratepwr_table_cmd_send(void *wmi_hdl,
1903 				struct ratepwr_table_params *param)
1904 {
1905 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1906 
1907 	if (wmi_handle->ops->send_set_ratepwr_table_cmd)
1908 		return wmi_handle->ops->send_set_ratepwr_table_cmd(wmi_handle,
1909 				param);
1910 
1911 	return QDF_STATUS_E_FAILURE;
1912 }
1913 
1914 /**
1915  *  wmi_unified_get_ratepwr_table_cmd_send() - WMI ratepwr table cmd function
1916  *  @param wmi_handle      : handle to WMI.
1917  *
1918  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1919  */
1920 QDF_STATUS wmi_unified_get_ratepwr_table_cmd_send(void *wmi_hdl)
1921 {
1922 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1923 
1924 	if (wmi_handle->ops->send_get_ratepwr_table_cmd)
1925 		return wmi_handle->ops->send_get_ratepwr_table_cmd(wmi_handle);
1926 
1927 	return QDF_STATUS_E_FAILURE;
1928 }
1929 
1930 /**
1931  *  wmi_unified_set_ratepwr_chainmsk_cmd_send() - WMI ratepwr
1932  *  chainmsk cmd function
1933  *  @param wmi_handle      : handle to WMI.
1934  *  @param param    : pointer to hold ratepwr chainmsk param
1935  *
1936  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1937  */
1938 QDF_STATUS wmi_unified_set_ratepwr_chainmsk_cmd_send(void *wmi_hdl,
1939 				struct ratepwr_chainmsk_params *param)
1940 {
1941 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
1942 
1943 	if (wmi->ops->send_set_ratepwr_chainmsk_cmd)
1944 		return wmi->ops->send_set_ratepwr_chainmsk_cmd(wmi, param);
1945 
1946 	return QDF_STATUS_E_FAILURE;
1947 }
1948 
1949 /**
1950  *  wmi_unified_set_macaddr_cmd_send() - WMI set macaddr cmd function
1951  *  @param wmi_handle      : handle to WMI.
1952  *  @param param    : pointer to hold macaddr param
1953  *
1954  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1955  */
1956 QDF_STATUS wmi_unified_set_macaddr_cmd_send(void *wmi_hdl,
1957 				struct macaddr_params *param)
1958 {
1959 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1960 
1961 	if (wmi_handle->ops->send_set_macaddr_cmd)
1962 		return wmi_handle->ops->send_set_macaddr_cmd(wmi_handle, param);
1963 
1964 	return QDF_STATUS_E_FAILURE;
1965 }
1966 
1967 /**
1968  *  wmi_unified_pdev_scan_start_cmd_send() - WMI pdev scan start cmd function
1969  *  @param wmi_handle      : handle to WMI.
1970  *
1971  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1972  */
1973 QDF_STATUS wmi_unified_pdev_scan_start_cmd_send(void *wmi_hdl)
1974 {
1975 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1976 
1977 	if (wmi_handle->ops->send_pdev_scan_start_cmd)
1978 		return wmi_handle->ops->send_pdev_scan_start_cmd(wmi_handle);
1979 
1980 	return QDF_STATUS_E_FAILURE;
1981 }
1982 
1983 /**
1984  *  wmi_unified_pdev_scan_end_cmd_send() - WMI pdev scan end cmd function
1985  *  @param wmi_handle      : handle to WMI.
1986  *
1987  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
1988  */
1989 QDF_STATUS wmi_unified_pdev_scan_end_cmd_send(void *wmi_hdl)
1990 {
1991 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
1992 
1993 	if (wmi_handle->ops->send_pdev_scan_end_cmd)
1994 		return wmi_handle->ops->send_pdev_scan_end_cmd(wmi_handle);
1995 
1996 	return QDF_STATUS_E_FAILURE;
1997 }
1998 
1999 /**
2000  *  wmi_unified_set_acparams_cmd_send() - WMI set acparams cmd function
2001  *  @param wmi_handle      : handle to WMI.
2002  *  @param param    : pointer to hold acparams param
2003  *
2004  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2005  */
2006 QDF_STATUS wmi_unified_set_acparams_cmd_send(void *wmi_hdl,
2007 				struct acparams_params *param)
2008 {
2009 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2010 
2011 	if (wmi_handle->ops->send_set_acparams_cmd)
2012 		return wmi_handle->ops->send_set_acparams_cmd(wmi_handle,
2013 				param);
2014 
2015 	return QDF_STATUS_E_FAILURE;
2016 }
2017 
2018 /**
2019  *  wmi_unified_set_vap_dscp_tid_map_cmd_send() - WMI set vap dscp
2020  *  tid map cmd function
2021  *  @param wmi_handle      : handle to WMI.
2022  *  @param param    : pointer to hold dscp param
2023  *
2024  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2025  */
2026 QDF_STATUS wmi_unified_set_vap_dscp_tid_map_cmd_send(void *wmi_hdl,
2027 				struct vap_dscp_tid_map_params *param)
2028 {
2029 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
2030 
2031 	if (wmi->ops->send_set_vap_dscp_tid_map_cmd)
2032 		return wmi->ops->send_set_vap_dscp_tid_map_cmd(wmi, param);
2033 
2034 	return QDF_STATUS_E_FAILURE;
2035 }
2036 
2037 /**
2038  *  wmi_unified_proxy_ast_reserve_cmd_send() - WMI proxy ast
2039  *  reserve cmd function
2040  *  @param wmi_handle      : handle to WMI.
2041  *  @param param    : pointer to hold ast param
2042  *
2043  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2044  */
2045 QDF_STATUS wmi_unified_proxy_ast_reserve_cmd_send(void *wmi_hdl,
2046 				struct proxy_ast_reserve_params *param)
2047 {
2048 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2049 
2050 	if (wmi_handle->ops->send_proxy_ast_reserve_cmd)
2051 		return wmi_handle->ops->send_proxy_ast_reserve_cmd(wmi_handle,
2052 				param);
2053 
2054 	return QDF_STATUS_E_FAILURE;
2055 }
2056 
2057 /**
2058  *  wmi_unified_set_bridge_mac_addr_cmd_send() - WMI set bridge mac addr cmd function
2059  *  @param wmi_hdl      : handle to WMI.
2060  *  @param param        : pointer to hold bridge mac addr param
2061  *
2062  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2063  */
2064 QDF_STATUS wmi_unified_set_bridge_mac_addr_cmd_send(void *wmi_hdl,
2065 				struct set_bridge_mac_addr_params *param)
2066 {
2067 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2068 
2069 	if (wmi_handle->ops->send_set_bridge_mac_addr_cmd)
2070 		return wmi_handle->ops->send_set_bridge_mac_addr_cmd(wmi_handle,
2071 				param);
2072 
2073 	return QDF_STATUS_E_FAILURE;
2074 }
2075 
2076 /**
2077  *  wmi_unified_phyerr_enable_cmd_send() - WMI phyerr enable cmd function
2078  *  @param wmi_handle      : handle to WMI.
2079  *  @param param    : pointer to hold phyerr enable param
2080  *
2081  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2082  */
2083 QDF_STATUS wmi_unified_phyerr_enable_cmd_send(void *wmi_hdl)
2084 {
2085 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2086 
2087 	if (wmi_handle->ops->send_phyerr_enable_cmd)
2088 		return wmi_handle->ops->send_phyerr_enable_cmd(wmi_handle);
2089 
2090 	return QDF_STATUS_E_FAILURE;
2091 }
2092 
2093 /**
2094  *  wmi_unified_phyerr_disable_cmd_send() - WMI phyerr disable cmd function
2095  *  @param wmi_handle      : handle to WMI.
2096  *  @param param    : pointer to hold phyerr disable param
2097  *
2098  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2099  */
2100 QDF_STATUS wmi_unified_phyerr_disable_cmd_send(void *wmi_hdl)
2101 {
2102 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2103 
2104 	if (wmi_handle->ops->send_phyerr_disable_cmd)
2105 		return wmi_handle->ops->send_phyerr_disable_cmd(wmi_handle);
2106 
2107 	return QDF_STATUS_E_FAILURE;
2108 }
2109 
2110 /**
2111  *  wmi_unified_smart_ant_enable_tx_feedback_cmd_send() - WMI set tx antenna function
2112  *  @param wmi_handle      : handle to WMI.
2113  *  @param param    : pointer to hold antenna param
2114  *
2115  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2116  */
2117 QDF_STATUS wmi_unified_smart_ant_enable_tx_feedback_cmd_send(void *wmi_hdl,
2118 			struct smart_ant_enable_tx_feedback_params *param)
2119 {
2120 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
2121 
2122 	if (wmi->ops->send_smart_ant_enable_tx_feedback_cmd)
2123 		return wmi->ops->send_smart_ant_enable_tx_feedback_cmd(wmi,
2124 				param);
2125 
2126 	return QDF_STATUS_E_FAILURE;
2127 }
2128 qdf_export_symbol(wmi_unified_smart_ant_enable_tx_feedback_cmd_send);
2129 
2130 /**
2131  *  wmi_unified_vdev_spectral_configure_cmd_send() - WMI set spectral config function
2132  *  @param wmi_handle      : handle to WMI.
2133  *  @param param    : pointer to hold spectral config param
2134  *
2135  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2136  */
2137 QDF_STATUS wmi_unified_vdev_spectral_configure_cmd_send(void *wmi_hdl,
2138 				struct vdev_spectral_configure_params *param)
2139 {
2140 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
2141 
2142 	if (wmi->ops->send_vdev_spectral_configure_cmd)
2143 		return wmi->ops->send_vdev_spectral_configure_cmd(wmi, param);
2144 
2145 	return QDF_STATUS_E_FAILURE;
2146 }
2147 
2148 /**
2149  *  wmi_unified_vdev_spectral_enable_cmd_send() - WMI enable spectral function
2150  *  @param wmi_handle      : handle to WMI.
2151  *  @param param    : pointer to hold enable spectral param
2152  *
2153  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2154  */
2155 QDF_STATUS wmi_unified_vdev_spectral_enable_cmd_send(void *wmi_hdl,
2156 				struct vdev_spectral_enable_params *param)
2157 {
2158 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
2159 
2160 	if (wmi->ops->send_vdev_spectral_enable_cmd)
2161 		return wmi->ops->send_vdev_spectral_enable_cmd(wmi, param);
2162 
2163 	return QDF_STATUS_E_FAILURE;
2164 }
2165 
2166 /**
2167  *  wmi_unified_bss_chan_info_request_cmd_send() - WMI bss chan info request function
2168  *  @param wmi_handle      : handle to WMI.
2169  *  @param param    : pointer to hold chan info param
2170  *
2171  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2172  */
2173 QDF_STATUS wmi_unified_bss_chan_info_request_cmd_send(void *wmi_hdl,
2174 				struct bss_chan_info_request_params *param)
2175 {
2176 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
2177 
2178 	if (wmi->ops->send_bss_chan_info_request_cmd)
2179 		return wmi->ops->send_bss_chan_info_request_cmd(wmi, param);
2180 
2181 	return QDF_STATUS_E_FAILURE;
2182 }
2183 
2184 /**
2185  *  wmi_unified_thermal_mitigation_param_cmd_send() - WMI thermal mitigation function
2186  *  @param wmi_handle      : handle to WMI.
2187  *  @param param    : pointer to hold thermal mitigation param
2188  *
2189  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2190  */
2191 QDF_STATUS wmi_unified_thermal_mitigation_param_cmd_send(void *wmi_hdl,
2192 				struct thermal_mitigation_params *param)
2193 {
2194 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
2195 
2196 	if (wmi->ops->send_thermal_mitigation_param_cmd)
2197 		return wmi->ops->send_thermal_mitigation_param_cmd(wmi, param);
2198 
2199 	return QDF_STATUS_E_FAILURE;
2200 }
2201 
2202 /**
2203  *  wmi_unified_vdev_set_fwtest_param_cmd_send() - WMI set fwtest function
2204  *  @param wmi_handle      : handle to WMI.
2205  *  @param param    : pointer to hold fwtest param
2206  *
2207  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2208  */
2209 QDF_STATUS wmi_unified_vdev_set_fwtest_param_cmd_send(void *wmi_hdl,
2210 				struct set_fwtest_params *param)
2211 {
2212 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
2213 
2214 	if (wmi->ops->send_vdev_set_fwtest_param_cmd)
2215 		return wmi->ops->send_vdev_set_fwtest_param_cmd(wmi, param);
2216 
2217 	return QDF_STATUS_E_FAILURE;
2218 }
2219 
2220 /**
2221  * wmi_unified_vdev_set_custom_aggr_size_cmd_send() - WMI set custom aggr
2222  * size function
2223  * @param wmi_handle	: handle to WMI
2224  * @param param		: pointer to hold custom aggr size param
2225  *
2226  * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_R_FAILURE for failure
2227  */
2228 QDF_STATUS wmi_unified_vdev_set_custom_aggr_size_cmd_send(void *wmi_hdl,
2229 				struct set_custom_aggr_size_params *param)
2230 {
2231 	wmi_unified_t wmi = (wmi_unified_t)wmi_hdl;
2232 
2233 	if (wmi->ops->send_vdev_set_custom_aggr_size_cmd)
2234 		return wmi->ops->send_vdev_set_custom_aggr_size_cmd(wmi, param);
2235 
2236 	return QDF_STATUS_E_FAILURE;
2237 }
2238 
2239 /**
2240  * wmi_unified_vdev_set_qdepth_thresh_cmd_send() - WMI set qdepth threshold
2241  * @param wmi_handle	: handle to WMI
2242  * @param param		: pointer to hold qdepth threshold params
2243  *
2244  * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_R_FAILURE for failure
2245  */
2246 QDF_STATUS wmi_unified_vdev_set_qdepth_thresh_cmd_send(void *wmi_hdl,
2247 				struct set_qdepth_thresh_params *param)
2248 {
2249 	wmi_unified_t wmi = (wmi_unified_t)wmi_hdl;
2250 
2251 	if (wmi->ops->send_vdev_set_qdepth_thresh_cmd)
2252 		return wmi->ops->send_vdev_set_qdepth_thresh_cmd(wmi, param);
2253 
2254 	return QDF_STATUS_E_FAILURE;
2255 }
2256 
2257 /**
2258  *  wmi_unified_pdev_set_regdomain_params_cmd_send() - WMI set regdomain function
2259  *  @param wmi_handle      : handle to WMI.
2260  *  @param param    : pointer to hold regdomain param
2261  *
2262  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2263  */
2264 QDF_STATUS wmi_unified_pdev_set_regdomain_cmd_send(void *wmi_hdl,
2265 				struct pdev_set_regdomain_params *param)
2266 {
2267 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2268 
2269 	if (wmi_handle->ops->send_pdev_set_regdomain_cmd)
2270 		return wmi_handle->ops->send_pdev_set_regdomain_cmd(wmi_handle,
2271 				param);
2272 
2273 	return QDF_STATUS_E_FAILURE;
2274 }
2275 
2276 /**
2277  *  wmi_unified_set_beacon_filter_cmd_send() - WMI set beacon filter function
2278  *  @param wmi_handle      : handle to WMI.
2279  *  @param param    : pointer to hold beacon filter param
2280  *
2281  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2282  */
2283 QDF_STATUS wmi_unified_set_beacon_filter_cmd_send(void *wmi_hdl,
2284 				struct set_beacon_filter_params *param)
2285 {
2286 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2287 
2288 	if (wmi_handle->ops->send_set_beacon_filter_cmd)
2289 		return wmi_handle->ops->send_set_beacon_filter_cmd(wmi_handle,
2290 				param);
2291 
2292 	return QDF_STATUS_E_FAILURE;
2293 }
2294 
2295 /**
2296  *  wmi_unified_remove_beacon_filter_cmd_send() - WMI set beacon filter function
2297  *  @param wmi_handle      : handle to WMI.
2298  *  @param param    : pointer to hold beacon filter param
2299  *
2300  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2301  */
2302 QDF_STATUS wmi_unified_remove_beacon_filter_cmd_send(void *wmi_hdl,
2303 				struct remove_beacon_filter_params *param)
2304 {
2305 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
2306 
2307 	if (wmi->ops->send_remove_beacon_filter_cmd)
2308 		return wmi->ops->send_remove_beacon_filter_cmd(wmi, param);
2309 
2310 	return QDF_STATUS_E_FAILURE;
2311 }
2312 
2313 /**
2314  *  wmi_unified_mgmt_cmd_send() - WMI mgmt cmd function
2315  *  @param wmi_handle      : handle to WMI.
2316  *  @param macaddr        : MAC address
2317  *  @param param    : pointer to hold mgmt parameter
2318  *
2319  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2320  */
2321 #if 0
2322 QDF_STATUS wmi_unified_mgmt_cmd_send(void *wmi_hdl,
2323 				uint8_t macaddr[QDF_MAC_ADDR_SIZE],
2324 				struct mgmt_params *param)
2325 {
2326 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2327 
2328 	if (wmi_handle->ops->send_mgmt_cmd)
2329 		return wmi_handle->ops->send_mgmt_cmd(wmi_handle,
2330 				  macaddr, param);
2331 
2332 	return QDF_STATUS_E_FAILURE;
2333 }
2334 #endif
2335 
2336 /**
2337  *  wmi_unified_addba_clearresponse_cmd_send() - WMI addba resp cmd function
2338  *  @param wmi_handle      : handle to WMI.
2339  *  @param macaddr        : MAC address
2340  *  @param param    : pointer to hold addba resp parameter
2341  *
2342  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2343  */
2344 QDF_STATUS wmi_unified_addba_clearresponse_cmd_send(void *wmi_hdl,
2345 				uint8_t macaddr[QDF_MAC_ADDR_SIZE],
2346 				struct addba_clearresponse_params *param)
2347 {
2348 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2349 
2350 	if (wmi_handle->ops->send_addba_clearresponse_cmd)
2351 		return wmi_handle->ops->send_addba_clearresponse_cmd(wmi_handle,
2352 				  macaddr, param);
2353 
2354 	return QDF_STATUS_E_FAILURE;
2355 }
2356 
2357 /**
2358  *  wmi_unified_addba_send_cmd_send() - WMI addba send function
2359  *  @param wmi_handle      : handle to WMI.
2360  *  @param macaddr        : MAC address
2361  *  @param param    : pointer to hold addba parameter
2362  *
2363  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2364  */
2365 QDF_STATUS wmi_unified_addba_send_cmd_send(void *wmi_hdl,
2366 				uint8_t macaddr[QDF_MAC_ADDR_SIZE],
2367 				struct addba_send_params *param)
2368 {
2369 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2370 
2371 	if (wmi_handle->ops->send_addba_send_cmd)
2372 		return wmi_handle->ops->send_addba_send_cmd(wmi_handle,
2373 				  macaddr, param);
2374 
2375 	return QDF_STATUS_E_FAILURE;
2376 }
2377 
2378 /**
2379  *  wmi_unified_delba_send_cmd_send() - WMI delba cmd function
2380  *  @param wmi_handle      : handle to WMI.
2381  *  @param macaddr        : MAC address
2382  *  @param param    : pointer to hold delba parameter
2383  *
2384  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2385  */
2386 QDF_STATUS wmi_unified_delba_send_cmd_send(void *wmi_hdl,
2387 				uint8_t macaddr[QDF_MAC_ADDR_SIZE],
2388 				struct delba_send_params *param)
2389 {
2390 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2391 
2392 	if (wmi_handle->ops->send_delba_send_cmd)
2393 		return wmi_handle->ops->send_delba_send_cmd(wmi_handle,
2394 				  macaddr, param);
2395 
2396 	return QDF_STATUS_E_FAILURE;
2397 }
2398 
2399 /**
2400  *  wmi_unified_addba_setresponse_cmd_send() - WMI addba set resp cmd function
2401  *  @param wmi_handle      : handle to WMI.
2402  *  @param macaddr        : MAC address
2403  *  @param param    : pointer to hold addba set resp parameter
2404  *
2405  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2406  */
2407 QDF_STATUS wmi_unified_addba_setresponse_cmd_send(void *wmi_hdl,
2408 				uint8_t macaddr[QDF_MAC_ADDR_SIZE],
2409 				struct addba_setresponse_params *param)
2410 {
2411 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2412 
2413 	if (wmi_handle->ops->send_addba_setresponse_cmd)
2414 		return wmi_handle->ops->send_addba_setresponse_cmd(wmi_handle,
2415 				  macaddr, param);
2416 
2417 	return QDF_STATUS_E_FAILURE;
2418 }
2419 
2420 /**
2421  *  wmi_unified_singleamsdu_cmd_send() - WMI singleamsdu function
2422  *  @param wmi_handle      : handle to WMI.
2423  *  @param macaddr        : MAC address
2424  *  @param param    : pointer to hold singleamsdu parameter
2425  *
2426  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2427  */
2428 QDF_STATUS wmi_unified_singleamsdu_cmd_send(void *wmi_hdl,
2429 				uint8_t macaddr[QDF_MAC_ADDR_SIZE],
2430 				struct singleamsdu_params *param)
2431 {
2432 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2433 
2434 	if (wmi_handle->ops->send_singleamsdu_cmd)
2435 		return wmi_handle->ops->send_singleamsdu_cmd(wmi_handle,
2436 				  macaddr, param);
2437 
2438 	return QDF_STATUS_E_FAILURE;
2439 }
2440 
2441 /**
2442  *  wmi_unified_mu_scan_cmd_send() - WMI set mu scan function
2443  *  @param wmi_handle      : handle to WMI.
2444  *  @param param    : pointer to hold mu scan param
2445  *
2446  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2447  */
2448 QDF_STATUS wmi_unified_mu_scan_cmd_send(void *wmi_hdl,
2449 				struct mu_scan_params *param)
2450 {
2451 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2452 
2453 	if (wmi_handle->ops->send_mu_scan_cmd)
2454 		return wmi_handle->ops->send_mu_scan_cmd(wmi_handle, param);
2455 
2456 	return QDF_STATUS_E_FAILURE;
2457 }
2458 
2459 /**
2460  *  wmi_unified_lteu_config_cmd_send() - WMI set mu scan function
2461  *  @param wmi_handle      : handle to WMI.
2462  *  @param param    : pointer to hold mu scan param
2463  *
2464  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2465  */
2466 QDF_STATUS wmi_unified_lteu_config_cmd_send(void *wmi_hdl,
2467 				struct lteu_config_params *param)
2468 {
2469 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2470 
2471 	if (wmi_handle->ops->send_lteu_config_cmd)
2472 		return wmi_handle->ops->send_lteu_config_cmd(wmi_handle, param);
2473 
2474 	return QDF_STATUS_E_FAILURE;
2475 }
2476 
2477 /**
2478  *  wmi_unified_set_psmode_cmd_send() - WMI set mu scan function
2479  *  @param wmi_handle      : handle to WMI.
2480  *  @param param    : pointer to hold mu scan param
2481  *
2482  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2483  */
2484 QDF_STATUS wmi_unified_set_psmode_cmd_send(void *wmi_hdl,
2485 				struct set_ps_mode_params *param)
2486 {
2487 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2488 
2489 	if (wmi_handle->ops->send_set_ps_mode_cmd)
2490 		return wmi_handle->ops->send_set_ps_mode_cmd(wmi_handle, param);
2491 
2492 	return QDF_STATUS_E_FAILURE;
2493 }
2494 
2495 /**
2496  * wmi_unified_init_cmd_send() - send initialization cmd to fw
2497  * @wmi_handle: wmi handle
2498  * @param param: pointer to wmi init param
2499  *
2500  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2501  */
2502 QDF_STATUS wmi_unified_init_cmd_send(void *wmi_hdl,
2503 				struct wmi_init_cmd_param *param)
2504 {
2505 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2506 
2507 	if (wmi_handle->ops->init_cmd_send)
2508 		return wmi_handle->ops->init_cmd_send(wmi_handle, param);
2509 
2510 	return QDF_STATUS_E_FAILURE;
2511 }
2512 
2513 /**
2514  * wmi_save_service_bitmap() - save service bitmap
2515  * @wmi_handle: wmi handle
2516  * @param evt_buf: pointer to event buffer
2517  *
2518  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2519  */
2520 QDF_STATUS wmi_save_service_bitmap(void *wmi_hdl, void *evt_buf,
2521 				   void *bitmap_buf)
2522 {
2523 	struct wmi_unified *wmi_handle = (struct wmi_unified *) wmi_hdl;
2524 
2525 	if (wmi_handle->ops->save_service_bitmap) {
2526 		return wmi_handle->ops->save_service_bitmap(wmi_handle, evt_buf,
2527 						     bitmap_buf);
2528 	}
2529 	return QDF_STATUS_E_FAILURE;
2530 }
2531 
2532 /**
2533  * wmi_save_ext_service_bitmap() - save extended service bitmap
2534  * @wmi_handle: wmi handle
2535  * @param evt_buf: pointer to event buffer
2536  *
2537  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2538  */
2539 QDF_STATUS wmi_save_ext_service_bitmap(void *wmi_hdl, void *evt_buf,
2540 				   void *bitmap_buf)
2541 {
2542 	struct wmi_unified *wmi_handle = (struct wmi_unified *) wmi_hdl;
2543 
2544 	if (wmi_handle->ops->save_ext_service_bitmap) {
2545 		return wmi_handle->ops->save_ext_service_bitmap(wmi_handle,
2546 				evt_buf, bitmap_buf);
2547 	}
2548 	return QDF_STATUS_E_FAILURE;
2549 }
2550 
2551 /**
2552  * wmi_save_fw_version() - Save fw version
2553  * @wmi_handle: wmi handle
2554  * @param evt_buf: pointer to event buffer
2555  *
2556  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2557  */
2558 QDF_STATUS wmi_save_fw_version(void *wmi_hdl, void *evt_buf)
2559 {
2560 	struct wmi_unified *wmi_handle = (struct wmi_unified *) wmi_hdl;
2561 
2562 	if (wmi_handle->ops->save_fw_version) {
2563 		wmi_handle->ops->save_fw_version(wmi_handle, evt_buf);
2564 		return 0;
2565 	}
2566 	return QDF_STATUS_E_FAILURE;
2567 }
2568 
2569 /**
2570  * wmi_check_and_update_fw_version() - Ready and fw version check
2571  * @wmi_handle: wmi handle
2572  * @param evt_buf: pointer to event buffer
2573  *
2574  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2575  */
2576 QDF_STATUS wmi_check_and_update_fw_version(void *wmi_hdl, void *evt_buf)
2577 {
2578 	struct wmi_unified *wmi_handle = (struct wmi_unified *) wmi_hdl;
2579 
2580 	if (wmi_handle->ops->check_and_update_fw_version)
2581 		return wmi_handle->ops->check_and_update_fw_version(wmi_handle,
2582 				evt_buf);
2583 
2584 	return QDF_STATUS_E_FAILURE;
2585 }
2586 
2587 /**
2588  * wmi_service_enabled() - Check if service enabled
2589  * @param wmi_handle: wmi handle
2590  * @param service_id: service identifier
2591  *
2592  * Return: 1 enabled, 0 disabled
2593  */
2594 bool wmi_service_enabled(void *wmi_hdl, uint32_t service_id)
2595 {
2596 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2597 
2598 	if ((service_id < wmi_services_max) &&
2599 		(wmi_handle->services[service_id] != WMI_SERVICE_UNAVAILABLE)) {
2600 		if (wmi_handle->ops->is_service_enabled) {
2601 			return wmi_handle->ops->is_service_enabled(wmi_handle,
2602 				wmi_handle->services[service_id]);
2603 		}
2604 	} else {
2605 		WMI_LOGI("Service %d not supported", service_id);
2606 	}
2607 
2608 	return false;
2609 }
2610 
2611 /**
2612  * wmi_get_target_cap_from_service_ready() - extract service ready event
2613  * @wmi_handle: wmi handle
2614  * @param evt_buf: pointer to received event buffer
2615  * @param ev: pointer to hold target capability information extracted from even
2616  *
2617  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2618  */
2619 QDF_STATUS wmi_get_target_cap_from_service_ready(void *wmi_hdl,
2620 	void *evt_buf, struct wlan_psoc_target_capability_info *ev)
2621 {
2622 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
2623 
2624 	if (wmi->ops->get_target_cap_from_service_ready)
2625 		return wmi->ops->get_target_cap_from_service_ready(wmi,
2626 				evt_buf, ev);
2627 
2628 	return QDF_STATUS_E_FAILURE;
2629 }
2630 
2631 /**
2632  * wmi_extract_fw_version() - extract fw version
2633  * @wmi_handle: wmi handle
2634  * @param evt_buf: pointer to event buffer
2635  * @param fw_ver: Pointer to hold fw version
2636  *
2637  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2638  */
2639 QDF_STATUS wmi_extract_fw_version(void *wmi_hdl,
2640 				void *evt_buf, struct wmi_host_fw_ver *fw_ver)
2641 {
2642 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2643 
2644 	if (wmi_handle->ops->extract_fw_version)
2645 		return wmi_handle->ops->extract_fw_version(wmi_handle,
2646 				evt_buf, fw_ver);
2647 
2648 	return QDF_STATUS_E_FAILURE;
2649 }
2650 
2651 /**
2652  * wmi_extract_fw_abi_version() - extract fw abi version
2653  * @wmi_handle: wmi handle
2654  * @param evt_buf: Pointer to event buffer
2655  * @param fw_ver: Pointer to hold fw abi version
2656  *
2657  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2658  */
2659 QDF_STATUS wmi_extract_fw_abi_version(void *wmi_hdl,
2660 			void *evt_buf, struct wmi_host_fw_abi_ver *fw_ver)
2661 {
2662 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2663 
2664 	if (wmi_handle->ops->extract_fw_abi_version)
2665 		return wmi_handle->ops->extract_fw_abi_version(wmi_handle,
2666 		evt_buf, fw_ver);
2667 
2668 	return QDF_STATUS_E_FAILURE;
2669 }
2670 
2671 /**
2672  * wmi_extract_hal_reg_cap() - extract HAL registered capabilities
2673  * @wmi_handle: wmi handle
2674  * @param evt_buf: Pointer to event buffer
2675  * @param hal_reg_cap: pointer to hold HAL reg capabilities
2676  *
2677  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2678  */
2679 QDF_STATUS wmi_extract_hal_reg_cap(void *wmi_hdl, void *evt_buf,
2680 	struct wlan_psoc_hal_reg_capability *hal_reg_cap)
2681 {
2682 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2683 
2684 	if (wmi_handle->ops->extract_hal_reg_cap)
2685 		return wmi_handle->ops->extract_hal_reg_cap(wmi_handle,
2686 			evt_buf, hal_reg_cap);
2687 
2688 	return QDF_STATUS_E_FAILURE;
2689 }
2690 
2691 /**
2692  * wmi_extract_host_mem_req_from_service_ready() - Extract host memory
2693  *                                                 request event
2694  * @wmi_handle: wmi handle
2695  * @param evt_buf: pointer to event buffer
2696  * @param num_entries: pointer to hold number of entries requested
2697  *
2698  * Return: Number of entries requested
2699  */
2700 host_mem_req *wmi_extract_host_mem_req_from_service_ready(void *wmi_hdl,
2701 	void *evt_buf, uint8_t *num_entries)
2702 {
2703 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2704 
2705 	if (wmi_handle->ops->extract_host_mem_req)
2706 		return wmi_handle->ops->extract_host_mem_req(wmi_handle,
2707 			evt_buf, num_entries);
2708 
2709 	*num_entries = 0;
2710 	return NULL;
2711 }
2712 
2713 /**
2714  * wmi_ready_extract_init_status() - Extract init status from ready event
2715  * @wmi_handle: wmi handle
2716  * @param ev: Pointer to event buffer
2717  *
2718  * Return: ready status
2719  */
2720 uint32_t wmi_ready_extract_init_status(void *wmi_hdl, void *ev)
2721 {
2722 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2723 
2724 	if (wmi_handle->ops->ready_extract_init_status)
2725 		return wmi_handle->ops->ready_extract_init_status(wmi_handle,
2726 			ev);
2727 
2728 
2729 	return 1;
2730 
2731 }
2732 
2733 /**
2734  * wmi_ready_extract_mac_addr() - extract mac address from ready event
2735  * @wmi_handle: wmi handle
2736  * @param ev: pointer to event buffer
2737  * @param macaddr: Pointer to hold MAC address
2738  *
2739  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2740  */
2741 QDF_STATUS wmi_ready_extract_mac_addr(void *wmi_hdl, void *ev, uint8_t *macaddr)
2742 {
2743 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2744 
2745 	if (wmi_handle->ops->ready_extract_mac_addr)
2746 		return wmi_handle->ops->ready_extract_mac_addr(wmi_handle,
2747 			ev, macaddr);
2748 
2749 
2750 	return QDF_STATUS_E_FAILURE;
2751 }
2752 
2753 /**
2754  * wmi_ready_extract_mac_addr() - extract MAC address list from ready event
2755  * @wmi_handle: wmi handle
2756  * @param ev: pointer to event buffer
2757  * @param num_mac_addr: Pointer to number of entries
2758  *
2759  * Return: address to start of mac addr list
2760  */
2761 wmi_host_mac_addr *wmi_ready_extract_mac_addr_list(void *wmi_hdl, void *ev,
2762 					      uint8_t *num_mac_addr)
2763 {
2764 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2765 
2766 	if (wmi_handle->ops->ready_extract_mac_addr_list)
2767 		return wmi_handle->ops->ready_extract_mac_addr_list(wmi_handle,
2768 			ev, num_mac_addr);
2769 
2770 	*num_mac_addr = 0;
2771 
2772 	return NULL;
2773 }
2774 
2775 /**
2776  * wmi_extract_ready_params() - Extract data from ready event apart from
2777  *                     status, macaddr and version.
2778  * @wmi_handle: Pointer to WMI handle.
2779  * @evt_buf: Pointer to Ready event buffer.
2780  * @ev_param: Pointer to host defined struct to copy the data from event.
2781  *
2782  * Return: QDF_STATUS_SUCCESS on success.
2783  */
2784 QDF_STATUS wmi_extract_ready_event_params(void *wmi_hdl,
2785 		void *evt_buf, struct wmi_host_ready_ev_param *ev_param)
2786 {
2787 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2788 
2789 	if (wmi_handle->ops->extract_ready_event_params)
2790 		return wmi_handle->ops->extract_ready_event_params(wmi_handle,
2791 			evt_buf, ev_param);
2792 
2793 	return QDF_STATUS_E_FAILURE;
2794 }
2795 
2796 /**
2797  * wmi_extract_dbglog_data_len() - extract debuglog data length
2798  * @wmi_handle: wmi handle
2799  * @param evt_buf: pointer to event buffer
2800  * @param len:  length of buffer
2801  *
2802  * Return: length
2803  */
2804 uint8_t *wmi_extract_dbglog_data_len(void *wmi_hdl, void *evt_buf,
2805 			uint32_t *len)
2806 {
2807 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2808 
2809 	if (wmi_handle->ops->extract_dbglog_data_len)
2810 		return wmi_handle->ops->extract_dbglog_data_len(wmi_handle,
2811 			evt_buf, len);
2812 
2813 
2814 	return NULL;
2815 }
2816 qdf_export_symbol(wmi_extract_dbglog_data_len);
2817 
2818 /**
2819  * wmi_send_ext_resource_config() - send extended resource configuration
2820  * @wmi_handle: wmi handle
2821  * @param ext_cfg: pointer to extended resource configuration
2822  *
2823  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2824  */
2825 QDF_STATUS wmi_send_ext_resource_config(void *wmi_hdl,
2826 			wmi_host_ext_resource_config *ext_cfg)
2827 {
2828 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2829 
2830 	if (wmi_handle->ops->send_ext_resource_config)
2831 		return wmi_handle->ops->send_ext_resource_config(wmi_handle,
2832 				ext_cfg);
2833 
2834 	return QDF_STATUS_E_FAILURE;
2835 }
2836 
2837 /**
2838  *  wmi_unified_rtt_meas_req_test_cmd_send() - WMI rtt meas req test function
2839  *  @param wmi_handle      : handle to WMI.
2840  *  @param param    : pointer to hold rtt meas req test param
2841  *
2842  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2843  */
2844 QDF_STATUS wmi_unified_rtt_meas_req_test_cmd_send(void *wmi_hdl,
2845 				struct rtt_meas_req_test_params *param)
2846 {
2847 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2848 
2849 	if (wmi_handle->ops->send_rtt_meas_req_test_cmd)
2850 		return wmi_handle->ops->send_rtt_meas_req_test_cmd(wmi_handle,
2851 				param);
2852 
2853 	return QDF_STATUS_E_FAILURE;
2854 }
2855 
2856 /**
2857  *  wmi_unified_rtt_meas_req_cmd_send() - WMI rtt meas req function
2858  *  @param wmi_handle      : handle to WMI.
2859  *  @param param    : pointer to hold rtt meas req param
2860  *
2861  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2862  */
2863 QDF_STATUS wmi_unified_rtt_meas_req_cmd_send(void *wmi_hdl,
2864 				struct rtt_meas_req_params *param)
2865 {
2866 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2867 
2868 	if (wmi_handle->ops->send_rtt_meas_req_cmd)
2869 		return wmi_handle->ops->send_rtt_meas_req_cmd(wmi_handle,
2870 				param);
2871 
2872 	return QDF_STATUS_E_FAILURE;
2873 }
2874 
2875 /**
2876  *  wmi_unified_lci_set_cmd_send() - WMI lci set function
2877  *  @param wmi_handle      : handle to WMI.
2878  *  @param param    : pointer to hold lci param
2879  *
2880  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2881  */
2882 QDF_STATUS wmi_unified_lci_set_cmd_send(void *wmi_hdl,
2883 				struct lci_set_params *param)
2884 {
2885 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2886 
2887 	if (wmi_handle->ops->send_lci_set_cmd)
2888 		return wmi_handle->ops->send_lci_set_cmd(wmi_handle, param);
2889 
2890 	return QDF_STATUS_E_FAILURE;
2891 }
2892 
2893 /**
2894  *  wmi_unified_lcr_set_cmd_send() - WMI lcr set function
2895  *  @param wmi_handle      : handle to WMI.
2896  *  @param param    : pointer to hold lcr param
2897  *
2898  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2899  */
2900 QDF_STATUS wmi_unified_lcr_set_cmd_send(void *wmi_hdl,
2901 				struct lcr_set_params *param)
2902 {
2903 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2904 
2905 	if (wmi_handle->ops->send_lcr_set_cmd)
2906 		return wmi_handle->ops->send_lcr_set_cmd(wmi_handle, param);
2907 
2908 	return QDF_STATUS_E_FAILURE;
2909 }
2910 
2911 /**
2912  *  wmi_unified_rtt_keepalive_req_cmd_send() - WMI rtt meas req test function
2913  *  @param wmi_handle      : handle to WMI.
2914  *  @param param    : pointer to hold rtt meas req test param
2915  *
2916  *  @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2917  */
2918 QDF_STATUS wmi_unified_rtt_keepalive_req_cmd_send(void *wmi_hdl,
2919 				struct rtt_keepalive_req_params *param)
2920 {
2921 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2922 
2923 	if (wmi_handle->ops->send_rtt_keepalive_req_cmd)
2924 		return wmi_handle->ops->send_rtt_keepalive_req_cmd(wmi_handle,
2925 				param);
2926 
2927 	return QDF_STATUS_E_FAILURE;
2928 }
2929 
2930 /**
2931  * wmi_unified_send_periodic_chan_stats_config_cmd() - send periodic chan stats cmd
2932  * to fw
2933  * @wmi_handle: wmi handle
2934  * @param: pointer to hold periodic chan stats param
2935  *
2936  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2937  */
2938 QDF_STATUS wmi_unified_send_periodic_chan_stats_config_cmd(void *wmi_hdl,
2939 			struct periodic_chan_stats_params *param)
2940 {
2941 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
2942 
2943 	if (wmi->ops->send_periodic_chan_stats_config_cmd)
2944 		return wmi->ops->send_periodic_chan_stats_config_cmd(wmi,
2945 					param);
2946 
2947 	return QDF_STATUS_E_FAILURE;
2948 }
2949 
2950 /**
2951  * wmi_send_get_user_position_cmd() - send get user position command to fw
2952  * @wmi_handle: wmi handle
2953  *
2954  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2955  */
2956 QDF_STATUS
2957 wmi_send_get_user_position_cmd(void *wmi_hdl, uint32_t value)
2958 {
2959 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
2960 
2961 	if (wmi_handle->ops->send_get_user_position_cmd)
2962 		return wmi_handle->ops->send_get_user_position_cmd(wmi_handle,
2963 								value);
2964 
2965 	return QDF_STATUS_E_FAILURE;
2966 }
2967 
2968 /**
2969  * wmi_send_get_peer_mumimo_tx_count_cmd() - send get mumio tx count
2970  *					     command to fw
2971  * @wmi_handle: wmi handle
2972  * @value: user pos value
2973  *
2974  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2975  */
2976 QDF_STATUS
2977 wmi_send_get_peer_mumimo_tx_count_cmd(void *wmi_hdl, uint32_t value)
2978 {
2979 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
2980 
2981 	if (wmi->ops->send_get_peer_mumimo_tx_count_cmd)
2982 		return wmi->ops->send_get_peer_mumimo_tx_count_cmd(wmi, value);
2983 
2984 	return QDF_STATUS_E_FAILURE;
2985 }
2986 
2987 /**
2988  * wmi_send_reset_peer_mumimo_tx_count_cmd() - send reset peer mumimo
2989  *					       tx count to fw
2990  * @wmi_handle: wmi handle
2991  * @value:	reset tx count value
2992  *
2993  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
2994  */
2995 QDF_STATUS
2996 wmi_send_reset_peer_mumimo_tx_count_cmd(void *wmi_hdl, uint32_t value)
2997 {
2998 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
2999 
3000 	if (wmi->ops->send_reset_peer_mumimo_tx_count_cmd)
3001 		return wmi->ops->send_reset_peer_mumimo_tx_count_cmd(wmi,
3002 								value);
3003 
3004 	return QDF_STATUS_E_FAILURE;
3005 }
3006 
3007 /* Extract - APIs */
3008 /**
3009  * wmi_extract_ctl_failsafe_check_ev_param() - extract ctl data
3010  * from event
3011  * @wmi_handle: wmi handle
3012  * @param evt_buf: pointer to event buffer
3013  * @param param: Pointer to hold ctl data
3014  *
3015  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3016  */
3017 QDF_STATUS
3018 wmi_extract_ctl_failsafe_check_ev_param(void *wmi_hdl,
3019 					void *evt_buf,
3020 					struct wmi_host_pdev_ctl_failsafe_event
3021 					*param)
3022 {
3023 	wmi_unified_t wmi = (wmi_unified_t)wmi_hdl;
3024 
3025 	if (wmi->ops->extract_ctl_failsafe_check_ev_param)
3026 		return wmi->ops->extract_ctl_failsafe_check_ev_param(
3027 			wmi, evt_buf, param);
3028 
3029 	return QDF_STATUS_E_FAILURE;
3030 }
3031 
3032 /**
3033  * wmi_extract_fips_event_data() - extract fips event data
3034  * @wmi_handle: wmi handle
3035  * @param evt_buf: pointer to event buffer
3036  * @param param: pointer to FIPS event param
3037  *
3038  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3039  */
3040 QDF_STATUS wmi_extract_fips_event_data(void *wmi_hdl, void *evt_buf,
3041 		struct wmi_host_fips_event_param *param)
3042 {
3043 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3044 
3045 	if (wmi_handle->ops->extract_fips_event_data) {
3046 		return wmi_handle->ops->extract_fips_event_data(wmi_handle,
3047 			evt_buf, param);
3048 	}
3049 	return QDF_STATUS_E_FAILURE;
3050 }
3051 
3052 /**
3053  * wmi_extract_mgmt_rx_params() - extract management rx params from event
3054  * @wmi_handle: wmi handle
3055  * @param evt_buf: pointer to event buffer
3056  * @param hdr: Pointer to hold header
3057  * @param bufp: Pointer to hold pointer to rx param buffer
3058  *
3059  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3060  */
3061 QDF_STATUS wmi_extract_mgmt_rx_params(void *wmi_hdl, void *evt_buf,
3062 	struct mgmt_rx_event_params *hdr, uint8_t **bufp)
3063 {
3064 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3065 
3066 	if (wmi_handle->ops->extract_mgmt_rx_params)
3067 		return wmi_handle->ops->extract_mgmt_rx_params(wmi_handle,
3068 				evt_buf, hdr, bufp);
3069 
3070 	return QDF_STATUS_E_FAILURE;
3071 }
3072 
3073 /**
3074  * wmi_extract_vdev_roam_param() - extract vdev roam param from event
3075  * @wmi_handle: wmi handle
3076  * @param evt_buf: pointer to event buffer
3077  * @param param: Pointer to hold roam param
3078  *
3079  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3080  */
3081 QDF_STATUS wmi_extract_vdev_roam_param(void *wmi_hdl, void *evt_buf,
3082 	wmi_host_roam_event *param)
3083 {
3084 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3085 
3086 	if (wmi_handle->ops->extract_vdev_roam_param)
3087 		return wmi_handle->ops->extract_vdev_roam_param(wmi_handle,
3088 				evt_buf, param);
3089 
3090 	return QDF_STATUS_E_FAILURE;
3091 }
3092 
3093 /**
3094  * wmi_extract_vdev_scan_ev_param() - extract vdev scan param from event
3095  * @wmi_handle: wmi handle
3096  * @param evt_buf: pointer to event buffer
3097  * @param param: Pointer to hold vdev scan param
3098  *
3099  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3100  */
3101 QDF_STATUS wmi_extract_vdev_scan_ev_param(void *wmi_hdl, void *evt_buf,
3102 	struct scan_event *param)
3103 {
3104 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3105 
3106 	if (wmi_handle->ops->extract_vdev_scan_ev_param)
3107 		return wmi_handle->ops->extract_vdev_scan_ev_param(wmi_handle,
3108 				evt_buf, param);
3109 
3110 	return QDF_STATUS_E_FAILURE;
3111 }
3112 
3113 /**
3114  * wmi_extract_mu_ev_param() - extract mu param from event
3115  * @wmi_handle: wmi handle
3116  * @param evt_buf: pointer to event buffer
3117  * @param param: Pointer to hold mu report
3118  *
3119  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3120  */
3121 QDF_STATUS wmi_extract_mu_ev_param(void *wmi_hdl, void *evt_buf,
3122 	wmi_host_mu_report_event *param)
3123 {
3124 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3125 
3126 	if (wmi_handle->ops->extract_mu_ev_param)
3127 		return wmi_handle->ops->extract_mu_ev_param(wmi_handle, evt_buf,
3128 			param);
3129 
3130 	return QDF_STATUS_E_FAILURE;
3131 }
3132 
3133 /**
3134  * wmi_extract_mu_db_entry() - extract mu db entry from event
3135  * @wmi_handle: wmi handle
3136  * @param evt_buf: pointer to event buffer
3137  * @param param: Pointer to hold mu db entry
3138  *
3139  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3140  */
3141 QDF_STATUS wmi_extract_mu_db_entry(void *wmi_hdl, void *evt_buf,
3142 	uint8_t idx, wmi_host_mu_db_entry *param)
3143 {
3144 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3145 
3146 	if (wmi_handle->ops->extract_mu_db_entry)
3147 		return wmi_handle->ops->extract_mu_db_entry(wmi_handle, evt_buf,
3148 			idx, param);
3149 
3150 	return QDF_STATUS_E_FAILURE;
3151 }
3152 
3153 /**
3154  * wmi_extract_mumimo_tx_count_ev_param() - extract mumimo tx count from event
3155  * @wmi_handle: wmi handle
3156  * @param evt_buf: pointer to event buffer
3157  * @param param: Pointer to hold mumimo tx count
3158  *
3159  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3160  */
3161 QDF_STATUS wmi_extract_mumimo_tx_count_ev_param(void *wmi_hdl, void *evt_buf,
3162 	wmi_host_peer_txmu_cnt_event *param)
3163 {
3164 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
3165 
3166 	if (wmi->ops->extract_mumimo_tx_count_ev_param)
3167 		return wmi->ops->extract_mumimo_tx_count_ev_param(wmi,
3168 			 evt_buf, param);
3169 
3170 	return QDF_STATUS_E_FAILURE;
3171 }
3172 
3173 /**
3174  * wmi_extract_peer_gid_userpos_list_ev_param() - extract peer userpos list
3175  *                                                from event
3176  * @wmi_handle: wmi handle
3177  * @param evt_buf: pointer to event buffer
3178  * @param param: Pointer to hold peer gid userposition list
3179  *
3180  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3181  */
3182 QDF_STATUS wmi_extract_peer_gid_userpos_list_ev_param(void *wmi_hdl,
3183 	void *evt_buf,
3184 	wmi_host_peer_gid_userpos_list_event *param)
3185 {
3186 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
3187 
3188 	if (wmi->ops->extract_peer_gid_userpos_list_ev_param)
3189 		return wmi->ops->extract_peer_gid_userpos_list_ev_param(wmi,
3190 			 evt_buf, param);
3191 
3192 	return QDF_STATUS_E_FAILURE;
3193 }
3194 
3195 /**
3196  * wmi_extract_esp_estimate_ev_param() - extract air time from event
3197  * @wmi_handle: wmi handle
3198  * @evt_buf: pointer to event buffer
3199  * @param: Pointer to hold esp event
3200  *
3201  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3202  */
3203 QDF_STATUS
3204 wmi_extract_esp_estimate_ev_param(void *wmi_hdl, void *evt_buf,
3205 				  struct esp_estimation_event *param)
3206 {
3207 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
3208 
3209 	if (wmi_handle->ops->extract_esp_estimation_ev_param)
3210 		return wmi_handle->ops->extract_esp_estimation_ev_param(
3211 				wmi_handle, evt_buf, param);
3212 
3213 	return QDF_STATUS_E_FAILURE;
3214 }
3215 
3216 /**
3217  * wmi_extract_gpio_input_ev_param() - extract gpio input param from event
3218  * @wmi_handle: wmi handle
3219  * @param evt_buf: pointer to event buffer
3220  * @param gpio_num: Pointer to hold gpio number
3221  *
3222  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3223  */
3224 QDF_STATUS wmi_extract_gpio_input_ev_param(void *wmi_hdl,
3225 	void *evt_buf, uint32_t *gpio_num)
3226 {
3227 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3228 
3229 	if (wmi_handle->ops->extract_gpio_input_ev_param)
3230 		return wmi_handle->ops->extract_gpio_input_ev_param(wmi_handle,
3231 			evt_buf, gpio_num);
3232 
3233 	return QDF_STATUS_E_FAILURE;
3234 }
3235 
3236 /**
3237  * wmi_extract_pdev_reserve_ast_ev_param() - extract reserve ast entry
3238  * param from event
3239  * @wmi_handle: wmi handle
3240  * @param evt_buf: pointer to event buffer
3241  * @param param: Pointer to hold reserve ast entry param
3242  *
3243  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3244  */
3245 QDF_STATUS wmi_extract_pdev_reserve_ast_ev_param(void *wmi_hdl,
3246 		void *evt_buf, struct wmi_host_proxy_ast_reserve_param *param)
3247 {
3248 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
3249 
3250 	if (wmi->ops->extract_pdev_reserve_ast_ev_param)
3251 		return wmi->ops->extract_pdev_reserve_ast_ev_param(wmi,
3252 			evt_buf, param);
3253 
3254 	return QDF_STATUS_E_FAILURE;
3255 }
3256 
3257 /**
3258  * wmi_extract_pdev_generic_buffer_ev_param() - extract pdev generic buffer
3259  * from event
3260  * @wmi_handle: wmi handle
3261  * @param evt_buf: pointer to event buffer
3262  * @param param: Pointer to generic buffer param
3263  *
3264  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3265  */
3266 QDF_STATUS wmi_extract_pdev_generic_buffer_ev_param(void *wmi_hdl,
3267 		void *evt_buf, wmi_host_pdev_generic_buffer_event *param)
3268 {
3269 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
3270 
3271 	if (wmi->ops->extract_pdev_generic_buffer_ev_param)
3272 		return wmi->ops->extract_pdev_generic_buffer_ev_param(wmi,
3273 				evt_buf, param);
3274 
3275 	return QDF_STATUS_E_FAILURE;
3276 
3277 }
3278 
3279 /**
3280  * wmi_extract_peer_ratecode_list_ev() - extract peer ratecode from event
3281  * @wmi_handle: wmi handle
3282  * @param evt_buf: pointer to event buffer
3283  * @param peer_mac: Pointer to hold peer mac address
3284  * @param rate_cap: Pointer to hold ratecode
3285  *
3286  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3287  */
3288 QDF_STATUS wmi_extract_peer_ratecode_list_ev(void *wmi_hdl, void *evt_buf,
3289 	uint8_t *peer_mac, wmi_sa_rate_cap *rate_cap)
3290 {
3291 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
3292 
3293 	if (wmi->ops->extract_peer_ratecode_list_ev)
3294 		return wmi->ops->extract_peer_ratecode_list_ev(wmi,
3295 			evt_buf, peer_mac, rate_cap);
3296 
3297 	return QDF_STATUS_E_FAILURE;
3298 
3299 }
3300 
3301 /**
3302  * wmi_extract_comb_phyerr() - extract comb phy error from event
3303  * @wmi_handle: wmi handle
3304  * @param evt_buf: pointer to event buffer
3305  * @param datalen: data length of event buffer
3306  * @param buf_offset: Pointer to hold value of current event buffer offset
3307  * post extraction
3308  * @param phyer: Pointer to hold phyerr
3309  *
3310  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3311  */
3312 QDF_STATUS wmi_extract_comb_phyerr(void *wmi_hdl, void *evt_buf,
3313 	uint16_t datalen, uint16_t *buf_offset, wmi_host_phyerr_t *phyerr)
3314 {
3315 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3316 
3317 	if (wmi_handle->ops->extract_comb_phyerr)
3318 		return wmi_handle->ops->extract_comb_phyerr(wmi_handle,
3319 		evt_buf, datalen, buf_offset, phyerr);
3320 
3321 	return QDF_STATUS_E_FAILURE;
3322 
3323 }
3324 
3325 /**
3326  * wmi_extract_single_phyerr() - extract single phy error from event
3327  * @wmi_handle: wmi handle
3328  * @param evt_buf: pointer to event buffer
3329  * @param datalen: data length of event buffer
3330  * @param buf_offset: Pointer to hold value of current event buffer offset
3331  * post extraction
3332  * @param phyerr: Pointer to hold phyerr
3333  *
3334  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3335  */
3336 QDF_STATUS wmi_extract_single_phyerr(void *wmi_hdl, void *evt_buf,
3337 	uint16_t datalen, uint16_t *buf_offset, wmi_host_phyerr_t *phyerr)
3338 {
3339 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3340 
3341 	if (wmi_handle->ops->extract_single_phyerr)
3342 		return wmi_handle->ops->extract_single_phyerr(wmi_handle,
3343 			evt_buf, datalen, buf_offset, phyerr);
3344 
3345 	return QDF_STATUS_E_FAILURE;
3346 
3347 }
3348 
3349 /**
3350  * wmi_extract_composite_phyerr() - extract composite phy error from event
3351  * @wmi_handle: wmi handle
3352  * @param evt_buf: pointer to event buffer
3353  * @param datalen: Length of event buffer
3354  * @param phyerr: Pointer to hold phy error
3355  *
3356  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3357  */
3358 QDF_STATUS wmi_extract_composite_phyerr(void *wmi_hdl, void *evt_buf,
3359 	uint16_t datalen, wmi_host_phyerr_t *phyerr)
3360 {
3361 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3362 
3363 	if (wmi_handle->ops->extract_composite_phyerr)
3364 		return wmi_handle->ops->extract_composite_phyerr(wmi_handle,
3365 			evt_buf, datalen, phyerr);
3366 
3367 	return QDF_STATUS_E_FAILURE;
3368 
3369 }
3370 
3371 /**
3372  * wmi_extract_stats_param() - extract all stats count from event
3373  * @wmi_handle: wmi handle
3374  * @param evt_buf: pointer to event buffer
3375  * @param stats_param: Pointer to hold stats count
3376  *
3377  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3378  */
3379 QDF_STATUS wmi_extract_stats_param(void *wmi_hdl, void *evt_buf,
3380 		   wmi_host_stats_event *stats_param)
3381 {
3382 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3383 
3384 	if (wmi_handle->ops->extract_all_stats_count)
3385 		return wmi_handle->ops->extract_all_stats_count(wmi_handle,
3386 			evt_buf, stats_param);
3387 
3388 	return QDF_STATUS_E_FAILURE;
3389 }
3390 
3391 /**
3392  * wmi_extract_pdev_stats() - extract pdev stats from event
3393  * @wmi_handle: wmi handle
3394  * @param evt_buf: pointer to event buffer
3395  * @param index: Index into pdev stats
3396  * @param pdev_stats: Pointer to hold pdev stats
3397  *
3398  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3399  */
3400 QDF_STATUS wmi_extract_pdev_stats(void *wmi_hdl, void *evt_buf,
3401 		 uint32_t index, wmi_host_pdev_stats *pdev_stats)
3402 {
3403 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3404 
3405 	if (wmi_handle->ops->extract_pdev_stats)
3406 		return wmi_handle->ops->extract_pdev_stats(wmi_handle,
3407 			evt_buf, index, pdev_stats);
3408 
3409 	return QDF_STATUS_E_FAILURE;
3410 }
3411 
3412 /**
3413  * extract_unit_test() - extract unit test from event
3414  * @wmi_handle: wmi handle
3415  * @param evt_buf: pointer to event buffer
3416  * @param unit_test: Pointer to hold unit-test header
3417  * @param maxspace: The amount of space in evt_buf
3418  *
3419  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3420  */
3421 QDF_STATUS wmi_extract_unit_test(void *wmi_hdl, void *evt_buf,
3422 		wmi_unit_test_event *unit_test, uint32_t maxspace)
3423 {
3424 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3425 
3426 	if (wmi_handle->ops->extract_unit_test)
3427 		return wmi_handle->ops->extract_unit_test(wmi_handle,
3428 			evt_buf, unit_test, maxspace);
3429 
3430 	return QDF_STATUS_E_FAILURE;
3431 }
3432 
3433 /**
3434  * wmi_extract_pdev_ext_stats() - extract extended pdev stats from event
3435  * @wmi_handle: wmi handle
3436  * @param evt_buf: pointer to event buffer
3437  * @param index: Index into extended pdev stats
3438  * @param pdev_ext_stats: Pointer to hold extended pdev stats
3439  *
3440  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3441  */
3442 QDF_STATUS wmi_extract_pdev_ext_stats(void *wmi_hdl, void *evt_buf,
3443 		 uint32_t index, wmi_host_pdev_ext_stats *pdev_ext_stats)
3444 {
3445 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3446 
3447 	if (wmi_handle->ops->extract_pdev_ext_stats)
3448 		return wmi_handle->ops->extract_pdev_ext_stats(wmi_handle,
3449 			evt_buf, index, pdev_ext_stats);
3450 
3451 	return QDF_STATUS_E_FAILURE;
3452 }
3453 
3454 /**
3455  * wmi_extract_peer_stats() - extract peer stats from event
3456  * @wmi_handle: wmi handle
3457  * @param evt_buf: pointer to event buffer
3458  * @param index: Index into peer stats
3459  * @param peer_stats: Pointer to hold peer stats
3460  *
3461  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3462  */
3463 QDF_STATUS wmi_extract_peer_stats(void *wmi_hdl, void *evt_buf,
3464 		 uint32_t index, wmi_host_peer_stats *peer_stats)
3465 {
3466 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3467 
3468 	if (wmi_handle->ops->extract_peer_stats)
3469 		return wmi_handle->ops->extract_peer_stats(wmi_handle,
3470 			evt_buf, index, peer_stats);
3471 
3472 	return QDF_STATUS_E_FAILURE;
3473 }
3474 
3475 /**
3476  * wmi_extract_vdev_stats() - extract vdev stats from event
3477  * @wmi_handle: wmi handle
3478  * @param evt_buf: pointer to event buffer
3479  * @param index: Index into vdev stats
3480  * @param vdev_stats: Pointer to hold vdev stats
3481  *
3482  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3483  */
3484 QDF_STATUS wmi_extract_vdev_stats(void *wmi_hdl, void *evt_buf,
3485 		 uint32_t index, wmi_host_vdev_stats *vdev_stats)
3486 {
3487 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3488 
3489 	if (wmi_handle->ops->extract_vdev_stats)
3490 		return wmi_handle->ops->extract_vdev_stats(wmi_handle,
3491 			evt_buf, index, vdev_stats);
3492 
3493 	return QDF_STATUS_E_FAILURE;
3494 }
3495 
3496 /**
3497  * wmi_extract_per_chain_rssi_stats() - extract rssi stats from event
3498  * @wmi_handle: wmi handle
3499  * @param evt_buf: pointer to event buffer
3500  * @param index: Index into rssi stats
3501  * @param rssi_stats: Pointer to hold rssi stats
3502  *
3503  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3504  */
3505 QDF_STATUS wmi_extract_per_chain_rssi_stats(void *wmi_hdl, void *evt_buf,
3506 	uint32_t index, struct wmi_host_per_chain_rssi_stats *rssi_stats)
3507 {
3508 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3509 
3510 	if (wmi_handle->ops->extract_per_chain_rssi_stats)
3511 		return wmi_handle->ops->extract_per_chain_rssi_stats(wmi_handle,
3512 			evt_buf, index, rssi_stats);
3513 
3514 	return QDF_STATUS_E_FAILURE;
3515 }
3516 
3517 /**
3518  * wmi_extract_rtt_hdr() - extract rtt header from event
3519  * @wmi_handle: wmi handle
3520  * @param evt_buf: pointer to event buffer
3521  * @param ev: Pointer to hold rtt header
3522  *
3523  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3524  */
3525 QDF_STATUS wmi_extract_rtt_hdr(void *wmi_hdl, void *evt_buf,
3526 	wmi_host_rtt_event_hdr *ev)
3527 {
3528 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3529 
3530 	if (wmi_handle->ops->extract_rtt_hdr)
3531 		return wmi_handle->ops->extract_rtt_hdr(wmi_handle,
3532 			evt_buf, ev);
3533 
3534 	return QDF_STATUS_E_FAILURE;
3535 }
3536 
3537 /**
3538  * wmi_extract_bcnflt_stats() - extract bcn fault stats from event
3539  * @wmi_handle: wmi handle
3540  * @param evt_buf: pointer to event buffer
3541  * @param index: Index into bcn fault stats
3542  * @param bcnflt_stats: Pointer to hold bcn fault stats
3543  *
3544  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3545  */
3546 QDF_STATUS wmi_extract_bcnflt_stats(void *wmi_hdl, void *evt_buf,
3547 		 uint32_t index, wmi_host_bcnflt_stats *bcnflt_stats)
3548 {
3549 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3550 
3551 	if (wmi_handle->ops->extract_bcnflt_stats)
3552 		return wmi_handle->ops->extract_bcnflt_stats(wmi_handle,
3553 			evt_buf, index, bcnflt_stats);
3554 
3555 	return QDF_STATUS_E_FAILURE;
3556 }
3557 
3558 /**
3559  * wmi_extract_rtt_ev() - extract rtt event
3560  * @wmi_handle: wmi handle
3561  * @param evt_buf: Pointer to event buffer
3562  * @param ev: Pointer to hold rtt event
3563  * @param hdump: Pointer to hold hex dump
3564  * @param hdump_len: hex dump length
3565  *
3566  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3567  */
3568 QDF_STATUS wmi_extract_rtt_ev(void *wmi_hdl, void *evt_buf,
3569 	wmi_host_rtt_meas_event *ev, uint8_t *hdump, uint16_t hdump_len)
3570 {
3571 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3572 
3573 	if (wmi_handle->ops->extract_rtt_ev)
3574 		return wmi_handle->ops->extract_rtt_ev(wmi_handle,
3575 			evt_buf, ev, hdump, hdump_len);
3576 
3577 	return QDF_STATUS_E_FAILURE;
3578 }
3579 
3580 /**
3581  * wmi_extract_peer_extd_stats() - extract extended peer stats from event
3582  * @wmi_handle: wmi handle
3583  * @param evt_buf: pointer to event buffer
3584  * @param index: Index into extended peer stats
3585  * @param peer_extd_stats: Pointer to hold extended peer stats
3586  *
3587  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3588  */
3589 QDF_STATUS wmi_extract_peer_extd_stats(void *wmi_hdl, void *evt_buf,
3590 		 uint32_t index, wmi_host_peer_extd_stats *peer_extd_stats)
3591 {
3592 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3593 
3594 	if (wmi_handle->ops->extract_peer_extd_stats)
3595 		return wmi_handle->ops->extract_peer_extd_stats(wmi_handle,
3596 			evt_buf, index, peer_extd_stats);
3597 
3598 	return QDF_STATUS_E_FAILURE;
3599 }
3600 
3601 QDF_STATUS wmi_extract_peer_retry_stats(void *wmi_hdl, void *evt_buf,
3602 	uint32_t index, struct wmi_host_peer_retry_stats *peer_retry_stats)
3603 {
3604 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
3605 
3606 	if (wmi_handle->ops->extract_peer_retry_stats)
3607 		return wmi_handle->ops->extract_peer_retry_stats(wmi_handle,
3608 			evt_buf, index, peer_retry_stats);
3609 
3610 	return QDF_STATUS_E_FAILURE;
3611 }
3612 
3613 /**
3614  * wmi_extract_peer_adv_stats() - extract advance (extd2) peer stats from event
3615  * @wmi_handle: wmi handle
3616  * @param evt_buf: pointer to event buffer
3617  * @param peer_adv_stats: Pointer to hold extended peer stats
3618  *
3619  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3620  */
3621 QDF_STATUS wmi_extract_peer_adv_stats(wmi_unified_t wmi_handle, void *evt_buf,
3622 				      struct wmi_host_peer_adv_stats
3623 				      *peer_adv_stats)
3624 {
3625 	if (wmi_handle->ops->extract_peer_adv_stats)
3626 		return wmi_handle->ops->extract_peer_adv_stats(wmi_handle,
3627 			evt_buf, peer_adv_stats);
3628 
3629 	return QDF_STATUS_E_FAILURE;
3630 }
3631 
3632 /**
3633  * wmi_extract_rtt_error_report_ev() - extract rtt error report from event
3634  * @wmi_handle: wmi handle
3635  * @param evt_buf: pointer to event buffer
3636  * @param wds_ev: Pointer to hold rtt error report
3637  *
3638  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3639  */
3640 QDF_STATUS wmi_extract_rtt_error_report_ev(void *wmi_hdl, void *evt_buf,
3641 	wmi_host_rtt_error_report_event *ev)
3642 {
3643 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3644 
3645 	if (wmi_handle->ops->extract_rtt_error_report_ev)
3646 		return wmi_handle->ops->extract_rtt_error_report_ev(wmi_handle,
3647 			evt_buf, ev);
3648 
3649 	return QDF_STATUS_E_FAILURE;
3650 }
3651 
3652 /**
3653  * wmi_extract_chan_stats() - extract chan stats from event
3654  * @wmi_handle: wmi handle
3655  * @param evt_buf: pointer to event buffer
3656  * @param index: Index into chan stats
3657  * @param chanstats: Pointer to hold chan stats
3658  *
3659  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3660  */
3661 QDF_STATUS wmi_extract_chan_stats(void *wmi_hdl, void *evt_buf,
3662 		 uint32_t index, wmi_host_chan_stats *chan_stats)
3663 {
3664 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3665 
3666 	if (wmi_handle->ops->extract_chan_stats)
3667 		return wmi_handle->ops->extract_chan_stats(wmi_handle,
3668 			evt_buf, index, chan_stats);
3669 
3670 	return QDF_STATUS_E_FAILURE;
3671 }
3672 
3673 /**
3674  * wmi_extract_thermal_stats() - extract thermal stats from event
3675  * @wmi_handle: wmi handle
3676  * @param evt_buf: Pointer to event buffer
3677  * @param temp: Pointer to hold extracted temperature
3678  * @param level: Pointer to hold extracted level
3679  * @param pdev_id: Pointer to hold extracted pdev_id
3680  *
3681  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3682  */
3683 QDF_STATUS wmi_extract_thermal_stats(void *wmi_hdl, void *evt_buf,
3684 	uint32_t *temp, uint32_t *level, uint32_t *pdev_id)
3685 {
3686 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3687 
3688 	if (wmi_handle->ops->extract_thermal_stats)
3689 		return wmi_handle->ops->extract_thermal_stats(wmi_handle,
3690 			evt_buf, temp, level, pdev_id);
3691 
3692 	return QDF_STATUS_E_FAILURE;
3693 }
3694 
3695 /**
3696  * wmi_extract_profile_ctx() - extract profile context from event
3697  * @wmi_handle: wmi handle
3698  * @param evt_buf: pointer to event buffer
3699  * @param profile_ctx: Pointer to hold profile context
3700  *
3701  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3702  */
3703 QDF_STATUS wmi_extract_profile_ctx(void *wmi_hdl, void *evt_buf,
3704 			    wmi_host_wlan_profile_ctx_t *profile_ctx)
3705 {
3706 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3707 
3708 	if (wmi_handle->ops->extract_profile_ctx)
3709 		return wmi_handle->ops->extract_profile_ctx(wmi_handle,
3710 			evt_buf, profile_ctx);
3711 
3712 	return QDF_STATUS_E_FAILURE;
3713 }
3714 
3715 /**
3716  * wmi_extract_thermal_level_stats() - extract thermal level stats from
3717  * event
3718  * @wmi_handle: wmi handle
3719  * @param evt_buf: pointer to event buffer
3720  * @param idx: Index to level stats
3721  * @param levelcount: Pointer to hold levelcount
3722  * @param dccount: Pointer to hold dccount
3723  *
3724  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3725  */
3726 QDF_STATUS wmi_extract_thermal_level_stats(void *wmi_hdl, void *evt_buf,
3727 	uint8_t idx, uint32_t *levelcount, uint32_t *dccount)
3728 {
3729 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3730 
3731 	if (wmi_handle->ops->extract_thermal_level_stats)
3732 		return wmi_handle->ops->extract_thermal_level_stats(wmi_handle,
3733 			evt_buf, idx, levelcount, dccount);
3734 
3735 	return QDF_STATUS_E_FAILURE;
3736 }
3737 
3738 /**
3739  * wmi_extract_profile_data() - extract profile data from event
3740  * @wmi_handle: wmi handle
3741  * @param evt_buf: pointer to event buffer
3742  * @idx index: index of profile data
3743  * @param profile_data: Pointer to hold profile data
3744  *
3745  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3746  */
3747 QDF_STATUS wmi_extract_profile_data(void *wmi_hdl, void *evt_buf, uint8_t idx,
3748 			       wmi_host_wlan_profile_t *profile_data)
3749 {
3750 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3751 
3752 	if (wmi_handle->ops->extract_profile_data)
3753 		return wmi_handle->ops->extract_profile_data(wmi_handle,
3754 			evt_buf, idx, profile_data);
3755 
3756 	return QDF_STATUS_E_FAILURE;
3757 }
3758 
3759 /**
3760  * wmi_extract_bss_chan_info_event() - extract bss channel information
3761  * from event
3762  * @wmi_handle: wmi handle
3763  * @param evt_buf: pointer to event buffer
3764  * @param bss_chan_info: Pointer to hold bss channel information
3765  *
3766  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3767  */
3768 QDF_STATUS wmi_extract_bss_chan_info_event(void *wmi_hdl, void *evt_buf,
3769 		    wmi_host_pdev_bss_chan_info_event *bss_chan_info)
3770 {
3771 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3772 
3773 	if (wmi_handle->ops->extract_bss_chan_info_event)
3774 		return wmi_handle->ops->extract_bss_chan_info_event(wmi_handle,
3775 		evt_buf, bss_chan_info);
3776 
3777 	return QDF_STATUS_E_FAILURE;
3778 }
3779 
3780 /**
3781  * wmi_extract_tx_data_traffic_ctrl_ev() - extract tx data traffic control
3782  * from event
3783  * @wmi_handle: wmi handle
3784  * @param evt_buf: pointer to event buffer
3785  * @param ev: Pointer to hold data traffic control
3786  *
3787  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3788  */
3789 QDF_STATUS wmi_extract_tx_data_traffic_ctrl_ev(void *wmi_hdl, void *evt_buf,
3790 			wmi_host_tx_data_traffic_ctrl_event *ev)
3791 {
3792 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
3793 
3794 	if (wmi->ops->extract_tx_data_traffic_ctrl_ev)
3795 		return wmi->ops->extract_tx_data_traffic_ctrl_ev(wmi,
3796 				evt_buf, ev);
3797 
3798 	return QDF_STATUS_E_FAILURE;
3799 }
3800 
3801 /**
3802  * wmi_extract_vdev_extd_stats() - extract extended vdev stats from event
3803  * @wmi_handle: wmi handle
3804  * @param evt_buf: pointer to event buffer
3805  * @param index: Index into extended vdev stats
3806  * @param vdev_extd_stats: Pointer to hold extended vdev stats
3807  *
3808  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3809  */
3810 QDF_STATUS wmi_extract_vdev_extd_stats(void *wmi_hdl, void *evt_buf,
3811 		uint32_t index, wmi_host_vdev_extd_stats *vdev_extd_stats)
3812 {
3813 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3814 
3815 	if (wmi_handle->ops->extract_vdev_extd_stats)
3816 		return wmi_handle->ops->extract_vdev_extd_stats(wmi_handle,
3817 				evt_buf, index, vdev_extd_stats);
3818 	return QDF_STATUS_E_FAILURE;
3819 }
3820 
3821 /**
3822  * wmi_extract_bcn_stats() - extract beacon stats from event
3823  * @wmi_handle: wmi handle
3824  * @evt_buf: pointer to event buffer
3825  * @index: Index into beacon stats
3826  * @vdev_bcn_stats: Pointer to hold beacon stats
3827  *
3828  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3829  */
3830 QDF_STATUS wmi_extract_bcn_stats(void *wmi_hdl, void *evt_buf,
3831 		uint32_t index, wmi_host_bcn_stats *vdev_bcn_stats)
3832 {
3833 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3834 
3835 	if (wmi_handle->ops->extract_bcn_stats)
3836 		return wmi_handle->ops->extract_bcn_stats(wmi_handle,
3837 				evt_buf, index, vdev_bcn_stats);
3838 	return QDF_STATUS_E_FAILURE;
3839 }
3840 
3841 /**
3842  * wmi_extract_vdev_nac_rssi_stats() - extract NAC_RSSI stats from event
3843  * @wmi_handle: wmi handle
3844  * @param evt_buf: pointer to event buffer
3845  * @param vdev_extd_stats: Pointer to hold nac rssi stats
3846  *
3847  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
3848  */
3849 QDF_STATUS wmi_extract_vdev_nac_rssi_stats(void *wmi_hdl, void *evt_buf,
3850 		 struct wmi_host_vdev_nac_rssi_event *vdev_nac_rssi_stats)
3851 {
3852 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3853 
3854 	if (wmi_handle->ops->extract_vdev_nac_rssi_stats)
3855 		return wmi_handle->ops->extract_vdev_nac_rssi_stats(wmi_handle,
3856 				evt_buf, vdev_nac_rssi_stats);
3857 
3858 	return QDF_STATUS_E_FAILURE;
3859 }
3860 
3861 /**
3862  * wmi_unified_send_power_dbg_cmd() - send power debug commands
3863  * @wmi_handle: wmi handle
3864  * @param: wmi power debug parameter
3865  *
3866  * Send WMI_POWER_DEBUG_CMDID parameters to fw.
3867  *
3868  * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
3869  */
3870 QDF_STATUS wmi_unified_send_power_dbg_cmd(void *wmi_hdl,
3871 				struct wmi_power_dbg_params *param)
3872 {
3873 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3874 
3875 	if (wmi_handle->ops->send_power_dbg_cmd)
3876 		return wmi_handle->ops->send_power_dbg_cmd(wmi_handle,
3877 				  param);
3878 
3879 	return QDF_STATUS_E_FAILURE;
3880 }
3881 
3882 /*
3883  * wmi_unified_send_btcoex_wlan_priority_cmd() - send btcoex priority commands
3884  * @wmi_handle: wmi handle
3885  * @param :     wmi btcoex cfg params
3886  *
3887  * Send WMI_BTCOEX_CFG_CMDID parameters to fw.
3888  *
3889  * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
3890  */
3891 QDF_STATUS wmi_unified_send_btcoex_wlan_priority_cmd(void *wmi_hdl,
3892 				struct btcoex_cfg_params *param)
3893 {
3894 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
3895 
3896 	if (wmi->ops->send_btcoex_wlan_priority_cmd)
3897 		return wmi->ops->send_btcoex_wlan_priority_cmd(wmi,
3898 				  param);
3899 
3900 	return QDF_STATUS_E_FAILURE;
3901 }
3902 /**
3903  *  wmi_unified_send_btcoex_duty_cycle_cmd() - send btcoex duty cycle commands
3904  * @wmi_handle: wmi handle
3905  * @param:      wmi btcoex cfg params
3906  *
3907  * Send WMI_BTCOEX_CFG_CMDID parameters to fw.
3908  *
3909  * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
3910  */
3911 QDF_STATUS wmi_unified_send_btcoex_duty_cycle_cmd(void *wmi_hdl,
3912 				struct btcoex_cfg_params *param)
3913 {
3914 	wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
3915 
3916 	if (wmi->ops->send_btcoex_duty_cycle_cmd)
3917 		return wmi->ops->send_btcoex_duty_cycle_cmd(wmi,
3918 				param);
3919 
3920 	return QDF_STATUS_E_FAILURE;
3921 }
3922 
3923 /*
3924  * wmi_extract_service_ready_ext() - extract extended service ready
3925  * @wmi_handle: wmi handle
3926  * @param: wmi power debug parameter
3927  *
3928  *
3929  * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
3930  */
3931 QDF_STATUS wmi_extract_service_ready_ext(void *wmi_hdl, uint8_t *evt_buf,
3932 		struct wlan_psoc_host_service_ext_param *param)
3933 {
3934 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3935 
3936 	if (wmi_handle->ops->extract_service_ready_ext)
3937 		return wmi_handle->ops->extract_service_ready_ext(wmi_handle,
3938 				evt_buf, param);
3939 
3940 	return QDF_STATUS_E_FAILURE;
3941 }
3942 
3943 /**
3944  * wmi_extract_sar_cap_service_ready_ext() -
3945  *	 extract sar cap from service ready event
3946  * @wmi_handle: wmi handle
3947  * @evt_buf: pointer to event buffer
3948  * @ext_param: extended target info
3949  *
3950  * Return: QDF_STATUS_SUCCESS for success or error code
3951  */
3952 QDF_STATUS wmi_extract_sar_cap_service_ready_ext(
3953 			void *wmi_hdl,
3954 			uint8_t *evt_buf,
3955 			struct wlan_psoc_host_service_ext_param *ext_param)
3956 {
3957 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3958 
3959 	if (wmi_handle->ops->extract_sar_cap_service_ready_ext)
3960 		return wmi_handle->ops->extract_sar_cap_service_ready_ext(
3961 				wmi_handle,
3962 				evt_buf, ext_param);
3963 
3964 	return QDF_STATUS_E_FAILURE;
3965 }
3966 
3967 /**
3968  * wmi_extract_hw_mode_cap_service_ready_ext() -
3969  *       extract HW mode cap from service ready event
3970  * @wmi_handle: wmi handle
3971  * @param evt_buf: pointer to event buffer
3972  * @param param: Pointer to hold evt buf
3973  * @param hw_mode_idx: hw mode idx should be less than num_mode
3974  *
3975  * Return: QDF_STATUS_SUCCESS for success or error code
3976  */
3977 QDF_STATUS wmi_extract_hw_mode_cap_service_ready_ext(
3978 			void *wmi_hdl,
3979 			uint8_t *evt_buf, uint8_t hw_mode_idx,
3980 			struct wlan_psoc_host_hw_mode_caps *param)
3981 {
3982 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
3983 
3984 	if (wmi_handle->ops->extract_hw_mode_cap_service_ready_ext)
3985 		return wmi_handle->ops->extract_hw_mode_cap_service_ready_ext(
3986 				wmi_handle,
3987 				evt_buf, hw_mode_idx, param);
3988 
3989 	return QDF_STATUS_E_FAILURE;
3990 }
3991 /**
3992  * wmi_extract_mac_phy_cap_service_ready_ext() -
3993  *       extract MAC phy cap from service ready event
3994  * @wmi_handle: wmi handle
3995  * @param evt_buf: pointer to event buffer
3996  * @param hw_mode_id: hw mode id of hw_mode_caps
3997  * @param phy_id: phy_id within hw_mode_cap
3998  * @param param: pointer to mac phy caps structure to hold the values from event
3999  *
4000  * Return: QDF_STATUS_SUCCESS for success or error code
4001  */
4002 QDF_STATUS wmi_extract_mac_phy_cap_service_ready_ext(
4003 			void *wmi_hdl,
4004 			uint8_t *evt_buf,
4005 			uint8_t hw_mode_id,
4006 			uint8_t phy_id,
4007 			struct wlan_psoc_host_mac_phy_caps *param)
4008 {
4009 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
4010 
4011 	if (wmi_handle->ops->extract_mac_phy_cap_service_ready_ext)
4012 		return wmi_handle->ops->extract_mac_phy_cap_service_ready_ext(
4013 				wmi_handle,
4014 				evt_buf, hw_mode_id, phy_id, param);
4015 
4016 	return QDF_STATUS_E_FAILURE;
4017 }
4018 
4019 /**
4020  * wmi_extract_reg_cap_service_ready_ext() -
4021  *       extract REG cap from service ready event
4022  * @wmi_handle: wmi handle
4023  * @param evt_buf: pointer to event buffer
4024  * @param param: Pointer to hold evt buf
4025  * @param phy_idx: phy idx should be less than num_mode
4026  *
4027  * Return: QDF_STATUS_SUCCESS for success or error code
4028  */
4029 QDF_STATUS wmi_extract_reg_cap_service_ready_ext(
4030 			void *wmi_hdl,
4031 			uint8_t *evt_buf, uint8_t phy_idx,
4032 			struct wlan_psoc_host_hal_reg_capabilities_ext *param)
4033 {
4034 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
4035 
4036 	if (wmi_handle->ops->extract_reg_cap_service_ready_ext)
4037 		return wmi_handle->ops->extract_reg_cap_service_ready_ext(
4038 				wmi_handle,
4039 				evt_buf, phy_idx, param);
4040 
4041 	return QDF_STATUS_E_FAILURE;
4042 }
4043 
4044 QDF_STATUS wmi_extract_dbr_ring_cap_service_ready_ext(
4045 			void *wmi_hdl,
4046 			uint8_t *evt_buf, uint8_t idx,
4047 			struct wlan_psoc_host_dbr_ring_caps *param)
4048 {
4049 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
4050 
4051 	if (wmi_handle->ops->extract_dbr_ring_cap_service_ready_ext)
4052 		return wmi_handle->ops->extract_dbr_ring_cap_service_ready_ext(
4053 				wmi_handle,
4054 				evt_buf, idx, param);
4055 
4056 	return QDF_STATUS_E_FAILURE;
4057 }
4058 
4059 QDF_STATUS wmi_extract_spectral_scaling_params_service_ready_ext(
4060 			void *wmi_hdl,
4061 			uint8_t *evt_buf, uint8_t idx,
4062 			struct wlan_psoc_host_spectral_scaling_params *param)
4063 {
4064 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
4065 
4066 	if (wmi_handle->ops->extract_scaling_params_service_ready_ext)
4067 		return wmi_handle->ops->extract_scaling_params_service_ready_ext
4068 				(wmi_handle, evt_buf, idx, param);
4069 
4070 	return QDF_STATUS_E_FAILURE;
4071 }
4072 
4073 /**
4074  * wmi_extract_pdev_utf_event() -
4075  *       extract UTF data from pdev utf event
4076  * @wmi_handle: wmi handle
4077  * @param evt_buf: pointer to event buffer
4078  * @param param: Pointer to hold evt buf
4079  *
4080  * Return: QDF_STATUS_SUCCESS for success or error code
4081  */
4082 QDF_STATUS wmi_extract_pdev_utf_event(void *wmi_hdl,
4083 				      uint8_t *evt_buf,
4084 				      struct wmi_host_pdev_utf_event *param)
4085 {
4086 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
4087 
4088 	if (wmi_handle->ops->extract_pdev_utf_event)
4089 		return wmi_handle->ops->extract_pdev_utf_event(
4090 				wmi_handle,
4091 				evt_buf, param);
4092 
4093 	return QDF_STATUS_E_FAILURE;
4094 }
4095 
4096 /**
4097  * wmi_extract_pdev_qvit_event() -
4098  *       extract UTF data from pdev qvit event
4099  * @wmi_handle: wmi handle
4100  * @param evt_buf: pointer to event buffer
4101  * @param param: Pointer to hold evt buf
4102  *
4103  * Return: QDF_STATUS_SUCCESS for success or error code
4104  */
4105 QDF_STATUS wmi_extract_pdev_qvit_event(void *wmi_hdl,
4106 				      uint8_t *evt_buf,
4107 				      struct wmi_host_pdev_qvit_event *param)
4108 {
4109 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
4110 
4111 	if (wmi_handle->ops->extract_pdev_qvit_event)
4112 		return wmi_handle->ops->extract_pdev_qvit_event(
4113 				wmi_handle,
4114 				evt_buf, param);
4115 
4116 	return QDF_STATUS_E_FAILURE;
4117 }
4118 
4119 /**
4120  * wmi_unified_send_coex_ver_cfg_cmd() - send coex ver cfg command
4121  * @wmi_handle: wmi handle
4122  * @param:      wmi coex ver cfg params
4123  *
4124  * Send WMI_COEX_VERSION_CFG_CMID parameters to fw.
4125  *
4126  * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
4127  */
4128 QDF_STATUS wmi_unified_send_coex_ver_cfg_cmd(void *wmi_hdl,
4129 				coex_ver_cfg_t *param)
4130 {
4131 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
4132 
4133 	if (wmi_handle->ops->send_coex_ver_cfg_cmd)
4134 		return wmi_handle->ops->send_coex_ver_cfg_cmd(wmi_handle,
4135 			param);
4136 
4137 	return QDF_STATUS_E_FAILURE;
4138 }
4139 
4140 /**
4141  * wmi_unified_send_coex_config_cmd() - send coex ver cfg command
4142  * @wmi_handle: wmi handle
4143  * @param:      wmi coex cfg cmd params
4144  *
4145  * Send WMI_COEX_CFG_CMD parameters to fw.
4146  *
4147  * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
4148  */
4149 QDF_STATUS wmi_unified_send_coex_config_cmd(void *wmi_hdl,
4150 					    struct coex_config_params *param)
4151 {
4152 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
4153 
4154 	if (wmi_handle->ops->send_coex_config_cmd)
4155 		return wmi_handle->ops->send_coex_config_cmd(wmi_handle,
4156 			param);
4157 
4158 	return QDF_STATUS_E_FAILURE;
4159 }
4160 
4161 QDF_STATUS wmi_unified_send_request_get_rcpi_cmd(void *wmi_hdl,
4162 					struct rcpi_req *get_rcpi_param)
4163 {
4164 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
4165 
4166 	if (wmi_handle->ops->send_get_rcpi_cmd)
4167 		return wmi_handle->ops->send_get_rcpi_cmd(wmi_handle,
4168 			   get_rcpi_param);
4169 
4170 	return QDF_STATUS_E_FAILURE;
4171 }
4172 
4173 QDF_STATUS wmi_extract_rcpi_response_event(void *wmi_hdl, void *evt_buf,
4174 					   struct rcpi_res *res)
4175 {
4176 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
4177 	struct wmi_ops *ops = wmi_handle->ops;
4178 
4179 	if (ops->extract_rcpi_response_event)
4180 		return ops->extract_rcpi_response_event(wmi_handle, evt_buf,
4181 							res);
4182 
4183 	return QDF_STATUS_E_FAILURE;
4184 }
4185 
4186 QDF_STATUS
4187 wmi_unified_dfs_phyerr_offload_en_cmd(void *wmi_hdl,
4188 				      uint32_t pdev_id)
4189 {
4190 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
4191 
4192 	if (wmi_handle->ops->send_dfs_phyerr_offload_en_cmd)
4193 		return wmi_handle->ops->send_dfs_phyerr_offload_en_cmd(
4194 				wmi_handle, pdev_id);
4195 
4196 	return QDF_STATUS_E_FAILURE;
4197 }
4198 
4199 #ifdef QCA_SUPPORT_AGILE_DFS
4200 QDF_STATUS
4201 wmi_unified_send_vdev_adfs_ch_cfg_cmd(void *wmi_hdl,
4202 				      struct vdev_adfs_ch_cfg_params *param)
4203 {
4204 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
4205 
4206 	if (wmi_handle->ops->send_adfs_ch_cfg_cmd)
4207 		return wmi_handle->ops->send_adfs_ch_cfg_cmd(
4208 				wmi_handle,
4209 				param);
4210 	return QDF_STATUS_E_FAILURE;
4211 }
4212 
4213 QDF_STATUS
4214 wmi_unified_send_vdev_adfs_ocac_abort_cmd(void *wmi_hdl,
4215 					  struct vdev_adfs_abort_params *param)
4216 {
4217 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
4218 
4219 	if (wmi_handle->ops->send_adfs_ocac_abort_cmd)
4220 		return wmi_handle->ops->send_adfs_ocac_abort_cmd(
4221 				wmi_handle,
4222 				param);
4223 	return QDF_STATUS_E_FAILURE;
4224 }
4225 #endif
4226 
4227 QDF_STATUS
4228 wmi_unified_dfs_phyerr_offload_dis_cmd(void *wmi_hdl,
4229 				       uint32_t pdev_id)
4230 {
4231 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
4232 
4233 	if (wmi_handle->ops->send_dfs_phyerr_offload_dis_cmd)
4234 		return wmi_handle->ops->send_dfs_phyerr_offload_dis_cmd(
4235 				wmi_handle, pdev_id);
4236 
4237 	return QDF_STATUS_E_FAILURE;
4238 }
4239 
4240 /*
4241  * wmi_extract_chainmask_tables_tlv() - extract chain mask tables
4242  * @wmi_handle: wmi handle
4243  * @evt_buf: pointer to event buffer.
4244  * @chainmask_table: pointer to struct wlan_psoc_host_chainmask_table
4245  *
4246  *
4247  * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
4248  */
4249 QDF_STATUS wmi_extract_chainmask_tables(void *wmi_hdl, uint8_t *evt_buf,
4250 		struct wlan_psoc_host_chainmask_table *chainmask_table)
4251 {
4252 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
4253 
4254 	if (wmi_handle->ops->extract_chainmask_tables)
4255 		return wmi_handle->ops->extract_chainmask_tables(wmi_handle,
4256 				evt_buf, chainmask_table);
4257 
4258 	return QDF_STATUS_E_FAILURE;
4259 }
4260 /**
4261  *  wmi_unified_set_country_cmd_send() - WMI set country function
4262  *  @param wmi_handle      : handle to WMI.
4263  *  @param param    : pointer to hold set country cmd parameter
4264  *
4265  *  Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
4266  */
4267 QDF_STATUS wmi_unified_set_country_cmd_send(void *wmi_hdl,
4268 				struct set_country *param)
4269 {
4270 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
4271 
4272 	if (wmi_handle->ops->send_set_country_cmd)
4273 		return wmi_handle->ops->send_set_country_cmd(wmi_handle,
4274 				  param);
4275 
4276 	return QDF_STATUS_E_FAILURE;
4277 }
4278 
4279 #ifdef WLAN_FEATURE_ACTION_OUI
4280 QDF_STATUS
4281 wmi_unified_send_action_oui_cmd(void *wmi_hdl,
4282 				struct action_oui_request *req)
4283 {
4284 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
4285 
4286 	if (wmi_handle->ops->send_action_oui_cmd)
4287 		return wmi_handle->ops->send_action_oui_cmd(wmi_handle,
4288 							    req);
4289 
4290 	return QDF_STATUS_E_FAILURE;
4291 }
4292 #endif
4293 
4294 /**
4295  * wmi_unified_send_wds_entry_list_cmd() - WMI function to get list of
4296  *  wds entries from FW
4297  * @wmi_handle: wmi handle
4298  *
4299  * Send WMI_PDEV_WDS_ENTRY_LIST_CMDID parameters to fw.
4300  *
4301  * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
4302  */
4303 QDF_STATUS wmi_unified_send_dump_wds_table_cmd(void *wmi_hdl)
4304 {
4305 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
4306 
4307 	if (wmi_handle->ops->send_wds_entry_list_cmd)
4308 		return wmi_handle->ops->send_wds_entry_list_cmd(wmi_handle);
4309 
4310 	return QDF_STATUS_E_FAILURE;
4311 }
4312 
4313 /**
4314  * wmi_extract_wds_entry - api to extract wds entry
4315  * @wmi_handle: wma handle
4316  * @evt_buf: pointer to event buffer
4317  * @wds_entry: wds entry
4318  * @idx: index to point wds entry in event buffer
4319  *
4320  * Return: QDF_STATUS_SUCCESS for successful event parse
4321  *         else QDF_STATUS_E_INVAL or QDF_STATUS_E_FAILURE
4322  */
4323 QDF_STATUS wmi_extract_wds_entry(void *wmi_hdl, uint8_t *evt_buf,
4324 			struct wdsentry *wds_entry,
4325 			u_int32_t idx)
4326 {
4327 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
4328 
4329 	if (wmi_handle->ops->extract_wds_entry)
4330 		return wmi_handle->ops->extract_wds_entry(wmi_handle,
4331 						evt_buf, wds_entry, idx);
4332 
4333 	return QDF_STATUS_E_FAILURE;
4334 }
4335 qdf_export_symbol(wmi_extract_wds_entry);
4336 
4337 QDF_STATUS wmi_unified_send_obss_detection_cfg_cmd(void *wmi_hdl,
4338 		struct wmi_obss_detection_cfg_param *obss_cfg_param)
4339 {
4340 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
4341 
4342 	if (wmi_handle->ops->send_obss_detection_cfg_cmd)
4343 		return wmi_handle->ops->send_obss_detection_cfg_cmd(wmi_handle,
4344 				obss_cfg_param);
4345 
4346 	return QDF_STATUS_E_FAILURE;
4347 }
4348 
4349 QDF_STATUS wmi_unified_extract_obss_detection_info(void *wmi_hdl,
4350 						   uint8_t *data,
4351 						   struct wmi_obss_detect_info
4352 						   *info)
4353 {
4354 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
4355 
4356 	if (wmi_handle->ops->extract_obss_detection_info)
4357 		return wmi_handle->ops->extract_obss_detection_info(data, info);
4358 
4359 	return QDF_STATUS_E_FAILURE;
4360 }
4361 
4362 #ifdef WLAN_SUPPORT_GREEN_AP
4363 QDF_STATUS wmi_extract_green_ap_egap_status_info(
4364 		void *wmi_hdl, uint8_t *evt_buf,
4365 		struct wlan_green_ap_egap_status_info *egap_status_info_params)
4366 {
4367 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
4368 
4369 	if (wmi_handle->ops->extract_green_ap_egap_status_info)
4370 		return wmi_handle->ops->extract_green_ap_egap_status_info(
4371 				evt_buf, egap_status_info_params);
4372 
4373 	return QDF_STATUS_E_FAILURE;
4374 }
4375 #endif
4376 
4377 wmi_host_channel_width wmi_get_ch_width_from_phy_mode(void *wmi_hdl,
4378 					WMI_HOST_WLAN_PHY_MODE phymode)
4379 {
4380 	/*
4381 	 * this API does translation between host only strcutres, hence
4382 	 * does not need separate TLV, non-TLV definitions
4383 	 */
4384 
4385 	if (phymode >= WMI_HOST_MODE_11A && phymode < WMI_HOST_MODE_MAX)
4386 		return mode_to_width[phymode];
4387 	else
4388 		return WMI_HOST_CHAN_WIDTH_20;
4389 }
4390 
4391 #ifdef QCA_SUPPORT_CP_STATS
4392 QDF_STATUS wmi_extract_cca_stats(wmi_unified_t wmi_handle, void *evt_buf,
4393 				 struct wmi_host_congestion_stats *stats)
4394 {
4395 	if (wmi_handle->ops->extract_cca_stats)
4396 		return wmi_handle->ops->extract_cca_stats(wmi_handle, evt_buf,
4397 							  stats);
4398 
4399 	return QDF_STATUS_E_FAILURE;
4400 }
4401 #endif /* QCA_SUPPORT_CP_STATS */
4402 
4403 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
4404 QDF_STATUS
4405 wmi_unified_dfs_send_avg_params_cmd(void *wmi_hdl,
4406 				    struct dfs_radar_found_params *params)
4407 {
4408 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
4409 
4410 	if (wmi_handle->ops->send_dfs_average_radar_params_cmd)
4411 		return wmi_handle->ops->send_dfs_average_radar_params_cmd(
4412 			wmi_handle, params);
4413 
4414 	return QDF_STATUS_E_FAILURE;
4415 }
4416 
4417 QDF_STATUS wmi_extract_dfs_status_from_fw(void *wmi_hdl, void *evt_buf,
4418 					  uint32_t *dfs_status_check)
4419 {
4420 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
4421 
4422 	if (wmi_handle->ops->extract_dfs_status_from_fw)
4423 		return wmi_handle->ops->extract_dfs_status_from_fw(wmi_handle,
4424 				evt_buf, dfs_status_check);
4425 
4426 	return QDF_STATUS_E_FAILURE;
4427 }
4428 #endif
4429 
4430 #ifdef OL_ATH_SMART_LOGGING
4431 QDF_STATUS wmi_unified_send_smart_logging_enable_cmd(void *wmi_hdl,
4432 						     uint32_t param)
4433 {
4434 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
4435 
4436 	if (wmi_handle->ops->send_smart_logging_enable_cmd)
4437 		return wmi_handle->ops->send_smart_logging_enable_cmd(
4438 				wmi_handle,
4439 				param);
4440 
4441 	return QDF_STATUS_E_FAILURE;
4442 }
4443 
4444 QDF_STATUS
4445 wmi_unified_send_smart_logging_fatal_cmd(void *wmi_hdl,
4446 					 struct wmi_debug_fatal_events *param)
4447 {
4448 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
4449 
4450 	if (wmi_handle->ops->send_smart_logging_fatal_cmd)
4451 		return wmi_handle->ops->send_smart_logging_fatal_cmd(wmi_handle,
4452 			param);
4453 
4454 	return QDF_STATUS_E_FAILURE;
4455 }
4456 
4457 QDF_STATUS wmi_extract_smartlog_ev(void *wmi_hdl,
4458 				   void *evt_buf,
4459 				   struct wmi_debug_fatal_events *ev)
4460 {
4461 	wmi_unified_t wmi = (wmi_unified_t)wmi_hdl;
4462 
4463 	if (wmi->ops->extract_smartlog_event)
4464 		return wmi->ops->extract_smartlog_event(wmi, evt_buf, ev);
4465 
4466 	return QDF_STATUS_E_FAILURE;
4467 }
4468 
4469 qdf_export_symbol(wmi_extract_smartlog_ev);
4470 #endif /* OL_ATH_SMART_LOGGING */
4471 
4472 QDF_STATUS
4473 wmi_unified_send_roam_scan_stats_cmd(void *wmi_hdl,
4474 				     struct wmi_roam_scan_stats_req *params)
4475 {
4476 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
4477 
4478 	if (wmi_handle->ops->send_roam_scan_stats_cmd)
4479 		return wmi_handle->ops->send_roam_scan_stats_cmd(wmi_handle,
4480 								 params);
4481 
4482 	return QDF_STATUS_E_FAILURE;
4483 }
4484 
4485 #ifdef CRYPTO_SET_KEY_CONVERGED
4486 uint8_t wlan_crypto_cipher_to_wmi_cipher(
4487 		enum wlan_crypto_cipher_type crypto_cipher)
4488 {
4489 	switch (crypto_cipher) {
4490 	case WLAN_CRYPTO_CIPHER_NONE:
4491 		return WMI_CIPHER_NONE;
4492 	case WLAN_CRYPTO_CIPHER_WEP:
4493 	case WLAN_CRYPTO_CIPHER_WEP_40:
4494 	case WLAN_CRYPTO_CIPHER_WEP_104:
4495 		return WMI_CIPHER_WEP;
4496 	case WLAN_CRYPTO_CIPHER_TKIP:
4497 		return WMI_CIPHER_TKIP;
4498 	case WLAN_CRYPTO_CIPHER_WAPI_SMS4:
4499 	case WLAN_CRYPTO_CIPHER_WAPI_GCM4:
4500 		return WMI_CIPHER_WAPI;
4501 	case WLAN_CRYPTO_CIPHER_AES_CCM:
4502 	case WLAN_CRYPTO_CIPHER_AES_CCM_256:
4503 		return WMI_CIPHER_AES_CCM;
4504 	case WLAN_CRYPTO_CIPHER_AES_CMAC:
4505 		return WMI_CIPHER_AES_CMAC;
4506 	case WLAN_CRYPTO_CIPHER_AES_GMAC:
4507 	case WLAN_CRYPTO_CIPHER_AES_GMAC_256:
4508 		return WMI_CIPHER_AES_GMAC;
4509 	case WLAN_CRYPTO_CIPHER_AES_GCM:
4510 	case WLAN_CRYPTO_CIPHER_AES_GCM_256:
4511 		return WMI_CIPHER_AES_GCM;
4512 	default:
4513 		return 0;
4514 	}
4515 }
4516 
4517 enum cdp_sec_type wlan_crypto_cipher_to_cdp_sec_type(
4518 		enum wlan_crypto_cipher_type crypto_cipher)
4519 {
4520 	switch (crypto_cipher) {
4521 	case WLAN_CRYPTO_CIPHER_NONE:
4522 		return cdp_sec_type_none;
4523 	case WLAN_CRYPTO_CIPHER_WEP:
4524 	case WLAN_CRYPTO_CIPHER_WEP_40:
4525 	case WLAN_CRYPTO_CIPHER_WEP_104:
4526 		return cdp_sec_type_wep104;
4527 	case WLAN_CRYPTO_CIPHER_TKIP:
4528 		return cdp_sec_type_tkip;
4529 	case WLAN_CRYPTO_CIPHER_WAPI_SMS4:
4530 	case WLAN_CRYPTO_CIPHER_WAPI_GCM4:
4531 		return cdp_sec_type_wapi;
4532 	case WLAN_CRYPTO_CIPHER_AES_CCM:
4533 		return cdp_sec_type_aes_ccmp;
4534 	case WLAN_CRYPTO_CIPHER_AES_CCM_256:
4535 		return cdp_sec_type_aes_ccmp_256;
4536 	case WLAN_CRYPTO_CIPHER_AES_GCM:
4537 		return cdp_sec_type_aes_gcmp;
4538 	case WLAN_CRYPTO_CIPHER_AES_GCM_256:
4539 		return cdp_sec_type_aes_gcmp_256;
4540 	default:
4541 		return cdp_sec_type_none;
4542 	}
4543 }
4544 #endif /* CRYPTO_SET_KEY_CONVERGED */
4545 
4546 QDF_STATUS
4547 wmi_extract_roam_scan_stats_res_evt(wmi_unified_t wmi, void *evt_buf,
4548 				    uint32_t *vdev_id,
4549 				    struct wmi_roam_scan_stats_res **res_param)
4550 {
4551 	if (wmi->ops->extract_roam_scan_stats_res_evt)
4552 		return wmi->ops->extract_roam_scan_stats_res_evt(wmi,
4553 							evt_buf,
4554 							vdev_id, res_param);
4555 
4556 	return QDF_STATUS_E_FAILURE;
4557 }
4558 
4559 QDF_STATUS
4560 wmi_extract_offload_bcn_tx_status_evt(void *wmi_hdl, void *evt_buf,
4561 					uint32_t *vdev_id,
4562 					uint32_t *tx_status) {
4563 	wmi_unified_t wmi = (wmi_unified_t)wmi_hdl;
4564 
4565 	if (wmi->ops->extract_offload_bcn_tx_status_evt)
4566 		return wmi->ops->extract_offload_bcn_tx_status_evt(wmi,
4567 								   evt_buf,
4568 								   vdev_id, tx_status);
4569 
4570 	return QDF_STATUS_E_FAILURE;
4571 }
4572 
4573 #ifdef OBSS_PD
4574 QDF_STATUS
4575 wmi_unified_send_obss_spatial_reuse_set_cmd(void *wmi_hdl,
4576 				    struct wmi_host_obss_spatial_reuse_set_param
4577 				    *obss_spatial_reuse_param)
4578 {
4579 	wmi_unified_t wmi = (wmi_unified_t)wmi_hdl;
4580 
4581 	if (wmi->ops->send_obss_spatial_reuse_set)
4582 		return wmi->ops->send_obss_spatial_reuse_set(wmi,
4583 				obss_spatial_reuse_param);
4584 
4585 	return QDF_STATUS_E_FAILURE;
4586 }
4587 
4588 QDF_STATUS
4589 wmi_unified_send_obss_spatial_reuse_set_def_thresh_cmd(void *wmi_hdl,
4590 		struct wmi_host_obss_spatial_reuse_set_def_thresh *thresh)
4591 {
4592 	wmi_unified_t wmi = (wmi_unified_t)wmi_hdl;
4593 
4594 	if (wmi->ops->send_obss_spatial_reuse_set_def_thresh)
4595 		return wmi->ops->send_obss_spatial_reuse_set_def_thresh(wmi,
4596 									thresh);
4597 
4598 	return QDF_STATUS_E_FAILURE;
4599 }
4600 #endif
4601 
4602 QDF_STATUS wmi_convert_pdev_id_host_to_target(void *wmi_hdl,
4603 					      uint32_t host_pdev_id,
4604 					      uint32_t *target_pdev_id)
4605 {
4606 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
4607 
4608 	if (wmi_handle->ops->convert_pdev_id_host_to_target) {
4609 		*target_pdev_id =
4610 			wmi_handle->ops->convert_pdev_id_host_to_target(
4611 					host_pdev_id);
4612 		return QDF_STATUS_SUCCESS;
4613 	}
4614 
4615 	return QDF_STATUS_E_FAILURE;
4616 }
4617 
4618 QDF_STATUS wmi_unified_send_bss_color_change_enable_cmd(void *wmi_hdl,
4619 							uint32_t vdev_id,
4620 							bool enable)
4621 {
4622 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
4623 
4624 	if (wmi_handle->ops->send_bss_color_change_enable_cmd)
4625 		return wmi_handle->ops->send_bss_color_change_enable_cmd(
4626 				wmi_handle, vdev_id, enable);
4627 
4628 	return QDF_STATUS_E_FAILURE;
4629 }
4630 
4631 QDF_STATUS wmi_unified_send_obss_color_collision_cfg_cmd(void *wmi_hdl,
4632 		struct wmi_obss_color_collision_cfg_param *cfg)
4633 {
4634 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
4635 
4636 	if (wmi_handle->ops->send_obss_color_collision_cfg_cmd)
4637 		return wmi_handle->ops->send_obss_color_collision_cfg_cmd(
4638 				wmi_handle, cfg);
4639 
4640 	return QDF_STATUS_E_FAILURE;
4641 }
4642 
4643 QDF_STATUS wmi_unified_extract_obss_color_collision_info(void *wmi_hdl,
4644 		uint8_t *data, struct wmi_obss_color_collision_info *info)
4645 {
4646 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
4647 
4648 	if (wmi_handle->ops->extract_obss_color_collision_info)
4649 		return wmi_handle->ops->extract_obss_color_collision_info(data,
4650 									  info);
4651 
4652 	return QDF_STATUS_E_FAILURE;
4653 }
4654 
4655 #ifdef WLAN_CFR_ENABLE
4656 QDF_STATUS wmi_unified_send_peer_cfr_capture_cmd(void *wmi_hdl,
4657 						 struct peer_cfr_params *param)
4658 {
4659 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
4660 
4661 	if (wmi_handle->ops->send_peer_cfr_capture_cmd)
4662 		return wmi_handle->ops->send_peer_cfr_capture_cmd(wmi_hdl,
4663 								  param);
4664 
4665 	return QDF_STATUS_E_FAILURE;
4666 }
4667 
4668 /**
4669  * wmi_extract_cfr_peer_tx_event_param() - extract tx event params from event
4670  */
4671 QDF_STATUS
4672 wmi_extract_cfr_peer_tx_event_param(void *wmi_hdl, void *evt_buf,
4673 				    wmi_cfr_peer_tx_event_param *peer_tx_event)
4674 {
4675 	wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
4676 
4677 	if (wmi_handle->ops->extract_cfr_peer_tx_event_param)
4678 		return wmi_handle->ops->extract_cfr_peer_tx_event_param(wmi_hdl,
4679 									evt_buf,
4680 									peer_tx_event);
4681 	return QDF_STATUS_E_FAILURE;
4682 }
4683 #endif /* WLAN_CFR_ENABLE */
4684 
4685 QDF_STATUS wmi_unified_send_mws_coex_req_cmd(struct wmi_unified *wmi_handle,
4686 					     uint32_t vdev_id,
4687 					     uint32_t cmd_id)
4688 {
4689 
4690 	if (wmi_handle->ops->send_mws_coex_status_req_cmd)
4691 		return wmi_handle->ops->send_mws_coex_status_req_cmd(wmi_handle,
4692 				vdev_id, cmd_id);
4693 
4694 	return QDF_STATUS_E_FAILURE;
4695 }
4696