Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/dev/rtw88/bf.h
105375 views
1
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2
/* Copyright(c) 2018-2019 Realtek Corporation.
3
*/
4
5
#ifndef __RTW_BF_H_
6
#define __RTW_BF_H_
7
8
#define REG_TXBF_CTRL 0x042C
9
#define REG_RRSR 0x0440
10
#define REG_NDPA_OPT_CTRL 0x045F
11
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 BIT_DIS_CHK_VHTSIGB_CRC BIT(6)
17
#define BIT_DIS_CHK_VHTSIGA_CRC BIT(5)
18
#define BIT_MASK_BEAMFORM (GENMASK(4, 0) | BIT(7))
19
#define REG_MU_TX_CTL 0x14C0
20
#define REG_MU_STA_GID_VLD 0x14C4
21
#define REG_MU_STA_USER_POS_INFO 0x14C8
22
#define REG_CSI_RRSR 0x1678
23
#define REG_WMAC_MU_BF_OPTION 0x167C
24
#define REG_WMAC_MU_BF_CTL 0x1680
25
26
#define BIT_WMAC_USE_NDPARATE BIT(30)
27
#define BIT_WMAC_TXMU_ACKPOLICY_EN BIT(6)
28
#define BIT_USE_NDPA_PARAMETER BIT(30)
29
#define BIT_MU_P1_WAIT_STATE_EN BIT(16)
30
#define BIT_EN_MU_MIMO BIT(7)
31
32
#define R_MU_RL 0xf
33
#define BIT_SHIFT_R_MU_RL 12
34
#define BIT_SHIFT_WMAC_TXMU_ACKPOLICY 4
35
#define BIT_SHIFT_CSI_RATE 24
36
#define BIT_CSI_FORCE_RATE BIT(15)
37
38
#define BIT_MASK_R_MU_RL (R_MU_RL << BIT_SHIFT_R_MU_RL)
39
#define BIT_MASK_R_MU_TABLE_VALID 0x3f
40
#define BIT_MASK_CSI_RATE_VAL 0x3F
41
#define BIT_MASK_CSI_RATE (BIT_MASK_CSI_RATE_VAL << BIT_SHIFT_CSI_RATE)
42
43
#define BIT_RXFLTMAP0_ACTIONNOACK BIT(14)
44
#define BIT_RXFLTMAP1_BF (BIT(4) | BIT(5))
45
#define BIT_RXFLTMAP1_BF_REPORT_POLL BIT(4)
46
#define BIT_RXFLTMAP4_BF_REPORT_POLL BIT(4)
47
48
#define RTW_NDP_RX_STANDBY_TIME 0x70
49
#define RTW_SND_CTRL_REMOVE 0x98
50
#define RTW_SND_CTRL_SOUNDING 0x9B
51
52
enum csi_rsc {
53
CSI_RSC_PRIMARY_20M_BW = 0,
54
CSI_RSC_FOLLOW_RX_PACKET_BW = 1,
55
CSI_RSC_DUPLICATE_MODE = 2,
56
};
57
58
enum csi_seg_len {
59
HAL_CSI_SEG_4K = 0,
60
HAL_CSI_SEG_8K = 1,
61
HAL_CSI_SEG_11K = 2,
62
};
63
64
struct cfg_mumimo_para {
65
u8 sounding_sts[6];
66
u16 grouping_bitmap;
67
u8 mu_tx_en;
68
u32 given_gid_tab[2];
69
u32 given_user_pos[4];
70
};
71
72
struct mu_bfer_init_para {
73
u16 paid;
74
u16 csi_para;
75
u16 my_aid;
76
enum csi_seg_len csi_length_sel;
77
u8 bfer_address[ETH_ALEN];
78
};
79
80
void rtw_bf_disassoc(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
81
struct ieee80211_bss_conf *bss_conf);
82
void rtw_bf_assoc(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
83
struct ieee80211_bss_conf *bss_conf);
84
void rtw_bf_init_bfer_entry_mu(struct rtw_dev *rtwdev,
85
struct mu_bfer_init_para *param);
86
void rtw_bf_cfg_sounding(struct rtw_dev *rtwdev, struct rtw_vif *vif,
87
enum rtw_trx_desc_rate rate);
88
void rtw_bf_cfg_mu_bfee(struct rtw_dev *rtwdev, struct cfg_mumimo_para *param);
89
void rtw_bf_del_bfer_entry_mu(struct rtw_dev *rtwdev);
90
void rtw_bf_del_sounding(struct rtw_dev *rtwdev);
91
void rtw_bf_enable_bfee_su(struct rtw_dev *rtwdev, struct rtw_vif *vif,
92
struct rtw_bfee *bfee);
93
void rtw_bf_enable_bfee_mu(struct rtw_dev *rtwdev, struct rtw_vif *vif,
94
struct rtw_bfee *bfee);
95
void rtw_bf_remove_bfee_su(struct rtw_dev *rtwdev, struct rtw_bfee *bfee);
96
void rtw_bf_remove_bfee_mu(struct rtw_dev *rtwdev, struct rtw_bfee *bfee);
97
void rtw_bf_set_gid_table(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
98
struct ieee80211_bss_conf *conf);
99
void rtw_bf_phy_init(struct rtw_dev *rtwdev);
100
void rtw_bf_cfg_csi_rate(struct rtw_dev *rtwdev, u8 rssi, u8 cur_rate,
101
u8 fixrate_en, u8 *new_rate);
102
static inline void rtw_chip_config_bfee(struct rtw_dev *rtwdev, struct rtw_vif *vif,
103
struct rtw_bfee *bfee, bool enable)
104
{
105
if (rtwdev->chip->ops->config_bfee)
106
rtwdev->chip->ops->config_bfee(rtwdev, vif, bfee, enable);
107
}
108
109
static inline void rtw_chip_set_gid_table(struct rtw_dev *rtwdev,
110
struct ieee80211_vif *vif,
111
struct ieee80211_bss_conf *conf)
112
{
113
if (rtwdev->chip->ops->set_gid_table)
114
rtwdev->chip->ops->set_gid_table(rtwdev, vif, conf);
115
}
116
117
static inline void rtw_chip_cfg_csi_rate(struct rtw_dev *rtwdev, u8 rssi, u8 cur_rate,
118
u8 fixrate_en, u8 *new_rate)
119
{
120
if (rtwdev->chip->ops->cfg_csi_rate)
121
rtwdev->chip->ops->cfg_csi_rate(rtwdev, rssi, cur_rate,
122
fixrate_en, new_rate);
123
}
124
#endif
125
126