Lines Matching refs:ar

110 void ath10k_info(struct ath10k *ar, const char *fmt, ...)  in ath10k_info()  argument
119 dev_info(ar->dev, "%pV", &vaf); in ath10k_info()
120 trace_ath10k_log_info(ar, &vaf); in ath10k_info()
125 void ath10k_print_driver_info(struct ath10k *ar) in ath10k_print_driver_info() argument
127 ath10k_info(ar, "%s (0x%08x, 0x%08x) fw %s api %d htt %d.%d wmi %d cal %s max_sta %d\n", in ath10k_print_driver_info()
128 ar->hw_params.name, in ath10k_print_driver_info()
129 ar->target_version, in ath10k_print_driver_info()
130 ar->chip_id, in ath10k_print_driver_info()
131 ar->hw->wiphy->fw_version, in ath10k_print_driver_info()
132 ar->fw_api, in ath10k_print_driver_info()
133 ar->htt.target_version_major, in ath10k_print_driver_info()
134 ar->htt.target_version_minor, in ath10k_print_driver_info()
135 ar->wmi.op_version, in ath10k_print_driver_info()
136 ath10k_cal_mode_str(ar->cal_mode), in ath10k_print_driver_info()
137 ar->max_num_stations); in ath10k_print_driver_info()
138 ath10k_info(ar, "debug %d debugfs %d tracing %d dfs %d testmode %d\n", in ath10k_print_driver_info()
147 void ath10k_err(struct ath10k *ar, const char *fmt, ...) in ath10k_err() argument
156 dev_err(ar->dev, "%pV", &vaf); in ath10k_err()
157 trace_ath10k_log_err(ar, &vaf); in ath10k_err()
162 void ath10k_warn(struct ath10k *ar, const char *fmt, ...) in ath10k_warn() argument
171 dev_warn_ratelimited(ar->dev, "%pV", &vaf); in ath10k_warn()
172 trace_ath10k_log_warn(ar, &vaf); in ath10k_warn()
184 struct ath10k *ar = file->private_data; in ath10k_read_wmi_services() local
196 mutex_lock(&ar->conf_mutex); in ath10k_read_wmi_services()
201 spin_lock_bh(&ar->data_lock); in ath10k_read_wmi_services()
203 enabled = test_bit(i, ar->wmi.svc_map); in ath10k_read_wmi_services()
219 spin_unlock_bh(&ar->data_lock); in ath10k_read_wmi_services()
223 mutex_unlock(&ar->conf_mutex); in ath10k_read_wmi_services()
266 static void ath10k_debug_fw_stats_reset(struct ath10k *ar) in ath10k_debug_fw_stats_reset() argument
268 spin_lock_bh(&ar->data_lock); in ath10k_debug_fw_stats_reset()
269 ar->debug.fw_stats_done = false; in ath10k_debug_fw_stats_reset()
270 ath10k_debug_fw_stats_pdevs_free(&ar->debug.fw_stats.pdevs); in ath10k_debug_fw_stats_reset()
271 ath10k_debug_fw_stats_vdevs_free(&ar->debug.fw_stats.vdevs); in ath10k_debug_fw_stats_reset()
272 ath10k_debug_fw_stats_peers_free(&ar->debug.fw_stats.peers); in ath10k_debug_fw_stats_reset()
273 spin_unlock_bh(&ar->data_lock); in ath10k_debug_fw_stats_reset()
298 void ath10k_debug_fw_stats_process(struct ath10k *ar, struct sk_buff *skb) in ath10k_debug_fw_stats_process() argument
310 spin_lock_bh(&ar->data_lock); in ath10k_debug_fw_stats_process()
311 ret = ath10k_wmi_pull_fw_stats(ar, skb, &stats); in ath10k_debug_fw_stats_process()
313 ath10k_warn(ar, "failed to pull fw stats: %d\n", ret); in ath10k_debug_fw_stats_process()
329 if (ar->debug.fw_stats_done) { in ath10k_debug_fw_stats_process()
330 ath10k_warn(ar, "received unsolicited stats update event\n"); in ath10k_debug_fw_stats_process()
334 num_peers = ath10k_debug_fw_stats_num_peers(&ar->debug.fw_stats.peers); in ath10k_debug_fw_stats_process()
335 num_vdevs = ath10k_debug_fw_stats_num_vdevs(&ar->debug.fw_stats.vdevs); in ath10k_debug_fw_stats_process()
336 is_start = (list_empty(&ar->debug.fw_stats.pdevs) && in ath10k_debug_fw_stats_process()
338 is_end = (!list_empty(&ar->debug.fw_stats.pdevs) && in ath10k_debug_fw_stats_process()
342 list_splice_tail_init(&stats.pdevs, &ar->debug.fw_stats.pdevs); in ath10k_debug_fw_stats_process()
345 ar->debug.fw_stats_done = true; in ath10k_debug_fw_stats_process()
347 is_started = !list_empty(&ar->debug.fw_stats.pdevs); in ath10k_debug_fw_stats_process()
354 ath10k_warn(ar, "dropping fw peer stats\n"); in ath10k_debug_fw_stats_process()
359 ath10k_warn(ar, "dropping fw vdev stats\n"); in ath10k_debug_fw_stats_process()
363 list_splice_tail_init(&stats.peers, &ar->debug.fw_stats.peers); in ath10k_debug_fw_stats_process()
364 list_splice_tail_init(&stats.vdevs, &ar->debug.fw_stats.vdevs); in ath10k_debug_fw_stats_process()
367 complete(&ar->debug.fw_stats_complete); in ath10k_debug_fw_stats_process()
378 spin_unlock_bh(&ar->data_lock); in ath10k_debug_fw_stats_process()
381 static int ath10k_debug_fw_stats_request(struct ath10k *ar) in ath10k_debug_fw_stats_request() argument
386 lockdep_assert_held(&ar->conf_mutex); in ath10k_debug_fw_stats_request()
390 ath10k_debug_fw_stats_reset(ar); in ath10k_debug_fw_stats_request()
396 reinit_completion(&ar->debug.fw_stats_complete); in ath10k_debug_fw_stats_request()
398 ret = ath10k_wmi_request_stats(ar, in ath10k_debug_fw_stats_request()
403 ath10k_warn(ar, "could not request stats (%d)\n", ret); in ath10k_debug_fw_stats_request()
407 ret = wait_for_completion_timeout(&ar->debug.fw_stats_complete, in ath10k_debug_fw_stats_request()
412 spin_lock_bh(&ar->data_lock); in ath10k_debug_fw_stats_request()
413 if (ar->debug.fw_stats_done) { in ath10k_debug_fw_stats_request()
414 spin_unlock_bh(&ar->data_lock); in ath10k_debug_fw_stats_request()
417 spin_unlock_bh(&ar->data_lock); in ath10k_debug_fw_stats_request()
426 static void ath10k_fw_stats_fill(struct ath10k *ar, in ath10k_fw_stats_fill() argument
439 spin_lock_bh(&ar->data_lock); in ath10k_fw_stats_fill()
444 ath10k_warn(ar, "failed to get pdev stats\n"); in ath10k_fw_stats_fill()
649 spin_unlock_bh(&ar->data_lock); in ath10k_fw_stats_fill()
659 struct ath10k *ar = inode->i_private; in ath10k_fw_stats_open() local
663 mutex_lock(&ar->conf_mutex); in ath10k_fw_stats_open()
665 if (ar->state != ATH10K_STATE_ON) { in ath10k_fw_stats_open()
676 ret = ath10k_debug_fw_stats_request(ar); in ath10k_fw_stats_open()
678 ath10k_warn(ar, "failed to request fw stats: %d\n", ret); in ath10k_fw_stats_open()
682 ath10k_fw_stats_fill(ar, &ar->debug.fw_stats, buf); in ath10k_fw_stats_open()
685 mutex_unlock(&ar->conf_mutex); in ath10k_fw_stats_open()
692 mutex_unlock(&ar->conf_mutex); in ath10k_fw_stats_open()
724 struct ath10k *ar = file->private_data; in ath10k_debug_fw_reset_stats_read() local
733 spin_lock_bh(&ar->data_lock); in ath10k_debug_fw_reset_stats_read()
737 "fw_crash_counter\t\t%d\n", ar->stats.fw_crash_counter); in ath10k_debug_fw_reset_stats_read()
740 ar->stats.fw_warm_reset_counter); in ath10k_debug_fw_reset_stats_read()
743 ar->stats.fw_cold_reset_counter); in ath10k_debug_fw_reset_stats_read()
745 spin_unlock_bh(&ar->data_lock); in ath10k_debug_fw_reset_stats_read()
762 static int ath10k_debug_fw_assert(struct ath10k *ar) in ath10k_debug_fw_assert() argument
767 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd) + 16); in ath10k_debug_fw_assert()
777 return ath10k_wmi_cmd_send(ar, skb, in ath10k_debug_fw_assert()
778 ar->wmi.cmd->vdev_install_key_cmdid); in ath10k_debug_fw_assert()
806 struct ath10k *ar = file->private_data; in ath10k_write_simulate_fw_crash() local
810 mutex_lock(&ar->conf_mutex); in ath10k_write_simulate_fw_crash()
817 if (ar->state != ATH10K_STATE_ON && in ath10k_write_simulate_fw_crash()
818 ar->state != ATH10K_STATE_RESTARTED) { in ath10k_write_simulate_fw_crash()
830 ath10k_info(ar, "simulating soft firmware crash\n"); in ath10k_write_simulate_fw_crash()
831 ret = ath10k_wmi_force_fw_hang(ar, WMI_FORCE_FW_HANG_ASSERT, 0); in ath10k_write_simulate_fw_crash()
833 ath10k_info(ar, "simulating hard firmware crash\n"); in ath10k_write_simulate_fw_crash()
837 ret = ath10k_wmi_vdev_set_param(ar, 0x7fff, in ath10k_write_simulate_fw_crash()
838 ar->wmi.vdev_param->rts_threshold, in ath10k_write_simulate_fw_crash()
841 ath10k_info(ar, "simulating firmware assert crash\n"); in ath10k_write_simulate_fw_crash()
842 ret = ath10k_debug_fw_assert(ar); in ath10k_write_simulate_fw_crash()
844 ath10k_info(ar, "user requested hw restart\n"); in ath10k_write_simulate_fw_crash()
845 queue_work(ar->workqueue, &ar->restart_work); in ath10k_write_simulate_fw_crash()
853 ath10k_warn(ar, "failed to simulate firmware crash: %d\n", ret); in ath10k_write_simulate_fw_crash()
860 mutex_unlock(&ar->conf_mutex); in ath10k_write_simulate_fw_crash()
875 struct ath10k *ar = file->private_data; in ath10k_read_chip_id() local
879 len = scnprintf(buf, sizeof(buf), "0x%08x\n", ar->chip_id); in ath10k_read_chip_id()
892 ath10k_debug_get_new_fw_crash_data(struct ath10k *ar) in ath10k_debug_get_new_fw_crash_data() argument
894 struct ath10k_fw_crash_data *crash_data = ar->debug.fw_crash_data; in ath10k_debug_get_new_fw_crash_data()
896 lockdep_assert_held(&ar->data_lock); in ath10k_debug_get_new_fw_crash_data()
906 static struct ath10k_dump_file_data *ath10k_build_dump_file(struct ath10k *ar) in ath10k_build_dump_file() argument
908 struct ath10k_fw_crash_data *crash_data = ar->debug.fw_crash_data; in ath10k_build_dump_file()
927 spin_lock_bh(&ar->data_lock); in ath10k_build_dump_file()
930 spin_unlock_bh(&ar->data_lock); in ath10k_build_dump_file()
943 dump_data->chip_id = cpu_to_le32(ar->chip_id); in ath10k_build_dump_file()
945 dump_data->target_version = cpu_to_le32(ar->target_version); in ath10k_build_dump_file()
946 dump_data->fw_version_major = cpu_to_le32(ar->fw_version_major); in ath10k_build_dump_file()
947 dump_data->fw_version_minor = cpu_to_le32(ar->fw_version_minor); in ath10k_build_dump_file()
948 dump_data->fw_version_release = cpu_to_le32(ar->fw_version_release); in ath10k_build_dump_file()
949 dump_data->fw_version_build = cpu_to_le32(ar->fw_version_build); in ath10k_build_dump_file()
950 dump_data->phy_capability = cpu_to_le32(ar->phy_capability); in ath10k_build_dump_file()
951 dump_data->hw_min_tx_power = cpu_to_le32(ar->hw_min_tx_power); in ath10k_build_dump_file()
952 dump_data->hw_max_tx_power = cpu_to_le32(ar->hw_max_tx_power); in ath10k_build_dump_file()
953 dump_data->ht_cap_info = cpu_to_le32(ar->ht_cap_info); in ath10k_build_dump_file()
954 dump_data->vht_cap_info = cpu_to_le32(ar->vht_cap_info); in ath10k_build_dump_file()
955 dump_data->num_rf_chains = cpu_to_le32(ar->num_rf_chains); in ath10k_build_dump_file()
957 strlcpy(dump_data->fw_ver, ar->hw->wiphy->fw_version, in ath10k_build_dump_file()
975 ar->debug.fw_crash_data->crashed_since_read = false; in ath10k_build_dump_file()
977 spin_unlock_bh(&ar->data_lock); in ath10k_build_dump_file()
984 struct ath10k *ar = inode->i_private; in ath10k_fw_crash_dump_open() local
987 dump = ath10k_build_dump_file(ar); in ath10k_fw_crash_dump_open()
1027 struct ath10k *ar = file->private_data; in ath10k_reg_addr_read() local
1032 mutex_lock(&ar->conf_mutex); in ath10k_reg_addr_read()
1033 reg_addr = ar->debug.reg_addr; in ath10k_reg_addr_read()
1034 mutex_unlock(&ar->conf_mutex); in ath10k_reg_addr_read()
1045 struct ath10k *ar = file->private_data; in ath10k_reg_addr_write() local
1056 mutex_lock(&ar->conf_mutex); in ath10k_reg_addr_write()
1057 ar->debug.reg_addr = reg_addr; in ath10k_reg_addr_write()
1058 mutex_unlock(&ar->conf_mutex); in ath10k_reg_addr_write()
1075 struct ath10k *ar = file->private_data; in ath10k_reg_value_read() local
1081 mutex_lock(&ar->conf_mutex); in ath10k_reg_value_read()
1083 if (ar->state != ATH10K_STATE_ON && in ath10k_reg_value_read()
1084 ar->state != ATH10K_STATE_UTF) { in ath10k_reg_value_read()
1089 reg_addr = ar->debug.reg_addr; in ath10k_reg_value_read()
1091 reg_val = ath10k_hif_read32(ar, reg_addr); in ath10k_reg_value_read()
1097 mutex_unlock(&ar->conf_mutex); in ath10k_reg_value_read()
1106 struct ath10k *ar = file->private_data; in ath10k_reg_value_write() local
1110 mutex_lock(&ar->conf_mutex); in ath10k_reg_value_write()
1112 if (ar->state != ATH10K_STATE_ON && in ath10k_reg_value_write()
1113 ar->state != ATH10K_STATE_UTF) { in ath10k_reg_value_write()
1118 reg_addr = ar->debug.reg_addr; in ath10k_reg_value_write()
1124 ath10k_hif_write32(ar, reg_addr, reg_val); in ath10k_reg_value_write()
1129 mutex_unlock(&ar->conf_mutex); in ath10k_reg_value_write()
1146 struct ath10k *ar = file->private_data; in ath10k_mem_value_read() local
1156 mutex_lock(&ar->conf_mutex); in ath10k_mem_value_read()
1164 if (ar->state != ATH10K_STATE_ON && in ath10k_mem_value_read()
1165 ar->state != ATH10K_STATE_UTF) { in ath10k_mem_value_read()
1170 ret = ath10k_hif_diag_read(ar, *ppos, buf, count); in ath10k_mem_value_read()
1172 ath10k_warn(ar, "failed to read address 0x%08x via diagnose window fnrom debugfs: %d\n", in ath10k_mem_value_read()
1189 mutex_unlock(&ar->conf_mutex); in ath10k_mem_value_read()
1198 struct ath10k *ar = file->private_data; in ath10k_mem_value_write() local
1208 mutex_lock(&ar->conf_mutex); in ath10k_mem_value_write()
1216 if (ar->state != ATH10K_STATE_ON && in ath10k_mem_value_write()
1217 ar->state != ATH10K_STATE_UTF) { in ath10k_mem_value_write()
1228 ret = ath10k_hif_diag_write(ar, *ppos, buf, count); in ath10k_mem_value_write()
1230 ath10k_warn(ar, "failed to write address 0x%08x via diagnose window from debugfs: %d\n", in ath10k_mem_value_write()
1240 mutex_unlock(&ar->conf_mutex); in ath10k_mem_value_write()
1253 static int ath10k_debug_htt_stats_req(struct ath10k *ar) in ath10k_debug_htt_stats_req() argument
1258 lockdep_assert_held(&ar->conf_mutex); in ath10k_debug_htt_stats_req()
1260 if (ar->debug.htt_stats_mask == 0) in ath10k_debug_htt_stats_req()
1264 if (ar->state != ATH10K_STATE_ON) in ath10k_debug_htt_stats_req()
1269 ret = ath10k_htt_h2t_stats_req(&ar->htt, ar->debug.htt_stats_mask, in ath10k_debug_htt_stats_req()
1272 ath10k_warn(ar, "failed to send htt stats request: %d\n", ret); in ath10k_debug_htt_stats_req()
1276 queue_delayed_work(ar->workqueue, &ar->debug.htt_stats_dwork, in ath10k_debug_htt_stats_req()
1284 struct ath10k *ar = container_of(work, struct ath10k, in ath10k_debug_htt_stats_dwork() local
1287 mutex_lock(&ar->conf_mutex); in ath10k_debug_htt_stats_dwork()
1289 ath10k_debug_htt_stats_req(ar); in ath10k_debug_htt_stats_dwork()
1291 mutex_unlock(&ar->conf_mutex); in ath10k_debug_htt_stats_dwork()
1298 struct ath10k *ar = file->private_data; in ath10k_read_htt_stats_mask() local
1302 len = scnprintf(buf, sizeof(buf), "%lu\n", ar->debug.htt_stats_mask); in ath10k_read_htt_stats_mask()
1311 struct ath10k *ar = file->private_data; in ath10k_write_htt_stats_mask() local
1323 mutex_lock(&ar->conf_mutex); in ath10k_write_htt_stats_mask()
1325 ar->debug.htt_stats_mask = mask; in ath10k_write_htt_stats_mask()
1327 ret = ath10k_debug_htt_stats_req(ar); in ath10k_write_htt_stats_mask()
1334 mutex_unlock(&ar->conf_mutex); in ath10k_write_htt_stats_mask()
1351 struct ath10k *ar = file->private_data; in ath10k_read_htt_max_amsdu_ampdu() local
1356 mutex_lock(&ar->conf_mutex); in ath10k_read_htt_max_amsdu_ampdu()
1358 if (ar->debug.htt_max_amsdu) in ath10k_read_htt_max_amsdu_ampdu()
1359 amsdu = ar->debug.htt_max_amsdu; in ath10k_read_htt_max_amsdu_ampdu()
1361 if (ar->debug.htt_max_ampdu) in ath10k_read_htt_max_amsdu_ampdu()
1362 ampdu = ar->debug.htt_max_ampdu; in ath10k_read_htt_max_amsdu_ampdu()
1364 mutex_unlock(&ar->conf_mutex); in ath10k_read_htt_max_amsdu_ampdu()
1375 struct ath10k *ar = file->private_data; in ath10k_write_htt_max_amsdu_ampdu() local
1390 mutex_lock(&ar->conf_mutex); in ath10k_write_htt_max_amsdu_ampdu()
1392 res = ath10k_htt_h2t_aggr_cfg_msg(&ar->htt, ampdu, amsdu); in ath10k_write_htt_max_amsdu_ampdu()
1397 ar->debug.htt_max_amsdu = amsdu; in ath10k_write_htt_max_amsdu_ampdu()
1398 ar->debug.htt_max_ampdu = ampdu; in ath10k_write_htt_max_amsdu_ampdu()
1401 mutex_unlock(&ar->conf_mutex); in ath10k_write_htt_max_amsdu_ampdu()
1417 struct ath10k *ar = file->private_data; in ath10k_read_fw_dbglog() local
1422 ar->debug.fw_dbglog_mask, ar->debug.fw_dbglog_level); in ath10k_read_fw_dbglog()
1431 struct ath10k *ar = file->private_data; in ath10k_write_fw_dbglog() local
1450 mutex_lock(&ar->conf_mutex); in ath10k_write_fw_dbglog()
1452 ar->debug.fw_dbglog_mask = mask; in ath10k_write_fw_dbglog()
1453 ar->debug.fw_dbglog_level = log_level; in ath10k_write_fw_dbglog()
1455 if (ar->state == ATH10K_STATE_ON) { in ath10k_write_fw_dbglog()
1456 ret = ath10k_wmi_dbglog_cfg(ar, ar->debug.fw_dbglog_mask, in ath10k_write_fw_dbglog()
1457 ar->debug.fw_dbglog_level); in ath10k_write_fw_dbglog()
1459 ath10k_warn(ar, "dbglog cfg failed from debugfs: %d\n", in ath10k_write_fw_dbglog()
1468 mutex_unlock(&ar->conf_mutex); in ath10k_write_fw_dbglog()
1552 struct ath10k *ar = hw->priv; in ath10k_debug_get_et_stats() local
1557 mutex_lock(&ar->conf_mutex); in ath10k_debug_get_et_stats()
1559 if (ar->state == ATH10K_STATE_ON) { in ath10k_debug_get_et_stats()
1560 ret = ath10k_debug_fw_stats_request(ar); in ath10k_debug_get_et_stats()
1563 ath10k_warn(ar, in ath10k_debug_get_et_stats()
1569 pdev_stats = list_first_entry_or_null(&ar->debug.fw_stats.pdevs, in ath10k_debug_get_et_stats()
1577 spin_lock_bh(&ar->data_lock); in ath10k_debug_get_et_stats()
1622 data[i++] = ar->stats.fw_crash_counter; in ath10k_debug_get_et_stats()
1623 data[i++] = ar->stats.fw_warm_reset_counter; in ath10k_debug_get_et_stats()
1624 data[i++] = ar->stats.fw_cold_reset_counter; in ath10k_debug_get_et_stats()
1626 spin_unlock_bh(&ar->data_lock); in ath10k_debug_get_et_stats()
1628 mutex_unlock(&ar->conf_mutex); in ath10k_debug_get_et_stats()
1643 struct ath10k *ar = inode->i_private; in ath10k_debug_cal_data_open() local
1649 mutex_lock(&ar->conf_mutex); in ath10k_debug_cal_data_open()
1651 if (ar->state != ATH10K_STATE_ON && in ath10k_debug_cal_data_open()
1652 ar->state != ATH10K_STATE_UTF) { in ath10k_debug_cal_data_open()
1665 ret = ath10k_hif_diag_read(ar, hi_addr, &addr, sizeof(addr)); in ath10k_debug_cal_data_open()
1667 ath10k_warn(ar, "failed to read hi_board_data address: %d\n", ret); in ath10k_debug_cal_data_open()
1671 ret = ath10k_hif_diag_read(ar, le32_to_cpu(addr), buf, in ath10k_debug_cal_data_open()
1674 ath10k_warn(ar, "failed to read calibration data: %d\n", ret); in ath10k_debug_cal_data_open()
1680 mutex_unlock(&ar->conf_mutex); in ath10k_debug_cal_data_open()
1688 mutex_unlock(&ar->conf_mutex); in ath10k_debug_cal_data_open()
1723 struct ath10k *ar = file->private_data; in ath10k_read_nf_cal_period() local
1728 ar->debug.nf_cal_period); in ath10k_read_nf_cal_period()
1737 struct ath10k *ar = file->private_data; in ath10k_write_nf_cal_period() local
1752 mutex_lock(&ar->conf_mutex); in ath10k_write_nf_cal_period()
1754 ar->debug.nf_cal_period = period; in ath10k_write_nf_cal_period()
1756 if (ar->state != ATH10K_STATE_ON) { in ath10k_write_nf_cal_period()
1762 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->cal_period, in ath10k_write_nf_cal_period()
1763 ar->debug.nf_cal_period); in ath10k_write_nf_cal_period()
1765 ath10k_warn(ar, "cal period cfg failed from debugfs: %d\n", in ath10k_write_nf_cal_period()
1773 mutex_unlock(&ar->conf_mutex); in ath10k_write_nf_cal_period()
1786 int ath10k_debug_start(struct ath10k *ar) in ath10k_debug_start() argument
1790 lockdep_assert_held(&ar->conf_mutex); in ath10k_debug_start()
1792 ret = ath10k_debug_htt_stats_req(ar); in ath10k_debug_start()
1795 ath10k_warn(ar, "failed to start htt stats workqueue: %d\n", in ath10k_debug_start()
1798 if (ar->debug.fw_dbglog_mask) { in ath10k_debug_start()
1799 ret = ath10k_wmi_dbglog_cfg(ar, ar->debug.fw_dbglog_mask, in ath10k_debug_start()
1803 ath10k_warn(ar, "failed to enable dbglog during start: %d", in ath10k_debug_start()
1807 if (ar->debug.pktlog_filter) { in ath10k_debug_start()
1808 ret = ath10k_wmi_pdev_pktlog_enable(ar, in ath10k_debug_start()
1809 ar->debug.pktlog_filter); in ath10k_debug_start()
1812 ath10k_warn(ar, in ath10k_debug_start()
1814 ar->debug.pktlog_filter, ret); in ath10k_debug_start()
1816 ret = ath10k_wmi_pdev_pktlog_disable(ar); in ath10k_debug_start()
1819 ath10k_warn(ar, "failed to disable pktlog: %d\n", ret); in ath10k_debug_start()
1822 if (ar->debug.nf_cal_period) { in ath10k_debug_start()
1823 ret = ath10k_wmi_pdev_set_param(ar, in ath10k_debug_start()
1824 ar->wmi.pdev_param->cal_period, in ath10k_debug_start()
1825 ar->debug.nf_cal_period); in ath10k_debug_start()
1828 ath10k_warn(ar, "cal period cfg failed from debug start: %d\n", in ath10k_debug_start()
1835 void ath10k_debug_stop(struct ath10k *ar) in ath10k_debug_stop() argument
1837 lockdep_assert_held(&ar->conf_mutex); in ath10k_debug_stop()
1842 if (ar->debug.htt_stats_mask != 0) in ath10k_debug_stop()
1843 cancel_delayed_work(&ar->debug.htt_stats_dwork); in ath10k_debug_stop()
1845 ar->debug.htt_max_amsdu = 0; in ath10k_debug_stop()
1846 ar->debug.htt_max_ampdu = 0; in ath10k_debug_stop()
1848 ath10k_wmi_pdev_pktlog_disable(ar); in ath10k_debug_stop()
1855 struct ath10k *ar = file->private_data; in ath10k_write_simulate_radar() local
1857 ieee80211_radar_detected(ar->hw); in ath10k_write_simulate_radar()
1871 ar->debug.dfs_stats.p))
1875 ar->debug.dfs_pool_stats.p))
1882 struct ath10k *ar = file->private_data; in ath10k_read_dfs_stats() local
1889 if (!ar->dfs_detector) { in ath10k_read_dfs_stats()
1894 ar->debug.dfs_pool_stats = in ath10k_read_dfs_stats()
1895 ar->dfs_detector->get_stats(ar->dfs_detector); in ath10k_read_dfs_stats()
1935 struct ath10k *ar = file->private_data; in ath10k_write_pktlog_filter() local
1942 mutex_lock(&ar->conf_mutex); in ath10k_write_pktlog_filter()
1944 if (ar->state != ATH10K_STATE_ON) { in ath10k_write_pktlog_filter()
1945 ar->debug.pktlog_filter = filter; in ath10k_write_pktlog_filter()
1950 if (filter == ar->debug.pktlog_filter) { in ath10k_write_pktlog_filter()
1956 ret = ath10k_wmi_pdev_pktlog_enable(ar, filter); in ath10k_write_pktlog_filter()
1958 ath10k_warn(ar, "failed to enable pktlog filter %x: %d\n", in ath10k_write_pktlog_filter()
1959 ar->debug.pktlog_filter, ret); in ath10k_write_pktlog_filter()
1963 ret = ath10k_wmi_pdev_pktlog_disable(ar); in ath10k_write_pktlog_filter()
1965 ath10k_warn(ar, "failed to disable pktlog: %d\n", ret); in ath10k_write_pktlog_filter()
1970 ar->debug.pktlog_filter = filter; in ath10k_write_pktlog_filter()
1974 mutex_unlock(&ar->conf_mutex); in ath10k_write_pktlog_filter()
1982 struct ath10k *ar = file->private_data; in ath10k_read_pktlog_filter() local
1985 mutex_lock(&ar->conf_mutex); in ath10k_read_pktlog_filter()
1987 ar->debug.pktlog_filter); in ath10k_read_pktlog_filter()
1988 mutex_unlock(&ar->conf_mutex); in ath10k_read_pktlog_filter()
1999 int ath10k_debug_create(struct ath10k *ar) in ath10k_debug_create() argument
2001 ar->debug.fw_crash_data = vzalloc(sizeof(*ar->debug.fw_crash_data)); in ath10k_debug_create()
2002 if (!ar->debug.fw_crash_data) in ath10k_debug_create()
2005 INIT_LIST_HEAD(&ar->debug.fw_stats.pdevs); in ath10k_debug_create()
2006 INIT_LIST_HEAD(&ar->debug.fw_stats.vdevs); in ath10k_debug_create()
2007 INIT_LIST_HEAD(&ar->debug.fw_stats.peers); in ath10k_debug_create()
2012 void ath10k_debug_destroy(struct ath10k *ar) in ath10k_debug_destroy() argument
2014 vfree(ar->debug.fw_crash_data); in ath10k_debug_destroy()
2015 ar->debug.fw_crash_data = NULL; in ath10k_debug_destroy()
2017 ath10k_debug_fw_stats_reset(ar); in ath10k_debug_destroy()
2020 int ath10k_debug_register(struct ath10k *ar) in ath10k_debug_register() argument
2022 ar->debug.debugfs_phy = debugfs_create_dir("ath10k", in ath10k_debug_register()
2023 ar->hw->wiphy->debugfsdir); in ath10k_debug_register()
2024 if (IS_ERR_OR_NULL(ar->debug.debugfs_phy)) { in ath10k_debug_register()
2025 if (IS_ERR(ar->debug.debugfs_phy)) in ath10k_debug_register()
2026 return PTR_ERR(ar->debug.debugfs_phy); in ath10k_debug_register()
2031 INIT_DELAYED_WORK(&ar->debug.htt_stats_dwork, in ath10k_debug_register()
2034 init_completion(&ar->debug.fw_stats_complete); in ath10k_debug_register()
2036 debugfs_create_file("fw_stats", S_IRUSR, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2039 debugfs_create_file("fw_reset_stats", S_IRUSR, ar->debug.debugfs_phy, in ath10k_debug_register()
2040 ar, &fops_fw_reset_stats); in ath10k_debug_register()
2042 debugfs_create_file("wmi_services", S_IRUSR, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2045 debugfs_create_file("simulate_fw_crash", S_IRUSR, ar->debug.debugfs_phy, in ath10k_debug_register()
2046 ar, &fops_simulate_fw_crash); in ath10k_debug_register()
2048 debugfs_create_file("fw_crash_dump", S_IRUSR, ar->debug.debugfs_phy, in ath10k_debug_register()
2049 ar, &fops_fw_crash_dump); in ath10k_debug_register()
2052 ar->debug.debugfs_phy, ar, &fops_reg_addr); in ath10k_debug_register()
2055 ar->debug.debugfs_phy, ar, &fops_reg_value); in ath10k_debug_register()
2058 ar->debug.debugfs_phy, ar, &fops_mem_value); in ath10k_debug_register()
2060 debugfs_create_file("chip_id", S_IRUSR, ar->debug.debugfs_phy, in ath10k_debug_register()
2061 ar, &fops_chip_id); in ath10k_debug_register()
2063 debugfs_create_file("htt_stats_mask", S_IRUSR, ar->debug.debugfs_phy, in ath10k_debug_register()
2064 ar, &fops_htt_stats_mask); in ath10k_debug_register()
2067 ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2070 debugfs_create_file("fw_dbglog", S_IRUSR, ar->debug.debugfs_phy, in ath10k_debug_register()
2071 ar, &fops_fw_dbglog); in ath10k_debug_register()
2073 debugfs_create_file("cal_data", S_IRUSR, ar->debug.debugfs_phy, in ath10k_debug_register()
2074 ar, &fops_cal_data); in ath10k_debug_register()
2077 ar->debug.debugfs_phy, ar, &fops_nf_cal_period); in ath10k_debug_register()
2081 ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2085 ar->debug.debugfs_phy, in ath10k_debug_register()
2086 &ar->dfs_block_radar_events); in ath10k_debug_register()
2089 ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2094 ar->debug.debugfs_phy, ar, &fops_pktlog_filter); in ath10k_debug_register()
2099 void ath10k_debug_unregister(struct ath10k *ar) in ath10k_debug_unregister() argument
2101 cancel_delayed_work_sync(&ar->debug.htt_stats_dwork); in ath10k_debug_unregister()
2107 void ath10k_dbg(struct ath10k *ar, enum ath10k_debug_mask mask, in ath10k_dbg() argument
2119 dev_printk(KERN_DEBUG, ar->dev, "%pV", &vaf); in ath10k_dbg()
2121 trace_ath10k_log_dbg(ar, mask, &vaf); in ath10k_dbg()
2127 void ath10k_dbg_dump(struct ath10k *ar, in ath10k_dbg_dump() argument
2138 ath10k_dbg(ar, mask, "%s\n", msg); in ath10k_dbg_dump()
2150 dev_printk(KERN_DEBUG, ar->dev, "%s\n", linebuf); in ath10k_dbg_dump()
2155 trace_ath10k_log_dbg_dump(ar, msg ? msg : "", prefix ? prefix : "", in ath10k_dbg_dump()