|
@@ -603,7 +603,7 @@ bool cfg80211_chandef_usable(struct wiphy *wiphy,
|
|
|
{
|
|
|
struct ieee80211_sta_ht_cap *ht_cap;
|
|
|
struct ieee80211_sta_vht_cap *vht_cap;
|
|
|
- u32 width, control_freq;
|
|
|
+ u32 width, control_freq, cap;
|
|
|
|
|
|
if (WARN_ON(!cfg80211_chandef_valid(chandef)))
|
|
|
return false;
|
|
@@ -643,7 +643,8 @@ bool cfg80211_chandef_usable(struct wiphy *wiphy,
|
|
|
return false;
|
|
|
break;
|
|
|
case NL80211_CHAN_WIDTH_80P80:
|
|
|
- if (!(vht_cap->cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ))
|
|
|
+ cap = vht_cap->cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK;
|
|
|
+ if (cap != IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ)
|
|
|
return false;
|
|
|
case NL80211_CHAN_WIDTH_80:
|
|
|
if (!vht_cap->vht_supported)
|
|
@@ -654,7 +655,9 @@ bool cfg80211_chandef_usable(struct wiphy *wiphy,
|
|
|
case NL80211_CHAN_WIDTH_160:
|
|
|
if (!vht_cap->vht_supported)
|
|
|
return false;
|
|
|
- if (!(vht_cap->cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ))
|
|
|
+ cap = vht_cap->cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK;
|
|
|
+ if (cap != IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ &&
|
|
|
+ cap != IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ)
|
|
|
return false;
|
|
|
prohibited_flags |= IEEE80211_CHAN_NO_160MHZ;
|
|
|
width = 160;
|