aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/libertas/assoc.c8
-rw-r--r--drivers/net/wireless/libertas/scan.c7
-rw-r--r--drivers/net/wireless/libertas/scan.h3
3 files changed, 13 insertions, 5 deletions
diff --git a/drivers/net/wireless/libertas/assoc.c b/drivers/net/wireless/libertas/assoc.c
index afce32761bfd..4fcc6a653d99 100644
--- a/drivers/net/wireless/libertas/assoc.c
+++ b/drivers/net/wireless/libertas/assoc.c
@@ -70,6 +70,7 @@ static int assoc_helper_essid(wlan_private *priv,
70 wlan_adapter *adapter = priv->adapter; 70 wlan_adapter *adapter = priv->adapter;
71 int ret = 0; 71 int ret = 0;
72 struct bss_descriptor * bss; 72 struct bss_descriptor * bss;
73 int channel = -1;
73 74
74 lbs_deb_enter(LBS_DEB_ASSOC); 75 lbs_deb_enter(LBS_DEB_ASSOC);
75 76
@@ -77,6 +78,9 @@ static int assoc_helper_essid(wlan_private *priv,
77 * is set. 78 * is set.
78 */ 79 */
79 80
81 if (test_bit(ASSOC_FLAG_CHANNEL, &assoc_req->flags))
82 channel = assoc_req->channel;
83
80 lbs_deb_assoc("New SSID requested: %s\n", assoc_req->ssid.ssid); 84 lbs_deb_assoc("New SSID requested: %s\n", assoc_req->ssid.ssid);
81 if (assoc_req->mode == IW_MODE_INFRA) { 85 if (assoc_req->mode == IW_MODE_INFRA) {
82 if (adapter->prescan) { 86 if (adapter->prescan) {
@@ -84,7 +88,7 @@ static int assoc_helper_essid(wlan_private *priv,
84 } 88 }
85 89
86 bss = libertas_find_SSID_in_list(adapter, &assoc_req->ssid, 90 bss = libertas_find_SSID_in_list(adapter, &assoc_req->ssid,
87 NULL, IW_MODE_INFRA); 91 NULL, IW_MODE_INFRA, channel);
88 if (bss != NULL) { 92 if (bss != NULL) {
89 lbs_deb_assoc("SSID found in scan list, associating\n"); 93 lbs_deb_assoc("SSID found in scan list, associating\n");
90 memcpy(&assoc_req->bss, bss, sizeof(struct bss_descriptor)); 94 memcpy(&assoc_req->bss, bss, sizeof(struct bss_descriptor));
@@ -101,7 +105,7 @@ static int assoc_helper_essid(wlan_private *priv,
101 105
102 /* Search for the requested SSID in the scan table */ 106 /* Search for the requested SSID in the scan table */
103 bss = libertas_find_SSID_in_list(adapter, &assoc_req->ssid, NULL, 107 bss = libertas_find_SSID_in_list(adapter, &assoc_req->ssid, NULL,
104 IW_MODE_ADHOC); 108 IW_MODE_ADHOC, channel);
105 if (bss != NULL) { 109 if (bss != NULL) {
106 lbs_deb_assoc("SSID found joining\n"); 110 lbs_deb_assoc("SSID found joining\n");
107 memcpy(&assoc_req->bss, bss, sizeof(struct bss_descriptor)); 111 memcpy(&assoc_req->bss, bss, sizeof(struct bss_descriptor));
diff --git a/drivers/net/wireless/libertas/scan.c b/drivers/net/wireless/libertas/scan.c
index 8aaac5f6c9de..83b1612e84bf 100644
--- a/drivers/net/wireless/libertas/scan.c
+++ b/drivers/net/wireless/libertas/scan.c
@@ -1268,7 +1268,8 @@ struct bss_descriptor * libertas_find_BSSID_in_list(wlan_adapter * adapter,
1268 * @return index in BSSID list 1268 * @return index in BSSID list
1269 */ 1269 */
1270struct bss_descriptor * libertas_find_SSID_in_list(wlan_adapter * adapter, 1270struct bss_descriptor * libertas_find_SSID_in_list(wlan_adapter * adapter,
1271 struct WLAN_802_11_SSID *ssid, u8 * bssid, u8 mode) 1271 struct WLAN_802_11_SSID *ssid, u8 * bssid, u8 mode,
1272 int channel)
1272{ 1273{
1273 u8 bestrssi = 0; 1274 u8 bestrssi = 0;
1274 struct bss_descriptor * iter_bss = NULL; 1275 struct bss_descriptor * iter_bss = NULL;
@@ -1286,6 +1287,8 @@ struct bss_descriptor * libertas_find_SSID_in_list(wlan_adapter * adapter,
1286 continue; /* ssid doesn't match */ 1287 continue; /* ssid doesn't match */
1287 if (bssid && compare_ether_addr(iter_bss->bssid, bssid) != 0) 1288 if (bssid && compare_ether_addr(iter_bss->bssid, bssid) != 0)
1288 continue; /* bssid doesn't match */ 1289 continue; /* bssid doesn't match */
1290 if ((channel > 0) && (iter_bss->channel != channel))
1291 continue; /* channel doesn't match */
1289 1292
1290 switch (mode) { 1293 switch (mode) {
1291 case IW_MODE_INFRA: 1294 case IW_MODE_INFRA:
@@ -1661,7 +1664,7 @@ int libertas_get_scan(struct net_device *dev, struct iw_request_info *info,
1661 wlan_scan_networks(priv, NULL, 0); 1664 wlan_scan_networks(priv, NULL, 0);
1662 1665
1663 /* Update RSSI if current BSS is a locally created ad-hoc BSS */ 1666 /* Update RSSI if current BSS is a locally created ad-hoc BSS */
1664 if ((adapter->inframode == wlan802_11ibss) && adapter->adhoccreate) { 1667 if ((adapter->mode == IW_MODE_ADHOC) && adapter->adhoccreate) {
1665 libertas_prepare_and_send_command(priv, cmd_802_11_rssi, 0, 1668 libertas_prepare_and_send_command(priv, cmd_802_11_rssi, 0,
1666 cmd_option_waitforrsp, 0, NULL); 1669 cmd_option_waitforrsp, 0, NULL);
1667 } 1670 }
diff --git a/drivers/net/wireless/libertas/scan.h b/drivers/net/wireless/libertas/scan.h
index 4ad130ff6e7e..df7481c11f68 100644
--- a/drivers/net/wireless/libertas/scan.h
+++ b/drivers/net/wireless/libertas/scan.h
@@ -178,7 +178,8 @@ extern int libertas_SSID_cmp(struct WLAN_802_11_SSID *ssid1,
178 struct WLAN_802_11_SSID *ssid2); 178 struct WLAN_802_11_SSID *ssid2);
179 179
180struct bss_descriptor * libertas_find_SSID_in_list(wlan_adapter * adapter, 180struct bss_descriptor * libertas_find_SSID_in_list(wlan_adapter * adapter,
181 struct WLAN_802_11_SSID *ssid, u8 * bssid, u8 mode); 181 struct WLAN_802_11_SSID *ssid, u8 * bssid, u8 mode,
182 int channel);
182 183
183struct bss_descriptor * libertas_find_best_SSID_in_list(wlan_adapter * adapter, 184struct bss_descriptor * libertas_find_best_SSID_in_list(wlan_adapter * adapter,
184 u8 mode); 185 u8 mode);