|
@@ -72,6 +72,8 @@
|
|
|
|
|
|
#define IWL_PLCP_QUIET_THRESH 1
|
|
|
#define IWL_ACTIVE_QUIET_TIME 10
|
|
|
+#define IWL_DENSE_EBS_SCAN_RATIO 5
|
|
|
+#define IWL_SPARSE_EBS_SCAN_RATIO 1
|
|
|
|
|
|
struct iwl_mvm_scan_params {
|
|
|
u32 max_out_time;
|
|
@@ -1297,18 +1299,6 @@ iwl_mvm_build_generic_unified_scan_cmd(struct iwl_mvm *mvm,
|
|
|
cmd->scan_prio = cpu_to_le32(IWL_SCAN_PRIORITY_HIGH);
|
|
|
cmd->iter_num = cpu_to_le32(1);
|
|
|
|
|
|
- if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_EBS_SUPPORT &&
|
|
|
- mvm->last_ebs_successful) {
|
|
|
- cmd->channel_opt[0].flags =
|
|
|
- cpu_to_le16(IWL_SCAN_CHANNEL_FLAG_EBS |
|
|
|
- IWL_SCAN_CHANNEL_FLAG_EBS_ACCURATE |
|
|
|
- IWL_SCAN_CHANNEL_FLAG_CACHE_ADD);
|
|
|
- cmd->channel_opt[1].flags =
|
|
|
- cpu_to_le16(IWL_SCAN_CHANNEL_FLAG_EBS |
|
|
|
- IWL_SCAN_CHANNEL_FLAG_EBS_ACCURATE |
|
|
|
- IWL_SCAN_CHANNEL_FLAG_CACHE_ADD);
|
|
|
- }
|
|
|
-
|
|
|
if (iwl_mvm_rrm_scan_needed(mvm))
|
|
|
cmd->scan_flags |=
|
|
|
cpu_to_le32(IWL_MVM_LMAC_SCAN_FLAGS_RRM_ENABLED);
|
|
@@ -1383,6 +1373,22 @@ int iwl_mvm_unified_scan_lmac(struct iwl_mvm *mvm,
|
|
|
cmd->schedule[1].iterations = 0;
|
|
|
cmd->schedule[1].full_scan_mul = 0;
|
|
|
|
|
|
+ if (mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_SINGLE_SCAN_EBS &&
|
|
|
+ mvm->last_ebs_successful) {
|
|
|
+ cmd->channel_opt[0].flags =
|
|
|
+ cpu_to_le16(IWL_SCAN_CHANNEL_FLAG_EBS |
|
|
|
+ IWL_SCAN_CHANNEL_FLAG_EBS_ACCURATE |
|
|
|
+ IWL_SCAN_CHANNEL_FLAG_CACHE_ADD);
|
|
|
+ cmd->channel_opt[0].non_ebs_ratio =
|
|
|
+ cpu_to_le16(IWL_DENSE_EBS_SCAN_RATIO);
|
|
|
+ cmd->channel_opt[1].flags =
|
|
|
+ cpu_to_le16(IWL_SCAN_CHANNEL_FLAG_EBS |
|
|
|
+ IWL_SCAN_CHANNEL_FLAG_EBS_ACCURATE |
|
|
|
+ IWL_SCAN_CHANNEL_FLAG_CACHE_ADD);
|
|
|
+ cmd->channel_opt[1].non_ebs_ratio =
|
|
|
+ cpu_to_le16(IWL_SPARSE_EBS_SCAN_RATIO);
|
|
|
+ }
|
|
|
+
|
|
|
for (i = 1; i <= req->req.n_ssids; i++)
|
|
|
ssid_bitmap |= BIT(i);
|
|
|
|
|
@@ -1483,6 +1489,22 @@ int iwl_mvm_unified_sched_scan_lmac(struct iwl_mvm *mvm,
|
|
|
cmd->schedule[1].iterations = 0xff;
|
|
|
cmd->schedule[1].full_scan_mul = IWL_FULL_SCAN_MULTIPLIER;
|
|
|
|
|
|
+ if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_EBS_SUPPORT &&
|
|
|
+ mvm->last_ebs_successful) {
|
|
|
+ cmd->channel_opt[0].flags =
|
|
|
+ cpu_to_le16(IWL_SCAN_CHANNEL_FLAG_EBS |
|
|
|
+ IWL_SCAN_CHANNEL_FLAG_EBS_ACCURATE |
|
|
|
+ IWL_SCAN_CHANNEL_FLAG_CACHE_ADD);
|
|
|
+ cmd->channel_opt[0].non_ebs_ratio =
|
|
|
+ cpu_to_le16(IWL_DENSE_EBS_SCAN_RATIO);
|
|
|
+ cmd->channel_opt[1].flags =
|
|
|
+ cpu_to_le16(IWL_SCAN_CHANNEL_FLAG_EBS |
|
|
|
+ IWL_SCAN_CHANNEL_FLAG_EBS_ACCURATE |
|
|
|
+ IWL_SCAN_CHANNEL_FLAG_CACHE_ADD);
|
|
|
+ cmd->channel_opt[1].non_ebs_ratio =
|
|
|
+ cpu_to_le16(IWL_SPARSE_EBS_SCAN_RATIO);
|
|
|
+ }
|
|
|
+
|
|
|
iwl_mvm_lmac_scan_cfg_channels(mvm, req->channels, req->n_channels,
|
|
|
ssid_bitmap, cmd);
|
|
|
|