1e2340276SBjoern A. Zeeb /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ 2e2340276SBjoern A. Zeeb /* Copyright(c) 2019-2022 Realtek Corporation 3e2340276SBjoern A. Zeeb */ 4e2340276SBjoern A. Zeeb 5e2340276SBjoern A. Zeeb #ifndef __RTW89_8852B_H__ 6e2340276SBjoern A. Zeeb #define __RTW89_8852B_H__ 7e2340276SBjoern A. Zeeb 8e2340276SBjoern A. Zeeb #include "core.h" 9e2340276SBjoern A. Zeeb 10e2340276SBjoern A. Zeeb #define RF_PATH_NUM_8852B 2 11e2340276SBjoern A. Zeeb #define BB_PATH_NUM_8852B 2 12e2340276SBjoern A. Zeeb 13e2340276SBjoern A. Zeeb enum rtw8852b_pmac_mode { 14e2340276SBjoern A. Zeeb NONE_TEST, 15e2340276SBjoern A. Zeeb PKTS_TX, 16e2340276SBjoern A. Zeeb PKTS_RX, 17e2340276SBjoern A. Zeeb CONT_TX 18e2340276SBjoern A. Zeeb }; 19e2340276SBjoern A. Zeeb 20e2340276SBjoern A. Zeeb struct rtw8852b_u_efuse { 21e2340276SBjoern A. Zeeb u8 rsvd[0x88]; 22e2340276SBjoern A. Zeeb u8 mac_addr[ETH_ALEN]; 23e2340276SBjoern A. Zeeb }; 24e2340276SBjoern A. Zeeb 25e2340276SBjoern A. Zeeb struct rtw8852b_e_efuse { 26e2340276SBjoern A. Zeeb u8 mac_addr[ETH_ALEN]; 27e2340276SBjoern A. Zeeb }; 28e2340276SBjoern A. Zeeb 29e2340276SBjoern A. Zeeb struct rtw8852b_tssi_offset { 30e2340276SBjoern A. Zeeb u8 cck_tssi[TSSI_CCK_CH_GROUP_NUM]; 31e2340276SBjoern A. Zeeb u8 bw40_tssi[TSSI_MCS_2G_CH_GROUP_NUM]; 32e2340276SBjoern A. Zeeb u8 rsvd[7]; 33e2340276SBjoern A. Zeeb u8 bw40_1s_tssi_5g[TSSI_MCS_5G_CH_GROUP_NUM]; 34e2340276SBjoern A. Zeeb } __packed; 35e2340276SBjoern A. Zeeb 36e2340276SBjoern A. Zeeb struct rtw8852b_efuse { 37e2340276SBjoern A. Zeeb u8 rsvd[0x210]; 38e2340276SBjoern A. Zeeb struct rtw8852b_tssi_offset path_a_tssi; 39e2340276SBjoern A. Zeeb u8 rsvd1[10]; 40e2340276SBjoern A. Zeeb struct rtw8852b_tssi_offset path_b_tssi; 41e2340276SBjoern A. Zeeb u8 rsvd2[94]; 42e2340276SBjoern A. Zeeb u8 channel_plan; 43e2340276SBjoern A. Zeeb u8 xtal_k; 44e2340276SBjoern A. Zeeb u8 rsvd3; 45e2340276SBjoern A. Zeeb u8 iqk_lck; 46e2340276SBjoern A. Zeeb u8 rsvd4[5]; 47e2340276SBjoern A. Zeeb u8 reg_setting:2; 48e2340276SBjoern A. Zeeb u8 tx_diversity:1; 49e2340276SBjoern A. Zeeb u8 rx_diversity:2; 50e2340276SBjoern A. Zeeb u8 ac_mode:1; 51e2340276SBjoern A. Zeeb u8 module_type:2; 52e2340276SBjoern A. Zeeb u8 rsvd5; 53e2340276SBjoern A. Zeeb u8 shared_ant:1; 54e2340276SBjoern A. Zeeb u8 coex_type:3; 55e2340276SBjoern A. Zeeb u8 ant_iso:1; 56e2340276SBjoern A. Zeeb u8 radio_on_off:1; 57e2340276SBjoern A. Zeeb u8 rsvd6:2; 58e2340276SBjoern A. Zeeb u8 eeprom_version; 59e2340276SBjoern A. Zeeb u8 customer_id; 60e2340276SBjoern A. Zeeb u8 tx_bb_swing_2g; 61e2340276SBjoern A. Zeeb u8 tx_bb_swing_5g; 62e2340276SBjoern A. Zeeb u8 tx_cali_pwr_trk_mode; 63e2340276SBjoern A. Zeeb u8 trx_path_selection; 64e2340276SBjoern A. Zeeb u8 rfe_type; 65e2340276SBjoern A. Zeeb u8 country_code[2]; 66e2340276SBjoern A. Zeeb u8 rsvd7[3]; 67e2340276SBjoern A. Zeeb u8 path_a_therm; 68e2340276SBjoern A. Zeeb u8 path_b_therm; 69e2340276SBjoern A. Zeeb u8 rsvd8[2]; 70e2340276SBjoern A. Zeeb u8 rx_gain_2g_ofdm; 71e2340276SBjoern A. Zeeb u8 rsvd9; 72e2340276SBjoern A. Zeeb u8 rx_gain_2g_cck; 73e2340276SBjoern A. Zeeb u8 rsvd10; 74e2340276SBjoern A. Zeeb u8 rx_gain_5g_low; 75e2340276SBjoern A. Zeeb u8 rsvd11; 76e2340276SBjoern A. Zeeb u8 rx_gain_5g_mid; 77e2340276SBjoern A. Zeeb u8 rsvd12; 78e2340276SBjoern A. Zeeb u8 rx_gain_5g_high; 79e2340276SBjoern A. Zeeb u8 rsvd13[35]; 80e2340276SBjoern A. Zeeb u8 path_a_cck_pwr_idx[6]; 81e2340276SBjoern A. Zeeb u8 path_a_bw40_1tx_pwr_idx[5]; 82e2340276SBjoern A. Zeeb u8 path_a_ofdm_1tx_pwr_idx_diff:4; 83e2340276SBjoern A. Zeeb u8 path_a_bw20_1tx_pwr_idx_diff:4; 84e2340276SBjoern A. Zeeb u8 path_a_bw20_2tx_pwr_idx_diff:4; 85e2340276SBjoern A. Zeeb u8 path_a_bw40_2tx_pwr_idx_diff:4; 86e2340276SBjoern A. Zeeb u8 path_a_cck_2tx_pwr_idx_diff:4; 87e2340276SBjoern A. Zeeb u8 path_a_ofdm_2tx_pwr_idx_diff:4; 88e2340276SBjoern A. Zeeb u8 rsvd14[0xf2]; 89e2340276SBjoern A. Zeeb union { 90e2340276SBjoern A. Zeeb struct rtw8852b_u_efuse u; 91e2340276SBjoern A. Zeeb struct rtw8852b_e_efuse e; 92e2340276SBjoern A. Zeeb }; 93e2340276SBjoern A. Zeeb } __packed; 94e2340276SBjoern A. Zeeb 95e2340276SBjoern A. Zeeb struct rtw8852b_bb_pmac_info { 96e2340276SBjoern A. Zeeb u8 en_pmac_tx:1; 97e2340276SBjoern A. Zeeb u8 is_cck:1; 98e2340276SBjoern A. Zeeb u8 mode:3; 99e2340276SBjoern A. Zeeb u8 rsvd:3; 100e2340276SBjoern A. Zeeb u16 tx_cnt; 101e2340276SBjoern A. Zeeb u16 period; 102e2340276SBjoern A. Zeeb u16 tx_time; 103e2340276SBjoern A. Zeeb u8 duty_cycle; 104e2340276SBjoern A. Zeeb }; 105e2340276SBjoern A. Zeeb 106e2340276SBjoern A. Zeeb struct rtw8852b_bb_tssi_bak { 107e2340276SBjoern A. Zeeb u8 tx_path; 108e2340276SBjoern A. Zeeb u8 rx_path; 109e2340276SBjoern A. Zeeb u32 p0_rfmode; 110e2340276SBjoern A. Zeeb u32 p0_rfmode_ftm; 111e2340276SBjoern A. Zeeb u32 p1_rfmode; 112e2340276SBjoern A. Zeeb u32 p1_rfmode_ftm; 113e2340276SBjoern A. Zeeb s16 tx_pwr; /* S9 */ 114e2340276SBjoern A. Zeeb }; 115e2340276SBjoern A. Zeeb 116e2340276SBjoern A. Zeeb extern const struct rtw89_chip_info rtw8852b_chip_info; 117e2340276SBjoern A. Zeeb 118e2340276SBjoern A. Zeeb void rtw8852b_bb_set_plcp_tx(struct rtw89_dev *rtwdev); 119e2340276SBjoern A. Zeeb void rtw8852b_bb_set_pmac_tx(struct rtw89_dev *rtwdev, 120e2340276SBjoern A. Zeeb struct rtw8852b_bb_pmac_info *tx_info, 121e2340276SBjoern A. Zeeb enum rtw89_phy_idx idx); 122e2340276SBjoern A. Zeeb void rtw8852b_bb_set_pmac_pkt_tx(struct rtw89_dev *rtwdev, u8 enable, 123e2340276SBjoern A. Zeeb u16 tx_cnt, u16 period, u16 tx_time, 124e2340276SBjoern A. Zeeb enum rtw89_phy_idx idx); 125e2340276SBjoern A. Zeeb void rtw8852b_bb_set_power(struct rtw89_dev *rtwdev, s16 pwr_dbm, 126e2340276SBjoern A. Zeeb enum rtw89_phy_idx idx); 127e2340276SBjoern A. Zeeb void rtw8852b_bb_cfg_tx_path(struct rtw89_dev *rtwdev, u8 tx_path); 128e2340276SBjoern A. Zeeb void rtw8852b_bb_ctrl_rx_path(struct rtw89_dev *rtwdev, 129e2340276SBjoern A. Zeeb enum rtw89_rf_path_bit rx_path); 130e2340276SBjoern A. Zeeb void rtw8852b_bb_tx_mode_switch(struct rtw89_dev *rtwdev, 131e2340276SBjoern A. Zeeb enum rtw89_phy_idx idx, u8 mode); 132e2340276SBjoern A. Zeeb void rtw8852b_bb_backup_tssi(struct rtw89_dev *rtwdev, enum rtw89_phy_idx idx, 133e2340276SBjoern A. Zeeb struct rtw8852b_bb_tssi_bak *bak); 134e2340276SBjoern A. Zeeb void rtw8852b_bb_restore_tssi(struct rtw89_dev *rtwdev, enum rtw89_phy_idx idx, 135e2340276SBjoern A. Zeeb const struct rtw8852b_bb_tssi_bak *bak); 136e2340276SBjoern A. Zeeb 137e2340276SBjoern A. Zeeb #endif 138