static void iwl_mvm_scan_calc_params(struct iwl_mvm *mvm, struct ieee80211_vif *vif, int n_ssids, struct iwl_mvm_scan_params *params) { bool global_bound = false; enum ieee80211_band band; ieee80211_iterate_active_interfaces_atomic(mvm->hw, IEEE80211_IFACE_ITER_NORMAL, iwl_mvm_scan_condition_iterator, &global_bound); if (!global_bound) goto not_bound; params->suspend_time = 100; params->max_out_time = 600; if (iwl_mvm_low_latency(mvm)) { params->suspend_time = 250; params->max_out_time = 250; } not_bound: for (band = IEEE80211_BAND_2GHZ; band < IEEE80211_NUM_BANDS; band++) { params->dwell[band].passive = iwl_mvm_get_passive_dwell(band); params->dwell[band].active = iwl_mvm_get_active_dwell(band, n_ssids); } }
static void iwl_mvm_scan_calc_params(struct iwl_mvm *mvm, struct ieee80211_vif *vif, int n_ssids, u32 flags, struct iwl_mvm_scan_params *params) { int global_cnt = 0; enum ieee80211_band band; u8 frag_passive_dwell = 0; ieee80211_iterate_active_interfaces_atomic(mvm->hw, IEEE80211_IFACE_ITER_NORMAL, iwl_mvm_scan_condition_iterator, &global_cnt); if (!global_cnt) goto not_bound; params->suspend_time = 30; params->max_out_time = 120; if (iwl_mvm_low_latency(mvm)) { if (mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_FRAGMENTED_SCAN) { params->suspend_time = 105; /* * If there is more than one active interface make * passive scan more fragmented. */ frag_passive_dwell = 40; params->max_out_time = frag_passive_dwell; } else { params->suspend_time = 120; params->max_out_time = 120; } } if (frag_passive_dwell && (mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_FRAGMENTED_SCAN)) { /* * P2P device scan should not be fragmented to avoid negative * impact on P2P device discovery. Configure max_out_time to be * equal to dwell time on passive channel. Take a longest * possible value, one that corresponds to 2GHz band */ if (vif->type == NL80211_IFTYPE_P2P_DEVICE) { u32 passive_dwell = iwl_mvm_get_passive_dwell(mvm, IEEE80211_BAND_2GHZ); params->max_out_time = passive_dwell; } else { params->passive_fragmented = true; } } if (flags & NL80211_SCAN_FLAG_LOW_PRIORITY) params->max_out_time = 200; not_bound: for (band = IEEE80211_BAND_2GHZ; band < IEEE80211_NUM_BANDS; band++) { if (params->passive_fragmented) params->dwell[band].fragmented = frag_passive_dwell; params->dwell[band].passive = iwl_mvm_get_passive_dwell(mvm, band); params->dwell[band].active = iwl_mvm_get_active_dwell(mvm, band, n_ssids); } }
static void iwl_mvm_scan_calc_params(struct iwl_mvm *mvm, struct ieee80211_vif *vif, int n_ssids, struct iwl_mvm_scan_params *params) { bool global_bound = false; enum ieee80211_band band; ieee80211_iterate_active_interfaces_atomic(mvm->hw, IEEE80211_IFACE_ITER_NORMAL, iwl_mvm_scan_condition_iterator, &global_bound); /* * Under low latency traffic passive scan is fragmented meaning * that dwell on a particular channel will be fragmented. Each fragment * dwell time is 20ms and fragments period is 105ms. Skipping to next * channel will be delayed by the same period - 105ms. So suspend_time * parameter describing both fragments and channels skipping periods is * set to 105ms. This value is chosen so that overall passive scan * duration will not be too long. Max_out_time in this case is set to * 70ms, so for active scanning operating channel will be left for 70ms * while for passive still for 20ms (fragment dwell). */ if (global_bound) { if (!iwl_mvm_low_latency(mvm)) { params->suspend_time = ieee80211_tu_to_usec(100); params->max_out_time = ieee80211_tu_to_usec(600); } else { params->suspend_time = ieee80211_tu_to_usec(105); /* P2P doesn't support fragmented passive scan, so * configure max_out_time to be at least longest dwell * time for passive scan. */ if (vif->type == NL80211_IFTYPE_STATION && !vif->p2p) { params->max_out_time = ieee80211_tu_to_usec(70); params->passive_fragmented = true; } else { u32 passive_dwell; /* * Use band G so that passive channel dwell time * will be assigned with maximum value. */ band = IEEE80211_BAND_2GHZ; passive_dwell = iwl_mvm_get_passive_dwell(band); params->max_out_time = ieee80211_tu_to_usec(passive_dwell); } } } for (band = IEEE80211_BAND_2GHZ; band < IEEE80211_NUM_BANDS; band++) { if (params->passive_fragmented) params->dwell[band].passive = 20; else params->dwell[band].passive = iwl_mvm_get_passive_dwell(band); params->dwell[band].active = iwl_mvm_get_active_dwell(band, n_ssids); } }