Skip to content

Commit 3687c18

Browse files
dberlinjannau
authored andcommitted
[brcmfmac] Compute number of available antennas and set it in wiphy structure.
Signed-off-by: Daniel Berlin <dberlin@dberlin.org>
1 parent 2a7f9bd commit 3687c18

1 file changed

Lines changed: 28 additions & 7 deletions

File tree

  • drivers/net/wireless/broadcom/brcm80211/brcmfmac

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

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7278,7 +7278,7 @@ static void brcmf_get_bwcap(struct brcmf_if *ifp, u32 bw_cap[])
72787278
}
72797279

72807280
static void brcmf_update_ht_cap(struct ieee80211_supported_band *band,
7281-
u32 bw_cap[2], u32 nchain)
7281+
u32 bw_cap[2], u32 nrxchain)
72827282
{
72837283
band->ht_cap.ht_supported = true;
72847284
if (bw_cap[band->band] & WLC_BW_40MHZ_BIT) {
@@ -7289,7 +7289,7 @@ static void brcmf_update_ht_cap(struct ieee80211_supported_band *band,
72897289
band->ht_cap.cap |= IEEE80211_HT_CAP_DSSSCCK40;
72907290
band->ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
72917291
band->ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_16;
7292-
memset(band->ht_cap.mcs.rx_mask, 0xff, nchain);
7292+
memset(band->ht_cap.mcs.rx_mask, 0xff, nrxchain);
72937293
band->ht_cap.mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED;
72947294
}
72957295

@@ -7378,7 +7378,9 @@ static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
73787378
u32 vhtmode = 0;
73797379
u32 bw_cap[2] = { WLC_BW_20MHZ_BIT, WLC_BW_20MHZ_BIT };
73807380
u32 rxchain;
7381-
u32 nchain;
7381+
u32 txchain;
7382+
u32 nrxchain;
7383+
u32 ntxchain;
73827384
int err;
73837385
s32 i;
73847386
struct ieee80211_supported_band *band;
@@ -7412,12 +7414,31 @@ static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
74127414
else
74137415
bphy_err(drvr, "rxchain error (%d)\n", err);
74147416

7415-
nchain = 1;
7417+
nrxchain = 1;
7418+
rxchain = 1;
74167419
} else {
7417-
for (nchain = 0; rxchain; nchain++)
7420+
for (nrxchain = 0; rxchain; nrxchain++)
74187421
rxchain = rxchain & (rxchain - 1);
74197422
}
7420-
brcmf_dbg(INFO, "nchain=%d\n", nchain);
7423+
brcmf_dbg(INFO, "nrxchain=%d\n", nrxchain);
7424+
err = brcmf_fil_iovar_int_get(ifp, "txchain", &txchain);
7425+
if (err) {
7426+
/* rxchain unsupported by firmware of older chips */
7427+
if (err == -EBADE)
7428+
bphy_info_once(drvr, "rxchain unsupported\n");
7429+
else
7430+
bphy_err(drvr, "rxchain error (%d)\n", err);
7431+
7432+
ntxchain = 1;
7433+
txchain = 1;
7434+
} else {
7435+
for (ntxchain = 0; txchain; ntxchain++)
7436+
txchain = txchain & (txchain - 1);
7437+
}
7438+
brcmf_dbg(INFO, "ntxchain=%d\n", ntxchain);
7439+
7440+
wiphy->available_antennas_rx = nrxchain;
7441+
wiphy->available_antennas_tx = ntxchain;
74217442

74227443
err = brcmf_construct_chaninfo(cfg, bw_cap);
74237444
if (err) {
@@ -7440,7 +7461,7 @@ static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
74407461
continue;
74417462

74427463
if (nmode)
7443-
brcmf_update_ht_cap(band, bw_cap, nchain);
7464+
brcmf_update_ht_cap(band, bw_cap, nrxchain);
74447465
if (vhtmode)
74457466
brcmf_update_vht_cap(band, bw_cap, txstreams, rxstreams,
74467467
txbf_bfe_cap, txbf_bfr_cap,

0 commit comments

Comments
 (0)