mac80211: add pending brcmfmac patches fixing multiple interfaces
[openwrt.git] / package / kernel / mac80211 / patches / 324-brcmfmac-use-brcmf_get_ifp-to-map-ifidx-to-struct-br.patch
1 From: Arend van Spriel <arend@broadcom.com>
2 Date: Wed, 26 Aug 2015 22:14:58 +0200
3 Subject: [PATCH] brcmfmac: use brcmf_get_ifp() to map ifidx to struct
4  brcmf_if instance
5
6 The knowledge on how to map the interface index to a struct brcmf_if
7 instance is in brcmf_get_ifp() so use that function when only the
8 interface index is known instead of accessing brcmf_pub::iflist
9 directly.
10
11 Reviewed-by: Hante Meuleman <meuleman@broadcom.com>
12 Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com>
13 Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
14 Signed-off-by: Arend van Spriel <arend@broadcom.com>
15 ---
16
17 --- a/drivers/net/wireless/brcm80211/brcmfmac/btcoex.c
18 +++ b/drivers/net/wireless/brcm80211/brcmfmac/btcoex.c
19 @@ -149,7 +149,7 @@ static s32 brcmf_btcoex_params_read(stru
20  static void brcmf_btcoex_boost_wifi(struct brcmf_btcoex_info *btci,
21                                     bool trump_sco)
22  {
23 -       struct brcmf_if *ifp = btci->cfg->pub->iflist[0];
24 +       struct brcmf_if *ifp = brcmf_get_ifp(btci->cfg->pub, 0);
25  
26         if (trump_sco && !btci->saved_regs_part2) {
27                 /* this should reduce eSCO agressive
28 @@ -468,7 +468,7 @@ int brcmf_btcoex_set_mode(struct brcmf_c
29  {
30         struct brcmf_cfg80211_info *cfg = wiphy_priv(vif->wdev.wiphy);
31         struct brcmf_btcoex_info *btci = cfg->btcoex;
32 -       struct brcmf_if *ifp = cfg->pub->iflist[0];
33 +       struct brcmf_if *ifp = brcmf_get_ifp(cfg->pub, 0);
34  
35         switch (mode) {
36         case BRCMF_BTCOEX_DISABLED:
37 --- a/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c
38 +++ b/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c
39 @@ -6213,7 +6213,7 @@ static void brcmf_free_wiphy(struct wiph
40  struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr,
41                                                   struct device *busdev)
42  {
43 -       struct net_device *ndev = drvr->iflist[0]->ndev;
44 +       struct net_device *ndev = brcmf_get_ifp(drvr, 0)->ndev;
45         struct brcmf_cfg80211_info *cfg;
46         struct wiphy *wiphy;
47         struct brcmf_cfg80211_vif *vif;
48 --- a/drivers/net/wireless/brcm80211/brcmfmac/feature.c
49 +++ b/drivers/net/wireless/brcm80211/brcmfmac/feature.c
50 @@ -121,7 +121,7 @@ static void brcmf_feat_iovar_int_set(str
51  
52  void brcmf_feat_attach(struct brcmf_pub *drvr)
53  {
54 -       struct brcmf_if *ifp = drvr->iflist[0];
55 +       struct brcmf_if *ifp = brcmf_get_ifp(drvr, 0);
56  
57         brcmf_feat_iovar_int_get(ifp, BRCMF_FEAT_MCHAN, "mchan");
58         brcmf_feat_iovar_int_get(ifp, BRCMF_FEAT_PNO, "pfn");
59 --- a/drivers/net/wireless/brcm80211/brcmfmac/flowring.c
60 +++ b/drivers/net/wireless/brcm80211/brcmfmac/flowring.c
61 @@ -221,7 +221,7 @@ static void brcmf_flowring_block(struct
62  
63         bus_if = dev_get_drvdata(flow->dev);
64         drvr = bus_if->drvr;
65 -       ifp = drvr->iflist[ifidx];
66 +       ifp = brcmf_get_ifp(drvr, ifidx);
67         brcmf_txflowblock_if(ifp, BRCMF_NETIF_STOP_REASON_FLOW, blocked);
68  
69         spin_unlock_irqrestore(&flow->block_lock, flags);
70 --- a/drivers/net/wireless/brcm80211/brcmfmac/fweh.c
71 +++ b/drivers/net/wireless/brcm80211/brcmfmac/fweh.c
72 @@ -334,7 +334,7 @@ void brcmf_fweh_attach(struct brcmf_pub
73  void brcmf_fweh_detach(struct brcmf_pub *drvr)
74  {
75         struct brcmf_fweh_info *fweh = &drvr->fweh;
76 -       struct brcmf_if *ifp = drvr->iflist[0];
77 +       struct brcmf_if *ifp = brcmf_get_ifp(drvr, 0);
78         s8 eventmask[BRCMF_EVENTING_MASK_LEN];
79  
80         if (ifp) {
81 --- a/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
82 +++ b/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
83 @@ -972,7 +972,7 @@ static void
84  brcmf_fws_flow_control_check(struct brcmf_fws_info *fws, struct pktq *pq,
85                              u8 if_id)
86  {
87 -       struct brcmf_if *ifp = fws->drvr->iflist[!if_id ? 0 : if_id + 1];
88 +       struct brcmf_if *ifp = brcmf_get_ifp(fws->drvr, if_id);
89  
90         if (WARN_ON(!ifp))
91                 return;
92 @@ -2118,6 +2118,7 @@ static int brcmf_debugfs_fws_stats_read(
93  int brcmf_fws_init(struct brcmf_pub *drvr)
94  {
95         struct brcmf_fws_info *fws;
96 +       struct brcmf_if *ifp;
97         u32 tlv = BRCMF_FWS_FLAGS_RSSI_SIGNALS;
98         int rc;
99         u32 mode;
100 @@ -2177,21 +2178,22 @@ int brcmf_fws_init(struct brcmf_pub *drv
101          * continue. Set mode back to none indicating not enabled.
102          */
103         fws->fw_signals = true;
104 -       if (brcmf_fil_iovar_int_set(drvr->iflist[0], "tlv", tlv)) {
105 +       ifp = brcmf_get_ifp(drvr, 0);
106 +       if (brcmf_fil_iovar_int_set(ifp, "tlv", tlv)) {
107                 brcmf_err("failed to set bdcv2 tlv signaling\n");
108                 fws->fcmode = BRCMF_FWS_FCMODE_NONE;
109                 fws->fw_signals = false;
110         }
111  
112 -       if (brcmf_fil_iovar_int_set(drvr->iflist[0], "ampdu_hostreorder", 1))
113 +       if (brcmf_fil_iovar_int_set(ifp, "ampdu_hostreorder", 1))
114                 brcmf_dbg(INFO, "enabling AMPDU host-reorder failed\n");
115  
116         /* Enable seq number reuse, if supported */
117 -       if (brcmf_fil_iovar_int_get(drvr->iflist[0], "wlfc_mode", &mode) == 0) {
118 +       if (brcmf_fil_iovar_int_get(ifp, "wlfc_mode", &mode) == 0) {
119                 if (BRCMF_FWS_MODE_GET_REUSESEQ(mode)) {
120                         mode = 0;
121                         BRCMF_FWS_MODE_SET_REUSESEQ(mode, 1);
122 -                       if (brcmf_fil_iovar_int_set(drvr->iflist[0],
123 +                       if (brcmf_fil_iovar_int_set(ifp,
124                                                     "wlfc_mode", mode) == 0) {
125                                 BRCMF_FWS_MODE_SET_REUSESEQ(fws->mode, 1);
126                         }