2015-12-11 09:09:36

by Simon Malthieu

[permalink] [raw]
Subject: ath10k and mac80211 number of chains meaning

Hi,

I would like to know the exact meaning of "chains" member of struct
sta_info. mac80211 sta_info.h states :

"@chains: chains ever used for RX from this station"

In ath9k, it is incremented when testing each value of the chain_signal
array (code here is ath9k common.c) :

if (rssi != ATH9K_RSSI_BAD) {
rxs->chains |= BIT(j);
rxs->chain_signal[j] = ah->noise + rssi;
}

I did this in ath10k (htt-rx.c l.874) on the model of a patch published
on the mailing list :

static void ath10k_htt_rx_h_signal(struct ath10k *ar,
struct ieee80211_rx_status *status,
struct htt_rx_desc *rxd)
{
u8 signal_per_chain;
int i;
for (i = 0; i< IEEE80211_MAX_CHAINS; i++)
{
signal_per_chain = rxd->ppdu_start.rssi_chains[i].pri20_mhz;
if (signal_per_chain != ATH10K_RSSI_BAD) // = 0x80
{
status->chains |= BIT(i);
status->chain_signal[i] = ATH10K_DEFAULT_NOISE_FLOOR +
signal_per_chain;
}
}
/* FIXME: Get real NF */
status->signal = ATH10K_DEFAULT_NOISE_FLOOR +
rxd->ppdu_start.rssi_comb;
status->flag &= ~RX_FLAG_NO_SIGNAL_VAL;
}

But when I configure the number of antennas (iw phy0 set antennas - iw
3.15) lower than the maximum of antennas, chains doesn't change, i.e.
there is still a correct value in chain_signal of the disabled antennas
(the value is not updated though).

I don't understand how a signal value can be received from a STA if the
antennas configuration doesn't allow it.

If it is not a bug, should i check rx_chain_mask in the driver to verify
the antennas configuration instead of chains ?

Thanks for your help

Simon