iwlwifi: introduce post_scan hook
The different drivers need to do different things after a scan, so create a post_scan hook to allow them to do this. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
This commit is contained in:
committed by
Wey-Yi Guy
parent
7314c2b377
commit
a77029ee3f
@@ -2713,6 +2713,7 @@ static struct iwl_hcmd_utils_ops iwl3945_hcmd_utils = {
|
|||||||
.build_addsta_hcmd = iwl3945_build_addsta_hcmd,
|
.build_addsta_hcmd = iwl3945_build_addsta_hcmd,
|
||||||
.tx_cmd_protection = iwlcore_tx_cmd_protection,
|
.tx_cmd_protection = iwlcore_tx_cmd_protection,
|
||||||
.request_scan = iwl3945_request_scan,
|
.request_scan = iwl3945_request_scan,
|
||||||
|
.post_scan = iwl3945_post_scan,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct iwl_ops iwl3945_ops = {
|
static const struct iwl_ops iwl3945_ops = {
|
||||||
|
@@ -296,6 +296,7 @@ extern int iwl3945_rs_next_rate(struct iwl_priv *priv, int rate);
|
|||||||
|
|
||||||
/* scanning */
|
/* scanning */
|
||||||
int iwl3945_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif);
|
int iwl3945_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif);
|
||||||
|
void iwl3945_post_scan(struct iwl_priv *priv);
|
||||||
|
|
||||||
/* Requires full declaration of iwl_priv before including */
|
/* Requires full declaration of iwl_priv before including */
|
||||||
#include "iwl-io.h"
|
#include "iwl-io.h"
|
||||||
|
@@ -2221,6 +2221,18 @@ static struct iwl_hcmd_ops iwl4965_hcmd = {
|
|||||||
.send_bt_config = iwl_send_bt_config,
|
.send_bt_config = iwl_send_bt_config,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void iwl4965_post_scan(struct iwl_priv *priv)
|
||||||
|
{
|
||||||
|
struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Since setting the RXON may have been deferred while
|
||||||
|
* performing the scan, fire one off if needed
|
||||||
|
*/
|
||||||
|
if (memcmp(&ctx->staging, &ctx->active, sizeof(ctx->staging)))
|
||||||
|
iwlcore_commit_rxon(priv, ctx);
|
||||||
|
}
|
||||||
|
|
||||||
static struct iwl_hcmd_utils_ops iwl4965_hcmd_utils = {
|
static struct iwl_hcmd_utils_ops iwl4965_hcmd_utils = {
|
||||||
.get_hcmd_size = iwl4965_get_hcmd_size,
|
.get_hcmd_size = iwl4965_get_hcmd_size,
|
||||||
.build_addsta_hcmd = iwl4965_build_addsta_hcmd,
|
.build_addsta_hcmd = iwl4965_build_addsta_hcmd,
|
||||||
@@ -2229,6 +2241,7 @@ static struct iwl_hcmd_utils_ops iwl4965_hcmd_utils = {
|
|||||||
.tx_cmd_protection = iwlcore_tx_cmd_protection,
|
.tx_cmd_protection = iwlcore_tx_cmd_protection,
|
||||||
.calc_rssi = iwl4965_calc_rssi,
|
.calc_rssi = iwl4965_calc_rssi,
|
||||||
.request_scan = iwlagn_request_scan,
|
.request_scan = iwlagn_request_scan,
|
||||||
|
.post_scan = iwl4965_post_scan,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct iwl_lib_ops iwl4965_lib = {
|
static struct iwl_lib_ops iwl4965_lib = {
|
||||||
|
@@ -384,4 +384,5 @@ struct iwl_hcmd_utils_ops iwlagn_hcmd_utils = {
|
|||||||
.tx_cmd_protection = iwlagn_tx_cmd_protection,
|
.tx_cmd_protection = iwlagn_tx_cmd_protection,
|
||||||
.calc_rssi = iwlagn_calc_rssi,
|
.calc_rssi = iwlagn_calc_rssi,
|
||||||
.request_scan = iwlagn_request_scan,
|
.request_scan = iwlagn_request_scan,
|
||||||
|
.post_scan = iwlagn_post_scan,
|
||||||
};
|
};
|
||||||
|
@@ -1565,6 +1565,22 @@ int iwlagn_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void iwlagn_post_scan(struct iwl_priv *priv)
|
||||||
|
{
|
||||||
|
struct iwl_rxon_context *ctx;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Since setting the RXON may have been deferred while
|
||||||
|
* performing the scan, fire one off if needed
|
||||||
|
*/
|
||||||
|
for_each_context(priv, ctx)
|
||||||
|
if (memcmp(&ctx->staging, &ctx->active, sizeof(ctx->staging)))
|
||||||
|
iwlagn_commit_rxon(priv, ctx);
|
||||||
|
|
||||||
|
if (priv->cfg->ops->hcmd->set_pan_params)
|
||||||
|
priv->cfg->ops->hcmd->set_pan_params(priv);
|
||||||
|
}
|
||||||
|
|
||||||
int iwlagn_manage_ibss_station(struct iwl_priv *priv,
|
int iwlagn_manage_ibss_station(struct iwl_priv *priv,
|
||||||
struct ieee80211_vif *vif, bool add)
|
struct ieee80211_vif *vif, bool add)
|
||||||
{
|
{
|
||||||
|
@@ -227,6 +227,7 @@ void iwl_reply_statistics(struct iwl_priv *priv,
|
|||||||
|
|
||||||
/* scan */
|
/* scan */
|
||||||
int iwlagn_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif);
|
int iwlagn_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif);
|
||||||
|
void iwlagn_post_scan(struct iwl_priv *priv);
|
||||||
|
|
||||||
/* station mgmt */
|
/* station mgmt */
|
||||||
int iwlagn_manage_ibss_station(struct iwl_priv *priv,
|
int iwlagn_manage_ibss_station(struct iwl_priv *priv,
|
||||||
|
@@ -112,6 +112,7 @@ struct iwl_hcmd_utils_ops {
|
|||||||
int (*calc_rssi)(struct iwl_priv *priv,
|
int (*calc_rssi)(struct iwl_priv *priv,
|
||||||
struct iwl_rx_phy_res *rx_resp);
|
struct iwl_rx_phy_res *rx_resp);
|
||||||
int (*request_scan)(struct iwl_priv *priv, struct ieee80211_vif *vif);
|
int (*request_scan)(struct iwl_priv *priv, struct ieee80211_vif *vif);
|
||||||
|
void (*post_scan)(struct iwl_priv *priv);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_apm_ops {
|
struct iwl_apm_ops {
|
||||||
|
@@ -559,7 +559,6 @@ static void iwl_bg_scan_completed(struct work_struct *work)
|
|||||||
struct iwl_priv *priv =
|
struct iwl_priv *priv =
|
||||||
container_of(work, struct iwl_priv, scan_completed);
|
container_of(work, struct iwl_priv, scan_completed);
|
||||||
bool aborted;
|
bool aborted;
|
||||||
struct iwl_rxon_context *ctx;
|
|
||||||
|
|
||||||
IWL_DEBUG_SCAN(priv, "Completed %sscan.\n",
|
IWL_DEBUG_SCAN(priv, "Completed %sscan.\n",
|
||||||
priv->is_internal_short_scan ? "internal short " : "");
|
priv->is_internal_short_scan ? "internal short " : "");
|
||||||
@@ -609,15 +608,7 @@ out_settings:
|
|||||||
* performing the scan, fire one off */
|
* performing the scan, fire one off */
|
||||||
iwl_set_tx_power(priv, priv->tx_power_user_lmt, true);
|
iwl_set_tx_power(priv, priv->tx_power_user_lmt, true);
|
||||||
|
|
||||||
/*
|
priv->cfg->ops->utils->post_scan(priv);
|
||||||
* Since setting the RXON may have been deferred while
|
|
||||||
* performing the scan, fire one off if needed
|
|
||||||
*/
|
|
||||||
for_each_context(priv, ctx)
|
|
||||||
iwlcore_commit_rxon(priv, ctx);
|
|
||||||
|
|
||||||
if (priv->cfg->ops->hcmd->set_pan_params)
|
|
||||||
priv->cfg->ops->hcmd->set_pan_params(priv);
|
|
||||||
|
|
||||||
out:
|
out:
|
||||||
mutex_unlock(&priv->mutex);
|
mutex_unlock(&priv->mutex);
|
||||||
|
@@ -2983,6 +2983,18 @@ int iwl3945_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void iwl3945_post_scan(struct iwl_priv *priv)
|
||||||
|
{
|
||||||
|
struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Since setting the RXON may have been deferred while
|
||||||
|
* performing the scan, fire one off if needed
|
||||||
|
*/
|
||||||
|
if (memcmp(&ctx->staging, &ctx->active, sizeof(ctx->staging)))
|
||||||
|
iwlcore_commit_rxon(priv, ctx);
|
||||||
|
}
|
||||||
|
|
||||||
static void iwl3945_bg_restart(struct work_struct *data)
|
static void iwl3945_bg_restart(struct work_struct *data)
|
||||||
{
|
{
|
||||||
struct iwl_priv *priv = container_of(data, struct iwl_priv, restart);
|
struct iwl_priv *priv = container_of(data, struct iwl_priv, restart);
|
||||||
|
Reference in New Issue
Block a user