From a4b8d357569709a7889c418ba927c180e2cd45dc Mon Sep 17 00:00:00 2001 From: Mukul Sharma Date: Wed, 5 Jul 2017 19:53:19 +0530 Subject: [PATCH] qcacmn: Move PMO from CMN to CLD Move PMO from CMN to CLD. Change-Id: I0545e7d2c934ff6558694b439b33c1debf0f5e0a CRs-fixed: 2071526 --- global_lmac_if/src/wlan_global_lmac_if.c | 32 - .../dispatcher/src/dispatcher_init_deinit.c | 32 - pmo/core/inc/wlan_pmo_arp.h | 71 - pmo/core/inc/wlan_pmo_gtk.h | 74 - pmo/core/inc/wlan_pmo_hw_filter.h | 46 - pmo/core/inc/wlan_pmo_lphb.h | 51 - pmo/core/inc/wlan_pmo_main.h | 365 ----- pmo/core/inc/wlan_pmo_mc_addr_filtering.h | 129 -- pmo/core/inc/wlan_pmo_ns.h | 72 - pmo/core/inc/wlan_pmo_objmgr.h | 207 --- pmo/core/inc/wlan_pmo_pkt_filter.h | 57 - pmo/core/inc/wlan_pmo_static_config.h | 117 -- pmo/core/inc/wlan_pmo_suspend_resume.h | 437 ------ pmo/core/inc/wlan_pmo_wow.h | 605 -------- pmo/core/src/wlan_pmo_arp.c | 368 ----- pmo/core/src/wlan_pmo_gtk.c | 358 ----- pmo/core/src/wlan_pmo_hw_filter.c | 96 -- pmo/core/src/wlan_pmo_lphb.c | 243 ---- pmo/core/src/wlan_pmo_main.c | 256 ---- pmo/core/src/wlan_pmo_mc_addr_filtering.c | 616 --------- pmo/core/src/wlan_pmo_ns.c | 454 ------ pmo/core/src/wlan_pmo_pkt_filter.c | 96 -- pmo/core/src/wlan_pmo_static_config.c | 380 ----- pmo/core/src/wlan_pmo_suspend_resume.c | 1225 ----------------- pmo/core/src/wlan_pmo_wow.c | 350 ----- .../inc/wlan_pmo_arp_public_struct.h | 58 - .../inc/wlan_pmo_common_public_struct.h | 297 ---- .../inc/wlan_pmo_gtk_public_struct.h | 95 -- .../inc/wlan_pmo_hw_filter_public_struct.h | 54 - .../inc/wlan_pmo_lphb_public_struct.h | 176 --- ...wlan_pmo_mc_addr_filtering_public_struct.h | 60 - .../inc/wlan_pmo_ns_public_struct.h | 79 -- pmo/dispatcher/inc/wlan_pmo_obj_mgmt_api.h | 241 ---- .../inc/wlan_pmo_obj_mgmt_public_struct.h | 156 --- .../inc/wlan_pmo_pkt_filter_public_struct.h | 141 -- pmo/dispatcher/inc/wlan_pmo_tgt_api.h | 398 ------ pmo/dispatcher/inc/wlan_pmo_ucfg_api.h | 573 -------- .../inc/wlan_pmo_wow_public_struct.h | 241 ---- pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c | 756 ---------- pmo/dispatcher/src/wlan_pmo_tgt_arp.c | 157 --- pmo/dispatcher/src/wlan_pmo_tgt_gtk.c | 177 --- pmo/dispatcher/src/wlan_pmo_tgt_hw_filter.c | 52 - pmo/dispatcher/src/wlan_pmo_tgt_lphb.c | 154 --- .../src/wlan_pmo_tgt_mc_addr_filtering.c | 82 -- pmo/dispatcher/src/wlan_pmo_tgt_ns.c | 158 --- pmo/dispatcher/src/wlan_pmo_tgt_pkt_filter.c | 155 --- .../src/wlan_pmo_tgt_static_config.c | 126 -- .../src/wlan_pmo_tgt_suspend_resume.c | 214 --- pmo/dispatcher/src/wlan_pmo_tgt_wow.c | 120 -- pmo/dispatcher/src/wlan_pmo_ucfg_api.c | 330 ----- target_if/core/src/target_if_main.c | 29 - target_if/pmo/inc/target_if_pmo.h | 398 ------ target_if/pmo/inc/target_if_pmo_main.h | 38 - target_if/pmo/src/target_if_pmo_arp.c | 61 - target_if/pmo/src/target_if_pmo_gtk.c | 145 -- target_if/pmo/src/target_if_pmo_hw_filter.c | 48 - target_if/pmo/src/target_if_pmo_lphb.c | 312 ----- target_if/pmo/src/target_if_pmo_main.c | 103 -- .../pmo/src/target_if_pmo_mc_addr_filtering.c | 91 -- target_if/pmo/src/target_if_pmo_ns.c | 60 - target_if/pmo/src/target_if_pmo_pkt_filter.c | 97 -- .../pmo/src/target_if_pmo_static_config.c | 113 -- .../pmo/src/target_if_pmo_suspend_resume.c | 185 --- target_if/pmo/src/target_if_pmo_wow.c | 114 -- .../lmac_if/inc/wlan_lmac_if_def.h | 170 --- 65 files changed, 13751 deletions(-) delete mode 100644 pmo/core/inc/wlan_pmo_arp.h delete mode 100644 pmo/core/inc/wlan_pmo_gtk.h delete mode 100644 pmo/core/inc/wlan_pmo_hw_filter.h delete mode 100644 pmo/core/inc/wlan_pmo_lphb.h delete mode 100644 pmo/core/inc/wlan_pmo_main.h delete mode 100644 pmo/core/inc/wlan_pmo_mc_addr_filtering.h delete mode 100644 pmo/core/inc/wlan_pmo_ns.h delete mode 100644 pmo/core/inc/wlan_pmo_objmgr.h delete mode 100644 pmo/core/inc/wlan_pmo_pkt_filter.h delete mode 100644 pmo/core/inc/wlan_pmo_static_config.h delete mode 100644 pmo/core/inc/wlan_pmo_suspend_resume.h delete mode 100644 pmo/core/inc/wlan_pmo_wow.h delete mode 100644 pmo/core/src/wlan_pmo_arp.c delete mode 100644 pmo/core/src/wlan_pmo_gtk.c delete mode 100644 pmo/core/src/wlan_pmo_hw_filter.c delete mode 100644 pmo/core/src/wlan_pmo_lphb.c delete mode 100644 pmo/core/src/wlan_pmo_main.c delete mode 100644 pmo/core/src/wlan_pmo_mc_addr_filtering.c delete mode 100644 pmo/core/src/wlan_pmo_ns.c delete mode 100644 pmo/core/src/wlan_pmo_pkt_filter.c delete mode 100644 pmo/core/src/wlan_pmo_static_config.c delete mode 100644 pmo/core/src/wlan_pmo_suspend_resume.c delete mode 100644 pmo/core/src/wlan_pmo_wow.c delete mode 100644 pmo/dispatcher/inc/wlan_pmo_arp_public_struct.h delete mode 100644 pmo/dispatcher/inc/wlan_pmo_common_public_struct.h delete mode 100644 pmo/dispatcher/inc/wlan_pmo_gtk_public_struct.h delete mode 100644 pmo/dispatcher/inc/wlan_pmo_hw_filter_public_struct.h delete mode 100644 pmo/dispatcher/inc/wlan_pmo_lphb_public_struct.h delete mode 100644 pmo/dispatcher/inc/wlan_pmo_mc_addr_filtering_public_struct.h delete mode 100644 pmo/dispatcher/inc/wlan_pmo_ns_public_struct.h delete mode 100644 pmo/dispatcher/inc/wlan_pmo_obj_mgmt_api.h delete mode 100644 pmo/dispatcher/inc/wlan_pmo_obj_mgmt_public_struct.h delete mode 100644 pmo/dispatcher/inc/wlan_pmo_pkt_filter_public_struct.h delete mode 100644 pmo/dispatcher/inc/wlan_pmo_tgt_api.h delete mode 100644 pmo/dispatcher/inc/wlan_pmo_ucfg_api.h delete mode 100644 pmo/dispatcher/inc/wlan_pmo_wow_public_struct.h delete mode 100644 pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c delete mode 100644 pmo/dispatcher/src/wlan_pmo_tgt_arp.c delete mode 100644 pmo/dispatcher/src/wlan_pmo_tgt_gtk.c delete mode 100644 pmo/dispatcher/src/wlan_pmo_tgt_hw_filter.c delete mode 100644 pmo/dispatcher/src/wlan_pmo_tgt_lphb.c delete mode 100644 pmo/dispatcher/src/wlan_pmo_tgt_mc_addr_filtering.c delete mode 100644 pmo/dispatcher/src/wlan_pmo_tgt_ns.c delete mode 100644 pmo/dispatcher/src/wlan_pmo_tgt_pkt_filter.c delete mode 100644 pmo/dispatcher/src/wlan_pmo_tgt_static_config.c delete mode 100644 pmo/dispatcher/src/wlan_pmo_tgt_suspend_resume.c delete mode 100644 pmo/dispatcher/src/wlan_pmo_tgt_wow.c delete mode 100644 pmo/dispatcher/src/wlan_pmo_ucfg_api.c delete mode 100644 target_if/pmo/inc/target_if_pmo.h delete mode 100644 target_if/pmo/inc/target_if_pmo_main.h delete mode 100644 target_if/pmo/src/target_if_pmo_arp.c delete mode 100644 target_if/pmo/src/target_if_pmo_gtk.c delete mode 100644 target_if/pmo/src/target_if_pmo_hw_filter.c delete mode 100644 target_if/pmo/src/target_if_pmo_lphb.c delete mode 100644 target_if/pmo/src/target_if_pmo_main.c delete mode 100644 target_if/pmo/src/target_if_pmo_mc_addr_filtering.c delete mode 100644 target_if/pmo/src/target_if_pmo_ns.c delete mode 100644 target_if/pmo/src/target_if_pmo_pkt_filter.c delete mode 100644 target_if/pmo/src/target_if_pmo_static_config.c delete mode 100644 target_if/pmo/src/target_if_pmo_suspend_resume.c delete mode 100644 target_if/pmo/src/target_if_pmo_wow.c diff --git a/global_lmac_if/src/wlan_global_lmac_if.c b/global_lmac_if/src/wlan_global_lmac_if.c index 8ff2ed2b6d..be8adeb2f5 100644 --- a/global_lmac_if/src/wlan_global_lmac_if.c +++ b/global_lmac_if/src/wlan_global_lmac_if.c @@ -21,9 +21,6 @@ #include "wlan_lmac_if_def.h" #include "wlan_lmac_if_api.h" #include "wlan_global_lmac_if_api.h" -#ifdef WLAN_PMO_ENABLE -#include "wlan_pmo_tgt_api.h" -#endif /* Function pointer to call DA/OL specific tx_ops registration function */ QDF_STATUS (*wlan_global_lmac_if_tx_ops_register[MAX_DEV_TYPE]) @@ -66,32 +63,6 @@ static void wlan_spectral_register_rx_ops(struct wlan_lmac_if_rx_ops *rx_ops) } #endif -#ifdef WLAN_PMO_ENABLE -/** - * wlan_pmo_register_rx_ops() - Register PMO component RX OPS - * @rx_ops: lmac if receive ops - * - * Return: None - */ -static void wlan_pmo_register_rx_ops(struct wlan_lmac_if_rx_ops *rx_ops) -{ - struct wlan_lmac_if_pmo_rx_ops *pmo_rx_ops; - - pmo_rx_ops = &rx_ops->pmo_rx_ops; - pmo_rx_ops->rx_gtk_rsp_event = pmo_tgt_gtk_rsp_evt; - pmo_rx_ops->lphb_rsp_event = pmo_tgt_lphb_rsp_evt; -} -#else -/** - * wlan_pmo_register_rx_ops() - Dummy api to register PMO component RX OPS - * @rx_ops: lmac if receive ops - * - * Return: None - */ -static void wlan_pmo_register_rx_ops(struct wlan_lmac_if_rx_ops *rx_ops) -{ -} -#endif /** * wlan_global_lmac_if_rx_ops_register() - Global lmac_if * rx handler register @@ -116,9 +87,6 @@ wlan_global_lmac_if_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops) /* Registeration for UMAC componets */ wlan_lmac_if_umac_rx_ops_register(rx_ops); - /* Registeration for componets outside UMAC */ - wlan_pmo_register_rx_ops(rx_ops); - /* spectral rx_ops registration*/ wlan_spectral_register_rx_ops(rx_ops); diff --git a/init_deinit/dispatcher/src/dispatcher_init_deinit.c b/init_deinit/dispatcher/src/dispatcher_init_deinit.c index 75e9fe0385..505f9012e7 100644 --- a/init_deinit/dispatcher/src/dispatcher_init_deinit.c +++ b/init_deinit/dispatcher/src/dispatcher_init_deinit.c @@ -24,9 +24,6 @@ #include #include #include -#ifdef WLAN_PMO_ENABLE -#include "wlan_pmo_obj_mgmt_api.h" -#endif #ifdef WLAN_POLICY_MGR_ENABLE #include "wlan_policy_mgr_api.h" #endif @@ -245,28 +242,6 @@ static QDF_STATUS son_psoc_close(struct wlan_objmgr_psoc *psoc) #endif /* END of QCA_SUPPORT_SON */ -#ifdef WLAN_PMO_ENABLE -static QDF_STATUS dispatcher_init_pmo(void) -{ - return pmo_init(); -} - -static QDF_STATUS dispatcher_deinit_pmo(void) -{ - return pmo_deinit(); -} -#else -static QDF_STATUS dispatcher_init_pmo(void) -{ - return QDF_STATUS_SUCCESS; -} - -static QDF_STATUS dispatcher_deinit_pmo(void) -{ - return QDF_STATUS_SUCCESS; -} -#endif /* END of WLAN_PMO_ENABLE */ - static QDF_STATUS dispatcher_regulatory_init(void) { return wlan_regulatory_init(); @@ -676,9 +651,6 @@ QDF_STATUS dispatcher_init(void) if (QDF_STATUS_SUCCESS != wlan_serialization_init()) goto serialization_init_fail; - if (QDF_STATUS_SUCCESS != dispatcher_init_pmo()) - goto pmo_init_fail; - if (QDF_STATUS_SUCCESS != dispatcher_init_crypto()) goto crypto_init_fail; @@ -745,8 +717,6 @@ atf_init_fail: policy_mgr_init_fail: dispatcher_deinit_crypto(); crypto_init_fail: - dispatcher_deinit_pmo(); -pmo_init_fail: wlan_serialization_deinit(); serialization_init_fail: tdls_deinit(); @@ -794,8 +764,6 @@ QDF_STATUS dispatcher_deinit(void) QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_crypto()); - QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_pmo()); - QDF_BUG(QDF_STATUS_SUCCESS == wlan_serialization_deinit()); QDF_BUG(QDF_STATUS_SUCCESS == tdls_deinit()); diff --git a/pmo/core/inc/wlan_pmo_arp.h b/pmo/core/inc/wlan_pmo_arp.h deleted file mode 100644 index 8d97eec6cd..0000000000 --- a/pmo/core/inc/wlan_pmo_arp.h +++ /dev/null @@ -1,71 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Declare arp offload feature API's - */ - -#ifndef _WLAN_PMO_ARP_H_ -#define _WLAN_PMO_ARP_H_ - -#include "wlan_pmo_arp_public_struct.h" - -/** - * pmo_core_cache_arp_offload_req() - API to cache arp req in pmo vdev priv ctx - * @arp_req: arp offload request - * - * API To cache ARP offload in pmo vdev priv ctx - * - * Return: QDF_STATUS_SUCCESS in case of success else return error - */ -QDF_STATUS pmo_core_cache_arp_offload_req(struct pmo_arp_req *arp_req); - -/** - * pmo_core_flush_arp_offload_req() - API to flush arp req from pmo vdev ctx - * @vdev: objmgr vdev - * - * API To flush saved ARP request from pmo vdev prov ctx - * - * Return: QDF_STATUS_SUCCESS in case of success else return error - */ -QDF_STATUS pmo_core_flush_arp_offload_req(struct wlan_objmgr_vdev *vdev); - -/** - * pmo_core_enable_arp_offload_in_fwr() - API to enable arp offload in fwr - * @vdev: objmgr vdev - * @trigger: trigger reason - * - * API to enable arp offload in fwr from vdev priv ctx - * - * Return: QDF_STATUS_SUCCESS in case of success else return error - */ -QDF_STATUS pmo_core_enable_arp_offload_in_fwr(struct wlan_objmgr_vdev *vdev, - enum pmo_offload_trigger trigger); - -/** - * pmo_core_disable_arp_offload_in_fwr() - API to disable arp offload in fwr - * @vdev: objmgr vdev - * @trigger: trigger reason - * - * API to disable arp offload in fwr - * - * Return: QQDF_STATUS_SUCCESS in case of success else return error - */ -QDF_STATUS pmo_core_disable_arp_offload_in_fwr(struct wlan_objmgr_vdev *vdev, - enum pmo_offload_trigger trigger); - -#endif /* end of _WLAN_PMO_ARP_H_ */ diff --git a/pmo/core/inc/wlan_pmo_gtk.h b/pmo/core/inc/wlan_pmo_gtk.h deleted file mode 100644 index 2a9d9f54ae..0000000000 --- a/pmo/core/inc/wlan_pmo_gtk.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Declare gtk offload feature API's - */ - -#ifndef _WLAN_PMO_GTK_H_ -#define _WLAN_PMO_GTK_H_ - -#include "wlan_pmo_gtk_public_struct.h" - -/** - * pmo_core_cache_gtk_offload_req(): API to cache gtk req in pmo vdev priv obj - * @vdev: objmgr vdev handle - * @gtk_req: pmo gtk req param - * - * Return QDF_STATUS_SUCCESS -in case of success else return error - */ -QDF_STATUS pmo_core_cache_gtk_offload_req(struct wlan_objmgr_vdev *vdev, - struct pmo_gtk_req *gtk_req); - -/** - * pmo_core_flush_gtk_offload_req(): Flush saved gtk req from pmo vdev priv obj - * @vdev: objmgr vdev handle - * - * Return QDF_STATUS_SUCCESS -in case of success else return error - */ -QDF_STATUS pmo_core_flush_gtk_offload_req(struct wlan_objmgr_vdev *vdev); - -/** - * pmo_core_enable_gtk_offload_in_fwr(): enable cached gtk request in fwr - * @vdev: objmgr vdev handle - * - * Return QDF_STATUS_SUCCESS -in case of success else return error - */ -QDF_STATUS pmo_core_enable_gtk_offload_in_fwr(struct wlan_objmgr_vdev *vdev); - -/** - * pmo_core_disable_gtk_offload_in_fwr(): disable cached gtk request in fwr - * @vdev: objmgr vdev handle - * - * Return QDF_STATUS_SUCCESS -in case of success else return error - */ -QDF_STATUS pmo_core_disable_gtk_offload_in_fwr(struct wlan_objmgr_vdev *vdev); - -/** - * pmo_core_get_gtk_rsp(): API to send gtk response request to fwr - * @vdev: objmgr vdev handle - * @gtk_rsp: pmo gtk response request - * - * This api will send gtk response request to fwr - * - * Return QDF_STATUS_SUCCESS -in case of success else return error - */ -QDF_STATUS pmo_core_get_gtk_rsp(struct wlan_objmgr_vdev *vdev, - struct pmo_gtk_rsp_req *gtk_rsp_req); - -#endif /* end of _WLAN_PMO_GTK_H_ */ - diff --git a/pmo/core/inc/wlan_pmo_hw_filter.h b/pmo/core/inc/wlan_pmo_hw_filter.h deleted file mode 100644 index c3cab641ea..0000000000 --- a/pmo/core/inc/wlan_pmo_hw_filter.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -/** - * DOC: Declare hardware filter offload feature APIs - */ - -#ifndef _WLAN_PMO_HW_FILTER_H_ -#define _WLAN_PMO_HW_FILTER_H_ - -#include "qdf_status.h" -#include "wlan_objmgr_vdev_obj.h" -#include "wlan_pmo_hw_filter_public_struct.h" - -/** - * pmo_core_enable_hw_filter_in_fwr() - enable previously configured hw filter - * @vdev: objmgr vdev to configure - * - * Return: QDF_STATUS - */ -QDF_STATUS pmo_core_enable_hw_filter_in_fwr(struct wlan_objmgr_vdev *vdev); - -/** - * pmo_core_disable_hw_filter_in_fwr() - disable previously configured hw filter - * @vdev: objmgr vdev to configure - * - * Return: QDF_STATUS - */ -QDF_STATUS pmo_core_disable_hw_filter_in_fwr(struct wlan_objmgr_vdev *vdev); - -#endif /* _WLAN_PMO_HW_FILTER_H_*/ diff --git a/pmo/core/inc/wlan_pmo_lphb.h b/pmo/core/inc/wlan_pmo_lphb.h deleted file mode 100644 index 20b6952ec5..0000000000 --- a/pmo/core/inc/wlan_pmo_lphb.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Declare low power heart beat offload feature API's - */ - -#ifndef _WLAN_PMO_LPHB_H_ -#define _WLAN_PMO_LPHB_H_ - -#include "wlan_pmo_lphb_public_struct.h" - -/** - * pmo_core_lphb_config_req() - API to configure lphb request - * @psoc: objmgr psoc handle - * @lphb_req: low power heart beat configuration request - * @lphb_cb_ctx: low power heart beat context - * @callback: osif callback which need to be called when host get lphb event - * - * API to configure lphb request - * - * Return: QDF_STATUS_SUCCESS in case of success else return error - */ -QDF_STATUS pmo_core_lphb_config_req(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_req *lphb_req, void *lphb_cb_ctx, - pmo_lphb_callback callback); - -/** - * pmo_core_apply_lphb(): apply cached LPHB settings - * @psoc: objmgr psoc handle - * - * LPHB cache, if any item was enabled, should be - * applied. - */ -void pmo_core_apply_lphb(struct wlan_objmgr_psoc *psoc); - -#endif /* end of _WLAN_PMO_LPHB_H_ */ diff --git a/pmo/core/inc/wlan_pmo_main.h b/pmo/core/inc/wlan_pmo_main.h deleted file mode 100644 index f9c61f3f21..0000000000 --- a/pmo/core/inc/wlan_pmo_main.h +++ /dev/null @@ -1,365 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: declare various api which shall be used by - * pmo user configuration and target interface - */ - -#ifndef _WLAN_PMO_MAIN_H_ -#define _WLAN_PMO_MAIN_H_ - -#include "wlan_cmn.h" -#include "wlan_objmgr_cmn.h" -#include "wlan_objmgr_global_obj.h" -#include "wlan_objmgr_psoc_obj.h" -#include "wlan_objmgr_pdev_obj.h" -#include "wlan_objmgr_vdev_obj.h" -#include "wlan_objmgr_peer_obj.h" -#include "wlan_pmo_objmgr.h" -#include "qdf_status.h" -#include "qdf_types.h" -#include "qdf_lock.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -#define pmo_log(level, args...) QDF_TRACE(QDF_MODULE_ID_PMO, level, ## args) -#define pmo_logfl(level, format, args...) pmo_log(level, FL(format), ## args) - -#define pmo_fatal(format, args...) \ - pmo_logfl(QDF_TRACE_LEVEL_FATAL, format, ## args) -#define pmo_err(format, args...) \ - pmo_logfl(QDF_TRACE_LEVEL_ERROR, format, ## args) -#define pmo_warn(format, args...) \ - pmo_logfl(QDF_TRACE_LEVEL_WARN, format, ## args) -#define pmo_info(format, args...) \ - pmo_logfl(QDF_TRACE_LEVEL_INFO, format, ## args) -#define pmo_debug(format, args...) \ - pmo_logfl(QDF_TRACE_LEVEL_DEBUG, format, ## args) - -#define PMO_ENTER() pmo_debug("enter") -#define PMO_EXIT() pmo_debug("exit") - -#define PMO_VDEV_IN_STA_MODE(mode) \ - ((mode) == QDF_STA_MODE || (mode) == QDF_P2P_CLIENT_MODE ? 1 : 0) - -static inline enum tQDF_ADAPTER_MODE pmo_get_vdev_opmode( - struct wlan_objmgr_vdev *vdev) -{ - enum tQDF_ADAPTER_MODE opmode; - - opmode = wlan_vdev_mlme_get_opmode(vdev); - - return opmode; -} - -/** - * pmo_allocate_ctx() - Api to allocate pmo ctx - * - * Helper function to allocate pmo ctx - * - * Return: Success or failure. - */ -QDF_STATUS pmo_allocate_ctx(void); - -/** - * pmo_free_ctx() - to free pmo context - * - * Helper function to free pmo context - * - * Return: None. - */ -void pmo_free_ctx(void); - -/** - * pmo_get_context() - to get pmo context - * - * Helper function to get pmo context - * - * Return: pmo context. - */ -struct wlan_pmo_ctx *pmo_get_context(void); - -/** - * pmo_get_vdev_bss_peer_mac_addr() - API to get bss peer mac address - * @vdev: objmgr vdev - * @bss_peer_mac_address: bss peer mac address - *. - * Helper function to get bss peer mac address - * - * Return: if success pmo vdev ctx else NULL - */ -QDF_STATUS pmo_get_vdev_bss_peer_mac_addr(struct wlan_objmgr_vdev *vdev, - struct qdf_mac_addr *bss_peer_mac_address); - -/** - * pmo_is_vdev_in_beaconning_mode() - check if vdev is in a beaconning mode - * @vdev_opmode: vdev opmode - * - * Helper function to know whether given vdev - * is in a beaconning mode or not. - * - * Return: True if vdev needs to beacon. - */ -bool pmo_is_vdev_in_beaconning_mode(enum tQDF_ADAPTER_MODE vdev_opmode); - -/** - * pmo_core_is_ap_mode_supports_arp_ns() - To check ap mode supports arp/ns - * @vdev_opmode: vdev opmode - * - * API to check if ap mode supports arp/ns offload - * - * Return: True if ap mode supports arp/ns offload - */ - -bool pmo_core_is_ap_mode_supports_arp_ns(struct wlan_objmgr_psoc *psoc, - enum tQDF_ADAPTER_MODE vdev_opmode); - -/** - * pmo_core_is_vdev_connected() - to check whether peer is associated or not - * @vdev: objmgr vdev - * - * Return: true in case success else false - */ -bool pmo_core_is_vdev_connected(struct wlan_objmgr_vdev *vdev); - -/** - * pmo_core_is_vdev_supports_offload() - Check offload is supported on vdev - * @vdev: objmgr vdev - * - * Return: true in case success else false - */ -bool pmo_core_is_vdev_supports_offload(struct wlan_objmgr_vdev *vdev); - -/** - * pmo_core_get_psoc_config(): API to get the psoc user configurations of pmo - * @psoc: objmgr psoc handle - * @psoc_cfg: fill the current psoc user configurations. - * - * Return pmo psoc configurations - */ -QDF_STATUS pmo_core_get_psoc_config(struct wlan_objmgr_psoc *psoc, - struct pmo_psoc_cfg *psoc_cfg); - -/** - * pmo_core_update_psoc_config(): API to update the psoc user configurations - * @psoc: objmgr psoc handle - * @psoc_cfg: pmo psoc configurations - * - * This api shall be used for soc config initialization as well update. - * In case of update caller must first call pmo_get_psoc_cfg to get - * current config and then apply changes on top of current config. - * - * Return QDF_STATUS -in case of success else return error - */ -QDF_STATUS pmo_core_update_psoc_config(struct wlan_objmgr_psoc *psoc, - struct pmo_psoc_cfg *psoc_cfg); - - -/** - * pmo_core_get_vdev_op_mode(): API to get the vdev operation mode - * @vdev: objmgr vdev handle - * - * API to get the vdev operation mode - * - * Return QDF_MAX_NO_OF_MODE - in case of error else return vdev opmode - */ -static inline enum tQDF_ADAPTER_MODE pmo_core_get_vdev_op_mode( - struct wlan_objmgr_vdev *vdev) -{ - enum tQDF_ADAPTER_MODE op_mode = QDF_MAX_NO_OF_MODE; - - if (!vdev) - return op_mode; - op_mode = wlan_vdev_mlme_get_opmode(vdev); - - return op_mode; -} - -/** - * pmo_core_psoc_update_dp_handle() - update psoc data path handle - * @psoc: objmgr psoc handle - * @dp_hdl: psoc data path handle - * - * Return: None - */ -static inline -void pmo_core_psoc_update_dp_handle(struct wlan_objmgr_psoc *psoc, - void *dp_hdl) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - - psoc_ctx = pmo_psoc_get_priv(psoc); - qdf_spin_lock_bh(&psoc_ctx->lock); - psoc_ctx->dp_hdl = dp_hdl; - qdf_spin_unlock_bh(&psoc_ctx->lock); -} - -/** - * pmo_core_psoc_get_dp_handle() - Get psoc data path handle - * @psoc: objmgr psoc handle - * - * Return: psoc data path handle - */ -static inline -void *pmo_core_psoc_get_dp_handle(struct wlan_objmgr_psoc *psoc) -{ - void *dp_hdl; - struct pmo_psoc_priv_obj *psoc_ctx; - - psoc_ctx = pmo_psoc_get_priv(psoc); - qdf_spin_lock_bh(&psoc_ctx->lock); - dp_hdl = psoc_ctx->dp_hdl; - qdf_spin_unlock_bh(&psoc_ctx->lock); - - return dp_hdl; -} - -/** - * pmo_core_vdev_update_dp_handle() - update vdev data path handle - * @vdev: objmgr vdev handle - * @dp_hdl: Vdev data path handle - * - * Return: None - */ -static inline -void pmo_core_vdev_update_dp_handle(struct wlan_objmgr_vdev *vdev, - void *dp_hdl) -{ - struct pmo_vdev_priv_obj *vdev_ctx; - - vdev_ctx = pmo_vdev_get_priv(vdev); - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - vdev_ctx->vdev_dp_hdl = dp_hdl; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); -} - -/** - * pmo_core_vdev_get_dp_handle() - Get vdev data path handle - * @vdev: objmgr vdev handle - * - * Return: Vdev data path handle - */ -static inline -void *pmo_core_vdev_get_dp_handle(struct wlan_objmgr_vdev *vdev) -{ - void *dp_hdl; - struct pmo_vdev_priv_obj *vdev_ctx; - - vdev_ctx = pmo_vdev_get_priv(vdev); - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - dp_hdl = vdev_ctx->vdev_dp_hdl; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - return dp_hdl; -} - -/** - * pmo_core_psoc_update_htc_handle() - update psoc htc layer handle - * @psoc: objmgr psoc handle - * @htc_hdl: psoc htc layer handle - * - * Return: None - */ -static inline -void pmo_core_psoc_update_htc_handle(struct wlan_objmgr_psoc *psoc, - void *htc_hdl) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - - psoc_ctx = pmo_psoc_get_priv(psoc); - qdf_spin_lock_bh(&psoc_ctx->lock); - psoc_ctx->htc_hdl = htc_hdl; - qdf_spin_unlock_bh(&psoc_ctx->lock); -} - -/** - * pmo_core_psoc_get_htc_handle() - Get psoc htc layer handle - * @psoc: objmgr psoc handle - * - * Return: psoc htc layer handle - */ -static inline -void *pmo_core_psoc_get_htc_handle(struct wlan_objmgr_psoc *psoc) -{ - void *htc_hdl; - struct pmo_psoc_priv_obj *psoc_ctx; - - psoc_ctx = pmo_psoc_get_priv(psoc); - qdf_spin_lock_bh(&psoc_ctx->lock); - htc_hdl = psoc_ctx->htc_hdl; - qdf_spin_unlock_bh(&psoc_ctx->lock); - - return htc_hdl; -} - -/** - * pmo_core_psoc_set_hif_handle() - update psoc hif layer handle - * @psoc: objmgr psoc handle - * @hif_hdl: hif context handle - * - * Return: None - */ -void pmo_core_psoc_set_hif_handle(struct wlan_objmgr_psoc *psoc, - void *hif_hdl); - -/** - * pmo_core_psoc_get_hif_handle() - Get psoc hif layer handle - * @psoc: objmgr psoc handle - * - * Return: psoc hif layer handle - */ -void *pmo_core_psoc_get_hif_handle(struct wlan_objmgr_psoc *psoc); - -/** - * pmo_core_psoc_set_txrx_handle() - update psoc pdev txrx layer handle - * @psoc: objmgr psoc handle - * @txrx_hdl: pdev txrx context handle - * - * Return: None - */ -void pmo_core_psoc_set_txrx_handle(struct wlan_objmgr_psoc *psoc, - void *txrx_hdl); - -/** - * pmo_core_psoc_get_txrx_handle() - Get psoc pdev txrx handle - * @psoc: objmgr psoc handle - * - * Return: pdev txrx handle - */ -void *pmo_core_psoc_get_txrx_handle(struct wlan_objmgr_psoc *psoc); - -/** - * pmo_is_vdev_up() - API to check whether vdev is UP - * @vdev: objmgr vdev handle - * - * Return:true if vdev is up else false - */ -static inline -bool pmo_is_vdev_up(struct wlan_objmgr_vdev *vdev) -{ - enum wlan_vdev_state state = WLAN_VDEV_S_INIT; - - if (!vdev) { - pmo_err("vdev context is invalid!"); - return false; - } - state = wlan_vdev_mlme_get_state(vdev); - - return state == WLAN_VDEV_S_RUN; -} - -#endif /* end of _WLAN_PMO_MAIN_H_ */ diff --git a/pmo/core/inc/wlan_pmo_mc_addr_filtering.h b/pmo/core/inc/wlan_pmo_mc_addr_filtering.h deleted file mode 100644 index ddedb64036..0000000000 --- a/pmo/core/inc/wlan_pmo_mc_addr_filtering.h +++ /dev/null @@ -1,129 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Declare mc addr filtering offload feature API's - */ - -#ifndef _WLAN_PMO_MC_ADDR_FILTERING_H_ -#define _WLAN_PMO_MC_ADDR_FILTERING_H_ - -#include "wlan_pmo_common_public_struct.h" -#include "wlan_pmo_mc_addr_filtering_public_struct.h" - -/** - * pmo_core_set_mc_filter_req() -send mc filter set request - * @vdev: objmgr vdev - * @mc_list: a list of mc addresses to set in fwr - * - * Return: QDF_STATUS_SUCCESS in success else error codes - */ -QDF_STATUS pmo_core_set_mc_filter_req(struct wlan_objmgr_vdev *vdev, - struct pmo_mc_addr_list *mc_list); - -/** - * pmo_clear_mc_filter_req() -send mc filter clear request - * @vdev: objmgr vdev - * @mc_list: a list of mc addresses to clear in fwr - * - * Return: QDF_STATUS_SUCCESS in success else error codes - */ -QDF_STATUS pmo_core_clear_mc_filter_req(struct wlan_objmgr_vdev *vdev, - struct pmo_mc_addr_list *mc_list); - -/** - * pmo_core_cache_mc_addr_list(): API to cache mc addr list in pmo vdev priv obj - * @psoc: objmgr psoc handle - * @vdev_id: vdev id - * @gtk_req: pmo gtk req param - * - * Return QDF_STATUS_SUCCESS -in case of success else return error - */ -QDF_STATUS pmo_core_cache_mc_addr_list( - struct pmo_mc_addr_list_params *mc_list_config); - -/** - * pmo_core_flush_mc_addr_list(): API to flush mc addr list in pmo vdev priv obj - * @psoc: objmgr psoc handle - * @vdev_id: vdev id - * - * Return QDF_STATUS_SUCCESS -in case of success else return error - */ -QDF_STATUS pmo_core_flush_mc_addr_list(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id); - -/** - * pmo_core_enable_mc_addr_filtering_in_fwr(): Enable cached mc add list in fwr - * @psoc: objmgr psoc handle - * @vdev_id: vdev id - * @gtk_req: pmo gtk req param - * @action: true for enable els false - * - * API to enable cached mc add list in fwr - * - * Return QDF_STATUS_SUCCESS -in case of success else return error - */ -QDF_STATUS pmo_core_enable_mc_addr_filtering_in_fwr( - struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, - enum pmo_offload_trigger trigger); - -/** - * pmo_core_disable_mc_addr_filtering_in_fwr(): Disable cached mc addr list - * @psoc: objmgr psoc handle - * @vdev_id: vdev id - * @gtk_req: pmo gtk req param - * @action: true for enable els false - * - * API to disable cached mc add list in fwr - * - * Return QDF_STATUS_SUCCESS -in case of success else return error - */ -QDF_STATUS pmo_core_disable_mc_addr_filtering_in_fwr( - struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, - enum pmo_offload_trigger trigger); - -/** - * pmo_core_get_mc_addr_list_count() -set mc address count - * @psoc: objmgr psoc - * @vdev_id: vdev id - * - * Return: set mc address count - */ -void pmo_core_set_mc_addr_list_count(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, uint8_t count); - -/** - * pmo_core_get_mc_addr_list_count() -get current mc address count - * @psoc: objmgr psoc - * @vdev_id: vdev id - * - * Return: current mc address count - */ -int pmo_core_get_mc_addr_list_count(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id); - -/** - * pmo_core_max_mc_addr_supported() -get max supported mc addresses - * @psoc: objmgr psoc - * - * Return: max supported mc addresses - */ -uint8_t pmo_core_max_mc_addr_supported(struct wlan_objmgr_psoc *psoc); - -#endif /* end of _WLAN_PMO_MC_ADDR_FILTERING_H_ */ diff --git a/pmo/core/inc/wlan_pmo_ns.h b/pmo/core/inc/wlan_pmo_ns.h deleted file mode 100644 index de30ba9b26..0000000000 --- a/pmo/core/inc/wlan_pmo_ns.h +++ /dev/null @@ -1,72 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Declare ns offload feature API's - */ - -#ifndef _WLAN_PMO_NS_H_ -#define _WLAN_PMO_NS_H_ - -#include "wlan_pmo_common_public_struct.h" -#include "wlan_pmo_ns_public_struct.h" - -/** - * pmo_core_cache_ns_offload_req() - API to cache ns req in pmo vdev priv ctx - * @ns_req: ns offload request - * - * API to cache ns offload in pmo vdev priv ctx - * - * Return:QDF_STATUS_SUCCESS in case of success else return error - */ -QDF_STATUS pmo_core_cache_ns_offload_req(struct pmo_ns_req *ns_req); - -/** - * pmo_core_flush_ns_offload_req() - API to flush ns req from pmo vdev priv ctx - * @vdev: vdev objmgr handle - * - * API to flush ns offload from pmo vdev priv ctx - * - * Return: QDF_STATUS_SUCCESS in case of success else return error - */ -QDF_STATUS pmo_core_flush_ns_offload_req(struct wlan_objmgr_vdev *vdev); - -/** - * pmo_core_enable_ns_offload_in_fwr() - API to enable ns offload in fwr - * @vdev: objmgr vdev - * @trigger: trigger reason enable ns offload - * - * API to enable ns offload in fwr from vdev priv ctx - * - * Return: QDF_STATUS_SUCCESS in case of success else return error - */ -QDF_STATUS pmo_core_enable_ns_offload_in_fwr(struct wlan_objmgr_vdev *vdev, - enum pmo_offload_trigger trigger); - -/** - * pmo_core_disable_ns_offload_in_fwr() - API to disable ns offload in fwr - * @vdev: objmgr vdev - * @trigger: trigger reason disable ns offload - * - * API to disable arp offload in fwr - * - * Return: QDF_STATUS_SUCCESS in case of success else return error - */ -QDF_STATUS pmo_core_disable_ns_offload_in_fwr(struct wlan_objmgr_vdev *vdev, - enum pmo_offload_trigger trigger); - -#endif /* end of _WLAN_PMO_NS_H_ */ diff --git a/pmo/core/inc/wlan_pmo_objmgr.h b/pmo/core/inc/wlan_pmo_objmgr.h deleted file mode 100644 index 10b98894cc..0000000000 --- a/pmo/core/inc/wlan_pmo_objmgr.h +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -/** - * DOC: This file contains various object manager related wrappers and helpers - */ - -#ifndef _WLAN_PMO_OBJMGR_H -#define _WLAN_PMO_OBJMGR_H - -#include "wlan_cmn.h" -#include "wlan_objmgr_cmn.h" -#include "wlan_objmgr_peer_obj.h" -#include "wlan_objmgr_vdev_obj.h" -#include "wlan_objmgr_pdev_obj.h" -#include "wlan_objmgr_psoc_obj.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -/* Get/Put Ref */ - -#define pmo_peer_get_ref(peer) wlan_objmgr_peer_try_get_ref(peer, WLAN_PMO_ID) -#define pmo_peer_put_ref(peer) wlan_objmgr_peer_release_ref(peer, WLAN_PMO_ID) - -#define pmo_vdev_get_ref(vdev) wlan_objmgr_vdev_try_get_ref(vdev, WLAN_PMO_ID) -#define pmo_vdev_put_ref(vdev) wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID) - -#define pmo_pdev_get_ref(pdev) wlan_objmgr_pdev_try_get_ref(pdev, WLAN_PMO_ID) -#define pmo_pdev_put_ref(pdev) wlan_objmgr_pdev_release_ref(pdev, WLAN_PMO_ID) - -#define pmo_psoc_get_ref(psoc) wlan_objmgr_psoc_try_get_ref(psoc, WLAN_PMO_ID) -#define pmo_psoc_put_ref(psoc) wlan_objmgr_psoc_release_ref(psoc, WLAN_PMO_ID) - -/* Private Data */ - -#define pmo_vdev_get_priv_nolock(vdev) \ - wlan_objmgr_vdev_get_comp_private_obj(vdev, WLAN_UMAC_COMP_PMO) -#define pmo_psoc_get_priv_nolock(psoc) \ - wlan_objmgr_psoc_get_comp_private_obj(psoc, WLAN_UMAC_COMP_PMO) - -/* Ids */ - -static inline uint8_t -pmo_vdev_get_id(struct wlan_objmgr_vdev *vdev) -{ - uint8_t vdev_id; - - vdev_id = wlan_vdev_get_id(vdev); - - QDF_BUG(vdev_id < WLAN_UMAC_PSOC_MAX_VDEVS); - - return vdev_id; -} - -/* Tree Navigation */ - -/** - * !PLEASE READ! - * - * The following are objmgr naviation helpers for traversing objmgr object - * trees. - * - * Objmgr ensures parents of an objmgr object cannot be freed while a valid - * reference to one of its children is held. Based on this fact, all of these - * navigation helpers make the following assumptions to ensure safe usage: - * - * 1) The caller must hold a valid reference to the input objmgr object! - * E.g. Use pmo_[peer|vdev|pdev|psoc]_get_ref() on the input objmgr object - * before using these APIs - * 2) Given assumption #1, the caller does not need to hold a reference to the - * parents of the input objmgr object - * 3) Given assumption #1, parents of the input objmgr object cannot be null - * 4) Given assumption #1, private contexts of any parent of the input objmgr - * object cannot be null - * - * These characteristics remove the need for most sanity checks when dealing - * with objmgr objects. However, please note that if you ever walk the tree - * from parent to child, references must be acquired all the way down! - * - * Example #1: - * - * psoc = pmo_vdev_get_psoc(vdev); - * if (!psoc) - * // this is dead code - * - * Example #2: - * - * psoc_priv = pmo_psoc_get_priv(psoc); - * if (!psoci_priv) - * // this is dead code - * - * Example #3: - * - * status = pmo_vdev_get_ref(vdev); - * - * ... - * - * psoc = pmo_vdev_get_psoc(vdev); - * - * // the next line is redundant, don't do it! - * status = pmo_psoc_get_ref(psoc); - */ - -/* Tree Navigation: psoc */ - -static inline struct wlan_objmgr_vdev * -pmo_psoc_get_vdev(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id) -{ - struct wlan_objmgr_vdev *vdev; - - if (vdev_id >= WLAN_UMAC_PSOC_MAX_VDEVS) { - QDF_BUG(0); - return NULL; - } - - wlan_psoc_obj_lock(psoc); - vdev = psoc->soc_objmgr.wlan_vdev_list[vdev_id]; - wlan_psoc_obj_unlock(psoc); - - return vdev; -} - -static inline struct pmo_psoc_priv_obj * -pmo_psoc_get_priv(struct wlan_objmgr_psoc *psoc) -{ - struct pmo_psoc_priv_obj *psoc_priv; - - psoc_priv = pmo_psoc_get_priv_nolock(psoc); - - QDF_BUG(psoc_priv); - - return psoc_priv; -} - -/* Tree Navigation: pdev */ - -static inline struct wlan_objmgr_psoc * -pmo_pdev_get_psoc(struct wlan_objmgr_pdev *pdev) -{ - struct wlan_objmgr_psoc *psoc; - - psoc = wlan_pdev_get_psoc(pdev); - - QDF_BUG(psoc); - - return psoc; -} - -static inline struct pmo_psoc_priv_obj * -pmo_pdev_get_psoc_priv(struct wlan_objmgr_pdev *pdev) -{ - return pmo_psoc_get_priv(pmo_pdev_get_psoc(pdev)); -} - -/* Tree Navigation: vdev */ - -static inline struct pmo_vdev_priv_obj * -pmo_vdev_get_priv(struct wlan_objmgr_vdev *vdev) -{ - struct pmo_vdev_priv_obj *vdev_priv; - - vdev_priv = pmo_vdev_get_priv_nolock(vdev); - - QDF_BUG(vdev_priv); - - return vdev_priv; -} - -static inline struct wlan_objmgr_pdev * -pmo_vdev_get_pdev(struct wlan_objmgr_vdev *vdev) -{ - struct wlan_objmgr_pdev *pdev; - - pdev = wlan_vdev_get_pdev(vdev); - - QDF_BUG(pdev); - - return pdev; -} - -static inline struct wlan_objmgr_psoc * -pmo_vdev_get_psoc(struct wlan_objmgr_vdev *vdev) -{ - return pmo_pdev_get_psoc(pmo_vdev_get_pdev(vdev)); -} - -static inline struct pmo_psoc_priv_obj * -pmo_vdev_get_psoc_priv(struct wlan_objmgr_vdev *vdev) -{ - return pmo_psoc_get_priv(pmo_pdev_get_psoc(pmo_vdev_get_pdev(vdev))); -} - -#endif /* _WLAN_PMO_OBJMGR_H */ diff --git a/pmo/core/inc/wlan_pmo_pkt_filter.h b/pmo/core/inc/wlan_pmo_pkt_filter.h deleted file mode 100644 index 0a900e5fe1..0000000000 --- a/pmo/core/inc/wlan_pmo_pkt_filter.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Declare packet filter feature API's - */ - -#ifndef _WLAN_PMO_PKT_FILTER_H_ -#define _WLAN_PMO_PKT_FILTER_ - -#include "wlan_pmo_pkt_filter_public_struct.h" - -struct wlan_objmgr_psoc; - -/** - * pmo_set_pkt_fltr_req() - Set packet filter - * @vdev: objmgr vdev - * @pmo_set_pkt_fltr_req: - * @vdev_id: - * API to set packet filter - * - * Return: QQDF_STATUS_SUCCESS in case of success else return error - */ -QDF_STATUS pmo_core_set_pkt_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_rcv_pkt_fltr_cfg *pmo_set_pkt_fltr_req, - uint8_t vdev_id); - -/** - * pmo_core_clear_pkt_filter() - Clear packet filter - * @vdev: objmgr vdev - * @pmo_clr_pkt_fltr_req: - * @vdev_id: - * - * API to clear packet filter - * - * Return: QQDF_STATUS_SUCCESS in case of success else return error - */ -QDF_STATUS pmo_core_clear_pkt_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_rcv_pkt_fltr_clear_param *pmo_clr_pkt_fltr_req, - uint8_t vdev_id); - -#endif /* end of _WLAN_PMO_PKT_FILTER_H_ */ - diff --git a/pmo/core/inc/wlan_pmo_static_config.h b/pmo/core/inc/wlan_pmo_static_config.h deleted file mode 100644 index fe4544b79c..0000000000 --- a/pmo/core/inc/wlan_pmo_static_config.h +++ /dev/null @@ -1,117 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Declare static configuration on vdev attach - */ - -#ifndef _WLAN_PMO_STATIC_CONFIG_H_ -#define _WLAN_PMO_STATIC_CONFIG_H_ - -#include "wlan_pmo_common_public_struct.h" -#include "wlan_pmo_wow.h" - -/** - * pmo_register_wow_wakeup_events() - register vdev specific wake events with fw - * @vdev: objmgr vdev - * - * WoW wake up event rule is following: - * 1) STA mode and P2P CLI mode wake up events are same - * 2) SAP mode and P2P GO mode wake up events are same - * 3) IBSS mode wake events are same as STA mode plus WOW_BEACON_EVENT - * - * Return: none - */ -void pmo_register_wow_wakeup_events(struct wlan_objmgr_vdev *vdev); - -/** - * pmo_register_wow_default_patterns() - register default wow patterns with fw - * @vdev_id: vdev id - * - * WoW default wake up pattern rule is: - * - For STA & P2P CLI mode register for same STA specific wow patterns - * - For SAP/P2P GO & IBSS mode register for same SAP specific wow patterns - * - * Return: none - */ -void pmo_register_wow_default_patterns(struct wlan_objmgr_vdev *vdev); - -/** - * pmo_register_action_frame_patterns() - register action frame map to fw - * @vdev: objmgr vdev - * - * This is called to push action frames wow patterns from local - * cache to firmware. - * - * Return: None - */ -void pmo_register_action_frame_patterns( - struct wlan_objmgr_vdev *vdev); - -/** - * pmo_update_target_service(): API to update wmi target service info to PMO. - * @psoc: objmgr psoc - * @wmi_service: wmi service number - * @value: true when wmi service is enabled in firmware otherwise false. - * - * Return void - */ -void pmo_update_target_service(struct wlan_objmgr_psoc *psoc, - WMI_SERVICE service, bool value); - -/** - * pmo_update_ra_limit() - update ra limit based on bpf filter - * enabled or not - * @psoc: objmgr psoc - * @bpf_enabled: true when bpf service is enabled else false - * - * Return: none - */ -void pmo_update_ra_limit(struct wlan_objmgr_psoc *psoc, - bool bpf_enabled); - -/** - * pmo_set_wow_event_bitmap() - Assign bitmask with wow event - * @event: wow event - * @wow_bitmap_size: wow bitmask size - * @bitmask: wow bitmask field - * - * Return: none - */ -void pmo_set_wow_event_bitmap(WOW_WAKE_EVENT_TYPE event, - uint32_t wow_bitmap_size, - uint32_t *bitmask); - -/** - * pmo_set_sta_wow_bitmask() - set predefined STA wow wakeup events - * @bitmask: bitmask field - * @wow_bitmask_size: bitmask field size - * - * Return: none - */ -void pmo_set_sta_wow_bitmask(uint32_t *bitmask, uint32_t wow_bitmask_size); - -/** - * pmo_set_sap_wow_bitmask() - set predefined SAP wow wakeup events - * @bitmask: bitmask field - * @wow_bitmask_size: bitmask field size - * - * Return: none - */ -void pmo_set_sap_wow_bitmask(uint32_t *bitmask, uint32_t wow_bitmask_size); - -#endif /* end of _WLAN_PMO_STATIC_CONFIG_H_ */ diff --git a/pmo/core/inc/wlan_pmo_suspend_resume.h b/pmo/core/inc/wlan_pmo_suspend_resume.h deleted file mode 100644 index 516f428ec3..0000000000 --- a/pmo/core/inc/wlan_pmo_suspend_resume.h +++ /dev/null @@ -1,437 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Declare suspend / resume related API's - */ - -#ifndef _WLAN_PMO_SUSPEND_RESUME_H_ -#define _WLAN_PMO_SUSPEND_RESUME_H_ - -#include "wlan_pmo_common_public_struct.h" -#include "wlan_pmo_wow.h" - -/** - * pmo_core_configure_dynamic_wake_events(): configure dyanmic wake events - * @wma: wma handle - * - * Some wake events need to be enabled dynamically. Control those here. - * - * Return: none - */ -void pmo_core_configure_dynamic_wake_events(struct wlan_objmgr_psoc *psoc); - -/** - * pmo_core_get_wow_bus_suspend(): API to get wow bus is suspended or not - * @psoc: objmgr psoc handle - * - * Return: True if bus suspende else false - */ -static inline -bool pmo_core_get_wow_bus_suspend(struct wlan_objmgr_psoc *psoc) -{ - bool value; - struct pmo_psoc_priv_obj *psoc_ctx; - - psoc_ctx = pmo_psoc_get_priv(psoc); - qdf_spin_lock_bh(&psoc_ctx->lock); - value = psoc_ctx->wow.is_wow_bus_suspended; - qdf_spin_unlock_bh(&psoc_ctx->lock); - - return value; -} - -/** - * pmo_core_psoc_user_space_suspend_req() - Core handle user space suspend req - * @psoc: objmgr psoc handle - * @type: type of suspend - * - * Pmo core Handles user space suspend request for psoc - * - * Return: QDF status - */ -QDF_STATUS pmo_core_psoc_user_space_suspend_req(struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type type); - -/** - * pmo_core_psoc_user_space_resume_req() - Core handle user space resume req - * @psoc: objmgr psoc handle - * @type: type of suspend from resume required - * - * Pmo core Handles user space resume request for psoc - * - * Return: QDF status - */ -QDF_STATUS pmo_core_psoc_user_space_resume_req(struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type type); - -/** - * pmo_core_psoc_bus_suspend_req(): handles bus suspend for psoc - * @psoc: objmgr psoc - * @type: is this suspend part of runtime suspend or system suspend? - * @wow_params: collection of wow enable override parameters - * - * Bails if a scan is in progress. - * Calls the appropriate handlers based on configuration and event. - * - * Return: QDF_STATUS_SUCCESS for success or error code - */ -QDF_STATUS pmo_core_psoc_bus_suspend_req(struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type type, - struct pmo_wow_enable_params *wow_params); - -#ifdef FEATURE_RUNTIME_PM -/** - * pmo_core_psoc_bus_runtime_suspend(): handles bus runtime suspend - * @psoc: objmgr psoc - * @pld_cb: callback to do link auto suspend - * - * Suspend the wlan bus without apps suspend. - * - * Return: QDF_STATUS_SUCCESS for success or error code - */ -QDF_STATUS pmo_core_psoc_bus_runtime_suspend(struct wlan_objmgr_psoc *psoc, - pmo_pld_auto_suspend_cb pld_cb); - -/** - * pmo_core_psoc_bus_runtime_resume(): handles bus runtime resume - * @psoc: objmgr psoc - * @pld_cb: callback to do link auto resume - * - * Resume the wlan bus from runtime suspend. - * - * Return: QDF_STATUS_SUCCESS for success or error code - */ -QDF_STATUS pmo_core_psoc_bus_runtime_resume(struct wlan_objmgr_psoc *psoc, - pmo_pld_auto_resume_cb pld_cb); -#endif - -/** - * pmo_core_psoc_suspend_target() -Send suspend target command - * @psoc: objmgr psoc handle - * @disable_target_intr: disable target interrupt - * - * Return: QDF_STATUS_SUCCESS for success or error code - */ -QDF_STATUS pmo_core_psoc_suspend_target(struct wlan_objmgr_psoc *psoc, - int disable_target_intr); - -/** - * pmo_core_psoc_bus_resume() -handle bus resume request for psoc - * @psoc: objmgr psoc handle - * @type: is this suspend part of runtime suspend or system suspend? - * - * Return:QDF_STATUS_SUCCESS on success else error code - */ -QDF_STATUS pmo_core_psoc_bus_resume_req(struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type type); - -/** - * pmo_core_get_vdev_dtim_period() - Get vdev dtim period - * @vdev: objmgr vdev handle - * - * Return: Vdev dtim period - */ -static inline -uint8_t pmo_core_get_vdev_dtim_period(struct wlan_objmgr_vdev *vdev) -{ - uint8_t dtim_period = 0; - - if (!vdev) { - pmo_err("vdev is null"); - QDF_ASSERT(0); - return 0; - } - /* TODO */ - /* dtim_period = wlan_vdev_mlme_get_dtim_period(vdev); */ - - return dtim_period; -} - -/** - * pmo_core_get_vdev_beacon_interval() - Get vdev beacon interval - * @vdev: objmgr vdev handle - * - * Return: Vdev beacon interval - */ -static inline -uint16_t pmo_core_get_vdev_beacon_interval(struct wlan_objmgr_vdev *vdev) -{ - uint16_t beacon_interval = 0; - - if (!vdev) { - pmo_err("vdev is null"); - QDF_ASSERT(0); - return 0; - } - /* TODO */ - /* beacon_interval = wlan_vdev_mlme_get_beacon_interval(vdev); */ - - return beacon_interval; -} - -/** - * pmo_core_update_alt_modulated_dtim_enable() - update alt modulatate dtim - * @vdev: objmgr vdev handle - * @value: true when alt modulated dtim enable else false - * - * Return: None - */ -static inline -void pmo_core_update_alt_modulated_dtim_enable(struct wlan_objmgr_vdev *vdev, - bool value) -{ - struct pmo_vdev_priv_obj *vdev_ctx; - - vdev_ctx = pmo_vdev_get_priv(vdev); - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - vdev_ctx->alt_modulated_dtim_enable = value; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); -} - -/** - * pmo_core_vdev_set_dtim_policy() - Set vdev beacon dtim policy - * @vdev: objmgr vdev handle - * @value: carry vdev dtim policy - * - * Return: None - */ -static inline -void pmo_core_vdev_set_dtim_policy(struct wlan_objmgr_vdev *vdev, - uint32_t value) -{ - struct pmo_vdev_priv_obj *vdev_ctx; - - vdev_ctx = pmo_vdev_get_priv(vdev); - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - vdev_ctx->dtim_policy = value; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); -} - -/** - * pmo_core_vdev_get_dtim_policy() - Get vdev beacon dtim policy - * @vdev: objmgr vdev handle - * - * Return: vdev dtim policy - */ -static inline -uint32_t pmo_core_vdev_get_dtim_policy(struct wlan_objmgr_vdev *vdev) -{ - uint32_t value; - struct pmo_vdev_priv_obj *vdev_ctx; - - vdev_ctx = pmo_vdev_get_priv(vdev); - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - value = vdev_ctx->dtim_policy; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - return value; -} - -/** - * pmo_core_update_power_save_mode() - update power save mode - * @vdev: objmgr vdev handle - * @value:describe vdev power save mode - * - * Return: None - */ -static inline -void pmo_core_psoc_update_power_save_mode(struct wlan_objmgr_psoc *psoc, - uint8_t value) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - - psoc_ctx = pmo_psoc_get_priv(psoc); - qdf_spin_lock_bh(&psoc_ctx->lock); - psoc_ctx->psoc_cfg.power_save_mode = value; - qdf_spin_unlock_bh(&psoc_ctx->lock); -} - -/** - * pmo_core_psoc_get_power_save_mode() - Get psoc power save mode - * @psoc: objmgr psoc handle - * - * Return: vdev psoc power save mode value - */ -static inline -uint8_t pmo_core_psoc_get_power_save_mode(struct wlan_objmgr_psoc *psoc) -{ - uint8_t value; - struct pmo_psoc_priv_obj *psoc_ctx; - - psoc_ctx = pmo_psoc_get_priv(psoc); - qdf_spin_lock_bh(&psoc_ctx->lock); - value = psoc_ctx->psoc_cfg.power_save_mode; - qdf_spin_unlock_bh(&psoc_ctx->lock); - - return value; -} - -/** - * pmo_core_psoc_get_qpower_config() - get qpower configuration - * @psoc: objmgr psoc handle - * - * Power Save Offload configuration: - * 0 -> Power save offload is disabled - * 1 -> Legacy Power save enabled + Deep sleep Disabled - * 2 -> QPower enabled + Deep sleep Disabled - * 3 -> Legacy Power save enabled + Deep sleep Enabled - * 4 -> QPower enabled + Deep sleep Enabled - * 5 -> Duty cycling QPower enabled - * - * Return: enum powersave_qpower_mode with below values - * QPOWER_DISABLED if QPOWER is disabled - * QPOWER_ENABLED if QPOWER is enabled - * QPOWER_DUTY_CYCLING if DUTY CYCLING QPOWER is enabled - */ -static inline -enum pmo_power_save_qpower_mode pmo_core_psoc_get_qpower_config( - struct wlan_objmgr_psoc *psoc) -{ - uint8_t ps_mode = pmo_core_psoc_get_power_save_mode(psoc); - - switch (ps_mode) { - case pmo_ps_qpower_no_deep_sleep: - case pmo_ps_qpower_deep_sleep: - pmo_info("QPOWER is enabled in power save mode %d", ps_mode); - return pmo_qpower_enabled; - case pmo_ps_duty_cycling_qpower: - pmo_info("DUTY cycling QPOWER is enabled in power save mode %d", - ps_mode); - return pmo_qpower_duty_cycling; - default: - pmo_info("QPOWER is disabled in power save mode %d", - ps_mode); - return pmo_qpower_disabled; - } -} - -/** - * pmo_core_vdev_get_pause_bitmap() - Get vdev pause bitmap - * @psoc_ctx: psoc priv ctx - * @vdev_id: vdev id - * - * Return: vdev pause bitmap - */ -static inline -uint16_t pmo_core_vdev_get_pause_bitmap(struct pmo_psoc_priv_obj *psoc_ctx, - uint8_t vdev_id) -{ - uint16_t value = 0; - pmo_get_pause_bitmap handler; - - qdf_spin_lock_bh(&psoc_ctx->lock); - handler = psoc_ctx->get_pause_bitmap; - qdf_spin_unlock_bh(&psoc_ctx->lock); - - if (handler) - value = handler(vdev_id); - - return value; -} - -/** - * wma_is_vdev_in_ap_mode() - check that vdev is in ap mode or not - * @wma: wma handle - * @vdev_id: vdev id - * - * Helper function to know whether given vdev id - * is in AP mode or not. - * - * Return: True/False - */ -static inline -bool pmo_is_vdev_in_ap_mode(struct wlan_objmgr_vdev *vdev) -{ - enum tQDF_ADAPTER_MODE mode; - - mode = pmo_get_vdev_opmode(vdev); - - return (mode == QDF_SAP_MODE || mode == QDF_P2P_GO_MODE) == 1 ? 1 : 0; -} - -#ifdef QCA_IBSS_SUPPORT -/** - * pmo_is_vdev_in_ibss_mode() - check that vdev is in ibss mode or not - * @vdev: objmgr vdev handle - * @vdev_id: vdev id - * - * Helper function to know whether given vdev id - * is in IBSS mode or not. - * - * Return: True/False - */ -static inline -bool pmo_is_vdev_in_ibss_mode(struct wlan_objmgr_vdev *vdev) -{ - enum tQDF_ADAPTER_MODE mode; - - mode = pmo_get_vdev_opmode(vdev); - - return (mode == QDF_IBSS_MODE) ? true : false; -} -#else -static inline bool pmo_is_vdev_in_ibss_mode(struct wlan_objmgr_vdev *vdev) -{ - return false; -} -#endif /* QCA_IBSS_SUPPORT */ - -/** - * pmo_handle_initial_wake_up() - handle initial wake up - * @cb_ctx: callback context - * - * Return: None - */ -void pmo_core_psoc_handle_initial_wake_up(void *cb_ctx); - -/** - * pmo_core_psoc_is_target_wake_up_received() - check for initial wake up - * - * Check if target initial wake up is received and fail PM suspend gracefully - * - * Return: -EAGAIN if initial wake up is received else 0 - */ -int pmo_core_psoc_is_target_wake_up_received(struct wlan_objmgr_psoc *psoc); - -/** - * pmo_core_psoc_clear_target_wake_up() - clear initial wake up - * - * Clear target initial wake up reason - * - * Return: 0 for success and negative error code for failure - */ -int pmo_core_psoc_clear_target_wake_up(struct wlan_objmgr_psoc *psoc); - -/** - * pmo_core_psoc_target_suspend_acknowledge() - update target susspend status - * @context: HTC_INIT_INFO->context - * @wow_nack: true when wow is rejected - * - * Return: none - */ -void pmo_core_psoc_target_suspend_acknowledge(void *context, bool wow_nack); - -/** - * pmo_core_psoc_wakeup_host_event_received() - received host wake up event - * @psoc: objmgr psoc handle - * - * Return: None - */ -void pmo_core_psoc_wakeup_host_event_received(struct wlan_objmgr_psoc *psoc); - -#endif /* end of _WLAN_PMO_SUSPEND_RESUME_H_ */ diff --git a/pmo/core/inc/wlan_pmo_wow.h b/pmo/core/inc/wlan_pmo_wow.h deleted file mode 100644 index 47d2eb53a6..0000000000 --- a/pmo/core/inc/wlan_pmo_wow.h +++ /dev/null @@ -1,605 +0,0 @@ -/* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -/** - * DOC: Declare API's for wow pattern addition and deletion in fwr - */ - -#ifndef _WLAN_PMO_WOW_H_ -#define _WLAN_PMO_WOW_H_ - -#include "wlan_pmo_main.h" -#include "wlan_pmo_wow_public_struct.h" -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_common_public_struct.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -/** - * DOC: wlan_pmo_wowl - * - * This module houses all the logic for WOW(wake on wireless) in - * PMO(Power Management and Offload). - * - * It provides the following APIs - * - * - Ability to enable/disable following WoWL modes - * 1) Magic packet (MP) mode - * 2) Pattern Byte Matching (PBM) mode - * - Ability to add/remove patterns for PBM - * - * A Magic Packet is a packet that contains 6 0xFFs followed by 16 - * contiguous copies of the receiving NIC's Ethernet address. There is - * no API to configure Magic Packet Pattern. - * - * Wakeup pattern (used for PBM) is defined as following: - * struct - * { - * U8 PatternSize; // Non-Zero pattern size - * U8 PatternMaskSize; // Non-zero pattern mask size - * U8 PatternMask[PatternMaskSize]; // Pattern mask - * U8 Pattern[PatternSize]; // Pattern - * } hdd_wowl_ptrn_t; - * - * PatternSize and PatternMaskSize indicate size of the variable - * length Pattern and PatternMask. PatternMask indicates which bytes - * of an incoming packet should be compared with corresponding bytes - * in the pattern. - * - * Maximum allowed pattern size is 128 bytes. Maximum allowed - * PatternMaskSize is 16 bytes. - * - * Maximum number of patterns that can be configured is 8 - * - * PMO will add following 2 commonly used patterns for PBM by default: - * 1) ARP Broadcast Pattern - * 2) Unicast Pattern - * - * However note that WoWL will not be enabled by default by PMO. WoWL - * needs to enabled explcitly by exercising the iwpriv command. - * - * PMO will expose an API that accepts patterns as Hex string in the - * following format: - * "PatternSize:PatternMaskSize:PatternMask:Pattern" - * - * Multiple patterns can be specified by deleimiting each pattern with - * the ';' token: - * "PatternSize1:PatternMaskSize1:PatternMask1:Pattern1;PatternSize2:..." - * - * Patterns can be configured dynamically via iwpriv cmd or statically - * via qcom_cfg.ini file - * - * PBM (when enabled) can perform filtering on unicast data or - * broadcast data or both. These configurations are part of factory - * default (cfg.dat) and the default behavior is to perform filtering - * on both unicast and data frames. - * - * MP filtering (when enabled) is performed ALWAYS on both unicast and - * broadcast data frames. - * - * Management frames are not subjected to WoWL filtering and are - * discarded when WoWL is enabled. - * - * Whenever a patern match succeeds, RX path is restored and packets - * (both management and data) will be pushed to the host from that - * point onwards. Therefore, exit from WoWL is implicit and happens - * automatically when the first packet match succeeds. - * - * WoWL works on top of BMPS. So when WoWL is requested, SME will - * attempt to put the device in BMPS mode (if not already in BMPS). If - * attempt to BMPS fails, request for WoWL will be rejected. - */ - -#define PMO_WOW_MAX_EVENT_BM_LEN 4 - -/** - * pmo_get_and_increment_wow_default_ptrn() -Get and increment wow default ptrn - * @vdev_ctx: pmo vdev priv ctx - * - * API to get and increment wow default ptrn - * - * Return: current wow default ptrn count - */ -static inline uint8_t pmo_get_and_increment_wow_default_ptrn( - struct pmo_vdev_priv_obj *vdev_ctx) -{ - uint8_t count; - - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - count = vdev_ctx->num_wow_default_patterns++; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - return count; -} - -/** - * pmo_increment_wow_default_ptrn() -increment wow default ptrn - * @vdev_ctx: pmo vdev priv ctx - * - * API to increment wow default ptrn - * - * Return: None - */ -static inline void pmo_increment_wow_default_ptrn( - struct pmo_vdev_priv_obj *vdev_ctx) -{ - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - vdev_ctx->num_wow_default_patterns++; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); -} - -/** - * pmo_decrement_wow_default_ptrn() -decrement wow default ptrn - * @vdev_ctx: pmo vdev priv ctx - * - * API to decrement wow default ptrn - * - * Return: None - */ -static inline void pmo_decrement_wow_default_ptrn( - struct pmo_vdev_priv_obj *vdev_ctx) -{ - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - vdev_ctx->num_wow_default_patterns--; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); -} - -/** - * pmo_increment_wow_user_ptrn() -increment wow user ptrn - * @vdev_ctx: pmo vdev priv ctx - * - * API to increment wow user ptrn - * - * Return: None - */ -static inline void pmo_increment_wow_user_ptrn( - struct pmo_vdev_priv_obj *vdev_ctx) -{ - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - vdev_ctx->num_wow_user_patterns++; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); -} - -/** - * pmo_decrement_wow_user_ptrn() -decrement wow user ptrn - * @vdev_ctx: pmo vdev priv ctx - * - * API to decrement wow user ptrn - * - * Return: None - */ -static inline void pmo_decrement_wow_user_ptrn( - struct pmo_vdev_priv_obj *vdev_ctx) -{ - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - vdev_ctx->num_wow_user_patterns--; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); -} - -void pmo_dump_wow_ptrn(struct pmo_wow_add_pattern *ptrn); - -/** - * pmo_core_add_wow_pattern() - Function which will add the WoWL pattern to be - * used when PBM filtering is enabled - * @vdev: pointer to the vdev - * @ptrn: pointer to the pattern string to be added - * - * Return: false if any errors encountered, QDF_STATUS_SUCCESS otherwise - */ -QDF_STATUS pmo_core_add_wow_pattern(struct wlan_objmgr_vdev *vdev, - const char *ptrn); - -/** - * pmo_core_del_wow_pattern() - Function which will delete the WoWL pattern - * @vdev: pointer to the vdev - * @ptrn: pointer to the pattern string to be added - * - * Return: error if any errors encountered, QDF_STATUS_SUCCESS otherwise - */ -QDF_STATUS pmo_core_del_wow_pattern(struct wlan_objmgr_vdev *vdev, - const char *ptrn); - -/** - * pmo_core_wow_enter() - store enable/disable status for pattern - * @wma: wma handle - * @info: wow parameters - * - * Records pattern enable/disable status locally. This choice will - * take effect when the driver enter into suspend state. - * - * Return: QDF status - */ -QDF_STATUS pmo_core_wow_enter(struct wlan_objmgr_vdev *vdev, - struct pmo_wow_enter_params *wow_enter_param); - -/** - * pmo_core_wow_exit() - clear all wma states - * @wma: wma handle - * @info: wow params - * - * Return: QDF status - */ -QDF_STATUS pmo_core_wow_exit(struct wlan_objmgr_vdev *vdev); - -/** - * pmo_core_enable_wakeup_event() - enable wow wakeup events - * @psoc: objmgr psoc - * @vdev_id: vdev id - * @bitmap: Event bitmap - * - * Return: none - */ -void pmo_core_enable_wakeup_event(struct wlan_objmgr_psoc *psoc, - uint32_t vdev_id, uint32_t *bitmap); - -/** - * pmo_core_disable_wakeup_event() - disable wow wakeup events - * @psoc: objmgr psoc - * @vdev_id: vdev id - * @bitmap: Event bitmap - * - * Return: none - */ -void pmo_core_disable_wakeup_event(struct wlan_objmgr_psoc *psoc, - uint32_t vdev_id, uint32_t *bitmap); - -/** - * pmo_is_wow_applicable(): should enable wow - * @psoc: objmgr psoc object - * - * Enable WOW if any one of the condition meets, - * 1) Is any one of vdev in beaconning mode (in AP mode) ? - * 2) Is any one of vdev in connected state (in STA mode) ? - * 3) Is PNO in progress in any one of vdev ? - * 4) Is Extscan in progress in any one of vdev ? - * 5) Is P2P listen offload in any one of vdev? - * 6) Is any vdev in NAN data mode? BSS is already started at the - * the time of device creation. It is ready to accept data - * requests. - * 7) If LPASS feature is enabled - * 8) If NaN feature is enabled - * If none of above conditions is true then return false - * - * Return: true if wma needs to configure wow false otherwise. - */ -bool pmo_core_is_wow_applicable(struct wlan_objmgr_psoc *psoc); - -/** - * pmo_core_update_wow_enable() - update wow enable flag - * @psoc_ctx: Pointer to objmgr psoc handle - * @value: true if wow mode enable else false - * - * Return: None - */ -static inline -void pmo_core_update_wow_enable(struct pmo_psoc_priv_obj *psoc_ctx, - bool value) -{ - qdf_spin_lock_bh(&psoc_ctx->lock); - psoc_ctx->wow.wow_enable = value; - qdf_spin_unlock_bh(&psoc_ctx->lock); -} - -/** - * pmo_core_is_wow_mode_enabled() - check if wow needs to be enabled in fw - * @psoc_ctx: Pointer to objmgr psoc handle - * - * API to check if wow mode is enabled in fwr as part of apps suspend or not - * - * Return: true is wow mode is enabled else false - */ -static inline -bool pmo_core_is_wow_enabled(struct pmo_psoc_priv_obj *psoc_ctx) -{ - bool value; - - if (!psoc_ctx) { - pmo_err("psoc_ctx is null"); - return false; - } - - qdf_spin_lock_bh(&psoc_ctx->lock); - value = psoc_ctx->wow.wow_enable; - qdf_spin_unlock_bh(&psoc_ctx->lock); - pmo_debug("WoW enable %d", value); - - return value; -} - -/** - * pmo_core_set_wow_nack() - Set wow nack flag - * @psoc_ctx: Pointer to objmgr psoc handle - * @value: true if received wow nack from else false - * - * Return: None - */ -static inline -void pmo_core_set_wow_nack(struct pmo_psoc_priv_obj *psoc_ctx, bool value) -{ - qdf_spin_lock_bh(&psoc_ctx->lock); - psoc_ctx->wow.wow_nack = value; - qdf_spin_unlock_bh(&psoc_ctx->lock); -} - -/** - * pmo_core_get_wow_nack() - Get wow nack flag - * @psoc_ctx: Pointer to objmgr psoc handle - * - * Return: wow nack flag - */ -static inline -bool pmo_core_get_wow_nack(struct pmo_psoc_priv_obj *psoc_ctx) -{ - bool value; - - qdf_spin_lock_bh(&psoc_ctx->lock); - value = psoc_ctx->wow.wow_nack; - qdf_spin_unlock_bh(&psoc_ctx->lock); - - return value; -} -/** - * pmo_core_update_wow_enable_cmd_sent() - update wow enable cmd sent flag - * @psoc_ctx: Pointer to objmgr psoc handle - * @value: true if wow enable cmd sent else false - * - * Return: None - */ -static inline -void pmo_core_update_wow_enable_cmd_sent(struct pmo_psoc_priv_obj *psoc_ctx, - bool value) -{ - qdf_spin_lock_bh(&psoc_ctx->lock); - psoc_ctx->wow.wow_enable_cmd_sent = value; - qdf_spin_unlock_bh(&psoc_ctx->lock); -} - -/** - * pmo_core_get_wow_enable_cmd_sent() - Get wow enable cmd sent flag - * @psoc_ctx: Pointer to objmgr psoc handle - * - * Return: return true if wow enable cmd sent else false - */ -static inline -bool pmo_core_get_wow_enable_cmd_sent(struct pmo_psoc_priv_obj *psoc_ctx) -{ - bool value; - - qdf_spin_lock_bh(&psoc_ctx->lock); - value = psoc_ctx->wow.wow_enable_cmd_sent; - qdf_spin_unlock_bh(&psoc_ctx->lock); - - return value; -} - -/** - * pmo_core_update_wow_initial_wake_up() - update wow initial wake up - * @psoc_ctx: Pointer to objmgr psoc handle - * @value: true if wow initial wake up is received else false - * - * Return: None - */ -static inline -void pmo_core_update_wow_initial_wake_up(struct pmo_psoc_priv_obj *psoc_ctx, - bool value) -{ - qdf_spin_lock_bh(&psoc_ctx->lock); - psoc_ctx->wow.wow_initial_wake_up = value; - qdf_spin_unlock_bh(&psoc_ctx->lock); -} - -/** - * pmo_core_get_wow_initial_wake_up() - Get wow initial wake up - * @psoc_ctx: Pointer to objmgr psoc handle - * - * Return: true if wow initial wake up is received else false - */ -static inline -bool pmo_core_get_wow_initial_wake_up(struct pmo_psoc_priv_obj *psoc_ctx) -{ - bool value; - - qdf_spin_lock_bh(&psoc_ctx->lock); - value = psoc_ctx->wow.wow_initial_wake_up; - qdf_spin_unlock_bh(&psoc_ctx->lock); - - return value; -} - -#ifdef FEATURE_WLAN_EXTSCAN -/** - * pmo_core_is_extscan_in_progress(): check if a extscan is in progress - * @vdev: objmgr vdev handle - * - * Return: TRUE/FALSE - */ -static inline -bool pmo_core_is_extscan_in_progress(struct wlan_objmgr_vdev *vdev) -{ - bool extscan_in_progress; - struct pmo_vdev_priv_obj *vdev_ctx; - - vdev_ctx = pmo_vdev_get_priv(vdev); - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - extscan_in_progress = vdev_ctx->extscan_in_progress; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - return extscan_in_progress; -} - -/** - * pmo_core_update_extscan_in_progress(): update extscan is in progress flags - * @vdev: objmgr vdev handle - * @value:true if extscan is in progress else false - * - * Return: TRUE/FALSE - */ -static inline -void pmo_core_update_extscan_in_progress(struct wlan_objmgr_vdev *vdev, - bool value) -{ - struct pmo_vdev_priv_obj *vdev_ctx; - - vdev_ctx = pmo_vdev_get_priv(vdev); - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - vdev_ctx->extscan_in_progress = value; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); -} -#else -static inline -bool pmo_core_is_extscan_in_progress(struct wlan_objmgr_vdev *vdev) -{ - return false; -} - -static inline -void pmo_core_update_extscan_in_progress(struct wlan_objmgr_vdev *vdev, - bool value) -{ -} -#endif - -/** - * pmo_core_is_p2plo_in_progress(): check if p2plo is in progress - * @vdev: objmgr vdev handle - * - * Return: TRUE/FALSE - */ -static inline -bool pmo_core_is_p2plo_in_progress(struct wlan_objmgr_vdev *vdev) -{ - bool p2plo_in_progress; - struct pmo_vdev_priv_obj *vdev_ctx; - - vdev_ctx = pmo_vdev_get_priv(vdev); - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - p2plo_in_progress = vdev_ctx->p2plo_in_progress; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - return p2plo_in_progress; -} - -/** - * pmo_core_update_p2plo_in_progress(): update p2plo is in progress flags - * @vdev: objmgr vdev handle - * @value:true if p2plo is in progress else false - * - * Return: TRUE/FALSE - */ -static inline -void pmo_core_update_p2plo_in_progress(struct wlan_objmgr_vdev *vdev, - bool value) -{ - struct pmo_vdev_priv_obj *vdev_ctx; - - vdev_ctx = pmo_vdev_get_priv(vdev); - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - vdev_ctx->p2plo_in_progress = value; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); -} - -#ifdef WLAN_FEATURE_LPSS -/** - * pmo_is_lpass_enabled() - check if lpass is enabled - * @vdev: objmgr vdev handle - * - * WoW is needed if LPASS or NaN feature is enabled in INI because - * target can't wake up itself if its put in PDEV suspend when LPASS - * or NaN features are supported - * - * Return: true if lpass is enabled else false - */ -static inline -bool pmo_core_is_lpass_enabled(struct wlan_objmgr_vdev *vdev) -{ - bool lpass_enable; - struct pmo_vdev_priv_obj *vdev_ctx; - - vdev_ctx = pmo_vdev_get_priv(vdev); - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - lpass_enable = vdev_ctx->pmo_psoc_ctx->psoc_cfg.lpass_enable; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - return lpass_enable; -} -#else -static inline -bool pmo_core_is_lpass_enabled(struct wlan_objmgr_vdev *vdev) -{ - return false; -} -#endif - -#ifdef WLAN_FEATURE_NAN -/** - * pmo_is_nan_enabled() - check if NaN is enabled - * @vdev: objmgr vdev handle - * - * WoW is needed if LPASS or NaN feature is enabled in INI because - * target can't wake up itself if its put in PDEV suspend when LPASS - * or NaN features are supported - * - * Return: true if NaN is enabled else false - */ -static inline -bool pmo_core_is_nan_enabled(struct wlan_objmgr_vdev *vdev) -{ - bool nan_enable; - struct pmo_vdev_priv_obj *vdev_ctx; - - vdev_ctx = pmo_vdev_get_priv(vdev); - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - nan_enable = vdev_ctx->pmo_psoc_ctx->psoc_cfg.nan_enable; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - return nan_enable; -} -#else -static inline -bool pmo_core_is_nan_enabled(struct wlan_objmgr_vdev *vdev) -{ - return false; -} -#endif - -/** - * pmo_get_event_bitmap_idx() - get indices for extended wow bitmaps - * @event: wow event - * @wow_bitmap_size: WOW bitmap size - * @bit_idx: bit index - * @idx: byte index - * - * Return: none - */ -static inline void pmo_get_event_bitmap_idx(WOW_WAKE_EVENT_TYPE event, - uint32_t wow_bitmap_size, - uint32_t *bit_idx, - uint32_t *idx) -{ - - if (!bit_idx || !idx || wow_bitmap_size == 0) { - pmo_err("bit_idx:%p idx:%p wow_bitmap_size:%u", - bit_idx, idx, wow_bitmap_size); - return; - } - if (event == 0) { - *idx = *bit_idx = 0; - } else { - *idx = event / (wow_bitmap_size * 8); - *bit_idx = event % (wow_bitmap_size * 8); - } -} -#endif /* end of _WLAN_PMO_WOW_H_ */ diff --git a/pmo/core/src/wlan_pmo_arp.c b/pmo/core/src/wlan_pmo_arp.c deleted file mode 100644 index c419414844..0000000000 --- a/pmo/core/src/wlan_pmo_arp.c +++ /dev/null @@ -1,368 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Implements arp offload feature API's - */ - -#include "wlan_pmo_arp.h" -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_main.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -static QDF_STATUS pmo_core_cache_arp_in_vdev_priv( - struct pmo_arp_req *arp_req, - struct wlan_objmgr_vdev *vdev) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - struct pmo_arp_offload_params *request = NULL; - struct pmo_psoc_priv_obj *psoc_ctx; - struct pmo_vdev_priv_obj *vdev_ctx; - int index; - struct qdf_mac_addr peer_bssid; - - PMO_ENTER(); - psoc_ctx = pmo_psoc_get_priv(arp_req->psoc); - - vdev_ctx = pmo_vdev_get_priv(vdev); - - request = qdf_mem_malloc(sizeof(*request)); - if (!request) { - pmo_err("cannot allocate arp request"); - status = QDF_STATUS_E_NOMEM; - goto out; - } - - status = pmo_get_vdev_bss_peer_mac_addr(vdev, - &peer_bssid); - if (status != QDF_STATUS_SUCCESS) - goto out; - - qdf_mem_copy(&request->bssid.bytes, &peer_bssid.bytes, - QDF_MAC_ADDR_SIZE); - pmo_info("vdev self mac addr: %pM bss peer mac addr: %pM", - wlan_vdev_mlme_get_macaddr(vdev), - peer_bssid.bytes); - - request->enable = PMO_OFFLOAD_ENABLE; - /* converting u32 to IPV4 address */ - for (index = 0; index < PMO_IPV4_ADDR_LEN; index++) - request->host_ipv4_addr[index] = - (arp_req->ipv4_addr >> (index * 8)) & 0xFF; - - /* cache arp request */ - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - qdf_mem_copy(&vdev_ctx->vdev_arp_req, request, - sizeof(vdev_ctx->vdev_arp_req)); - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - pmo_info("arp offload ipv4 addr: %d.%d.%d.%d enable: %d", - request->host_ipv4_addr[0], - request->host_ipv4_addr[1], - request->host_ipv4_addr[2], - request->host_ipv4_addr[3], - request->enable); -out: - if (request) - qdf_mem_free(request); - PMO_EXIT(); - - return status; -} - -static QDF_STATUS pmo_core_flush_arp_from_vdev_priv( - struct wlan_objmgr_vdev *vdev) -{ - struct pmo_vdev_priv_obj *vdev_ctx; - - PMO_ENTER(); - - vdev_ctx = pmo_vdev_get_priv(vdev); - - /* clear arp request */ - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - qdf_mem_zero(&vdev_ctx->vdev_arp_req, sizeof(vdev_ctx->vdev_arp_req)); - vdev_ctx->vdev_arp_req.enable = PMO_OFFLOAD_DISABLE; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - PMO_EXIT(); - - return QDF_STATUS_SUCCESS; -} - -static QDF_STATUS pmo_core_do_enable_arp_offload(struct wlan_objmgr_vdev *vdev, - uint8_t vdev_id, enum pmo_offload_trigger trigger) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - struct pmo_psoc_priv_obj *psoc_ctx; - struct pmo_vdev_priv_obj *vdev_ctx; - - PMO_ENTER(); - - vdev_ctx = pmo_vdev_get_priv(vdev); - - psoc_ctx = vdev_ctx->pmo_psoc_ctx; - if (!psoc_ctx) { - pmo_err("psoc_ctx is NULL"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - switch (trigger) { - case pmo_ipv4_change_notify: - if (!psoc_ctx->psoc_cfg.active_mode_offload) { - pmo_info("active offload is disabled, skip in mode:%d", - trigger); - status = QDF_STATUS_E_INVAL; - goto out; - } - /* enable arp when active offload is true (ipv4 notifier) */ - status = pmo_tgt_enable_arp_offload_req(vdev, vdev_id); - break; - case pmo_apps_suspend: - if (psoc_ctx->psoc_cfg.active_mode_offload) { - pmo_info("active offload is enabled, skip in mode: %d", - trigger); - status = QDF_STATUS_E_INVAL; - goto out; - } - /* enable arp when active offload is false (apps suspend) */ - status = pmo_tgt_enable_arp_offload_req(vdev, vdev_id); - break; - default: - status = QDF_STATUS_E_INVAL; - pmo_err("invalid pmo trigger"); - break; - } -out: - PMO_EXIT(); - - return status; -} - -static QDF_STATUS pmo_core_do_disable_arp_offload(struct wlan_objmgr_vdev *vdev, - uint8_t vdev_id, enum pmo_offload_trigger trigger) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - struct pmo_psoc_priv_obj *psoc_ctx; - struct pmo_vdev_priv_obj *vdev_ctx; - - PMO_ENTER(); - - vdev_ctx = pmo_vdev_get_priv(vdev); - - psoc_ctx = vdev_ctx->pmo_psoc_ctx; - if (!psoc_ctx) { - pmo_err("psoc_ctx is NULL"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - switch (trigger) { - case pmo_apps_resume: - if (psoc_ctx->psoc_cfg.active_mode_offload) { - pmo_info("active offload is enabled, skip in mode: %d", - trigger); - status = QDF_STATUS_E_INVAL; - goto out; - } - /* disable arp on apps resume when active offload is disable */ - status = pmo_tgt_disable_arp_offload_req(vdev, vdev_id); - break; - default: - status = QDF_STATUS_E_INVAL; - pmo_err("invalid pmo trigger"); - break; - } -out: - PMO_EXIT(); - - return status; -} - -static QDF_STATUS pmo_core_arp_offload_sanity( - struct wlan_objmgr_vdev *vdev) -{ - struct pmo_vdev_priv_obj *vdev_ctx; - - if (!vdev) { - pmo_err("vdev is NULL"); - return QDF_STATUS_E_NULL_VALUE; - } - - vdev_ctx = pmo_vdev_get_priv(vdev); - if (!vdev_ctx->pmo_psoc_ctx->psoc_cfg.arp_offload_enable) { - pmo_err("user disabled arp offload using ini"); - return QDF_STATUS_E_INVAL; - } - - if (!pmo_core_is_vdev_supports_offload(vdev)) { - pmo_info("vdev in invalid opmode for arp offload %d", - pmo_get_vdev_opmode(vdev)); - return QDF_STATUS_E_INVAL; - } - - if (!pmo_core_is_vdev_connected(vdev)) - return QDF_STATUS_E_INVAL; - - return QDF_STATUS_SUCCESS; -} - -QDF_STATUS pmo_core_cache_arp_offload_req(struct pmo_arp_req *arp_req) -{ - QDF_STATUS status; - struct wlan_objmgr_vdev *vdev; - - PMO_ENTER(); - if (!arp_req) { - pmo_err("arp_req is NULL"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - if (!arp_req->psoc) { - pmo_err("psoc is NULL"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - vdev = pmo_psoc_get_vdev(arp_req->psoc, arp_req->vdev_id); - if (!vdev) { - pmo_err("vdev is NULL"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - status = pmo_vdev_get_ref(vdev); - if (QDF_IS_STATUS_ERROR(status)) - goto out; - - status = pmo_core_arp_offload_sanity(vdev); - if (status != QDF_STATUS_SUCCESS) - goto dec_ref; - - pmo_info("Cache arp for vdev id: %d psoc: %p vdev: %p", - arp_req->vdev_id, arp_req->psoc, vdev); - - status = pmo_core_cache_arp_in_vdev_priv(arp_req, vdev); -dec_ref: - pmo_vdev_put_ref(vdev); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_core_flush_arp_offload_req(struct wlan_objmgr_vdev *vdev) -{ - QDF_STATUS status; - uint8_t vdev_id; - - PMO_ENTER(); - if (!vdev) { - pmo_err("vdev is NULL"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - status = pmo_vdev_get_ref(vdev); - if (status != QDF_STATUS_SUCCESS) - goto out; - - status = pmo_core_arp_offload_sanity(vdev); - if (status != QDF_STATUS_SUCCESS) - goto def_ref; - - vdev_id = pmo_vdev_get_id(vdev); - pmo_info("Flush arp for vdev id: %d vdev: %p", vdev_id, vdev); - - status = pmo_core_flush_arp_from_vdev_priv(vdev); -def_ref: - pmo_vdev_put_ref(vdev); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_core_enable_arp_offload_in_fwr(struct wlan_objmgr_vdev *vdev, - enum pmo_offload_trigger trigger) -{ - QDF_STATUS status; - uint8_t vdev_id; - - PMO_ENTER(); - if (!vdev) { - pmo_err("vdev is NULL"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - status = pmo_vdev_get_ref(vdev); - if (status != QDF_STATUS_SUCCESS) - goto out; - - status = pmo_core_arp_offload_sanity(vdev); - if (status != QDF_STATUS_SUCCESS) - goto def_ref; - - vdev_id = pmo_vdev_get_id(vdev); - pmo_info("Enable arp offload in fwr vdev id: %d vdev: %p", - vdev_id, vdev); - - status = pmo_core_do_enable_arp_offload(vdev, vdev_id, trigger); -def_ref: - pmo_vdev_put_ref(vdev); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_core_disable_arp_offload_in_fwr(struct wlan_objmgr_vdev *vdev, - enum pmo_offload_trigger trigger) -{ - QDF_STATUS status; - uint8_t vdev_id; - - PMO_ENTER(); - if (!vdev) { - pmo_err("vdev is NULL"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - status = pmo_vdev_get_ref(vdev); - if (status != QDF_STATUS_SUCCESS) - goto out; - - status = pmo_core_arp_offload_sanity(vdev); - if (status != QDF_STATUS_SUCCESS) - goto def_ref; - - vdev_id = pmo_vdev_get_id(vdev); - pmo_info("Disable arp offload in fwr vdev id: %d vdev: %p", - vdev_id, vdev); - - status = pmo_core_do_disable_arp_offload(vdev, vdev_id, trigger); -def_ref: - pmo_vdev_put_ref(vdev); -out: - PMO_EXIT(); - - return status; -} - diff --git a/pmo/core/src/wlan_pmo_gtk.c b/pmo/core/src/wlan_pmo_gtk.c deleted file mode 100644 index 120ff04275..0000000000 --- a/pmo/core/src/wlan_pmo_gtk.c +++ /dev/null @@ -1,358 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Implements gtk offload feature API's - */ - -#include "wlan_pmo_gtk.h" -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_main.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -static QDF_STATUS pmo_core_cache_gtk_req_in_vdev_priv( - struct wlan_objmgr_vdev *vdev, - struct pmo_gtk_req *gtk_req) -{ - struct pmo_vdev_priv_obj *vdev_ctx; - QDF_STATUS status; - struct qdf_mac_addr peer_bssid; - - vdev_ctx = pmo_vdev_get_priv(vdev); - - status = pmo_get_vdev_bss_peer_mac_addr(vdev, &peer_bssid); - if (status != QDF_STATUS_SUCCESS) - return status; - - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - qdf_mem_copy(&vdev_ctx->vdev_gtk_req, gtk_req, - sizeof(vdev_ctx->vdev_gtk_req)); - qdf_mem_copy(&vdev_ctx->vdev_gtk_req.bssid, - &peer_bssid, QDF_MAC_ADDR_SIZE); - vdev_ctx->vdev_gtk_req.flags = PMO_GTK_OFFLOAD_ENABLE; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - return QDF_STATUS_SUCCESS; -} - -static QDF_STATUS pmo_core_flush_gtk_req_from_vdev_priv( - struct wlan_objmgr_vdev *vdev) -{ - struct pmo_vdev_priv_obj *vdev_ctx; - - vdev_ctx = pmo_vdev_get_priv(vdev); - - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - qdf_mem_zero(&vdev_ctx->vdev_gtk_req, sizeof(vdev_ctx->vdev_gtk_req)); - vdev_ctx->vdev_gtk_req.flags = PMO_GTK_OFFLOAD_DISABLE; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - return QDF_STATUS_SUCCESS; -} - -static QDF_STATUS pmo_core_do_enable_gtk_offload( - struct wlan_objmgr_vdev *vdev, - struct pmo_vdev_priv_obj *vdev_ctx, - struct pmo_gtk_req *op_gtk_req) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - uint8_t vdev_id; - - if (!pmo_core_is_vdev_supports_offload(vdev)) { - pmo_info("vdev in invalid opmode for gtk offload %d", - pmo_get_vdev_opmode(vdev)); - return QDF_STATUS_E_INVAL; - } - - if (!pmo_core_is_vdev_connected(vdev)) - return QDF_STATUS_E_INVAL; - - vdev_id = pmo_vdev_get_id(vdev); - - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - qdf_mem_copy(op_gtk_req, &vdev_ctx->vdev_gtk_req, - sizeof(*op_gtk_req)); - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - if ((op_gtk_req->flags == PMO_GTK_OFFLOAD_ENABLE) && - (qdf_atomic_read(&vdev_ctx->gtk_err_enable) == 1)) { - pmo_info("GTK Offload already enabled, Disabling vdev_id: %d", - vdev_id); - op_gtk_req->flags = PMO_GTK_OFFLOAD_DISABLE; - status = pmo_tgt_send_gtk_offload_req(vdev, op_gtk_req); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("Failed to disable GTK Offload"); - goto out; - } - pmo_debug("Enable GTK Offload again with updated inputs"); - op_gtk_req->flags = PMO_GTK_OFFLOAD_ENABLE; - } - - status = pmo_tgt_send_gtk_offload_req(vdev, op_gtk_req); -out: - - return status; -} - -static QDF_STATUS pmo_core_is_gtk_enabled_in_fwr( - struct wlan_objmgr_vdev *vdev, - struct pmo_vdev_priv_obj *vdev_ctx) -{ - QDF_STATUS status; - struct qdf_mac_addr peer_bssid; - - if (!pmo_core_is_vdev_supports_offload(vdev)) { - pmo_info("vdev in invalid opmode for gtk offload enable %d", - pmo_get_vdev_opmode(vdev)); - return QDF_STATUS_E_INVAL; - } - - if (!pmo_core_is_vdev_connected(vdev)) - return QDF_STATUS_E_INVAL; - - status = pmo_get_vdev_bss_peer_mac_addr(vdev, - &peer_bssid); - if (status != QDF_STATUS_SUCCESS) - return QDF_STATUS_E_INVAL; - - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - if (qdf_mem_cmp(&vdev_ctx->vdev_gtk_req.bssid, - &peer_bssid, QDF_MAC_ADDR_SIZE)) { - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - pmo_err("cache request mac:%pM, peer mac:%pM are not same", - vdev_ctx->vdev_gtk_req.bssid.bytes, - peer_bssid.bytes); - return QDF_STATUS_E_INVAL; - } - - if (vdev_ctx->vdev_gtk_req.flags != PMO_GTK_OFFLOAD_ENABLE) { - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - pmo_err("gtk flag is disabled hence no gtk rsp required"); - return QDF_STATUS_E_INVAL; - } - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - return QDF_STATUS_SUCCESS; -} - -static QDF_STATUS pmo_core_do_disable_gtk_offload( - struct wlan_objmgr_vdev *vdev, - struct pmo_vdev_priv_obj *vdev_ctx, - struct pmo_gtk_req *op_gtk_req) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - - status = pmo_core_is_gtk_enabled_in_fwr(vdev, vdev_ctx); - if (status != QDF_STATUS_SUCCESS) - return status; - - op_gtk_req->flags = PMO_GTK_OFFLOAD_DISABLE; - status = pmo_tgt_send_gtk_offload_req(vdev, op_gtk_req); - - return status; -} - -QDF_STATUS pmo_core_cache_gtk_offload_req(struct wlan_objmgr_vdev *vdev, - struct pmo_gtk_req *gtk_req) -{ - QDF_STATUS status; - enum tQDF_ADAPTER_MODE opmode; - uint8_t vdev_id; - - PMO_ENTER(); - if (!gtk_req) { - pmo_err("gtk_req is NULL"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - if (!vdev) { - pmo_err("vdev is NULL"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - status = pmo_vdev_get_ref(vdev); - if (status != QDF_STATUS_SUCCESS) - goto out; - - opmode = pmo_get_vdev_opmode(vdev); - vdev_id = pmo_vdev_get_id(vdev); - pmo_info("vdev opmode: %d vdev_id: %d", opmode, vdev_id); - if (!pmo_core_is_vdev_supports_offload(vdev)) { - pmo_info("vdev in invalid opmode for caching gtk request %d", - opmode); - status = QDF_STATUS_E_INVAL; - goto dec_ref; - } - - status = pmo_core_cache_gtk_req_in_vdev_priv(vdev, gtk_req); -dec_ref: - pmo_vdev_put_ref(vdev); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_core_flush_gtk_offload_req(struct wlan_objmgr_vdev *vdev) -{ - enum tQDF_ADAPTER_MODE opmode; - uint8_t vdev_id; - QDF_STATUS status; - - PMO_ENTER(); - if (!vdev) { - pmo_err("psoc is NULL"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - status = pmo_vdev_get_ref(vdev); - if (status != QDF_STATUS_SUCCESS) - goto out; - - opmode = pmo_get_vdev_opmode(vdev); - vdev_id = pmo_vdev_get_id(vdev); - pmo_info("vdev opmode: %d vdev_id: %d", opmode, vdev_id); - if (!pmo_core_is_vdev_supports_offload(vdev)) { - pmo_info("vdev in invalid opmode for flushing gtk request %d", - opmode); - status = QDF_STATUS_E_INVAL; - goto dec_ref; - } - - status = pmo_core_flush_gtk_req_from_vdev_priv(vdev); -dec_ref: - pmo_vdev_put_ref(vdev); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_core_enable_gtk_offload_in_fwr(struct wlan_objmgr_vdev *vdev) -{ - QDF_STATUS status; - struct pmo_vdev_priv_obj *vdev_ctx; - struct pmo_gtk_req *op_gtk_req = NULL; - - PMO_ENTER(); - if (!vdev) { - pmo_err("vdev is NULL"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - status = pmo_vdev_get_ref(vdev); - if (status != QDF_STATUS_SUCCESS) - goto out; - - vdev_ctx = pmo_vdev_get_priv(vdev); - - op_gtk_req = qdf_mem_malloc(sizeof(*op_gtk_req)); - if (!op_gtk_req) { - pmo_err("op_gtk_req is NULL"); - status = QDF_STATUS_E_INVAL; - goto dec_ref; - } - status = pmo_core_do_enable_gtk_offload(vdev, vdev_ctx, op_gtk_req); -dec_ref: - pmo_vdev_put_ref(vdev); -out: - if (op_gtk_req) - qdf_mem_free(op_gtk_req); - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_core_disable_gtk_offload_in_fwr(struct wlan_objmgr_vdev *vdev) -{ - QDF_STATUS status; - struct pmo_vdev_priv_obj *vdev_ctx; - struct pmo_gtk_req *op_gtk_req = NULL; - - PMO_ENTER(); - if (!vdev) { - pmo_err("vdev is NULL"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - status = pmo_vdev_get_ref(vdev); - if (status != QDF_STATUS_SUCCESS) - goto out; - - vdev_ctx = pmo_vdev_get_priv(vdev); - - op_gtk_req = qdf_mem_malloc(sizeof(*op_gtk_req)); - if (!op_gtk_req) { - pmo_err("op_gtk_req is NULL"); - status = QDF_STATUS_E_NOMEM; - goto dec_ref; - } - - status = pmo_core_do_disable_gtk_offload(vdev, vdev_ctx, op_gtk_req); -dec_ref: - pmo_vdev_put_ref(vdev); -out: - if (op_gtk_req) - qdf_mem_free(op_gtk_req); - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_core_get_gtk_rsp(struct wlan_objmgr_vdev *vdev, - struct pmo_gtk_rsp_req *gtk_rsp_req) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - struct pmo_vdev_priv_obj *vdev_ctx; - - PMO_ENTER(); - if (!gtk_rsp_req || !vdev) { - pmo_err("%s is null", !vdev ? "vdev":"gtk_rsp_req"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - status = pmo_vdev_get_ref(vdev); - if (status != QDF_STATUS_SUCCESS) - goto out; - - vdev_ctx = pmo_vdev_get_priv(vdev); - - status = pmo_core_is_gtk_enabled_in_fwr(vdev, vdev_ctx); - if (status != QDF_STATUS_SUCCESS) - goto dec_ref; - - /* cache gtk rsp request */ - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - qdf_mem_copy(&vdev_ctx->vdev_gtk_rsp_req, gtk_rsp_req, - sizeof(vdev_ctx->vdev_gtk_rsp_req)); - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - /* send cmd to fwr */ - status = pmo_tgt_get_gtk_rsp(vdev); -dec_ref: - pmo_vdev_put_ref(vdev); -out: - PMO_EXIT(); - - return status; -} - diff --git a/pmo/core/src/wlan_pmo_hw_filter.c b/pmo/core/src/wlan_pmo_hw_filter.c deleted file mode 100644 index ea93d1d4f1..0000000000 --- a/pmo/core/src/wlan_pmo_hw_filter.c +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -/** - * DOC: Implements arp offload feature API's - */ - -#include "qdf_lock.h" -#include "wlan_pmo_hw_filter.h" -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_main.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -static QDF_STATUS pmo_core_conf_hw_filter(struct wlan_objmgr_vdev *vdev, - enum pmo_hw_filter_mode mode) -{ - QDF_STATUS status; - struct pmo_hw_filter_params req = { .mode = mode, }; - - PMO_ENTER(); - - if (!pmo_core_is_vdev_connected(vdev)) { - status = QDF_STATUS_E_NOSUPPORT; - goto exit_with_status; - } - - req.vdev_id = pmo_vdev_get_id(vdev); - status = pmo_tgt_conf_hw_filter(pmo_vdev_get_psoc(vdev), &req); - -exit_with_status: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_core_enable_hw_filter_in_fwr(struct wlan_objmgr_vdev *vdev) -{ - QDF_STATUS status; - struct pmo_psoc_priv_obj *psoc_priv; - enum pmo_hw_filter_mode mode; - - PMO_ENTER(); - - status = pmo_vdev_get_ref(vdev); - if (QDF_IS_STATUS_ERROR(status)) - goto exit_with_status; - - psoc_priv = pmo_vdev_get_psoc_priv(vdev); - qdf_spin_lock_bh(&psoc_priv->lock); - mode = psoc_priv->psoc_cfg.hw_filter_mode; - qdf_spin_unlock_bh(&psoc_priv->lock); - - status = pmo_core_conf_hw_filter(vdev, mode); - - pmo_vdev_put_ref(vdev); - -exit_with_status: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_core_disable_hw_filter_in_fwr(struct wlan_objmgr_vdev *vdev) -{ - QDF_STATUS status; - - PMO_ENTER(); - - status = pmo_vdev_get_ref(vdev); - if (QDF_IS_STATUS_ERROR(status)) - goto exit_with_status; - - status = pmo_core_conf_hw_filter(vdev, PMO_HW_FILTER_DISABLED); - - pmo_vdev_put_ref(vdev); - -exit_with_status: - PMO_EXIT(); - - return status; -} diff --git a/pmo/core/src/wlan_pmo_lphb.c b/pmo/core/src/wlan_pmo_lphb.c deleted file mode 100644 index 39c2a388f7..0000000000 --- a/pmo/core/src/wlan_pmo_lphb.c +++ /dev/null @@ -1,243 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Implements low power heart beat offload feature API's - */ - -#include "wlan_pmo_lphb.h" -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_main.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -#ifdef FEATURE_WLAN_LPHB -/** - * pmo_core_send_lphb_enable() - enable command of LPHB configuration requests - * @psoc: objmgr psoc handle - * @psoc_ctx: pmo private psoc ctx - * @lphb_conf_req: lphb request which need s to configure in fwr - * @by_user: whether this call is from user or cached resent - * - * Return: QDF status - */ -static QDF_STATUS pmo_core_send_lphb_enable(struct wlan_objmgr_psoc *psoc, - struct pmo_psoc_priv_obj *psoc_ctx, - struct pmo_lphb_req *lphb_conf_req, bool by_user) -{ - QDF_STATUS qdf_status = QDF_STATUS_SUCCESS; - struct pmo_lphb_enable_req *ts_lphb_enable; - int i; - - if (lphb_conf_req == NULL) { - pmo_err("LPHB configuration is NULL"); - return QDF_STATUS_E_FAILURE; - } - - ts_lphb_enable = &(lphb_conf_req->params.lphb_enable_req); - qdf_status = pmo_tgt_send_lphb_enable(psoc, ts_lphb_enable); - if (qdf_status != QDF_STATUS_SUCCESS) - goto out; - - /* No need to cache non user request */ - if (!by_user) { - qdf_status = QDF_STATUS_SUCCESS; - goto out; - } - - /* target already configured, now cache command status */ - if (ts_lphb_enable->enable) { - i = ts_lphb_enable->item - 1; - qdf_spin_lock_bh(&psoc_ctx->lock); - psoc_ctx->wow.lphb_cache[i].cmd - = pmo_lphb_set_en_param_indid; - psoc_ctx->wow.lphb_cache[i].params.lphb_enable_req.enable = - ts_lphb_enable->enable; - psoc_ctx->wow.lphb_cache[i].params.lphb_enable_req.item = - ts_lphb_enable->item; - psoc_ctx->wow.lphb_cache[i].params.lphb_enable_req.session = - ts_lphb_enable->session; - qdf_spin_unlock_bh(&psoc_ctx->lock); - pmo_info("cached LPHB status in WMA context for item %d", i); - } else { - qdf_spin_lock_bh(&psoc_ctx->lock); - qdf_mem_zero((void *)&psoc_ctx->wow.lphb_cache, - sizeof(psoc_ctx->wow.lphb_cache)); - qdf_spin_unlock_bh(&psoc_ctx->lock); - pmo_info("cleared all cached LPHB status in WMA context"); - } - -out: - return qdf_status; -} - -/** - * pmo_core_send_lphb_tcp_params() - Send tcp params of LPHB requests - * @psoc: objmgr psoc handle - * @lphb_conf_req: lphb request which needs to be configured in fwr - * - * Return: QDF status - */ -static -QDF_STATUS pmo_core_send_lphb_tcp_params(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_req *lphb_conf_req) -{ - return pmo_tgt_send_lphb_tcp_params(psoc, - &lphb_conf_req->params.lphb_tcp_params); - -} - -/** - * pmo_core_send_lphb_tcp_pkt_filter() - Send tcp packet filter command of LPHB - * @psoc: objmgr psoc handle - * @lphb_conf_req: lphb request which needs to be configured in fwr - * - * Return: QDF status - */ -static -QDF_STATUS pmo_core_send_lphb_tcp_pkt_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_req *lphb_conf_req) -{ - return pmo_tgt_send_lphb_tcp_pkt_filter(psoc, - &lphb_conf_req->params.lphb_tcp_filter_req); -} - -/** - * pmo_core_send_lphb_udp_params() - Send udp param command of LPHB - * @psoc: objmgr psoc handle - * @lphb_conf_req: lphb request which needs to be configured in fwr - * - * Return: QDF status - */ -static -QDF_STATUS pmo_core_send_lphb_udp_params(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_req *lphb_conf_req) -{ - return pmo_tgt_send_lphb_udp_params(psoc, - &lphb_conf_req->params.lphb_udp_params); -} - -/** - * pmo_core_send_lphb_udp_pkt_filter() - Send udp pkt filter command of LPHB - * @psoc: objmgr psoc handle - * @lphb_conf_req: lphb request which need s to configure in fwr - * - * Return: QDF status - */ -static -QDF_STATUS pmo_core_send_lphb_udp_pkt_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_req *lphb_conf_req) -{ - return pmo_tgt_send_lphb_udp_pkt_filter(psoc, - &lphb_conf_req->params.lphb_udp_filter_req); -} - -/** - * pmo_process_lphb_conf_req() - handle LPHB configuration requests - * @psoc: objmgr psoc handle - * @psoc_ctx: pmo private psoc ctx - * @lphb_conf_req: lphb request which needs to be configured in fwr - * - * Return: QDF status - */ -static QDF_STATUS pmo_process_lphb_conf_req(struct wlan_objmgr_psoc *psoc, - struct pmo_psoc_priv_obj *psoc_ctx, - struct pmo_lphb_req *lphb_conf_req) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - - pmo_info("LPHB configuration cmd id is %d", lphb_conf_req->cmd); - switch (lphb_conf_req->cmd) { - case pmo_lphb_set_en_param_indid: - status = pmo_core_send_lphb_enable(psoc, psoc_ctx, - lphb_conf_req, true); - break; - - case pmo_lphb_set_tcp_pararm_indid: - status = pmo_core_send_lphb_tcp_params(psoc, lphb_conf_req); - break; - - case pmo_lphb_set_tcp_pkt_filter_indid: - status = pmo_core_send_lphb_tcp_pkt_filter(psoc, lphb_conf_req); - break; - - case pmo_lphb_set_udp_pararm_indid: - status = pmo_core_send_lphb_udp_params(psoc, lphb_conf_req); - break; - - case pmo_lphb_set_udp_pkt_filter_indid: - status = pmo_core_send_lphb_udp_pkt_filter(psoc, lphb_conf_req); - break; - - case pmo_lphb_set_network_info_indid: - default: - break; - } - - return status; -} - -void pmo_core_apply_lphb(struct wlan_objmgr_psoc *psoc) -{ - int i; - struct pmo_psoc_priv_obj *psoc_ctx; - - psoc_ctx = pmo_psoc_get_priv(psoc); - - pmo_debug("checking LPHB cache"); - for (i = 0; i < 2; i++) { - if (psoc_ctx->wow.lphb_cache[i].params.lphb_enable_req.enable) { - pmo_debug("LPHB cache for item %d is marked as enable", - i + 1); - pmo_core_send_lphb_enable(psoc, psoc_ctx, - &(psoc_ctx->wow.lphb_cache[i]), false); - } - } -} - -QDF_STATUS pmo_core_lphb_config_req(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_req *lphb_req, void *lphb_cb_ctx, - pmo_lphb_callback callback) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - - if (lphb_req == NULL) { - pmo_err("LPHB configuration is NULL"); - return QDF_STATUS_E_NULL_VALUE; - } - - psoc_ctx = pmo_psoc_get_priv(psoc); - - if (pmo_lphb_set_en_param_indid == lphb_req->cmd) { - if (!lphb_cb_ctx) { - pmo_err("lphb callback context is null"); - return QDF_STATUS_E_NULL_VALUE; - } - if (!callback) { - pmo_err("lphb callback function is null"); - return QDF_STATUS_E_NULL_VALUE; - } - qdf_spin_lock_bh(&psoc_ctx->lock); - psoc_ctx->wow.lphb_cb_ctx = lphb_cb_ctx; - psoc_ctx->wow.lphb_cb = callback; - qdf_spin_unlock_bh(&psoc_ctx->lock); - } - - return pmo_process_lphb_conf_req(psoc, psoc_ctx, lphb_req); -} - -#endif /* FEATURE_WLAN_LPHB */ - diff --git a/pmo/core/src/wlan_pmo_main.c b/pmo/core/src/wlan_pmo_main.c deleted file mode 100644 index 58fac41e12..0000000000 --- a/pmo/core/src/wlan_pmo_main.c +++ /dev/null @@ -1,256 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Implement various api / helper function which shall be used - * PMO user and target interface. - */ - -#include "wlan_pmo_main.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -static struct wlan_pmo_ctx *gp_pmo_ctx; - -QDF_STATUS pmo_allocate_ctx(void) -{ - /* If it is already created, ignore */ - if (gp_pmo_ctx != NULL) { - pmo_debug("already allocated pmo_ctx"); - return QDF_STATUS_SUCCESS; - } - - /* allocate offload mgr ctx */ - gp_pmo_ctx = (struct wlan_pmo_ctx *)qdf_mem_malloc( - sizeof(*gp_pmo_ctx)); - if (!gp_pmo_ctx) { - pmo_err("unable to allocate pmo_ctx"); - QDF_ASSERT(0); - return QDF_STATUS_E_NOMEM; - } - qdf_spinlock_create(&gp_pmo_ctx->lock); - - return QDF_STATUS_SUCCESS; -} - -void pmo_free_ctx(void) -{ - if (!gp_pmo_ctx) { - pmo_err("pmo ctx is already freed"); - QDF_ASSERT(0); - return; - } - qdf_spinlock_destroy(&gp_pmo_ctx->lock); - qdf_mem_free(gp_pmo_ctx); - gp_pmo_ctx = NULL; -} - -struct wlan_pmo_ctx *pmo_get_context(void) -{ - return gp_pmo_ctx; -} - -bool pmo_is_vdev_in_beaconning_mode(enum tQDF_ADAPTER_MODE vdev_opmode) -{ - switch (vdev_opmode) { - case QDF_SAP_MODE: - case QDF_P2P_GO_MODE: - case QDF_IBSS_MODE: - return true; - default: - return false; - } -} - -QDF_STATUS pmo_get_vdev_bss_peer_mac_addr(struct wlan_objmgr_vdev *vdev, - struct qdf_mac_addr *bss_peer_mac_address) -{ - struct wlan_objmgr_peer *peer; - - if (!vdev) { - pmo_err("vdev is null"); - return QDF_STATUS_E_INVAL; - } - - peer = wlan_vdev_get_bsspeer(vdev); - if (!peer) { - pmo_err("peer is null"); - return QDF_STATUS_E_INVAL; - } - - wlan_peer_obj_lock(peer); - qdf_mem_copy(bss_peer_mac_address->bytes, wlan_peer_get_macaddr(peer), - QDF_MAC_ADDR_SIZE); - wlan_peer_obj_unlock(peer); - - return QDF_STATUS_SUCCESS; -} - -bool pmo_core_is_ap_mode_supports_arp_ns(struct wlan_objmgr_psoc *psoc, - enum tQDF_ADAPTER_MODE vdev_opmode) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - - psoc_ctx = pmo_psoc_get_priv(psoc); - - if ((vdev_opmode == QDF_SAP_MODE || - vdev_opmode == QDF_P2P_GO_MODE) && - !psoc_ctx->psoc_cfg.ap_arpns_support) { - pmo_info("ARP/NS Offload is not supported in SAP/P2PGO mode"); - return false; - } - - return true; -} - -bool pmo_core_is_vdev_connected(struct wlan_objmgr_vdev *vdev) -{ - struct wlan_objmgr_peer *peer; - enum wlan_peer_state peer_state; - - peer = wlan_vdev_get_bsspeer(vdev); - - if (!peer) { - pmo_err("peer is null"); - return false; - } - peer_state = wlan_peer_mlme_get_state(peer); - - if (peer_state != WLAN_ASSOC_STATE) { - pmo_err("peer is not associated.peer state: %d", - peer_state); - return false; - } - - return true; -} - -bool pmo_core_is_vdev_supports_offload(struct wlan_objmgr_vdev *vdev) -{ - enum tQDF_ADAPTER_MODE opmode; - bool val; - - opmode = pmo_get_vdev_opmode(vdev); - pmo_info("vdev opmode: %d", opmode); - switch (opmode) { - case QDF_STA_MODE: - case QDF_P2P_CLIENT_MODE: - case QDF_NDI_MODE: - val = true; - break; - default: - val = false; - break; - } - - return val; -} - -QDF_STATUS pmo_core_get_psoc_config(struct wlan_objmgr_psoc *psoc, - struct pmo_psoc_cfg *psoc_cfg) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - QDF_STATUS status = QDF_STATUS_SUCCESS; - - PMO_ENTER(); - if (!psoc || !psoc_cfg) { - pmo_err("%s is null", !psoc ? "psoc":"psoc_cfg"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - psoc_ctx = pmo_psoc_get_priv(psoc); - - qdf_spin_lock(&psoc_ctx->lock); - qdf_mem_copy(psoc_cfg, &psoc_ctx->psoc_cfg, sizeof(*psoc_cfg)); - qdf_spin_unlock(&psoc_ctx->lock); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_core_update_psoc_config(struct wlan_objmgr_psoc *psoc, - struct pmo_psoc_cfg *psoc_cfg) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - QDF_STATUS status = QDF_STATUS_SUCCESS; - - PMO_ENTER(); - if (!psoc || !psoc_cfg) { - pmo_err("%s is null", !psoc ? "psoc":"psoc_cfg"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - psoc_ctx = pmo_psoc_get_priv(psoc); - - qdf_spin_lock(&psoc_ctx->lock); - qdf_mem_copy(&psoc_ctx->psoc_cfg, psoc_cfg, sizeof(*psoc_cfg)); - qdf_spin_unlock(&psoc_ctx->lock); -out: - PMO_EXIT(); - - return status; -} - -void pmo_core_psoc_set_hif_handle(struct wlan_objmgr_psoc *psoc, - void *hif_hdl) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - - psoc_ctx = pmo_psoc_get_priv(psoc); - qdf_spin_lock_bh(&psoc_ctx->lock); - psoc_ctx->hif_hdl = hif_hdl; - qdf_spin_unlock_bh(&psoc_ctx->lock); -} - -void *pmo_core_psoc_get_hif_handle(struct wlan_objmgr_psoc *psoc) -{ - void *hif_hdl; - struct pmo_psoc_priv_obj *psoc_ctx; - - psoc_ctx = pmo_psoc_get_priv(psoc); - qdf_spin_lock_bh(&psoc_ctx->lock); - hif_hdl = psoc_ctx->hif_hdl; - qdf_spin_unlock_bh(&psoc_ctx->lock); - - return hif_hdl; -} - -void pmo_core_psoc_set_txrx_handle(struct wlan_objmgr_psoc *psoc, - void *txrx_hdl) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - - psoc_ctx = pmo_psoc_get_priv(psoc); - qdf_spin_lock_bh(&psoc_ctx->lock); - psoc_ctx->txrx_hdl = txrx_hdl; - qdf_spin_unlock_bh(&psoc_ctx->lock); -} - -void *pmo_core_psoc_get_txrx_handle(struct wlan_objmgr_psoc *psoc) -{ - void *txrx_hdl; - struct pmo_psoc_priv_obj *psoc_ctx; - - psoc_ctx = pmo_psoc_get_priv(psoc); - qdf_spin_lock_bh(&psoc_ctx->lock); - txrx_hdl = psoc_ctx->txrx_hdl; - qdf_spin_unlock_bh(&psoc_ctx->lock); - - return txrx_hdl; -} diff --git a/pmo/core/src/wlan_pmo_mc_addr_filtering.c b/pmo/core/src/wlan_pmo_mc_addr_filtering.c deleted file mode 100644 index be4bb2dab2..0000000000 --- a/pmo/core/src/wlan_pmo_mc_addr_filtering.c +++ /dev/null @@ -1,616 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Implements mc addr filtering offload feature API's - */ - -#include "wlan_pmo_mc_addr_filtering.h" -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_main.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - - -#define PMO_INVALID_MC_ADDR_COUNT (-1) - -static void pmo_core_fill_mc_list(struct pmo_vdev_priv_obj **vdev_ctx, - struct pmo_mc_addr_list_params *ip) -{ - struct pmo_mc_addr_list *op_list; - int i; - static const uint8_t ipv6_rs[] = { - 0x33, 0x33, 0x00, 0x00, 0x00, 0x02}; - struct pmo_vdev_priv_obj *temp_ctx; - uint8_t addr_fp; - - temp_ctx = *vdev_ctx; - addr_fp = temp_ctx->addr_filter_pattern; - op_list = &temp_ctx->vdev_mc_list_req; - - qdf_spin_lock_bh(&temp_ctx->pmo_vdev_lock); - op_list->mc_cnt = ip->count; - qdf_spin_unlock_bh(&temp_ctx->pmo_vdev_lock); - - for (i = 0; i < ip->count; i++) { - pmo_debug("%pM", ip->mc_addr[i].bytes); - /* - * Skip following addresses: - * 1)IPv6 router solicitation address - * 2)Any other address pattern if its set during - * RXFILTER REMOVE driver command based on - * addr_filter_pattern - */ - if ((!qdf_mem_cmp(ip->mc_addr[i].bytes, ipv6_rs, - QDF_MAC_ADDR_SIZE)) || - (addr_fp && - (!qdf_mem_cmp(ip->mc_addr[i].bytes, &addr_fp, 1)))) { - pmo_debug("MC/BC filtering Skip addr %pM", - ip->mc_addr[i].bytes); - qdf_spin_lock_bh(&temp_ctx->pmo_vdev_lock); - op_list->mc_cnt--; - qdf_spin_unlock_bh(&temp_ctx->pmo_vdev_lock); - continue; - } - qdf_spin_lock_bh(&temp_ctx->pmo_vdev_lock); - qdf_mem_set(&(op_list->mc_addr[i].bytes), 0, - QDF_MAC_ADDR_SIZE); - qdf_mem_copy(&(op_list->mc_addr[i].bytes), - ip->mc_addr[i].bytes, QDF_MAC_ADDR_SIZE); - qdf_spin_unlock_bh(&temp_ctx->pmo_vdev_lock); - pmo_debug("mlist[%pM] = ", op_list->mc_addr[i].bytes); - } -} - -static QDF_STATUS pmo_core_cache_mc_addr_list_in_vdev_priv( - struct pmo_mc_addr_list_params *mc_list_config, - struct wlan_objmgr_vdev *vdev) -{ - struct pmo_vdev_priv_obj *vdev_ctx; - - vdev_ctx = pmo_vdev_get_priv(vdev); - pmo_core_fill_mc_list(&vdev_ctx, mc_list_config); - - return QDF_STATUS_SUCCESS; -} - -static QDF_STATUS pmo_core_flush_mc_addr_list_from_vdev_priv( - struct wlan_objmgr_vdev *vdev) -{ - struct pmo_vdev_priv_obj *vdev_ctx; - - vdev_ctx = pmo_vdev_get_priv(vdev); - - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - qdf_mem_zero(&vdev_ctx->vdev_mc_list_req, - sizeof(vdev_ctx->vdev_mc_list_req)); - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - return QDF_STATUS_SUCCESS; -} - -QDF_STATUS pmo_core_set_mc_filter_req(struct wlan_objmgr_vdev *vdev, - struct pmo_mc_addr_list *mc_list) -{ - uint8_t vdev_id; - int i; - - PMO_ENTER(); - - vdev_id = pmo_vdev_get_id(vdev); - /* - * Configure enhance multicast offload feature for filtering out - * multicast IP data packets transmitted using unicast MAC address - */ - - /* - * TODO - {//(WMI_SERVICE_IS_ENABLED(wma_handle->wmi_service_bitmap, - //WMI_SERVICE_ENHANCED_MCAST_FILTER)) { - */ - if (1) { - pmo_info("FW supports enhance multicast offload"); - pmo_tgt_send_enhance_multicast_offload_req(vdev, vdev_id, - false); - } else { - pmo_info("FW does not support enhance multicast offload"); - } - - /* - * set mc_param->action to clear MCList and reset - * to configure the MCList in FW - */ - for (i = 0; i < mc_list->mc_cnt; i++) { - pmo_tgt_set_mc_filter_req(vdev, - mc_list->mc_addr[i]); - } - - PMO_EXIT(); - - return QDF_STATUS_SUCCESS; -} - -QDF_STATUS pmo_core_clear_mc_filter_req(struct wlan_objmgr_vdev *vdev, - struct pmo_mc_addr_list *mc_list) -{ - uint8_t vdev_id; - int i; - - PMO_ENTER(); - - vdev_id = pmo_vdev_get_id(vdev); - - /* - * Configure enhance multicast offload feature for filtering out - * multicast IP data packets transmitted using unicast MAC address - */ - - /* - * TODO - {//(WMI_SERVICE_IS_ENABLED(wma_handle->wmi_service_bitmap, - //WMI_SERVICE_ENHANCED_MCAST_FILTER)) { - */ - if (1) { - pmo_info("FW supports enhance multicast offload"); - pmo_tgt_send_enhance_multicast_offload_req(vdev, vdev_id, - true); - } else { - pmo_info("FW does not support enhance multicast offload"); - } - - /* - * set mcbc_param->action to clear MCList and reset - * to configure the MCList in FW - */ - for (i = 0; i < mc_list->mc_cnt; i++) { - pmo_tgt_clear_mc_filter_req(vdev, mc_list->mc_addr[i]); - } - - PMO_EXIT(); - - return QDF_STATUS_SUCCESS; -} - -static QDF_STATUS pmo_core_do_enable_mc_addr_list(struct wlan_objmgr_vdev *vdev, - struct pmo_vdev_priv_obj *vdev_ctx, - struct pmo_mc_addr_list *op_mc_list_req) -{ - QDF_STATUS status; - - PMO_ENTER(); - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - if (!vdev_ctx->vdev_mc_list_req.mc_cnt) { - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - pmo_err("mc_cnt is zero so skip to add mc list"); - status = QDF_STATUS_E_INVAL; - goto out; - } - qdf_mem_copy(op_mc_list_req, &vdev_ctx->vdev_mc_list_req, - sizeof(*op_mc_list_req)); - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - status = pmo_core_set_mc_filter_req(vdev, op_mc_list_req); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("cannot apply mc filter request"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - vdev_ctx->vdev_mc_list_req.is_filter_applied = true; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); -out: - PMO_EXIT(); - - return status; -} - -static QDF_STATUS pmo_core_do_disable_mc_addr_list( - struct wlan_objmgr_vdev *vdev, - struct pmo_vdev_priv_obj *vdev_ctx, - struct pmo_mc_addr_list *op_mc_list_req) -{ - QDF_STATUS status; - - PMO_ENTER(); - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - /* validate filter is applied before clearing in fwr */ - if (!vdev_ctx->vdev_mc_list_req.is_filter_applied) { - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - pmo_err("mc filter is not applied in fwr"); - status = QDF_STATUS_E_INVAL; - goto out; - } - qdf_mem_copy(op_mc_list_req, &vdev_ctx->vdev_mc_list_req, - sizeof(*op_mc_list_req)); - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - status = pmo_core_clear_mc_filter_req(vdev, op_mc_list_req); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("cannot apply mc filter request"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - vdev_ctx->vdev_mc_list_req.is_filter_applied = false; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); -out: - PMO_EXIT(); - - return status; -} - -uint8_t pmo_core_max_mc_addr_supported(struct wlan_objmgr_psoc *psoc) -{ - return PMO_MAX_MC_ADDR_LIST; -} - -int pmo_core_get_mc_addr_list_count(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id) -{ - QDF_STATUS status; - struct wlan_objmgr_vdev *vdev; - struct pmo_vdev_priv_obj *vdev_ctx; - uint8_t mc_cnt; - - vdev = pmo_psoc_get_vdev(psoc, vdev_id); - if (!vdev) { - pmo_err("vdev is NULL"); - return PMO_INVALID_MC_ADDR_COUNT; - } - - status = pmo_vdev_get_ref(vdev); - if (QDF_IS_STATUS_ERROR(status)) { - pmo_warn("failed to get vdev reference"); - return PMO_INVALID_MC_ADDR_COUNT; - } - - vdev_ctx = pmo_vdev_get_priv(vdev); - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - mc_cnt = vdev_ctx->vdev_mc_list_req.mc_cnt; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - pmo_vdev_put_ref(vdev); - - return mc_cnt; -} - -void pmo_core_set_mc_addr_list_count(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, uint8_t count) -{ - QDF_STATUS status; - struct pmo_vdev_priv_obj *vdev_ctx; - struct wlan_objmgr_vdev *vdev; - - vdev = pmo_psoc_get_vdev(psoc, vdev_id); - if (!vdev) { - pmo_err("vdev is NULL"); - return; - } - - status = pmo_vdev_get_ref(vdev); - if (QDF_IS_STATUS_ERROR(status)) { - pmo_warn("failed to get vdev reference"); - return; - } - - vdev_ctx = pmo_vdev_get_priv(vdev); - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - vdev_ctx->vdev_mc_list_req.mc_cnt = count; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - pmo_vdev_put_ref(vdev); -} - -static QDF_STATUS pmo_core_mc_addr_flitering_sanity( - struct wlan_objmgr_vdev *vdev) -{ - struct pmo_vdev_priv_obj *vdev_ctx; - - if (!vdev) { - pmo_err("vdev is NULL"); - return QDF_STATUS_E_NULL_VALUE; - } - - vdev_ctx = pmo_vdev_get_priv(vdev); - - /* Check if INI is enabled or not, otherwise just return */ - if (!vdev_ctx->pmo_psoc_ctx->psoc_cfg.enable_mc_list) { - pmo_info("user disabled mc_addr_list using INI"); - return QDF_STATUS_E_INVAL; - } - - if (!pmo_core_is_vdev_supports_offload(vdev)) { - pmo_info("vdev in invalid opmode for mc addr filtering %d", - pmo_get_vdev_opmode(vdev)); - return QDF_STATUS_E_INVAL; - } - - if (!pmo_core_is_vdev_connected(vdev)) - return QDF_STATUS_E_INVAL; - - return QDF_STATUS_SUCCESS; -} -QDF_STATUS pmo_core_cache_mc_addr_list( - struct pmo_mc_addr_list_params *mc_list_config) -{ - struct wlan_objmgr_vdev *vdev; - QDF_STATUS status; - - PMO_ENTER(); - - if (!mc_list_config->psoc) { - pmo_err("psoc is NULL"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - vdev = pmo_psoc_get_vdev(mc_list_config->psoc, mc_list_config->vdev_id); - if (!vdev) { - pmo_err("vdev is NULL"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - status = pmo_vdev_get_ref(vdev); - if (QDF_IS_STATUS_ERROR(status)) { - pmo_warn("failed to get vdev reference"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - status = pmo_core_mc_addr_flitering_sanity(vdev); - if (status != QDF_STATUS_SUCCESS) - goto dec_ref; - - pmo_info("Cache mc addr list for vdev id: %d psoc: %p vdev: %p", - mc_list_config->vdev_id, mc_list_config->psoc, vdev); - - status = pmo_core_cache_mc_addr_list_in_vdev_priv(mc_list_config, vdev); -dec_ref: - pmo_vdev_put_ref(vdev); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_core_flush_mc_addr_list(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id) -{ - struct wlan_objmgr_vdev *vdev; - QDF_STATUS status = QDF_STATUS_SUCCESS; - - PMO_ENTER(); - if (!psoc) { - pmo_err("psoc is NULL"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - vdev = pmo_psoc_get_vdev(psoc, vdev_id); - if (!vdev) { - pmo_err("vdev is NULL"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - status = pmo_vdev_get_ref(vdev); - if (QDF_IS_STATUS_ERROR(status)) { - pmo_warn("failed to get vdev reference"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - status = pmo_core_mc_addr_flitering_sanity(vdev); - if (status != QDF_STATUS_SUCCESS) - goto dec_ref; - - pmo_info("Flush mc addr list for vdev id: %d psoc: %p vdev: %p", - vdev_id, psoc, vdev); - - status = pmo_core_flush_mc_addr_list_from_vdev_priv(vdev); - -dec_ref: - pmo_vdev_put_ref(vdev); -out: - PMO_EXIT(); - - return status; -} - -static QDF_STATUS pmo_core_handle_enable_mc_list_trigger( - struct wlan_objmgr_vdev *vdev, - enum pmo_offload_trigger trigger) -{ - struct pmo_vdev_priv_obj *vdev_ctx; - QDF_STATUS status; - struct pmo_mc_addr_list *op_mc_list_req = NULL; - - vdev_ctx = pmo_vdev_get_priv(vdev); - - op_mc_list_req = qdf_mem_malloc(sizeof(*op_mc_list_req)); - if (!op_mc_list_req) { - pmo_err("op_mc_list_req is NULL"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - switch (trigger) { - case pmo_mc_list_change_notify: - if (!vdev_ctx->pmo_psoc_ctx->psoc_cfg.active_mode_offload) { - pmo_info("active offload is disabled, skip in mode: %d", - trigger); - status = QDF_STATUS_E_INVAL; - goto out; - } - status = pmo_core_do_enable_mc_addr_list(vdev, vdev_ctx, - op_mc_list_req); - break; - case pmo_apps_suspend: - if (vdev_ctx->pmo_psoc_ctx->psoc_cfg.active_mode_offload) { - pmo_info("active offload is enabled, skip in mode: %d", - trigger); - status = QDF_STATUS_E_INVAL; - goto out; - } - status = pmo_core_do_enable_mc_addr_list(vdev, vdev_ctx, - op_mc_list_req); - break; - default: - status = QDF_STATUS_E_INVAL; - pmo_err("invalid pmo trigger for enable mc list"); - break; - } -out: - if (op_mc_list_req) - qdf_mem_free(op_mc_list_req); - - return status; -} - -QDF_STATUS pmo_core_enable_mc_addr_filtering_in_fwr( - struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, - enum pmo_offload_trigger trigger) -{ - QDF_STATUS status; - struct wlan_objmgr_vdev *vdev; - - PMO_ENTER(); - if (!psoc) { - pmo_err("psoc is NULL"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - vdev = pmo_psoc_get_vdev(psoc, vdev_id); - if (!vdev) { - pmo_err("vdev is NULL"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - status = pmo_vdev_get_ref(vdev); - if (QDF_IS_STATUS_ERROR(status)) - goto out; - - status = pmo_core_mc_addr_flitering_sanity(vdev); - if (status != QDF_STATUS_SUCCESS) - goto dec_ref; - - pmo_info("enable mclist trigger: %d", trigger); - status = pmo_core_handle_enable_mc_list_trigger(vdev, trigger); -dec_ref: - pmo_vdev_put_ref(vdev); -out: - PMO_EXIT(); - - return status; -} - -static QDF_STATUS pmo_core_handle_disable_mc_list_trigger( - struct wlan_objmgr_vdev *vdev, - enum pmo_offload_trigger trigger) -{ - struct pmo_vdev_priv_obj *vdev_ctx; - QDF_STATUS status; - struct pmo_mc_addr_list *op_mc_list_req = NULL; - - vdev_ctx = pmo_vdev_get_priv(vdev); - - op_mc_list_req = qdf_mem_malloc(sizeof(*op_mc_list_req)); - if (!op_mc_list_req) { - pmo_err("op_mc_list_req is NULL"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - switch (trigger) { - case pmo_peer_disconnect: - case pmo_mc_list_change_notify: - if (!vdev_ctx->pmo_psoc_ctx->psoc_cfg.active_mode_offload) { - pmo_info("active offload is disabled, skip in mode: %d", - trigger); - status = QDF_STATUS_E_INVAL; - goto out; - } - status = pmo_core_do_disable_mc_addr_list(vdev, vdev_ctx, - op_mc_list_req); - break; - case pmo_apps_resume: - if (vdev_ctx->pmo_psoc_ctx->psoc_cfg.active_mode_offload) { - pmo_info("active offload is enabled, skip in mode: %d", - trigger); - status = QDF_STATUS_E_INVAL; - goto out; - } - status = pmo_core_do_disable_mc_addr_list(vdev, vdev_ctx, - op_mc_list_req); - break; - default: - status = QDF_STATUS_E_INVAL; - pmo_err("invalid pmo trigger for disable mc list"); - break; - } -out: - if (op_mc_list_req) - qdf_mem_free(op_mc_list_req); - - return status; -} - -QDF_STATUS pmo_core_disable_mc_addr_filtering_in_fwr( - struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, - enum pmo_offload_trigger trigger) -{ - QDF_STATUS status; - struct wlan_objmgr_vdev *vdev; - - PMO_ENTER(); - if (!psoc) { - pmo_err("psoc is NULL"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - vdev = pmo_psoc_get_vdev(psoc, vdev_id); - if (!vdev) { - pmo_err("vdev is NULL"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - status = pmo_vdev_get_ref(vdev); - if (QDF_IS_STATUS_ERROR(status)) - goto out; - - status = pmo_core_mc_addr_flitering_sanity(vdev); - if (status != QDF_STATUS_SUCCESS) - goto dec_ref; - - pmo_info("disable mclist trigger: %d", trigger); - status = pmo_core_handle_disable_mc_list_trigger(vdev, trigger); -dec_ref: - pmo_vdev_put_ref(vdev); -out: - PMO_EXIT(); - - return status; -} - diff --git a/pmo/core/src/wlan_pmo_ns.c b/pmo/core/src/wlan_pmo_ns.c deleted file mode 100644 index b34374e0b6..0000000000 --- a/pmo/core/src/wlan_pmo_ns.c +++ /dev/null @@ -1,454 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Implements ns offload feature API's - */ - -#include "wlan_pmo_ns.h" -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_main.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -static void pmo_core_fill_ns_addr(struct pmo_ns_offload_params *request, - struct pmo_ns_req *ns_req) -{ - int i; - - for (i = 0; i < ns_req->count; i++) { - /* - * Filling up the request structure - * Filling the selfIPv6Addr with solicited address - * A Solicited-Node multicast address is created by - * taking the last 24 bits of a unicast or anycast - * address and appending them to the prefix - * - * FF02:0000:0000:0000:0000:0001:FFXX:XXXX - * - * here XX is the unicast/anycast bits - */ - request->self_ipv6_addr[i][0] = 0xFF; - request->self_ipv6_addr[i][1] = 0x02; - request->self_ipv6_addr[i][11] = 0x01; - request->self_ipv6_addr[i][12] = 0xFF; - request->self_ipv6_addr[i][13] = - ns_req->ipv6_addr[i][13]; - request->self_ipv6_addr[i][14] = - ns_req->ipv6_addr[i][14]; - request->self_ipv6_addr[i][15] = - ns_req->ipv6_addr[i][15]; - request->slot_idx = i; - qdf_mem_copy(&request->target_ipv6_addr[i], - &ns_req->ipv6_addr[i][0], PMO_MAC_IPV6_ADDR_LEN); - - request->target_ipv6_addr_valid[i] = - PMO_IPV6_ADDR_VALID; - request->target_ipv6_addr_ac_type[i] = - ns_req->ipv6_addr_type[i]; - - pmo_info("NSoffload solicitIp: %pI6 targetIp: %pI6 Index: %d", - &request->self_ipv6_addr[i], - &request->target_ipv6_addr[i], i); - } -} - -static QDF_STATUS pmo_core_cache_ns_in_vdev_priv( - struct pmo_ns_req *ns_req, - struct wlan_objmgr_vdev *vdev) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - struct pmo_vdev_priv_obj *vdev_ctx; - struct pmo_ns_offload_params request; - struct wlan_objmgr_peer *peer; - - PMO_ENTER(); - - vdev_ctx = pmo_vdev_get_priv(vdev); - - qdf_mem_zero(&request, sizeof(request)); - pmo_core_fill_ns_addr(&request, ns_req); - - request.enable = PMO_OFFLOAD_ENABLE; - qdf_mem_copy(&request.self_macaddr.bytes, - wlan_vdev_mlme_get_macaddr(vdev), - QDF_MAC_ADDR_SIZE); - - /* set number of ns offload address count */ - request.num_ns_offload_count = ns_req->count; - - peer = wlan_vdev_get_bsspeer(vdev); - if (!peer) { - pmo_err("peer is null"); - status = QDF_STATUS_E_INVAL; - goto out; - } - pmo_info("vdev self mac addr: %pM bss peer mac addr: %pM", - wlan_vdev_mlme_get_macaddr(vdev), - wlan_peer_get_macaddr(peer)); - /* get peer and peer mac accdress aka ap mac address */ - qdf_mem_copy(&request.bssid, - wlan_peer_get_macaddr(peer), - QDF_MAC_ADDR_SIZE); - /* cache ns request */ - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - qdf_mem_copy(&vdev_ctx->vdev_ns_req, &request, - sizeof(vdev_ctx->vdev_ns_req)); - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); -out: - PMO_EXIT(); - - return status; -} - -static QDF_STATUS pmo_core_flush_ns_from_vdev_priv( - struct wlan_objmgr_vdev *vdev) -{ - struct pmo_vdev_priv_obj *vdev_ctx; - - PMO_ENTER(); - - vdev_ctx = pmo_vdev_get_priv(vdev); - - /* clear ns request */ - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - qdf_mem_zero(&vdev_ctx->vdev_ns_req, sizeof(vdev_ctx->vdev_ns_req)); - vdev_ctx->vdev_ns_req.enable = PMO_OFFLOAD_DISABLE; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - PMO_EXIT(); - - return QDF_STATUS_SUCCESS; -} - -static QDF_STATUS pmo_core_do_enable_ns_offload(struct wlan_objmgr_vdev *vdev, - uint8_t vdev_id, enum pmo_offload_trigger trigger) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - struct pmo_psoc_priv_obj *psoc_ctx; - struct pmo_vdev_priv_obj *vdev_ctx; - - PMO_ENTER(); - - vdev_ctx = pmo_vdev_get_priv(vdev); - - psoc_ctx = vdev_ctx->pmo_psoc_ctx; - if (!psoc_ctx) { - pmo_err("psoc_ctx is NULL"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - switch (trigger) { - case pmo_ipv6_change_notify: - case pmo_ns_offload_dynamic_update: - if (!psoc_ctx->psoc_cfg.active_mode_offload) { - pmo_info("active offload is disabled, skip in mode:%d", - trigger); - status = QDF_STATUS_E_INVAL; - goto out; - } - /* enable arp when active offload is true (ipv6 notifier) */ - status = pmo_tgt_enable_ns_offload_req(vdev, vdev_id); - break; - case pmo_apps_suspend: - if (psoc_ctx->psoc_cfg.active_mode_offload) { - pmo_info("active offload is enabled, skip in mode: %d", - trigger); - status = QDF_STATUS_E_INVAL; - goto out; - } - /* enable arp when active offload is false (apps suspend) */ - status = pmo_tgt_enable_ns_offload_req(vdev, vdev_id); - break; - default: - status = QDF_STATUS_E_INVAL; - pmo_err("invalid pmo trigger"); - break; - } -out: - PMO_EXIT(); - - return status; -} - -static QDF_STATUS pmo_core_do_disable_ns_offload(struct wlan_objmgr_vdev *vdev, - uint8_t vdev_id, enum pmo_offload_trigger trigger) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - struct pmo_psoc_priv_obj *psoc_ctx; - - PMO_ENTER(); - - psoc_ctx = pmo_vdev_get_psoc_priv(vdev); - - switch (trigger) { - case pmo_ipv6_change_notify: - case pmo_ns_offload_dynamic_update: - if (!psoc_ctx->psoc_cfg.active_mode_offload) { - pmo_info("active offload is disabled, skip in mode:%d", - trigger); - status = QDF_STATUS_E_INVAL; - goto out; - } - /* config ns when active offload is enable */ - status = pmo_tgt_disable_ns_offload_req(vdev, vdev_id); - break; - case pmo_apps_resume: - if (psoc_ctx->psoc_cfg.active_mode_offload) { - pmo_info("active offload is enabled, skip in mode: %d", - trigger); - status = QDF_STATUS_E_INVAL; - goto out; - } - /* config arp/ns when active offload is disable */ - status = pmo_tgt_disable_ns_offload_req(vdev, vdev_id); - break; - default: - status = QDF_STATUS_E_INVAL; - pmo_err("invalid pmo trigger"); - break; - } -out: - PMO_EXIT(); - - return status; -} - - -static QDF_STATUS pmo_core_ns_offload_sanity(struct wlan_objmgr_vdev *vdev) -{ - struct pmo_vdev_priv_obj *vdev_ctx; - - vdev_ctx = pmo_vdev_get_priv(vdev); - - if (!vdev_ctx->pmo_psoc_ctx->psoc_cfg.ns_offload_enable_static) { - pmo_info("ns offload statically disable"); - return QDF_STATUS_E_INVAL; - } - - if (!vdev_ctx->pmo_psoc_ctx->psoc_cfg.ns_offload_enable_dynamic) { - pmo_info("ns offload dynamically disable"); - return QDF_STATUS_E_INVAL; - } - - if (!pmo_core_is_vdev_supports_offload(vdev)) { - pmo_info("vdev in invalid opmode for ns offload %d", - pmo_get_vdev_opmode(vdev)); - return QDF_STATUS_E_INVAL; - } - - if (pmo_core_is_vdev_connected(vdev) == false) - return QDF_STATUS_E_INVAL; - - return QDF_STATUS_SUCCESS; -} - -QDF_STATUS pmo_core_cache_ns_offload_req( - struct pmo_ns_req *ns_req) -{ - QDF_STATUS status; - struct wlan_objmgr_vdev *vdev; - - PMO_ENTER(); - if (!ns_req) { - pmo_err("ns is NULL"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - if (!ns_req->psoc) { - pmo_err("psoc is NULL"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - vdev = pmo_psoc_get_vdev(ns_req->psoc, ns_req->vdev_id); - if (!vdev) { - pmo_err("vdev is NULL"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - status = pmo_vdev_get_ref(vdev); - if (QDF_IS_STATUS_ERROR(status)) - goto out; - - status = pmo_core_ns_offload_sanity(vdev); - if (status != QDF_STATUS_SUCCESS) - goto dec_ref; - - if (ns_req->count == 0) { - pmo_info("skip ns offload caching as ns count is 0"); - status = QDF_STATUS_E_INVAL; - goto dec_ref; - } - - status = pmo_core_cache_ns_in_vdev_priv(ns_req, vdev); -dec_ref: - pmo_vdev_put_ref(vdev); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_core_flush_ns_offload_req(struct wlan_objmgr_vdev *vdev) -{ - QDF_STATUS status; - uint8_t vdev_id; - - PMO_ENTER(); - if (!vdev) { - pmo_err("vdev is NULL"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - status = pmo_vdev_get_ref(vdev); - if (status != QDF_STATUS_SUCCESS) - goto out; - - status = pmo_core_ns_offload_sanity(vdev); - if (status != QDF_STATUS_SUCCESS) - goto dec_ref; - - vdev_id = pmo_vdev_get_id(vdev); - pmo_info("Flush ns offload on vdev id: %d vdev: %p", vdev_id, vdev); - - status = pmo_core_flush_ns_from_vdev_priv(vdev); -dec_ref: - pmo_vdev_put_ref(vdev); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_core_enable_ns_offload_in_fwr(struct wlan_objmgr_vdev *vdev, - enum pmo_offload_trigger trigger) -{ - QDF_STATUS status; - struct pmo_vdev_priv_obj *vdev_ctx; - uint8_t vdev_id; - - PMO_ENTER(); - if (!vdev) { - pmo_err("vdev is NULL"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - status = pmo_vdev_get_ref(vdev); - if (status != QDF_STATUS_SUCCESS) - goto out; - - vdev_ctx = pmo_vdev_get_priv(vdev); - - status = pmo_core_ns_offload_sanity(vdev); - if (status != QDF_STATUS_SUCCESS) - goto dec_ref; - - if (trigger == pmo_ns_offload_dynamic_update) { - /* - * user disable ns offload using ioctl/vendor cmd dynamically. - */ - vdev_ctx->pmo_psoc_ctx->psoc_cfg.ns_offload_enable_dynamic = - true; - goto skip_ns_dynamic_check; - } - - if (!vdev_ctx->pmo_psoc_ctx->psoc_cfg.ns_offload_enable_dynamic) { - pmo_info("ns offload dynamically disable"); - status = QDF_STATUS_E_INVAL; - goto dec_ref; - } - -skip_ns_dynamic_check: - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - if (vdev_ctx->vdev_ns_req.num_ns_offload_count == 0) { - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - pmo_info("skip ns offload enable as ns count is 0"); - status = QDF_STATUS_E_INVAL; - goto out; - } - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - vdev_id = pmo_vdev_get_id(vdev); - pmo_info("Enable ns offload in fwr vdev id: %d vdev: %p trigger: %d", - vdev_id, vdev, trigger); - status = pmo_core_do_enable_ns_offload(vdev, vdev_id, trigger); -dec_ref: - pmo_vdev_put_ref(vdev); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_core_disable_ns_offload_in_fwr(struct wlan_objmgr_vdev *vdev, - enum pmo_offload_trigger trigger) -{ - QDF_STATUS status; - uint8_t vdev_id; - struct pmo_vdev_priv_obj *vdev_ctx; - - PMO_ENTER(); - if (!vdev) { - pmo_err("vdev is NULL"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - status = pmo_vdev_get_ref(vdev); - if (status != QDF_STATUS_SUCCESS) - goto out; - - vdev_ctx = pmo_vdev_get_priv(vdev); - - status = pmo_core_ns_offload_sanity(vdev); - if (status != QDF_STATUS_SUCCESS) - goto dec_ref; - - if (trigger == pmo_ns_offload_dynamic_update) { - /* - * user disable ns offload using ioctl/vendor cmd dynamically. - */ - vdev_ctx->pmo_psoc_ctx->psoc_cfg.ns_offload_enable_dynamic = - false; - goto skip_ns_dynamic_check; - } - - if (!vdev_ctx->pmo_psoc_ctx->psoc_cfg.ns_offload_enable_dynamic) { - pmo_info("ns offload dynamically disable"); - status = QDF_STATUS_E_INVAL; - goto dec_ref; - } - -skip_ns_dynamic_check: - vdev_id = pmo_vdev_get_id(vdev); - pmo_info("disable ns offload in fwr vdev id: %d vdev: %p trigger: %d", - vdev_id, vdev, trigger); - - status = pmo_core_do_disable_ns_offload(vdev, vdev_id, trigger); -dec_ref: - pmo_vdev_put_ref(vdev); -out: - PMO_EXIT(); - - return status; -} - diff --git a/pmo/core/src/wlan_pmo_pkt_filter.c b/pmo/core/src/wlan_pmo_pkt_filter.c deleted file mode 100644 index a59e25dfa8..0000000000 --- a/pmo/core/src/wlan_pmo_pkt_filter.c +++ /dev/null @@ -1,96 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Implements Packet filter feature API's - */ - -#include "wlan_pmo_pkt_filter.h" -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_main.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -QDF_STATUS pmo_core_set_pkt_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_rcv_pkt_fltr_cfg *pmo_set_pkt_fltr_req, - uint8_t vdev_id) -{ - struct wlan_objmgr_vdev *vdev; - QDF_STATUS status; - - PMO_ENTER(); - - if (!psoc) { - pmo_err("psoc is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, WLAN_PMO_ID); - if (!vdev) { - pmo_err("vdev is NULL"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - status = pmo_tgt_set_pkt_filter(vdev, pmo_set_pkt_fltr_req, vdev_id); - if (status != QDF_STATUS_SUCCESS) - goto dec_ref; - -dec_ref: - wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID); -out: - PMO_EXIT(); - - return status; - -} - -QDF_STATUS pmo_core_clear_pkt_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_rcv_pkt_fltr_clear_param *pmo_clr_pkt_fltr_param, - uint8_t vdev_id) -{ - struct wlan_objmgr_vdev *vdev; - QDF_STATUS status; - - PMO_ENTER(); - - if (!psoc) { - pmo_err("psoc is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, WLAN_PMO_ID); - if (!vdev) { - pmo_err("vdev is NULL"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - status = pmo_tgt_clear_pkt_filter(vdev, pmo_clr_pkt_fltr_param, - vdev_id); - if (status != QDF_STATUS_SUCCESS) - goto dec_ref; - -dec_ref: - wlan_objmgr_vdev_release_ref(vdev, WLAN_PMO_ID); -out: - PMO_EXIT(); - - return status; - -} diff --git a/pmo/core/src/wlan_pmo_static_config.c b/pmo/core/src/wlan_pmo_static_config.c deleted file mode 100644 index b0653f35f6..0000000000 --- a/pmo/core/src/wlan_pmo_static_config.c +++ /dev/null @@ -1,380 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Implements static configuration on vdev attach - */ - -#include "wlan_pmo_static_config.h" -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_main.h" -#include "wlan_pmo_wow.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -static const uint8_t arp_ptrn[] = {0x08, 0x06}; -static const uint8_t arp_mask[] = {0xff, 0xff}; -static const uint8_t ns_ptrn[] = {0x86, 0xDD}; -static const uint8_t discvr_ptrn[] = {0xe0, 0x00, 0x00, 0xf8}; -static const uint8_t discvr_mask[] = {0xf0, 0x00, 0x00, 0xf8}; - -void pmo_register_wow_wakeup_events(struct wlan_objmgr_vdev *vdev) -{ - uint32_t event_bitmap[PMO_WOW_MAX_EVENT_BM_LEN] = {0}; - uint8_t vdev_id; - enum tQDF_ADAPTER_MODE vdev_opmode; - const char *iface_type; - - vdev_opmode = pmo_get_vdev_opmode(vdev); - vdev_id = pmo_vdev_get_id(vdev); - pmo_info("vdev_opmode %d vdev_id %d", vdev_opmode, vdev_id); - - switch (vdev_opmode) { - case QDF_P2P_CLIENT_MODE: - case QDF_P2P_DEVICE_MODE: - case QDF_OCB_MODE: - case QDF_STA_MODE: - case QDF_MONITOR_MODE: - iface_type = "STA"; - pmo_set_sta_wow_bitmask(event_bitmap, PMO_WOW_MAX_EVENT_BM_LEN); - break; - - case QDF_IBSS_MODE: - iface_type = "IBSS"; - pmo_set_sta_wow_bitmask(event_bitmap, PMO_WOW_MAX_EVENT_BM_LEN); - pmo_set_wow_event_bitmap(WOW_BEACON_EVENT, - PMO_WOW_MAX_EVENT_BM_LEN, - event_bitmap); - break; - - case QDF_P2P_GO_MODE: - case QDF_SAP_MODE: - iface_type = "SAP"; - pmo_set_sap_wow_bitmask(event_bitmap, PMO_WOW_MAX_EVENT_BM_LEN); - break; - - case QDF_NDI_MODE: -#ifdef WLAN_FEATURE_NAN_DATAPATH - iface_type = "NAN"; - pmo_set_wow_event_bitmap(WOW_NAN_DATA_EVENT, - PMO_WOW_MAX_EVENT_BM_LEN, - event_bitmap); -#endif - break; - - default: - pmo_err("Skipping wake event configuration for vdev_opmode %d", - vdev_opmode); - return; - } - - pmo_info("Selected %s wake event mask 0x%x%x%x%x, vdev %d", - iface_type, event_bitmap[0], event_bitmap[1], - event_bitmap[2], event_bitmap[3], vdev_id); - - pmo_tgt_enable_wow_wakeup_event(vdev, event_bitmap); -} - -/** - * pmo_configure_wow_ap() - set WOW patterns in ap mode - * @vdev: objmgr vdev handle - * - * Configures default WOW pattern for the given vdev_id which is in AP mode. - * - * Return: QDF status - */ -static QDF_STATUS pmo_configure_wow_ap(struct wlan_objmgr_vdev *vdev) -{ - QDF_STATUS ret; - uint8_t arp_offset = 20; - uint8_t mac_mask[PMO_80211_ADDR_LEN]; - struct pmo_vdev_priv_obj *vdev_ctx; - - vdev_ctx = pmo_vdev_get_priv(vdev); - - /* - * Setup unicast pkt pattern - * WoW pattern id should be unique for each vdev - * WoW pattern id can be same on 2 different VDEVs - */ - qdf_mem_set(&mac_mask, PMO_80211_ADDR_LEN, 0xFF); - ret = pmo_tgt_send_wow_patterns_to_fw(vdev, - pmo_get_and_increment_wow_default_ptrn(vdev_ctx), - wlan_vdev_mlme_get_macaddr(vdev), - PMO_80211_ADDR_LEN, 0, mac_mask, - PMO_80211_ADDR_LEN, false); - if (ret != QDF_STATUS_SUCCESS) { - pmo_err("Failed to add WOW unicast pattern ret %d", ret); - return ret; - } - - /* - * Setup all ARP pkt pattern. This is dummy pattern hence the length - * is zero. Pattern ID should be unique per vdev. - */ - ret = pmo_tgt_send_wow_patterns_to_fw(vdev, - pmo_get_and_increment_wow_default_ptrn(vdev_ctx), - arp_ptrn, 0, arp_offset, arp_mask, 0, false); - if (ret != QDF_STATUS_SUCCESS) - pmo_err("Failed to add WOW ARP pattern ret %d", ret); - - return ret; -} - -/** - * pmo_configure_mc_ssdp() - API to configure SSDP address as MC list - *@vdev: objmgr vdev handle. - * - * SSDP address 239.255.255.250 is converted to Multicast Mac address - * and configure it to FW. Firmware will apply this pattern on the incoming - * packets to filter them out during chatter/wow mode. - * - * Return: Success/Failure - */ -static QDF_STATUS pmo_configure_mc_ssdp( - struct wlan_objmgr_vdev *vdev) -{ - struct wlan_objmgr_psoc *psoc; - const uint8_t ssdp_addr[QDF_MAC_ADDR_SIZE] = { - 0x01, 0x00, 0x5e, 0x7f, 0xff, 0xfa }; - struct qdf_mac_addr multicast_addr; - QDF_STATUS status = QDF_STATUS_SUCCESS; - - psoc = pmo_vdev_get_psoc(vdev); - - qdf_mem_copy(&multicast_addr.bytes, &ssdp_addr, QDF_MAC_ADDR_SIZE); - status = pmo_tgt_set_mc_filter_req(vdev, - multicast_addr); - if (status != QDF_STATUS_SUCCESS) - pmo_err("unable to set ssdp as mc addr list filter"); - - return status; -} - -/** - * pmo_configure_wow_ssdp() - API to configure WoW SSDP - *@vdev: objmgr vdev handle - * - * API to configure SSDP pattern as WoW pattern - * - * Return: Success/Failure - */ -static QDF_STATUS pmo_configure_wow_ssdp( - struct wlan_objmgr_vdev *vdev) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - uint8_t discvr_offset = 30; - struct pmo_vdev_priv_obj *vdev_ctx; - - vdev_ctx = pmo_vdev_get_priv(vdev); - - /* - * WoW pattern ID should be unique for each vdev - * Different WoW patterns can use same pattern ID - */ - status = pmo_tgt_send_wow_patterns_to_fw(vdev, - pmo_get_and_increment_wow_default_ptrn(vdev_ctx), - discvr_ptrn, sizeof(discvr_ptrn), discvr_offset, - discvr_mask, sizeof(discvr_ptrn), false); - - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to add WOW mDNS/SSDP/LLMNR pattern"); - - return status; -} - -/** - * pmo_configure_ssdp() - API to Configure SSDP pattern to FW - *@vdev: objmgr vdev handle - * - * Setup multicast pattern for mDNS 224.0.0.251, SSDP 239.255.255.250 and LLMNR - * 224.0.0.252 - * - * Return: Success/Failure. - */ -static QDF_STATUS pmo_configure_ssdp(struct wlan_objmgr_vdev *vdev) -{ - struct pmo_vdev_priv_obj *vdev_ctx; - - vdev_ctx = pmo_vdev_get_priv(vdev); - - if (!vdev_ctx->pmo_psoc_ctx->psoc_cfg.ssdp) { - pmo_err("mDNS, SSDP, LLMNR patterns are disabled from ini"); - return QDF_STATUS_SUCCESS; - } - - pmo_debug("enable_mc_list:%d", - vdev_ctx->pmo_psoc_ctx->psoc_cfg.enable_mc_list); - - if (vdev_ctx->pmo_psoc_ctx->psoc_cfg.enable_mc_list) - return pmo_configure_mc_ssdp(vdev); - - return pmo_configure_wow_ssdp(vdev); -} - -/** - * pmo_configure_wow_sta() - set WOW patterns in sta mode - * @vdev: objmgr vdev handle - * - * Configures default WOW pattern for the given vdev_id which is in sta mode. - * - * Return: QDF status - */ -static QDF_STATUS pmo_configure_wow_sta(struct wlan_objmgr_vdev *vdev) -{ - uint8_t arp_offset = 12; - uint8_t mac_mask[PMO_80211_ADDR_LEN]; - QDF_STATUS ret = QDF_STATUS_SUCCESS; - struct pmo_vdev_priv_obj *vdev_ctx; - - vdev_ctx = pmo_vdev_get_priv(vdev); - - qdf_mem_set(&mac_mask, PMO_80211_ADDR_LEN, 0xFF); - /* - * Set up unicast wow pattern - * WoW pattern ID should be unique for each vdev - * Different WoW patterns can use same pattern ID - */ - ret = pmo_tgt_send_wow_patterns_to_fw(vdev, - pmo_get_and_increment_wow_default_ptrn(vdev_ctx), - wlan_vdev_mlme_get_macaddr(vdev), - PMO_80211_ADDR_LEN, 0, mac_mask, - PMO_80211_ADDR_LEN, false); - if (ret != QDF_STATUS_SUCCESS) { - pmo_err("Failed to add WOW unicast pattern ret %d", ret); - return ret; - } - - ret = pmo_configure_ssdp(vdev); - if (ret != QDF_STATUS_SUCCESS) - pmo_err("Failed to configure SSDP patterns to FW"); - - /* - * when arp offload or ns offloaded is disabled - * from ini file, configure broad cast arp pattern - * to fw, so that host can wake up - */ - if (!vdev_ctx->pmo_psoc_ctx->psoc_cfg.arp_offload_enable) { - /* Setup all ARP pkt pattern */ - pmo_info("ARP offload is disabled in INI enable WoW for ARP"); - ret = pmo_tgt_send_wow_patterns_to_fw(vdev, - pmo_get_and_increment_wow_default_ptrn( - vdev_ctx), - arp_ptrn, sizeof(arp_ptrn), arp_offset, - arp_mask, sizeof(arp_mask), false); - if (ret != QDF_STATUS_SUCCESS) { - pmo_err("Failed to add WOW ARP pattern"); - return ret; - } - } - /* for NS or NDP offload packets */ - if (!vdev_ctx->pmo_psoc_ctx->psoc_cfg.ns_offload_enable_static) { - /* Setup all NS pkt pattern */ - pmo_info("NS offload is disabled in INI enable WoW for NS"); - ret = pmo_tgt_send_wow_patterns_to_fw(vdev, - pmo_get_and_increment_wow_default_ptrn( - vdev_ctx), - ns_ptrn, sizeof(arp_ptrn), arp_offset, - arp_mask, sizeof(arp_mask), false); - if (ret != QDF_STATUS_SUCCESS) { - pmo_err("Failed to add WOW NS pattern"); - return ret; - } - } - - return ret; -} - -void pmo_register_wow_default_patterns(struct wlan_objmgr_vdev *vdev) -{ - enum tQDF_ADAPTER_MODE vdev_opmode = QDF_MAX_NO_OF_MODE; - struct pmo_vdev_priv_obj *vdev_ctx; - uint8_t vdev_id; - struct pmo_psoc_priv_obj *psoc_ctx; - - vdev_ctx = pmo_vdev_get_priv(vdev); - - vdev_id = pmo_vdev_get_id(vdev); - if (vdev_id > WLAN_UMAC_PSOC_MAX_VDEVS) { - pmo_err("Invalid vdev id %d", vdev_id); - return; - } - - vdev_opmode = pmo_get_vdev_opmode(vdev); - if (vdev_opmode == QDF_MAX_NO_OF_MODE) { - pmo_err("Invalid vdev opmode %d", vdev_id); - return; - } - - if (!vdev_ctx->ptrn_match_enable) { - pmo_err("ptrn_match is disable for vdev %d", vdev_id); - return; - } - - if (pmo_is_vdev_in_beaconning_mode(vdev_opmode)) { - /* Configure SAP/GO/IBSS mode default wow patterns */ - pmo_info("Config SAP default wow patterns vdev_id %d", - vdev_id); - pmo_configure_wow_ap(vdev); - } else { - /* Configure STA/P2P CLI mode default wow patterns */ - pmo_info("Config STA default wow patterns vdev_id %d", - vdev_id); - pmo_configure_wow_sta(vdev); - psoc_ctx = vdev_ctx->pmo_psoc_ctx; - if (psoc_ctx && psoc_ctx->psoc_cfg.ra_ratelimit_enable) { - pmo_info("Config STA RA wow pattern vdev_id %d", - vdev_id); - pmo_tgt_send_ra_filter_req(vdev); - } - } - -} - -void pmo_register_action_frame_patterns(struct wlan_objmgr_vdev *vdev) -{ - - struct pmo_action_wakeup_set_params cmd = {0}; - int i = 0; - QDF_STATUS status; - - cmd.vdev_id = pmo_vdev_get_id(vdev); - cmd.operation = pmo_action_wakeup_set; - - cmd.action_category_map[i++] = ALLOWED_ACTION_FRAMES_BITMAP0; - cmd.action_category_map[i++] = ALLOWED_ACTION_FRAMES_BITMAP1; - cmd.action_category_map[i++] = ALLOWED_ACTION_FRAMES_BITMAP2; - cmd.action_category_map[i++] = ALLOWED_ACTION_FRAMES_BITMAP3; - cmd.action_category_map[i++] = ALLOWED_ACTION_FRAMES_BITMAP4; - cmd.action_category_map[i++] = ALLOWED_ACTION_FRAMES_BITMAP5; - cmd.action_category_map[i++] = ALLOWED_ACTION_FRAMES_BITMAP6; - cmd.action_category_map[i++] = ALLOWED_ACTION_FRAMES_BITMAP7; - - for (i = 0; i < PMO_SUPPORTED_ACTION_CATE_ELE_LIST; i++) { - if (i < ALLOWED_ACTION_FRAME_MAP_WORDS) - pmo_debug("%s: %d action Wakeup pattern 0x%x in fw", - __func__, i, cmd.action_category_map[i]); - else - cmd.action_category_map[i] = 0; - } - - /* config action frame patterns */ - status = pmo_tgt_send_action_frame_pattern_req(vdev, &cmd); - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to config wow action frame map, ret %d", - status); -} - diff --git a/pmo/core/src/wlan_pmo_suspend_resume.c b/pmo/core/src/wlan_pmo_suspend_resume.c deleted file mode 100644 index ec72100da6..0000000000 --- a/pmo/core/src/wlan_pmo_suspend_resume.c +++ /dev/null @@ -1,1225 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Define API's for suspend / resume handling - */ - -#include "wlan_pmo_wow.h" -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_main.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" -#include "wlan_pmo_lphb.h" -#include "wlan_pmo_suspend_resume.h" -#include "cdp_txrx_ops.h" -#include "cdp_txrx_misc.h" -#include "cdp_txrx_flow_ctrl_legacy.h" -#include "hif.h" -#include "htc_api.h" -#include "wlan_pmo_obj_mgmt_api.h" -#include -#include "cds_api.h" -#include "wlan_pmo_static_config.h" - -/** - * pmo_core_calculate_listen_interval() - Calculate vdev listen interval - * @vdev: objmgr vdev handle - * @vdev_ctx: pmo vdev priv ctx - * @listen_interval: listen interval which is computed for vdev - * - * Return: QDF_STATUS - */ -static QDF_STATUS pmo_core_calculate_listen_interval( - struct wlan_objmgr_vdev *vdev, - struct pmo_vdev_priv_obj *vdev_ctx, - uint32_t *listen_interval) -{ - uint32_t max_mod_dtim; - uint32_t beacon_interval_mod; - struct pmo_psoc_cfg *psoc_cfg = &vdev_ctx->pmo_psoc_ctx->psoc_cfg; - - if (psoc_cfg->sta_dynamic_dtim) { - *listen_interval = psoc_cfg->sta_dynamic_dtim; - } else if ((psoc_cfg->sta_mod_dtim) && - (psoc_cfg->sta_max_li_mod_dtim)) { - /* - * When the system is in suspend - * (maximum beacon will be at 1s == 10) - * If maxModulatedDTIM ((MAX_LI_VAL = 10) / AP_DTIM) - * equal or larger than MDTIM - * (configured in WCNSS_qcom_cfg.ini) - * Set LI to MDTIM * AP_DTIM - * If Dtim = 2 and Mdtim = 2 then LI is 4 - * Else - * Set LI to maxModulatedDTIM * AP_DTIM - */ - beacon_interval_mod = - pmo_core_get_vdev_beacon_interval(vdev) / 100; - if (beacon_interval_mod == 0) - beacon_interval_mod = 1; - - max_mod_dtim = psoc_cfg->sta_max_li_mod_dtim / - (pmo_core_get_vdev_dtim_period(vdev) - * beacon_interval_mod); - - if (max_mod_dtim <= 0) - max_mod_dtim = 1; - - if (max_mod_dtim >= psoc_cfg->sta_mod_dtim) { - *listen_interval = - (psoc_cfg->sta_mod_dtim * - pmo_core_get_vdev_dtim_period(vdev)); - } else { - *listen_interval = - (max_mod_dtim * - pmo_core_get_vdev_dtim_period(vdev)); - } - } else { - return QDF_STATUS_E_FAULT; - } - return QDF_STATUS_SUCCESS; -} - -/** - * pmo_core_set_vdev_suspend_dtim() - set suspend dtim parameters in fw - * @psoc: objmgr psoc handle - * @vdev: objmgr vdev handle - * @vdev_ctx: pmo vdev priv ctx - * - * Return: none - */ -static void pmo_core_set_vdev_suspend_dtim(struct wlan_objmgr_psoc *psoc, - struct wlan_objmgr_vdev *vdev, - struct pmo_vdev_priv_obj *vdev_ctx) -{ - uint32_t listen_interval; - QDF_STATUS ret; - uint8_t vdev_id; - enum pmo_power_save_qpower_mode qpower_config; - enum tQDF_ADAPTER_MODE opmode = pmo_core_get_vdev_op_mode(vdev); - - qpower_config = pmo_core_psoc_get_qpower_config(psoc); - vdev_id = pmo_vdev_get_id(vdev); - if (PMO_VDEV_IN_STA_MODE(opmode) && - pmo_core_get_vdev_dtim_period(vdev) != 0) { - /* calculate listen interval */ - ret = pmo_core_calculate_listen_interval(vdev, vdev_ctx, - &listen_interval); - if (ret != QDF_STATUS_SUCCESS) { - /* even it fails continue fwr will take default LI */ - pmo_info("Fail to calculate listen interval"); - } - - ret = pmo_tgt_vdev_update_param_req(vdev, - pmo_vdev_param_listen_interval, - listen_interval); - if (QDF_IS_STATUS_ERROR(ret)) { - /* even it fails continue fwr will take default LI */ - pmo_info("Failed to Set Listen Interval vdevId %d", - vdev_id); - } - pmo_debug("Set Listen Interval vdevId %d Listen Intv %d", - vdev_id, listen_interval); - - if (qpower_config) { - pmo_debug("disable Qpower in suspend mode!"); - ret = pmo_tgt_send_vdev_sta_ps_param(vdev, - pmo_sta_ps_enable_qpower, 0); - if (QDF_IS_STATUS_ERROR(ret)) - pmo_info("Failed to disable Qpower in suspend mode!"); - } - - ret = pmo_tgt_vdev_update_param_req(vdev, - pmo_vdev_param_dtim_policy, - pmo_normal_dtim); - if (QDF_IS_STATUS_ERROR(ret)) - pmo_info("Failed to Set to Normal DTIM vdevId %d", - vdev_id); - - /* Set it to Normal DTIM */ - pmo_core_vdev_set_dtim_policy(vdev, pmo_normal_dtim); - pmo_debug("Set DTIM Policy to Normal Dtim vdevId %d", vdev_id); - } -} - -/** - * pmo_core_set_suspend_dtim() - set suspend dtim - * @psoc: objmgr psoc handle - * - * Return: none - */ -static void pmo_core_set_suspend_dtim(struct wlan_objmgr_psoc *psoc) -{ - uint8_t vdev_id; - struct wlan_objmgr_vdev *vdev; - struct pmo_vdev_priv_obj *vdev_ctx; - bool alt_mdtim_enabled; - QDF_STATUS status; - - /* Iterate through VDEV list */ - for (vdev_id = 0; vdev_id < WLAN_UMAC_PSOC_MAX_VDEVS; vdev_id++) { - vdev = pmo_psoc_get_vdev(psoc, vdev_id); - if (!vdev) - continue; - - status = pmo_vdev_get_ref(vdev); - if (QDF_IS_STATUS_ERROR(status)) - continue; - - vdev_ctx = pmo_vdev_get_priv(vdev); - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - alt_mdtim_enabled = vdev_ctx->alt_modulated_dtim_enable; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - if (!alt_mdtim_enabled) - pmo_core_set_vdev_suspend_dtim(psoc, vdev, vdev_ctx); - - pmo_vdev_put_ref(vdev); - } -} - -/** - * pmo_core_update_wow_bus_suspend() - set wow bus suspend flag - * @psoc: objmgr psoc handle - * @psoc_ctx: pmo psoc priv ctx - * @val: true for enable else false - * Return: none - */ -static inline -void pmo_core_update_wow_bus_suspend(struct wlan_objmgr_psoc *psoc, - struct pmo_psoc_priv_obj *psoc_ctx, int val) -{ - qdf_spin_lock_bh(&psoc_ctx->lock); - psoc_ctx->wow.is_wow_bus_suspended = val; - qdf_spin_unlock_bh(&psoc_ctx->lock); - pmo_tgt_psoc_update_wow_bus_suspend_state(psoc, val); -} - -/* Define for conciseness */ -#define BM_LEN PMO_WOW_MAX_EVENT_BM_LEN -#define EV_NLO WOW_NLO_SCAN_COMPLETE_EVENT -#define EV_PWR WOW_CHIP_POWER_FAILURE_DETECT_EVENT - -void pmo_core_configure_dynamic_wake_events(struct wlan_objmgr_psoc *psoc) -{ - int vdev_id; - uint32_t adapter_type; - uint32_t enable_mask[BM_LEN]; - uint32_t disable_mask[BM_LEN]; - struct wlan_objmgr_vdev *vdev; - struct pmo_psoc_priv_obj *psoc_ctx; - bool enable_configured; - bool disable_configured; - - /* Iterate through VDEV list */ - for (vdev_id = 0; vdev_id < WLAN_UMAC_PSOC_MAX_VDEVS; vdev_id++) { - - enable_configured = false; - disable_configured = false; - - qdf_mem_set(enable_mask, sizeof(uint32_t) * BM_LEN, 0); - qdf_mem_set(disable_mask, sizeof(uint32_t) * BM_LEN, 0); - - vdev = pmo_psoc_get_vdev(psoc, vdev_id); - if (!vdev) - continue; - - if (ucfg_scan_get_pno_in_progress(vdev)) { - if (ucfg_scan_get_pno_match(vdev)) { - pmo_set_wow_event_bitmap(EV_NLO, - BM_LEN, - enable_mask); - enable_configured = true; - } else { - pmo_set_wow_event_bitmap(EV_NLO, - BM_LEN, - disable_mask); - disable_configured = true; - } - } - - adapter_type = pmo_get_vdev_opmode(vdev); - - psoc_ctx = pmo_psoc_get_priv(psoc); - - if (psoc_ctx->psoc_cfg.auto_power_save_fail_mode && - (adapter_type == QDF_STA_MODE || - adapter_type == QDF_P2P_CLIENT_MODE) - ) { - if (psoc_ctx->is_device_in_low_pwr_mode && - psoc_ctx->is_device_in_low_pwr_mode(vdev_id)) - pmo_set_wow_event_bitmap(EV_PWR, - BM_LEN, - enable_mask); - pmo_core_enable_wakeup_event(psoc, vdev_id, - enable_mask); - enable_configured = true; - } - if (enable_configured) - pmo_core_enable_wakeup_event(psoc, vdev_id, - enable_mask); - - if (disable_configured) - pmo_core_disable_wakeup_event(psoc, vdev_id, - disable_mask); - } - -} - -/** - * pmo_core_psoc_configure_suspend(): configure suspend req events - * @psoc: objmgr psoc - * - * Responsibility of the caller to take the psoc reference. - * - * Return: QDF_STATUS_SUCCESS for success or error code - */ -static QDF_STATUS pmo_core_psoc_configure_suspend(struct wlan_objmgr_psoc *psoc) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - - PMO_ENTER(); - - psoc_ctx = pmo_psoc_get_priv(psoc); - - if (pmo_core_is_wow_applicable(psoc)) { - pmo_info("WOW Suspend"); - pmo_core_apply_lphb(psoc); - - pmo_core_configure_dynamic_wake_events(psoc); - pmo_core_update_wow_enable(psoc_ctx, true); - pmo_core_update_wow_enable_cmd_sent(psoc_ctx, false); - } - - pmo_core_set_suspend_dtim(psoc); - - /* - * To handle race between hif_pci_suspend and unpause/pause tx handler. - * This happens when host sending WMI_WOW_ENABLE_CMDID to FW and receive - * WMI_TX_PAUSE_EVENT with ACTON_UNPAUSE almost at same time. - */ - pmo_core_update_wow_bus_suspend(psoc, psoc_ctx, true); - - PMO_EXIT(); - - return QDF_STATUS_SUCCESS; -} - -QDF_STATUS pmo_core_psoc_user_space_suspend_req(struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type type) -{ - QDF_STATUS status; - - PMO_ENTER(); - - status = pmo_psoc_get_ref(psoc); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("pmo cannot get the reference out of psoc"); - goto out; - } - - /* Suspend all components before sending target suspend command */ - status = pmo_suspend_all_components(psoc, type); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("Failed to suspend all component"); - goto dec_psoc_ref; - } - - status = pmo_core_psoc_configure_suspend(psoc); - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to configure suspend"); - -dec_psoc_ref: - pmo_psoc_put_ref(psoc); -out: - PMO_EXIT(); - - return status; -} - -/** - * pmo_core_set_vdev_resume_dtim() - set resume dtim parameters in fw - * @psoc: objmgr psoc handle - * @vdev: objmgr vdev handle - * @vdev_ctx: pmo vdev priv ctx - * - * Return: none - */ -static void pmo_core_set_vdev_resume_dtim(struct wlan_objmgr_psoc *psoc, - struct wlan_objmgr_vdev *vdev, - struct pmo_vdev_priv_obj *vdev_ctx) -{ - enum pmo_power_save_qpower_mode qpower_config; - QDF_STATUS ret; - uint8_t vdev_id; - enum tQDF_ADAPTER_MODE opmode = pmo_core_get_vdev_op_mode(vdev); - uint32_t cfg_data_val = 0; - - qpower_config = pmo_core_psoc_get_qpower_config(psoc); - vdev_id = pmo_vdev_get_id(vdev); - if ((PMO_VDEV_IN_STA_MODE(opmode)) && - (pmo_core_vdev_get_dtim_policy(vdev) == pmo_normal_dtim)) { -/* - if (!mac) { - WMA_LOGE(FL("Failed to get mac context")); - return; - } - if ((wlan_cfg_get_int(mac, WNI_CFG_LISTEN_INTERVAL, - &cfg_data_val) != eSIR_SUCCESS)) { - pmo_err("Failed to get value for listen interval"); - cfg_data_val = POWERSAVE_DEFAULT_LISTEN_INTERVAL; - } -*/ - cfg_data_val = 1; - ret = pmo_tgt_vdev_update_param_req(vdev, - pmo_vdev_param_listen_interval, cfg_data_val); - if (QDF_IS_STATUS_ERROR(ret)) { - /* Even it fails continue Fw will take default LI */ - pmo_err("Failed to Set Listen Interval vdevId %d", - vdev_id); - } - pmo_debug("Set Listen Interval vdevId %d Listen Intv %d", - vdev_id, cfg_data_val); - - ret = pmo_tgt_vdev_update_param_req(vdev, - pmo_vdev_param_dtim_policy, - pmo_stick_dtim); - if (QDF_IS_STATUS_ERROR(ret)) { - /* Set it back to Stick DTIM */ - pmo_err("Failed to Set to Stick DTIM vdevId %d", - vdev_id); - } - pmo_core_vdev_set_dtim_policy(vdev, pmo_stick_dtim); - pmo_debug("Set DTIM Policy to Stick Dtim vdevId %d", vdev_id); - - if (qpower_config) { - pmo_debug("enable Qpower in resume mode!"); - ret = pmo_tgt_send_vdev_sta_ps_param(vdev, - pmo_sta_ps_enable_qpower, qpower_config); - if (QDF_IS_STATUS_ERROR(ret)) - pmo_err("Failed to enable Qpower in resume"); - } - } -} - -/** - * pmo_core_set_resume_dtim() - set resume time dtim - * @psoc: objmgr psoc handle - * - * Return: none - */ -static void pmo_core_set_resume_dtim(struct wlan_objmgr_psoc *psoc) -{ - uint8_t vdev_id; - struct wlan_objmgr_vdev *vdev; - struct pmo_vdev_priv_obj *vdev_ctx; - bool alt_mdtim_enabled; - QDF_STATUS status; - - /* Iterate through VDEV list */ - for (vdev_id = 0; vdev_id < WLAN_UMAC_PSOC_MAX_VDEVS; vdev_id++) { - vdev = pmo_psoc_get_vdev(psoc, vdev_id); - if (!vdev) - continue; - - status = pmo_vdev_get_ref(vdev); - if (QDF_IS_STATUS_ERROR(status)) - continue; - - vdev_ctx = pmo_vdev_get_priv(vdev); - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - alt_mdtim_enabled = vdev_ctx->alt_modulated_dtim_enable; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - if (!alt_mdtim_enabled) - pmo_core_set_vdev_resume_dtim(psoc, vdev, vdev_ctx); - - pmo_vdev_put_ref(vdev); - } -} - -/** - * pmo_unpause_vdev - unpause all vdev - * @psoc: objmgr psoc handle - * - * unpause all vdev aftter resume/coming out of wow mode - * - * Return: none - */ -static void pmo_unpause_all_vdev(struct wlan_objmgr_psoc *psoc, - struct pmo_psoc_priv_obj *psoc_ctx) -{ - uint8_t vdev_id; - struct wlan_objmgr_psoc_objmgr *objmgr; - struct wlan_objmgr_vdev *vdev; - - /* Iterate through VDEV list */ - for (vdev_id = 0; vdev_id < WLAN_UMAC_PSOC_MAX_VDEVS; vdev_id++) { - wlan_psoc_obj_lock(psoc); - objmgr = &psoc->soc_objmgr; - if (!objmgr->wlan_vdev_list[vdev_id]) { - wlan_psoc_obj_unlock(psoc); - continue; - } - vdev = objmgr->wlan_vdev_list[vdev_id]; - wlan_psoc_obj_unlock(psoc); - if (vdev) { -#if defined(QCA_LL_LEGACY_TX_FLOW_CONTROL) || defined(QCA_LL_TX_FLOW_CONTROL_V2) - /* - * When host resume, by default, - * unpause all active vdev - */ - if (pmo_core_vdev_get_pause_bitmap(psoc_ctx, vdev_id)) { - cdp_fc_vdev_unpause( - pmo_core_psoc_get_dp_handle(psoc), - pmo_core_vdev_get_dp_handle(vdev), - 0xffffffff); - if (psoc_ctx->pause_bitmap_notifier) - psoc_ctx->pause_bitmap_notifier(vdev_id, - 0); - } -#endif /* QCA_LL_LEGACY_TX_FLOW_CONTROL */ - } - } -} - -/** - * pmo_core_psoc_configure_resume(): configure events after bus resume - * @psoc: objmgr psoc - * - * Responsibility of the caller to take the psoc reference. - * - * Return: QDF_STATUS_SUCCESS for success or error code - */ -static QDF_STATUS pmo_core_psoc_configure_resume(struct wlan_objmgr_psoc *psoc) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - - PMO_ENTER(); - - psoc_ctx = pmo_psoc_get_priv(psoc); - - pmo_core_set_resume_dtim(psoc); - pmo_core_update_wow_bus_suspend(psoc, psoc_ctx, false); - pmo_unpause_all_vdev(psoc, psoc_ctx); - - PMO_EXIT(); - - return QDF_STATUS_SUCCESS; -} - -QDF_STATUS pmo_core_psoc_user_space_resume_req(struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type type) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - - PMO_ENTER(); - - status = pmo_psoc_get_ref(psoc); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("pmo cannot get the reference out of psoc"); - goto out; - } - - /* Resume all components */ - status = pmo_resume_all_components(psoc, type); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("Failed to resume all the components"); - goto dec_psoc_ref; - } - - status = pmo_core_psoc_configure_resume(psoc); - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to configure resume"); - -dec_psoc_ref: - pmo_psoc_put_ref(psoc); -out: - PMO_EXIT(); - - return status; -} - -/** - * pmo_core_enable_wow_in_fw() - enable wow in fw - * @psoc: objmgr psoc handle - * @psoc_ctx: pmo psoc private ctx - * @wow_params: collection of wow enable override parameters - * - * Return: QDF status - */ -static -QDF_STATUS pmo_core_enable_wow_in_fw(struct wlan_objmgr_psoc *psoc, - struct pmo_psoc_priv_obj *psoc_ctx, - struct pmo_wow_enable_params *wow_params) -{ - int host_credits, wmi_pending_cmds; - struct pmo_wow_cmd_params param = {0}; - QDF_STATUS status; - - PMO_ENTER(); - qdf_event_reset(&psoc_ctx->wow.target_suspend); - pmo_core_set_wow_nack(psoc_ctx, false); - host_credits = pmo_tgt_psoc_get_host_credits(psoc); - wmi_pending_cmds = pmo_tgt_psoc_get_pending_cmnds(psoc); - pmo_debug("Credits:%d; Pending_Cmds: %d", - host_credits, wmi_pending_cmds); - - param.enable = true; - if (wow_params->is_unit_test) - param.flags = WMI_WOW_FLAG_UNIT_TEST_ENABLE; - - switch (wow_params->interface_pause) { - default: - pmo_err("Invalid interface pause setting: %d", - wow_params->interface_pause); - /* intentional fall-through to default */ - case PMO_WOW_INTERFACE_PAUSE_DEFAULT: - param.can_suspend_link = - htc_can_suspend_link( - pmo_core_psoc_get_htc_handle(psoc)); - break; - case PMO_WOW_INTERFACE_PAUSE_ENABLE: - param.can_suspend_link = true; - break; - case PMO_WOW_INTERFACE_PAUSE_DISABLE: - param.can_suspend_link = false; - break; - } - - switch (wow_params->resume_trigger) { - default: - pmo_err("Invalid resume trigger setting: %d", - wow_params->resume_trigger); - /* intentional fall-through to default */ - case PMO_WOW_RESUME_TRIGGER_DEFAULT: - case PMO_WOW_RESUME_TRIGGER_GPIO: - /* - * GPIO is currently implicit. This means you can't actually - * force GPIO if a platform's default wake trigger is HTC wakeup - */ - break; - case PMO_WOW_RESUME_TRIGGER_HTC_WAKEUP: - param.flags |= WMI_WOW_FLAG_DO_HTC_WAKEUP; - break; - } - - status = pmo_tgt_psoc_send_wow_enable_req(psoc, ¶m); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("Failed to enable wow in fw"); - goto out; - } - - pmo_tgt_update_target_suspend_flag(psoc, true); - - if (qdf_wait_single_event(&psoc_ctx->wow.target_suspend, - PMO_TGT_SUSPEND_COMPLETE_TIMEOUT) - != QDF_STATUS_SUCCESS) { - pmo_err("Failed to receive WoW Enable Ack from FW"); - pmo_err("Credits:%d; Pending_Cmds: %d", - pmo_tgt_psoc_get_host_credits(psoc), - pmo_tgt_psoc_get_pending_cmnds(psoc)); - pmo_tgt_update_target_suspend_flag(psoc, false); - status = QDF_STATUS_E_FAILURE; - QDF_BUG(0); - goto out; - } - - if (pmo_core_get_wow_nack(psoc_ctx)) { - pmo_err("FW not ready to WOW"); - pmo_tgt_update_target_suspend_flag(psoc, false); - status = QDF_STATUS_E_AGAIN; - goto out; - } - - host_credits = pmo_tgt_psoc_get_host_credits(psoc); - wmi_pending_cmds = pmo_tgt_psoc_get_pending_cmnds(psoc); - - if (host_credits < PMO_WOW_REQUIRED_CREDITS) { - pmo_err("No Credits after HTC ACK:%d, pending_cmds:%d," - "cannot resume back", host_credits, wmi_pending_cmds); - htc_dump_counter_info(pmo_core_psoc_get_htc_handle(psoc)); -/* - if (!cds_is_driver_recovering()) - QDF_BUG(0); - else - pmo_err("SSR in progress, ignore no credit issue"); -*/ - } - pmo_debug("WOW enabled successfully in fw: credits:%d pending_cmds: %d", - host_credits, wmi_pending_cmds); - - pmo_core_update_wow_enable_cmd_sent(psoc_ctx, true); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_core_psoc_suspend_target(struct wlan_objmgr_psoc *psoc, - int disable_target_intr) -{ - QDF_STATUS status; - struct pmo_suspend_params param; - struct pmo_psoc_priv_obj *psoc_ctx; - - PMO_ENTER(); - - psoc_ctx = pmo_psoc_get_priv(psoc); - - qdf_event_reset(&psoc_ctx->wow.target_suspend); - param.disable_target_intr = disable_target_intr; - status = pmo_tgt_psoc_send_supend_req(psoc, ¶m); - if (status != QDF_STATUS_SUCCESS) - goto out; - - pmo_tgt_update_target_suspend_flag(psoc, true); - - if (qdf_wait_single_event(&psoc_ctx->wow.target_suspend, - PMO_TGT_SUSPEND_COMPLETE_TIMEOUT) - != QDF_STATUS_SUCCESS) { - status = QDF_STATUS_E_TIMEOUT; - pmo_err("Failed to get ACK from firmware for pdev suspend"); - pmo_tgt_update_target_suspend_flag(psoc, false); - /* wma_suspend_target_timeout(pmac->sme.enableSelfRecovery); */ - } -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_core_psoc_bus_suspend_req(struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type type, - struct pmo_wow_enable_params *wow_params) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - QDF_STATUS status; - bool wow_mode_selected = false; - - PMO_ENTER(); - if (!psoc) { - pmo_err("psoc is NULL"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - if (!wow_params) { - pmo_err("wow_params is NULL"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - status = pmo_psoc_get_ref(psoc); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("pmo cannot get the reference out of psoc"); - goto out; - } - - psoc_ctx = pmo_psoc_get_priv(psoc); - -/* TODO - scan manager need to provide the below public api - if (wma_check_scan_in_progress(handle)) { - pmo_err("Scan in progress. Aborting suspend"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } -*/ - - wow_mode_selected = pmo_core_is_wow_enabled(psoc_ctx); - pmo_info("wow mode selected %d", wow_mode_selected); - - if (wow_mode_selected) - status = pmo_core_enable_wow_in_fw(psoc, psoc_ctx, wow_params); - else - status = pmo_core_psoc_suspend_target(psoc, 0); - - pmo_psoc_put_ref(psoc); -out: - PMO_EXIT(); - - return status; -} - -#ifdef FEATURE_RUNTIME_PM -QDF_STATUS pmo_core_psoc_bus_runtime_suspend(struct wlan_objmgr_psoc *psoc, - pmo_pld_auto_suspend_cb pld_cb) -{ - void *hif_ctx; - void *dp_soc; - void *txrx_pdev; - void *htc_ctx; - QDF_STATUS status; - struct pmo_wow_enable_params wow_params = {0}; - - PMO_ENTER(); - - if (!psoc) { - pmo_err("psoc is NULL"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - status = pmo_psoc_get_ref(psoc); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("pmo cannot get the reference out of psoc"); - goto out; - } - - hif_ctx = pmo_core_psoc_get_hif_handle(psoc); - dp_soc = pmo_core_psoc_get_dp_handle(psoc); - txrx_pdev = pmo_core_psoc_get_txrx_handle(psoc); - htc_ctx = pmo_core_psoc_get_htc_handle(psoc); - if (!hif_ctx || !dp_soc || !txrx_pdev || !htc_ctx) { - pmo_err("Invalid hif: %p, dp: %p, txrx: %p, htc: %p", - hif_ctx, dp_soc, txrx_pdev, htc_ctx); - status = QDF_STATUS_E_INVAL; - goto dec_psoc_ref; - } - - wow_params.interface_pause = PMO_WOW_INTERFACE_PAUSE_ENABLE; - wow_params.resume_trigger = PMO_WOW_RESUME_TRIGGER_GPIO; - - if (hif_pre_runtime_suspend(hif_ctx)) - goto runtime_failure; - - status = cdp_runtime_suspend(dp_soc, txrx_pdev); - if (status != QDF_STATUS_SUCCESS) - goto runtime_failure; - - if (htc_runtime_suspend(htc_ctx)) - goto cdp_runtime_resume; - - status = pmo_tgt_psoc_set_runtime_pm_inprogress(psoc, true); - if (status != QDF_STATUS_SUCCESS) - goto resume_htc; - - status = pmo_core_psoc_configure_suspend(psoc); - if (status != QDF_STATUS_SUCCESS) - goto resume_htc; - - status = pmo_core_psoc_bus_suspend_req(psoc, QDF_RUNTIME_SUSPEND, - &wow_params); - if (status != QDF_STATUS_SUCCESS) - goto pmo_resume_configure; - - if (hif_runtime_suspend(hif_ctx)) - goto pmo_bus_resume; - - if (pld_cb && pld_cb()) - goto resume_hif; - - hif_process_runtime_suspend_success(hif_ctx); - - goto dec_psoc_ref; - -resume_hif: - QDF_BUG(!hif_runtime_resume(hif_ctx)); - -pmo_bus_resume: - QDF_BUG(QDF_STATUS_SUCCESS == - pmo_core_psoc_bus_resume_req(psoc, QDF_RUNTIME_SUSPEND)); - -pmo_resume_configure: - QDF_BUG(QDF_STATUS_SUCCESS == - pmo_core_psoc_configure_resume(psoc)); - -resume_htc: - QDF_BUG(QDF_STATUS_SUCCESS == - pmo_tgt_psoc_set_runtime_pm_inprogress(psoc, false)); - - QDF_BUG(!htc_runtime_resume(htc_ctx)); - -cdp_runtime_resume: - QDF_BUG(QDF_STATUS_SUCCESS == - cdp_runtime_resume(dp_soc, txrx_pdev)); - -runtime_failure: - hif_process_runtime_suspend_failure(hif_ctx); - -dec_psoc_ref: - pmo_psoc_put_ref(psoc); - -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_core_psoc_bus_runtime_resume(struct wlan_objmgr_psoc *psoc, - pmo_pld_auto_resume_cb pld_cb) -{ - void *hif_ctx; - void *dp_soc; - void *txrx_pdev; - void *htc_ctx; - QDF_STATUS status; - - PMO_ENTER(); - - if (!psoc) { - pmo_err("psoc is NULL"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - status = pmo_psoc_get_ref(psoc); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("pmo cannot get the reference out of psoc"); - goto out; - } - - hif_ctx = pmo_core_psoc_get_hif_handle(psoc); - dp_soc = pmo_core_psoc_get_dp_handle(psoc); - txrx_pdev = pmo_core_psoc_get_txrx_handle(psoc); - htc_ctx = pmo_core_psoc_get_htc_handle(psoc); - if (!hif_ctx || !dp_soc || !txrx_pdev || !htc_ctx) { - pmo_err("Invalid hif: %p, dp: %p, txrx: %p, htc: %p", - hif_ctx, dp_soc, txrx_pdev, htc_ctx); - status = QDF_STATUS_E_INVAL; - goto dec_psoc_ref; - } - - hif_pre_runtime_resume(hif_ctx); - - if (pld_cb) - QDF_BUG(!pld_cb()); - - QDF_BUG(!hif_runtime_resume(hif_ctx)); - - status = pmo_core_psoc_bus_resume_req(psoc, QDF_RUNTIME_SUSPEND); - QDF_BUG(status == QDF_STATUS_SUCCESS); - - status = pmo_core_psoc_configure_resume(psoc); - QDF_BUG(status == QDF_STATUS_SUCCESS); - - status = pmo_tgt_psoc_set_runtime_pm_inprogress(psoc, false); - QDF_BUG(status == QDF_STATUS_SUCCESS); - - QDF_BUG(!htc_runtime_resume(htc_ctx)); - - status = cdp_runtime_resume(dp_soc, txrx_pdev); - QDF_BUG(status == QDF_STATUS_SUCCESS); - - hif_process_runtime_resume_success(hif_ctx); - -dec_psoc_ref: - pmo_psoc_put_ref(psoc); - -out: - PMO_EXIT(); - - return status; -} -#endif - -/** - * pmo_core_psoc_send_host_wakeup_ind_to_fw() - send wakeup ind to fw - * @psoc: objmgr psoc handle - * @psoc_ctx: pmo psoc private context - * - * Sends host wakeup indication to FW. On receiving this indication, - * FW will come out of WOW. - * - * Return: QDF status - */ -static -QDF_STATUS pmo_core_psoc_send_host_wakeup_ind_to_fw( - struct wlan_objmgr_psoc *psoc, - struct pmo_psoc_priv_obj *psoc_ctx) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - - PMO_ENTER(); - qdf_event_reset(&psoc_ctx->wow.target_resume); - - status = pmo_tgt_psoc_send_host_wakeup_ind(psoc); - if (status) { - status = QDF_STATUS_E_FAILURE; - goto out; - } - pmo_debug("Host wakeup indication sent to fw"); - - status = qdf_wait_single_event(&psoc_ctx->wow.target_resume, - PMO_RESUME_TIMEOUT); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("Timeout waiting for resume event from FW"); - pmo_err("Pending commands %d credits %d", - pmo_tgt_psoc_get_pending_cmnds(psoc), - pmo_tgt_psoc_get_host_credits(psoc)); - QDF_BUG(0); - } else { - pmo_debug("Host wakeup received"); - } - - if (status == QDF_STATUS_SUCCESS) - pmo_tgt_update_target_suspend_flag(psoc, false); -out: - PMO_EXIT(); - - return status; -} - -/** - * pmo_core_psoc_disable_wow_in_fw() - Disable wow in bus resume context. - * @psoc: objmgr psoc handle - * @psoc_ctx: pmo psoc private context - * - * Return: QDF_STATUS_SUCCESS for success or error code - */ -static -QDF_STATUS pmo_core_psoc_disable_wow_in_fw(struct wlan_objmgr_psoc *psoc, - struct pmo_psoc_priv_obj *psoc_ctx) -{ - QDF_STATUS ret; - - PMO_ENTER(); - ret = pmo_core_psoc_send_host_wakeup_ind_to_fw(psoc, psoc_ctx); - if (ret != QDF_STATUS_SUCCESS) - goto out; - - pmo_core_update_wow_enable(psoc_ctx, false); - pmo_core_update_wow_enable_cmd_sent(psoc_ctx, false); - - /* To allow the tx pause/unpause events */ - pmo_core_update_wow_bus_suspend(psoc, psoc_ctx, false); - /* Unpause the vdev as we are resuming */ - pmo_unpause_all_vdev(psoc, psoc_ctx); -out: - PMO_EXIT(); - - return ret; -} - -/** - * pmo_core_psoc_resume_target() - resume target - * @psoc: objmgr psoc handle - * @psoc_ctx: pmo psoc private context - * - * Return: QDF_STATUS_SUCCESS for success or error code - */ -static -QDF_STATUS pmo_core_psoc_resume_target(struct wlan_objmgr_psoc *psoc, - struct pmo_psoc_priv_obj *psoc_ctx) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - - PMO_ENTER(); - qdf_event_reset(&psoc_ctx->wow.target_resume); - - status = pmo_tgt_psoc_send_target_resume_req(psoc); - if (status != QDF_STATUS_SUCCESS) { - status = QDF_STATUS_E_FAILURE; - goto out; - } - - status = qdf_wait_single_event(&psoc_ctx->wow.target_resume, - PMO_RESUME_TIMEOUT); - if (status != QDF_STATUS_SUCCESS) { - pmo_fatal("Timeout waiting for resume event from FW"); - pmo_fatal("Pending commands %d credits %d", - pmo_tgt_psoc_get_pending_cmnds(psoc), - pmo_tgt_psoc_get_host_credits(psoc)); - QDF_BUG(0); - } else { - pmo_debug("Host wakeup received"); - } - - if (status == QDF_STATUS_SUCCESS) - pmo_tgt_update_target_suspend_flag(psoc, false); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_core_psoc_bus_resume_req(struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type type) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - bool wow_mode; - QDF_STATUS status; - - PMO_ENTER(); - if (!psoc) { - pmo_err("psoc is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - status = pmo_psoc_get_ref(psoc); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("pmo cannot get the reference out of psoc"); - goto out; - } - - psoc_ctx = pmo_psoc_get_priv(psoc); - wow_mode = pmo_core_is_wow_enabled(psoc_ctx); - pmo_info("wow mode %d", wow_mode); - - pmo_core_update_wow_initial_wake_up(psoc_ctx, false); - - if (wow_mode) - status = pmo_core_psoc_disable_wow_in_fw(psoc, psoc_ctx); - else - status = pmo_core_psoc_resume_target(psoc, psoc_ctx); - - pmo_psoc_put_ref(psoc); - -out: - PMO_EXIT(); - - return status; -} - -void pmo_core_psoc_target_suspend_acknowledge(void *context, bool wow_nack) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - struct wlan_objmgr_psoc *psoc = (struct wlan_objmgr_psoc *)context; - QDF_STATUS status; - - PMO_ENTER(); - if (!psoc) { - pmo_err("psoc is null"); - goto out; - } - - status = pmo_psoc_get_ref(psoc); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("Failed to get psoc reference"); - goto out; - } - - psoc_ctx = pmo_psoc_get_priv(psoc); - - pmo_core_set_wow_nack(psoc_ctx, wow_nack); - qdf_event_set(&psoc_ctx->wow.target_suspend); - if (wow_nack && !pmo_tgt_psoc_get_runtime_pm_in_progress(psoc)) { - qdf_wake_lock_timeout_acquire(&psoc_ctx->wow.wow_wake_lock, - PMO_WAKE_LOCK_TIMEOUT); - } - - pmo_psoc_put_ref(psoc); -out: - PMO_EXIT(); -} - -void pmo_core_psoc_wakeup_host_event_received(struct wlan_objmgr_psoc *psoc) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - - PMO_ENTER(); - if (!psoc) { - pmo_err("psoc is null"); - goto out; - } - - psoc_ctx = pmo_psoc_get_priv(psoc); - qdf_event_set(&psoc_ctx->wow.target_resume); -out: - PMO_EXIT(); -} - -int pmo_core_psoc_is_target_wake_up_received(struct wlan_objmgr_psoc *psoc) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - int ret = 0; - QDF_STATUS status; - - if (!psoc) { - pmo_err("psoc is NULL"); - ret = -EAGAIN; - goto out; - } - - status = pmo_psoc_get_ref(psoc); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("Failed to get psoc reference"); - ret = -EAGAIN; - goto out; - } - - psoc_ctx = pmo_psoc_get_priv(psoc); - if (pmo_core_get_wow_initial_wake_up(psoc_ctx)) { - pmo_err("Target initial wake up received try again"); - ret = -EAGAIN; - } - - pmo_psoc_put_ref(psoc); -out: - PMO_EXIT(); - - return ret; -} - - -int pmo_core_psoc_clear_target_wake_up(struct wlan_objmgr_psoc *psoc) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - int ret = 0; - QDF_STATUS status; - - if (!psoc) { - pmo_err("psoc is NULL"); - ret = -EAGAIN; - goto out; - } - - status = pmo_psoc_get_ref(psoc); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("Failed to get psoc reference"); - ret = -EAGAIN; - goto out; - } - - psoc_ctx = pmo_psoc_get_priv(psoc); - pmo_core_update_wow_initial_wake_up(psoc_ctx, false); - - pmo_psoc_put_ref(psoc); -out: - PMO_EXIT(); - - return ret; -} - -void pmo_core_psoc_handle_initial_wake_up(void *cb_ctx) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - struct wlan_objmgr_psoc *psoc = (struct wlan_objmgr_psoc *)cb_ctx; - QDF_STATUS status; - - PMO_ENTER(); - if (!psoc) { - pmo_err("cb ctx/psoc is null"); - goto out; - } - - status = pmo_psoc_get_ref(psoc); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("Failed to get psoc reference"); - goto out; - } - - psoc_ctx = pmo_psoc_get_priv(psoc); - pmo_core_update_wow_initial_wake_up(psoc_ctx, true); - - pmo_psoc_put_ref(psoc); - -out: - PMO_EXIT(); -} - diff --git a/pmo/core/src/wlan_pmo_wow.c b/pmo/core/src/wlan_pmo_wow.c deleted file mode 100644 index f6feec9186..0000000000 --- a/pmo/core/src/wlan_pmo_wow.c +++ /dev/null @@ -1,350 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Define API's for wow pattern addition and deletion in fwr - */ - -#include "wlan_pmo_wow.h" -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_main.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" -#include -#include "wlan_pmo_static_config.h" -#include "wlan_reg_services_api.h" - - -static inline int pmo_find_wow_ptrn_len(const char *ptrn) -{ - int len = 0; - - while (*ptrn != '\0' && *ptrn != PMO_WOW_INTER_PTRN_TOKENIZER) { - len++; - ptrn++; - } - - return len; -} - -QDF_STATUS pmo_core_add_wow_pattern(struct wlan_objmgr_vdev *vdev, - const char *ptrn) -{ - return QDF_STATUS_SUCCESS; -} - -QDF_STATUS pmo_core_del_wow_pattern(struct wlan_objmgr_vdev *vdev, - const char *ptrn) -{ - return QDF_STATUS_SUCCESS; -} - -QDF_STATUS pmo_core_wow_enter(struct wlan_objmgr_vdev *vdev, - struct pmo_wow_enter_params *wow_enter_param) -{ - return QDF_STATUS_SUCCESS; -} - -QDF_STATUS pmo_core_wow_exit(struct wlan_objmgr_vdev *vdev) -{ - return QDF_STATUS_SUCCESS; -} - -void pmo_core_enable_wakeup_event(struct wlan_objmgr_psoc *psoc, - uint32_t vdev_id, uint32_t *bitmap) -{ - QDF_STATUS status; - struct wlan_objmgr_vdev *vdev; - - PMO_ENTER(); - if (!psoc) { - pmo_err("psoc is null"); - goto out; - } - - vdev = pmo_psoc_get_vdev(psoc, vdev_id); - if (!vdev) { - pmo_err("vdev is NULL"); - goto out; - } - - status = pmo_vdev_get_ref(vdev); - if (QDF_IS_STATUS_ERROR(status)) - goto out; - - pmo_info("enable wakeup event vdev_id %d wake up event 0x%x%x%x%x", - vdev_id, bitmap[0], bitmap[1], bitmap[2], bitmap[3]); - pmo_tgt_enable_wow_wakeup_event(vdev, bitmap); - - pmo_vdev_put_ref(vdev); - -out: - PMO_EXIT(); -} - -void pmo_core_disable_wakeup_event(struct wlan_objmgr_psoc *psoc, - uint32_t vdev_id, uint32_t *bitmap) -{ - QDF_STATUS status; - struct wlan_objmgr_vdev *vdev; - - PMO_ENTER(); - if (!psoc) { - pmo_err("psoc is null"); - goto out; - } - - vdev = pmo_psoc_get_vdev(psoc, vdev_id); - if (!vdev) { - pmo_err("vdev is NULL"); - goto out; - } - - status = pmo_vdev_get_ref(vdev); - if (QDF_IS_STATUS_ERROR(status)) - goto out; - - pmo_info("Disable wakeup event vdev_id %d wake up event 0x%x%x%x%x", - vdev_id, bitmap[0], bitmap[1], bitmap[2], bitmap[3]); - pmo_tgt_disable_wow_wakeup_event(vdev, bitmap); - - pmo_vdev_put_ref(vdev); - -out: - PMO_EXIT(); -} - -/** - * pmo_is_beaconing_vdev_up(): check if a beaconning vdev is up - * @psoc: objmgr psoc handle - * - * Return TRUE if beaconning vdev is up - */ -static -bool pmo_is_beaconing_vdev_up(struct wlan_objmgr_psoc *psoc) -{ - int vdev_id; - struct wlan_objmgr_vdev *vdev; - enum tQDF_ADAPTER_MODE vdev_opmode; - bool is_beaconing; - QDF_STATUS status; - - /* Iterate through VDEV list */ - for (vdev_id = 0; vdev_id < WLAN_UMAC_PSOC_MAX_VDEVS; vdev_id++) { - vdev = pmo_psoc_get_vdev(psoc, vdev_id); - if (!vdev) - continue; - - status = pmo_vdev_get_ref(vdev); - if (QDF_IS_STATUS_ERROR(status)) - continue; - - vdev_opmode = pmo_get_vdev_opmode(vdev); - is_beaconing = pmo_is_vdev_in_beaconning_mode(vdev_opmode) && - pmo_is_vdev_up(vdev); - - pmo_vdev_put_ref(vdev); - - if (is_beaconing) - return true; - } - - return false; -} - -/** - * pmo_support_wow_for_beaconing: wow query for beaconning - * @psoc: objmgr psoc handle - * - * Need to configure wow to enable beaconning offload when - * a beaconing vdev is up and beaonning offload is configured. - * - * Return: true if we need to enable wow for beaconning offload - */ -static -bool pmo_support_wow_for_beaconing(struct wlan_objmgr_psoc *psoc) -{ - /* - * if (WMI_SERVICE_IS_ENABLED(wma->wmi_service_bitmap, - * WMI_SERVICE_BEACON_OFFLOAD)) - */ - return pmo_is_beaconing_vdev_up(psoc); -} - -bool pmo_core_is_wow_applicable(struct wlan_objmgr_psoc *psoc) -{ - int vdev_id; - struct wlan_objmgr_vdev *vdev; - bool is_wow_applicable; - QDF_STATUS status; - - if (!psoc) { - pmo_err("psoc is null"); - return false; - } - - if (pmo_support_wow_for_beaconing(psoc)) { - pmo_debug("one of vdev is in beaconning mode, enabling wow"); - return true; - } - - if (wlan_reg_is_11d_scan_inprogress(psoc)) { - pmo_debug("11d scan is in progress, enabling wow"); - return true; - } - /* Iterate through VDEV list */ - for (vdev_id = 0; vdev_id < WLAN_UMAC_PSOC_MAX_VDEVS; vdev_id++) { - vdev = pmo_psoc_get_vdev(psoc, vdev_id); - if (!vdev) - continue; - - status = pmo_vdev_get_ref(vdev); - if (QDF_IS_STATUS_ERROR(status)) - continue; - - if (pmo_core_is_vdev_connected(vdev)) { - pmo_debug("STA is connected, enabling wow"); - is_wow_applicable = true; - } else if (ucfg_scan_get_pno_in_progress(vdev)) { - pmo_debug("NLO is in progress, enabling wow"); - is_wow_applicable = true; - } else if (pmo_core_is_extscan_in_progress(vdev)) { - pmo_debug("EXT is in progress, enabling wow"); - is_wow_applicable = true; - } else if (pmo_core_is_p2plo_in_progress(vdev)) { - pmo_debug("P2P LO is in progress, enabling wow"); - is_wow_applicable = true; - } else if (pmo_core_is_lpass_enabled(vdev)) { - pmo_debug("LPASS is enabled, enabling WoW"); - is_wow_applicable = true; - } else if (pmo_core_is_nan_enabled(vdev)) { - pmo_debug("NAN is enabled, enabling WoW"); - is_wow_applicable = true; - } else if (pmo_core_get_vdev_op_mode(vdev) == QDF_NDI_MODE) { - pmo_debug("vdev %d is in NAN data mode, enabling wow", - vdev_id); - is_wow_applicable = true; - } - - pmo_vdev_put_ref(vdev); - - if (is_wow_applicable) - return true; - } - - pmo_debug("All vdev are in disconnected state\n" - "and pno/extscan is not in progress, skipping wow"); - - return false; -} - -void pmo_set_wow_event_bitmap(WOW_WAKE_EVENT_TYPE event, - uint32_t wow_bitmap_size, - uint32_t *bitmask) -{ - uint32_t bit_idx = 0, idx = 0; - - if (!bitmask || wow_bitmap_size < PMO_WOW_MAX_EVENT_BM_LEN) { - pmo_err("wow bitmask length shorter than %d", - PMO_WOW_MAX_EVENT_BM_LEN); - return; - } - pmo_get_event_bitmap_idx(event, wow_bitmap_size, &bit_idx, &idx); - bitmask[idx] |= 1 << bit_idx; - - pmo_debug("%s: bitmask updated %x%x%x%x", - __func__, bitmask[0], bitmask[1], bitmask[2], bitmask[3]); -} - -void pmo_set_sta_wow_bitmask(uint32_t *bitmask, uint32_t wow_bitmap_size) -{ - - pmo_set_wow_event_bitmap(WOW_CSA_IE_EVENT, - wow_bitmap_size, - bitmask); - pmo_set_wow_event_bitmap(WOW_CLIENT_KICKOUT_EVENT, - wow_bitmap_size, - bitmask); - pmo_set_wow_event_bitmap(WOW_PATTERN_MATCH_EVENT, - wow_bitmap_size, - bitmask); - pmo_set_wow_event_bitmap(WOW_MAGIC_PKT_RECVD_EVENT, - wow_bitmap_size, - bitmask); - pmo_set_wow_event_bitmap(WOW_DEAUTH_RECVD_EVENT, - wow_bitmap_size, - bitmask); - pmo_set_wow_event_bitmap(WOW_DISASSOC_RECVD_EVENT, - wow_bitmap_size, - bitmask); - pmo_set_wow_event_bitmap(WOW_BMISS_EVENT, - wow_bitmap_size, - bitmask); - pmo_set_wow_event_bitmap(WOW_GTK_ERR_EVENT, - wow_bitmap_size, - bitmask); - pmo_set_wow_event_bitmap(WOW_BETTER_AP_EVENT, - wow_bitmap_size, - bitmask); - pmo_set_wow_event_bitmap(WOW_HTT_EVENT, - wow_bitmap_size, - bitmask); - pmo_set_wow_event_bitmap(WOW_RA_MATCH_EVENT, - wow_bitmap_size, - bitmask); - pmo_set_wow_event_bitmap(WOW_NLO_DETECTED_EVENT, - wow_bitmap_size, - bitmask); - pmo_set_wow_event_bitmap(WOW_EXTSCAN_EVENT, - wow_bitmap_size, - bitmask); - pmo_set_wow_event_bitmap(WOW_OEM_RESPONSE_EVENT, - wow_bitmap_size, - bitmask); - pmo_set_wow_event_bitmap(WOW_TDLS_CONN_TRACKER_EVENT, - wow_bitmap_size, - bitmask); - pmo_set_wow_event_bitmap(WOW_11D_SCAN_EVENT, - wow_bitmap_size, - bitmask); - -} - -void pmo_set_sap_wow_bitmask(uint32_t *bitmask, uint32_t wow_bitmap_size) -{ - - pmo_set_wow_event_bitmap(WOW_PROBE_REQ_WPS_IE_EVENT, - wow_bitmap_size, - bitmask); - pmo_set_wow_event_bitmap(WOW_PATTERN_MATCH_EVENT, - wow_bitmap_size, - bitmask); - pmo_set_wow_event_bitmap(WOW_AUTH_REQ_EVENT, - wow_bitmap_size, - bitmask); - pmo_set_wow_event_bitmap(WOW_ASSOC_REQ_EVENT, - wow_bitmap_size, - bitmask); - pmo_set_wow_event_bitmap(WOW_DEAUTH_RECVD_EVENT, - wow_bitmap_size, - bitmask); - pmo_set_wow_event_bitmap(WOW_DISASSOC_RECVD_EVENT, - wow_bitmap_size, - bitmask); - pmo_set_wow_event_bitmap(WOW_HTT_EVENT, - wow_bitmap_size, - bitmask); -} diff --git a/pmo/dispatcher/inc/wlan_pmo_arp_public_struct.h b/pmo/dispatcher/inc/wlan_pmo_arp_public_struct.h deleted file mode 100644 index 533b809986..0000000000 --- a/pmo/dispatcher/inc/wlan_pmo_arp_public_struct.h +++ /dev/null @@ -1,58 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ - /** - * DOC: Declare various struct, macros which shall be used in - * pmo arp offload feature. - * - * Note: This file shall not contain public API's prototype/declarations. - * - */ - -#ifndef _WLAN_PMO_ARP_PUBLIC_STRUCT_H_ -#define _WLAN_PMO_ARP_PUBLIC_STRUCT_H_ - -#include "wlan_pmo_common_public_struct.h" - -/** - * struct pmo_arp_req - pmo arp request - * @psoc: objmgr psoc - * @vdev_id: vdev id on which arp offload needed - * @ipv4_addr: ipv4 address for the interface - * @trigger: context from where arp offload triggered - */ -struct pmo_arp_req { - struct wlan_objmgr_psoc *psoc; - uint8_t vdev_id; - uint32_t ipv4_addr; - enum pmo_offload_trigger trigger; -}; - -/** - * struct pmo_arp_req - pmo arp offload param for target interface - * @enable: true when arp offload is enabled else false - * @host_ipv4_addr: host interface ipv4 address - * @bssid: peer ap address - */ -struct pmo_arp_offload_params { - uint8_t enable; - uint8_t host_ipv4_addr[PMO_IPV4_ADDR_LEN]; - struct qdf_mac_addr bssid; -}; - -#endif /* end of _WLAN_PMO_ARP_PUBLIC_STRUCT_H_ */ - diff --git a/pmo/dispatcher/inc/wlan_pmo_common_public_struct.h b/pmo/dispatcher/inc/wlan_pmo_common_public_struct.h deleted file mode 100644 index f1dd85c641..0000000000 --- a/pmo/dispatcher/inc/wlan_pmo_common_public_struct.h +++ /dev/null @@ -1,297 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Declare various struct, macros which are common for - * various pmo related features. - * - * Note: This file shall not contain public API's prototype/declartions. - * - */ - -#ifndef _WLAN_PMO_COMMONP_PUBLIC_STRUCT_H_ -#define _WLAN_PMO_COMMONP_PUBLIC_STRUCT_H_ - -#include "wlan_cmn.h" -#include "wlan_objmgr_cmn.h" -#include "wlan_objmgr_global_obj.h" -#include "wlan_objmgr_psoc_obj.h" -#include "wlan_objmgr_pdev_obj.h" -#include "wlan_objmgr_vdev_obj.h" -#include "wlan_objmgr_peer_obj.h" -#include "wmi_unified.h" -#include "qdf_status.h" -#include "qdf_lock.h" -#include "qdf_event.h" - -#define PMO_IPV4_ADDR_LEN 4 - -#define PMO_IPV4_ARP_REPLY_OFFLOAD 0 -#define PMO_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD 1 -#define PMO_IPV6_NS_OFFLOAD 2 -#define PMO_OFFLOAD_DISABLE 0 -#define PMO_OFFLOAD_ENABLE 1 - -#define PMO_MAC_NS_OFFLOAD_SIZE 1 -#define PMO_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA 16 -#define PMO_MAC_IPV6_ADDR_LEN 16 -#define PMO_IPV6_ADDR_VALID 1 -#define PMO_IPV6_ADDR_UC_TYPE 0 -#define PMO_IPV6_ADDR_AC_TYPE 1 - -#define PMO_80211_ADDR_LEN 6 /* size of 802.11 address */ - -#define PMO_WOW_REQUIRED_CREDITS 1 - -/** - * enum pmo_offload_type: tell offload type - * @pmo_arp_offload: arp offload - * @pmo_ns_offload: ns offload - * @pmo_gtk_offload: gtk offload - */ -enum pmo_offload_type { - pmo_arp_offload = 0, - pmo_ns_offload, - pmo_gtk_offload, -}; - -/** - * enum pmo_vdev_param_id: tell vdev param id - * @pmo_vdev_param_listen_interval: vdev listen interval param id - * @pmo_vdev_param_dtim_policy: vdev param dtim policy - * @pmo_vdev_max_param: Max vdev param id - */ -enum pmo_vdev_param_id { - pmo_vdev_param_listen_interval = 0, - pmo_vdev_param_dtim_policy, - pmo_vdev_max_param -}; - -/** - * enum pmo_beacon_dtim_policy: tell vdev beacon policy - * @pmo_ignore_dtim: fwr need to igonre dtime policy - * @pmo_normal_dtim: fwr need to use normal dtime policy - * @pmo_stick_dtim: fwr need to use stick dtime policy - * @auto_dtim: fwr need to auto dtime policy - */ -enum pmo_beacon_dtim_policy { - pmo_ignore_dtim = 0x01, - pmo_normal_dtim = 0x02, - pmo_stick_dtim = 0x03, - pmo_auto_dtim = 0x04, -}; - -/** - * @pmo_sta_ps_param_rx_wake_policy: Controls how frames are retrievd from AP - * while STA is sleeping. - * @pmo_sta_ps_param_tx_wake_threshold: STA will go active after this many TX - * @pmo_sta_ps_param_pspoll_count:No of PS-Poll to send before STA wakes up - * @pmo_sta_ps_param_inactivity_time: TX/RX inactivity time in msec before - going to sleep. - * @pmo_sta_ps_param_uapsd: Set uapsd configuration. - * @pmo_sta_ps_param_qpower_pspoll_count: No of PS-Poll to send before - STA wakes up in QPower Mode. - * @pmo_sta_ps_enable_qpower: Enable QPower - * @pmo_sta_ps_param_qpower_max_tx_before_wake: Number of TX frames before the - entering the Active state - */ -enum pmo_sta_powersave_param { - pmo_sta_ps_param_rx_wake_policy = 0, - pmo_sta_ps_param_tx_wake_threshold = 1, - pmo_sta_ps_param_pspoll_count = 2, - pmo_sta_ps_param_inactivity_time = 3, - pmo_sta_ps_param_uapsd = 4, - pmo_sta_ps_param_qpower_pspoll_count = 5, - pmo_sta_ps_enable_qpower = 6, - pmo_sta_ps_param_qpower_max_tx_before_wake = 7, -}; - -/** - * enum powersave_qpower_mode: QPOWER modes - * @pmo_qpower_disabled: Qpower is disabled - * @pmo_qpower_enabled: Qpower is enabled - * @pmo_qpower_duty_cycling: Qpower is enabled with duty cycling - */ -enum pmo_power_save_qpower_mode { - pmo_qpower_disabled = 0, - pmo_qpower_enabled = 1, - pmo_qpower_duty_cycling = 2 -}; - -/** - * enum powersave_qpower_mode: powersave_mode - * @pmo_ps_not_supported: Power save is not supported - * @pmo_ps_legacy_no_deep_sleep: Legacy pwr save enabled and deep sleep disabled - * @pmo_ps_qpower_no_deep_sleep: QPOWER enabled and deep sleep disabled - * @pmo_ps_legacy_deep_sleep: Legacy power save enabled and deep sleep enabled - * @pmo_ps_qpower_deep_sleep: QPOWER enabled and deep sleep enabled - * @pmo_ps_duty_cycling_qpower: QPOWER enabled in duty cycling mode - */ -enum pmo_powersave_mode { - pmo_ps_not_supported = 0, - pmo_ps_legacy_no_deep_sleep = 1, - pmo_ps_qpower_no_deep_sleep = 2, - pmo_ps_legacy_deep_sleep = 3, - pmo_ps_qpower_deep_sleep = 4, - pmo_ps_duty_cycling_qpower = 5 -}; - -/** - * enum wow_resume_trigger - resume trigger override setting values - * @PMO_WOW_RESUME_TRIGGER_DEFAULT: fw to use platform default resume trigger - * @PMO_WOW_RESUME_TRIGGER_HTC_WAKEUP: force fw to use HTC Wakeup to resume - * @PMO_WOW_RESUME_TRIGGER_GPIO: force fw to use GPIO to resume - * @PMO_WOW_RESUME_TRIGGER_COUNT: number of resume trigger options - */ -enum pmo_wow_resume_trigger { - /* always first */ - PMO_WOW_RESUME_TRIGGER_DEFAULT = 0, - PMO_WOW_RESUME_TRIGGER_HTC_WAKEUP, - PMO_WOW_RESUME_TRIGGER_GPIO, - /* always last */ - PMO_WOW_RESUME_TRIGGER_COUNT -}; - -/** - * enum wow_interface_pause - interface pause override setting values - * @PMO_WOW_INTERFACE_PAUSE_DEFAULT: use platform default iface pause setting - * @PMO_WOW_INTERFACE_PAUSE_ENABLE: force interface pause setting to enabled - * @PMO_WOW_INTERFACE_PAUSE_DISABLE: force interface pause setting to disabled - * @PMO_WOW_INTERFACE_PAUSE_COUNT: number of interface pause options - */ -enum pmo_wow_interface_pause { - /* always first */ - PMO_WOW_INTERFACE_PAUSE_DEFAULT = 0, - PMO_WOW_INTERFACE_PAUSE_ENABLE, - PMO_WOW_INTERFACE_PAUSE_DISABLE, - /* always last */ - PMO_WOW_INTERFACE_PAUSE_COUNT -}; - -#define PMO_TGT_SUSPEND_COMPLETE_TIMEOUT 6000 -#define PMO_WAKE_LOCK_TIMEOUT 1000 -#define PMO_RESUME_TIMEOUT 25000 - -/** - * struct wow_enable_params - A collection of wow enable override parameters - * @is_unit_test: true to notify fw this is a unit-test suspend - * @interface_pause: used to override the interface pause indication sent to fw - * @resume_trigger: used to force fw to use a particular resume method - */ -struct pmo_wow_enable_params { - bool is_unit_test; - enum pmo_wow_interface_pause interface_pause; - enum pmo_wow_resume_trigger resume_trigger; -}; - -/** - * typedef for psoc suspend handler - */ -typedef QDF_STATUS(*pmo_psoc_suspend_handler) - (struct wlan_objmgr_psoc *psoc, void *arg); -/** - * typedef for psoc resume handler - */ -typedef QDF_STATUS(*pmo_psoc_resume_handler) - (struct wlan_objmgr_psoc *psoc, void *arg); - -/** - * enum pmo_offload_trigger: trigger information - * @pmo_apps_suspend: trigger is apps suspend - * @pmo_apps_resume: trigger is apps resume - * @pmo_runtime_suspend: trigger is runtime suspend - * @pmo_runtime_resume: trigger is runtime resume - * @pmo_ipv4_change_notify: trigger is ipv4 change handler - * @pmo_ipv6_change_notify: trigger is ipv6 change handler - * @pmo_ns_offload_dynamic_update: enable/disable ns offload on the fly - * @pmo_peer_disconnect: trigger is peer disconnect - * @pmo_mcbc_setting_dynamic_update: mcbc value update on the fly - * - * @pmo_offload_trigger_max: Max trigger value - */ -enum pmo_offload_trigger { - pmo_apps_suspend = 0, - pmo_apps_resume, - pmo_runtime_suspend, - pmo_runtime_resume, - pmo_ipv4_change_notify, - pmo_ipv6_change_notify, - pmo_mc_list_change_notify, - pmo_ns_offload_dynamic_update, - pmo_peer_disconnect, - pmo_mcbc_setting_dynamic_update, - - pmo_offload_trigger_max, -}; - -/** - * struct pmo_psoc_cfg - user configuration required for pmo - * @ptrn_match_enable_all_vdev: true when pattern match is enable for all vdev - * @bpf_enable: true if psoc supports bpf else false - * @arp_offload_enable: true if arp offload is supported for psoc else false - * @hw_filter_mode: which mode the hardware filter should use during DTIM - * @ns_offload_enable_static: true if psoc supports ns offload in ini else false - * @ns_offload_enable_dynamic: to enable / disable the ns offload using - * ioctl or vendor command. - * @ssdp: true if psoc supports if ssdp configuration in wow mode - * @enable_mc_list: true if psoc supports mc addr list else false - * @active_mode_offload: true if psoc supports active mode offload else false - * @ap_arpns_support: true if psoc supports arp ns for ap mode - * @max_wow_filters: maximum number of wow filter supported - * @ra_ratelimit_enable: true when ra filtering ins eanbled else false - * @ra_ratelimit_interval: ra packets interval - * @magic_ptrn_enable: true when magic pattern is enabled else false - * @deauth_enable: true when wake up on deauth is enabled else false - * @disassoc_enable: true when wake up on disassoc is enabled else false - * @bmiss_enable: true when wake up on bmiss is enabled else false - * @nan_enable: true when nan is enabled else false - * @lpass_enable: true when lpass is enabled else false - * @sta_dynamic_dtim: station dynamic DTIM value - * @sta_mod_dtim: station modulated DTIM value - * @sta_max_li_mod_dtim: station max listen interval DTIM value - * @power_save_mode: power save mode for psoc - * @auto_power_save_fail_mode: auto detect power save failure - */ -struct pmo_psoc_cfg { - bool ptrn_match_enable_all_vdev; - bool bpf_enable; - bool arp_offload_enable; - enum pmo_hw_filter_mode hw_filter_mode; - bool ns_offload_enable_static; - bool ns_offload_enable_dynamic; - bool ssdp; - bool enable_mc_list; - bool active_mode_offload; - bool ap_arpns_support; - uint8_t max_wow_filters; - bool ra_ratelimit_enable; - uint16_t ra_ratelimit_interval; - bool magic_ptrn_enable; - bool deauth_enable; - bool disassoc_enable; - bool bmiss_enable; - bool nan_enable; - bool lpass_enable; - uint8_t sta_dynamic_dtim; - uint8_t sta_mod_dtim; - uint8_t sta_max_li_mod_dtim; - uint8_t power_save_mode; - bool auto_power_save_fail_mode; -}; - -#endif /* end of _WLAN_PMO_COMMONP_STRUCT_H_ */ - diff --git a/pmo/dispatcher/inc/wlan_pmo_gtk_public_struct.h b/pmo/dispatcher/inc/wlan_pmo_gtk_public_struct.h deleted file mode 100644 index 8c27cc0ab2..0000000000 --- a/pmo/dispatcher/inc/wlan_pmo_gtk_public_struct.h +++ /dev/null @@ -1,95 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ - /** - * DOC: Declare various struct, macros which shall be used in - * pmo gtk related feature. - * - * Note: This file shall not contain public API's prototype/declarations. - * - */ - -#ifndef _WLAN_PMO_GTK_PUBLIC_STRUCT_H -#define _WLAN_PMO_GTK_PUBLIC_STRUCT_H - -#include "wlan_pmo_common_public_struct.h" - -#define PMO_GTK_OFFLOAD_ENABLE 0 -#define PMO_GTK_OFFLOAD_DISABLE 1 -#define PMO_KEK_LEN 16 -#define PMO_KCK_LEN 16 -#define PMO_REPLAY_COUNTER_LEN 8 -#define PMO_MAC_MAX_KEY_LENGTH 32 -#define PMO_IGTK_PN_SIZE 6 - -/** - * struct pmo_gtk_req - pmo gtk request - * @flags: optional flags - * @kck: Key confirmation key - * @kek: key encryption key - * @replay_counter: replay_counter - * @bssid: bssid - */ -struct pmo_gtk_req { - uint32_t flags; - uint8_t kck[PMO_KCK_LEN]; - uint8_t kek[PMO_KEK_LEN]; - uint64_t replay_counter; - struct qdf_mac_addr bssid; -}; - -/** - * struct pmo_gtk_rsp_params - pmo gtk response - * @psoc: objmgr psoc - * @vdev_id: vdev id on which arp offload needed - * @status_flag: status flags - * @refresh_cnt: number of successful GTK refresh exchanges since SET operation - * @igtk_key_index: igtk key index - * @igtk_key_length: igtk key length - * @igtk_key_rsc: igtk key index - * @igtk_key: igtk key length - */ -struct pmo_gtk_rsp_params { - uint8_t vdev_id; - uint32_t status_flag; - uint32_t refresh_cnt; - uint64_t replay_counter; - uint8_t igtk_key_index; - uint8_t igtk_key_length; - uint8_t igtk_key_rsc[PMO_IGTK_PN_SIZE]; - uint8_t igtk_key[PMO_MAC_MAX_KEY_LENGTH]; - struct qdf_mac_addr bssid; -}; - -/** - * typedef for gtk response callback - */ -typedef void (*pmo_gtk_rsp_callback)(void *callback_context, - struct pmo_gtk_rsp_params *gtk_rsp); - -/** - * struct pmo_gtk_rsp_req -gtk respsonse request - * @callback: client callback for providing gtk resposne when fwr send event - * @callback_context: client callback response - */ -struct pmo_gtk_rsp_req { - pmo_gtk_rsp_callback callback; - void *callback_context; -}; - -#endif /* end of _WLAN_PMO_GTK_PUBLIC_STRUCT_H */ - diff --git a/pmo/dispatcher/inc/wlan_pmo_hw_filter_public_struct.h b/pmo/dispatcher/inc/wlan_pmo_hw_filter_public_struct.h deleted file mode 100644 index 106cef75c7..0000000000 --- a/pmo/dispatcher/inc/wlan_pmo_hw_filter_public_struct.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -/** - * DOC: This file shall contain all public parameter (struct/macro/enum) - * definitions to support hardware filtering configuration. No APIs, or - * implememtations of APIs, shall be contained within. - */ - -#ifndef _WLAN_PMO_HW_FILTER_PUBLIC_STRUCT_H -#define _WLAN_PMO_HW_FILTER_PUBLIC_STRUCT_H - -/** - * pmo_hw_filter_mode - bitmap for enabled hardware filters - * @HW_FILTER_DISABLED: hardware filter is completely disabled - * @HW_FILTER_NON_ARP_BC: drop all broadcast frames, except ARP - * @HW_FILTER_NON_ICMPV6_MC: drop all multicast frames, except ICMPv6 - * - * The hardware filter is only effective in DTIM mode. Use this configuration - * to blanket drop broadcast/multicast packets at the hardware level, without - * waking up the firmware. - */ -enum pmo_hw_filter_mode { - PMO_HW_FILTER_DISABLED = 0, - PMO_HW_FILTER_NON_ARP_BC = 1, - PMO_HW_FILTER_NON_ICMPV6_MC = 2, -}; - -/** - * struct pmo_hw_filter_params - hardware filter configuration parameters - * @vdev_id: Id of the virtual device to configure - * @mode: the hardware filter mode to configure - */ -struct pmo_hw_filter_params { - uint8_t vdev_id; - enum pmo_hw_filter_mode mode; -}; - -#endif /* _WLAN_PMO_HW_FILTER_PUBLIC_STRUCT_H */ diff --git a/pmo/dispatcher/inc/wlan_pmo_lphb_public_struct.h b/pmo/dispatcher/inc/wlan_pmo_lphb_public_struct.h deleted file mode 100644 index 7778f91f30..0000000000 --- a/pmo/dispatcher/inc/wlan_pmo_lphb_public_struct.h +++ /dev/null @@ -1,176 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ - /** - * DOC: Declare various struct, macros which shall be used in - * pmo lphb offload feature. - * - * Note: This file shall not contain public API's prototype/declarations. - * - */ - -#ifndef _WLAN_PMO_LPHB_PUBLIC_STRUCT_H_ -#define _WLAN_PMO_LPHB_PUBLIC_STRUCT_H_ - -#include "wlan_pmo_common_public_struct.h" - -#ifdef FEATURE_WLAN_LPHB -#define PMO_SIR_LPHB_FILTER_LEN 64 - -/** - * enum lphb_ind_type -Low power heart beat indication type - * @pmo_lphb_set_en_param_indid: lphb enable indication - * @pmo_lphb_set_tcp_pararm_indid: lphb tcp param indication - * @pmo_lphb_set_tcp_pkt_filter_indid: lphb tcp packet filter indication - * @pmo_lphb_set_udp_pararm_indid: lphb udp param indication - * @pmo_lphb_set_udp_pkt_filter_indid: lphb udp packet filter indication - * @pmo_lphb_set_network_info_indid: lphb network information indication - */ -enum lphb_ind_type { - pmo_lphb_set_en_param_indid, - pmo_lphb_set_tcp_pararm_indid, - pmo_lphb_set_tcp_pkt_filter_indid, - pmo_lphb_set_udp_pararm_indid, - pmo_lphb_set_udp_pkt_filter_indid, - pmo_lphb_set_network_info_indid, -}; - -/** - * struct pmo_lphb_enable_req -Low power heart beat enable request - * @enable: lphb enable request - * @item: request item - * @session: lphb session - */ -struct pmo_lphb_enable_req { - uint8_t enable; - uint8_t item; - uint8_t session; -}; - -/** - * struct pmo_lphb_tcp_params - Low power heart beat tcp params - * @srv_ip: source ip address - * @dev_ip: destination ip address - * @src_port: source port - * @dst_port: destination port - * @timeout: tcp timeout value - * @session: session on which lphb needs to be configured - * @gateway_mac: gateway mac address - * @time_period_sec: time period in seconds - * @tcp_sn: tcp sequence number - */ -struct pmo_lphb_tcp_params { - uint32_t srv_ip; - uint32_t dev_ip; - uint16_t src_port; - uint16_t dst_port; - uint16_t timeout; - uint8_t session; - struct qdf_mac_addr gateway_mac; - uint16_t time_period_sec; - uint32_t tcp_sn; -}; - -/** - * struct pmo_lphb_tcp_filter_req - Low power heart beat tcp filter request - * @length: length of filter - * @offset: offset of filter - * @session: session on which lphb needs to be configured - * @filter: filter buffer - */ -struct pmo_lphb_tcp_filter_req { - uint16_t length; - uint8_t offset; - uint8_t session; - uint8_t filter[PMO_SIR_LPHB_FILTER_LEN]; -}; - -/** - * struct pmo_lphb_udp_params - Low power heart beat udp params - * @srv_ip: source ip address - * @dev_ip: destination ip address - * @src_port: source port - * @dst_port: destination port - * @timeout: tcp timeout value - * @session: session on which lphb needs to be configured - * @gateway_mac: gateway mac address - * @time_period_sec: time period in seconds - */ -struct pmo_lphb_udp_params { - uint32_t srv_ip; - uint32_t dev_ip; - uint16_t src_port; - uint16_t dst_port; - uint16_t interval; - uint16_t timeout; - uint8_t session; - struct qdf_mac_addr gateway_mac; -}; - -/** - * struct pmo_lphb_udp_filter_req - Low power heart beat udp filter request - * @length: length of filter - * @offset: offset of filter - * @session: session on which lphb needs to be configured - * @filter: filter buffer - */ -struct pmo_lphb_udp_filter_req { - uint16_t length; - uint8_t offset; - uint8_t session; - uint8_t filter[PMO_SIR_LPHB_FILTER_LEN]; -}; - -/** - * struct pmo_lphb_req - Low power heart beat request - * @cmd: lphb command type - * @dummy: whether dummy or not - * @params: based on command lphb request buffer - */ -struct pmo_lphb_req { - uint16_t cmd; - uint16_t dummy; - union { - struct pmo_lphb_enable_req lphb_enable_req; - struct pmo_lphb_tcp_params lphb_tcp_params; - struct pmo_lphb_tcp_filter_req lphb_tcp_filter_req; - struct pmo_lphb_udp_params lphb_udp_params; - struct pmo_lphb_udp_filter_req lphb_udp_filter_req; - } params; -}; - -/** - * struct pmo_lphb_rsp - Low power heart beat response - * @session_idx: session id - * @protocol_type: tell protocol type - * @event_reason: carry reason of lphb event - */ -struct pmo_lphb_rsp { - uint8_t session_idx; - uint8_t protocol_type; /*TCP or UDP */ - uint8_t event_reason; -}; -#endif /* FEATURE_WLAN_LPHB */ - -/* - * Define typedef for lphb callback when fwr send response - */ -typedef -void (*pmo_lphb_callback)(void *cb_ctx, struct pmo_lphb_rsp *ind_param); - -#endif /* end of _WLAN_PMO_LPHB_PUBLIC_STRUCT_H_ */ - diff --git a/pmo/dispatcher/inc/wlan_pmo_mc_addr_filtering_public_struct.h b/pmo/dispatcher/inc/wlan_pmo_mc_addr_filtering_public_struct.h deleted file mode 100644 index 8607c17131..0000000000 --- a/pmo/dispatcher/inc/wlan_pmo_mc_addr_filtering_public_struct.h +++ /dev/null @@ -1,60 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ - /** - * DOC: Declare various struct, macros which shall be used in - * pmo mc address filterign related features. - * - * Note: This file shall not contain public API's prototype/declarations. - * - */ - - -#ifndef _WLAN_PMO_MC_ADDR_FILTERING_STRUCT_H_ -#define _WLAN_PMO_MC_ADDR_FILTERING_STRUCT_H_ - -#include "wlan_pmo_common_public_struct.h" - -#define PMO_MAX_MC_ADDR_LIST 32 - -/** - * struct pmo_mc_addr_list_params -pmo mc address list request params - * @psoc: objmgr psoc - * @vdev_id: vdev id on which arp offload needed - * @count: multicast address count - * @mc_addr: multicast address array - */ -struct pmo_mc_addr_list_params { - struct wlan_objmgr_psoc *psoc; - uint8_t vdev_id; - uint8_t count; - struct qdf_mac_addr mc_addr[PMO_MAX_MC_ADDR_LIST]; -}; - -/** - * struct pmo_mc_addr_list -pmo mc address list params for vdev - * @is_filter_applied: is mc list filter applied on vdev - * @mc_cnt: mc address count - * @mc_addr:mc address list - */ -struct pmo_mc_addr_list { - uint8_t is_filter_applied; - uint8_t mc_cnt; - struct qdf_mac_addr mc_addr[PMO_MAX_MC_ADDR_LIST]; -}; - -#endif /* end of _WLAN_PMO_MC_ADDR_FILTERING_STRUCT_H_ */ diff --git a/pmo/dispatcher/inc/wlan_pmo_ns_public_struct.h b/pmo/dispatcher/inc/wlan_pmo_ns_public_struct.h deleted file mode 100644 index 27a0c0499f..0000000000 --- a/pmo/dispatcher/inc/wlan_pmo_ns_public_struct.h +++ /dev/null @@ -1,79 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ - /** - * DOC: Declare various struct, macros which shall be used in - * pmo ns offload feature. - * - * Note: This file shall not contain public API's prototype/declarations. - * - */ - - -#ifndef _WLAN_PMO_NS_PUBLIC_STRUCT_H_ -#define _WLAN_PMO_NS_PUBLIC_STRUCT_H_ - -#include "wlan_pmo_common_public_struct.h" - -/** - * struct pmo_ns_offload_params - pmo ns offload parameters - * @enable: true when ns offload enable - * @num_ns_offload_count: total ns entries - * @src_ipv6_addr: in request source ipv 6 address - * @self_ipv6_addr: self ipv6 address - * @target_ipv6_addr: target ipv6 address - * @self_macaddr: self mac address - * @src_ipv6_addr_valid: true if source ipv6 address is valid else false - * @target_ipv6_addr_valid: target ipv6 address are valid or not - * @target_ipv6_addr_ac_type: target ipv6 address type (unicast or anycast) - * @slot_idx: slot index - */ -struct pmo_ns_offload_params { - uint8_t enable; - uint32_t num_ns_offload_count; - uint8_t src_ipv6_addr[PMO_MAC_IPV6_ADDR_LEN]; - uint8_t self_ipv6_addr[PMO_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA] - [PMO_MAC_IPV6_ADDR_LEN]; - uint8_t target_ipv6_addr[PMO_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA] - [PMO_MAC_IPV6_ADDR_LEN]; - struct qdf_mac_addr self_macaddr; - uint8_t src_ipv6_addr_valid; - uint8_t target_ipv6_addr_valid[PMO_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA]; - uint8_t target_ipv6_addr_ac_type[PMO_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA]; - uint8_t slot_idx; - struct qdf_mac_addr bssid; -}; - -/** - * struct pmo_ns_req - pmo ns request - * @psoc: objmgr psoc - * @vdev_id: vdev id on which arp offload needed - * @trigger: context from where arp offload triggered - * @count: ns entries count - * @ipv6_addr: ipv6 address array - * @ipv6_addr_type: ipv6 address type (unicast/anycast) array - */ -struct pmo_ns_req { - struct wlan_objmgr_psoc *psoc; - uint8_t vdev_id; - enum pmo_offload_trigger trigger; - uint32_t count; - uint8_t ipv6_addr[PMO_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA] - [PMO_MAC_IPV6_ADDR_LEN]; - uint8_t ipv6_addr_type[PMO_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA]; -}; -#endif /* end of _WLAN_PMO_NS_PUBLIC_STRUCT_H_ */ diff --git a/pmo/dispatcher/inc/wlan_pmo_obj_mgmt_api.h b/pmo/dispatcher/inc/wlan_pmo_obj_mgmt_api.h deleted file mode 100644 index 42ee0b95dd..0000000000 --- a/pmo/dispatcher/inc/wlan_pmo_obj_mgmt_api.h +++ /dev/null @@ -1,241 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: declare utility API related to the pmo component - * called by other components - */ - -#ifndef _WLAN_PMO_OBJ_MGMT_API_H_ -#define _WLAN_PMO_OBJ_MGMT_API_H_ - -#include "wlan_pmo_common_public_struct.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -/** - * pmo_init() - initialize pmo_ctx context. - * - * This function initializes the power manager offloads (a.k.a pmo) context. - * - * Return: QDF_STATUS_SUCCESS - in case of success else return error - */ -QDF_STATUS pmo_init(void); - -/** - * pmo_deinit() - De initialize pmo_ctx context. - * - * This function De initializes power manager offloads (a.k.a pmo) contex. - * - * Return: QDF_STATUS_SUCCESS - in case of success else return error - */ -QDF_STATUS pmo_deinit(void); - -/** - * pmo_psoc_object_created_notification(): pmo psoc create handler - * @psoc: psoc which is going to created by objmgr - * @arg: argument for vdev create handler - * - * PMO, register this api with objmgr to detect psoc is created in fwr - * - * Return QDF_STATUS status in case of success else return error - */ -QDF_STATUS pmo_psoc_object_created_notification( - struct wlan_objmgr_psoc *psoc, void *arg); - -/** - * pmo_psoc_object_destroyed_notification(): pmo psoc delete handler - * @psco: psoc which is going to delete by objmgr - * @arg: argument for vdev delete handler - * - * PMO, register this api with objmgr to detect psoc is deleted in fwr - * - * Return QDF_STATUS status in case of success else return error - */ -QDF_STATUS pmo_psoc_object_destroyed_notification( - struct wlan_objmgr_psoc *psoc, void *arg); - -/** - * pmo_vdev_object_created_notification(): pmo vdev create handler - * @vdev: vdev which is going to created by objmgr - * @arg: argument for vdev create handler - * - * PMO, register this api with objmgr to detect vdev is created in fwr - * - * Return QDF_STATUS status in case of success else return error - */ -QDF_STATUS pmo_vdev_object_created_notification( - struct wlan_objmgr_vdev *vdev, void *arg); - -/** - * pmo_vdev_ready() - handles vdev ready in firmware event - * @vdev: vdev which is ready in firmware - * - * Objmgr vdev_create event does not guarantee vdev creation in firmware. - * Any logic that would normally go in the vdev_create event, but needs to - * communicate with firmware, needs to go here instead. - * - * Return QDF_STATUS - */ -QDF_STATUS pmo_vdev_ready(struct wlan_objmgr_vdev *vdev); - -/** - * pmo_vdev_object_destroyed_notification(): pmo vdev delete handler - * @vdev: vdev which is going to delete by objmgr - * @arg: argument for vdev delete handler - * - * PMO, register this api with objmgr to detect vdev is deleted in fwr - * - * Return QDF_STATUS status in case of success else return error - */ -QDF_STATUS pmo_vdev_object_destroyed_notification( - struct wlan_objmgr_vdev *vdev, void *arg); - -/** - * pmo_register_suspend_handler(): register suspend handler for components - * @id: component id - * @handler: resume handler for the mention component - * @arg: argument to pass while calling resume handler - * - * Return QDF_STATUS status -in case of success else return error - */ -QDF_STATUS pmo_register_suspend_handler( - enum wlan_umac_comp_id id, - pmo_psoc_suspend_handler handler, - void *arg); - -/** - * pmo_unregister_suspend_handler():unregister suspend handler for components - * @id: component id - * @handler: resume handler for the mention component - * - * Return QDF_STATUS status -in case of success else return error - */ -QDF_STATUS pmo_unregister_suspend_handler( - enum wlan_umac_comp_id id, - pmo_psoc_suspend_handler handler); - -/** - * pmo_register_resume_handler(): API to register resume handler for components - * @id: component id - * @handler: resume handler for the mention component - * @arg: argument to pass while calling resume handler - * - * Return QDF_STATUS status - in case of success else return error - */ -QDF_STATUS pmo_register_resume_handler( - enum wlan_umac_comp_id id, - pmo_psoc_resume_handler handler, - void *arg); - -/** - * pmo_unregister_resume_handler(): unregister resume handler for components - * @id: component id - * @handler: resume handler for the mention component - * - * Return QDF_STATUS status - in case of success else return error - */ -QDF_STATUS pmo_unregister_resume_handler( - enum wlan_umac_comp_id id, - pmo_psoc_resume_handler handler); - -/** - * pmo_suspend_all_components(): API to suspend all component - * @psoc:objmgr psoc - * @suspend_type: Tell suspend type (apps suspend / runtime suspend) - * - * Return QDF_STATUS status - in case of success else return error - */ -QDF_STATUS pmo_suspend_all_components(struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type suspend_type); - -/** - * pmo_resume_all_components(): API to resume all component - * @psoc:objmgr psoc - * @suspend_type: Tell suspend type from which resume is required - * - * Return QDF_STATUS status - in case of success else return error - */ -QDF_STATUS pmo_resume_all_components(struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type suspend_type); - -/** - * pmo_register_pause_bitmap_notifier(): API to register pause bitmap notifier - * @psoc: objmgr psoc handle - * @handler: pause bitmap updated notifier - * - * Return QDF_STATUS status - in case of success else return error - */ -QDF_STATUS pmo_register_pause_bitmap_notifier( - struct wlan_objmgr_psoc *psoc, - pmo_notify_pause_bitmap handler); - -/** - * pmo_unregister_pause_bitmap_notifier(): API to unregister pause bitmap notifier - * @psoc: objmgr psoc handle - * @handler: pause bitmap updated notifier - * - * Return QDF_STATUS status - in case of success else return error - */ -QDF_STATUS pmo_unregister_pause_bitmap_notifier( - struct wlan_objmgr_psoc *psoc, - pmo_notify_pause_bitmap handler); - -/** - * pmo_register_get_pause_bitmap(): API to get register pause bitmap notifier - * @psoc: objmgr psoc handle - * @handler: pause bitmap updated notifier - * - * Return QDF_STATUS status - in case of success else return error - */ -QDF_STATUS pmo_register_get_pause_bitmap(struct wlan_objmgr_psoc *psoc, - pmo_get_pause_bitmap handler); - -/** - * pmo_unregister_get_pause_bitmap(): API to unregister get pause bitmap callback - * @psoc: objmgr psoc handle - * @handler: pause bitmap updated notifier - * - * Return QDF_STATUS status - in case of success else return error - */ -QDF_STATUS pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc, - pmo_get_pause_bitmap handler); - - -/** - * pmo_register_is_device_in_low_pwr_mode(): API to get register device power - * save check notifier. - * @psoc: objmgr psoc handle - * @handler: device power save check notifier - * - * Return QDF_STATUS status - in case of success else return error - */ -QDF_STATUS pmo_register_is_device_in_low_pwr_mode(struct wlan_objmgr_psoc *psoc, - pmo_is_device_in_low_pwr_mode handler); - -/** - * pmo_unregister_is_device_in_low_pwr_mode(): API to unregister device power - * save check notifier. - * @psoc: objmgr psoc handle - * @handler: device power save check notifier - * - * Return QDF_STATUS status - in case of success else return error - */ -QDF_STATUS pmo_unregister_is_device_in_low_pwr_mode( - struct wlan_objmgr_psoc *psoc, - pmo_is_device_in_low_pwr_mode handler); - -#endif /* end of _WLAN_PMO_OBJ_MGMT_API_H_ */ diff --git a/pmo/dispatcher/inc/wlan_pmo_obj_mgmt_public_struct.h b/pmo/dispatcher/inc/wlan_pmo_obj_mgmt_public_struct.h deleted file mode 100644 index e28ffec21f..0000000000 --- a/pmo/dispatcher/inc/wlan_pmo_obj_mgmt_public_struct.h +++ /dev/null @@ -1,156 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ - /** - * DOC: Declare various struct, macros which are used for object mgmt in pmo. - * - * Note: This file shall not contain public API's prototype/declarations. - * - */ - - -#ifndef _WLAN_PMO_OBJ_MGMT_PUBLIC_STRUCT_H_ -#define _WLAN_PMO_OBJ_MGMT_PUBLIC_STRUCT_H_ - -#include "wlan_pmo_common_public_struct.h" -#include "wlan_pmo_arp_public_struct.h" -#include "wlan_pmo_ns_public_struct.h" -#include "wlan_pmo_gtk_public_struct.h" -#include "wlan_pmo_wow_public_struct.h" -#include "wlan_pmo_mc_addr_filtering_public_struct.h" - -/** - * typedef for vdev notifying the vdev pause bitmap new value to mlme - */ -typedef void (*pmo_notify_pause_bitmap)( - uint8_t vdev_id, uint16_t value); - -/** - * typedef for getting vdev pause bitmap - */ -typedef uint16_t(*pmo_get_pause_bitmap)(uint8_t vdev_id); - -/** - * typedef to know is deviec is in power save mode - */ -typedef bool (*pmo_is_device_in_low_pwr_mode)(uint8_t vdev_id); - -/** - * struct pmo_psoc_priv_obj - psoc related data require for pmo - * @psoc_cfg: place holder for psoc configuration - * @wow: wow configuration - * @dp_hdl: psoc data path handle - * @htc_hdl: htc layer handle - * @hif_hdl: hif layer handle - * @txrx_hdl: txrx pdev handle - * @pause_bitmap_notifier: registered callback to update pause bitmap value - * @pmo_get_pause_bitmap: registered callback to get pause bitmap value - * @lock: spin lock for pmo psoc - */ -struct pmo_psoc_priv_obj { - struct pmo_psoc_cfg psoc_cfg; - struct pmo_wow wow; - void *dp_hdl; - void *htc_hdl; - void *hif_hdl; - void *txrx_hdl; - pmo_notify_pause_bitmap pause_bitmap_notifier; - pmo_get_pause_bitmap get_pause_bitmap; - pmo_is_device_in_low_pwr_mode is_device_in_low_pwr_mode; - qdf_spinlock_t lock; -}; - -/** - * struct wlan_pmo_ctx -offload mgr context - * @psoc_context: psoc context - * @pmo_suspend_handler: suspend handler table for all componenets - * @pmo_suspend_handler_arg: suspend handler argument sfor all componenets - * @pmo_resume_handler: resume handler table for all componenets - * @pmo_resume_handler_arg: resume handler argument for all componenets - * @lock: lock for global pmo ctx - */ -struct wlan_pmo_ctx { - pmo_psoc_suspend_handler - pmo_suspend_handler[WLAN_UMAC_MAX_COMPONENTS]; - void *pmo_suspend_handler_arg[WLAN_UMAC_MAX_COMPONENTS]; - pmo_psoc_resume_handler - pmo_resume_handler[WLAN_UMAC_MAX_COMPONENTS]; - void *pmo_resume_handler_arg[WLAN_UMAC_MAX_COMPONENTS]; - qdf_spinlock_t lock; -}; - -/** - * struct pmo_vdev_priv_obj -vdev specific user configuration required for pmo - * @pmo_psoc_ctx: pmo psoc ctx - * @vdev_arp_req: place holder for arp request for vdev - * @vdev_ns_req: place holder for ns request for vdev - * @vdev_mc_list_req: place holder for mc addr list for vdev - * @addr_filter_pattern: addr filter pattern for vdev - * @vdev_gtk_params: place holder for gtk request for vdev - * @gtk_err_enable: gtk error is enabled or not - * @vdev_bpf_req: place holder for apf/bpf for vdev - * @vdev_pkt_filter: place holder for vdev packet filter - * @ptrn_match_enable: true when pattern match is enabled else false - * @num_wow_default_patterns: number of wow default patterns for vdev - * @num_wow_user_patterns: number of user wow patterns for vdev - * @nlo_in_progress: true when pno/nlo in progress else false - * @nlo_match_received: true when nlo match recevied from fwr else false - * @extscan_in_progress: true when extscan in progress else false - * @p2plo_in_progress: true when p2plo_in_progress in progress else false - * @dtim_period: dtim period for vdev - * @beacon_interval: vdev beacon interval - * @alt_modulated_dtim_enabled:dynamic modulated dtim enabled - * @dtim_policy: tells vdev beacon dtim policy - * @vdev_dp_hdl: vdev data path handle - * @pmo_vdev_lock: spin lock for pmo vdev priv ctx - */ -struct pmo_vdev_priv_obj { - struct pmo_psoc_priv_obj *pmo_psoc_ctx; - struct pmo_arp_offload_params vdev_arp_req; - struct pmo_ns_offload_params vdev_ns_req; - struct pmo_mc_addr_list vdev_mc_list_req; - uint8_t addr_filter_pattern; - struct pmo_gtk_req vdev_gtk_req; - struct pmo_gtk_rsp_req vdev_gtk_rsp_req; - qdf_atomic_t gtk_err_enable; - bool ptrn_match_enable; - uint8_t num_wow_default_patterns; - uint8_t num_wow_user_patterns; - bool nlo_in_progress; - bool nlo_match_received; - bool extscan_in_progress; - bool p2plo_in_progress; - uint8_t dtim_period; - uint8_t beacon_interval; - bool alt_modulated_dtim_enable; - uint32_t dtim_policy; - void *vdev_dp_hdl; - qdf_spinlock_t pmo_vdev_lock; -}; - -/* - * typedef for pld auto suspend callback during runtime suspend - */ -typedef -int (*pmo_pld_auto_suspend_cb)(void); - -/* - * typedef for pld auto resume callback during runtime resume - */ -typedef -int (*pmo_pld_auto_resume_cb)(void); -#endif /* end of _WLAN_PMO_OBJ_MGMT_PUBLIC_STRUCT_H_ */ diff --git a/pmo/dispatcher/inc/wlan_pmo_pkt_filter_public_struct.h b/pmo/dispatcher/inc/wlan_pmo_pkt_filter_public_struct.h deleted file mode 100644 index d067fe1486..0000000000 --- a/pmo/dispatcher/inc/wlan_pmo_pkt_filter_public_struct.h +++ /dev/null @@ -1,141 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ - /** - * DOC: Declare various struct, macros which shall be used in - * pmo packet filter feature. - * - * Note: This file shall not contain public API's prototype/declarations. - * - */ - -#ifndef _WLAN_PMO_PKT_FILTER_PUBLIC_STRUCT_H_ -#define _WLAN_PMO_PKT_FILTER_PUBLIC_STRUCT_H_ - -#include "qdf_types.h" - -#define PMO_MAX_FILTER_TEST_DATA_LEN 8 -#define PMO_MAX_NUM_TESTS_PER_FILTER 10 - -/** - * enum pmo_rcv_pkt_fltr_type: Receive Filter Parameters - * @PMO_RCV_FILTER_TYPE_INVALID: invalied filter type - * @PMO_RCV_FILTER_TYPE_FILTER_PKT: packet filter - * @PMO_RCV_FILTER_TYPE_BUFFER_PKT: buffer packet - * @PMO_RCV_FILTER_TYPE_MAX_ENUM_SIZE: max filter - */ -enum pmo_rcv_pkt_fltr_type { - PMO_RCV_FILTER_TYPE_INVALID, - PMO_RCV_FILTER_TYPE_FILTER_PKT, - PMO_RCV_FILTER_TYPE_BUFFER_PKT, - PMO_RCV_FILTER_TYPE_MAX_ENUM_SIZE -}; - -/** - * enum pmo_rcv_pkt_fltr_flag_type: Receive Filter flags - * @PMO_FILTER_CMP_TYPE_INVALID: invalied flag - * @PMO_FILTER_CMP_TYPE_EQUAL: equal - * @PMO_FILTER_CMP_TYPE_MASK_EQUAL: mask - * @PMO_FILTER_CMP_TYPE_NOT_EQUAL: not equal - * @PMO_FILTER_CMP_TYPE_MASK_NOT_EQUAL: mask not equal - * @PMO_FILTER_CMP_TYPE_MAX: max size of flag - */ -enum pmo_rcv_pkt_fltr_flag_type { - PMO_FILTER_CMP_TYPE_INVALID, - PMO_FILTER_CMP_TYPE_EQUAL, - PMO_FILTER_CMP_TYPE_MASK_EQUAL, - PMO_FILTER_CMP_TYPE_NOT_EQUAL, - PMO_FILTER_CMP_TYPE_MASK_NOT_EQUAL, - PMO_FILTER_CMP_TYPE_MAX -}; - -/** - * enum pmo_rcv_pkt_fltr_protocol_params: Receive Filter protocal parameters - * @PMO_FILTER_HDR_TYPE_INVALID: invalied type - * @PMO_FILTER_HDR_TYPE_MAC: mac protocol - * @PMO_FILTER_HDR_TYPE_ARP: arp protocol - * @PMO_FILTER_HDR_TYPE_IPV4: ipv4 protocol - * @PMO_FILTER_HDR_TYPE_IPV6: ipv6 protocol - * @PMO_FILTER_HDR_TYPE_UDP: udp protocol - * @PMO_FILTER_HDR_TYPE_MAX: max of type of protocol - */ -enum pmo_rcv_pkt_fltr_protocol_params { - PMO_FILTER_HDR_TYPE_INVALID, - PMO_FILTER_HDR_TYPE_MAC, - PMO_FILTER_HDR_TYPE_ARP, - PMO_FILTER_HDR_TYPE_IPV4, - PMO_FILTER_HDR_TYPE_IPV6, - PMO_FILTER_HDR_TYPE_UDP, - PMO_FILTER_HDR_TYPE_MAX -}; - -/** - * struct pmo_rcv_pkt_fltr_field_params - pmo packet filter field parameters - * @protocol_layer: Protocol layer - * @compare_flag: Comparison flag - * @data_length: Length of the data to compare - * @data_offset: from start of the respective frame header - * @reserved: Reserved field - * @compare_data: Data to compare - * @data_mask: Mask to be applied on the received packet data before compare - */ -struct pmo_rcv_pkt_fltr_field_params { - enum pmo_rcv_pkt_fltr_protocol_params protocol_layer; - enum pmo_rcv_pkt_fltr_flag_type compare_flag; - uint16_t data_length; - uint8_t data_offset; - uint8_t reserved; - uint8_t compare_data[PMO_MAX_FILTER_TEST_DATA_LEN]; - uint8_t data_mask[PMO_MAX_FILTER_TEST_DATA_LEN]; -}; - -/** - * struct pmo_rcv_pkt_fltr_cfg - pmo packet filter config - * @filter_id: filter id - * @filter_type: filter type - * @num_params: number of parameters - * @coalesce_time: time - * @self_macaddr: mac address - * @bssid: Bssid of the connected AP - * @params_data: data - */ -struct pmo_rcv_pkt_fltr_cfg { - uint8_t filter_id; - enum pmo_rcv_pkt_fltr_type filter_type; - uint32_t num_params; - uint32_t coalesce_time; - struct qdf_mac_addr self_macaddr; - struct qdf_mac_addr bssid; - struct pmo_rcv_pkt_fltr_field_params - params_data[PMO_MAX_NUM_TESTS_PER_FILTER]; -}; - -/** - * struct pmo_rcv_pkt_fltr_cfg - pmo receive Filter Clear Parameters - * @status: only valid for response message - * @filter_id: - * @self_macaddr: - * @bssid: peer ap address - */ -struct pmo_rcv_pkt_fltr_clear_param { - uint32_t status; - uint8_t filter_id; - struct qdf_mac_addr self_macaddr; - struct qdf_mac_addr bssid; -}; - -#endif /* end of _WLAN_PMO_PKT_FILTER_PUBLIC_STRUCT_H_ */ diff --git a/pmo/dispatcher/inc/wlan_pmo_tgt_api.h b/pmo/dispatcher/inc/wlan_pmo_tgt_api.h deleted file mode 100644 index 5ed17b2d95..0000000000 --- a/pmo/dispatcher/inc/wlan_pmo_tgt_api.h +++ /dev/null @@ -1,398 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Declare public API for pmo to interact with target/WMI - */ - -#ifndef _WLAN_PMO_TGT_API_H_ -#define _WLAN_PMO_TGT_API_H_ - -#include "wlan_pmo_main.h" - -#define GET_PMO_TX_OPS_FROM_PSOC(psoc) (psoc->soc_cb.tx_ops.pmo_tx_ops) - -/** - * pmo_tgt_conf_hw_filter() - configure hardware filter mode in firmware - * @psoc: the psoc to use to communicate with firmware - * @req: the configuration request - * - * Return: QDF_STATUS - */ -QDF_STATUS pmo_tgt_conf_hw_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_hw_filter_params *req); - -/** - * pmo_tgt_set_pkt_filter() - Set packet filter - * @vdev: objmgr vdev - * @pmo_set_pkt_fltr_req: - * @vdev_id: vdev id - * - * API to set packet filter - * - * Return: QDF_STATUS_SUCCESS in case of success else return error - */ -QDF_STATUS pmo_tgt_set_pkt_filter(struct wlan_objmgr_vdev *vdev, - struct pmo_rcv_pkt_fltr_cfg *pmo_set_pkt_fltr_req, - uint8_t vdev_id); - -/** - * pmo_tgt_clear_pkt_filter() - Clear packet filter - * @vdev: objmgr vdev - * @pmo_clr_pkt_fltr_param: - * @vdev_id: vdev id - * - * API to clear packet filter - * - * Return: QDF_STATUS_SUCCESS in case of success else return error - */ -QDF_STATUS pmo_tgt_clear_pkt_filter(struct wlan_objmgr_vdev *vdev, - struct pmo_rcv_pkt_fltr_clear_param *pmo_clr_pkt_fltr_param, - uint8_t vdev_id); - -/** - * pmo_tgt_enable_arp_offload_req() - Enable arp offload req to target - * @vdev: objmgr vdev - * @vdev_id: vdev id - * - * Return: QDF status - */ -QDF_STATUS pmo_tgt_enable_arp_offload_req(struct wlan_objmgr_vdev *vdev, - uint8_t vdev_id); - -/** - * pmo_tgt_disable_arp_offload_req() - Disable arp offload req to target - * @vdev: objmgr vdev - * @vdev_id: vdev id - * - * Return: QDF status - */ -QDF_STATUS pmo_tgt_disable_arp_offload_req(struct wlan_objmgr_vdev *vdev, - uint8_t vdev_id); - -/** - * pmo_tgt_enable_ns_offload_req() - Send ns offload req to targe - * @vdev: objmgr vdev - * @vdev_id: vdev id - * - * Return: QDF status - */ -QDF_STATUS pmo_tgt_enable_ns_offload_req(struct wlan_objmgr_vdev *vdev, - uint8_t vdev_id); - -/** - * pmo_tgt_disable_ns_offload_req() - Disable arp offload req to target - * @vdev: objmgr vdev - * @vdev_id: vdev id - * - * Return: QDF status - */ -QDF_STATUS pmo_tgt_disable_ns_offload_req(struct wlan_objmgr_vdev *vdev, - uint8_t vdev_id); - -/** - * pmo_tgt_enable_wow_wakeup_event() - Send Enable wow wakeup events req to fwr - * @vdev: objmgr vdev handle - * @bitmap: Event bitmap - * - * Return: QDF status - */ -QDF_STATUS pmo_tgt_enable_wow_wakeup_event(struct wlan_objmgr_vdev *vdev, - uint32_t *bitmap); - -/** - * pmo_tgt_disable_wow_wakeup_event() - Send Disable wow wakeup events to fwr - * @vdev: objmgr vdev handle - * @bitmap: Event bitmap - * - * Return: QDF status - */ -QDF_STATUS pmo_tgt_disable_wow_wakeup_event(struct wlan_objmgr_vdev *vdev, - uint32_t *bitmap); - -/** - * pmo_tgt_send_wow_patterns_to_fw() - Sends WOW patterns to FW. - * @vdev: objmgr vdev - * @ptrn_id: pattern id - * @ptrn: pattern - * @ptrn_len: pattern length - * @ptrn_offset: pattern offset - * @mask: mask - * @mask_len: mask length - * @user: true for user configured pattern and false for default pattern - * - * Return: QDF status - */ -QDF_STATUS pmo_tgt_send_wow_patterns_to_fw(struct wlan_objmgr_vdev *vdev, - uint8_t ptrn_id, const uint8_t *ptrn, uint8_t ptrn_len, - uint8_t ptrn_offset, const uint8_t *mask, - uint8_t mask_len, bool user); - -/** - * pmo_tgt_set_mc_filter_req() - Set mcast filter command to fw - * @vdev: objmgr vdev - * @multicastAddr: mcast address - * - * Return: QDF_STATUS_SUCCESS for success or error code - */ -QDF_STATUS pmo_tgt_set_mc_filter_req(struct wlan_objmgr_vdev *vdev, - struct qdf_mac_addr multicast_addr); - -/** - * pmo_tgt_clear_mc_filter_req() - Clear mcast filter command to fw - * @vdev: objmgr vdev - * @multicastAddr: mcast address - * - * Return: QDF_STATUS_SUCCESS for success or error code - */ -QDF_STATUS pmo_tgt_clear_mc_filter_req(struct wlan_objmgr_vdev *vdev, - struct qdf_mac_addr multicast_addr); - -/** - * pmo_tgt_send_enhance_multicast_offload_req() - send enhance mc offload req - * @wma_handle: wma handle - * @vdev_id: vdev id - * @action: enable or disable enhance multicast offload - * - * Return: QDF_STATUS_SUCCESS on success else error code - */ -QDF_STATUS pmo_tgt_send_enhance_multicast_offload_req( - struct wlan_objmgr_vdev *vdev, - uint8_t vdev_id, - uint8_t action); - -/** - * pmo_tgt_send_ra_filter_req() - send ra filter request to target - * @vdev: objmgr vdev handle - * - * Return: QDF_STATUS_SUCCESS on success else error code - */ -QDF_STATUS pmo_tgt_send_ra_filter_req(struct wlan_objmgr_vdev *vdev); - -/** - * pmo_tgt_send_action_frame_pattern_req - send wow action frame patterns req - * @vdev: objmgr vdev handle - * @cmd: action frame pattern cmd - * - * Return: QDF_STATUS_SUCCESS on success else error code - */ -QDF_STATUS pmo_tgt_send_action_frame_pattern_req( - struct wlan_objmgr_vdev *vdev, - struct pmo_action_wakeup_set_params *cmd); - -/** - * pmo_tgt_send_gtk_offload_req() - send GTK offload command to fw - * @vdev: objmgr vdev - * @gtk_req: pmo gtk req - * - * Return: QDF status - */ -QDF_STATUS pmo_tgt_send_gtk_offload_req(struct wlan_objmgr_vdev *vdev, - struct pmo_gtk_req *gtk_req); - -/** - * pmo_tgt_get_gtk_rsp() - send get gtk rsp command to fw - * @vdev: objmgr vdev - * - * Return: QDF status - */ -QDF_STATUS pmo_tgt_get_gtk_rsp(struct wlan_objmgr_vdev *vdev); - -/** - * pmo_tgt_gtk_rsp_evt() - receive gtk rsp event from fwr - * @psoc: objmgr psoc - * @gtk_rsp_param: gtk response parameters - * - * Return: QDF status - */ -QDF_STATUS pmo_tgt_gtk_rsp_evt(struct wlan_objmgr_psoc *psoc, - struct pmo_gtk_rsp_params *rsp_param); - -/** - * pmo_tgt_send_lphb_enable() - enable command of LPHB configuration requests - * @psoc: objmgr psoc handle - * @ts_lphb_enable: lphb enable request which needs to configure in fwr - * - * Return: QDF status - */ -QDF_STATUS pmo_tgt_send_lphb_enable(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_enable_req *ts_lphb_enable); - -/** - * pmo_tgt_send_lphb_tcp_params() - set tcp params of LPHB configuration req - * @psoc: objmgr psoc handle - * @ts_lphb_tcp_param: lphb tcp params which needs to configure in fwr - * - * Return: QDF status - */ -QDF_STATUS pmo_tgt_send_lphb_tcp_params(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_tcp_params *ts_lphb_tcp_param); - -/** - * pmo_tgt_send_lphb_tcp_pkt_filter() - send tcp packet filter command of LPHB - * @psoc: objmgr psoc handle - * @ts_lphb_tcp_filter: lphb tcp filter request which needs to configure in fwr - * - * Return: QDF status - */ -QDF_STATUS pmo_tgt_send_lphb_tcp_pkt_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_tcp_filter_req *ts_lphb_tcp_filter); - -/** - * pmo_tgt_send_lphb_udp_params() - Send udp param command of LPHB - * @psoc: objmgr psoc handle - * @ts_lphb_udp_param: lphb udp params which needs to configure in fwr - * - * Return: QDF status - */ -QDF_STATUS pmo_tgt_send_lphb_udp_params(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_udp_params *ts_lphb_udp_param); - -/** - * pmo_tgt_send_lphb_udp_pkt_filter() - Send udp pkt filter command of LPHB - * @psoc: objmgr psoc handle - * @ts_lphb_udp_filter: lphb udp filter request which needs to configure in fwr - * - * Return: QDF status - */ -QDF_STATUS pmo_tgt_send_lphb_udp_pkt_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_udp_filter_req *ts_lphb_udp_filter); - - -/** - * pmo_tgt_lphb_rsp_evt() - receive lphb rsp event from fwr - * @psoc: objmgr psoc - * @rsp_param: lphb response parameters - * - * Return: QDF_STATUS - */ -QDF_STATUS pmo_tgt_lphb_rsp_evt(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_rsp *rsp_param); - -/** - * pmo_tgt_vdev_update_param_req() - Update vdev param value to fwr - * @vdev: objmgr vdev - * @param_id: tell vdev param id which needs to be updated in fwr - * @param_value: vdev parameter value - * - * Return: QDF status - */ -QDF_STATUS pmo_tgt_vdev_update_param_req(struct wlan_objmgr_vdev *vdev, - enum pmo_vdev_param_id param_id, uint32_t param_value); - -/** - * pmo_tgt_send_vdev_sta_ps_param() - Send vdev sta power save param to fwr - * @vdev: objmgr vdev - * @ps_param: sta mode ps power save params type - * @param_value: power save parameter value - * - * Return: QDF status - */ -QDF_STATUS pmo_tgt_send_vdev_sta_ps_param(struct wlan_objmgr_vdev *vdev, - enum pmo_sta_powersave_param ps_param, uint32_t param_value); - -/** - * pmo_tgt_update_wow_bus_suspend_state() - update wow bus suspend state flag - * @psoc: objmgr psoc - * @val: true for setting wow suspend flag to set else false - * - * Return: None - */ -void pmo_tgt_psoc_update_wow_bus_suspend_state(struct wlan_objmgr_psoc *psoc, - uint8_t val); - -/** - * pmo_tgt_get_host_credits() - Get host credits - * @psoc: objmgr psoc - * - * Return: Pending WMI commands on success else EAGAIN on error - */ -int pmo_tgt_psoc_get_host_credits(struct wlan_objmgr_psoc *psoc); - -/** - * pmo_tgt_get_pending_cmnds() - Get pending commands - * @psoc: objmgr psoc - * - * Return: Pending WMI commands on success else EAGAIN on error - */ -int pmo_tgt_psoc_get_pending_cmnds(struct wlan_objmgr_psoc *psoc); - -/** - * pmo_tgt_update_target_suspend_flag() - Set WMI target Suspend flag - * @psoc: objmgr psoc - * @val: true on suspend false for resume - * - * Return: Pending WMI commands on success else EAGAIN on error - */ -void pmo_tgt_update_target_suspend_flag(struct wlan_objmgr_psoc *psoc, - uint8_t val); - -/** - * pmo_tgt_psoc_send_wow_enable_req() -Send wow enable request - * @psoc: objmgr psoc - * @param: WOW enable request buffer - * - * Return: QDF_STATUS_SUCCESS on success else error code - */ -QDF_STATUS pmo_tgt_psoc_send_wow_enable_req(struct wlan_objmgr_psoc *psoc, - struct pmo_wow_cmd_params *param); - -/** - * pmo_tgt_psoc_send_supend_req() -Send target suspend request to fwr - * @psoc: objmgr psoc - * @param: suspend request buffer - * - * Return: QDF_STATUS_SUCCESS on success else error code - */ -QDF_STATUS pmo_tgt_psoc_send_supend_req(struct wlan_objmgr_psoc *psoc, - struct pmo_suspend_params *param); - -/** - * pmo_tgt_psoc_set_runtime_pm_inprogress() -set runtime status - * @psoc: objmgr psoc - * @value: set runtime pm in progress true or false - * - * Return: none - */ -QDF_STATUS pmo_tgt_psoc_set_runtime_pm_inprogress(struct wlan_objmgr_psoc *psoc, - bool value); - -/** - * pmo_tgt_psoc_get_runtime_pm_in_progress() -get runtime status - * @psoc: objmgr psoc - * - * Return: true if runtime pm is in progress else false - */ -bool pmo_tgt_psoc_get_runtime_pm_in_progress(struct wlan_objmgr_psoc *psoc); - -/** - * pmo_tgt_psoc_send_host_wakeup_ind() -Send host wake up indication to fwr - * @psoc: objmgr psoc - * - * Return: QDF_STATUS_SUCCESS on success else error code - */ -QDF_STATUS pmo_tgt_psoc_send_host_wakeup_ind(struct wlan_objmgr_psoc *psoc); - -/** - * pmo_tgt_psoc_send_target_resume_req() -Send target resume request - * @psoc: objmgr psoc - * - * Return: QDF_STATUS_SUCCESS on success else error code - */ -QDF_STATUS pmo_tgt_psoc_send_target_resume_req(struct wlan_objmgr_psoc *psoc); - -#endif /* end of _WLAN_PMO_TGT_API_H_ */ diff --git a/pmo/dispatcher/inc/wlan_pmo_ucfg_api.h b/pmo/dispatcher/inc/wlan_pmo_ucfg_api.h deleted file mode 100644 index 8b92ff3a4d..0000000000 --- a/pmo/dispatcher/inc/wlan_pmo_ucfg_api.h +++ /dev/null @@ -1,573 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Declare public API related to the pmo called by north bound HDD/OSIF - */ - -#ifndef _WLAN_PMO_UCFG_API_H_ -#define _WLAN_PMO_UCFG_API_H_ - -#include "wlan_pmo_arp_public_struct.h" -#include "wlan_pmo_ns_public_struct.h" -#include "wlan_pmo_gtk_public_struct.h" -#include "wlan_pmo_mc_addr_filtering_public_struct.h" -#include "wlan_pmo_wow_public_struct.h" -#include "wlan_pmo_common_public_struct.h" -#include "wlan_pmo_obj_mgmt_api.h" -#include "wlan_pmo_pkt_filter_public_struct.h" -#include "wlan_pmo_hw_filter.h" - -/** - * pmo_ucfg_is_ap_mode_supports_arp_ns() - Check ap mode support arp&ns offload - * @psoc: objmgr psoc - * @vdev_opmode: vdev opmode - * - * Return: true in case support else false - */ -bool pmo_ucfg_is_ap_mode_supports_arp_ns(struct wlan_objmgr_psoc *psoc, - enum tQDF_ADAPTER_MODE vdev_opmode); - -/** - * pmo_ucfg_is_vdev_connected() - to check whether peer is associated or not - * @vdev: objmgr vdev - * - * Return: true in case success else false - */ -bool pmo_ucfg_is_vdev_connected(struct wlan_objmgr_vdev *vdev); - -/** - * pmo_ucfg_is_vdev_supports_offload() - check offload is supported on vdev - * @vdev: objmgr vdev - * - * Return: true in case success else false - */ -bool pmo_ucfg_is_vdev_supports_offload(struct wlan_objmgr_vdev *vdev); - -/** - * pmo_ucfg_get_psoc_config(): API to get the psoc user configurations of pmo - * @psoc: objmgr psoc handle - * @psoc_cfg: fill the current psoc user configurations. - * - * Return pmo psoc configurations - */ -QDF_STATUS pmo_ucfg_get_psoc_config(struct wlan_objmgr_psoc *psoc, - struct pmo_psoc_cfg *psoc_cfg); - -/** - * pmo_ucfg_update_psoc_config(): API to update the psoc user configurations - * @psoc: objmgr psoc handle - * @psoc_cfg: pmo psoc configurations - * - * This api shall be used for soc config initialization as well update. - * In case of update caller must first call pmo_get_psoc_cfg to get - * current config and then apply changes on top of current config. - * - * Return QDF_STATUS -in case of success else return error - */ -QDF_STATUS pmo_ucfg_update_psoc_config(struct wlan_objmgr_psoc *psoc, - struct pmo_psoc_cfg *psoc_cfg); - -/** - * pmo_ucfg_enable_wakeup_event() - enable wow wakeup events - * @psoc: objmgr psoc - * @vdev_id: vdev id - * @bitmap: Event bitmap - * - * Return: none - */ -void pmo_ucfg_enable_wakeup_event(struct wlan_objmgr_psoc *psoc, - uint32_t vdev_id, uint32_t *bitmap); - -/** - * pmo_ucfg_disable_wakeup_event() - disable wow wakeup events - * @psoc: objmgr psoc - * @vdev_id: vdev id - * @bitmap: Event bitmap - * - * Return: none - */ -void pmo_ucfg_disable_wakeup_event(struct wlan_objmgr_psoc *psoc, - uint32_t vdev_id, uint32_t bitmap); - -/** - * pmo_ucfg_cache_arp_offload_req(): API to cache arp req in pmo vdev priv ctx - * @arp_req: pmo arp req param - * - * Return QDF_STATUS -in case of success else return error - */ -QDF_STATUS pmo_ucfg_cache_arp_offload_req(struct pmo_arp_req *arp_req); - -/** - * pmo_ucfg_flush_arp_offload_req(): API to flush arp req from pmo vdev priv ctx - * @vdev: objmgr vdev param - * - * Return QDF_STATUS -in case of success else return error - */ -QDF_STATUS pmo_ucfg_flush_arp_offload_req(struct wlan_objmgr_vdev *vdev); - -/** - * pmo_ucfg_enable_arp_offload_in_fwr(): API to enable arp req in fwr - * @vdev: objmgr vdev param - * @trigger: triger reason for enable arp offload - * - * API to enable cache arp req in fwr from pmo vdev priv ctx - * - * Return QDF_STATUS -in case of success else return error - */ -QDF_STATUS pmo_ucfg_enable_arp_offload_in_fwr(struct wlan_objmgr_vdev *vdev, - enum pmo_offload_trigger trigger); - -/** - * pmo_ucfg_disable_arp_offload_in_fwr(): API to disable arp req in fwr - * @vdev: objmgr vdev param - * @trigger: triger reason for disable arp offload - * API to disable cache arp req in fwr - * - * Return QDF_STATUS -in case of success else return error - */ -QDF_STATUS pmo_ucfg_disable_arp_offload_in_fwr(struct wlan_objmgr_vdev *vdev, - enum pmo_offload_trigger trigger); - -/** - * pmo_ucfg_cache_ns_offload_req(): API to cache ns req in pmo vdev priv ctx - * @ns_req: pmo ns req param - * - * Return QDF_STATUS -in case of success else return error - */ -QDF_STATUS pmo_ucfg_cache_ns_offload_req(struct pmo_ns_req *ns_req); - -/** - * pmo_ucfg_flush_ns_offload_req(): API to flush ns req from pmo vdev priv ctx - * @vdev: vdev ojbmgr handle - * - * Return QDF_STATUS -in case of success else return error - */ -QDF_STATUS pmo_ucfg_flush_ns_offload_req(struct wlan_objmgr_vdev *vdev); - -/** - * pmo_ucfg_enable_ns_offload_in_fwr(): API to enable ns req in fwr - * @arp_req: pmo arp req param - * @trigger: trigger reason to enable ns offload - * - * API to enable cache ns req in fwr from pmo vdev priv ctx - * - * Return QDF_STATUS -in case of success else return error - */ -QDF_STATUS pmo_ucfg_enable_ns_offload_in_fwr(struct wlan_objmgr_vdev *vdev, - enum pmo_offload_trigger trigger); - -/** - * pmo_ucfg_disable_ns_offload_in_fwr(): API to disable ns req in fwr - * @arp_req: pmo arp req param - * @trigger: trigger reason to disable ns offload - * - * API to disable ns req in fwr - * - * Return QDF_STATUS -in case of success else return error - */ -QDF_STATUS pmo_ucfg_disable_ns_offload_in_fwr(struct wlan_objmgr_vdev *vdev, - enum pmo_offload_trigger trigger); - -/** - * pmo_ucfg_enable_hw_filter_in_fwr() - enable previously configured hw filter - * @vdev: objmgr vdev to configure - * - * Return: QDF_STATUS - */ -static inline QDF_STATUS -pmo_ucfg_enable_hw_filter_in_fwr(struct wlan_objmgr_vdev *vdev) -{ - return pmo_core_enable_hw_filter_in_fwr(vdev); -} - -/** - * pmo_ucfg_disable_hw_filter_in_fwr() - disable previously configured hw filter - * @vdev: objmgr vdev to configure - * - * Return: QDF_STATUS - */ -static inline QDF_STATUS -pmo_ucfg_disable_hw_filter_in_fwr(struct wlan_objmgr_vdev *vdev) -{ - return pmo_core_disable_hw_filter_in_fwr(vdev); -} - -/** - * pmo_ucfg_max_mc_addr_supported() - to get max support mc address - * @psoc: objmgr psoc - * - * Return: max mc addr supported count for all vdev in corresponding psoc - */ -uint8_t pmo_ucfg_max_mc_addr_supported(struct wlan_objmgr_psoc *psoc); - -/** - * pmo_ucfg_cache_mc_addr_list(): API to cache mc addr list in pmo vdev priv obj - * @psoc: objmgr psoc handle - * @vdev_id: vdev id - * @gtk_req: pmo gtk req param - * - * Return QDF_STATUS_SUCCESS -in case of success else return error - */ -QDF_STATUS pmo_ucfg_cache_mc_addr_list( - struct pmo_mc_addr_list_params *mc_list_config); - -/** - * pmo_ucfg_flush_mc_addr_list(): API to flush mc addr list in pmo vdev priv obj - * @psoc: objmgr psoc handle - * @vdev_id: vdev id - * - * Return QDF_STATUS_SUCCESS -in case of success else return error - */ -QDF_STATUS pmo_ucfg_flush_mc_addr_list(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id); - -/** - * pmo_ucfg_enable_mc_addr_filtering_in_fwr(): Enable cached mc add list in fwr - * @psoc: objmgr psoc handle - * @vdev_id: vdev id - * @gtk_req: pmo gtk req param - * @action: true for enable els false - * - * API to enable cached mc add list in fwr - * - * Return QDF_STATUS_SUCCESS -in case of success else return error - */ -QDF_STATUS pmo_ucfg_enable_mc_addr_filtering_in_fwr( - struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, - enum pmo_offload_trigger trigger); - -/** - * pmo_ucfg_disable_mc_addr_filtering_in_fwr(): Disable cached mc addr list - * @psoc: objmgr psoc handle - * @vdev_id: vdev id - * @gtk_req: pmo gtk req param - * @action: true for enable els false - * - * API to disable cached mc add list in fwr - * - * Return QDF_STATUS_SUCCESS -in case of success else return error - */ -QDF_STATUS pmo_ucfg_disable_mc_addr_filtering_in_fwr( - struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, - enum pmo_offload_trigger trigger); - -/** - * pmo_ucfg_cache_gtk_offload_req(): API to cache gtk req in pmo vdev priv obj - * @vdev: objmgr vdev handle - * @gtk_req: pmo gtk req param - * - * Return QDF_STATUS_SUCCESS -in case of success else return error - */ -QDF_STATUS pmo_ucfg_cache_gtk_offload_req(struct wlan_objmgr_vdev *vdev, - struct pmo_gtk_req *gtk_req); - -/** - * pmo_ucfg_flush_gtk_offload_req(): Flush saved gtk req from pmo vdev priv obj - * @vdev: objmgr vdev handle - * - * Return QDF_STATUS_SUCCESS -in case of success else return error - */ -QDF_STATUS pmo_ucfg_flush_gtk_offload_req(struct wlan_objmgr_vdev *vdev); - -/** - * pmo_ucfg_enable_gtk_offload_in_fwr(): enable cached gtk request in fwr - * @vdev: objmgr vdev handle - * - * Return QDF_STATUS_SUCCESS -in case of success else return error - */ -QDF_STATUS pmo_ucfg_enable_gtk_offload_in_fwr(struct wlan_objmgr_vdev *vdev); - -/** - * pmo_ucfg_disable_gtk_offload_in_fwr(): disable cached gtk request in fwr - * @vdev: objmgr vdev handle - * - * Return QDF_STATUS_SUCCESS -in case of success else return error - */ -QDF_STATUS pmo_ucfg_disable_gtk_offload_in_fwr(struct wlan_objmgr_vdev *vdev); - -/** - * pmo_ucfg_set_pkt_filter() - Set packet filter - * @psoc: objmgr psoc handle - * @pmo_set_pkt_fltr_req: - * @vdev_id: vdev id - * - * Return QDF_STATUS_SUCCESS -in case of success else return error - */ -QDF_STATUS pmo_ucfg_set_pkt_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_rcv_pkt_fltr_cfg *pmo_set_pkt_fltr_req, - uint8_t vdev_id); - -/** - * pmo_ucfg_clear_pkt_filter() - Clear packet filter - * @psoc: objmgr psoc handle - * @pmo_clr_pkt_fltr_req: - * @vdev_id: vdev id - * - * Return QDF_STATUS_SUCCESS -in case of success else return error - */ -QDF_STATUS pmo_ucfg_clear_pkt_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_rcv_pkt_fltr_clear_param *pmo_clr_pkt_fltr_param, - uint8_t vdev_id); - -/** - * pmo_ucfg_get_gtk_rsp(): API to send gtk response request to fwr - * @vdev: objmgr vdev handle - * @gtk_rsp: pmo gtk response request - * - * This api will send gtk response request to fwr - * - * Return QDF_STATUS_SUCCESS -in case of success else return error - */ -QDF_STATUS pmo_ucfg_get_gtk_rsp(struct wlan_objmgr_vdev *vdev, - struct pmo_gtk_rsp_req *gtk_rsp_req); - -/** - * pmo_ucfg_update_extscan_in_progress(): update extscan is in progress flags - * @vdev: objmgr vdev handle - * @value:true if extscan is in progress else false - * - * Return: TRUE/FALSE - */ -void pmo_ucfg_update_extscan_in_progress(struct wlan_objmgr_vdev *vdev, - bool value); - -/** - * pmo_ucfg_update_p2plo_in_progress(): update p2plo is in progress flags - * @vdev: objmgr vdev handle - * @value:true if p2plo is in progress else false - * - * Return: TRUE/FALSE - */ -void pmo_ucfg_update_p2plo_in_progress(struct wlan_objmgr_vdev *vdev, - bool value); - -/** - * pmo_ucfg_lphb_config_req() - Handles lphb config request for psoc - * @psoc: objmgr psoc handle - * @lphb_req: low power heart beat request - * @lphb_cb_ctx: Context which needs to pass to soif when lphb callback called - * @callback: upon receiving of lphb indication from fwr call lphb callback - * - * Return: QDF status - */ -QDF_STATUS pmo_ucfg_lphb_config_req(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_req *lphb_req, void *lphb_cb_ctx, - pmo_lphb_callback callback); - -/** - * pmo_ucfg_update_alt_modulated_dtim_enable() - update alt modulatate dtim - * @vdev: objmgr vdev handle - * @value: true for alt_modulated_dtim enable else false - * - * Return: QDF status - */ -void pmo_ucfg_update_alt_modulated_dtim_enable(struct wlan_objmgr_vdev *vdev, - bool value); - -/** - * pmo_ucfg_psoc_update_power_save_mode() - update power save mode - * @vdev: objmgr vdev handle - * @value:vdev power save mode - * - * Return: None - */ -void pmo_ucfg_psoc_update_power_save_mode(struct wlan_objmgr_psoc *psoc, - uint8_t value); - -/** - * pmo_ucfg_psoc_update_dp_handle() - update psoc data path handle - * @psoc: objmgr psoc handle - * @dp_hdl: psoc data path handle - * - * Return: None - */ -void pmo_ucfg_psoc_update_dp_handle(struct wlan_objmgr_psoc *psoc, - void *dp_hdl); - -/** - * pmo_ucfg_vdev_update_dp_handle() - update vdev data path handle - * @vdev: objmgr vdev handle - * @dp_hdl: vdev data path handle - * - * Return: None - */ -void pmo_ucfg_vdev_update_dp_handle(struct wlan_objmgr_vdev *vdev, - void *dp_hdl); - -/** - * pmo_ucfg_psoc_update_htc_handle() - update psoc htc layer handle - * @psoc: objmgr psoc handle - * @htc_handle: psoc host-to-tagret layer (htc) handle - * - * Return: None - */ -void pmo_ucfg_psoc_update_htc_handle(struct wlan_objmgr_psoc *psoc, - void *htc_handle); - -/** - * pmo_ucfg_psoc_set_hif_handle() - Set psoc hif layer handle - * @psoc: objmgr psoc handle - * @hif_handle: hif context handle - * - * Return: None - */ -void pmo_ucfg_psoc_set_hif_handle(struct wlan_objmgr_psoc *psoc, - void *hif_handle); - -/** - * pmo_ucfg_psoc_set_txrx_handle() - Set psoc pdev txrx layer handle - * @psoc: objmgr psoc handle - * @txrx_handle: pdev txrx context handle - * - * Return: None - */ -void pmo_ucfg_psoc_set_txrx_handle(struct wlan_objmgr_psoc *psoc, - void *txrx_handle); - -/** - * pmo_ucfg_psoc_user_space_suspend_req() - Handles user space suspend req - * @psoc: objmgr psoc handle - * @type: type of suspend - * - * Handles user space suspend indication for psoc - * - * Return: QDF status - */ -QDF_STATUS pmo_ucfg_psoc_user_space_suspend_req(struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type type); - -/** - * pmo_ucfg_psoc_user_space_resume_req() - Handles user space resume req - * @psoc: objmgr psoc handle - * @type: type of suspend from which resume needed - * - * Handles user space resume indication for psoc - * - * Return: QDF status - */ -QDF_STATUS pmo_ucfg_psoc_user_space_resume_req(struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type type); - -/** - * pmo_ucfg_psoc_bus_suspend_req(): handles bus suspend for psoc - * @psoc: objmgr psoc - * @type: is this suspend part of runtime suspend or system suspend? - * @wow_params: collection of wow enable override parameters - * - * Bails if a scan is in progress. - * Calls the appropriate handlers based on configuration and event. - * - * Return: QDF_STATUS_SUCCESS for success or error code - */ -QDF_STATUS pmo_ucfg_psoc_bus_suspend_req(struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type type, - struct pmo_wow_enable_params *wow_params); - -#ifdef FEATURE_RUNTIME_PM -/** - * pmo_ucfg_psoc_bus_runtime_suspend(): handles bus runtime suspend for psoc - * @psoc: objmgr psoc - * @pld_cb: callback to call link auto suspend - * - * Return: QDF_STATUS_SUCCESS for success or error code - */ -QDF_STATUS pmo_ucfg_psoc_bus_runtime_suspend(struct wlan_objmgr_psoc *psoc, - pmo_pld_auto_suspend_cb pld_cb); - -/** - * pmo_ucfg_psoc_bus_runtime_resume(): handles bus runtime resume for psoc - * @psoc: objmgr psoc - * @pld_cb: callback to call link auto resume - * - * Return: QDF_STATUS_SUCCESS for success or error code - */ -QDF_STATUS pmo_ucfg_psoc_bus_runtime_resume(struct wlan_objmgr_psoc *psoc, - pmo_pld_auto_resume_cb pld_cb); -#endif - -/** - * pmo_ucfg_psoc_suspend_target() -Send suspend target command - * @psoc: objmgr psoc handle - * @disable_target_intr: disable target interrupt - * - * Return: QDF_STATUS_SUCCESS for success or error code - */ -QDF_STATUS pmo_ucfg_psoc_suspend_target(struct wlan_objmgr_psoc *psoc, - int disable_target_intr); - -/** - * pmo_ucfg_psoc_bus_resume() -handle bus resume request for psoc - * @psoc: objmgr psoc handle - * @type: is this suspend part of runtime suspend or system suspend? - * - * Return:QDF_STATUS_SUCCESS on success else error code - */ -QDF_STATUS pmo_ucfg_psoc_bus_resume_req(struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type type); - -/** - * pmo_ucfg_get_wow_bus_suspend(): API to check if wow bus is suspended or not - * @psoc: objmgr psoc handle - * - * Return: True if bus suspende else false - */ -bool pmo_ucfg_get_wow_bus_suspend(struct wlan_objmgr_psoc *psoc); - -/** - * pmo_ucfg_psoc_handle_initial_wake_up() - update initial wake up - * @cb_ctx: objmgr psoc handle as void * due to htc layer is not aware psoc - * - * Return: None - */ -void pmo_ucfg_psoc_handle_initial_wake_up(void *cb_ctx); - -/** - * pmo_ucfg_psoc_is_target_wake_up_received() - Get initial wake up status - * @psoc: objmgr psoc handle - * - * Return: 0 on success else error code - */ -int pmo_ucfg_psoc_is_target_wake_up_received(struct wlan_objmgr_psoc *psoc); - -/** - * pmo_ucfg_psoc_is_target_wake_up_received() - Clear initial wake up status - * @psoc: objmgr psoc handle - * - * Return: 0 on success else error code - */ -int pmo_ucfg_psoc_clear_target_wake_up(struct wlan_objmgr_psoc *psoc); - -/** - * pmo_ucfg_psoc_target_suspend_acknowledge() - Clear initial wake up status - * @psoc: objmgr psoc handle - * - * Return: None - */ -void pmo_ucfg_psoc_target_suspend_acknowledge(void *context, bool wow_nack); - -/** - * pmo_ucfg_psoc_wakeup_host_event_received() - got host wake up evennt from fwr - * @psoc: objmgr psoc handle - * - * Return: None - */ -void pmo_ucfg_psoc_wakeup_host_event_received(struct wlan_objmgr_psoc *psoc); - -#endif /* end of _WLAN_PMO_UCFG_API_H_ */ diff --git a/pmo/dispatcher/inc/wlan_pmo_wow_public_struct.h b/pmo/dispatcher/inc/wlan_pmo_wow_public_struct.h deleted file mode 100644 index 46d7048b5d..0000000000 --- a/pmo/dispatcher/inc/wlan_pmo_wow_public_struct.h +++ /dev/null @@ -1,241 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ - /** - * DOC: Declare various struct, macros which shall be used in - * pmo wow related features. - * - * Note: This file shall not contain public API's prototype/declarations. - * - */ - -#ifndef _WLAN_PMO_WOW_PUBLIC_STRUCT_H_ -#include "wlan_pmo_lphb_public_struct.h" - -#define _WLAN_PMO_WOW_PUBLIC_STRUCT_H_ - -#define PMO_WOWL_PTRN_MAX_SIZE 146 -#define PMO_WOWL_PTRN_MASK_MAX_SIZE 19 -#define PMO_WOWL_MAX_PTRNS_ALLOWED CFG_MAX_WOW_FILTERS_MAX -#define PMO_WOWL_BCAST_PATTERN_MAX_SIZE 146 - -#define PMO_WOW_INTER_PTRN_TOKENIZER ';' -#define PMO_WOW_INTRA_PTRN_TOKENIZER ':' - - -/* Action frame categories */ - -#define PMO_MAC_ACTION_SPECTRUM_MGMT 0 -#define PMO_MAC_ACTION_QOS_MGMT 1 -#define PMO_MAC_ACTION_DLP 2 -#define PMO_MAC_ACTION_BLKACK 3 -#define PMO_MAC_ACTION_PUBLIC_USAGE 4 -#define PMO_MAC_ACTION_RRM 5 -#define PMO_MAC_ACTION_FAST_BSS_TRNST 6 -#define PMO_MAC_ACTION_HT 7 -#define PMO_MAC_ACTION_SA_QUERY 8 -#define PMO_MAC_ACTION_PROT_DUAL_PUB 9 -#define PMO_MAC_ACTION_WNM 10 -#define PMO_MAC_ACTION_UNPROT_WNM 11 -#define PMO_MAC_ACTION_TDLS 12 -#define PMO_MAC_ACITON_MESH 13 -#define PMO_MAC_ACTION_MHF 14 -#define PMO_MAC_SELF_PROTECTED 15 -#define PMO_MAC_ACTION_WME 17 -#define PMO_MAC_ACTION_FST 18 -#define PMO_MAC_ACTION_VHT 21 -#define PMO_MAC_ACTION_MAX 256 - -/* - * ALLOWED_ACTION_FRAMES_BITMAP - * - * Bitmask is based on the below. The frames with 0's - * set to their corresponding bit can be dropped in FW. - * - * -----------------------------+-----+-------+ - * Type | Bit | Allow | - * -----------------------------+-----+-------+ - * PMO_ACTION_SPECTRUM_MGMT 0 1 - * PMO_ACTION_QOS_MGMT 1 1 - * PMO_ACTION_DLP 2 0 - * PMO_ACTION_BLKACK 3 0 - * PMO_ACTION_PUBLIC_USAGE 4 1 - * PMO_ACTION_RRM 5 1 - * PMO_ACTION_FAST_BSS_TRNST 6 0 - * PMO_ACTION_HT 7 0 - * PMO_ACTION_SA_QUERY 8 1 - * PMO_ACTION_PROT_DUAL_PUB 9 1 - * PMO_ACTION_WNM 10 1 - * PMO_ACTION_UNPROT_WNM 11 0 - * PMO_ACTION_TDLS 12 0 - * PMO_ACITON_MESH 13 0 - * PMO_ACTION_MHF 14 0 - * PMO_SELF_PROTECTED 15 0 - * PMO_ACTION_WME 17 1 - * PMO_ACTION_FST 18 1 - * PMO_ACTION_VHT 21 1 - * ----------------------------+------+-------+ - */ -#define ALLOWED_ACTION_FRAMES_BITMAP0 \ - ((1 << PMO_MAC_ACTION_SPECTRUM_MGMT) | \ - (1 << PMO_MAC_ACTION_QOS_MGMT) | \ - (1 << PMO_MAC_ACTION_PUBLIC_USAGE) | \ - (1 << PMO_MAC_ACTION_RRM) | \ - (1 << PMO_MAC_ACTION_SA_QUERY) | \ - (1 << PMO_MAC_ACTION_PROT_DUAL_PUB) | \ - (1 << PMO_MAC_ACTION_WNM) | \ - (1 << PMO_MAC_ACTION_WME) | \ - (1 << PMO_MAC_ACTION_FST) | \ - (1 << PMO_MAC_ACTION_VHT)) - -#define ALLOWED_ACTION_FRAMES_BITMAP1 0x0 -#define ALLOWED_ACTION_FRAMES_BITMAP2 0x0 -#define ALLOWED_ACTION_FRAMES_BITMAP3 0x0 -#define ALLOWED_ACTION_FRAMES_BITMAP4 0x0 -#define ALLOWED_ACTION_FRAMES_BITMAP5 0x0 -#define ALLOWED_ACTION_FRAMES_BITMAP6 0x0 -#define ALLOWED_ACTION_FRAMES_BITMAP7 0x0 - -#define ALLOWED_ACTION_FRAME_MAP_WORDS (PMO_MAC_ACTION_MAX / 32) - - -#define PMO_SUPPORTED_ACTION_CATE 256 -#define PMO_SUPPORTED_ACTION_CATE_ELE_LIST (PMO_SUPPORTED_ACTION_CATE/32) - -/** - * struct pmo_action_wakeup_set_params - action wakeup set params - * @vdev_id: virtual device id - * @operation: 0 reset to fw default, 1 set the bits, - * 2 add the setting bits, 3 delete the setting bits - * @action_category_map: bit mapping. - */ -struct pmo_action_wakeup_set_params { - uint32_t vdev_id; - uint32_t operation; - uint32_t action_category_map[PMO_SUPPORTED_ACTION_CATE_ELE_LIST]; -}; - -/** - * enum pmo_wow_action_wakeup_opertion: describe action wakeup operation - * @pmo_action_wakeup_reset: reset - * @pmo_action_wakeup_set: set - * @pmo_action_wakeup_add_set: add and set - * @pmo_action_wakeup_del_set: delete and set - */ -enum pmo_wow_action_wakeup_opertion { - pmo_action_wakeup_reset = 0, - pmo_action_wakeup_set, - pmo_action_wakeup_add_set, - pmo_action_wakeup_del_set, -}; - -/** - * struct pmo_wow - store wow patterns - * @wow_enable: wow enable/disable - * @wow_enable_cmd_sent: is wow enable command sent to fw - * @is_wow_bus_suspended: true if bus is suspended - * @target_suspend: target suspend event - * @target_resume: target resume event - * @wow_nack: wow negative ack flag - * @wow_initial_wake_up: target initial wake up is received - * @wow_wake_lock: wow wake lock - * @lphb_cache: lphb cache - * @lphb_cb_ctx: callback context for lphb, kept as void* as - * osif structures are opaque to pmo. - * @pmo_lphb_callback: registered os if calllback function - * - * This structure stores wow patterns and - * wow related parameters in host. - */ -struct pmo_wow { - bool wow_enable; - bool wow_enable_cmd_sent; - bool is_wow_bus_suspended; - qdf_event_t target_suspend; - qdf_event_t target_resume; - int wow_nack; - bool wow_initial_wake_up; - qdf_wake_lock_t wow_wake_lock; - /* - * currently supports only vdev 0. - * cache has two entries: one for TCP and one for UDP. - */ - struct pmo_lphb_req lphb_cache[2]; - void *lphb_cb_ctx; - pmo_lphb_callback lphb_cb; -}; - -/* WOW related structures */ -/** - * struct pmo_wow_add_pattern - wow pattern add structure - * @pattern_id: pattern id - * @pattern_byte_offset: pattern byte offset from beginning of the 802.11 - * packet to start of the wake-up pattern - * @pattern_size: pattern size - * @pattern: pattern byte stream - * @pattern_mask_size: pattern mask size - * @pattern_mask: pattern mask - * @session_id: session id - */ -struct pmo_wow_add_pattern { - uint8_t pattern_id; - uint8_t pattern_byte_offset; - uint8_t pattern_size; - uint8_t pattern[PMO_WOWL_BCAST_PATTERN_MAX_SIZE]; - uint8_t pattern_mask_size; - uint8_t pattern_mask[PMO_WOWL_BCAST_PATTERN_MAX_SIZE]; - uint8_t session_id; -}; - -/** - * struct pmo_wow_add_pattern - wow pattern add structure - * @magic_pkt_enable: enables or disables magic packet filtering - * @wow_deauth_rcv: This configuration is valid only when magicPktEnable=1, - * It requests hardware to wake up when it receives the - * Deauthentication Frame. - * @pattern_filtering_enable: Enables/disables packet pattern filtering - * @wow_bss_conn_loss: wake up host when bss connection lost - */ -struct pmo_wow_enter_params { - uint8_t magic_pkt_enable; - uint8_t wow_deauth_rcv; - uint8_t pattern_filtering_enable; - uint8_t wow_bss_conn_loss; -}; - -/** - * struct pmo_wow_cmd_params - wow cmd parameter - * @enable: wow enable or disable flag - * @can_suspend_link: flag to indicate if link can be suspended - * @pause_iface_config: interface config - */ -struct pmo_wow_cmd_params { - bool enable; - bool can_suspend_link; - uint8_t pause_iface_config; - uint32_t flags; -}; - -/** - * struct pmo_suspend_params - suspend cmd parameter - * @disable_target_intr: disable target interrupt - */ -struct pmo_suspend_params { - uint8_t disable_target_intr; -}; - -#endif /* end of _WLAN_PMO_WOW_PUBLIC_STRUCT_H_ */ diff --git a/pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c b/pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c deleted file mode 100644 index c4eb60725e..0000000000 --- a/pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c +++ /dev/null @@ -1,756 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: define utility API related to the pmo component - * called by other components - */ - -#include "wlan_pmo_obj_mgmt_api.h" -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_static_config.h" - -QDF_STATUS pmo_init(void) -{ - QDF_STATUS status; - struct wlan_pmo_ctx *pmo_ctx; - - PMO_ENTER(); - if (pmo_allocate_ctx() != QDF_STATUS_SUCCESS) { - pmo_err("unable to allocate psoc ctx"); - status = QDF_STATUS_E_FAULT; - goto out; - } - - pmo_ctx = pmo_get_context(); - if (!pmo_ctx) { - pmo_err("unable to get pmo ctx"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - status = wlan_objmgr_register_psoc_create_handler( - WLAN_UMAC_COMP_PMO, - pmo_psoc_object_created_notification, - (void *)pmo_ctx); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("unable to register psoc create handle"); - goto out; - } - - status = wlan_objmgr_register_psoc_destroy_handler( - WLAN_UMAC_COMP_PMO, - pmo_psoc_object_destroyed_notification, - (void *)pmo_ctx); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("unable to register psoc create handle"); - goto out; - } - - status = wlan_objmgr_register_vdev_create_handler( - WLAN_UMAC_COMP_PMO, - pmo_vdev_object_created_notification, - (void *)pmo_ctx); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("unable to register vdev create handle"); - goto out; - } - - status = wlan_objmgr_register_vdev_destroy_handler( - WLAN_UMAC_COMP_PMO, - pmo_vdev_object_destroyed_notification, - (void *)pmo_ctx); - if (status != QDF_STATUS_SUCCESS) - pmo_err("unable to register vdev create handle"); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_deinit(void) -{ - QDF_STATUS status; - struct wlan_pmo_ctx *pmo_ctx; - - PMO_ENTER(); - pmo_ctx = pmo_get_context(); - if (!pmo_ctx) { - pmo_err("unable to get pmo ctx"); - status = QDF_STATUS_E_FAILURE; - goto out; - } - - status = wlan_objmgr_unregister_psoc_create_handler( - WLAN_UMAC_COMP_PMO, - pmo_psoc_object_created_notification, - (void *)pmo_ctx); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("unable to unregister psoc create handle"); - goto out; - } - - status = wlan_objmgr_unregister_psoc_destroy_handler( - WLAN_UMAC_COMP_PMO, - pmo_psoc_object_destroyed_notification, - (void *)pmo_ctx); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("unable to unregister psoc create handle"); - goto out; - } - - status = wlan_objmgr_unregister_vdev_create_handler( - WLAN_UMAC_COMP_PMO, - pmo_vdev_object_created_notification, - (void *)pmo_ctx); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("unable to unregister vdev create handle"); - goto out; - } - - status = wlan_objmgr_unregister_vdev_destroy_handler( - WLAN_UMAC_COMP_PMO, - pmo_vdev_object_destroyed_notification, - (void *)pmo_ctx); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("unable to unregister vdev create handle"); - goto out; - } - -out: - pmo_free_ctx(); - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_psoc_object_created_notification( - struct wlan_objmgr_psoc *psoc, void *arg) -{ - struct pmo_psoc_priv_obj *psoc_ctx = NULL; - QDF_STATUS status; - struct wlan_pmo_ctx *pmo_ctx; - - PMO_ENTER(); - pmo_ctx = pmo_get_context(); - if (!pmo_ctx) { - QDF_ASSERT(0); - pmo_err("unable to get pmo ctx"); - status = QDF_STATUS_E_FAILURE; - goto out; - } - - psoc_ctx = qdf_mem_malloc(sizeof(*pmo_ctx)); - if (psoc_ctx == NULL) { - pmo_err("Failed to allocate pmo_psoc"); - status = QDF_STATUS_E_NOMEM; - goto out; - } - - status = wlan_objmgr_psoc_component_obj_attach(psoc, - WLAN_UMAC_COMP_PMO, - psoc_ctx, - QDF_STATUS_SUCCESS); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("Failed to attach psoc_ctx with psoc"); - qdf_mem_free(psoc_ctx); - status = QDF_STATUS_E_FAILURE; - goto out; - } - qdf_spinlock_create(&psoc_ctx->lock); - qdf_wake_lock_create(&psoc_ctx->wow.wow_wake_lock, "pmo_wow_wl"); - status = qdf_event_create(&psoc_ctx->wow.target_suspend); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("target suspend event initialization failed"); - status = QDF_STATUS_E_FAILURE; - goto out; - } - status = qdf_event_create(&psoc_ctx->wow.target_resume); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("target resume event initialization failed"); - status = QDF_STATUS_E_FAILURE; - goto out; - } -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_psoc_object_destroyed_notification( - struct wlan_objmgr_psoc *psoc, void *arg) -{ - struct pmo_psoc_priv_obj *psoc_ctx = NULL; - QDF_STATUS status; - - PMO_ENTER(); - - psoc_ctx = pmo_psoc_get_priv(psoc); - - status = wlan_objmgr_psoc_component_obj_detach(psoc, - WLAN_UMAC_COMP_PMO, - psoc_ctx); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("Failed to detach psoc_ctx from psoc"); - status = QDF_STATUS_E_FAILURE; - goto out; - } - - qdf_spinlock_destroy(&psoc_ctx->lock); - qdf_event_destroy(&psoc_ctx->wow.target_suspend); - qdf_event_destroy(&psoc_ctx->wow.target_resume); - qdf_wake_lock_destroy(&psoc_ctx->wow.wow_wake_lock); - qdf_mem_free(psoc_ctx); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_vdev_object_created_notification( - struct wlan_objmgr_vdev *vdev, void *arg) -{ - struct pmo_psoc_priv_obj *psoc_ctx = NULL; - struct wlan_objmgr_psoc *psoc; - struct pmo_vdev_priv_obj *vdev_ctx; - QDF_STATUS status; - - PMO_ENTER(); - - psoc = pmo_vdev_get_psoc(vdev); - - psoc_ctx = pmo_psoc_get_priv(psoc); - - vdev_ctx = qdf_mem_malloc(sizeof(*vdev_ctx)); - if (vdev_ctx == NULL) { - pmo_err("Failed to allocate vdev_ctx"); - status = QDF_STATUS_E_NOMEM; - goto out; - } - - status = wlan_objmgr_vdev_component_obj_attach(vdev, - WLAN_UMAC_COMP_PMO, - (void *)vdev_ctx, QDF_STATUS_SUCCESS); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("Failed to attach vdev_ctx with vdev"); - qdf_mem_free(vdev_ctx); - goto out; - } - - qdf_spinlock_create(&vdev_ctx->pmo_vdev_lock); - vdev_ctx->ptrn_match_enable = - psoc_ctx->psoc_cfg.ptrn_match_enable_all_vdev; - vdev_ctx->pmo_psoc_ctx = psoc_ctx; - qdf_atomic_init(&vdev_ctx->gtk_err_enable); - -out: - PMO_EXIT(); - - return QDF_STATUS_SUCCESS; -} - -QDF_STATUS pmo_vdev_ready(struct wlan_objmgr_vdev *vdev) -{ - QDF_STATUS status; - - PMO_ENTER(); - - status = pmo_vdev_get_ref(vdev); - if (QDF_IS_STATUS_ERROR(status)) - return status; - - /* Register static configuration with firmware */ - pmo_register_wow_wakeup_events(vdev); - pmo_register_action_frame_patterns(vdev); - - /* Register default wow patterns with firmware */ - pmo_register_wow_default_patterns(vdev); - - pmo_vdev_put_ref(vdev); - - PMO_EXIT(); - - /* - * The above APIs should return a status but don't. - * Just return success for now. - */ - return QDF_STATUS_SUCCESS; -} - -QDF_STATUS pmo_vdev_object_destroyed_notification( - struct wlan_objmgr_vdev *vdev, void *arg) -{ - struct pmo_vdev_priv_obj *vdev_ctx = NULL; - QDF_STATUS status = QDF_STATUS_SUCCESS; - - PMO_ENTER(); - - vdev_ctx = pmo_vdev_get_priv(vdev); - - status = wlan_objmgr_vdev_component_obj_detach(vdev, - WLAN_UMAC_COMP_PMO, - (void *)vdev_ctx); - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to detach vdev_ctx with vdev"); - - qdf_spinlock_destroy(&vdev_ctx->pmo_vdev_lock); - qdf_mem_free(vdev_ctx); - - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_register_suspend_handler( - enum wlan_umac_comp_id id, - pmo_psoc_suspend_handler handler, - void *arg) -{ - struct wlan_pmo_ctx *pmo_ctx; - QDF_STATUS status = QDF_STATUS_SUCCESS; - - PMO_ENTER(); - pmo_ctx = pmo_get_context(); - if (!pmo_ctx) { - QDF_ASSERT(0); - pmo_err("unable to get pmo ctx"); - status = QDF_STATUS_E_FAILURE; - goto out; - } - - if (id > WLAN_UMAC_MAX_COMPONENTS || id < 0) { - pmo_err("component id: %d is %s then valid components id", - id, id < 0 ? "Less" : "More"); - status = QDF_STATUS_E_FAILURE; - goto out; - } - - qdf_spin_lock_bh(&pmo_ctx->lock); - pmo_ctx->pmo_suspend_handler[id] = handler; - pmo_ctx->pmo_suspend_handler_arg[id] = arg; - qdf_spin_unlock_bh(&pmo_ctx->lock); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_unregister_suspend_handler( - enum wlan_umac_comp_id id, - pmo_psoc_suspend_handler handler) -{ - struct wlan_pmo_ctx *pmo_ctx; - QDF_STATUS status = QDF_STATUS_SUCCESS; - - PMO_ENTER(); - pmo_ctx = pmo_get_context(); - if (!pmo_ctx) { - QDF_ASSERT(0); - pmo_err("unable to get pmo ctx"); - status = QDF_STATUS_E_FAILURE; - goto out; - } - - if (id > WLAN_UMAC_MAX_COMPONENTS || id < 0) { - pmo_err("component id: %d is %s then valid components id", - id, id < 0 ? "Less" : "More"); - status = QDF_STATUS_E_FAILURE; - goto out; - } - - qdf_spin_lock_bh(&pmo_ctx->lock); - if (pmo_ctx->pmo_suspend_handler[id] == handler) { - pmo_ctx->pmo_suspend_handler[id] = NULL; - pmo_ctx->pmo_suspend_handler_arg[id] = NULL; - qdf_spin_unlock_bh(&pmo_ctx->lock); - } else { - qdf_spin_unlock_bh(&pmo_ctx->lock); - pmo_err("can't find suspend handler for component id: %d ", id); - status = QDF_STATUS_E_FAILURE; - } -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_register_resume_handler( - enum wlan_umac_comp_id id, - pmo_psoc_resume_handler handler, - void *arg) -{ - struct wlan_pmo_ctx *pmo_ctx; - QDF_STATUS status = QDF_STATUS_SUCCESS; - - PMO_ENTER(); - pmo_ctx = pmo_get_context(); - if (!pmo_ctx) { - pmo_err("unable to get pmo ctx"); - status = QDF_STATUS_E_FAILURE; - goto out; - } - - if (id > WLAN_UMAC_MAX_COMPONENTS || id < 0) { - pmo_err("component id: %d is %s then valid components id", - id, id < 0 ? "Less" : "More"); - status = QDF_STATUS_E_FAILURE; - goto out; - } - - qdf_spin_lock_bh(&pmo_ctx->lock); - pmo_ctx->pmo_resume_handler[id] = handler; - pmo_ctx->pmo_resume_handler_arg[id] = arg; - qdf_spin_unlock_bh(&pmo_ctx->lock); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_unregister_resume_handler( - enum wlan_umac_comp_id id, - pmo_psoc_resume_handler handler) -{ - struct wlan_pmo_ctx *pmo_ctx; - QDF_STATUS status = QDF_STATUS_SUCCESS; - - PMO_ENTER(); - pmo_ctx = pmo_get_context(); - if (!pmo_ctx) { - pmo_err("unable to get pmo ctx"); - status = QDF_STATUS_E_FAILURE; - goto out; - } - - if (id > WLAN_UMAC_MAX_COMPONENTS || id < 0) { - pmo_err("component id: %d is %s then valid components id", - id, id < 0 ? "Less" : "More"); - status = QDF_STATUS_E_FAILURE; - goto out; - } - - qdf_spin_lock_bh(&pmo_ctx->lock); - if (pmo_ctx->pmo_resume_handler[id] == handler) { - pmo_ctx->pmo_resume_handler[id] = NULL; - pmo_ctx->pmo_resume_handler_arg[id] = NULL; - qdf_spin_unlock_bh(&pmo_ctx->lock); - } else { - qdf_spin_unlock_bh(&pmo_ctx->lock); - pmo_err("can't find resume handler for component id: %d ", id); - status = QDF_STATUS_E_FAILURE; - } -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_suspend_all_components(struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type suspend_type) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - QDF_STATUS resume_status; - struct wlan_pmo_ctx *pmo_ctx; - uint8_t i; - pmo_psoc_suspend_handler handler; - void *arg; - - PMO_ENTER(); - - pmo_ctx = pmo_get_context(); - if (!pmo_ctx) { - pmo_err("unable to get pmo ctx"); - QDF_ASSERT(0); - status = QDF_STATUS_E_FAILURE; - goto exit_with_status; - } - - /* call each component's suspend handler */ - for (i = 0; i < WLAN_UMAC_MAX_COMPONENTS; i++) { - qdf_spin_lock_bh(&pmo_ctx->lock); - handler = pmo_ctx->pmo_suspend_handler[i]; - arg = pmo_ctx->pmo_suspend_handler_arg[i]; - qdf_spin_unlock_bh(&pmo_ctx->lock); - - if (!handler) - continue; - - status = handler(psoc, arg); - if (QDF_IS_STATUS_ERROR(status)) { - pmo_err("component %d failed to suspend; status: %d", - i, status); - QDF_ASSERT(0); - goto suspend_recovery; - } - } - - goto exit_with_status; - -suspend_recovery: - /* resume, starting with the last successfully suspended component */ - for (i -= 1; i >= 0; i--) { - qdf_spin_lock_bh(&pmo_ctx->lock); - handler = pmo_ctx->pmo_resume_handler[i]; - arg = pmo_ctx->pmo_resume_handler_arg[i]; - qdf_spin_unlock_bh(&pmo_ctx->lock); - - if (!handler) - continue; - - resume_status = handler(psoc, arg); - if (QDF_IS_STATUS_ERROR(resume_status)) { - pmo_fatal("Non-recoverable failure occurred!"); - pmo_fatal("component %d failed to resume; status: %d", - i, resume_status); - QDF_BUG(0); - } - } - -exit_with_status: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_resume_all_components(struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type suspend_type) -{ - QDF_STATUS status = QDF_STATUS_SUCCESS; - struct wlan_pmo_ctx *pmo_ctx; - uint8_t i; - pmo_psoc_suspend_handler handler; - void *arg; - - PMO_ENTER(); - - pmo_ctx = pmo_get_context(); - if (!pmo_ctx) { - pmo_err("unable to get pmo ctx"); - QDF_ASSERT(0); - status = QDF_STATUS_E_FAILURE; - goto exit_with_status; - } - - /* call each component's resume handler */ - for (i = 0; i < WLAN_UMAC_MAX_COMPONENTS; i++) { - qdf_spin_lock_bh(&pmo_ctx->lock); - handler = pmo_ctx->pmo_resume_handler[i]; - arg = pmo_ctx->pmo_resume_handler_arg[i]; - qdf_spin_unlock_bh(&pmo_ctx->lock); - - if (!handler) - continue; - - status = handler(psoc, arg); - if (QDF_IS_STATUS_ERROR(status)) { - pmo_fatal("Non-recoverable failure occurred!"); - pmo_fatal("component %d failed to resume; status: %d", - i, status); - QDF_BUG(0); - } - } - -exit_with_status: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_register_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc, - pmo_notify_pause_bitmap handler) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - QDF_STATUS status; - - if (!psoc) { - pmo_err("psoc is null"); - return QDF_STATUS_E_NULL_VALUE; - } - - if (!handler) { - pmo_err("pmo_notify_vdev_pause_bitmap is null"); - return QDF_STATUS_E_NULL_VALUE; - } - - status = pmo_psoc_get_ref(psoc); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("pmo cannot get the reference out of psoc"); - return status; - } - psoc_ctx = pmo_psoc_get_priv(psoc); - qdf_spin_lock_bh(&psoc_ctx->lock); - psoc_ctx->pause_bitmap_notifier = handler; - qdf_spin_unlock_bh(&psoc_ctx->lock); - pmo_psoc_put_ref(psoc); - - return QDF_STATUS_SUCCESS; -} - -QDF_STATUS pmo_unregister_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc, - pmo_notify_pause_bitmap handler) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - QDF_STATUS status; - - if (!psoc) { - pmo_err("psoc is null"); - return QDF_STATUS_E_NULL_VALUE; - } - - if (!handler) { - pmo_err("pmo_notify_vdev_pause_bitmap is null"); - return QDF_STATUS_E_NULL_VALUE; - } - - status = pmo_psoc_get_ref(psoc); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("pmo cannot get the reference out of psoc"); - return status; - } - psoc_ctx = pmo_psoc_get_priv(psoc); - qdf_spin_lock_bh(&psoc_ctx->lock); - if (psoc_ctx->pause_bitmap_notifier == handler) - psoc_ctx->pause_bitmap_notifier = NULL; - qdf_spin_unlock_bh(&psoc_ctx->lock); - pmo_psoc_put_ref(psoc); - - return QDF_STATUS_SUCCESS; -} - -QDF_STATUS pmo_register_get_pause_bitmap(struct wlan_objmgr_psoc *psoc, - pmo_get_pause_bitmap handler) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - QDF_STATUS status; - - if (!psoc) { - pmo_err("psoc is null"); - return QDF_STATUS_E_NULL_VALUE; - } - - if (!handler) { - pmo_err("pmo_get_pause_bitmap is null"); - return QDF_STATUS_E_NULL_VALUE; - } - - status = pmo_psoc_get_ref(psoc); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("pmo cannot get the reference out of psoc"); - return status; - } - psoc_ctx = pmo_psoc_get_priv(psoc); - qdf_spin_lock_bh(&psoc_ctx->lock); - psoc_ctx->get_pause_bitmap = handler; - qdf_spin_unlock_bh(&psoc_ctx->lock); - pmo_psoc_put_ref(psoc); - - return QDF_STATUS_SUCCESS; -} - -QDF_STATUS pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc, - pmo_get_pause_bitmap handler) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - QDF_STATUS status; - - if (!psoc) { - pmo_err("psoc is null"); - return QDF_STATUS_E_NULL_VALUE; - } - - if (!handler) { - pmo_err("pmo_get_pause_bitmap is null"); - return QDF_STATUS_E_NULL_VALUE; - } - - status = pmo_psoc_get_ref(psoc); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("pmo cannot get the reference out of psoc"); - return status; - } - psoc_ctx = pmo_psoc_get_priv(psoc); - qdf_spin_lock_bh(&psoc_ctx->lock); - if (psoc_ctx->get_pause_bitmap == handler) - psoc_ctx->get_pause_bitmap = NULL; - qdf_spin_unlock_bh(&psoc_ctx->lock); - pmo_psoc_put_ref(psoc); - - return QDF_STATUS_SUCCESS; -} - -QDF_STATUS pmo_register_is_device_in_low_pwr_mode(struct wlan_objmgr_psoc *psoc, - pmo_is_device_in_low_pwr_mode handler) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - QDF_STATUS status; - - if (!psoc) { - pmo_err("psoc is null"); - return QDF_STATUS_E_NULL_VALUE; - } - - if (!handler) { - pmo_err("pmo_get_pause_bitmap is null"); - return QDF_STATUS_E_NULL_VALUE; - } - - status = pmo_psoc_get_ref(psoc); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("pmo cannot get the reference out of psoc"); - return status; - } - psoc_ctx = pmo_psoc_get_priv(psoc); - qdf_spin_lock_bh(&psoc_ctx->lock); - psoc_ctx->is_device_in_low_pwr_mode = handler; - qdf_spin_unlock_bh(&psoc_ctx->lock); - pmo_psoc_put_ref(psoc); - - return QDF_STATUS_SUCCESS; -} - -QDF_STATUS pmo_unregister_is_device_in_low_pwr_mode( - struct wlan_objmgr_psoc *psoc, - pmo_is_device_in_low_pwr_mode handler) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - QDF_STATUS status; - - if (!psoc) { - pmo_err("psoc is null"); - return QDF_STATUS_E_NULL_VALUE; - } - - if (!handler) { - pmo_err("pmo_get_pause_bitmap is null"); - return QDF_STATUS_E_NULL_VALUE; - } - - status = pmo_psoc_get_ref(psoc); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("pmo cannot get the reference out of psoc"); - return status; - } - psoc_ctx = pmo_psoc_get_priv(psoc); - qdf_spin_lock_bh(&psoc_ctx->lock); - psoc_ctx->is_device_in_low_pwr_mode = NULL; - qdf_spin_unlock_bh(&psoc_ctx->lock); - pmo_psoc_put_ref(psoc); - - return QDF_STATUS_SUCCESS; -} - - diff --git a/pmo/dispatcher/src/wlan_pmo_tgt_arp.c b/pmo/dispatcher/src/wlan_pmo_tgt_arp.c deleted file mode 100644 index 049f5de958..0000000000 --- a/pmo/dispatcher/src/wlan_pmo_tgt_arp.c +++ /dev/null @@ -1,157 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Implements public API for pmo to interact with target/WMI - */ - -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_arp_public_struct.h" -#include "wlan_pmo_ns_public_struct.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -QDF_STATUS pmo_tgt_enable_arp_offload_req(struct wlan_objmgr_vdev *vdev, - uint8_t vdev_id) -{ - struct pmo_arp_offload_params *arp_offload_req = NULL; - struct pmo_ns_offload_params *ns_offload_req = NULL; - struct pmo_vdev_priv_obj *vdev_ctx; - struct wlan_objmgr_psoc *psoc; - QDF_STATUS status; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - PMO_ENTER(); - - vdev_ctx = pmo_vdev_get_priv(vdev); - - psoc = pmo_vdev_get_psoc(vdev); - - arp_offload_req = qdf_mem_malloc(sizeof(*arp_offload_req)); - if (!arp_offload_req) { - pmo_err("unable to allocate arp_offload_req"); - status = QDF_STATUS_E_NOMEM; - goto out; - } - - ns_offload_req = qdf_mem_malloc(sizeof(*ns_offload_req)); - if (!ns_offload_req) { - pmo_err("unable to allocate ns_offload_req"); - status = QDF_STATUS_E_NOMEM; - goto out; - } - - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - qdf_mem_copy(arp_offload_req, &vdev_ctx->vdev_arp_req, - sizeof(*arp_offload_req)); - qdf_mem_copy(ns_offload_req, &vdev_ctx->vdev_ns_req, - sizeof(*ns_offload_req)); - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - pmo_debug("ARP Offload vdev_id: %d enable: %d", - vdev_id, - arp_offload_req->enable); - pmo_debug("NS Offload vdev_id: %d enable: %d ns_count: %u", - vdev_id, - ns_offload_req->enable, - ns_offload_req->num_ns_offload_count); - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_arp_offload_req) { - pmo_err("send_arp_offload_req is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - status = pmo_tx_ops.send_arp_offload_req( - vdev, arp_offload_req, ns_offload_req); - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to send ARP offload"); -out: - if (arp_offload_req) - qdf_mem_free(arp_offload_req); - if (ns_offload_req) - qdf_mem_free(ns_offload_req); - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_tgt_disable_arp_offload_req(struct wlan_objmgr_vdev *vdev, - uint8_t vdev_id) -{ - struct pmo_arp_offload_params *arp_offload_req = NULL; - struct pmo_ns_offload_params *ns_offload_req = NULL; - struct pmo_vdev_priv_obj *vdev_ctx; - struct wlan_objmgr_psoc *psoc; - QDF_STATUS status; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - PMO_ENTER(); - - vdev_ctx = pmo_vdev_get_priv(vdev); - - psoc = pmo_vdev_get_psoc(vdev); - - arp_offload_req = qdf_mem_malloc(sizeof(*arp_offload_req)); - if (!arp_offload_req) { - pmo_err("unable to allocate arp_offload_req"); - status = QDF_STATUS_E_NOMEM; - goto out; - } - - ns_offload_req = qdf_mem_malloc(sizeof(*ns_offload_req)); - if (!ns_offload_req) { - pmo_err("unable to allocate ns_offload_req"); - status = QDF_STATUS_E_NOMEM; - goto out; - } - - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - qdf_mem_copy(arp_offload_req, &vdev_ctx->vdev_arp_req, - sizeof(*arp_offload_req)); - qdf_mem_copy(ns_offload_req, &vdev_ctx->vdev_ns_req, - sizeof(*ns_offload_req)); - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - pmo_debug("ARP Offload vdev_id: %d enable: %d", - vdev_id, - arp_offload_req->enable); - pmo_debug("NS Offload vdev_id: %d enable: %d ns_count: %u", - vdev_id, - ns_offload_req->enable, - ns_offload_req->num_ns_offload_count); - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_arp_offload_req) { - pmo_err("send_arp_offload_req is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - status = pmo_tx_ops.send_arp_offload_req( - vdev, arp_offload_req, ns_offload_req); - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to send ARP offload"); - -out: - if (arp_offload_req) - qdf_mem_free(arp_offload_req); - if (ns_offload_req) - qdf_mem_free(ns_offload_req); - PMO_EXIT(); - - return status; -} - diff --git a/pmo/dispatcher/src/wlan_pmo_tgt_gtk.c b/pmo/dispatcher/src/wlan_pmo_tgt_gtk.c deleted file mode 100644 index 2d6324c461..0000000000 --- a/pmo/dispatcher/src/wlan_pmo_tgt_gtk.c +++ /dev/null @@ -1,177 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Implements public API for PMO GTK offload feature to interact - * with target/wmi. - */ - -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_gtk_public_struct.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -QDF_STATUS pmo_tgt_send_gtk_offload_req(struct wlan_objmgr_vdev *vdev, - struct pmo_gtk_req *gtk_req) -{ - struct pmo_gtk_req *op_gtk_req = NULL; - QDF_STATUS status; - struct wlan_objmgr_psoc *psoc; - struct pmo_vdev_priv_obj *vdev_ctx; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - PMO_ENTER(); - psoc = wlan_vdev_get_psoc(vdev); - if (!psoc) { - pmo_err("Failed to find psoc from from vdev:%p", - vdev); - status = QDF_STATUS_E_INVAL; - goto out; - } - - vdev_ctx = pmo_vdev_get_priv(vdev); - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_gtk_offload_req) { - pmo_err("send_gtk_offload_req is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - op_gtk_req = qdf_mem_malloc(sizeof(*op_gtk_req)); - if (!op_gtk_req) { - pmo_err("cannot allocate op_gtk_req "); - status = QDF_STATUS_E_NOMEM; - goto out; - } - - if (gtk_req->flags == PMO_GTK_OFFLOAD_ENABLE) { - qdf_atomic_set(&vdev_ctx->gtk_err_enable, true); - qdf_mem_copy(op_gtk_req->kck, gtk_req->kck, - PMO_KCK_LEN); - qdf_mem_copy(op_gtk_req->kek, gtk_req->kek, - PMO_KEK_LEN); - qdf_mem_copy(&op_gtk_req->replay_counter, - >k_req->replay_counter, PMO_REPLAY_COUNTER_LEN); - } else { - qdf_atomic_set(&vdev_ctx->gtk_err_enable, false); - } - - pmo_info("replay counter %llu", op_gtk_req->replay_counter); - op_gtk_req->flags = gtk_req->flags; - status = pmo_tx_ops.send_gtk_offload_req(vdev, op_gtk_req); - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to send gtk offload req event"); -out: - if (op_gtk_req) - qdf_mem_free(op_gtk_req); - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_tgt_get_gtk_rsp(struct wlan_objmgr_vdev *vdev) -{ - - struct wlan_objmgr_psoc *psoc; - QDF_STATUS status; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - PMO_ENTER(); - psoc = wlan_vdev_get_psoc(vdev); - if (!psoc) { - pmo_err("Failed to find psoc from from vdev:%p", - vdev); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_get_gtk_rsp_cmd) { - pmo_err("send_get_gtk_rsp_cmd is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - status = pmo_tx_ops.send_get_gtk_rsp_cmd(vdev); - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to send_get_gtk_rsp_cmd event"); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_tgt_gtk_rsp_evt(struct wlan_objmgr_psoc *psoc, - struct pmo_gtk_rsp_params *rsp_param) -{ - QDF_STATUS status; - struct wlan_objmgr_vdev *vdev; - struct pmo_vdev_priv_obj *vdev_ctx; - - PMO_ENTER(); - if (!rsp_param) { - pmo_err("gtk rsp param is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - vdev = pmo_psoc_get_vdev(psoc, rsp_param->vdev_id); - if (!vdev) { - pmo_err("vdev is null vdev_id:%d psoc:%p", - rsp_param->vdev_id, psoc); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - status = pmo_vdev_get_ref(vdev); - if (QDF_IS_STATUS_ERROR(status)) - goto out; - - vdev_ctx = pmo_vdev_get_priv(vdev); - - status = pmo_get_vdev_bss_peer_mac_addr(vdev, &rsp_param->bssid); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("cannot find peer mac address"); - goto dec_ref; - } - - /* update cached replay counter */ - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - vdev_ctx->vdev_gtk_req.replay_counter = rsp_param->replay_counter; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - if (vdev_ctx->vdev_gtk_rsp_req.callback) { - pmo_info("callback:%p context:%p psoc:%p vdev_id:%d", - vdev_ctx->vdev_gtk_rsp_req.callback, - vdev_ctx->vdev_gtk_rsp_req.callback_context, - psoc, rsp_param->vdev_id); - vdev_ctx->vdev_gtk_rsp_req.callback( - vdev_ctx->vdev_gtk_rsp_req.callback_context, - rsp_param); - } else { - pmo_err("gtk rsp callback is null for vdev_id:%d psoc %p", - rsp_param->vdev_id, - psoc); - } - -dec_ref: - pmo_vdev_put_ref(vdev); -out: - PMO_EXIT(); - - return status; -} - diff --git a/pmo/dispatcher/src/wlan_pmo_tgt_hw_filter.c b/pmo/dispatcher/src/wlan_pmo_tgt_hw_filter.c deleted file mode 100644 index 2d361f25bc..0000000000 --- a/pmo/dispatcher/src/wlan_pmo_tgt_hw_filter.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -/** - * DOC: Implements public API for pmo to interact with target/WMI - */ - -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_hw_filter_public_struct.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -QDF_STATUS pmo_tgt_conf_hw_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_hw_filter_params *req) -{ - QDF_STATUS status; - struct wlan_lmac_if_pmo_tx_ops ops; - - PMO_ENTER(); - - pmo_debug("Configure hw filter; vdev_id:%u, mode:%d", - req->vdev_id, req->mode); - - ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!ops.send_conf_hw_filter_req) { - pmo_err("send_conf_hw_filter_req is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto exit_with_status; - } - - status = ops.send_conf_hw_filter_req(psoc, req); - -exit_with_status: - PMO_EXIT(); - - return status; -} - diff --git a/pmo/dispatcher/src/wlan_pmo_tgt_lphb.c b/pmo/dispatcher/src/wlan_pmo_tgt_lphb.c deleted file mode 100644 index 30bfb7a3d2..0000000000 --- a/pmo/dispatcher/src/wlan_pmo_tgt_lphb.c +++ /dev/null @@ -1,154 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Implements public API for pmo low power hear beat feature - * to interact with target/WMI. - */ - -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_lphb_public_struct.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -QDF_STATUS pmo_tgt_send_lphb_enable(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_enable_req *ts_lphb_enable) -{ - QDF_STATUS status; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - PMO_ENTER(); - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_lphb_enable) { - pmo_err("send_lphb_enable is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - status = pmo_tx_ops.send_lphb_enable(psoc, ts_lphb_enable); - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to send lphb enable"); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_tgt_send_lphb_tcp_params(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_tcp_params *ts_lphb_tcp_param) -{ - QDF_STATUS status; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - PMO_ENTER(); - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_lphb_tcp_params) { - pmo_err("send_lphb_tcp_params is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - status = pmo_tx_ops.send_lphb_tcp_params(psoc, ts_lphb_tcp_param); - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to send lphb tcp params"); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_tgt_send_lphb_tcp_pkt_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_tcp_filter_req *ts_lphb_tcp_filter) -{ - QDF_STATUS status; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - PMO_ENTER(); - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_lphb_tcp_filter_req) { - pmo_err("send_lphb_tcp_filter_req is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - status = pmo_tx_ops.send_lphb_tcp_filter_req(psoc, ts_lphb_tcp_filter); - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to send lphb tcp filter req"); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_tgt_send_lphb_udp_params(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_udp_params *ts_lphb_udp_param) -{ - QDF_STATUS status; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - PMO_ENTER(); - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_lphb_upd_params) { - pmo_err("send_lphb_upd_params is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - status = pmo_tx_ops.send_lphb_upd_params(psoc, ts_lphb_udp_param); - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to send lphb udp param"); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_tgt_send_lphb_udp_pkt_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_udp_filter_req *ts_lphb_udp_filter) -{ - QDF_STATUS status; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - PMO_ENTER(); - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_lphb_udp_filter_req) { - pmo_err("send_lphb_udp_filter_req is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - status = pmo_tx_ops.send_lphb_udp_filter_req(psoc, ts_lphb_udp_filter); - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to send lphb udp filter req"); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_tgt_lphb_rsp_evt(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_rsp *rsp_param) -{ - struct pmo_psoc_priv_obj *psoc_ctx; - - psoc_ctx = pmo_psoc_get_priv(psoc); - if (psoc_ctx->wow.lphb_cb && psoc_ctx->wow.lphb_cb_ctx) { - pmo_info("callback:%p context:%p psoc:%p", - psoc_ctx->wow.lphb_cb, psoc_ctx->wow.lphb_cb_ctx, psoc); - psoc_ctx->wow.lphb_cb(psoc_ctx->wow.lphb_cb_ctx, rsp_param); - } else { - pmo_err("lphb rsp callback/context is null for psoc %p", - psoc); - } - - return QDF_STATUS_SUCCESS; -} - diff --git a/pmo/dispatcher/src/wlan_pmo_tgt_mc_addr_filtering.c b/pmo/dispatcher/src/wlan_pmo_tgt_mc_addr_filtering.c deleted file mode 100644 index 6fa3f9c60a..0000000000 --- a/pmo/dispatcher/src/wlan_pmo_tgt_mc_addr_filtering.c +++ /dev/null @@ -1,82 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Implements public API for pmo to interact with target/WMI - */ - -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_mc_addr_filtering_public_struct.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -QDF_STATUS pmo_tgt_set_mc_filter_req(struct wlan_objmgr_vdev *vdev, - struct qdf_mac_addr multicast_addr) -{ - QDF_STATUS status; - struct wlan_objmgr_psoc *psoc; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - PMO_ENTER(); - - psoc = pmo_vdev_get_psoc(vdev); - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_set_mc_filter_req) { - pmo_err("send_add_clear_mcbc_filter_request is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - status = pmo_tx_ops.send_set_mc_filter_req( - vdev, multicast_addr); - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to add/clear mc filter"); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_tgt_clear_mc_filter_req(struct wlan_objmgr_vdev *vdev, - struct qdf_mac_addr multicast_addr) -{ - QDF_STATUS status; - struct wlan_objmgr_psoc *psoc; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - PMO_ENTER(); - - psoc = pmo_vdev_get_psoc(vdev); - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_clear_mc_filter_req) { - pmo_err("send_add_clear_mcbc_filter_request is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - status = pmo_tx_ops.send_clear_mc_filter_req( - vdev, multicast_addr); - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to add/clear mc filter"); -out: - PMO_EXIT(); - - return status; -} - - diff --git a/pmo/dispatcher/src/wlan_pmo_tgt_ns.c b/pmo/dispatcher/src/wlan_pmo_tgt_ns.c deleted file mode 100644 index b97500b037..0000000000 --- a/pmo/dispatcher/src/wlan_pmo_tgt_ns.c +++ /dev/null @@ -1,158 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Implements public API for PMO NS offload feature to interact - * with target/wmi. - */ - -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_arp_public_struct.h" -#include "wlan_pmo_ns_public_struct.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -QDF_STATUS pmo_tgt_enable_ns_offload_req(struct wlan_objmgr_vdev *vdev, - uint8_t vdev_id) -{ - struct pmo_arp_offload_params *arp_offload_req = NULL; - struct pmo_ns_offload_params *ns_offload_req = NULL; - struct pmo_vdev_priv_obj *vdev_ctx; - struct wlan_objmgr_psoc *psoc; - QDF_STATUS status; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - PMO_ENTER(); - vdev_ctx = pmo_vdev_get_priv(vdev); - - psoc = pmo_vdev_get_psoc(vdev); - - arp_offload_req = qdf_mem_malloc(sizeof(*arp_offload_req)); - if (!arp_offload_req) { - pmo_err("unable to allocate arp_offload_req"); - status = QDF_STATUS_E_NOMEM; - goto out; - } - - ns_offload_req = qdf_mem_malloc(sizeof(*ns_offload_req)); - if (!ns_offload_req) { - pmo_err("unable to allocate ns_offload_req"); - status = QDF_STATUS_E_NOMEM; - goto out; - } - - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - qdf_mem_copy(arp_offload_req, &vdev_ctx->vdev_arp_req, - sizeof(*arp_offload_req)); - qdf_mem_copy(ns_offload_req, &vdev_ctx->vdev_ns_req, - sizeof(*ns_offload_req)); - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - pmo_debug("ARP Offload vdev_id: %d enable: %d", - vdev_id, - arp_offload_req->enable); - pmo_debug("NS Offload vdev_id: %d enable: %d ns_count: %u", - vdev_id, - ns_offload_req->enable, - ns_offload_req->num_ns_offload_count); - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_ns_offload_req) { - pmo_err("send_ns_offload_req is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - status = pmo_tx_ops.send_ns_offload_req( - vdev, arp_offload_req, ns_offload_req); - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to send NS offload"); - -out: - if (arp_offload_req) - qdf_mem_free(arp_offload_req); - if (ns_offload_req) - qdf_mem_free(ns_offload_req); - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_tgt_disable_ns_offload_req(struct wlan_objmgr_vdev *vdev, - uint8_t vdev_id) -{ - struct pmo_arp_offload_params *arp_offload_req = NULL; - struct pmo_ns_offload_params *ns_offload_req = NULL; - struct pmo_vdev_priv_obj *vdev_ctx; - struct wlan_objmgr_psoc *psoc; - QDF_STATUS status; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - PMO_ENTER(); - - vdev_ctx = pmo_vdev_get_priv(vdev); - - psoc = pmo_vdev_get_psoc(vdev); - - arp_offload_req = qdf_mem_malloc(sizeof(*arp_offload_req)); - if (!arp_offload_req) { - pmo_err("unable to allocate arp_offload_req"); - status = QDF_STATUS_E_NOMEM; - goto out; - } - - ns_offload_req = qdf_mem_malloc(sizeof(*ns_offload_req)); - if (!ns_offload_req) { - pmo_err("unable to allocate ns_offload_req"); - status = QDF_STATUS_E_NOMEM; - goto out; - } - - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - qdf_mem_copy(arp_offload_req, &vdev_ctx->vdev_arp_req, - sizeof(*arp_offload_req)); - qdf_mem_copy(ns_offload_req, &vdev_ctx->vdev_ns_req, - sizeof(*ns_offload_req)); - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - pmo_debug("ARP Offload vdev_id: %d enable: %d", - vdev_id, - arp_offload_req->enable); - pmo_debug("NS Offload vdev_id: %d enable: %d ns_count: %u", - vdev_id, - ns_offload_req->enable, - ns_offload_req->num_ns_offload_count); - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_ns_offload_req) { - pmo_err("send_ns_offload_req is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - status = pmo_tx_ops.send_ns_offload_req( - vdev, arp_offload_req, ns_offload_req); - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to send NS offload"); - -out: - if (arp_offload_req) - qdf_mem_free(arp_offload_req); - if (ns_offload_req) - qdf_mem_free(ns_offload_req); - PMO_EXIT(); - - return status; -} - diff --git a/pmo/dispatcher/src/wlan_pmo_tgt_pkt_filter.c b/pmo/dispatcher/src/wlan_pmo_tgt_pkt_filter.c deleted file mode 100644 index 8c38239eba..0000000000 --- a/pmo/dispatcher/src/wlan_pmo_tgt_pkt_filter.c +++ /dev/null @@ -1,155 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Implements public API for pmo to interact with target/WMI - */ - -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_pkt_filter_public_struct.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -QDF_STATUS pmo_tgt_set_pkt_filter(struct wlan_objmgr_vdev *vdev, - struct pmo_rcv_pkt_fltr_cfg *pmo_set_pkt_fltr_req, - uint8_t vdev_id) -{ - QDF_STATUS status; - struct pmo_rcv_pkt_fltr_cfg *request_buf = NULL; - struct wlan_objmgr_psoc *psoc; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - struct qdf_mac_addr peer_bssid; - - PMO_ENTER(); - - psoc = wlan_vdev_get_psoc(vdev); - if (!psoc) { - pmo_err("psoc unavailable for vdev %p", vdev); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - pmo_info("filter_type=%d, filter_id = %d", - pmo_set_pkt_fltr_req->filter_type, - pmo_set_pkt_fltr_req->filter_id); - - request_buf = qdf_mem_malloc(sizeof(*request_buf)); - - if (request_buf == NULL) { - pmo_err("Not able to allocate memory for Receive Filter Set Filter request"); - status = QDF_STATUS_E_NOMEM; - goto out; - } - - status = pmo_get_vdev_bss_peer_mac_addr(vdev, - &peer_bssid); - if (status != QDF_STATUS_SUCCESS) { - status = QDF_STATUS_E_INVAL; - goto out; - } - - qdf_mem_copy(request_buf, pmo_set_pkt_fltr_req, sizeof(*request_buf)); - - qdf_mem_copy(&request_buf->self_macaddr.bytes, - wlan_vdev_mlme_get_macaddr(vdev), - QDF_MAC_ADDR_SIZE); - - qdf_copy_macaddr(&pmo_set_pkt_fltr_req->bssid, - &peer_bssid); - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_set_pkt_filter) { - pmo_err("send_set_pkt_filter is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - status = pmo_tx_ops.send_set_pkt_filter(vdev, request_buf); - if (status != QDF_STATUS_SUCCESS) - goto out; - -out: - if (request_buf) - qdf_mem_free(request_buf); - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_tgt_clear_pkt_filter(struct wlan_objmgr_vdev *vdev, - struct pmo_rcv_pkt_fltr_clear_param *pmo_clr_pkt_fltr_param, - uint8_t vdev_id) -{ - QDF_STATUS status; - struct pmo_rcv_pkt_fltr_clear_param *request_buf = NULL; - struct wlan_objmgr_psoc *psoc; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - struct qdf_mac_addr peer_bssid; - - PMO_ENTER(); - - psoc = wlan_vdev_get_psoc(vdev); - if (!psoc) { - pmo_err("psoc unavailable for vdev %p", vdev); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - pmo_info("filter_id = %d", pmo_clr_pkt_fltr_param->filter_id); - - request_buf = qdf_mem_malloc(sizeof(*request_buf)); - - if (request_buf == NULL) { - pmo_err("Not able to allocate memory for Receive Filter Set Filter request"); - status = QDF_STATUS_E_NOMEM; - goto out; - } - - status = pmo_get_vdev_bss_peer_mac_addr(vdev, - &peer_bssid); - if (status != QDF_STATUS_SUCCESS) { - status = QDF_STATUS_E_INVAL; - goto out; - } - - qdf_mem_copy(request_buf, pmo_clr_pkt_fltr_param, sizeof(*request_buf)); - - qdf_mem_copy(&request_buf->self_macaddr.bytes, - wlan_vdev_mlme_get_macaddr(vdev), - QDF_MAC_ADDR_SIZE); - - qdf_copy_macaddr(&pmo_clr_pkt_fltr_param->bssid, - &peer_bssid); - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_clear_pkt_filter) { - pmo_err("send_clear_pkt_filter is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - status = pmo_tx_ops.send_clear_pkt_filter(vdev, request_buf); - if (status != QDF_STATUS_SUCCESS) - goto out; - -out: - if (request_buf) - qdf_mem_free(request_buf); - PMO_EXIT(); - - return status; -} - diff --git a/pmo/dispatcher/src/wlan_pmo_tgt_static_config.c b/pmo/dispatcher/src/wlan_pmo_tgt_static_config.c deleted file mode 100644 index 862f82f17a..0000000000 --- a/pmo/dispatcher/src/wlan_pmo_tgt_static_config.c +++ /dev/null @@ -1,126 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Implements public API for pmo to interact with target/WMI - */ - -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_wow.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -QDF_STATUS pmo_tgt_send_enhance_multicast_offload_req( - struct wlan_objmgr_vdev *vdev, - uint8_t vdev_id, - uint8_t action) -{ - QDF_STATUS status; - struct wlan_objmgr_psoc *psoc; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - PMO_ENTER(); - psoc = pmo_vdev_get_psoc(vdev); - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_enhance_mc_offload_req) { - pmo_err("send_enhance_multicast_offload is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - status = pmo_tx_ops.send_enhance_mc_offload_req(vdev, action); - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to config enhance multicast offload"); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_tgt_send_ra_filter_req(struct wlan_objmgr_vdev *vdev) -{ - - QDF_STATUS status; - uint8_t default_pattern; - uint16_t ra_interval; - struct pmo_vdev_priv_obj *vdev_ctx; - uint8_t vdev_id; - struct wlan_objmgr_psoc *psoc; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - PMO_ENTER(); - - psoc = pmo_vdev_get_psoc(vdev); - - vdev_ctx = pmo_vdev_get_priv(vdev); - - vdev_id = pmo_vdev_get_id(vdev); - qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock); - ra_interval = vdev_ctx->pmo_psoc_ctx->psoc_cfg.ra_ratelimit_interval; - qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock); - - pmo_debug("send RA rate limit [%d] to fw vdev = %d", - ra_interval, vdev_id); - - default_pattern = pmo_get_and_increment_wow_default_ptrn(vdev_ctx); - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_ra_filter_req) { - pmo_err("send_ra_filter_cmd is null"); - status = QDF_STATUS_E_INVAL; - goto out; - } - - status = pmo_tx_ops.send_ra_filter_req( - vdev, default_pattern, ra_interval); - if (status != QDF_STATUS_SUCCESS) { - pmo_err("Failed to send RA rate limit to fw"); - pmo_decrement_wow_default_ptrn(vdev_ctx); - } -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_tgt_send_action_frame_pattern_req( - struct wlan_objmgr_vdev *vdev, - struct pmo_action_wakeup_set_params *cmd) -{ - QDF_STATUS status; - struct wlan_objmgr_psoc *psoc; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - PMO_ENTER(); - - psoc = pmo_vdev_get_psoc(vdev); - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_action_frame_pattern_req) { - pmo_err("send_add_action_frame_pattern_cmd is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - status = pmo_tx_ops.send_action_frame_pattern_req(vdev, cmd); - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to add filter"); -out: - PMO_EXIT(); - - return status; -} - diff --git a/pmo/dispatcher/src/wlan_pmo_tgt_suspend_resume.c b/pmo/dispatcher/src/wlan_pmo_tgt_suspend_resume.c deleted file mode 100644 index 1af752877d..0000000000 --- a/pmo/dispatcher/src/wlan_pmo_tgt_suspend_resume.c +++ /dev/null @@ -1,214 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Implements public API for pmo to interact with target/WMI - */ - -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_wow.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -QDF_STATUS pmo_tgt_vdev_update_param_req(struct wlan_objmgr_vdev *vdev, - enum pmo_vdev_param_id param_id, uint32_t param_value) -{ - QDF_STATUS status; - struct wlan_objmgr_psoc *psoc; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - PMO_ENTER(); - - psoc = pmo_vdev_get_psoc(vdev); - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_vdev_param_update_req) { - pmo_err("send_vdev_param_update_req is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - status = pmo_tx_ops.send_vdev_param_update_req(vdev, param_id, - param_value); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_tgt_send_vdev_sta_ps_param(struct wlan_objmgr_vdev *vdev, - enum pmo_sta_powersave_param ps_param, uint32_t param_value) -{ - QDF_STATUS status; - struct wlan_objmgr_psoc *psoc; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - PMO_ENTER(); - - psoc = pmo_vdev_get_psoc(vdev); - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_vdev_sta_ps_param_req) { - pmo_err("send_vdev_param_set_req is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - status = pmo_tx_ops.send_vdev_sta_ps_param_req(vdev, ps_param, - param_value); -out: - PMO_EXIT(); - - return status; -} - -void pmo_tgt_psoc_update_wow_bus_suspend_state(struct wlan_objmgr_psoc *psoc, - uint8_t val) -{ - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.psoc_update_wow_bus_suspend) { - pmo_err("psoc_update_wow_bus_suspend is null"); - return; - } - pmo_tx_ops.psoc_update_wow_bus_suspend(psoc, val); -} - -int pmo_tgt_psoc_get_host_credits(struct wlan_objmgr_psoc *psoc) -{ - - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.psoc_get_host_credits) { - pmo_err("psoc_get_host_credits is null"); - return 0; - } - - return pmo_tx_ops.psoc_get_host_credits(psoc); -} - -int pmo_tgt_psoc_get_pending_cmnds(struct wlan_objmgr_psoc *psoc) -{ - - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.psoc_get_pending_cmnds) { - pmo_err("psoc_get_pending_cmnds is null"); - return -EAGAIN; - } - - return pmo_tx_ops.psoc_get_pending_cmnds(psoc); -} - -void pmo_tgt_update_target_suspend_flag(struct wlan_objmgr_psoc *psoc, - uint8_t val) -{ - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.update_target_suspend_flag) { - pmo_err("update_target_suspend_flag is null"); - return; - } - pmo_tx_ops.update_target_suspend_flag(psoc, val); -} - -QDF_STATUS pmo_tgt_psoc_send_wow_enable_req(struct wlan_objmgr_psoc *psoc, - struct pmo_wow_cmd_params *param) -{ - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.psoc_send_wow_enable_req) { - pmo_err("psoc_send_wow_enable_req is null"); - return QDF_STATUS_E_NULL_VALUE; - } - - return pmo_tx_ops.psoc_send_wow_enable_req(psoc, param); -} - -QDF_STATUS pmo_tgt_psoc_send_supend_req(struct wlan_objmgr_psoc *psoc, - struct pmo_suspend_params *param) -{ - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.psoc_send_supend_req) { - pmo_err("psoc_send_supend_req is null"); - return QDF_STATUS_E_NULL_VALUE; - } - - return pmo_tx_ops.psoc_send_supend_req(psoc, param); -} - -QDF_STATUS pmo_tgt_psoc_set_runtime_pm_inprogress(struct wlan_objmgr_psoc *psoc, - bool value) -{ - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.psoc_set_runtime_pm_in_progress) { - pmo_err("pmo ops is null"); - return QDF_STATUS_E_NULL_VALUE; - } - - pmo_tx_ops.psoc_set_runtime_pm_in_progress(psoc, value); - - return QDF_STATUS_SUCCESS; -} - -bool pmo_tgt_psoc_get_runtime_pm_in_progress(struct wlan_objmgr_psoc *psoc) -{ - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.psoc_get_runtime_pm_in_progress) { - pmo_err("psoc_get_runtime_pm_in_progress is null"); - return QDF_STATUS_E_NULL_VALUE; - } - - return pmo_tx_ops.psoc_get_runtime_pm_in_progress(psoc); -} - -QDF_STATUS pmo_tgt_psoc_send_host_wakeup_ind(struct wlan_objmgr_psoc *psoc) -{ - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.psoc_send_host_wakeup_ind) { - pmo_err("psoc_send_host_wakeup_ind is null"); - return QDF_STATUS_E_NULL_VALUE; - } - - return pmo_tx_ops.psoc_send_host_wakeup_ind(psoc); -} - -QDF_STATUS pmo_tgt_psoc_send_target_resume_req(struct wlan_objmgr_psoc *psoc) -{ - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.psoc_send_target_resume_req) { - pmo_err("send_target_resume_req is null"); - return QDF_STATUS_E_NULL_VALUE; - } - - return pmo_tx_ops.psoc_send_target_resume_req(psoc); -} - diff --git a/pmo/dispatcher/src/wlan_pmo_tgt_wow.c b/pmo/dispatcher/src/wlan_pmo_tgt_wow.c deleted file mode 100644 index 68cd447e58..0000000000 --- a/pmo/dispatcher/src/wlan_pmo_tgt_wow.c +++ /dev/null @@ -1,120 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Implements public API for pmo to interact with target/WMI - */ - -#include "wlan_pmo_tgt_api.h" -#include "wlan_pmo_wow.h" -#include "wlan_pmo_obj_mgmt_public_struct.h" - -QDF_STATUS pmo_tgt_enable_wow_wakeup_event( - struct wlan_objmgr_vdev *vdev, - uint32_t *bitmap) -{ - QDF_STATUS status; - struct wlan_objmgr_psoc *psoc; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - PMO_ENTER(); - - psoc = pmo_vdev_get_psoc(vdev); - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_enable_wow_wakeup_event_req) { - pmo_err("send_enable_wow_wakeup_event_req is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - status = pmo_tx_ops.send_enable_wow_wakeup_event_req(vdev, bitmap); - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to enable wow wakeup event"); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_tgt_disable_wow_wakeup_event( - struct wlan_objmgr_vdev *vdev, - uint32_t *bitmap) -{ - QDF_STATUS status; - struct wlan_objmgr_psoc *psoc; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - PMO_ENTER(); - - psoc = pmo_vdev_get_psoc(vdev); - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_disable_wow_wakeup_event_req) { - pmo_err("send_disable_wow_wakeup_event_req is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - status = pmo_tx_ops.send_disable_wow_wakeup_event_req(vdev, bitmap); - if (status != QDF_STATUS_SUCCESS) - pmo_err("Failed to disable wow wakeup event"); -out: - PMO_EXIT(); - - return status; -} - -QDF_STATUS pmo_tgt_send_wow_patterns_to_fw( - struct wlan_objmgr_vdev *vdev, uint8_t ptrn_id, - const uint8_t *ptrn, uint8_t ptrn_len, - uint8_t ptrn_offset, const uint8_t *mask, - uint8_t mask_len, bool user) -{ - QDF_STATUS status; - struct pmo_vdev_priv_obj *vdev_ctx; - struct wlan_objmgr_psoc *psoc; - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; - - PMO_ENTER(); - psoc = pmo_vdev_get_psoc(vdev); - - vdev_ctx = pmo_vdev_get_priv(vdev); - - pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc); - if (!pmo_tx_ops.send_add_wow_pattern) { - pmo_err("send_add_wow_pattern is null"); - status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - status = pmo_tx_ops.send_add_wow_pattern( - vdev, ptrn_id, ptrn, - ptrn_len, ptrn_offset, mask, - mask_len, user); - if (status != QDF_STATUS_SUCCESS) { - if (!user) - pmo_decrement_wow_default_ptrn(vdev_ctx); - pmo_err("Failed to sen wow pattern event"); - goto out; - } - - if (user) - pmo_increment_wow_user_ptrn(vdev_ctx); -out: - PMO_EXIT(); - - return status; -} - diff --git a/pmo/dispatcher/src/wlan_pmo_ucfg_api.c b/pmo/dispatcher/src/wlan_pmo_ucfg_api.c deleted file mode 100644 index f583399617..0000000000 --- a/pmo/dispatcher/src/wlan_pmo_ucfg_api.c +++ /dev/null @@ -1,330 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: public API related to the pmo called by north bound HDD/OSIF - */ - -#include "wlan_pmo_ucfg_api.h" -#include "wlan_pmo_arp.h" -#include "wlan_pmo_ns.h" -#include "wlan_pmo_gtk.h" -#include "wlan_pmo_wow.h" -#include "wlan_pmo_mc_addr_filtering.h" -#include "wlan_pmo_main.h" -#include "wlan_pmo_lphb.h" -#include "wlan_pmo_suspend_resume.h" -#include "wlan_pmo_pkt_filter.h" - -QDF_STATUS pmo_ucfg_get_psoc_config(struct wlan_objmgr_psoc *psoc, - struct pmo_psoc_cfg *psoc_cfg) -{ - return pmo_core_get_psoc_config(psoc, psoc_cfg); -} - -QDF_STATUS pmo_ucfg_update_psoc_config(struct wlan_objmgr_psoc *psoc, - struct pmo_psoc_cfg *psoc_cfg) -{ - return pmo_core_update_psoc_config(psoc, psoc_cfg); -} - -bool pmo_ucfg_is_ap_mode_supports_arp_ns(struct wlan_objmgr_psoc *psoc, - enum tQDF_ADAPTER_MODE vdev_opmode) -{ - return pmo_core_is_ap_mode_supports_arp_ns(psoc, vdev_opmode); -} - -bool pmo_ucfg_is_vdev_connected(struct wlan_objmgr_vdev *vdev) -{ - return pmo_core_is_vdev_connected(vdev); -} - -bool pmo_ucfg_is_vdev_supports_offload(struct wlan_objmgr_vdev *vdev) -{ - return pmo_core_is_vdev_supports_offload(vdev); -} - -void pmo_ucfg_enable_wakeup_event(struct wlan_objmgr_psoc *psoc, - uint32_t vdev_id, uint32_t *bitmap) -{ - pmo_core_enable_wakeup_event(psoc, vdev_id, bitmap); -} - -void pmo_ucfg_disable_wakeup_event(struct wlan_objmgr_psoc *psoc, - uint32_t vdev_id, uint32_t bitmap) -{ - pmo_core_disable_wakeup_event(psoc, vdev_id, &bitmap); -} - -QDF_STATUS pmo_ucfg_cache_arp_offload_req(struct pmo_arp_req *arp_req) -{ - return pmo_core_cache_arp_offload_req(arp_req); -} - -QDF_STATUS pmo_ucfg_flush_arp_offload_req(struct wlan_objmgr_vdev *vdev) -{ - return pmo_core_flush_arp_offload_req(vdev); -} - -QDF_STATUS pmo_ucfg_enable_arp_offload_in_fwr(struct wlan_objmgr_vdev *vdev, - enum pmo_offload_trigger trigger) -{ - return pmo_core_enable_arp_offload_in_fwr(vdev, trigger); -} - -QDF_STATUS pmo_ucfg_disable_arp_offload_in_fwr(struct wlan_objmgr_vdev *vdev, - enum pmo_offload_trigger trigger) -{ - return pmo_core_disable_arp_offload_in_fwr(vdev, trigger); -} - -QDF_STATUS pmo_ucfg_cache_ns_offload_req(struct pmo_ns_req *ns_req) -{ - return pmo_core_cache_ns_offload_req(ns_req); -} - -QDF_STATUS pmo_ucfg_flush_ns_offload_req(struct wlan_objmgr_vdev *vdev) -{ - return pmo_core_flush_ns_offload_req(vdev); -} - -QDF_STATUS pmo_ucfg_enable_ns_offload_in_fwr(struct wlan_objmgr_vdev *vdev, - enum pmo_offload_trigger trigger) -{ - return pmo_core_enable_ns_offload_in_fwr(vdev, trigger); -} - -QDF_STATUS pmo_ucfg_disable_ns_offload_in_fwr(struct wlan_objmgr_vdev *vdev, - enum pmo_offload_trigger trigger) -{ - return pmo_core_disable_ns_offload_in_fwr(vdev, trigger); -} - -QDF_STATUS pmo_ucfg_cache_mc_addr_list( - struct pmo_mc_addr_list_params *mc_list_config) -{ - return pmo_core_cache_mc_addr_list(mc_list_config); -} - -QDF_STATUS pmo_ucfg_flush_mc_addr_list(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id) -{ - return pmo_core_flush_mc_addr_list(psoc, vdev_id); -} - -QDF_STATUS pmo_ucfg_enable_mc_addr_filtering_in_fwr( - struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, - enum pmo_offload_trigger trigger) -{ - return pmo_core_enable_mc_addr_filtering_in_fwr(psoc, - vdev_id, trigger); -} - -QDF_STATUS pmo_ucfg_disable_mc_addr_filtering_in_fwr( - struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, - enum pmo_offload_trigger trigger) -{ - return pmo_core_disable_mc_addr_filtering_in_fwr(psoc, - vdev_id, trigger); -} - -uint8_t pmo_ucfg_max_mc_addr_supported(struct wlan_objmgr_psoc *psoc) -{ - return pmo_core_max_mc_addr_supported(psoc); -} - -QDF_STATUS pmo_ucfg_cache_gtk_offload_req(struct wlan_objmgr_vdev *vdev, - struct pmo_gtk_req *gtk_req) -{ - return pmo_core_cache_gtk_offload_req(vdev, gtk_req); -} - -QDF_STATUS pmo_ucfg_flush_gtk_offload_req(struct wlan_objmgr_vdev *vdev) -{ - return pmo_core_flush_gtk_offload_req(vdev); -} - -QDF_STATUS pmo_ucfg_enable_gtk_offload_in_fwr(struct wlan_objmgr_vdev *vdev) -{ - return pmo_core_enable_gtk_offload_in_fwr(vdev); -} - -QDF_STATUS pmo_ucfg_disable_gtk_offload_in_fwr(struct wlan_objmgr_vdev *vdev) -{ - return pmo_core_disable_gtk_offload_in_fwr(vdev); -} - -QDF_STATUS pmo_ucfg_set_pkt_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_rcv_pkt_fltr_cfg *pmo_set_pkt_fltr_req, - uint8_t vdev_id) -{ - return pmo_core_set_pkt_filter(psoc, pmo_set_pkt_fltr_req, vdev_id); -} - -QDF_STATUS pmo_ucfg_clear_pkt_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_rcv_pkt_fltr_clear_param *pmo_clr_pkt_fltr_param, - uint8_t vdev_id) -{ - return pmo_core_clear_pkt_filter(psoc, - pmo_clr_pkt_fltr_param, vdev_id); -} - -QDF_STATUS pmo_ucfg_get_gtk_rsp(struct wlan_objmgr_vdev *vdev, - struct pmo_gtk_rsp_req *gtk_rsp_req) -{ - return pmo_core_get_gtk_rsp(vdev, gtk_rsp_req); -} - -void pmo_ucfg_update_extscan_in_progress(struct wlan_objmgr_vdev *vdev, - bool value) -{ - pmo_core_update_extscan_in_progress(vdev, value); -} - -void pmo_ucfg_update_p2plo_in_progress(struct wlan_objmgr_vdev *vdev, - bool value) -{ - pmo_core_update_p2plo_in_progress(vdev, value); -} - -QDF_STATUS pmo_ucfg_lphb_config_req(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_req *lphb_req, void *lphb_cb_ctx, - pmo_lphb_callback callback) -{ - return pmo_core_lphb_config_req(psoc, lphb_req, lphb_cb_ctx, callback); -} - -void pmo_ucfg_update_alt_modulated_dtim_enable(struct wlan_objmgr_vdev *vdev, - bool value) -{ - pmo_core_update_alt_modulated_dtim_enable(vdev, value); -} - -void pmo_ucfg_psoc_update_power_save_mode(struct wlan_objmgr_psoc *psoc, - uint8_t value) -{ - pmo_core_psoc_update_power_save_mode(psoc, value); -} - -void pmo_ucfg_psoc_update_dp_handle(struct wlan_objmgr_psoc *psoc, - void *dp_handle) -{ - pmo_core_psoc_update_dp_handle(psoc, dp_handle); -} - -void pmo_ucfg_vdev_update_dp_handle(struct wlan_objmgr_vdev *vdev, - void *dp_handle) -{ - pmo_core_vdev_update_dp_handle(vdev, dp_handle); -} - -void pmo_ucfg_psoc_update_htc_handle(struct wlan_objmgr_psoc *psoc, - void *htc_handle) -{ - pmo_core_psoc_update_htc_handle(psoc, htc_handle); -} - -void pmo_ucfg_psoc_set_hif_handle(struct wlan_objmgr_psoc *psoc, - void *hif_handle) -{ - pmo_core_psoc_set_hif_handle(psoc, hif_handle); -} - -void pmo_ucfg_psoc_set_txrx_handle(struct wlan_objmgr_psoc *psoc, - void *txrx_handle) -{ - pmo_core_psoc_set_txrx_handle(psoc, txrx_handle); -} - -void pmo_ucfg_psoc_handle_initial_wake_up(void *cb_ctx) -{ - return pmo_core_psoc_handle_initial_wake_up(cb_ctx); -} - -QDF_STATUS pmo_ucfg_psoc_user_space_suspend_req(struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type type) -{ - return pmo_core_psoc_user_space_suspend_req(psoc, type); -} - - -QDF_STATUS pmo_ucfg_psoc_user_space_resume_req(struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type type) -{ - return pmo_core_psoc_user_space_resume_req(psoc, type); -} - -QDF_STATUS pmo_ucfg_psoc_bus_suspend_req(struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type type, - struct pmo_wow_enable_params *wow_params) -{ - return pmo_core_psoc_bus_suspend_req(psoc, type, wow_params); -} - -#ifdef FEATURE_RUNTIME_PM -QDF_STATUS pmo_ucfg_psoc_bus_runtime_suspend(struct wlan_objmgr_psoc *psoc, - pmo_pld_auto_suspend_cb pld_cb) -{ - return pmo_core_psoc_bus_runtime_suspend(psoc, pld_cb); -} - -QDF_STATUS pmo_ucfg_psoc_bus_runtime_resume(struct wlan_objmgr_psoc *psoc, - pmo_pld_auto_suspend_cb pld_cb) -{ - return pmo_core_psoc_bus_runtime_resume(psoc, pld_cb); -} -#endif - -QDF_STATUS pmo_ucfg_psoc_suspend_target(struct wlan_objmgr_psoc *psoc, - int disable_target_intr) -{ - return pmo_core_psoc_suspend_target(psoc, disable_target_intr); -} - -QDF_STATUS pmo_ucfg_psoc_bus_resume_req(struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type type) -{ - return pmo_core_psoc_bus_resume_req(psoc, type); -} - -bool pmo_ucfg_get_wow_bus_suspend(struct wlan_objmgr_psoc *psoc) -{ - return pmo_core_get_wow_bus_suspend(psoc); -} - -int pmo_ucfg_psoc_is_target_wake_up_received(struct wlan_objmgr_psoc *psoc) -{ - return pmo_core_psoc_is_target_wake_up_received(psoc); -} - -int pmo_ucfg_psoc_clear_target_wake_up(struct wlan_objmgr_psoc *psoc) -{ - return pmo_core_psoc_clear_target_wake_up(psoc); -} - -void pmo_ucfg_psoc_target_suspend_acknowledge(void *context, bool wow_nack) -{ - pmo_core_psoc_target_suspend_acknowledge(context, wow_nack); -} - -void pmo_ucfg_psoc_wakeup_host_event_received(struct wlan_objmgr_psoc *psoc) -{ - pmo_core_psoc_wakeup_host_event_received(psoc); -} - diff --git a/target_if/core/src/target_if_main.c b/target_if/core/src/target_if_main.c index 4e1ca706f3..f6d9dfc4cd 100644 --- a/target_if/core/src/target_if_main.c +++ b/target_if/core/src/target_if_main.c @@ -22,9 +22,6 @@ */ #include "target_if.h" -#ifdef WLAN_PMO_ENABLE -#include "target_if_pmo_main.h" -#endif #ifdef WLAN_ATF_ENABLE #include "target_if_atf.h" #endif @@ -237,38 +234,12 @@ QDF_STATUS target_if_register_umac_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops) return QDF_STATUS_SUCCESS; } -#ifdef WLAN_PMO_ENABLE -/** - * target_if_pmo_register_tx_ops_req() - Wrapper API to register pmo tx ops. - * @tx_ops: psoc's lmac if transmit operations - * - * Return: None - */ -static void target_if_pmo_register_tx_ops_req( - struct wlan_lmac_if_tx_ops *tx_ops) -{ - target_if_pmo_register_tx_ops(tx_ops); -} -#else -/** - * target_if_pmo_register_tx_ops_req() - Dummy API to register pmo tx ops. - * @tx_ops: psoc's lmac if transmit operations - * - * Return: None - */ -static void target_if_pmo_register_tx_ops_req( - struct wlan_lmac_if_tx_ops *tx_ops) -{ -} -#endif /* WLAN_PMO_ENABLE */ - QDF_STATUS target_if_register_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops) { /* Converged UMAC components to register their TX-ops */ target_if_register_umac_tx_ops(tx_ops); /* Components parallel to UMAC to register their TX-ops here */ - target_if_pmo_register_tx_ops_req(tx_ops); target_if_sptrl_tx_ops_register(tx_ops); #ifdef CONVERGED_P2P_ENABLE diff --git a/target_if/pmo/inc/target_if_pmo.h b/target_if/pmo/inc/target_if_pmo.h deleted file mode 100644 index dc6f73187a..0000000000 --- a/target_if/pmo/inc/target_if_pmo.h +++ /dev/null @@ -1,398 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** -* DOC: Declare various api/struct which shall be used -* by pmo component for wmi cmd (tx path) and -* event (rx) handling. -*/ - -#ifndef _TARGET_IF_PMO_H_ -#define _TARGET_IF_PMO_H_ - -#include "target_if.h" -#include "wlan_pmo_tgt_api.h" - -/** - * target_if_pmo_enable_wow_wakeup_event() - Enable wow wakeup events. - * @vdev:objmgr vdev handle - * @bitmap: Event bitmap - * @enable: enable/disable - * - * Return: QDF status - */ -QDF_STATUS target_if_pmo_enable_wow_wakeup_event(struct wlan_objmgr_vdev *vdev, - uint32_t *bitmap); - -/** - * target_if_pmo_disable_wow_wakeup_event() - Disable wow wakeup events. - * @vdev:objmgr vdev handle - * @bitmap: Event bitmap - * @enable: enable/disable - * - * Return: QDF status - */ -QDF_STATUS target_if_pmo_disable_wow_wakeup_event( - struct wlan_objmgr_vdev *vdev, uint32_t *bitmap); - -/** - * target_if_pmo_send_wow_patterns_to_fw() - Sends WOW patterns to FW. - * @vdev: objmgr vdev handle - * @ptrn_id: pattern id - * @ptrn: pattern - * @ptrn_len: pattern length - * @ptrn_offset: pattern offset - * @mask: mask - * @mask_len: mask length - * @user: true for user configured pattern and false for default pattern - * - * Return: QDF status - */ -QDF_STATUS target_if_pmo_send_wow_patterns_to_fw(struct wlan_objmgr_vdev *vdev, - uint8_t ptrn_id, - const uint8_t *ptrn, uint8_t ptrn_len, - uint8_t ptrn_offset, const uint8_t *mask, - uint8_t mask_len, bool user); - -/** - * target_if_pmo_send_enhance_mc_offload_req() - send enhance mc offload req - * @vdev: objmgr vdev - * @action: enable or disable enhance multicast offload - * - * Return: QDF_STATUS_SUCCESS on success else error code - */ -QDF_STATUS target_if_pmo_send_enhance_mc_offload_req( - struct wlan_objmgr_vdev *vdev, - bool enable); - -/** - * target_if_pmo_set_mc_filter_req() - set mcast filter command to fw - * @vdev: objmgr vdev handle - * @multicastAddr: mcast address - * - * Return: 0 for success or error code - */ -QDF_STATUS target_if_pmo_set_mc_filter_req(struct wlan_objmgr_vdev *vdev, - struct qdf_mac_addr multicast_addr); - -/** - * target_if_pmo_clear_mc_filter_req() - clear mcast filter command to fw - * @vdev: objmgr vdev handle - * @multicastAddr: mcast address - * - * Return: 0 for success or error code - */ -QDF_STATUS target_if_pmo_clear_mc_filter_req(struct wlan_objmgr_vdev *vdev, - struct qdf_mac_addr multicast_addr); - -/** - * target_if_pmo_send_ra_filter_req() - set RA filter pattern in fw - * @vdev: objmgr vdev handle - * @default_pattern: default pattern id - * @rate_limit_interval: ra rate limit interval - * - * Return: QDF status - */ -QDF_STATUS target_if_pmo_send_ra_filter_req(struct wlan_objmgr_vdev *vdev, - uint8_t default_pattern, uint16_t rate_limit_interval); - -/** - * target_if_pmo_send_action_frame_patterns() - register action frame map to fw - * @handle: Pointer to wma handle - * @vdev_id: VDEV ID - * - * This is called to push action frames wow patterns from local - * cache to firmware. - * - * Return: QDF_STATUS - */ -QDF_STATUS target_if_pmo_send_action_frame_patterns( - struct wlan_objmgr_vdev *vdev, - struct pmo_action_wakeup_set_params *ip_cmd); - -/** - * target_if_pmo_conf_hw_filter() - configure hardware filter in DTIM mode - * @psoc: the psoc containing the vdev to configure - * @req: the request parameters - * - * Return: QDF_STATUS - */ -QDF_STATUS target_if_pmo_conf_hw_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_hw_filter_params *req); - -/** - * target_if_pmo_send_pkt_filter_req() - enable packet filter - * @vdev: objmgr vdev - * @rcv_filter_param: filter params - * - * This function enable packet filter - * - * Return: QDF_STATUS_SUCCESS for success or error code - */ -QDF_STATUS target_if_pmo_send_pkt_filter_req(struct wlan_objmgr_vdev *vdev, - struct pmo_rcv_pkt_fltr_cfg *rcv_filter_param); - -/** - * target_if_pmo_clear_pkt_filter_req() - disable packet filter - * @vdev: objmgr vdev - * @rcv_clear_param: filter params - * - * This function disable packet filter - * - * Return: QDF_STATUS_SUCCESS for success or error code - */ -QDF_STATUS target_if_pmo_clear_pkt_filter_req(struct wlan_objmgr_vdev *vdev, - struct pmo_rcv_pkt_fltr_clear_param *rcv_clear_param); - -/** - * target_if_pmo_send_arp_offload_req() - sends arp request to fwr - * @vdev: objmgr vdev - * @arp_offload_req: arp offload req - * @ns_offload_req: ns offload request - * - * This functions sends arp request to fwr. - * - * Return: QDF_STATUS_SUCCESS for success or error code - */ -QDF_STATUS target_if_pmo_send_arp_offload_req( - struct wlan_objmgr_vdev *vdev, - struct pmo_arp_offload_params *arp_offload_req, - struct pmo_ns_offload_params *ns_offload_req); - -/** - * target_if_pmo_send_ns_offload_req() - sends ns request to fwr - * @vdev: objmgr vdev - * @arp_offload_req: arp offload req - * @ns_offload_req: ns offload request - * - * This functions sends ns request to fwr. - * - * Return: QDF_STATUS_SUCCESS for success or error code - */ -QDF_STATUS target_if_pmo_send_ns_offload_req( - struct wlan_objmgr_vdev *vdev, - struct pmo_arp_offload_params *arp_offload_req, - struct pmo_ns_offload_params *ns_offload_req); - -/** - * target_if_pmo_send_gtk_offload_req() - send gtk offload request in fwr - * @vdev: objmgr vdev handle - * @gtk_offload_req: gtk offload request - * - * Return: QDF status - */ -QDF_STATUS target_if_pmo_send_gtk_offload_req(struct wlan_objmgr_vdev *vdev, - struct pmo_gtk_req *gtk_offload_req); - -/** - * target_if_pmo_send_gtk_response_req() - send gtk response request in fwr - * @vdev: objmgr vdev handle - * - * Return: QDF status - */ -QDF_STATUS target_if_pmo_send_gtk_response_req(struct wlan_objmgr_vdev *vdev); - -/** - * target_if_pmo_gtk_offload_status_event() - GTK offload status event handler - * @scn_handle: scn handle - * @event: event buffer - * @len: buffer length - * - * Return: 0 for success or error code - */ -int target_if_pmo_gtk_offload_status_event(void *scn_handle, - uint8_t *event, uint32_t len); - -/** - * target_if_pmo_send_lphb_enable() - enable command of LPHB config req - * @psoc: objmgr psoc handle - * @ts_lphb_enable: lphb enable request which needs to configure in fwr - * - * Return: QDF status - */ -QDF_STATUS target_if_pmo_send_lphb_enable(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_enable_req *ts_lphb_enable); - -/** - * target_if_pmo_send_lphb_tcp_params() - set lphb tcp params config request - * @psoc: objmgr psoc handle - * @ts_lphb_tcp_param: lphb tcp params which needs to configure in fwr - * - * Return: QDF status - */ -QDF_STATUS target_if_pmo_send_lphb_tcp_params(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_tcp_params *ts_lphb_tcp_param); - -/** - * target_if_pmo_send_lphb_tcp_pkt_filter() - send lphb tcp packet filter req - * @psoc: objmgr psoc handle - * @ts_lphb_tcp_filter: lphb tcp filter request which needs to configure in fwr - * - * Return: QDF status - */ -QDF_STATUS target_if_pmo_send_lphb_tcp_pkt_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_tcp_filter_req *ts_lphb_tcp_filter); - -/** - * target_if_pmo_send_lphb_udp_params() - Send udp param command of LPHB - * @psoc: objmgr psoc handle - * @ts_lphb_udp_param: lphb udp params which needs to configure in fwr - * - * Return: QDF status - */ -QDF_STATUS target_if_pmo_send_lphb_udp_params(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_udp_params *ts_lphb_udp_param); - -/** - * target_if_pmo_send_lphb_udp_pkt_filter() - Send lphb udp pkt filter cmd req - * @psoc: objmgr psoc handle - * @ts_lphb_udp_filter: lphb udp filter request which needs to configure in fwr - * - * Return: QDF status - */ -QDF_STATUS target_if_pmo_send_lphb_udp_pkt_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_udp_filter_req *ts_lphb_udp_filter); - -/** - * target_if_pmo_lphb_evt_handler() - send LPHB indication to os if /HDD - * @psoc: objmgr psoc handle - * @event: lphb event buffer - * - * Return: QDF_STATUS_SUCCESS for success else error code - */ -QDF_STATUS target_if_pmo_lphb_evt_handler(struct wlan_objmgr_psoc *psoc, - uint8_t *event); - -/** - * target_if_pmo_send_vdev_update_param_req() - Send vdev param value to fwr - * @vdev: objmgr vdev - * @param_id: tell vdev param id which needs to be updated in fwr - * @param_value: vdev parameter value - * - * Return: QDF status - */ -QDF_STATUS target_if_pmo_send_vdev_update_param_req( - struct wlan_objmgr_vdev *vdev, - uint32_t param_id, uint32_t param_value); - -/** - * target_if_pmo_send_vdev_ps_param_req() - Send vdev ps param value to fwr - * @vdev: objmgr vdev - * @param_id: tell vdev param id which needs to be updated in fwr - * @param_value: vdev parameter value - * - * Return: QDF status - */ -QDF_STATUS target_if_pmo_send_vdev_ps_param_req( - struct wlan_objmgr_vdev *vdev, - uint32_t param_id, - uint32_t param_value); - -/** - * target_if_pmo_psoc_update_bus_suspend() - update wmi bus suspend flag - * @psoc: objmgr psoc - * @value: bus suspend value - * - * Return: None - */ -void target_if_pmo_psoc_update_bus_suspend(struct wlan_objmgr_psoc *psoc, - uint8_t value); - -/** - * target_if_pmo_psoc_get_host_credits() - get available host credits - * @psoc: objmgr psoc - * - * Return: return host credits - */ -int target_if_pmo_psoc_get_host_credits(struct wlan_objmgr_psoc *psoc); - -/** - * target_if_pmo_psoc_get_pending_cmnds() - get wmi pending commands - * @psoc: objmgr psoc - * - * Return: return wmi pending commands - */ -int target_if_pmo_psoc_get_pending_cmnds(struct wlan_objmgr_psoc *psoc); - -/** - * target_if_pmo_update_target_suspend_flag() - set wmi target suspend flag - * @psoc: objmgr psoc - * @value: value - * - * Return: return wmi pending commands - */ -void target_if_pmo_update_target_suspend_flag(struct wlan_objmgr_psoc *psoc, - uint8_t value); - -/** - * target_if_pmo_psoc_send_wow_enable_req() -send wow enable request - * @psoc: objmgr psoc - * @param: wow command params - * - * Return: return QDF_STATUS_SUCCESS on success else error code - */ -QDF_STATUS target_if_pmo_psoc_send_wow_enable_req(struct wlan_objmgr_psoc *psoc, - struct pmo_wow_cmd_params *param); - -/** - * target_if_pmo_psoc_send_suspend_req() - fp to send suspend request - * @psoc: objmgr psoc - * @param: target suspend params - * - * Return: return QDF_STATUS_SUCCESS on success else error code - */ -QDF_STATUS target_if_pmo_psoc_send_suspend_req(struct wlan_objmgr_psoc *psoc, - struct pmo_suspend_params *param); - -/** - * target_if_pmo_set_runtime_pm_in_progress() - set runtime pm status - * @psoc: objmgr psoc - * @value: set runtime pm status - * - * Return: none - */ -void target_if_pmo_set_runtime_pm_in_progress(struct wlan_objmgr_psoc *psoc, - bool value); - -/** - * target_if_pmo_get_runtime_pm_in_progress() - fp to get runtime pm status - * @psoc: objmgr psoc - * - * Return: true if runtime pm in progress else false - */ -bool target_if_pmo_get_runtime_pm_in_progress(struct wlan_objmgr_psoc *psoc); - -/** - * target_if_pmo_psoc_send_host_wakeup_ind() - send host wake ind to fwr - * @psoc: objmgr psoc - * - * Return: return QDF_STATUS_SUCCESS on success else error code - */ -QDF_STATUS target_if_pmo_psoc_send_host_wakeup_ind( - struct wlan_objmgr_psoc *psoc); - -/** - * target_if_pmo_psoc_send_target_resume_req() -send target resume request - * @psoc: objmgr psoc - * - * Return: return QDF_STATUS_SUCCESS on success else error code - */ -QDF_STATUS target_if_pmo_psoc_send_target_resume_req( - struct wlan_objmgr_psoc *psoc); - -#endif - diff --git a/target_if/pmo/inc/target_if_pmo_main.h b/target_if/pmo/inc/target_if_pmo_main.h deleted file mode 100644 index 060a86143a..0000000000 --- a/target_if/pmo/inc/target_if_pmo_main.h +++ /dev/null @@ -1,38 +0,0 @@ -/* -* Copyright (c) 2017 The Linux Foundation. All rights reserved. -* -* Permission to use, copy, modify, and/or distribute this software for -* any purpose with or without fee is hereby granted, provided that the -* above copyright notice and this permission notice appear in all -* copies. -* -* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -* PERFORMANCE OF THIS SOFTWARE. -*/ -/** - * DOC: Target interface file for pmo component to - * Declare api's which shall be used by pmo component - * in target if internally. - */ - -#ifndef _TARGET_IF_PMO_MAIN_H_ -#define _TARGET_IF_PMO_MAIN_H_ - -#include "wlan_lmac_if_def.h" - -/** - * target_if_pmo_register_tx_ops() - Register PMO component TX OPS - * @tx_ops: lmac if transmit ops - * - * Return: None - */ -void target_if_pmo_register_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops); - -#endif - diff --git a/target_if/pmo/src/target_if_pmo_arp.c b/target_if/pmo/src/target_if_pmo_arp.c deleted file mode 100644 index b28b08a55f..0000000000 --- a/target_if/pmo/src/target_if_pmo_arp.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -/** - * DOC: target_if_pmo_arp.c - * - * Target interface file for pmo component to - * send arp offload related cmd and process event. - */ - -#include "target_if.h" -#include "target_if_pmo.h" -#include "wmi_unified_api.h" - -QDF_STATUS target_if_pmo_send_arp_offload_req( - struct wlan_objmgr_vdev *vdev, - struct pmo_arp_offload_params *arp_offload_req, - struct pmo_ns_offload_params *ns_offload_req) -{ - uint8_t vdev_id; - struct wlan_objmgr_psoc *psoc; - QDF_STATUS status; - - if (!vdev) { - target_if_err("vdev ptr passed is NULL"); - return QDF_STATUS_E_INVAL; - } - - psoc = wlan_vdev_get_psoc(vdev); - vdev_id = wlan_vdev_get_id(vdev); - if (!psoc) { - target_if_err("psoc handle is NULL"); - return QDF_STATUS_E_INVAL; - } - - status = wmi_unified_enable_arp_ns_offload_cmd( - GET_WMI_HDL_FROM_PSOC(psoc), - arp_offload_req, - ns_offload_req, - vdev_id); - if (status != QDF_STATUS_SUCCESS) - target_if_err("Failed to enable ARP NDP/NSffload"); - - return status; -} - - diff --git a/target_if/pmo/src/target_if_pmo_gtk.c b/target_if/pmo/src/target_if_pmo_gtk.c deleted file mode 100644 index 8ffc462724..0000000000 --- a/target_if/pmo/src/target_if_pmo_gtk.c +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -/** - * DOC: target_if_pmo_gtk.c - * - * Target interface file for pmo component to - * send gtk offload related cmd and process event. - */ - -#include "target_if.h" -#include "target_if_pmo.h" -#include "wmi_unified_api.h" - -QDF_STATUS target_if_pmo_send_gtk_offload_req(struct wlan_objmgr_vdev *vdev, - struct pmo_gtk_req *gtk_req) -{ - uint8_t vdev_id; - QDF_STATUS status; - uint32_t gtk_offload_opcode; - struct wlan_objmgr_psoc *psoc; - - if (!vdev) { - target_if_err("vdev ptr passed is NULL"); - return QDF_STATUS_E_INVAL; - } - - psoc = wlan_vdev_get_psoc(vdev); - vdev_id = wlan_vdev_get_id(vdev); - if (!psoc) { - target_if_err("psoc handle is NULL"); - return QDF_STATUS_E_INVAL; - } - - if (gtk_req->flags == PMO_GTK_OFFLOAD_ENABLE) - gtk_offload_opcode = GTK_OFFLOAD_ENABLE_OPCODE; - else - gtk_offload_opcode = GTK_OFFLOAD_DISABLE_OPCODE; - - status = wmi_unified_send_gtk_offload_cmd( - GET_WMI_HDL_FROM_PSOC(psoc), - vdev_id, - gtk_req, - gtk_req->flags, - gtk_offload_opcode); - if (status) - target_if_err("Failed to send gtk offload cmd to fw"); - - return status; -} - -QDF_STATUS target_if_pmo_send_gtk_response_req(struct wlan_objmgr_vdev *vdev) -{ - uint8_t vdev_id; - struct wlan_objmgr_psoc *psoc; - QDF_STATUS status = QDF_STATUS_SUCCESS; - uint32_t offload_req_opcode; - - if (!vdev) { - target_if_err("vdev ptr passed is NULL"); - return QDF_STATUS_E_INVAL; - } - - psoc = wlan_vdev_get_psoc(vdev); - vdev_id = wlan_vdev_get_id(vdev); - if (!psoc) { - target_if_err("psoc handle is NULL"); - return QDF_STATUS_E_INVAL; - } - - /* Request for GTK offload status */ - offload_req_opcode = GTK_OFFLOAD_REQUEST_STATUS_OPCODE; - - /* send the wmi command */ - status = wmi_unified_process_gtk_offload_getinfo_cmd( - GET_WMI_HDL_FROM_PSOC(psoc), - vdev_id, offload_req_opcode); - - return status; -} - -int target_if_pmo_gtk_offload_status_event(void *scn_handle, - uint8_t *event, uint32_t len) -{ - struct pmo_gtk_rsp_params *gtk_rsp_param; - struct wlan_lmac_if_pmo_rx_ops *pmo_rx_ops; - struct wlan_objmgr_psoc *psoc; - QDF_STATUS ret; - - TARGET_IF_ENTER(); - psoc = target_if_get_psoc_from_scn_hdl(scn_handle); - if (!psoc) { - target_if_err("psoc ptr is NULL"); - ret = -EINVAL; - goto out; - } - - pmo_rx_ops = &psoc->soc_cb.rx_ops.pmo_rx_ops; - if (!pmo_rx_ops->rx_gtk_rsp_event) { - target_if_err("rx_gtk_rsp_event is NULL"); - ret = -EINVAL; - goto out; - } - - gtk_rsp_param = qdf_mem_malloc(sizeof(*gtk_rsp_param)); - if (!gtk_rsp_param) { - target_if_err("memory allocation failed"); - ret = -ENOMEM; - goto out; - } - - if (wmi_extract_gtk_rsp_event(GET_WMI_HDL_FROM_PSOC(psoc), - event, gtk_rsp_param, len) != QDF_STATUS_SUCCESS) { - target_if_err("Extraction of gtk rsp event failed"); - qdf_mem_free(gtk_rsp_param); - ret = -EINVAL; - goto out; - } - - ret = pmo_rx_ops->rx_gtk_rsp_event(psoc, (void *)gtk_rsp_param); - if (ret != QDF_STATUS_SUCCESS) { - target_if_err("Failed to process mgmt tx completion"); - ret = -EINVAL; - } - qdf_mem_free(gtk_rsp_param); -out: - TARGET_IF_EXIT(); - - return ret; -} - diff --git a/target_if/pmo/src/target_if_pmo_hw_filter.c b/target_if/pmo/src/target_if_pmo_hw_filter.c deleted file mode 100644 index 8070a6459a..0000000000 --- a/target_if/pmo/src/target_if_pmo_hw_filter.c +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -/** - * DOC: target_if_pmo_non_arp_bcast_fltr.c - * - * Target interface file for pmo component to - * send non arp hw bcast filtering related cmd and process event. - */ - -#include "target_if.h" -#include "target_if_pmo.h" -#include "wmi_unified_api.h" -#include "wlan_pmo_hw_filter_public_struct.h" - -QDF_STATUS target_if_pmo_conf_hw_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_hw_filter_params *req) -{ - QDF_STATUS status; - - if (!psoc) { - target_if_err("psoc is NULL"); - return QDF_STATUS_E_INVAL; - } - - status = wmi_unified_conf_hw_filter_cmd( - GET_WMI_HDL_FROM_PSOC(psoc), - req); - - if (QDF_IS_STATUS_ERROR(status)) - target_if_err("Failed to configure HW Filter"); - - return status; -} diff --git a/target_if/pmo/src/target_if_pmo_lphb.c b/target_if/pmo/src/target_if_pmo_lphb.c deleted file mode 100644 index c3262bcca4..0000000000 --- a/target_if/pmo/src/target_if_pmo_lphb.c +++ /dev/null @@ -1,312 +0,0 @@ -/* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -/** - * DOC: target_if_pmo_lphb.c - * - * Target interface file for pmo component to - * send lphb offload related cmd and process event. - */ -#ifdef FEATURE_WLAN_LPHB - -#include "target_if.h" -#include "target_if_pmo.h" -#include "wmi_unified_pmo_api.h" - -QDF_STATUS target_if_pmo_send_lphb_enable(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_enable_req *ts_lphb_enable) -{ - QDF_STATUS qdf_status = QDF_STATUS_SUCCESS; - int status = 0; - wmi_hb_set_enable_cmd_fixed_param hb_enable_fp; - - if (ts_lphb_enable == NULL) { - target_if_err("LPHB Enable configuration is NULL"); - return QDF_STATUS_E_FAILURE; - } - - target_if_info("PMO_HB_SET_ENABLE enable=%d, item=%d, session=%d", - ts_lphb_enable->enable, - ts_lphb_enable->item, ts_lphb_enable->session); - - if ((ts_lphb_enable->item != 1) && (ts_lphb_enable->item != 2)) { - pmo_err("LPHB configuration wrong item %d", - ts_lphb_enable->item); - return QDF_STATUS_E_FAILURE; - } - - /* fill in values */ - hb_enable_fp.vdev_id = ts_lphb_enable->session; - hb_enable_fp.enable = ts_lphb_enable->enable; - hb_enable_fp.item = ts_lphb_enable->item; - hb_enable_fp.session = ts_lphb_enable->session; - - status = wmi_unified_lphb_config_hbenable_cmd( - GET_WMI_HDL_FROM_PSOC(psoc), - &hb_enable_fp); - if (status != EOK) { - qdf_status = QDF_STATUS_E_FAILURE; - goto error; - } - return QDF_STATUS_SUCCESS; -error: - - return qdf_status; -} - -QDF_STATUS target_if_pmo_send_lphb_tcp_params(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_tcp_params *ts_lphb_tcp_param) -{ - QDF_STATUS qdf_status = QDF_STATUS_SUCCESS; - int status = 0; - wmi_hb_set_tcp_params_cmd_fixed_param hb_tcp_params_fp = {0}; - - if (ts_lphb_tcp_param == NULL) { - target_if_err("TCP params LPHB configuration is NULL"); - return QDF_STATUS_E_FAILURE; - } - - target_if_info("PMO --> WMI_HB_SET_TCP_PARAMS srv_ip=%08x, " - "dev_ip=%08x, src_port=%d, dst_port=%d, timeout=%d, " - "session=%d, gateway_mac= %pM, time_period_sec=%d," - "tcp_sn=%d", ts_lphb_tcp_param->srv_ip, - ts_lphb_tcp_param->dev_ip, ts_lphb_tcp_param->src_port, - ts_lphb_tcp_param->dst_port, ts_lphb_tcp_param->timeout, - ts_lphb_tcp_param->session, - ts_lphb_tcp_param->gateway_mac.bytes, - ts_lphb_tcp_param->time_period_sec, ts_lphb_tcp_param->tcp_sn); - - /* fill in values */ - hb_tcp_params_fp.vdev_id = ts_lphb_tcp_param->session; - hb_tcp_params_fp.srv_ip = ts_lphb_tcp_param->srv_ip; - hb_tcp_params_fp.dev_ip = ts_lphb_tcp_param->dev_ip; - hb_tcp_params_fp.seq = ts_lphb_tcp_param->tcp_sn; - hb_tcp_params_fp.src_port = ts_lphb_tcp_param->src_port; - hb_tcp_params_fp.dst_port = ts_lphb_tcp_param->dst_port; - hb_tcp_params_fp.interval = ts_lphb_tcp_param->time_period_sec; - hb_tcp_params_fp.timeout = ts_lphb_tcp_param->timeout; - hb_tcp_params_fp.session = ts_lphb_tcp_param->session; - WMI_CHAR_ARRAY_TO_MAC_ADDR(ts_lphb_tcp_param->gateway_mac.bytes, - &hb_tcp_params_fp.gateway_mac); - - status = wmi_unified_lphb_config_tcp_params_cmd( - GET_WMI_HDL_FROM_PSOC(psoc), - &hb_tcp_params_fp); - if (status != EOK) { - qdf_status = QDF_STATUS_E_FAILURE; - goto error; - } - - return QDF_STATUS_SUCCESS; -error: - return qdf_status; -} - -QDF_STATUS target_if_pmo_send_lphb_tcp_pkt_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_tcp_filter_req *ts_lphb_tcp_filter) -{ - QDF_STATUS qdf_status = QDF_STATUS_SUCCESS; - int status = 0; - wmi_hb_set_tcp_pkt_filter_cmd_fixed_param hb_tcp_filter_fp = {0}; - - if (ts_lphb_tcp_filter == NULL) { - target_if_err("TCP PKT FILTER LPHB configuration is NULL"); - return QDF_STATUS_E_FAILURE; - } - - target_if_info("SET_TCP_PKT_FILTER length=%d, offset=%d, session=%d, " - "filter=%2x:%2x:%2x:%2x:%2x:%2x ...", - ts_lphb_tcp_filter->length, ts_lphb_tcp_filter->offset, - ts_lphb_tcp_filter->session, ts_lphb_tcp_filter->filter[0], - ts_lphb_tcp_filter->filter[1], ts_lphb_tcp_filter->filter[2], - ts_lphb_tcp_filter->filter[3], ts_lphb_tcp_filter->filter[4], - ts_lphb_tcp_filter->filter[5]); - - /* fill in values */ - hb_tcp_filter_fp.vdev_id = ts_lphb_tcp_filter->session; - hb_tcp_filter_fp.length = ts_lphb_tcp_filter->length; - hb_tcp_filter_fp.offset = ts_lphb_tcp_filter->offset; - hb_tcp_filter_fp.session = ts_lphb_tcp_filter->session; - memcpy((void *)&hb_tcp_filter_fp.filter, - (void *)&ts_lphb_tcp_filter->filter, - WMI_WLAN_HB_MAX_FILTER_SIZE); - - status = wmi_unified_lphb_config_tcp_pkt_filter_cmd( - GET_WMI_HDL_FROM_PSOC(psoc), - &hb_tcp_filter_fp); - if (status != EOK) { - qdf_status = QDF_STATUS_E_FAILURE; - goto error; - } - - return QDF_STATUS_SUCCESS; -error: - return qdf_status; -} - -QDF_STATUS target_if_pmo_send_lphb_udp_params(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_udp_params *ts_lphb_udp_param) -{ - QDF_STATUS qdf_status = QDF_STATUS_SUCCESS; - int status = 0; - wmi_hb_set_udp_params_cmd_fixed_param hb_udp_params_fp = {0}; - - if (ts_lphb_udp_param == NULL) { - target_if_err("UDP param for LPHB configuration is NULL"); - return QDF_STATUS_E_FAILURE; - } - - target_if_info("HB_SET_UDP_PARAMS srv_ip=%d, dev_ip=%d, src_port=%d, " - "dst_port=%d, interval=%d, timeout=%d, session=%d, " - "gateway_mac= %pM", - ts_lphb_udp_param->srv_ip, ts_lphb_udp_param->dev_ip, - ts_lphb_udp_param->src_port, ts_lphb_udp_param->dst_port, - ts_lphb_udp_param->interval, ts_lphb_udp_param->timeout, - ts_lphb_udp_param->session, - ts_lphb_udp_param->gateway_mac.bytes); - - /* fill in values */ - hb_udp_params_fp.vdev_id = ts_lphb_udp_param->session; - hb_udp_params_fp.srv_ip = ts_lphb_udp_param->srv_ip; - hb_udp_params_fp.dev_ip = ts_lphb_udp_param->dev_ip; - hb_udp_params_fp.src_port = ts_lphb_udp_param->src_port; - hb_udp_params_fp.dst_port = ts_lphb_udp_param->dst_port; - hb_udp_params_fp.interval = ts_lphb_udp_param->interval; - hb_udp_params_fp.timeout = ts_lphb_udp_param->timeout; - hb_udp_params_fp.session = ts_lphb_udp_param->session; - WMI_CHAR_ARRAY_TO_MAC_ADDR(ts_lphb_udp_param->gateway_mac.bytes, - &hb_udp_params_fp.gateway_mac); - - status = wmi_unified_lphb_config_udp_params_cmd( - GET_WMI_HDL_FROM_PSOC(psoc), - &hb_udp_params_fp); - if (status != EOK) { - qdf_status = QDF_STATUS_E_FAILURE; - goto error; - } - - return QDF_STATUS_SUCCESS; -error: - return qdf_status; -} - -/** - * target_if_pmo_lphb_send_udp_pkt_filter() - Send LPHB udp pkt filter req - * @psoc: objmgr psoc handle - * @ts_lphb_udp_filter: lphb udp filter request which needs to configure in fwr - * - * Return: QDF status - */ -QDF_STATUS target_if_pmo_send_lphb_udp_pkt_filter(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_udp_filter_req *ts_lphb_udp_filter) -{ - QDF_STATUS qdf_status = QDF_STATUS_SUCCESS; - int status = 0; - wmi_hb_set_udp_pkt_filter_cmd_fixed_param hb_udp_filter_fp = {0}; - - if (ts_lphb_udp_filter == NULL) { - target_if_err("LPHB UDP packet filter configuration is NULL"); - return QDF_STATUS_E_FAILURE; - } - - target_if_info("SET_UDP_PKT_FILTER length=%d, offset=%d, session=%d, " - "filter=%2x:%2x:%2x:%2x:%2x:%2x ...", - ts_lphb_udp_filter->length, ts_lphb_udp_filter->offset, - ts_lphb_udp_filter->session, ts_lphb_udp_filter->filter[0], - ts_lphb_udp_filter->filter[1], ts_lphb_udp_filter->filter[2], - ts_lphb_udp_filter->filter[3], ts_lphb_udp_filter->filter[4], - ts_lphb_udp_filter->filter[5]); - - /* fill in values */ - hb_udp_filter_fp.vdev_id = ts_lphb_udp_filter->session; - hb_udp_filter_fp.length = ts_lphb_udp_filter->length; - hb_udp_filter_fp.offset = ts_lphb_udp_filter->offset; - hb_udp_filter_fp.session = ts_lphb_udp_filter->session; - qdf_mem_copy((void *)&hb_udp_filter_fp.filter, - (void *)&ts_lphb_udp_filter->filter, - WMI_WLAN_HB_MAX_FILTER_SIZE); - - status = wmi_unified_lphb_config_udp_pkt_filter_cmd( - GET_WMI_HDL_FROM_PSOC(psoc), - &hb_udp_filter_fp); - if (status != EOK) { - qdf_status = QDF_STATUS_E_FAILURE; - goto error; - } - - return QDF_STATUS_SUCCESS; -error: - return qdf_status; -} - -QDF_STATUS target_if_pmo_lphb_evt_handler(struct wlan_objmgr_psoc *psoc, - uint8_t *event) -{ - wmi_hb_ind_event_fixed_param *hb_fp; - struct pmo_lphb_rsp *slphb_indication = NULL; - QDF_STATUS qdf_status; - struct wlan_lmac_if_pmo_rx_ops *pmo_rx_ops; - - TARGET_IF_ENTER(); - if (!psoc) { - target_if_err("psoc ptr is NULL"); - qdf_status = QDF_STATUS_E_NULL_VALUE; - goto out; - } - - pmo_rx_ops = &psoc->soc_cb.rx_ops.pmo_rx_ops; - if (!pmo_rx_ops->lphb_rsp_event) { - target_if_err("lphb_rsp_event is NULL"); - qdf_status = QDF_STATUS_E_INVAL; - goto out; - } - - hb_fp = (wmi_hb_ind_event_fixed_param *) event; - if (!hb_fp) { - pmo_err("Invalid wmi_hb_ind_event_fixed_param buffer"); - qdf_status = QDF_STATUS_E_INVAL; - goto out; - } - - pmo_debug("lphb indication received with\n" - "vdev_id=%d, session=%d, reason=%d", - hb_fp->vdev_id, hb_fp->session, hb_fp->reason); - - slphb_indication = (struct pmo_lphb_rsp *)qdf_mem_malloc( - sizeof(struct pmo_lphb_rsp)); - - if (!slphb_indication) { - target_if_err("Invalid LPHB indication buffer"); - qdf_status = QDF_STATUS_E_NOMEM; - goto out; - } - - slphb_indication->session_idx = hb_fp->session; - slphb_indication->protocol_type = hb_fp->reason; - slphb_indication->event_reason = hb_fp->reason; - - qdf_status = pmo_rx_ops->lphb_rsp_event(psoc, slphb_indication); - if (qdf_status != QDF_STATUS_SUCCESS) - target_if_err("Failed to lphb_rsp_event"); -out: - if (slphb_indication) - qdf_mem_free(slphb_indication); - - return qdf_status; -} -#endif - diff --git a/target_if/pmo/src/target_if_pmo_main.c b/target_if/pmo/src/target_if_pmo_main.c deleted file mode 100644 index c6e9fe911b..0000000000 --- a/target_if/pmo/src/target_if_pmo_main.c +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -/** - * DOC: Target interface file for pmo component to - * Implement api's which shall be used by pmo component - * in target if internally. - */ - -#include "target_if_pmo.h" -#include "target_if_pmo_main.h" - -void target_if_pmo_register_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops) -{ - struct wlan_lmac_if_pmo_tx_ops *pmo_tx_ops; - - if (!tx_ops) { - target_if_err("lmac tx_ops is null"); - return; - } - - pmo_tx_ops = &tx_ops->pmo_tx_ops; - pmo_tx_ops->send_arp_offload_req = - target_if_pmo_send_arp_offload_req; - pmo_tx_ops->send_conf_hw_filter_req = - target_if_pmo_conf_hw_filter; - pmo_tx_ops->send_ns_offload_req = - target_if_pmo_send_ns_offload_req; - pmo_tx_ops->send_enable_wow_wakeup_event_req = - target_if_pmo_enable_wow_wakeup_event; - pmo_tx_ops->send_disable_wow_wakeup_event_req = - target_if_pmo_disable_wow_wakeup_event; - pmo_tx_ops->send_add_wow_pattern = - target_if_pmo_send_wow_patterns_to_fw; - pmo_tx_ops->send_enhance_mc_offload_req = - target_if_pmo_send_enhance_mc_offload_req; - pmo_tx_ops->send_set_mc_filter_req = - target_if_pmo_set_mc_filter_req; - pmo_tx_ops->send_clear_mc_filter_req = - target_if_pmo_clear_mc_filter_req; - pmo_tx_ops->send_ra_filter_req = - target_if_pmo_send_ra_filter_req; - pmo_tx_ops->send_gtk_offload_req = - target_if_pmo_send_gtk_offload_req; - pmo_tx_ops->send_get_gtk_rsp_cmd = - target_if_pmo_send_gtk_response_req; - pmo_tx_ops->send_action_frame_pattern_req = - target_if_pmo_send_action_frame_patterns; - pmo_tx_ops->send_lphb_enable = - target_if_pmo_send_lphb_enable; - pmo_tx_ops->send_lphb_tcp_params = - target_if_pmo_send_lphb_tcp_params; - pmo_tx_ops->send_lphb_tcp_filter_req = - target_if_pmo_send_lphb_tcp_pkt_filter; - pmo_tx_ops->send_lphb_upd_params = - target_if_pmo_send_lphb_udp_params; - pmo_tx_ops->send_lphb_udp_filter_req = - target_if_pmo_send_lphb_udp_pkt_filter; - pmo_tx_ops->send_vdev_param_update_req = - target_if_pmo_send_vdev_update_param_req; - pmo_tx_ops->send_vdev_sta_ps_param_req = - target_if_pmo_send_vdev_ps_param_req; - pmo_tx_ops->psoc_update_wow_bus_suspend = - target_if_pmo_psoc_update_bus_suspend; - pmo_tx_ops->psoc_get_host_credits = - target_if_pmo_psoc_get_host_credits; - pmo_tx_ops->psoc_get_pending_cmnds = - target_if_pmo_psoc_get_pending_cmnds; - pmo_tx_ops->update_target_suspend_flag = - target_if_pmo_update_target_suspend_flag; - pmo_tx_ops->psoc_send_wow_enable_req = - target_if_pmo_psoc_send_wow_enable_req; - pmo_tx_ops->psoc_send_supend_req = - target_if_pmo_psoc_send_suspend_req; - pmo_tx_ops->psoc_set_runtime_pm_in_progress = - target_if_pmo_set_runtime_pm_in_progress; - pmo_tx_ops->psoc_get_runtime_pm_in_progress = - target_if_pmo_get_runtime_pm_in_progress; - pmo_tx_ops->psoc_send_host_wakeup_ind = - target_if_pmo_psoc_send_host_wakeup_ind; - pmo_tx_ops->psoc_send_target_resume_req = - target_if_pmo_psoc_send_target_resume_req; - pmo_tx_ops->send_set_pkt_filter = - target_if_pmo_send_pkt_filter_req; - pmo_tx_ops->send_clear_pkt_filter = - target_if_pmo_clear_pkt_filter_req; - -} - diff --git a/target_if/pmo/src/target_if_pmo_mc_addr_filtering.c b/target_if/pmo/src/target_if_pmo_mc_addr_filtering.c deleted file mode 100644 index bd3b29b8ae..0000000000 --- a/target_if/pmo/src/target_if_pmo_mc_addr_filtering.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -/** - * DOC: target_if_pmo_mc_addr_filtering.c - * - * Target interface file for pmo component to - * send mc address filtering offload related cmd and process event. - */ - - -#include "target_if.h" -#include "target_if_pmo.h" -#include "wmi_unified_api.h" - -QDF_STATUS target_if_pmo_set_mc_filter_req( - struct wlan_objmgr_vdev *vdev, - struct qdf_mac_addr multicast_addr) -{ - uint8_t vdev_id; - struct wlan_objmgr_psoc *psoc; - QDF_STATUS status; - - if (!vdev) { - target_if_err("vdev ptr passed is NULL"); - return QDF_STATUS_E_INVAL; - } - - psoc = wlan_vdev_get_psoc(vdev); - vdev_id = wlan_vdev_get_id(vdev); - if (!psoc) { - target_if_err("psoc handle is NULL"); - return QDF_STATUS_E_INVAL; - } - - status = wmi_unified_add_clear_mcbc_filter_cmd( - GET_WMI_HDL_FROM_PSOC(psoc), - vdev_id, - multicast_addr, false); - if (status) - target_if_err("Failed to send add/clear mcbc filter cmd"); - - return status; -} - -QDF_STATUS target_if_pmo_clear_mc_filter_req( - struct wlan_objmgr_vdev *vdev, - struct qdf_mac_addr multicast_addr) -{ - uint8_t vdev_id; - struct wlan_objmgr_psoc *psoc; - QDF_STATUS status; - - if (!vdev) { - target_if_err("vdev ptr passed is NULL"); - return QDF_STATUS_E_INVAL; - } - - psoc = wlan_vdev_get_psoc(vdev); - vdev_id = wlan_vdev_get_id(vdev); - if (!psoc) { - target_if_err("psoc handle is NULL"); - return QDF_STATUS_E_INVAL; - } - - status = wmi_unified_add_clear_mcbc_filter_cmd( - GET_WMI_HDL_FROM_PSOC(psoc), - vdev_id, - multicast_addr, true); - if (status) - target_if_err("Failed to send add/clear mcbc filter cmd"); - - return status; - -} - - diff --git a/target_if/pmo/src/target_if_pmo_ns.c b/target_if/pmo/src/target_if_pmo_ns.c deleted file mode 100644 index 6b2946b88f..0000000000 --- a/target_if/pmo/src/target_if_pmo_ns.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -/** - * DOC: target_if_pmo_ns.c - * - * Target interface file for pmo component to - * send ns offload related cmd and process event. - */ - -#include "target_if.h" -#include "target_if_pmo.h" -#include "wmi_unified_api.h" - -QDF_STATUS target_if_pmo_send_ns_offload_req( - struct wlan_objmgr_vdev *vdev, - struct pmo_arp_offload_params *arp_offload_req, - struct pmo_ns_offload_params *ns_offload_req) -{ - uint8_t vdev_id; - struct wlan_objmgr_psoc *psoc; - QDF_STATUS status; - - if (!vdev) { - target_if_err("vdev ptr passed is NULL"); - return QDF_STATUS_E_INVAL; - } - - psoc = wlan_vdev_get_psoc(vdev); - vdev_id = wlan_vdev_get_id(vdev); - if (!psoc) { - target_if_err("psoc handle is NULL"); - return QDF_STATUS_E_INVAL; - } - - status = wmi_unified_enable_arp_ns_offload_cmd( - GET_WMI_HDL_FROM_PSOC(psoc), - arp_offload_req, - ns_offload_req, - vdev_id); - if (status != QDF_STATUS_SUCCESS) - target_if_err("Failed to enable ARP NDP/NSffload"); - - return status; -} - diff --git a/target_if/pmo/src/target_if_pmo_pkt_filter.c b/target_if/pmo/src/target_if_pmo_pkt_filter.c deleted file mode 100644 index 7907c7a0a0..0000000000 --- a/target_if/pmo/src/target_if_pmo_pkt_filter.c +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -/** - * DOC: target_if_pmo_pkt_filter.c - * - * Target interface file for pmo component to - * send packet filter related cmd and process event. - */ - -#include "target_if.h" -#include "target_if_pmo.h" -#include "wmi_unified_pmo_api.h" -#include "wlan_pmo_pkt_filter_public_struct.h" - -QDF_STATUS target_if_pmo_send_pkt_filter_req(struct wlan_objmgr_vdev *vdev, - struct pmo_rcv_pkt_fltr_cfg *rcv_filter_param) -{ - uint8_t vdev_id; - struct wlan_objmgr_psoc *psoc; - QDF_STATUS status; - - if (!vdev) { - target_if_err("vdev ptr passed is NULL"); - return QDF_STATUS_E_INVAL; - } - - psoc = wlan_vdev_get_psoc(vdev); - vdev_id = wlan_vdev_get_id(vdev); - if (!psoc) { - target_if_err("psoc handle is NULL"); - return QDF_STATUS_E_INVAL; - } - - /* send the command along with data */ - status = wmi_unified_config_packet_filter_cmd( - GET_WMI_HDL_FROM_PSOC(psoc), vdev_id, - rcv_filter_param, - rcv_filter_param->filter_id, true); - if (status) { - target_if_err("Failed to send pkt_filter cmd"); - return QDF_STATUS_E_INVAL; - } - - /* Enable packet filter */ - status = wmi_unified_enable_disable_packet_filter_cmd( - GET_WMI_HDL_FROM_PSOC(psoc), - vdev_id, true); - if (status) - target_if_err("Failed to send packet filter wmi cmd to fw"); - - return status; -} - -QDF_STATUS target_if_pmo_clear_pkt_filter_req(struct wlan_objmgr_vdev *vdev, - struct pmo_rcv_pkt_fltr_clear_param *rcv_clear_param) -{ - uint8_t vdev_id; - struct wlan_objmgr_psoc *psoc; - QDF_STATUS status; - - if (!vdev) { - target_if_err("vdev ptr passed is NULL"); - return QDF_STATUS_E_INVAL; - } - - psoc = wlan_vdev_get_psoc(vdev); - vdev_id = wlan_vdev_get_id(vdev); - if (!psoc) { - target_if_err("psoc handle is NULL"); - return QDF_STATUS_E_INVAL; - } - - /* send the command along with data */ - status = wmi_unified_config_packet_filter_cmd( - GET_WMI_HDL_FROM_PSOC(psoc), vdev_id, - NULL, rcv_clear_param->filter_id, false); - - if (status) - target_if_err("Failed to clear filter cmd"); - - return status; -} diff --git a/target_if/pmo/src/target_if_pmo_static_config.c b/target_if/pmo/src/target_if_pmo_static_config.c deleted file mode 100644 index 8207e361dd..0000000000 --- a/target_if/pmo/src/target_if_pmo_static_config.c +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -/** - * DOC: target_if_pmo_static.c - * - * Target interface file for pmo component to - * send wow related cmd and process event. - */ - - -#include "target_if.h" -#include "target_if_pmo.h" -#include "wmi_unified_api.h" - -QDF_STATUS target_if_pmo_send_ra_filter_req(struct wlan_objmgr_vdev *vdev, - uint8_t default_pattern, uint16_t rate_limit_interval) -{ - uint8_t vdev_id; - struct wlan_objmgr_psoc *psoc; - QDF_STATUS status; - - if (!vdev) { - target_if_err("vdev ptr passed is NULL"); - return QDF_STATUS_E_INVAL; - } - - psoc = wlan_vdev_get_psoc(vdev); - vdev_id = wlan_vdev_get_id(vdev); - if (!psoc) { - target_if_err("psoc handle is NULL"); - return QDF_STATUS_E_INVAL; - } - - status = wmi_unified_wow_sta_ra_filter_cmd( - GET_WMI_HDL_FROM_PSOC(psoc), vdev_id, - default_pattern, rate_limit_interval); - if (status) - target_if_err("Failed to send RA rate limit to fw"); - - return status; -} - -QDF_STATUS target_if_pmo_send_action_frame_patterns( - struct wlan_objmgr_vdev *vdev, - struct pmo_action_wakeup_set_params *ip_cmd) -{ - uint8_t vdev_id; - struct wlan_objmgr_psoc *psoc; - QDF_STATUS status; - - if (!vdev) { - target_if_err("vdev ptr passed is NULL"); - return QDF_STATUS_E_INVAL; - } - - psoc = wlan_vdev_get_psoc(vdev); - vdev_id = wlan_vdev_get_id(vdev); - if (!psoc) { - target_if_err("psoc handle is NULL"); - return QDF_STATUS_E_INVAL; - } - - status = wmi_unified_action_frame_patterns_cmd( - GET_WMI_HDL_FROM_PSOC(psoc), ip_cmd); - if (status != QDF_STATUS_SUCCESS) - target_if_err("Failed to config wow action frame map, ret %d", - status); - - return status; -} - -QDF_STATUS target_if_pmo_send_enhance_mc_offload_req( - struct wlan_objmgr_vdev *vdev, bool enable) -{ - uint8_t vdev_id; - struct wlan_objmgr_psoc *psoc; - QDF_STATUS status; - - if (!vdev) { - target_if_err("vdev ptr passed is NULL"); - return QDF_STATUS_E_INVAL; - } - - psoc = wlan_vdev_get_psoc(vdev); - vdev_id = wlan_vdev_get_id(vdev); - if (!psoc) { - target_if_err("psoc handle is NULL"); - return QDF_STATUS_E_INVAL; - } - - status = wmi_unified_enable_enhance_multicast_offload_cmd( - GET_WMI_HDL_FROM_PSOC(psoc), vdev_id, enable); - if (status) - target_if_err("Failed to config wow wakeup event"); - - return status; -} - diff --git a/target_if/pmo/src/target_if_pmo_suspend_resume.c b/target_if/pmo/src/target_if_pmo_suspend_resume.c deleted file mode 100644 index fbbd638d89..0000000000 --- a/target_if/pmo/src/target_if_pmo_suspend_resume.c +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -/** - * DOC: target_if_pmo_static.c - * - * Target interface file for pmo component to - * send suspend / resume related cmd and process event. - */ - - -#include "target_if.h" -#include "target_if_pmo.h" -#include "wmi_unified_api.h" - -#define TGT_WILDCARD_PDEV_ID 0x0 - -QDF_STATUS target_if_pmo_send_vdev_update_param_req( - struct wlan_objmgr_vdev *vdev, - uint32_t param_id, uint32_t param_value) -{ - uint8_t vdev_id; - struct wlan_objmgr_psoc *psoc; - struct vdev_set_params param = {0}; - - if (!vdev) { - target_if_err("vdev ptr passed is NULL"); - return QDF_STATUS_E_INVAL; - } - - psoc = wlan_vdev_get_psoc(vdev); - vdev_id = wlan_vdev_get_id(vdev); - if (!psoc) { - target_if_err("psoc handle is NULL"); - return QDF_STATUS_E_INVAL; - } - - switch (param_id) { - case pmo_vdev_param_listen_interval: - param_id = WMI_VDEV_PARAM_LISTEN_INTERVAL; - break; - case pmo_vdev_param_dtim_policy: - param_id = WMI_VDEV_PARAM_DTIM_POLICY; - break; - default: - target_if_err("invalid vdev param id %d", param_id); - return QDF_STATUS_E_INVAL; - } - - param.if_id = vdev_id; - param.param_id = param_id; - param.param_value = param_value; - target_if_info("set vdev param vdev_id: %d value: %d for param_id: %d", - vdev_id, param_value, param_id); - return wmi_unified_vdev_set_param_send(GET_WMI_HDL_FROM_PSOC(psoc), - ¶m); -} - -QDF_STATUS target_if_pmo_send_vdev_ps_param_req( - struct wlan_objmgr_vdev *vdev, - uint32_t param_id, - uint32_t param_value) -{ - uint8_t vdev_id; - struct wlan_objmgr_psoc *psoc; - QDF_STATUS status; - struct sta_ps_params sta_ps_param = {0}; - - if (!vdev) { - target_if_err("vdev ptr passed is NULL"); - return QDF_STATUS_E_INVAL; - } - - psoc = wlan_vdev_get_psoc(vdev); - vdev_id = wlan_vdev_get_id(vdev); - if (!psoc) { - target_if_err("psoc handle is NULL"); - return QDF_STATUS_E_INVAL; - } - - switch (param_id) { - case pmo_sta_ps_enable_qpower: - param_id = WMI_STA_PS_ENABLE_QPOWER; - break; - default: - target_if_err("invalid vdev param id %d", param_id); - return QDF_STATUS_E_INVAL; - } - - sta_ps_param.vdev_id = vdev_id; - sta_ps_param.param = param_id; - sta_ps_param.value = param_value; - target_if_info("set vdev param vdev_id: %d value: %d for param_id: %d", - vdev_id, param_value, param_id); - - status = wmi_unified_sta_ps_cmd_send(GET_WMI_HDL_FROM_PSOC(psoc), - &sta_ps_param); - if (QDF_IS_STATUS_ERROR(status)) - return status; - - return status; - -} - -void target_if_pmo_psoc_update_bus_suspend(struct wlan_objmgr_psoc *psoc, - uint8_t value) -{ - wmi_set_is_wow_bus_suspended(GET_WMI_HDL_FROM_PSOC(psoc), value); -} - -int target_if_pmo_psoc_get_host_credits(struct wlan_objmgr_psoc *psoc) -{ - return wmi_get_host_credits(GET_WMI_HDL_FROM_PSOC(psoc)); -} - -int target_if_pmo_psoc_get_pending_cmnds(struct wlan_objmgr_psoc *psoc) -{ - return wmi_get_pending_cmds(GET_WMI_HDL_FROM_PSOC(psoc)); -} - -void target_if_pmo_update_target_suspend_flag(struct wlan_objmgr_psoc *psoc, - uint8_t value) -{ - wmi_set_target_suspend(GET_WMI_HDL_FROM_PSOC(psoc), value); -} - -QDF_STATUS target_if_pmo_psoc_send_wow_enable_req( - struct wlan_objmgr_psoc *psoc, - struct pmo_wow_cmd_params *param) -{ - return wmi_unified_wow_enable_send(GET_WMI_HDL_FROM_PSOC(psoc), - (struct wow_cmd_params *)param, - TGT_WILDCARD_PDEV_ID); -} - -QDF_STATUS target_if_pmo_psoc_send_suspend_req( - struct wlan_objmgr_psoc *psoc, - struct pmo_suspend_params *param) -{ - return wmi_unified_suspend_send(GET_WMI_HDL_FROM_PSOC(psoc), - (struct suspend_params *) param, - TGT_WILDCARD_PDEV_ID); -} - -void target_if_pmo_set_runtime_pm_in_progress(struct wlan_objmgr_psoc *psoc, - bool value) -{ - return wmi_set_runtime_pm_inprogress(GET_WMI_HDL_FROM_PSOC(psoc), - value); -} - -bool target_if_pmo_get_runtime_pm_in_progress( - struct wlan_objmgr_psoc *psoc) -{ - return wmi_get_runtime_pm_inprogress(GET_WMI_HDL_FROM_PSOC(psoc)); -} - -QDF_STATUS target_if_pmo_psoc_send_host_wakeup_ind( - struct wlan_objmgr_psoc *psoc) -{ - return wmi_unified_host_wakeup_ind_to_fw_cmd( - GET_WMI_HDL_FROM_PSOC(psoc)); -} - -QDF_STATUS target_if_pmo_psoc_send_target_resume_req( - struct wlan_objmgr_psoc *psoc) -{ - return wmi_unified_resume_send(GET_WMI_HDL_FROM_PSOC(psoc), - TGT_WILDCARD_PDEV_ID); -} - diff --git a/target_if/pmo/src/target_if_pmo_wow.c b/target_if/pmo/src/target_if_pmo_wow.c deleted file mode 100644 index 828f0cf26e..0000000000 --- a/target_if/pmo/src/target_if_pmo_wow.c +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -/** - * DOC: target_if_pmo_wow.c - * - * Target interface file for pmo component to - * send wow related cmd and process event. - */ - - -#include "target_if.h" -#include "target_if_pmo.h" -#include "wmi_unified_api.h" - -QDF_STATUS target_if_pmo_enable_wow_wakeup_event(struct wlan_objmgr_vdev *vdev, - uint32_t *bitmap) -{ - uint8_t vdev_id; - struct wlan_objmgr_psoc *psoc; - QDF_STATUS status; - - if (!vdev) { - target_if_err("vdev ptr passed is NULL"); - return QDF_STATUS_E_INVAL; - } - - psoc = wlan_vdev_get_psoc(vdev); - vdev_id = wlan_vdev_get_id(vdev); - if (!psoc) { - target_if_err("psoc handle is NULL"); - return QDF_STATUS_E_INVAL; - } - - status = wmi_unified_add_wow_wakeup_event_cmd( - GET_WMI_HDL_FROM_PSOC(psoc), vdev_id, bitmap, true); - if (status) - target_if_err("Failed to config wow wakeup event"); - - return status; -} - -QDF_STATUS target_if_pmo_disable_wow_wakeup_event(struct wlan_objmgr_vdev *vdev, - uint32_t *bitmap) -{ - uint8_t vdev_id; - struct wlan_objmgr_psoc *psoc; - QDF_STATUS status; - - if (!vdev) { - target_if_err("vdev ptr passed is NULL"); - return QDF_STATUS_E_INVAL; - } - - psoc = wlan_vdev_get_psoc(vdev); - vdev_id = wlan_vdev_get_id(vdev); - if (!psoc) { - target_if_err("psoc handle is NULL"); - return QDF_STATUS_E_INVAL; - } - - status = wmi_unified_add_wow_wakeup_event_cmd( - GET_WMI_HDL_FROM_PSOC(psoc), vdev_id, bitmap, false); - if (status) - target_if_err("Failed to config wow wakeup event"); - - return status; -} - -QDF_STATUS target_if_pmo_send_wow_patterns_to_fw(struct wlan_objmgr_vdev *vdev, - uint8_t ptrn_id, - const uint8_t *ptrn, uint8_t ptrn_len, - uint8_t ptrn_offset, const uint8_t *mask, - uint8_t mask_len, bool user) -{ - uint8_t vdev_id; - struct wlan_objmgr_psoc *psoc; - QDF_STATUS status; - - if (!vdev) { - target_if_err("vdev ptr passed is NULL"); - return QDF_STATUS_E_INVAL; - } - - psoc = wlan_vdev_get_psoc(vdev); - vdev_id = wlan_vdev_get_id(vdev); - if (!psoc) { - target_if_err("psoc handle is NULL"); - return QDF_STATUS_E_INVAL; - } - - status = wmi_unified_wow_patterns_to_fw_cmd( - GET_WMI_HDL_FROM_PSOC(psoc), - vdev_id, ptrn_id, ptrn, - ptrn_len, ptrn_offset, mask, - mask_len, user, 0); - - return status; -} - diff --git a/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h b/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h index 217df2f506..e6b713defe 100644 --- a/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h +++ b/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h @@ -46,10 +46,6 @@ #include "wlan_crypto_global_def.h" #endif -#ifdef WLAN_PMO_ENABLE -#include "wlan_pmo_hw_filter_public_struct.h" -#endif - /* Number of dev type: Direct attach and Offload */ #define MAX_DEV_TYPE 2 @@ -130,147 +126,6 @@ struct wlan_lmac_if_scan_rx_ops { uint32_t max_active_scans); }; -#ifdef WLAN_PMO_ENABLE - -/* fwd declarations for pmo tx ops */ -struct pmo_arp_offload_params; -struct pmo_ns_offload_params; -struct pmo_bcast_filter_params; -struct pmo_gtk_req; -struct pmo_action_wakeup_set_params; -struct pmo_lphb_enable_req; -struct pmo_lphb_tcp_params; -struct pmo_lphb_tcp_filter_req; -struct pmo_lphb_udp_params; -struct pmo_lphb_udp_filter_req; -struct pmo_wow_cmd_params; -struct pmo_suspend_params; -struct pmo_rcv_pkt_fltr_cfg; -struct pmo_rcv_pkt_fltr_clear_param; - -/** - * struct wlan_lmac_if_pmo_tx_ops - structure of tx function - * pointers for pmo component - * @send_arp_offload_req: fp to send arp offload request - * @send_ns_offload_req: fp to send ns offload request - * @send_non_arp_bcast_filter_req: for enable/disable broadcast filter - * @send_set_pkt_filter: send set packet filter - * @send_clear_pkt_filter: send clear packet filter - * @send_enable_wakeup_event_req: fp to send enable wow wakeup events req - * @send_disable_wakeup_event_req: fp to send disable wow wakeup events req - * @send_add_wow_pattern: fp to send wow pattern request - * @send_enhance_mc_offload_req: fp to send enhanced multicast offload request - * @send_set_mc_filter_req: fp to send set mc filter request - * @send_clear_mc_filter_req: fp to send clear mc filter request - * @send_ra_filter_req: fp to send ra filter request - * @send_gtk_offload_req: fp to send gtk offload request command - * @send_get_gtk_rsp_cmd: fp to send get gtk response request cmd to firmware - * @send_action_frame_pattern_req: fp to send wow action frame patterns request - * @send_lphb_enable: fp to send lphb enable request command - * @send_lphb_tcp_params: fp to send lphb tcp params request command - * @send_lphb_tcp_filter_req: fp to send lphb tcp packet filter request command - * @send_lphb_upd_params: fp to send lphb udp params request command - * @send_lphb_udp_filter_req: fp to send lphb udp packet filter request command - * @send_vdev_param_update_req: fp to send vdev param request - * @send_vdev_set_sta_ps_param: fp to send sta vdev ps power set req - * @psoc_update_wow_bus_suspend: fp to update bus suspend req flag at wmi - * @psoc_get_host_credits: fp to get the host credits - * @psoc_get_pending_cmnds: fp to get the host pending wmi commands - * @update_target_suspend_flag: fp to update target suspend flag at wmi - * @psoc_send_wow_enable_req: fp to send wow enable request - * @psoc_send_supend_req: fp to send target suspend request - * @psoc_set_runtime_pm_in_progress: fp to set runtime pm is in progress status - * @psoc_get_runtime_pm_in_progress: fp to get runtime pm is in progress status - * @psoc_send_host_wakeup_ind: fp tp send host wake indication to fwr - * @psoc_send_target_resume_req: fp to send target resume request - */ -struct wlan_lmac_if_pmo_tx_ops { - QDF_STATUS (*send_arp_offload_req)(struct wlan_objmgr_vdev *vdev, - struct pmo_arp_offload_params *arp_offload_req, - struct pmo_ns_offload_params *ns_offload_req); - QDF_STATUS (*send_conf_hw_filter_req)( - struct wlan_objmgr_psoc *psoc, - struct pmo_hw_filter_params *req); - QDF_STATUS (*send_ns_offload_req)(struct wlan_objmgr_vdev *vdev, - struct pmo_arp_offload_params *arp_offload_req, - struct pmo_ns_offload_params *ns_offload_req); - QDF_STATUS(*send_set_pkt_filter)(struct wlan_objmgr_vdev *vdev, - struct pmo_rcv_pkt_fltr_cfg *pmo_set_pkt_fltr_req); - QDF_STATUS(*send_clear_pkt_filter)(struct wlan_objmgr_vdev *vdev, - struct pmo_rcv_pkt_fltr_clear_param - *pmo_clr_pkt_fltr_param); - QDF_STATUS (*send_enable_wow_wakeup_event_req)( - struct wlan_objmgr_vdev *vdev, - uint32_t *bitmap); - QDF_STATUS (*send_disable_wow_wakeup_event_req)( - struct wlan_objmgr_vdev *vdev, - uint32_t *bitmap); - QDF_STATUS (*send_add_wow_pattern)( - struct wlan_objmgr_vdev *vdev, - uint8_t ptrn_id, const uint8_t *ptrn, uint8_t ptrn_len, - uint8_t ptrn_offset, const uint8_t *mask, - uint8_t mask_len, bool user); - QDF_STATUS (*send_enhance_mc_offload_req)( - struct wlan_objmgr_vdev *vdev, bool enable); - QDF_STATUS (*send_set_mc_filter_req)( - struct wlan_objmgr_vdev *vdev, - struct qdf_mac_addr multicast_addr); - QDF_STATUS (*send_clear_mc_filter_req)( - struct wlan_objmgr_vdev *vdev, - struct qdf_mac_addr multicast_addr); - QDF_STATUS (*send_ra_filter_req)( - struct wlan_objmgr_vdev *vdev, - uint8_t default_pattern, uint16_t rate_limit_interval); - QDF_STATUS (*send_gtk_offload_req)( - struct wlan_objmgr_vdev *vdev, - struct pmo_gtk_req *gtk_offload_req); - QDF_STATUS (*send_get_gtk_rsp_cmd)(struct wlan_objmgr_vdev *vdev); - QDF_STATUS (*send_action_frame_pattern_req)( - struct wlan_objmgr_vdev *vdev, - struct pmo_action_wakeup_set_params *ip_cmd); - QDF_STATUS (*send_lphb_enable)( - struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_enable_req *ts_lphb_enable); - QDF_STATUS (*send_lphb_tcp_params)( - struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_tcp_params *ts_lphb_tcp_param); - QDF_STATUS (*send_lphb_tcp_filter_req)( - struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_tcp_filter_req *ts_lphb_tcp_filter); - QDF_STATUS (*send_lphb_upd_params)( - struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_udp_params *ts_lphb_udp_param); - QDF_STATUS (*send_lphb_udp_filter_req)( - struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_udp_filter_req *ts_lphb_udp_filter); - QDF_STATUS (*send_vdev_param_update_req)( - struct wlan_objmgr_vdev *vdev, - uint32_t param_id, uint32_t param_value); - QDF_STATUS (*send_vdev_sta_ps_param_req)( - struct wlan_objmgr_vdev *vdev, - uint32_t ps_mode, uint32_t value); - void (*psoc_update_wow_bus_suspend)( - struct wlan_objmgr_psoc *psoc, uint8_t value); - int (*psoc_get_host_credits)( - struct wlan_objmgr_psoc *psoc); - int (*psoc_get_pending_cmnds)( - struct wlan_objmgr_psoc *psoc); - void (*update_target_suspend_flag)( - struct wlan_objmgr_psoc *psoc, uint8_t value); - QDF_STATUS (*psoc_send_wow_enable_req)(struct wlan_objmgr_psoc *psoc, - struct pmo_wow_cmd_params *param); - QDF_STATUS (*psoc_send_supend_req)(struct wlan_objmgr_psoc *psoc, - struct pmo_suspend_params *param); - void (*psoc_set_runtime_pm_in_progress)(struct wlan_objmgr_psoc *psoc, - bool value); - bool (*psoc_get_runtime_pm_in_progress)(struct wlan_objmgr_psoc *psoc); - QDF_STATUS (*psoc_send_host_wakeup_ind)(struct wlan_objmgr_psoc *psoc); - QDF_STATUS (*psoc_send_target_resume_req)( - struct wlan_objmgr_psoc *psoc); - -}; -#endif - #ifdef CONVERGED_P2P_ENABLE /* forward declarations for p2p tx ops */ @@ -664,9 +519,6 @@ struct wlan_lmac_if_tx_ops { */ struct wlan_lmac_if_mgmt_txrx_tx_ops mgmt_txrx_tx_ops; struct wlan_lmac_if_scan_tx_ops scan; -#ifdef WLAN_PMO_ENABLE - struct wlan_lmac_if_pmo_tx_ops pmo_tx_ops; -#endif #ifdef CONVERGED_P2P_ENABLE struct wlan_lmac_if_p2p_tx_ops p2p; #endif @@ -734,25 +586,6 @@ struct wlan_lmac_if_mgmt_txrx_rx_ops { uint32_t desc_id); }; -#ifdef WLAN_PMO_ENABLE - -/* fwd declarations for pmo rx ops */ -struct pmo_gtk_rsp_params; -struct pmo_lphb_rsp; - -/** - * struct wlan_lmac_if_pmo_rx_ops - structure of rx function - * pointers for pmo component - * @gtk_rsp_event: function pointer to handle gtk rsp event from fwr - * @lphb_rsp_event: function pointer to handle lphb rsp event from fwr - */ -struct wlan_lmac_if_pmo_rx_ops { - QDF_STATUS(*rx_gtk_rsp_event)(struct wlan_objmgr_psoc *psoc, - struct pmo_gtk_rsp_params *rsp_param); - QDF_STATUS (*lphb_rsp_event)(struct wlan_objmgr_psoc *psoc, - struct pmo_lphb_rsp *rsp_param); -}; -#endif struct wlan_lmac_if_reg_rx_ops { QDF_STATUS (*master_list_handler)(struct cur_regulatory_info *reg_info); @@ -1108,9 +941,6 @@ struct wlan_lmac_if_rx_ops { */ struct wlan_lmac_if_mgmt_txrx_rx_ops mgmt_txrx_rx_ops; struct wlan_lmac_if_scan_rx_ops scan; -#ifdef WLAN_PMO_ENABLE - struct wlan_lmac_if_pmo_rx_ops pmo_rx_ops; -#endif #ifdef CONVERGED_P2P_ENABLE struct wlan_lmac_if_p2p_rx_ops p2p; #endif