qcacld-3.0: Use request manager framework for ready to extwow event
We are transitioning the usage of ready to extwow event to request manager framework. Change-Id: I648b6db4ab5367c8e04e77f4adc2fb9d42039054 CRs-Fixed: 2274944
This commit is contained in:
@@ -1803,8 +1803,6 @@ struct hdd_context {
|
|||||||
#ifdef WLAN_FEATURE_EXTWOW_SUPPORT
|
#ifdef WLAN_FEATURE_EXTWOW_SUPPORT
|
||||||
bool is_extwow_app_type1_param_set;
|
bool is_extwow_app_type1_param_set;
|
||||||
bool is_extwow_app_type2_param_set;
|
bool is_extwow_app_type2_param_set;
|
||||||
bool ext_wow_should_suspend;
|
|
||||||
struct completion ready_to_extwow;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Time since boot up to extscan start (in micro seconds) */
|
/* Time since boot up to extscan start (in micro seconds) */
|
||||||
|
@@ -4357,23 +4357,6 @@ int wlan_hdd_cfg80211_reset_passpoint_list(struct wiphy *wiphy,
|
|||||||
#undef PARAM_ROAM_ID
|
#undef PARAM_ROAM_ID
|
||||||
#undef PARAM_ROAM_PLMN
|
#undef PARAM_ROAM_PLMN
|
||||||
|
|
||||||
/**
|
|
||||||
* wlan_hdd_init_completion_extwow() - Initialize ext wow variable
|
|
||||||
* @hdd_ctx: Global HDD context
|
|
||||||
*
|
|
||||||
* Return: none
|
|
||||||
*/
|
|
||||||
#ifdef WLAN_FEATURE_EXTWOW_SUPPORT
|
|
||||||
static inline void wlan_hdd_init_completion_extwow(struct hdd_context *hdd_ctx)
|
|
||||||
{
|
|
||||||
init_completion(&hdd_ctx->ready_to_extwow);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
static inline void wlan_hdd_init_completion_extwow(struct hdd_context *hdd_ctx)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wlan_hdd_cfg80211_extscan_init() - Initialize the ExtScan feature
|
* wlan_hdd_cfg80211_extscan_init() - Initialize the ExtScan feature
|
||||||
* @hdd_ctx: Global HDD context
|
* @hdd_ctx: Global HDD context
|
||||||
@@ -4382,7 +4365,6 @@ static inline void wlan_hdd_init_completion_extwow(struct hdd_context *hdd_ctx)
|
|||||||
*/
|
*/
|
||||||
void wlan_hdd_cfg80211_extscan_init(struct hdd_context *hdd_ctx)
|
void wlan_hdd_cfg80211_extscan_init(struct hdd_context *hdd_ctx)
|
||||||
{
|
{
|
||||||
wlan_hdd_init_completion_extwow(hdd_ctx);
|
|
||||||
init_completion(&ext_scan_context.response_event);
|
init_completion(&ext_scan_context.response_event);
|
||||||
spin_lock_init(&ext_scan_context.context_lock);
|
spin_lock_init(&ext_scan_context.context_lock);
|
||||||
}
|
}
|
||||||
|
@@ -83,6 +83,16 @@
|
|||||||
*/
|
*/
|
||||||
#define NUM_OF_STA_DATA_TO_PRINT 16
|
#define NUM_OF_STA_DATA_TO_PRINT 16
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_EXTWOW_SUPPORT
|
||||||
|
/**
|
||||||
|
* struct enable_ext_wow_priv - Private data structure for ext wow
|
||||||
|
* @ext_wow_should_suspend: Suspend status of ext wow
|
||||||
|
*/
|
||||||
|
struct enable_ext_wow_priv {
|
||||||
|
bool ext_wow_should_suspend;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Android DRIVER command structures
|
* Android DRIVER command structures
|
||||||
*/
|
*/
|
||||||
@@ -1892,16 +1902,28 @@ static QDF_STATUS hdd_parse_plm_cmd(uint8_t *pValue, tSirPlmReq *pPlmRequest)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WLAN_FEATURE_EXTWOW_SUPPORT
|
#ifdef WLAN_FEATURE_EXTWOW_SUPPORT
|
||||||
static void wlan_hdd_ready_to_extwow(void *callbackContext, bool is_success)
|
/**
|
||||||
|
* wlan_hdd_ready_to_extwow() - Callback function for enable ext wow
|
||||||
|
* @cookie: callback context
|
||||||
|
* @is_success: suspend status of ext wow
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
|
*/
|
||||||
|
static void wlan_hdd_ready_to_extwow(void *cookie, bool is_success)
|
||||||
{
|
{
|
||||||
struct hdd_context *hdd_ctx = (struct hdd_context *) callbackContext;
|
struct osif_request *request = NULL;
|
||||||
int rc;
|
struct enable_ext_wow_priv *priv = NULL;
|
||||||
|
|
||||||
rc = wlan_hdd_validate_context(hdd_ctx);
|
request = osif_request_get(cookie);
|
||||||
if (rc)
|
if (!request) {
|
||||||
|
hdd_err("Obselete request");
|
||||||
return;
|
return;
|
||||||
hdd_ctx->ext_wow_should_suspend = is_success;
|
}
|
||||||
complete(&hdd_ctx->ready_to_extwow);
|
priv = osif_request_priv(request);
|
||||||
|
priv->ext_wow_should_suspend = is_success;
|
||||||
|
|
||||||
|
osif_request_complete(request);
|
||||||
|
osif_request_put(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hdd_enable_ext_wow(struct hdd_adapter *adapter,
|
static int hdd_enable_ext_wow(struct hdd_adapter *adapter,
|
||||||
@@ -1911,30 +1933,45 @@ static int hdd_enable_ext_wow(struct hdd_adapter *adapter,
|
|||||||
QDF_STATUS status;
|
QDF_STATUS status;
|
||||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||||
int rc;
|
int rc;
|
||||||
|
struct enable_ext_wow_priv *priv = NULL;
|
||||||
|
struct osif_request *request = NULL;
|
||||||
|
void *cookie = NULL;
|
||||||
|
struct osif_request_params hdd_params = {
|
||||||
|
.priv_size = sizeof(*priv),
|
||||||
|
.timeout_ms = WLAN_WAIT_TIME_READY_TO_EXTWOW,
|
||||||
|
};
|
||||||
|
|
||||||
qdf_mem_copy(¶ms, arg_params, sizeof(params));
|
qdf_mem_copy(¶ms, arg_params, sizeof(params));
|
||||||
|
|
||||||
INIT_COMPLETION(hdd_ctx->ready_to_extwow);
|
request = osif_request_alloc(&hdd_params);
|
||||||
|
if (!request) {
|
||||||
|
hdd_err("Request Allocation Failure");
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
cookie = osif_request_cookie(request);
|
||||||
|
|
||||||
status = sme_configure_ext_wow(hdd_ctx->mac_handle, ¶ms,
|
status = sme_configure_ext_wow(hdd_ctx->mac_handle, ¶ms,
|
||||||
&wlan_hdd_ready_to_extwow,
|
&wlan_hdd_ready_to_extwow,
|
||||||
hdd_ctx);
|
cookie);
|
||||||
if (QDF_STATUS_SUCCESS != status) {
|
if (QDF_STATUS_SUCCESS != status) {
|
||||||
hdd_err("sme_configure_ext_wow returned failure %d",
|
hdd_err("sme_configure_ext_wow returned failure %d",
|
||||||
status);
|
status);
|
||||||
return -EPERM;
|
rc = -EPERM;
|
||||||
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = wait_for_completion_timeout(&hdd_ctx->ready_to_extwow,
|
rc = osif_request_wait_for_response(request);
|
||||||
msecs_to_jiffies(WLAN_WAIT_TIME_READY_TO_EXTWOW));
|
if (rc) {
|
||||||
if (!rc) {
|
|
||||||
hdd_err("Failed to get ready to extwow");
|
hdd_err("Failed to get ready to extwow");
|
||||||
return -EPERM;
|
rc = -EPERM;
|
||||||
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hdd_ctx->ext_wow_should_suspend) {
|
priv = osif_request_priv(request);
|
||||||
|
if (!priv->ext_wow_should_suspend) {
|
||||||
hdd_err("Received ready to ExtWoW failure");
|
hdd_err("Received ready to ExtWoW failure");
|
||||||
return -EPERM;
|
rc = -EPERM;
|
||||||
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hdd_ctx->config->extWowGotoSuspend) {
|
if (hdd_ctx->config->extWowGotoSuspend) {
|
||||||
@@ -1944,18 +1981,19 @@ static int hdd_enable_ext_wow(struct hdd_adapter *adapter,
|
|||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
hdd_err("wlan_hdd_cfg80211_suspend_wlan failed, error = %d",
|
hdd_err("wlan_hdd_cfg80211_suspend_wlan failed, error = %d",
|
||||||
rc);
|
rc);
|
||||||
return rc;
|
goto exit;
|
||||||
}
|
}
|
||||||
rc = wlan_hdd_bus_suspend();
|
rc = wlan_hdd_bus_suspend();
|
||||||
if (rc) {
|
if (rc) {
|
||||||
hdd_err("wlan_hdd_bus_suspend failed, status = %d",
|
hdd_err("wlan_hdd_bus_suspend failed, status = %d",
|
||||||
rc);
|
rc);
|
||||||
wlan_hdd_cfg80211_resume_wlan(hdd_ctx->wiphy);
|
wlan_hdd_cfg80211_resume_wlan(hdd_ctx->wiphy);
|
||||||
return rc;
|
goto exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
exit:
|
||||||
return 0;
|
osif_request_put(request);
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hdd_enable_ext_wow_parser(struct hdd_adapter *adapter, int vdev_id,
|
static int hdd_enable_ext_wow_parser(struct hdd_adapter *adapter, int vdev_id,
|
||||||
|
Reference in New Issue
Block a user