You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
198 lines
7.2 KiB
198 lines
7.2 KiB
From eaf6c270b5d5d1cf092289c77a4496f2e1113f68 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?=C3=8D=C3=B1igo=20Huguet?= <ihuguet@redhat.com>
|
|
Date: Wed, 24 May 2023 15:00:35 +0200
|
|
Subject: [PATCH 102/142] wifi: rtw89: coex: Change Wi-Fi Null data report to
|
|
version separate
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Bugzilla: https://bugzilla.redhat.com/2207499
|
|
|
|
commit 3d929f075d3bb6187ad73375f6aee7bcf0b51851
|
|
Author: Ching-Te Ku <ku920601@realtek.com>
|
|
Date: Fri Jan 6 20:08:39 2023 +0800
|
|
|
|
wifi: rtw89: coex: Change Wi-Fi Null data report to version separate
|
|
|
|
Coexistence need to send Null data to stop AP keeps TX packet to DUT
|
|
before DUT coexistence switch to Bluetooth time slot, or it will be an
|
|
interference to DUT BT and because DUT will not RX packet from AP
|
|
the packet retry may harmful to WL TP. Compare to v1 version, the newer
|
|
firmware report will also report Null TX data counter.
|
|
|
|
Signed-off-by: Ching-Te Ku <ku920601@realtek.com>
|
|
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
|
Signed-off-by: Kalle Valo <kvalo@kernel.org>
|
|
Link: https://lore.kernel.org/r/20230106120844.17441-3-pkshih@realtek.com
|
|
|
|
Signed-off-by: Íñigo Huguet <ihuguet@redhat.com>
|
|
---
|
|
drivers/net/wireless/realtek/rtw89/coex.c | 57 +++++++++++++++----------------
|
|
drivers/net/wireless/realtek/rtw89/core.h | 14 ++++----
|
|
2 files changed, 35 insertions(+), 36 deletions(-)
|
|
|
|
diff --git a/drivers/net/wireless/realtek/rtw89/coex.c b/drivers/net/wireless/realtek/rtw89/coex.c
|
|
index f97ddbcb51046..eec1f5228c5dc 100644
|
|
--- a/drivers/net/wireless/realtek/rtw89/coex.c
|
|
+++ b/drivers/net/wireless/realtek/rtw89/coex.c
|
|
@@ -1032,12 +1032,14 @@ static u32 _chk_btc_report(struct rtw89_dev *rtwdev,
|
|
break;
|
|
case BTC_RPT_TYPE_NULLSTA:
|
|
pcinfo = &pfwinfo->rpt_fbtc_nullsta.cinfo;
|
|
- if (chip->chip_id == RTL8852A) {
|
|
+ if (ver->fcxnullsta == 1) {
|
|
pfinfo = &pfwinfo->rpt_fbtc_nullsta.finfo;
|
|
- pcinfo->req_len = sizeof(pfwinfo->rpt_fbtc_nullsta.finfo);
|
|
+ pcinfo->req_len = sizeof(pfwinfo->rpt_fbtc_nullsta.finfo.v1);
|
|
+ } else if (ver->fcxnullsta == 2) {
|
|
+ pfinfo = &pfwinfo->rpt_fbtc_nullsta.finfo.v2;
|
|
+ pcinfo->req_len = sizeof(pfwinfo->rpt_fbtc_nullsta.finfo.v2);
|
|
} else {
|
|
- pfinfo = &pfwinfo->rpt_fbtc_nullsta.finfo_v1;
|
|
- pcinfo->req_len = sizeof(pfwinfo->rpt_fbtc_nullsta.finfo_v1);
|
|
+ goto err;
|
|
}
|
|
pcinfo->req_fver = ver->fcxnullsta;
|
|
break;
|
|
@@ -6789,12 +6791,11 @@ static void _show_fbtc_cysta_v4(struct rtw89_dev *rtwdev, struct seq_file *m)
|
|
|
|
static void _show_fbtc_nullsta(struct rtw89_dev *rtwdev, struct seq_file *m)
|
|
{
|
|
- const struct rtw89_chip_info *chip = rtwdev->chip;
|
|
struct rtw89_btc *btc = &rtwdev->btc;
|
|
+ const struct rtw89_btc_ver *ver = btc->ver;
|
|
struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
|
|
struct rtw89_btc_rpt_cmn_info *pcinfo;
|
|
- struct rtw89_btc_fbtc_cynullsta *ns;
|
|
- struct rtw89_btc_fbtc_cynullsta_v1 *ns_v1;
|
|
+ union rtw89_btc_fbtc_cynullsta_info *ns;
|
|
u8 i = 0;
|
|
|
|
if (!btc->dm.tdma_now.rxflctrl)
|
|
@@ -6804,9 +6805,8 @@ static void _show_fbtc_nullsta(struct rtw89_dev *rtwdev, struct seq_file *m)
|
|
if (!pcinfo->valid)
|
|
return;
|
|
|
|
- if (chip->chip_id == RTL8852A) {
|
|
- ns = &pfwinfo->rpt_fbtc_nullsta.finfo;
|
|
-
|
|
+ ns = &pfwinfo->rpt_fbtc_nullsta.finfo;
|
|
+ if (ver->fcxnullsta == 1) {
|
|
seq_printf(m, " %-15s : ", "[null_sta]");
|
|
|
|
for (i = 0; i < 2; i++) {
|
|
@@ -6815,46 +6815,43 @@ static void _show_fbtc_nullsta(struct rtw89_dev *rtwdev, struct seq_file *m)
|
|
else
|
|
seq_printf(m, "null-%d", i);
|
|
seq_printf(m, "[ok:%d/",
|
|
- le32_to_cpu(ns->result[i][1]));
|
|
+ le32_to_cpu(ns->v1.result[i][1]));
|
|
seq_printf(m, "fail:%d/",
|
|
- le32_to_cpu(ns->result[i][0]));
|
|
+ le32_to_cpu(ns->v1.result[i][0]));
|
|
seq_printf(m, "on_time:%d/",
|
|
- le32_to_cpu(ns->result[i][2]));
|
|
+ le32_to_cpu(ns->v1.result[i][2]));
|
|
seq_printf(m, "retry:%d/",
|
|
- le32_to_cpu(ns->result[i][3]));
|
|
+ le32_to_cpu(ns->v1.result[i][3]));
|
|
seq_printf(m, "avg_t:%d.%03d/",
|
|
- le32_to_cpu(ns->avg_t[i]) / 1000,
|
|
- le32_to_cpu(ns->avg_t[i]) % 1000);
|
|
+ le32_to_cpu(ns->v1.avg_t[i]) / 1000,
|
|
+ le32_to_cpu(ns->v1.avg_t[i]) % 1000);
|
|
seq_printf(m, "max_t:%d.%03d]",
|
|
- le32_to_cpu(ns->max_t[i]) / 1000,
|
|
- le32_to_cpu(ns->max_t[i]) % 1000);
|
|
+ le32_to_cpu(ns->v1.max_t[i]) / 1000,
|
|
+ le32_to_cpu(ns->v1.max_t[i]) % 1000);
|
|
}
|
|
} else {
|
|
- ns_v1 = &pfwinfo->rpt_fbtc_nullsta.finfo_v1;
|
|
-
|
|
seq_printf(m, " %-15s : ", "[null_sta]");
|
|
-
|
|
for (i = 0; i < 2; i++) {
|
|
if (i != 0)
|
|
seq_printf(m, ", null-%d", i);
|
|
else
|
|
seq_printf(m, "null-%d", i);
|
|
seq_printf(m, "[Tx:%d/",
|
|
- le32_to_cpu(ns_v1->result[i][4]));
|
|
+ le32_to_cpu(ns->v2.result[i][4]));
|
|
seq_printf(m, "[ok:%d/",
|
|
- le32_to_cpu(ns_v1->result[i][1]));
|
|
+ le32_to_cpu(ns->v2.result[i][1]));
|
|
seq_printf(m, "fail:%d/",
|
|
- le32_to_cpu(ns_v1->result[i][0]));
|
|
+ le32_to_cpu(ns->v2.result[i][0]));
|
|
seq_printf(m, "on_time:%d/",
|
|
- le32_to_cpu(ns_v1->result[i][2]));
|
|
+ le32_to_cpu(ns->v2.result[i][2]));
|
|
seq_printf(m, "retry:%d/",
|
|
- le32_to_cpu(ns_v1->result[i][3]));
|
|
+ le32_to_cpu(ns->v2.result[i][3]));
|
|
seq_printf(m, "avg_t:%d.%03d/",
|
|
- le32_to_cpu(ns_v1->avg_t[i]) / 1000,
|
|
- le32_to_cpu(ns_v1->avg_t[i]) % 1000);
|
|
+ le32_to_cpu(ns->v2.avg_t[i]) / 1000,
|
|
+ le32_to_cpu(ns->v2.avg_t[i]) % 1000);
|
|
seq_printf(m, "max_t:%d.%03d]",
|
|
- le32_to_cpu(ns_v1->max_t[i]) / 1000,
|
|
- le32_to_cpu(ns_v1->max_t[i]) % 1000);
|
|
+ le32_to_cpu(ns->v2.max_t[i]) / 1000,
|
|
+ le32_to_cpu(ns->v2.max_t[i]) % 1000);
|
|
}
|
|
}
|
|
seq_puts(m, "\n");
|
|
diff --git a/drivers/net/wireless/realtek/rtw89/core.h b/drivers/net/wireless/realtek/rtw89/core.h
|
|
index d0b4c00324572..dfde8801e97bb 100644
|
|
--- a/drivers/net/wireless/realtek/rtw89/core.h
|
|
+++ b/drivers/net/wireless/realtek/rtw89/core.h
|
|
@@ -1865,7 +1865,7 @@ union rtw89_btc_fbtc_cysta_info {
|
|
struct rtw89_btc_fbtc_cysta_v4 v4;
|
|
};
|
|
|
|
-struct rtw89_btc_fbtc_cynullsta { /* cycle null statistics */
|
|
+struct rtw89_btc_fbtc_cynullsta_v1 { /* cycle null statistics */
|
|
u8 fver; /* btc_ver::fcxnullsta */
|
|
u8 rsvd;
|
|
__le16 rsvd2;
|
|
@@ -1874,7 +1874,7 @@ struct rtw89_btc_fbtc_cynullsta { /* cycle null statistics */
|
|
__le32 result[2][4]; /* 0:fail, 1:ok, 2:on_time, 3:retry */
|
|
} __packed;
|
|
|
|
-struct rtw89_btc_fbtc_cynullsta_v1 { /* cycle null statistics */
|
|
+struct rtw89_btc_fbtc_cynullsta_v2 { /* cycle null statistics */
|
|
u8 fver; /* btc_ver::fcxnullsta */
|
|
u8 rsvd;
|
|
__le16 rsvd2;
|
|
@@ -1883,6 +1883,11 @@ struct rtw89_btc_fbtc_cynullsta_v1 { /* cycle null statistics */
|
|
__le32 result[2][5]; /* 0:fail, 1:ok, 2:on_time, 3:retry, 4:tx */
|
|
} __packed;
|
|
|
|
+union rtw89_btc_fbtc_cynullsta_info {
|
|
+ struct rtw89_btc_fbtc_cynullsta_v1 v1; /* info from fw */
|
|
+ struct rtw89_btc_fbtc_cynullsta_v2 v2;
|
|
+};
|
|
+
|
|
struct rtw89_btc_fbtc_btver {
|
|
u8 fver; /* btc_ver::fcxbtver */
|
|
u8 rsvd;
|
|
@@ -2075,10 +2080,7 @@ struct rtw89_btc_rpt_fbtc_step {
|
|
|
|
struct rtw89_btc_rpt_fbtc_nullsta {
|
|
struct rtw89_btc_rpt_cmn_info cinfo; /* common info, by driver */
|
|
- union {
|
|
- struct rtw89_btc_fbtc_cynullsta finfo; /* info from fw */
|
|
- struct rtw89_btc_fbtc_cynullsta_v1 finfo_v1; /* info from fw */
|
|
- };
|
|
+ union rtw89_btc_fbtc_cynullsta_info finfo;
|
|
};
|
|
|
|
struct rtw89_btc_rpt_fbtc_mreg {
|
|
--
|
|
2.13.6
|
|
|