diff options
Diffstat (limited to 'sys/contrib/dev/mediatek/mt76/mt792x_core.c')
| -rw-r--r-- | sys/contrib/dev/mediatek/mt76/mt792x_core.c | 45 | 
1 files changed, 35 insertions, 10 deletions
| diff --git a/sys/contrib/dev/mediatek/mt76/mt792x_core.c b/sys/contrib/dev/mediatek/mt76/mt792x_core.c index c42d1105e5a1..6ce282d7bd50 100644 --- a/sys/contrib/dev/mediatek/mt76/mt792x_core.c +++ b/sys/contrib/dev/mediatek/mt76/mt792x_core.c @@ -31,7 +31,7 @@ static const struct ieee80211_iface_combination if_comb[] = {  	},  }; -static const struct ieee80211_iface_limit if_limits_chanctx[] = { +static const struct ieee80211_iface_limit if_limits_chanctx_mcc[] = {  	{  		.max = 2,  		.types = BIT(NL80211_IFTYPE_STATION) | @@ -39,8 +39,23 @@ static const struct ieee80211_iface_limit if_limits_chanctx[] = {  	},  	{  		.max = 1, -		.types = BIT(NL80211_IFTYPE_AP) | -			 BIT(NL80211_IFTYPE_P2P_GO) +		.types = BIT(NL80211_IFTYPE_P2P_GO) +	}, +	{ +		.max = 1, +		.types = BIT(NL80211_IFTYPE_P2P_DEVICE) +	} +}; + +static const struct ieee80211_iface_limit if_limits_chanctx_scc[] = { +	{ +		.max = 2, +		.types = BIT(NL80211_IFTYPE_STATION) | +			 BIT(NL80211_IFTYPE_P2P_CLIENT) +	}, +	{ +		.max = 1, +		.types = BIT(NL80211_IFTYPE_AP)  	},  	{  		.max = 1, @@ -50,11 +65,18 @@ static const struct ieee80211_iface_limit if_limits_chanctx[] = {  static const struct ieee80211_iface_combination if_comb_chanctx[] = {  	{ -		.limits = if_limits_chanctx, -		.n_limits = ARRAY_SIZE(if_limits_chanctx), +		.limits = if_limits_chanctx_mcc, +		.n_limits = ARRAY_SIZE(if_limits_chanctx_mcc),  		.max_interfaces = 3,  		.num_different_channels = 2,  		.beacon_int_infra_match = false, +	}, +	{ +		.limits = if_limits_chanctx_scc, +		.n_limits = ARRAY_SIZE(if_limits_chanctx_scc), +		.max_interfaces = 3, +		.num_different_channels = 1, +		.beacon_int_infra_match = false,  	}  }; @@ -286,7 +308,7 @@ EXPORT_SYMBOL_GPL(mt792x_tx_worker);  void mt792x_roc_timer(struct timer_list *timer)  { -	struct mt792x_phy *phy = from_timer(phy, timer, roc_timer); +	struct mt792x_phy *phy = timer_container_of(phy, timer, roc_timer);  	ieee80211_queue_work(phy->mt76->hw, &phy->roc_work);  } @@ -294,7 +316,7 @@ EXPORT_SYMBOL_GPL(mt792x_roc_timer);  void mt792x_csa_timer(struct timer_list *timer)  { -	struct mt792x_vif *mvif = from_timer(mvif, timer, csa_timer); +	struct mt792x_vif *mvif = timer_container_of(mvif, timer, csa_timer);  	ieee80211_queue_work(mvif->phy->mt76->hw, &mvif->csa_work);  } @@ -343,7 +365,7 @@ void mt792x_unassign_vif_chanctx(struct ieee80211_hw *hw,  	mutex_unlock(&dev->mt76.mutex);  	if (vif->bss_conf.csa_active) { -		del_timer_sync(&mvif->csa_timer); +		timer_delete_sync(&mvif->csa_timer);  		cancel_work_sync(&mvif->csa_work);  	}  } @@ -582,7 +604,8 @@ void mt792x_sta_statistics(struct ieee80211_hw *hw,  }  EXPORT_SYMBOL_GPL(mt792x_sta_statistics); -void mt792x_set_coverage_class(struct ieee80211_hw *hw, s16 coverage_class) +void mt792x_set_coverage_class(struct ieee80211_hw *hw, int radio_idx, +			       s16 coverage_class)  {  	struct mt792x_phy *phy = mt792x_hw_phy(hw);  	struct mt792x_dev *dev = phy->dev; @@ -668,7 +691,9 @@ int mt792x_init_wiphy(struct ieee80211_hw *hw)  	ieee80211_hw_set(hw, SUPPORTS_DYNAMIC_PS);  	ieee80211_hw_set(hw, SUPPORTS_VHT_EXT_NSS_BW);  	ieee80211_hw_set(hw, CONNECTION_MONITOR); -	ieee80211_hw_set(hw, CHANCTX_STA_CSA); +	ieee80211_hw_set(hw, NO_VIRTUAL_MONITOR); +	if (is_mt7921(&dev->mt76)) +		ieee80211_hw_set(hw, CHANCTX_STA_CSA);  	if (dev->pm.enable)  		ieee80211_hw_set(hw, CONNECTION_MONITOR); | 
