1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2 /* Copyright(c) 2018-2019 Realtek Corporation.
8 #define REG_TXBF_CTRL 0x042C
9 #define REG_RRSR 0x0440
10 #define REG_NDPA_OPT_CTRL 0x045F
12 #define REG_ASSOCIATED_BFMER0_INFO 0x06E4
13 #define REG_ASSOCIATED_BFMER1_INFO 0x06EC
14 #define REG_TX_CSI_RPT_PARAM_BW20 0x06F4
15 #define REG_SND_PTCL_CTRL 0x0718
16 #define REG_MU_TX_CTL 0x14C0
17 #define REG_MU_STA_GID_VLD 0x14C4
18 #define REG_MU_STA_USER_POS_INFO 0x14C8
19 #define REG_CSI_RRSR 0x1678
20 #define REG_WMAC_MU_BF_OPTION 0x167C
21 #define REG_WMAC_MU_BF_CTL 0x1680
23 #define BIT_WMAC_USE_NDPARATE BIT(30)
24 #define BIT_WMAC_TXMU_ACKPOLICY_EN BIT(6)
25 #define BIT_USE_NDPA_PARAMETER BIT(30)
26 #define BIT_MU_P1_WAIT_STATE_EN BIT(16)
27 #define BIT_EN_MU_MIMO BIT(7)
30 #define BIT_SHIFT_R_MU_RL 12
31 #define BIT_SHIFT_WMAC_TXMU_ACKPOLICY 4
32 #define BIT_SHIFT_CSI_RATE 24
34 #define BIT_MASK_R_MU_RL (R_MU_RL << BIT_SHIFT_R_MU_RL)
35 #define BIT_MASK_R_MU_TABLE_VALID 0x3f
36 #define BIT_MASK_CSI_RATE_VAL 0x3F
37 #define BIT_MASK_CSI_RATE (BIT_MASK_CSI_RATE_VAL << BIT_SHIFT_CSI_RATE)
39 #define BIT_RXFLTMAP0_ACTIONNOACK BIT(14)
40 #define BIT_RXFLTMAP1_BF (BIT(4) | BIT(5))
41 #define BIT_RXFLTMAP1_BF_REPORT_POLL BIT(4)
42 #define BIT_RXFLTMAP4_BF_REPORT_POLL BIT(4)
44 #define RTW_NDP_RX_STANDBY_TIME 0x70
45 #define RTW_SND_CTRL_REMOVE 0xD8
46 #define RTW_SND_CTRL_SOUNDING 0xDB
54 struct cfg_mumimo_para
{
59 u32 given_user_pos
[4];
62 struct mu_bfer_init_para
{
66 enum csi_seg_len csi_length_sel
;
67 u8 bfer_address
[ETH_ALEN
];
70 void rtw_bf_disassoc(struct rtw_dev
*rtwdev
, struct ieee80211_vif
*vif
,
71 struct ieee80211_bss_conf
*bss_conf
);
72 void rtw_bf_assoc(struct rtw_dev
*rtwdev
, struct ieee80211_vif
*vif
,
73 struct ieee80211_bss_conf
*bss_conf
);
74 void rtw_bf_init_bfer_entry_mu(struct rtw_dev
*rtwdev
,
75 struct mu_bfer_init_para
*param
);
76 void rtw_bf_cfg_sounding(struct rtw_dev
*rtwdev
, struct rtw_vif
*vif
,
77 enum rtw_trx_desc_rate rate
);
78 void rtw_bf_cfg_mu_bfee(struct rtw_dev
*rtwdev
, struct cfg_mumimo_para
*param
);
79 void rtw_bf_del_bfer_entry_mu(struct rtw_dev
*rtwdev
);
80 void rtw_bf_del_sounding(struct rtw_dev
*rtwdev
);
81 void rtw_bf_enable_bfee_su(struct rtw_dev
*rtwdev
, struct rtw_vif
*vif
,
82 struct rtw_bfee
*bfee
);
83 void rtw_bf_enable_bfee_mu(struct rtw_dev
*rtwdev
, struct rtw_vif
*vif
,
84 struct rtw_bfee
*bfee
);
85 void rtw_bf_remove_bfee_su(struct rtw_dev
*rtwdev
, struct rtw_bfee
*bfee
);
86 void rtw_bf_remove_bfee_mu(struct rtw_dev
*rtwdev
, struct rtw_bfee
*bfee
);
87 void rtw_bf_set_gid_table(struct rtw_dev
*rtwdev
, struct ieee80211_vif
*vif
,
88 struct ieee80211_bss_conf
*conf
);
89 void rtw_bf_phy_init(struct rtw_dev
*rtwdev
);
90 void rtw_bf_cfg_csi_rate(struct rtw_dev
*rtwdev
, u8 rssi
, u8 cur_rate
,
91 u8 fixrate_en
, u8
*new_rate
);
92 static inline void rtw_chip_config_bfee(struct rtw_dev
*rtwdev
, struct rtw_vif
*vif
,
93 struct rtw_bfee
*bfee
, bool enable
)
95 if (rtwdev
->chip
->ops
->config_bfee
)
96 rtwdev
->chip
->ops
->config_bfee(rtwdev
, vif
, bfee
, enable
);
99 static inline void rtw_chip_set_gid_table(struct rtw_dev
*rtwdev
,
100 struct ieee80211_vif
*vif
,
101 struct ieee80211_bss_conf
*conf
)
103 if (rtwdev
->chip
->ops
->set_gid_table
)
104 rtwdev
->chip
->ops
->set_gid_table(rtwdev
, vif
, conf
);
107 static inline void rtw_chip_cfg_csi_rate(struct rtw_dev
*rtwdev
, u8 rssi
, u8 cur_rate
,
108 u8 fixrate_en
, u8
*new_rate
)
110 if (rtwdev
->chip
->ops
->cfg_csi_rate
)
111 rtwdev
->chip
->ops
->cfg_csi_rate(rtwdev
, rssi
, cur_rate
,
112 fixrate_en
, new_rate
);