Lines Matching defs:btc
792 struct rtw89_btc *btc = &rtwdev->btc;
793 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
794 struct rtw89_btc_cx *cx = &btc->cx;
796 struct rtw89_btc_dm *dm = &btc->dm;
800 btc->fwinfo.cnt_h2c_fail++;
805 "[BTC], %s(): return by btc not init!!\n", __func__);
830 struct rtw89_btc *btc = &rtwdev->btc;
831 const struct rtw89_btc_ver *ver = btc->ver;
832 struct rtw89_btc_cx *cx = &btc->cx;
833 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
834 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
848 memset(&btc->ctrl, 0, sizeof(btc->ctrl));
849 btc->manual_ctrl = false;
851 btc->ctrl.ctrl.trace_step = FCXDEF_STEP;
856 memset(&btc->dm, 0, sizeof(btc->dm));
859 if (btc->ver->fwlrole == 8)
867 btc->dm.tdma_now = t_def[CXTD_OFF];
868 btc->dm.tdma = t_def[CXTD_OFF];
871 btc->dm.slot.v7[i].dur = s_def[i].dur;
872 btc->dm.slot.v7[i].cxtype = s_def[i].cxtype;
873 btc->dm.slot.v7[i].cxtbl = s_def[i].cxtbl;
875 memcpy(&btc->dm.slot_now.v7, &btc->dm.slot.v7,
876 sizeof(btc->dm.slot_now.v7));
878 memcpy(&btc->dm.slot_now.v1, s_def,
879 sizeof(btc->dm.slot_now.v1));
880 memcpy(&btc->dm.slot.v1, s_def,
881 sizeof(btc->dm.slot.v1));
884 btc->policy_len = 0;
885 btc->bt_req_len = 0;
887 btc->dm.coex_info_map = BTC_COEX_INFO_ALL;
888 btc->dm.wl_tx_limit.tx_time = BTC_MAX_TX_TIME_DEF;
889 btc->dm.wl_tx_limit.tx_retry = BTC_MAX_TX_RETRY_DEF;
890 btc->dm.wl_pre_agc_rb = BTC_PREAGC_NOTFOUND;
891 btc->dm.wl_btg_rx_rb = BTC_BTGCTRL_BB_GNT_NOTFOUND;
895 memset(&btc->mdinfo, 0, sizeof(btc->mdinfo));
913 struct rtw89_btc *btc = &rtwdev->btc;
914 const struct rtw89_btc_ver *ver = btc->ver;
915 union rtw89_btc_module_info *md = &btc->mdinfo;
926 if (btc->btg_pos == RF_PATH_A)
943 if (!btc->fwinfo.rpt_fbtc_mregval.cinfo.valid)
946 pmreg = &btc->fwinfo.rpt_fbtc_mregval.finfo;
973 if (!btc->fwinfo.rpt_fbtc_mregval.cinfo.valid)
976 pmreg = &btc->fwinfo.rpt_fbtc_mregval.finfo;
1011 struct rtw89_btc *btc = &rtwdev->btc;
1012 struct rtw89_btc_cx *cx = &btc->cx;
1015 struct rtw89_btc_dm *dm = &btc->dm;
1033 if (dm->cnt_dm[BTC_DCNT_RPT] == cnt && btc->fwinfo.rpt_en_map)
1181 struct rtw89_btc *btc = &rtwdev->btc;
1182 const struct rtw89_btc_ver *ver = btc->ver;
1183 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
1186 union rtw89_btc_fbtc_btver *pver = &btc->fwinfo.rpt_fbtc_btver.finfo;
1291 struct rtw89_btc *btc = &rtwdev->btc;
1292 const struct rtw89_btc_ver *ver = btc->ver;
1318 struct rtw89_btc *btc = &rtwdev->btc;
1319 const struct rtw89_btc_ver *ver = btc->ver;
1320 struct rtw89_btc_dm *dm = &btc->dm;
1322 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
1323 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
1442 trace_step = btc->ctrl.ctrl.trace_step;
1580 btc->fwinfo.rpt_en_map = prpt->v1.rpt_enable;
1594 btc->cx.cnt_bt[BTC_BCNT_POLUT] =
1600 btc->fwinfo.rpt_en_map = le32_to_cpu(prpt->v4.rpt_info.en);
1609 btc->cx.cnt_bt[BTC_BCNT_HIPRI_TX] =
1611 btc->cx.cnt_bt[BTC_BCNT_HIPRI_RX] =
1613 btc->cx.cnt_bt[BTC_BCNT_LOPRI_TX] =
1615 btc->cx.cnt_bt[BTC_BCNT_LOPRI_RX] =
1617 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] =
1668 btc->cx.cnt_bt[BTC_BCNT_HIPRI_TX] =
1670 btc->cx.cnt_bt[BTC_BCNT_HIPRI_RX] =
1672 btc->cx.cnt_bt[BTC_BCNT_LOPRI_TX] =
1674 btc->cx.cnt_bt[BTC_BCNT_LOPRI_RX] =
1676 btc->cx.cnt_bt[BTC_BCNT_POLUT] =
1694 btc->cx.cnt_bt[BTC_BCNT_HIPRI_TX] =
1696 btc->cx.cnt_bt[BTC_BCNT_HIPRI_RX] =
1698 btc->cx.cnt_bt[BTC_BCNT_LOPRI_TX] =
1700 btc->cx.cnt_bt[BTC_BCNT_LOPRI_RX] =
1704 if (val1 > btc->cx.cnt_bt[BTC_BCNT_POLUT_NOW])
1705 val1 -= btc->cx.cnt_bt[BTC_BCNT_POLUT_NOW]; /* diff */
1707 btc->cx.cnt_bt[BTC_BCNT_POLUT_DIFF] = val1;
1708 btc->cx.cnt_bt[BTC_BCNT_POLUT_NOW] =
1726 btc->cx.cnt_bt[BTC_BCNT_HIPRI_TX] =
1728 btc->cx.cnt_bt[BTC_BCNT_HIPRI_RX] =
1730 btc->cx.cnt_bt[BTC_BCNT_LOPRI_TX] =
1732 btc->cx.cnt_bt[BTC_BCNT_LOPRI_RX] =
1736 if (val1 > btc->cx.cnt_bt[BTC_BCNT_POLUT_NOW])
1737 val1 -= btc->cx.cnt_bt[BTC_BCNT_POLUT_NOW]; /* diff */
1739 btc->cx.cnt_bt[BTC_BCNT_POLUT_DIFF] = val1;
1740 btc->cx.cnt_bt[BTC_BCNT_POLUT_NOW] =
1865 btc->bt_req_len != 0) {
1867 if (btc->bt_req_len > bt_slot_real) {
1868 diff_t = btc->bt_req_len - bt_slot_real;
1909 btc->bt_req_len != 0) {
1912 if (btc->bt_req_len > bt_slot_real) {
1913 diff_t = btc->bt_req_len - bt_slot_real;
1954 bt_slot_set = btc->bt_req_len;
2062 const struct rtw89_btc_ver *ver = rtwdev->btc.ver;
2091 struct rtw89_btc *btc = &rtwdev->btc;
2092 const struct rtw89_btc_ver *ver = btc->ver;
2093 struct rtw89_btc_dm *dm = &btc->dm;
2098 u16 len = btc->policy_len;
2100 if (!btc->update_policy_force &&
2108 tlv = (struct rtw89_btc_btf_tlv *)&btc->policy[len];
2114 btc->policy_len += BTC_TLV_HDR_LEN + sizeof(*v);
2116 tlv_v7 = (struct rtw89_btc_btf_tlv_v7 *)&btc->policy[len];
2121 btc->policy_len += BTC_TLV_HDR_LEN_V7 + tlv_v7->len;
2127 btc->policy_len += BTC_TLV_HDR_LEN + sizeof(*v3);
2139 struct rtw89_btc *btc = &rtwdev->btc;
2140 struct rtw89_btc_dm *dm = &btc->dm;
2147 "[BTC], %s(): A:btc->policy_len = %d\n",
2148 __func__, btc->policy_len);
2151 if (!btc->update_policy_force &&
2156 len = btc->policy_len;
2158 tlv = (struct rtw89_btc_btf_tlv *)&btc->policy[len];
2163 v->fver = btc->ver->fcxslots;
2173 btc->policy_len += BTC_TLV_HDR_LEN + sizeof(*v);
2185 struct rtw89_btc *btc = &rtwdev->btc;
2186 struct rtw89_btc_dm *dm = &btc->dm;
2191 if (!btc->update_policy_force &&
2196 len = btc->policy_len;
2205 tlv = (struct rtw89_btc_btf_tlv_v7 *)&btc->policy[len];
2207 tlv->ver = btc->ver->fcxslots;
2218 btc->policy[len] = i; /* slot-id */
2219 memcpy(&btc->policy[len + 1], &dm->slot.v7[i],
2225 __func__, btc->policy_len, i, dm->slot.v7[i].dur,
2228 btc->policy_len = len; /* update total length */
2234 __func__, cnt, btc->policy_len);
2239 struct rtw89_btc *btc = &rtwdev->btc;
2241 if (btc->ver->fcxslots == 7)
2249 struct rtw89_btc *btc = &rtwdev->btc;
2250 const struct rtw89_btc_ver *ver = btc->ver;
2394 struct rtw89_btc *btc = &rtwdev->btc;
2395 const struct rtw89_btc_ver *ver = btc->ver;
2398 struct rtw89_btc_dm *dm = &btc->dm;
2434 struct rtw89_btc *btc = &rtwdev->btc;
2435 struct rtw89_btc_wl_smap *wl_smap = &btc->cx.wl.status.map;
2436 struct rtw89_btc_btf_fwinfo *fwinfo = &btc->fwinfo;
2458 if (btc->ver->fcxbtcrpt == 7 || btc->ver->fcxbtcrpt == 8) {
2460 r.v8.fver = btc->ver->fcxbtcrpt;
2466 if (btc->ver->fcxbtcrpt == 105)
2469 r.v1.fver = btc->ver->fcxbtcrpt;
2483 const struct rtw89_btc_ver *ver = rtwdev->btc.ver;
2546 struct rtw89_btc *btc = &rtwdev->btc;
2547 struct rtw89_btc_dm *dm = &btc->dm;
2562 struct rtw89_btc *btc = &rtwdev->btc;
2563 struct rtw89_btc_dm *dm = &btc->dm;
2571 btc->policy_len = 0;
2572 btc->policy_type = policy_type;
2577 if (btc->policy_len == 0 || btc->policy_len > RTW89_BTC_POLICY_MAXLEN)
2582 __func__, action, policy_type, btc->policy_len);
2586 btc->lps = 1;
2588 btc->lps = 0;
2590 if (btc->lps == 1)
2591 rtw89_set_coex_ctrl_lps(rtwdev, btc->lps);
2594 btc->policy, btc->policy_len);
2597 if (btc->ver->fcxslots == 7)
2603 if (btc->update_policy_force)
2604 btc->update_policy_force = false;
2606 if (btc->lps == 0)
2607 rtw89_set_coex_ctrl_lps(rtwdev, btc->lps);
2612 struct rtw89_btc *btc = &rtwdev->btc;
2613 const struct rtw89_btc_ver *ver = btc->ver;
2614 struct rtw89_btc_dm *dm = &btc->dm;
2615 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
2680 struct rtw89_btc *btc = &rtwdev->btc;
2681 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
2701 struct rtw89_btc *btc = &rtwdev->btc;
2702 struct rtw89_btc_dm *dm = &btc->dm;
2750 struct rtw89_btc *btc = &rtwdev->btc;
2751 struct rtw89_btc_dm *dm = &btc->dm;
2839 struct rtw89_btc *btc = &rtwdev->btc;
2840 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
2847 btc->dm.rf_trx_para.wl_tx_power = level;
2871 struct rtw89_btc *btc = &rtwdev->btc;
2872 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
2878 btc->dm.rf_trx_para.wl_rx_gain = level;
2889 struct rtw89_btc *btc = &rtwdev->btc;
2890 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
2894 if (btc->cx.cnt_bt[BTC_BCNT_INFOUPDATE] == 0)
2908 btc->dm.rf_trx_para.bt_tx_power = level;
2916 struct rtw89_btc *btc = &rtwdev->btc;
2917 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
2919 if (btc->cx.cnt_bt[BTC_BCNT_INFOUPDATE] == 0)
2928 btc->dm.rf_trx_para.bt_rx_gain = level;
2945 struct rtw89_btc *btc = &rtwdev->btc;
2946 const struct rtw89_btc_ver *ver = btc->ver;
2947 struct rtw89_btc_dm *dm = &btc->dm;
2948 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
2949 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
2971 if (btc->ant_type == BTC_ANT_SHARED) {
2973 if ((btc->dm.wl_btg_rx && b->profile_cnt.now != 0) ||
3032 struct rtw89_btc *btc = &rtwdev->btc;
3033 struct rtw89_btc_cx *cx = &btc->cx;
3059 struct rtw89_btc *btc = &rtwdev->btc;
3060 const struct rtw89_btc_ver *ver = btc->ver;
3061 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
3062 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
3077 if (btc->manual_ctrl || wl->status.map.scan)
3222 btc->cx.cnt_wl[BTC_WCNT_CH_UPDATE]++;
3227 struct rtw89_btc *btc = &rtwdev->btc;
3228 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
3229 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
3237 union rtw89_btc_module_info *md = &btc->mdinfo;
3238 const struct rtw89_btc_ver *ver = btc->ver;
3257 if (btc->ant_type == BTC_ANT_SHARED) {
3258 btc->dm.trx_para_level = 0;
3264 btc->dm.trx_para_level = 5;
3269 btc->dm.trx_para_level = 5;
3274 btc->dm.trx_para_level = 5;
3280 btc->dm.trx_para_level = 5;
3285 btc->dm.trx_para_level = 5;
3288 btc->dm.trx_para_level = 0;
3292 btc->dm.trx_para_level = 6;
3295 btc->dm.trx_para_level = 7;
3298 btc->dm.trx_para_level = 0;
3302 btc->dm.trx_para_level = 6;
3307 btc->dm.trx_para_level = 0;
3311 #define _tdma_set_flctrl(btc, flc) ({(btc)->dm.tdma.rxflctrl = flc; })
3312 #define _tdma_set_flctrl_role(btc, role) ({(btc)->dm.tdma.rxflctrl_role = role; })
3313 #define _tdma_set_tog(btc, wtg) ({(btc)->dm.tdma.wtgle_n = wtg; })
3314 #define _tdma_set_lek(btc, lek) ({(btc)->dm.tdma.leak_n = lek; })
3387 struct rtw89_btc *btc = &rtwdev->btc;
3388 struct rtw89_btc_dm *dm = &btc->dm;
3394 if (btc->ant_type == BTC_ANT_SHARED) {
3395 if (btc->cx.wl.status.map._4way)
3408 btc->bt_req_en = false;
3414 _slot_set_tbl(btc, CXST_OFF, cxtbl[2]);
3415 btc->update_policy_force = true;
3424 _slot_set_tbl(btc, CXST_OFF, cxtbl[2]);
3427 _slot_set_tbl(btc, CXST_OFF, cxtbl[1]);
3430 _slot_set_tbl(btc, CXST_OFF, cxtbl[0]);
3433 _slot_set_tbl(btc, CXST_OFF, cxtbl[16]);
3436 _slot_set_tbl(btc, CXST_OFF, cxtbl[17]);
3439 _slot_set_tbl(btc, CXST_OFF, cxtbl[18]);
3442 _slot_set_tbl(btc, CXST_OFF, cxtbl[5]);
3445 _slot_set_tbl(btc, CXST_OFF, cxtbl[8]);
3448 _slot_set_tbl(btc, CXST_OFF, cxtbl[6]);
3458 _slot_set_tbl(btc, CXST_OFF, cxtbl[8]);
3463 btc->bt_req_en = true;
3474 _slot_set(btc, CXST_E2G, 20, cxtbl[1], SLOT_ISO);
3486 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3487 _slot_set(btc, CXST_B1, 30, tbl_b1, SLOT_MIX);
3490 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
3491 _slot_set(btc, CXST_B1, 50, tbl_b1, SLOT_MIX);
3494 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3495 _slot_set(btc, CXST_B1, 30, tbl_b1, SLOT_MIX);
3498 _slot_set(btc, CXST_W1, 40, tbl_w1, SLOT_ISO);
3499 _slot_set(btc, CXST_B1, 10, tbl_b1, SLOT_MIX);
3502 _slot_set(btc, CXST_W1, 40, cxtbl[1], SLOT_ISO);
3503 _slot_set(btc, CXST_B1, 10, tbl_b1, SLOT_MIX);
3506 _slot_set(btc, CXST_W1, 40, cxtbl[25], SLOT_ISO);
3507 _slot_set(btc, CXST_B1, 10, cxtbl[25], SLOT_ISO);
3510 _slot_set(btc, CXST_W1, 40, cxtbl[20], SLOT_ISO);
3511 _slot_set(btc, CXST_B1, 10, cxtbl[25], SLOT_MIX);
3514 _slot_set(btc, CXST_W1, 70, tbl_w1, SLOT_ISO);
3515 _slot_set(btc, CXST_B1, 10, tbl_b1, SLOT_MIX);
3518 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3519 _slot_set(btc, CXST_B1, 60, tbl_b1, SLOT_MIX);
3522 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3523 _slot_set(btc, CXST_B1, 60, tbl_b1, SLOT_MIX);
3526 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3527 _slot_set(btc, CXST_B1, 80, tbl_b1, SLOT_MIX);
3530 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
3532 _slot_set(btc, CXST_B1, dm->slot_dur[CXST_B1],
3540 if (btc->cx.wl.role_info.role_map.role.ap)
3541 _tdma_set_flctrl(btc, CXFLC_QOSNULL);
3545 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3546 _slot_set(btc, CXST_B1, 30, tbl_b1, SLOT_MIX);
3549 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
3550 _slot_set(btc, CXST_B1, 50, tbl_b1, SLOT_MIX);
3553 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3554 _slot_set(btc, CXST_B1, 30, tbl_b1, SLOT_MIX);
3557 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3558 _slot_set(btc, CXST_B1, 60, tbl_b1, SLOT_MIX);
3561 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3562 _slot_set(btc, CXST_B1, 60, tbl_b1, SLOT_MIX);
3565 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3566 _slot_set(btc, CXST_B1, 80, tbl_b1, SLOT_MIX);
3575 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
3576 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3579 _slot_set(btc, CXST_W1, 60, tbl_w1, SLOT_ISO);
3580 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3583 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3584 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3587 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
3589 _slot_set(btc, CXST_B1, dm->slot_dur[CXST_B1],
3599 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
3600 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3603 _slot_set(btc, CXST_W1, 60, tbl_w1, SLOT_ISO);
3604 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3607 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3608 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3611 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
3613 _slot_set(btc, CXST_B1, dm->slot_dur[CXST_B1],
3623 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3624 _slot_set(btc, CXST_B4, 50, tbl_b4, SLOT_MIX);
3625 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3628 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3629 _slot_set(btc, CXST_B4, 70, tbl_b4, SLOT_MIX);
3630 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3633 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
3634 _slot_set(btc, CXST_B4, 50, tbl_b4, SLOT_MIX);
3635 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3638 _slot_set(btc, CXST_W1, 60, tbl_w1, SLOT_ISO);
3639 _slot_set(btc, CXST_B4, 60, tbl_b4, SLOT_MIX);
3640 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3643 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3644 _slot_set(btc, CXST_B4, 80, tbl_b4, SLOT_MIX);
3645 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3648 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
3650 _slot_set(btc, CXST_B4, dm->slot_dur[CXST_B4],
3660 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3661 _slot_set(btc, CXST_B4, 50, tbl_b4, SLOT_MIX);
3662 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3665 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3666 _slot_set(btc, CXST_B4, 70, tbl_b4, SLOT_MIX);
3667 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3670 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
3671 _slot_set(btc, CXST_B4, 50, tbl_b4, SLOT_MIX);
3672 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3675 _slot_set(btc, CXST_W1, 60, tbl_w1, SLOT_ISO);
3676 _slot_set(btc, CXST_B4, 60, tbl_b4, SLOT_MIX);
3677 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3680 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3681 _slot_set(btc, CXST_B4, 80, tbl_b4, SLOT_MIX);
3682 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3685 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
3687 _slot_set(btc, CXST_B4, dm->slot_dur[CXST_B4],
3698 struct rtw89_btc *btc = &rtwdev->btc;
3699 struct rtw89_btc_dm *dm = &btc->dm;
3701 struct rtw89_btc_wl_role_info_v1 *wl_rinfo = &btc->cx.wl.role_info_v1;
3702 struct rtw89_btc_bt_a2dp_desc *a2dp = &btc->cx.bt.link_info.a2dp_desc;
3703 struct rtw89_btc_bt_hid_desc *hid = &btc->cx.bt.link_info.hid_desc;
3704 struct rtw89_btc_bt_hfp_desc *hfp = &btc->cx.bt.link_info.hfp_desc;
3705 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
3712 if (btc->ant_type == BTC_ANT_SHARED) {
3713 if (btc->cx.wl.status.map._4way)
3746 btc->update_policy_force = true;
3748 _slot_set_le(btc, CXST_OFF, s_def[CXST_OFF].dur,
3750 _slot_set_tbl(btc, CXST_OFF, cxtbl[2]);
3755 _slot_set_le(btc, CXST_OFF, s_def[CXST_OFF].dur,
3760 _slot_set_tbl(btc, CXST_OFF, cxtbl[2]);
3763 _slot_set_tbl(btc, CXST_OFF, cxtbl[1]);
3766 _slot_set_tbl(btc, CXST_OFF, cxtbl[1]);
3767 _slot_set_type(btc, CXST_OFF, SLOT_ISO);
3770 _slot_set_tbl(btc, CXST_OFF, cxtbl[0]);
3771 _slot_set_type(btc, CXST_OFF, SLOT_ISO);
3774 _slot_set_tbl(btc, CXST_OFF, cxtbl[16]);
3777 _slot_set_tbl(btc, CXST_OFF, cxtbl[0]);
3780 _slot_set_tbl(btc, CXST_OFF, cxtbl[24]);
3783 _slot_set_tbl(btc, CXST_OFF, cxtbl[26]);
3786 _slot_set_tbl(btc, CXST_OFF, cxtbl[27]);
3789 _slot_set_tbl(btc, CXST_OFF, cxtbl[5]);
3792 _slot_set_tbl(btc, CXST_OFF, cxtbl[8]);
3795 _slot_set_tbl(btc, CXST_OFF, cxtbl[7]);
3798 _slot_set_tbl(btc, CXST_OFF, cxtbl[6]);
3807 _slot_set_le(btc, CXST_OFF, s_def[CXST_OFF].dur,
3812 _slot_set_tbl(btc, CXST_OFF, cxtbl[8]);
3830 _slot_set(btc, CXST_E2G, 0, tbl_w1, SLOT_ISO);
3831 _slot_set_le(btc, CXST_EBT, s_def[CXST_EBT].dur,
3833 _slot_set_dur(btc, CXST_EBT, dur_2);
3836 _slot_set(btc, CXST_E2G, 0, cxtbl[1], SLOT_ISO);
3837 _slot_set_le(btc, CXST_EBT, s_def[CXST_EBT].dur,
3839 _slot_set_dur(btc, CXST_EBT, dur_2);
3842 _slot_set_le(btc, CXST_E2G, s_def[CXST_E2G].dur,
3844 _slot_set_le(btc, CXST_E5G, s_def[CXST_E5G].dur,
3846 _slot_set_le(btc, CXST_EBT, s_def[CXST_EBT].dur,
3848 _slot_set_le(btc, CXST_ENULL, s_def[CXST_ENULL].dur,
3852 _slot_set(btc, CXST_E2G, 20, cxtbl[1], SLOT_ISO);
3853 _slot_set_le(btc, CXST_E5G, s_def[CXST_E5G].dur,
3855 _slot_set_le(btc, CXST_EBT, s_def[CXST_EBT].dur,
3857 _slot_set_le(btc, CXST_ENULL, s_def[CXST_ENULL].dur,
3862 _slot_set(btc, CXST_E2G, 0, cxtbl[2], SLOT_MIX);
3864 _slot_set(btc, CXST_E2G, 0, tbl_w1, SLOT_MIX);
3865 _slot_set_le(btc, CXST_EBT, s_def[CXST_EBT].dur,
3869 _slot_set(btc, CXST_E2G, 0, cxtbl[1], SLOT_MIX);
3870 _slot_set(btc, CXST_EBT, 0, cxtbl[1], SLOT_MIX);
3875 _slot_set_le(btc, CXST_E5G, s_def[CXST_E5G].dur,
3877 _slot_set_le(btc, CXST_OFF, s_def[CXST_OFF].dur,
3886 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3887 _slot_set(btc, CXST_B1, 30, tbl_b1, SLOT_MIX);
3890 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
3891 _slot_set(btc, CXST_B1, 50, tbl_b1, SLOT_MIX);
3894 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3895 _slot_set(btc, CXST_B1, 30, tbl_b1, SLOT_MIX);
3898 _slot_set(btc, CXST_W1, 40, tbl_w1, SLOT_ISO);
3899 _slot_set(btc, CXST_B1, 10, tbl_b1, SLOT_MIX);
3902 _slot_set(btc, CXST_W1, 40, cxtbl[1], SLOT_ISO);
3903 _slot_set(btc, CXST_B1, 10, tbl_b1, SLOT_MIX);
3906 _slot_set(btc, CXST_W1, 40, cxtbl[25], SLOT_ISO);
3907 _slot_set(btc, CXST_B1, 10, cxtbl[25], SLOT_ISO);
3910 _slot_set(btc, CXST_W1, 40, cxtbl[20], SLOT_ISO);
3911 _slot_set(btc, CXST_B1, 10, cxtbl[25], SLOT_MIX);
3914 _slot_set(btc, CXST_W1, 70, tbl_w1, SLOT_ISO);
3915 _slot_set(btc, CXST_B1, 10, tbl_b1, SLOT_MIX);
3918 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3919 _slot_set(btc, CXST_B1, 60, tbl_b1, SLOT_MIX);
3922 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3923 _slot_set(btc, CXST_B1, 60, tbl_b1, SLOT_MIX);
3926 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3927 _slot_set(btc, CXST_B1, 80, tbl_b1, SLOT_MIX);
3930 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
3932 _slot_set(btc, CXST_B1, dm->slot_dur[CXST_B1],
3945 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3946 _slot_set(btc, CXST_B1, 30, tbl_b1, SLOT_MIX);
3949 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
3950 _slot_set(btc, CXST_B1, 50, tbl_b1, SLOT_MIX);
3953 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3954 _slot_set(btc, CXST_B1, 30, tbl_b1, SLOT_MIX);
3957 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3958 _slot_set(btc, CXST_B1, 60, tbl_b1, SLOT_MIX);
3961 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
3962 _slot_set(btc, CXST_B1, 60, tbl_b1, SLOT_MIX);
3965 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3966 _slot_set(btc, CXST_B1, 80, tbl_b1, SLOT_MIX);
3969 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
3971 _slot_set(btc, CXST_B1, dm->slot_dur[CXST_B1],
3984 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
3985 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3988 _slot_set(btc, CXST_W1, 60, tbl_w1, SLOT_ISO);
3989 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3992 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
3993 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
3996 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
3998 _slot_set(btc, CXST_B1, dm->slot_dur[CXST_B1],
4011 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
4012 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
4015 _slot_set(btc, CXST_W1, 60, tbl_w1, SLOT_ISO);
4016 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
4019 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
4020 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
4023 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
4025 _slot_set(btc, CXST_B1, dm->slot_dur[CXST_B1],
4038 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
4039 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
4040 _slot_set(btc, CXST_B4, 50, tbl_b4, SLOT_MIX);
4043 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
4044 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
4045 _slot_set(btc, CXST_B4, 70, tbl_b4, SLOT_MIX);
4048 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
4049 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
4050 _slot_set(btc, CXST_B4, 50, tbl_b4, SLOT_MIX);
4053 _slot_set(btc, CXST_W1, 60, tbl_w1, SLOT_ISO);
4054 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
4055 _slot_set(btc, CXST_B4, 60, tbl_b4, SLOT_MIX);
4058 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
4059 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
4060 _slot_set(btc, CXST_B4, 80, tbl_b4, SLOT_MIX);
4063 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
4065 _slot_set(btc, CXST_B1, dm->slot_dur[CXST_B1],
4067 _slot_set(btc, CXST_B4, dm->slot_dur[CXST_B4],
4080 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
4081 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
4082 _slot_set(btc, CXST_B4, 50, tbl_b4, SLOT_MIX);
4085 _slot_set(btc, CXST_W1, 30, tbl_w1, SLOT_ISO);
4086 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
4087 _slot_set(btc, CXST_B4, 70, tbl_b4, SLOT_MIX);
4090 _slot_set(btc, CXST_W1, 50, tbl_w1, SLOT_ISO);
4091 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
4092 _slot_set(btc, CXST_B4, 50, tbl_b4, SLOT_MIX);
4095 _slot_set(btc, CXST_W1, 60, tbl_w1, SLOT_ISO);
4096 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
4097 _slot_set(btc, CXST_B4, 60, tbl_b4, SLOT_MIX);
4100 _slot_set(btc, CXST_W1, 20, tbl_w1, SLOT_ISO);
4101 _slot_set(btc, CXST_B1, BTC_B1_MAX, tbl_b1, SLOT_MIX);
4102 _slot_set(btc, CXST_B4, 80, tbl_b4, SLOT_MIX);
4105 _slot_set(btc, CXST_W1, dm->slot_dur[CXST_W1],
4107 _slot_set(btc, CXST_B1, dm->slot_dur[CXST_B1],
4109 _slot_set(btc, CXST_B4, dm->slot_dur[CXST_B4],
4121 _tdma_set_flctrl_role(btc, null_role);
4126 _tdma_set_lek(btc, 1);
4129 btc->dm.tdma.option_ctrl |= BIT(0);
4130 btc->update_policy_force = true;
4138 struct rtw89_btc_wl_info *wl = &rtwdev->btc.cx.wl;
4144 if (rtwdev->btc.ver->fwlrole == 8) {
4169 struct rtw89_btc *btc = &rtwdev->btc;
4170 struct rtw89_btc_dm *dm = &btc->dm;
4171 struct rtw89_btc_cx *cx = &btc->cx;
4172 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
4181 if (btc->ver->fwlrole == 1)
4183 else if (btc->ver->fwlrole == 2)
4185 else if (btc->ver->fwlrole == 7)
4187 else if (btc->ver->fwlrole == 8)
4190 if (btc->dm.run_reason == BTC_RSN_NTFY_POWEROFF ||
4191 btc->dm.run_reason == BTC_RSN_NTFY_RADIO_STATE ||
4192 btc->dm.run_reason == BTC_RSN_CMD_SET_COEX || dbcc_chg)
4204 } else if (btc->dm.run_reason != BTC_RSN_NTFY_WL_RFK &&
4299 struct rtw89_btc *btc = &rtwdev->btc;
4300 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
4301 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
4305 struct rtw89_btc_dm *dm = &btc->dm;
4308 if (btc->dm.run_reason == BTC_RSN_NTFY_POWEROFF ||
4309 btc->dm.run_reason == BTC_RSN_NTFY_RADIO_STATE ||
4310 btc->dm.run_reason == BTC_RSN_CMD_SET_COEX || wl_rinfo->dbcc_chg)
4314 btc->dm.wl_btg_rx == 2)
4326 } else if (btc->dm.run_reason != BTC_RSN_NTFY_WL_RFK &&
4423 struct rtw89_btc *btc = &rtwdev->btc;
4424 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
4428 if (wl->status.map.rf_off || btc->dm.bt_only) {
4440 if (btc->cx.bt.link_info.a2dp_desc.active)
4451 struct rtw89_btc *btc = &rtwdev->btc;
4458 btc->dm.freerun = true;
4479 struct rtw89_btc *btc = &rtwdev->btc;
4480 struct rtw89_btc_bt_link_info *b = &btc->cx.bt.link_info;
4481 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
4485 if (btc->ant_type == BTC_ANT_SHARED) { /* shared-antenna */
4486 switch (btc->cx.state_map) {
4519 struct rtw89_btc *btc = &rtwdev->btc;
4520 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
4524 if (btc->ant_type == BTC_ANT_SHARED) {
4525 if (btc->cx.wl.status.map._4way) {
4528 btc->cx.bt.scan_rx_low_pri = true;
4546 struct rtw89_btc *btc = &rtwdev->btc;
4547 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
4548 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
4554 if (btc->ant_type == BTC_ANT_SHARED) { /* shared-antenna */
4558 btc->cx.bt.scan_rx_low_pri = true;
4585 struct rtw89_btc *btc = &rtwdev->btc;
4586 struct rtw89_btc_bt_link_info *bt_linfo = &btc->cx.bt.link_info;
4588 struct rtw89_btc_dm *dm = &btc->dm;
4592 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;
4659 struct rtw89_btc_bt_link_info *bt_linfo = &btc->cx.bt.link_info;
4665 switch (btc->cx.state_map) {
4668 btc->dm.slot_dur[CXST_W1] = 80;
4669 btc->dm.slot_dur[CXST_B1] = 20;
4695 struct rtw89_btc *btc = &rtwdev->btc;
4696 struct rtw89_btc_bt_link_info *bt_linfo = &btc->cx.bt.link_info;
4698 struct rtw89_btc_dm *dm = &btc->dm;
4702 switch (btc->cx.state_map) {
4739 struct rtw89_btc *btc = &rtwdev->btc;
4743 switch (btc->cx.state_map) {
4767 struct rtw89_btc *btc = &rtwdev->btc;
4771 switch (btc->cx.state_map) {
4795 struct rtw89_btc *btc = &rtwdev->btc;
4799 switch (btc->cx.state_map) {
4832 struct rtw89_btc *btc = &rtwdev->btc;
4836 if (btc->ant_type == BTC_ANT_SHARED)
4850 struct rtw89_btc *btc = &rtwdev->btc;
4851 struct rtw89_btc_wl_rfk_info rfk = btc->cx.wl.rfk_info;
4859 btc->dm.tdma_instant_excute = 1;
4862 btc->ant_type == BTC_ANT_SHARED) {
4873 struct rtw89_btc *btc = &rtwdev->btc;
4874 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
4882 const struct rtw89_btc_ver *ver = btc->ver;
4883 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
4884 struct rtw89_btc_dm *dm = &btc->dm;
4886 u32 run_reason = btc->dm.run_reason;
4890 if (btc->manual_ctrl)
4962 struct rtw89_btc *btc = &rtwdev->btc;
4963 struct rtw89_btc_bt_link_info *bt_linfo = &btc->cx.bt.link_info;
4964 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
4969 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
4970 struct rtw89_btc_dm *dm = &btc->dm;
4972 u8 role_ver = rtwdev->btc.ver->fwlrole;
4975 if (btc->manual_ctrl)
5001 btc->cx.bt.link_info.profile_cnt.now == 0) {
5010 } else if (btc->ant_type == BTC_ANT_SHARED) {
5049 struct rtw89_btc *btc = &rtwdev->btc;
5050 struct rtw89_btc_cx *cx = &btc->cx;
5059 if (btc->ver->fwlrole == 8)
5118 struct rtw89_btc *btc = &rtwdev->btc;
5119 const struct rtw89_btc_ver *ver = btc->ver;
5120 struct rtw89_btc_cx *cx = &btc->cx;
5121 struct rtw89_btc_dm *dm = &btc->dm;
5138 if (btc->manual_ctrl)
5155 igno_bt = btc->ctrl.ctrl_v7.igno_bt;
5157 igno_bt = btc->ctrl.ctrl.igno_bt;
5159 if (btc->dm.freerun || igno_bt || b->profile_cnt.now == 0 ||
5202 struct rtw89_btc *btc = &rtwdev->btc;
5203 const struct rtw89_btc_ver *ver = btc->ver;
5204 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
5210 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
5227 if (mode != BTC_WLINK_NOLINK && btc->dm.wl_btg_rx)
5238 struct rtw89_btc *btc = &rtwdev->btc;
5239 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
5246 struct rtw89_btc *btc = &rtwdev->btc;
5247 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
5249 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
5250 struct rtw89_btc_dm *dm = &btc->dm;
5261 bt_rom_code_id = chip_id_to_bt_rom_code_id(rtwdev->btc.ver->chip_id);
5286 btc->cx.cnt_wl[BTC_WCNT_SCBDUPDATE]++;
5288 btc->dm.tdma_instant_excute = 0;
5293 struct rtw89_btc *btc = &rtwdev->btc;
5294 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
5299 struct rtw89_btc_dm *dm = &btc->dm;
5383 struct rtw89_btc *btc = &rtwdev->btc;
5386 if (btc->ant_type == BTC_ANT_SHARED) {
5387 if (btc->cx.wl.status.map._4way)
5389 else if (btc->cx.wl.status.val & btc_scanning_map.val)
5391 else if (btc->cx.bt.link_info.status.map.connect == 0)
5399 btc->dm.e2g_slot_limit = BTC_E2G_LIMIT_DEF;
5407 struct rtw89_btc *btc = &rtwdev->btc;
5408 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
5429 { struct rtw89_btc *btc = &rtwdev->btc;
5433 if (btc->ant_type == BTC_ANT_SHARED) { /* shared-antenna */
5434 if (btc->cx.bt.link_info.profile_cnt.now == 0)
5447 struct rtw89_btc *btc = &rtwdev->btc;
5451 if (btc->ant_type == BTC_ANT_SHARED) { /* shared-antenna */
5452 if (btc->cx.bt.link_info.profile_cnt.now == 0)
5465 struct rtw89_btc *btc = &rtwdev->btc;
5466 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
5467 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
5468 struct rtw89_btc_dm *dm = &btc->dm;
5473 if (btc->ant_type == BTC_ANT_DEDICATED) {
5504 dur < btc->bt_req_len) {
5527 struct rtw89_btc *btc = &rtwdev->btc;
5528 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
5529 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
5530 struct rtw89_btc_dm *dm = &btc->dm;
5536 if (btc->ver->fwlrole == 2) {
5539 } else if (btc->ver->fwlrole == 7) {
5546 if (btc->ant_type == BTC_ANT_DEDICATED) {
5577 dur < btc->bt_req_len) {
5600 struct rtw89_btc *btc = &rtwdev->btc;
5601 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
5602 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
5603 struct rtw89_btc_dm *dm = &btc->dm;
5606 if (btc->ant_type == BTC_ANT_SHARED) {
5625 struct rtw89_btc *btc = &rtwdev->btc;
5629 if (btc->ant_type == BTC_ANT_SHARED) {
5630 if (btc->cx.bt.link_info.profile_cnt.now == 0)
5642 struct rtw89_btc *btc = &rtwdev->btc;
5646 if (btc->ant_type == BTC_ANT_SHARED) { /* shared-antenna */
5647 if (btc->cx.bt.link_info.profile_cnt.now == 0)
5660 struct rtw89_btc *btc = &rtwdev->btc;
5664 if (btc->ant_type == BTC_ANT_SHARED) { /* shared-antenna */
5673 struct rtw89_btc *btc = &rtwdev->btc;
5677 if (btc->ant_type == BTC_ANT_SHARED) { /* shared-antenna */
5678 if (btc->cx.bt.link_info.profile_cnt.now == 0)
5692 struct rtw89_btc *btc = &rtwdev->btc;
5702 btc->cx.cnt_bt[BTC_BCNT_SCBDREAD]++;
5709 struct rtw89_btc *btc = &rtwdev->btc;
5710 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
5761 struct rtw89_btc *btc = &rtwdev->btc;
5763 btc->cx.wl.dbcc_info.real_band[phy_idx] =
5764 btc->cx.wl.scan_info.phy_map & BIT(phy_idx) ?
5765 btc->cx.wl.dbcc_info.scan_band[phy_idx] :
5766 btc->cx.wl.dbcc_info.op_band[phy_idx];
5771 struct rtw89_btc *btc = &rtwdev->btc;
5772 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
5922 struct rtw89_btc *btc = &rtwdev->btc;
5923 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
6072 struct rtw89_btc *btc = &rtwdev->btc;
6073 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
6255 struct rtw89_btc_wl_info *wl = &rtwdev->btc.cx.wl;
6261 if (rtwdev->btc.ver->fwlrole == 7)
6263 else if (rtwdev->btc.ver->fwlrole == 8)
6315 struct rtw89_btc_wl_role_info_v8 *rinfo_v8 = &rtwdev->btc.cx.wl.role_info_v8;
6316 struct rtw89_btc_wl_role_info_v7 *rinfo_v7 = &rtwdev->btc.cx.wl.role_info_v7;
6317 u8 role_ver = rtwdev->btc.ver->fwlrole;
6386 struct rtw89_btc *btc = &rtwdev->btc;
6387 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
6523 btc->cx.cnt_wl[BTC_WCNT_DBCC_CHG]++;
6542 struct rtw89_btc *btc = &rtwdev->btc;
6543 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
6588 btc->dm.leak_ap = 0;
6694 btc->cx.cnt_wl[BTC_WCNT_DBCC_CHG]++;
6727 struct rtw89_btc *btc = &rtwdev->btc;
6728 struct rtw89_btc_dm *dm = &rtwdev->btc.dm;
6729 struct rtw89_btc_cx *cx = &btc->cx;
6748 struct rtw89_btc *btc = &rtwdev->btc;
6749 struct rtw89_btc_dm *dm = &rtwdev->btc.dm;
6750 struct rtw89_btc_bt_a2dp_desc *a2dp = &btc->cx.bt.link_info.a2dp_desc;
6764 struct rtw89_btc *btc = &rtwdev->btc;
6765 struct rtw89_btc_dm *dm = &rtwdev->btc.dm;
6766 struct rtw89_btc_cx *cx = &btc->cx;
6787 struct rtw89_btc *btc = &rtwdev->btc;
6788 struct rtw89_btc_cx *cx = &btc->cx;
6789 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
6851 struct rtw89_btc *btc = &rtwdev->btc;
6852 struct rtw89_btc_cx *cx = &btc->cx;
6872 struct rtw89_btc *btc = &rtwdev->btc;
6873 const struct rtw89_btc_ver *ver = btc->ver;
6874 struct rtw89_btc_dm *dm = &rtwdev->btc.dm;
6875 struct rtw89_btc_cx *cx = &btc->cx;
6876 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
6877 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
6905 igno_bt = btc->ctrl.ctrl_v7.igno_bt;
6906 always_freerun = btc->ctrl.ctrl_v7.always_freerun;
6908 igno_bt = btc->ctrl.ctrl.igno_bt;
6909 always_freerun = btc->ctrl.ctrl.always_freerun;
6918 if (btc->manual_ctrl) {
7065 btc->ctrl.ctrl_v7.igno_bt = igno_bt;
7067 btc->ctrl.ctrl.igno_bt = igno_bt;
7073 struct rtw89_btc *btc = &rtwdev->btc;
7076 btc->dm.cnt_notify[BTC_NCNT_POWER_ON]++;
7081 struct rtw89_btc *btc = &rtwdev->btc;
7082 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
7085 btc->dm.cnt_notify[BTC_NCNT_POWER_OFF]++;
7087 btc->cx.wl.status.map.rf_off = 1;
7088 btc->cx.wl.status.map.busy = 0;
7096 btc->cx.wl.status.map.rf_off_pre = btc->cx.wl.status.map.rf_off;
7102 struct rtw89_btc *btc = &rtwdev->btc;
7103 const struct rtw89_btc_ver *ver = btc->ver;
7104 struct rtw89_btc_dm *dm = &btc->dm;
7105 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
7111 dm->init_info.init_v7.cx_other = btc->cx.other.type;
7113 dm->init_info.init_v7.module = btc->mdinfo.md_v7;
7119 dm->init_info.init.cx_other = btc->cx.other.type;
7121 dm->init_info.init.module = btc->mdinfo.md;
7127 struct rtw89_btc *btc = &rtwdev->btc;
7128 struct rtw89_btc_dm *dm = &rtwdev->btc.dm;
7129 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
7131 const struct rtw89_btc_ver *ver = btc->ver;
7134 btc->dm.run_reason = BTC_RSN_NONE;
7135 btc->dm.run_action = BTC_ACT_NONE;
7137 btc->ctrl.ctrl_v7.igno_bt = true;
7139 btc->ctrl.ctrl.igno_bt = true;
7183 struct rtw89_btc *btc = &rtwdev->btc;
7184 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
7193 btc->dm.cnt_notify[BTC_NCNT_SCAN_START]++;
7210 struct rtw89_btc *btc = &rtwdev->btc;
7211 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
7215 btc->dm.cnt_notify[BTC_NCNT_SCAN_FINISH]++;
7231 struct rtw89_btc *btc = &rtwdev->btc;
7232 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
7241 btc->dm.cnt_notify[BTC_NCNT_SWITCH_BAND]++;
7254 struct rtw89_btc *btc = &rtwdev->btc;
7255 struct rtw89_btc_cx *cx = &btc->cx;
7311 btc->dm.cnt_notify[BTC_NCNT_SPECIAL_PACKET]++;
7318 btc.eapol_notify_work);
7329 btc.arp_notify_work);
7339 btc.dhcp_notify_work);
7350 btc.icmp_notify_work);
7361 struct rtw89_btc *btc = &rtwdev->btc;
7362 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
7391 u8 mode = rtwdev->btc.cx.wl.role_info.link_mode;
7394 if (mode == BTC_WLINK_5G || rtwdev->btc.dm.freerun) {
7410 struct rtw89_btc *btc = &rtwdev->btc;
7411 struct rtw89_btc_cx *cx = &btc->cx;
7458 btc->dm.trx_info.bt_profile = u32_get_bits(btinfo.val, BT_PROFILE_PROTOCOL_MASK);
7476 btc->dm.trx_info.bt_rssi = bt->rssi_level;
7552 struct rtw89_btc *btc = &rtwdev->btc;
7553 const struct rtw89_btc_ver *ver = btc->ver;
7554 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
7626 btc->dm.cnt_notify[BTC_NCNT_ROLE_INFO]++;
7653 wa_type = btc->mdinfo.md_v7.wa_type;
7655 wa_type = btc->mdinfo.md.wa_type;
7667 btc->dm.leak_ap = 0;
7683 struct rtw89_btc *btc = &rtwdev->btc;
7684 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
7689 btc->dm.cnt_notify[BTC_NCNT_RADIO_STATE]++;
7734 btc->dm.cnt_dm[BTC_DCNT_BTCNT_HANG] = 0;
7735 btc->dm.tdma_instant_excute = 1;
7746 struct rtw89_btc *btc = &rtwdev->btc;
7747 struct rtw89_btc_cx *cx = &btc->cx;
7768 btc->dm.cnt_notify[BTC_NCNT_WL_RFK]++;
7805 __func__, btc->dm.cnt_notify[BTC_NCNT_WL_RFK], result);
7862 struct rtw89_btc *btc = &rtwdev->btc;
7863 struct rtw89_btc_dm *dm = &btc->dm;
7864 const struct rtw89_btc_ver *ver = btc->ver;
7865 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
7904 if (btc->ant_type == BTC_ANT_DEDICATED &&
8009 struct rtw89_btc *btc = &rtwdev->btc;
8010 struct rtw89_btc_dm *dm = &btc->dm;
8011 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
8020 btc->dm.cnt_notify[BTC_NCNT_WL_STA]++;
8043 } else if (btc->dm.cnt_notify[BTC_NCNT_WL_STA] >=
8044 btc->dm.cnt_dm[BTC_DCNT_WL_STA_LAST] + BTC_NHM_CHK_INTVL) {
8045 btc->dm.cnt_dm[BTC_DCNT_WL_STA_LAST] =
8046 btc->dm.cnt_notify[BTC_NCNT_WL_STA];
8047 } else if (btc->dm.cnt_notify[BTC_NCNT_WL_STA] <
8048 btc->dm.cnt_dm[BTC_DCNT_WL_STA_LAST]) {
8049 btc->dm.cnt_dm[BTC_DCNT_WL_STA_LAST] =
8050 btc->dm.cnt_notify[BTC_NCNT_WL_STA];
8056 struct rtw89_btc *btc = &rtwdev->btc;
8057 const struct rtw89_btc_ver *ver = btc->ver;
8104 struct rtw89_btc *btc = &rtwdev->btc;
8105 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
8131 btc->cx.cnt_bt[BTC_BCNT_INFOUPDATE]++;
8137 btc->cx.cnt_bt[BTC_BCNT_SCBDUPDATE]++;
8143 btc->dbg.rb_done = true;
8144 btc->dbg.rb_val = le32_to_cpu(*((__le32 *)buf));
8148 btc->dbg.rb_done = true;
8149 btc->dbg.rb_val = buf[0];
8152 btc->dm.cnt_dm[BTC_DCNT_CX_RUNINFO]++;
8161 union rtw89_btc_module_info *md = &rtwdev->btc.mdinfo;
8163 const struct rtw89_btc_ver *ver = rtwdev->btc.ver;
8165 struct rtw89_btc *btc = &rtwdev->btc;
8166 struct rtw89_btc_dm *dm = &btc->dm;
8167 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
8168 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
8240 btc->cx.other.type, rtwdev->dbcc_en, hal->tx_nss,
8246 struct rtw89_btc *btc = &rtwdev->btc;
8248 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
8267 if (btc->ver->fwlrole == 8)
8268 plink = &btc->cx.wl.rlink_info[i][0];
8270 plink = &btc->cx.wl.link_info[i];
8308 struct rtw89_btc *btc = &rtwdev->btc;
8309 const struct rtw89_btc_ver *ver = btc->ver;
8310 struct rtw89_btc_cx *cx = &btc->cx;
8319 if (!(btc->dm.coex_info_map & BTC_COEX_INFO_WL))
8363 struct rtw89_btc *btc = &rtwdev->btc;
8364 struct rtw89_btc_bt_link_info *bt_linfo = &btc->cx.bt.link_info;
8414 struct rtw89_btc *btc = &rtwdev->btc;
8415 const struct rtw89_btc_ver *ver = btc->ver;
8416 struct rtw89_btc_cx *cx = &btc->cx;
8420 union rtw89_btc_module_info *md = &btc->mdinfo;
8425 if (!(btc->dm.coex_info_map & BTC_COEX_INFO_BT))
8882 struct rtw89_btc *btc = &rtwdev->btc;
8883 struct rtw89_btc_dm *dm = &btc->dm;
8896 struct rtw89_btc *btc = &rtwdev->btc;
8897 const struct rtw89_btc_ver *ver = btc->ver;
8898 struct rtw89_btc_dm *dm = &btc->dm;
8899 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
8900 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
8907 (btc->manual_ctrl ? "(Manual)" : "(Auto)"));
8912 btc->ant_type == BTC_ANT_SHARED ? "shared" : "dedicated",
8922 igno_bt = btc->ctrl.ctrl_v7.igno_bt;
8924 igno_bt = btc->ctrl.ctrl.igno_bt;
8928 dm->freerun, btc->lps, dm->wl_mimo_ps);
8955 dm->wl_tx_limit.tx_retry, btc->bt_req_len, bt->scan_rx_low_pri);
8960 struct rtw89_btc *btc = &rtwdev->btc;
8961 const struct rtw89_btc_ver *ver = btc->ver;
8962 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
9026 struct rtw89_btc *btc = &rtwdev->btc;
9027 const struct rtw89_btc_ver *ver = btc->ver;
9028 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
9054 (u32)btc->policy_type);
9061 struct rtw89_btc *btc = &rtwdev->btc;
9062 struct rtw89_btc_dm *dm = &btc->dm;
9068 if (btc->ver->fcxslots == 1) {
9072 } else if (btc->ver->fcxslots == 7) {
9100 struct rtw89_btc *btc = &rtwdev->btc;
9101 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
9102 struct rtw89_btc_dm *dm = &btc->dm;
9103 struct rtw89_btc_bt_a2dp_desc *a2dp = &btc->cx.bt.link_info.a2dp_desc;
9228 struct rtw89_btc *btc = &rtwdev->btc;
9229 struct rtw89_btc_bt_a2dp_desc *a2dp = &btc->cx.bt.link_info.a2dp_desc;
9230 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
9231 struct rtw89_btc_dm *dm = &btc->dm;
9358 struct rtw89_btc *btc = &rtwdev->btc;
9359 struct rtw89_btc_bt_a2dp_desc *a2dp = &btc->cx.bt.link_info.a2dp_desc;
9360 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
9361 struct rtw89_btc_dm *dm = &btc->dm;
9490 struct rtw89_btc *btc = &rtwdev->btc;
9491 struct rtw89_btc_bt_a2dp_desc *a2dp = &btc->cx.bt.link_info.a2dp_desc;
9492 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
9493 struct rtw89_btc_dm *dm = &btc->dm;
9621 struct rtw89_btc_bt_info *bt = &rtwdev->btc.cx.bt;
9623 struct rtw89_btc_btf_fwinfo *pfwinfo = &rtwdev->btc.fwinfo;
9625 struct rtw89_btc_dm *dm = &rtwdev->btc.dm;
9751 struct rtw89_btc *btc = &rtwdev->btc;
9752 const struct rtw89_btc_ver *ver = btc->ver;
9753 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
9758 if (!btc->dm.tdma_now.rxflctrl)
9832 struct rtw89_btc *btc = &rtwdev->btc;
9833 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
9836 const struct rtw89_btc_ver *ver = btc->ver;
9860 trace_step = btc->ctrl.ctrl.trace_step;
9907 struct rtw89_btc *btc = &rtwdev->btc;
9908 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
9964 struct rtw89_btc *btc = &rtwdev->btc;
9965 const struct rtw89_btc_ver *ver = btc->ver;
9967 if (!(btc->dm.coex_info_map & BTC_COEX_INFO_DM))
10038 struct rtw89_btc_btf_fwinfo *pfwinfo = &rtwdev->btc.fwinfo;
10039 const struct rtw89_btc_ver *ver = rtwdev->btc.ver;
10046 gdbg = &rtwdev->btc.fwinfo.rpt_fbtc_gpio_dbg.finfo;
10080 struct rtw89_btc *btc = &rtwdev->btc;
10081 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
10084 struct rtw89_btc_cx *cx = &btc->cx;
10085 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
10086 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
10092 if (!(btc->dm.coex_info_map & BTC_COEX_INFO_MREG))
10103 btc->dm.pta_owner = rtw89_mac_get_ctrl_path(rtwdev);
10111 btc->dm.pta_owner == BTC_CTRL_BY_WL ? "WL" : "BT",
10158 struct rtw89_btc *btc = &rtwdev->btc;
10159 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
10162 struct rtw89_btc_cx *cx = &btc->cx;
10163 struct rtw89_btc_wl_info *wl = &btc->cx.wl;
10164 struct rtw89_btc_bt_info *bt = &btc->cx.bt;
10170 if (!(btc->dm.coex_info_map & BTC_COEX_INFO_MREG))
10181 btc->dm.pta_owner = rtw89_mac_get_ctrl_path(rtwdev);
10189 btc->dm.pta_owner == BTC_CTRL_BY_WL ? "WL" : "BT",
10236 struct rtw89_btc *btc = &rtwdev->btc;
10237 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
10240 struct rtw89_btc_cx *cx = &btc->cx;
10244 struct rtw89_btc_dm *dm = &btc->dm;
10306 struct rtw89_btc *btc = &rtwdev->btc;
10307 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
10310 struct rtw89_btc_cx *cx = &btc->cx;
10311 struct rtw89_btc_dm *dm = &btc->dm;
10314 u32 cnt_sum = 0, *cnt = btc->dm.cnt_notify;
10378 btc->fwinfo.rpt_en_map);
10410 struct rtw89_btc *btc = &rtwdev->btc;
10411 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
10414 struct rtw89_btc_cx *cx = &btc->cx;
10415 struct rtw89_btc_dm *dm = &btc->dm;
10418 u32 cnt_sum = 0, *cnt = btc->dm.cnt_notify;
10490 btc->fwinfo.rpt_en_map);
10522 struct rtw89_btc *btc = &rtwdev->btc;
10523 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
10526 struct rtw89_btc_cx *cx = &btc->cx;
10527 struct rtw89_btc_dm *dm = &btc->dm;
10529 u32 cnt_sum = 0, *cnt = btc->dm.cnt_notify;
10637 struct rtw89_btc *btc = &rtwdev->btc;
10638 struct rtw89_btc_btf_fwinfo *pfwinfo = &btc->fwinfo;
10641 struct rtw89_btc_cx *cx = &btc->cx;
10642 struct rtw89_btc_dm *dm = &btc->dm;
10644 u32 cnt_sum = 0, *cnt = btc->dm.cnt_notify;
10752 struct rtw89_btc_btf_fwinfo *pfwinfo = &rtwdev->btc.fwinfo;
10755 struct rtw89_btc_cx *cx = &rtwdev->btc.cx;
10756 struct rtw89_btc_dm *dm = &rtwdev->btc.dm;
10758 u32 *cnt = rtwdev->btc.dm.cnt_notify;
10779 rtwdev->btc.ver->info_buf);
10848 rtwdev->btc.hubmsg_cnt, cnt[BTC_NCNT_RESUME_DL_FW],
10854 struct rtw89_btc_btf_fwinfo *pfwinfo = &rtwdev->btc.fwinfo;
10857 struct rtw89_btc_cx *cx = &rtwdev->btc.cx;
10858 struct rtw89_btc_dm *dm = &rtwdev->btc.dm;
10860 u32 *cnt = rtwdev->btc.dm.cnt_notify;
10881 rtwdev->btc.ver->info_buf);
10950 rtwdev->btc.hubmsg_cnt, cnt[BTC_NCNT_RESUME_DL_FW],
10957 struct rtw89_btc *btc = &rtwdev->btc;
10958 const struct rtw89_btc_ver *ver = btc->ver;
10959 struct rtw89_btc_cx *cx = &btc->cx;
10966 seq_printf(m, "manual %d\n", btc->manual_ctrl);
11013 struct rtw89_btc *btc = &rtwdev->btc;
11029 btc->ver = btc_ver_def;
11034 btc->ver = &rtw89_btc_ver_defs[RTW89_DEFAULT_BTC_VER_IDX];
11038 (int)(btc->ver - rtw89_btc_ver_defs), btc->ver->fw_ver_code);