qcacld-3.0: Add support for getting dtim and beacon interval

Add support for getting vdev dtim and beacon interval from
mlme in PMO.

Change-Id: I97c117eec290f6b9452b98629bf6b3ee10c38ce6
CRs-Fixed: 2252713
This commit is contained in:
Nachiket Kukade
2018-06-01 18:44:42 +05:30
committed by nshrivas
parent 4474604869
commit 37b4e6dfbe
9 changed files with 323 additions and 54 deletions

View File

@@ -207,6 +207,48 @@ QDF_STATUS pmo_register_get_pause_bitmap(struct wlan_objmgr_psoc *psoc,
*/
QDF_STATUS pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc);
/**
* pmo_register_get_dtim_period_callback(): API to register callback that gets
* dtim period from mlme
* @psoc: objmgr psoc handle
* @handler: pointer to the callback function
*
* Return: QDF_STATUS_SUCCESS in case of success else error
*/
QDF_STATUS pmo_register_get_dtim_period_callback(struct wlan_objmgr_psoc *psoc,
pmo_get_dtim_period handler);
/**
* pmo_unregister_get_dtim_period_callback(): API to unregister callback that
* gets dtim period from mlme
* @psoc: objmgr psoc handle
*
* Return: QDF_STATUS_SUCCESS in case of success else error
*/
QDF_STATUS
pmo_unregister_get_dtim_period_callback(struct wlan_objmgr_psoc *psoc);
/**
* pmo_register_get_beacon_interval_callback(): API to register callback that
* gets beacon interval from mlme
* @psoc: objmgr psoc handle
* @handler: pointer to the callback function
*
* Return: QDF_STATUS_SUCCESS in case of success else error
*/
QDF_STATUS
pmo_register_get_beacon_interval_callback(struct wlan_objmgr_psoc *psoc,
pmo_get_beacon_interval handler);
/**
* pmo_unregister_get_beacon_interval_callback(): API to unregister callback
* that gets beacon interval from mlme
* @psoc: objmgr psoc handle
*
* Return: QDF_STATUS_SUCCESS in case of success else error
*/
QDF_STATUS
pmo_unregister_get_beacon_interval_callback(struct wlan_objmgr_psoc *psoc);
/**
* pmo_register_is_device_in_low_pwr_mode(): API to get register device power
@@ -386,6 +428,33 @@ pmo_unregister_get_cfg_int_callback(struct wlan_objmgr_psoc *psoc)
{
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS
pmo_register_get_dtim_period_callback(struct wlan_objmgr_psoc *psoc,
pmo_get_dtim_period handler)
{
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS
pmo_unregister_get_dtim_period_callback(struct wlan_objmgr_psoc *psoc)
{
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS
pmo_register_get_beacon_interval_callback(struct wlan_objmgr_psoc *psoc,
pmo_get_beacon_interval handler)
{
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS
pmo_unregister_get_beacon_interval_callback(struct wlan_objmgr_psoc *psoc)
{
return QDF_STATUS_SUCCESS;
}
#endif /* WLAN_POWER_MANAGEMENT_OFFLOAD */
#endif /* end of _WLAN_PMO_OBJ_MGMT_API_H_ */

View File

@@ -41,10 +41,20 @@
typedef void (*pmo_notify_pause_bitmap)(uint8_t vdev_id, uint16_t value);
/**
* typedef for getting cfg integer from mlme
* typedef for function that gets cfg integer from mlme
*/
typedef QDF_STATUS (*pmo_get_cfg_int)(int cfg_id, int *value);
/**
* typedef for function that gets dtim period from mlme
*/
typedef QDF_STATUS (*pmo_get_dtim_period)(uint8_t vdev_id, uint8_t *value);
/**
* typedef for function that gets beacon interval from mlme
*/
typedef QDF_STATUS (*pmo_get_beacon_interval)(uint8_t vdev_id, uint16_t *value);
/**
* typedef for getting vdev pause bitmap
*/

View File

@@ -769,7 +769,6 @@ QDF_STATUS pmo_register_get_cfg_int_callback(struct wlan_objmgr_psoc *psoc,
pmo_psoc_with_ctx(psoc, psoc_ctx) {
psoc_ctx->get_cfg_int = handler;
}
pmo_psoc_put_ref(psoc);
return QDF_STATUS_SUCCESS;
@@ -794,7 +793,117 @@ QDF_STATUS pmo_unregister_get_cfg_int_callback(struct wlan_objmgr_psoc *psoc)
pmo_psoc_with_ctx(psoc, psoc_ctx) {
psoc_ctx->get_cfg_int = NULL;
}
pmo_psoc_put_ref(psoc);
return QDF_STATUS_SUCCESS;
}
QDF_STATUS pmo_register_get_dtim_period_callback(struct wlan_objmgr_psoc *psoc,
pmo_get_dtim_period 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_dtim_period 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_dtim_period = handler;
}
pmo_psoc_put_ref(psoc);
return QDF_STATUS_SUCCESS;
}
QDF_STATUS
pmo_unregister_get_dtim_period_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_dtim_period = NULL;
}
pmo_psoc_put_ref(psoc);
return QDF_STATUS_SUCCESS;
}
QDF_STATUS
pmo_register_get_beacon_interval_callback(struct wlan_objmgr_psoc *psoc,
pmo_get_beacon_interval 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_beacon_interval 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_beacon_interval = handler;
}
pmo_psoc_put_ref(psoc);
return QDF_STATUS_SUCCESS;
}
QDF_STATUS
pmo_unregister_get_beacon_interval_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_beacon_interval = NULL;
}
pmo_psoc_put_ref(psoc);
return QDF_STATUS_SUCCESS;