Skip to content

Commit 6d2ed99

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 92dc56f commit 6d2ed99

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

72157215
static void brcmf_update_ht_cap(struct ieee80211_supported_band *band,
7216-
u32 bw_cap[2], u32 nchain)
7216+
u32 bw_cap[2], u32 nrxchain)
72177217
{
72187218
band->ht_cap.ht_supported = true;
72197219
if (bw_cap[band->band] & WLC_BW_40MHZ_BIT) {
@@ -7224,7 +7224,7 @@ static void brcmf_update_ht_cap(struct ieee80211_supported_band *band,
72247224
band->ht_cap.cap |= IEEE80211_HT_CAP_DSSSCCK40;
72257225
band->ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
72267226
band->ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_16;
7227-
memset(band->ht_cap.mcs.rx_mask, 0xff, nchain);
7227+
memset(band->ht_cap.mcs.rx_mask, 0xff, nrxchain);
72287228
band->ht_cap.mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED;
72297229
}
72307230

@@ -7313,7 +7313,9 @@ static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
73137313
u32 vhtmode = 0;
73147314
u32 bw_cap[2] = { WLC_BW_20MHZ_BIT, WLC_BW_20MHZ_BIT };
73157315
u32 rxchain = 0;
7316-
u32 nchain;
7316+
u32 txchain;
7317+
u32 nrxchain;
7318+
u32 ntxchain;
73177319
int err;
73187320
s32 i;
73197321
struct ieee80211_supported_band *band;
@@ -7347,12 +7349,31 @@ static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
73477349
else
73487350
bphy_err(drvr, "rxchain error (%d)\n", err);
73497351

7350-
nchain = 1;
7352+
nrxchain = 1;
7353+
rxchain = 1;
73517354
} else {
7352-
for (nchain = 0; rxchain; nchain++)
7355+
for (nrxchain = 0; rxchain; nrxchain++)
73537356
rxchain = rxchain & (rxchain - 1);
73547357
}
7355-
brcmf_dbg(INFO, "nchain=%d\n", nchain);
7358+
brcmf_dbg(INFO, "nrxchain=%d\n", nrxchain);
7359+
err = brcmf_fil_iovar_int_get(ifp, "txchain", &txchain);
7360+
if (err) {
7361+
/* rxchain unsupported by firmware of older chips */
7362+
if (err == -EBADE)
7363+
bphy_info_once(drvr, "rxchain unsupported\n");
7364+
else
7365+
bphy_err(drvr, "rxchain error (%d)\n", err);
7366+
7367+
ntxchain = 1;
7368+
txchain = 1;
7369+
} else {
7370+
for (ntxchain = 0; txchain; ntxchain++)
7371+
txchain = txchain & (txchain - 1);
7372+
}
7373+
brcmf_dbg(INFO, "ntxchain=%d\n", ntxchain);
7374+
7375+
wiphy->available_antennas_rx = nrxchain;
7376+
wiphy->available_antennas_tx = ntxchain;
73567377

73577378
err = brcmf_construct_chaninfo(cfg, bw_cap);
73587379
if (err) {
@@ -7375,7 +7396,7 @@ static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
73757396
continue;
73767397

73777398
if (nmode)
7378-
brcmf_update_ht_cap(band, bw_cap, nchain);
7399+
brcmf_update_ht_cap(band, bw_cap, nrxchain);
73797400
if (vhtmode)
73807401
brcmf_update_vht_cap(band, bw_cap, txstreams, rxstreams,
73817402
txbf_bfe_cap, txbf_bfr_cap,

0 commit comments

Comments
 (0)