aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/mwifiex/scan.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/mwifiex/scan.c')
-rw-r--r--drivers/net/wireless/mwifiex/scan.c47
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 */
165s32 165s32
166mwifiex_ssid_cmp(struct mwifiex_802_11_ssid *ssid1, 166mwifiex_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 */
1853static int mwifiex_scan_specific_ssid(struct mwifiex_private *priv, 1852static 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 */
1898int mwifiex_request_scan(struct mwifiex_private *priv, 1897int 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