mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 11:33:28 +02:00
wifi: rtw89: align RA H2C format v1 for RTL8922A
For RTL8922A, the bits [16:31] of word 3 of v1 format isn't as WiFi 6 chips. Instead, it only needs to fill additional band type and partial bandwidth ER. Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20251114060128.35363-11-pkshih@realtek.com
This commit is contained in:
parent
1c2ada0962
commit
aa8d1a8805
|
|
@ -3384,11 +3384,18 @@ struct rtw89_ra_info {
|
|||
u8 cr_tbl_sel:1;
|
||||
u8 fix_giltf_en:1;
|
||||
u8 fix_giltf:3;
|
||||
u8 rsvd2:1;
|
||||
u8 partial_bw_er:1;
|
||||
u8 csi_mcs_ss_idx;
|
||||
u8 csi_mode:2;
|
||||
u8 csi_gi_ltf:3;
|
||||
u8 csi_bw:3;
|
||||
/* after v1 */
|
||||
u8 is_noisy:1;
|
||||
u8 psra_en:1;
|
||||
u8 rsvd0:1;
|
||||
u8 macid_msb:2;
|
||||
u8 band:2; /* enum rtw89_band */
|
||||
u8 is_new_dbgreg:1;
|
||||
};
|
||||
|
||||
#define RTW89_PPDU_MAC_INFO_USR_SIZE 4
|
||||
|
|
|
|||
|
|
@ -4739,13 +4739,16 @@ int rtw89_fw_h2c_ra(struct rtw89_dev *rtwdev, struct rtw89_ra_info *ra, bool csi
|
|||
struct rtw89_h2c_ra_v1 *h2c_v1;
|
||||
struct rtw89_h2c_ra *h2c;
|
||||
u32 len = sizeof(*h2c);
|
||||
bool format_v1 = false;
|
||||
struct sk_buff *skb;
|
||||
u8 ver = U8_MAX;
|
||||
int ret;
|
||||
|
||||
if (chip->chip_gen == RTW89_CHIP_BE) {
|
||||
if (chip->chip_gen == RTW89_CHIP_AX) {
|
||||
len = sizeof(*h2c);
|
||||
ver = 0;
|
||||
} else {
|
||||
len = sizeof(*h2c_v1);
|
||||
format_v1 = true;
|
||||
ver = 1;
|
||||
}
|
||||
|
||||
skb = rtw89_fw_h2c_alloc_skb_with_hdr(rtwdev, len);
|
||||
|
|
@ -4777,16 +4780,8 @@ int rtw89_fw_h2c_ra(struct rtw89_dev *rtwdev, struct rtw89_ra_info *ra, bool csi
|
|||
h2c->w3 = le32_encode_bits(ra->fix_giltf_en, RTW89_H2C_RA_W3_FIX_GILTF_EN) |
|
||||
le32_encode_bits(ra->fix_giltf, RTW89_H2C_RA_W3_FIX_GILTF);
|
||||
|
||||
if (!format_v1)
|
||||
goto csi;
|
||||
|
||||
h2c_v1 = (struct rtw89_h2c_ra_v1 *)h2c;
|
||||
h2c_v1->w4 = le32_encode_bits(ra->mode_ctrl, RTW89_H2C_RA_V1_W4_MODE_EHT) |
|
||||
le32_encode_bits(ra->bw_cap, RTW89_H2C_RA_V1_W4_BW_EHT);
|
||||
|
||||
csi:
|
||||
if (!csi)
|
||||
goto done;
|
||||
if (!csi || ver >= 1)
|
||||
goto next_v1;
|
||||
|
||||
h2c->w2 |= le32_encode_bits(1, RTW89_H2C_RA_W2_BFEE_CSI_CTL);
|
||||
h2c->w3 |= le32_encode_bits(ra->band_num, RTW89_H2C_RA_W3_BAND_NUM) |
|
||||
|
|
@ -4798,6 +4793,18 @@ int rtw89_fw_h2c_ra(struct rtw89_dev *rtwdev, struct rtw89_ra_info *ra, bool csi
|
|||
le32_encode_bits(ra->csi_gi_ltf, RTW89_H2C_RA_W3_FIXED_CSI_GI_LTF) |
|
||||
le32_encode_bits(ra->csi_bw, RTW89_H2C_RA_W3_FIXED_CSI_BW);
|
||||
|
||||
next_v1:
|
||||
if (ver < 1)
|
||||
goto done;
|
||||
|
||||
h2c->w3 |= le32_encode_bits(ra->partial_bw_er,
|
||||
RTW89_H2C_RA_V1_W3_PARTIAL_BW_SU_ER) |
|
||||
le32_encode_bits(ra->band, RTW89_H2C_RA_V1_W3_BAND);
|
||||
|
||||
h2c_v1 = (struct rtw89_h2c_ra_v1 *)h2c;
|
||||
h2c_v1->w4 = le32_encode_bits(ra->mode_ctrl, RTW89_H2C_RA_V1_W4_MODE_EHT) |
|
||||
le32_encode_bits(ra->bw_cap, RTW89_H2C_RA_V1_W4_BW_EHT);
|
||||
|
||||
done:
|
||||
rtw89_h2c_pkt_set_hdr(rtwdev, skb, FWCMD_TYPE_H2C,
|
||||
H2C_CAT_OUTSRC, H2C_CL_OUTSRC_RA,
|
||||
|
|
|
|||
|
|
@ -447,6 +447,13 @@ struct rtw89_h2c_ra {
|
|||
#define RTW89_H2C_RA_W3_FIXED_CSI_MODE GENMASK(25, 24)
|
||||
#define RTW89_H2C_RA_W3_FIXED_CSI_GI_LTF GENMASK(28, 26)
|
||||
#define RTW89_H2C_RA_W3_FIXED_CSI_BW GENMASK(31, 29)
|
||||
#define RTW89_H2C_RA_V1_W3_PARTIAL_BW_SU_ER BIT(15)
|
||||
#define RTW89_H2C_RA_V1_W3_FIXED_CSI_RATE_L GENMASK(23, 16)
|
||||
#define RTW89_H2C_RA_V1_W3_IS_NOISY BIT(24)
|
||||
#define RTW89_H2C_RA_V1_W3_PSRA_EN BIT(25)
|
||||
#define RTW89_H2C_RA_V1_W3_MACID_MSB GENMASK(28, 27)
|
||||
#define RTW89_H2C_RA_V1_W3_BAND GENMASK(30, 29)
|
||||
#define RTW89_H2C_RA_V1_W3_NEW_DBGREG BIT(31)
|
||||
|
||||
struct rtw89_h2c_ra_v1 {
|
||||
struct rtw89_h2c_ra v0;
|
||||
|
|
|
|||
|
|
@ -476,6 +476,10 @@ static void rtw89_phy_ra_sta_update(struct rtw89_dev *rtwdev,
|
|||
ra->ra_mask = ra_mask;
|
||||
ra->fix_giltf_en = fix_giltf_en;
|
||||
ra->fix_giltf = fix_giltf;
|
||||
ra->partial_bw_er = link_sta->he_cap.has_he ?
|
||||
!!(link_sta->he_cap.he_cap_elem.phy_cap_info[6] &
|
||||
IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE) : 0;
|
||||
ra->band = chan->band_type;
|
||||
|
||||
if (!csi)
|
||||
return;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user