Lines Matching defs:btc

769 	struct rtw89_btc *btc = &rtwdev->btc;
770 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
771 struct rtw89_btc_cx *cx = &btc->cx;
773 struct rtw89_btc_dm *dm = &btc->dm;
777 btc->fwinfo.cnt_h2c_fail++;
782 "[BTC], %s(): return by btc not init!!\n", __func__);
807 struct rtw89_btc *btc = &rtwdev->btc;
808 const struct rtw89_btc_ver *ver = btc->ver;
809 struct rtw89_btc_cx *cx = &btc->cx;
810 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
811 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
825 memset(&btc->ctrl, 0, sizeof(btc->ctrl));
826 btc->manual_ctrl = false;
828 btc->ctrl.ctrl.trace_step = FCXDEF_STEP;
833 memset(&btc->dm, 0, sizeof(btc->dm));
836 if (btc->ver->fwlrole == 8)
844 btc->dm.tdma_now = t_def[CXTD_OFF];
845 btc->dm.tdma = t_def[CXTD_OFF];
848 btc->dm.slot.v7[i].dur = s_def[i].dur;
849 btc->dm.slot.v7[i].cxtype = s_def[i].cxtype;
850 btc->dm.slot.v7[i].cxtbl = s_def[i].cxtbl;
852 memcpy(&btc->dm.slot_now.v7, &btc->dm.slot.v7,
853 sizeof(btc->dm.slot_now.v7));
855 memcpy(&btc->dm.slot_now.v1, s_def,
856 sizeof(btc->dm.slot_now.v1));
857 memcpy(&btc->dm.slot.v1, s_def,
858 sizeof(btc->dm.slot.v1));
861 btc->policy_len = 0;
862 btc->bt_req_len = 0;
864 btc->dm.coex_info_map = BTC_COEX_INFO_ALL;
865 btc->dm.wl_tx_limit.tx_time = BTC_MAX_TX_TIME_DEF;
866 btc->dm.wl_tx_limit.tx_retry = BTC_MAX_TX_RETRY_DEF;
867 btc->dm.wl_pre_agc_rb = BTC_PREAGC_NOTFOUND;
868 btc->dm.wl_btg_rx_rb = BTC_BTGCTRL_BB_GNT_NOTFOUND;
872 memset(&btc->mdinfo, 0, sizeof(btc->mdinfo));
890 struct rtw89_btc *btc = &rtwdev->btc;
891 const struct rtw89_btc_ver *ver = btc->ver;
892 union rtw89_btc_module_info *md = &btc->mdinfo;
903 if (btc->btg_pos == RF_PATH_A)
920 if (!btc->fwinfo.rpt_fbtc_mregval.cinfo.valid)
923 pmreg = &btc->fwinfo.rpt_fbtc_mregval.finfo;
950 if (!btc->fwinfo.rpt_fbtc_mregval.cinfo.valid)
953 pmreg = &btc->fwinfo.rpt_fbtc_mregval.finfo;
988 struct rtw89_btc *btc = &rtwdev->btc;
989 struct rtw89_btc_cx *cx = &btc->cx;
992 struct rtw89_btc_dm *dm = &btc->dm;
1010 if (dm->cnt_dm[BTC_DCNT_RPT] == cnt && btc->fwinfo.rpt_en_map)
1158 struct rtw89_btc *btc = &rtwdev->btc;
1159 const struct rtw89_btc_ver *ver = btc->ver;
1160 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
1163 union rtw89_btc_fbtc_btver *pver = &btc->fwinfo.rpt_fbtc_btver.finfo;
1268 struct rtw89_btc *btc = &rtwdev->btc;
1269 const struct rtw89_btc_ver *ver = btc->ver;
1295 struct rtw89_btc *btc = &rtwdev->btc;
1296 const struct rtw89_btc_ver *ver = btc->ver;
1297 struct rtw89_btc_dm *dm = &btc->dm;
1299 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
1300 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
1415 trace_step = btc->ctrl.ctrl.trace_step;
1553 btc->fwinfo.rpt_en_map = prpt->v1.rpt_enable;
1567 btc->cx.cnt_bt[BTC_BCNT_POLUT] =
1573 btc->fwinfo.rpt_en_map = le32_to_cpu(prpt->v4.rpt_info.en);
1582 btc->cx.cnt_bt[BTC_BCNT_HIPRI_TX] =
1584 btc->cx.cnt_bt[BTC_BCNT_HIPRI_RX] =
1586 btc->cx.cnt_bt[BTC_BCNT_LOPRI_TX] =
1588 btc->cx.cnt_bt[BTC_BCNT_LOPRI_RX] =
1590 btc->cx.cnt_bt[BTC_BCNT_POLUT] =
1614 btc->cx.cnt_bt[BTC_BCNT_HIPRI_TX] =
1616 btc->cx.cnt_bt[BTC_BCNT_HIPRI_RX] =
1618 btc->cx.cnt_bt[BTC_BCNT_LOPRI_TX] =
1620 btc->cx.cnt_bt[BTC_BCNT_LOPRI_RX] =
1622 btc->cx.cnt_bt[BTC_BCNT_POLUT] =
1641 btc->cx.cnt_bt[BTC_BCNT_HIPRI_TX] =
1643 btc->cx.cnt_bt[BTC_BCNT_HIPRI_RX] =
1645 btc->cx.cnt_bt[BTC_BCNT_LOPRI_TX] =
1647 btc->cx.cnt_bt[BTC_BCNT_LOPRI_RX] =
1649 btc->cx.cnt_bt[BTC_BCNT_POLUT] =
1667 btc->cx.cnt_bt[BTC_BCNT_HIPRI_TX] =
1669 btc->cx.cnt_bt[BTC_BCNT_HIPRI_RX] =
1671 btc->cx.cnt_bt[BTC_BCNT_LOPRI_TX] =
1673 btc->cx.cnt_bt[BTC_BCNT_LOPRI_RX] =
1677 if (val1 > btc->cx.cnt_bt[BTC_BCNT_POLUT_NOW])
1678 val1 -= btc->cx.cnt_bt[BTC_BCNT_POLUT_NOW]; /* diff */
1680 btc->cx.cnt_bt[BTC_BCNT_POLUT_DIFF] = val1;
1681 btc->cx.cnt_bt[BTC_BCNT_POLUT_NOW] =
1806 btc->bt_req_len != 0) {
1808 if (btc->bt_req_len > bt_slot_real) {
1809 diff_t = btc->bt_req_len - bt_slot_real;
1850 btc->bt_req_len != 0) {
1853 if (btc->bt_req_len > bt_slot_real) {
1854 diff_t = btc->bt_req_len - bt_slot_real;
1895 bt_slot_set = btc->bt_req_len;
2003 const struct rtw89_btc_ver *ver = rtwdev->btc.ver;
2032 struct rtw89_btc *btc = &rtwdev->btc;
2033 const struct rtw89_btc_ver *ver = btc->ver;
2034 struct rtw89_btc_dm *dm = &btc->dm;
2039 u16 len = btc->policy_len;
2041 if (!btc->update_policy_force &&
2049 tlv = (struct rtw89_btc_btf_tlv *)&btc->policy[len];
2055 btc->policy_len += BTC_TLV_HDR_LEN + sizeof(*v);
2057 tlv_v7 = (struct rtw89_btc_btf_tlv_v7 *)&btc->policy[len];
2062 btc->policy_len += BTC_TLV_HDR_LEN_V7 + tlv_v7->len;
2068 btc->policy_len += BTC_TLV_HDR_LEN + sizeof(*v3);
2080 struct rtw89_btc *btc = &rtwdev->btc;
2081 struct rtw89_btc_dm *dm = &btc->dm;
2088 "[BTC], %s(): A:btc->policy_len = %d\n",
2089 __func__, btc->policy_len);
2092 if (!btc->update_policy_force &&
2097 len = btc->policy_len;
2099 tlv = (struct rtw89_btc_btf_tlv *)&btc->policy[len];
2104 v->fver = btc->ver->fcxslots;
2114 btc->policy_len += BTC_TLV_HDR_LEN + sizeof(*v);
2126 struct rtw89_btc *btc = &rtwdev->btc;
2127 struct rtw89_btc_dm *dm = &btc->dm;
2132 if (!btc->update_policy_force &&
2137 len = btc->policy_len;
2146 tlv = (struct rtw89_btc_btf_tlv_v7 *)&btc->policy[len];
2148 tlv->ver = btc->ver->fcxslots;
2159 btc->policy[len] = i; /* slot-id */
2160 memcpy(&btc->policy[len + 1], &dm->slot.v7[i],
2166 __func__, btc->policy_len, i, dm->slot.v7[i].dur,
2169 btc->policy_len = len; /* update total length */
2175 __func__, cnt, btc->policy_len);
2180 struct rtw89_btc *btc = &rtwdev->btc;
2182 if (btc->ver->fcxslots == 7)
2190 struct rtw89_btc *btc = &rtwdev->btc;
2191 const struct rtw89_btc_ver *ver = btc->ver;
2335 struct rtw89_btc *btc = &rtwdev->btc;
2336 const struct rtw89_btc_ver *ver = btc->ver;
2339 struct rtw89_btc_dm *dm = &btc->dm;
2375 struct rtw89_btc *btc = &rtwdev->btc;
2376 struct rtw89_btc_wl_smap *wl_smap = &btc->cx.wl.status.map;
2377 struct rtw89_btc_btf_fwinfo *fwinfo = &btc->fwinfo;
2399 if (btc->ver->fcxbtcrpt == 8) {
2401 r.v8.fver = btc->ver->fcxbtcrpt;
2407 if (btc->ver->fcxbtcrpt == 105)
2410 r.v1.fver = btc->ver->fcxbtcrpt;
2424 const struct rtw89_btc_ver *ver = rtwdev->btc.ver;
2483 struct rtw89_btc *btc = &rtwdev->btc;
2484 struct rtw89_btc_dm *dm = &btc->dm;
2499 struct rtw89_btc *btc = &rtwdev->btc;
2500 struct rtw89_btc_dm *dm = &btc->dm;
2508 btc->policy_len = 0;
2509 btc->policy_type = policy_type;
2514 if (btc->policy_len == 0 || btc->policy_len > RTW89_BTC_POLICY_MAXLEN)
2519 __func__, action, policy_type, btc->policy_len);
2523 btc->lps = 1;
2525 btc->lps = 0;
2527 if (btc->lps == 1)
2528 rtw89_set_coex_ctrl_lps(rtwdev, btc->lps);
2531 btc->policy, btc->policy_len);
2534 if (btc->ver->fcxslots == 7)
2540 if (btc->update_policy_force)
2541 btc->update_policy_force = false;
2543 if (btc->lps == 0)
2544 rtw89_set_coex_ctrl_lps(rtwdev, btc->lps);
2549 struct rtw89_btc *btc = &rtwdev->btc;
2550 const struct rtw89_btc_ver *ver = btc->ver;
2551 struct rtw89_btc_dm *dm = &btc->dm;
2552 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
2613 struct rtw89_btc *btc = &rtwdev->btc;
2614 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
2634 struct rtw89_btc *btc = &rtwdev->btc;
2635 struct rtw89_btc_dm *dm = &btc->dm;
2683 struct rtw89_btc *btc = &rtwdev->btc;
2684 struct rtw89_btc_dm *dm = &btc->dm;
2772 struct rtw89_btc *btc = &rtwdev->btc;
2773 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
2780 btc->dm.rf_trx_para.wl_tx_power = level;
2804 struct rtw89_btc *btc = &rtwdev->btc;
2805 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
2811 btc->dm.rf_trx_para.wl_rx_gain = level;
2822 struct rtw89_btc *btc = &rtwdev->btc;
2823 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
2827 if (btc->cx.cnt_bt[BTC_BCNT_INFOUPDATE] == 0)
2841 btc->dm.rf_trx_para.bt_tx_power = level;
2849 struct rtw89_btc *btc = &rtwdev->btc;
2850 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
2852 if (btc->cx.cnt_bt[BTC_BCNT_INFOUPDATE] == 0)
2861 btc->dm.rf_trx_para.bt_rx_gain = level;
2878 struct rtw89_btc *btc = &rtwdev->btc;
2879 const struct rtw89_btc_ver *ver = btc->ver;
2880 struct rtw89_btc_dm *dm = &btc->dm;
2881 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
2882 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
2904 if (btc->ant_type == BTC_ANT_SHARED) {
2906 if ((btc->dm.wl_btg_rx && b->profile_cnt.now != 0) ||
2965 struct rtw89_btc *btc = &rtwdev->btc;
2966 struct rtw89_btc_cx *cx = &btc->cx;
2992 struct rtw89_btc *btc = &rtwdev->btc;
2993 const struct rtw89_btc_ver *ver = btc->ver;
2994 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
2995 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
3008 if (btc->manual_ctrl || wl->status.map.scan)
3137 btc->cx.cnt_wl[BTC_WCNT_CH_UPDATE]++;
3142 struct rtw89_btc *btc = &rtwdev->btc;
3143 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
3144 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
3151 union rtw89_btc_module_info *md = &btc->mdinfo;
3152 const struct rtw89_btc_ver *ver = btc->ver;
3169 if (btc->ant_type == BTC_ANT_SHARED) {
3170 btc->dm.trx_para_level = 0;
3176 btc->dm.trx_para_level = 5;
3181 btc->dm.trx_para_level = 5;
3186 btc->dm.trx_para_level = 5;
3192 btc->dm.trx_para_level = 5;
3197 btc->dm.trx_para_level = 5;
3200 btc->dm.trx_para_level = 0;
3204 btc->dm.trx_para_level = 6;
3207 btc->dm.trx_para_level = 7;
3210 btc->dm.trx_para_level = 0;
3214 btc->dm.trx_para_level = 6;
3219 btc->dm.trx_para_level = 0;
3223 #define _tdma_set_flctrl(btc, flc) ({(btc)->dm.tdma.rxflctrl = flc; })
3224 #define _tdma_set_flctrl_role(btc, role) ({(btc)->dm.tdma.rxflctrl_role = role; })
3225 #define _tdma_set_tog(btc, wtg) ({(btc)->dm.tdma.wtgle_n = wtg; })
3226 #define _tdma_set_lek(btc, lek) ({(btc)->dm.tdma.leak_n = lek; })
3299 struct rtw89_btc *btc = &rtwdev->btc;
3300 struct rtw89_btc_dm *dm = &btc->dm;
3306 if (btc->ant_type == BTC_ANT_SHARED) {
3307 if (btc->cx.wl.status.map._4way)
3320 btc->bt_req_en = false;
3326 _slot_set_tbl(btc, CXST_OFF, cxtbl[2]);
3327 btc->update_policy_force = true;
3336 _slot_set_tbl(btc, CXST_OFF, cxtbl[2]);
3339 _slot_set_tbl(btc, CXST_OFF, cxtbl[1]);
3342 _slot_set_tbl(btc, CXST_OFF, cxtbl[0]);
3345 _slot_set_tbl(btc, CXST_OFF, cxtbl[16]);
3348 _slot_set_tbl(btc, CXST_OFF, cxtbl[17]);
3351 _slot_set_tbl(btc, CXST_OFF, cxtbl[18]);
3354 _slot_set_tbl(btc, CXST_OFF, cxtbl[5]);
3357 _slot_set_tbl(btc, CXST_OFF, cxtbl[8]);
3360 _slot_set_tbl(btc, CXST_OFF, cxtbl[6]);
3370 _slot_set_tbl(btc, CXST_OFF, cxtbl[8]);
3375 btc->bt_req_en = true;
3386 _slot_set(btc, CXST_E2G, 20, cxtbl[1], SLOT_ISO);
3398 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3399 _slot_set(btc, CXST_B1, 30, tbl_b1, SLOT_MIX);
3402 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
3403 _slot_set(btc, CXST_B1, 50, tbl_b1, SLOT_MIX);
3406 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3407 _slot_set(btc, CXST_B1, 30, tbl_b1, SLOT_MIX);
3410 _slot_set(btc, CXST_W1, 40, tbl_w1, SLOT_ISO);
3411 _slot_set(btc, CXST_B1, 10, tbl_b1, SLOT_MIX);
3414 _slot_set(btc, CXST_W1, 40, cxtbl[1], SLOT_ISO);
3415 _slot_set(btc, CXST_B1, 10, tbl_b1, SLOT_MIX);
3418 _slot_set(btc, CXST_W1, 40, cxtbl[25], SLOT_ISO);
3419 _slot_set(btc, CXST_B1, 10, cxtbl[25], SLOT_ISO);
3422 _slot_set(btc, CXST_W1, 40, cxtbl[20], SLOT_ISO);
3423 _slot_set(btc, CXST_B1, 10, cxtbl[25], SLOT_MIX);
3426 _slot_set(btc, CXST_W1, 70, tbl_w1, SLOT_ISO);
3427 _slot_set(btc, CXST_B1, 10, tbl_b1, SLOT_MIX);
3430 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3431 _slot_set(btc, CXST_B1, 60, tbl_b1, SLOT_MIX);
3434 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3435 _slot_set(btc, CXST_B1, 60, tbl_b1, SLOT_MIX);
3438 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3439 _slot_set(btc, CXST_B1, 80, tbl_b1, SLOT_MIX);
3442 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
3444 _slot_set(btc, CXST_B1, dm->slot_dur[CXST_B1],
3452 if (btc->cx.wl.role_info.role_map.role.ap)
3453 _tdma_set_flctrl(btc, CXFLC_QOSNULL);
3457 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3458 _slot_set(btc, CXST_B1, 30, tbl_b1, SLOT_MIX);
3461 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
3462 _slot_set(btc, CXST_B1, 50, tbl_b1, SLOT_MIX);
3465 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3466 _slot_set(btc, CXST_B1, 30, tbl_b1, SLOT_MIX);
3469 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3470 _slot_set(btc, CXST_B1, 60, tbl_b1, SLOT_MIX);
3473 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3474 _slot_set(btc, CXST_B1, 60, tbl_b1, SLOT_MIX);
3477 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3478 _slot_set(btc, CXST_B1, 80, tbl_b1, SLOT_MIX);
3487 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
3488 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3491 _slot_set(btc, CXST_W1, 60, tbl_w1, SLOT_ISO);
3492 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3495 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3496 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3499 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
3501 _slot_set(btc, CXST_B1, dm->slot_dur[CXST_B1],
3511 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
3512 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3515 _slot_set(btc, CXST_W1, 60, tbl_w1, SLOT_ISO);
3516 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3519 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3520 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3523 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
3525 _slot_set(btc, CXST_B1, dm->slot_dur[CXST_B1],
3535 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3536 _slot_set(btc, CXST_B4, 50, tbl_b4, SLOT_MIX);
3537 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3540 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3541 _slot_set(btc, CXST_B4, 70, tbl_b4, SLOT_MIX);
3542 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3545 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
3546 _slot_set(btc, CXST_B4, 50, tbl_b4, SLOT_MIX);
3547 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3550 _slot_set(btc, CXST_W1, 60, tbl_w1, SLOT_ISO);
3551 _slot_set(btc, CXST_B4, 60, tbl_b4, SLOT_MIX);
3552 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3555 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3556 _slot_set(btc, CXST_B4, 80, tbl_b4, SLOT_MIX);
3557 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3560 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
3562 _slot_set(btc, CXST_B4, dm->slot_dur[CXST_B4],
3572 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3573 _slot_set(btc, CXST_B4, 50, tbl_b4, SLOT_MIX);
3574 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3577 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3578 _slot_set(btc, CXST_B4, 70, tbl_b4, SLOT_MIX);
3579 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3582 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
3583 _slot_set(btc, CXST_B4, 50, tbl_b4, SLOT_MIX);
3584 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3587 _slot_set(btc, CXST_W1, 60, tbl_w1, SLOT_ISO);
3588 _slot_set(btc, CXST_B4, 60, tbl_b4, SLOT_MIX);
3589 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3592 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3593 _slot_set(btc, CXST_B4, 80, tbl_b4, SLOT_MIX);
3594 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3597 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
3599 _slot_set(btc, CXST_B4, dm->slot_dur[CXST_B4],
3610 struct rtw89_btc *btc = &rtwdev->btc;
3611 struct rtw89_btc_dm *dm = &btc->dm;
3613 struct rtw89_btc_wl_role_info_v1 *wl_rinfo = &btc->cx.wl.role_info_v1;
3614 struct rtw89_btc_bt_hid_desc *hid = &btc->cx.bt.link_info.hid_desc;
3615 struct rtw89_btc_bt_hfp_desc *hfp = &btc->cx.bt.link_info.hfp_desc;
3616 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
3622 if (btc->ant_type == BTC_ANT_SHARED) {
3623 if (btc->cx.wl.status.map._4way)
3654 btc->bt_req_en = false;
3658 btc->update_policy_force = true;
3660 _slot_set_le(btc, CXST_OFF, s_def[CXST_OFF].dur,
3662 _slot_set_tbl(btc, CXST_OFF, cxtbl[2]);
3667 _slot_set_le(btc, CXST_OFF, s_def[CXST_OFF].dur,
3672 _slot_set_tbl(btc, CXST_OFF, cxtbl[2]);
3675 _slot_set_tbl(btc, CXST_OFF, cxtbl[1]);
3678 _slot_set_tbl(btc, CXST_OFF, cxtbl[0]);
3679 _slot_set_type(btc, CXST_OFF, SLOT_ISO);
3682 _slot_set_tbl(btc, CXST_OFF, cxtbl[16]);
3685 _slot_set_tbl(btc, CXST_OFF, cxtbl[0]);
3688 _slot_set_tbl(btc, CXST_OFF, cxtbl[24]);
3691 _slot_set_tbl(btc, CXST_OFF, cxtbl[5]);
3694 _slot_set_tbl(btc, CXST_OFF, cxtbl[8]);
3697 _slot_set_tbl(btc, CXST_OFF, cxtbl[7]);
3700 _slot_set_tbl(btc, CXST_OFF, cxtbl[6]);
3709 _slot_set_le(btc, CXST_OFF, s_def[CXST_OFF].dur,
3714 _slot_set_tbl(btc, CXST_OFF, cxtbl[8]);
3721 btc->bt_req_en = true;
3731 _slot_set_le(btc, CXST_E2G, s_def[CXST_E2G].dur,
3733 _slot_set_le(btc, CXST_E5G, s_def[CXST_E5G].dur,
3735 _slot_set_le(btc, CXST_EBT, s_def[CXST_EBT].dur,
3737 _slot_set_le(btc, CXST_ENULL, s_def[CXST_ENULL].dur,
3741 _slot_set(btc, CXST_E2G, 20, cxtbl[1], SLOT_ISO);
3742 _slot_set_le(btc, CXST_E5G, s_def[CXST_E5G].dur,
3744 _slot_set_le(btc, CXST_EBT, s_def[CXST_EBT].dur,
3746 _slot_set_le(btc, CXST_ENULL, s_def[CXST_ENULL].dur,
3752 _slot_set_le(btc, CXST_OFF, s_def[CXST_OFF].dur,
3761 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3762 _slot_set(btc, CXST_B1, 30, tbl_b1, SLOT_MIX);
3765 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
3766 _slot_set(btc, CXST_B1, 50, tbl_b1, SLOT_MIX);
3769 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3770 _slot_set(btc, CXST_B1, 30, tbl_b1, SLOT_MIX);
3773 _slot_set(btc, CXST_W1, 40, tbl_w1, SLOT_ISO);
3774 _slot_set(btc, CXST_B1, 10, tbl_b1, SLOT_MIX);
3777 _slot_set(btc, CXST_W1, 40, cxtbl[1], SLOT_ISO);
3778 _slot_set(btc, CXST_B1, 10, tbl_b1, SLOT_MIX);
3781 _slot_set(btc, CXST_W1, 40, cxtbl[25], SLOT_ISO);
3782 _slot_set(btc, CXST_B1, 10, cxtbl[25], SLOT_ISO);
3785 _slot_set(btc, CXST_W1, 40, cxtbl[20], SLOT_ISO);
3786 _slot_set(btc, CXST_B1, 10, cxtbl[25], SLOT_MIX);
3789 _slot_set(btc, CXST_W1, 70, tbl_w1, SLOT_ISO);
3790 _slot_set(btc, CXST_B1, 10, tbl_b1, SLOT_MIX);
3793 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3794 _slot_set(btc, CXST_B1, 60, tbl_b1, SLOT_MIX);
3797 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3798 _slot_set(btc, CXST_B1, 60, tbl_b1, SLOT_MIX);
3801 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3802 _slot_set(btc, CXST_B1, 80, tbl_b1, SLOT_MIX);
3805 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
3807 _slot_set(btc, CXST_B1, dm->slot_dur[CXST_B1],
3820 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3821 _slot_set(btc, CXST_B1, 30, tbl_b1, SLOT_MIX);
3824 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
3825 _slot_set(btc, CXST_B1, 50, tbl_b1, SLOT_MIX);
3828 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3829 _slot_set(btc, CXST_B1, 30, tbl_b1, SLOT_MIX);
3832 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3833 _slot_set(btc, CXST_B1, 60, tbl_b1, SLOT_MIX);
3836 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3837 _slot_set(btc, CXST_B1, 60, tbl_b1, SLOT_MIX);
3840 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3841 _slot_set(btc, CXST_B1, 80, tbl_b1, SLOT_MIX);
3844 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
3846 _slot_set(btc, CXST_B1, dm->slot_dur[CXST_B1],
3859 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
3860 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3863 _slot_set(btc, CXST_W1, 60, tbl_w1, SLOT_ISO);
3864 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3867 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3868 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3871 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
3873 _slot_set(btc, CXST_B1, dm->slot_dur[CXST_B1],
3886 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
3887 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3890 _slot_set(btc, CXST_W1, 60, tbl_w1, SLOT_ISO);
3891 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3894 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3895 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3898 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
3900 _slot_set(btc, CXST_B1, dm->slot_dur[CXST_B1],
3913 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3914 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3915 _slot_set(btc, CXST_B4, 50, tbl_b4, SLOT_MIX);
3918 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3919 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3920 _slot_set(btc, CXST_B4, 70, tbl_b4, SLOT_MIX);
3923 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
3924 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3925 _slot_set(btc, CXST_B4, 50, tbl_b4, SLOT_MIX);
3928 _slot_set(btc, CXST_W1, 60, tbl_w1, SLOT_ISO);
3929 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3930 _slot_set(btc, CXST_B4, 60, tbl_b4, SLOT_MIX);
3933 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3934 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3935 _slot_set(btc, CXST_B4, 80, tbl_b4, SLOT_MIX);
3938 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
3940 _slot_set(btc, CXST_B1, dm->slot_dur[CXST_B1],
3942 _slot_set(btc, CXST_B4, dm->slot_dur[CXST_B4],
3955 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3956 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3957 _slot_set(btc, CXST_B4, 50, tbl_b4, SLOT_MIX);
3960 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3961 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3962 _slot_set(btc, CXST_B4, 70, tbl_b4, SLOT_MIX);
3965 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
3966 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3967 _slot_set(btc, CXST_B4, 50, tbl_b4, SLOT_MIX);
3970 _slot_set(btc, CXST_W1, 60, tbl_w1, SLOT_ISO);
3971 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3972 _slot_set(btc, CXST_B4, 60, tbl_b4, SLOT_MIX);
3975 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3976 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3977 _slot_set(btc, CXST_B4, 80, tbl_b4, SLOT_MIX);
3980 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
3982 _slot_set(btc, CXST_B1, dm->slot_dur[CXST_B1],
3984 _slot_set(btc, CXST_B4, dm->slot_dur[CXST_B4],
3996 _tdma_set_flctrl_role(btc, null_role);
4001 _tdma_set_lek(btc, 1);
4004 btc->dm.tdma.option_ctrl |= BIT(0);
4005 btc->update_policy_force = true;
4013 struct rtw89_btc_wl_info *wl = &rtwdev->btc.cx.wl;
4019 if (rtwdev->btc.ver->fwlrole == 8) {
4044 struct rtw89_btc *btc = &rtwdev->btc;
4045 struct rtw89_btc_dm *dm = &btc->dm;
4046 struct rtw89_btc_cx *cx = &btc->cx;
4047 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
4056 if (btc->ver->fwlrole == 1)
4058 else if (btc->ver->fwlrole == 2)
4060 else if (btc->ver->fwlrole == 8)
4063 if (btc->dm.run_reason == BTC_RSN_NTFY_POWEROFF ||
4064 btc->dm.run_reason == BTC_RSN_NTFY_RADIO_STATE ||
4065 btc->dm.run_reason == BTC_RSN_CMD_SET_COEX || dbcc_chg)
4077 } else if (btc->dm.run_reason != BTC_RSN_NTFY_WL_RFK &&
4171 struct rtw89_btc *btc = &rtwdev->btc;
4172 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
4173 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
4177 struct rtw89_btc_dm *dm = &btc->dm;
4180 if (btc->dm.run_reason == BTC_RSN_NTFY_POWEROFF ||
4181 btc->dm.run_reason == BTC_RSN_NTFY_RADIO_STATE ||
4182 btc->dm.run_reason == BTC_RSN_CMD_SET_COEX || wl_rinfo->dbcc_chg)
4186 btc->dm.wl_btg_rx == 2)
4198 } else if (btc->dm.run_reason != BTC_RSN_NTFY_WL_RFK &&
4295 struct rtw89_btc *btc = &rtwdev->btc;
4296 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
4300 if (wl->status.map.rf_off || btc->dm.bt_only) {
4312 if (btc->cx.bt.link_info.a2dp_desc.active)
4323 struct rtw89_btc *btc = &rtwdev->btc;
4330 btc->dm.freerun = true;
4351 struct rtw89_btc *btc = &rtwdev->btc;
4352 struct rtw89_btc_bt_link_info *b = &btc->cx.bt.link_info;
4353 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
4357 if (btc->ant_type == BTC_ANT_SHARED) { /* shared-antenna */
4358 switch (btc->cx.state_map) {
4391 struct rtw89_btc *btc = &rtwdev->btc;
4392 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
4396 if (btc->ant_type == BTC_ANT_SHARED) {
4397 if (btc->cx.wl.status.map._4way) {
4400 btc->cx.bt.scan_rx_low_pri = true;
4418 struct rtw89_btc *btc = &rtwdev->btc;
4419 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
4420 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
4426 if (btc->ant_type == BTC_ANT_SHARED) { /* shared-antenna */
4430 btc->cx.bt.scan_rx_low_pri = true;
4457 struct rtw89_btc *btc = &rtwdev->btc;
4458 struct rtw89_btc_bt_link_info *bt_linfo = &btc->cx.bt.link_info;
4460 struct rtw89_btc_dm *dm = &btc->dm;
4464 switch (btc->cx.state_map) {
4502 struct rtw89_btc *btc = &rtwdev->btc;
4506 switch (btc->cx.state_map) {
4530 struct rtw89_btc *btc = &rtwdev->btc;
4534 switch (btc->cx.state_map) {
4558 struct rtw89_btc *btc = &rtwdev->btc;
4559 struct rtw89_btc_bt_link_info *bt_linfo = &btc->cx.bt.link_info;
4561 struct rtw89_btc_dm *dm = &btc->dm;
4565 switch (btc->cx.state_map) {
4602 struct rtw89_btc *btc = &rtwdev->btc;
4606 switch (btc->cx.state_map) {
4630 struct rtw89_btc *btc = &rtwdev->btc;
4634 switch (btc->cx.state_map) {
4658 struct rtw89_btc *btc = &rtwdev->btc;
4662 switch (btc->cx.state_map) {
4695 struct rtw89_btc *btc = &rtwdev->btc;
4699 if (btc->ant_type == BTC_ANT_SHARED)
4713 struct rtw89_btc *btc = &rtwdev->btc;
4714 struct rtw89_btc_wl_rfk_info rfk = btc->cx.wl.rfk_info;
4728 struct rtw89_btc *btc = &rtwdev->btc;
4729 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
4736 const struct rtw89_btc_ver *ver = btc->ver;
4737 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
4738 struct rtw89_btc_dm *dm = &btc->dm;
4740 u32 run_reason = btc->dm.run_reason;
4744 if (btc->manual_ctrl)
4810 struct rtw89_btc *btc = &rtwdev->btc;
4811 struct rtw89_btc_bt_link_info *bt_linfo = &btc->cx.bt.link_info;
4812 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
4815 const struct rtw89_btc_ver *ver = btc->ver;
4816 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
4817 struct rtw89_btc_dm *dm = &btc->dm;
4820 if (btc->manual_ctrl)
4830 btc->cx.bt.link_info.profile_cnt.now == 0)
4840 else if (btc->ant_type == BTC_ANT_SHARED)
4880 struct rtw89_btc *btc = &rtwdev->btc;
4881 struct rtw89_btc_cx *cx = &btc->cx;
4890 if (btc->ver->fwlrole == 8)
4934 struct rtw89_btc *btc = &rtwdev->btc;
4935 const struct rtw89_btc_ver *ver = btc->ver;
4936 struct rtw89_btc_cx *cx = &btc->cx;
4937 struct rtw89_btc_dm *dm = &btc->dm;
4953 if (btc->manual_ctrl)
4968 igno_bt = btc->ctrl.ctrl_v7.igno_bt;
4970 igno_bt = btc->ctrl.ctrl.igno_bt;
4972 if (btc->dm.freerun || igno_bt || b->profile_cnt.now == 0 ||
5015 struct rtw89_btc *btc = &rtwdev->btc;
5016 const struct rtw89_btc_ver *ver = btc->ver;
5017 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
5022 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
5037 if (mode != BTC_WLINK_NOLINK && btc->dm.wl_btg_rx)
5048 struct rtw89_btc *btc = &rtwdev->btc;
5049 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
5056 struct rtw89_btc *btc = &rtwdev->btc;
5057 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
5059 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
5060 struct rtw89_btc_dm *dm = &btc->dm;
5071 bt_rom_code_id = chip_id_to_bt_rom_code_id(rtwdev->btc.ver->chip_id);
5096 btc->cx.cnt_wl[BTC_WCNT_SCBDUPDATE]++;
5098 btc->dm.tdma_instant_excute = 0;
5103 struct rtw89_btc *btc = &rtwdev->btc;
5104 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
5189 struct rtw89_btc *btc = &rtwdev->btc;
5192 if (btc->ant_type == BTC_ANT_SHARED) {
5193 if (btc->cx.wl.status.map._4way)
5195 else if (btc->cx.wl.status.val & btc_scanning_map.val)
5197 else if (btc->cx.bt.link_info.profile_cnt.now == 0)
5205 btc->dm.e2g_slot_limit = BTC_E2G_LIMIT_DEF;
5213 struct rtw89_btc *btc = &rtwdev->btc;
5214 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
5235 { struct rtw89_btc *btc = &rtwdev->btc;
5239 if (btc->ant_type == BTC_ANT_SHARED) { /* shared-antenna */
5240 if (btc->cx.bt.link_info.profile_cnt.now == 0)
5253 struct rtw89_btc *btc = &rtwdev->btc;
5257 if (btc->ant_type == BTC_ANT_SHARED) { /* shared-antenna */
5258 if (btc->cx.bt.link_info.profile_cnt.now == 0)
5271 struct rtw89_btc *btc = &rtwdev->btc;
5272 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
5273 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
5274 struct rtw89_btc_dm *dm = &btc->dm;
5279 if (btc->ant_type == BTC_ANT_DEDICATED) {
5310 dur < btc->bt_req_len) {
5333 struct rtw89_btc *btc = &rtwdev->btc;
5334 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
5335 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
5336 struct rtw89_btc_dm *dm = &btc->dm;
5341 if (btc->ant_type == BTC_ANT_DEDICATED) {
5372 dur < btc->bt_req_len) {
5395 struct rtw89_btc *btc = &rtwdev->btc;
5396 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
5397 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
5398 struct rtw89_btc_dm *dm = &btc->dm;
5401 if (btc->ant_type == BTC_ANT_SHARED) {
5420 struct rtw89_btc *btc = &rtwdev->btc;
5424 if (btc->ant_type == BTC_ANT_SHARED) {
5425 if (btc->cx.bt.link_info.profile_cnt.now == 0)
5437 struct rtw89_btc *btc = &rtwdev->btc;
5441 if (btc->ant_type == BTC_ANT_SHARED) { /* shared-antenna */
5442 if (btc->cx.bt.link_info.profile_cnt.now == 0)
5455 struct rtw89_btc *btc = &rtwdev->btc;
5459 if (btc->ant_type == BTC_ANT_SHARED) { /* shared-antenna */
5468 struct rtw89_btc *btc = &rtwdev->btc;
5472 if (btc->ant_type == BTC_ANT_SHARED) { /* shared-antenna */
5473 if (btc->cx.bt.link_info.profile_cnt.now == 0)
5487 struct rtw89_btc *btc = &rtwdev->btc;
5497 btc->cx.cnt_bt[BTC_BCNT_SCBDREAD]++;
5504 struct rtw89_btc *btc = &rtwdev->btc;
5505 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
5548 struct rtw89_btc *btc = &rtwdev->btc;
5550 btc->cx.wl.dbcc_info.real_band[phy_idx] =
5551 btc->cx.wl.scan_info.phy_map & BIT(phy_idx) ?
5552 btc->cx.wl.dbcc_info.scan_band[phy_idx] :
5553 btc->cx.wl.dbcc_info.op_band[phy_idx];
5558 struct rtw89_btc *btc = &rtwdev->btc;
5559 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
5709 struct rtw89_btc *btc = &rtwdev->btc;
5710 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
5859 struct rtw89_btc *btc = &rtwdev->btc;
5860 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
6042 struct rtw89_btc_wl_info *wl = &rtwdev->btc.cx.wl;
6094 struct rtw89_btc_wl_role_info_v8 *wl_rinfo = &rtwdev->btc.cx.wl.role_info_v8;
6135 struct rtw89_btc *btc = &rtwdev->btc;
6136 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
6181 btc->dm.leak_ap = 0;
6287 btc->cx.cnt_wl[BTC_WCNT_DBCC_CHG]++;
6320 struct rtw89_btc *btc = &rtwdev->btc;
6321 struct rtw89_btc_dm *dm = &rtwdev->btc.dm;
6322 struct rtw89_btc_cx *cx = &btc->cx;
6341 struct rtw89_btc *btc = &rtwdev->btc;
6342 struct rtw89_btc_dm *dm = &rtwdev->btc.dm;
6343 struct rtw89_btc_bt_a2dp_desc *a2dp = &btc->cx.bt.link_info.a2dp_desc;
6357 struct rtw89_btc *btc = &rtwdev->btc;
6358 struct rtw89_btc_dm *dm = &rtwdev->btc.dm;
6359 struct rtw89_btc_cx *cx = &btc->cx;
6380 struct rtw89_btc *btc = &rtwdev->btc;
6381 struct rtw89_btc_cx *cx = &btc->cx;
6382 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
6444 struct rtw89_btc *btc = &rtwdev->btc;
6445 struct rtw89_btc_cx *cx = &btc->cx;
6465 struct rtw89_btc *btc = &rtwdev->btc;
6466 const struct rtw89_btc_ver *ver = btc->ver;
6467 struct rtw89_btc_dm *dm = &rtwdev->btc.dm;
6468 struct rtw89_btc_cx *cx = &btc->cx;
6469 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
6470 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
6495 igno_bt = btc->ctrl.ctrl_v7.igno_bt;
6496 always_freerun = btc->ctrl.ctrl_v7.always_freerun;
6498 igno_bt = btc->ctrl.ctrl.igno_bt;
6499 always_freerun = btc->ctrl.ctrl.always_freerun;
6508 if (btc->manual_ctrl) {
6662 btc->ctrl.ctrl_v7.igno_bt = igno_bt;
6664 btc->ctrl.ctrl.igno_bt = igno_bt;
6670 struct rtw89_btc *btc = &rtwdev->btc;
6673 btc->dm.cnt_notify[BTC_NCNT_POWER_ON]++;
6678 struct rtw89_btc *btc = &rtwdev->btc;
6679 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
6682 btc->dm.cnt_notify[BTC_NCNT_POWER_OFF]++;
6684 btc->cx.wl.status.map.rf_off = 1;
6685 btc->cx.wl.status.map.busy = 0;
6693 btc->cx.wl.status.map.rf_off_pre = btc->cx.wl.status.map.rf_off;
6699 struct rtw89_btc *btc = &rtwdev->btc;
6700 const struct rtw89_btc_ver *ver = btc->ver;
6701 struct rtw89_btc_dm *dm = &btc->dm;
6702 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
6708 dm->init_info.init_v7.cx_other = btc->cx.other.type;
6710 dm->init_info.init_v7.module = btc->mdinfo.md_v7;
6716 dm->init_info.init.cx_other = btc->cx.other.type;
6718 dm->init_info.init.module = btc->mdinfo.md;
6724 struct rtw89_btc *btc = &rtwdev->btc;
6725 struct rtw89_btc_dm *dm = &rtwdev->btc.dm;
6726 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
6728 const struct rtw89_btc_ver *ver = btc->ver;
6731 btc->dm.run_reason = BTC_RSN_NONE;
6732 btc->dm.run_action = BTC_ACT_NONE;
6734 btc->ctrl.ctrl_v7.igno_bt = true;
6736 btc->ctrl.ctrl.igno_bt = true;
6780 struct rtw89_btc *btc = &rtwdev->btc;
6781 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
6790 btc->dm.cnt_notify[BTC_NCNT_SCAN_START]++;
6807 struct rtw89_btc *btc = &rtwdev->btc;
6808 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
6812 btc->dm.cnt_notify[BTC_NCNT_SCAN_FINISH]++;
6828 struct rtw89_btc *btc = &rtwdev->btc;
6829 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
6838 btc->dm.cnt_notify[BTC_NCNT_SWITCH_BAND]++;
6855 struct rtw89_btc *btc = &rtwdev->btc;
6856 struct rtw89_btc_cx *cx = &btc->cx;
6912 btc->dm.cnt_notify[BTC_NCNT_SPECIAL_PACKET]++;
6919 btc.eapol_notify_work);
6930 btc.arp_notify_work);
6940 btc.dhcp_notify_work);
6951 btc.icmp_notify_work);
6962 struct rtw89_btc *btc = &rtwdev->btc;
6963 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
6992 u8 mode = rtwdev->btc.cx.wl.role_info.link_mode;
6995 if (mode == BTC_WLINK_5G || rtwdev->btc.dm.freerun) {
7011 struct rtw89_btc *btc = &rtwdev->btc;
7012 struct rtw89_btc_cx *cx = &btc->cx;
7064 btc->dm.trx_info.bt_profile = u32_get_bits(btinfo.val, BT_PROFILE_PROTOCOL_MASK);
7082 btc->dm.trx_info.bt_rssi = bt->rssi_level;
7150 struct rtw89_btc *btc = &rtwdev->btc;
7151 const struct rtw89_btc_ver *ver = btc->ver;
7152 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
7214 btc->dm.cnt_notify[BTC_NCNT_ROLE_INFO]++;
7238 wa_type = btc->mdinfo.md_v7.wa_type;
7240 wa_type = btc->mdinfo.md.wa_type;
7252 btc->dm.leak_ap = 0;
7268 struct rtw89_btc *btc = &rtwdev->btc;
7269 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
7274 btc->dm.cnt_notify[BTC_NCNT_RADIO_STATE]++;
7319 btc->dm.cnt_dm[BTC_DCNT_BTCNT_HANG] = 0;
7320 btc->dm.tdma_instant_excute = 1;
7331 struct rtw89_btc *btc = &rtwdev->btc;
7332 struct rtw89_btc_cx *cx = &btc->cx;
7353 btc->dm.cnt_notify[BTC_NCNT_WL_RFK]++;
7390 __func__, btc->dm.cnt_notify[BTC_NCNT_WL_RFK], result);
7445 struct rtw89_btc *btc = &rtwdev->btc;
7446 struct rtw89_btc_dm *dm = &btc->dm;
7447 const struct rtw89_btc_ver *ver = btc->ver;
7448 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
7489 if (btc->ant_type == BTC_ANT_DEDICATED &&
7579 struct rtw89_btc *btc = &rtwdev->btc;
7580 struct rtw89_btc_dm *dm = &btc->dm;
7581 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
7590 btc->dm.cnt_notify[BTC_NCNT_WL_STA]++;
7613 } else if (btc->dm.cnt_notify[BTC_NCNT_WL_STA] >=
7614 btc->dm.cnt_dm[BTC_DCNT_WL_STA_LAST] + BTC_NHM_CHK_INTVL) {
7615 btc->dm.cnt_dm[BTC_DCNT_WL_STA_LAST] =
7616 btc->dm.cnt_notify[BTC_NCNT_WL_STA];
7617 } else if (btc->dm.cnt_notify[BTC_NCNT_WL_STA] <
7618 btc->dm.cnt_dm[BTC_DCNT_WL_STA_LAST]) {
7619 btc->dm.cnt_dm[BTC_DCNT_WL_STA_LAST] =
7620 btc->dm.cnt_notify[BTC_NCNT_WL_STA];
7627 struct rtw89_btc *btc = &rtwdev->btc;
7628 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
7650 btc->cx.cnt_bt[BTC_BCNT_INFOUPDATE]++;
7656 btc->cx.cnt_bt[BTC_BCNT_SCBDUPDATE]++;
7662 btc->dbg.rb_done = true;
7663 btc->dbg.rb_val = le32_to_cpu(*((__le32 *)buf));
7667 btc->dbg.rb_done = true;
7668 btc->dbg.rb_val = buf[0];
7671 btc->dm.cnt_dm[BTC_DCNT_CX_RUNINFO]++;
7680 union rtw89_btc_module_info *md = &rtwdev->btc.mdinfo;
7682 const struct rtw89_btc_ver *ver = rtwdev->btc.ver;
7684 struct rtw89_btc *btc = &rtwdev->btc;
7685 struct rtw89_btc_dm *dm = &btc->dm;
7686 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
7687 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
7759 btc->cx.other.type, rtwdev->dbcc_en, hal->tx_nss,
7765 struct rtw89_btc *btc = &rtwdev->btc;
7767 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
7786 if (btc->ver->fwlrole == 8)
7787 plink = &btc->cx.wl.rlink_info[i][0];
7789 plink = &btc->cx.wl.link_info[i];
7827 struct rtw89_btc *btc = &rtwdev->btc;
7828 const struct rtw89_btc_ver *ver = btc->ver;
7829 struct rtw89_btc_cx *cx = &btc->cx;
7837 if (!(btc->dm.coex_info_map & BTC_COEX_INFO_WL))
7879 struct rtw89_btc *btc = &rtwdev->btc;
7880 struct rtw89_btc_bt_link_info *bt_linfo = &btc->cx.bt.link_info;
7930 struct rtw89_btc *btc = &rtwdev->btc;
7931 const struct rtw89_btc_ver *ver = btc->ver;
7932 struct rtw89_btc_cx *cx = &btc->cx;
7936 union rtw89_btc_module_info *md = &btc->mdinfo;
7941 if (!(btc->dm.coex_info_map & BTC_COEX_INFO_BT))
8398 struct rtw89_btc *btc = &rtwdev->btc;
8399 struct rtw89_btc_dm *dm = &btc->dm;
8412 struct rtw89_btc *btc = &rtwdev->btc;
8413 const struct rtw89_btc_ver *ver = btc->ver;
8414 struct rtw89_btc_dm *dm = &btc->dm;
8415 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
8416 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
8423 (btc->manual_ctrl ? "(Manual)" : "(Auto)"));
8428 btc->ant_type == BTC_ANT_SHARED ? "shared" : "dedicated",
8438 igno_bt = btc->ctrl.ctrl_v7.igno_bt;
8440 igno_bt = btc->ctrl.ctrl.igno_bt;
8444 dm->freerun, btc->lps, dm->wl_mimo_ps);
8471 dm->wl_tx_limit.tx_retry, btc->bt_req_len, bt->scan_rx_low_pri);
8476 struct rtw89_btc *btc = &rtwdev->btc;
8477 const struct rtw89_btc_ver *ver = btc->ver;
8478 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
8542 struct rtw89_btc *btc = &rtwdev->btc;
8543 const struct rtw89_btc_ver *ver = btc->ver;
8544 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
8570 (u32)btc->policy_type);
8577 struct rtw89_btc *btc = &rtwdev->btc;
8578 struct rtw89_btc_dm *dm = &btc->dm;
8584 if (btc->ver->fcxslots == 1) {
8588 } else if (btc->ver->fcxslots == 7) {
8616 struct rtw89_btc *btc = &rtwdev->btc;
8617 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
8618 struct rtw89_btc_dm *dm = &btc->dm;
8619 struct rtw89_btc_bt_a2dp_desc *a2dp = &btc->cx.bt.link_info.a2dp_desc;
8744 struct rtw89_btc *btc = &rtwdev->btc;
8745 struct rtw89_btc_bt_a2dp_desc *a2dp = &btc->cx.bt.link_info.a2dp_desc;
8746 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
8747 struct rtw89_btc_dm *dm = &btc->dm;
8874 struct rtw89_btc *btc = &rtwdev->btc;
8875 struct rtw89_btc_bt_a2dp_desc *a2dp = &btc->cx.bt.link_info.a2dp_desc;
8876 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
8877 struct rtw89_btc_dm *dm = &btc->dm;
9006 struct rtw89_btc *btc = &rtwdev->btc;
9007 struct rtw89_btc_bt_a2dp_desc *a2dp = &btc->cx.bt.link_info.a2dp_desc;
9008 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
9009 struct rtw89_btc_dm *dm = &btc->dm;
9137 struct rtw89_btc_bt_info *bt = &rtwdev->btc.cx.bt;
9139 struct rtw89_btc_btf_fwinfo *pfwinfo = &rtwdev->btc.fwinfo;
9141 struct rtw89_btc_dm *dm = &rtwdev->btc.dm;
9267 struct rtw89_btc *btc = &rtwdev->btc;
9268 const struct rtw89_btc_ver *ver = btc->ver;
9269 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
9274 if (!btc->dm.tdma_now.rxflctrl)
9348 struct rtw89_btc *btc = &rtwdev->btc;
9349 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
9352 const struct rtw89_btc_ver *ver = btc->ver;
9376 trace_step = btc->ctrl.ctrl.trace_step;
9423 struct rtw89_btc *btc = &rtwdev->btc;
9424 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
9480 struct rtw89_btc *btc = &rtwdev->btc;
9481 const struct rtw89_btc_ver *ver = btc->ver;
9483 if (!(btc->dm.coex_info_map & BTC_COEX_INFO_DM))
9554 struct rtw89_btc_btf_fwinfo *pfwinfo = &rtwdev->btc.fwinfo;
9555 const struct rtw89_btc_ver *ver = rtwdev->btc.ver;
9562 gdbg = &rtwdev->btc.fwinfo.rpt_fbtc_gpio_dbg.finfo;
9596 struct rtw89_btc *btc = &rtwdev->btc;
9597 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
9600 struct rtw89_btc_cx *cx = &btc->cx;
9601 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
9602 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
9608 if (!(btc->dm.coex_info_map & BTC_COEX_INFO_MREG))
9619 btc->dm.pta_owner = rtw89_mac_get_ctrl_path(rtwdev);
9627 btc->dm.pta_owner == BTC_CTRL_BY_WL ? "WL" : "BT",
9674 struct rtw89_btc *btc = &rtwdev->btc;
9675 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
9678 struct rtw89_btc_cx *cx = &btc->cx;
9679 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
9680 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
9686 if (!(btc->dm.coex_info_map & BTC_COEX_INFO_MREG))
9697 btc->dm.pta_owner = rtw89_mac_get_ctrl_path(rtwdev);
9705 btc->dm.pta_owner == BTC_CTRL_BY_WL ? "WL" : "BT",
9752 struct rtw89_btc *btc = &rtwdev->btc;
9753 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
9756 struct rtw89_btc_cx *cx = &btc->cx;
9760 struct rtw89_btc_dm *dm = &btc->dm;
9822 struct rtw89_btc *btc = &rtwdev->btc;
9823 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
9826 struct rtw89_btc_cx *cx = &btc->cx;
9827 struct rtw89_btc_dm *dm = &btc->dm;
9830 u32 cnt_sum = 0, *cnt = btc->dm.cnt_notify;
9894 btc->fwinfo.rpt_en_map);
9926 struct rtw89_btc *btc = &rtwdev->btc;
9927 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
9930 struct rtw89_btc_cx *cx = &btc->cx;
9931 struct rtw89_btc_dm *dm = &btc->dm;
9934 u32 cnt_sum = 0, *cnt = btc->dm.cnt_notify;
10006 btc->fwinfo.rpt_en_map);
10038 struct rtw89_btc *btc = &rtwdev->btc;
10039 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
10042 struct rtw89_btc_cx *cx = &btc->cx;
10043 struct rtw89_btc_dm *dm = &btc->dm;
10045 u32 cnt_sum = 0, *cnt = btc->dm.cnt_notify;
10153 struct rtw89_btc *btc = &rtwdev->btc;
10154 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
10157 struct rtw89_btc_cx *cx = &btc->cx;
10158 struct rtw89_btc_dm *dm = &btc->dm;
10160 u32 cnt_sum = 0, *cnt = btc->dm.cnt_notify;
10268 struct rtw89_btc_btf_fwinfo *pfwinfo = &rtwdev->btc.fwinfo;
10271 struct rtw89_btc_cx *cx = &rtwdev->btc.cx;
10272 struct rtw89_btc_dm *dm = &rtwdev->btc.dm;
10274 u32 *cnt = rtwdev->btc.dm.cnt_notify;
10295 rtwdev->btc.ver->info_buf);
10364 rtwdev->btc.hubmsg_cnt, cnt[BTC_NCNT_RESUME_DL_FW],
10371 struct rtw89_btc *btc = &rtwdev->btc;
10372 const struct rtw89_btc_ver *ver = btc->ver;
10373 struct rtw89_btc_cx *cx = &btc->cx;
10380 seq_printf(m, "manual %d\n", btc->manual_ctrl);
10425 struct rtw89_btc *btc = &rtwdev->btc;
10441 btc->ver = btc_ver_def;
10446 btc->ver = &rtw89_btc_ver_defs[RTW89_DEFAULT_BTC_VER_IDX];
10450 (int)(btc->ver - rtw89_btc_ver_defs), btc->ver->fw_ver_code);