Skip to content

Commit 716455d

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 08ede9f commit 716455d

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
@@ -7233,7 +7233,7 @@ static void brcmf_get_bwcap(struct brcmf_if *ifp, u32 bw_cap[])
72337233
}
72347234

72357235
static void brcmf_update_ht_cap(struct ieee80211_supported_band *band,
7236-
u32 bw_cap[2], u32 nchain)
7236+
u32 bw_cap[2], u32 nrxchain)
72377237
{
72387238
band->ht_cap.ht_supported = true;
72397239
if (bw_cap[band->band] & WLC_BW_40MHZ_BIT) {
@@ -7244,7 +7244,7 @@ static void brcmf_update_ht_cap(struct ieee80211_supported_band *band,
72447244
band->ht_cap.cap |= IEEE80211_HT_CAP_DSSSCCK40;
72457245
band->ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
72467246
band->ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_16;
7247-
memset(band->ht_cap.mcs.rx_mask, 0xff, nchain);
7247+
memset(band->ht_cap.mcs.rx_mask, 0xff, nrxchain);
72487248
band->ht_cap.mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED;
72497249
}
72507250

@@ -7333,7 +7333,9 @@ static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
73337333
u32 vhtmode = 0;
73347334
u32 bw_cap[2] = { WLC_BW_20MHZ_BIT, WLC_BW_20MHZ_BIT };
73357335
u32 rxchain;
7336-
u32 nchain;
7336+
u32 txchain;
7337+
u32 nrxchain;
7338+
u32 ntxchain;
73377339
int err;
73387340
s32 i;
73397341
struct ieee80211_supported_band *band;
@@ -7367,12 +7369,31 @@ static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
73677369
else
73687370
bphy_err(drvr, "rxchain error (%d)\n", err);
73697371

7370-
nchain = 1;
7372+
nrxchain = 1;
7373+
rxchain = 1;
73717374
} else {
7372-
for (nchain = 0; rxchain; nchain++)
7375+
for (nrxchain = 0; rxchain; nrxchain++)
73737376
rxchain = rxchain & (rxchain - 1);
73747377
}
7375-
brcmf_dbg(INFO, "nchain=%d\n", nchain);
7378+
brcmf_dbg(INFO, "nrxchain=%d\n", nrxchain);
7379+
err = brcmf_fil_iovar_int_get(ifp, "txchain", &txchain);
7380+
if (err) {
7381+
/* rxchain unsupported by firmware of older chips */
7382+
if (err == -EBADE)
7383+
bphy_info_once(drvr, "rxchain unsupported\n");
7384+
else
7385+
bphy_err(drvr, "rxchain error (%d)\n", err);
7386+
7387+
ntxchain = 1;
7388+
txchain = 1;
7389+
} else {
7390+
for (ntxchain = 0; txchain; ntxchain++)
7391+
txchain = txchain & (txchain - 1);
7392+
}
7393+
brcmf_dbg(INFO, "ntxchain=%d\n", ntxchain);
7394+
7395+
wiphy->available_antennas_rx = nrxchain;
7396+
wiphy->available_antennas_tx = ntxchain;
73767397

73777398
err = brcmf_construct_chaninfo(cfg, bw_cap);
73787399
if (err) {
@@ -7395,7 +7416,7 @@ static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
73957416
continue;
73967417

73977418
if (nmode)
7398-
brcmf_update_ht_cap(band, bw_cap, nchain);
7419+
brcmf_update_ht_cap(band, bw_cap, nrxchain);
73997420
if (vhtmode)
74007421
brcmf_update_vht_cap(band, bw_cap, txstreams, rxstreams,
74017422
txbf_bfe_cap, txbf_bfr_cap,

0 commit comments

Comments
 (0)