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
130 ath10k_core_get_fw_features_str(ar, fw_features, sizeof(fw_features)); in ath10k_print_driver_info()
132 if (ar->id.bmi_ids_valid) in ath10k_print_driver_info()
134 ar->id.bmi_chip_id, ar->id.bmi_board_id); in ath10k_print_driver_info()
137 ar->id.subsystem_vendor, ar->id.subsystem_device); in ath10k_print_driver_info()
139 …ath10k_info(ar, "%s (0x%08x, 0x%08x %s) fw %s fwapi %d bdapi %d htt-ver %d.%d wmi-op %d htt-op %d … in ath10k_print_driver_info()
140 ar->hw_params.name, in ath10k_print_driver_info()
141 ar->target_version, in ath10k_print_driver_info()
142 ar->chip_id, in ath10k_print_driver_info()
144 ar->hw->wiphy->fw_version, in ath10k_print_driver_info()
145 ar->fw_api, in ath10k_print_driver_info()
146 ar->bd_api, in ath10k_print_driver_info()
147 ar->htt.target_version_major, in ath10k_print_driver_info()
148 ar->htt.target_version_minor, in ath10k_print_driver_info()
149 ar->wmi.op_version, in ath10k_print_driver_info()
150 ar->htt.op_version, in ath10k_print_driver_info()
151 ath10k_cal_mode_str(ar->cal_mode), in ath10k_print_driver_info()
152 ar->max_num_stations, in ath10k_print_driver_info()
153 test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags), in ath10k_print_driver_info()
154 !test_bit(ATH10K_FLAG_HW_CRYPTO_DISABLED, &ar->dev_flags), in ath10k_print_driver_info()
156 ath10k_info(ar, "debug %d debugfs %d tracing %d dfs %d testmode %d\n", in ath10k_print_driver_info()
165 void ath10k_err(struct ath10k *ar, const char *fmt, ...) in ath10k_err() argument
174 dev_err(ar->dev, "%pV", &vaf); in ath10k_err()
175 trace_ath10k_log_err(ar, &vaf); in ath10k_err()
180 void ath10k_warn(struct ath10k *ar, const char *fmt, ...) in ath10k_warn() argument
189 dev_warn_ratelimited(ar->dev, "%pV", &vaf); in ath10k_warn()
190 trace_ath10k_log_warn(ar, &vaf); in ath10k_warn()
202 struct ath10k *ar = file->private_data; in ath10k_read_wmi_services() local
214 mutex_lock(&ar->conf_mutex); in ath10k_read_wmi_services()
219 spin_lock_bh(&ar->data_lock); in ath10k_read_wmi_services()
221 enabled = test_bit(i, ar->wmi.svc_map); in ath10k_read_wmi_services()
237 spin_unlock_bh(&ar->data_lock); in ath10k_read_wmi_services()
241 mutex_unlock(&ar->conf_mutex); in ath10k_read_wmi_services()
284 static void ath10k_debug_fw_stats_reset(struct ath10k *ar) in ath10k_debug_fw_stats_reset() argument
286 spin_lock_bh(&ar->data_lock); in ath10k_debug_fw_stats_reset()
287 ar->debug.fw_stats_done = false; in ath10k_debug_fw_stats_reset()
288 ath10k_debug_fw_stats_pdevs_free(&ar->debug.fw_stats.pdevs); in ath10k_debug_fw_stats_reset()
289 ath10k_debug_fw_stats_vdevs_free(&ar->debug.fw_stats.vdevs); in ath10k_debug_fw_stats_reset()
290 ath10k_debug_fw_stats_peers_free(&ar->debug.fw_stats.peers); in ath10k_debug_fw_stats_reset()
291 spin_unlock_bh(&ar->data_lock); in ath10k_debug_fw_stats_reset()
294 void ath10k_debug_fw_stats_process(struct ath10k *ar, struct sk_buff *skb) in ath10k_debug_fw_stats_process() argument
306 spin_lock_bh(&ar->data_lock); in ath10k_debug_fw_stats_process()
307 ret = ath10k_wmi_pull_fw_stats(ar, skb, &stats); in ath10k_debug_fw_stats_process()
309 ath10k_warn(ar, "failed to pull fw stats: %d\n", ret); in ath10k_debug_fw_stats_process()
325 if (ar->debug.fw_stats_done) { in ath10k_debug_fw_stats_process()
326 ath10k_warn(ar, "received unsolicited stats update event\n"); in ath10k_debug_fw_stats_process()
330 num_peers = ath10k_wmi_fw_stats_num_peers(&ar->debug.fw_stats.peers); in ath10k_debug_fw_stats_process()
331 num_vdevs = ath10k_wmi_fw_stats_num_vdevs(&ar->debug.fw_stats.vdevs); in ath10k_debug_fw_stats_process()
332 is_start = (list_empty(&ar->debug.fw_stats.pdevs) && in ath10k_debug_fw_stats_process()
334 is_end = (!list_empty(&ar->debug.fw_stats.pdevs) && in ath10k_debug_fw_stats_process()
338 list_splice_tail_init(&stats.pdevs, &ar->debug.fw_stats.pdevs); in ath10k_debug_fw_stats_process()
341 ar->debug.fw_stats_done = true; in ath10k_debug_fw_stats_process()
343 is_started = !list_empty(&ar->debug.fw_stats.pdevs); in ath10k_debug_fw_stats_process()
350 ath10k_warn(ar, "dropping fw peer stats\n"); in ath10k_debug_fw_stats_process()
355 ath10k_warn(ar, "dropping fw vdev stats\n"); in ath10k_debug_fw_stats_process()
359 list_splice_tail_init(&stats.peers, &ar->debug.fw_stats.peers); in ath10k_debug_fw_stats_process()
360 list_splice_tail_init(&stats.vdevs, &ar->debug.fw_stats.vdevs); in ath10k_debug_fw_stats_process()
363 complete(&ar->debug.fw_stats_complete); in ath10k_debug_fw_stats_process()
373 spin_unlock_bh(&ar->data_lock); in ath10k_debug_fw_stats_process()
376 static int ath10k_debug_fw_stats_request(struct ath10k *ar) in ath10k_debug_fw_stats_request() argument
381 lockdep_assert_held(&ar->conf_mutex); in ath10k_debug_fw_stats_request()
385 ath10k_debug_fw_stats_reset(ar); in ath10k_debug_fw_stats_request()
391 reinit_completion(&ar->debug.fw_stats_complete); in ath10k_debug_fw_stats_request()
393 ret = ath10k_wmi_request_stats(ar, ar->fw_stats_req_mask); in ath10k_debug_fw_stats_request()
395 ath10k_warn(ar, "could not request stats (%d)\n", ret); in ath10k_debug_fw_stats_request()
400 wait_for_completion_timeout(&ar->debug.fw_stats_complete, in ath10k_debug_fw_stats_request()
405 spin_lock_bh(&ar->data_lock); in ath10k_debug_fw_stats_request()
406 if (ar->debug.fw_stats_done) { in ath10k_debug_fw_stats_request()
407 spin_unlock_bh(&ar->data_lock); in ath10k_debug_fw_stats_request()
410 spin_unlock_bh(&ar->data_lock); in ath10k_debug_fw_stats_request()
418 struct ath10k *ar = inode->i_private; in ath10k_fw_stats_open() local
422 mutex_lock(&ar->conf_mutex); in ath10k_fw_stats_open()
424 if (ar->state != ATH10K_STATE_ON) { in ath10k_fw_stats_open()
435 ret = ath10k_debug_fw_stats_request(ar); in ath10k_fw_stats_open()
437 ath10k_warn(ar, "failed to request fw stats: %d\n", ret); in ath10k_fw_stats_open()
441 ret = ath10k_wmi_fw_stats_fill(ar, &ar->debug.fw_stats, buf); in ath10k_fw_stats_open()
443 ath10k_warn(ar, "failed to fill fw stats: %d\n", ret); in ath10k_fw_stats_open()
449 mutex_unlock(&ar->conf_mutex); in ath10k_fw_stats_open()
456 mutex_unlock(&ar->conf_mutex); in ath10k_fw_stats_open()
488 struct ath10k *ar = file->private_data; in ath10k_debug_fw_reset_stats_read() local
497 spin_lock_bh(&ar->data_lock); in ath10k_debug_fw_reset_stats_read()
501 "fw_crash_counter\t\t%d\n", ar->stats.fw_crash_counter); in ath10k_debug_fw_reset_stats_read()
504 ar->stats.fw_warm_reset_counter); in ath10k_debug_fw_reset_stats_read()
507 ar->stats.fw_cold_reset_counter); in ath10k_debug_fw_reset_stats_read()
509 spin_unlock_bh(&ar->data_lock); in ath10k_debug_fw_reset_stats_read()
526 static int ath10k_debug_fw_assert(struct ath10k *ar) in ath10k_debug_fw_assert() argument
531 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd) + 16); in ath10k_debug_fw_assert()
541 return ath10k_wmi_cmd_send(ar, skb, in ath10k_debug_fw_assert()
542 ar->wmi.cmd->vdev_install_key_cmdid); in ath10k_debug_fw_assert()
570 struct ath10k *ar = file->private_data; in ath10k_write_simulate_fw_crash() local
574 mutex_lock(&ar->conf_mutex); in ath10k_write_simulate_fw_crash()
581 if (ar->state != ATH10K_STATE_ON && in ath10k_write_simulate_fw_crash()
582 ar->state != ATH10K_STATE_RESTARTED) { in ath10k_write_simulate_fw_crash()
594 ath10k_info(ar, "simulating soft firmware crash\n"); in ath10k_write_simulate_fw_crash()
595 ret = ath10k_wmi_force_fw_hang(ar, WMI_FORCE_FW_HANG_ASSERT, 0); in ath10k_write_simulate_fw_crash()
597 ath10k_info(ar, "simulating hard firmware crash\n"); in ath10k_write_simulate_fw_crash()
601 ret = ath10k_wmi_vdev_set_param(ar, 0x7fff, in ath10k_write_simulate_fw_crash()
602 ar->wmi.vdev_param->rts_threshold, in ath10k_write_simulate_fw_crash()
605 ath10k_info(ar, "simulating firmware assert crash\n"); in ath10k_write_simulate_fw_crash()
606 ret = ath10k_debug_fw_assert(ar); in ath10k_write_simulate_fw_crash()
608 ath10k_info(ar, "user requested hw restart\n"); in ath10k_write_simulate_fw_crash()
609 queue_work(ar->workqueue, &ar->restart_work); in ath10k_write_simulate_fw_crash()
617 ath10k_warn(ar, "failed to simulate firmware crash: %d\n", ret); in ath10k_write_simulate_fw_crash()
624 mutex_unlock(&ar->conf_mutex); in ath10k_write_simulate_fw_crash()
639 struct ath10k *ar = file->private_data; in ath10k_read_chip_id() local
643 len = scnprintf(buf, sizeof(buf), "0x%08x\n", ar->chip_id); in ath10k_read_chip_id()
656 ath10k_debug_get_new_fw_crash_data(struct ath10k *ar) in ath10k_debug_get_new_fw_crash_data() argument
658 struct ath10k_fw_crash_data *crash_data = ar->debug.fw_crash_data; in ath10k_debug_get_new_fw_crash_data()
660 lockdep_assert_held(&ar->data_lock); in ath10k_debug_get_new_fw_crash_data()
670 static struct ath10k_dump_file_data *ath10k_build_dump_file(struct ath10k *ar) in ath10k_build_dump_file() argument
672 struct ath10k_fw_crash_data *crash_data = ar->debug.fw_crash_data; in ath10k_build_dump_file()
691 spin_lock_bh(&ar->data_lock); in ath10k_build_dump_file()
694 spin_unlock_bh(&ar->data_lock); in ath10k_build_dump_file()
707 dump_data->chip_id = cpu_to_le32(ar->chip_id); in ath10k_build_dump_file()
709 dump_data->target_version = cpu_to_le32(ar->target_version); in ath10k_build_dump_file()
710 dump_data->fw_version_major = cpu_to_le32(ar->fw_version_major); in ath10k_build_dump_file()
711 dump_data->fw_version_minor = cpu_to_le32(ar->fw_version_minor); in ath10k_build_dump_file()
712 dump_data->fw_version_release = cpu_to_le32(ar->fw_version_release); in ath10k_build_dump_file()
713 dump_data->fw_version_build = cpu_to_le32(ar->fw_version_build); in ath10k_build_dump_file()
714 dump_data->phy_capability = cpu_to_le32(ar->phy_capability); in ath10k_build_dump_file()
715 dump_data->hw_min_tx_power = cpu_to_le32(ar->hw_min_tx_power); in ath10k_build_dump_file()
716 dump_data->hw_max_tx_power = cpu_to_le32(ar->hw_max_tx_power); in ath10k_build_dump_file()
717 dump_data->ht_cap_info = cpu_to_le32(ar->ht_cap_info); in ath10k_build_dump_file()
718 dump_data->vht_cap_info = cpu_to_le32(ar->vht_cap_info); in ath10k_build_dump_file()
719 dump_data->num_rf_chains = cpu_to_le32(ar->num_rf_chains); in ath10k_build_dump_file()
721 strlcpy(dump_data->fw_ver, ar->hw->wiphy->fw_version, in ath10k_build_dump_file()
739 ar->debug.fw_crash_data->crashed_since_read = false; in ath10k_build_dump_file()
741 spin_unlock_bh(&ar->data_lock); in ath10k_build_dump_file()
748 struct ath10k *ar = inode->i_private; in ath10k_fw_crash_dump_open() local
751 dump = ath10k_build_dump_file(ar); in ath10k_fw_crash_dump_open()
791 struct ath10k *ar = file->private_data; in ath10k_reg_addr_read() local
796 mutex_lock(&ar->conf_mutex); in ath10k_reg_addr_read()
797 reg_addr = ar->debug.reg_addr; in ath10k_reg_addr_read()
798 mutex_unlock(&ar->conf_mutex); in ath10k_reg_addr_read()
809 struct ath10k *ar = file->private_data; in ath10k_reg_addr_write() local
820 mutex_lock(&ar->conf_mutex); in ath10k_reg_addr_write()
821 ar->debug.reg_addr = reg_addr; in ath10k_reg_addr_write()
822 mutex_unlock(&ar->conf_mutex); in ath10k_reg_addr_write()
839 struct ath10k *ar = file->private_data; in ath10k_reg_value_read() local
845 mutex_lock(&ar->conf_mutex); in ath10k_reg_value_read()
847 if (ar->state != ATH10K_STATE_ON && in ath10k_reg_value_read()
848 ar->state != ATH10K_STATE_UTF) { in ath10k_reg_value_read()
853 reg_addr = ar->debug.reg_addr; in ath10k_reg_value_read()
855 reg_val = ath10k_hif_read32(ar, reg_addr); in ath10k_reg_value_read()
861 mutex_unlock(&ar->conf_mutex); in ath10k_reg_value_read()
870 struct ath10k *ar = file->private_data; in ath10k_reg_value_write() local
874 mutex_lock(&ar->conf_mutex); in ath10k_reg_value_write()
876 if (ar->state != ATH10K_STATE_ON && in ath10k_reg_value_write()
877 ar->state != ATH10K_STATE_UTF) { in ath10k_reg_value_write()
882 reg_addr = ar->debug.reg_addr; in ath10k_reg_value_write()
888 ath10k_hif_write32(ar, reg_addr, reg_val); in ath10k_reg_value_write()
893 mutex_unlock(&ar->conf_mutex); in ath10k_reg_value_write()
910 struct ath10k *ar = file->private_data; in ath10k_mem_value_read() local
920 mutex_lock(&ar->conf_mutex); in ath10k_mem_value_read()
928 if (ar->state != ATH10K_STATE_ON && in ath10k_mem_value_read()
929 ar->state != ATH10K_STATE_UTF) { in ath10k_mem_value_read()
934 ret = ath10k_hif_diag_read(ar, *ppos, buf, count); in ath10k_mem_value_read()
936 ath10k_warn(ar, "failed to read address 0x%08x via diagnose window fnrom debugfs: %d\n", in ath10k_mem_value_read()
953 mutex_unlock(&ar->conf_mutex); in ath10k_mem_value_read()
962 struct ath10k *ar = file->private_data; in ath10k_mem_value_write() local
972 mutex_lock(&ar->conf_mutex); in ath10k_mem_value_write()
980 if (ar->state != ATH10K_STATE_ON && in ath10k_mem_value_write()
981 ar->state != ATH10K_STATE_UTF) { in ath10k_mem_value_write()
992 ret = ath10k_hif_diag_write(ar, *ppos, buf, count); in ath10k_mem_value_write()
994 ath10k_warn(ar, "failed to write address 0x%08x via diagnose window from debugfs: %d\n", in ath10k_mem_value_write()
1004 mutex_unlock(&ar->conf_mutex); in ath10k_mem_value_write()
1017 static int ath10k_debug_htt_stats_req(struct ath10k *ar) in ath10k_debug_htt_stats_req() argument
1022 lockdep_assert_held(&ar->conf_mutex); in ath10k_debug_htt_stats_req()
1024 if (ar->debug.htt_stats_mask == 0) in ath10k_debug_htt_stats_req()
1028 if (ar->state != ATH10K_STATE_ON) in ath10k_debug_htt_stats_req()
1033 ret = ath10k_htt_h2t_stats_req(&ar->htt, ar->debug.htt_stats_mask, in ath10k_debug_htt_stats_req()
1036 ath10k_warn(ar, "failed to send htt stats request: %d\n", ret); in ath10k_debug_htt_stats_req()
1040 queue_delayed_work(ar->workqueue, &ar->debug.htt_stats_dwork, in ath10k_debug_htt_stats_req()
1048 struct ath10k *ar = container_of(work, struct ath10k, in ath10k_debug_htt_stats_dwork() local
1051 mutex_lock(&ar->conf_mutex); in ath10k_debug_htt_stats_dwork()
1053 ath10k_debug_htt_stats_req(ar); in ath10k_debug_htt_stats_dwork()
1055 mutex_unlock(&ar->conf_mutex); in ath10k_debug_htt_stats_dwork()
1062 struct ath10k *ar = file->private_data; in ath10k_read_htt_stats_mask() local
1066 len = scnprintf(buf, sizeof(buf), "%lu\n", ar->debug.htt_stats_mask); in ath10k_read_htt_stats_mask()
1075 struct ath10k *ar = file->private_data; in ath10k_write_htt_stats_mask() local
1087 mutex_lock(&ar->conf_mutex); in ath10k_write_htt_stats_mask()
1089 ar->debug.htt_stats_mask = mask; in ath10k_write_htt_stats_mask()
1091 ret = ath10k_debug_htt_stats_req(ar); in ath10k_write_htt_stats_mask()
1098 mutex_unlock(&ar->conf_mutex); in ath10k_write_htt_stats_mask()
1115 struct ath10k *ar = file->private_data; in ath10k_read_htt_max_amsdu_ampdu() local
1120 mutex_lock(&ar->conf_mutex); in ath10k_read_htt_max_amsdu_ampdu()
1122 amsdu = ar->htt.max_num_amsdu; in ath10k_read_htt_max_amsdu_ampdu()
1123 ampdu = ar->htt.max_num_ampdu; in ath10k_read_htt_max_amsdu_ampdu()
1124 mutex_unlock(&ar->conf_mutex); in ath10k_read_htt_max_amsdu_ampdu()
1135 struct ath10k *ar = file->private_data; in ath10k_write_htt_max_amsdu_ampdu() local
1150 mutex_lock(&ar->conf_mutex); in ath10k_write_htt_max_amsdu_ampdu()
1152 res = ath10k_htt_h2t_aggr_cfg_msg(&ar->htt, ampdu, amsdu); in ath10k_write_htt_max_amsdu_ampdu()
1157 ar->htt.max_num_amsdu = amsdu; in ath10k_write_htt_max_amsdu_ampdu()
1158 ar->htt.max_num_ampdu = ampdu; in ath10k_write_htt_max_amsdu_ampdu()
1161 mutex_unlock(&ar->conf_mutex); in ath10k_write_htt_max_amsdu_ampdu()
1177 struct ath10k *ar = file->private_data; in ath10k_read_fw_dbglog() local
1182 ar->debug.fw_dbglog_mask, ar->debug.fw_dbglog_level); in ath10k_read_fw_dbglog()
1191 struct ath10k *ar = file->private_data; in ath10k_write_fw_dbglog() local
1210 mutex_lock(&ar->conf_mutex); in ath10k_write_fw_dbglog()
1212 ar->debug.fw_dbglog_mask = mask; in ath10k_write_fw_dbglog()
1213 ar->debug.fw_dbglog_level = log_level; in ath10k_write_fw_dbglog()
1215 if (ar->state == ATH10K_STATE_ON) { in ath10k_write_fw_dbglog()
1216 ret = ath10k_wmi_dbglog_cfg(ar, ar->debug.fw_dbglog_mask, in ath10k_write_fw_dbglog()
1217 ar->debug.fw_dbglog_level); in ath10k_write_fw_dbglog()
1219 ath10k_warn(ar, "dbglog cfg failed from debugfs: %d\n", in ath10k_write_fw_dbglog()
1228 mutex_unlock(&ar->conf_mutex); in ath10k_write_fw_dbglog()
1312 struct ath10k *ar = hw->priv; in ath10k_debug_get_et_stats() local
1317 mutex_lock(&ar->conf_mutex); in ath10k_debug_get_et_stats()
1319 if (ar->state == ATH10K_STATE_ON) { in ath10k_debug_get_et_stats()
1320 ret = ath10k_debug_fw_stats_request(ar); in ath10k_debug_get_et_stats()
1323 ath10k_warn(ar, in ath10k_debug_get_et_stats()
1329 pdev_stats = list_first_entry_or_null(&ar->debug.fw_stats.pdevs, in ath10k_debug_get_et_stats()
1337 spin_lock_bh(&ar->data_lock); in ath10k_debug_get_et_stats()
1382 data[i++] = ar->stats.fw_crash_counter; in ath10k_debug_get_et_stats()
1383 data[i++] = ar->stats.fw_warm_reset_counter; in ath10k_debug_get_et_stats()
1384 data[i++] = ar->stats.fw_cold_reset_counter; in ath10k_debug_get_et_stats()
1386 spin_unlock_bh(&ar->data_lock); in ath10k_debug_get_et_stats()
1388 mutex_unlock(&ar->conf_mutex); in ath10k_debug_get_et_stats()
1403 struct ath10k *ar = inode->i_private; in ath10k_debug_cal_data_open() local
1409 mutex_lock(&ar->conf_mutex); in ath10k_debug_cal_data_open()
1411 if (ar->state != ATH10K_STATE_ON && in ath10k_debug_cal_data_open()
1412 ar->state != ATH10K_STATE_UTF) { in ath10k_debug_cal_data_open()
1425 ret = ath10k_hif_diag_read(ar, hi_addr, &addr, sizeof(addr)); in ath10k_debug_cal_data_open()
1427 ath10k_warn(ar, "failed to read hi_board_data address: %d\n", ret); in ath10k_debug_cal_data_open()
1431 ret = ath10k_hif_diag_read(ar, le32_to_cpu(addr), buf, in ath10k_debug_cal_data_open()
1434 ath10k_warn(ar, "failed to read calibration data: %d\n", ret); in ath10k_debug_cal_data_open()
1440 mutex_unlock(&ar->conf_mutex); in ath10k_debug_cal_data_open()
1448 mutex_unlock(&ar->conf_mutex); in ath10k_debug_cal_data_open()
1475 struct ath10k *ar = file->private_data; in ath10k_write_ani_enable() local
1482 mutex_lock(&ar->conf_mutex); in ath10k_write_ani_enable()
1484 if (ar->ani_enabled == enable) { in ath10k_write_ani_enable()
1489 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->ani_enable, in ath10k_write_ani_enable()
1492 ath10k_warn(ar, "ani_enable failed from debugfs: %d\n", ret); in ath10k_write_ani_enable()
1495 ar->ani_enabled = enable; in ath10k_write_ani_enable()
1500 mutex_unlock(&ar->conf_mutex); in ath10k_write_ani_enable()
1508 struct ath10k *ar = file->private_data; in ath10k_read_ani_enable() local
1513 ar->ani_enabled); in ath10k_read_ani_enable()
1538 struct ath10k *ar = file->private_data; in ath10k_read_nf_cal_period() local
1543 ar->debug.nf_cal_period); in ath10k_read_nf_cal_period()
1552 struct ath10k *ar = file->private_data; in ath10k_write_nf_cal_period() local
1567 mutex_lock(&ar->conf_mutex); in ath10k_write_nf_cal_period()
1569 ar->debug.nf_cal_period = period; in ath10k_write_nf_cal_period()
1571 if (ar->state != ATH10K_STATE_ON) { in ath10k_write_nf_cal_period()
1577 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->cal_period, in ath10k_write_nf_cal_period()
1578 ar->debug.nf_cal_period); in ath10k_write_nf_cal_period()
1580 ath10k_warn(ar, "cal period cfg failed from debugfs: %d\n", in ath10k_write_nf_cal_period()
1588 mutex_unlock(&ar->conf_mutex); in ath10k_write_nf_cal_period()
1603 static int ath10k_debug_tpc_stats_request(struct ath10k *ar) in ath10k_debug_tpc_stats_request() argument
1608 lockdep_assert_held(&ar->conf_mutex); in ath10k_debug_tpc_stats_request()
1610 reinit_completion(&ar->debug.tpc_complete); in ath10k_debug_tpc_stats_request()
1612 ret = ath10k_wmi_pdev_get_tpc_config(ar, WMI_TPC_CONFIG_PARAM); in ath10k_debug_tpc_stats_request()
1614 ath10k_warn(ar, "failed to request tpc config: %d\n", ret); in ath10k_debug_tpc_stats_request()
1618 time_left = wait_for_completion_timeout(&ar->debug.tpc_complete, in ath10k_debug_tpc_stats_request()
1626 void ath10k_debug_tpc_stats_process(struct ath10k *ar, in ath10k_debug_tpc_stats_process() argument
1629 spin_lock_bh(&ar->data_lock); in ath10k_debug_tpc_stats_process()
1631 kfree(ar->debug.tpc_stats); in ath10k_debug_tpc_stats_process()
1632 ar->debug.tpc_stats = tpc_stats; in ath10k_debug_tpc_stats_process()
1633 complete(&ar->debug.tpc_complete); in ath10k_debug_tpc_stats_process()
1635 spin_unlock_bh(&ar->data_lock); in ath10k_debug_tpc_stats_process()
1677 static void ath10k_tpc_stats_fill(struct ath10k *ar, in ath10k_tpc_stats_fill() argument
1686 spin_lock_bh(&ar->data_lock); in ath10k_tpc_stats_fill()
1689 ath10k_warn(ar, "failed to get tpc stats\n"); in ath10k_tpc_stats_fill()
1756 spin_unlock_bh(&ar->data_lock); in ath10k_tpc_stats_fill()
1766 struct ath10k *ar = inode->i_private; in ath10k_tpc_stats_open() local
1770 mutex_lock(&ar->conf_mutex); in ath10k_tpc_stats_open()
1772 if (ar->state != ATH10K_STATE_ON) { in ath10k_tpc_stats_open()
1783 ret = ath10k_debug_tpc_stats_request(ar); in ath10k_tpc_stats_open()
1785 ath10k_warn(ar, "failed to request tpc config stats: %d\n", in ath10k_tpc_stats_open()
1790 ath10k_tpc_stats_fill(ar, ar->debug.tpc_stats, buf); in ath10k_tpc_stats_open()
1793 mutex_unlock(&ar->conf_mutex); in ath10k_tpc_stats_open()
1800 mutex_unlock(&ar->conf_mutex); in ath10k_tpc_stats_open()
1828 int ath10k_debug_start(struct ath10k *ar) in ath10k_debug_start() argument
1832 lockdep_assert_held(&ar->conf_mutex); in ath10k_debug_start()
1834 ret = ath10k_debug_htt_stats_req(ar); in ath10k_debug_start()
1837 ath10k_warn(ar, "failed to start htt stats workqueue: %d\n", in ath10k_debug_start()
1840 if (ar->debug.fw_dbglog_mask) { in ath10k_debug_start()
1841 ret = ath10k_wmi_dbglog_cfg(ar, ar->debug.fw_dbglog_mask, in ath10k_debug_start()
1845 ath10k_warn(ar, "failed to enable dbglog during start: %d", in ath10k_debug_start()
1849 if (ar->debug.pktlog_filter) { in ath10k_debug_start()
1850 ret = ath10k_wmi_pdev_pktlog_enable(ar, in ath10k_debug_start()
1851 ar->debug.pktlog_filter); in ath10k_debug_start()
1854 ath10k_warn(ar, in ath10k_debug_start()
1856 ar->debug.pktlog_filter, ret); in ath10k_debug_start()
1858 ret = ath10k_wmi_pdev_pktlog_disable(ar); in ath10k_debug_start()
1861 ath10k_warn(ar, "failed to disable pktlog: %d\n", ret); in ath10k_debug_start()
1864 if (ar->debug.nf_cal_period) { in ath10k_debug_start()
1865 ret = ath10k_wmi_pdev_set_param(ar, in ath10k_debug_start()
1866 ar->wmi.pdev_param->cal_period, in ath10k_debug_start()
1867 ar->debug.nf_cal_period); in ath10k_debug_start()
1870 ath10k_warn(ar, "cal period cfg failed from debug start: %d\n", in ath10k_debug_start()
1877 void ath10k_debug_stop(struct ath10k *ar) in ath10k_debug_stop() argument
1879 lockdep_assert_held(&ar->conf_mutex); in ath10k_debug_stop()
1884 if (ar->debug.htt_stats_mask != 0) in ath10k_debug_stop()
1885 cancel_delayed_work(&ar->debug.htt_stats_dwork); in ath10k_debug_stop()
1887 ath10k_wmi_pdev_pktlog_disable(ar); in ath10k_debug_stop()
1894 struct ath10k *ar = file->private_data; in ath10k_write_simulate_radar() local
1896 ieee80211_radar_detected(ar->hw); in ath10k_write_simulate_radar()
1910 ar->debug.dfs_stats.p))
1914 ar->debug.dfs_pool_stats.p))
1921 struct ath10k *ar = file->private_data; in ath10k_read_dfs_stats() local
1928 if (!ar->dfs_detector) { in ath10k_read_dfs_stats()
1933 ar->debug.dfs_pool_stats = in ath10k_read_dfs_stats()
1934 ar->dfs_detector->get_stats(ar->dfs_detector); in ath10k_read_dfs_stats()
1974 struct ath10k *ar = file->private_data; in ath10k_write_pktlog_filter() local
1981 mutex_lock(&ar->conf_mutex); in ath10k_write_pktlog_filter()
1983 if (ar->state != ATH10K_STATE_ON) { in ath10k_write_pktlog_filter()
1984 ar->debug.pktlog_filter = filter; in ath10k_write_pktlog_filter()
1989 if (filter == ar->debug.pktlog_filter) { in ath10k_write_pktlog_filter()
1995 ret = ath10k_wmi_pdev_pktlog_enable(ar, filter); in ath10k_write_pktlog_filter()
1997 ath10k_warn(ar, "failed to enable pktlog filter %x: %d\n", in ath10k_write_pktlog_filter()
1998 ar->debug.pktlog_filter, ret); in ath10k_write_pktlog_filter()
2002 ret = ath10k_wmi_pdev_pktlog_disable(ar); in ath10k_write_pktlog_filter()
2004 ath10k_warn(ar, "failed to disable pktlog: %d\n", ret); in ath10k_write_pktlog_filter()
2009 ar->debug.pktlog_filter = filter; in ath10k_write_pktlog_filter()
2013 mutex_unlock(&ar->conf_mutex); in ath10k_write_pktlog_filter()
2021 struct ath10k *ar = file->private_data; in ath10k_read_pktlog_filter() local
2024 mutex_lock(&ar->conf_mutex); in ath10k_read_pktlog_filter()
2026 ar->debug.pktlog_filter); in ath10k_read_pktlog_filter()
2027 mutex_unlock(&ar->conf_mutex); in ath10k_read_pktlog_filter()
2042 struct ath10k *ar = file->private_data; in ath10k_write_quiet_period() local
2049 ath10k_warn(ar, "Quiet period %u can not be lesser than 25ms\n", in ath10k_write_quiet_period()
2053 mutex_lock(&ar->conf_mutex); in ath10k_write_quiet_period()
2054 ar->thermal.quiet_period = period; in ath10k_write_quiet_period()
2055 ath10k_thermal_set_throttling(ar); in ath10k_write_quiet_period()
2056 mutex_unlock(&ar->conf_mutex); in ath10k_write_quiet_period()
2065 struct ath10k *ar = file->private_data; in ath10k_read_quiet_period() local
2068 mutex_lock(&ar->conf_mutex); in ath10k_read_quiet_period()
2070 ar->thermal.quiet_period); in ath10k_read_quiet_period()
2071 mutex_unlock(&ar->conf_mutex); in ath10k_read_quiet_period()
2082 int ath10k_debug_create(struct ath10k *ar) in ath10k_debug_create() argument
2084 ar->debug.fw_crash_data = vzalloc(sizeof(*ar->debug.fw_crash_data)); in ath10k_debug_create()
2085 if (!ar->debug.fw_crash_data) in ath10k_debug_create()
2088 INIT_LIST_HEAD(&ar->debug.fw_stats.pdevs); in ath10k_debug_create()
2089 INIT_LIST_HEAD(&ar->debug.fw_stats.vdevs); in ath10k_debug_create()
2090 INIT_LIST_HEAD(&ar->debug.fw_stats.peers); in ath10k_debug_create()
2095 void ath10k_debug_destroy(struct ath10k *ar) in ath10k_debug_destroy() argument
2097 vfree(ar->debug.fw_crash_data); in ath10k_debug_destroy()
2098 ar->debug.fw_crash_data = NULL; in ath10k_debug_destroy()
2100 ath10k_debug_fw_stats_reset(ar); in ath10k_debug_destroy()
2102 kfree(ar->debug.tpc_stats); in ath10k_debug_destroy()
2105 int ath10k_debug_register(struct ath10k *ar) in ath10k_debug_register() argument
2107 ar->debug.debugfs_phy = debugfs_create_dir("ath10k", in ath10k_debug_register()
2108 ar->hw->wiphy->debugfsdir); in ath10k_debug_register()
2109 if (IS_ERR_OR_NULL(ar->debug.debugfs_phy)) { in ath10k_debug_register()
2110 if (IS_ERR(ar->debug.debugfs_phy)) in ath10k_debug_register()
2111 return PTR_ERR(ar->debug.debugfs_phy); in ath10k_debug_register()
2116 INIT_DELAYED_WORK(&ar->debug.htt_stats_dwork, in ath10k_debug_register()
2119 init_completion(&ar->debug.tpc_complete); in ath10k_debug_register()
2120 init_completion(&ar->debug.fw_stats_complete); in ath10k_debug_register()
2122 debugfs_create_file("fw_stats", S_IRUSR, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2125 debugfs_create_file("fw_reset_stats", S_IRUSR, ar->debug.debugfs_phy, in ath10k_debug_register()
2126 ar, &fops_fw_reset_stats); in ath10k_debug_register()
2128 debugfs_create_file("wmi_services", S_IRUSR, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2131 debugfs_create_file("simulate_fw_crash", S_IRUSR, ar->debug.debugfs_phy, in ath10k_debug_register()
2132 ar, &fops_simulate_fw_crash); in ath10k_debug_register()
2134 debugfs_create_file("fw_crash_dump", S_IRUSR, ar->debug.debugfs_phy, in ath10k_debug_register()
2135 ar, &fops_fw_crash_dump); in ath10k_debug_register()
2138 ar->debug.debugfs_phy, ar, &fops_reg_addr); in ath10k_debug_register()
2141 ar->debug.debugfs_phy, ar, &fops_reg_value); in ath10k_debug_register()
2144 ar->debug.debugfs_phy, ar, &fops_mem_value); in ath10k_debug_register()
2146 debugfs_create_file("chip_id", S_IRUSR, ar->debug.debugfs_phy, in ath10k_debug_register()
2147 ar, &fops_chip_id); in ath10k_debug_register()
2149 debugfs_create_file("htt_stats_mask", S_IRUSR, ar->debug.debugfs_phy, in ath10k_debug_register()
2150 ar, &fops_htt_stats_mask); in ath10k_debug_register()
2153 ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2156 debugfs_create_file("fw_dbglog", S_IRUSR, ar->debug.debugfs_phy, in ath10k_debug_register()
2157 ar, &fops_fw_dbglog); in ath10k_debug_register()
2159 debugfs_create_file("cal_data", S_IRUSR, ar->debug.debugfs_phy, in ath10k_debug_register()
2160 ar, &fops_cal_data); in ath10k_debug_register()
2163 ar->debug.debugfs_phy, ar, &fops_ani_enable); in ath10k_debug_register()
2166 ar->debug.debugfs_phy, ar, &fops_nf_cal_period); in ath10k_debug_register()
2170 ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2174 ar->debug.debugfs_phy, in ath10k_debug_register()
2175 &ar->dfs_block_radar_events); in ath10k_debug_register()
2178 ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2183 ar->debug.debugfs_phy, ar, &fops_pktlog_filter); in ath10k_debug_register()
2186 ar->debug.debugfs_phy, ar, &fops_quiet_period); in ath10k_debug_register()
2189 ar->debug.debugfs_phy, ar, &fops_tpc_stats); in ath10k_debug_register()
2194 void ath10k_debug_unregister(struct ath10k *ar) in ath10k_debug_unregister() argument
2196 cancel_delayed_work_sync(&ar->debug.htt_stats_dwork); in ath10k_debug_unregister()
2202 void ath10k_dbg(struct ath10k *ar, enum ath10k_debug_mask mask, in ath10k_dbg() argument
2214 dev_printk(KERN_DEBUG, ar->dev, "%pV", &vaf); in ath10k_dbg()
2216 trace_ath10k_log_dbg(ar, mask, &vaf); in ath10k_dbg()
2222 void ath10k_dbg_dump(struct ath10k *ar, in ath10k_dbg_dump() argument
2233 ath10k_dbg(ar, mask, "%s\n", msg); in ath10k_dbg_dump()
2245 dev_printk(KERN_DEBUG, ar->dev, "%s\n", linebuf); in ath10k_dbg_dump()
2250 trace_ath10k_log_dbg_dump(ar, msg ? msg : "", prefix ? prefix : "", in ath10k_dbg_dump()