Lines Matching +full:emem +full:- +full:configuration
1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
2 /* Copyright(c) 2018-2019 Realtek Corporation
29 ether_addr_copy(efuse->addr, map->e.mac_addr); in rtw8822ce_efuse_parsing()
35 ether_addr_copy(efuse->addr, map->u.mac_addr); in rtw8822cu_efuse_parsing()
41 ether_addr_copy(efuse->addr, map->s.mac_addr); in rtw8822cs_efuse_parsing()
46 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw8822c_read_efuse()
52 efuse->rfe_option = map->rfe_option; in rtw8822c_read_efuse()
53 efuse->rf_board_option = map->rf_board_option; in rtw8822c_read_efuse()
54 efuse->crystal_cap = map->xtal_k & XCAP_MASK; in rtw8822c_read_efuse()
55 efuse->channel_plan = map->channel_plan; in rtw8822c_read_efuse()
56 efuse->country_code[0] = map->country_code[0]; in rtw8822c_read_efuse()
57 efuse->country_code[1] = map->country_code[1]; in rtw8822c_read_efuse()
58 efuse->bt_setting = map->rf_bt_setting; in rtw8822c_read_efuse()
59 efuse->regd = map->rf_board_option & 0x7; in rtw8822c_read_efuse()
60 efuse->thermal_meter[RF_PATH_A] = map->path_a_thermal; in rtw8822c_read_efuse()
61 efuse->thermal_meter[RF_PATH_B] = map->path_b_thermal; in rtw8822c_read_efuse()
62 efuse->thermal_meter_k = in rtw8822c_read_efuse()
63 (map->path_a_thermal + map->path_b_thermal) >> 1; in rtw8822c_read_efuse()
64 efuse->power_track_type = (map->tx_pwr_calibrate_rate >> 4) & 0xf; in rtw8822c_read_efuse()
67 efuse->txpwr_idx_table[i] = map->txpwr_idx_table[i]; in rtw8822c_read_efuse()
81 return -ENOTSUPP; in rtw8822c_read_efuse()
201 for (i = 0; i < DACK_SN_8822C - 1; i++) { in rtw8822c_dac_iq_sort()
202 for (j = 0; j < (DACK_SN_8822C - 1 - i) ; j++) { in rtw8822c_dac_iq_sort()
215 for (i = 10; i < DACK_SN_8822C - 10; i++) { in rtw8822c_dac_iq_offset()
217 m = (0x400 - vec[i]) + m; in rtw8822c_dac_iq_offset()
223 t = p - m; in rtw8822c_dac_iq_offset()
224 t = t / (DACK_SN_8822C - 20); in rtw8822c_dac_iq_offset()
226 t = m - p; in rtw8822c_dac_iq_offset()
227 t = t / (DACK_SN_8822C - 20); in rtw8822c_dac_iq_offset()
229 t = 0x400 - t; in rtw8822c_dac_iq_offset()
248 return -1; in rtw8822c_get_path_write_addr()
267 return -1; in rtw8822c_get_path_read_addr()
277 if ((value >= 0x200 && (0x400 - value) > 0x64) || in rtw8822c_dac_iq_check()
323 i_delta = i_max - i_min; in rtw8822c_dac_cal_iq_search()
325 i_delta = i_max - i_min; in rtw8822c_dac_cal_iq_search()
327 i_delta = i_max + (0x400 - i_min); in rtw8822c_dac_cal_iq_search()
330 q_delta = q_max - q_min; in rtw8822c_dac_cal_iq_search()
332 q_delta = q_max - q_min; in rtw8822c_dac_cal_iq_search()
334 q_delta = q_max + (0x400 - q_min); in rtw8822c_dac_cal_iq_search()
350 iv[DACK_SN_8822C - 1] = (temp & 0x3ff000) >> 12; in rtw8822c_dac_cal_iq_search()
351 qv[DACK_SN_8822C - 1] = temp & 0x3ff; in rtw8822c_dac_cal_iq_search()
370 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] RF path-A=0x%05x\n", rf_a); in rtw8822c_dac_cal_rf_mode()
371 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] RF path-B=0x%05x\n", rf_b); in rtw8822c_dac_cal_rf_mode()
396 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_dac_cal_adc()
437 ic = 0x400 - ic; in rtw8822c_dac_cal_adc()
441 qc = 0x400 - qc; in rtw8822c_dac_cal_adc()
446 dm_info->dack_adck[path] = temp; in rtw8822c_dac_cal_adc()
455 ic = 0x400 - ic; in rtw8822c_dac_cal_adc()
457 qc = 0x400 - qc; in rtw8822c_dac_cal_adc()
473 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_dac_cal_step1()
480 rtw_write32(rtwdev, base_addr + 0x68, dm_info->dack_adck[path]); in rtw8822c_dac_cal_step1()
540 ic = 0x400 - ic; in rtw8822c_dac_cal_step2()
542 qc = 0x400 - qc; in rtw8822c_dac_cal_step2()
547 ic = (0x400 - ic) * 2 * 6 / 5; in rtw8822c_dac_cal_step2()
548 ic = 0x7f - ic; in rtw8822c_dac_cal_step2()
554 qc = (0x400 - qc) * 2 * 6 / 5; in rtw8822c_dac_cal_step2()
555 qc = 0x7f - qc; in rtw8822c_dac_cal_step2()
618 ic = ic - 0x10; in rtw8822c_dac_cal_step3()
620 ic = 0x400 - (0x10 - ic); in rtw8822c_dac_cal_step3()
623 qc = qc - 0x10; in rtw8822c_dac_cal_step3()
625 qc = 0x400 - (0x10 - qc); in rtw8822c_dac_cal_step3()
631 ic = 0x400 - ic; in rtw8822c_dac_cal_step3()
633 qc = 0x400 - qc; in rtw8822c_dac_cal_step3()
655 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_dac_cal_backup_vec()
665 dm_info->dack_msbk[path][vec][i] = val; in rtw8822c_dac_cal_backup_vec()
691 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_dac_cal_backup_dck()
695 dm_info->dack_dck[RF_PATH_A][0][0] = val; in rtw8822c_dac_cal_backup_dck()
697 dm_info->dack_dck[RF_PATH_A][0][1] = val; in rtw8822c_dac_cal_backup_dck()
699 dm_info->dack_dck[RF_PATH_A][1][0] = val; in rtw8822c_dac_cal_backup_dck()
701 dm_info->dack_dck[RF_PATH_A][1][1] = val; in rtw8822c_dac_cal_backup_dck()
704 dm_info->dack_dck[RF_PATH_B][0][0] = val; in rtw8822c_dac_cal_backup_dck()
706 dm_info->dack_dck[RF_PATH_B][1][0] = val; in rtw8822c_dac_cal_backup_dck()
708 dm_info->dack_dck[RF_PATH_B][0][1] = val; in rtw8822c_dac_cal_backup_dck()
710 dm_info->dack_dck[RF_PATH_B][1][1] = val; in rtw8822c_dac_cal_backup_dck()
724 /* backup path-A I/Q */ in rtw8822c_dac_cal_backup()
729 /* backup path-B I/Q */ in rtw8822c_dac_cal_backup()
745 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_dac_cal_restore_dck()
749 val = dm_info->dack_dck[RF_PATH_A][0][0]; in rtw8822c_dac_cal_restore_dck()
751 val = dm_info->dack_dck[RF_PATH_A][0][1]; in rtw8822c_dac_cal_restore_dck()
755 val = dm_info->dack_dck[RF_PATH_A][1][0]; in rtw8822c_dac_cal_restore_dck()
757 val = dm_info->dack_dck[RF_PATH_A][1][1]; in rtw8822c_dac_cal_restore_dck()
761 val = dm_info->dack_dck[RF_PATH_B][0][0]; in rtw8822c_dac_cal_restore_dck()
763 val = dm_info->dack_dck[RF_PATH_B][0][1]; in rtw8822c_dac_cal_restore_dck()
767 val = dm_info->dack_dck[RF_PATH_B][1][0]; in rtw8822c_dac_cal_restore_dck()
769 val = dm_info->dack_dck[RF_PATH_B][1][1]; in rtw8822c_dac_cal_restore_dck()
845 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_dac_cal_restore_path()
862 value = dm_info->dack_msbk[path][0][i]; in rtw8822c_dac_cal_restore_path()
875 value = dm_info->dack_msbk[path][1][i]; in rtw8822c_dac_cal_restore_path()
903 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_dac_cal_restore()
907 if (dm_info->dack_msbk[RF_PATH_A][0][0] == 0 && in rtw8822c_dac_cal_restore()
908 dm_info->dack_msbk[RF_PATH_A][1][0] == 0 && in rtw8822c_dac_cal_restore()
909 dm_info->dack_msbk[RF_PATH_B][0][0] == 0 && in rtw8822c_dac_cal_restore()
910 dm_info->dack_msbk[RF_PATH_B][1][0] == 0) in rtw8822c_dac_cal_restore()
960 /* path-A */ in rtw8822c_rf_dac_cal()
976 /* path-B */ in rtw8822c_rf_dac_cal()
1033 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_set_power_trim()
1076 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_power_trim()
1097 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_thermal_trim()
1116 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_pa_bias()
1124 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_pa_bias()
1134 struct rtw_dm_info *dm = &rtwdev->dm_info; in rtw8822c_rfk_handshake()
1143 if (!dm->is_bt_iqk_timeout) { in rtw8822c_rfk_handshake()
1151 dm->is_bt_iqk_timeout = true; in rtw8822c_rfk_handshake()
1183 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_rfk_power_save()
1400 struct rtw_gapk_info *txgapk = &rtwdev->dm_info.gapk; in _rtw8822c_txgapk_write_gain_bb_table()
1427 v = txgapk->rf3f_bp[band][gain][path]; in _rtw8822c_txgapk_write_gain_bb_table()
1430 tmp_3f = txgapk->rf3f_bp[band][gain][path]; in _rtw8822c_txgapk_write_gain_bb_table()
1435 txgapk->rf3f_bp[band][gain][path]); in _rtw8822c_txgapk_write_gain_bb_table()
1437 tmp_3f = txgapk->rf3f_bp[band][gain][path]; in _rtw8822c_txgapk_write_gain_bb_table()
1456 __func__, rtwdev->dm_info.gapk.channel); in rtw8822c_txgapk_write_gain_bb_table()
1459 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_txgapk_write_gain_bb_table()
1472 struct rtw_gapk_info *txgapk = &rtwdev->dm_info.gapk; in rtw8822c_txgapk_read_offset()
1473 u8 channel = txgapk->channel; in rtw8822c_txgapk_read_offset()
1518 txgapk->offset[0][path] = (s8)FIELD_GET(BIT_GAPK_RPT0, val); in rtw8822c_txgapk_read_offset()
1519 txgapk->offset[1][path] = (s8)FIELD_GET(BIT_GAPK_RPT1, val); in rtw8822c_txgapk_read_offset()
1520 txgapk->offset[2][path] = (s8)FIELD_GET(BIT_GAPK_RPT2, val); in rtw8822c_txgapk_read_offset()
1521 txgapk->offset[3][path] = (s8)FIELD_GET(BIT_GAPK_RPT3, val); in rtw8822c_txgapk_read_offset()
1522 txgapk->offset[4][path] = (s8)FIELD_GET(BIT_GAPK_RPT4, val); in rtw8822c_txgapk_read_offset()
1523 txgapk->offset[5][path] = (s8)FIELD_GET(BIT_GAPK_RPT5, val); in rtw8822c_txgapk_read_offset()
1524 txgapk->offset[6][path] = (s8)FIELD_GET(BIT_GAPK_RPT6, val); in rtw8822c_txgapk_read_offset()
1525 txgapk->offset[7][path] = (s8)FIELD_GET(BIT_GAPK_RPT7, val); in rtw8822c_txgapk_read_offset()
1530 txgapk->offset[8][path] = (s8)FIELD_GET(BIT_GAPK_RPT0, val); in rtw8822c_txgapk_read_offset()
1531 txgapk->offset[9][path] = (s8)FIELD_GET(BIT_GAPK_RPT1, val); in rtw8822c_txgapk_read_offset()
1534 if (txgapk->offset[i][path] & BIT(3)) in rtw8822c_txgapk_read_offset()
1535 txgapk->offset[i][path] = txgapk->offset[i][path] | in rtw8822c_txgapk_read_offset()
1540 txgapk->offset[i][path], i, path); in rtw8822c_txgapk_read_offset()
1547 struct rtw_gapk_info *txgapk = &rtwdev->dm_info.gapk; in rtw8822c_txgapk_calculate_offset()
1548 u8 channel = txgapk->channel; in rtw8822c_txgapk_calculate_offset()
1621 if (path >= rtwdev->hal.rf_path_num) in rtw8822c_txgapk_rf_restore()
1655 struct rtw_gapk_info *txgapk = &rtwdev->dm_info.gapk; in rtw8822c_txgapk_write_tx_gain()
1658 u8 path, band = RF_BAND_2G_OFDM, channel = txgapk->channel; in rtw8822c_txgapk_write_tx_gain()
1679 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_txgapk_write_tx_gain()
1683 v = txgapk->rf3f_bp[band][j][path]; in rtw8822c_txgapk_write_tx_gain()
1687 offset_tmp[i] += txgapk->offset[j][path]; in rtw8822c_txgapk_write_tx_gain()
1688 txgapk->fianl_offset[i][path] = offset_tmp[i]; in rtw8822c_txgapk_write_tx_gain()
1691 v = txgapk->rf3f_bp[band][i][path]; in rtw8822c_txgapk_write_tx_gain()
1695 txgapk->rf3f_bp[band][i][path]); in rtw8822c_txgapk_write_tx_gain()
1697 txgapk->rf3f_fs[path][i] = offset_tmp[i]; in rtw8822c_txgapk_write_tx_gain()
1710 txgapk->rf3f_bp[band][i][path], in rtw8822c_txgapk_write_tx_gain()
1725 struct rtw_gapk_info *txgapk = &rtwdev->dm_info.gapk; in rtw8822c_txgapk_save_all_tx_gain_table()
1733 if (rtwdev->dm_info.dm_flags & BIT(RTW_DM_CAP_TXGAPK)) in rtw8822c_txgapk_save_all_tx_gain_table()
1738 if (txgapk->read_txgain == 1) { in rtw8822c_txgapk_save_all_tx_gain_table()
1740 "[TXGAPK] Already Read txgapk->read_txgain return!!!\n"); in rtw8822c_txgapk_save_all_tx_gain_table()
1746 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_txgapk_save_all_tx_gain_table()
1765 txgapk->rf3f_bp[band][gain][path] = v & BIT_DATA_L; in rtw8822c_txgapk_save_all_tx_gain_table()
1769 txgapk->rf3f_bp[band][gain][path], in rtw8822c_txgapk_save_all_tx_gain_table()
1779 txgapk->read_txgain = 1; in rtw8822c_txgapk_save_all_tx_gain_table()
1785 struct rtw_gapk_info *txgapk = &rtwdev->dm_info.gapk; in rtw8822c_txgapk()
1793 if (txgapk->read_txgain == 0) { in rtw8822c_txgapk()
1795 "[TXGAPK] txgapk->read_txgain == 0 return!!!\n"); in rtw8822c_txgapk()
1799 if (rtwdev->efuse.power_track_type >= 4 && in rtw8822c_txgapk()
1800 rtwdev->efuse.power_track_type <= 7) { in rtw8822c_txgapk()
1809 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_txgapk()
1810 txgapk->channel = rtw_read_rf(rtwdev, path, in rtw8822c_txgapk()
1826 struct rtw_dm_info *dm = &rtwdev->dm_info; in rtw8822c_do_gapk()
1828 if (dm->dm_flags & BIT(RTW_DM_CAP_TXGAPK)) { in rtw8822c_do_gapk()
1848 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_pwrtrack_init()
1852 dm_info->delta_power_index[path] = 0; in rtw8822c_pwrtrack_init()
1853 ewma_thermal_init(&dm_info->avg_thermal[path]); in rtw8822c_pwrtrack_init()
1854 dm_info->thermal_avg[path] = 0xff; in rtw8822c_pwrtrack_init()
1857 dm_info->pwr_trk_triggered = false; in rtw8822c_pwrtrack_init()
1858 dm_info->thermal_meter_k = rtwdev->efuse.thermal_meter_k; in rtw8822c_pwrtrack_init()
1859 dm_info->thermal_meter_lck = rtwdev->efuse.thermal_meter_k; in rtw8822c_pwrtrack_init()
1864 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_phy_set_param()
1865 struct rtw_hal *hal = &rtwdev->hal; in rtw8822c_phy_set_param()
1888 crystal_cap = rtwdev->efuse.crystal_cap & 0x7f; in rtw8822c_phy_set_param()
1896 rtw8822c_config_trx_mode(rtwdev, hal->antenna_tx, hal->antenna_rx, in rtw8822c_phy_set_param()
1905 dm_info->cck_gi_u_bnd = ((cck_gi_u_bnd_msb << 4) | (cck_gi_u_bnd_lsb)); in rtw8822c_phy_set_param()
1906 dm_info->cck_gi_l_bnd = ((cck_gi_l_bnd_msb << 4) | (cck_gi_l_bnd_lsb)); in rtw8822c_phy_set_param()
2034 /* protocol configuration */ in rtw8822c_mac_init()
2054 /* EDCA configuration */ in rtw8822c_mac_init()
2065 /* MAC clock configuration */ in rtw8822c_mac_init()
2077 /* Set beacon cotnrol - enable TSF and other related functions */ in rtw8822c_mac_init()
2086 /* WMAC configuration */ in rtw8822c_mac_init()
2117 /* rx ignore configuration */ in rtw8822c_mac_init()
2126 /* Interrupt migration configuration */ in rtw8822c_mac_init()
2167 ret = __dump_fw_8822c(rtwdev, EMEM); in rtw8822c_dump_fw_crash()
2261 rtw_write32_mask(rtwdev, REG_RXIGI, 0x7f, igi - 2); in rtw8822c_toggle_igi()
2262 rtw_write32_mask(rtwdev, REG_RXIGI, 0x7f00, igi - 2); in rtw8822c_toggle_igi()
2550 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in query_phy_status_page0()
2554 s8 min_rx_power = -120; in query_phy_status_page0()
2561 l_bnd = dm_info->cck_gi_l_bnd; in query_phy_status_page0()
2562 u_bnd = dm_info->cck_gi_u_bnd; in query_phy_status_page0()
2566 rx_power[RF_PATH_A] += (l_bnd - gain_a) << 1; in query_phy_status_page0()
2568 rx_power[RF_PATH_A] -= (gain_a - u_bnd) << 1; in query_phy_status_page0()
2570 rx_power[RF_PATH_B] += (l_bnd - gain_b) << 1; in query_phy_status_page0()
2572 rx_power[RF_PATH_B] -= (gain_b - u_bnd) << 1; in query_phy_status_page0()
2574 rx_power[RF_PATH_A] -= 110; in query_phy_status_page0()
2575 rx_power[RF_PATH_B] -= 110; in query_phy_status_page0()
2579 channel = rtwdev->hal.current_channel; in query_phy_status_page0()
2582 pkt_stat->rx_power[RF_PATH_A] = rx_power[RF_PATH_A]; in query_phy_status_page0()
2583 pkt_stat->rx_power[RF_PATH_B] = rx_power[RF_PATH_B]; in query_phy_status_page0()
2585 for (path = 0; path <= rtwdev->hal.rf_path_num; path++) { in query_phy_status_page0()
2586 rssi = rtw_phy_rf_power_2_rssi(&pkt_stat->rx_power[path], 1); in query_phy_status_page0()
2587 dm_info->rssi[path] = rssi; in query_phy_status_page0()
2590 pkt_stat->rssi = rtw_phy_rf_power_2_rssi(pkt_stat->rx_power, 1); in query_phy_status_page0()
2591 pkt_stat->bw = RTW_CHANNEL_WIDTH_20; in query_phy_status_page0()
2592 pkt_stat->signal_power = max(pkt_stat->rx_power[RF_PATH_A], in query_phy_status_page0()
2599 struct rtw_path_div *p_div = &rtwdev->dm_path_div; in query_phy_status_page1()
2600 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in query_phy_status_page1()
2602 s8 min_rx_power = -120; in query_phy_status_page1()
2609 if (pkt_stat->rate > DESC_RATE11M && pkt_stat->rate < DESC_RATEMCS0) in query_phy_status_page1()
2615 bw = rtwdev->hal.current_band_width; in query_phy_status_page1()
2626 pkt_stat->rx_power[RF_PATH_A] = GET_PHY_STAT_P1_PWDB_A(phy_status) - 110; in query_phy_status_page1()
2627 pkt_stat->rx_power[RF_PATH_B] = GET_PHY_STAT_P1_PWDB_B(phy_status) - 110; in query_phy_status_page1()
2628 pkt_stat->rssi = rtw_phy_rf_power_2_rssi(pkt_stat->rx_power, 2); in query_phy_status_page1()
2629 pkt_stat->bw = bw; in query_phy_status_page1()
2630 pkt_stat->signal_power = max3(pkt_stat->rx_power[RF_PATH_A], in query_phy_status_page1()
2631 pkt_stat->rx_power[RF_PATH_B], in query_phy_status_page1()
2634 dm_info->curr_rx_rate = pkt_stat->rate; in query_phy_status_page1()
2636 pkt_stat->rx_evm[RF_PATH_A] = GET_PHY_STAT_P1_RXEVM_A(phy_status); in query_phy_status_page1()
2637 pkt_stat->rx_evm[RF_PATH_B] = GET_PHY_STAT_P1_RXEVM_B(phy_status); in query_phy_status_page1()
2639 pkt_stat->rx_snr[RF_PATH_A] = GET_PHY_STAT_P1_RXSNR_A(phy_status); in query_phy_status_page1()
2640 pkt_stat->rx_snr[RF_PATH_B] = GET_PHY_STAT_P1_RXSNR_B(phy_status); in query_phy_status_page1()
2642 pkt_stat->cfo_tail[RF_PATH_A] = GET_PHY_STAT_P1_CFO_TAIL_A(phy_status); in query_phy_status_page1()
2643 pkt_stat->cfo_tail[RF_PATH_B] = GET_PHY_STAT_P1_CFO_TAIL_B(phy_status); in query_phy_status_page1()
2645 for (path = 0; path <= rtwdev->hal.rf_path_num; path++) { in query_phy_status_page1()
2646 rssi = rtw_phy_rf_power_2_rssi(&pkt_stat->rx_power[path], 1); in query_phy_status_page1()
2647 dm_info->rssi[path] = rssi; in query_phy_status_page1()
2649 p_div->path_a_sum += rssi; in query_phy_status_page1()
2650 p_div->path_a_cnt++; in query_phy_status_page1()
2652 p_div->path_b_sum += rssi; in query_phy_status_page1()
2653 p_div->path_b_cnt++; in query_phy_status_page1()
2655 dm_info->rx_snr[path] = pkt_stat->rx_snr[path] >> 1; in query_phy_status_page1()
2656 dm_info->cfo_tail[path] = (pkt_stat->cfo_tail[path] * 5) >> 1; in query_phy_status_page1()
2658 rx_evm = pkt_stat->rx_evm[path]; in query_phy_status_page1()
2664 evm_dbm = ((u8)-rx_evm >> 1); in query_phy_status_page1()
2666 dm_info->rx_evm_dbm[path] = evm_dbm; in query_phy_status_page1()
2696 u32 desc_sz = rtwdev->chip->rx_pkt_desc_sz; in rtw8822c_query_rx_desc()
2701 pkt_stat->phy_status = GET_RX_DESC_PHYST(rx_desc); in rtw8822c_query_rx_desc()
2702 pkt_stat->icv_err = GET_RX_DESC_ICV_ERR(rx_desc); in rtw8822c_query_rx_desc()
2703 pkt_stat->crc_err = GET_RX_DESC_CRC32(rx_desc); in rtw8822c_query_rx_desc()
2704 pkt_stat->decrypted = !GET_RX_DESC_SWDEC(rx_desc) && in rtw8822c_query_rx_desc()
2706 pkt_stat->is_c2h = GET_RX_DESC_C2H(rx_desc); in rtw8822c_query_rx_desc()
2707 pkt_stat->pkt_len = GET_RX_DESC_PKT_LEN(rx_desc); in rtw8822c_query_rx_desc()
2708 pkt_stat->drv_info_sz = GET_RX_DESC_DRV_INFO_SIZE(rx_desc); in rtw8822c_query_rx_desc()
2709 pkt_stat->shift = GET_RX_DESC_SHIFT(rx_desc); in rtw8822c_query_rx_desc()
2710 pkt_stat->rate = GET_RX_DESC_RX_RATE(rx_desc); in rtw8822c_query_rx_desc()
2711 pkt_stat->cam_id = GET_RX_DESC_MACID(rx_desc); in rtw8822c_query_rx_desc()
2712 pkt_stat->ppdu_cnt = GET_RX_DESC_PPDU_CNT(rx_desc); in rtw8822c_query_rx_desc()
2713 pkt_stat->tsf_low = GET_RX_DESC_TSFL(rx_desc); in rtw8822c_query_rx_desc()
2715 /* drv_info_sz is in unit of 8-bytes */ in rtw8822c_query_rx_desc()
2716 pkt_stat->drv_info_sz *= 8; in rtw8822c_query_rx_desc()
2719 if (pkt_stat->is_c2h) in rtw8822c_query_rx_desc()
2722 hdr = (struct ieee80211_hdr *)(rx_desc + desc_sz + pkt_stat->shift + in rtw8822c_query_rx_desc()
2723 pkt_stat->drv_info_sz); in rtw8822c_query_rx_desc()
2724 pkt_stat->hdr = hdr; in rtw8822c_query_rx_desc()
2725 if (pkt_stat->phy_status) { in rtw8822c_query_rx_desc()
2726 phy_status = rx_desc + desc_sz + pkt_stat->shift; in rtw8822c_query_rx_desc()
2737 struct rtw_hal *hal = &rtwdev->hal; in rtw8822c_set_write_tx_power_ref()
2742 for (path = 0; path < hal->rf_path_num; path++) { in rtw8822c_set_write_tx_power_ref()
2747 for (path = 0; path < hal->rf_path_num; path++) { in rtw8822c_set_write_tx_power_ref()
2778 struct rtw_hal *hal = &rtwdev->hal; in rtw8822c_set_tx_power_index()
2780 u8 pwr_ref_cck[2] = {hal->tx_pwr_tbl[RF_PATH_A][DESC_RATE11M], in rtw8822c_set_tx_power_index()
2781 hal->tx_pwr_tbl[RF_PATH_B][DESC_RATE11M]}; in rtw8822c_set_tx_power_index()
2782 u8 pwr_ref_ofdm[2] = {hal->tx_pwr_tbl[RF_PATH_A][DESC_RATEMCS7], in rtw8822c_set_tx_power_index()
2783 hal->tx_pwr_tbl[RF_PATH_B][DESC_RATEMCS7]}; in rtw8822c_set_tx_power_index()
2792 pwr_a = hal->tx_pwr_tbl[RF_PATH_A][rate]; in rtw8822c_set_tx_power_index()
2793 pwr_b = hal->tx_pwr_tbl[RF_PATH_B][rate]; in rtw8822c_set_tx_power_index()
2795 diff_a = (s8)pwr_a - (s8)pwr_ref_cck[0]; in rtw8822c_set_tx_power_index()
2796 diff_b = (s8)pwr_b - (s8)pwr_ref_cck[1]; in rtw8822c_set_tx_power_index()
2798 diff_a = (s8)pwr_a - (s8)pwr_ref_ofdm[0]; in rtw8822c_set_tx_power_index()
2799 diff_b = (s8)pwr_b - (s8)pwr_ref_ofdm[1]; in rtw8822c_set_tx_power_index()
2803 rtw8822c_set_tx_power_diff(rtwdev, rate - 3, in rtw8822c_set_tx_power_index()
2813 struct rtw_hal *hal = &rtwdev->hal; in rtw8822c_set_antenna()
2822 return -EINVAL; in rtw8822c_set_antenna()
2832 return -EINVAL; in rtw8822c_set_antenna()
2835 hal->antenna_tx = antenna_tx; in rtw8822c_set_antenna()
2836 hal->antenna_rx = antenna_rx; in rtw8822c_set_antenna()
2854 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_false_alarm_statistics()
2885 dm_info->cck_fa_cnt = cck_fa_cnt; in rtw8822c_false_alarm_statistics()
2886 dm_info->ofdm_fa_cnt = ofdm_fa_cnt; in rtw8822c_false_alarm_statistics()
2887 dm_info->total_fa_cnt = ofdm_fa_cnt; in rtw8822c_false_alarm_statistics()
2888 dm_info->total_fa_cnt += cck_enable ? cck_fa_cnt : 0; in rtw8822c_false_alarm_statistics()
2891 dm_info->cck_ok_cnt = crc32_cnt & 0xffff; in rtw8822c_false_alarm_statistics()
2892 dm_info->cck_err_cnt = (crc32_cnt & 0xffff0000) >> 16; in rtw8822c_false_alarm_statistics()
2894 dm_info->ofdm_ok_cnt = crc32_cnt & 0xffff; in rtw8822c_false_alarm_statistics()
2895 dm_info->ofdm_err_cnt = (crc32_cnt & 0xffff0000) >> 16; in rtw8822c_false_alarm_statistics()
2897 dm_info->ht_ok_cnt = crc32_cnt & 0xffff; in rtw8822c_false_alarm_statistics()
2898 dm_info->ht_err_cnt = (crc32_cnt & 0xffff0000) >> 16; in rtw8822c_false_alarm_statistics()
2900 dm_info->vht_ok_cnt = crc32_cnt & 0xffff; in rtw8822c_false_alarm_statistics()
2901 dm_info->vht_err_cnt = (crc32_cnt & 0xffff0000) >> 16; in rtw8822c_false_alarm_statistics()
2904 dm_info->ofdm_cca_cnt = ((cca32_cnt & 0xffff0000) >> 16); in rtw8822c_false_alarm_statistics()
2905 dm_info->cck_cca_cnt = cca32_cnt & 0xffff; in rtw8822c_false_alarm_statistics()
2906 dm_info->total_cca_cnt = dm_info->ofdm_cca_cnt; in rtw8822c_false_alarm_statistics()
2908 dm_info->total_cca_cnt += dm_info->cck_cca_cnt; in rtw8822c_false_alarm_statistics()
2972 /* enable PTA (3-wire function form BT side) */ in rtw8822c_coex_cfg_init()
2991 struct rtw_coex *coex = &rtwdev->coex; in rtw8822c_coex_cfg_gnt_fix()
2992 struct rtw_coex_stat *coex_stat = &coex->stat; in rtw8822c_coex_cfg_gnt_fix()
2993 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw8822c_coex_cfg_gnt_fix()
2996 if (coex_stat->gnt_workaround_state == coex_stat->wl_coex_mode) in rtw8822c_coex_cfg_gnt_fix()
2999 coex_stat->gnt_workaround_state = coex_stat->wl_coex_mode; in rtw8822c_coex_cfg_gnt_fix()
3001 if ((coex_stat->kt_ver == 0 && coex->under_5g) || coex->freerun) in rtw8822c_coex_cfg_gnt_fix()
3006 /* BT at S1 for Shared-Ant */ in rtw8822c_coex_cfg_gnt_fix()
3007 if (efuse->share_ant) in rtw8822c_coex_cfg_gnt_fix()
3012 /* WL-S0 2G RF TRX cannot be masked by GNT_BT in rtw8822c_coex_cfg_gnt_fix()
3013 * enable "WLS0 BB chage RF mode if GNT_BT = 1" for shared-antenna type in rtw8822c_coex_cfg_gnt_fix()
3016 * enable "DAC off if GNT_WL = 0" for non-shared-antenna in rtw8822c_coex_cfg_gnt_fix()
3020 if (coex_stat->wl_coex_mode == COEX_WLINK_2GFREE) { in rtw8822c_coex_cfg_gnt_fix()
3032 /* disable WL-S1 BB chage RF mode if GNT_BT in rtw8822c_coex_cfg_gnt_fix()
3038 /* disable WL-S0 BB chage RF mode if wifi is at 5G, in rtw8822c_coex_cfg_gnt_fix()
3041 if (coex_stat->wl_coex_mode == COEX_WLINK_2GFREE) { in rtw8822c_coex_cfg_gnt_fix()
3046 } else if (coex_stat->wl_coex_mode == COEX_WLINK_5G || in rtw8822c_coex_cfg_gnt_fix()
3047 coex->under_5g || !efuse->share_ant) { in rtw8822c_coex_cfg_gnt_fix()
3048 if (coex_stat->kt_ver >= 3) { in rtw8822c_coex_cfg_gnt_fix()
3058 /* shared-antenna */ in rtw8822c_coex_cfg_gnt_fix()
3061 if (coex_stat->kt_ver >= 3) { in rtw8822c_coex_cfg_gnt_fix()
3079 struct rtw_coex *coex = &rtwdev->coex; in rtw8822c_coex_cfg_rfe_type()
3080 struct rtw_coex_rfe *coex_rfe = &coex->rfe; in rtw8822c_coex_cfg_rfe_type()
3081 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw8822c_coex_cfg_rfe_type()
3083 coex_rfe->rfe_module_type = rtwdev->efuse.rfe_option; in rtw8822c_coex_cfg_rfe_type()
3084 coex_rfe->ant_switch_polarity = 0; in rtw8822c_coex_cfg_rfe_type()
3085 coex_rfe->ant_switch_exist = false; in rtw8822c_coex_cfg_rfe_type()
3086 coex_rfe->ant_switch_with_bt = false; in rtw8822c_coex_cfg_rfe_type()
3087 coex_rfe->ant_switch_diversity = false; in rtw8822c_coex_cfg_rfe_type()
3089 if (efuse->share_ant) in rtw8822c_coex_cfg_rfe_type()
3090 coex_rfe->wlg_at_btg = true; in rtw8822c_coex_cfg_rfe_type()
3092 coex_rfe->wlg_at_btg = false; in rtw8822c_coex_cfg_rfe_type()
3102 struct rtw_coex *coex = &rtwdev->coex; in rtw8822c_coex_cfg_wl_tx_power()
3103 struct rtw_coex_dm *coex_dm = &coex->dm; in rtw8822c_coex_cfg_wl_tx_power()
3105 if (wl_pwr == coex_dm->cur_wl_pwr_lvl) in rtw8822c_coex_cfg_wl_tx_power()
3108 coex_dm->cur_wl_pwr_lvl = wl_pwr; in rtw8822c_coex_cfg_wl_tx_power()
3113 struct rtw_coex *coex = &rtwdev->coex; in rtw8822c_coex_cfg_wl_rx_gain()
3114 struct rtw_coex_dm *coex_dm = &coex->dm; in rtw8822c_coex_cfg_wl_rx_gain()
3116 if (low_gain == coex_dm->cur_wl_rx_low_gain_en) in rtw8822c_coex_cfg_wl_rx_gain()
3119 coex_dm->cur_wl_rx_low_gain_en = low_gain; in rtw8822c_coex_cfg_wl_rx_gain()
3121 if (coex_dm->cur_wl_rx_low_gain_en) { in rtw8822c_coex_cfg_wl_rx_gain()
3122 rtw_dbg(rtwdev, RTW_DBG_COEX, "[BTCoex], Hi-Li Table On!\n"); in rtw8822c_coex_cfg_wl_rx_gain()
3131 rtw_dbg(rtwdev, RTW_DBG_COEX, "[BTCoex], Hi-Li Table Off!\n"); in rtw8822c_coex_cfg_wl_rx_gain()
3153 if (vif->net_type == RTW_NET_AP_MODE) in rtw8822c_bf_enable_bfee_su()
3184 if (bfee->role == RTW_BFEE_SU) in rtw8822c_bf_config_bfee()
3186 else if (bfee->role == RTW_BFEE_MU) in rtw8822c_bf_config_bfee()
3201 const struct dpk_cfg_pair *p = tbl->data; in rtw8822c_parse_tbl_dpk()
3202 const struct dpk_cfg_pair *end = p + tbl->size / 3; in rtw8822c_parse_tbl_dpk()
3207 rtw_write32_mask(rtwdev, p->addr, p->bitmask, p->data); in rtw8822c_parse_tbl_dpk()
3212 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_set_gnt_wl()
3215 dpk_info->gnt_control = rtw_read32(rtwdev, 0x70); in rtw8822c_dpk_set_gnt_wl()
3216 dpk_info->gnt_value = rtw_coex_read_indirect_reg(rtwdev, 0x38); in rtw8822c_dpk_set_gnt_wl()
3221 dpk_info->gnt_value); in rtw8822c_dpk_set_gnt_wl()
3222 rtw_write32(rtwdev, 0x70, dpk_info->gnt_control); in rtw8822c_dpk_set_gnt_wl()
3278 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_information()
3285 dpk_info->dpk_band = 1 << band_shift; in rtw8822c_dpk_information()
3286 dpk_info->dpk_ch = FIELD_GET(0xff, reg); in rtw8822c_dpk_information()
3287 dpk_info->dpk_bw = FIELD_GET(0x3000, reg); in rtw8822c_dpk_information()
3309 dc_i = 0x1000 - dc_i; in rtw8822c_dpk_dc_corr_check()
3311 dc_q = 0x1000 - dc_q; in rtw8822c_dpk_dc_corr_check()
3358 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_dpk_pre_setting()
3361 if (rtwdev->dm_info.dpk_info.dpk_band == RTW_BAND_2G) in rtw8822c_dpk_pre_setting()
3385 if (rtwdev->dm_info.dpk_info.dpk_band == RTW_BAND_2G) { in rtw8822c_dpk_rf_setting()
3399 if (rtwdev->dm_info.dpk_info.dpk_bw == DPK_CHANNEL_WIDTH_80) in rtw8822c_dpk_rf_setting()
3414 u8 bw = rtwdev->dm_info.dpk_info.dpk_bw == DPK_CHANNEL_WIDTH_80 ? 2 : 0; in rtw8822c_dpk_get_cmd()
3450 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DPK] one-shot over 20ms\n"); in rtw8822c_dpk_one_shot()
3463 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DPK] one-shot over 20ms\n"); in rtw8822c_dpk_one_shot()
3513 i_val = 0x10000 - i_val; in rtw8822c_dpk_pas_read()
3515 q_val = 0x10000 - q_val; in rtw8822c_dpk_pas_read()
3539 tindex = ARRAY_SIZE(table_fraction) - 1; in rtw8822c_psd_log2base()
3543 result = val_integerd_b * 100 - val_fractiond_b; in rtw8822c_psd_log2base()
3587 loss_db = 3 * rtw8822c_psd_log2base(loss >> 13) - 3870; in rtw8822c_dpk_agc_loss_chk()
3612 data->txbb = (u8)rtw_read_rf(rtwdev, data->path, RF_TX_GAIN, in rtw8822c_gain_check_state()
3614 data->pga = (u8)rtw_read_rf(rtwdev, data->path, RF_MODE_TRXAGC, in rtw8822c_gain_check_state()
3617 if (data->loss_only) { in rtw8822c_gain_check_state()
3622 state = rtw8822c_dpk_agc_gain_chk(rtwdev, data->path, in rtw8822c_gain_check_state()
3623 data->limited_pga); in rtw8822c_gain_check_state()
3624 if (state == RTW_DPK_GAIN_CHECK && data->gain_only) in rtw8822c_gain_check_state()
3630 data->agc_cnt++; in rtw8822c_gain_check_state()
3631 if (data->agc_cnt >= 6) in rtw8822c_gain_check_state()
3640 u8 pga = data->pga; in rtw8822c_gain_large_state()
3643 rtw_write_rf(rtwdev, data->path, RF_MODE_TRXAGC, BIT_RXAGC, 0xc); in rtw8822c_gain_large_state()
3645 rtw_write_rf(rtwdev, data->path, RF_MODE_TRXAGC, BIT_RXAGC, 0x0); in rtw8822c_gain_large_state()
3647 data->limited_pga = 1; in rtw8822c_gain_large_state()
3655 u8 pga = data->pga; in rtw8822c_gain_less_state()
3658 rtw_write_rf(rtwdev, data->path, RF_MODE_TRXAGC, BIT_RXAGC, 0xc); in rtw8822c_gain_less_state()
3660 rtw_write_rf(rtwdev, data->path, RF_MODE_TRXAGC, BIT_RXAGC, 0xf); in rtw8822c_gain_less_state()
3662 data->limited_pga = 1; in rtw8822c_gain_less_state()
3672 if (data->txbb == txbb_bound[is_large]) in rtw8822c_gl_state()
3676 data->txbb -= 2; in rtw8822c_gl_state()
3678 data->txbb += 3; in rtw8822c_gl_state()
3680 rtw_write_rf(rtwdev, data->path, RF_TX_GAIN, BIT_GAIN_TXBB, data->txbb); in rtw8822c_gl_state()
3681 data->limited_pga = 0; in rtw8822c_gl_state()
3701 u8 path = data->path; in rtw8822c_loss_check_state()
3757 coef_q = ((0x2000 - coef_q) & 0x1fff) - 1; in rtw8822c_dpk_coef_transfer()
3773 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_coef_tbl_apply()
3779 dpk_info->coef[path][i] = rtw8822c_dpk_coef_transfer(rtwdev); in rtw8822c_dpk_coef_tbl_apply()
3800 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_coef_read()
3805 coef_i = FIELD_GET(0x1fff0000, dpk_info->coef[path][addr]); in rtw8822c_dpk_coef_read()
3806 coef_q = FIELD_GET(0x1fff, dpk_info->coef[path][addr]); in rtw8822c_dpk_coef_read()
3818 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_coef_write()
3833 coef = dpk_info->coef[path][addr]; in rtw8822c_dpk_coef_write()
3842 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_fill_result()
3847 rtw_write8(rtwdev, REG_DPD_AGC, (u8)(dpk_txagc - 6)); in rtw8822c_dpk_fill_result()
3851 dpk_info->result[path] = result; in rtw8822c_dpk_fill_result()
3852 dpk_info->dpk_txagc[path] = rtw_read8(rtwdev, REG_DPD_AGC); in rtw8822c_dpk_fill_result()
3859 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_gainloss()
3882 tx_bb = tx_bb - tx_agc_search; in rtw8822c_dpk_gainloss()
3886 tx_agc = ori_txagc - (ori_txbb - tx_bb); in rtw8822c_dpk_gainloss()
3890 dpk_info->thermal_dpk_delta[path] = abs(t2 - t1); in rtw8822c_dpk_gainloss()
3914 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_cal_gs()
3935 if (dpk_info->dpk_bw == DPK_CHANNEL_WIDTH_80) { in rtw8822c_dpk_cal_gs()
3979 dpk_info->dpk_gs[path] = tmp_gs; in rtw8822c_dpk_cal_gs()
3984 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_cal_coef1()
4000 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_dpk_cal_coef1()
4001 i_scaling = 0x16c00 / dpk_info->dpk_gs[path]; in rtw8822c_dpk_cal_coef1()
4018 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_on()
4025 if (test_bit(path, dpk_info->dpk_path_ok)) in rtw8822c_dpk_on()
4050 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_result_reset()
4053 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_dpk_result_reset()
4054 clear_bit(path, dpk_info->dpk_path_ok); in rtw8822c_dpk_result_reset()
4059 dpk_info->dpk_txagc[path] = 0; in rtw8822c_dpk_result_reset()
4060 dpk_info->result[path] = 0; in rtw8822c_dpk_result_reset()
4061 dpk_info->dpk_gs[path] = 0x5b; in rtw8822c_dpk_result_reset()
4062 dpk_info->pre_pwsf[path] = 0; in rtw8822c_dpk_result_reset()
4063 dpk_info->thermal_dpk[path] = rtw8822c_dpk_thermal_read(rtwdev, in rtw8822c_dpk_result_reset()
4070 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_calibrate()
4085 if (dpk_info->result[path]) in rtw8822c_dpk_calibrate()
4086 set_bit(path, dpk_info->dpk_path_ok); in rtw8822c_dpk_calibrate()
4100 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_enable_disable()
4106 dpk_info->is_dpk_pwr_on); in rtw8822c_dpk_enable_disable()
4108 dpk_info->is_dpk_pwr_on); in rtw8822c_dpk_enable_disable()
4110 if (test_bit(RF_PATH_A, dpk_info->dpk_path_ok)) { in rtw8822c_dpk_enable_disable()
4112 rtw_write8(rtwdev, REG_DPD_CTL0_S0, dpk_info->dpk_gs[RF_PATH_A]); in rtw8822c_dpk_enable_disable()
4114 if (test_bit(RF_PATH_B, dpk_info->dpk_path_ok)) { in rtw8822c_dpk_enable_disable()
4116 rtw_write8(rtwdev, REG_DPD_CTL0_S1, dpk_info->dpk_gs[RF_PATH_B]); in rtw8822c_dpk_enable_disable()
4122 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_reload_data()
4125 if (!test_bit(RF_PATH_A, dpk_info->dpk_path_ok) && in rtw8822c_dpk_reload_data()
4126 !test_bit(RF_PATH_B, dpk_info->dpk_path_ok) && in rtw8822c_dpk_reload_data()
4127 dpk_info->dpk_ch == 0) in rtw8822c_dpk_reload_data()
4130 for (path = 0; path < rtwdev->hal.rf_path_num; path++) { in rtw8822c_dpk_reload_data()
4133 if (dpk_info->dpk_band == RTW_BAND_2G) in rtw8822c_dpk_reload_data()
4138 rtw_write8(rtwdev, REG_DPD_AGC, dpk_info->dpk_txagc[path]); in rtw8822c_dpk_reload_data()
4141 test_bit(path, dpk_info->dpk_path_ok)); in rtw8822c_dpk_reload_data()
4149 dpk_info->dpk_gs[path]); in rtw8822c_dpk_reload_data()
4152 dpk_info->dpk_gs[path]); in rtw8822c_dpk_reload_data()
4159 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_reload()
4162 dpk_info->is_reload = false; in rtw8822c_dpk_reload()
4166 if (channel == dpk_info->dpk_ch) { in rtw8822c_dpk_reload()
4168 "[DPK] DPK reload for CH%d!!\n", dpk_info->dpk_ch); in rtw8822c_dpk_reload()
4170 dpk_info->is_reload = true; in rtw8822c_dpk_reload()
4173 return dpk_info->is_reload; in rtw8822c_dpk_reload()
4178 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_do_dpk()
4189 if (!dpk_info->is_dpk_pwr_on) { in rtw8822c_do_dpk()
4197 ewma_thermal_init(&dpk_info->avg_thermal[path]); in rtw8822c_do_dpk()
4213 for (path = 0; path < rtwdev->hal.rf_path_num; path++) in rtw8822c_do_dpk()
4229 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info; in rtw8822c_dpk_track()
4234 if (dpk_info->thermal_dpk[0] == 0 && dpk_info->thermal_dpk[1] == 0) in rtw8822c_dpk_track()
4239 ewma_thermal_add(&dpk_info->avg_thermal[path], in rtw8822c_dpk_track()
4242 ewma_thermal_read(&dpk_info->avg_thermal[path]); in rtw8822c_dpk_track()
4243 delta_dpk[path] = dpk_info->thermal_dpk[path] - in rtw8822c_dpk_track()
4245 offset[path] = delta_dpk[path] - in rtw8822c_dpk_track()
4246 dpk_info->thermal_dpk_delta[path]; in rtw8822c_dpk_track()
4249 if (offset[path] != dpk_info->pre_pwsf[path]) { in rtw8822c_dpk_track()
4254 dpk_info->pre_pwsf[path] = offset[path]; in rtw8822c_dpk_track()
4262 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_set_crystal_cap_reg()
4263 struct rtw_cfo_track *cfo = &dm_info->cfo_track; in rtw8822c_set_crystal_cap_reg()
4267 cfo->crystal_cap = crystal_cap; in rtw8822c_set_crystal_cap_reg()
4273 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_set_crystal_cap()
4274 struct rtw_cfo_track *cfo = &dm_info->cfo_track; in rtw8822c_set_crystal_cap()
4276 if (cfo->crystal_cap == crystal_cap) in rtw8822c_set_crystal_cap()
4284 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_cfo_tracking_reset()
4285 struct rtw_cfo_track *cfo = &dm_info->cfo_track; in rtw8822c_cfo_tracking_reset()
4287 cfo->is_adjust = true; in rtw8822c_cfo_tracking_reset()
4289 if (cfo->crystal_cap > rtwdev->efuse.crystal_cap) in rtw8822c_cfo_tracking_reset()
4290 rtw8822c_set_crystal_cap(rtwdev, cfo->crystal_cap - 1); in rtw8822c_cfo_tracking_reset()
4291 else if (cfo->crystal_cap < rtwdev->efuse.crystal_cap) in rtw8822c_cfo_tracking_reset()
4292 rtw8822c_set_crystal_cap(rtwdev, cfo->crystal_cap + 1); in rtw8822c_cfo_tracking_reset()
4297 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_cfo_init()
4298 struct rtw_cfo_track *cfo = &dm_info->cfo_track; in rtw8822c_cfo_init()
4300 cfo->crystal_cap = rtwdev->efuse.crystal_cap; in rtw8822c_cfo_init()
4301 cfo->is_adjust = true; in rtw8822c_cfo_init()
4307 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_cfo_calc_avg()
4308 struct rtw_cfo_track *cfo = &dm_info->cfo_track; in rtw8822c_cfo_calc_avg()
4313 cfo_rpt_sum = REPORT_TO_KHZ(cfo->cfo_tail[i]); in rtw8822c_cfo_calc_avg()
4315 if (cfo->cfo_cnt[i]) in rtw8822c_cfo_calc_avg()
4316 cfo_avg = cfo_rpt_sum / cfo->cfo_cnt[i]; in rtw8822c_cfo_calc_avg()
4324 cfo->cfo_tail[i] = 0; in rtw8822c_cfo_calc_avg()
4325 cfo->cfo_cnt[i] = 0; in rtw8822c_cfo_calc_avg()
4333 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_cfo_need_adjust()
4334 struct rtw_cfo_track *cfo = &dm_info->cfo_track; in rtw8822c_cfo_need_adjust()
4336 if (!cfo->is_adjust) { in rtw8822c_cfo_need_adjust()
4338 cfo->is_adjust = true; in rtw8822c_cfo_need_adjust()
4341 cfo->is_adjust = false; in rtw8822c_cfo_need_adjust()
4345 cfo->is_adjust = false; in rtw8822c_cfo_need_adjust()
4346 rtw8822c_set_crystal_cap(rtwdev, rtwdev->efuse.crystal_cap); in rtw8822c_cfo_need_adjust()
4352 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_cfo_track()
4353 struct rtw_cfo_track *cfo = &dm_info->cfo_track; in rtw8822c_cfo_track()
4354 u8 path_num = rtwdev->hal.rf_path_num; in rtw8822c_cfo_track()
4355 s8 crystal_cap = cfo->crystal_cap; in rtw8822c_cfo_track()
4358 if (rtwdev->sta_cnt != 1) { in rtw8822c_cfo_track()
4363 if (cfo->packet_count == cfo->packet_count_pre) in rtw8822c_cfo_track()
4366 cfo->packet_count_pre = cfo->packet_count; in rtw8822c_cfo_track()
4370 if (cfo->is_adjust) { in rtw8822c_cfo_track()
4373 else if (cfo_avg < -CFO_TRK_ADJ_TH) in rtw8822c_cfo_track()
4374 crystal_cap--; in rtw8822c_cfo_track()
4436 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_phy_cck_pd_set()
4445 rtw_dbg(rtwdev, RTW_DBG_PHY, "lv: (%d) -> (%d) bw=%d nr=%d cck_fa_avg=%d\n", in rtw8822c_phy_cck_pd_set()
4446 dm_info->cck_pd_lv[bw][nrx], new_lvl, bw, nrx, in rtw8822c_phy_cck_pd_set()
4447 dm_info->cck_fa_avg); in rtw8822c_phy_cck_pd_set()
4449 if (dm_info->cck_pd_lv[bw][nrx] == new_lvl) in rtw8822c_phy_cck_pd_set()
4452 cur_lvl = dm_info->cck_pd_lv[bw][nrx]; in rtw8822c_phy_cck_pd_set()
4455 dm_info->cck_fa_avg = CCK_FA_AVG_RESET; in rtw8822c_phy_cck_pd_set()
4458 pd_lvl[new_lvl] - pd_lvl[cur_lvl], in rtw8822c_phy_cck_pd_set()
4459 cs_lvl[new_lvl] - cs_lvl[cur_lvl], in rtw8822c_phy_cck_pd_set()
4461 dm_info->cck_pd_lv[bw][nrx] = new_lvl; in rtw8822c_phy_cck_pd_set()
4467 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_pwrtrack_set()
4472 dm_info->delta_power_index[rf_path]); in rtw8822c_pwrtrack_set()
4476 dm_info->delta_power_index[rf_path]); in rtw8822c_pwrtrack_set()
4487 if (rtwdev->efuse.thermal_meter[path] == 0xff) in rtw8822c_pwr_track_stats()
4498 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_pwr_track_path()
4502 dm_info->delta_power_index[path] = in rtw8822c_pwr_track_path()
4515 for (i = 0; i < rtwdev->hal.rf_path_num; i++) in __rtw8822c_pwr_track()
4519 for (i = 0; i < rtwdev->hal.rf_path_num; i++) in __rtw8822c_pwr_track()
4525 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw8822c_pwr_track()
4526 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_pwr_track()
4528 if (efuse->power_track_type != 0) in rtw8822c_pwr_track()
4531 if (!dm_info->pwr_trk_triggered) { in rtw8822c_pwr_track()
4540 dm_info->pwr_trk_triggered = true; in rtw8822c_pwr_track()
4545 dm_info->pwr_trk_triggered = false; in rtw8822c_pwr_track()
4562 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8822c_adaptivity()
4566 igi = dm_info->igi_history[0]; in rtw8822c_adaptivity()
4567 if (dm_info->edcca_mode == RTW_EDCCA_NORMAL) { in rtw8822c_adaptivity()
4569 h2l = l2h - EDCCA_L2H_H2L_DIFF_NORMAL; in rtw8822c_adaptivity()
4571 if (igi < dm_info->l2h_th_ini - EDCCA_ADC_BACKOFF) in rtw8822c_adaptivity()
4574 l2h = dm_info->l2h_th_ini; in rtw8822c_adaptivity()
4575 h2l = l2h - EDCCA_L2H_H2L_DIFF; in rtw8822c_adaptivity()
4585 const struct rtw_chip_info *chip = rtwdev->chip; in rtw8822c_fill_txdesc_checksum()
4588 words = (pkt_info->pkt_offset * 8 + chip->tx_pkt_desc_sz) / 2; in rtw8822c_fill_txdesc_checksum()
5027 /* Shared-Antenna Coex Table */
5029 {0xffffffff, 0xffffffff}, /* case-0 */
5034 {0xfafafafa, 0xfafafafa}, /* case-5 */
5039 {0x66555555, 0x6a5a5a5a}, /* case-10 */
5044 {0x66555555, 0xaaaaaaaa}, /* case-15 */
5049 {0xaa5555aa, 0x6a5a5a5a}, /* case-20 */
5054 {0xffffffff, 0x5a5a5aaa}, /* case-25 */
5059 {0x66556aaa, 0x6a5a6aaa}, /*case-30*/
5066 /* Non-Shared-Antenna Coex Table */
5068 {0xffffffff, 0xffffffff}, /* case-100 */
5073 {0xfafafafa, 0xfafafafa}, /* case-105 */
5078 {0x66555555, 0x6a5a5a5a}, /* case-110 */
5083 {0xffff55ff, 0xffff55ff}, /* case-115 */
5088 {0xffffffff, 0xaaaaaaaa}, /* case-120 */
5094 /* Shared-Antenna TDMA */
5096 { {0x00, 0x00, 0x00, 0x00, 0x00} }, /* case-0 */
5097 { {0x61, 0x45, 0x03, 0x11, 0x11} }, /* case-1 */
5101 { {0x61, 0x10, 0x03, 0x11, 0x11} }, /* case-5 */
5106 { {0x61, 0x10, 0x03, 0x11, 0x10} }, /* case-10 */
5111 { {0x51, 0x08, 0x07, 0x10, 0x54} }, /* case-15 */
5116 { {0x51, 0x10, 0x03, 0x10, 0x50} }, /* case-20 */
5121 { {0x51, 0x10, 0x03, 0x10, 0x51} }, /* case-25 */
5126 /* Non-Shared-Antenna TDMA */
5128 { {0x00, 0x00, 0x00, 0x00, 0x00} }, /* case-100 */
5133 { {0x61, 0x10, 0x03, 0x11, 0x11} }, /* case-105 */
5138 { {0x61, 0x10, 0x03, 0x11, 0x10} }, /* case-110 */
5143 { {0x51, 0x08, 0x07, 0x10, 0x54} }, /* case-115 */
5148 { {0x51, 0x10, 0x03, 0x10, 0x50} }, /* case-120 */
5152 /* rssi in percentage % (dbm = % - 100) */
5160 {0, 16, false, 7}, /* for WL-CPT */
5170 {0, 16, false, 7}, /* for WL-CPT */
5415 .max_scan_ie_len = (RTW_PROBE_PG_CNT - 1) * TX_PAGE_SIZE,