Skip to content

Commit 2f64fc6

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 feb6945 commit 2f64fc6

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

72607260
static void brcmf_update_ht_cap(struct ieee80211_supported_band *band,
7261-
u32 bw_cap[2], u32 nchain)
7261+
u32 bw_cap[2], u32 nrxchain)
72627262
{
72637263
band->ht_cap.ht_supported = true;
72647264
if (bw_cap[band->band] & WLC_BW_40MHZ_BIT) {
@@ -7269,7 +7269,7 @@ static void brcmf_update_ht_cap(struct ieee80211_supported_band *band,
72697269
band->ht_cap.cap |= IEEE80211_HT_CAP_DSSSCCK40;
72707270
band->ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
72717271
band->ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_16;
7272-
memset(band->ht_cap.mcs.rx_mask, 0xff, nchain);
7272+
memset(band->ht_cap.mcs.rx_mask, 0xff, nrxchain);
72737273
band->ht_cap.mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED;
72747274
}
72757275

@@ -7358,7 +7358,9 @@ static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
73587358
u32 vhtmode = 0;
73597359
u32 bw_cap[2] = { WLC_BW_20MHZ_BIT, WLC_BW_20MHZ_BIT };
73607360
u32 rxchain;
7361-
u32 nchain;
7361+
u32 txchain;
7362+
u32 nrxchain;
7363+
u32 ntxchain;
73627364
int err;
73637365
s32 i;
73647366
struct ieee80211_supported_band *band;
@@ -7392,12 +7394,31 @@ static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
73927394
else
73937395
bphy_err(drvr, "rxchain error (%d)\n", err);
73947396

7395-
nchain = 1;
7397+
nrxchain = 1;
7398+
rxchain = 1;
73967399
} else {
7397-
for (nchain = 0; rxchain; nchain++)
7400+
for (nrxchain = 0; rxchain; nrxchain++)
73987401
rxchain = rxchain & (rxchain - 1);
73997402
}
7400-
brcmf_dbg(INFO, "nchain=%d\n", nchain);
7403+
brcmf_dbg(INFO, "nrxchain=%d\n", nrxchain);
7404+
err = brcmf_fil_iovar_int_get(ifp, "txchain", &txchain);
7405+
if (err) {
7406+
/* rxchain unsupported by firmware of older chips */
7407+
if (err == -EBADE)
7408+
bphy_info_once(drvr, "rxchain unsupported\n");
7409+
else
7410+
bphy_err(drvr, "rxchain error (%d)\n", err);
7411+
7412+
ntxchain = 1;
7413+
txchain = 1;
7414+
} else {
7415+
for (ntxchain = 0; txchain; ntxchain++)
7416+
txchain = txchain & (txchain - 1);
7417+
}
7418+
brcmf_dbg(INFO, "ntxchain=%d\n", ntxchain);
7419+
7420+
wiphy->available_antennas_rx = nrxchain;
7421+
wiphy->available_antennas_tx = ntxchain;
74017422

74027423
err = brcmf_construct_chaninfo(cfg, bw_cap);
74037424
if (err) {
@@ -7420,7 +7441,7 @@ static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
74207441
continue;
74217442

74227443
if (nmode)
7423-
brcmf_update_ht_cap(band, bw_cap, nchain);
7444+
brcmf_update_ht_cap(band, bw_cap, nrxchain);
74247445
if (vhtmode)
74257446
brcmf_update_vht_cap(band, bw_cap, txstreams, rxstreams,
74267447
txbf_bfe_cap, txbf_bfr_cap,

0 commit comments

Comments
 (0)