1 /*
2  * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 /**
20  * DOC: declare various api which shall be used by
21  * IPA user configuration and target interface
22  */
23 
24 #ifndef _WLAN_IPA_MAIN_H_
25 #define _WLAN_IPA_MAIN_H_
26 
27 #ifdef IPA_OFFLOAD
28 
29 #include <wlan_objmgr_psoc_obj.h>
30 #include <wlan_objmgr_pdev_obj.h>
31 #include <wlan_ipa_public_struct.h>
32 #include <wlan_ipa_priv.h>
33 #include "cfg_ucfg_api.h"
34 
35 /* Declare a variable for IPA instancess added based on pdev */
36 extern uint8_t g_instances_added;
37 #define IPA_INVALID_HDL 0xFF
38 #define IPA_OFFLOAD_CFG 0x7D
39 
40 #define INTRL_MODE_DISABLE 0xEEEEEEEE
41 #define INTRL_MODE_ENABLE 0x27D
42 
43 #define ipa_fatal(params...) \
44 	QDF_TRACE_FATAL(QDF_MODULE_ID_IPA, params)
45 #define ipa_err(params...) \
46 	QDF_TRACE_ERROR(QDF_MODULE_ID_IPA, params)
47 #define ipa_warn(params...) \
48 	QDF_TRACE_WARN(QDF_MODULE_ID_IPA, params)
49 #define ipa_info(params...) \
50 	QDF_TRACE_INFO(QDF_MODULE_ID_IPA, params)
51 #define ipa_debug(params...) \
52 	QDF_TRACE_DEBUG(QDF_MODULE_ID_IPA, params)
53 
54 #define ipa_nofl_fatal(params...) \
55 	QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_IPA, params)
56 #define ipa_nofl_err(params...) \
57 	QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_IPA, params)
58 #define ipa_nofl_warn(params...) \
59 	QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_IPA, params)
60 #define ipa_nofl_info(params...) \
61 	QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_IPA, params)
62 #define ipa_nofl_debug(params...) \
63 	QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_IPA, params)
64 
65 #define ipa_fatal_rl(params...) QDF_TRACE_FATAL_RL(QDF_MODULE_ID_IPA, params)
66 #define ipa_err_rl(params...) QDF_TRACE_ERROR_RL(QDF_MODULE_ID_IPA, params)
67 #define ipa_warn_rl(params...) QDF_TRACE_WARN_RL(QDF_MODULE_ID_IPA, params)
68 #define ipa_info_rl(params...) QDF_TRACE_INFO_RL(QDF_MODULE_ID_IPA, params)
69 #define ipa_debug_rl(params...) QDF_TRACE_DEBUG_RL(QDF_MODULE_ID_IPA, params)
70 
71 #define IPA_ENTER() \
72 	QDF_TRACE_ENTER(QDF_MODULE_ID_IPA, "enter")
73 #define IPA_EXIT() \
74 	QDF_TRACE_EXIT(QDF_MODULE_ID_IPA, "exit")
75 
76 /**
77  * ipa_set_cap_offload() - set IPA capability offload support
78  * @flag: flag to set
79  *
80  * Return: None
81  */
82 void ipa_set_cap_offload(bool flag);
83 
84 /**
85  * ipa_set_pld_enable() - set g_ipa_pld_enable
86  * @flag: flag to set g_ipa_pld_enable
87  *
88  * Return: None
89  */
90 void ipa_set_pld_enable(bool flag);
91 
92 /**
93  * ipa_get_pld_enable() - check if IPA is disabled in pld
94  *
95  * Return: g_ipa_pld_enable
96  */
97 bool ipa_get_pld_enable(void);
98 
99 /**
100  * ipa_check_hw_present() - get IPA hw status
101  *
102  * ipa_uc_reg_rdyCB is not directly designed to check
103  * ipa hw status. This is an undocumented function which
104  * has confirmed with IPA team.
105  *
106  * Return: true - ipa hw present
107  *         false - ipa hw not present
108  */
109 bool ipa_check_hw_present(void);
110 
111 /**
112  * ipa_pdev_get_priv_obj() - private API to get ipa pdev object
113  * @pdev: pdev object
114  *
115  * Return: ipa object
116  */
117 static inline struct wlan_ipa_priv *
ipa_pdev_get_priv_obj(struct wlan_objmgr_pdev * pdev)118 ipa_pdev_get_priv_obj(struct wlan_objmgr_pdev *pdev)
119 {
120 	struct wlan_ipa_priv *pdev_obj;
121 
122 	pdev_obj = (struct wlan_ipa_priv *)
123 		wlan_objmgr_pdev_get_comp_private_obj(pdev,
124 				WLAN_UMAC_COMP_IPA);
125 
126 	return pdev_obj;
127 }
128 
129 /**
130  * get_ipa_config() - API to get IPAConfig INI
131  * @psoc : psoc handle
132  *
133  * Return: IPA config value
134  */
135 uint32_t get_ipa_config(struct wlan_objmgr_psoc *psoc);
136 
137 /**
138  * ipa_priv_obj_get_pdev() - API to get pdev from IPA object
139  * @ipa_obj: IPA object
140  *
141  * Return: pdev object
142  */
143 static inline struct wlan_objmgr_pdev *
ipa_priv_obj_get_pdev(struct wlan_ipa_priv * ipa_obj)144 ipa_priv_obj_get_pdev(struct wlan_ipa_priv *ipa_obj)
145 {
146 	return ipa_obj->pdev;
147 }
148 
149 /**
150  * ipa_is_hw_support() - Is IPA HW support?
151  *
152  * Return: true if IPA HW  is present or false otherwise
153  */
154 bool ipa_is_hw_support(void);
155 
156 /**
157  * ipa_config_mem_alloc() - IPA config allocation
158  *
159  * Return: QDF_STATUS_SUCCESS on success
160  */
161 QDF_STATUS ipa_config_mem_alloc(void);
162 
163 /**
164  * ipa_config_mem_free() - IPA config mem free
165  *
166  * Return: None
167  */
168 void ipa_config_mem_free(void);
169 
170 /**
171  * ipa_config_is_enabled() - Is IPA config enabled?
172  *
173  * Return: true if IPA is enabled in IPA config
174  */
175 bool ipa_config_is_enabled(void);
176 
177 /**
178  * ipa_config_is_uc_enabled() - Is IPA uC config enabled?
179  *
180  * Return: true if IPA uC is enabled in IPA config
181  */
182 bool ipa_config_is_uc_enabled(void);
183 
184 /**
185  * ipa_config_is_opt_wifi_dp_enabled() - Is IPA optional wifi dp enabled?
186  *
187  * Return: true if IPA opt wifi dp is enabled in IPA config
188  */
189 bool ipa_config_is_opt_wifi_dp_enabled(void);
190 
191 /**
192  * ipa_config_is_vlan_enabled() - Is IPA vlan config enabled?
193  *
194  * Return: true if IPA clan support is enabled in IPA config
195  */
196 bool ipa_config_is_vlan_enabled(void);
197 
198 /**
199  * ipa_obj_setup() - IPA obj initialization and setup
200  * @ipa_ctx: IPA obj context
201  *
202  * Return: QDF_STATUS_SUCCESS on success
203  */
204 QDF_STATUS ipa_obj_setup(struct wlan_ipa_priv *ipa_ctx);
205 
206 /**
207  * ipa_obj_cleanup() - IPA obj cleanup
208  * @ipa_ctx: IPA obj context
209  *
210  * Return: QDF_STATUS_SUCCESS on success
211  */
212 QDF_STATUS ipa_obj_cleanup(struct wlan_ipa_priv *ipa_ctx);
213 
214 /**
215  * ipa_send_uc_offload_enable_disable() - wdi enable/disable notify to fw
216  * @pdev: objmgr pdev object
217  * @req: ipa offload control request
218  *
219  * Return: QDF status success or failure
220  */
221 QDF_STATUS ipa_send_uc_offload_enable_disable(struct wlan_objmgr_pdev *pdev,
222 				struct ipa_uc_offload_control_params *req);
223 
224 /**
225  * ipa_send_intrabss_enable_disable() - wdi intrabss enable/disable notify to fw
226  * @pdev: objmgr pdev object
227  * @req: ipa intrabss control request
228  *
229  * Return: QDF status success or failure
230  */
231 QDF_STATUS
232 ipa_send_intrabss_enable_disable(struct wlan_objmgr_pdev *pdev,
233 				 struct ipa_intrabss_control_params *req);
234 
235 /**
236  * ipa_set_dp_handle() - set dp soc handle
237  * @psoc: psoc handle
238  * @dp_soc: dp soc handle
239  *
240  * Return: None
241  */
242 void ipa_set_dp_handle(struct wlan_objmgr_psoc *psoc, void *dp_soc);
243 
244 /**
245  * ipa_set_pdev_id() - set dp pdev id
246  * @psoc: psoc handle
247  * @pdev_id: dp txrx physical device id
248  *
249  * Return: None
250  */
251 void ipa_set_pdev_id(struct wlan_objmgr_psoc *psoc, uint8_t pdev_id);
252 
253 /**
254  * ipa_rm_set_perf_level() - set ipa rm perf level
255  * @pdev: pdev handle
256  * @tx_packets: packets transmitted in the last sample period
257  * @rx_packets: packets received in the last sample period
258  *
259  * Return: QDF_STATUS
260  */
261 QDF_STATUS ipa_rm_set_perf_level(struct wlan_objmgr_pdev *pdev,
262 				 uint64_t tx_packets, uint64_t rx_packets);
263 
264 /**
265  * ipa_uc_info() - Print IPA uC resource and session information
266  * @pdev: pdev obj
267  *
268  * Return: None
269  */
270 void ipa_uc_info(struct wlan_objmgr_pdev *pdev);
271 
272 /**
273  * ipa_uc_stat() - Print IPA uC stats
274  * @pdev: pdev obj
275  *
276  * Return: None
277  */
278 void ipa_uc_stat(struct wlan_objmgr_pdev *pdev);
279 
280 /**
281  * ipa_uc_rt_debug_host_dump() - IPA rt debug host dump
282  * @pdev: pdev obj
283  *
284  * Return: None
285  */
286 void ipa_uc_rt_debug_host_dump(struct wlan_objmgr_pdev *pdev);
287 
288 /**
289  * ipa_dump_info() - Dump IPA context information
290  * @pdev: pdev obj
291  *
292  * Return: None
293  */
294 void ipa_dump_info(struct wlan_objmgr_pdev *pdev);
295 
296 /**
297  * ipa_uc_stat_request() - Get IPA stats from IPA.
298  * @pdev: pdev obj
299  * @reason: STAT REQ Reason
300  *
301  * Return: None
302  */
303 void ipa_uc_stat_request(struct wlan_objmgr_pdev *pdev,
304 			 uint8_t reason);
305 
306 /**
307  * ipa_uc_stat_query() - Query the IPA stats
308  * @pdev: pdev obj
309  * @ipa_tx_diff: tx packet count diff from previous tx packet count
310  * @ipa_rx_diff: rx packet count diff from previous rx packet count
311  *
312  * Return: None
313  */
314 void ipa_uc_stat_query(struct wlan_objmgr_pdev *pdev,
315 		       uint32_t *ipa_tx_diff, uint32_t *ipa_rx_diff);
316 
317 /**
318  * ipa_reg_sap_xmit_cb() - Register upper layer SAP cb to transmit
319  * @pdev: pdev obj
320  * @cb: callback
321  *
322  * Return: None
323  */
324 void ipa_reg_sap_xmit_cb(struct wlan_objmgr_pdev *pdev,
325 			 wlan_ipa_softap_xmit cb);
326 
327 /**
328  * ipa_reg_send_to_nw_cb() - Register cb to send IPA Rx packet to network
329  * @pdev: pdev obj
330  * @cb: callback
331  *
332  * Return: None
333  */
334 void ipa_reg_send_to_nw_cb(struct wlan_objmgr_pdev *pdev,
335 			   wlan_ipa_send_to_nw cb);
336 
337 #if defined(QCA_CONFIG_RPS) && !defined(MDM_PLATFORM)
338 /**
339  * ipa_reg_rps_enable_cb() - Register cb to enable RPS
340  * @pdev: pdev obj
341  * @cb: callback
342  *
343  * Return: None
344  */
345 void ipa_reg_rps_enable_cb(struct wlan_objmgr_pdev *pdev,
346 			   wlan_ipa_rps_enable cb);
347 #endif
348 
349 /**
350  * ipa_reg_is_driver_unloading_cb() - Register cb to check if driver is
351  *                                    unloading
352  * @pdev: pdev obj
353  * @cb: callback
354  *
355  * Return: None
356  */
357 void ipa_reg_is_driver_unloading_cb(struct wlan_objmgr_pdev *pdev,
358 				    wlan_ipa_driver_unloading cb);
359 /**
360  * ipa_set_mcc_mode() - Set MCC mode
361  * @pdev: pdev obj
362  * @mcc_mode: 0=MCC/1=SCC
363  *
364  * Return: void
365  */
366 void ipa_set_mcc_mode(struct wlan_objmgr_pdev *pdev, bool mcc_mode);
367 
368 /**
369  * ipa_set_dfs_cac_tx() - Set DFS cac tx block
370  * @pdev: pdev obj
371  * @tx_block: dfs cac tx block
372  *
373  * Return: void
374  */
375 void ipa_set_dfs_cac_tx(struct wlan_objmgr_pdev *pdev, bool tx_block);
376 
377 /**
378  * ipa_set_ap_ibss_fwd() - Set AP intra bss forward
379  * @pdev: pdev obj
380  * @session_id: vdev id
381  * @intra_bss: enable or disable ap intra bss forward
382  *
383  * Return: void
384  */
385 void ipa_set_ap_ibss_fwd(struct wlan_objmgr_pdev *pdev, uint8_t session_id,
386 			 bool intra_bss);
387 
388 /**
389  * ipa_uc_force_pipe_shutdown() - Force IPA pipe shutdown
390  * @pdev: pdev obj
391  *
392  * Return: void
393  */
394 void ipa_uc_force_pipe_shutdown(struct wlan_objmgr_pdev *pdev);
395 
396 /**
397  * ipa_flush() - flush IPA exception path SKB's
398  * @pdev: pdev obj
399  *
400  * Return: None
401  */
402 void ipa_flush(struct wlan_objmgr_pdev *pdev);
403 
404 /**
405  * ipa_suspend() - Suspend IPA
406  * @pdev: pdev obj
407  *
408  * Return: QDF STATUS
409  */
410 QDF_STATUS ipa_suspend(struct wlan_objmgr_pdev *pdev);
411 
412 /**
413  * ipa_resume() - Resume IPA
414  * @pdev: pdev obj
415  *
416  * Return: None
417  */
418 QDF_STATUS ipa_resume(struct wlan_objmgr_pdev *pdev);
419 
420 /**
421  * ipa_uc_ol_init() - Initialize IPA uC offload
422  * @pdev: pdev obj
423  * @osdev: OS dev
424  *
425  * Return: QDF STATUS
426  */
427 QDF_STATUS ipa_uc_ol_init(struct wlan_objmgr_pdev *pdev,
428 			  qdf_device_t osdev);
429 
430 /**
431  * ipa_uc_ol_deinit() - Deinitialize IPA uC offload
432  * @pdev: pdev obj
433  *
434  * Return: QDF STATUS
435  */
436 QDF_STATUS ipa_uc_ol_deinit(struct wlan_objmgr_pdev *pdev);
437 
438 /**
439  * ipa_is_tx_pending() - Check if IPA WLAN TX completions are pending
440  * @pdev: pdev obj
441  *
442  * Return: bool if pending TX for IPA.
443  */
444 bool ipa_is_tx_pending(struct wlan_objmgr_pdev *pdev);
445 
446 /**
447  * ipa_send_mcc_scc_msg() - Send IPA WLAN_SWITCH_TO_MCC/SCC message
448  * @pdev: pdev obj
449  * @mcc_mode: 0=MCC/1=SCC
450  *
451  * Return: QDF STATUS
452  */
453 QDF_STATUS ipa_send_mcc_scc_msg(struct wlan_objmgr_pdev *pdev,
454 				bool mcc_mode);
455 
456 /**
457  * ipa_wlan_evt() - IPA event handler
458  * @pdev: pdev obj
459  * @net_dev: Interface net device
460  * @device_mode: Net interface device mode
461  * @session_id: session id for the event
462  * @ipa_event_type: event enum of type ipa_wlan_event
463  * @mac_addr: MAC address associated with the event
464  * @is_2g_iface: true if interface is operating on 2G band, otherwise false
465  *
466  * Return: QDF_STATUS
467  */
468 QDF_STATUS ipa_wlan_evt(struct wlan_objmgr_pdev *pdev, qdf_netdev_t net_dev,
469 			uint8_t device_mode, uint8_t session_id,
470 			enum wlan_ipa_wlan_event ipa_event_type,
471 			const uint8_t *mac_addr, bool is_2g_iface);
472 
473 /**
474  * ipa_uc_smmu_map() - Map / Unmap DMA buffer to IPA UC
475  * @map: Map / unmap operation
476  * @num_buf: Number of buffers in array
477  * @buf_arr: Buffer array of DMA mem mapping info
478  *
479  * Return: Status of map operation
480  */
481 int ipa_uc_smmu_map(bool map, uint32_t num_buf, qdf_mem_info_t *buf_arr);
482 
483 /**
484  * ipa_is_fw_wdi_activated - Is FW WDI activated?
485  * @pdev: pdev obj
486  *
487  * Return: true if FW WDI activated, false otherwise
488  */
489 bool ipa_is_fw_wdi_activated(struct wlan_objmgr_pdev *pdev);
490 
491 /**
492  * ipa_uc_cleanup_sta() - disconnect and cleanup sta iface
493  * @pdev: pdev obj
494  * @net_dev: Interface net device
495  * @session_id: vdev id
496  *
497  * Send disconnect sta event to IPA driver and cleanup IPA iface,
498  * if not yet done
499  *
500  * Return: void
501  */
502 void ipa_uc_cleanup_sta(struct wlan_objmgr_pdev *pdev,
503 			qdf_netdev_t net_dev, uint8_t session_id);
504 
505 /**
506  * ipa_uc_disconnect_ap() - send ap disconnect event
507  * @pdev: pdev obj
508  * @net_dev: Interface net device
509  *
510  * Send disconnect ap event to IPA driver
511  *
512  * Return: QDF_STATUS
513  */
514 QDF_STATUS ipa_uc_disconnect_ap(struct wlan_objmgr_pdev *pdev,
515 				qdf_netdev_t net_dev);
516 
517 /**
518  * ipa_cleanup_dev_iface() - Clean up net dev IPA interface
519  * @pdev: pdev obj
520  * @net_dev: Interface net device
521  * @session_id: vdev_id
522  *
523  * Return: None
524  */
525 void ipa_cleanup_dev_iface(struct wlan_objmgr_pdev *pdev,
526 			   qdf_netdev_t net_dev, uint8_t session_id);
527 
528 /**
529  * ipa_uc_ssr_cleanup() - handle IPA UC cleanup during SSR
530  * @pdev: pdev obj
531  *
532  * Return: None
533  */
534 void ipa_uc_ssr_cleanup(struct wlan_objmgr_pdev *pdev);
535 
536 /**
537  * ipa_fw_rejuvenate_send_msg() - send fw rejuvenate message to IPA driver
538  * @pdev: pdev obj
539  *
540  * Return: None
541  */
542 void ipa_fw_rejuvenate_send_msg(struct wlan_objmgr_pdev *pdev);
543 
544 /**
545  * ipa_component_config_update() - update ipa config from psoc
546  * @psoc: psoc obj
547  *
548  * Return: None
549  */
550 void ipa_component_config_update(struct wlan_objmgr_psoc *psoc);
551 
552 /**
553  * ipa_component_config_free() - Free ipa config
554  *
555  * Return: None
556  */
557 void ipa_component_config_free(void);
558 
559 /**
560  * ipa_get_tx_buf_count() - get IPA config tx buffer count
561  *
562  * Return: IPA config tx buffer count
563  */
564 uint32_t ipa_get_tx_buf_count(void);
565 
566 /**
567  * ipa_update_tx_stats() - Update embedded tx traffic in bytes to IPA
568  * @pdev: pdev obj
569  * @sta_tx: tx in bytes on sta vdev
570  * @ap_tx: tx in bytes on sap vdev
571  *
572  * Return: None
573  */
574 void ipa_update_tx_stats(struct wlan_objmgr_pdev *pdev, uint64_t sta_tx,
575 			 uint64_t ap_tx);
576 
577 /**
578  * ipa_flush_pending_vdev_events() - flush pending vdev wlan ipa events
579  * @pdev: pdev obj
580  * @vdev_id: vdev id
581  *
582  * Return: None
583  */
584 void ipa_flush_pending_vdev_events(struct wlan_objmgr_pdev *pdev,
585 				   uint8_t vdev_id);
586 
587 /**
588  * ipa_cb_is_ready() - Is IPA register callback is invoked
589  *
590  * Return: true if IPA register callback is invoked or false
591  * otherwise
592  */
593 bool ipa_cb_is_ready(void);
594 
595 /**
596  * ipa_init_deinit_lock() - lock ipa init deinit lock
597  *
598  * Return: None
599  */
600 void ipa_init_deinit_lock(void);
601 
602 /**
603  * ipa_init_deinit_unlock() - unlock ipa init deinit lock
604  *
605  * Return: None
606  */
607 void ipa_init_deinit_unlock(void);
608 
609 /**
610  * ipa_is_wds_enabled() - IPA wds status
611  *
612  * Return: true if WDS is enabled otherwise false
613  */
614 bool ipa_is_wds_enabled(void);
615 
616 /**
617  * ipa_get_alt_pipe() - Get alt_pipe for vdev_id
618  * @pdev: pdev obj
619  * @vdev_id: vdev_id of the target interface
620  * @alt_pipe: Boolean output to indicate if interface with @vdev_id
621  *	      is using alternate TX pipe or not.
622  *
623  * Return: QDF_STATUS
624  */
625 QDF_STATUS ipa_get_alt_pipe(struct wlan_objmgr_pdev *pdev,
626 			    uint8_t vdev_id,
627 			    bool *alt_pipe);
628 
629 /**
630  * ipa_set_perf_level_bw_enabled - Get bandwidth based IPA perf voting status
631  * @pdev: pdev objmgr pointer
632  *
633  * This function returns true or false for bandwidth based IPA perf level
634  * voting.
635  *
636  * Return: true - bandwidth based IPA perf voting is enabld. Otherwise false.
637  */
638 bool ipa_set_perf_level_bw_enabled(struct wlan_objmgr_pdev *pdev);
639 
640 /**
641  * ipa_set_perf_level_bw() - Set IPA perf level based on BW
642  * @pdev: pdev objmgr pointer
643  * @lvl: enum wlan_ipa_bw_level
644  *
645  * This routine is called to set IPA perf level based on max BW
646  * configured among in-use STA and SAP vdevs
647  *
648  * Return: None
649  */
650 void ipa_set_perf_level_bw(struct wlan_objmgr_pdev *pdev,
651 			   enum wlan_ipa_bw_level lvl);
652 
653 #else /* Not IPA_OFFLOAD */
654 typedef QDF_STATUS (*wlan_ipa_softap_xmit)(qdf_nbuf_t nbuf, qdf_netdev_t dev);
655 typedef void (*wlan_ipa_send_to_nw)(qdf_nbuf_t nbuf, qdf_netdev_t dev);
656 typedef void (*wlan_ipa_rps_enable)(uint8_t vdev_id, bool enable);
657 typedef bool (*wlan_ipa_driver_unloading)(void);
658 
659 #endif /* IPA_OFFLOAD */
660 #endif /* end  of _WLAN_IPA_MAIN_H_ */
661