linux/drivers/net/wireless/realtek/rtw88/bf.h
<<
>>
Prefs
   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 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
  22
  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)
  28
  29#define R_MU_RL                         0xf
  30#define BIT_SHIFT_R_MU_RL               12
  31#define BIT_SHIFT_WMAC_TXMU_ACKPOLICY   4
  32#define BIT_SHIFT_CSI_RATE              24
  33
  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)
  38
  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)
  43
  44#define RTW_NDP_RX_STANDBY_TIME 0x70
  45#define RTW_SND_CTRL_REMOVE     0xD8
  46#define RTW_SND_CTRL_SOUNDING   0xDB
  47
  48enum csi_seg_len {
  49        HAL_CSI_SEG_4K = 0,
  50        HAL_CSI_SEG_8K = 1,
  51        HAL_CSI_SEG_11K = 2,
  52};
  53
  54struct cfg_mumimo_para {
  55        u8 sounding_sts[6];
  56        u16 grouping_bitmap;
  57        u8 mu_tx_en;
  58        u32 given_gid_tab[2];
  59        u32 given_user_pos[4];
  60};
  61
  62struct mu_bfer_init_para {
  63        u16 paid;
  64        u16 csi_para;
  65        u16 my_aid;
  66        enum csi_seg_len csi_length_sel;
  67        u8 bfer_address[ETH_ALEN];
  68};
  69
  70void rtw_bf_disassoc(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
  71                     struct ieee80211_bss_conf *bss_conf);
  72void rtw_bf_assoc(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
  73                  struct ieee80211_bss_conf *bss_conf);
  74void rtw_bf_init_bfer_entry_mu(struct rtw_dev *rtwdev,
  75                               struct mu_bfer_init_para *param);
  76void rtw_bf_cfg_sounding(struct rtw_dev *rtwdev, struct rtw_vif *vif,
  77                         enum rtw_trx_desc_rate rate);
  78void rtw_bf_cfg_mu_bfee(struct rtw_dev *rtwdev, struct cfg_mumimo_para *param);
  79void rtw_bf_del_bfer_entry_mu(struct rtw_dev *rtwdev);
  80void rtw_bf_del_sounding(struct rtw_dev *rtwdev);
  81void rtw_bf_enable_bfee_su(struct rtw_dev *rtwdev, struct rtw_vif *vif,
  82                           struct rtw_bfee *bfee);
  83void rtw_bf_enable_bfee_mu(struct rtw_dev *rtwdev, struct rtw_vif *vif,
  84                           struct rtw_bfee *bfee);
  85void rtw_bf_remove_bfee_su(struct rtw_dev *rtwdev, struct rtw_bfee *bfee);
  86void rtw_bf_remove_bfee_mu(struct rtw_dev *rtwdev, struct rtw_bfee *bfee);
  87void rtw_bf_set_gid_table(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
  88                          struct ieee80211_bss_conf *conf);
  89void rtw_bf_phy_init(struct rtw_dev *rtwdev);
  90void rtw_bf_cfg_csi_rate(struct rtw_dev *rtwdev, u8 rssi, u8 cur_rate,
  91                         u8 fixrate_en, u8 *new_rate);
  92static inline void rtw_chip_config_bfee(struct rtw_dev *rtwdev, struct rtw_vif *vif,
  93                                        struct rtw_bfee *bfee, bool enable)
  94{
  95        if (rtwdev->chip->ops->config_bfee)
  96                rtwdev->chip->ops->config_bfee(rtwdev, vif, bfee, enable);
  97}
  98
  99static inline void rtw_chip_set_gid_table(struct rtw_dev *rtwdev,
 100                                          struct ieee80211_vif *vif,
 101                                          struct ieee80211_bss_conf *conf)
 102{
 103        if (rtwdev->chip->ops->set_gid_table)
 104                rtwdev->chip->ops->set_gid_table(rtwdev, vif, conf);
 105}
 106
 107static inline void rtw_chip_cfg_csi_rate(struct rtw_dev *rtwdev, u8 rssi, u8 cur_rate,
 108                                         u8 fixrate_en, u8 *new_rate)
 109{
 110        if (rtwdev->chip->ops->cfg_csi_rate)
 111                rtwdev->chip->ops->cfg_csi_rate(rtwdev, rssi, cur_rate,
 112                                                fixrate_en, new_rate);
 113}
 114#endif
 115