mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-10 20:02:10 -04:00
wifi: rtw89: coex: Add v1 Wi-Fi firmware power-saving null data report
The later version Wi-Fi firmware will report null data TX times, so the structure is different from before. 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/20220913092546.43722-3-pkshih@realtek.com
This commit is contained in:
@@ -1003,8 +1003,13 @@ static u32 _chk_btc_report(struct rtw89_dev *rtwdev,
|
||||
break;
|
||||
case BTC_RPT_TYPE_NULLSTA:
|
||||
pcinfo = &pfwinfo->rpt_fbtc_nullsta.cinfo;
|
||||
pfinfo = &pfwinfo->rpt_fbtc_nullsta.finfo;
|
||||
pcinfo->req_len = sizeof(pfwinfo->rpt_fbtc_nullsta.finfo);
|
||||
if (chip->chip_id == RTL8852A) {
|
||||
pfinfo = &pfwinfo->rpt_fbtc_nullsta.finfo;
|
||||
pcinfo->req_len = sizeof(pfwinfo->rpt_fbtc_nullsta.finfo);
|
||||
} else {
|
||||
pfinfo = &pfwinfo->rpt_fbtc_nullsta.finfo_v1;
|
||||
pcinfo->req_len = sizeof(pfwinfo->rpt_fbtc_nullsta.finfo_v1);
|
||||
}
|
||||
pcinfo->req_fver = chip->fcxnullsta_ver;
|
||||
pcinfo->rx_len = rpt_len;
|
||||
pcinfo->rx_cnt++;
|
||||
@@ -6218,10 +6223,12 @@ static void _show_fbtc_cysta(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;
|
||||
struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
|
||||
struct rtw89_btc_rpt_cmn_info *pcinfo = NULL;
|
||||
struct rtw89_btc_fbtc_cynullsta *ns = NULL;
|
||||
struct rtw89_btc_rpt_cmn_info *pcinfo;
|
||||
struct rtw89_btc_fbtc_cynullsta *ns;
|
||||
struct rtw89_btc_fbtc_cynullsta_v1 *ns_v1;
|
||||
u8 i = 0;
|
||||
|
||||
if (!btc->dm.tdma_now.rxflctrl)
|
||||
@@ -6231,25 +6238,58 @@ static void _show_fbtc_nullsta(struct rtw89_dev *rtwdev, struct seq_file *m)
|
||||
if (!pcinfo->valid)
|
||||
return;
|
||||
|
||||
ns = &pfwinfo->rpt_fbtc_nullsta.finfo;
|
||||
if (chip->chip_id == RTL8852A) {
|
||||
ns = &pfwinfo->rpt_fbtc_nullsta.finfo;
|
||||
|
||||
seq_printf(m, " %-15s : ", "[null_sta]");
|
||||
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, "[ok:%d/", le32_to_cpu(ns->result[i][1]));
|
||||
seq_printf(m, "fail:%d/", le32_to_cpu(ns->result[i][0]));
|
||||
seq_printf(m, "on_time:%d/", le32_to_cpu(ns->result[i][2]));
|
||||
seq_printf(m, "retry:%d/", le32_to_cpu(ns->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);
|
||||
seq_printf(m, "max_t:%d.%03d]",
|
||||
le32_to_cpu(ns->max_t[i]) / 1000,
|
||||
le32_to_cpu(ns->max_t[i]) % 1000);
|
||||
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, "[ok:%d/",
|
||||
le32_to_cpu(ns->result[i][1]));
|
||||
seq_printf(m, "fail:%d/",
|
||||
le32_to_cpu(ns->result[i][0]));
|
||||
seq_printf(m, "on_time:%d/",
|
||||
le32_to_cpu(ns->result[i][2]));
|
||||
seq_printf(m, "retry:%d/",
|
||||
le32_to_cpu(ns->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);
|
||||
seq_printf(m, "max_t:%d.%03d]",
|
||||
le32_to_cpu(ns->max_t[i]) / 1000,
|
||||
le32_to_cpu(ns->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]));
|
||||
seq_printf(m, "[ok:%d/",
|
||||
le32_to_cpu(ns_v1->result[i][1]));
|
||||
seq_printf(m, "fail:%d/",
|
||||
le32_to_cpu(ns_v1->result[i][0]));
|
||||
seq_printf(m, "on_time:%d/",
|
||||
le32_to_cpu(ns_v1->result[i][2]));
|
||||
seq_printf(m, "retry:%d/",
|
||||
le32_to_cpu(ns_v1->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);
|
||||
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);
|
||||
}
|
||||
}
|
||||
seq_puts(m, "\n");
|
||||
}
|
||||
|
||||
@@ -1718,6 +1718,15 @@ 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 */
|
||||
u8 fver; /* chip_info::fcxnullsta_ver */
|
||||
u8 rsvd;
|
||||
__le16 rsvd2;
|
||||
__le32 max_t[2]; /* max_t for 0:null0/1:null1 */
|
||||
__le32 avg_t[2]; /* avg_t for 0:null0/1:null1 */
|
||||
__le32 result[2][5]; /* 0:fail, 1:ok, 2:on_time, 3:retry, 4:tx */
|
||||
} __packed;
|
||||
|
||||
struct rtw89_btc_fbtc_btver {
|
||||
u8 fver; /* chip_info::fcxbtver_ver */
|
||||
u8 rsvd;
|
||||
@@ -1898,7 +1907,10 @@ struct rtw89_btc_rpt_fbtc_step {
|
||||
|
||||
struct rtw89_btc_rpt_fbtc_nullsta {
|
||||
struct rtw89_btc_rpt_cmn_info cinfo; /* common info, by driver */
|
||||
struct rtw89_btc_fbtc_cynullsta finfo; /* info from fw */
|
||||
union {
|
||||
struct rtw89_btc_fbtc_cynullsta finfo; /* info from fw */
|
||||
struct rtw89_btc_fbtc_cynullsta_v1 finfo_v1; /* info from fw */
|
||||
};
|
||||
};
|
||||
|
||||
struct rtw89_btc_rpt_fbtc_mreg {
|
||||
|
||||
Reference in New Issue
Block a user