diff --git a/components/pmo/core/inc/wlan_pmo_priv.h b/components/pmo/core/inc/wlan_pmo_priv.h index cf9eb8fb245d..56ec12f67ebe 100644 --- a/components/pmo/core/inc/wlan_pmo_priv.h +++ b/components/pmo/core/inc/wlan_pmo_priv.h @@ -46,6 +46,7 @@ * @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 + * @get_cfg_int: register callback to get integer from cfg * @lock: spin lock for pmo psoc */ struct pmo_psoc_priv_obj { @@ -60,6 +61,7 @@ struct pmo_psoc_priv_obj { 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; + pmo_get_cfg_int get_cfg_int; qdf_spinlock_t lock; }; @@ -131,6 +133,15 @@ struct pmo_vdev_priv_obj { qdf_spinlock_t pmo_vdev_lock; }; +/** + * enum pmo_cfg_int_type: Mapping for Mac config param ID's + * @PMO_CFG_DTIM_PERIOD: CFG ID for Dtim Period value + * @PMO_CFG_LISTEN_INTERVAL: CFG ID for Listen Interval value + */ +enum pmo_cfg_int_type { + PMO_CFG_DTIM_PERIOD = 0x5, + PMO_CFG_LISTEN_INTERVAL = 0x26, +}; #endif /* WLAN_POWER_MANAGEMENT_OFFLOAD */ #endif /* end of _WLAN_PMO_PRIV_STRUCT_H_ */ diff --git a/components/pmo/dispatcher/inc/wlan_pmo_obj_mgmt_api.h b/components/pmo/dispatcher/inc/wlan_pmo_obj_mgmt_api.h index 7c64182bdb1e..393c5a176596 100644 --- a/components/pmo/dispatcher/inc/wlan_pmo_obj_mgmt_api.h +++ b/components/pmo/dispatcher/inc/wlan_pmo_obj_mgmt_api.h @@ -54,8 +54,8 @@ QDF_STATUS pmo_deinit(void); * * 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); +QDF_STATUS pmo_psoc_object_created_notification(struct wlan_objmgr_psoc *psoc, + void *arg); /** * pmo_psoc_object_destroyed_notification(): pmo psoc delete handler @@ -66,8 +66,8 @@ QDF_STATUS pmo_psoc_object_created_notification( * * 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); +QDF_STATUS pmo_psoc_object_destroyed_notification(struct wlan_objmgr_psoc *psoc, + void *arg); /** * pmo_vdev_object_created_notification(): pmo vdev create handler @@ -78,8 +78,8 @@ QDF_STATUS pmo_psoc_object_destroyed_notification( * * 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); +QDF_STATUS pmo_vdev_object_created_notification(struct wlan_objmgr_vdev *vdev, + void *arg); /** * pmo_vdev_ready() - handles vdev ready in firmware event @@ -102,8 +102,8 @@ QDF_STATUS pmo_vdev_ready(struct wlan_objmgr_vdev *vdev); * * 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); +QDF_STATUS pmo_vdev_object_destroyed_notification(struct wlan_objmgr_vdev *vdev, + void *arg); /** * pmo_register_suspend_handler(): register suspend handler for components @@ -113,10 +113,9 @@ QDF_STATUS pmo_vdev_object_destroyed_notification( * * 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); +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 @@ -125,9 +124,8 @@ QDF_STATUS pmo_register_suspend_handler( * * 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); +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 @@ -137,10 +135,9 @@ QDF_STATUS pmo_unregister_suspend_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); +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 @@ -149,9 +146,8 @@ QDF_STATUS pmo_register_resume_handler( * * 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); +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 @@ -161,7 +157,7 @@ QDF_STATUS pmo_unregister_resume_handler( * 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); + enum qdf_suspend_type suspend_type); /** * pmo_resume_all_components(): API to resume all component @@ -171,7 +167,7 @@ QDF_STATUS pmo_suspend_all_components(struct wlan_objmgr_psoc *psoc, * 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); + enum qdf_suspend_type suspend_type); /** * pmo_register_pause_bitmap_notifier(): API to register pause bitmap notifier @@ -180,20 +176,17 @@ QDF_STATUS pmo_resume_all_components(struct wlan_objmgr_psoc *psoc, * * 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); +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 + * 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); +QDF_STATUS pmo_unregister_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc); /** * pmo_register_get_pause_bitmap(): API to get register pause bitmap notifier @@ -203,17 +196,16 @@ QDF_STATUS pmo_unregister_pause_bitmap_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_get_pause_bitmap handler); /** - * pmo_unregister_get_pause_bitmap(): API to unregister get pause bitmap callback + * 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); +QDF_STATUS pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc); /** @@ -225,20 +217,40 @@ QDF_STATUS pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc, * 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_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); -#else +QDF_STATUS +pmo_unregister_is_device_in_low_pwr_mode(struct wlan_objmgr_psoc *psoc); + +/** + * pmo_register_get_cfg_int_callback(): API to register callback for getting + * cfg integer from mlme + * @psoc: objmgr psoc handle + * @handler: get cfg integer callback notifier + * + * Return QDF_STATUS status - in case of success else return error + */ +QDF_STATUS pmo_register_get_cfg_int_callback(struct wlan_objmgr_psoc *psoc, + pmo_get_cfg_int handler); + +/** + * pmo_unregister_get_cfg_int_callback(): API to unregister callback that gets + * cfg integer from mlme + * @psoc: objmgr psoc handle + * + * Return QDF_STATUS status - in case of success else return error + */ +QDF_STATUS pmo_unregister_get_cfg_int_callback(struct wlan_objmgr_psoc *psoc); + +#else /* WLAN_POWER_MANAGEMENT_OFFLOAD */ + static inline QDF_STATUS pmo_init(void) { return QDF_STATUS_SUCCESS; @@ -250,22 +262,19 @@ static inline QDF_STATUS pmo_deinit(void) } static inline QDF_STATUS -pmo_psoc_object_created_notification( - struct wlan_objmgr_psoc *psoc, void *arg) +pmo_psoc_object_created_notification(struct wlan_objmgr_psoc *psoc, void *arg) { return QDF_STATUS_SUCCESS; } static inline QDF_STATUS -pmo_psoc_object_destroyed_notification( - struct wlan_objmgr_psoc *psoc, void *arg) +pmo_psoc_object_destroyed_notification(struct wlan_objmgr_psoc *psoc, void *arg) { return QDF_STATUS_SUCCESS; } static inline QDF_STATUS -pmo_vdev_object_created_notification( - struct wlan_objmgr_vdev *vdev, void *arg) +pmo_vdev_object_created_notification(struct wlan_objmgr_vdev *vdev, void *arg) { return QDF_STATUS_SUCCESS; } @@ -277,106 +286,103 @@ pmo_vdev_ready(struct wlan_objmgr_vdev *vdev) } static inline QDF_STATUS -pmo_vdev_object_destroyed_notification( - struct wlan_objmgr_vdev *vdev, void *arg) +pmo_vdev_object_destroyed_notification(struct wlan_objmgr_vdev *vdev, void *arg) { return QDF_STATUS_SUCCESS; } static inline QDF_STATUS -pmo_register_suspend_handler( - enum wlan_umac_comp_id id, - pmo_psoc_suspend_handler handler, - void *arg) +pmo_register_suspend_handler(enum wlan_umac_comp_id id, + pmo_psoc_suspend_handler handler, + void *arg) { return QDF_STATUS_SUCCESS; } static inline QDF_STATUS -pmo_unregister_suspend_handler( - enum wlan_umac_comp_id id, - pmo_psoc_suspend_handler handler) +pmo_unregister_suspend_handler(enum wlan_umac_comp_id id, + pmo_psoc_suspend_handler handler) { return QDF_STATUS_SUCCESS; } static inline QDF_STATUS -pmo_register_resume_handler( - enum wlan_umac_comp_id id, - pmo_psoc_resume_handler handler, - void *arg) +pmo_register_resume_handler(enum wlan_umac_comp_id id, + pmo_psoc_resume_handler handler, + void *arg) { return QDF_STATUS_SUCCESS; } static inline QDF_STATUS -pmo_unregister_resume_handler( - enum wlan_umac_comp_id id, - pmo_psoc_resume_handler handler) +pmo_unregister_resume_handler(enum wlan_umac_comp_id id, + pmo_psoc_resume_handler handler) { return QDF_STATUS_SUCCESS; } static inline QDF_STATUS -pmo_suspend_all_components( - struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type suspend_type) +pmo_suspend_all_components(struct wlan_objmgr_psoc *psoc, + enum qdf_suspend_type suspend_type) { return QDF_STATUS_SUCCESS; } static inline QDF_STATUS -pmo_resume_all_components( - struct wlan_objmgr_psoc *psoc, - enum qdf_suspend_type suspend_type) +pmo_resume_all_components(struct wlan_objmgr_psoc *psoc, + enum qdf_suspend_type suspend_type) { return QDF_STATUS_SUCCESS; } static inline QDF_STATUS -pmo_register_pause_bitmap_notifier( - struct wlan_objmgr_psoc *psoc, - pmo_notify_pause_bitmap handler) +pmo_register_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc, + pmo_notify_pause_bitmap handler) { return QDF_STATUS_SUCCESS; } static inline QDF_STATUS -pmo_unregister_pause_bitmap_notifier( - struct wlan_objmgr_psoc *psoc, - pmo_notify_pause_bitmap handler) +pmo_unregister_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc) { return QDF_STATUS_SUCCESS; } static inline QDF_STATUS -pmo_register_get_pause_bitmap( - struct wlan_objmgr_psoc *psoc, - pmo_get_pause_bitmap handler) +pmo_register_get_pause_bitmap(struct wlan_objmgr_psoc *psoc, + pmo_get_pause_bitmap handler) { return QDF_STATUS_SUCCESS; } static inline QDF_STATUS -pmo_unregister_get_pause_bitmap( - struct wlan_objmgr_psoc *psoc, - pmo_get_pause_bitmap handler) +pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc) { return QDF_STATUS_SUCCESS; } static inline QDF_STATUS -pmo_register_is_device_in_low_pwr_mode( - struct wlan_objmgr_psoc *psoc, - pmo_is_device_in_low_pwr_mode handler) +pmo_register_is_device_in_low_pwr_mode(struct wlan_objmgr_psoc *psoc, + pmo_is_device_in_low_pwr_mode handler) { return QDF_STATUS_SUCCESS; } static inline QDF_STATUS -pmo_unregister_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(struct wlan_objmgr_psoc *psoc) +{ + return QDF_STATUS_SUCCESS; +} + +static inline QDF_STATUS +pmo_register_get_cfg_int_callback(struct wlan_objmgr_psoc *psoc, + pmo_get_cfg_int handler) +{ + return QDF_STATUS_SUCCESS; +} + +static inline QDF_STATUS +pmo_unregister_get_cfg_int_callback(struct wlan_objmgr_psoc *psoc) { return QDF_STATUS_SUCCESS; } diff --git a/components/pmo/dispatcher/inc/wlan_pmo_obj_mgmt_public_struct.h b/components/pmo/dispatcher/inc/wlan_pmo_obj_mgmt_public_struct.h index 9b37e79f58db..81dee367a7a6 100644 --- a/components/pmo/dispatcher/inc/wlan_pmo_obj_mgmt_public_struct.h +++ b/components/pmo/dispatcher/inc/wlan_pmo_obj_mgmt_public_struct.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2018 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 @@ -38,8 +38,12 @@ /** * 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 void (*pmo_notify_pause_bitmap)(uint8_t vdev_id, uint16_t value); + +/** + * typedef for getting cfg integer from mlme + */ +typedef QDF_STATUS (*pmo_get_cfg_int)(int cfg_id, int *value); /** * typedef for getting vdev pause bitmap @@ -54,14 +58,12 @@ typedef bool (*pmo_is_device_in_low_pwr_mode)(uint8_t vdev_id); /* * typedef for pld auto suspend callback during runtime suspend */ -typedef -int (*pmo_pld_auto_suspend_cb)(void); +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); +typedef int (*pmo_pld_auto_resume_cb)(void); /** * struct wlan_pmo_tx_ops - structure of tx function diff --git a/components/pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c b/components/pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c index 9e834b9938f1..714cb3ce09cd 100644 --- a/components/pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c +++ b/components/pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c @@ -606,8 +606,7 @@ QDF_STATUS pmo_register_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } -QDF_STATUS pmo_unregister_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc, - pmo_notify_pause_bitmap handler) +QDF_STATUS pmo_unregister_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc) { struct pmo_psoc_priv_obj *psoc_ctx; QDF_STATUS status; @@ -617,11 +616,6 @@ QDF_STATUS pmo_unregister_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc, 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"); @@ -629,8 +623,7 @@ QDF_STATUS pmo_unregister_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc, } pmo_psoc_with_ctx(psoc, psoc_ctx) { - if (psoc_ctx->pause_bitmap_notifier == handler) - psoc_ctx->pause_bitmap_notifier = NULL; + psoc_ctx->pause_bitmap_notifier = NULL; } pmo_psoc_put_ref(psoc); @@ -669,8 +662,7 @@ QDF_STATUS pmo_register_get_pause_bitmap(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } -QDF_STATUS pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc, - pmo_get_pause_bitmap handler) +QDF_STATUS pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc) { struct pmo_psoc_priv_obj *psoc_ctx; QDF_STATUS status; @@ -680,11 +672,6 @@ QDF_STATUS pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc, 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"); @@ -692,8 +679,7 @@ QDF_STATUS pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc, } pmo_psoc_with_ctx(psoc, psoc_ctx) { - if (psoc_ctx->get_pause_bitmap == handler) - psoc_ctx->get_pause_bitmap = NULL; + psoc_ctx->get_pause_bitmap = NULL; } pmo_psoc_put_ref(psoc); @@ -732,9 +718,8 @@ QDF_STATUS pmo_register_is_device_in_low_pwr_mode(struct wlan_objmgr_psoc *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) +QDF_STATUS +pmo_unregister_is_device_in_low_pwr_mode(struct wlan_objmgr_psoc *psoc) { struct pmo_psoc_priv_obj *psoc_ctx; QDF_STATUS status; @@ -744,11 +729,6 @@ QDF_STATUS pmo_unregister_is_device_in_low_pwr_mode( 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"); @@ -763,3 +743,59 @@ QDF_STATUS pmo_unregister_is_device_in_low_pwr_mode( return QDF_STATUS_SUCCESS; } + +QDF_STATUS pmo_register_get_cfg_int_callback(struct wlan_objmgr_psoc *psoc, + pmo_get_cfg_int 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_cfg_int 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; + } + + pmo_psoc_with_ctx(psoc, psoc_ctx) { + psoc_ctx->get_cfg_int = handler; + } + + pmo_psoc_put_ref(psoc); + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS pmo_unregister_get_cfg_int_callback(struct wlan_objmgr_psoc *psoc) +{ + struct pmo_psoc_priv_obj *psoc_ctx; + QDF_STATUS status; + + if (!psoc) { + pmo_err("psoc 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; + } + + pmo_psoc_with_ctx(psoc, psoc_ctx) { + psoc_ctx->get_cfg_int = NULL; + } + + pmo_psoc_put_ref(psoc); + + return QDF_STATUS_SUCCESS; +} diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h index bdfef0e0ea33..e0cdd1c12ea2 100644 --- a/core/wma/inc/wma.h +++ b/core/wma/inc/wma.h @@ -2384,6 +2384,35 @@ static inline bool wma_vdev_is_device_in_low_pwr_mode(uint8_t vdev_id) return iface->in_bmps || wma->in_imps; } +/** + * wma_vdev_get_cfg_int - Get cfg integer value + * @cfg_id: cfg item number + * @value: fill the out value + * + * Note caller must verify return status before using value + * + * Return: QDF_STATUS_SUCCESS when got item from cfg else QDF_STATUS_E_FAILURE + */ +static inline +QDF_STATUS wma_vdev_get_cfg_int(int cfg_id, int *value) +{ + struct sAniSirGlobal *mac = cds_get_context(QDF_MODULE_ID_PE); + /* set value to zero */ + *value = 0; + + if (!mac) { + WMA_LOGE("%s: Failed to get mac context!", __func__); + return QDF_STATUS_E_FAILURE; + } + + if (wlan_cfg_get_int(mac, cfg_id, value) != eSIR_SUCCESS) { + WMA_LOGE("%s: Can't get cfg_id :%d", __func__, cfg_id); + return QDF_STATUS_E_FAILURE; + } + + return QDF_STATUS_SUCCESS; +} + /** * wma_vdev_set_pause_bit() - Set a bit in vdev pause bitmap * @vdev_id: the Id of the vdev to configure diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index 729d2732695d..e552d5fd34ac 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -3534,6 +3534,8 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc, wma_vdev_get_pause_bitmap); pmo_register_is_device_in_low_pwr_mode(wma_handle->psoc, wma_vdev_is_device_in_low_pwr_mode); + pmo_register_get_cfg_int_callback(wma_handle->psoc, + wma_vdev_get_cfg_int); wma_cbacks.wma_get_connection_info = wma_get_connection_info; qdf_status = policy_mgr_register_wma_cb(wma_handle->psoc, &wma_cbacks); if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { @@ -4711,12 +4713,10 @@ QDF_STATUS wma_close(void) wma_handle->pdev = NULL; } - pmo_unregister_pause_bitmap_notifier(wma_handle->psoc, - wma_vdev_update_pause_bitmap); - pmo_unregister_get_pause_bitmap(wma_handle->psoc, - wma_vdev_get_pause_bitmap); - pmo_unregister_is_device_in_low_pwr_mode(wma_handle->psoc, - wma_vdev_is_device_in_low_pwr_mode); + pmo_unregister_get_cfg_int_callback(wma_handle->psoc); + pmo_unregister_is_device_in_low_pwr_mode(wma_handle->psoc); + pmo_unregister_get_pause_bitmap(wma_handle->psoc); + pmo_unregister_pause_bitmap_notifier(wma_handle->psoc); target_if_free_psoc_tgt_info(wma_handle->psoc); @@ -5622,6 +5622,33 @@ static void wma_set_component_caps(struct wlan_objmgr_psoc *psoc) wma_set_pmo_caps(psoc); } +#if defined(WLAN_FEATURE_GTK_OFFLOAD) && defined(WLAN_POWER_MANAGEMENT_OFFLOAD) +static QDF_STATUS wma_register_gtk_offload_event(tp_wma_handle wma_handle) +{ + QDF_STATUS status = QDF_STATUS_E_FAILURE; + + if (!wma_handle) { + WMA_LOGE("%s: wma_handle passed is NULL", __func__); + return QDF_STATUS_E_FAILURE; + } + + if (wmi_service_enabled(wma_handle->wmi_handle, + wmi_service_gtk_offload)) { + status = wmi_unified_register_event_handler( + wma_handle->wmi_handle, + wmi_gtk_offload_status_event_id, + target_if_pmo_gtk_offload_status_event, + WMA_RX_WORK_CTX); + } + return status; +} +#else +static QDF_STATUS wma_register_gtk_offload_event(tp_wma_handle wma_handle) +{ + return QDF_STATUS_SUCCESS; +} +#endif /* WLAN_FEATURE_GTK_OFFLOAD && WLAN_POWER_MANAGEMENT_OFFLOAD */ + /** * wma_rx_service_ready_event() - event handler to process * wmi rx sevice ready event. @@ -5830,19 +5857,11 @@ int wma_rx_service_ready_event(void *handle, uint8_t *cmd_param_info, WMA_LOGE("FW doesnot support WMI_SERVICE_MGMT_TX_WMI, Use HTT interface for Management Tx"); } -#ifdef WLAN_FEATURE_GTK_OFFLOAD - if (wmi_service_enabled(wmi_handle, wmi_service_gtk_offload)) { - status = wmi_unified_register_event_handler( - wma_handle->wmi_handle, - wmi_gtk_offload_status_event_id, - target_if_pmo_gtk_offload_status_event, - WMA_RX_WORK_CTX); - if (QDF_IS_STATUS_ERROR(status)) { - WMA_LOGE("Failed to register GTK offload event cb"); - goto free_hw_mode_list; - } + status = wma_register_gtk_offload_event(wma_handle); + if (QDF_IS_STATUS_ERROR(status)) { + WMA_LOGE("Failed to register GTK offload event cb"); + goto free_hw_mode_list; } -#endif /* WLAN_FEATURE_GTK_OFFLOAD */ status = wmi_unified_register_event_handler(wmi_handle, wmi_tbttoffset_update_event_id,