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:
@@ -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_ */
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
||||||
|
}
|
||||||
|
@@ -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
|
||||||
|
@@ -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,
|
||||||
|
Reference in New Issue
Block a user