diff --git a/umac/p2p/core/src/wlan_p2p_main.c b/umac/p2p/core/src/wlan_p2p_main.c index 2cf7a040914e..7263fd3a2349 100644 --- a/umac/p2p/core/src/wlan_p2p_main.c +++ b/umac/p2p/core/src/wlan_p2p_main.c @@ -36,10 +36,6 @@ #include "wlan_p2p_cfg.h" #include "cfg_ucfg_api.h" -#ifdef WLAN_POWER_MANAGEMENT_OFFLOAD -#include -#endif - /** * p2p_get_cmd_type_str() - parse cmd to string * @cmd_type: P2P cmd type @@ -571,133 +567,6 @@ static void wlan_p2p_init_connection_status( } #endif /* WLAN_FEATURE_P2P_DEBUG */ -#ifdef WLAN_POWER_MANAGEMENT_OFFLOAD - -/** - * p2p_suspend_handler() - suspend handler of P2P - * @psoc: pointer to psoc object - * @arg: pointer to input argument - * - * This function is suspend handler of P2P component. - * - * Return: QDF_STATUS_SUCCESS - in case of success - */ -static QDF_STATUS p2p_suspend_handler(struct wlan_objmgr_psoc *psoc, void *arg) -{ - struct p2p_soc_priv_obj *p2p_soc_obj; - - if (!psoc) { - p2p_err("psoc context passed is NULL"); - return QDF_STATUS_E_INVAL; - } - - p2p_soc_obj = wlan_objmgr_psoc_get_comp_private_obj(psoc, - WLAN_UMAC_COMP_P2P); - if (!p2p_soc_obj) { - p2p_err("P2P soc object is NULL"); - return QDF_STATUS_E_FAILURE; - } - - /* clean up queue of p2p psoc private object */ - p2p_cleanup_tx_sync(p2p_soc_obj, NULL); - p2p_cleanup_roc_sync(p2p_soc_obj, NULL); - - p2p_debug("handle suspend complete"); - - return QDF_STATUS_SUCCESS; -} - -/** - * p2p_resume_handler() - resume handler of P2P - * @psoc: pointer to psoc object - * @arg: pointer to input argument - * - * This function is resume handler of P2P component. - * - * Return: QDF_STATUS_SUCCESS - in case of success - */ -static QDF_STATUS p2p_resume_handler(struct wlan_objmgr_psoc *psoc, void *arg) -{ - p2p_debug("handle resume complete"); - - return QDF_STATUS_SUCCESS; -} - -/** - * p2p_register_pmo_handler() - register pmo handler - * - * This function registers pmo handler of P2P component. - * - * Return: QDF_STATUS_SUCCESS - in case of success - */ -static inline QDF_STATUS p2p_register_pmo_handler(void) -{ - QDF_STATUS status; - - status = pmo_register_suspend_handler(WLAN_UMAC_COMP_P2P, - p2p_suspend_handler, NULL); - if (status != QDF_STATUS_SUCCESS) { - p2p_err("Failed to register suspend handler"); - return status; - } - - status = pmo_register_resume_handler(WLAN_UMAC_COMP_P2P, - p2p_resume_handler, NULL); - if (status != QDF_STATUS_SUCCESS) { - p2p_err("Failed to register resume handler"); - pmo_unregister_suspend_handler(WLAN_UMAC_COMP_P2P, - p2p_suspend_handler); - return status; - } - - p2p_debug("Register pmo handler success"); - - return status; -} - -/** - * p2p_unregister_pmo_handler() - unregister pmo handler - * - * This function unregisters pmo handler of P2P component. - * - * Return: QDF_STATUS_SUCCESS - in case of success - */ -static inline QDF_STATUS p2p_unregister_pmo_handler(void) -{ - QDF_STATUS status; - QDF_STATUS ret_status = QDF_STATUS_SUCCESS; - - status = pmo_unregister_suspend_handler(WLAN_UMAC_COMP_P2P, - p2p_suspend_handler); - if (status != QDF_STATUS_SUCCESS) { - p2p_err("Failed to unregister suspend handler"); - ret_status = status; - } - - status = pmo_unregister_resume_handler(WLAN_UMAC_COMP_P2P, - p2p_resume_handler); - if (status != QDF_STATUS_SUCCESS) { - p2p_err("Failed to unregister resume handler"); - ret_status = status; - } - - p2p_debug("Unregister pmo handler complete"); - - return status; -} - -#else -static inline QDF_STATUS p2p_register_pmo_handler(void) -{ - return QDF_STATUS_SUCCESS; -} - -static inline QDF_STATUS p2p_unregister_pmo_handler(void) -{ - return QDF_STATUS_SUCCESS; -} -#endif /* End of WLAN_POWER_MANAGEMENT_OFFLOAD */ - QDF_STATUS p2p_component_init(void) { QDF_STATUS status; @@ -871,7 +740,6 @@ QDF_STATUS p2p_psoc_object_open(struct wlan_objmgr_psoc *soc) qdf_runtime_lock_init(&p2p_soc_obj->roc_runtime_lock); p2p_soc_obj->cur_roc_vdev_id = P2P_INVALID_VDEV_ID; qdf_idr_create(&p2p_soc_obj->p2p_idr); - p2p_register_pmo_handler(); p2p_debug("p2p psoc object open successful"); @@ -907,7 +775,6 @@ QDF_STATUS p2p_psoc_object_close(struct wlan_objmgr_psoc *soc) return QDF_STATUS_E_FAILURE; } - p2p_unregister_pmo_handler(); qdf_idr_destroy(&p2p_soc_obj->p2p_idr); qdf_runtime_lock_deinit(&p2p_soc_obj->roc_runtime_lock); qdf_event_destroy(&p2p_soc_obj->cleanup_tx_done); diff --git a/umac/p2p/dispatcher/inc/wlan_p2p_ucfg_api.h b/umac/p2p/dispatcher/inc/wlan_p2p_ucfg_api.h index 7ef8974a7993..25f0d532c876 100644 --- a/umac/p2p/dispatcher/inc/wlan_p2p_ucfg_api.h +++ b/umac/p2p/dispatcher/inc/wlan_p2p_ucfg_api.h @@ -200,14 +200,44 @@ QDF_STATUS ucfg_p2p_roc_cancel_req(struct wlan_objmgr_psoc *soc, uint64_t cookie); /** - * ucfg_p2p_cleanup_roc() - Cleanup roc request by vdev + * ucfg_p2p_cleanup_roc_by_vdev() - Cleanup roc request by vdev * @vdev: pointer to vdev object * - * This function call P2P API to cleanup roc request by vdev. + * This function call P2P API to cleanup roc request by vdev * * Return: QDF_STATUS_SUCCESS - in case of success */ -QDF_STATUS ucfg_p2p_cleanup_roc(struct wlan_objmgr_vdev *vdev); +QDF_STATUS ucfg_p2p_cleanup_roc_by_vdev(struct wlan_objmgr_vdev *vdev); + +/** + * ucfg_p2p_cleanup_roc_by_poc() - Cleanup roc request by psoc + * @psoc: pointer to psoc object + * + * This function call P2P API to cleanup roc request by psoc + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +QDF_STATUS ucfg_p2p_cleanup_roc_by_psoc(struct wlan_objmgr_psoc *psoc); + +/** + * ucfg_p2p_cleanup_tx_by_vdev() - Cleanup tx request by vdev + * @vdev: pointer to vdev object + * + * This function call P2P API to cleanup tx action frame request by vdev + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +QDF_STATUS ucfg_p2p_cleanup_tx_by_vdev(struct wlan_objmgr_vdev *vdev); + +/** + * ucfg_p2p_cleanup_tx_by_poc() - Cleanup tx request by psoc + * @psoc: pointer to psoc object + * + * This function call P2P API to cleanup tx action frame request by psoc + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +QDF_STATUS ucfg_p2p_cleanup_tx_by_psoc(struct wlan_objmgr_psoc *psoc); /** * ucfg_p2p_mgmt_tx() - Mgmt frame tx request diff --git a/umac/p2p/dispatcher/src/wlan_p2p_ucfg_api.c b/umac/p2p/dispatcher/src/wlan_p2p_ucfg_api.c index efa74baba9de..9581cfa89f95 100644 --- a/umac/p2p/dispatcher/src/wlan_p2p_ucfg_api.c +++ b/umac/p2p/dispatcher/src/wlan_p2p_ucfg_api.c @@ -209,7 +209,7 @@ QDF_STATUS ucfg_p2p_roc_cancel_req(struct wlan_objmgr_psoc *soc, return QDF_STATUS_SUCCESS; } -QDF_STATUS ucfg_p2p_cleanup_roc(struct wlan_objmgr_vdev *vdev) +QDF_STATUS ucfg_p2p_cleanup_roc_by_vdev(struct wlan_objmgr_vdev *vdev) { struct p2p_soc_priv_obj *p2p_soc_obj; struct wlan_objmgr_psoc *psoc; @@ -237,6 +237,67 @@ QDF_STATUS ucfg_p2p_cleanup_roc(struct wlan_objmgr_vdev *vdev) return p2p_cleanup_roc_sync(p2p_soc_obj, vdev); } +QDF_STATUS ucfg_p2p_cleanup_roc_by_psoc(struct wlan_objmgr_psoc *psoc) +{ + struct p2p_soc_priv_obj *obj; + + if (!psoc) { + p2p_err("null psoc"); + return QDF_STATUS_E_INVAL; + } + + obj = wlan_objmgr_psoc_get_comp_private_obj(psoc, WLAN_UMAC_COMP_P2P); + if (!obj) { + p2p_err("null p2p soc obj"); + return QDF_STATUS_E_FAILURE; + } + + return p2p_cleanup_roc_sync(obj, NULL); +} + +QDF_STATUS ucfg_p2p_cleanup_tx_by_vdev(struct wlan_objmgr_vdev *vdev) +{ + struct p2p_soc_priv_obj *obj; + struct wlan_objmgr_psoc *psoc; + + if (!vdev) { + p2p_err("null vdev"); + return QDF_STATUS_E_INVAL; + } + + psoc = wlan_vdev_get_psoc(vdev); + if (!psoc) { + p2p_err("null psoc"); + return QDF_STATUS_E_INVAL; + } + + obj = wlan_objmgr_psoc_get_comp_private_obj(psoc, WLAN_UMAC_COMP_P2P); + if (!obj) { + p2p_err("null p2p soc obj"); + return QDF_STATUS_E_FAILURE; + } + + return p2p_cleanup_tx_sync(obj, vdev); +} + +QDF_STATUS ucfg_p2p_cleanup_tx_by_psoc(struct wlan_objmgr_psoc *psoc) +{ + struct p2p_soc_priv_obj *obj; + + if (!psoc) { + p2p_err("null psoc"); + return QDF_STATUS_E_INVAL; + } + + obj = wlan_objmgr_psoc_get_comp_private_obj(psoc, WLAN_UMAC_COMP_P2P); + if (!obj) { + p2p_err("null p2p soc obj"); + return QDF_STATUS_E_FAILURE; + } + + return p2p_cleanup_tx_sync(obj, NULL); +} + QDF_STATUS ucfg_p2p_mgmt_tx(struct wlan_objmgr_psoc *soc, struct p2p_mgmt_tx *mgmt_frm, uint64_t *cookie) {