mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
wifi: rtl8xxxu: Add parameter role to report_connect
This allows to tell the HW if a connection is made to a STA or an AP. Add the implementation for the gen2 version. Signed-off-by: Martin Kaistra <martin.kaistra@linutronix.de> Reviewed-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/20230428150833.218605-9-martin.kaistra@linutronix.de
This commit is contained in:
committed by
Kalle Valo
parent
d59a105acc
commit
2be2eed4c3
@@ -1280,6 +1280,9 @@ struct rtl8xxxu_rfregs {
|
||||
#define H2C_JOIN_BSS_DISCONNECT 0
|
||||
#define H2C_JOIN_BSS_CONNECT 1
|
||||
|
||||
#define H2C_MACID_ROLE_STA 1
|
||||
#define H2C_MACID_ROLE_AP 2
|
||||
|
||||
/*
|
||||
* H2C (firmware) commands differ between the older generation chips
|
||||
* 8188[cr]u, 819[12]cu, and 8723au, and the more recent chips 8723bu,
|
||||
@@ -1906,7 +1909,7 @@ struct rtl8xxxu_fileops {
|
||||
void (*update_rate_mask) (struct rtl8xxxu_priv *priv,
|
||||
u32 ramask, u8 rateid, int sgi, int txbw_40mhz);
|
||||
void (*report_connect) (struct rtl8xxxu_priv *priv,
|
||||
u8 macid, bool connect);
|
||||
u8 macid, u8 role, bool connect);
|
||||
void (*report_rssi) (struct rtl8xxxu_priv *priv, u8 macid, u8 rssi);
|
||||
void (*fill_txdesc) (struct ieee80211_hw *hw, struct ieee80211_hdr *hdr,
|
||||
struct ieee80211_tx_info *tx_info,
|
||||
@@ -2027,9 +2030,9 @@ void rtl8xxxu_update_rate_mask(struct rtl8xxxu_priv *priv,
|
||||
void rtl8xxxu_gen2_update_rate_mask(struct rtl8xxxu_priv *priv,
|
||||
u32 ramask, u8 rateid, int sgi, int txbw_40mhz);
|
||||
void rtl8xxxu_gen1_report_connect(struct rtl8xxxu_priv *priv,
|
||||
u8 macid, bool connect);
|
||||
u8 macid, u8 role, bool connect);
|
||||
void rtl8xxxu_gen2_report_connect(struct rtl8xxxu_priv *priv,
|
||||
u8 macid, bool connect);
|
||||
u8 macid, u8 role, bool connect);
|
||||
void rtl8xxxu_gen1_report_rssi(struct rtl8xxxu_priv *priv, u8 macid, u8 rssi);
|
||||
void rtl8xxxu_gen2_report_rssi(struct rtl8xxxu_priv *priv, u8 macid, u8 rssi);
|
||||
void rtl8xxxu_gen1_init_aggregation(struct rtl8xxxu_priv *priv);
|
||||
|
||||
@@ -4586,7 +4586,7 @@ void rtl8xxxu_gen2_update_rate_mask(struct rtl8xxxu_priv *priv,
|
||||
}
|
||||
|
||||
void rtl8xxxu_gen1_report_connect(struct rtl8xxxu_priv *priv,
|
||||
u8 macid, bool connect)
|
||||
u8 macid, u8 role, bool connect)
|
||||
{
|
||||
struct h2c_cmd h2c;
|
||||
|
||||
@@ -4603,7 +4603,7 @@ void rtl8xxxu_gen1_report_connect(struct rtl8xxxu_priv *priv,
|
||||
}
|
||||
|
||||
void rtl8xxxu_gen2_report_connect(struct rtl8xxxu_priv *priv,
|
||||
u8 macid, bool connect)
|
||||
u8 macid, u8 role, bool connect)
|
||||
{
|
||||
/*
|
||||
* The firmware turns on the rate control when it knows it's
|
||||
@@ -4619,6 +4619,7 @@ void rtl8xxxu_gen2_report_connect(struct rtl8xxxu_priv *priv,
|
||||
else
|
||||
h2c.media_status_rpt.parm &= ~BIT(0);
|
||||
|
||||
h2c.media_status_rpt.parm |= ((role << 4) & 0xf0);
|
||||
h2c.media_status_rpt.macid = macid;
|
||||
|
||||
rtl8xxxu_gen2_h2c_cmd(priv, &h2c, sizeof(h2c.media_status_rpt));
|
||||
@@ -4947,13 +4948,13 @@ rtl8xxxu_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
rtl8xxxu_write16(priv, REG_BCN_PSR_RPT,
|
||||
0xc000 | vif->cfg.aid);
|
||||
|
||||
priv->fops->report_connect(priv, 0, true);
|
||||
priv->fops->report_connect(priv, 0, H2C_MACID_ROLE_AP, true);
|
||||
} else {
|
||||
val8 = rtl8xxxu_read8(priv, REG_BEACON_CTRL);
|
||||
val8 |= BEACON_DISABLE_TSF_UPDATE;
|
||||
rtl8xxxu_write8(priv, REG_BEACON_CTRL, val8);
|
||||
|
||||
priv->fops->report_connect(priv, 0, false);
|
||||
priv->fops->report_connect(priv, 0, H2C_MACID_ROLE_AP, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5014,7 +5015,7 @@ static int rtl8xxxu_start_ap(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
dev_dbg(dev, "Start AP mode\n");
|
||||
rtl8xxxu_set_bssid(priv, vif->bss_conf.bssid);
|
||||
rtl8xxxu_write16(priv, REG_BCN_INTERVAL, vif->bss_conf.beacon_int);
|
||||
priv->fops->report_connect(priv, RTL8XXXU_BC_MC_MACID, true);
|
||||
priv->fops->report_connect(priv, RTL8XXXU_BC_MC_MACID, 0, true);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user