mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 00:53:34 +02:00
wifi: mt76: mt7921: enable p2p support
Introduce p2p-go/p2p-client support to mt7921 driver CONNECTION_P2P_GC/GO is not supported with the current firmware so we added mt76_dev to mt76_connac_mcu_sta_basic_tlv signature to use CONNECTION_INFRA_STA/AP instead for p2p-client and p2p-go respectively to make it work. Signed-off-by: Sean Wang <sean.wang@mediatek.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
6d6793cef6
commit
1b83d17cce
|
|
@ -861,7 +861,8 @@ mt7615_mcu_wtbl_sta_add(struct mt7615_phy *phy, struct ieee80211_vif *vif,
|
|||
else
|
||||
mvif->sta_added = true;
|
||||
}
|
||||
mt76_connac_mcu_sta_basic_tlv(sskb, vif, sta, enable, new_entry);
|
||||
mt76_connac_mcu_sta_basic_tlv(&dev->mt76, sskb, vif, sta, enable,
|
||||
new_entry);
|
||||
if (enable && sta)
|
||||
mt76_connac_mcu_sta_tlv(phy->mt76, sskb, sta, vif, 0,
|
||||
MT76_STA_INFO_STATE_ASSOC);
|
||||
|
|
|
|||
|
|
@ -363,7 +363,7 @@ void mt76_connac_mcu_bss_omac_tlv(struct sk_buff *skb,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(mt76_connac_mcu_bss_omac_tlv);
|
||||
|
||||
void mt76_connac_mcu_sta_basic_tlv(struct sk_buff *skb,
|
||||
void mt76_connac_mcu_sta_basic_tlv(struct mt76_dev *dev, struct sk_buff *skb,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta,
|
||||
bool enable, bool newly)
|
||||
|
|
@ -394,7 +394,7 @@ void mt76_connac_mcu_sta_basic_tlv(struct sk_buff *skb,
|
|||
switch (vif->type) {
|
||||
case NL80211_IFTYPE_MESH_POINT:
|
||||
case NL80211_IFTYPE_AP:
|
||||
if (vif->p2p)
|
||||
if (vif->p2p && !is_mt7921(dev))
|
||||
conn_type = CONNECTION_P2P_GC;
|
||||
else
|
||||
conn_type = CONNECTION_INFRA_STA;
|
||||
|
|
@ -402,7 +402,7 @@ void mt76_connac_mcu_sta_basic_tlv(struct sk_buff *skb,
|
|||
basic->aid = cpu_to_le16(sta->aid);
|
||||
break;
|
||||
case NL80211_IFTYPE_STATION:
|
||||
if (vif->p2p)
|
||||
if (vif->p2p && !is_mt7921(dev))
|
||||
conn_type = CONNECTION_P2P_GO;
|
||||
else
|
||||
conn_type = CONNECTION_INFRA_AP;
|
||||
|
|
@ -1029,7 +1029,7 @@ int mt76_connac_mcu_sta_cmd(struct mt76_phy *phy,
|
|||
return PTR_ERR(skb);
|
||||
|
||||
if (info->sta || !info->offload_fw)
|
||||
mt76_connac_mcu_sta_basic_tlv(skb, info->vif, info->sta,
|
||||
mt76_connac_mcu_sta_basic_tlv(dev, skb, info->vif, info->sta,
|
||||
info->enable, info->newly);
|
||||
if (info->sta && info->enable)
|
||||
mt76_connac_mcu_sta_tlv(phy, skb, info->sta,
|
||||
|
|
|
|||
|
|
@ -1776,7 +1776,7 @@ mt76_connac_mcu_add_tlv(struct sk_buff *skb, int tag, int len)
|
|||
|
||||
int mt76_connac_mcu_set_channel_domain(struct mt76_phy *phy);
|
||||
int mt76_connac_mcu_set_vif_ps(struct mt76_dev *dev, struct ieee80211_vif *vif);
|
||||
void mt76_connac_mcu_sta_basic_tlv(struct sk_buff *skb,
|
||||
void mt76_connac_mcu_sta_basic_tlv(struct mt76_dev *dev, struct sk_buff *skb,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta, bool enable,
|
||||
bool newly);
|
||||
|
|
|
|||
|
|
@ -1654,8 +1654,8 @@ int mt7915_mcu_add_sta(struct mt7915_dev *dev, struct ieee80211_vif *vif,
|
|||
return PTR_ERR(skb);
|
||||
|
||||
/* starec basic */
|
||||
mt76_connac_mcu_sta_basic_tlv(skb, vif, sta, enable,
|
||||
!rcu_access_pointer(dev->mt76.wcid[msta->wcid.idx]));
|
||||
mt76_connac_mcu_sta_basic_tlv(&dev->mt76, skb, vif, sta, enable,
|
||||
!rcu_access_pointer(dev->mt76.wcid[msta->wcid.idx]));
|
||||
if (!enable)
|
||||
goto out;
|
||||
|
||||
|
|
|
|||
|
|
@ -31,11 +31,13 @@ static const struct ieee80211_iface_combination if_comb[] = {
|
|||
static const struct ieee80211_iface_limit if_limits_chanctx[] = {
|
||||
{
|
||||
.max = 2,
|
||||
.types = BIT(NL80211_IFTYPE_STATION),
|
||||
.types = BIT(NL80211_IFTYPE_STATION) |
|
||||
BIT(NL80211_IFTYPE_P2P_CLIENT)
|
||||
},
|
||||
{
|
||||
.max = 1,
|
||||
.types = BIT(NL80211_IFTYPE_AP),
|
||||
.types = BIT(NL80211_IFTYPE_AP) |
|
||||
BIT(NL80211_IFTYPE_P2P_GO)
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -99,7 +101,9 @@ mt7921_init_wiphy(struct ieee80211_hw *hw)
|
|||
wiphy->flags &= ~(WIPHY_FLAG_IBSS_RSN | WIPHY_FLAG_4ADDR_AP |
|
||||
WIPHY_FLAG_4ADDR_STATION);
|
||||
wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
|
||||
BIT(NL80211_IFTYPE_AP);
|
||||
BIT(NL80211_IFTYPE_AP) |
|
||||
BIT(NL80211_IFTYPE_P2P_CLIENT) |
|
||||
BIT(NL80211_IFTYPE_P2P_GO);
|
||||
wiphy->max_remain_on_channel_duration = 5000;
|
||||
wiphy->max_scan_ie_len = MT76_CONNAC_SCAN_IE_LEN;
|
||||
wiphy->max_scan_ssids = 4;
|
||||
|
|
|
|||
|
|
@ -1694,8 +1694,8 @@ int mt7996_mcu_add_sta(struct mt7996_dev *dev, struct ieee80211_vif *vif,
|
|||
return PTR_ERR(skb);
|
||||
|
||||
/* starec basic */
|
||||
mt76_connac_mcu_sta_basic_tlv(skb, vif, sta, enable,
|
||||
!rcu_access_pointer(dev->mt76.wcid[msta->wcid.idx]));
|
||||
mt76_connac_mcu_sta_basic_tlv(&dev->mt76, skb, vif, sta, enable,
|
||||
!rcu_access_pointer(dev->mt76.wcid[msta->wcid.idx]));
|
||||
if (!enable)
|
||||
goto out;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user