aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2009-02-10 15:25:55 -0500
committerJohn W. Linville <linville@tuxdriver.com>2009-02-13 13:45:49 -0500
commit2a5193119269062608582418deba7af82844159a (patch)
tree1f2fe8cffbeb7530dce7fa708310f6fb29ab0dd8 /drivers/net/wireless
parent849b7967818995a32c3017542e33eb3155944368 (diff)
cfg80211/nl80211: scanning (and mac80211 update to use it)
This patch adds basic scan capability to cfg80211/nl80211 and changes mac80211 to use it. The BSS list that cfg80211 maintains is made driver-accessible with a private area in each BSS struct, but mac80211 doesn't yet use it. That's another large project. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c12
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-core.c1
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-scan.c2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl3945-base.c17
4 files changed, 25 insertions, 7 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index c196abc6db7a..539960da7e13 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -2678,11 +2678,19 @@ static void iwl_bss_info_changed(struct ieee80211_hw *hw,
2678 2678
2679} 2679}
2680 2680
2681static int iwl_mac_hw_scan(struct ieee80211_hw *hw, u8 *ssid, size_t ssid_len) 2681static int iwl_mac_hw_scan(struct ieee80211_hw *hw,
2682 struct cfg80211_scan_request *req)
2682{ 2683{
2683 unsigned long flags; 2684 unsigned long flags;
2684 struct iwl_priv *priv = hw->priv; 2685 struct iwl_priv *priv = hw->priv;
2685 int ret; 2686 int ret;
2687 u8 *ssid = NULL;
2688 size_t ssid_len = 0;
2689
2690 if (req->n_ssids) {
2691 ssid = req->ssids[0].ssid;
2692 ssid_len = req->ssids[0].ssid_len;
2693 }
2686 2694
2687 IWL_DEBUG_MAC80211(priv, "enter\n"); 2695 IWL_DEBUG_MAC80211(priv, "enter\n");
2688 2696
@@ -2718,7 +2726,7 @@ static int iwl_mac_hw_scan(struct ieee80211_hw *hw, u8 *ssid, size_t ssid_len)
2718 2726
2719 if (ssid_len) { 2727 if (ssid_len) {
2720 priv->one_direct_scan = 1; 2728 priv->one_direct_scan = 1;
2721 priv->direct_ssid_len = min_t(u8, ssid_len, IW_ESSID_MAX_SIZE); 2729 priv->direct_ssid_len = ssid_len;
2722 memcpy(priv->direct_ssid, ssid, priv->direct_ssid_len); 2730 memcpy(priv->direct_ssid, ssid, priv->direct_ssid_len);
2723 } else { 2731 } else {
2724 priv->one_direct_scan = 0; 2732 priv->one_direct_scan = 0;
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
index e18c3f326f71..260bf903cb71 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.c
+++ b/drivers/net/wireless/iwlwifi/iwl-core.c
@@ -1271,6 +1271,7 @@ int iwl_setup_mac(struct iwl_priv *priv)
1271 BIT(NL80211_IFTYPE_ADHOC); 1271 BIT(NL80211_IFTYPE_ADHOC);
1272 1272
1273 hw->wiphy->custom_regulatory = true; 1273 hw->wiphy->custom_regulatory = true;
1274 hw->wiphy->max_scan_ssids = 1;
1274 1275
1275 /* Default value; 4 EDCA QOS priorities */ 1276 /* Default value; 4 EDCA QOS priorities */
1276 hw->queues = 4; 1277 hw->queues = 4;
diff --git a/drivers/net/wireless/iwlwifi/iwl-scan.c b/drivers/net/wireless/iwlwifi/iwl-scan.c
index 22bad3ce7d6a..1ec2b20eb37c 100644
--- a/drivers/net/wireless/iwlwifi/iwl-scan.c
+++ b/drivers/net/wireless/iwlwifi/iwl-scan.c
@@ -860,7 +860,7 @@ void iwl_bg_scan_completed(struct work_struct *work)
860 if (test_bit(STATUS_EXIT_PENDING, &priv->status)) 860 if (test_bit(STATUS_EXIT_PENDING, &priv->status))
861 return; 861 return;
862 862
863 ieee80211_scan_completed(priv->hw); 863 ieee80211_scan_completed(priv->hw, false);
864 864
865 /* Since setting the TXPOWER may have been deferred while 865 /* Since setting the TXPOWER may have been deferred while
866 * performing the scan, fire one off */ 866 * performing the scan, fire one off */
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index 42cc2884971c..0cd8cb96a5ef 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -4442,15 +4442,23 @@ static void iwl3945_bss_info_changed(struct ieee80211_hw *hw,
4442 4442
4443} 4443}
4444 4444
4445static int iwl3945_mac_hw_scan(struct ieee80211_hw *hw, u8 *ssid, size_t len) 4445static int iwl3945_mac_hw_scan(struct ieee80211_hw *hw,
4446 struct cfg80211_scan_request *req)
4446{ 4447{
4447 int rc = 0; 4448 int rc = 0;
4448 unsigned long flags; 4449 unsigned long flags;
4449 struct iwl_priv *priv = hw->priv; 4450 struct iwl_priv *priv = hw->priv;
4451 size_t len = 0;
4452 u8 *ssid = NULL;
4450 DECLARE_SSID_BUF(ssid_buf); 4453 DECLARE_SSID_BUF(ssid_buf);
4451 4454
4452 IWL_DEBUG_MAC80211(priv, "enter\n"); 4455 IWL_DEBUG_MAC80211(priv, "enter\n");
4453 4456
4457 if (req->n_ssids) {
4458 ssid = req->ssids[0].ssid;
4459 len = req->ssids[0].ssid_len;
4460 }
4461
4454 mutex_lock(&priv->mutex); 4462 mutex_lock(&priv->mutex);
4455 spin_lock_irqsave(&priv->lock, flags); 4463 spin_lock_irqsave(&priv->lock, flags);
4456 4464
@@ -4478,9 +4486,8 @@ static int iwl3945_mac_hw_scan(struct ieee80211_hw *hw, u8 *ssid, size_t len)
4478 print_ssid(ssid_buf, ssid, len), len); 4486 print_ssid(ssid_buf, ssid, len), len);
4479 4487
4480 priv->one_direct_scan = 1; 4488 priv->one_direct_scan = 1;
4481 priv->direct_ssid_len = (u8) 4489 priv->direct_ssid_len = len;
4482 min((u8) len, (u8) IW_ESSID_MAX_SIZE); 4490 memcpy(priv->direct_ssid, ssid, len);
4483 memcpy(priv->direct_ssid, ssid, priv->direct_ssid_len);
4484 } else 4491 } else
4485 priv->one_direct_scan = 0; 4492 priv->one_direct_scan = 0;
4486 4493
@@ -5412,6 +5419,8 @@ static int iwl3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e
5412 5419
5413 hw->wiphy->custom_regulatory = true; 5420 hw->wiphy->custom_regulatory = true;
5414 5421
5422 hw->wiphy->max_scan_ssids = 1;
5423
5415 /* 4 EDCA QOS priorities */ 5424 /* 4 EDCA QOS priorities */
5416 hw->queues = 4; 5425 hw->queues = 4;
5417 5426