Lines Matching refs:rtwdev
109 static void rtw_phy_cck_pd_init(struct rtw_dev *rtwdev) in rtw_phy_cck_pd_init() argument
111 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_cck_pd_init()
122 static void rtw_phy_cfo_init(struct rtw_dev *rtwdev) in rtw_phy_cfo_init() argument
124 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_cfo_init()
127 chip->ops->cfo_init(rtwdev); in rtw_phy_cfo_init()
130 static void rtw_phy_tx_path_div_init(struct rtw_dev *rtwdev) in rtw_phy_tx_path_div_init() argument
132 struct rtw_path_div *path_div = &rtwdev->dm_path_div; in rtw_phy_tx_path_div_init()
134 path_div->current_tx_path = rtwdev->chip->default_1ss_tx_path; in rtw_phy_tx_path_div_init()
141 void rtw_phy_init(struct rtw_dev *rtwdev) in rtw_phy_init() argument
143 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_init()
144 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_init()
158 dm_info->igi_history[0] = rtw_read32_mask(rtwdev, addr, mask); in rtw_phy_init()
159 rtw_phy_cck_pd_init(rtwdev); in rtw_phy_init()
162 rtw_phy_cfo_init(rtwdev); in rtw_phy_init()
163 rtw_phy_tx_path_div_init(rtwdev); in rtw_phy_init()
167 void rtw_phy_dig_write(struct rtw_dev *rtwdev, u8 igi) in rtw_phy_dig_write() argument
169 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_dig_write()
170 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_dig_write()
176 rtw_write32_mask(rtwdev, dig_cck->addr, dig_cck->mask, igi >> 1); in rtw_phy_dig_write()
182 rtw_write32_mask(rtwdev, addr, mask, igi); in rtw_phy_dig_write()
186 static void rtw_phy_stat_false_alarm(struct rtw_dev *rtwdev) in rtw_phy_stat_false_alarm() argument
188 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_stat_false_alarm()
190 chip->ops->false_alarm_statistics(rtwdev); in rtw_phy_stat_false_alarm()
217 struct rtw_dev *rtwdev; member
224 struct rtw_dev *rtwdev = iter_data->rtwdev; in rtw_phy_stat_rssi_iter() local
231 rtw_fw_send_rssi_info(rtwdev, si); in rtw_phy_stat_rssi_iter()
236 static void rtw_phy_stat_rssi(struct rtw_dev *rtwdev) in rtw_phy_stat_rssi() argument
238 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_stat_rssi()
241 data.rtwdev = rtwdev; in rtw_phy_stat_rssi()
243 rtw_iterate_stas_atomic(rtwdev, rtw_phy_stat_rssi_iter, &data); in rtw_phy_stat_rssi()
249 static void rtw_phy_stat_rate_cnt(struct rtw_dev *rtwdev) in rtw_phy_stat_rate_cnt() argument
251 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_stat_rate_cnt()
257 static void rtw_phy_statistics(struct rtw_dev *rtwdev) in rtw_phy_statistics() argument
259 rtw_phy_stat_rssi(rtwdev); in rtw_phy_statistics()
260 rtw_phy_stat_false_alarm(rtwdev); in rtw_phy_statistics()
261 rtw_phy_stat_rate_cnt(rtwdev); in rtw_phy_statistics()
340 static void rtw_phy_dig_get_boundary(struct rtw_dev *rtwdev, in rtw_phy_dig_get_boundary() argument
350 dig_min = rtwdev->chip->dig_min; in rtw_phy_dig_get_boundary()
420 static void rtw_phy_dig(struct rtw_dev *rtwdev) in rtw_phy_dig() argument
422 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_dig()
430 if (test_bit(RTW_FLAG_DIG_DISABLE, rtwdev->flags)) in rtw_phy_dig()
436 linked = !!rtwdev->sta_cnt; in rtw_phy_dig()
461 rtw_phy_dig_get_boundary(rtwdev, dm_info, &upper_bound, &lower_bound, in rtw_phy_dig()
471 rtw_phy_dig_write(rtwdev, cur_igi); in rtw_phy_dig()
476 struct rtw_dev *rtwdev = data; in rtw_phy_ra_info_update_iter() local
479 rtw_update_sta_info(rtwdev, si); in rtw_phy_ra_info_update_iter()
482 static void rtw_phy_ra_info_update(struct rtw_dev *rtwdev) in rtw_phy_ra_info_update() argument
484 if (rtwdev->watch_dog_cnt & 0x3) in rtw_phy_ra_info_update()
487 rtw_iterate_stas_atomic(rtwdev, rtw_phy_ra_info_update_iter, rtwdev); in rtw_phy_ra_info_update()
490 static u32 rtw_phy_get_rrsr_mask(struct rtw_dev *rtwdev, u8 rate_idx) in rtw_phy_get_rrsr_mask() argument
525 struct rtw_dev *rtwdev = (struct rtw_dev *)data; in rtw_phy_rrsr_mask_min_iter() local
527 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_rrsr_mask_min_iter()
530 mask = rtw_phy_get_rrsr_mask(rtwdev, si->ra_report.desc_rate); in rtw_phy_rrsr_mask_min_iter()
535 static void rtw_phy_rrsr_update(struct rtw_dev *rtwdev) in rtw_phy_rrsr_update() argument
537 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_rrsr_update()
540 rtw_iterate_stas_atomic(rtwdev, rtw_phy_rrsr_mask_min_iter, rtwdev); in rtw_phy_rrsr_update()
541 rtw_write32(rtwdev, REG_RRSR, dm_info->rrsr_val_init & dm_info->rrsr_mask_min); in rtw_phy_rrsr_update()
544 static void rtw_phy_dpk_track(struct rtw_dev *rtwdev) in rtw_phy_dpk_track() argument
546 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_dpk_track()
549 chip->ops->dpk_track(rtwdev); in rtw_phy_dpk_track()
553 struct rtw_dev *rtwdev; member
563 struct rtw_dev *rtwdev = iter_data->rtwdev; in rtw_phy_parsing_cfo_iter() local
565 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_parsing_cfo_iter()
573 for (i = 0; i < rtwdev->hal.rf_path_num; i++) { in rtw_phy_parsing_cfo_iter()
581 void rtw_phy_parsing_cfo(struct rtw_dev *rtwdev, in rtw_phy_parsing_cfo() argument
591 data.rtwdev = rtwdev; in rtw_phy_parsing_cfo()
596 rtw_iterate_vifs_atomic(rtwdev, rtw_phy_parsing_cfo_iter, &data); in rtw_phy_parsing_cfo()
600 static void rtw_phy_cfo_track(struct rtw_dev *rtwdev) in rtw_phy_cfo_track() argument
602 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_cfo_track()
605 chip->ops->cfo_track(rtwdev); in rtw_phy_cfo_track()
611 static u8 rtw_phy_cck_pd_lv_unlink(struct rtw_dev *rtwdev) in rtw_phy_cck_pd_lv_unlink() argument
613 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_cck_pd_lv_unlink()
632 static u8 rtw_phy_cck_pd_lv_link(struct rtw_dev *rtwdev) in rtw_phy_cck_pd_lv_link() argument
634 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_cck_pd_lv_link()
653 static u8 rtw_phy_cck_pd_lv(struct rtw_dev *rtwdev) in rtw_phy_cck_pd_lv() argument
655 if (!rtw_is_assoc(rtwdev)) in rtw_phy_cck_pd_lv()
656 return rtw_phy_cck_pd_lv_unlink(rtwdev); in rtw_phy_cck_pd_lv()
658 return rtw_phy_cck_pd_lv_link(rtwdev); in rtw_phy_cck_pd_lv()
661 static void rtw_phy_cck_pd(struct rtw_dev *rtwdev) in rtw_phy_cck_pd() argument
663 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_cck_pd()
664 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_cck_pd()
668 if (rtwdev->hal.current_band_type != RTW_BAND_2G) in rtw_phy_cck_pd()
676 rtw_dbg(rtwdev, RTW_DBG_PHY, "IGI=0x%x, rssi_min=%d, cck_fa=%d\n", in rtw_phy_cck_pd()
679 rtw_dbg(rtwdev, RTW_DBG_PHY, "cck_fa_avg=%d, cck_pd_default=%d\n", in rtw_phy_cck_pd()
682 level = rtw_phy_cck_pd_lv(rtwdev); in rtw_phy_cck_pd()
688 chip->ops->cck_pd_set(rtwdev, level); in rtw_phy_cck_pd()
691 static void rtw_phy_pwr_track(struct rtw_dev *rtwdev) in rtw_phy_pwr_track() argument
693 rtwdev->chip->ops->pwr_track(rtwdev); in rtw_phy_pwr_track()
696 static void rtw_phy_ra_track(struct rtw_dev *rtwdev) in rtw_phy_ra_track() argument
698 rtw_fw_update_wl_phy_info(rtwdev); in rtw_phy_ra_track()
699 rtw_phy_ra_info_update(rtwdev); in rtw_phy_ra_track()
700 rtw_phy_rrsr_update(rtwdev); in rtw_phy_ra_track()
703 void rtw_phy_dynamic_mechanism(struct rtw_dev *rtwdev) in rtw_phy_dynamic_mechanism() argument
706 rtw_phy_statistics(rtwdev); in rtw_phy_dynamic_mechanism()
707 rtw_phy_dig(rtwdev); in rtw_phy_dynamic_mechanism()
708 rtw_phy_cck_pd(rtwdev); in rtw_phy_dynamic_mechanism()
709 rtw_phy_ra_track(rtwdev); in rtw_phy_dynamic_mechanism()
710 rtw_phy_tx_path_diversity(rtwdev); in rtw_phy_dynamic_mechanism()
711 rtw_phy_cfo_track(rtwdev); in rtw_phy_dynamic_mechanism()
712 rtw_phy_dpk_track(rtwdev); in rtw_phy_dynamic_mechanism()
713 rtw_phy_pwr_track(rtwdev); in rtw_phy_dynamic_mechanism()
834 u32 rtw_phy_read_rf(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path, in rtw_phy_read_rf() argument
837 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_read_rf()
838 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_read_rf()
843 rtw_err(rtwdev, "unsupported rf path (%d)\n", rf_path); in rtw_phy_read_rf()
851 val = rtw_read32_mask(rtwdev, direct_addr, mask); in rtw_phy_read_rf()
857 u32 rtw_phy_read_rf_sipi(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path, in rtw_phy_read_rf_sipi() argument
860 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_read_rf_sipi()
861 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_read_rf_sipi()
870 rtw_err(rtwdev, "unsupported rf path (%d)\n", rf_path); in rtw_phy_read_rf_sipi()
875 rtw_err(rtwdev, "rf_sipi_read_addr isn't defined\n"); in rtw_phy_read_rf_sipi()
884 val32 = rtw_read32(rtwdev, rf_sipi_addr->hssi_2); in rtw_phy_read_rf_sipi()
886 rtw_write32(rtwdev, rf_sipi_addr->hssi_2, val32); in rtw_phy_read_rf_sipi()
889 val32 = rtw_read32(rtwdev, rf_sipi_addr_a->hssi_2); in rtw_phy_read_rf_sipi()
890 rtw_write32(rtwdev, rf_sipi_addr_a->hssi_2, val32 & ~LSSI_READ_EDGE_MASK); in rtw_phy_read_rf_sipi()
891 rtw_write32(rtwdev, rf_sipi_addr_a->hssi_2, val32 | LSSI_READ_EDGE_MASK); in rtw_phy_read_rf_sipi()
895 en_pi = rtw_read32_mask(rtwdev, rf_sipi_addr->hssi_1, BIT(8)); in rtw_phy_read_rf_sipi()
898 val32 = rtw_read32_mask(rtwdev, r_addr, LSSI_READ_DATA_MASK); in rtw_phy_read_rf_sipi()
906 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
909 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_write_rf_reg_sipi()
910 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_write_rf_reg_sipi()
917 rtw_err(rtwdev, "unsupported rf path (%d)\n", rf_path); in rtw_phy_write_rf_reg_sipi()
925 old_data = chip->ops->read_rf(rtwdev, rf_path, addr, RFREG_MASK); in rtw_phy_write_rf_reg_sipi()
928 rtw_err(rtwdev, "Write fail, rf is disabled\n"); in rtw_phy_write_rf_reg_sipi()
938 rtw_write32(rtwdev, sipi_addr[rf_path], data_and_addr); in rtw_phy_write_rf_reg_sipi()
946 bool rtw_phy_write_rf_reg(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path, in rtw_phy_write_rf_reg() argument
949 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_write_rf_reg()
950 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_write_rf_reg()
955 rtw_err(rtwdev, "unsupported rf path (%d)\n", rf_path); in rtw_phy_write_rf_reg()
963 rtw_write32_mask(rtwdev, direct_addr, mask, data); in rtw_phy_write_rf_reg()
970 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
974 return rtw_phy_write_rf_reg(rtwdev, rf_path, addr, mask, data); in rtw_phy_write_rf_reg_mix()
976 return rtw_phy_write_rf_reg_sipi(rtwdev, rf_path, addr, mask, data); in rtw_phy_write_rf_reg_mix()
980 void rtw_phy_setup_phy_cond(struct rtw_dev *rtwdev, u32 pkg) in rtw_phy_setup_phy_cond() argument
982 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_setup_phy_cond()
983 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw_phy_setup_phy_cond()
991 switch (rtw_hci_type(rtwdev)) { in rtw_phy_setup_phy_cond()
1006 rtw_dbg(rtwdev, RTW_DBG_PHY, "phy cond=0x%08x\n", *((u32 *)&hal->phy_cond)); in rtw_phy_setup_phy_cond()
1009 static bool check_positive(struct rtw_dev *rtwdev, struct rtw_phy_cond cond) in check_positive() argument
1011 struct rtw_hal *hal = &rtwdev->hal; in check_positive()
1029 void rtw_parse_tbl_phy_cond(struct rtw_dev *rtwdev, const struct rtw_table *tbl) in rtw_parse_tbl_phy_cond() argument
1056 if (check_positive(rtwdev, pos_cond)) { in rtw_parse_tbl_phy_cond()
1067 (*tbl->do_cfg)(rtwdev, tbl, p->cfg.addr, p->cfg.data); in rtw_parse_tbl_phy_cond()
1075 static u8 tbl_to_dec_pwr_by_rate(struct rtw_dev *rtwdev, u32 hex, u8 i) in tbl_to_dec_pwr_by_rate() argument
1077 if (rtwdev->chip->is_pwr_by_rate_dec) in tbl_to_dec_pwr_by_rate()
1084 rtw_phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, in rtw_phy_get_rate_values_of_txpwr_by_rate() argument
1098 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1108 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1123 tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1138 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1148 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1158 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1168 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1176 pwr_by_rate[i - 1] = tbl_to_dec_pwr_by_rate(rtwdev, in rtw_phy_get_rate_values_of_txpwr_by_rate()
1189 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1201 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1213 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1225 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1237 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1249 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1261 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1273 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1285 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1297 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1309 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1321 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1333 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1345 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1357 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1369 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1379 pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1383 rtw_warn(rtwdev, "invalid tx power index addr 0x%08x\n", addr); in rtw_phy_get_rate_values_of_txpwr_by_rate()
1388 static void rtw_phy_store_tx_power_by_rate(struct rtw_dev *rtwdev, in rtw_phy_store_tx_power_by_rate() argument
1392 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_store_tx_power_by_rate()
1400 rtw_phy_get_rate_values_of_txpwr_by_rate(rtwdev, regaddr, bitmask, data, in rtw_phy_store_tx_power_by_rate()
1420 void rtw_parse_tbl_bb_pg(struct rtw_dev *rtwdev, const struct rtw_table *tbl) in rtw_parse_tbl_bb_pg() argument
1430 rtw_phy_store_tx_power_by_rate(rtwdev, p->band, p->rf_path, in rtw_parse_tbl_bb_pg()
1469 static void rtw_phy_set_tx_power_limit(struct rtw_dev *rtwdev, u8 regd, u8 band, in rtw_phy_set_tx_power_limit() argument
1472 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_set_tx_power_limit()
1473 u8 max_power_index = rtwdev->chip->max_power_index; in rtw_phy_set_tx_power_limit()
1504 rtw_xref_5g_txpwr_lmt(struct rtw_dev *rtwdev, u8 regd, in rtw_xref_5g_txpwr_lmt() argument
1507 struct rtw_hal *hal = &rtwdev->hal; in rtw_xref_5g_txpwr_lmt()
1508 u8 max_power_index = rtwdev->chip->max_power_index; in rtw_xref_5g_txpwr_lmt()
1524 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
1534 rtw_xref_5g_txpwr_lmt(rtwdev, regd, bw, ch_idx, rs_ht, rs_vht); in rtw_xref_txpwr_lmt_by_rs()
1540 rtw_xref_5g_txpwr_lmt_by_ch(struct rtw_dev *rtwdev, u8 regd, u8 bw) in rtw_xref_5g_txpwr_lmt_by_ch() argument
1545 rtw_xref_txpwr_lmt_by_rs(rtwdev, regd, bw, ch_idx); in rtw_xref_5g_txpwr_lmt_by_ch()
1550 rtw_xref_txpwr_lmt_by_bw(struct rtw_dev *rtwdev, u8 regd) in rtw_xref_txpwr_lmt_by_bw() argument
1555 rtw_xref_5g_txpwr_lmt_by_ch(rtwdev, regd, bw); in rtw_xref_txpwr_lmt_by_bw()
1559 static void rtw_xref_txpwr_lmt(struct rtw_dev *rtwdev) in rtw_xref_txpwr_lmt() argument
1564 rtw_xref_txpwr_lmt_by_bw(rtwdev, regd); in rtw_xref_txpwr_lmt()
1567 void rtw_parse_tbl_txpwr_lmt(struct rtw_dev *rtwdev, in rtw_parse_tbl_txpwr_lmt() argument
1574 rtw_phy_set_tx_power_limit(rtwdev, p->regd, p->band, in rtw_parse_tbl_txpwr_lmt()
1578 rtw_xref_txpwr_lmt(rtwdev); in rtw_parse_tbl_txpwr_lmt()
1582 void rtw_phy_cfg_mac(struct rtw_dev *rtwdev, const struct rtw_table *tbl, in rtw_phy_cfg_mac() argument
1585 rtw_write8(rtwdev, addr, data); in rtw_phy_cfg_mac()
1589 void rtw_phy_cfg_agc(struct rtw_dev *rtwdev, const struct rtw_table *tbl, in rtw_phy_cfg_agc() argument
1592 rtw_write32(rtwdev, addr, data); in rtw_phy_cfg_agc()
1596 void rtw_phy_cfg_bb(struct rtw_dev *rtwdev, const struct rtw_table *tbl, in rtw_phy_cfg_bb() argument
1612 rtw_write32(rtwdev, addr, data); in rtw_phy_cfg_bb()
1616 void rtw_phy_cfg_rf(struct rtw_dev *rtwdev, const struct rtw_table *tbl, in rtw_phy_cfg_rf() argument
1624 rtw_write_rf(rtwdev, tbl->rf_path, addr, RFREG_MASK, data); in rtw_phy_cfg_rf()
1630 static void rtw_load_rfk_table(struct rtw_dev *rtwdev) in rtw_load_rfk_table() argument
1632 struct rtw_chip_info *chip = rtwdev->chip; in rtw_load_rfk_table()
1633 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw_load_rfk_table()
1638 rtw_write32_mask(rtwdev, 0x1e24, BIT(17), 0x1); in rtw_load_rfk_table()
1639 rtw_write32_mask(rtwdev, 0x1cd0, BIT(28), 0x1); in rtw_load_rfk_table()
1640 rtw_write32_mask(rtwdev, 0x1cd0, BIT(29), 0x1); in rtw_load_rfk_table()
1641 rtw_write32_mask(rtwdev, 0x1cd0, BIT(30), 0x1); in rtw_load_rfk_table()
1642 rtw_write32_mask(rtwdev, 0x1cd0, BIT(31), 0x0); in rtw_load_rfk_table()
1644 rtw_load_table(rtwdev, chip->rfk_init_tbl); in rtw_load_rfk_table()
1649 void rtw_phy_load_tables(struct rtw_dev *rtwdev) in rtw_phy_load_tables() argument
1651 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_load_tables()
1654 rtw_load_table(rtwdev, chip->mac_tbl); in rtw_phy_load_tables()
1655 rtw_load_table(rtwdev, chip->bb_tbl); in rtw_phy_load_tables()
1656 rtw_load_table(rtwdev, chip->agc_tbl); in rtw_phy_load_tables()
1657 rtw_load_rfk_table(rtwdev); in rtw_phy_load_tables()
1659 for (rf_path = 0; rf_path < rtwdev->hal.rf_path_num; rf_path++) { in rtw_phy_load_tables()
1663 rtw_load_table(rtwdev, tbl); in rtw_phy_load_tables()
1758 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
1760 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_get_dis_dpd_by_rate_diff()
1789 static u8 rtw_phy_get_2g_tx_power_index(struct rtw_dev *rtwdev, in rtw_phy_get_2g_tx_power_index() argument
1794 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_get_2g_tx_power_index()
1836 static u8 rtw_phy_get_5g_tx_power_index(struct rtw_dev *rtwdev, in rtw_phy_get_5g_tx_power_index() argument
1841 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_get_5g_tx_power_index()
1890 static s8 rtw_phy_get_tx_power_limit(struct rtw_dev *rtwdev, u8 band, in rtw_phy_get_tx_power_limit() argument
1894 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_get_tx_power_limit()
1896 s8 power_limit = (s8)rtwdev->chip->max_power_index; in rtw_phy_get_tx_power_limit()
1948 return (s8)rtwdev->chip->max_power_index; in rtw_phy_get_tx_power_limit()
1951 void rtw_get_tx_power_params(struct rtw_dev *rtwdev, u8 path, u8 rate, u8 bw, in rtw_get_tx_power_params() argument
1954 struct rtw_hal *hal = &rtwdev->hal; in rtw_get_tx_power_params()
1955 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_get_tx_power_params()
1963 pwr_idx = &rtwdev->efuse.txpwr_idx_table[path]; in rtw_get_tx_power_params()
1969 *base = rtw_phy_get_2g_tx_power_index(rtwdev, in rtw_get_tx_power_params()
1975 *base = rtw_phy_get_5g_tx_power_index(rtwdev, in rtw_get_tx_power_params()
1981 *limit = rtw_phy_get_tx_power_limit(rtwdev, band, bw, path, in rtw_get_tx_power_params()
1988 rtw_phy_get_tx_power_index(struct rtw_dev *rtwdev, u8 rf_path, u8 rate, in rtw_phy_get_tx_power_index() argument
1995 rtw_get_tx_power_params(rtwdev, rf_path, rate, bandwidth, in rtw_phy_get_tx_power_index()
2001 if (rtwdev->chip->en_dis_dpd) in rtw_phy_get_tx_power_index()
2002 offset += rtw_phy_get_dis_dpd_by_rate_diff(rtwdev, rate); in rtw_phy_get_tx_power_index()
2006 if (tx_power > rtwdev->chip->max_power_index) in rtw_phy_get_tx_power_index()
2007 tx_power = rtwdev->chip->max_power_index; in rtw_phy_get_tx_power_index()
2013 static void rtw_phy_set_tx_power_index_by_rs(struct rtw_dev *rtwdev, in rtw_phy_set_tx_power_index_by_rs() argument
2016 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_set_tx_power_index_by_rs()
2017 u8 regd = rtwdev->regd.txpwr_regd; in rtw_phy_set_tx_power_index_by_rs()
2033 pwr_idx = rtw_phy_get_tx_power_index(rtwdev, path, rate, in rtw_phy_set_tx_power_index_by_rs()
2044 static void rtw_phy_set_tx_power_level_by_path(struct rtw_dev *rtwdev, in rtw_phy_set_tx_power_level_by_path() argument
2047 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_set_tx_power_level_by_path()
2057 rtw_phy_set_tx_power_index_by_rs(rtwdev, ch, path, rs); in rtw_phy_set_tx_power_level_by_path()
2060 void rtw_phy_set_tx_power_level(struct rtw_dev *rtwdev, u8 channel) in rtw_phy_set_tx_power_level() argument
2062 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_set_tx_power_level()
2063 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_set_tx_power_level()
2069 rtw_phy_set_tx_power_level_by_path(rtwdev, channel, path); in rtw_phy_set_tx_power_level()
2071 chip->ops->set_tx_power_index(rtwdev); in rtw_phy_set_tx_power_level()
2155 static void rtw_phy_init_tx_power_limit(struct rtw_dev *rtwdev, in rtw_phy_init_tx_power_limit() argument
2158 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_init_tx_power_limit()
2159 s8 max_power_index = (s8)rtwdev->chip->max_power_index; in rtw_phy_init_tx_power_limit()
2171 void rtw_phy_init_tx_power(struct rtw_dev *rtwdev) in rtw_phy_init_tx_power() argument
2173 struct rtw_hal *hal = &rtwdev->hal; in rtw_phy_init_tx_power()
2188 rtw_phy_init_tx_power_limit(rtwdev, regd, bw, in rtw_phy_init_tx_power()
2192 void rtw_phy_config_swing_table(struct rtw_dev *rtwdev, in rtw_phy_config_swing_table() argument
2195 const struct rtw_pwr_track_tbl *tbl = rtwdev->chip->pwr_track_tbl; in rtw_phy_config_swing_table()
2196 u8 channel = rtwdev->hal.current_channel; in rtw_phy_config_swing_table()
2199 if (rtwdev->dm_info.tx_rate <= DESC_RATE11M) { in rtw_phy_config_swing_table()
2234 void rtw_phy_pwrtrack_avg(struct rtw_dev *rtwdev, u8 thermal, u8 path) in rtw_phy_pwrtrack_avg() argument
2236 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_pwrtrack_avg()
2244 bool rtw_phy_pwrtrack_thermal_changed(struct rtw_dev *rtwdev, u8 thermal, in rtw_phy_pwrtrack_thermal_changed() argument
2247 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_pwrtrack_thermal_changed()
2257 u8 rtw_phy_pwrtrack_get_delta(struct rtw_dev *rtwdev, u8 path) in rtw_phy_pwrtrack_get_delta() argument
2259 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_pwrtrack_get_delta()
2263 therm_efuse = rtwdev->efuse.thermal_meter[path]; in rtw_phy_pwrtrack_get_delta()
2270 s8 rtw_phy_pwrtrack_get_pwridx(struct rtw_dev *rtwdev, in rtw_phy_pwrtrack_get_pwridx() argument
2274 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_pwrtrack_get_pwridx()
2279 rtw_warn(rtwdev, "power track table overflow\n"); in rtw_phy_pwrtrack_get_pwridx()
2284 rtw_warn(rtwdev, "swing table not configured\n"); in rtw_phy_pwrtrack_get_pwridx()
2292 rtw_warn(rtwdev, "invalid swing table index\n"); in rtw_phy_pwrtrack_get_pwridx()
2297 rtwdev->efuse.thermal_meter[therm_path]) in rtw_phy_pwrtrack_get_pwridx()
2304 bool rtw_phy_pwrtrack_need_lck(struct rtw_dev *rtwdev) in rtw_phy_pwrtrack_need_lck() argument
2306 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_pwrtrack_need_lck()
2310 if (delta_lck >= rtwdev->chip->lck_threshold) { in rtw_phy_pwrtrack_need_lck()
2318 bool rtw_phy_pwrtrack_need_iqk(struct rtw_dev *rtwdev) in rtw_phy_pwrtrack_need_iqk() argument
2320 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_phy_pwrtrack_need_iqk()
2324 if (delta_iqk >= rtwdev->chip->iqk_threshold) { in rtw_phy_pwrtrack_need_iqk()
2332 static void rtw_phy_set_tx_path_by_reg(struct rtw_dev *rtwdev, in rtw_phy_set_tx_path_by_reg() argument
2335 struct rtw_path_div *path_div = &rtwdev->dm_path_div; in rtw_phy_set_tx_path_by_reg()
2337 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_set_tx_path_by_reg()
2343 rtw_dbg(rtwdev, RTW_DBG_PATH_DIV, "Switch TX path=%s\n", in rtw_phy_set_tx_path_by_reg()
2345 chip->ops->config_tx_path(rtwdev, rtwdev->hal.antenna_tx, in rtw_phy_set_tx_path_by_reg()
2349 static void rtw_phy_tx_path_div_select(struct rtw_dev *rtwdev) in rtw_phy_tx_path_div_select() argument
2351 struct rtw_path_div *path_div = &rtwdev->dm_path_div; in rtw_phy_tx_path_div_select()
2371 rtw_phy_set_tx_path_by_reg(rtwdev, path); in rtw_phy_tx_path_div_select()
2374 static void rtw_phy_tx_path_diversity_2ss(struct rtw_dev *rtwdev) in rtw_phy_tx_path_diversity_2ss() argument
2376 if (rtwdev->hal.antenna_rx != BB_PATH_AB) { in rtw_phy_tx_path_diversity_2ss()
2377 rtw_dbg(rtwdev, RTW_DBG_PATH_DIV, in rtw_phy_tx_path_diversity_2ss()
2379 rtwdev->hal.antenna_tx, rtwdev->hal.antenna_rx); in rtw_phy_tx_path_diversity_2ss()
2382 if (rtwdev->sta_cnt == 0) { in rtw_phy_tx_path_diversity_2ss()
2383 rtw_dbg(rtwdev, RTW_DBG_PATH_DIV, "No Link\n"); in rtw_phy_tx_path_diversity_2ss()
2387 rtw_phy_tx_path_div_select(rtwdev); in rtw_phy_tx_path_diversity_2ss()
2390 void rtw_phy_tx_path_diversity(struct rtw_dev *rtwdev) in rtw_phy_tx_path_diversity() argument
2392 struct rtw_chip_info *chip = rtwdev->chip; in rtw_phy_tx_path_diversity()
2397 rtw_phy_tx_path_diversity_2ss(rtwdev); in rtw_phy_tx_path_diversity()