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
此提交包含在:
Mukul Sharma
2018-05-24 17:30:52 +05:30
提交者 nshrivas
父節點 e4a628f2d6
當前提交 4474604869
共有 6 個檔案被更改,包括 243 行新增140 行删除

查看文件

@@ -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_ */

查看文件

@@ -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;
}

查看文件

@@ -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

查看文件

@@ -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;
}