Skip to content

Commit 16508f7

Browse files
Arend van Sprielgregkh
authored andcommitted
wifi: brcmfmac: introducing fwil query functions
[ Upstream commit c6002b6 ] When the firmware interface layer was refactored it provided various "get" and "set" functions. For the "get" in some cases a parameter needed to be passed down to firmware as a key indicating what to "get" turning the output parameter of the "get" function into an input parameter as well. To accommodate this the "get" function blindly copies the parameter which in some places resulted in an uninitialized warnings from the compiler. These have been fixed by initializing the input parameter in the past. Recently another batch of similar fixes were submitted to address clang static checker warnings [1]. Proposing another solution by introducing a "query" variant which is used when the (input) parameter is needed by firmware. The "get" variant will only fill the (output) parameter with the result received from firmware taking care of proper endianess conversion. [1] https://lore.kernel.org/all/20240702122450.2213833-1-suhui@nfschina.com/ Fixes: 81f5dcb ("brcmfmac: refactor firmware interface layer.") Reported-by: Su Hui <suhui@nfschina.com> Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://patch.msgid.link/20240727185617.253210-1-arend.vanspriel@broadcom.com Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent 5650cd4 commit 16508f7

5 files changed

Lines changed: 48 additions & 28 deletions

File tree

drivers/net/wireless/broadcom/brcm80211/brcmfmac/btcoex.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ static s32 brcmf_btcoex_params_read(struct brcmf_if *ifp, u32 addr, u32 *data)
123123
{
124124
*data = addr;
125125

126-
return brcmf_fil_iovar_int_get(ifp, "btc_params", data);
126+
return brcmf_fil_iovar_int_query(ifp, "btc_params", data);
127127
}
128128

