diff options
Diffstat (limited to 'drivers/net/wireless/mwifiex/scan.c')
-rw-r--r-- | drivers/net/wireless/mwifiex/scan.c | 47 |
1 files changed, 23 insertions, 24 deletions
diff --git a/drivers/net/wireless/mwifiex/scan.c b/drivers/net/wireless/mwifiex/scan.c index 8f10038d1b45..fd0302fe5bd8 100644 --- a/drivers/net/wireless/mwifiex/scan.c +++ b/drivers/net/wireless/mwifiex/scan.c | |||
@@ -163,8 +163,7 @@ mwifiex_is_wpa_oui_present(struct mwifiex_bssdescriptor *bss_desc, u32 cipher) | |||
163 | * This function compares two SSIDs and checks if they match. | 163 | * This function compares two SSIDs and checks if they match. |
164 | */ | 164 | */ |
165 | s32 | 165 | s32 |
166 | mwifiex_ssid_cmp(struct mwifiex_802_11_ssid *ssid1, | 166 | mwifiex_ssid_cmp(struct cfg80211_ssid *ssid1, struct cfg80211_ssid *ssid2) |
167 | struct mwifiex_802_11_ssid *ssid2) | ||
168 | { | 167 | { |
169 | if (!ssid1 || !ssid2 || (ssid1->ssid_len != ssid2->ssid_len)) | 168 | if (!ssid1 || !ssid2 || (ssid1->ssid_len != ssid2->ssid_len)) |
170 | return -1; | 169 | return -1; |
@@ -738,7 +737,7 @@ mwifiex_scan_setup_scan_config(struct mwifiex_private *priv, | |||
738 | u16 scan_dur; | 737 | u16 scan_dur; |
739 | u8 channel; | 738 | u8 channel; |
740 | u8 radio_type; | 739 | u8 radio_type; |
741 | u32 ssid_idx; | 740 | int i; |
742 | u8 ssid_filter; | 741 | u8 ssid_filter; |
743 | u8 rates[MWIFIEX_SUPPORTED_RATES]; | 742 | u8 rates[MWIFIEX_SUPPORTED_RATES]; |
744 | u32 rates_size; | 743 | u32 rates_size; |
@@ -793,14 +792,8 @@ mwifiex_scan_setup_scan_config(struct mwifiex_private *priv, | |||
793 | user_scan_in->specific_bssid, | 792 | user_scan_in->specific_bssid, |
794 | sizeof(scan_cfg_out->specific_bssid)); | 793 | sizeof(scan_cfg_out->specific_bssid)); |
795 | 794 | ||
796 | for (ssid_idx = 0; | 795 | for (i = 0; i < user_scan_in->num_ssids; i++) { |
797 | ((ssid_idx < ARRAY_SIZE(user_scan_in->ssid_list)) | 796 | ssid_len = user_scan_in->ssid_list[i].ssid_len; |
798 | && (*user_scan_in->ssid_list[ssid_idx].ssid | ||
799 | || user_scan_in->ssid_list[ssid_idx].max_len)); | ||
800 | ssid_idx++) { | ||
801 | |||
802 | ssid_len = strlen(user_scan_in->ssid_list[ssid_idx]. | ||
803 | ssid) + 1; | ||
804 | 797 | ||
805 | wildcard_ssid_tlv = | 798 | wildcard_ssid_tlv = |
806 | (struct mwifiex_ie_types_wildcard_ssid_params *) | 799 | (struct mwifiex_ie_types_wildcard_ssid_params *) |
@@ -811,19 +804,26 @@ mwifiex_scan_setup_scan_config(struct mwifiex_private *priv, | |||
811 | (u16) (ssid_len + sizeof(wildcard_ssid_tlv-> | 804 | (u16) (ssid_len + sizeof(wildcard_ssid_tlv-> |
812 | max_ssid_length))); | 805 | max_ssid_length))); |
813 | 806 | ||
814 | /* max_ssid_length = 0 tells firmware to perform | 807 | /* |
815 | specific scan for the SSID filled */ | 808 | * max_ssid_length = 0 tells firmware to perform |
816 | wildcard_ssid_tlv->max_ssid_length = 0; | 809 | * specific scan for the SSID filled, whereas |
810 | * max_ssid_length = IEEE80211_MAX_SSID_LEN is for | ||
811 | * wildcard scan. | ||
812 | */ | ||
813 | if (ssid_len) | ||
814 | wildcard_ssid_tlv->max_ssid_length = 0; | ||
815 | else | ||
816 | wildcard_ssid_tlv->max_ssid_length = | ||
817 | IEEE80211_MAX_SSID_LEN; | ||
817 | 818 | ||
818 | memcpy(wildcard_ssid_tlv->ssid, | 819 | memcpy(wildcard_ssid_tlv->ssid, |
819 | user_scan_in->ssid_list[ssid_idx].ssid, | 820 | user_scan_in->ssid_list[i].ssid, ssid_len); |
820 | ssid_len); | ||
821 | 821 | ||
822 | tlv_pos += (sizeof(wildcard_ssid_tlv->header) | 822 | tlv_pos += (sizeof(wildcard_ssid_tlv->header) |
823 | + le16_to_cpu(wildcard_ssid_tlv->header.len)); | 823 | + le16_to_cpu(wildcard_ssid_tlv->header.len)); |
824 | 824 | ||
825 | dev_dbg(adapter->dev, "info: scan: ssid_list[%d]: %s, %d\n", | 825 | dev_dbg(adapter->dev, "info: scan: ssid[%d]: %s, %d\n", |
826 | ssid_idx, wildcard_ssid_tlv->ssid, | 826 | i, wildcard_ssid_tlv->ssid, |
827 | wildcard_ssid_tlv->max_ssid_length); | 827 | wildcard_ssid_tlv->max_ssid_length); |
828 | 828 | ||
829 | /* Empty wildcard ssid with a maxlen will match many or | 829 | /* Empty wildcard ssid with a maxlen will match many or |
@@ -832,7 +832,6 @@ mwifiex_scan_setup_scan_config(struct mwifiex_private *priv, | |||
832 | filtered. */ | 832 | filtered. */ |
833 | if (!ssid_len && wildcard_ssid_tlv->max_ssid_length) | 833 | if (!ssid_len && wildcard_ssid_tlv->max_ssid_length) |
834 | ssid_filter = false; | 834 | ssid_filter = false; |
835 | |||
836 | } | 835 | } |
837 | 836 | ||
838 | /* | 837 | /* |
@@ -841,7 +840,7 @@ mwifiex_scan_setup_scan_config(struct mwifiex_private *priv, | |||
841 | * truncate scan results. That is not an issue with an SSID | 840 | * truncate scan results. That is not an issue with an SSID |
842 | * or BSSID filter applied to the scan results in the firmware. | 841 | * or BSSID filter applied to the scan results in the firmware. |
843 | */ | 842 | */ |
844 | if ((ssid_idx && ssid_filter) | 843 | if ((i && ssid_filter) |
845 | || memcmp(scan_cfg_out->specific_bssid, &zero_mac, | 844 | || memcmp(scan_cfg_out->specific_bssid, &zero_mac, |
846 | sizeof(zero_mac))) | 845 | sizeof(zero_mac))) |
847 | *filtered_scan = true; | 846 | *filtered_scan = true; |
@@ -1851,7 +1850,7 @@ mwifiex_queue_scan_cmd(struct mwifiex_private *priv, | |||
1851 | * firmware, filtered on a specific SSID. | 1850 | * firmware, filtered on a specific SSID. |
1852 | */ | 1851 | */ |
1853 | static int mwifiex_scan_specific_ssid(struct mwifiex_private *priv, | 1852 | static int mwifiex_scan_specific_ssid(struct mwifiex_private *priv, |
1854 | struct mwifiex_802_11_ssid *req_ssid) | 1853 | struct cfg80211_ssid *req_ssid) |
1855 | { | 1854 | { |
1856 | struct mwifiex_adapter *adapter = priv->adapter; | 1855 | struct mwifiex_adapter *adapter = priv->adapter; |
1857 | int ret = 0; | 1856 | int ret = 0; |
@@ -1877,8 +1876,8 @@ static int mwifiex_scan_specific_ssid(struct mwifiex_private *priv, | |||
1877 | return -ENOMEM; | 1876 | return -ENOMEM; |
1878 | } | 1877 | } |
1879 | 1878 | ||
1880 | memcpy(scan_cfg->ssid_list[0].ssid, req_ssid->ssid, | 1879 | scan_cfg->ssid_list = req_ssid; |
1881 | req_ssid->ssid_len); | 1880 | scan_cfg->num_ssids = 1; |
1882 | 1881 | ||
1883 | ret = mwifiex_scan_networks(priv, scan_cfg); | 1882 | ret = mwifiex_scan_networks(priv, scan_cfg); |
1884 | 1883 | ||
@@ -1896,7 +1895,7 @@ static int mwifiex_scan_specific_ssid(struct mwifiex_private *priv, | |||
1896 | * scan, depending upon whether an SSID is provided or not. | 1895 | * scan, depending upon whether an SSID is provided or not. |
1897 | */ | 1896 | */ |
1898 | int mwifiex_request_scan(struct mwifiex_private *priv, | 1897 | int mwifiex_request_scan(struct mwifiex_private *priv, |
1899 | struct mwifiex_802_11_ssid *req_ssid) | 1898 | struct cfg80211_ssid *req_ssid) |
1900 | { | 1899 | { |
1901 | int ret; | 1900 | int ret; |
1902 | 1901 | ||