blob: 424062b69f1bb6e77d2034f93a98ef14fced375d [file] [log] [blame]
Sravan Kumar Kairam4af61cf2018-02-22 17:53:44 +05301/*
Vevek Venkatesan78f7f092019-05-23 17:16:28 +05302 * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
Sravan Kumar Kairam4af61cf2018-02-22 17:53:44 +05303 *
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/**
20 * DOC: contains ipa component main function definitions
21 */
22
23#include "wlan_ipa_main.h"
Sravan Kumar Kairamd01b4452018-03-07 17:37:09 +053024#include "wlan_ipa_core.h"
Sravan Kumar Kairam4af61cf2018-02-22 17:53:44 +053025#include "wlan_ipa_tgt_api.h"
jitiphil4c256a32018-09-07 08:51:52 +053026#include "cfg_ucfg_api.h"
Sravan Kumar Kairam4af61cf2018-02-22 17:53:44 +053027
Sravan Kumar Kairamd01b4452018-03-07 17:37:09 +053028static struct wlan_ipa_config *g_ipa_config;
29static bool g_ipa_hw_support;
30
31bool ipa_check_hw_present(void)
Sravan Kumar Kairam4af61cf2018-02-22 17:53:44 +053032{
33 /* Check if ipa hw is enabled */
Sravan Kumar Kairamc8eec8a2018-04-23 17:28:09 +053034 if (qdf_ipa_uc_reg_rdyCB(NULL) != -EPERM) {
Sravan Kumar Kairamd01b4452018-03-07 17:37:09 +053035 g_ipa_hw_support = true;
Sravan Kumar Kairam4af61cf2018-02-22 17:53:44 +053036 return true;
Sravan Kumar Kairamd01b4452018-03-07 17:37:09 +053037 } else {
Sravan Kumar Kairam4af61cf2018-02-22 17:53:44 +053038 return false;
Sravan Kumar Kairamd01b4452018-03-07 17:37:09 +053039 }
40}
41
42QDF_STATUS ipa_config_mem_alloc(void)
43{
44 struct wlan_ipa_config *ipa_cfg;
45
46 ipa_cfg = qdf_mem_malloc(sizeof(*ipa_cfg));
47 if (!ipa_cfg) {
48 ipa_err("Failed to allocate memory for ipa config");
49 return QDF_STATUS_E_NOMEM;
50 }
51
52 g_ipa_config = ipa_cfg;
53
54 return QDF_STATUS_SUCCESS;
55}
56
57void ipa_config_mem_free(void)
58{
59 if (!g_ipa_config) {
60 ipa_err("IPA config already freed");
61 return;
62 }
63
64 qdf_mem_free(g_ipa_config);
65 g_ipa_config = NULL;
66}
67
68bool ipa_is_hw_support(void)
69{
70 return g_ipa_hw_support;
71}
72
Sravan Kumar Kairamd01b4452018-03-07 17:37:09 +053073bool ipa_config_is_enabled(void)
74{
jiad4f0eae12018-05-21 20:49:24 +080075 return g_ipa_config ? wlan_ipa_is_enabled(g_ipa_config) : 0;
Sravan Kumar Kairamd01b4452018-03-07 17:37:09 +053076}
77
Sravan Kumar Kairam5214f652018-03-13 09:52:31 +053078bool ipa_config_is_uc_enabled(void)
79{
jiad4f0eae12018-05-21 20:49:24 +080080 return g_ipa_config ? wlan_ipa_uc_is_enabled(g_ipa_config) : 0;
Sravan Kumar Kairam5214f652018-03-13 09:52:31 +053081}
82
Sravan Kumar Kairamd01b4452018-03-07 17:37:09 +053083QDF_STATUS ipa_obj_setup(struct wlan_ipa_priv *ipa_ctx)
84{
85 return wlan_ipa_setup(ipa_ctx, g_ipa_config);
86}
87
88QDF_STATUS ipa_obj_cleanup(struct wlan_ipa_priv *ipa_ctx)
89{
90 return wlan_ipa_cleanup(ipa_ctx);
Sravan Kumar Kairam4af61cf2018-02-22 17:53:44 +053091}
92
93QDF_STATUS ipa_send_uc_offload_enable_disable(struct wlan_objmgr_pdev *pdev,
94 struct ipa_uc_offload_control_params *req)
95{
96 return tgt_ipa_uc_offload_enable_disable(pdev, req);
97}
Sravan Kumar Kairamd01b4452018-03-07 17:37:09 +053098
99void ipa_set_dp_handle(struct wlan_objmgr_psoc *psoc, void *dp_soc)
100{
101 struct wlan_objmgr_pdev *pdev;
102 struct wlan_ipa_priv *ipa_obj;
103
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530104 if (!ipa_config_is_enabled()) {
105 ipa_debug("ipa is disabled");
Sravan Kumar Kairamd01b4452018-03-07 17:37:09 +0530106 return;
107 }
108
109 pdev = wlan_objmgr_get_pdev_by_id(psoc, 0,
110 WLAN_IPA_ID);
111
112 if (!pdev) {
113 ipa_err("Failed to get pdev handle");
114 return;
115 }
116
117 ipa_obj = ipa_pdev_get_priv_obj(pdev);
118 if (!ipa_obj) {
119 ipa_err("IPA object is NULL");
120 wlan_objmgr_pdev_release_ref(pdev, WLAN_IPA_ID);
121 return;
122 }
123
124 ipa_obj->dp_soc = dp_soc;
125 wlan_objmgr_pdev_release_ref(pdev, WLAN_IPA_ID);
126}
127
128void ipa_set_txrx_handle(struct wlan_objmgr_psoc *psoc, void *txrx_handle)
129{
130 struct wlan_objmgr_pdev *pdev;
131 struct wlan_ipa_priv *ipa_obj;
132
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530133 if (!ipa_config_is_enabled()) {
134 ipa_debug("ipa is disabled");
Sravan Kumar Kairamd01b4452018-03-07 17:37:09 +0530135 return;
136 }
137
138 pdev = wlan_objmgr_get_pdev_by_id(psoc, 0,
139 WLAN_IPA_ID);
140
141 if (!pdev) {
142 ipa_err("Failed to get pdev handle");
143 return;
144 }
145
146 ipa_obj = ipa_pdev_get_priv_obj(pdev);
147 if (!ipa_obj) {
148 ipa_err("IPA object is NULL");
149 wlan_objmgr_pdev_release_ref(pdev, WLAN_IPA_ID);
150 return;
151 }
152
153 ipa_obj->dp_pdev = txrx_handle;
154 wlan_objmgr_pdev_release_ref(pdev, WLAN_IPA_ID);
155}
Sravan Kumar Kairam9e99e9a2018-03-12 19:09:45 +0530156
157QDF_STATUS ipa_rm_set_perf_level(struct wlan_objmgr_pdev *pdev,
158 uint64_t tx_packets, uint64_t rx_packets)
159{
160 struct wlan_ipa_priv *ipa_obj;
161
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530162 if (!ipa_config_is_enabled()) {
163 ipa_debug("ipa is disabled");
Sravan Kumar Kairam9e99e9a2018-03-12 19:09:45 +0530164 return QDF_STATUS_SUCCESS;
165 }
166
167 ipa_obj = ipa_pdev_get_priv_obj(pdev);
168 if (!ipa_obj) {
169 ipa_err("IPA object is NULL");
170 return QDF_STATUS_E_FAILURE;
171 }
172
173 return wlan_ipa_set_perf_level(ipa_obj, tx_packets, rx_packets);
174}
Sravan Kumar Kairam271fab22018-03-07 18:57:41 +0530175
176void ipa_uc_info(struct wlan_objmgr_pdev *pdev)
177{
178 struct wlan_ipa_priv *ipa_obj;
179
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530180 if (!ipa_config_is_enabled()) {
181 ipa_debug("ipa is disabled");
Sravan Kumar Kairam271fab22018-03-07 18:57:41 +0530182 return;
183 }
184
185 ipa_obj = ipa_pdev_get_priv_obj(pdev);
186 if (!ipa_obj) {
187 ipa_err("IPA object is NULL");
188 return;
189 }
190
191 return wlan_ipa_uc_info(ipa_obj);
192}
193
194void ipa_uc_stat(struct wlan_objmgr_pdev *pdev)
195{
196 struct wlan_ipa_priv *ipa_obj;
197
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530198 if (!ipa_config_is_enabled()) {
199 ipa_debug("ipa is disabled");
Sravan Kumar Kairam271fab22018-03-07 18:57:41 +0530200 return;
201 }
202
203 ipa_obj = ipa_pdev_get_priv_obj(pdev);
204 if (!ipa_obj) {
205 ipa_err("IPA object is NULL");
206 return;
207 }
208
209 return wlan_ipa_uc_stat(ipa_obj);
210}
211
212void ipa_uc_rt_debug_host_dump(struct wlan_objmgr_pdev *pdev)
213{
214 struct wlan_ipa_priv *ipa_obj;
215
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530216 if (!ipa_config_is_enabled()) {
217 ipa_debug("ipa is disabled");
Sravan Kumar Kairam271fab22018-03-07 18:57:41 +0530218 return;
219 }
220
221 ipa_obj = ipa_pdev_get_priv_obj(pdev);
222 if (!ipa_obj) {
223 ipa_err("IPA object is NULL");
224 return;
225 }
226
227 return wlan_ipa_uc_rt_debug_host_dump(ipa_obj);
228}
229
230void ipa_dump_info(struct wlan_objmgr_pdev *pdev)
231{
232 struct wlan_ipa_priv *ipa_obj;
233
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530234 if (!ipa_config_is_enabled()) {
235 ipa_debug("ipa is disabled");
Sravan Kumar Kairam271fab22018-03-07 18:57:41 +0530236 return;
237 }
238
239 ipa_obj = ipa_pdev_get_priv_obj(pdev);
240 if (!ipa_obj) {
241 ipa_err("IPA object is NULL");
242 return;
243 }
244
245 return wlan_ipa_dump_info(ipa_obj);
246}
247
248void ipa_uc_stat_request(struct wlan_objmgr_pdev *pdev, uint8_t reason)
249{
250 struct wlan_ipa_priv *ipa_obj;
251
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530252 if (!ipa_config_is_enabled()) {
253 ipa_debug("ipa is disabled");
Sravan Kumar Kairam271fab22018-03-07 18:57:41 +0530254 return;
255 }
256
257 ipa_obj = ipa_pdev_get_priv_obj(pdev);
258 if (!ipa_obj) {
259 ipa_err("IPA object is NULL");
260 return;
261 }
262
263 return wlan_ipa_uc_stat_request(ipa_obj, reason);
264}
265
266void ipa_uc_stat_query(struct wlan_objmgr_pdev *pdev,
267 uint32_t *ipa_tx_diff, uint32_t *ipa_rx_diff)
268{
269 struct wlan_ipa_priv *ipa_obj;
270
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530271 if (!ipa_config_is_enabled()) {
272 ipa_debug("ipa is disabled");
Sravan Kumar Kairam271fab22018-03-07 18:57:41 +0530273 return;
274 }
275
276 ipa_obj = ipa_pdev_get_priv_obj(pdev);
277 if (!ipa_obj) {
278 ipa_err("IPA object is NULL");
279 return;
280 }
281
282 return wlan_ipa_uc_stat_query(ipa_obj, ipa_tx_diff, ipa_rx_diff);
283}
Sravan Kumar Kairam858073b2018-03-13 09:03:32 +0530284
Vevek Venkatesan78f7f092019-05-23 17:16:28 +0530285void ipa_reg_sap_xmit_cb(struct wlan_objmgr_pdev *pdev, wlan_ipa_softap_xmit cb)
Sravan Kumar Kairam858073b2018-03-13 09:03:32 +0530286{
287 struct wlan_ipa_priv *ipa_obj;
288
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530289 if (!ipa_config_is_enabled()) {
290 ipa_debug("ipa is disabled");
Sravan Kumar Kairam858073b2018-03-13 09:03:32 +0530291 return;
292 }
293
294 ipa_obj = ipa_pdev_get_priv_obj(pdev);
295 if (!ipa_obj) {
296 ipa_err("IPA object is NULL");
297 return;
298 }
299
300 return wlan_ipa_reg_sap_xmit_cb(ipa_obj, cb);
301}
302
Vevek Venkatesan3b6be822019-05-28 18:19:15 +0530303void ipa_reg_send_to_nw_cb(struct wlan_objmgr_pdev *pdev,
304 wlan_ipa_send_to_nw cb)
Sravan Kumar Kairam858073b2018-03-13 09:03:32 +0530305{
306 struct wlan_ipa_priv *ipa_obj;
307
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530308 if (!ipa_config_is_enabled()) {
309 ipa_debug("ipa is disabled");
Sravan Kumar Kairam858073b2018-03-13 09:03:32 +0530310 return;
311 }
312
313 ipa_obj = ipa_pdev_get_priv_obj(pdev);
314 if (!ipa_obj) {
315 ipa_err("IPA object is NULL");
316 return;
317 }
318
319 return wlan_ipa_reg_send_to_nw_cb(ipa_obj, cb);
320}
321
322void ipa_set_mcc_mode(struct wlan_objmgr_pdev *pdev, bool mcc_mode)
323{
324 struct wlan_ipa_priv *ipa_obj;
325
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530326 if (!ipa_config_is_enabled()) {
327 ipa_debug("ipa is disabled");
Sravan Kumar Kairam858073b2018-03-13 09:03:32 +0530328 return;
329 }
330
331 ipa_obj = ipa_pdev_get_priv_obj(pdev);
332 if (!ipa_obj) {
333 ipa_err("IPA object is NULL");
334 return;
335 }
336
337 return wlan_ipa_set_mcc_mode(ipa_obj, mcc_mode);
338}
339
340void ipa_set_dfs_cac_tx(struct wlan_objmgr_pdev *pdev, bool tx_block)
341{
342 struct wlan_ipa_priv *ipa_obj;
343
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530344 if (!ipa_config_is_enabled()) {
345 ipa_debug("ipa is disabled");
Sravan Kumar Kairam858073b2018-03-13 09:03:32 +0530346 return;
347 }
348
349 ipa_obj = ipa_pdev_get_priv_obj(pdev);
350 if (!ipa_obj) {
351 ipa_err("IPA object is NULL");
352 return;
353 }
354
355 return wlan_ipa_set_dfs_cac_tx(ipa_obj, tx_block);
356}
357
358void ipa_set_ap_ibss_fwd(struct wlan_objmgr_pdev *pdev, bool intra_bss)
359{
360 struct wlan_ipa_priv *ipa_obj;
361
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530362 if (!ipa_config_is_enabled()) {
363 ipa_debug("ipa is disabled");
Sravan Kumar Kairam858073b2018-03-13 09:03:32 +0530364 return;
365 }
366
367 ipa_obj = ipa_pdev_get_priv_obj(pdev);
368 if (!ipa_obj) {
369 ipa_err("IPA object is NULL");
370 return;
371 }
372
373 return wlan_ipa_set_ap_ibss_fwd(ipa_obj, intra_bss);
374}
375
376void ipa_uc_force_pipe_shutdown(struct wlan_objmgr_pdev *pdev)
377{
378 struct wlan_ipa_priv *ipa_obj;
379
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530380 if (!ipa_config_is_enabled()) {
381 ipa_debug("ipa is disabled");
Sravan Kumar Kairam858073b2018-03-13 09:03:32 +0530382 return;
383 }
384
385 ipa_obj = ipa_pdev_get_priv_obj(pdev);
386 if (!ipa_obj) {
387 ipa_err("IPA object is NULL");
388 return;
389 }
390
391 wlan_ipa_uc_disable_pipes(ipa_obj);
392}
Sravan Kumar Kairam1309e7e2018-03-13 09:29:52 +0530393
394void ipa_flush(struct wlan_objmgr_pdev *pdev)
395{
396 struct wlan_ipa_priv *ipa_obj;
397
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530398 if (!ipa_config_is_enabled()) {
399 ipa_debug("ipa is disabled");
Sravan Kumar Kairam1309e7e2018-03-13 09:29:52 +0530400 return;
401 }
402
403 ipa_obj = ipa_pdev_get_priv_obj(pdev);
404 if (!ipa_obj) {
405 ipa_err("IPA object is NULL");
406 return;
407 }
408
409 return wlan_ipa_flush(ipa_obj);
410}
411
412QDF_STATUS ipa_suspend(struct wlan_objmgr_pdev *pdev)
413{
414 struct wlan_ipa_priv *ipa_obj;
415
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530416 if (!ipa_config_is_enabled()) {
417 ipa_debug("ipa is disabled");
418 return QDF_STATUS_SUCCESS;
Sravan Kumar Kairam1309e7e2018-03-13 09:29:52 +0530419 }
420
421 ipa_obj = ipa_pdev_get_priv_obj(pdev);
422 if (!ipa_obj) {
423 ipa_err("IPA object is NULL");
424 return QDF_STATUS_E_FAILURE;
425 }
426
427 return wlan_ipa_suspend(ipa_obj);
428}
429
430QDF_STATUS ipa_resume(struct wlan_objmgr_pdev *pdev)
431{
432 struct wlan_ipa_priv *ipa_obj;
433
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530434 if (!ipa_config_is_enabled()) {
435 ipa_debug("ipa is disabled");
436 return QDF_STATUS_SUCCESS;
Sravan Kumar Kairam1309e7e2018-03-13 09:29:52 +0530437 }
438
439 ipa_obj = ipa_pdev_get_priv_obj(pdev);
440 if (!ipa_obj) {
441 ipa_err("IPA object is NULL");
442 return QDF_STATUS_E_FAILURE;
443 }
444
445 return wlan_ipa_resume(ipa_obj);
446}
447
448QDF_STATUS ipa_uc_ol_init(struct wlan_objmgr_pdev *pdev,
449 qdf_device_t osdev)
450{
451 struct wlan_ipa_priv *ipa_obj;
452
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530453 if (!ipa_config_is_enabled()) {
Tushnim Bhattacharyya581b4c82018-04-26 16:23:22 -0700454 ipa_debug("ipa is disabled");
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530455 return QDF_STATUS_SUCCESS;
Sravan Kumar Kairam1309e7e2018-03-13 09:29:52 +0530456 }
457
458 ipa_obj = ipa_pdev_get_priv_obj(pdev);
459 if (!ipa_obj) {
460 ipa_err("IPA object is NULL");
461 return QDF_STATUS_E_FAILURE;
462 }
463
464 return wlan_ipa_uc_ol_init(ipa_obj, osdev);
465}
466
467QDF_STATUS ipa_uc_ol_deinit(struct wlan_objmgr_pdev *pdev)
468{
469 struct wlan_ipa_priv *ipa_obj;
470
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530471 if (!ipa_config_is_enabled()) {
472 ipa_debug("ipa is disabled");
473 return QDF_STATUS_SUCCESS;
Sravan Kumar Kairam1309e7e2018-03-13 09:29:52 +0530474 }
475
476 ipa_obj = ipa_pdev_get_priv_obj(pdev);
477 if (!ipa_obj) {
478 ipa_err("IPA object is NULL");
479 return QDF_STATUS_E_FAILURE;
480 }
481
482 return wlan_ipa_uc_ol_deinit(ipa_obj);
483}
Sravan Kumar Kairam7d931ff2018-03-13 09:42:02 +0530484
485QDF_STATUS ipa_send_mcc_scc_msg(struct wlan_objmgr_pdev *pdev,
486 bool mcc_mode)
487{
488 struct wlan_ipa_priv *ipa_obj;
489
Sravan Kumar Kairamcad38472018-03-29 17:35:41 +0530490 if (!ipa_config_is_enabled()) {
491 ipa_debug("ipa is disabled");
492 return QDF_STATUS_SUCCESS;
Sravan Kumar Kairam7d931ff2018-03-13 09:42:02 +0530493 }
494
495 ipa_obj = ipa_pdev_get_priv_obj(pdev);
496 if (!ipa_obj) {
497 ipa_err("IPA object is NULL");
498 return QDF_STATUS_E_FAILURE;
499 }
500
501 return wlan_ipa_send_mcc_scc_msg(ipa_obj, mcc_mode);
502}
Sravan Kumar Kairam5214f652018-03-13 09:52:31 +0530503
504QDF_STATUS ipa_wlan_evt(struct wlan_objmgr_pdev *pdev, qdf_netdev_t net_dev,
Rakshith Suresh Patkar96703f62019-08-06 14:34:36 +0530505 uint8_t device_mode, uint8_t session_id,
Sravan Kumar Kairam5214f652018-03-13 09:52:31 +0530506 enum wlan_ipa_wlan_event ipa_event_type,
507 uint8_t *mac_addr)
508{
509 struct wlan_ipa_priv *ipa_obj;
510
Sravan Kumar Kairam5214f652018-03-13 09:52:31 +0530511 ipa_obj = ipa_pdev_get_priv_obj(pdev);
512 if (!ipa_obj) {
513 ipa_err("IPA object is NULL");
514 return QDF_STATUS_E_FAILURE;
515 }
516
Rakshith Suresh Patkar96703f62019-08-06 14:34:36 +0530517 return wlan_ipa_wlan_evt(net_dev, device_mode, session_id,
Sravan Kumar Kairam5214f652018-03-13 09:52:31 +0530518 ipa_event_type, mac_addr);
519}
Sravan Kumar Kairam983a4452018-03-20 13:30:22 +0530520
521int ipa_uc_smmu_map(bool map, uint32_t num_buf, qdf_mem_info_t *buf_arr)
522{
523 return wlan_ipa_uc_smmu_map(map, num_buf, buf_arr);
524}
Yun Parka29974a2018-04-09 12:05:49 -0700525
Yun Parka29974a2018-04-09 12:05:49 -0700526bool ipa_is_fw_wdi_activated(struct wlan_objmgr_pdev *pdev)
527{
528 struct wlan_ipa_priv *ipa_obj;
529
530 if (!ipa_config_is_enabled()) {
jiad71784492018-07-16 10:30:39 +0800531 ipa_debug_rl("ipa is disabled");
Yun Parka29974a2018-04-09 12:05:49 -0700532 return false;
533 }
534
535 ipa_obj = ipa_pdev_get_priv_obj(pdev);
536 if (!ipa_obj) {
jiad71784492018-07-16 10:30:39 +0800537 ipa_err_rl("IPA object is NULL");
Yun Parka29974a2018-04-09 12:05:49 -0700538 return false;
539 }
540
541 return wlan_ipa_is_fw_wdi_activated(ipa_obj);
542}
Sravan Kumar Kairamce792eb2018-06-15 15:07:11 +0530543
Vevek Venkatesane81bca82019-08-12 22:25:15 +0530544void ipa_uc_cleanup_sta(struct wlan_objmgr_pdev *pdev,
545 qdf_netdev_t net_dev)
546{
547 struct wlan_ipa_priv *ipa_obj;
548
549 ipa_obj = ipa_pdev_get_priv_obj(pdev);
550 if (!ipa_obj) {
551 ipa_err("IPA object is NULL");
552 return;
553 }
554
555 return wlan_ipa_uc_cleanup_sta(ipa_obj, net_dev);
556}
557
Sravan Kumar Kairamce792eb2018-06-15 15:07:11 +0530558QDF_STATUS ipa_uc_disconnect_ap(struct wlan_objmgr_pdev *pdev,
559 qdf_netdev_t net_dev)
560{
561 struct wlan_ipa_priv *ipa_obj;
562
563 ipa_obj = ipa_pdev_get_priv_obj(pdev);
564 if (!ipa_obj) {
565 ipa_err("IPA object is NULL");
566 return QDF_STATUS_E_FAILURE;
567 }
568
569 return wlan_ipa_uc_disconnect_ap(ipa_obj, net_dev);
570}
571
572void ipa_cleanup_dev_iface(struct wlan_objmgr_pdev *pdev,
573 qdf_netdev_t net_dev)
574{
575 struct wlan_ipa_priv *ipa_obj;
576
577 ipa_obj = ipa_pdev_get_priv_obj(pdev);
578 if (!ipa_obj) {
579 ipa_err("IPA object is NULL");
580 return;
581 }
582
583 return wlan_ipa_cleanup_dev_iface(ipa_obj, net_dev);
584}
Sravan Kumar Kairam657f89e2018-09-18 10:13:37 +0530585
586void ipa_uc_ssr_cleanup(struct wlan_objmgr_pdev *pdev)
587{
588 struct wlan_ipa_priv *ipa_obj;
589
590 ipa_obj = ipa_pdev_get_priv_obj(pdev);
591 if (!ipa_obj) {
592 ipa_err("IPA object is NULL");
593 return;
594 }
595
596 return wlan_ipa_uc_ssr_cleanup(ipa_obj);
597}
jitiphil0e3b5922018-07-24 18:43:50 +0530598
599void ipa_fw_rejuvenate_send_msg(struct wlan_objmgr_pdev *pdev)
600{
601 struct wlan_ipa_priv *ipa_obj;
602
603 ipa_obj = ipa_pdev_get_priv_obj(pdev);
604 if (!ipa_obj) {
605 ipa_err("IPA object is NULL");
606 return;
607 }
608
609 return wlan_ipa_fw_rejuvenate_send_msg(ipa_obj);
610}
jitiphil4c256a32018-09-07 08:51:52 +0530611
612void ipa_component_config_update(struct wlan_objmgr_psoc *psoc)
613{
614 if (!g_ipa_config) {
615 ipa_err("g_ipa_config is NULL");
616 return;
617 }
618
619 g_ipa_config->ipa_config =
620 cfg_get(psoc, CFG_DP_IPA_OFFLOAD_CONFIG);
621 g_ipa_config->desc_size =
622 cfg_get(psoc, CFG_DP_IPA_DESC_SIZE);
623 g_ipa_config->txbuf_count =
624 qdf_rounddown_pow_of_two(cfg_get(psoc,
625 CFG_DP_IPA_UC_TX_BUF_COUNT));
626 g_ipa_config->ipa_bw_high =
627 cfg_get(psoc, CFG_DP_IPA_HIGH_BANDWIDTH_MBPS);
628 g_ipa_config->ipa_bw_medium =
629 cfg_get(psoc, CFG_DP_IPA_MEDIUM_BANDWIDTH_MBPS);
630 g_ipa_config->ipa_bw_low =
631 cfg_get(psoc, CFG_DP_IPA_LOW_BANDWIDTH_MBPS);
632 g_ipa_config->bus_bw_high =
633 cfg_get(psoc, CFG_DP_BUS_BANDWIDTH_HIGH_THRESHOLD);
634 g_ipa_config->bus_bw_medium =
635 cfg_get(psoc, CFG_DP_BUS_BANDWIDTH_MEDIUM_THRESHOLD);
636 g_ipa_config->bus_bw_low =
637 cfg_get(psoc, CFG_DP_BUS_BANDWIDTH_LOW_THRESHOLD);
Alok Kumare888e802019-09-23 18:31:09 +0530638 g_ipa_config->ipa_force_voting =
639 cfg_get(psoc, CFG_DP_IPA_ENABLE_FORCE_VOTING);
jitiphil4c256a32018-09-07 08:51:52 +0530640}
641
642uint32_t ipa_get_tx_buf_count(void)
643{
644 return g_ipa_config ? g_ipa_config->txbuf_count : 0;
645}
Sravan Kumar Kairam3bc886d2019-08-22 23:46:27 +0530646
647void ipa_update_tx_stats(struct wlan_objmgr_pdev *pdev, uint64_t sta_tx,
648 uint64_t ap_tx)
649{
650 struct wlan_ipa_priv *ipa_obj;
651
652 if (!ipa_config_is_enabled())
653 return;
654
655 ipa_obj = ipa_pdev_get_priv_obj(pdev);
656 if (!ipa_obj) {
657 ipa_err("IPA object is NULL");
658 return;
659 }
660
661 wlan_ipa_update_tx_stats(ipa_obj, sta_tx, ap_tx);
662}