Lines Matching defs:cfo
2435 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking;
2439 if (!force && cfo->crystal_cap == crystal_cap)
2455 cfo->crystal_cap = sc_xi_val;
2456 cfo->x_cap_ofst = (s8)((int)cfo->crystal_cap - cfo->def_x_cap);
2461 cfo->x_cap_ofst);
2467 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking;
2470 cfo->def_x_cap = cfo->crystal_cap_default & B_AX_XTAL_SC_MASK;
2471 cfo->is_adjust = false;
2472 if (cfo->crystal_cap == cfo->def_x_cap)
2474 cap = cfo->crystal_cap;
2475 cap += (cap > cfo->def_x_cap ? -1 : 1);
2478 "(0x%x) approach to dflt_val=(0x%x)\n", cfo->crystal_cap,
2479 cfo->def_x_cap);
2524 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking;
2527 cfo->crystal_cap_default = efuse->xtal_cap & B_AX_XTAL_SC_MASK;
2528 cfo->crystal_cap = cfo->crystal_cap_default;
2529 cfo->def_x_cap = cfo->crystal_cap;
2530 cfo->x_cap_ub = min_t(int, cfo->def_x_cap + CFO_BOUND, 0x7f);
2531 cfo->x_cap_lb = max_t(int, cfo->def_x_cap - CFO_BOUND, 0x1);
2532 cfo->is_adjust = false;
2533 cfo->divergence_lock_en = false;
2534 cfo->x_cap_ofst = 0;
2535 cfo->lock_cnt = 0;
2536 cfo->rtw89_multi_cfo_mode = RTW89_TP_BASED_AVG_MODE;
2537 cfo->apply_compensation = false;
2538 cfo->residual_cfo_acc = 0;
2540 cfo->crystal_cap_default);
2541 rtw89_phy_cfo_set_crystal_cap(rtwdev, cfo->crystal_cap_default, true);
2544 cfo->cfo_timer_ms = 2000;
2545 cfo->cfo_trig_by_timer_en = false;
2546 cfo->phy_cfo_trk_cnt = 0;
2547 cfo->phy_cfo_status = RTW89_PHY_DCFO_STATE_NORMAL;
2548 cfo->cfo_ul_ofdma_acc_mode = RTW89_CFO_UL_OFDMA_ACC_ENABLE;
2554 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking;
2555 s8 crystal_cap = cfo->crystal_cap;
2559 if (!cfo->is_adjust) {
2561 cfo->is_adjust = true;
2564 cfo->is_adjust = false;
2566 if (!cfo->is_adjust) {
2584 cfo->crystal_cap, cfo->def_x_cap);
2590 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking;
2600 if (cfo->cfo_cnt[i] == 0)
2602 cfo_khz_all += cfo->cfo_tail[i];
2603 cfo_cnt_all += cfo->cfo_cnt[i];
2605 cfo->pre_cfo_avg[i] = cfo->cfo_avg[i];
2606 cfo->dcfo_avg = phy_div(cfo_khz_all << chip->dcfo_comp_sft,
2612 "Total cfo=%dK, pkt_cnt=%d, avg_cfo=%dK\n",
2619 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking;
2635 if (cfo->rtw89_multi_cfo_mode == RTW89_PKT_BASED_AVG_MODE) {
2638 if (cfo->cfo_cnt[i] == 0)
2640 cfo_khz_all += cfo->cfo_tail[i];
2641 cfo_cnt_all += cfo->cfo_cnt[i];
2644 "Msta cfo=%d, pkt_cnt=%d, avg_cfo=%d\n",
2648 } else if (cfo->rtw89_multi_cfo_mode == RTW89_ENTRY_BASED_AVG_MODE) {
2651 if (cfo->cfo_cnt[i] == 0)
2653 cfo->cfo_avg[i] = phy_div(cfo->cfo_tail[i],
2654 (s32)cfo->cfo_cnt[i]);
2655 cfo_khz_all += cfo->cfo_avg[i];
2658 cfo->cfo_avg[i]);
2666 } else if (cfo->rtw89_multi_cfo_mode == RTW89_TP_BASED_AVG_MODE) {
2668 cfo_tol = cfo->sta_cfo_tolerance;
2671 if (cfo->cfo_cnt[i] != 0) {
2672 cfo->cfo_avg[i] = phy_div(cfo->cfo_tail[i],
2673 (s32)cfo->cfo_cnt[i]);
2676 cfo->cfo_avg[i] = cfo->pre_cfo_avg[i];
2678 max_cfo_lb = max(cfo->cfo_avg[i] - cfo_tol, max_cfo_lb);
2679 min_cfo_ub = min(cfo->cfo_avg[i] + cfo_tol, min_cfo_ub);
2680 cfo_khz_all += cfo->cfo_avg[i];
2684 i, cfo->cfo_avg[i]);
2696 "Msta cfo with tp_wgt=%d, avg_cfo=%d\n",
2702 "cfo win_size=%d\n",
2707 "No intersection of cfo tolerance windows\n");
2711 cfo->pre_cfo_avg[i] = cfo->cfo_avg[i];
2713 rtw89_debug(rtwdev, RTW89_DBG_CFO, "Target cfo=%d\n", target_cfo);
2719 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking;
2721 memset(&cfo->cfo_tail, 0, sizeof(cfo->cfo_tail));
2722 memset(&cfo->cfo_cnt, 0, sizeof(cfo->cfo_cnt));
2723 cfo->packet_count = 0;
2724 cfo->packet_count_pre = 0;
2725 cfo->cfo_avg_pre = 0;
2730 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking;
2733 u8 pre_x_cap = cfo->crystal_cap;
2736 cfo->dcfo_avg = 0;
2743 if (cfo->packet_count == 0) {
2747 if (cfo->packet_count == cfo->packet_count_pre) {
2759 if (cfo->divergence_lock_en) {
2760 cfo->lock_cnt++;
2761 if (cfo->lock_cnt > CFO_PERIOD_CNT) {
2762 cfo->divergence_lock_en = false;
2763 cfo->lock_cnt = 0;
2769 if (cfo->crystal_cap >= cfo->x_cap_ub ||
2770 cfo->crystal_cap <= cfo->x_cap_lb) {
2771 cfo->divergence_lock_en = true;
2777 cfo->cfo_avg_pre = new_cfo;
2778 cfo->dcfo_avg_pre = cfo->dcfo_avg;
2779 x_cap_update = cfo->crystal_cap != pre_x_cap;
2782 cfo->def_x_cap, pre_x_cap, cfo->crystal_cap,
2783 cfo->x_cap_ofst);
2785 if (cfo->dcfo_avg > 0)
2786 cfo->dcfo_avg -= CFO_SW_COMP_FINE_TUNE << dcfo_comp_sft;
2788 cfo->dcfo_avg += CFO_SW_COMP_FINE_TUNE << dcfo_comp_sft;
2790 rtw89_dcfo_comp(rtwdev, cfo->dcfo_avg);
2798 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking;
2801 if (!cfo->cfo_trig_by_timer_en)
2806 msecs_to_jiffies(cfo->cfo_timer_ms));
2813 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking;
2816 msecs_to_jiffies(cfo->cfo_timer_ms));
2821 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking;
2827 if (cfo->cfo_ul_ofdma_acc_mode == RTW89_CFO_UL_OFDMA_ACC_ENABLE &&
2831 switch (cfo->phy_cfo_status) {
2834 cfo->phy_cfo_status = RTW89_PHY_DCFO_STATE_ENHANCE;
2835 cfo->cfo_trig_by_timer_en = true;
2836 cfo->cfo_timer_ms = CFO_COMP_PERIOD;
2842 cfo->phy_cfo_status = RTW89_PHY_DCFO_STATE_NORMAL;
2844 cfo->phy_cfo_trk_cnt >= CFO_PERIOD_CNT)
2845 cfo->phy_cfo_status = RTW89_PHY_DCFO_STATE_HOLD;
2847 cfo->phy_cfo_trk_cnt++;
2849 if (cfo->phy_cfo_status == RTW89_PHY_DCFO_STATE_NORMAL) {
2850 cfo->phy_cfo_trk_cnt = 0;
2851 cfo->cfo_trig_by_timer_en = false;
2856 cfo->phy_cfo_status = RTW89_PHY_DCFO_STATE_NORMAL;
2857 cfo->phy_cfo_trk_cnt = 0;
2858 cfo->cfo_trig_by_timer_en = false;
2860 cfo->phy_cfo_trk_cnt++;
2864 cfo->phy_cfo_status = RTW89_PHY_DCFO_STATE_NORMAL;
2865 cfo->phy_cfo_trk_cnt = 0;
2870 stats->tx_throughput, cfo->phy_cfo_status,
2871 cfo->cfo_trig_by_timer_en, cfo->phy_cfo_trk_cnt,
2873 if (cfo->cfo_trig_by_timer_en)
2881 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking;
2889 cfo->cfo_tail[macid] += cfo_val;
2890 cfo->cfo_cnt[macid]++;
2891 cfo->packet_count++;