Lines Matching refs:rtwdev

110 static void rtw_phy_cck_pd_init(struct rtw_dev *rtwdev)  in rtw_phy_cck_pd_init()  argument
112 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_cck_pd_init()
123 void rtw_phy_set_edcca_th(struct rtw_dev *rtwdev, u8 l2h, u8 h2l) in rtw_phy_set_edcca_th() argument
125 struct rtw_hw_reg_offset *edcca_th = rtwdev->chip->edcca_th; in rtw_phy_set_edcca_th()
127 rtw_write32_mask(rtwdev, in rtw_phy_set_edcca_th()
131 rtw_write32_mask(rtwdev, in rtw_phy_set_edcca_th()
138 void rtw_phy_adaptivity_set_mode(struct rtw_dev *rtwdev) in rtw_phy_adaptivity_set_mode() argument
140 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_adaptivity_set_mode()
141 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_adaptivity_set_mode()
146 rtw_dbg(rtwdev, RTW_DBG_PHY, "EDCCA disabled, cannot be set\n"); in rtw_phy_adaptivity_set_mode()
150 switch (rtwdev->regd.dfs_region) { in rtw_phy_adaptivity_set_mode()
165 static void rtw_phy_adaptivity_init(struct rtw_dev *rtwdev) in rtw_phy_adaptivity_init() argument
167 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_adaptivity_init()
169 rtw_phy_adaptivity_set_mode(rtwdev); in rtw_phy_adaptivity_init()
171 chip->ops->adaptivity_init(rtwdev); in rtw_phy_adaptivity_init()
174 static void rtw_phy_adaptivity(struct rtw_dev *rtwdev) in rtw_phy_adaptivity() argument
176 if (rtwdev->chip->ops->adaptivity) in rtw_phy_adaptivity()
177 rtwdev->chip->ops->adaptivity(rtwdev); in rtw_phy_adaptivity()
180 static void rtw_phy_cfo_init(struct rtw_dev *rtwdev) in rtw_phy_cfo_init() argument
182 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_cfo_init()
185 chip->ops->cfo_init(rtwdev); in rtw_phy_cfo_init()
188 static void rtw_phy_tx_path_div_init(struct rtw_dev *rtwdev) in rtw_phy_tx_path_div_init() argument
190 struct rtw_path_div *path_div = &rtwdev->dm_path_div; in rtw_phy_tx_path_div_init()
192 path_div->current_tx_path = rtwdev->chip->default_1ss_tx_path; in rtw_phy_tx_path_div_init()
199 void rtw_phy_init(struct rtw_dev *rtwdev) in rtw_phy_init() argument
201 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_init()
202 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_init()
216 dm_info->igi_history[0] = rtw_read32_mask(rtwdev, addr, mask); in rtw_phy_init()
217 rtw_phy_cck_pd_init(rtwdev); in rtw_phy_init()
220 rtw_phy_adaptivity_init(rtwdev); in rtw_phy_init()
221 rtw_phy_cfo_init(rtwdev); in rtw_phy_init()
222 rtw_phy_tx_path_div_init(rtwdev); in rtw_phy_init()
226 void rtw_phy_dig_write(struct rtw_dev *rtwdev, u8 igi) in rtw_phy_dig_write() argument
228 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_dig_write()
229 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_dig_write()
235 rtw_write32_mask(rtwdev, dig_cck->addr, dig_cck->mask, igi >> 1); in rtw_phy_dig_write()
241 rtw_write32_mask(rtwdev, addr, mask, igi); in rtw_phy_dig_write()
245 static void rtw_phy_stat_false_alarm(struct rtw_dev *rtwdev) in rtw_phy_stat_false_alarm() argument
247 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_stat_false_alarm()
249 chip->ops->false_alarm_statistics(rtwdev); in rtw_phy_stat_false_alarm()
276 struct rtw_dev *rtwdev; member
283 struct rtw_dev *rtwdev = iter_data->rtwdev; in rtw_phy_stat_rssi_iter() local
290 rtw_fw_send_rssi_info(rtwdev, si); in rtw_phy_stat_rssi_iter()
295 static void rtw_phy_stat_rssi(struct rtw_dev *rtwdev) in rtw_phy_stat_rssi() argument
297 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_stat_rssi()
300 data.rtwdev = rtwdev; in rtw_phy_stat_rssi()
302 rtw_iterate_stas_atomic(rtwdev, rtw_phy_stat_rssi_iter, &data); in rtw_phy_stat_rssi()
308 static void rtw_phy_stat_rate_cnt(struct rtw_dev *rtwdev) in rtw_phy_stat_rate_cnt() argument
310 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_stat_rate_cnt()
316 static void rtw_phy_statistics(struct rtw_dev *rtwdev) in rtw_phy_statistics() argument
318 rtw_phy_stat_rssi(rtwdev); in rtw_phy_statistics()
319 rtw_phy_stat_false_alarm(rtwdev); in rtw_phy_statistics()
320 rtw_phy_stat_rate_cnt(rtwdev); in rtw_phy_statistics()
399 static void rtw_phy_dig_get_boundary(struct rtw_dev *rtwdev, in rtw_phy_dig_get_boundary() argument
409 dig_min = rtwdev->chip->dig_min; in rtw_phy_dig_get_boundary()
479 static void rtw_phy_dig(struct rtw_dev *rtwdev) in rtw_phy_dig() argument
481 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_dig()
489 if (test_bit(RTW_FLAG_DIG_DISABLE, rtwdev->flags)) in rtw_phy_dig()
495 linked = !!rtwdev->sta_cnt; in rtw_phy_dig()
520 rtw_phy_dig_get_boundary(rtwdev, dm_info, &upper_bound, &lower_bound, in rtw_phy_dig()
530 rtw_phy_dig_write(rtwdev, cur_igi); in rtw_phy_dig()
535 struct rtw_dev *rtwdev = data; in rtw_phy_ra_info_update_iter() local
538 rtw_update_sta_info(rtwdev, si); in rtw_phy_ra_info_update_iter()
541 static void rtw_phy_ra_info_update(struct rtw_dev *rtwdev) in rtw_phy_ra_info_update() argument
543 if (rtwdev->watch_dog_cnt & 0x3) in rtw_phy_ra_info_update()
546 rtw_iterate_stas_atomic(rtwdev, rtw_phy_ra_info_update_iter, rtwdev); in rtw_phy_ra_info_update()
549 static u32 rtw_phy_get_rrsr_mask(struct rtw_dev *rtwdev, u8 rate_idx) in rtw_phy_get_rrsr_mask() argument
584 struct rtw_dev *rtwdev = (struct rtw_dev *)data; in rtw_phy_rrsr_mask_min_iter() local
586 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_rrsr_mask_min_iter()
589 mask = rtw_phy_get_rrsr_mask(rtwdev, si->ra_report.desc_rate); in rtw_phy_rrsr_mask_min_iter()
594 static void rtw_phy_rrsr_update(struct rtw_dev *rtwdev) in rtw_phy_rrsr_update() argument
596 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_rrsr_update()
599 rtw_iterate_stas_atomic(rtwdev, rtw_phy_rrsr_mask_min_iter, rtwdev); in rtw_phy_rrsr_update()
600 rtw_write32(rtwdev, REG_RRSR, dm_info->rrsr_val_init & dm_info->rrsr_mask_min); in rtw_phy_rrsr_update()
603 static void rtw_phy_dpk_track(struct rtw_dev *rtwdev) in rtw_phy_dpk_track() argument
605 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_dpk_track()
608 chip->ops->dpk_track(rtwdev); in rtw_phy_dpk_track()
612 struct rtw_dev *rtwdev; member
622 struct rtw_dev *rtwdev = iter_data->rtwdev; in rtw_phy_parsing_cfo_iter() local
624 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_parsing_cfo_iter()
632 for (i = 0; i < rtwdev->hal.rf_path_num; i++) { in rtw_phy_parsing_cfo_iter()
640 void rtw_phy_parsing_cfo(struct rtw_dev *rtwdev, in rtw_phy_parsing_cfo() argument
650 data.rtwdev = rtwdev; in rtw_phy_parsing_cfo()
655 rtw_iterate_vifs_atomic(rtwdev, rtw_phy_parsing_cfo_iter, &data); in rtw_phy_parsing_cfo()
659 static void rtw_phy_cfo_track(struct rtw_dev *rtwdev) in rtw_phy_cfo_track() argument
661 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_cfo_track()
664 chip->ops->cfo_track(rtwdev); in rtw_phy_cfo_track()
670 static u8 rtw_phy_cck_pd_lv_unlink(struct rtw_dev *rtwdev) in rtw_phy_cck_pd_lv_unlink() argument
672 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_cck_pd_lv_unlink()
691 static u8 rtw_phy_cck_pd_lv_link(struct rtw_dev *rtwdev) in rtw_phy_cck_pd_lv_link() argument
693 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_cck_pd_lv_link()
712 static u8 rtw_phy_cck_pd_lv(struct rtw_dev *rtwdev) in rtw_phy_cck_pd_lv() argument
714 if (!rtw_is_assoc(rtwdev)) in rtw_phy_cck_pd_lv()
715 return rtw_phy_cck_pd_lv_unlink(rtwdev); in rtw_phy_cck_pd_lv()
717 return rtw_phy_cck_pd_lv_link(rtwdev); in rtw_phy_cck_pd_lv()
720 static void rtw_phy_cck_pd(struct rtw_dev *rtwdev) in rtw_phy_cck_pd() argument
722 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_cck_pd()
723 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_cck_pd()
727 if (rtwdev->hal.current_band_type != RTW_BAND_2G) in rtw_phy_cck_pd()
735 rtw_dbg(rtwdev, RTW_DBG_PHY, "IGI=0x%x, rssi_min=%d, cck_fa=%d\n", in rtw_phy_cck_pd()
738 rtw_dbg(rtwdev, RTW_DBG_PHY, "cck_fa_avg=%d, cck_pd_default=%d\n", in rtw_phy_cck_pd()
741 level = rtw_phy_cck_pd_lv(rtwdev); in rtw_phy_cck_pd()
747 chip->ops->cck_pd_set(rtwdev, level); in rtw_phy_cck_pd()
750 static void rtw_phy_pwr_track(struct rtw_dev *rtwdev) in rtw_phy_pwr_track() argument
752 rtwdev->chip->ops->pwr_track(rtwdev); in rtw_phy_pwr_track()
755 static void rtw_phy_ra_track(struct rtw_dev *rtwdev) in rtw_phy_ra_track() argument
757 rtw_fw_update_wl_phy_info(rtwdev); in rtw_phy_ra_track()
758 rtw_phy_ra_info_update(rtwdev); in rtw_phy_ra_track()
759 rtw_phy_rrsr_update(rtwdev); in rtw_phy_ra_track()
762 void rtw_phy_dynamic_mechanism(struct rtw_dev *rtwdev) in rtw_phy_dynamic_mechanism() argument
765 rtw_phy_statistics(rtwdev); in rtw_phy_dynamic_mechanism()
766 rtw_phy_dig(rtwdev); in rtw_phy_dynamic_mechanism()
767 rtw_phy_cck_pd(rtwdev); in rtw_phy_dynamic_mechanism()
768 rtw_phy_ra_track(rtwdev); in rtw_phy_dynamic_mechanism()
769 rtw_phy_tx_path_diversity(rtwdev); in rtw_phy_dynamic_mechanism()
770 rtw_phy_cfo_track(rtwdev); in rtw_phy_dynamic_mechanism()
771 rtw_phy_dpk_track(rtwdev); in rtw_phy_dynamic_mechanism()
772 rtw_phy_pwr_track(rtwdev); in rtw_phy_dynamic_mechanism()
774 if (rtw_fw_feature_check(&rtwdev->fw, FW_FEATURE_ADAPTIVITY)) in rtw_phy_dynamic_mechanism()
775 rtw_fw_adaptivity(rtwdev); in rtw_phy_dynamic_mechanism()
777 rtw_phy_adaptivity(rtwdev); in rtw_phy_dynamic_mechanism()
898 u32 rtw_phy_read_rf(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path, in rtw_phy_read_rf() argument
901 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_read_rf()
902 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_read_rf()
907 rtw_err(rtwdev, "unsupported rf path (%d)\n", rf_path); in rtw_phy_read_rf()
915 val = rtw_read32_mask(rtwdev, direct_addr, mask); in rtw_phy_read_rf()
921 u32 rtw_phy_read_rf_sipi(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path, in rtw_phy_read_rf_sipi() argument
924 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_read_rf_sipi()
925 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_read_rf_sipi()
934 rtw_err(rtwdev, "unsupported rf path (%d)\n", rf_path); in rtw_phy_read_rf_sipi()
939 rtw_err(rtwdev, "rf_sipi_read_addr isn't defined\n"); in rtw_phy_read_rf_sipi()
948 val32 = rtw_read32(rtwdev, rf_sipi_addr->hssi_2); in rtw_phy_read_rf_sipi()
950 rtw_write32(rtwdev, rf_sipi_addr->hssi_2, val32); in rtw_phy_read_rf_sipi()
953 val32 = rtw_read32(rtwdev, rf_sipi_addr_a->hssi_2); in rtw_phy_read_rf_sipi()
954 rtw_write32(rtwdev, rf_sipi_addr_a->hssi_2, val32 & ~LSSI_READ_EDGE_MASK); in rtw_phy_read_rf_sipi()
955 rtw_write32(rtwdev, rf_sipi_addr_a->hssi_2, val32 | LSSI_READ_EDGE_MASK); in rtw_phy_read_rf_sipi()
959 en_pi = rtw_read32_mask(rtwdev, rf_sipi_addr->hssi_1, BIT(8)); in rtw_phy_read_rf_sipi()
962 val32 = rtw_read32_mask(rtwdev, r_addr, LSSI_READ_DATA_MASK); in rtw_phy_read_rf_sipi()
970 bool rtw_phy_write_rf_reg_sipi(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path, in rtw_phy_write_rf_reg_sipi() argument
973 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_write_rf_reg_sipi()
974 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_write_rf_reg_sipi()
981 rtw_err(rtwdev, "unsupported rf path (%d)\n", rf_path); in rtw_phy_write_rf_reg_sipi()
989 old_data = chip->ops->read_rf(rtwdev, rf_path, addr, RFREG_MASK); in rtw_phy_write_rf_reg_sipi()
992 rtw_err(rtwdev, "Write fail, rf is disabled\n"); in rtw_phy_write_rf_reg_sipi()
1002 rtw_write32(rtwdev, sipi_addr[rf_path], data_and_addr); in rtw_phy_write_rf_reg_sipi()
1010 bool rtw_phy_write_rf_reg(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path, in rtw_phy_write_rf_reg() argument
1013 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_write_rf_reg()
1014 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_write_rf_reg()
1019 rtw_err(rtwdev, "unsupported rf path (%d)\n", rf_path); in rtw_phy_write_rf_reg()
1027 rtw_write32_mask(rtwdev, direct_addr, mask, data); in rtw_phy_write_rf_reg()
1034 bool rtw_phy_write_rf_reg_mix(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path, in rtw_phy_write_rf_reg_mix() argument
1038 return rtw_phy_write_rf_reg(rtwdev, rf_path, addr, mask, data); in rtw_phy_write_rf_reg_mix()
1040 return rtw_phy_write_rf_reg_sipi(rtwdev, rf_path, addr, mask, data); in rtw_phy_write_rf_reg_mix()
1044 void rtw_phy_setup_phy_cond(struct rtw_dev *rtwdev, u32 pkg) in rtw_phy_setup_phy_cond() argument
1046 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_setup_phy_cond()
1047 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw_phy_setup_phy_cond()
1055 switch (rtw_hci_type(rtwdev)) { in rtw_phy_setup_phy_cond()
1070 rtw_dbg(rtwdev, RTW_DBG_PHY, "phy cond=0x%08x\n", *((u32 *)&hal->phy_cond)); in rtw_phy_setup_phy_cond()
1073 static bool check_positive(struct rtw_dev *rtwdev, struct rtw_phy_cond cond) in check_positive() argument
1075 struct rtw_hal *hal = &rtwdev->hal; in check_positive()
1093 void rtw_parse_tbl_phy_cond(struct rtw_dev *rtwdev, const struct rtw_table *tbl) in rtw_parse_tbl_phy_cond() argument
1120 if (check_positive(rtwdev, pos_cond)) { in rtw_parse_tbl_phy_cond()
1131 (*tbl->do_cfg)(rtwdev, tbl, p->cfg.addr, p->cfg.data); in rtw_parse_tbl_phy_cond()
1139 static u8 tbl_to_dec_pwr_by_rate(struct rtw_dev *rtwdev, u32 hex, u8 i) in tbl_to_dec_pwr_by_rate() argument
1141 if (rtwdev->chip->is_pwr_by_rate_dec) in tbl_to_dec_pwr_by_rate()
1148 rtw_phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, in rtw_phy_get_rate_values_of_txpwr_by_rate() argument
1162 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1172 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1187 tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1202 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1212 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1222 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1232 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1240 pwr_by_rate[i - 1] = tbl_to_dec_pwr_by_rate(rtwdev, in rtw_phy_get_rate_values_of_txpwr_by_rate()
1253 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1265 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1277 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1289 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1301 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1313 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1325 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1337 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1349 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1361 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1373 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1385 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1397 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1409 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1421 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1433 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1443 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1447 rtw_warn(rtwdev, "invalid tx power index addr 0x%08x\n", addr); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1452 static void rtw_phy_store_tx_power_by_rate(struct rtw_dev *rtwdev, in rtw_phy_store_tx_power_by_rate() argument
1456 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_store_tx_power_by_rate()
1464 rtw_phy_get_rate_values_of_txpwr_by_rate(rtwdev, regaddr, bitmask, data, in rtw_phy_store_tx_power_by_rate()
1484 void rtw_parse_tbl_bb_pg(struct rtw_dev *rtwdev, const struct rtw_table *tbl) in rtw_parse_tbl_bb_pg() argument
1494 rtw_phy_store_tx_power_by_rate(rtwdev, p->band, p->rf_path, in rtw_parse_tbl_bb_pg()
1533 static void rtw_phy_set_tx_power_limit(struct rtw_dev *rtwdev, u8 regd, u8 band, in rtw_phy_set_tx_power_limit() argument
1536 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_set_tx_power_limit()
1537 u8 max_power_index = rtwdev->chip->max_power_index; in rtw_phy_set_tx_power_limit()
1568 rtw_xref_5g_txpwr_lmt(struct rtw_dev *rtwdev, u8 regd, in rtw_xref_5g_txpwr_lmt() argument
1571 struct rtw_hal *hal = &rtwdev->hal; in rtw_xref_5g_txpwr_lmt()
1572 u8 max_power_index = rtwdev->chip->max_power_index; in rtw_xref_5g_txpwr_lmt()
1588 rtw_xref_txpwr_lmt_by_rs(struct rtw_dev *rtwdev, u8 regd, u8 bw, u8 ch_idx) in rtw_xref_txpwr_lmt_by_rs() argument
1598 rtw_xref_5g_txpwr_lmt(rtwdev, regd, bw, ch_idx, rs_ht, rs_vht); in rtw_xref_txpwr_lmt_by_rs()
1604 rtw_xref_5g_txpwr_lmt_by_ch(struct rtw_dev *rtwdev, u8 regd, u8 bw) in rtw_xref_5g_txpwr_lmt_by_ch() argument
1609 rtw_xref_txpwr_lmt_by_rs(rtwdev, regd, bw, ch_idx); in rtw_xref_5g_txpwr_lmt_by_ch()
1614 rtw_xref_txpwr_lmt_by_bw(struct rtw_dev *rtwdev, u8 regd) in rtw_xref_txpwr_lmt_by_bw() argument
1619 rtw_xref_5g_txpwr_lmt_by_ch(rtwdev, regd, bw); in rtw_xref_txpwr_lmt_by_bw()
1623 static void rtw_xref_txpwr_lmt(struct rtw_dev *rtwdev) in rtw_xref_txpwr_lmt() argument
1628 rtw_xref_txpwr_lmt_by_bw(rtwdev, regd); in rtw_xref_txpwr_lmt()
1646 rtw_cfg_txpwr_lmt_by_alt(struct rtw_dev *rtwdev, u8 regd, u8 regd_alt) in rtw_cfg_txpwr_lmt_by_alt() argument
1652 __cfg_txpwr_lmt_by_alt(&rtwdev->hal, regd, regd_alt, in rtw_cfg_txpwr_lmt_by_alt()
1656 void rtw_parse_tbl_txpwr_lmt(struct rtw_dev *rtwdev, in rtw_parse_tbl_txpwr_lmt() argument
1667 rtw_phy_set_tx_power_limit(rtwdev, p->regd, p->band, in rtw_parse_tbl_txpwr_lmt()
1678 rtw_dbg(rtwdev, RTW_DBG_REGD, in rtw_parse_tbl_txpwr_lmt()
1683 rtw_dbg(rtwdev, RTW_DBG_REGD, in rtw_parse_tbl_txpwr_lmt()
1687 rtw_cfg_txpwr_lmt_by_alt(rtwdev, i, regd_alt); in rtw_parse_tbl_txpwr_lmt()
1691 rtw_dbg(rtwdev, RTW_DBG_REGD, "cfg txpwr regd %d by WW\n", i); in rtw_parse_tbl_txpwr_lmt()
1692 rtw_cfg_txpwr_lmt_by_alt(rtwdev, i, RTW_REGD_WW); in rtw_parse_tbl_txpwr_lmt()
1695 rtw_xref_txpwr_lmt(rtwdev); in rtw_parse_tbl_txpwr_lmt()
1699 void rtw_phy_cfg_mac(struct rtw_dev *rtwdev, const struct rtw_table *tbl, in rtw_phy_cfg_mac() argument
1702 rtw_write8(rtwdev, addr, data); in rtw_phy_cfg_mac()
1706 void rtw_phy_cfg_agc(struct rtw_dev *rtwdev, const struct rtw_table *tbl, in rtw_phy_cfg_agc() argument
1709 rtw_write32(rtwdev, addr, data); in rtw_phy_cfg_agc()
1713 void rtw_phy_cfg_bb(struct rtw_dev *rtwdev, const struct rtw_table *tbl, in rtw_phy_cfg_bb() argument
1729 rtw_write32(rtwdev, addr, data); in rtw_phy_cfg_bb()
1733 void rtw_phy_cfg_rf(struct rtw_dev *rtwdev, const struct rtw_table *tbl, in rtw_phy_cfg_rf() argument
1741 rtw_write_rf(rtwdev, tbl->rf_path, addr, RFREG_MASK, data); in rtw_phy_cfg_rf()
1747 static void rtw_load_rfk_table(struct rtw_dev *rtwdev) in rtw_load_rfk_table() argument
1749 struct rtw_chip_info *chip = rtwdev->chip; in rtw_load_rfk_table()
1750 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw_load_rfk_table()
1755 rtw_write32_mask(rtwdev, 0x1e24, BIT(17), 0x1); in rtw_load_rfk_table()
1756 rtw_write32_mask(rtwdev, 0x1cd0, BIT(28), 0x1); in rtw_load_rfk_table()
1757 rtw_write32_mask(rtwdev, 0x1cd0, BIT(29), 0x1); in rtw_load_rfk_table()
1758 rtw_write32_mask(rtwdev, 0x1cd0, BIT(30), 0x1); in rtw_load_rfk_table()
1759 rtw_write32_mask(rtwdev, 0x1cd0, BIT(31), 0x0); in rtw_load_rfk_table()
1761 rtw_load_table(rtwdev, chip->rfk_init_tbl); in rtw_load_rfk_table()
1766 void rtw_phy_load_tables(struct rtw_dev *rtwdev) in rtw_phy_load_tables() argument
1768 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_load_tables()
1771 rtw_load_table(rtwdev, chip->mac_tbl); in rtw_phy_load_tables()
1772 rtw_load_table(rtwdev, chip->bb_tbl); in rtw_phy_load_tables()
1773 rtw_load_table(rtwdev, chip->agc_tbl); in rtw_phy_load_tables()
1774 rtw_load_rfk_table(rtwdev); in rtw_phy_load_tables()
1776 for (rf_path = 0; rf_path < rtwdev->hal.rf_path_num; rf_path++) { in rtw_phy_load_tables()
1780 rtw_load_table(rtwdev, tbl); in rtw_phy_load_tables()
1875 static s8 rtw_phy_get_dis_dpd_by_rate_diff(struct rtw_dev *rtwdev, u16 rate) in rtw_phy_get_dis_dpd_by_rate_diff() argument
1877 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_get_dis_dpd_by_rate_diff()
1906 static u8 rtw_phy_get_2g_tx_power_index(struct rtw_dev *rtwdev, in rtw_phy_get_2g_tx_power_index() argument
1911 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_get_2g_tx_power_index()
1953 static u8 rtw_phy_get_5g_tx_power_index(struct rtw_dev *rtwdev, in rtw_phy_get_5g_tx_power_index() argument
1958 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_get_5g_tx_power_index()
2007 static s8 rtw_phy_get_tx_power_limit(struct rtw_dev *rtwdev, u8 band, in rtw_phy_get_tx_power_limit() argument
2011 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_get_tx_power_limit()
2013 s8 power_limit = (s8)rtwdev->chip->max_power_index; in rtw_phy_get_tx_power_limit()
2065 return (s8)rtwdev->chip->max_power_index; in rtw_phy_get_tx_power_limit()
2068 void rtw_get_tx_power_params(struct rtw_dev *rtwdev, u8 path, u8 rate, u8 bw, in rtw_get_tx_power_params() argument
2071 struct rtw_hal *hal = &rtwdev->hal; in rtw_get_tx_power_params()
2072 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_get_tx_power_params()
2080 pwr_idx = &rtwdev->efuse.txpwr_idx_table[path]; in rtw_get_tx_power_params()
2086 *base = rtw_phy_get_2g_tx_power_index(rtwdev, in rtw_get_tx_power_params()
2092 *base = rtw_phy_get_5g_tx_power_index(rtwdev, in rtw_get_tx_power_params()
2098 *limit = rtw_phy_get_tx_power_limit(rtwdev, band, bw, path, in rtw_get_tx_power_params()
2105 rtw_phy_get_tx_power_index(struct rtw_dev *rtwdev, u8 rf_path, u8 rate, in rtw_phy_get_tx_power_index() argument
2112 rtw_get_tx_power_params(rtwdev, rf_path, rate, bandwidth, in rtw_phy_get_tx_power_index()
2118 if (rtwdev->chip->en_dis_dpd) in rtw_phy_get_tx_power_index()
2119 offset += rtw_phy_get_dis_dpd_by_rate_diff(rtwdev, rate); in rtw_phy_get_tx_power_index()
2123 if (tx_power > rtwdev->chip->max_power_index) in rtw_phy_get_tx_power_index()
2124 tx_power = rtwdev->chip->max_power_index; in rtw_phy_get_tx_power_index()
2130 static void rtw_phy_set_tx_power_index_by_rs(struct rtw_dev *rtwdev, in rtw_phy_set_tx_power_index_by_rs() argument
2133 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_set_tx_power_index_by_rs()
2134 u8 regd = rtw_regd_get(rtwdev); in rtw_phy_set_tx_power_index_by_rs()
2150 pwr_idx = rtw_phy_get_tx_power_index(rtwdev, path, rate, in rtw_phy_set_tx_power_index_by_rs()
2161 static void rtw_phy_set_tx_power_level_by_path(struct rtw_dev *rtwdev, in rtw_phy_set_tx_power_level_by_path() argument
2164 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_set_tx_power_level_by_path()
2174 rtw_phy_set_tx_power_index_by_rs(rtwdev, ch, path, rs); in rtw_phy_set_tx_power_level_by_path()
2177 void rtw_phy_set_tx_power_level(struct rtw_dev *rtwdev, u8 channel) in rtw_phy_set_tx_power_level() argument
2179 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_set_tx_power_level()
2180 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_set_tx_power_level()
2186 rtw_phy_set_tx_power_level_by_path(rtwdev, channel, path); in rtw_phy_set_tx_power_level()
2188 chip->ops->set_tx_power_index(rtwdev); in rtw_phy_set_tx_power_level()
2272 static void rtw_phy_init_tx_power_limit(struct rtw_dev *rtwdev, in rtw_phy_init_tx_power_limit() argument
2275 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_init_tx_power_limit()
2276 s8 max_power_index = (s8)rtwdev->chip->max_power_index; in rtw_phy_init_tx_power_limit()
2288 void rtw_phy_init_tx_power(struct rtw_dev *rtwdev) in rtw_phy_init_tx_power() argument
2290 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_init_tx_power()
2305 rtw_phy_init_tx_power_limit(rtwdev, regd, bw, in rtw_phy_init_tx_power()
2309 void rtw_phy_config_swing_table(struct rtw_dev *rtwdev, in rtw_phy_config_swing_table() argument
2312 const struct rtw_pwr_track_tbl *tbl = rtwdev->chip->pwr_track_tbl; in rtw_phy_config_swing_table()
2313 u8 channel = rtwdev->hal.current_channel; in rtw_phy_config_swing_table()
2316 if (rtwdev->dm_info.tx_rate <= DESC_RATE11M) { in rtw_phy_config_swing_table()
2351 void rtw_phy_pwrtrack_avg(struct rtw_dev *rtwdev, u8 thermal, u8 path) in rtw_phy_pwrtrack_avg() argument
2353 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_pwrtrack_avg()
2361 bool rtw_phy_pwrtrack_thermal_changed(struct rtw_dev *rtwdev, u8 thermal, in rtw_phy_pwrtrack_thermal_changed() argument
2364 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_pwrtrack_thermal_changed()
2374 u8 rtw_phy_pwrtrack_get_delta(struct rtw_dev *rtwdev, u8 path) in rtw_phy_pwrtrack_get_delta() argument
2376 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_pwrtrack_get_delta()
2380 therm_efuse = rtwdev->efuse.thermal_meter[path]; in rtw_phy_pwrtrack_get_delta()
2387 s8 rtw_phy_pwrtrack_get_pwridx(struct rtw_dev *rtwdev, in rtw_phy_pwrtrack_get_pwridx() argument
2391 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_pwrtrack_get_pwridx()
2396 rtw_warn(rtwdev, "power track table overflow\n"); in rtw_phy_pwrtrack_get_pwridx()
2401 rtw_warn(rtwdev, "swing table not configured\n"); in rtw_phy_pwrtrack_get_pwridx()
2409 rtw_warn(rtwdev, "invalid swing table index\n"); in rtw_phy_pwrtrack_get_pwridx()
2414 rtwdev->efuse.thermal_meter[therm_path]) in rtw_phy_pwrtrack_get_pwridx()
2421 bool rtw_phy_pwrtrack_need_lck(struct rtw_dev *rtwdev) in rtw_phy_pwrtrack_need_lck() argument
2423 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_pwrtrack_need_lck()
2427 if (delta_lck >= rtwdev->chip->lck_threshold) { in rtw_phy_pwrtrack_need_lck()
2435 bool rtw_phy_pwrtrack_need_iqk(struct rtw_dev *rtwdev) in rtw_phy_pwrtrack_need_iqk() argument
2437 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_pwrtrack_need_iqk()
2441 if (delta_iqk >= rtwdev->chip->iqk_threshold) { in rtw_phy_pwrtrack_need_iqk()
2449 static void rtw_phy_set_tx_path_by_reg(struct rtw_dev *rtwdev, in rtw_phy_set_tx_path_by_reg() argument
2452 struct rtw_path_div *path_div = &rtwdev->dm_path_div; in rtw_phy_set_tx_path_by_reg()
2454 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_set_tx_path_by_reg()
2460 rtw_dbg(rtwdev, RTW_DBG_PATH_DIV, "Switch TX path=%s\n", in rtw_phy_set_tx_path_by_reg()
2462 chip->ops->config_tx_path(rtwdev, rtwdev->hal.antenna_tx, in rtw_phy_set_tx_path_by_reg()
2466 static void rtw_phy_tx_path_div_select(struct rtw_dev *rtwdev) in rtw_phy_tx_path_div_select() argument
2468 struct rtw_path_div *path_div = &rtwdev->dm_path_div; in rtw_phy_tx_path_div_select()
2488 rtw_phy_set_tx_path_by_reg(rtwdev, path); in rtw_phy_tx_path_div_select()
2491 static void rtw_phy_tx_path_diversity_2ss(struct rtw_dev *rtwdev) in rtw_phy_tx_path_diversity_2ss() argument
2493 if (rtwdev->hal.antenna_rx != BB_PATH_AB) { in rtw_phy_tx_path_diversity_2ss()
2494 rtw_dbg(rtwdev, RTW_DBG_PATH_DIV, in rtw_phy_tx_path_diversity_2ss()
2496 rtwdev->hal.antenna_tx, rtwdev->hal.antenna_rx); in rtw_phy_tx_path_diversity_2ss()
2499 if (rtwdev->sta_cnt == 0) { in rtw_phy_tx_path_diversity_2ss()
2500 rtw_dbg(rtwdev, RTW_DBG_PATH_DIV, "No Link\n"); in rtw_phy_tx_path_diversity_2ss()
2504 rtw_phy_tx_path_div_select(rtwdev); in rtw_phy_tx_path_diversity_2ss()
2507 void rtw_phy_tx_path_diversity(struct rtw_dev *rtwdev) in rtw_phy_tx_path_diversity() argument
2509 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_tx_path_diversity()
2514 rtw_phy_tx_path_diversity_2ss(rtwdev); in rtw_phy_tx_path_diversity()