Commit 3922dc9f authored by Bitterblue Smith's avatar Bitterblue Smith Committed by Kalle Valo
Browse files

wifi: rtl8xxxu: Report the RSSI to the firmware



Or in the case of RTL8188EU, report the RSSI to the rate control code.

The rate control code for RTL8188EU is less likely to switch to a lower
rate when the RSSI is high. The firmware-based rate control in the other
chips probably works the same way.

This affects all the chips, but it was only tested with RTL8188EU,
RTL8188FU, and RTL8192EU.

Signed-off-by: default avatarBitterblue Smith <rtl8821cerfe2@gmail.com>
Reviewed-by: default avatarPing-Ke Shih <pkshih@realtek.com>
Signed-off-by: default avatarKalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/2aab4f3f-e914-4fe1-f29a-deac91774d05@gmail.com
parent ebe8dee7
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -1168,6 +1168,26 @@ struct h2c_cmd {
			u8 cmd;
			u8 data;
		} __packed bt_grant;
		struct {
			u8 cmd;
			u8 macid;
			u8 unknown0;
			u8 rssi;
			/*
			 * [0]   - is_rx
			 * [1]   - stbc_en
			 * [2]   - noisy_decision
			 * [6]   - bf_en
			 */
			u8 data;
			/*
			 * [0:6] - ra_th_offset
			 * [7]   - ra_offset_direction
			 */
			u8 ra_th_offset;
			u8 unknown1;
			u8 unknown2;
		} __packed rssi_report;
	};
};

@@ -1585,6 +1605,7 @@ struct rtl8xxxu_fileops {
				  u32 ramask, u8 rateid, int sgi, int txbw_40mhz);
	void (*report_connect) (struct rtl8xxxu_priv *priv,
				u8 macid, 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,
			     struct rtl8xxxu_txdesc32 *tx_desc, bool sgi,
@@ -1686,6 +1707,8 @@ void rtl8xxxu_gen1_report_connect(struct rtl8xxxu_priv *priv,
				  u8 macid, bool connect);
void rtl8xxxu_gen2_report_connect(struct rtl8xxxu_priv *priv,
				  u8 macid, 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);
void rtl8xxxu_gen1_enable_rf(struct rtl8xxxu_priv *priv);
void rtl8xxxu_gen1_disable_rf(struct rtl8xxxu_priv *priv);
+6 −0
Original line number Diff line number Diff line
@@ -1784,6 +1784,11 @@ rtl8188e_update_rate_mask(struct rtl8xxxu_priv *priv,
	rtl8188e_arfb_refresh(ra);
}

static void rtl8188e_ra_set_rssi(struct rtl8xxxu_priv *priv, u8 macid, u8 rssi)
{
	priv->ra_info.rssi_sta_ra = rssi;
}

void rtl8188e_ra_info_init_all(struct rtl8xxxu_ra_info *ra)
{
	ra->decision_rate = DESC_RATE_MCS7;
@@ -1842,6 +1847,7 @@ struct rtl8xxxu_fileops rtl8188eu_fops = {
	.set_tx_power = rtl8188f_set_tx_power,
	.update_rate_mask = rtl8188e_update_rate_mask,
	.report_connect = rtl8xxxu_gen2_report_connect,
	.report_rssi = rtl8188e_ra_set_rssi,
	.fill_txdesc = rtl8xxxu_fill_txdesc_v3,
	.set_crystal_cap = rtl8188f_set_crystal_cap,
	.cck_rssi = rtl8188e_cck_rssi,
+1 −0
Original line number Diff line number Diff line
@@ -1732,6 +1732,7 @@ struct rtl8xxxu_fileops rtl8188fu_fops = {
	.set_tx_power = rtl8188f_set_tx_power,
	.update_rate_mask = rtl8xxxu_gen2_update_rate_mask,
	.report_connect = rtl8xxxu_gen2_report_connect,
	.report_rssi = rtl8xxxu_gen2_report_rssi,
	.fill_txdesc = rtl8xxxu_fill_txdesc_v2,
	.set_crystal_cap = rtl8188f_set_crystal_cap,
	.cck_rssi = rtl8188f_cck_rssi,
+1 −0
Original line number Diff line number Diff line
@@ -609,6 +609,7 @@ struct rtl8xxxu_fileops rtl8192cu_fops = {
	.set_tx_power = rtl8xxxu_gen1_set_tx_power,
	.update_rate_mask = rtl8xxxu_update_rate_mask,
	.report_connect = rtl8xxxu_gen1_report_connect,
	.report_rssi = rtl8xxxu_gen1_report_rssi,
	.fill_txdesc = rtl8xxxu_fill_txdesc_v1,
	.cck_rssi = rtl8723a_cck_rssi,
	.writeN_block_size = 128,
+1 −0
Original line number Diff line number Diff line
@@ -1784,6 +1784,7 @@ struct rtl8xxxu_fileops rtl8192eu_fops = {
	.set_tx_power = rtl8192e_set_tx_power,
	.update_rate_mask = rtl8xxxu_gen2_update_rate_mask,
	.report_connect = rtl8xxxu_gen2_report_connect,
	.report_rssi = rtl8xxxu_gen2_report_rssi,
	.fill_txdesc = rtl8xxxu_fill_txdesc_v2,
	.set_crystal_cap = rtl8723a_set_crystal_cap,
	.cck_rssi = rtl8192e_cck_rssi,
Loading