mirror of
https://github.com/torvalds/linux
synced 2024-09-20 02:57:25 +00:00
wifi: rtw89: rfk: add H2C command to trigger RX DCK
RX DCK is receiver DC calibration. This will calibrate DC offset to reflect correct received signal strength indicator, so mechanisms like CCA can have normalized values. Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://msgid.link/20240202030642.108385-5-pkshih@realtek.com
This commit is contained in:
parent
9c66da3b19
commit
32919a0438
|
@ -4628,6 +4628,49 @@ int rtw89_fw_h2c_rf_iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
|
|||
return ret;
|
||||
}
|
||||
|
||||
int rtw89_fw_h2c_rf_rxdck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
|
||||
{
|
||||
const struct rtw89_chan *chan = rtw89_chan_get(rtwdev,
|
||||
RTW89_SUB_ENTITY_0);
|
||||
struct rtw89_h2c_rf_rxdck *h2c;
|
||||
u32 len = sizeof(*h2c);
|
||||
struct sk_buff *skb;
|
||||
int ret;
|
||||
|
||||
skb = rtw89_fw_h2c_alloc_skb_with_hdr(rtwdev, len);
|
||||
if (!skb) {
|
||||
rtw89_err(rtwdev, "failed to alloc skb for h2c RF RXDCK\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
skb_put(skb, len);
|
||||
h2c = (struct rtw89_h2c_rf_rxdck *)skb->data;
|
||||
|
||||
h2c->len = len;
|
||||
h2c->phy = phy_idx;
|
||||
h2c->is_afe = false;
|
||||
h2c->kpath = RF_AB;
|
||||
h2c->cur_band = chan->band_type;
|
||||
h2c->cur_bw = chan->band_width;
|
||||
h2c->cur_ch = chan->channel;
|
||||
h2c->rxdck_dbg_en = rtw89_debug_is_enabled(rtwdev, RTW89_DBG_RFK);
|
||||
|
||||
rtw89_h2c_pkt_set_hdr(rtwdev, skb, FWCMD_TYPE_H2C,
|
||||
H2C_CAT_OUTSRC, H2C_CL_OUTSRC_RF_FW_RFK,
|
||||
H2C_FUNC_RFK_RXDCK_OFFLOAD, 0, 0, len);
|
||||
|
||||
ret = rtw89_h2c_tx(rtwdev, skb, false);
|
||||
if (ret) {
|
||||
rtw89_err(rtwdev, "failed to send h2c\n");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
return 0;
|
||||
fail:
|
||||
dev_kfree_skb_any(skb);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int rtw89_fw_h2c_raw_with_hdr(struct rtw89_dev *rtwdev,
|
||||
u8 h2c_class, u8 h2c_func, u8 *buf, u16 len,
|
||||
bool rack, bool dack)
|
||||
|
|
|
@ -3936,6 +3936,7 @@ enum rtw89_mcc_h2c_func {
|
|||
|
||||
enum rtw89_rfk_offload_h2c_func {
|
||||
H2C_FUNC_RFK_IQK_OFFLOAD = 0x1,
|
||||
H2C_FUNC_RFK_RXDCK_OFFLOAD = 0x6,
|
||||
H2C_FUNC_RFK_PRE_NOTIFY = 0x8,
|
||||
};
|
||||
|
||||
|
@ -3988,6 +3989,17 @@ struct rtw89_h2c_rf_iqk {
|
|||
__le32 dbcc;
|
||||
} __packed;
|
||||
|
||||
struct rtw89_h2c_rf_rxdck {
|
||||
u8 len;
|
||||
u8 phy;
|
||||
u8 is_afe;
|
||||
u8 kpath;
|
||||
u8 cur_band;
|
||||
u8 cur_bw;
|
||||
u8 cur_ch;
|
||||
u8 rxdck_dbg_en;
|
||||
} __packed;
|
||||
|
||||
enum rtw89_rf_log_type {
|
||||
RTW89_RF_RUN_LOG = 0,
|
||||
RTW89_RF_RPT_LOG = 1,
|
||||
|
@ -4176,6 +4188,7 @@ int rtw89_fw_h2c_rf_ntfy_mcc(struct rtw89_dev *rtwdev);
|
|||
int rtw89_fw_h2c_rf_pre_ntfy(struct rtw89_dev *rtwdev,
|
||||
enum rtw89_phy_idx phy_idx);
|
||||
int rtw89_fw_h2c_rf_iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx);
|
||||
int rtw89_fw_h2c_rf_rxdck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx);
|
||||
int rtw89_fw_h2c_raw_with_hdr(struct rtw89_dev *rtwdev,
|
||||
u8 h2c_class, u8 h2c_func, u8 *buf, u16 len,
|
||||
bool rack, bool dack);
|
||||
|
|
Loading…
Reference in a new issue