bf.h 3.8 KB

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