129129
/**

drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -663,8 +663,8 @@ static int brcmf_cfg80211_request_sta_if(struct brcmf_if *ifp, u8 *macaddr)
663663
/* interface_create version 3+ */
664664
/* get supported version from firmware side */
665665
iface_create_ver = 0;
666-
err = brcmf_fil_bsscfg_int_get(ifp, "interface_create",
667-
&iface_create_ver);
666+
err = brcmf_fil_bsscfg_int_query(ifp, "interface_create",
667+
&iface_create_ver);
668668
if (err) {
669669
brcmf_err("fail to get supported version, err=%d\n", err);
670670
return -EOPNOTSUPP;
@@ -756,8 +756,8 @@ static int brcmf_cfg80211_request_ap_if(struct brcmf_if *ifp)
756756
/* interface_create version 3+ */
757757
/* get supported version from firmware side */
758758
iface_create_ver = 0;
759-
err = brcmf_fil_bsscfg_int_get(ifp, "interface_create",
760-
&iface_create_ver);
759+
err = brcmf_fil_bsscfg_int_query(ifp, "interface_create",
760+
&iface_create_ver);
761761
if (err) {
762762
brcmf_err("fail to get supported version, err=%d\n", err);
763763
return -EOPNOTSUPP;
@@ -2101,7 +2101,8 @@ brcmf_set_key_mgmt(struct net_device *ndev, struct cfg80211_connect_params *sme)
21012101
if (!sme->crypto.n_akm_suites)
21022102
return 0;
21032103

2104-
err = brcmf_fil_bsscfg_int_get(netdev_priv(ndev), "wpa_auth", &val);
2104+
err = brcmf_fil_bsscfg_int_get(netdev_priv(ndev),
2105+
"wpa_auth", &val);
21052106
if (err) {
21062107
bphy_err(drvr, "could not get wpa_auth (%d)\n", err);
21072108
return err;
@@ -2680,7 +2681,7 @@ brcmf_cfg80211_get_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev,
26802681
struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
26812682
struct brcmf_cfg80211_vif *vif = wdev_to_vif(wdev);
26822683
struct brcmf_pub *drvr = cfg->pub;
2683-
s32 qdbm = 0;
2684+
s32 qdbm;
26842685
s32 err;
26852686

26862687
brcmf_dbg(TRACE, "Enter\n");
@@ -3067,7 +3068,7 @@ brcmf_cfg80211_get_station_ibss(struct brcmf_if *ifp,
30673068
struct brcmf_scb_val_le scbval;
30683069
struct brcmf_pktcnt_le pktcnt;
30693070
s32 err;
3070-
u32 rate = 0;
3071+
u32 rate;
30713072
u32 rssi;
30723073

30733074
/* Get the current tx rate */
@@ -7046,8 +7047,8 @@ static int brcmf_construct_chaninfo(struct brcmf_cfg80211_info *cfg,
70467047
ch.bw = BRCMU_CHAN_BW_20;
70477048
cfg->d11inf.encchspec(&ch);
70487049
chaninfo = ch.chspec;
7049-
err = brcmf_fil_bsscfg_int_get(ifp, "per_chan_info",
7050-
&chaninfo);
7050+
err = brcmf_fil_bsscfg_int_query(ifp, "per_chan_info",
7051+
&chaninfo);
70517052
if (!err) {
70527053
if (chaninfo & WL_CHAN_RADAR)
70537054
channel->flags |=
@@ -7081,7 +7082,7 @@ static int brcmf_enable_bw40_2g(struct brcmf_cfg80211_info *cfg)
70817082

70827083
/* verify support for bw_cap command */
70837084
val = WLC_BAND_5G;
7084-
err = brcmf_fil_iovar_int_get(ifp, "bw_cap", &val);
7085+
err = brcmf_fil_iovar_int_query(ifp, "bw_cap", &val);
70857086

70867087
if (!err) {
70877088
/* only set 2G bandwidth using bw_cap command */
@@ -7157,11 +7158,11 @@ static void brcmf_get_bwcap(struct brcmf_if *ifp, u32 bw_cap[])
71577158
int err;
71587159

71597160
band = WLC_BAND_2G;
7160-
err = brcmf_fil_iovar_int_get(ifp, "bw_cap", &band);
7161+
err = brcmf_fil_iovar_int_query(ifp, "bw_cap", &band);
71617162
if (!err) {
71627163
bw_cap[NL80211_BAND_2GHZ] = band;
71637164
band = WLC_BAND_5G;
7164-
err = brcmf_fil_iovar_int_get(ifp, "bw_cap", &band);
7165+
err = brcmf_fil_iovar_int_query(ifp, "bw_cap", &band);
71657166
if (!err) {
71667167
bw_cap[NL80211_BAND_5GHZ] = band;
71677168
return;
@@ -7170,7 +7171,6 @@ static void brcmf_get_bwcap(struct brcmf_if *ifp, u32 bw_cap[])
71707171
return;
71717172
}
71727173
brcmf_dbg(INFO, "fallback to mimo_bw_cap info\n");
7173-
mimo_bwcap = 0;
71747174
err = brcmf_fil_iovar_int_get(ifp, "mimo_bw_cap", &mimo_bwcap);
71757175
if (err)
71767176
/* assume 20MHz if firmware does not give a clue */
@@ -7266,10 +7266,10 @@ static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
72667266
struct brcmf_pub *drvr = cfg->pub;
72677267
struct brcmf_if *ifp = brcmf_get_ifp(drvr, 0);
72687268
struct wiphy *wiphy = cfg_to_wiphy(cfg);
7269-
u32 nmode = 0;
7269+
u32 nmode;
72707270
u32 vhtmode = 0;
72717271
u32 bw_cap[2] = { WLC_BW_20MHZ_BIT, WLC_BW_20MHZ_BIT };
7272-
u32 rxchain = 0;
7272+
u32 rxchain;
72737273
u32 nchain;
72747274
int err;
72757275
s32 i;

drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -691,7 +691,7 @@ static int brcmf_net_mon_open(struct net_device *ndev)
691691
{
692692
struct brcmf_if *ifp = netdev_priv(ndev);
693693
struct brcmf_pub *drvr = ifp->drvr;
694-
u32 monitor = 0;
694+
u32 monitor;
695695
int err;
696696

697697
brcmf_dbg(TRACE, "Enter\n");

drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ static void brcmf_feat_wlc_version_overrides(struct brcmf_pub *drv)
184184
static void brcmf_feat_iovar_int_get(struct brcmf_if *ifp,
185185
enum brcmf_feat_id id, char *name)
186186
{
187-
u32 data = 0;
187+
u32 data;
188188
int err;
189189

190190
/* we need to know firmware error */

drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.h

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -96,15 +96,22 @@ static inline
9696
s32 brcmf_fil_cmd_int_get(struct brcmf_if *ifp, u32 cmd, u32 *data)
9797
{
9898
s32 err;
99-
__le32 data_le = cpu_to_le32(*data);
10099

101-
err = brcmf_fil_cmd_data_get(ifp, cmd, &data_le, sizeof(data_le));
100+
err = brcmf_fil_cmd_data_get(ifp, cmd, data, sizeof(*data));
102101
if (err == 0)
103-
*data = le32_to_cpu(data_le);
102+
*data = le32_to_cpu(*(__le32 *)data);
104103
brcmf_dbg(FIL, "ifidx=%d, cmd=%d, value=%d\n", ifp->ifidx, cmd, *data);
105104

106105
return err;
107106
}
107+
static inline
108+
s32 brcmf_fil_cmd_int_query(struct brcmf_if *ifp, u32 cmd, u32 *data)
109+
{
110+
__le32 *data_le = (__le32 *)data;
111+
112+
*data_le = cpu_to_le32(*data);
113+
return brcmf_fil_cmd_int_get(ifp, cmd, data);
114+
}
108115

109116
s32 brcmf_fil_iovar_data_set(struct brcmf_if *ifp, const char *name,
110117
const void *data, u32 len);
@@ -120,14 +127,21 @@ s32 brcmf_fil_iovar_int_set(struct brcmf_if *ifp, const char *name, u32 data)
120127
static inline
121128
s32 brcmf_fil_iovar_int_get(struct brcmf_if *ifp, const char *name, u32 *data)
122129
{
123-
__le32 data_le = cpu_to_le32(*data);
124130
s32 err;
125131

126-
err = brcmf_fil_iovar_data_get(ifp, name, &data_le, sizeof(data_le));
132+
err = brcmf_fil_iovar_data_get(ifp, name, data, sizeof(*data));
127133
if (err == 0)
128-
*data = le32_to_cpu(data_le);
134+
*data = le32_to_cpu(*(__le32 *)data);
129135
return err;
130136
}
137+
static inline
138+
s32 brcmf_fil_iovar_int_query(struct brcmf_if *ifp, const char *name, u32 *data)
139+
{
140+
__le32 *data_le = (__le32 *)data;
141+
142+
*data_le = cpu_to_le32(*data);
143+
return brcmf_fil_iovar_int_get(ifp, name, data);
144+
}
131145

132146

133147
s32 brcmf_fil_bsscfg_data_set(struct brcmf_if *ifp, const char *name,
@@ -145,15 +159,21 @@ s32 brcmf_fil_bsscfg_int_set(struct brcmf_if *ifp, const char *name, u32 data)
145159
static inline
146160
s32 brcmf_fil_bsscfg_int_get(struct brcmf_if *ifp, const char *name, u32 *data)
147161
{
148-
__le32 data_le = cpu_to_le32(*data);
149162
s32 err;
150163

151-
err = brcmf_fil_bsscfg_data_get(ifp, name, &data_le,
152-
sizeof(data_le));
164+
err = brcmf_fil_bsscfg_data_get(ifp, name, data, sizeof(*data));
153165
if (err == 0)
154-
*data = le32_to_cpu(data_le);
166+
*data = le32_to_cpu(*(__le32 *)data);
155167
return err;
156168
}
169+
static inline
170+
s32 brcmf_fil_bsscfg_int_query(struct brcmf_if *ifp, const char *name, u32 *data)
171+
{
172+
__le32 *data_le = (__le32 *)data;
173+
174+
*data_le = cpu_to_le32(*data);
175+
return brcmf_fil_bsscfg_int_get(ifp, name, data);
176+
}
157177

158178
s32 brcmf_fil_xtlv_data_set(struct brcmf_if *ifp, const char *name, u16 id,
159179
void *data, u32 len);

0 commit comments

Comments
 (0)