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