On 09/25/2012 12:55 PM, Johannes Berg wrote:
vht_cap->cap = le16_to_cpu(vht_cap_ie->vht_cap_info) &
(sband->ht_cap.cap |
err, vht_cap
Sorry, I meant vht_cap only. Typo..
~(IEEE80211_VHT_CAP_RXLDPC |
IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE |
IEEE80211_VHT_CAP_HTC_VHT));
I don't think that can be right. It seems to me it should be something
like
cap = cap_info & sband->vht_cap.cap &
(MAX_MPDU_LENGTH_... |
SHORT_GI_... | HTC_VHT | ... ? )
if (cap_info & SU_BEAMFORMEE_CAPABLE &&
sband->vht_cap.cap & SU_BEAMFORMER_CAPABLE)
cap |= SU_BEAMFORMEE_CAPABLE;
etc.?
OTOH, this would only matter to drivers that actually support all these
features, and those drivers could take care of not enabling the features
if their hardware doesn't support them. However, think of a driver that
is for different hardware, some that supports beamforming and some that
doesn't. Then if we mask out the beamforming capability of a station if
it's not locally supported, that driver could be simpler? Then again, if
we don't the driver just has to check if the hardware supports it, which
seems reasonable as well.
Do you understand the issue?
why should we mask out remote STA caps bits. Our local hw caps are in
sband->sta.vht_caps. remote caps sta_info->sta.vht_caps. In what way
drivers are connected with remote STA vht caps bits.
So maybe if you document it right, your original v2 patch is sufficient.
Convince me :)
johannes
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html