|
@@ -201,7 +201,8 @@ static void iwl_rx_scan_results_notif(struct iwl_priv *priv,
|
|
|
le32_to_cpu(notif->tsf_low) - priv->scan_start_tsf);
|
|
|
#endif
|
|
|
|
|
|
- priv->next_scan_jiffies = 0;
|
|
|
+ if (!priv->is_internal_short_scan)
|
|
|
+ priv->next_scan_jiffies = 0;
|
|
|
}
|
|
|
|
|
|
/* Service SCAN_COMPLETE_NOTIFICATION (0x84) */
|
|
@@ -247,7 +248,11 @@ static void iwl_rx_scan_complete_notif(struct iwl_priv *priv,
|
|
|
goto reschedule;
|
|
|
}
|
|
|
|
|
|
- priv->next_scan_jiffies = 0;
|
|
|
+ if (!priv->is_internal_short_scan)
|
|
|
+ priv->next_scan_jiffies = 0;
|
|
|
+ else
|
|
|
+ priv->last_internal_scan_jiffies = jiffies;
|
|
|
+
|
|
|
IWL_DEBUG_INFO(priv, "Setting scan to off\n");
|
|
|
|
|
|
clear_bit(STATUS_SCANNING, &priv->status);
|
|
@@ -546,6 +551,8 @@ EXPORT_SYMBOL(iwl_mac_hw_scan);
|
|
|
* internal short scan, this function should only been called while associated.
|
|
|
* It will reset and tune the radio to prevent possible RF related problem
|
|
|
*/
|
|
|
+#define IWL_DELAY_NEXT_INTERNAL_SCAN (HZ*1)
|
|
|
+
|
|
|
int iwl_internal_short_hw_scan(struct iwl_priv *priv)
|
|
|
{
|
|
|
int ret = 0;
|
|
@@ -565,6 +572,13 @@ int iwl_internal_short_hw_scan(struct iwl_priv *priv)
|
|
|
ret = -EAGAIN;
|
|
|
goto out;
|
|
|
}
|
|
|
+ if (priv->last_internal_scan_jiffies &&
|
|
|
+ time_after(priv->last_internal_scan_jiffies +
|
|
|
+ IWL_DELAY_NEXT_INTERNAL_SCAN, jiffies)) {
|
|
|
+ IWL_DEBUG_SCAN(priv, "internal scan rejected\n");
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+
|
|
|
priv->scan_bands = 0;
|
|
|
if (priv->band == IEEE80211_BAND_5GHZ)
|
|
|
priv->scan_bands |= BIT(IEEE80211_BAND_5GHZ);
|