Lines Matching +full:ch +full:- +full:func
1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
2 /* Copyright(c) 2019-2020 Realtek Corporation
43 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_mem_write()
44 u32 addr = mac->mem_base_addrs[sel] + offset; in rtw89_mac_mem_write()
46 rtw89_write32(rtwdev, mac->filter_model_addr, addr); in rtw89_mac_mem_write()
47 rtw89_write32(rtwdev, mac->indir_access_addr, val); in rtw89_mac_mem_write()
53 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_mem_read()
54 u32 addr = mac->mem_base_addrs[sel] + offset; in rtw89_mac_mem_read()
56 rtw89_write32(rtwdev, mac->filter_model_addr, addr); in rtw89_mac_mem_read()
57 return rtw89_read32(rtwdev, mac->indir_access_addr); in rtw89_mac_mem_read()
75 return -EINVAL; in rtw89_mac_check_mac_en_ax()
79 return -EFAULT; in rtw89_mac_check_mac_en_ax()
91 if (ret && !test_bit(RTW89_FLAG_UNPLUGGED, rtwdev->flags)) in rtw89_mac_write_lte()
107 if (ret && !test_bit(RTW89_FLAG_UNPLUGGED, rtwdev->flags)) in rtw89_mac_read_lte()
122 switch (ctrl->type) { in rtw89_mac_dle_dfi_cfg()
126 ctrl_data = FIELD_PREP(B_AX_WDE_DFI_TRGSEL_MASK, ctrl->target) | in rtw89_mac_dle_dfi_cfg()
127 FIELD_PREP(B_AX_WDE_DFI_ADDR_MASK, ctrl->addr) | in rtw89_mac_dle_dfi_cfg()
133 ctrl_data = FIELD_PREP(B_AX_PLE_DFI_TRGSEL_MASK, ctrl->target) | in rtw89_mac_dle_dfi_cfg()
134 FIELD_PREP(B_AX_PLE_DFI_ADDR_MASK, ctrl->addr) | in rtw89_mac_dle_dfi_cfg()
138 rtw89_warn(rtwdev, "[ERR] dfi ctrl type %d\n", ctrl->type); in rtw89_mac_dle_dfi_cfg()
139 return -EINVAL; in rtw89_mac_dle_dfi_cfg()
152 ctrl->out_data = rtw89_read32(rtwdev, data_reg); in rtw89_mac_dle_dfi_cfg()
162 ctrl.type = quota->dle_type; in rtw89_mac_dle_dfi_quota_cfg()
164 ctrl.addr = quota->qtaid; in rtw89_mac_dle_dfi_quota_cfg()
171 quota->rsv_pgnum = FIELD_GET(B_AX_DLE_RSV_PGNUM, ctrl.out_data); in rtw89_mac_dle_dfi_quota_cfg()
172 quota->use_pgnum = FIELD_GET(B_AX_DLE_USE_PGNUM, ctrl.out_data); in rtw89_mac_dle_dfi_quota_cfg()
182 ctrl.type = qempty->dle_type; in rtw89_mac_dle_dfi_qempty_cfg()
184 ctrl.addr = qempty->grpsel; in rtw89_mac_dle_dfi_qempty_cfg()
191 qempty->qempty = FIELD_GET(B_AX_DLE_QEMPTY_GRP, ctrl.out_data); in rtw89_mac_dle_dfi_qempty_cfg()
305 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_dump_l0_to_l1()
314 mac->dump_qta_lost(rtwdev); in rtw89_mac_dump_l0_to_l1()
323 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_mac_dump_dmac_err_status()
343 if (chip->chip_id == RTL8852C) { in rtw89_mac_dump_dmac_err_status()
360 if (chip->chip_id == RTL8852C) in rtw89_mac_dump_dmac_err_status()
369 if (chip->chip_id == RTL8852C) { in rtw89_mac_dump_dmac_err_status()
401 } else if (chip->chip_id == RTL8922A) { in rtw89_mac_dump_dmac_err_status()
452 if (chip->chip_id == RTL8922A) { in rtw89_mac_dump_dmac_err_status()
477 if (chip->chip_id == RTL8852C || chip->chip_id == RTL8922A) { in rtw89_mac_dump_dmac_err_status()
515 if (chip->chip_id == RTL8922A) { in rtw89_mac_dump_dmac_err_status()
529 if (chip->chip_id == RTL8852C) { in rtw89_mac_dump_dmac_err_status()
555 if (chip->chip_id == RTL8922A) { in rtw89_mac_dump_dmac_err_status()
585 if (chip->chip_id == RTL8852C || chip->chip_id == RTL8922A) { in rtw89_mac_dump_dmac_err_status()
610 if (chip->chip_id == RTL8922A) { in rtw89_mac_dump_dmac_err_status()
619 if (chip->chip_id == RTL8922A) { in rtw89_mac_dump_dmac_err_status()
624 } else if (chip->chip_id == RTL8852C) { in rtw89_mac_dump_dmac_err_status()
659 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_mac_dump_cmac_err_status_ax()
699 if (chip->chip_id == RTL8852C) { in rtw89_mac_dump_cmac_err_status_ax()
711 if (chip->chip_id == RTL8852C) { in rtw89_mac_dump_cmac_err_status_ax()
730 if (chip->chip_id == RTL8852C) { in rtw89_mac_dump_cmac_err_status_ax()
757 rtw89_info(rtwdev, "--->\nerr=0x%x\n", err); in rtw89_mac_dump_err_status_ax()
771 rtwdev->hci.ops->dump_err_status(rtwdev); in rtw89_mac_dump_err_status_ax()
776 rtw89_info(rtwdev, "<---\n"); in rtw89_mac_dump_err_status_ax()
781 struct rtw89_ser *ser = &rtwdev->ser; in rtw89_mac_suppress_log()
785 if (rtwdev->chip->chip_id == RTL8852C) { in rtw89_mac_suppress_log()
797 set_bit(RTW89_SER_SUPPRESS_LOG, ser->flags); in rtw89_mac_suppress_log()
801 if (test_bit(RTW89_SER_SUPPRESS_LOG, ser->flags)) in rtw89_mac_suppress_log()
804 if (test_and_clear_bit(RTW89_SER_SUPPRESS_LOG, ser->flags)) in rtw89_mac_suppress_log()
814 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_get_err_status()
840 mac->dump_err_status(rtwdev, err); in rtw89_mac_get_err_status()
848 struct rtw89_ser *ser = &rtwdev->ser; in rtw89_mac_set_err_status()
853 rtw89_err(rtwdev, "Bad set-err-status value 0x%08x\n", err); in rtw89_mac_set_err_status()
854 return -EINVAL; in rtw89_mac_set_err_status()
861 return -EFAULT; in rtw89_mac_set_err_status()
866 if (ser->prehandle_l1 && in rtw89_mac_set_err_status()
879 struct rtw89_hfc_param *param = &rtwdev->mac.hfc_param; in hfc_reset_param()
880 u8 qta_mode = rtwdev->mac.dle_info.qta_mode; in hfc_reset_param()
882 param_inis = rtwdev->chip->hfc_param_ini[rtwdev->hci.type]; in hfc_reset_param()
884 return -EINVAL; in hfc_reset_param()
888 param->en = 0; in hfc_reset_param()
890 if (param_ini->pub_cfg) in hfc_reset_param()
891 param->pub_cfg = *param_ini->pub_cfg; in hfc_reset_param()
893 if (param_ini->prec_cfg) in hfc_reset_param()
894 param->prec_cfg = *param_ini->prec_cfg; in hfc_reset_param()
896 if (param_ini->ch_cfg) in hfc_reset_param()
897 param->ch_cfg = param_ini->ch_cfg; in hfc_reset_param()
899 memset(¶m->ch_info, 0, sizeof(param->ch_info)); in hfc_reset_param()
900 memset(¶m->pub_info, 0, sizeof(param->pub_info)); in hfc_reset_param()
901 param->mode = param_ini->mode; in hfc_reset_param()
906 static int hfc_ch_cfg_chk(struct rtw89_dev *rtwdev, u8 ch) in hfc_ch_cfg_chk() argument
908 struct rtw89_hfc_param *param = &rtwdev->mac.hfc_param; in hfc_ch_cfg_chk()
909 const struct rtw89_hfc_ch_cfg *ch_cfg = param->ch_cfg; in hfc_ch_cfg_chk()
910 const struct rtw89_hfc_pub_cfg *pub_cfg = ¶m->pub_cfg; in hfc_ch_cfg_chk()
911 const struct rtw89_hfc_prec_cfg *prec_cfg = ¶m->prec_cfg; in hfc_ch_cfg_chk()
913 if (ch >= RTW89_DMA_CH_NUM) in hfc_ch_cfg_chk()
914 return -EINVAL; in hfc_ch_cfg_chk()
916 if ((ch_cfg[ch].min && ch_cfg[ch].min < prec_cfg->ch011_prec) || in hfc_ch_cfg_chk()
917 ch_cfg[ch].max > pub_cfg->pub_max) in hfc_ch_cfg_chk()
918 return -EINVAL; in hfc_ch_cfg_chk()
919 if (ch_cfg[ch].grp >= grp_num) in hfc_ch_cfg_chk()
920 return -EINVAL; in hfc_ch_cfg_chk()
927 struct rtw89_hfc_param *param = &rtwdev->mac.hfc_param; in hfc_pub_info_chk()
928 const struct rtw89_hfc_pub_cfg *cfg = ¶m->pub_cfg; in hfc_pub_info_chk()
929 struct rtw89_hfc_pub_info *info = ¶m->pub_info; in hfc_pub_info_chk()
931 if (info->g0_used + info->g1_used + info->pub_aval != cfg->pub_max) { in hfc_pub_info_chk()
932 if (rtwdev->chip->chip_id == RTL8852A) in hfc_pub_info_chk()
935 return -EFAULT; in hfc_pub_info_chk()
943 struct rtw89_hfc_param *param = &rtwdev->mac.hfc_param; in hfc_pub_cfg_chk()
944 const struct rtw89_hfc_pub_cfg *pub_cfg = ¶m->pub_cfg; in hfc_pub_cfg_chk()
946 if (pub_cfg->grp0 + pub_cfg->grp1 != pub_cfg->pub_max) in hfc_pub_cfg_chk()
947 return -EFAULT; in hfc_pub_cfg_chk()
952 static int hfc_ch_ctrl(struct rtw89_dev *rtwdev, u8 ch) in hfc_ch_ctrl() argument
954 const struct rtw89_chip_info *chip = rtwdev->chip; in hfc_ch_ctrl()
955 const struct rtw89_page_regs *regs = chip->page_regs; in hfc_ch_ctrl()
956 struct rtw89_hfc_param *param = &rtwdev->mac.hfc_param; in hfc_ch_ctrl()
957 const struct rtw89_hfc_ch_cfg *cfg = param->ch_cfg; in hfc_ch_ctrl()
965 ret = hfc_ch_cfg_chk(rtwdev, ch); in hfc_ch_ctrl()
969 if (ch > RTW89_DMA_B1HI) in hfc_ch_ctrl()
970 return -EINVAL; in hfc_ch_ctrl()
972 val = u32_encode_bits(cfg[ch].min, B_AX_MIN_PG_MASK) | in hfc_ch_ctrl()
973 u32_encode_bits(cfg[ch].max, B_AX_MAX_PG_MASK) | in hfc_ch_ctrl()
974 (cfg[ch].grp ? B_AX_GRP : 0); in hfc_ch_ctrl()
975 rtw89_write32(rtwdev, regs->ach_page_ctrl + ch * 4, val); in hfc_ch_ctrl()
980 static int hfc_upd_ch_info(struct rtw89_dev *rtwdev, u8 ch) in hfc_upd_ch_info() argument
982 const struct rtw89_chip_info *chip = rtwdev->chip; in hfc_upd_ch_info()
983 const struct rtw89_page_regs *regs = chip->page_regs; in hfc_upd_ch_info()
984 struct rtw89_hfc_param *param = &rtwdev->mac.hfc_param; in hfc_upd_ch_info()
985 struct rtw89_hfc_ch_info *info = param->ch_info; in hfc_upd_ch_info()
986 const struct rtw89_hfc_ch_cfg *cfg = param->ch_cfg; in hfc_upd_ch_info()
994 if (ch > RTW89_DMA_H2C) in hfc_upd_ch_info()
995 return -EINVAL; in hfc_upd_ch_info()
997 val = rtw89_read32(rtwdev, regs->ach_page_info + ch * 4); in hfc_upd_ch_info()
998 info[ch].aval = u32_get_bits(val, B_AX_AVAL_PG_MASK); in hfc_upd_ch_info()
999 if (ch < RTW89_DMA_H2C) in hfc_upd_ch_info()
1000 info[ch].used = u32_get_bits(val, B_AX_USE_PG_MASK); in hfc_upd_ch_info()
1002 info[ch].used = cfg[ch].min - info[ch].aval; in hfc_upd_ch_info()
1009 const struct rtw89_chip_info *chip = rtwdev->chip; in hfc_pub_ctrl()
1010 const struct rtw89_page_regs *regs = chip->page_regs; in hfc_pub_ctrl()
1011 const struct rtw89_hfc_pub_cfg *cfg = &rtwdev->mac.hfc_param.pub_cfg; in hfc_pub_ctrl()
1023 val = u32_encode_bits(cfg->grp0, B_AX_PUBPG_G0_MASK) | in hfc_pub_ctrl()
1024 u32_encode_bits(cfg->grp1, B_AX_PUBPG_G1_MASK); in hfc_pub_ctrl()
1025 rtw89_write32(rtwdev, regs->pub_page_ctrl1, val); in hfc_pub_ctrl()
1027 val = u32_encode_bits(cfg->wp_thrd, B_AX_WP_THRD_MASK); in hfc_pub_ctrl()
1028 rtw89_write32(rtwdev, regs->wp_page_ctrl2, val); in hfc_pub_ctrl()
1035 const struct rtw89_chip_info *chip = rtwdev->chip; in hfc_get_mix_info_ax()
1036 const struct rtw89_page_regs *regs = chip->page_regs; in hfc_get_mix_info_ax()
1037 struct rtw89_hfc_param *param = &rtwdev->mac.hfc_param; in hfc_get_mix_info_ax()
1038 struct rtw89_hfc_pub_cfg *pub_cfg = ¶m->pub_cfg; in hfc_get_mix_info_ax()
1039 struct rtw89_hfc_prec_cfg *prec_cfg = ¶m->prec_cfg; in hfc_get_mix_info_ax()
1040 struct rtw89_hfc_pub_info *info = ¶m->pub_info; in hfc_get_mix_info_ax()
1043 val = rtw89_read32(rtwdev, regs->pub_page_info1); in hfc_get_mix_info_ax()
1044 info->g0_used = u32_get_bits(val, B_AX_G0_USE_PG_MASK); in hfc_get_mix_info_ax()
1045 info->g1_used = u32_get_bits(val, B_AX_G1_USE_PG_MASK); in hfc_get_mix_info_ax()
1046 val = rtw89_read32(rtwdev, regs->pub_page_info3); in hfc_get_mix_info_ax()
1047 info->g0_aval = u32_get_bits(val, B_AX_G0_AVAL_PG_MASK); in hfc_get_mix_info_ax()
1048 info->g1_aval = u32_get_bits(val, B_AX_G1_AVAL_PG_MASK); in hfc_get_mix_info_ax()
1049 info->pub_aval = in hfc_get_mix_info_ax()
1050 u32_get_bits(rtw89_read32(rtwdev, regs->pub_page_info2), in hfc_get_mix_info_ax()
1052 info->wp_aval = in hfc_get_mix_info_ax()
1053 u32_get_bits(rtw89_read32(rtwdev, regs->wp_page_info1), in hfc_get_mix_info_ax()
1056 val = rtw89_read32(rtwdev, regs->hci_fc_ctrl); in hfc_get_mix_info_ax()
1057 param->en = val & B_AX_HCI_FC_EN ? 1 : 0; in hfc_get_mix_info_ax()
1058 param->h2c_en = val & B_AX_HCI_FC_CH12_EN ? 1 : 0; in hfc_get_mix_info_ax()
1059 param->mode = u32_get_bits(val, B_AX_HCI_FC_MODE_MASK); in hfc_get_mix_info_ax()
1060 prec_cfg->ch011_full_cond = in hfc_get_mix_info_ax()
1062 prec_cfg->h2c_full_cond = in hfc_get_mix_info_ax()
1064 prec_cfg->wp_ch07_full_cond = in hfc_get_mix_info_ax()
1066 prec_cfg->wp_ch811_full_cond = in hfc_get_mix_info_ax()
1069 val = rtw89_read32(rtwdev, regs->ch_page_ctrl); in hfc_get_mix_info_ax()
1070 prec_cfg->ch011_prec = u32_get_bits(val, B_AX_PREC_PAGE_CH011_MASK); in hfc_get_mix_info_ax()
1071 prec_cfg->h2c_prec = u32_get_bits(val, B_AX_PREC_PAGE_CH12_MASK); in hfc_get_mix_info_ax()
1073 val = rtw89_read32(rtwdev, regs->pub_page_ctrl2); in hfc_get_mix_info_ax()
1074 pub_cfg->pub_max = u32_get_bits(val, B_AX_PUBPG_ALL_MASK); in hfc_get_mix_info_ax()
1076 val = rtw89_read32(rtwdev, regs->wp_page_ctrl1); in hfc_get_mix_info_ax()
1077 prec_cfg->wp_ch07_prec = u32_get_bits(val, B_AX_PREC_PAGE_WP_CH07_MASK); in hfc_get_mix_info_ax()
1078 prec_cfg->wp_ch811_prec = u32_get_bits(val, B_AX_PREC_PAGE_WP_CH811_MASK); in hfc_get_mix_info_ax()
1080 val = rtw89_read32(rtwdev, regs->wp_page_ctrl2); in hfc_get_mix_info_ax()
1081 pub_cfg->wp_thrd = u32_get_bits(val, B_AX_WP_THRD_MASK); in hfc_get_mix_info_ax()
1083 val = rtw89_read32(rtwdev, regs->pub_page_ctrl1); in hfc_get_mix_info_ax()
1084 pub_cfg->grp0 = u32_get_bits(val, B_AX_PUBPG_G0_MASK); in hfc_get_mix_info_ax()
1085 pub_cfg->grp1 = u32_get_bits(val, B_AX_PUBPG_G1_MASK); in hfc_get_mix_info_ax()
1090 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in hfc_upd_mix_info()
1091 struct rtw89_hfc_param *param = &rtwdev->mac.hfc_param; in hfc_upd_mix_info()
1098 mac->hfc_get_mix_info(rtwdev); in hfc_upd_mix_info()
1101 if (param->en && ret) in hfc_upd_mix_info()
1109 const struct rtw89_chip_info *chip = rtwdev->chip; in hfc_h2c_cfg_ax()
1110 const struct rtw89_page_regs *regs = chip->page_regs; in hfc_h2c_cfg_ax()
1111 struct rtw89_hfc_param *param = &rtwdev->mac.hfc_param; in hfc_h2c_cfg_ax()
1112 const struct rtw89_hfc_prec_cfg *prec_cfg = ¶m->prec_cfg; in hfc_h2c_cfg_ax()
1115 val = u32_encode_bits(prec_cfg->h2c_prec, B_AX_PREC_PAGE_CH12_MASK); in hfc_h2c_cfg_ax()
1116 rtw89_write32(rtwdev, regs->ch_page_ctrl, val); in hfc_h2c_cfg_ax()
1118 rtw89_write32_mask(rtwdev, regs->hci_fc_ctrl, in hfc_h2c_cfg_ax()
1120 prec_cfg->h2c_full_cond); in hfc_h2c_cfg_ax()
1125 const struct rtw89_chip_info *chip = rtwdev->chip; in hfc_mix_cfg_ax()
1126 const struct rtw89_page_regs *regs = chip->page_regs; in hfc_mix_cfg_ax()
1127 struct rtw89_hfc_param *param = &rtwdev->mac.hfc_param; in hfc_mix_cfg_ax()
1128 const struct rtw89_hfc_pub_cfg *pub_cfg = ¶m->pub_cfg; in hfc_mix_cfg_ax()
1129 const struct rtw89_hfc_prec_cfg *prec_cfg = ¶m->prec_cfg; in hfc_mix_cfg_ax()
1132 val = u32_encode_bits(prec_cfg->ch011_prec, B_AX_PREC_PAGE_CH011_MASK) | in hfc_mix_cfg_ax()
1133 u32_encode_bits(prec_cfg->h2c_prec, B_AX_PREC_PAGE_CH12_MASK); in hfc_mix_cfg_ax()
1134 rtw89_write32(rtwdev, regs->ch_page_ctrl, val); in hfc_mix_cfg_ax()
1136 val = u32_encode_bits(pub_cfg->pub_max, B_AX_PUBPG_ALL_MASK); in hfc_mix_cfg_ax()
1137 rtw89_write32(rtwdev, regs->pub_page_ctrl2, val); in hfc_mix_cfg_ax()
1139 val = u32_encode_bits(prec_cfg->wp_ch07_prec, in hfc_mix_cfg_ax()
1141 u32_encode_bits(prec_cfg->wp_ch811_prec, in hfc_mix_cfg_ax()
1143 rtw89_write32(rtwdev, regs->wp_page_ctrl1, val); in hfc_mix_cfg_ax()
1145 val = u32_replace_bits(rtw89_read32(rtwdev, regs->hci_fc_ctrl), in hfc_mix_cfg_ax()
1146 param->mode, B_AX_HCI_FC_MODE_MASK); in hfc_mix_cfg_ax()
1147 val = u32_replace_bits(val, prec_cfg->ch011_full_cond, in hfc_mix_cfg_ax()
1149 val = u32_replace_bits(val, prec_cfg->h2c_full_cond, in hfc_mix_cfg_ax()
1151 val = u32_replace_bits(val, prec_cfg->wp_ch07_full_cond, in hfc_mix_cfg_ax()
1153 val = u32_replace_bits(val, prec_cfg->wp_ch811_full_cond, in hfc_mix_cfg_ax()
1155 rtw89_write32(rtwdev, regs->hci_fc_ctrl, val); in hfc_mix_cfg_ax()
1160 const struct rtw89_chip_info *chip = rtwdev->chip; in hfc_func_en_ax()
1161 const struct rtw89_page_regs *regs = chip->page_regs; in hfc_func_en_ax()
1162 struct rtw89_hfc_param *param = &rtwdev->mac.hfc_param; in hfc_func_en_ax()
1165 val = rtw89_read32(rtwdev, regs->hci_fc_ctrl); in hfc_func_en_ax()
1166 param->en = en; in hfc_func_en_ax()
1167 param->h2c_en = h2c_en; in hfc_func_en_ax()
1171 rtw89_write32(rtwdev, regs->hci_fc_ctrl, val); in hfc_func_en_ax()
1176 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_hfc_init()
1177 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_mac_hfc_init()
1178 u32 dma_ch_mask = chip->dma_ch_mask; in rtw89_mac_hfc_init()
1179 u8 ch; in rtw89_mac_hfc_init() local
1191 mac->hfc_func_en(rtwdev, false, false); in rtw89_mac_hfc_init()
1194 mac->hfc_h2c_cfg(rtwdev); in rtw89_mac_hfc_init()
1195 mac->hfc_func_en(rtwdev, en, h2c_en); in rtw89_mac_hfc_init()
1199 for (ch = RTW89_DMA_ACH0; ch < RTW89_DMA_H2C; ch++) { in rtw89_mac_hfc_init()
1200 if (dma_ch_mask & BIT(ch)) in rtw89_mac_hfc_init()
1202 ret = hfc_ch_ctrl(rtwdev, ch); in rtw89_mac_hfc_init()
1211 mac->hfc_mix_cfg(rtwdev); in rtw89_mac_hfc_init()
1213 mac->hfc_func_en(rtwdev, en, h2c_en); in rtw89_mac_hfc_init()
1216 for (ch = RTW89_DMA_ACH0; ch < RTW89_DMA_H2C; ch++) { in rtw89_mac_hfc_init()
1217 if (dma_ch_mask & BIT(ch)) in rtw89_mac_hfc_init()
1219 ret = hfc_upd_ch_info(rtwdev, ch); in rtw89_mac_hfc_init()
1234 u32 addr = cfg->base == PWR_INTF_MSK_SDIO ? in pwr_cmd_poll()
1235 cfg->addr | SDIO_LOCAL_BASE_ADDR : cfg->addr; in pwr_cmd_poll()
1237 ret = read_poll_timeout(rtw89_read8, val, !((val ^ cfg->val) & cfg->msk), in pwr_cmd_poll()
1244 rtw89_warn(rtwdev, "[ERR] addr: %X, %X\n", addr, cfg->addr); in pwr_cmd_poll()
1245 rtw89_warn(rtwdev, "[ERR] val: %X, %X\n", val, cfg->val); in pwr_cmd_poll()
1247 return -EBUSY; in pwr_cmd_poll()
1257 for (cur_cfg = cfg; cur_cfg->cmd != PWR_CMD_END; cur_cfg++) { in rtw89_mac_sub_pwr_seq()
1258 if (!(cur_cfg->intf_msk & intf_msk) || in rtw89_mac_sub_pwr_seq()
1259 !(cur_cfg->cv_msk & cv_msk)) in rtw89_mac_sub_pwr_seq()
1262 switch (cur_cfg->cmd) { in rtw89_mac_sub_pwr_seq()
1264 addr = cur_cfg->addr; in rtw89_mac_sub_pwr_seq()
1266 if (cur_cfg->base == PWR_BASE_SDIO) in rtw89_mac_sub_pwr_seq()
1270 val &= ~(cur_cfg->msk); in rtw89_mac_sub_pwr_seq()
1271 val |= (cur_cfg->val & cur_cfg->msk); in rtw89_mac_sub_pwr_seq()
1277 return -EBUSY; in rtw89_mac_sub_pwr_seq()
1280 if (cur_cfg->val == PWR_DELAY_US) in rtw89_mac_sub_pwr_seq()
1281 udelay(cur_cfg->addr); in rtw89_mac_sub_pwr_seq()
1283 fsleep(cur_cfg->addr * 1000); in rtw89_mac_sub_pwr_seq()
1286 return -EINVAL; in rtw89_mac_sub_pwr_seq()
1299 ret = rtw89_mac_sub_pwr_seq(rtwdev, BIT(rtwdev->hal.cv), in rtw89_mac_pwr_seq()
1302 return -EBUSY; in rtw89_mac_pwr_seq()
1313 switch (rtwdev->ps_mode) { in rtw89_mac_get_req_pwr_state()
1336 spin_lock_bh(&rtwdev->rpwm_lock); in rtw89_mac_send_rpwm()
1345 rtwdev->mac.rpwm_seq_num = (rtwdev->mac.rpwm_seq_num + 1) & in rtw89_mac_send_rpwm()
1348 rtwdev->mac.rpwm_seq_num); in rtw89_mac_send_rpwm()
1353 rtw89_write16(rtwdev, rtwdev->hci.rpwm_addr, request); in rtw89_mac_send_rpwm()
1355 spin_unlock_bh(&rtwdev->rpwm_lock); in rtw89_mac_send_rpwm()
1379 return -EPERM; in rtw89_mac_check_cpwm_state()
1384 rpwm_req_num = rtwdev->mac.rpwm_seq_num; in rtw89_mac_check_cpwm_state()
1385 cpwm_rsp_seq = rtw89_read16_mask(rtwdev, rtwdev->hci.cpwm_addr, in rtw89_mac_check_cpwm_state()
1389 return -EPERM; in rtw89_mac_check_cpwm_state()
1391 rtwdev->mac.cpwm_seq_num = (rtwdev->mac.cpwm_seq_num + 1) & in rtw89_mac_check_cpwm_state()
1394 cpwm_seq = rtw89_read16_mask(rtwdev, rtwdev->hci.cpwm_addr, PS_CPWM_SEQ_NUM); in rtw89_mac_check_cpwm_state()
1395 if (cpwm_seq != rtwdev->mac.cpwm_seq_num) in rtw89_mac_check_cpwm_state()
1396 return -EPERM; in rtw89_mac_check_cpwm_state()
1398 cpwm_status = rtw89_read16_mask(rtwdev, rtwdev->hci.cpwm_addr, PS_CPWM_STATE); in rtw89_mac_check_cpwm_state()
1400 return -EPERM; in rtw89_mac_check_cpwm_state()
1425 if (i == RPWM_TRY_CNT - 1) in rtw89_mac_power_mode_change()
1447 if (rtwdev->hci.type != RTW89_HCI_TYPE_USB) in rtw89_mac_power_switch_boot_mode()
1463 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_power_switch()
1464 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_mac_power_switch()
1473 cfg_seq = chip->pwr_on_seq; in rtw89_mac_power_switch()
1474 cfg_func = chip->ops->pwr_on_func; in rtw89_mac_power_switch()
1476 cfg_seq = chip->pwr_off_seq; in rtw89_mac_power_switch()
1477 cfg_func = chip->ops->pwr_off_func; in rtw89_mac_power_switch()
1480 if (test_bit(RTW89_FLAG_FW_RDY, rtwdev->flags)) in rtw89_mac_power_switch()
1486 return -EBUSY; in rtw89_mac_power_switch()
1494 if (!test_bit(RTW89_FLAG_PROBE_DONE, rtwdev->flags)) in rtw89_mac_power_switch()
1495 mac->efuse_read_fw_secure(rtwdev); in rtw89_mac_power_switch()
1497 set_bit(RTW89_FLAG_POWERON, rtwdev->flags); in rtw89_mac_power_switch()
1498 set_bit(RTW89_FLAG_DMAC_FUNC, rtwdev->flags); in rtw89_mac_power_switch()
1499 set_bit(RTW89_FLAG_CMAC0_FUNC, rtwdev->flags); in rtw89_mac_power_switch()
1502 clear_bit(RTW89_FLAG_POWERON, rtwdev->flags); in rtw89_mac_power_switch()
1503 clear_bit(RTW89_FLAG_DMAC_FUNC, rtwdev->flags); in rtw89_mac_power_switch()
1504 clear_bit(RTW89_FLAG_CMAC0_FUNC, rtwdev->flags); in rtw89_mac_power_switch()
1505 clear_bit(RTW89_FLAG_CMAC1_FUNC, rtwdev->flags); in rtw89_mac_power_switch()
1506 clear_bit(RTW89_FLAG_FW_RDY, rtwdev->flags); in rtw89_mac_power_switch()
1584 enum rtw89_core_chip_id chip_id = rtwdev->chip->chip_id; in dmac_func_en_ax()
1618 enum rtw89_core_chip_id chip_id = rtwdev->chip->chip_id; in chip_func_en_ax()
1752 struct rtw89_mac_info *mac = &rtwdev->mac; in get_dle_mem_cfg()
1755 cfgs = rtwdev->chip->dle_mem[rtwdev->hci.dle_type]; in get_dle_mem_cfg()
1760 if (cfg->mode != mode) { in get_dle_mem_cfg()
1765 mac->dle_info.rsvd_qt = cfg->rsvd_qt; in get_dle_mem_cfg()
1766 mac->dle_info.ple_pg_size = cfg->ple_size->pge_size; in get_dle_mem_cfg()
1767 mac->dle_info.ple_free_pg = cfg->ple_size->lnk_pge_num; in get_dle_mem_cfg()
1768 mac->dle_info.qta_mode = mode; in get_dle_mem_cfg()
1769 mac->dle_info.c0_rx_qta = cfg->ple_min_qt->cma0_dma; in get_dle_mem_cfg()
1770 mac->dle_info.c1_rx_qta = cfg->ple_min_qt->cma1_dma; in get_dle_mem_cfg()
1779 struct rtw89_dle_info *dle_info = &rtwdev->mac.dle_info; in rtw89_mac_get_dle_rsvd_qt_cfg()
1780 const struct rtw89_rsvd_quota *rsvd_qt = dle_info->rsvd_qt; in rtw89_mac_get_dle_rsvd_qt_cfg()
1784 cfg->pktid = dle_info->ple_free_pg; in rtw89_mac_get_dle_rsvd_qt_cfg()
1785 cfg->pg_num = rsvd_qt->mpdu_info_tbl; in rtw89_mac_get_dle_rsvd_qt_cfg()
1788 cfg->pktid = dle_info->ple_free_pg + rsvd_qt->mpdu_info_tbl; in rtw89_mac_get_dle_rsvd_qt_cfg()
1789 cfg->pg_num = rsvd_qt->b0_csi; in rtw89_mac_get_dle_rsvd_qt_cfg()
1792 cfg->pktid = dle_info->ple_free_pg + in rtw89_mac_get_dle_rsvd_qt_cfg()
1793 rsvd_qt->mpdu_info_tbl + rsvd_qt->b0_csi; in rtw89_mac_get_dle_rsvd_qt_cfg()
1794 cfg->pg_num = rsvd_qt->b1_csi; in rtw89_mac_get_dle_rsvd_qt_cfg()
1797 cfg->pktid = dle_info->ple_free_pg + in rtw89_mac_get_dle_rsvd_qt_cfg()
1798 rsvd_qt->mpdu_info_tbl + rsvd_qt->b0_csi + rsvd_qt->b1_csi; in rtw89_mac_get_dle_rsvd_qt_cfg()
1799 cfg->pg_num = rsvd_qt->b0_lmr; in rtw89_mac_get_dle_rsvd_qt_cfg()
1802 cfg->pktid = dle_info->ple_free_pg + in rtw89_mac_get_dle_rsvd_qt_cfg()
1803 rsvd_qt->mpdu_info_tbl + rsvd_qt->b0_csi + rsvd_qt->b1_csi + in rtw89_mac_get_dle_rsvd_qt_cfg()
1804 rsvd_qt->b0_lmr; in rtw89_mac_get_dle_rsvd_qt_cfg()
1805 cfg->pg_num = rsvd_qt->b1_lmr; in rtw89_mac_get_dle_rsvd_qt_cfg()
1808 cfg->pktid = dle_info->ple_free_pg + in rtw89_mac_get_dle_rsvd_qt_cfg()
1809 rsvd_qt->mpdu_info_tbl + rsvd_qt->b0_csi + rsvd_qt->b1_csi + in rtw89_mac_get_dle_rsvd_qt_cfg()
1810 rsvd_qt->b0_lmr + rsvd_qt->b1_lmr; in rtw89_mac_get_dle_rsvd_qt_cfg()
1811 cfg->pg_num = rsvd_qt->b0_ftm; in rtw89_mac_get_dle_rsvd_qt_cfg()
1814 cfg->pktid = dle_info->ple_free_pg + in rtw89_mac_get_dle_rsvd_qt_cfg()
1815 rsvd_qt->mpdu_info_tbl + rsvd_qt->b0_csi + rsvd_qt->b1_csi + in rtw89_mac_get_dle_rsvd_qt_cfg()
1816 rsvd_qt->b0_lmr + rsvd_qt->b1_lmr + rsvd_qt->b0_ftm; in rtw89_mac_get_dle_rsvd_qt_cfg()
1817 cfg->pg_num = rsvd_qt->b1_ftm; in rtw89_mac_get_dle_rsvd_qt_cfg()
1820 return -EINVAL; in rtw89_mac_get_dle_rsvd_qt_cfg()
1823 cfg->size = (u32)cfg->pg_num * dle_info->ple_pg_size; in rtw89_mac_get_dle_rsvd_qt_cfg()
1834 grpnum = rtwdev->chip->wde_qempty_acq_grpnum; in mac_is_txq_empty_ax()
1853 qempty.grpsel = rtwdev->chip->wde_qempty_mgq_grpsel; in mac_is_txq_empty_ax()
1863 if (rtwdev->dbcc_en) { in mac_is_txq_empty_ax()
1884 const struct rtw89_dle_size *wde = cfg->wde_size; in dle_used_size()
1885 const struct rtw89_dle_size *ple = cfg->ple_size; in dle_used_size()
1888 used = wde->pge_size * (wde->lnk_pge_num + wde->unlnk_pge_num) + in dle_used_size()
1889 ple->pge_size * (ple->lnk_pge_num + ple->unlnk_pge_num); in dle_used_size()
1891 if (cfg->rsvd0_size && cfg->rsvd1_size) { in dle_used_size()
1892 used += cfg->rsvd0_size->size; in dle_used_size()
1893 used += cfg->rsvd1_size->size; in dle_used_size()
1902 u32 size = rtwdev->chip->fifo_size; in dle_expected_used_size()
1905 size -= rtwdev->chip->dle_scc_rsvd_size; in dle_expected_used_size()
1925 if (rtwdev->chip->chip_id == RTL8851B) in dle_clk_en_ax()
1940 size_cfg = cfg->wde_size; in dle_mix_cfg_ax()
1942 switch (size_cfg->pge_size) { in dle_mix_cfg_ax()
1954 return -EINVAL; in dle_mix_cfg_ax()
1958 val = u32_replace_bits(val, size_cfg->lnk_pge_num, in dle_mix_cfg_ax()
1963 bound = (size_cfg->lnk_pge_num + size_cfg->unlnk_pge_num) in dle_mix_cfg_ax()
1964 * size_cfg->pge_size / DLE_BOUND_UNIT; in dle_mix_cfg_ax()
1965 size_cfg = cfg->ple_size; in dle_mix_cfg_ax()
1967 switch (size_cfg->pge_size) { in dle_mix_cfg_ax()
1971 return -EINVAL; in dle_mix_cfg_ax()
1983 val = u32_replace_bits(val, size_cfg->lnk_pge_num, in dle_mix_cfg_ax()
2017 SET_QUOTA_VAL(min_cfg->_x, max_cfg->_x, _module, _idx)
2025 ext_wde_min_qt_wcpu : min_cfg->wcpu; in wde_quota_cfg_ax()
2029 SET_QUOTA_VAL(min_qt_wcpu, max_cfg->wcpu, WDE, 1); in wde_quota_cfg_ax()
2051 if (rtwdev->chip->chip_id == RTL8852C) in ple_quota_cfg_ax()
2061 if (rtwdev->chip->chip_id == RTL8852C) in rtw89_mac_resize_ple_rx_quota()
2064 if (rtwdev->mac.qta_mode != RTW89_QTA_SCC) { in rtw89_mac_resize_ple_rx_quota()
2066 return -EINVAL; in rtw89_mac_resize_ple_rx_quota()
2075 return -EINVAL; in rtw89_mac_resize_ple_rx_quota()
2078 min_cfg = cfg->ple_min_qt; in rtw89_mac_resize_ple_rx_quota()
2079 max_cfg = cfg->ple_max_qt; in rtw89_mac_resize_ple_rx_quota()
2089 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_mac_hw_mgnt_sec()
2092 if (rtwdev->chip->chip_gen != RTW89_CHIP_AX) in rtw89_mac_hw_mgnt_sec()
2096 if (chip->chip_id == RTL8852C) in rtw89_mac_hw_mgnt_sec()
2109 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in dle_quota_cfg()
2111 mac->wde_quota_cfg(rtwdev, cfg->wde_min_qt, cfg->wde_max_qt, ext_wde_min_qt_wcpu); in dle_quota_cfg()
2112 mac->ple_quota_cfg(rtwdev, cfg->ple_min_qt, cfg->ple_max_qt); in dle_quota_cfg()
2118 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_dle_init()
2130 ret = -EINVAL; in rtw89_mac_dle_init()
2139 ret = -EINVAL; in rtw89_mac_dle_init()
2142 ext_wde_min_qt_wcpu = ext_cfg->wde_min_qt->wcpu; in rtw89_mac_dle_init()
2147 ret = -EINVAL; in rtw89_mac_dle_init()
2151 mac->dle_func_en(rtwdev, false); in rtw89_mac_dle_init()
2152 mac->dle_clk_en(rtwdev, true); in rtw89_mac_dle_init()
2154 ret = mac->dle_mix_cfg(rtwdev, cfg); in rtw89_mac_dle_init()
2161 mac->dle_func_en(rtwdev, true); in rtw89_mac_dle_init()
2163 ret = mac->chk_dle_rdy(rtwdev, true); in rtw89_mac_dle_init()
2169 ret = mac->chk_dle_rdy(rtwdev, false); in rtw89_mac_dle_init()
2177 mac->dle_func_en(rtwdev, false); in rtw89_mac_dle_init()
2209 return rtwdev->hci.type == RTW89_HCI_TYPE_PCIE; in is_qta_poh()
2215 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_mac_preload_init()
2217 if (chip->chip_id == RTL8852A || rtw89_is_rtl885xb(rtwdev) || in rtw89_mac_preload_init()
2252 const struct rtw89_chip_info *chip = rtwdev->chip; in _patch_ss2f_path()
2254 if (chip->chip_id == RTL8852A || rtw89_is_rtl885xb(rtwdev)) in _patch_ss2f_path()
2309 const struct rtw89_chip_info *chip = rtwdev->chip; in sec_eng_init_ax()
2323 if (chip->chip_id == RTL8852C) in sec_eng_init_ax()
2325 if (chip->chip_id == RTL8852A || chip->chip_id == RTL8852B || in sec_eng_init_ax()
2326 chip->chip_id == RTL8851B) in sec_eng_init_ax()
2337 if (chip->chip_id == RTL8852C) in sec_eng_init_ax()
2348 ret = rtw89_mac_dle_init(rtwdev, rtwdev->mac.qta_mode, RTW89_QTA_INVALID); in dmac_init_ax()
2354 ret = rtw89_mac_preload_init(rtwdev, RTW89_MAC_0, rtwdev->mac.qta_mode); in dmac_init_ax()
2425 if (rtwdev->chip->chip_id == RTL8852C) in scheduler_init_ax()
2441 if (rtwdev->chip->chip_id == RTL8852C) { in scheduler_init_ax()
2475 return -EINVAL; in rtw89_mac_typ_fltr_opt_ax()
2490 return -EINVAL; in rtw89_mac_typ_fltr_opt_ax()
2512 mac_ftlr = rtwdev->hal.rx_fltr; in rx_fltr_init_ax()
2536 switch (rtwdev->chip->chip_id) { in _patch_dis_resp_chk()
2642 const struct rtw89_chip_info *chip = rtwdev->chip; in trxptcl_init_ax()
2643 const struct rtw89_rrsr_cfgs *rrsr = chip->rrsr_cfgs; in trxptcl_init_ax()
2656 switch (rtwdev->chip->chip_id) { in trxptcl_init_ax()
2676 reg = rtw89_mac_reg_by_idx(rtwdev, rrsr->ref_rate.addr, mac_idx); in trxptcl_init_ax()
2677 rtw89_write32_mask(rtwdev, reg, rrsr->ref_rate.mask, rrsr->ref_rate.data); in trxptcl_init_ax()
2678 reg = rtw89_mac_reg_by_idx(rtwdev, rrsr->rsc.addr, mac_idx); in trxptcl_init_ax()
2679 rtw89_write32_mask(rtwdev, reg, rrsr->rsc.mask, rrsr->rsc.data); in trxptcl_init_ax()
2706 enum rtw89_core_chip_id chip_id = rtwdev->chip->chip_id; in rmac_init_ax()
2736 rx_qta = rtwdev->mac.dle_info.c0_rx_qta; in rmac_init_ax()
2738 rx_qta = rtwdev->mac.dle_info.c1_rx_qta; in rmac_init_ax()
2740 rx_max_len = rx_qta * rtwdev->mac.dle_info.ple_pg_size; in rmac_init_ax()
2745 if (chip_id == RTL8852A && rtwdev->hal.cv == CHIP_CBV) { in rmac_init_ax()
2761 enum rtw89_core_chip_id chip_id = rtwdev->chip->chip_id; in cmac_com_init_ax()
2794 return (cfg->ple_min_qt->cma1_dma && cfg->ple_max_qt->cma1_dma); in rtw89_mac_is_qta_dbcc()
2799 enum rtw89_core_chip_id chip_id = rtwdev->chip->chip_id; in ptcl_init_ax()
2807 if (rtwdev->hci.type == RTW89_HCI_TYPE_PCIE) { in ptcl_init_ax()
2952 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_read_phycap()
2953 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_mac_read_phycap()
2959 if (chip->chip_gen == RTW89_CHIP_AX) in rtw89_mac_read_phycap()
2972 return -EINVAL; in rtw89_mac_read_phycap()
2975 mac->cnv_efuse_state(rtwdev, false); in rtw89_mac_read_phycap()
2985 if (c2h_info->id != c2h_type) in rtw89_mac_read_phycap()
2986 ret = -EINVAL; in rtw89_mac_read_phycap()
2989 mac->cnv_efuse_state(rtwdev, true); in rtw89_mac_read_phycap()
2996 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_mac_setup_phycap_part0()
2998 struct rtw89_efuse *efuse = &rtwdev->efuse; in rtw89_mac_setup_phycap_part0()
3000 struct rtw89_hal *hal = &rtwdev->hal; in rtw89_mac_setup_phycap_part0()
3013 tx_nss = u32_get_bits(phycap->w1, RTW89_C2HREG_PHYCAP_W1_TX_NSS); in rtw89_mac_setup_phycap_part0()
3014 rx_nss = u32_get_bits(phycap->w0, RTW89_C2HREG_PHYCAP_W0_RX_NSS); in rtw89_mac_setup_phycap_part0()
3015 tx_ant = u32_get_bits(phycap->w3, RTW89_C2HREG_PHYCAP_W3_ANT_TX_NUM); in rtw89_mac_setup_phycap_part0()
3016 rx_ant = u32_get_bits(phycap->w3, RTW89_C2HREG_PHYCAP_W3_ANT_RX_NUM); in rtw89_mac_setup_phycap_part0()
3018 hal->tx_nss = tx_nss ? min_t(u8, tx_nss, chip->tx_nss) : chip->tx_nss; in rtw89_mac_setup_phycap_part0()
3019 hal->rx_nss = rx_nss ? min_t(u8, rx_nss, chip->rx_nss) : chip->rx_nss; in rtw89_mac_setup_phycap_part0()
3022 hal->antenna_tx = RF_B; in rtw89_mac_setup_phycap_part0()
3024 hal->antenna_rx = RF_B; in rtw89_mac_setup_phycap_part0()
3027 hal->antenna_tx = RF_B; in rtw89_mac_setup_phycap_part0()
3028 hal->tx_path_diversity = true; in rtw89_mac_setup_phycap_part0()
3031 if (chip->rf_path_num == 1) { in rtw89_mac_setup_phycap_part0()
3032 hal->antenna_tx = RF_A; in rtw89_mac_setup_phycap_part0()
3033 hal->antenna_rx = RF_A; in rtw89_mac_setup_phycap_part0()
3034 if ((efuse->rfe_type % 3) == 2) in rtw89_mac_setup_phycap_part0()
3035 hal->ant_diversity = true; in rtw89_mac_setup_phycap_part0()
3040 hal->tx_nss, tx_nss, chip->tx_nss, in rtw89_mac_setup_phycap_part0()
3041 hal->rx_nss, rx_nss, chip->rx_nss); in rtw89_mac_setup_phycap_part0()
3044 tx_ant, hal->antenna_tx, rx_ant, hal->antenna_rx); in rtw89_mac_setup_phycap_part0()
3045 rtw89_debug(rtwdev, RTW89_DBG_FW, "TX path diversity=%d\n", hal->tx_path_diversity); in rtw89_mac_setup_phycap_part0()
3046 rtw89_debug(rtwdev, RTW89_DBG_FW, "Antenna diversity=%d\n", hal->ant_diversity); in rtw89_mac_setup_phycap_part0()
3053 const struct rtw89_chip_variant *variant = rtwdev->variant; in rtw89_mac_setup_phycap_part1()
3056 struct rtw89_hal *hal = &rtwdev->hal; in rtw89_mac_setup_phycap_part1()
3066 qam_raw = u32_get_bits(phycap->w2, RTW89_C2HREG_PHYCAP_P1_W2_QAM); in rtw89_mac_setup_phycap_part1()
3079 if ((variant && variant->no_mcs_12_13) || in rtw89_mac_setup_phycap_part1()
3081 hal->no_mcs_12_13 = true; in rtw89_mac_setup_phycap_part1()
3084 qam_raw, qam, hal->no_mcs_12_13); in rtw89_mac_setup_phycap_part1()
3091 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_mac_setup_phycap()
3098 if (chip->chip_gen == RTW89_CHIP_AX || in rtw89_mac_setup_phycap()
3099 RTW89_CHK_FW_FEATURE(NO_PHYCAP_P1, &rtwdev->fw)) in rtw89_mac_setup_phycap()
3114 h2c_info.content_len = sizeof(*sch_tx_en) - RTW89_H2CREG_HDR_LEN; in rtw89_hw_sch_tx_en_h2c()
3116 u32p_replace_bits(&sch_tx_en->w0, tx_en_u16, RTW89_H2CREG_SCH_TX_EN_W0_EN); in rtw89_hw_sch_tx_en_h2c()
3117 u32p_replace_bits(&sch_tx_en->w1, mask_u16, RTW89_H2CREG_SCH_TX_EN_W1_MASK); in rtw89_hw_sch_tx_en_h2c()
3118 u32p_replace_bits(&sch_tx_en->w1, band, RTW89_H2CREG_SCH_TX_EN_W1_BAND); in rtw89_hw_sch_tx_en_h2c()
3125 return -EINVAL; in rtw89_hw_sch_tx_en_h2c()
3141 if (test_bit(RTW89_FLAG_FW_RDY, rtwdev->flags)) in rtw89_set_hw_sch_tx_en()
3296 return -ENOENT; in dle_buf_req_ax()
3307 cmd_type = ctrl_para->cmd_type; in set_cpuio_ax()
3311 val = u32_replace_bits(val, ctrl_para->start_pktid, in set_cpuio_ax()
3313 val = u32_replace_bits(val, ctrl_para->end_pktid, in set_cpuio_ax()
3319 val = u32_replace_bits(val, ctrl_para->src_pid, in set_cpuio_ax()
3321 val = u32_replace_bits(val, ctrl_para->src_qid, in set_cpuio_ax()
3323 val = u32_replace_bits(val, ctrl_para->dst_pid, in set_cpuio_ax()
3325 val = u32_replace_bits(val, ctrl_para->dst_qid, in set_cpuio_ax()
3333 val = u32_replace_bits(val, ctrl_para->macid, in set_cpuio_ax()
3335 val = u32_replace_bits(val, ctrl_para->pkt_num, in set_cpuio_ax()
3349 ctrl_para->pktid = FIELD_GET(B_AX_WD_CPUQ_OP_PKTID_MASK, val); in set_cpuio_ax()
3357 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_dle_quota_change()
3363 return -EINVAL; in rtw89_mac_dle_quota_change()
3368 return -EINVAL; in rtw89_mac_dle_quota_change()
3373 return mac->dle_quota_change(rtwdev, band1_en); in rtw89_mac_dle_quota_change()
3378 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in dle_quota_change_ax()
3383 ret = mac->dle_buf_req(rtwdev, 0x20, true, &pkt_id); in dle_quota_change_ax()
3395 ret = mac->set_cpuio(rtwdev, &ctrl_para, true); in dle_quota_change_ax()
3398 return -EFAULT; in dle_quota_change_ax()
3401 ret = mac->dle_buf_req(rtwdev, 0x20, false, &pkt_id); in dle_quota_change_ax()
3413 ret = mac->set_cpuio(rtwdev, &ctrl_para, false); in dle_quota_change_ax()
3416 return -EFAULT; in dle_quota_change_ax()
3471 ret = rtw89_mac_dle_quota_change(rtwdev, rtwdev->mac.qta_mode, true); in band1_enable_ax()
3490 rtw89_err(rtwdev, "[ERR]CMAC1 func en %d\n", ret); in band1_enable_ax()
3508 const struct rtw89_imr_info *imr = rtwdev->chip->imr_info; in rtw89_wdrls_imr_enable()
3511 rtw89_write32_set(rtwdev, R_AX_WDRLS_ERR_IMR, imr->wdrls_imr_set); in rtw89_wdrls_imr_enable()
3516 const struct rtw89_imr_info *imr = rtwdev->chip->imr_info; in rtw89_wsec_imr_enable()
3518 rtw89_write32_set(rtwdev, imr->wsec_imr_reg, imr->wsec_imr_set); in rtw89_wsec_imr_enable()
3523 enum rtw89_core_chip_id chip_id = rtwdev->chip->chip_id; in rtw89_mpdu_trx_imr_enable()
3524 const struct rtw89_imr_info *imr = rtwdev->chip->imr_info; in rtw89_mpdu_trx_imr_enable()
3539 imr->mpdu_tx_imr_set); in rtw89_mpdu_trx_imr_enable()
3546 imr->mpdu_rx_imr_set); in rtw89_mpdu_trx_imr_enable()
3551 const struct rtw89_imr_info *imr = rtwdev->chip->imr_info; in rtw89_sta_sch_imr_enable()
3558 imr->sta_sch_imr_set); in rtw89_sta_sch_imr_enable()
3563 const struct rtw89_imr_info *imr = rtwdev->chip->imr_info; in rtw89_txpktctl_imr_enable()
3565 rtw89_write32_clr(rtwdev, imr->txpktctl_imr_b0_reg, in rtw89_txpktctl_imr_enable()
3566 imr->txpktctl_imr_b0_clr); in rtw89_txpktctl_imr_enable()
3567 rtw89_write32_set(rtwdev, imr->txpktctl_imr_b0_reg, in rtw89_txpktctl_imr_enable()
3568 imr->txpktctl_imr_b0_set); in rtw89_txpktctl_imr_enable()
3569 rtw89_write32_clr(rtwdev, imr->txpktctl_imr_b1_reg, in rtw89_txpktctl_imr_enable()
3570 imr->txpktctl_imr_b1_clr); in rtw89_txpktctl_imr_enable()
3571 rtw89_write32_set(rtwdev, imr->txpktctl_imr_b1_reg, in rtw89_txpktctl_imr_enable()
3572 imr->txpktctl_imr_b1_set); in rtw89_txpktctl_imr_enable()
3577 const struct rtw89_imr_info *imr = rtwdev->chip->imr_info; in rtw89_wde_imr_enable()
3579 rtw89_write32_clr(rtwdev, R_AX_WDE_ERR_IMR, imr->wde_imr_clr); in rtw89_wde_imr_enable()
3580 rtw89_write32_set(rtwdev, R_AX_WDE_ERR_IMR, imr->wde_imr_set); in rtw89_wde_imr_enable()
3585 const struct rtw89_imr_info *imr = rtwdev->chip->imr_info; in rtw89_ple_imr_enable()
3587 rtw89_write32_clr(rtwdev, R_AX_PLE_ERR_IMR, imr->ple_imr_clr); in rtw89_ple_imr_enable()
3588 rtw89_write32_set(rtwdev, R_AX_PLE_ERR_IMR, imr->ple_imr_set); in rtw89_ple_imr_enable()
3599 const struct rtw89_imr_info *imr = rtwdev->chip->imr_info; in rtw89_dispatcher_imr_enable()
3602 imr->host_disp_imr_clr); in rtw89_dispatcher_imr_enable()
3604 imr->host_disp_imr_set); in rtw89_dispatcher_imr_enable()
3606 imr->cpu_disp_imr_clr); in rtw89_dispatcher_imr_enable()
3608 imr->cpu_disp_imr_set); in rtw89_dispatcher_imr_enable()
3610 imr->other_disp_imr_clr); in rtw89_dispatcher_imr_enable()
3612 imr->other_disp_imr_set); in rtw89_dispatcher_imr_enable()
3623 const struct rtw89_imr_info *imr = rtwdev->chip->imr_info; in rtw89_bbrpt_imr_enable()
3625 rtw89_write32_set(rtwdev, imr->bbrpt_com_err_imr_reg, in rtw89_bbrpt_imr_enable()
3627 rtw89_write32_clr(rtwdev, imr->bbrpt_chinfo_err_imr_reg, in rtw89_bbrpt_imr_enable()
3629 rtw89_write32_set(rtwdev, imr->bbrpt_chinfo_err_imr_reg, in rtw89_bbrpt_imr_enable()
3630 imr->bbrpt_err_imr_set); in rtw89_bbrpt_imr_enable()
3631 rtw89_write32_set(rtwdev, imr->bbrpt_dfs_err_imr_reg, in rtw89_bbrpt_imr_enable()
3648 const struct rtw89_imr_info *imr = rtwdev->chip->imr_info; in rtw89_ptcl_imr_enable()
3652 rtw89_write32_clr(rtwdev, reg, imr->ptcl_imr_clr); in rtw89_ptcl_imr_enable()
3653 rtw89_write32_set(rtwdev, reg, imr->ptcl_imr_set); in rtw89_ptcl_imr_enable()
3658 const struct rtw89_imr_info *imr = rtwdev->chip->imr_info; in rtw89_cdma_imr_enable()
3659 enum rtw89_core_chip_id chip_id = rtwdev->chip->chip_id; in rtw89_cdma_imr_enable()
3662 reg = rtw89_mac_reg_by_idx(rtwdev, imr->cdma_imr_0_reg, mac_idx); in rtw89_cdma_imr_enable()
3663 rtw89_write32_clr(rtwdev, reg, imr->cdma_imr_0_clr); in rtw89_cdma_imr_enable()
3664 rtw89_write32_set(rtwdev, reg, imr->cdma_imr_0_set); in rtw89_cdma_imr_enable()
3667 reg = rtw89_mac_reg_by_idx(rtwdev, imr->cdma_imr_1_reg, mac_idx); in rtw89_cdma_imr_enable()
3668 rtw89_write32_clr(rtwdev, reg, imr->cdma_imr_1_clr); in rtw89_cdma_imr_enable()
3669 rtw89_write32_set(rtwdev, reg, imr->cdma_imr_1_set); in rtw89_cdma_imr_enable()
3675 const struct rtw89_imr_info *imr = rtwdev->chip->imr_info; in rtw89_phy_intf_imr_enable()
3678 reg = rtw89_mac_reg_by_idx(rtwdev, imr->phy_intf_imr_reg, mac_idx); in rtw89_phy_intf_imr_enable()
3679 rtw89_write32_clr(rtwdev, reg, imr->phy_intf_imr_clr); in rtw89_phy_intf_imr_enable()
3680 rtw89_write32_set(rtwdev, reg, imr->phy_intf_imr_set); in rtw89_phy_intf_imr_enable()
3685 const struct rtw89_imr_info *imr = rtwdev->chip->imr_info; in rtw89_rmac_imr_enable()
3688 reg = rtw89_mac_reg_by_idx(rtwdev, imr->rmac_imr_reg, mac_idx); in rtw89_rmac_imr_enable()
3689 rtw89_write32_clr(rtwdev, reg, imr->rmac_imr_clr); in rtw89_rmac_imr_enable()
3690 rtw89_write32_set(rtwdev, reg, imr->rmac_imr_set); in rtw89_rmac_imr_enable()
3695 const struct rtw89_imr_info *imr = rtwdev->chip->imr_info; in rtw89_tmac_imr_enable()
3698 reg = rtw89_mac_reg_by_idx(rtwdev, imr->tmac_imr_reg, mac_idx); in rtw89_tmac_imr_enable()
3699 rtw89_write32_clr(rtwdev, reg, imr->tmac_imr_clr); in rtw89_tmac_imr_enable()
3700 rtw89_write32_set(rtwdev, reg, imr->tmac_imr_set); in rtw89_tmac_imr_enable()
3735 return -EINVAL; in enable_imr_ax()
3747 if (!rtw89_is_rtl885xb(rtwdev) && rtwdev->mac.dle_info.c1_rx_qta) in err_imr_ctrl_ax()
3770 return -EINVAL; in dbcc_enable_ax()
3778 if (rtwdev->hci.type == RTW89_HCI_TYPE_PCIE) { in set_host_rpr_ax()
3798 enum rtw89_core_chip_id chip_id = rtwdev->chip->chip_id; in trx_init_ax()
3799 enum rtw89_qta_mode qta_mode = rtwdev->mac.qta_mode; in trx_init_ax()
3854 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_mac_feat_init()
3857 if (chip->bacam_ver != RTW89_BACAM_V1) in rtw89_mac_feat_init()
3892 clear_bit(RTW89_FLAG_FW_RDY, rtwdev->flags); in rtw89_mac_disable_cpu_ax()
3912 return -EFAULT; in rtw89_mac_enable_cpu_ax()
3954 enum rtw89_core_chip_id chip_id = rtwdev->chip->chip_id; in rtw89_mac_hci_func_en_ax()
3968 enum rtw89_core_chip_id chip_id = rtwdev->chip->chip_id; in rtw89_mac_dmac_func_pre_en_ax()
3997 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_dmac_pre_init()
4000 mac->hci_func_en(rtwdev); in rtw89_mac_dmac_pre_init()
4001 mac->dmac_func_pre_en(rtwdev); in rtw89_mac_dmac_pre_init()
4003 ret = rtw89_mac_dle_init(rtwdev, RTW89_QTA_DLFW, rtwdev->mac.qta_mode); in rtw89_mac_dmac_pre_init()
4052 if (rtwdev->dbcc_en) in rtw89_mac_partial_init()
4060 if (rtwdev->hci.ops->mac_pre_init) { in rtw89_mac_partial_init()
4061 ret = rtwdev->hci.ops->mac_pre_init(rtwdev); in rtw89_mac_partial_init()
4075 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_init()
4076 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_mac_init()
4077 bool include_bb = !!chip->bbmcu_nr; in rtw89_mac_init()
4092 ret = mac->sys_init(rtwdev); in rtw89_mac_init()
4096 ret = mac->trx_init(rtwdev); in rtw89_mac_init()
4104 if (rtwdev->hci.ops->mac_post_init) { in rtw89_mac_init()
4105 ret = rtwdev->hci.ops->mac_post_init(rtwdev); in rtw89_mac_init()
4122 struct rtw89_fw_secure *sec = &rtwdev->fw.sec; in rtw89_mac_dmac_tbl_init()
4125 if (rtwdev->chip->chip_gen != RTW89_CHIP_AX || sec->secure_boot) in rtw89_mac_dmac_tbl_init()
4137 struct rtw89_fw_secure *sec = &rtwdev->fw.sec; in rtw89_mac_cmac_tbl_init()
4139 if (rtwdev->chip->chip_gen != RTW89_CHIP_AX || sec->secure_boot) in rtw89_mac_cmac_tbl_init()
4161 * be power-off, so ignore this operation. in rtw89_mac_set_macid_pause()
4163 if (test_bit(RTW89_FLAG_CHANGING_INTERFACE, rtwdev->flags) && in rtw89_mac_set_macid_pause()
4164 !test_bit(RTW89_FLAG_POWERON, rtwdev->flags)) in rtw89_mac_set_macid_pause()
4208 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_check_packet_ctrl()
4209 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_check_packet_ctrl()
4210 u8 mask = B_AX_PTCL_DBG_INFO_MASK_BY_PORT(rtwvif_link->port); in rtw89_mac_check_packet_ctrl()
4215 reg_info = rtw89_mac_reg_by_idx(rtwdev, p->ptcl_dbg_info, rtwvif_link->mac_idx); in rtw89_mac_check_packet_ctrl()
4216 reg_ctrl = rtw89_mac_reg_by_idx(rtwdev, p->ptcl_dbg, rtwvif_link->mac_idx); in rtw89_mac_check_packet_ctrl()
4231 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_bcn_drop()
4232 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_bcn_drop()
4234 rtw89_write32_set(rtwdev, p->bcn_drop_all, BIT(rtwvif_link->port)); in rtw89_mac_bcn_drop()
4235 rtw89_write32_port_mask(rtwdev, rtwvif_link, p->tbtt_prohib, B_AX_TBTT_SETUP_MASK, in rtw89_mac_bcn_drop()
4237 rtw89_write32_port_mask(rtwdev, rtwvif_link, p->bcn_area, B_AX_BCN_MSK_AREA_MASK, in rtw89_mac_bcn_drop()
4239 rtw89_write32_port_mask(rtwdev, rtwvif_link, p->tbtt_prohib, B_AX_TBTT_HOLD_MASK, in rtw89_mac_bcn_drop()
4241 rtw89_write32_port_mask(rtwdev, rtwvif_link, p->bcn_early, B_AX_BCNERLY_MASK, 2); in rtw89_mac_bcn_drop()
4242 rtw89_write16_port_mask(rtwdev, rtwvif_link, p->tbtt_early, in rtw89_mac_bcn_drop()
4244 rtw89_write32_port_mask(rtwdev, rtwvif_link, p->bcn_space, in rtw89_mac_bcn_drop()
4246 rtw89_write32_port_set(rtwdev, rtwvif_link, p->port_cfg, B_AX_BCNTX_EN); in rtw89_mac_bcn_drop()
4249 if (rtwvif_link->port == RTW89_PORT_0) in rtw89_mac_bcn_drop()
4252 rtw89_write32_clr(rtwdev, p->bcn_drop_all, BIT(rtwvif_link->port)); in rtw89_mac_bcn_drop()
4253 rtw89_write32_port_clr(rtwdev, rtwvif_link, p->port_cfg, B_AX_TBTT_PROHIB_EN); in rtw89_mac_bcn_drop()
4269 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_cfg_func_sw()
4270 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_cfg_func_sw()
4271 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_mac_port_cfg_func_sw()
4277 if (!rtw89_read32_port_mask(rtwdev, rtwvif_link, p->port_cfg, B_AX_PORT_FUNC_EN)) in rtw89_mac_port_cfg_func_sw()
4280 if (chip->chip_id == RTL8852A && rtwvif_link->port != RTW89_PORT_0) { in rtw89_mac_port_cfg_func_sw()
4282 backup_val = rtw89_read32_port(rtwdev, rtwvif_link, p->tbtt_prohib); in rtw89_mac_port_cfg_func_sw()
4285 if (rtwvif_link->net_type == RTW89_NET_TYPE_AP_MODE) in rtw89_mac_port_cfg_func_sw()
4288 if (chip->chip_id == RTL8852A) { in rtw89_mac_port_cfg_func_sw()
4289 rtw89_write32_port_clr(rtwdev, rtwvif_link, p->tbtt_prohib, in rtw89_mac_port_cfg_func_sw()
4291 rtw89_write32_port_mask(rtwdev, rtwvif_link, p->tbtt_prohib, in rtw89_mac_port_cfg_func_sw()
4293 rtw89_write16_port_clr(rtwdev, rtwvif_link, p->tbtt_early, in rtw89_mac_port_cfg_func_sw()
4295 rtw89_write16_port_clr(rtwdev, rtwvif_link, p->bcn_early, in rtw89_mac_port_cfg_func_sw()
4302 beacon_int = bss_conf->beacon_int; in rtw89_mac_port_cfg_func_sw()
4307 rtw89_write32_port_clr(rtwdev, rtwvif_link, p->port_cfg, B_AX_PORT_FUNC_EN | in rtw89_mac_port_cfg_func_sw()
4309 rtw89_write32_port_set(rtwdev, rtwvif_link, p->port_cfg, B_AX_TSFTR_RST); in rtw89_mac_port_cfg_func_sw()
4310 rtw89_write32_port(rtwdev, rtwvif_link, p->bcn_cnt_tmr, 0); in rtw89_mac_port_cfg_func_sw()
4313 rtw89_write32_port(rtwdev, rtwvif_link, p->tbtt_prohib, backup_val); in rtw89_mac_port_cfg_func_sw()
4319 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_cfg_tx_rpt()
4320 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_cfg_tx_rpt()
4323 rtw89_write32_port_set(rtwdev, rtwvif_link, p->port_cfg, in rtw89_mac_port_cfg_tx_rpt()
4326 rtw89_write32_port_clr(rtwdev, rtwvif_link, p->port_cfg, in rtw89_mac_port_cfg_tx_rpt()
4333 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_cfg_rx_rpt()
4334 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_cfg_rx_rpt()
4337 rtw89_write32_port_set(rtwdev, rtwvif_link, p->port_cfg, in rtw89_mac_port_cfg_rx_rpt()
4340 rtw89_write32_port_clr(rtwdev, rtwvif_link, p->port_cfg, in rtw89_mac_port_cfg_rx_rpt()
4347 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_cfg_net_type()
4348 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_cfg_net_type()
4350 rtw89_write32_port_mask(rtwdev, rtwvif_link, p->port_cfg, B_AX_NET_TYPE_MASK, in rtw89_mac_port_cfg_net_type()
4351 rtwvif_link->net_type); in rtw89_mac_port_cfg_net_type()
4357 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_cfg_bcn_prct()
4358 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_cfg_bcn_prct()
4359 bool en = rtwvif_link->net_type != RTW89_NET_TYPE_NO_LINK; in rtw89_mac_port_cfg_bcn_prct()
4363 rtw89_write32_port_set(rtwdev, rtwvif_link, p->port_cfg, bits); in rtw89_mac_port_cfg_bcn_prct()
4365 rtw89_write32_port_clr(rtwdev, rtwvif_link, p->port_cfg, bits); in rtw89_mac_port_cfg_bcn_prct()
4371 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_cfg_rx_sw()
4372 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_cfg_rx_sw()
4373 bool en = rtwvif_link->net_type == RTW89_NET_TYPE_INFRA || in rtw89_mac_port_cfg_rx_sw()
4374 rtwvif_link->net_type == RTW89_NET_TYPE_AD_HOC; in rtw89_mac_port_cfg_rx_sw()
4378 rtw89_write32_port_set(rtwdev, rtwvif_link, p->port_cfg, bit); in rtw89_mac_port_cfg_rx_sw()
4380 rtw89_write32_port_clr(rtwdev, rtwvif_link, p->port_cfg, bit); in rtw89_mac_port_cfg_rx_sw()
4386 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_cfg_rx_sync()
4387 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_cfg_rx_sync()
4390 rtw89_write32_port_set(rtwdev, rtwvif_link, p->port_cfg, B_AX_TSF_UDT_EN); in rtw89_mac_port_cfg_rx_sync()
4392 rtw89_write32_port_clr(rtwdev, rtwvif_link, p->port_cfg, B_AX_TSF_UDT_EN); in rtw89_mac_port_cfg_rx_sync()
4398 bool en = rtwvif_link->net_type == RTW89_NET_TYPE_INFRA || in rtw89_mac_port_cfg_rx_sync_by_nettype()
4399 rtwvif_link->net_type == RTW89_NET_TYPE_AD_HOC; in rtw89_mac_port_cfg_rx_sync_by_nettype()
4407 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_cfg_tx_sw()
4408 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_cfg_tx_sw()
4411 rtw89_write32_port_set(rtwdev, rtwvif_link, p->port_cfg, B_AX_BCNTX_EN); in rtw89_mac_port_cfg_tx_sw()
4413 rtw89_write32_port_clr(rtwdev, rtwvif_link, p->port_cfg, B_AX_BCNTX_EN); in rtw89_mac_port_cfg_tx_sw()
4419 bool en = rtwvif_link->net_type == RTW89_NET_TYPE_AP_MODE || in rtw89_mac_port_cfg_tx_sw_by_nettype()
4420 rtwvif_link->net_type == RTW89_NET_TYPE_AD_HOC; in rtw89_mac_port_cfg_tx_sw_by_nettype()
4432 if (rtwvif_link->net_type != RTW89_NET_TYPE_AP_MODE) in rtw89_mac_enable_ap_bcn_by_chan()
4441 chan = rtw89_chan_get(rtwdev, rtwvif_link->chanctx_idx); in rtw89_mac_enable_ap_bcn_by_chan()
4442 if (chan->channel != to_match->channel) in rtw89_mac_enable_ap_bcn_by_chan()
4471 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_cfg_bcn_intv()
4472 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_cfg_bcn_intv()
4479 if (bss_conf->beacon_int) in rtw89_mac_port_cfg_bcn_intv()
4480 bcn_int = bss_conf->beacon_int; in rtw89_mac_port_cfg_bcn_intv()
4486 rtw89_write32_port_mask(rtwdev, rtwvif_link, p->bcn_space, B_AX_BCN_SPACE_MASK, in rtw89_mac_port_cfg_bcn_intv()
4493 u8 win = rtwvif_link->net_type == RTW89_NET_TYPE_AP_MODE ? 16 : 0; in rtw89_mac_port_cfg_hiq_win()
4494 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_cfg_hiq_win()
4495 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_cfg_hiq_win()
4496 u8 port = rtwvif_link->port; in rtw89_mac_port_cfg_hiq_win()
4499 reg = rtw89_mac_reg_by_idx(rtwdev, p->hiq_win[port], rtwvif_link->mac_idx); in rtw89_mac_port_cfg_hiq_win()
4506 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_cfg_hiq_dtim()
4507 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_cfg_hiq_dtim()
4515 dtim_period = bss_conf->dtim_period; in rtw89_mac_port_cfg_hiq_dtim()
4519 addr = rtw89_mac_reg_by_idx(rtwdev, p->md_tsft, rtwvif_link->mac_idx); in rtw89_mac_port_cfg_hiq_dtim()
4522 rtw89_write16_port_mask(rtwdev, rtwvif_link, p->dtim_ctrl, B_AX_DTIM_NUM_MASK, in rtw89_mac_port_cfg_hiq_dtim()
4529 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_cfg_bcn_setup_time()
4530 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_cfg_bcn_setup_time()
4532 rtw89_write32_port_mask(rtwdev, rtwvif_link, p->tbtt_prohib, in rtw89_mac_port_cfg_bcn_setup_time()
4539 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_cfg_bcn_hold_time()
4540 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_cfg_bcn_hold_time()
4542 rtw89_write32_port_mask(rtwdev, rtwvif_link, p->tbtt_prohib, in rtw89_mac_port_cfg_bcn_hold_time()
4549 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_cfg_bcn_mask_area()
4550 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_cfg_bcn_mask_area()
4552 rtw89_write32_port_mask(rtwdev, rtwvif_link, p->bcn_area, in rtw89_mac_port_cfg_bcn_mask_area()
4559 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_cfg_tbtt_early()
4560 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_cfg_tbtt_early()
4562 rtw89_write16_port_mask(rtwdev, rtwvif_link, p->tbtt_early, in rtw89_mac_port_cfg_tbtt_early()
4569 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_cfg_bss_color()
4570 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_cfg_bss_color()
4577 u8 port = rtwvif_link->port; in rtw89_mac_port_cfg_bss_color()
4585 bss_color = bss_conf->he_bss_color.color; in rtw89_mac_port_cfg_bss_color()
4589 reg_base = port >= 4 ? p->bss_color + 4 : p->bss_color; in rtw89_mac_port_cfg_bss_color()
4590 reg = rtw89_mac_reg_by_idx(rtwdev, reg_base, rtwvif_link->mac_idx); in rtw89_mac_port_cfg_bss_color()
4597 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_cfg_mbssid()
4598 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_cfg_mbssid()
4599 u8 port = rtwvif_link->port; in rtw89_mac_port_cfg_mbssid()
4602 if (rtwvif_link->net_type == RTW89_NET_TYPE_AP_MODE) in rtw89_mac_port_cfg_mbssid()
4606 reg = rtw89_mac_reg_by_idx(rtwdev, p->mbssid, rtwvif_link->mac_idx); in rtw89_mac_port_cfg_mbssid()
4614 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_cfg_hiq_drop()
4615 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_cfg_hiq_drop()
4616 u8 port = rtwvif_link->port; in rtw89_mac_port_cfg_hiq_drop()
4620 reg = rtw89_mac_reg_by_idx(rtwdev, p->mbssid_drop, rtwvif_link->mac_idx); in rtw89_mac_port_cfg_hiq_drop()
4631 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_cfg_func_en()
4632 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_cfg_func_en()
4635 rtw89_write32_port_set(rtwdev, rtwvif_link, p->port_cfg, in rtw89_mac_port_cfg_func_en()
4638 rtw89_write32_port_clr(rtwdev, rtwvif_link, p->port_cfg, in rtw89_mac_port_cfg_func_en()
4645 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_cfg_bcn_early()
4646 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_cfg_bcn_early()
4648 rtw89_write32_port_mask(rtwdev, rtwvif_link, p->bcn_early, B_AX_BCNERLY_MASK, in rtw89_mac_port_cfg_bcn_early()
4655 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_cfg_tbtt_shift()
4656 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_cfg_tbtt_shift()
4659 if (rtwdev->chip->chip_id != RTL8852C) in rtw89_mac_port_cfg_tbtt_shift()
4662 if (rtwvif_link->wifi_role != RTW89_WIFI_ROLE_P2P_CLIENT && in rtw89_mac_port_cfg_tbtt_shift()
4663 rtwvif_link->wifi_role != RTW89_WIFI_ROLE_STATION) in rtw89_mac_port_cfg_tbtt_shift()
4669 rtw89_write16_port_mask(rtwdev, rtwvif_link, p->tbtt_shift, in rtw89_mac_port_cfg_tbtt_shift()
4678 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_tsf_sync()
4679 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_tsf_sync()
4683 reg = rtw89_mac_reg_by_idx(rtwdev, p->tsf_sync + rtwvif_link->port * 4, in rtw89_mac_port_tsf_sync()
4684 rtwvif_link->mac_idx); in rtw89_mac_port_tsf_sync()
4686 rtw89_write32_mask(rtwdev, reg, B_AX_SYNC_PORT_SRC, rtwvif_src->port); in rtw89_mac_port_tsf_sync()
4696 if (rtwvif_link->net_type != RTW89_NET_TYPE_AP_MODE || rtwvif_link == rtwvif_src) in rtw89_mac_port_tsf_sync_rand()
4699 if (rtwvif_link->rand_tsf_done) in rtw89_mac_port_tsf_sync_rand()
4703 offset = offset - offset / 4 + get_random_u32() % (offset / 2); in rtw89_mac_port_tsf_sync_rand()
4707 rtwvif_link->rand_tsf_done = true; in rtw89_mac_port_tsf_sync_rand()
4723 if (!src || tmp->net_type == RTW89_NET_TYPE_INFRA) in rtw89_mac_port_tsf_resync_all()
4725 if (tmp->net_type == RTW89_NET_TYPE_AP_MODE) in rtw89_mac_port_tsf_resync_all()
4749 rtw89_mac_dmac_tbl_init(rtwdev, rtwvif_link->mac_id); in rtw89_mac_vif_init()
4750 rtw89_mac_cmac_tbl_init(rtwdev, rtwvif_link->mac_id); in rtw89_mac_vif_init()
4752 ret = rtw89_mac_set_macid_pause(rtwdev, rtwvif_link->mac_id, false); in rtw89_mac_vif_init()
4802 u8 port = rtwvif_link->port; in rtw89_mac_port_update()
4805 return -EINVAL; in rtw89_mac_port_update()
4837 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_port_get_tsf()
4838 const struct rtw89_port_reg *p = mac->port_base; in rtw89_mac_port_get_tsf()
4842 ret = rtw89_mac_check_mac_en(rtwdev, rtwvif_link->mac_idx, RTW89_CMAC_SEL); in rtw89_mac_port_get_tsf()
4846 tsf_low = rtw89_read32_port(rtwdev, rtwvif_link, p->tsftr_l); in rtw89_mac_port_get_tsf()
4847 tsf_high = rtw89_read32_port(rtwdev, rtwvif_link, p->tsftr_h); in rtw89_mac_port_get_tsf()
4862 ies = rcu_dereference(bss->ies); in rtw89_mac_check_he_obss_narrow_bw_ru_iter()
4863 elem = cfg80211_find_elem(WLAN_EID_EXT_CAPABILITY, ies->data, in rtw89_mac_check_he_obss_narrow_bw_ru_iter()
4864 ies->len); in rtw89_mac_check_he_obss_narrow_bw_ru_iter()
4866 if (!elem || elem->datalen < 10 || in rtw89_mac_check_he_obss_narrow_bw_ru_iter()
4867 !(elem->data[10] & WLAN_EXT_CAPA10_OBSS_NARROW_BW_RU_TOLERANCE_SUPPORT)) in rtw89_mac_check_he_obss_narrow_bw_ru_iter()
4876 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_set_he_obss_narrow_bw_ru()
4877 struct ieee80211_hw *hw = rtwdev->hw; in rtw89_mac_set_he_obss_narrow_bw_ru()
4886 if (!bss_conf->he_support || vif->type != NL80211_IFTYPE_STATION) { in rtw89_mac_set_he_obss_narrow_bw_ru()
4891 oper = bss_conf->chanreq.oper; in rtw89_mac_set_he_obss_narrow_bw_ru()
4892 if (!(oper.chan->flags & IEEE80211_CHAN_RADAR)) { in rtw89_mac_set_he_obss_narrow_bw_ru()
4899 cfg80211_bss_iter(hw->wiphy, &oper, in rtw89_mac_set_he_obss_narrow_bw_ru()
4903 reg = rtw89_mac_reg_by_idx(rtwdev, mac->narrow_bw_ru_dis.addr, in rtw89_mac_set_he_obss_narrow_bw_ru()
4904 rtwvif_link->mac_idx); in rtw89_mac_set_he_obss_narrow_bw_ru()
4906 rtw89_write32_clr(rtwdev, reg, mac->narrow_bw_ru_dis.mask); in rtw89_mac_set_he_obss_narrow_bw_ru()
4908 rtw89_write32_set(rtwdev, reg, mac->narrow_bw_ru_dis.mask); in rtw89_mac_set_he_obss_narrow_bw_ru()
4918 if (rtwdev->chip->chip_gen != RTW89_CHIP_BE) in rtw89_mac_set_he_tb()
4924 set = bss_conf->he_support && !bss_conf->eht_support; in rtw89_mac_set_he_tb()
4929 rtwvif_link->mac_idx); in rtw89_mac_set_he_tb()
4941 rtwvif_link->rand_tsf_done = false; in rtw89_mac_stop_ap()
4962 struct rtw89_hw_scan_info *scan_info = &rtwdev->scan_info; in rtw89_hw_scan_search_op_chan()
4963 const struct rtw89_chan *op = &rtwdev->scan_info.op_chan; in rtw89_hw_scan_search_op_chan()
4965 if (band == op->band_type && channel == op->primary_channel) in rtw89_hw_scan_search_op_chan()
4968 if (scan_info->extra_op.set) { in rtw89_hw_scan_search_op_chan()
4969 op = &scan_info->extra_op.chan; in rtw89_hw_scan_search_op_chan()
4970 if (band == op->band_type && channel == op->primary_channel) in rtw89_hw_scan_search_op_chan()
4982 (const struct rtw89_c2h_scanofld *)skb->data; in rtw89_mac_c2h_scanofld_rsp()
4983 struct rtw89_vif_link *rtwvif_link = rtwdev->scan_info.scanning_vif; in rtw89_mac_c2h_scanofld_rsp()
4998 rtwvif = rtwvif_link->rtwvif; in rtw89_mac_c2h_scanofld_rsp()
5000 if (RTW89_CHK_FW_FEATURE(CH_INFO_BE_V0, &rtwdev->fw)) in rtw89_mac_c2h_scanofld_rsp()
5003 tx_fail = le32_get_bits(c2h->w5, RTW89_C2H_SCANOFLD_W5_TX_FAIL); in rtw89_mac_c2h_scanofld_rsp()
5004 status = le32_get_bits(c2h->w2, RTW89_C2H_SCANOFLD_W2_STATUS); in rtw89_mac_c2h_scanofld_rsp()
5005 chan = le32_get_bits(c2h->w2, RTW89_C2H_SCANOFLD_W2_PRI_CH); in rtw89_mac_c2h_scanofld_rsp()
5006 reason = le32_get_bits(c2h->w2, RTW89_C2H_SCANOFLD_W2_RSN); in rtw89_mac_c2h_scanofld_rsp()
5007 band = le32_get_bits(c2h->w5, RTW89_C2H_SCANOFLD_W5_BAND); in rtw89_mac_c2h_scanofld_rsp()
5008 actual_period = le32_get_bits(c2h->w2, RTW89_C2H_SCANOFLD_W2_PERIOD); in rtw89_mac_c2h_scanofld_rsp()
5009 mac_idx = le32_get_bits(c2h->w5, RTW89_C2H_SCANOFLD_W5_MAC_IDX); in rtw89_mac_c2h_scanofld_rsp()
5012 if (!(rtwdev->chip->support_bands & BIT(NL80211_BAND_6GHZ))) in rtw89_mac_c2h_scanofld_rsp()
5015 if (rtwdev->chip->chip_gen == RTW89_CHIP_BE) { in rtw89_mac_c2h_scanofld_rsp()
5016 sw_def = le32_get_bits(c2h->w6, RTW89_C2H_SCANOFLD_W6_SW_DEF); in rtw89_mac_c2h_scanofld_rsp()
5017 fw_def = le32_get_bits(c2h->w6, RTW89_C2H_SCANOFLD_W6_FW_DEF); in rtw89_mac_c2h_scanofld_rsp()
5018 report_tsf = le32_get_bits(c2h->w7, RTW89_C2H_SCANOFLD_W7_REPORT_TSF); in rtw89_mac_c2h_scanofld_rsp()
5021 le32_get_bits(c2h->w6, RTW89_C2H_SCANOFLD_W6_EXPECT_PERIOD); in rtw89_mac_c2h_scanofld_rsp()
5023 actual_period = le32_get_bits(c2h->w8, RTW89_C2H_SCANOFLD_W8_PERIOD_V1); in rtw89_mac_c2h_scanofld_rsp()
5025 le32_get_bits(c2h->w8, RTW89_C2H_SCANOFLD_W8_EXPECT_PERIOD_V1); in rtw89_mac_c2h_scanofld_rsp()
5043 ieee80211_stop_queues(rtwdev->hw); in rtw89_mac_c2h_scanofld_rsp()
5047 if (rtwdev->scan_info.abort) in rtw89_mac_c2h_scanofld_rsp()
5050 if (rtwvif_link && rtwvif->scan_req && in rtw89_mac_c2h_scanofld_rsp()
5051 !list_empty(&rtwdev->scan_info.chan_list)) { in rtw89_mac_c2h_scanofld_rsp()
5052 rtwdev->scan_info.delay = 0; in rtw89_mac_c2h_scanofld_rsp()
5066 rtw89_assign_entity_chan(rtwdev, rtwvif_link->chanctx_idx, op_chan); in rtw89_mac_c2h_scanofld_rsp()
5068 ieee80211_wake_queues(rtwdev->hw); in rtw89_mac_c2h_scanofld_rsp()
5072 rtw89_assign_entity_chan(rtwdev, rtwvif_link->chanctx_idx, in rtw89_mac_c2h_scanofld_rsp()
5086 struct rtw89_vif *rtwvif = rtwvif_link->rtwvif; in rtw89_mac_bcn_fltr_rpt()
5089 (const struct rtw89_c2h_mac_bcnfltr_rpt *)skb->data; in rtw89_mac_bcn_fltr_rpt()
5094 type = le32_get_bits(c2h->w2, RTW89_C2H_MAC_BCNFLTR_RPT_W2_TYPE); in rtw89_mac_bcn_fltr_rpt()
5095 sig = le32_get_bits(c2h->w2, RTW89_C2H_MAC_BCNFLTR_RPT_W2_MA) - MAX_RSSI; in rtw89_mac_bcn_fltr_rpt()
5096 event = le32_get_bits(c2h->w2, RTW89_C2H_MAC_BCNFLTR_RPT_W2_EVENT); in rtw89_mac_bcn_fltr_rpt()
5097 mac_id = le32_get_bits(c2h->w2, RTW89_C2H_MAC_BCNFLTR_RPT_W2_MACID); in rtw89_mac_bcn_fltr_rpt()
5099 if (mac_id != rtwvif_link->mac_id) in rtw89_mac_bcn_fltr_rpt()
5108 if (!rtwdev->scanning && !rtwvif->offchan && in rtw89_mac_bcn_fltr_rpt()
5109 !rtwvif_link->noa_once.in_duration) { in rtw89_mac_bcn_fltr_rpt()
5156 "C2H rev ack recv, cat: %d, class: %d, func: %d, seq : %d\n", in rtw89_mac_c2h_rec_ack()
5157 RTW89_GET_MAC_C2H_REV_ACK_CAT(c2h->data), in rtw89_mac_c2h_rec_ack()
5158 RTW89_GET_MAC_C2H_REV_ACK_CLASS(c2h->data), in rtw89_mac_c2h_rec_ack()
5159 RTW89_GET_MAC_C2H_REV_ACK_FUNC(c2h->data), in rtw89_mac_c2h_rec_ack()
5160 RTW89_GET_MAC_C2H_REV_ACK_H2C_SEQ(c2h->data)); in rtw89_mac_c2h_rec_ack()
5167 struct rtw89_wait_info *fw_ofld_wait = &rtwdev->mac.fw_ofld_wait; in rtw89_mac_c2h_done_ack()
5168 struct rtw89_hw_scan_info *scan_info = &rtwdev->scan_info; in rtw89_mac_c2h_done_ack()
5169 struct rtw89_wait_info *ps_wait = &rtwdev->mac.ps_wait; in rtw89_mac_c2h_done_ack()
5171 (const struct rtw89_c2h_done_ack *)skb_c2h->data; in rtw89_mac_c2h_done_ack()
5172 u8 h2c_cat = le32_get_bits(c2h->w2, RTW89_C2H_DONE_ACK_W2_CAT); in rtw89_mac_c2h_done_ack()
5173 u8 h2c_class = le32_get_bits(c2h->w2, RTW89_C2H_DONE_ACK_W2_CLASS); in rtw89_mac_c2h_done_ack()
5174 u8 h2c_func = le32_get_bits(c2h->w2, RTW89_C2H_DONE_ACK_W2_FUNC); in rtw89_mac_c2h_done_ack()
5175 u8 h2c_return = le32_get_bits(c2h->w2, RTW89_C2H_DONE_ACK_W2_H2C_RETURN); in rtw89_mac_c2h_done_ack()
5176 u8 h2c_seq = le32_get_bits(c2h->w2, RTW89_C2H_DONE_ACK_W2_H2C_SEQ); in rtw89_mac_c2h_done_ack()
5181 "C2H done ack recv, cat: %d, class: %d, func: %d, ret: %d, seq : %d\n", in rtw89_mac_c2h_done_ack()
5211 scan_info->seq++; in rtw89_mac_c2h_done_ack()
5215 scan_info->seq++; in rtw89_mac_c2h_done_ack()
5230 rtw89_fw_log_dump(rtwdev, c2h->data, len); in rtw89_mac_c2h_log()
5242 struct rtw89_wait_info *wait = &rtwdev->mac.fw_ofld_wait; in rtw89_mac_c2h_pkt_ofld_rsp()
5244 (const struct rtw89_c2h_pkt_ofld_rsp *)skb_c2h->data; in rtw89_mac_c2h_pkt_ofld_rsp()
5245 u16 pkt_len = le32_get_bits(c2h->w2, RTW89_C2H_PKT_OFLD_RSP_W2_PTK_LEN); in rtw89_mac_c2h_pkt_ofld_rsp()
5246 u8 pkt_id = le32_get_bits(c2h->w2, RTW89_C2H_PKT_OFLD_RSP_W2_PTK_ID); in rtw89_mac_c2h_pkt_ofld_rsp()
5247 u8 pkt_op = le32_get_bits(c2h->w2, RTW89_C2H_PKT_OFLD_RSP_W2_PTK_OP); in rtw89_mac_c2h_pkt_ofld_rsp()
5264 (struct rtw89_c2h_tx_duty_rpt *)skb_c2h->data; in rtw89_mac_c2h_tx_duty_rpt()
5267 err = le32_get_bits(c2h->w2, RTW89_C2H_TX_DUTY_RPT_W2_TIMER_ERR); in rtw89_mac_c2h_tx_duty_rpt()
5282 u8 group = RTW89_GET_MAC_C2H_MCC_RCV_ACK_GROUP(c2h->data); in rtw89_mac_c2h_mcc_rcv_ack()
5283 u8 func = RTW89_GET_MAC_C2H_MCC_RCV_ACK_H2C_FUNC(c2h->data); in rtw89_mac_c2h_mcc_rcv_ack() local
5285 switch (func) { in rtw89_mac_c2h_mcc_rcv_ack()
5298 "invalid MCC C2H RCV ACK: func %d\n", func); in rtw89_mac_c2h_mcc_rcv_ack()
5303 "MCC C2H RCV ACK: group %d, func %d\n", group, func); in rtw89_mac_c2h_mcc_rcv_ack()
5309 u8 group = RTW89_GET_MAC_C2H_MCC_REQ_ACK_GROUP(c2h->data); in rtw89_mac_c2h_mcc_req_ack()
5310 u8 func = RTW89_GET_MAC_C2H_MCC_REQ_ACK_H2C_FUNC(c2h->data); in rtw89_mac_c2h_mcc_req_ack() local
5311 u8 retcode = RTW89_GET_MAC_C2H_MCC_REQ_ACK_H2C_RETURN(c2h->data); in rtw89_mac_c2h_mcc_req_ack()
5316 switch (func) { in rtw89_mac_c2h_mcc_req_ack()
5331 "invalid MCC C2H REQ ACK: func %d\n", func); in rtw89_mac_c2h_mcc_req_ack()
5336 "MCC C2H REQ ACK: group %d, func %d, return code %d\n", in rtw89_mac_c2h_mcc_req_ack()
5337 group, func, retcode); in rtw89_mac_c2h_mcc_req_ack()
5343 cond = RTW89_MCC_WAIT_COND(group, func); in rtw89_mac_c2h_mcc_req_ack()
5344 rtw89_complete_cond(&rtwdev->mcc.wait, cond, &data); in rtw89_mac_c2h_mcc_req_ack()
5350 u8 group = RTW89_GET_MAC_C2H_MCC_TSF_RPT_GROUP(c2h->data); in rtw89_mac_c2h_mcc_tsf_rpt()
5356 rpt->macid_x = RTW89_GET_MAC_C2H_MCC_TSF_RPT_MACID_X(c2h->data); in rtw89_mac_c2h_mcc_tsf_rpt()
5357 rpt->macid_y = RTW89_GET_MAC_C2H_MCC_TSF_RPT_MACID_Y(c2h->data); in rtw89_mac_c2h_mcc_tsf_rpt()
5358 rpt->tsf_x_low = RTW89_GET_MAC_C2H_MCC_TSF_RPT_TSF_LOW_X(c2h->data); in rtw89_mac_c2h_mcc_tsf_rpt()
5359 rpt->tsf_x_high = RTW89_GET_MAC_C2H_MCC_TSF_RPT_TSF_HIGH_X(c2h->data); in rtw89_mac_c2h_mcc_tsf_rpt()
5360 rpt->tsf_y_low = RTW89_GET_MAC_C2H_MCC_TSF_RPT_TSF_LOW_Y(c2h->data); in rtw89_mac_c2h_mcc_tsf_rpt()
5361 rpt->tsf_y_high = RTW89_GET_MAC_C2H_MCC_TSF_RPT_TSF_HIGH_Y(c2h->data); in rtw89_mac_c2h_mcc_tsf_rpt()
5366 rpt->macid_x, (u64)rpt->tsf_x_high << 32 | rpt->tsf_x_low, in rtw89_mac_c2h_mcc_tsf_rpt()
5367 rpt->macid_y, (u64)rpt->tsf_y_high << 32 | rpt->tsf_y_low); in rtw89_mac_c2h_mcc_tsf_rpt()
5370 rpt->macid_x, (uintmax_t)rpt->tsf_x_high << 32 | rpt->tsf_x_low, in rtw89_mac_c2h_mcc_tsf_rpt()
5371 rpt->macid_y, (uintmax_t)rpt->tsf_y_high << 32 | rpt->tsf_y_low); in rtw89_mac_c2h_mcc_tsf_rpt()
5375 rtw89_complete_cond(&rtwdev->mcc.wait, cond, &data); in rtw89_mac_c2h_mcc_tsf_rpt()
5381 u8 group = RTW89_GET_MAC_C2H_MCC_STATUS_RPT_GROUP(c2h->data); in rtw89_mac_c2h_mcc_status_rpt()
5382 u8 macid = RTW89_GET_MAC_C2H_MCC_STATUS_RPT_MACID(c2h->data); in rtw89_mac_c2h_mcc_status_rpt()
5383 u8 status = RTW89_GET_MAC_C2H_MCC_STATUS_RPT_STATUS(c2h->data); in rtw89_mac_c2h_mcc_status_rpt()
5384 u32 tsf_low = RTW89_GET_MAC_C2H_MCC_STATUS_RPT_TSF_LOW(c2h->data); in rtw89_mac_c2h_mcc_status_rpt()
5385 u32 tsf_high = RTW89_GET_MAC_C2H_MCC_STATUS_RPT_TSF_HIGH(c2h->data); in rtw89_mac_c2h_mcc_status_rpt()
5390 u8 func; in rtw89_mac_c2h_mcc_status_rpt() local
5395 func = H2C_FUNC_ADD_MCC; in rtw89_mac_c2h_mcc_status_rpt()
5400 func = H2C_FUNC_START_MCC; in rtw89_mac_c2h_mcc_status_rpt()
5405 func = H2C_FUNC_STOP_MCC; in rtw89_mac_c2h_mcc_status_rpt()
5410 func = H2C_FUNC_DEL_MCC_GROUP; in rtw89_mac_c2h_mcc_status_rpt()
5415 func = H2C_FUNC_RESET_MCC_GROUP; in rtw89_mac_c2h_mcc_status_rpt()
5449 cond = RTW89_MCC_WAIT_COND(group, func); in rtw89_mac_c2h_mcc_status_rpt()
5450 rtw89_complete_cond(&rtwdev->mcc.wait, cond, &data); in rtw89_mac_c2h_mcc_status_rpt()
5456 struct rtw89_wait_info *wait = &rtwdev->mcc.wait; in rtw89_mac_c2h_mrc_tsf_rpt()
5462 c2h_rpt = (const struct rtw89_c2h_mrc_tsf_rpt *)c2h->data; in rtw89_mac_c2h_mrc_tsf_rpt()
5464 rpt->num = min_t(u8, RTW89_MAC_MRC_MAX_REQ_TSF_NUM, in rtw89_mac_c2h_mrc_tsf_rpt()
5465 le32_get_bits(c2h_rpt->w2, in rtw89_mac_c2h_mrc_tsf_rpt()
5468 for (i = 0; i < rpt->num; i++) { in rtw89_mac_c2h_mrc_tsf_rpt()
5469 u32 tsf_high = le32_to_cpu(c2h_rpt->infos[i].tsf_high); in rtw89_mac_c2h_mrc_tsf_rpt()
5470 u32 tsf_low = le32_to_cpu(c2h_rpt->infos[i].tsf_low); in rtw89_mac_c2h_mrc_tsf_rpt()
5472 rpt->tsfs[i] = (u64)tsf_high << 32 | tsf_low; in rtw89_mac_c2h_mrc_tsf_rpt()
5477 i, rpt->tsfs[i]); in rtw89_mac_c2h_mrc_tsf_rpt()
5480 i, (uintmax_t)rpt->tsfs[i]); in rtw89_mac_c2h_mrc_tsf_rpt()
5490 struct rtw89_wow_param *rtw_wow = &rtwdev->wow; in rtw89_mac_c2h_wow_aoac_rpt()
5491 struct rtw89_wow_aoac_report *aoac_rpt = &rtw_wow->aoac_rpt; in rtw89_mac_c2h_wow_aoac_rpt()
5492 struct rtw89_wait_info *wait = &rtw_wow->wait; in rtw89_mac_c2h_wow_aoac_rpt()
5494 (const struct rtw89_c2h_wow_aoac_report *)skb->data; in rtw89_mac_c2h_wow_aoac_rpt()
5497 aoac_rpt->rpt_ver = c2h->rpt_ver; in rtw89_mac_c2h_wow_aoac_rpt()
5498 aoac_rpt->sec_type = c2h->sec_type; in rtw89_mac_c2h_wow_aoac_rpt()
5499 aoac_rpt->key_idx = c2h->key_idx; in rtw89_mac_c2h_wow_aoac_rpt()
5500 aoac_rpt->pattern_idx = c2h->pattern_idx; in rtw89_mac_c2h_wow_aoac_rpt()
5501 aoac_rpt->rekey_ok = u8_get_bits(c2h->rekey_ok, in rtw89_mac_c2h_wow_aoac_rpt()
5503 memcpy(aoac_rpt->ptk_tx_iv, c2h->ptk_tx_iv, sizeof(aoac_rpt->ptk_tx_iv)); in rtw89_mac_c2h_wow_aoac_rpt()
5504 memcpy(aoac_rpt->eapol_key_replay_count, c2h->eapol_key_replay_count, in rtw89_mac_c2h_wow_aoac_rpt()
5505 sizeof(aoac_rpt->eapol_key_replay_count)); in rtw89_mac_c2h_wow_aoac_rpt()
5506 memcpy(aoac_rpt->gtk, c2h->gtk, sizeof(aoac_rpt->gtk)); in rtw89_mac_c2h_wow_aoac_rpt()
5507 memcpy(aoac_rpt->ptk_rx_iv, c2h->ptk_rx_iv, sizeof(aoac_rpt->ptk_rx_iv)); in rtw89_mac_c2h_wow_aoac_rpt()
5508 memcpy(aoac_rpt->gtk_rx_iv, c2h->gtk_rx_iv, sizeof(aoac_rpt->gtk_rx_iv)); in rtw89_mac_c2h_wow_aoac_rpt()
5509 aoac_rpt->igtk_key_id = le64_to_cpu(c2h->igtk_key_id); in rtw89_mac_c2h_wow_aoac_rpt()
5510 aoac_rpt->igtk_ipn = le64_to_cpu(c2h->igtk_ipn); in rtw89_mac_c2h_wow_aoac_rpt()
5511 memcpy(aoac_rpt->igtk, c2h->igtk, sizeof(aoac_rpt->igtk)); in rtw89_mac_c2h_wow_aoac_rpt()
5520 struct rtw89_wait_info *wait = &rtwdev->mlo.wait; in rtw89_mac_c2h_mlo_link_cfg_stat()
5526 c2h_rpt = (const struct rtw89_c2h_mlo_link_cfg_rpt *)c2h->data; in rtw89_mac_c2h_mlo_link_cfg_stat()
5528 mac_id = le32_get_bits(c2h_rpt->w2, RTW89_C2H_MLO_LINK_CFG_RPT_W2_MACID); in rtw89_mac_c2h_mlo_link_cfg_stat()
5529 status = le32_get_bits(c2h_rpt->w2, RTW89_C2H_MLO_LINK_CFG_RPT_W2_STATUS); in rtw89_mac_c2h_mlo_link_cfg_stat()
5540 struct rtw89_wait_info *wait = &rtwdev->mcc.wait; in rtw89_mac_c2h_mrc_status_rpt()
5549 u8 func; in rtw89_mac_c2h_mrc_status_rpt() local
5551 c2h_rpt = (const struct rtw89_c2h_mrc_status_rpt *)c2h->data; in rtw89_mac_c2h_mrc_status_rpt()
5552 sch_idx = le32_get_bits(c2h_rpt->w2, RTW89_C2H_MRC_STATUS_RPT_W2_SCH_IDX); in rtw89_mac_c2h_mrc_status_rpt()
5553 status = le32_get_bits(c2h_rpt->w2, RTW89_C2H_MRC_STATUS_RPT_W2_STATUS); in rtw89_mac_c2h_mrc_status_rpt()
5554 tsf_high = le32_to_cpu(c2h_rpt->tsf_high); in rtw89_mac_c2h_mrc_status_rpt()
5555 tsf_low = le32_to_cpu(c2h_rpt->tsf_low); in rtw89_mac_c2h_mrc_status_rpt()
5559 func = H2C_FUNC_START_MRC; in rtw89_mac_c2h_mrc_status_rpt()
5563 func = H2C_FUNC_DEL_MRC; in rtw89_mac_c2h_mrc_status_rpt()
5567 func = H2C_FUNC_DEL_MRC; in rtw89_mac_c2h_mrc_status_rpt()
5599 "MRC C2H STS RPT: switch ch fail\n"); in rtw89_mac_c2h_mrc_status_rpt()
5603 "MRC C2H STS RPT: tx null-0 fail\n"); in rtw89_mac_c2h_mrc_status_rpt()
5607 "MRC C2H STS RPT: port func en fail\n"); in rtw89_mac_c2h_mrc_status_rpt()
5627 cond = RTW89_MRC_WAIT_COND(sch_idx, func); in rtw89_mac_c2h_mrc_status_rpt()
5641 c2h = (const struct rtw89_c2h_pwr_int_notify *)skb->data; in rtw89_mac_c2h_pwr_int_notify()
5642 macid = le32_get_bits(c2h->w2, RTW89_C2H_PWR_INT_NOTIFY_W2_MACID); in rtw89_mac_c2h_pwr_int_notify()
5643 ps = le32_get_bits(c2h->w2, RTW89_C2H_PWR_INT_NOTIFY_W2_PWR_STATUS); in rtw89_mac_c2h_pwr_int_notify()
5651 rtwsta = rtwsta_link->rtwsta; in rtw89_mac_c2h_pwr_int_notify()
5653 set_bit(RTW89_REMOTE_STA_IN_PS, rtwsta->flags); in rtw89_mac_c2h_pwr_int_notify()
5655 clear_bit(RTW89_REMOTE_STA_IN_PS, rtwsta->flags); in rtw89_mac_c2h_pwr_int_notify()
5731 (const struct rtw89_c2h_scanofld *)skb->data; in rtw89_mac_c2h_scanofld_rsp_atomic()
5732 struct rtw89_wait_info *fw_ofld_wait = &rtwdev->mac.fw_ofld_wait; in rtw89_mac_c2h_scanofld_rsp_atomic()
5733 struct rtw89_hw_scan_info *scan_info = &rtwdev->scan_info; in rtw89_mac_c2h_scanofld_rsp_atomic()
5739 attr->is_scan_event = 1; in rtw89_mac_c2h_scanofld_rsp_atomic()
5740 attr->scan_seq = scan_info->seq; in rtw89_mac_c2h_scanofld_rsp_atomic()
5742 status = le32_get_bits(c2h->w2, RTW89_C2H_SCANOFLD_W2_STATUS); in rtw89_mac_c2h_scanofld_rsp_atomic()
5743 reason = le32_get_bits(c2h->w2, RTW89_C2H_SCANOFLD_W2_RSN); in rtw89_mac_c2h_scanofld_rsp_atomic()
5747 if (rtwdev->chip->chip_gen == RTW89_CHIP_BE) in rtw89_mac_c2h_scanofld_rsp_atomic()
5757 u8 class, u8 func) in rtw89_mac_c2h_chk_atomic() argument
5763 switch (func) { in rtw89_mac_c2h_chk_atomic()
5771 switch (func) { in rtw89_mac_c2h_chk_atomic()
5789 switch (func) { in rtw89_mac_c2h_chk_atomic()
5799 u32 len, u8 class, u8 func) in rtw89_mac_c2h_handle() argument
5806 if (func < RTW89_MAC_C2H_FUNC_INFO_MAX) in rtw89_mac_c2h_handle()
5807 handler = rtw89_mac_c2h_info_handler[func]; in rtw89_mac_c2h_handle()
5810 if (func < RTW89_MAC_C2H_FUNC_OFLD_MAX) in rtw89_mac_c2h_handle()
5811 handler = rtw89_mac_c2h_ofld_handler[func]; in rtw89_mac_c2h_handle()
5814 if (func < NUM_OF_RTW89_MAC_C2H_FUNC_MCC) in rtw89_mac_c2h_handle()
5815 handler = rtw89_mac_c2h_mcc_handler[func]; in rtw89_mac_c2h_handle()
5818 if (func < NUM_OF_RTW89_MAC_C2H_FUNC_MLO) in rtw89_mac_c2h_handle()
5819 handler = rtw89_mac_c2h_mlo_handler[func]; in rtw89_mac_c2h_handle()
5822 if (func < NUM_OF_RTW89_MAC_C2H_FUNC_MRC) in rtw89_mac_c2h_handle()
5823 handler = rtw89_mac_c2h_mrc_handler[func]; in rtw89_mac_c2h_handle()
5826 if (func < NUM_OF_RTW89_MAC_C2H_FUNC_WOW) in rtw89_mac_c2h_handle()
5827 handler = rtw89_mac_c2h_wow_handler[func]; in rtw89_mac_c2h_handle()
5830 if (func < NUM_OF_RTW89_MAC_C2H_FUNC_AP) in rtw89_mac_c2h_handle()
5831 handler = rtw89_mac_c2h_ap_handler[func]; in rtw89_mac_c2h_handle()
5841 rtw89_info(rtwdev, "MAC c2h class %d func %d not support\n", class, in rtw89_mac_c2h_handle()
5842 func); in rtw89_mac_c2h_handle()
5853 enum rtw89_qta_mode mode = rtwdev->mac.qta_mode; in rtw89_mac_get_txpwr_cr_ax()
5914 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in __rtw89_mac_update_rts_threshold()
5915 struct ieee80211_hw *hw = rtwdev->hw; in __rtw89_mac_update_rts_threshold()
5916 u32 rts_threshold = hw->wiphy->rts_threshold; in __rtw89_mac_update_rts_threshold()
5920 if (rts_threshold == (u32)-1) { in __rtw89_mac_update_rts_threshold()
5931 reg = rtw89_mac_reg_by_idx(rtwdev, mac->agg_len_ht, mac_idx); in __rtw89_mac_update_rts_threshold()
5939 if (rtwdev->dbcc_en) in rtw89_mac_update_rts_threshold()
5948 if (!test_bit(RTW89_FLAG_POWERON, rtwdev->flags)) in rtw89_mac_flush_txq()
5953 if (ret && !drop && (rtwdev->total_sta_assoc || rtwdev->scanning)) in rtw89_mac_flush_txq()
5959 enum rtw89_core_chip_id chip_id = rtwdev->chip->chip_id; in rtw89_mac_coex_init()
5980 if (!test_bit(RTW89_FLAG_UNPLUGGED, rtwdev->flags)) in rtw89_mac_coex_init()
5987 if (!test_bit(RTW89_FLAG_UNPLUGGED, rtwdev->flags)) in rtw89_mac_coex_init()
5992 switch (coex->pta_mode) { in rtw89_mac_coex_init()
6026 return -EINVAL; in rtw89_mac_coex_init()
6029 switch (coex->direction) { in rtw89_mac_coex_init()
6046 return -EINVAL; in rtw89_mac_coex_init()
6062 switch (coex->pta_mode) { in rtw89_mac_coex_init_v1()
6074 return -EINVAL; in rtw89_mac_coex_init_v1()
6086 if (gnt_cfg->band[0].gnt_bt) in rtw89_mac_cfg_gnt()
6089 if (gnt_cfg->band[0].gnt_bt_sw_en) in rtw89_mac_cfg_gnt()
6092 if (gnt_cfg->band[0].gnt_wl) in rtw89_mac_cfg_gnt()
6095 if (gnt_cfg->band[0].gnt_wl_sw_en) in rtw89_mac_cfg_gnt()
6098 if (gnt_cfg->band[1].gnt_bt) in rtw89_mac_cfg_gnt()
6101 if (gnt_cfg->band[1].gnt_bt_sw_en) in rtw89_mac_cfg_gnt()
6104 if (gnt_cfg->band[1].gnt_wl) in rtw89_mac_cfg_gnt()
6107 if (gnt_cfg->band[1].gnt_wl_sw_en) in rtw89_mac_cfg_gnt()
6112 if (!test_bit(RTW89_FLAG_UNPLUGGED, rtwdev->flags)) in rtw89_mac_cfg_gnt()
6126 if (gnt_cfg->band[0].gnt_bt) in rtw89_mac_cfg_gnt_v1()
6132 if (gnt_cfg->band[0].gnt_bt_sw_en) in rtw89_mac_cfg_gnt_v1()
6136 if (gnt_cfg->band[0].gnt_wl) in rtw89_mac_cfg_gnt_v1()
6140 if (gnt_cfg->band[0].gnt_wl_sw_en) in rtw89_mac_cfg_gnt_v1()
6144 if (gnt_cfg->band[1].gnt_bt) in rtw89_mac_cfg_gnt_v1()
6150 if (gnt_cfg->band[1].gnt_bt_sw_en) in rtw89_mac_cfg_gnt_v1()
6154 if (gnt_cfg->band[1].gnt_wl) in rtw89_mac_cfg_gnt_v1()
6158 if (gnt_cfg->band[1].gnt_wl_sw_en) in rtw89_mac_cfg_gnt_v1()
6175 ret = rtw89_mac_check_mac_en(rtwdev, plt->band, RTW89_CMAC_SEL); in rtw89_mac_cfg_plt_ax()
6179 reg = rtw89_mac_reg_by_idx(rtwdev, R_AX_BT_PLT, plt->band); in rtw89_mac_cfg_plt_ax()
6180 val = (plt->tx & RTW89_MAC_AX_PLT_LTE_RX ? B_AX_TX_PLT_GNT_LTE_RX : 0) | in rtw89_mac_cfg_plt_ax()
6181 (plt->tx & RTW89_MAC_AX_PLT_GNT_BT_TX ? B_AX_TX_PLT_GNT_BT_TX : 0) | in rtw89_mac_cfg_plt_ax()
6182 (plt->tx & RTW89_MAC_AX_PLT_GNT_BT_RX ? B_AX_TX_PLT_GNT_BT_RX : 0) | in rtw89_mac_cfg_plt_ax()
6183 (plt->tx & RTW89_MAC_AX_PLT_GNT_WL ? B_AX_TX_PLT_GNT_WL : 0) | in rtw89_mac_cfg_plt_ax()
6184 (plt->rx & RTW89_MAC_AX_PLT_LTE_RX ? B_AX_RX_PLT_GNT_LTE_RX : 0) | in rtw89_mac_cfg_plt_ax()
6185 (plt->rx & RTW89_MAC_AX_PLT_GNT_BT_TX ? B_AX_RX_PLT_GNT_BT_TX : 0) | in rtw89_mac_cfg_plt_ax()
6186 (plt->rx & RTW89_MAC_AX_PLT_GNT_BT_RX ? B_AX_RX_PLT_GNT_BT_RX : 0) | in rtw89_mac_cfg_plt_ax()
6187 (plt->rx & RTW89_MAC_AX_PLT_GNT_WL ? B_AX_RX_PLT_GNT_WL : 0) | in rtw89_mac_cfg_plt_ax()
6201 if (!test_bit(RTW89_FLAG_POWERON, rtwdev->flags)) in rtw89_mac_cfg_sb()
6231 struct rtw89_btc *btc = &rtwdev->btc; in rtw89_mac_cfg_ctrl_path_v1()
6232 struct rtw89_btc_dm *dm = &btc->dm; in rtw89_mac_cfg_ctrl_path_v1()
6233 struct rtw89_mac_ax_gnt *g = dm->gnt.band; in rtw89_mac_cfg_ctrl_path_v1()
6246 return rtw89_mac_cfg_gnt_v1(rtwdev, &dm->gnt); in rtw89_mac_cfg_ctrl_path_v1()
6252 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_mac_get_ctrl_path()
6255 if (chip->chip_id == RTL8852C || chip->chip_id == RTL8922A) in rtw89_mac_get_ctrl_path()
6257 else if (chip->chip_id == RTL8852A || rtw89_is_rtl885xb(rtwdev)) in rtw89_mac_get_ctrl_path()
6281 if (rtwdev->chip->chip_gen != RTW89_CHIP_AX) in rtw89_mac_bfee_standby_timer()
6287 set_bit(RTW89_FLAG_BFEE_TIMER_KEEP, rtwdev->flags); in rtw89_mac_bfee_standby_timer()
6291 clear_bit(RTW89_FLAG_BFEE_TIMER_KEEP, rtwdev->flags); in rtw89_mac_bfee_standby_timer()
6299 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_bfee_ctrl()
6301 u32 mask = mac->bfee_ctrl.mask; in rtw89_mac_bfee_ctrl()
6304 reg = rtw89_mac_reg_by_idx(rtwdev, mac->bfee_ctrl.addr, mac_idx); in rtw89_mac_bfee_ctrl()
6306 set_bit(RTW89_FLAG_BFEE_EN, rtwdev->flags); in rtw89_mac_bfee_ctrl()
6309 clear_bit(RTW89_FLAG_BFEE_EN, rtwdev->flags); in rtw89_mac_bfee_ctrl()
6362 u8 mac_idx = rtwvif_link->mac_idx; in rtw89_mac_set_csi_para_reg_ax()
6363 u8 port_sel = rtwvif_link->port; in rtw89_mac_set_csi_para_reg_ax()
6377 phy_cap = link_sta->he_cap.he_cap_elem.phy_cap_info; in rtw89_mac_set_csi_para_reg_ax()
6387 if ((link_sta->vht_cap.cap & IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE) || in rtw89_mac_set_csi_para_reg_ax()
6388 (link_sta->vht_cap.cap & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE)) { in rtw89_mac_set_csi_para_reg_ax()
6389 ldpc_en &= !!(link_sta->vht_cap.cap & IEEE80211_VHT_CAP_RXLDPC); in rtw89_mac_set_csi_para_reg_ax()
6390 stbc_en &= !!(link_sta->vht_cap.cap & IEEE80211_VHT_CAP_RXSTBC_MASK); in rtw89_mac_set_csi_para_reg_ax()
6392 link_sta->vht_cap.cap); in rtw89_mac_set_csi_para_reg_ax()
6427 u8 mac_idx = rtwvif_link->mac_idx; in rtw89_mac_csi_rrsc_ax()
6439 if (link_sta->he_cap.has_he) { in rtw89_mac_csi_rrsc_ax()
6444 if (link_sta->vht_cap.vht_supported) { in rtw89_mac_csi_rrsc_ax()
6449 if (link_sta->ht_cap.ht_supported) { in rtw89_mac_csi_rrsc_ax()
6484 rtw89_mac_init_bfee_ax(rtwdev, rtwvif_link->mac_idx); in rtw89_mac_bf_assoc_ax()
6494 rtw89_mac_bfee_ctrl(rtwdev, rtwvif_link->mac_idx, false); in rtw89_mac_bf_disassoc()
6505 rtwvif_link = rtwvif->links[conf->link_id]; in rtw89_mac_bf_set_gid_table()
6509 __func__, conf->link_id); in rtw89_mac_bf_set_gid_table()
6513 mac_idx = rtwvif_link->mac_idx; in rtw89_mac_bf_set_gid_table()
6517 p = (__le32 *)conf->mu_group.membership; in rtw89_mac_bf_set_gid_table()
6525 p = (__le32 *)conf->mu_group.position; in rtw89_mac_bf_set_gid_table()
6547 struct rtw89_sta_link *down_rtwsta_link = iter_data->down_rtwsta_link; in rtw89_mac_bf_monitor_calc_iter()
6552 int *count = &iter_data->count; in rtw89_mac_bf_monitor_calc_iter()
6583 ieee80211_iterate_stations_atomic(rtwdev->hw, in rtw89_mac_bf_monitor_calc()
6589 set_bit(RTW89_FLAG_BFEE_MON, rtwdev->flags); in rtw89_mac_bf_monitor_calc()
6591 clear_bit(RTW89_FLAG_BFEE_MON, rtwdev->flags); in rtw89_mac_bf_monitor_calc()
6596 struct rtw89_traffic_stats *stats = &rtwdev->stats; in _rtw89_mac_bf_monitor_track()
6598 bool en = stats->tx_tfc_lv <= stats->rx_tfc_lv; in _rtw89_mac_bf_monitor_track()
6599 bool old = test_bit(RTW89_FLAG_BFEE_EN, rtwdev->flags); in _rtw89_mac_bf_monitor_track()
6605 old_keep_timer = test_bit(RTW89_FLAG_BFEE_TIMER_KEEP, rtwdev->flags); in _rtw89_mac_bf_monitor_track()
6607 if (stats->tx_tfc_lv <= RTW89_TFC_LOW && stats->rx_tfc_lv <= RTW89_TFC_LOW) in _rtw89_mac_bf_monitor_track()
6613 rtw89_mac_bfee_standby_timer(rtwdev, rtwvif_link->mac_idx, in _rtw89_mac_bf_monitor_track()
6622 rtw89_mac_bfee_ctrl(rtwdev, rtwvif_link->mac_idx, en); in _rtw89_mac_bf_monitor_track()
6630 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in __rtw89_mac_set_tx_time()
6631 u8 mac_idx = rtwsta_link->rtwvif_link->mac_idx; in __rtw89_mac_set_tx_time()
6636 if (rtwsta_link->cctl_tx_time) { in __rtw89_mac_set_tx_time()
6637 rtwsta_link->ampdu_max_time = (max_tx_time - 512) >> 9; in __rtw89_mac_set_tx_time()
6646 reg = rtw89_mac_reg_by_idx(rtwdev, mac->agg_limit.addr, mac_idx); in __rtw89_mac_set_tx_time()
6647 rtw89_write32_mask(rtwdev, reg, mac->agg_limit.mask, in __rtw89_mac_set_tx_time()
6660 rtwsta_link->cctl_tx_time = true; in rtw89_mac_set_tx_time()
6664 rtwsta_link->cctl_tx_time = false; in rtw89_mac_set_tx_time()
6673 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_get_tx_time()
6674 u8 mac_idx = rtwsta_link->rtwvif_link->mac_idx; in rtw89_mac_get_tx_time()
6678 if (rtwsta_link->cctl_tx_time) { in rtw89_mac_get_tx_time()
6679 *tx_time = (rtwsta_link->ampdu_max_time + 1) << 9; in rtw89_mac_get_tx_time()
6687 reg = rtw89_mac_reg_by_idx(rtwdev, mac->agg_limit.addr, mac_idx); in rtw89_mac_get_tx_time()
6688 *tx_time = rtw89_read32_mask(rtwdev, reg, mac->agg_limit.mask) << 5; in rtw89_mac_get_tx_time()
6700 rtwsta_link->data_tx_cnt_lmt = tx_retry; in rtw89_mac_set_tx_retry_limit()
6703 rtwsta_link->cctl_tx_retry_limit = true; in rtw89_mac_set_tx_retry_limit()
6707 rtwsta_link->cctl_tx_retry_limit = false; in rtw89_mac_set_tx_retry_limit()
6716 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_get_tx_retry_limit()
6717 u8 mac_idx = rtwsta_link->rtwvif_link->mac_idx; in rtw89_mac_get_tx_retry_limit()
6721 if (rtwsta_link->cctl_tx_retry_limit) { in rtw89_mac_get_tx_retry_limit()
6722 *tx_retry = rtwsta_link->data_tx_cnt_lmt; in rtw89_mac_get_tx_retry_limit()
6730 reg = rtw89_mac_reg_by_idx(rtwdev, mac->txcnt_limit.addr, mac_idx); in rtw89_mac_get_tx_retry_limit()
6731 *tx_retry = rtw89_read32_mask(rtwdev, reg, mac->txcnt_limit.mask); in rtw89_mac_get_tx_retry_limit()
6740 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_set_hw_muedca_ctrl()
6741 u8 mac_idx = rtwvif_link->mac_idx; in rtw89_mac_set_hw_muedca_ctrl()
6742 u16 set = mac->muedca_ctrl.mask; in rtw89_mac_set_hw_muedca_ctrl()
6750 reg = rtw89_mac_reg_by_idx(rtwdev, mac->muedca_ctrl.addr, mac_idx); in rtw89_mac_set_hw_muedca_ctrl()
6822 params.mac_band = rtwvif_link->mac_idx; in rtw89_mac_pkt_drop_sta()
6823 params.macid = rtwsta_link->mac_id; in rtw89_mac_pkt_drop_sta()
6824 params.port = rtwvif_link->port; in rtw89_mac_pkt_drop_sta()
6826 params.tf_trs = rtwvif_link->trigger; in rtw89_mac_pkt_drop_sta()
6837 struct rtw89_vif *rtwvif = rtwsta->rtwvif; in rtw89_mac_pkt_drop_vif_iter()
6838 struct rtw89_dev *rtwdev = rtwsta->rtwdev; in rtw89_mac_pkt_drop_vif_iter()
6848 rtwvif_link = rtwsta_link->rtwvif_link; in rtw89_mac_pkt_drop_vif_iter()
6855 ieee80211_iterate_stations_atomic(rtwdev->hw, in rtw89_mac_pkt_drop_vif()
6863 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_mac_ptk_drop_by_band_and_wait()
6872 ret = read_poll_timeout(mac->is_txq_empty, empty, empty, 50, in rtw89_mac_ptk_drop_by_band_and_wait()
6874 if (ret && !RTW89_CHK_FW_FEATURE(NO_PACKET_DROP, &rtwdev->fw)) in rtw89_mac_ptk_drop_by_band_and_wait()
6888 if (RTW89_CHK_FW_FEATURE(NO_WOW_CPU_IO_RX, &rtwdev->fw)) in rtw89_mac_cpu_io_rx()
6900 ret = -EINVAL; in rtw89_mac_cpu_io_rx()
6907 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def; in rtw89_wow_config_mac_ax()
6908 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_wow_config_mac_ax()
6920 rtw89_write32_clr(rtwdev, mac->rx_fltr, B_AX_SNIFFER_MODE); in rtw89_wow_config_mac_ax()
6927 if (RTW89_CHK_FW_FEATURE(NO_WOW_CPU_IO_RX, &rtwdev->fw)) in rtw89_wow_config_mac_ax()
6930 if (chip->chip_id == RTL8852A || rtw89_is_rtl885xb(rtwdev)) in rtw89_wow_config_mac_ax()
6967 if (rtwdev->hci.type == RTW89_HCI_TYPE_USB) in rtw89_fwdl_check_path_ready_ax()
6980 struct rtw89_fw_secure *sec = &rtwdev->fw.sec; in rtw89_fwdl_secure_idmem_share_mode_ax()
6982 if (!sec->secure_boot) in rtw89_fwdl_secure_idmem_share_mode_ax()