ath10k-firmware: remove dependency on kmod-ath10k so that it can be selected instead
[15.05/openwrt.git] / package / kernel / mac80211 / patches / 376-0001-brcmfmac-Cleanup-ssid-storage.patch
1 From: Hante Meuleman <meuleman@broadcom.com>
2 Date: Wed, 25 Nov 2015 11:32:37 +0100
3 Subject: [PATCH] brcmfmac: Cleanup ssid storage.
4
5 SSIDs used for connect and p2p got stored, but never used.
6
7 Reviewed-by: Arend Van Spriel <arend@broadcom.com>
8 Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com>
9 Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
10 Signed-off-by: Hante Meuleman <meuleman@broadcom.com>
11 Signed-off-by: Arend van Spriel <arend@broadcom.com>
12 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
13 ---
14
15 --- a/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c
16 +++ b/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c
17 @@ -959,7 +959,7 @@ brcmf_run_escan(struct brcmf_cfg80211_in
18                 params_size += sizeof(u32) * ((request->n_channels + 1) / 2);
19  
20                 /* Allocate space for populating ssids in struct */
21 -               params_size += sizeof(struct brcmf_ssid) * request->n_ssids;
22 +               params_size += sizeof(struct brcmf_ssid_le) * request->n_ssids;
23         }
24  
25         params = kzalloc(params_size, GFP_KERNEL);
26 @@ -1291,6 +1291,7 @@ brcmf_cfg80211_join_ibss(struct wiphy *w
27         s32 wsec = 0;
28         s32 bcnprd;
29         u16 chanspec;
30 +       u32 ssid_len;
31  
32         brcmf_dbg(TRACE, "Enter\n");
33         if (!check_vif_up(ifp->vif))
34 @@ -1368,17 +1369,15 @@ brcmf_cfg80211_join_ibss(struct wiphy *w
35         memset(&join_params, 0, sizeof(struct brcmf_join_params));
36  
37         /* SSID */
38 -       profile->ssid.SSID_len = min_t(u32, params->ssid_len, 32);
39 -       memcpy(profile->ssid.SSID, params->ssid, profile->ssid.SSID_len);
40 -       memcpy(join_params.ssid_le.SSID, params->ssid, profile->ssid.SSID_len);
41 -       join_params.ssid_le.SSID_len = cpu_to_le32(profile->ssid.SSID_len);
42 +       ssid_len = min_t(u32, params->ssid_len, IEEE80211_MAX_SSID_LEN);
43 +       memcpy(join_params.ssid_le.SSID, params->ssid, ssid_len);
44 +       join_params.ssid_le.SSID_len = cpu_to_le32(ssid_len);
45         join_params_size = sizeof(join_params.ssid_le);
46  
47         /* BSSID */
48         if (params->bssid) {
49                 memcpy(join_params.params_le.bssid, params->bssid, ETH_ALEN);
50 -               join_params_size = sizeof(join_params.ssid_le) +
51 -                                  BRCMF_ASSOC_PARAMS_FIXED_SIZE;
52 +               join_params_size += BRCMF_ASSOC_PARAMS_FIXED_SIZE;
53                 memcpy(profile->bssid, params->bssid, ETH_ALEN);
54         } else {
55                 eth_broadcast_addr(join_params.params_le.bssid);
56 @@ -1728,7 +1727,6 @@ brcmf_cfg80211_connect(struct wiphy *wip
57  {
58         struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
59         struct brcmf_if *ifp = netdev_priv(ndev);
60 -       struct brcmf_cfg80211_profile *profile = &ifp->vif->profile;
61         struct ieee80211_channel *chan = sme->channel;
62         struct brcmf_join_params join_params;
63         size_t join_params_size;
64 @@ -1739,6 +1737,7 @@ brcmf_cfg80211_connect(struct wiphy *wip
65         struct brcmf_ext_join_params_le *ext_join_params;
66         u16 chanspec;
67         s32 err = 0;
68 +       u32 ssid_len;
69  
70         brcmf_dbg(TRACE, "Enter\n");
71         if (!check_vif_up(ifp->vif))
72 @@ -1824,15 +1823,6 @@ brcmf_cfg80211_connect(struct wiphy *wip
73                 goto done;
74         }
75  
76 -       profile->ssid.SSID_len = min_t(u32, (u32)sizeof(profile->ssid.SSID),
77 -                                      (u32)sme->ssid_len);
78 -       memcpy(&profile->ssid.SSID, sme->ssid, profile->ssid.SSID_len);
79 -       if (profile->ssid.SSID_len < IEEE80211_MAX_SSID_LEN) {
80 -               profile->ssid.SSID[profile->ssid.SSID_len] = 0;
81 -               brcmf_dbg(CONN, "SSID \"%s\", len (%d)\n", profile->ssid.SSID,
82 -                         profile->ssid.SSID_len);
83 -       }
84 -
85         /* Join with specific BSSID and cached SSID
86          * If SSID is zero join based on BSSID only
87          */
88 @@ -1845,9 +1835,12 @@ brcmf_cfg80211_connect(struct wiphy *wip
89                 err = -ENOMEM;
90                 goto done;
91         }
92 -       ext_join_params->ssid_le.SSID_len = cpu_to_le32(profile->ssid.SSID_len);
93 -       memcpy(&ext_join_params->ssid_le.SSID, sme->ssid,
94 -              profile->ssid.SSID_len);
95 +       ssid_len = min_t(u32, sme->ssid_len, IEEE80211_MAX_SSID_LEN);
96 +       ext_join_params->ssid_le.SSID_len = cpu_to_le32(ssid_len);
97 +       memcpy(&ext_join_params->ssid_le.SSID, sme->ssid, ssid_len);
98 +       if (ssid_len < IEEE80211_MAX_SSID_LEN)
99 +               brcmf_dbg(CONN, "SSID \"%s\", len (%d)\n",
100 +                         ext_join_params->ssid_le.SSID, ssid_len);
101  
102         /* Set up join scan parameters */
103         ext_join_params->scan_le.scan_type = -1;
104 @@ -1895,8 +1888,8 @@ brcmf_cfg80211_connect(struct wiphy *wip
105         memset(&join_params, 0, sizeof(join_params));
106         join_params_size = sizeof(join_params.ssid_le);
107  
108 -       memcpy(&join_params.ssid_le.SSID, sme->ssid, profile->ssid.SSID_len);
109 -       join_params.ssid_le.SSID_len = cpu_to_le32(profile->ssid.SSID_len);
110 +       memcpy(&join_params.ssid_le.SSID, sme->ssid, ssid_len);
111 +       join_params.ssid_le.SSID_len = cpu_to_le32(ssid_len);
112  
113         if (sme->bssid)
114                 memcpy(join_params.params_le.bssid, sme->bssid, ETH_ALEN);
115 @@ -2775,9 +2768,7 @@ CleanUp:
116  static s32 brcmf_update_bss_info(struct brcmf_cfg80211_info *cfg,
117                                  struct brcmf_if *ifp)
118  {
119 -       struct brcmf_cfg80211_profile *profile = ndev_to_prof(ifp->ndev);
120         struct brcmf_bss_info_le *bi;
121 -       struct brcmf_ssid *ssid;
122         const struct brcmf_tlv *tim;
123         u16 beacon_interval;
124         u8 dtim_period;
125 @@ -2789,8 +2780,6 @@ static s32 brcmf_update_bss_info(struct
126         if (brcmf_is_ibssmode(ifp->vif))
127                 return err;
128  
129 -       ssid = &profile->ssid;
130 -
131         *(__le32 *)cfg->extra_buf = cpu_to_le32(WL_EXTRA_BUF_MAX);
132         err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_BSS_INFO,
133                                      cfg->extra_buf, WL_EXTRA_BUF_MAX);
134 --- a/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.h
135 +++ b/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.h
136 @@ -124,13 +124,11 @@ struct brcmf_cfg80211_security {
137  /**
138   * struct brcmf_cfg80211_profile - profile information.
139   *
140 - * @ssid: ssid of associated/associating ap.
141   * @bssid: bssid of joined/joining ibss.
142   * @sec: security information.
143   * @key: key information
144   */
145  struct brcmf_cfg80211_profile {
146 -       struct brcmf_ssid ssid;
147         u8 bssid[ETH_ALEN];
148         struct brcmf_cfg80211_security sec;
149         struct brcmf_wsec_key key[BRCMF_MAX_DEFAULT_KEYS];
150 --- a/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h
151 +++ b/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h
152 @@ -282,14 +282,9 @@ struct brcm_rateset_le {
153         u8 rates[BRCMF_MAXRATES_IN_SET];
154  };
155  
156 -struct brcmf_ssid {
157 -       u32 SSID_len;
158 -       unsigned char SSID[32];
159 -};
160 -
161  struct brcmf_ssid_le {
162         __le32 SSID_len;
163 -       unsigned char SSID[32];
164 +       unsigned char SSID[IEEE80211_MAX_SSID_LEN];
165  };
166  
167  struct brcmf_scan_params_le {
168 --- a/drivers/net/wireless/brcm80211/brcmfmac/p2p.c
169 +++ b/drivers/net/wireless/brcm80211/brcmfmac/p2p.c
170 @@ -642,7 +642,6 @@ static s32 brcmf_p2p_escan(struct brcmf_
171         struct brcmf_cfg80211_vif *vif;
172         struct brcmf_p2p_scan_le *p2p_params;
173         struct brcmf_scan_params_le *sparams;
174 -       struct brcmf_ssid ssid;
175  
176         memsize += num_chans * sizeof(__le16);
177         memblk = kzalloc(memsize, GFP_KERNEL);
178 @@ -655,16 +654,16 @@ static s32 brcmf_p2p_escan(struct brcmf_
179                 ret = -EINVAL;
180                 goto exit;
181         }
182 +       p2p_params = (struct brcmf_p2p_scan_le *)memblk;
183 +       sparams = &p2p_params->eparams.params_le;
184  
185         switch (search_state) {
186         case WL_P2P_DISC_ST_SEARCH:
187                 /*
188                  * If we in SEARCH STATE, we don't need to set SSID explictly
189 -                * because dongle use P2P WILDCARD internally by default
190 +                * because dongle use P2P WILDCARD internally by default, use
191 +                * null ssid, which it is already due to kzalloc.
192                  */
193 -               /* use null ssid */
194 -               ssid.SSID_len = 0;
195 -               memset(ssid.SSID, 0, sizeof(ssid.SSID));
196                 break;
197         case WL_P2P_DISC_ST_SCAN:
198                 /*
199 @@ -673,8 +672,10 @@ static s32 brcmf_p2p_escan(struct brcmf_
200                  * P2P WILDCARD because we just do broadcast scan unless
201                  * setting SSID.
202                  */
203 -               ssid.SSID_len = BRCMF_P2P_WILDCARD_SSID_LEN;
204 -               memcpy(ssid.SSID, BRCMF_P2P_WILDCARD_SSID, ssid.SSID_len);
205 +               sparams->ssid_le.SSID_len =
206 +                               cpu_to_le32(BRCMF_P2P_WILDCARD_SSID_LEN);
207 +               memcpy(sparams->ssid_le.SSID, BRCMF_P2P_WILDCARD_SSID,
208 +                      BRCMF_P2P_WILDCARD_SSID_LEN);
209                 break;
210         default:
211                 brcmf_err(" invalid search state %d\n", search_state);
212 @@ -687,11 +688,9 @@ static s32 brcmf_p2p_escan(struct brcmf_
213         /*
214          * set p2p scan parameters.
215          */
216 -       p2p_params = (struct brcmf_p2p_scan_le *)memblk;
217         p2p_params->type = 'E';
218  
219         /* determine the scan engine parameters */
220 -       sparams = &p2p_params->eparams.params_le;
221         sparams->bss_type = DOT11_BSSTYPE_ANY;
222         if (p2p->cfg->active_scan)
223                 sparams->scan_type = 0;
224 @@ -699,9 +698,6 @@ static s32 brcmf_p2p_escan(struct brcmf_
225                 sparams->scan_type = 1;
226  
227         eth_broadcast_addr(sparams->bssid);
228 -       if (ssid.SSID_len)
229 -               memcpy(sparams->ssid_le.SSID, ssid.SSID, ssid.SSID_len);
230 -       sparams->ssid_le.SSID_len = cpu_to_le32(ssid.SSID_len);
231         sparams->home_time = cpu_to_le32(P2PAPI_SCAN_HOME_TIME_MS);
232  
233         /*
234 --- a/drivers/net/wireless/brcm80211/brcmfmac/p2p.h
235 +++ b/drivers/net/wireless/brcm80211/brcmfmac/p2p.h
236 @@ -112,7 +112,6 @@ struct afx_hdl {
237   * @int_addr: P2P interface address.
238   * @bss_idx: informate for P2P bss types.
239   * @listen_timer: timer for @WL_P2P_DISC_ST_LISTEN discover state.
240 - * @ssid: ssid for P2P GO.
241   * @listen_channel: channel for @WL_P2P_DISC_ST_LISTEN discover state.
242   * @remain_on_channel: contains copy of struct used by cfg80211.
243   * @remain_on_channel_cookie: cookie counter for remain on channel cmd
244 @@ -133,7 +132,6 @@ struct brcmf_p2p_info {
245         u8 int_addr[ETH_ALEN];
246         struct p2p_bss bss_idx[P2PAPI_BSSCFG_MAX];
247         struct timer_list listen_timer;
248 -       struct brcmf_ssid ssid;
249         u8 listen_channel;
250         struct ieee80211_channel remain_on_channel;
251         u32 remain_on_channel_cookie;