diff options
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/ti/wl12xx/main.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ti/wl18xx/main.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ti/wlcore/conf.h | 22 | ||||
-rw-r--r-- | drivers/net/wireless/ti/wlcore/scan.c | 30 |
4 files changed, 53 insertions, 3 deletions
diff --git a/drivers/net/wireless/ti/wl12xx/main.c b/drivers/net/wireless/ti/wl12xx/main.c index 8b4827f47deb..08b67625f7ff 100644 --- a/drivers/net/wireless/ti/wl12xx/main.c +++ b/drivers/net/wireless/ti/wl12xx/main.c | |||
@@ -269,6 +269,8 @@ static struct wlcore_conf wl12xx_conf = { | |||
269 | .scan = { | 269 | .scan = { |
270 | .min_dwell_time_active = 7500, | 270 | .min_dwell_time_active = 7500, |
271 | .max_dwell_time_active = 30000, | 271 | .max_dwell_time_active = 30000, |
272 | .min_dwell_time_active_long = 25000, | ||
273 | .max_dwell_time_active_long = 50000, | ||
272 | .dwell_time_passive = 100000, | 274 | .dwell_time_passive = 100000, |
273 | .dwell_time_dfs = 150000, | 275 | .dwell_time_dfs = 150000, |
274 | .num_probe_reqs = 2, | 276 | .num_probe_reqs = 2, |
diff --git a/drivers/net/wireless/ti/wl18xx/main.c b/drivers/net/wireless/ti/wl18xx/main.c index 55fd46b9628d..62f431a2ed34 100644 --- a/drivers/net/wireless/ti/wl18xx/main.c +++ b/drivers/net/wireless/ti/wl18xx/main.c | |||
@@ -396,6 +396,8 @@ static struct wlcore_conf wl18xx_conf = { | |||
396 | .scan = { | 396 | .scan = { |
397 | .min_dwell_time_active = 7500, | 397 | .min_dwell_time_active = 7500, |
398 | .max_dwell_time_active = 30000, | 398 | .max_dwell_time_active = 30000, |
399 | .min_dwell_time_active_long = 25000, | ||
400 | .max_dwell_time_active_long = 50000, | ||
399 | .dwell_time_passive = 100000, | 401 | .dwell_time_passive = 100000, |
400 | .dwell_time_dfs = 150000, | 402 | .dwell_time_dfs = 150000, |
401 | .num_probe_reqs = 2, | 403 | .num_probe_reqs = 2, |
diff --git a/drivers/net/wireless/ti/wlcore/conf.h b/drivers/net/wireless/ti/wlcore/conf.h index fd173b9ca46a..2b96ff821341 100644 --- a/drivers/net/wireless/ti/wlcore/conf.h +++ b/drivers/net/wireless/ti/wlcore/conf.h | |||
@@ -1088,6 +1088,7 @@ struct conf_roam_trigger_settings { | |||
1088 | struct conf_scan_settings { | 1088 | struct conf_scan_settings { |
1089 | /* | 1089 | /* |
1090 | * The minimum time to wait on each channel for active scans | 1090 | * The minimum time to wait on each channel for active scans |
1091 | * This value will be used whenever there's a connected interface. | ||
1091 | * | 1092 | * |
1092 | * Range: u32 tu/1000 | 1093 | * Range: u32 tu/1000 |
1093 | */ | 1094 | */ |
@@ -1095,11 +1096,32 @@ struct conf_scan_settings { | |||
1095 | 1096 | ||
1096 | /* | 1097 | /* |
1097 | * The maximum time to wait on each channel for active scans | 1098 | * The maximum time to wait on each channel for active scans |
1099 | * This value will be currently used whenever there's a | ||
1100 | * connected interface. It shouldn't exceed 30000 (~30ms) to avoid | ||
1101 | * possible interference of voip traffic going on while scanning. | ||
1098 | * | 1102 | * |
1099 | * Range: u32 tu/1000 | 1103 | * Range: u32 tu/1000 |
1100 | */ | 1104 | */ |
1101 | u32 max_dwell_time_active; | 1105 | u32 max_dwell_time_active; |
1102 | 1106 | ||
1107 | /* The minimum time to wait on each channel for active scans | ||
1108 | * when it's possible to have longer scan dwell times. | ||
1109 | * Currently this is used whenever we're idle on all interfaces. | ||
1110 | * Longer dwell times improve detection of networks within a | ||
1111 | * single scan. | ||
1112 | * | ||
1113 | * Range: u32 tu/1000 | ||
1114 | */ | ||
1115 | u32 min_dwell_time_active_long; | ||
1116 | |||
1117 | /* The maximum time to wait on each channel for active scans | ||
1118 | * when it's possible to have longer scan dwell times. | ||
1119 | * See min_dwell_time_active_long | ||
1120 | * | ||
1121 | * Range: u32 tu/1000 | ||
1122 | */ | ||
1123 | u32 max_dwell_time_active_long; | ||
1124 | |||
1103 | /* time to wait on the channel for passive scans (in TU/1000) */ | 1125 | /* time to wait on the channel for passive scans (in TU/1000) */ |
1104 | u32 dwell_time_passive; | 1126 | u32 dwell_time_passive; |
1105 | 1127 | ||
diff --git a/drivers/net/wireless/ti/wlcore/scan.c b/drivers/net/wireless/ti/wlcore/scan.c index 7f42f8a4d90b..6cfdeaea12f0 100644 --- a/drivers/net/wireless/ti/wlcore/scan.c +++ b/drivers/net/wireless/ti/wlcore/scan.c | |||
@@ -89,6 +89,25 @@ out: | |||
89 | 89 | ||
90 | } | 90 | } |
91 | 91 | ||
92 | static void wlcore_started_vifs_iter(void *data, u8 *mac, | ||
93 | struct ieee80211_vif *vif) | ||
94 | { | ||
95 | int *count = (int *)data; | ||
96 | |||
97 | if (!vif->bss_conf.idle) | ||
98 | (*count)++; | ||
99 | } | ||
100 | |||
101 | static int wlcore_count_started_vifs(struct wl1271 *wl) | ||
102 | { | ||
103 | int count = 0; | ||
104 | |||
105 | ieee80211_iterate_active_interfaces_atomic(wl->hw, | ||
106 | IEEE80211_IFACE_ITER_RESUME_ALL, | ||
107 | wlcore_started_vifs_iter, &count); | ||
108 | return count; | ||
109 | } | ||
110 | |||
92 | static int | 111 | static int |
93 | wlcore_scan_get_channels(struct wl1271 *wl, | 112 | wlcore_scan_get_channels(struct wl1271 *wl, |
94 | struct ieee80211_channel *req_channels[], | 113 | struct ieee80211_channel *req_channels[], |
@@ -109,9 +128,14 @@ wlcore_scan_get_channels(struct wl1271 *wl, | |||
109 | /* configure dwell times according to scan type */ | 128 | /* configure dwell times according to scan type */ |
110 | if (scan_type == SCAN_TYPE_SEARCH) { | 129 | if (scan_type == SCAN_TYPE_SEARCH) { |
111 | struct conf_scan_settings *c = &wl->conf.scan; | 130 | struct conf_scan_settings *c = &wl->conf.scan; |
112 | 131 | bool active_vif_exists = !!wlcore_count_started_vifs(wl); | |
113 | min_dwell_time_active = c->min_dwell_time_active; | 132 | |
114 | max_dwell_time_active = c->max_dwell_time_active; | 133 | min_dwell_time_active = active_vif_exists ? |
134 | c->min_dwell_time_active : | ||
135 | c->min_dwell_time_active_long; | ||
136 | max_dwell_time_active = active_vif_exists ? | ||
137 | c->max_dwell_time_active : | ||
138 | c->max_dwell_time_active_long; | ||
115 | dwell_time_passive = c->dwell_time_passive; | 139 | dwell_time_passive = c->dwell_time_passive; |
116 | dwell_time_dfs = c->dwell_time_dfs; | 140 | dwell_time_dfs = c->dwell_time_dfs; |
117 | } else { | 141 | } else { |