qcacld-3.0: Add support for getting cfg integer from PMO

Add support for getting cfg integer from PMO. Register callbacks
during pe_open/close so that PMO can query CFG int values for
calculating parameters like listen interval etc.

Change-Id: I52d165586576e547e175ba276e6b7225db5b27e0
CRs-Fixed: 2252661
This commit is contained in:
Mukul Sharma
2018-05-24 17:30:52 +05:30
committed by nshrivas
parent e4a628f2d6
commit 4474604869
6 changed files with 243 additions and 140 deletions

View File

@@ -46,6 +46,7 @@
* @txrx_hdl: txrx pdev handle * @txrx_hdl: txrx pdev handle
* @pause_bitmap_notifier: registered callback to update pause bitmap value * @pause_bitmap_notifier: registered callback to update pause bitmap value
* @pmo_get_pause_bitmap: registered callback to get 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 * @lock: spin lock for pmo psoc
*/ */
struct pmo_psoc_priv_obj { struct pmo_psoc_priv_obj {
@@ -60,6 +61,7 @@ struct pmo_psoc_priv_obj {
pmo_notify_pause_bitmap pause_bitmap_notifier; pmo_notify_pause_bitmap pause_bitmap_notifier;
pmo_get_pause_bitmap get_pause_bitmap; pmo_get_pause_bitmap get_pause_bitmap;
pmo_is_device_in_low_pwr_mode is_device_in_low_pwr_mode; pmo_is_device_in_low_pwr_mode is_device_in_low_pwr_mode;
pmo_get_cfg_int get_cfg_int;
qdf_spinlock_t lock; qdf_spinlock_t lock;
}; };
@@ -131,6 +133,15 @@ struct pmo_vdev_priv_obj {
qdf_spinlock_t pmo_vdev_lock; 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 /* WLAN_POWER_MANAGEMENT_OFFLOAD */
#endif /* end of _WLAN_PMO_PRIV_STRUCT_H_ */ #endif /* end of _WLAN_PMO_PRIV_STRUCT_H_ */

View File

@@ -54,8 +54,8 @@ QDF_STATUS pmo_deinit(void);
* *
* Return QDF_STATUS status in case of success else return error * Return QDF_STATUS status in case of success else return error
*/ */
QDF_STATUS pmo_psoc_object_created_notification( QDF_STATUS pmo_psoc_object_created_notification(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_psoc *psoc, void *arg); void *arg);
/** /**
* pmo_psoc_object_destroyed_notification(): pmo psoc delete handler * 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 * Return QDF_STATUS status in case of success else return error
*/ */
QDF_STATUS pmo_psoc_object_destroyed_notification( QDF_STATUS pmo_psoc_object_destroyed_notification(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_psoc *psoc, void *arg); void *arg);
/** /**
* pmo_vdev_object_created_notification(): pmo vdev create handler * 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 * Return QDF_STATUS status in case of success else return error
*/ */
QDF_STATUS pmo_vdev_object_created_notification( QDF_STATUS pmo_vdev_object_created_notification(struct wlan_objmgr_vdev *vdev,
struct wlan_objmgr_vdev *vdev, void *arg); void *arg);
/** /**
* pmo_vdev_ready() - handles vdev ready in firmware event * 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 * Return QDF_STATUS status in case of success else return error
*/ */
QDF_STATUS pmo_vdev_object_destroyed_notification( QDF_STATUS pmo_vdev_object_destroyed_notification(struct wlan_objmgr_vdev *vdev,
struct wlan_objmgr_vdev *vdev, void *arg); void *arg);
/** /**
* pmo_register_suspend_handler(): register suspend handler for components * pmo_register_suspend_handler(): register suspend handler for components
@@ -113,8 +113,7 @@ QDF_STATUS pmo_vdev_object_destroyed_notification(
* *
* Return QDF_STATUS status -in case of success else return error * Return QDF_STATUS status -in case of success else return error
*/ */
QDF_STATUS pmo_register_suspend_handler( QDF_STATUS pmo_register_suspend_handler(enum wlan_umac_comp_id id,
enum wlan_umac_comp_id id,
pmo_psoc_suspend_handler handler, pmo_psoc_suspend_handler handler,
void *arg); void *arg);
@@ -125,8 +124,7 @@ QDF_STATUS pmo_register_suspend_handler(
* *
* Return QDF_STATUS status -in case of success else return error * Return QDF_STATUS status -in case of success else return error
*/ */
QDF_STATUS pmo_unregister_suspend_handler( QDF_STATUS pmo_unregister_suspend_handler(enum wlan_umac_comp_id id,
enum wlan_umac_comp_id id,
pmo_psoc_suspend_handler handler); pmo_psoc_suspend_handler handler);
/** /**
@@ -137,8 +135,7 @@ QDF_STATUS pmo_unregister_suspend_handler(
* *
* Return QDF_STATUS status - in case of success else return error * Return QDF_STATUS status - in case of success else return error
*/ */
QDF_STATUS pmo_register_resume_handler( QDF_STATUS pmo_register_resume_handler(enum wlan_umac_comp_id id,
enum wlan_umac_comp_id id,
pmo_psoc_resume_handler handler, pmo_psoc_resume_handler handler,
void *arg); void *arg);
@@ -149,8 +146,7 @@ QDF_STATUS pmo_register_resume_handler(
* *
* Return QDF_STATUS status - in case of success else return error * Return QDF_STATUS status - in case of success else return error
*/ */
QDF_STATUS pmo_unregister_resume_handler( QDF_STATUS pmo_unregister_resume_handler(enum wlan_umac_comp_id id,
enum wlan_umac_comp_id id,
pmo_psoc_resume_handler handler); pmo_psoc_resume_handler handler);
/** /**
@@ -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 * Return QDF_STATUS status - in case of success else return error
*/ */
QDF_STATUS pmo_register_pause_bitmap_notifier( QDF_STATUS pmo_register_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_psoc *psoc,
pmo_notify_pause_bitmap handler); 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 * @psoc: objmgr psoc handle
* @handler: pause bitmap updated notifier
* *
* Return QDF_STATUS status - in case of success else return error * Return QDF_STATUS status - in case of success else return error
*/ */
QDF_STATUS pmo_unregister_pause_bitmap_notifier( QDF_STATUS pmo_unregister_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc);
struct wlan_objmgr_psoc *psoc,
pmo_notify_pause_bitmap handler);
/** /**
* pmo_register_get_pause_bitmap(): API to get register pause bitmap notifier * pmo_register_get_pause_bitmap(): API to get register pause bitmap notifier
@@ -206,14 +199,13 @@ 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 * @psoc: objmgr psoc handle
* @handler: pause bitmap updated notifier
* *
* Return QDF_STATUS status - in case of success else return error * Return QDF_STATUS status - in case of success else return error
*/ */
QDF_STATUS pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc, QDF_STATUS pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc);
pmo_get_pause_bitmap handler);
/** /**
@@ -231,14 +223,34 @@ QDF_STATUS pmo_register_is_device_in_low_pwr_mode(struct wlan_objmgr_psoc *psoc,
* pmo_unregister_is_device_in_low_pwr_mode(): API to unregister device power * pmo_unregister_is_device_in_low_pwr_mode(): API to unregister device power
* save check notifier. * save check notifier.
* @psoc: objmgr psoc handle * @psoc: objmgr psoc handle
* @handler: device power save check notifier
* *
* Return QDF_STATUS status - in case of success else return error * Return QDF_STATUS status - in case of success else return error
*/ */
QDF_STATUS pmo_unregister_is_device_in_low_pwr_mode( QDF_STATUS
struct wlan_objmgr_psoc *psoc, pmo_unregister_is_device_in_low_pwr_mode(struct wlan_objmgr_psoc *psoc);
pmo_is_device_in_low_pwr_mode handler);
#else /**
* 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) static inline QDF_STATUS pmo_init(void)
{ {
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
@@ -250,22 +262,19 @@ static inline QDF_STATUS pmo_deinit(void)
} }
static inline QDF_STATUS static inline QDF_STATUS
pmo_psoc_object_created_notification( pmo_psoc_object_created_notification(struct wlan_objmgr_psoc *psoc, void *arg)
struct wlan_objmgr_psoc *psoc, void *arg)
{ {
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
static inline QDF_STATUS static inline QDF_STATUS
pmo_psoc_object_destroyed_notification( pmo_psoc_object_destroyed_notification(struct wlan_objmgr_psoc *psoc, void *arg)
struct wlan_objmgr_psoc *psoc, void *arg)
{ {
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
static inline QDF_STATUS static inline QDF_STATUS
pmo_vdev_object_created_notification( pmo_vdev_object_created_notification(struct wlan_objmgr_vdev *vdev, void *arg)
struct wlan_objmgr_vdev *vdev, void *arg)
{ {
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
@@ -277,15 +286,13 @@ pmo_vdev_ready(struct wlan_objmgr_vdev *vdev)
} }
static inline QDF_STATUS static inline QDF_STATUS
pmo_vdev_object_destroyed_notification( pmo_vdev_object_destroyed_notification(struct wlan_objmgr_vdev *vdev, void *arg)
struct wlan_objmgr_vdev *vdev, void *arg)
{ {
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
static inline QDF_STATUS static inline QDF_STATUS
pmo_register_suspend_handler( pmo_register_suspend_handler(enum wlan_umac_comp_id id,
enum wlan_umac_comp_id id,
pmo_psoc_suspend_handler handler, pmo_psoc_suspend_handler handler,
void *arg) void *arg)
{ {
@@ -293,16 +300,14 @@ pmo_register_suspend_handler(
} }
static inline QDF_STATUS static inline QDF_STATUS
pmo_unregister_suspend_handler( pmo_unregister_suspend_handler(enum wlan_umac_comp_id id,
enum wlan_umac_comp_id id,
pmo_psoc_suspend_handler handler) pmo_psoc_suspend_handler handler)
{ {
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
static inline QDF_STATUS static inline QDF_STATUS
pmo_register_resume_handler( pmo_register_resume_handler(enum wlan_umac_comp_id id,
enum wlan_umac_comp_id id,
pmo_psoc_resume_handler handler, pmo_psoc_resume_handler handler,
void *arg) void *arg)
{ {
@@ -310,73 +315,74 @@ pmo_register_resume_handler(
} }
static inline QDF_STATUS static inline QDF_STATUS
pmo_unregister_resume_handler( pmo_unregister_resume_handler(enum wlan_umac_comp_id id,
enum wlan_umac_comp_id id,
pmo_psoc_resume_handler handler) pmo_psoc_resume_handler handler)
{ {
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
static inline QDF_STATUS static inline QDF_STATUS
pmo_suspend_all_components( pmo_suspend_all_components(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_psoc *psoc,
enum qdf_suspend_type suspend_type) enum qdf_suspend_type suspend_type)
{ {
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
static inline QDF_STATUS static inline QDF_STATUS
pmo_resume_all_components( pmo_resume_all_components(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_psoc *psoc,
enum qdf_suspend_type suspend_type) enum qdf_suspend_type suspend_type)
{ {
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
static inline QDF_STATUS static inline QDF_STATUS
pmo_register_pause_bitmap_notifier( pmo_register_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_psoc *psoc,
pmo_notify_pause_bitmap handler) pmo_notify_pause_bitmap handler)
{ {
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
static inline QDF_STATUS static inline QDF_STATUS
pmo_unregister_pause_bitmap_notifier( pmo_unregister_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc)
struct wlan_objmgr_psoc *psoc,
pmo_notify_pause_bitmap handler)
{ {
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
static inline QDF_STATUS static inline QDF_STATUS
pmo_register_get_pause_bitmap( pmo_register_get_pause_bitmap(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_psoc *psoc,
pmo_get_pause_bitmap handler) pmo_get_pause_bitmap handler)
{ {
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
static inline QDF_STATUS static inline QDF_STATUS
pmo_unregister_get_pause_bitmap( pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc)
struct wlan_objmgr_psoc *psoc,
pmo_get_pause_bitmap handler)
{ {
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
static inline QDF_STATUS static inline QDF_STATUS
pmo_register_is_device_in_low_pwr_mode( pmo_register_is_device_in_low_pwr_mode(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_psoc *psoc,
pmo_is_device_in_low_pwr_mode handler) pmo_is_device_in_low_pwr_mode handler)
{ {
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
static inline QDF_STATUS static inline QDF_STATUS
pmo_unregister_is_device_in_low_pwr_mode( pmo_unregister_is_device_in_low_pwr_mode(struct wlan_objmgr_psoc *psoc)
struct wlan_objmgr_psoc *psoc, {
pmo_is_device_in_low_pwr_mode handler) 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; return QDF_STATUS_SUCCESS;
} }

View File

@@ -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 * Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the * 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 for vdev notifying the vdev pause bitmap new value to mlme
*/ */
typedef void (*pmo_notify_pause_bitmap)( typedef void (*pmo_notify_pause_bitmap)(uint8_t vdev_id, uint16_t value);
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 * 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 for pld auto suspend callback during runtime suspend
*/ */
typedef typedef int (*pmo_pld_auto_suspend_cb)(void);
int (*pmo_pld_auto_suspend_cb)(void);
/* /*
* typedef for pld auto resume callback during runtime resume * typedef for pld auto resume callback during runtime resume
*/ */
typedef typedef int (*pmo_pld_auto_resume_cb)(void);
int (*pmo_pld_auto_resume_cb)(void);
/** /**
* struct wlan_pmo_tx_ops - structure of tx function * struct wlan_pmo_tx_ops - structure of tx function

View File

@@ -606,8 +606,7 @@ QDF_STATUS pmo_register_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
QDF_STATUS pmo_unregister_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc, QDF_STATUS pmo_unregister_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc)
pmo_notify_pause_bitmap handler)
{ {
struct pmo_psoc_priv_obj *psoc_ctx; struct pmo_psoc_priv_obj *psoc_ctx;
QDF_STATUS status; 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; 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); status = pmo_psoc_get_ref(psoc);
if (status != QDF_STATUS_SUCCESS) { if (status != QDF_STATUS_SUCCESS) {
pmo_err("pmo cannot get the reference out of psoc"); pmo_err("pmo cannot get the reference out of psoc");
@@ -629,7 +623,6 @@ QDF_STATUS pmo_unregister_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc,
} }
pmo_psoc_with_ctx(psoc, psoc_ctx) { 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;
} }
@@ -669,8 +662,7 @@ QDF_STATUS pmo_register_get_pause_bitmap(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
QDF_STATUS pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc, QDF_STATUS pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc)
pmo_get_pause_bitmap handler)
{ {
struct pmo_psoc_priv_obj *psoc_ctx; struct pmo_psoc_priv_obj *psoc_ctx;
QDF_STATUS status; 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; 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); status = pmo_psoc_get_ref(psoc);
if (status != QDF_STATUS_SUCCESS) { if (status != QDF_STATUS_SUCCESS) {
pmo_err("pmo cannot get the reference out of psoc"); pmo_err("pmo cannot get the reference out of psoc");
@@ -692,7 +679,6 @@ QDF_STATUS pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc,
} }
pmo_psoc_with_ctx(psoc, psoc_ctx) { 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;
} }
@@ -732,9 +718,8 @@ QDF_STATUS pmo_register_is_device_in_low_pwr_mode(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
QDF_STATUS pmo_unregister_is_device_in_low_pwr_mode( QDF_STATUS
struct wlan_objmgr_psoc *psoc, 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; struct pmo_psoc_priv_obj *psoc_ctx;
QDF_STATUS status; QDF_STATUS status;
@@ -744,11 +729,6 @@ QDF_STATUS pmo_unregister_is_device_in_low_pwr_mode(
return QDF_STATUS_E_NULL_VALUE; 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); status = pmo_psoc_get_ref(psoc);
if (status != QDF_STATUS_SUCCESS) { if (status != QDF_STATUS_SUCCESS) {
pmo_err("pmo cannot get the reference out of psoc"); 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; 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;
}

View File

@@ -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; 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 * wma_vdev_set_pause_bit() - Set a bit in vdev pause bitmap
* @vdev_id: the Id of the vdev to configure * @vdev_id: the Id of the vdev to configure

View File

@@ -3534,6 +3534,8 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc,
wma_vdev_get_pause_bitmap); wma_vdev_get_pause_bitmap);
pmo_register_is_device_in_low_pwr_mode(wma_handle->psoc, pmo_register_is_device_in_low_pwr_mode(wma_handle->psoc,
wma_vdev_is_device_in_low_pwr_mode); 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; wma_cbacks.wma_get_connection_info = wma_get_connection_info;
qdf_status = policy_mgr_register_wma_cb(wma_handle->psoc, &wma_cbacks); qdf_status = policy_mgr_register_wma_cb(wma_handle->psoc, &wma_cbacks);
if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
@@ -4711,12 +4713,10 @@ QDF_STATUS wma_close(void)
wma_handle->pdev = NULL; wma_handle->pdev = NULL;
} }
pmo_unregister_pause_bitmap_notifier(wma_handle->psoc, pmo_unregister_get_cfg_int_callback(wma_handle->psoc);
wma_vdev_update_pause_bitmap); pmo_unregister_is_device_in_low_pwr_mode(wma_handle->psoc);
pmo_unregister_get_pause_bitmap(wma_handle->psoc, pmo_unregister_get_pause_bitmap(wma_handle->psoc);
wma_vdev_get_pause_bitmap); pmo_unregister_pause_bitmap_notifier(wma_handle->psoc);
pmo_unregister_is_device_in_low_pwr_mode(wma_handle->psoc,
wma_vdev_is_device_in_low_pwr_mode);
target_if_free_psoc_tgt_info(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); 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 * wma_rx_service_ready_event() - event handler to process
* wmi rx sevice ready event. * 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"); WMA_LOGE("FW doesnot support WMI_SERVICE_MGMT_TX_WMI, Use HTT interface for Management Tx");
} }
#ifdef WLAN_FEATURE_GTK_OFFLOAD status = wma_register_gtk_offload_event(wma_handle);
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)) { if (QDF_IS_STATUS_ERROR(status)) {
WMA_LOGE("Failed to register GTK offload event cb"); WMA_LOGE("Failed to register GTK offload event cb");
goto free_hw_mode_list; goto free_hw_mode_list;
} }
}
#endif /* WLAN_FEATURE_GTK_OFFLOAD */
status = wmi_unified_register_event_handler(wmi_handle, status = wmi_unified_register_event_handler(wmi_handle,
wmi_tbttoffset_update_event_id, wmi_tbttoffset_update_event_id,