#include "chan.h"
#include "coex.h"
#include "debug.h"
#include "fw.h"
#include "mac.h"
#include "phy.h"
#include "ps.h"
#include "reg.h"
#include "sar.h"
#include "txrx.h"
#include "util.h"
static u32 rtw89_phy0_phy1_offset(struct rtw89_dev *rtwdev, u32 addr)
{ … }
static u16 get_max_amsdu_len(struct rtw89_dev *rtwdev,
const struct rtw89_ra_report *report)
{ … }
static u64 get_mcs_ra_mask(u16 mcs_map, u8 highest_mcs, u8 gap)
{ … }
static u64 get_he_ra_mask(struct ieee80211_sta *sta)
{ … }
static u64 get_eht_mcs_ra_mask(u8 *max_nss, u8 start_mcs, u8 n_nss)
{ … }
static u64 get_eht_ra_mask(struct ieee80211_sta *sta)
{ … }
#define RA_FLOOR_TABLE_SIZE …
#define RA_FLOOR_UP_GAP …
static u64 rtw89_phy_ra_mask_rssi(struct rtw89_dev *rtwdev, u8 rssi,
u8 ratr_state)
{ … }
static u64 rtw89_phy_ra_mask_recover(u64 ra_mask, u64 ra_mask_bak)
{ … }
static u64 rtw89_phy_ra_mask_cfg(struct rtw89_dev *rtwdev, struct rtw89_sta *rtwsta,
const struct rtw89_chan *chan)
{ … }
static const u64
rtw89_ra_mask_ht_rates[4] = …;
static const u64
rtw89_ra_mask_vht_rates[4] = …;
static const u64
rtw89_ra_mask_he_rates[4] = …;
static const u64
rtw89_ra_mask_eht_rates[4] = …;
static void rtw89_phy_ra_gi_ltf(struct rtw89_dev *rtwdev,
struct rtw89_sta *rtwsta,
const struct rtw89_chan *chan,
bool *fix_giltf_en, u8 *fix_giltf)
{ … }
static void rtw89_phy_ra_sta_update(struct rtw89_dev *rtwdev,
struct ieee80211_sta *sta, bool csi)
{ … }
void rtw89_phy_ra_update_sta(struct rtw89_dev *rtwdev, struct ieee80211_sta *sta,
u32 changed)
{ … }
static bool __check_rate_pattern(struct rtw89_phy_rate_pattern *next,
u16 rate_base, u64 ra_mask, u8 ra_mode,
u32 rate_ctrl, u32 ctrl_skip, bool force)
{ … }
#define RTW89_HW_RATE_BY_CHIP_GEN(rate) …
void rtw89_phy_rate_pattern_vif(struct rtw89_dev *rtwdev,
struct ieee80211_vif *vif,
const struct cfg80211_bitrate_mask *mask)
{ … }
static void rtw89_phy_ra_update_sta_iter(void *data, struct ieee80211_sta *sta)
{ … }
void rtw89_phy_ra_update(struct rtw89_dev *rtwdev)
{ … }
void rtw89_phy_ra_assoc(struct rtw89_dev *rtwdev, struct ieee80211_sta *sta)
{ … }
u8 rtw89_phy_get_txsc(struct rtw89_dev *rtwdev,
const struct rtw89_chan *chan,
enum rtw89_bandwidth dbw)
{ … }
EXPORT_SYMBOL(…);
u8 rtw89_phy_get_txsb(struct rtw89_dev *rtwdev, const struct rtw89_chan *chan,
enum rtw89_bandwidth dbw)
{ … }
EXPORT_SYMBOL(…);
static bool rtw89_phy_check_swsi_busy(struct rtw89_dev *rtwdev)
{ … }
u32 rtw89_phy_read_rf(struct rtw89_dev *rtwdev, enum rtw89_rf_path rf_path,
u32 addr, u32 mask)
{ … }
EXPORT_SYMBOL(…);
static u32 rtw89_phy_read_rf_a(struct rtw89_dev *rtwdev,
enum rtw89_rf_path rf_path, u32 addr, u32 mask)
{ … }
u32 rtw89_phy_read_rf_v1(struct rtw89_dev *rtwdev, enum rtw89_rf_path rf_path,
u32 addr, u32 mask)
{ … }
EXPORT_SYMBOL(…);
static u32 rtw89_phy_read_full_rf_v2_a(struct rtw89_dev *rtwdev,
enum rtw89_rf_path rf_path, u32 addr)
{ … }
static u32 rtw89_phy_read_rf_v2_a(struct rtw89_dev *rtwdev,
enum rtw89_rf_path rf_path, u32 addr, u32 mask)
{ … }
u32 rtw89_phy_read_rf_v2(struct rtw89_dev *rtwdev, enum rtw89_rf_path rf_path,
u32 addr, u32 mask)
{ … }
EXPORT_SYMBOL(…);
bool rtw89_phy_write_rf(struct rtw89_dev *rtwdev, enum rtw89_rf_path rf_path,
u32 addr, u32 mask, u32 data)
{ … }
EXPORT_SYMBOL(…);
static bool rtw89_phy_write_rf_a(struct rtw89_dev *rtwdev,
enum rtw89_rf_path rf_path, u32 addr, u32 mask,
u32 data)
{ … }
bool rtw89_phy_write_rf_v1(struct rtw89_dev *rtwdev, enum rtw89_rf_path rf_path,
u32 addr, u32 mask, u32 data)
{ … }
EXPORT_SYMBOL(…);
static
bool rtw89_phy_write_full_rf_v2_a(struct rtw89_dev *rtwdev, enum rtw89_rf_path rf_path,
u32 addr, u32 data)
{ … }
static
bool rtw89_phy_write_rf_a_v2(struct rtw89_dev *rtwdev, enum rtw89_rf_path rf_path,
u32 addr, u32 mask, u32 data)
{ … }
bool rtw89_phy_write_rf_v2(struct rtw89_dev *rtwdev, enum rtw89_rf_path rf_path,
u32 addr, u32 mask, u32 data)
{ … }
EXPORT_SYMBOL(…);
static bool rtw89_chip_rf_v1(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_bb_reset(struct rtw89_dev *rtwdev,
enum rtw89_phy_idx phy_idx)
{ … }
static void rtw89_phy_config_bb_reg(struct rtw89_dev *rtwdev,
const struct rtw89_reg2_def *reg,
enum rtw89_rf_path rf_path,
void *extra_data)
{ … }
rtw89_phy_bb_gain_arg __packed;
static void
rtw89_phy_cfg_bb_gain_error(struct rtw89_dev *rtwdev,
union rtw89_phy_bb_gain_arg arg, u32 data)
{ … }
enum rtw89_phy_bb_rxsc_start_idx { … };
static void
rtw89_phy_cfg_bb_rpl_ofst(struct rtw89_dev *rtwdev,
union rtw89_phy_bb_gain_arg arg, u32 data)
{ … }
static void
rtw89_phy_cfg_bb_gain_bypass(struct rtw89_dev *rtwdev,
union rtw89_phy_bb_gain_arg arg, u32 data)
{ … }
static void
rtw89_phy_cfg_bb_gain_op1db(struct rtw89_dev *rtwdev,
union rtw89_phy_bb_gain_arg arg, u32 data)
{ … }
static void rtw89_phy_config_bb_gain_ax(struct rtw89_dev *rtwdev,
const struct rtw89_reg2_def *reg,
enum rtw89_rf_path rf_path,
void *extra_data)
{ … }
static void
rtw89_phy_cofig_rf_reg_store(struct rtw89_dev *rtwdev,
const struct rtw89_reg2_def *reg,
enum rtw89_rf_path rf_path,
struct rtw89_fw_h2c_rf_reg_info *info)
{ … }
static int rtw89_phy_config_rf_reg_fw(struct rtw89_dev *rtwdev,
struct rtw89_fw_h2c_rf_reg_info *info)
{ … }
static void rtw89_phy_config_rf_reg_noio(struct rtw89_dev *rtwdev,
const struct rtw89_reg2_def *reg,
enum rtw89_rf_path rf_path,
void *extra_data)
{ … }
static void rtw89_phy_config_rf_reg(struct rtw89_dev *rtwdev,
const struct rtw89_reg2_def *reg,
enum rtw89_rf_path rf_path,
void *extra_data)
{ … }
void rtw89_phy_config_rf_reg_v1(struct rtw89_dev *rtwdev,
const struct rtw89_reg2_def *reg,
enum rtw89_rf_path rf_path,
void *extra_data)
{ … }
EXPORT_SYMBOL(…);
static int rtw89_phy_sel_headline(struct rtw89_dev *rtwdev,
const struct rtw89_phy_table *table,
u32 *headline_size, u32 *headline_idx,
u8 rfe, u8 cv)
{ … }
static void rtw89_phy_init_reg(struct rtw89_dev *rtwdev,
const struct rtw89_phy_table *table,
void (*config)(struct rtw89_dev *rtwdev,
const struct rtw89_reg2_def *reg,
enum rtw89_rf_path rf_path,
void *data),
void *extra_data)
{ … }
void rtw89_phy_init_bb_reg(struct rtw89_dev *rtwdev)
{ … }
static u32 rtw89_phy_nctl_poll(struct rtw89_dev *rtwdev)
{ … }
void rtw89_phy_init_rf_reg(struct rtw89_dev *rtwdev, bool noio)
{ … }
static void rtw89_phy_preinit_rf_nctl_ax(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_init_rf_nctl(struct rtw89_dev *rtwdev)
{ … }
static u32 rtw89_phy0_phy1_offset_ax(struct rtw89_dev *rtwdev, u32 addr)
{ … }
void rtw89_phy_write32_idx(struct rtw89_dev *rtwdev, u32 addr, u32 mask,
u32 data, enum rtw89_phy_idx phy_idx)
{ … }
EXPORT_SYMBOL(…);
u32 rtw89_phy_read32_idx(struct rtw89_dev *rtwdev, u32 addr, u32 mask,
enum rtw89_phy_idx phy_idx)
{ … }
EXPORT_SYMBOL(…);
void rtw89_phy_set_phy_regs(struct rtw89_dev *rtwdev, u32 addr, u32 mask,
u32 val)
{ … }
EXPORT_SYMBOL(…);
void rtw89_phy_write_reg3_tbl(struct rtw89_dev *rtwdev,
const struct rtw89_phy_reg3_tbl *tbl)
{ … }
EXPORT_SYMBOL(…);
static const u8 rtw89_rs_idx_num_ax[] = …;
static const u8 rtw89_rs_nss_num_ax[] = …;
s8 *rtw89_phy_raw_byr_seek(struct rtw89_dev *rtwdev,
struct rtw89_txpwr_byrate *head,
const struct rtw89_rate_desc *desc)
{ … }
void rtw89_phy_load_txpwr_byrate(struct rtw89_dev *rtwdev,
const struct rtw89_txpwr_table *tbl)
{ … }
EXPORT_SYMBOL(…);
static s8 rtw89_phy_txpwr_rf_to_mac(struct rtw89_dev *rtwdev, s8 txpwr_rf)
{ … }
static s8 rtw89_phy_txpwr_dbm_to_mac(struct rtw89_dev *rtwdev, s8 dbm)
{ … }
static s8 rtw89_phy_txpwr_dbm_without_tolerance(s8 dbm)
{ … }
static s8 rtw89_phy_get_tpe_constraint(struct rtw89_dev *rtwdev, u8 band)
{ … }
s8 rtw89_phy_read_txpwr_byrate(struct rtw89_dev *rtwdev, u8 band, u8 bw,
const struct rtw89_rate_desc *rate_desc)
{ … }
static u8 rtw89_channel_6g_to_idx(struct rtw89_dev *rtwdev, u8 channel_6g)
{ … }
static u8 rtw89_channel_to_idx(struct rtw89_dev *rtwdev, u8 band, u8 channel)
{ … }
s8 rtw89_phy_read_txpwr_limit(struct rtw89_dev *rtwdev, u8 band,
u8 bw, u8 ntx, u8 rs, u8 bf, u8 ch)
{ … }
EXPORT_SYMBOL(…);
#define __fill_txpwr_limit_nonbf_bf(ptr, band, bw, ntx, rs, ch) …
static void rtw89_phy_fill_txpwr_limit_20m_ax(struct rtw89_dev *rtwdev,
struct rtw89_txpwr_limit_ax *lmt,
u8 band, u8 ntx, u8 ch)
{ … }
static void rtw89_phy_fill_txpwr_limit_40m_ax(struct rtw89_dev *rtwdev,
struct rtw89_txpwr_limit_ax *lmt,
u8 band, u8 ntx, u8 ch, u8 pri_ch)
{ … }
static void rtw89_phy_fill_txpwr_limit_80m_ax(struct rtw89_dev *rtwdev,
struct rtw89_txpwr_limit_ax *lmt,
u8 band, u8 ntx, u8 ch, u8 pri_ch)
{ … }
static void rtw89_phy_fill_txpwr_limit_160m_ax(struct rtw89_dev *rtwdev,
struct rtw89_txpwr_limit_ax *lmt,
u8 band, u8 ntx, u8 ch, u8 pri_ch)
{ … }
static
void rtw89_phy_fill_txpwr_limit_ax(struct rtw89_dev *rtwdev,
const struct rtw89_chan *chan,
struct rtw89_txpwr_limit_ax *lmt,
u8 ntx)
{ … }
s8 rtw89_phy_read_txpwr_limit_ru(struct rtw89_dev *rtwdev, u8 band,
u8 ru, u8 ntx, u8 ch)
{ … }
static void
rtw89_phy_fill_txpwr_limit_ru_20m_ax(struct rtw89_dev *rtwdev,
struct rtw89_txpwr_limit_ru_ax *lmt_ru,
u8 band, u8 ntx, u8 ch)
{ … }
static void
rtw89_phy_fill_txpwr_limit_ru_40m_ax(struct rtw89_dev *rtwdev,
struct rtw89_txpwr_limit_ru_ax *lmt_ru,
u8 band, u8 ntx, u8 ch)
{ … }
static void
rtw89_phy_fill_txpwr_limit_ru_80m_ax(struct rtw89_dev *rtwdev,
struct rtw89_txpwr_limit_ru_ax *lmt_ru,
u8 band, u8 ntx, u8 ch)
{ … }
static void
rtw89_phy_fill_txpwr_limit_ru_160m_ax(struct rtw89_dev *rtwdev,
struct rtw89_txpwr_limit_ru_ax *lmt_ru,
u8 band, u8 ntx, u8 ch)
{ … }
static
void rtw89_phy_fill_txpwr_limit_ru_ax(struct rtw89_dev *rtwdev,
const struct rtw89_chan *chan,
struct rtw89_txpwr_limit_ru_ax *lmt_ru,
u8 ntx)
{ … }
static void rtw89_phy_set_txpwr_byrate_ax(struct rtw89_dev *rtwdev,
const struct rtw89_chan *chan,
enum rtw89_phy_idx phy_idx)
{ … }
static
void rtw89_phy_set_txpwr_offset_ax(struct rtw89_dev *rtwdev,
const struct rtw89_chan *chan,
enum rtw89_phy_idx phy_idx)
{ … }
static void rtw89_phy_set_txpwr_limit_ax(struct rtw89_dev *rtwdev,
const struct rtw89_chan *chan,
enum rtw89_phy_idx phy_idx)
{ … }
static void rtw89_phy_set_txpwr_limit_ru_ax(struct rtw89_dev *rtwdev,
const struct rtw89_chan *chan,
enum rtw89_phy_idx phy_idx)
{ … }
struct rtw89_phy_iter_ra_data { … };
static void rtw89_phy_c2h_ra_rpt_iter(void *data, struct ieee80211_sta *sta)
{ … }
static void
rtw89_phy_c2h_ra_rpt(struct rtw89_dev *rtwdev, struct sk_buff *c2h, u32 len)
{ … }
static
void (* const rtw89_phy_c2h_ra_handler[])(struct rtw89_dev *rtwdev,
struct sk_buff *c2h, u32 len) = …;
static void rtw89_phy_c2h_rfk_rpt_log(struct rtw89_dev *rtwdev,
enum rtw89_phy_c2h_rfk_log_func func,
void *content, u16 len)
{ … }
static bool rtw89_phy_c2h_rfk_run_log(struct rtw89_dev *rtwdev,
enum rtw89_phy_c2h_rfk_log_func func,
void *content, u16 len)
{ … }
static void rtw89_phy_c2h_rfk_log(struct rtw89_dev *rtwdev, struct sk_buff *c2h,
u32 len, enum rtw89_phy_c2h_rfk_log_func func,
const char *rfk_name)
{ … }
static void
rtw89_phy_c2h_rfk_log_iqk(struct rtw89_dev *rtwdev, struct sk_buff *c2h, u32 len)
{ … }
static void
rtw89_phy_c2h_rfk_log_dpk(struct rtw89_dev *rtwdev, struct sk_buff *c2h, u32 len)
{ … }
static void
rtw89_phy_c2h_rfk_log_dack(struct rtw89_dev *rtwdev, struct sk_buff *c2h, u32 len)
{ … }
static void
rtw89_phy_c2h_rfk_log_rxdck(struct rtw89_dev *rtwdev, struct sk_buff *c2h, u32 len)
{ … }
static void
rtw89_phy_c2h_rfk_log_tssi(struct rtw89_dev *rtwdev, struct sk_buff *c2h, u32 len)
{ … }
static void
rtw89_phy_c2h_rfk_log_txgapk(struct rtw89_dev *rtwdev, struct sk_buff *c2h, u32 len)
{ … }
static
void (* const rtw89_phy_c2h_rfk_log_handler[])(struct rtw89_dev *rtwdev,
struct sk_buff *c2h, u32 len) = …;
static
void rtw89_phy_rfk_report_prep(struct rtw89_dev *rtwdev)
{ … }
static
int rtw89_phy_rfk_report_wait(struct rtw89_dev *rtwdev, const char *rfk_name,
unsigned int ms)
{ … }
static void
rtw89_phy_c2h_rfk_report_state(struct rtw89_dev *rtwdev, struct sk_buff *c2h, u32 len)
{ … }
static
void (* const rtw89_phy_c2h_rfk_report_handler[])(struct rtw89_dev *rtwdev,
struct sk_buff *c2h, u32 len) = …;
bool rtw89_phy_c2h_chk_atomic(struct rtw89_dev *rtwdev, u8 class, u8 func)
{ … }
void rtw89_phy_c2h_handle(struct rtw89_dev *rtwdev, struct sk_buff *skb,
u32 len, u8 class, u8 func)
{ … }
int rtw89_phy_rfk_pre_ntfy_and_wait(struct rtw89_dev *rtwdev,
enum rtw89_phy_idx phy_idx,
unsigned int ms)
{ … }
EXPORT_SYMBOL(…);
int rtw89_phy_rfk_tssi_and_wait(struct rtw89_dev *rtwdev,
enum rtw89_phy_idx phy_idx,
const struct rtw89_chan *chan,
enum rtw89_tssi_mode tssi_mode,
unsigned int ms)
{ … }
EXPORT_SYMBOL(…);
int rtw89_phy_rfk_iqk_and_wait(struct rtw89_dev *rtwdev,
enum rtw89_phy_idx phy_idx,
const struct rtw89_chan *chan,
unsigned int ms)
{ … }
EXPORT_SYMBOL(…);
int rtw89_phy_rfk_dpk_and_wait(struct rtw89_dev *rtwdev,
enum rtw89_phy_idx phy_idx,
const struct rtw89_chan *chan,
unsigned int ms)
{ … }
EXPORT_SYMBOL(…);
int rtw89_phy_rfk_txgapk_and_wait(struct rtw89_dev *rtwdev,
enum rtw89_phy_idx phy_idx,
const struct rtw89_chan *chan,
unsigned int ms)
{ … }
EXPORT_SYMBOL(…);
int rtw89_phy_rfk_dack_and_wait(struct rtw89_dev *rtwdev,
enum rtw89_phy_idx phy_idx,
const struct rtw89_chan *chan,
unsigned int ms)
{ … }
EXPORT_SYMBOL(…);
int rtw89_phy_rfk_rxdck_and_wait(struct rtw89_dev *rtwdev,
enum rtw89_phy_idx phy_idx,
const struct rtw89_chan *chan,
unsigned int ms)
{ … }
EXPORT_SYMBOL(…);
static u32 phy_tssi_get_cck_group(u8 ch)
{ … }
#define PHY_TSSI_EXTRA_GROUP_BIT …
#define PHY_TSSI_EXTRA_GROUP(idx) …
#define PHY_IS_TSSI_EXTRA_GROUP(group) …
#define PHY_TSSI_EXTRA_GET_GROUP_IDX1(group) …
#define PHY_TSSI_EXTRA_GET_GROUP_IDX2(group) …
static u32 phy_tssi_get_ofdm_group(u8 ch)
{ … }
static u32 phy_tssi_get_6g_ofdm_group(u8 ch)
{ … }
static u32 phy_tssi_get_trim_group(u8 ch)
{ … }
static u32 phy_tssi_get_6g_trim_group(u8 ch)
{ … }
static s8 phy_tssi_get_ofdm_de(struct rtw89_dev *rtwdev,
enum rtw89_phy_idx phy,
const struct rtw89_chan *chan,
enum rtw89_rf_path path)
{ … }
static s8 phy_tssi_get_ofdm_trim_de(struct rtw89_dev *rtwdev,
enum rtw89_phy_idx phy,
const struct rtw89_chan *chan,
enum rtw89_rf_path path)
{ … }
void rtw89_phy_rfk_tssi_fill_fwcmd_efuse_to_de(struct rtw89_dev *rtwdev,
enum rtw89_phy_idx phy,
const struct rtw89_chan *chan,
struct rtw89_h2c_rf_tssi *h2c)
{ … }
void rtw89_phy_rfk_tssi_fill_fwcmd_tmeter_tbl(struct rtw89_dev *rtwdev,
enum rtw89_phy_idx phy,
const struct rtw89_chan *chan,
struct rtw89_h2c_rf_tssi *h2c)
{ … }
static u8 rtw89_phy_cfo_get_xcap_reg(struct rtw89_dev *rtwdev, bool sc_xo)
{ … }
static void rtw89_phy_cfo_set_xcap_reg(struct rtw89_dev *rtwdev, bool sc_xo,
u8 val)
{ … }
static void rtw89_phy_cfo_set_crystal_cap(struct rtw89_dev *rtwdev,
u8 crystal_cap, bool force)
{ … }
static void rtw89_phy_cfo_reset(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_dcfo_comp(struct rtw89_dev *rtwdev, s32 curr_cfo)
{ … }
static void rtw89_dcfo_comp_init(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_cfo_init(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_cfo_crystal_cap_adjust(struct rtw89_dev *rtwdev,
s32 curr_cfo)
{ … }
static s32 rtw89_phy_average_cfo_calc(struct rtw89_dev *rtwdev)
{ … }
static s32 rtw89_phy_multi_sta_cfo_calc(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_cfo_statistics_reset(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_cfo_dm(struct rtw89_dev *rtwdev)
{ … }
void rtw89_phy_cfo_track_work(struct work_struct *work)
{ … }
static void rtw89_phy_cfo_start_work(struct rtw89_dev *rtwdev)
{ … }
void rtw89_phy_cfo_track(struct rtw89_dev *rtwdev)
{ … }
void rtw89_phy_cfo_parse(struct rtw89_dev *rtwdev, s16 cfo_val,
struct rtw89_rx_phy_ppdu *phy_ppdu)
{ … }
void rtw89_phy_ul_tb_assoc(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif)
{ … }
struct rtw89_phy_ul_tb_check_data { … };
struct rtw89_phy_power_diff { … };
static void rtw89_phy_ofdma_power_diff(struct rtw89_dev *rtwdev,
struct rtw89_vif *rtwvif)
{ … }
static
void rtw89_phy_ul_tb_ctrl_check(struct rtw89_dev *rtwdev,
struct rtw89_vif *rtwvif,
struct rtw89_phy_ul_tb_check_data *ul_tb_data)
{ … }
static void rtw89_phy_ul_tb_waveform_ctrl(struct rtw89_dev *rtwdev,
struct rtw89_phy_ul_tb_check_data *ul_tb_data)
{ … }
void rtw89_phy_ul_tb_ctrl_track(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_ul_tb_info_init(struct rtw89_dev *rtwdev)
{ … }
static
void rtw89_phy_antdiv_sts_instance_reset(struct rtw89_antdiv_stats *antdiv_sts)
{ … }
static void rtw89_phy_antdiv_sts_instance_add(struct rtw89_dev *rtwdev,
struct rtw89_rx_phy_ppdu *phy_ppdu,
struct rtw89_antdiv_stats *stats)
{ … }
static u8 rtw89_phy_antdiv_sts_instance_get_rssi(struct rtw89_antdiv_stats *stats)
{ … }
static u8 rtw89_phy_antdiv_sts_instance_get_evm(struct rtw89_antdiv_stats *stats)
{ … }
void rtw89_phy_antdiv_parse(struct rtw89_dev *rtwdev,
struct rtw89_rx_phy_ppdu *phy_ppdu)
{ … }
static void rtw89_phy_antdiv_reg_init(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_antdiv_sts_reset(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_antdiv_init(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_stat_thermal_update(struct rtw89_dev *rtwdev)
{ … }
struct rtw89_phy_iter_rssi_data { … };
static void rtw89_phy_stat_rssi_update_iter(void *data,
struct ieee80211_sta *sta)
{ … }
static void rtw89_phy_stat_rssi_update(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_stat_init(struct rtw89_dev *rtwdev)
{ … }
void rtw89_phy_stat_track(struct rtw89_dev *rtwdev)
{ … }
static u16 rtw89_phy_ccx_us_to_idx(struct rtw89_dev *rtwdev, u32 time_us)
{ … }
static u32 rtw89_phy_ccx_idx_to_us(struct rtw89_dev *rtwdev, u16 idx)
{ … }
static void rtw89_phy_ccx_top_setting_init(struct rtw89_dev *rtwdev)
{ … }
static u16 rtw89_phy_ccx_get_report(struct rtw89_dev *rtwdev, u16 report,
u16 score)
{ … }
static void rtw89_phy_ccx_ms_to_period_unit(struct rtw89_dev *rtwdev,
u16 time_ms, u32 *period,
u32 *unit_idx)
{ … }
static void rtw89_phy_ccx_racing_release(struct rtw89_dev *rtwdev)
{ … }
static bool rtw89_phy_ifs_clm_th_update_check(struct rtw89_dev *rtwdev,
struct rtw89_ccx_para_info *para)
{ … }
static void rtw89_phy_ifs_clm_set_th_reg(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_ifs_clm_setting_init(struct rtw89_dev *rtwdev)
{ … }
static int rtw89_phy_ccx_racing_ctrl(struct rtw89_dev *rtwdev,
enum rtw89_env_racing_lv level)
{ … }
static void rtw89_phy_ccx_trigger(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_ifs_clm_get_utility(struct rtw89_dev *rtwdev)
{ … }
static bool rtw89_phy_ifs_clm_get_result(struct rtw89_dev *rtwdev)
{ … }
static int rtw89_phy_ifs_clm_set(struct rtw89_dev *rtwdev,
struct rtw89_ccx_para_info *para)
{ … }
void rtw89_phy_env_monitor_track(struct rtw89_dev *rtwdev)
{ … }
static bool rtw89_physts_ie_page_valid(enum rtw89_phy_status_bitmap *ie_page)
{ … }
static u32 rtw89_phy_get_ie_bitmap_addr(enum rtw89_phy_status_bitmap ie_page)
{ … }
static u32 rtw89_physts_get_ie_bitmap(struct rtw89_dev *rtwdev,
enum rtw89_phy_status_bitmap ie_page)
{ … }
static void rtw89_physts_set_ie_bitmap(struct rtw89_dev *rtwdev,
enum rtw89_phy_status_bitmap ie_page,
u32 val)
{ … }
static void rtw89_physts_enable_ie_bitmap(struct rtw89_dev *rtwdev,
enum rtw89_phy_status_bitmap bitmap,
enum rtw89_phy_status_ie_type ie,
bool enable)
{ … }
static void rtw89_physts_enable_fail_report(struct rtw89_dev *rtwdev,
bool enable,
enum rtw89_phy_idx phy_idx)
{ … }
static void rtw89_physts_parsing_init(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_dig_read_gain_table(struct rtw89_dev *rtwdev, int type)
{ … }
static void rtw89_phy_dig_update_gain_para(struct rtw89_dev *rtwdev)
{ … }
static const u8 rssi_nolink = …;
static const u8 igi_rssi_th[IGI_RSSI_TH_NUM] = …;
static const u16 fa_th_2g[FA_TH_NUM] = …;
static const u16 fa_th_5g[FA_TH_NUM] = …;
static const u16 fa_th_nolink[FA_TH_NUM] = …;
static void rtw89_phy_dig_update_rssi_info(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_dig_update_para(struct rtw89_dev *rtwdev)
{ … }
static const u8 pd_low_th_offset = …, dynamic_igi_min = …;
static const u8 igi_max_performance_mode = …;
static const u8 dynamic_pd_threshold_max;
static void rtw89_phy_dig_para_reset(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_dig_init(struct rtw89_dev *rtwdev)
{ … }
static u8 rtw89_phy_dig_lna_idx_by_rssi(struct rtw89_dev *rtwdev, u8 rssi)
{ … }
static u8 rtw89_phy_dig_tia_idx_by_rssi(struct rtw89_dev *rtwdev, u8 rssi)
{ … }
#define IB_PBK_BASE …
#define WB_RSSI_BASE …
static u8 rtw89_phy_dig_rxb_idx_by_rssi(struct rtw89_dev *rtwdev, u8 rssi,
struct rtw89_agc_gaincode_set *set)
{ … }
static void rtw89_phy_dig_gaincode_by_rssi(struct rtw89_dev *rtwdev, u8 rssi,
struct rtw89_agc_gaincode_set *set)
{ … }
#define IGI_OFFSET_MAX …
#define IGI_OFFSET_MUL …
static void rtw89_phy_dig_igi_offset_by_env(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_dig_set_lna_idx(struct rtw89_dev *rtwdev, u8 lna_idx)
{ … }
static void rtw89_phy_dig_set_tia_idx(struct rtw89_dev *rtwdev, u8 tia_idx)
{ … }
static void rtw89_phy_dig_set_rxb_idx(struct rtw89_dev *rtwdev, u8 rxb_idx)
{ … }
static void rtw89_phy_dig_set_igi_cr(struct rtw89_dev *rtwdev,
const struct rtw89_agc_gaincode_set set)
{ … }
static void rtw89_phy_dig_sdagc_follow_pagc_config(struct rtw89_dev *rtwdev,
bool enable)
{ … }
static void rtw89_phy_dig_config_igi(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_dig_dyn_pd_th(struct rtw89_dev *rtwdev, u8 rssi,
bool enable)
{ … }
void rtw89_phy_dig_reset(struct rtw89_dev *rtwdev)
{ … }
#define IGI_RSSI_MIN …
#define ABS_IGI_MIN …
void rtw89_phy_dig(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_tx_path_div_sta_iter(void *data, struct ieee80211_sta *sta)
{ … }
void rtw89_phy_tx_path_div_track(struct rtw89_dev *rtwdev)
{ … }
#define ANTDIV_MAIN …
#define ANTDIV_AUX …
static void rtw89_phy_antdiv_set_ant(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_swap_hal_antenna(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_antdiv_decision_state(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_antdiv_training_state(struct rtw89_dev *rtwdev)
{ … }
void rtw89_phy_antdiv_work(struct work_struct *work)
{ … }
void rtw89_phy_antdiv_track(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_env_monitor_init(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_phy_edcca_init(struct rtw89_dev *rtwdev)
{ … }
void rtw89_phy_dm_init(struct rtw89_dev *rtwdev)
{ … }
void rtw89_phy_set_bss_color(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif)
{ … }
static bool rfk_chan_validate_desc(const struct rtw89_rfk_chan_desc *desc)
{ … }
static bool rfk_chan_is_equivalent(const struct rtw89_rfk_chan_desc *desc,
const struct rtw89_chan *chan)
{ … }
struct rfk_chan_iter_data { … };
static int rfk_chan_iter_search(const struct rtw89_chan *chan, void *data)
{ … }
u8 rtw89_rfk_chan_lookup(struct rtw89_dev *rtwdev,
const struct rtw89_rfk_chan_desc *desc, u8 desc_nr,
const struct rtw89_chan *target_chan)
{ … }
EXPORT_SYMBOL(…);
static void
_rfk_write_rf(struct rtw89_dev *rtwdev, const struct rtw89_reg5_def *def)
{ … }
static void
_rfk_write32_mask(struct rtw89_dev *rtwdev, const struct rtw89_reg5_def *def)
{ … }
static void
_rfk_write32_set(struct rtw89_dev *rtwdev, const struct rtw89_reg5_def *def)
{ … }
static void
_rfk_write32_clr(struct rtw89_dev *rtwdev, const struct rtw89_reg5_def *def)
{ … }
static void
_rfk_delay(struct rtw89_dev *rtwdev, const struct rtw89_reg5_def *def)
{ … }
static void
(*_rfk_handler[])(struct rtw89_dev *rtwdev, const struct rtw89_reg5_def *def) = …;
static_assert(…);
void
rtw89_rfk_parser(struct rtw89_dev *rtwdev, const struct rtw89_rfk_tbl *tbl)
{ … }
EXPORT_SYMBOL(…);
#define RTW89_TSSI_FAST_MODE_NUM …
static const struct rtw89_reg_def rtw89_tssi_fastmode_regs_flat[RTW89_TSSI_FAST_MODE_NUM] = …;
static const struct rtw89_reg_def rtw89_tssi_fastmode_regs_level[RTW89_TSSI_FAST_MODE_NUM] = …;
static
void rtw89_phy_tssi_ctrl_set_fast_mode_cfg(struct rtw89_dev *rtwdev,
enum rtw89_mac_idx mac_idx,
enum rtw89_tssi_bandedge_cfg bandedge_cfg,
u32 val)
{ … }
static const struct rtw89_reg_def rtw89_tssi_bandedge_regs_flat[RTW89_TSSI_SBW_NUM] = …;
static const struct rtw89_reg_def rtw89_tssi_bandedge_regs_level[RTW89_TSSI_SBW_NUM] = …;
void rtw89_phy_tssi_ctrl_set_bandedge_cfg(struct rtw89_dev *rtwdev,
enum rtw89_mac_idx mac_idx,
enum rtw89_tssi_bandedge_cfg bandedge_cfg)
{ … }
EXPORT_SYMBOL(…);
static
const u8 rtw89_ch_base_table[16] = …;
#define RTW89_CH_BASE_IDX_2G …
#define RTW89_CH_BASE_IDX_5G_FIRST …
#define RTW89_CH_BASE_IDX_5G_LAST …
#define RTW89_CH_BASE_IDX_6G_FIRST …
#define RTW89_CH_BASE_IDX_6G_LAST …
#define RTW89_CH_BASE_IDX_MASK …
#define RTW89_CH_OFFSET_MASK …
u8 rtw89_encode_chan_idx(struct rtw89_dev *rtwdev, u8 central_ch, u8 band)
{ … }
EXPORT_SYMBOL(…);
void rtw89_decode_chan_idx(struct rtw89_dev *rtwdev, u8 chan_idx,
u8 *ch, enum nl80211_band *band)
{ … }
EXPORT_SYMBOL(…);
void rtw89_phy_config_edcca(struct rtw89_dev *rtwdev, bool scan)
{ … }
static void rtw89_phy_edcca_log(struct rtw89_dev *rtwdev)
{ … }
static u8 rtw89_phy_edcca_get_thre_by_rssi(struct rtw89_dev *rtwdev)
{ … }
void rtw89_phy_edcca_thre_calc(struct rtw89_dev *rtwdev)
{ … }
void rtw89_phy_edcca_track(struct rtw89_dev *rtwdev)
{ … }
enum rtw89_rf_path_bit rtw89_phy_get_kpath(struct rtw89_dev *rtwdev,
enum rtw89_phy_idx phy_idx)
{ … }
EXPORT_SYMBOL(…);
enum rtw89_rf_path rtw89_phy_get_syn_sel(struct rtw89_dev *rtwdev,
enum rtw89_phy_idx phy_idx)
{ … }
EXPORT_SYMBOL(…);
static const struct rtw89_ccx_regs rtw89_ccx_regs_ax = …;
static const struct rtw89_physts_regs rtw89_physts_regs_ax = …;
static const struct rtw89_cfo_regs rtw89_cfo_regs_ax = …;
const struct rtw89_phy_gen_def rtw89_phy_gen_ax = …;
EXPORT_SYMBOL(…);