Skip to content

Commit 6f139bb

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 db9c02f commit 6f139bb

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

72227222
static void brcmf_update_ht_cap(struct ieee80211_supported_band *band,
7223-
u32 bw_cap[2], u32 nchain)
7223+
u32 bw_cap[2], u32 nrxchain)
72247224
{
72257225
band->ht_cap.ht_supported = true;
72267226
if (bw_cap[band->band] & WLC_BW_40MHZ_BIT) {
@@ -7231,7 +7231,7 @@ static void brcmf_update_ht_cap(struct ieee80211_supported_band *band,
72317231
band->ht_cap.cap |= IEEE80211_HT_CAP_DSSSCCK40;
72327232
band->ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
72337233
band->ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_16;
7234-
memset(band->ht_cap.mcs.rx_mask, 0xff, nchain);
7234+
memset(band->ht_cap.mcs.rx_mask, 0xff, nrxchain);
72357235
band->ht_cap.mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED;
72367236
}
72377237

@@ -7320,7 +7320,9 @@ static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
73207320
u32 vhtmode = 0;
73217321
u32 bw_cap[2] = { WLC_BW_20MHZ_BIT, WLC_BW_20MHZ_BIT };
73227322
u32 rxchain;
7323-
u32 nchain;
7323+
u32 txchain;
7324+
u32 nrxchain;
7325+
u32 ntxchain;
73247326
int err;
73257327
s32 i;
73267328
struct ieee80211_supported_band *band;
@@ -7354,12 +7356,31 @@ static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
73547356
else
73557357
bphy_err(drvr, "rxchain error (%d)\n", err);
73567358

7357-
nchain = 1;
7359+
nrxchain = 1;
7360+
rxchain = 1;
73587361
} else {
7359-
for (nchain = 0; rxchain; nchain++)
7362+
for (nrxchain = 0; rxchain; nrxchain++)
73607363
rxchain = rxchain & (rxchain - 1);
73617364
}
7362-
brcmf_dbg(INFO, "nchain=%d\n", nchain);
7365+
brcmf_dbg(INFO, "nrxchain=%d\n", nrxchain);
7366+
err = brcmf_fil_iovar_int_get(ifp, "txchain", &txchain);
7367+
if (err) {
7368+
/* rxchain unsupported by firmware of older chips */
7369+
if (err == -EBADE)
7370+
bphy_info_once(drvr, "rxchain unsupported\n");
7371+
else
7372+
bphy_err(drvr, "rxchain error (%d)\n", err);
7373+
7374+
ntxchain = 1;
7375+
txchain = 1;
7376+
} else {
7377+
for (ntxchain = 0; txchain; ntxchain++)
7378+
txchain = txchain & (txchain - 1);
7379+
}
7380+
brcmf_dbg(INFO, "ntxchain=%d\n", ntxchain);
7381+
7382+
wiphy->available_antennas_rx = nrxchain;
7383+
wiphy->available_antennas_tx = ntxchain;
73637384

73647385
err = brcmf_construct_chaninfo(cfg, bw_cap);
73657386
if (err) {
@@ -7382,7 +7403,7 @@ static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
73827403
continue;
73837404

73847405
if (nmode)
7385-
brcmf_update_ht_cap(band, bw_cap, nchain);
7406+
brcmf_update_ht_cap(band, bw_cap, nrxchain);
73867407
if (vhtmode)
73877408
brcmf_update_vht_cap(band, bw_cap, txstreams, rxstreams,
73887409
txbf_bfe_cap, txbf_bfr_cap,

0 commit comments

Comments
 (0)