Skip to content

Commit a700451

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 31ffd81 commit a700451

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

72307230
static void brcmf_update_ht_cap(struct ieee80211_supported_band *band,
7231-
u32 bw_cap[2], u32 nchain)
7231+
u32 bw_cap[2], u32 nrxchain)
72327232
{
72337233
band->ht_cap.ht_supported = true;
72347234
if (bw_cap[band->band] & WLC_BW_40MHZ_BIT) {
@@ -7239,7 +7239,7 @@ static void brcmf_update_ht_cap(struct ieee80211_supported_band *band,
72397239
band->ht_cap.cap |= IEEE80211_HT_CAP_DSSSCCK40;
72407240
band->ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
72417241
band->ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_16;
7242-
memset(band->ht_cap.mcs.rx_mask, 0xff, nchain);
7242+
memset(band->ht_cap.mcs.rx_mask, 0xff, nrxchain);
72437243
band->ht_cap.mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED;
72447244
}
72457245

@@ -7328,7 +7328,9 @@ static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
73287328
u32 vhtmode = 0;
73297329
u32 bw_cap[2] = { WLC_BW_20MHZ_BIT, WLC_BW_20MHZ_BIT };
73307330
u32 rxchain;
7331-
u32 nchain;
7331+
u32 txchain;
7332+
u32 nrxchain;
7333+
u32 ntxchain;
73327334
int err;
73337335
s32 i;
73347336
struct ieee80211_supported_band *band;
@@ -7362,12 +7364,31 @@ static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
73627364
else
73637365
bphy_err(drvr, "rxchain error (%d)\n", err);
73647366

7365-
nchain = 1;
7367+
nrxchain = 1;
7368+
rxchain = 1;
73667369
} else {
7367-
for (nchain = 0; rxchain; nchain++)
7370+
for (nrxchain = 0; rxchain; nrxchain++)
73687371
rxchain = rxchain & (rxchain - 1);
73697372
}
7370-
brcmf_dbg(INFO, "nchain=%d\n", nchain);
7373+
brcmf_dbg(INFO, "nrxchain=%d\n", nrxchain);
7374+
err = brcmf_fil_iovar_int_get(ifp, "txchain", &txchain);
7375+
if (err) {
7376+
/* rxchain unsupported by firmware of older chips */
7377+
if (err == -EBADE)
7378+
bphy_info_once(drvr, "rxchain unsupported\n");
7379+
else
7380+
bphy_err(drvr, "rxchain error (%d)\n", err);
7381+
7382+
ntxchain = 1;
7383+
txchain = 1;
7384+
} else {
7385+
for (ntxchain = 0; txchain; ntxchain++)
7386+
txchain = txchain & (txchain - 1);
7387+
}
7388+
brcmf_dbg(INFO, "ntxchain=%d\n", ntxchain);
7389+
7390+
wiphy->available_antennas_rx = nrxchain;
7391+
wiphy->available_antennas_tx = ntxchain;
73717392

73727393
err = brcmf_construct_chaninfo(cfg, bw_cap);
73737394
if (err) {
@@ -7390,7 +7411,7 @@ static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
73907411
continue;
73917412

73927413
if (nmode)
7393-
brcmf_update_ht_cap(band, bw_cap, nchain);
7414+
brcmf_update_ht_cap(band, bw_cap, nrxchain);
73947415
if (vhtmode)
73957416
brcmf_update_vht_cap(band, bw_cap, txstreams, rxstreams,
73967417
txbf_bfe_cap, txbf_bfr_cap,

0 commit comments

Comments
 (0)