mirror of
https://github.com/torvalds/linux.git
synced 2026-05-29 09:33:31 +02:00
wifi: rtw89: phy: add C2H event handler for report of FW scan
Newer firmware will notify driver of the Packet Detection (PD) value on the channel after switch channels during FW scan. Signed-off-by: Kuan-Chung Chen <damon.chen@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20250430055157.13623-2-pkshih@realtek.com
This commit is contained in:
parent
0ae36391c8
commit
d31c42466b
|
|
@ -3623,6 +3623,19 @@ struct rtw89_c2h_ra_rpt {
|
|||
#define RTW89_C2H_RA_RPT_W3_MD_SEL_B2 BIT(15)
|
||||
#define RTW89_C2H_RA_RPT_W3_BW_B2 BIT(16)
|
||||
|
||||
struct rtw89_c2h_fw_scan_rpt {
|
||||
struct rtw89_c2h_hdr hdr;
|
||||
u8 phy_idx;
|
||||
u8 band;
|
||||
u8 center_ch;
|
||||
u8 ofdm_pd_idx; /* in unit of 2 dBm */
|
||||
#define PD_LOWER_BOUND_BASE 102
|
||||
s8 cck_pd_idx;
|
||||
u8 rsvd0;
|
||||
u8 rsvd1;
|
||||
u8 rsvd2;
|
||||
} __packed;
|
||||
|
||||
/* For WiFi 6 chips:
|
||||
* VHT, HE, HT-old: [6:4]: NSS, [3:0]: MCS
|
||||
* HT-new: [6:5]: NA, [4:0]: MCS
|
||||
|
|
|
|||
|
|
@ -3023,6 +3023,35 @@ void (* const rtw89_phy_c2h_ra_handler[])(struct rtw89_dev *rtwdev,
|
|||
[RTW89_PHY_C2H_FUNC_TXSTS] = NULL,
|
||||
};
|
||||
|
||||
static void
|
||||
rtw89_phy_c2h_lowrt_rty(struct rtw89_dev *rtwdev, struct sk_buff *c2h, u32 len)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
rtw89_phy_c2h_fw_scan_rpt(struct rtw89_dev *rtwdev, struct sk_buff *c2h, u32 len)
|
||||
{
|
||||
const struct rtw89_c2h_fw_scan_rpt *c2h_rpt =
|
||||
(const struct rtw89_c2h_fw_scan_rpt *)c2h->data;
|
||||
|
||||
rtw89_debug(rtwdev, RTW89_DBG_DIG,
|
||||
"%s: band: %u, op_chan: %u, PD_low_bd(ofdm, cck): (-%d, %d), phy_idx: %u\n",
|
||||
__func__, c2h_rpt->band, c2h_rpt->center_ch,
|
||||
PD_LOWER_BOUND_BASE - (c2h_rpt->ofdm_pd_idx << 1),
|
||||
c2h_rpt->cck_pd_idx, c2h_rpt->phy_idx);
|
||||
}
|
||||
|
||||
static
|
||||
void (* const rtw89_phy_c2h_dm_handler[])(struct rtw89_dev *rtwdev,
|
||||
struct sk_buff *c2h, u32 len) = {
|
||||
[RTW89_PHY_C2H_DM_FUNC_FW_TEST] = NULL,
|
||||
[RTW89_PHY_C2H_DM_FUNC_FW_TRIG_TX_RPT] = NULL,
|
||||
[RTW89_PHY_C2H_DM_FUNC_SIGB] = NULL,
|
||||
[RTW89_PHY_C2H_DM_FUNC_LOWRT_RTY] = rtw89_phy_c2h_lowrt_rty,
|
||||
[RTW89_PHY_C2H_DM_FUNC_MCC_DIG] = NULL,
|
||||
[RTW89_PHY_C2H_DM_FUNC_FW_SCAN] = rtw89_phy_c2h_fw_scan_rpt,
|
||||
};
|
||||
|
||||
static void rtw89_phy_c2h_rfk_rpt_log(struct rtw89_dev *rtwdev,
|
||||
enum rtw89_phy_c2h_rfk_log_func func,
|
||||
void *content, u16 len)
|
||||
|
|
@ -3558,9 +3587,9 @@ void rtw89_phy_c2h_handle(struct rtw89_dev *rtwdev, struct sk_buff *skb,
|
|||
handler = rtw89_phy_c2h_rfk_report_handler[func];
|
||||
break;
|
||||
case RTW89_PHY_C2H_CLASS_DM:
|
||||
if (func == RTW89_PHY_C2H_DM_FUNC_LOWRT_RTY)
|
||||
return;
|
||||
fallthrough;
|
||||
if (func < ARRAY_SIZE(rtw89_phy_c2h_dm_handler))
|
||||
handler = rtw89_phy_c2h_dm_handler[func];
|
||||
break;
|
||||
default:
|
||||
rtw89_info(rtwdev, "PHY c2h class %d not support\n", class);
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -164,6 +164,7 @@ enum rtw89_phy_c2h_dm_func {
|
|||
RTW89_PHY_C2H_DM_FUNC_SIGB,
|
||||
RTW89_PHY_C2H_DM_FUNC_LOWRT_RTY,
|
||||
RTW89_PHY_C2H_DM_FUNC_MCC_DIG,
|
||||
RTW89_PHY_C2H_DM_FUNC_FW_SCAN = 0xc,
|
||||
RTW89_PHY_C2H_DM_FUNC_NUM,
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user