aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/wl12xx
diff options
context:
space:
mode:
authorJuuso Oikarinen <juuso.oikarinen@nokia.com>2010-05-24 04:18:20 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-06-02 16:13:37 -0400
commit4fb26fa9ae043810eb99c22364d23ffc3b271b8d (patch)
treebc296f706100f561f530ef2eddc60852f5ad2501 /drivers/net/wireless/wl12xx
parent5da54f94992b35fd58ad5b569abe8ca04048f8f1 (diff)
wl1271: Fix scan parameter handling for 5GHz
The 5GHz bands were scanned without the proper IE's in place, preventing proper 5GHz scanning. This patches fixes the problem by storing a pointer to the scan request (with the IE's) for all iterations of scan. Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com> Reviewed-by: Luciano Coelho <luciano.coelho@nokia.com> Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/wl12xx')
-rw-r--r--drivers/net/wireless/wl12xx/wl1271.h1
-rw-r--r--drivers/net/wireless/wl12xx/wl1271_cmd.c8
-rw-r--r--drivers/net/wireless/wl12xx/wl1271_cmd.h2
-rw-r--r--drivers/net/wireless/wl12xx/wl1271_event.c10
-rw-r--r--drivers/net/wireless/wl12xx/wl1271_main.c10
5 files changed, 16 insertions, 15 deletions
diff --git a/drivers/net/wireless/wl12xx/wl1271.h b/drivers/net/wireless/wl12xx/wl1271.h
index 4984f46626d2..1b52ce6a84d7 100644
--- a/drivers/net/wireless/wl12xx/wl1271.h
+++ b/drivers/net/wireless/wl12xx/wl1271.h
@@ -299,6 +299,7 @@ struct wl1271_rx_mem_pool_addr {
299}; 299};
300 300
301struct wl1271_scan { 301struct wl1271_scan {
302 struct cfg80211_scan_request *req;
302 u8 state; 303 u8 state;
303 u8 ssid[IW_ESSID_MAX_SIZE+1]; 304 u8 ssid[IW_ESSID_MAX_SIZE+1];
304 size_t ssid_len; 305 size_t ssid_len;
diff --git a/drivers/net/wireless/wl12xx/wl1271_cmd.c b/drivers/net/wireless/wl12xx/wl1271_cmd.c
index dcad42ccc9d4..530678e45a13 100644
--- a/drivers/net/wireless/wl12xx/wl1271_cmd.c
+++ b/drivers/net/wireless/wl12xx/wl1271_cmd.c
@@ -568,7 +568,7 @@ out:
568} 568}
569 569
570int wl1271_cmd_scan(struct wl1271 *wl, const u8 *ssid, size_t ssid_len, 570int wl1271_cmd_scan(struct wl1271 *wl, const u8 *ssid, size_t ssid_len,
571 const u8 *ie, size_t ie_len, u8 active_scan, 571 struct cfg80211_scan_request *req, u8 active_scan,
572 u8 high_prio, u8 band, u8 probe_requests) 572 u8 high_prio, u8 band, u8 probe_requests)
573{ 573{
574 574
@@ -649,7 +649,7 @@ int wl1271_cmd_scan(struct wl1271 *wl, const u8 *ssid, size_t ssid_len,
649 } 649 }
650 650
651 ret = wl1271_cmd_build_probe_req(wl, ssid, ssid_len, 651 ret = wl1271_cmd_build_probe_req(wl, ssid, ssid_len,
652 ie, ie_len, ieee_band); 652 req->ie, req->ie_len, ieee_band);
653 if (ret < 0) { 653 if (ret < 0) {
654 wl1271_error("PROBE request template failed"); 654 wl1271_error("PROBE request template failed");
655 goto out; 655 goto out;
@@ -685,7 +685,9 @@ int wl1271_cmd_scan(struct wl1271 *wl, const u8 *ssid, size_t ssid_len,
685 memcpy(wl->scan.ssid, ssid, ssid_len); 685 memcpy(wl->scan.ssid, ssid, ssid_len);
686 } else 686 } else
687 wl->scan.ssid_len = 0; 687 wl->scan.ssid_len = 0;
688 } 688 wl->scan.req = req;
689 } else
690 wl->scan.req = NULL;
689 } 691 }
690 692
691 ret = wl1271_cmd_send(wl, CMD_SCAN, params, sizeof(*params), 0); 693 ret = wl1271_cmd_send(wl, CMD_SCAN, params, sizeof(*params), 0);
diff --git a/drivers/net/wireless/wl12xx/wl1271_cmd.h b/drivers/net/wireless/wl12xx/wl1271_cmd.h
index 4ff966f6354b..68001dffe716 100644
--- a/drivers/net/wireless/wl12xx/wl1271_cmd.h
+++ b/drivers/net/wireless/wl12xx/wl1271_cmd.h
@@ -42,7 +42,7 @@ int wl1271_cmd_ps_mode(struct wl1271 *wl, u8 ps_mode, bool send);
42int wl1271_cmd_read_memory(struct wl1271 *wl, u32 addr, void *answer, 42int wl1271_cmd_read_memory(struct wl1271 *wl, u32 addr, void *answer,
43 size_t len); 43 size_t len);
44int wl1271_cmd_scan(struct wl1271 *wl, const u8 *ssid, size_t ssid_len, 44int wl1271_cmd_scan(struct wl1271 *wl, const u8 *ssid, size_t ssid_len,
45 const u8 *ie, size_t ie_len, u8 active_scan, 45 struct cfg80211_scan_request *req, u8 active_scan,
46 u8 high_prio, u8 band, u8 probe_requests); 46 u8 high_prio, u8 band, u8 probe_requests);
47int wl1271_cmd_template_set(struct wl1271 *wl, u16 template_id, 47int wl1271_cmd_template_set(struct wl1271 *wl, u16 template_id,
48 void *buf, size_t buf_len, int index, u32 rates); 48 void *buf, size_t buf_len, int index, u32 rates);
diff --git a/drivers/net/wireless/wl12xx/wl1271_event.c b/drivers/net/wireless/wl12xx/wl1271_event.c
index cf37aa6eb137..ca52cdec7a8f 100644
--- a/drivers/net/wireless/wl12xx/wl1271_event.c
+++ b/drivers/net/wireless/wl12xx/wl1271_event.c
@@ -43,11 +43,11 @@ static int wl1271_event_scan_complete(struct wl1271 *wl,
43 clear_bit(WL1271_FLAG_SCANNING, &wl->flags); 43 clear_bit(WL1271_FLAG_SCANNING, &wl->flags);
44 /* FIXME: ie missing! */ 44 /* FIXME: ie missing! */
45 wl1271_cmd_scan(wl, wl->scan.ssid, wl->scan.ssid_len, 45 wl1271_cmd_scan(wl, wl->scan.ssid, wl->scan.ssid_len,
46 NULL, 0, 46 wl->scan.req,
47 wl->scan.active, 47 wl->scan.active,
48 wl->scan.high_prio, 48 wl->scan.high_prio,
49 WL1271_SCAN_BAND_5_GHZ, 49 WL1271_SCAN_BAND_5_GHZ,
50 wl->scan.probe_requests); 50 wl->scan.probe_requests);
51 } else { 51 } else {
52 mutex_unlock(&wl->mutex); 52 mutex_unlock(&wl->mutex);
53 ieee80211_scan_completed(wl->hw, false); 53 ieee80211_scan_completed(wl->hw, false);
diff --git a/drivers/net/wireless/wl12xx/wl1271_main.c b/drivers/net/wireless/wl12xx/wl1271_main.c
index 7bf655d55152..7a14da506d78 100644
--- a/drivers/net/wireless/wl12xx/wl1271_main.c
+++ b/drivers/net/wireless/wl12xx/wl1271_main.c
@@ -1634,13 +1634,11 @@ static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
1634 goto out; 1634 goto out;
1635 1635
1636 if (wl1271_11a_enabled()) 1636 if (wl1271_11a_enabled())
1637 ret = wl1271_cmd_scan(hw->priv, ssid, len, 1637 ret = wl1271_cmd_scan(hw->priv, ssid, len, req,
1638 req->ie, req->ie_len, 1, 0, 1638 1, 0, WL1271_SCAN_BAND_DUAL, 3);
1639 WL1271_SCAN_BAND_DUAL, 3);
1640 else 1639 else
1641 ret = wl1271_cmd_scan(hw->priv, ssid, len, 1640 ret = wl1271_cmd_scan(hw->priv, ssid, len, req,
1642 req->ie, req->ie_len, 1, 0, 1641 1, 0, WL1271_SCAN_BAND_2_4_GHZ, 3);
1643 WL1271_SCAN_BAND_2_4_GHZ, 3);
1644 1642
1645 wl1271_ps_elp_sleep(wl); 1643 wl1271_ps_elp_sleep(wl);
1646 1644