mac80211: brcmfmac: fix getting/setting TX power
[15.05/openwrt.git] / package / kernel / mac80211 / patches / 370-0005-brcmfmac-Inform-p2p-module-about-p2pon-through-API.patch
1 From: Hante Meuleman <meuleman@broadcom.com>
2 Date: Fri, 18 Sep 2015 22:08:08 +0200
3 Subject: [PATCH] brcmfmac: Inform p2p module about p2pon through API
4
5 When the p2pon module param is used then p2p attach will initialize
6 p2p device iface in the firmware, but it is doing that by checking
7 data. It is cleaner to pass the p2pon information to p2p by API.
8 This information is also needed for other patch.
9
10 Reviewed-by: Arend Van Spriel <arend@broadcom.com>
11 Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
12 Signed-off-by: Hante Meuleman <meuleman@broadcom.com>
13 Signed-off-by: Arend van Spriel <arend@broadcom.com>
14 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
15 ---
16
17 --- a/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c
18 +++ b/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c
19 @@ -6126,7 +6126,8 @@ static void brcmf_free_wiphy(struct wiph
20  }
21  
22  struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr,
23 -                                                 struct device *busdev)
24 +                                                 struct device *busdev,
25 +                                                 bool p2pdev_forced)
26  {
27         struct net_device *ndev = brcmf_get_ifp(drvr, 0)->ndev;
28         struct brcmf_cfg80211_info *cfg;
29 @@ -6218,7 +6219,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
30                         *cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
31         }
32  
33 -       err = brcmf_p2p_attach(cfg);
34 +       err = brcmf_p2p_attach(cfg, p2pdev_forced);
35         if (err) {
36                 brcmf_err("P2P initilisation failed (%d)\n", err);
37                 goto wiphy_unreg_out;
38 --- a/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.h
39 +++ b/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.h
40 @@ -469,7 +469,8 @@ brcmf_cfg80211_connect_info *cfg_to_conn
41  }
42  
43  struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr,
44 -                                                 struct device *busdev);
45 +                                                 struct device *busdev,
46 +                                                 bool p2pdev_forced);
47  void brcmf_cfg80211_detach(struct brcmf_cfg80211_info *cfg);
48  s32 brcmf_cfg80211_up(struct net_device *ndev);
49  s32 brcmf_cfg80211_down(struct net_device *ndev);
50 --- a/drivers/net/wireless/brcm80211/brcmfmac/core.c
51 +++ b/drivers/net/wireless/brcm80211/brcmfmac/core.c
52 @@ -1044,7 +1044,8 @@ int brcmf_bus_start(struct device *dev)
53  
54         brcmf_fws_add_interface(ifp);
55  
56 -       drvr->config = brcmf_cfg80211_attach(drvr, bus_if->dev);
57 +       drvr->config = brcmf_cfg80211_attach(drvr, bus_if->dev,
58 +                                            brcmf_p2p_enable);
59         if (drvr->config == NULL) {
60                 ret = -ENOMEM;
61                 goto fail;
62 --- a/drivers/net/wireless/brcm80211/brcmfmac/p2p.c
63 +++ b/drivers/net/wireless/brcm80211/brcmfmac/p2p.c
64 @@ -2333,7 +2333,7 @@ void brcmf_p2p_stop_device(struct wiphy
65   *
66   * @cfg: driver private data for cfg80211 interface.
67   */
68 -s32 brcmf_p2p_attach(struct brcmf_cfg80211_info *cfg)
69 +s32 brcmf_p2p_attach(struct brcmf_cfg80211_info *cfg, bool p2pdev_forced)
70  {
71         struct brcmf_if *pri_ifp;
72         struct brcmf_if *p2p_ifp;
73 @@ -2348,11 +2348,15 @@ s32 brcmf_p2p_attach(struct brcmf_cfg802
74  
75         drvr = cfg->pub;
76  
77 -       pri_ifp = drvr->iflist[0];
78 -       p2p_ifp = drvr->iflist[1];
79 -
80 +       pri_ifp = brcmf_get_ifp(drvr, 0);
81         p2p->bss_idx[P2PAPI_BSSCFG_PRIMARY].vif = pri_ifp->vif;
82  
83 +       if (p2pdev_forced) {
84 +               p2p_ifp = drvr->iflist[1];
85 +       } else {
86 +               p2p_ifp = NULL;
87 +               p2p->p2pdev_dynamically = true;
88 +       }
89         if (p2p_ifp) {
90                 p2p_vif = brcmf_alloc_vif(cfg, NL80211_IFTYPE_P2P_DEVICE,
91                                           false);
92 --- a/drivers/net/wireless/brcm80211/brcmfmac/p2p.h
93 +++ b/drivers/net/wireless/brcm80211/brcmfmac/p2p.h
94 @@ -124,6 +124,7 @@ struct afx_hdl {
95   * @wait_next_af: thread synchronizing struct.
96   * @gon_req_action: about to send go negotiation requets frame.
97   * @block_gon_req_tx: drop tx go negotiation requets frame.
98 + * @p2pdev_dynamically: is p2p device if created by module param or supplicant.
99   */
100  struct brcmf_p2p_info {
101         struct brcmf_cfg80211_info *cfg;
102 @@ -144,9 +145,10 @@ struct brcmf_p2p_info {
103         struct completion wait_next_af;
104         bool gon_req_action;
105         bool block_gon_req_tx;
106 +       bool p2pdev_dynamically;
107  };
108  
109 -s32 brcmf_p2p_attach(struct brcmf_cfg80211_info *cfg);
110 +s32 brcmf_p2p_attach(struct brcmf_cfg80211_info *cfg, bool p2pdev_forced);
111  void brcmf_p2p_detach(struct brcmf_p2p_info *p2p);
112  struct wireless_dev *brcmf_p2p_add_vif(struct wiphy *wiphy, const char *name,
113                                        enum nl80211_iftype type, u32 *flags,