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:

gecommit door
nshrivas

bovenliggende
c20f84ea38
commit
53de6c3371
@@ -1803,8 +1803,6 @@ struct hdd_context {
|
||||
#ifdef WLAN_FEATURE_EXTWOW_SUPPORT
|
||||
bool is_extwow_app_type1_param_set;
|
||||
bool is_extwow_app_type2_param_set;
|
||||
bool ext_wow_should_suspend;
|
||||
struct completion ready_to_extwow;
|
||||
#endif
|
||||
|
||||
/* 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_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
|
||||
* @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)
|
||||
{
|
||||
wlan_hdd_init_completion_extwow(hdd_ctx);
|
||||
init_completion(&ext_scan_context.response_event);
|
||||
spin_lock_init(&ext_scan_context.context_lock);
|
||||
}
|
||||
|
@@ -83,6 +83,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
|
||||
*/
|
||||
@@ -1892,16 +1902,28 @@ static QDF_STATUS hdd_parse_plm_cmd(uint8_t *pValue, tSirPlmReq *pPlmRequest)
|
||||
#endif
|
||||
|
||||
#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;
|
||||
int rc;
|
||||
struct osif_request *request = NULL;
|
||||
struct enable_ext_wow_priv *priv = NULL;
|
||||
|
||||
rc = wlan_hdd_validate_context(hdd_ctx);
|
||||
if (rc)
|
||||
request = osif_request_get(cookie);
|
||||
if (!request) {
|
||||
hdd_err("Obselete request");
|
||||
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,
|
||||
@@ -1911,30 +1933,45 @@ static int hdd_enable_ext_wow(struct hdd_adapter *adapter,
|
||||
QDF_STATUS status;
|
||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||
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));
|
||||
|
||||
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,
|
||||
&wlan_hdd_ready_to_extwow,
|
||||
hdd_ctx);
|
||||
cookie);
|
||||
if (QDF_STATUS_SUCCESS != status) {
|
||||
hdd_err("sme_configure_ext_wow returned failure %d",
|
||||
status);
|
||||
return -EPERM;
|
||||
rc = -EPERM;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
rc = wait_for_completion_timeout(&hdd_ctx->ready_to_extwow,
|
||||
msecs_to_jiffies(WLAN_WAIT_TIME_READY_TO_EXTWOW));
|
||||
if (!rc) {
|
||||
rc = osif_request_wait_for_response(request);
|
||||
if (rc) {
|
||||
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");
|
||||
return -EPERM;
|
||||
rc = -EPERM;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (hdd_ctx->config->extWowGotoSuspend) {
|
||||
@@ -1944,18 +1981,19 @@ static int hdd_enable_ext_wow(struct hdd_adapter *adapter,
|
||||
if (rc < 0) {
|
||||
hdd_err("wlan_hdd_cfg80211_suspend_wlan failed, error = %d",
|
||||
rc);
|
||||
return rc;
|
||||
goto exit;
|
||||
}
|
||||
rc = wlan_hdd_bus_suspend();
|
||||
if (rc) {
|
||||
hdd_err("wlan_hdd_bus_suspend failed, status = %d",
|
||||
rc);
|
||||
wlan_hdd_cfg80211_resume_wlan(hdd_ctx->wiphy);
|
||||
return rc;
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
exit:
|
||||
osif_request_put(request);
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int hdd_enable_ext_wow_parser(struct hdd_adapter *adapter, int vdev_id,
|
||||
|
Verwijs in nieuw issue
Block a user