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
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.
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>
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
22 struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr,
23 - struct device *busdev)
24 + struct device *busdev,
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;
33 - err = brcmf_p2p_attach(cfg);
34 + err = brcmf_p2p_attach(cfg, p2pdev_forced);
36 brcmf_err("P2P initilisation failed (%d)\n", err);
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
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)
54 brcmf_fws_add_interface(ifp);
56 - drvr->config = brcmf_cfg80211_attach(drvr, bus_if->dev);
57 + drvr->config = brcmf_cfg80211_attach(drvr, bus_if->dev,
59 if (drvr->config == NULL) {
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
66 * @cfg: driver private data for cfg80211 interface.
68 -s32 brcmf_p2p_attach(struct brcmf_cfg80211_info *cfg)
69 +s32 brcmf_p2p_attach(struct brcmf_cfg80211_info *cfg, bool p2pdev_forced)
71 struct brcmf_if *pri_ifp;
72 struct brcmf_if *p2p_ifp;
73 @@ -2348,11 +2348,15 @@ s32 brcmf_p2p_attach(struct brcmf_cfg802
77 - pri_ifp = drvr->iflist[0];
78 - p2p_ifp = drvr->iflist[1];
80 + pri_ifp = brcmf_get_ifp(drvr, 0);
81 p2p->bss_idx[P2PAPI_BSSCFG_PRIMARY].vif = pri_ifp->vif;
83 + if (p2pdev_forced) {
84 + p2p_ifp = drvr->iflist[1];
87 + p2p->p2pdev_dynamically = true;
90 p2p_vif = brcmf_alloc_vif(cfg, NL80211_IFTYPE_P2P_DEVICE,
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.
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;
105 bool block_gon_req_tx;
106 + bool p2pdev_dynamically;
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,