Commit 7f444692 authored by Martin Kaistra's avatar Martin Kaistra Committed by Kalle Valo

wifi: rtl8xxxu: support setting linktype for both interfaces

To prepare for concurrent mode, enhance the set_linktype function to be
able to set the linktype in the MSR register for both hardware ports.

Until the users of set_linktype can handle multiple interfaces, use
port_num = 0.
Signed-off-by: default avatarMartin Kaistra <martin.kaistra@linutronix.de>
Reviewed-by: default avatarPing-Ke Shih <pkshih@realtek.com>
Signed-off-by: default avatarKalle Valo <kvalo@kernel.org>
Link: https://msgid.link/20231222101442.626837-4-martin.kaistra@linutronix.de
parent 2bbd7d58
......@@ -1633,33 +1633,41 @@ rtl8xxxu_gen1_set_tx_power(struct rtl8xxxu_priv *priv, int channel, bool ht40)
}
static void rtl8xxxu_set_linktype(struct rtl8xxxu_priv *priv,
enum nl80211_iftype linktype)
enum nl80211_iftype linktype, int port_num)
{
u8 val8;
val8 = rtl8xxxu_read8(priv, REG_MSR);
val8 &= ~MSR_LINKTYPE_MASK;
u8 val8, type;
switch (linktype) {
case NL80211_IFTYPE_UNSPECIFIED:
val8 |= MSR_LINKTYPE_NONE;
type = MSR_LINKTYPE_NONE;
break;
case NL80211_IFTYPE_ADHOC:
val8 |= MSR_LINKTYPE_ADHOC;
type = MSR_LINKTYPE_ADHOC;
break;
case NL80211_IFTYPE_STATION:
val8 |= MSR_LINKTYPE_STATION;
type = MSR_LINKTYPE_STATION;
break;
case NL80211_IFTYPE_AP:
val8 |= MSR_LINKTYPE_AP;
type = MSR_LINKTYPE_AP;
break;
default:
goto out;
return;
}
switch (port_num) {
case 0:
val8 = rtl8xxxu_read8(priv, REG_MSR) & 0x0c;
val8 |= type;
break;
case 1:
val8 = rtl8xxxu_read8(priv, REG_MSR) & 0x03;
val8 |= type << 2;
break;
default:
return;
}
rtl8xxxu_write8(priv, REG_MSR, val8);
out:
return;
}
static void
......@@ -4236,7 +4244,6 @@ static int rtl8xxxu_init_device(struct ieee80211_hw *hw)
}
rtl8xxxu_set_mac(priv);
rtl8xxxu_set_linktype(priv, NL80211_IFTYPE_STATION);
/*
* Configure initial WMAC settings
......@@ -4964,7 +4971,7 @@ rtl8xxxu_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
if (changed & BSS_CHANGED_ASSOC) {
dev_dbg(dev, "Changed ASSOC: %i!\n", vif->cfg.assoc);
rtl8xxxu_set_linktype(priv, vif->type);
rtl8xxxu_set_linktype(priv, vif->type, 0);
if (vif->cfg.assoc) {
u32 ramask;
......@@ -6610,7 +6617,7 @@ static int rtl8xxxu_add_interface(struct ieee80211_hw *hw,
ret = -EOPNOTSUPP;
}
rtl8xxxu_set_linktype(priv, vif->type);
rtl8xxxu_set_linktype(priv, vif->type, 0);
ether_addr_copy(priv->mac_addr, vif->addr);
rtl8xxxu_set_mac(priv);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment