Lines Matching +full:hw +full:- +full:cal +full:- +full:a
1 // SPDX-License-Identifier: ISC
3 * Copyright (c) 2005-2011 Atheros Communications Inc.
4 * Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
21 #include "wmi-ops.h"
37 dev_info(ar->dev, "%pV", &vaf); in ath10k_info()
52 ar->hw_params.name, in ath10k_debug_print_hwfw_info()
53 ar->target_version, in ath10k_debug_print_hwfw_info()
54 ar->bus_param.chip_id, in ath10k_debug_print_hwfw_info()
55 ar->id.subsystem_vendor, ar->id.subsystem_device); in ath10k_debug_print_hwfw_info()
64 firmware = ar->normal_mode_fw.fw_file.firmware; in ath10k_debug_print_hwfw_info()
66 crc = crc32_le(0, firmware->data, firmware->size); in ath10k_debug_print_hwfw_info()
69 ar->hw->wiphy->fw_version, in ath10k_debug_print_hwfw_info()
70 ar->fw_api, in ath10k_debug_print_hwfw_info()
81 if (ar->id.bmi_ids_valid) in ath10k_debug_print_board_info()
83 ar->id.bmi_chip_id, ar->id.bmi_board_id); in ath10k_debug_print_board_info()
85 scnprintf(boardinfo, sizeof(boardinfo), "N/A"); in ath10k_debug_print_board_info()
87 board = ar->normal_mode_fw.board; in ath10k_debug_print_board_info()
89 crc = crc32_le(0, board->data, board->size); in ath10k_debug_print_board_info()
94 ar->bd_api, in ath10k_debug_print_board_info()
101 ath10k_info(ar, "htt-ver %d.%d wmi-op %d htt-op %d cal %s max-sta %d raw %d hwcrypto %d\n", in ath10k_debug_print_boot_info()
102 ar->htt.target_version_major, in ath10k_debug_print_boot_info()
103 ar->htt.target_version_minor, in ath10k_debug_print_boot_info()
104 ar->normal_mode_fw.fw_file.wmi_op_version, in ath10k_debug_print_boot_info()
105 ar->normal_mode_fw.fw_file.htt_op_version, in ath10k_debug_print_boot_info()
106 ath10k_cal_mode_str(ar->cal_mode), in ath10k_debug_print_boot_info()
107 ar->max_num_stations, in ath10k_debug_print_boot_info()
108 test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags), in ath10k_debug_print_boot_info()
109 !test_bit(ATH10K_FLAG_HW_CRYPTO_DISABLED, &ar->dev_flags)); in ath10k_debug_print_boot_info()
129 dev_err(ar->dev, "%pV", &vaf); in ath10k_err()
144 dev_warn_ratelimited(ar->dev, "%pV", &vaf); in ath10k_warn()
157 struct ath10k *ar = file->private_data; in ath10k_read_wmi_services()
167 return -ENOMEM; in ath10k_read_wmi_services()
169 mutex_lock(&ar->conf_mutex); in ath10k_read_wmi_services()
171 spin_lock_bh(&ar->data_lock); in ath10k_read_wmi_services()
173 enabled = test_bit(i, ar->wmi.svc_map); in ath10k_read_wmi_services()
178 len += scnprintf(buf + len, buf_len - len, in ath10k_read_wmi_services()
179 "%-40s %s (bit %d)\n", in ath10k_read_wmi_services()
185 len += scnprintf(buf + len, buf_len - len, in ath10k_read_wmi_services()
186 "%-40s %s\n", in ath10k_read_wmi_services()
187 name, enabled ? "enabled" : "-"); in ath10k_read_wmi_services()
189 spin_unlock_bh(&ar->data_lock); in ath10k_read_wmi_services()
193 mutex_unlock(&ar->conf_mutex); in ath10k_read_wmi_services()
211 list_del(&i->list); in ath10k_fw_stats_pdevs_free()
221 list_del(&i->list); in ath10k_fw_stats_vdevs_free()
231 list_del(&i->list); in ath10k_fw_stats_peers_free()
241 list_del(&i->list); in ath10k_fw_extd_stats_peers_free()
248 spin_lock_bh(&ar->data_lock); in ath10k_debug_fw_stats_reset()
249 ar->debug.fw_stats_done = false; in ath10k_debug_fw_stats_reset()
250 ar->debug.fw_stats.extended = false; in ath10k_debug_fw_stats_reset()
251 ath10k_fw_stats_pdevs_free(&ar->debug.fw_stats.pdevs); in ath10k_debug_fw_stats_reset()
252 ath10k_fw_stats_vdevs_free(&ar->debug.fw_stats.vdevs); in ath10k_debug_fw_stats_reset()
253 ath10k_fw_stats_peers_free(&ar->debug.fw_stats.peers); in ath10k_debug_fw_stats_reset()
254 ath10k_fw_extd_stats_peers_free(&ar->debug.fw_stats.peers_extd); in ath10k_debug_fw_stats_reset()
255 spin_unlock_bh(&ar->data_lock); in ath10k_debug_fw_stats_reset()
271 spin_lock_bh(&ar->data_lock); in ath10k_debug_fw_stats_process()
278 /* Stat data may exceed htc-wmi buffer limit. In such case firmware in ath10k_debug_fw_stats_process()
279 * splits the stats data and delivers it in a ping-pong fashion of in ath10k_debug_fw_stats_process()
280 * request cmd-update event. in ath10k_debug_fw_stats_process()
282 * However there is no explicit end-of-data. Instead start-of-data is in ath10k_debug_fw_stats_process()
284 * a) discard stat update events until one with pdev stats is in ath10k_debug_fw_stats_process()
285 * delivered - this skips session started at end of (b) in ath10k_debug_fw_stats_process()
287 * delivered which is treated as end-of-data and is itself discarded in ath10k_debug_fw_stats_process()
292 if (ar->debug.fw_stats_done) { in ath10k_debug_fw_stats_process()
299 num_peers = list_count_nodes(&ar->debug.fw_stats.peers); in ath10k_debug_fw_stats_process()
300 num_vdevs = list_count_nodes(&ar->debug.fw_stats.vdevs); in ath10k_debug_fw_stats_process()
301 is_start = (list_empty(&ar->debug.fw_stats.pdevs) && in ath10k_debug_fw_stats_process()
303 is_end = (!list_empty(&ar->debug.fw_stats.pdevs) && in ath10k_debug_fw_stats_process()
307 list_splice_tail_init(&stats.pdevs, &ar->debug.fw_stats.pdevs); in ath10k_debug_fw_stats_process()
310 ar->debug.fw_stats_done = true; in ath10k_debug_fw_stats_process()
313 ar->debug.fw_stats.extended = true; in ath10k_debug_fw_stats_process()
315 is_started = !list_empty(&ar->debug.fw_stats.pdevs); in ath10k_debug_fw_stats_process()
319 /* Although this is unlikely impose a sane limit to in ath10k_debug_fw_stats_process()
320 * prevent firmware from DoS-ing the host. in ath10k_debug_fw_stats_process()
322 ath10k_fw_stats_peers_free(&ar->debug.fw_stats.peers); in ath10k_debug_fw_stats_process()
323 ath10k_fw_extd_stats_peers_free(&ar->debug.fw_stats.peers_extd); in ath10k_debug_fw_stats_process()
329 ath10k_fw_stats_vdevs_free(&ar->debug.fw_stats.vdevs); in ath10k_debug_fw_stats_process()
336 &ar->debug.fw_stats.peers_extd); in ath10k_debug_fw_stats_process()
338 list_splice_tail_init(&stats.peers, &ar->debug.fw_stats.peers); in ath10k_debug_fw_stats_process()
339 list_splice_tail_init(&stats.vdevs, &ar->debug.fw_stats.vdevs); in ath10k_debug_fw_stats_process()
342 complete(&ar->debug.fw_stats_complete); in ath10k_debug_fw_stats_process()
353 spin_unlock_bh(&ar->data_lock); in ath10k_debug_fw_stats_process()
361 lockdep_assert_held(&ar->conf_mutex); in ath10k_debug_fw_stats_request()
369 return -ETIMEDOUT; in ath10k_debug_fw_stats_request()
371 reinit_completion(&ar->debug.fw_stats_complete); in ath10k_debug_fw_stats_request()
373 ret = ath10k_wmi_request_stats(ar, ar->fw_stats_req_mask); in ath10k_debug_fw_stats_request()
380 wait_for_completion_timeout(&ar->debug.fw_stats_complete, in ath10k_debug_fw_stats_request()
383 return -ETIMEDOUT; in ath10k_debug_fw_stats_request()
385 spin_lock_bh(&ar->data_lock); in ath10k_debug_fw_stats_request()
386 if (ar->debug.fw_stats_done) { in ath10k_debug_fw_stats_request()
387 spin_unlock_bh(&ar->data_lock); in ath10k_debug_fw_stats_request()
390 spin_unlock_bh(&ar->data_lock); in ath10k_debug_fw_stats_request()
398 struct ath10k *ar = inode->i_private; in ath10k_fw_stats_open()
402 mutex_lock(&ar->conf_mutex); in ath10k_fw_stats_open()
404 if (ar->state != ATH10K_STATE_ON) { in ath10k_fw_stats_open()
405 ret = -ENETDOWN; in ath10k_fw_stats_open()
411 ret = -ENOMEM; in ath10k_fw_stats_open()
421 ret = ath10k_wmi_fw_stats_fill(ar, &ar->debug.fw_stats, buf); in ath10k_fw_stats_open()
427 file->private_data = buf; in ath10k_fw_stats_open()
429 mutex_unlock(&ar->conf_mutex); in ath10k_fw_stats_open()
436 mutex_unlock(&ar->conf_mutex); in ath10k_fw_stats_open()
442 vfree(file->private_data); in ath10k_fw_stats_release()
450 const char *buf = file->private_data; in ath10k_fw_stats_read()
468 struct ath10k *ar = file->private_data; in ath10k_debug_fw_reset_stats_read()
475 return -ENOMEM; in ath10k_debug_fw_reset_stats_read()
477 spin_lock_bh(&ar->data_lock); in ath10k_debug_fw_reset_stats_read()
479 len += scnprintf(buf + len, buf_len - len, in ath10k_debug_fw_reset_stats_read()
480 "fw_crash_counter\t\t%d\n", ar->stats.fw_crash_counter); in ath10k_debug_fw_reset_stats_read()
481 len += scnprintf(buf + len, buf_len - len, in ath10k_debug_fw_reset_stats_read()
483 ar->stats.fw_warm_reset_counter); in ath10k_debug_fw_reset_stats_read()
484 len += scnprintf(buf + len, buf_len - len, in ath10k_debug_fw_reset_stats_read()
486 ar->stats.fw_cold_reset_counter); in ath10k_debug_fw_reset_stats_read()
488 spin_unlock_bh(&ar->data_lock); in ath10k_debug_fw_reset_stats_read()
504 /* This is a clean assert crash in firmware. */
512 return -ENOMEM; in ath10k_debug_fw_assert()
514 cmd = (struct wmi_vdev_install_key_cmd *)skb->data; in ath10k_debug_fw_assert()
518 cmd->vdev_id = __cpu_to_le32(0x7ffe); in ath10k_debug_fw_assert()
521 ar->wmi.cmd->vdev_install_key_cmdid); in ath10k_debug_fw_assert()
530 "`soft` - this will send WMI_FORCE_FW_HANG_ASSERT to firmware if FW supports that command.\n" in ath10k_read_simulate_fw_crash()
531 "`hard` - this will send to firmware command with illegal parameters causing firmware crash.\n" in ath10k_read_simulate_fw_crash()
532 …"`assert` - this will send special illegal parameter to firmware to cause assert failure and crash… in ath10k_read_simulate_fw_crash()
533 "`hw-restart` - this will simply queue hw restart without fw/hw actually crashing.\n"; in ath10k_read_simulate_fw_crash()
549 struct ath10k *ar = file->private_data; in ath10k_write_simulate_fw_crash()
556 return -EINVAL; in ath10k_write_simulate_fw_crash()
558 rc = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, user_buf, count); in ath10k_write_simulate_fw_crash()
563 if (buf[*ppos - 1] == '\n') in ath10k_write_simulate_fw_crash()
564 buf[*ppos - 1] = '\0'; in ath10k_write_simulate_fw_crash()
566 mutex_lock(&ar->conf_mutex); in ath10k_write_simulate_fw_crash()
568 if (ar->state != ATH10K_STATE_ON && in ath10k_write_simulate_fw_crash()
569 ar->state != ATH10K_STATE_RESTARTED) { in ath10k_write_simulate_fw_crash()
570 ret = -ENETDOWN; in ath10k_write_simulate_fw_crash()
580 * firmware variants in order to force a firmware crash. in ath10k_write_simulate_fw_crash()
583 ar->wmi.vdev_param->rts_threshold, in ath10k_write_simulate_fw_crash()
588 } else if (!strcmp(buf, "hw-restart")) { in ath10k_write_simulate_fw_crash()
589 ath10k_info(ar, "user requested hw restart\n"); in ath10k_write_simulate_fw_crash()
593 ret = -EINVAL; in ath10k_write_simulate_fw_crash()
605 mutex_unlock(&ar->conf_mutex); in ath10k_write_simulate_fw_crash()
620 struct ath10k *ar = file->private_data; in ath10k_read_chip_id()
624 len = scnprintf(buf, sizeof(buf), "0x%08x\n", ar->bus_param.chip_id); in ath10k_read_chip_id()
640 struct ath10k *ar = file->private_data; in ath10k_reg_addr_read()
645 mutex_lock(&ar->conf_mutex); in ath10k_reg_addr_read()
646 reg_addr = ar->debug.reg_addr; in ath10k_reg_addr_read()
647 mutex_unlock(&ar->conf_mutex); in ath10k_reg_addr_read()
649 len += scnprintf(buf + len, sizeof(buf) - len, "0x%x\n", reg_addr); in ath10k_reg_addr_read()
658 struct ath10k *ar = file->private_data; in ath10k_reg_addr_write()
667 return -EFAULT; in ath10k_reg_addr_write()
669 mutex_lock(&ar->conf_mutex); in ath10k_reg_addr_write()
670 ar->debug.reg_addr = reg_addr; in ath10k_reg_addr_write()
671 mutex_unlock(&ar->conf_mutex); in ath10k_reg_addr_write()
688 struct ath10k *ar = file->private_data; in ath10k_reg_value_read()
694 mutex_lock(&ar->conf_mutex); in ath10k_reg_value_read()
696 if (ar->state != ATH10K_STATE_ON && in ath10k_reg_value_read()
697 ar->state != ATH10K_STATE_UTF) { in ath10k_reg_value_read()
698 ret = -ENETDOWN; in ath10k_reg_value_read()
702 reg_addr = ar->debug.reg_addr; in ath10k_reg_value_read()
710 mutex_unlock(&ar->conf_mutex); in ath10k_reg_value_read()
719 struct ath10k *ar = file->private_data; in ath10k_reg_value_write()
723 mutex_lock(&ar->conf_mutex); in ath10k_reg_value_write()
725 if (ar->state != ATH10K_STATE_ON && in ath10k_reg_value_write()
726 ar->state != ATH10K_STATE_UTF) { in ath10k_reg_value_write()
727 ret = -ENETDOWN; in ath10k_reg_value_write()
731 reg_addr = ar->debug.reg_addr; in ath10k_reg_value_write()
742 mutex_unlock(&ar->conf_mutex); in ath10k_reg_value_write()
759 struct ath10k *ar = file->private_data; in ath10k_mem_value_read()
764 return -EINVAL; in ath10k_mem_value_read()
769 mutex_lock(&ar->conf_mutex); in ath10k_mem_value_read()
773 ret = -ENOMEM; in ath10k_mem_value_read()
777 if (ar->state != ATH10K_STATE_ON && in ath10k_mem_value_read()
778 ar->state != ATH10K_STATE_UTF) { in ath10k_mem_value_read()
779 ret = -ENETDOWN; in ath10k_mem_value_read()
792 ret = -EFAULT; in ath10k_mem_value_read()
796 count -= ret; in ath10k_mem_value_read()
802 mutex_unlock(&ar->conf_mutex); in ath10k_mem_value_read()
811 struct ath10k *ar = file->private_data; in ath10k_mem_value_write()
816 return -EINVAL; in ath10k_mem_value_write()
821 mutex_lock(&ar->conf_mutex); in ath10k_mem_value_write()
825 ret = -ENOMEM; in ath10k_mem_value_write()
829 if (ar->state != ATH10K_STATE_ON && in ath10k_mem_value_write()
830 ar->state != ATH10K_STATE_UTF) { in ath10k_mem_value_write()
831 ret = -ENETDOWN; in ath10k_mem_value_write()
837 ret = -EFAULT; in ath10k_mem_value_write()
853 mutex_unlock(&ar->conf_mutex); in ath10k_mem_value_write()
871 lockdep_assert_held(&ar->conf_mutex); in ath10k_debug_htt_stats_req()
873 if (ar->debug.htt_stats_mask == 0) in ath10k_debug_htt_stats_req()
877 if (ar->state != ATH10K_STATE_ON) in ath10k_debug_htt_stats_req()
882 ret = ath10k_htt_h2t_stats_req(&ar->htt, ar->debug.htt_stats_mask, in ath10k_debug_htt_stats_req()
883 ar->debug.reset_htt_stats, cookie); in ath10k_debug_htt_stats_req()
889 queue_delayed_work(ar->workqueue, &ar->debug.htt_stats_dwork, in ath10k_debug_htt_stats_req()
900 mutex_lock(&ar->conf_mutex); in ath10k_debug_htt_stats_dwork()
904 mutex_unlock(&ar->conf_mutex); in ath10k_debug_htt_stats_dwork()
911 struct ath10k *ar = file->private_data; in ath10k_read_htt_stats_mask()
915 len = scnprintf(buf, sizeof(buf), "%lu\n", ar->debug.htt_stats_mask); in ath10k_read_htt_stats_mask()
924 struct ath10k *ar = file->private_data; in ath10k_write_htt_stats_mask()
934 return -E2BIG; in ath10k_write_htt_stats_mask()
936 mutex_lock(&ar->conf_mutex); in ath10k_write_htt_stats_mask()
938 ar->debug.htt_stats_mask = mask; in ath10k_write_htt_stats_mask()
947 mutex_unlock(&ar->conf_mutex); in ath10k_write_htt_stats_mask()
964 struct ath10k *ar = file->private_data; in ath10k_read_htt_max_amsdu_ampdu()
969 mutex_lock(&ar->conf_mutex); in ath10k_read_htt_max_amsdu_ampdu()
971 amsdu = ar->htt.max_num_amsdu; in ath10k_read_htt_max_amsdu_ampdu()
972 ampdu = ar->htt.max_num_ampdu; in ath10k_read_htt_max_amsdu_ampdu()
973 mutex_unlock(&ar->conf_mutex); in ath10k_read_htt_max_amsdu_ampdu()
984 struct ath10k *ar = file->private_data; in ath10k_write_htt_max_amsdu_ampdu()
989 res = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, in ath10k_write_htt_max_amsdu_ampdu()
997 return -EINVAL; in ath10k_write_htt_max_amsdu_ampdu()
999 mutex_lock(&ar->conf_mutex); in ath10k_write_htt_max_amsdu_ampdu()
1001 res = ath10k_htt_h2t_aggr_cfg_msg(&ar->htt, ampdu, amsdu); in ath10k_write_htt_max_amsdu_ampdu()
1006 ar->htt.max_num_amsdu = amsdu; in ath10k_write_htt_max_amsdu_ampdu()
1007 ar->htt.max_num_ampdu = ampdu; in ath10k_write_htt_max_amsdu_ampdu()
1010 mutex_unlock(&ar->conf_mutex); in ath10k_write_htt_max_amsdu_ampdu()
1026 struct ath10k *ar = file->private_data; in ath10k_read_fw_dbglog()
1031 ar->debug.fw_dbglog_mask, ar->debug.fw_dbglog_level); in ath10k_read_fw_dbglog()
1040 struct ath10k *ar = file->private_data; in ath10k_write_fw_dbglog()
1046 ret = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, in ath10k_write_fw_dbglog()
1054 return -EINVAL; in ath10k_write_fw_dbglog()
1060 mutex_lock(&ar->conf_mutex); in ath10k_write_fw_dbglog()
1062 ar->debug.fw_dbglog_mask = mask; in ath10k_write_fw_dbglog()
1063 ar->debug.fw_dbglog_level = log_level; in ath10k_write_fw_dbglog()
1065 if (ar->state == ATH10K_STATE_ON) { in ath10k_write_fw_dbglog()
1066 ret = ath10k_wmi_dbglog_cfg(ar, ar->debug.fw_dbglog_mask, in ath10k_write_fw_dbglog()
1067 ar->debug.fw_dbglog_level); in ath10k_write_fw_dbglog()
1078 mutex_unlock(&ar->conf_mutex); in ath10k_write_fw_dbglog()
1141 void ath10k_debug_get_et_strings(struct ieee80211_hw *hw, in ath10k_debug_get_et_strings() argument
1150 int ath10k_debug_get_et_sset_count(struct ieee80211_hw *hw, in ath10k_debug_get_et_sset_count() argument
1159 void ath10k_debug_get_et_stats(struct ieee80211_hw *hw, in ath10k_debug_get_et_stats() argument
1163 struct ath10k *ar = hw->priv; in ath10k_debug_get_et_stats()
1168 mutex_lock(&ar->conf_mutex); in ath10k_debug_get_et_stats()
1170 if (ar->state == ATH10K_STATE_ON) { in ath10k_debug_get_et_stats()
1173 /* just print a warning and try to use older results */ in ath10k_debug_get_et_stats()
1180 pdev_stats = list_first_entry_or_null(&ar->debug.fw_stats.pdevs, in ath10k_debug_get_et_stats()
1188 spin_lock_bh(&ar->data_lock); in ath10k_debug_get_et_stats()
1190 data[i++] = pdev_stats->hw_reaped; /* ppdu reaped */ in ath10k_debug_get_et_stats()
1192 data[i++] = pdev_stats->htt_mpdus; in ath10k_debug_get_et_stats()
1194 data[i++] = pdev_stats->ch_noise_floor; in ath10k_debug_get_et_stats()
1195 data[i++] = pdev_stats->cycle_count; in ath10k_debug_get_et_stats()
1196 data[i++] = pdev_stats->phy_err_count; in ath10k_debug_get_et_stats()
1197 data[i++] = pdev_stats->rts_bad; in ath10k_debug_get_et_stats()
1198 data[i++] = pdev_stats->rts_good; in ath10k_debug_get_et_stats()
1199 data[i++] = pdev_stats->chan_tx_power; in ath10k_debug_get_et_stats()
1200 data[i++] = pdev_stats->fcs_bad; in ath10k_debug_get_et_stats()
1201 data[i++] = ar->stats.rx_crc_err_drop; in ath10k_debug_get_et_stats()
1202 data[i++] = pdev_stats->no_beacons; in ath10k_debug_get_et_stats()
1203 data[i++] = pdev_stats->mpdu_enqued; in ath10k_debug_get_et_stats()
1204 data[i++] = pdev_stats->msdu_enqued; in ath10k_debug_get_et_stats()
1205 data[i++] = pdev_stats->wmm_drop; in ath10k_debug_get_et_stats()
1206 data[i++] = pdev_stats->local_enqued; in ath10k_debug_get_et_stats()
1207 data[i++] = pdev_stats->local_freed; in ath10k_debug_get_et_stats()
1208 data[i++] = pdev_stats->hw_queued; in ath10k_debug_get_et_stats()
1209 data[i++] = pdev_stats->hw_reaped; in ath10k_debug_get_et_stats()
1210 data[i++] = pdev_stats->underrun; in ath10k_debug_get_et_stats()
1211 data[i++] = pdev_stats->tx_abort; in ath10k_debug_get_et_stats()
1212 data[i++] = pdev_stats->mpdus_requeued; in ath10k_debug_get_et_stats()
1213 data[i++] = pdev_stats->tx_ko; in ath10k_debug_get_et_stats()
1214 data[i++] = pdev_stats->data_rc; in ath10k_debug_get_et_stats()
1215 data[i++] = pdev_stats->sw_retry_failure; in ath10k_debug_get_et_stats()
1216 data[i++] = pdev_stats->illgl_rate_phy_err; in ath10k_debug_get_et_stats()
1217 data[i++] = pdev_stats->pdev_cont_xretry; in ath10k_debug_get_et_stats()
1218 data[i++] = pdev_stats->pdev_tx_timeout; in ath10k_debug_get_et_stats()
1219 data[i++] = pdev_stats->txop_ovf; in ath10k_debug_get_et_stats()
1220 data[i++] = pdev_stats->pdev_resets; in ath10k_debug_get_et_stats()
1221 data[i++] = pdev_stats->mid_ppdu_route_change; in ath10k_debug_get_et_stats()
1222 data[i++] = pdev_stats->status_rcvd; in ath10k_debug_get_et_stats()
1223 data[i++] = pdev_stats->r0_frags; in ath10k_debug_get_et_stats()
1224 data[i++] = pdev_stats->r1_frags; in ath10k_debug_get_et_stats()
1225 data[i++] = pdev_stats->r2_frags; in ath10k_debug_get_et_stats()
1226 data[i++] = pdev_stats->r3_frags; in ath10k_debug_get_et_stats()
1227 data[i++] = pdev_stats->htt_msdus; in ath10k_debug_get_et_stats()
1228 data[i++] = pdev_stats->htt_mpdus; in ath10k_debug_get_et_stats()
1229 data[i++] = pdev_stats->loc_msdus; in ath10k_debug_get_et_stats()
1230 data[i++] = pdev_stats->loc_mpdus; in ath10k_debug_get_et_stats()
1231 data[i++] = pdev_stats->phy_errs; in ath10k_debug_get_et_stats()
1232 data[i++] = pdev_stats->phy_err_drop; in ath10k_debug_get_et_stats()
1233 data[i++] = pdev_stats->mpdu_errs; in ath10k_debug_get_et_stats()
1234 data[i++] = ar->stats.fw_crash_counter; in ath10k_debug_get_et_stats()
1235 data[i++] = ar->stats.fw_warm_reset_counter; in ath10k_debug_get_et_stats()
1236 data[i++] = ar->stats.fw_cold_reset_counter; in ath10k_debug_get_et_stats()
1238 spin_unlock_bh(&ar->data_lock); in ath10k_debug_get_et_stats()
1240 mutex_unlock(&ar->conf_mutex); in ath10k_debug_get_et_stats()
1259 lockdep_assert_held(&ar->conf_mutex); in ath10k_debug_cal_data_fetch()
1261 if (WARN_ON(ar->hw_params.cal_data_len > ATH10K_DEBUG_CAL_DATA_LEN)) in ath10k_debug_cal_data_fetch()
1262 return -EINVAL; in ath10k_debug_cal_data_fetch()
1264 if (ar->hw_params.cal_data_len == 0) in ath10k_debug_cal_data_fetch()
1265 return -EOPNOTSUPP; in ath10k_debug_cal_data_fetch()
1276 ret = ath10k_hif_diag_read(ar, le32_to_cpu(addr), ar->debug.cal_data, in ath10k_debug_cal_data_fetch()
1277 ar->hw_params.cal_data_len); in ath10k_debug_cal_data_fetch()
1288 struct ath10k *ar = inode->i_private; in ath10k_debug_cal_data_open()
1290 mutex_lock(&ar->conf_mutex); in ath10k_debug_cal_data_open()
1292 if (ar->state == ATH10K_STATE_ON || in ath10k_debug_cal_data_open()
1293 ar->state == ATH10K_STATE_UTF) { in ath10k_debug_cal_data_open()
1297 file->private_data = ar; in ath10k_debug_cal_data_open()
1298 mutex_unlock(&ar->conf_mutex); in ath10k_debug_cal_data_open()
1307 struct ath10k *ar = file->private_data; in ath10k_debug_cal_data_read()
1309 mutex_lock(&ar->conf_mutex); in ath10k_debug_cal_data_read()
1312 ar->debug.cal_data, in ath10k_debug_cal_data_read()
1313 ar->hw_params.cal_data_len); in ath10k_debug_cal_data_read()
1315 mutex_unlock(&ar->conf_mutex); in ath10k_debug_cal_data_read()
1324 struct ath10k *ar = file->private_data; in ath10k_write_ani_enable()
1329 return -EINVAL; in ath10k_write_ani_enable()
1331 mutex_lock(&ar->conf_mutex); in ath10k_write_ani_enable()
1333 if (ar->ani_enabled == enable) { in ath10k_write_ani_enable()
1338 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->ani_enable, in ath10k_write_ani_enable()
1344 ar->ani_enabled = enable; in ath10k_write_ani_enable()
1349 mutex_unlock(&ar->conf_mutex); in ath10k_write_ani_enable()
1357 struct ath10k *ar = file->private_data; in ath10k_read_ani_enable()
1361 len = scnprintf(buf, sizeof(buf), "%d\n", ar->ani_enabled); in ath10k_read_ani_enable()
1385 struct ath10k *ar = file->private_data; in ath10k_read_nf_cal_period()
1389 len = scnprintf(buf, sizeof(buf), "%d\n", ar->debug.nf_cal_period); in ath10k_read_nf_cal_period()
1398 struct ath10k *ar = file->private_data; in ath10k_write_nf_cal_period()
1407 return -EINVAL; in ath10k_write_nf_cal_period()
1411 return -EINVAL; in ath10k_write_nf_cal_period()
1413 mutex_lock(&ar->conf_mutex); in ath10k_write_nf_cal_period()
1415 ar->debug.nf_cal_period = period; in ath10k_write_nf_cal_period()
1417 if (ar->state != ATH10K_STATE_ON) { in ath10k_write_nf_cal_period()
1423 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->cal_period, in ath10k_write_nf_cal_period()
1424 ar->debug.nf_cal_period); in ath10k_write_nf_cal_period()
1426 ath10k_warn(ar, "cal period cfg failed from debugfs: %d\n", in ath10k_write_nf_cal_period()
1434 mutex_unlock(&ar->conf_mutex); in ath10k_write_nf_cal_period()
1454 lockdep_assert_held(&ar->conf_mutex); in ath10k_debug_tpc_stats_request()
1456 reinit_completion(&ar->debug.tpc_complete); in ath10k_debug_tpc_stats_request()
1464 time_left = wait_for_completion_timeout(&ar->debug.tpc_complete, in ath10k_debug_tpc_stats_request()
1467 return -ETIMEDOUT; in ath10k_debug_tpc_stats_request()
1475 spin_lock_bh(&ar->data_lock); in ath10k_debug_tpc_stats_process()
1477 kfree(ar->debug.tpc_stats); in ath10k_debug_tpc_stats_process()
1478 ar->debug.tpc_stats = tpc_stats; in ath10k_debug_tpc_stats_process()
1479 complete(&ar->debug.tpc_complete); in ath10k_debug_tpc_stats_process()
1481 spin_unlock_bh(&ar->data_lock); in ath10k_debug_tpc_stats_process()
1488 spin_lock_bh(&ar->data_lock); in ath10k_debug_tpc_stats_final_process()
1490 kfree(ar->debug.tpc_stats_final); in ath10k_debug_tpc_stats_final_process()
1491 ar->debug.tpc_stats_final = tpc_stats; in ath10k_debug_tpc_stats_final_process()
1492 complete(&ar->debug.tpc_complete); in ath10k_debug_tpc_stats_final_process()
1494 spin_unlock_bh(&ar->data_lock); in ath10k_debug_tpc_stats_final_process()
1515 *len += scnprintf(buf + *len, buf_len - *len, in ath10k_tpc_stats_print()
1517 *len += scnprintf(buf + *len, buf_len - *len, in ath10k_tpc_stats_print()
1520 *len += scnprintf(buf + *len, buf_len - *len, in ath10k_tpc_stats_print()
1522 *len += scnprintf(buf + *len, buf_len - *len, in ath10k_tpc_stats_print()
1525 for (i = 0; i < tpc_stats->num_tx_chain; i++) in ath10k_tpc_stats_print()
1526 *len += scnprintf(buf + *len, buf_len - *len, in ath10k_tpc_stats_print()
1529 *len += scnprintf(buf + *len, buf_len - *len, "\n"); in ath10k_tpc_stats_print()
1531 for (i = 0; i < tpc_stats->rate_max; i++) { in ath10k_tpc_stats_print()
1532 *len += scnprintf(buf + *len, buf_len - *len, in ath10k_tpc_stats_print()
1534 pream_str[tpc_stats->tpc_table[j].pream_idx[i]], in ath10k_tpc_stats_print()
1535 tpc_stats->tpc_table[j].rate_code[i], in ath10k_tpc_stats_print()
1536 tpc_stats->tpc_table[j].tpc_value[i]); in ath10k_tpc_stats_print()
1539 *len += scnprintf(buf + *len, buf_len - *len, in ath10k_tpc_stats_print()
1553 spin_lock_bh(&ar->data_lock); in ath10k_tpc_stats_fill()
1560 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_tpc_stats_fill()
1561 len += scnprintf(buf + len, buf_len - len, in ath10k_tpc_stats_fill()
1563 len += scnprintf(buf + len, buf_len - len, in ath10k_tpc_stats_fill()
1565 tpc_stats->chan_freq, in ath10k_tpc_stats_fill()
1566 tpc_stats->phy_mode); in ath10k_tpc_stats_fill()
1567 len += scnprintf(buf + len, buf_len - len, in ath10k_tpc_stats_fill()
1569 len += scnprintf(buf + len, buf_len - len, in ath10k_tpc_stats_fill()
1571 tpc_stats->ctl, in ath10k_tpc_stats_fill()
1572 tpc_stats->reg_domain); in ath10k_tpc_stats_fill()
1573 len += scnprintf(buf + len, buf_len - len, in ath10k_tpc_stats_fill()
1575 tpc_stats->twice_antenna_gain, in ath10k_tpc_stats_fill()
1576 tpc_stats->twice_antenna_reduction); in ath10k_tpc_stats_fill()
1577 len += scnprintf(buf + len, buf_len - len, in ath10k_tpc_stats_fill()
1579 tpc_stats->power_limit, in ath10k_tpc_stats_fill()
1580 tpc_stats->twice_max_rd_power / 2); in ath10k_tpc_stats_fill()
1581 len += scnprintf(buf + len, buf_len - len, in ath10k_tpc_stats_fill()
1583 tpc_stats->num_tx_chain, in ath10k_tpc_stats_fill()
1584 tpc_stats->rate_max); in ath10k_tpc_stats_fill()
1589 if (tpc_stats->flag[j] == ATH10K_TPC_TABLE_TYPE_FLAG) { in ath10k_tpc_stats_fill()
1590 len += scnprintf(buf + len, buf_len - len, in ath10k_tpc_stats_fill()
1598 if (tpc_stats->flag[j] == ATH10K_TPC_TABLE_TYPE_FLAG) { in ath10k_tpc_stats_fill()
1599 len += scnprintf(buf + len, buf_len - len, in ath10k_tpc_stats_fill()
1607 if (tpc_stats->flag[j] == ATH10K_TPC_TABLE_TYPE_FLAG) { in ath10k_tpc_stats_fill()
1608 len += scnprintf(buf + len, buf_len - len, in ath10k_tpc_stats_fill()
1616 len += scnprintf(buf + len, buf_len - len, in ath10k_tpc_stats_fill()
1623 spin_unlock_bh(&ar->data_lock); in ath10k_tpc_stats_fill()
1626 buf[len - 1] = 0; in ath10k_tpc_stats_fill()
1633 struct ath10k *ar = inode->i_private; in ath10k_tpc_stats_open()
1637 mutex_lock(&ar->conf_mutex); in ath10k_tpc_stats_open()
1639 if (ar->state != ATH10K_STATE_ON) { in ath10k_tpc_stats_open()
1640 ret = -ENETDOWN; in ath10k_tpc_stats_open()
1646 ret = -ENOMEM; in ath10k_tpc_stats_open()
1657 ath10k_tpc_stats_fill(ar, ar->debug.tpc_stats, buf); in ath10k_tpc_stats_open()
1658 file->private_data = buf; in ath10k_tpc_stats_open()
1660 mutex_unlock(&ar->conf_mutex); in ath10k_tpc_stats_open()
1667 mutex_unlock(&ar->conf_mutex); in ath10k_tpc_stats_open()
1673 vfree(file->private_data); in ath10k_tpc_stats_release()
1681 const char *buf = file->private_data; in ath10k_tpc_stats_read()
1699 lockdep_assert_held(&ar->conf_mutex); in ath10k_debug_start()
1707 if (ar->debug.fw_dbglog_mask) { in ath10k_debug_start()
1708 ret = ath10k_wmi_dbglog_cfg(ar, ar->debug.fw_dbglog_mask, in ath10k_debug_start()
1716 if (ar->pktlog_filter) { in ath10k_debug_start()
1718 ar->pktlog_filter); in ath10k_debug_start()
1723 ar->pktlog_filter, ret); in ath10k_debug_start()
1731 if (ar->debug.nf_cal_period && in ath10k_debug_start()
1733 ar->normal_mode_fw.fw_file.fw_features)) { in ath10k_debug_start()
1735 ar->wmi.pdev_param->cal_period, in ath10k_debug_start()
1736 ar->debug.nf_cal_period); in ath10k_debug_start()
1739 ath10k_warn(ar, "cal period cfg failed from debug start: %d\n", in ath10k_debug_start()
1748 lockdep_assert_held(&ar->conf_mutex); in ath10k_debug_stop()
1751 ar->normal_mode_fw.fw_file.fw_features)) in ath10k_debug_stop()
1758 if (ar->debug.htt_stats_mask != 0) in ath10k_debug_stop()
1759 cancel_delayed_work(&ar->debug.htt_stats_dwork); in ath10k_debug_stop()
1768 struct ath10k *ar = file->private_data; in ath10k_write_simulate_radar()
1775 arvif = list_first_entry(&ar->arvifs, typeof(*arvif), list); in ath10k_write_simulate_radar()
1776 if (!arvif->is_started) in ath10k_write_simulate_radar()
1777 return -EINVAL; in ath10k_write_simulate_radar()
1779 ieee80211_radar_detected(ar->hw, NULL); in ath10k_write_simulate_radar()
1792 len += scnprintf(buf + len, size - len, "%-28s : %10u\n", s, \
1793 ar->debug.dfs_stats.p))
1796 len += scnprintf(buf + len, size - len, "%-28s : %10u\n", s, \
1797 ar->debug.dfs_pool_stats.p))
1804 struct ath10k *ar = file->private_data; in ath10k_read_dfs_stats()
1809 return -ENOMEM; in ath10k_read_dfs_stats()
1811 if (!ar->dfs_detector) { in ath10k_read_dfs_stats()
1812 len += scnprintf(buf + len, size - len, "DFS not enabled\n"); in ath10k_read_dfs_stats()
1816 ar->debug.dfs_pool_stats = in ath10k_read_dfs_stats()
1817 ar->dfs_detector->get_stats(ar->dfs_detector); in ath10k_read_dfs_stats()
1819 len += scnprintf(buf + len, size - len, "Pulse detector statistics:\n"); in ath10k_read_dfs_stats()
1827 len += scnprintf(buf + len, size - len, "Global Pool statistics:\n"); in ath10k_read_dfs_stats()
1857 struct ath10k *ar = file->private_data; in ath10k_write_pktlog_filter()
1862 return -EINVAL; in ath10k_write_pktlog_filter()
1864 mutex_lock(&ar->conf_mutex); in ath10k_write_pktlog_filter()
1866 if (ar->state != ATH10K_STATE_ON) { in ath10k_write_pktlog_filter()
1867 ar->pktlog_filter = filter; in ath10k_write_pktlog_filter()
1872 if (filter == ar->pktlog_filter) { in ath10k_write_pktlog_filter()
1881 ar->pktlog_filter, ret); in ath10k_write_pktlog_filter()
1892 ar->pktlog_filter = filter; in ath10k_write_pktlog_filter()
1896 mutex_unlock(&ar->conf_mutex); in ath10k_write_pktlog_filter()
1904 struct ath10k *ar = file->private_data; in ath10k_read_pktlog_filter()
1907 mutex_lock(&ar->conf_mutex); in ath10k_read_pktlog_filter()
1908 len = scnprintf(buf, sizeof(buf) - len, "%08x\n", in ath10k_read_pktlog_filter()
1909 ar->pktlog_filter); in ath10k_read_pktlog_filter()
1910 mutex_unlock(&ar->conf_mutex); in ath10k_read_pktlog_filter()
1925 struct ath10k *ar = file->private_data; in ath10k_write_quiet_period()
1929 return -EINVAL; in ath10k_write_quiet_period()
1934 return -EINVAL; in ath10k_write_quiet_period()
1936 mutex_lock(&ar->conf_mutex); in ath10k_write_quiet_period()
1937 ar->thermal.quiet_period = period; in ath10k_write_quiet_period()
1939 mutex_unlock(&ar->conf_mutex); in ath10k_write_quiet_period()
1948 struct ath10k *ar = file->private_data; in ath10k_read_quiet_period()
1951 mutex_lock(&ar->conf_mutex); in ath10k_read_quiet_period()
1952 len = scnprintf(buf, sizeof(buf) - len, "%d\n", in ath10k_read_quiet_period()
1953 ar->thermal.quiet_period); in ath10k_read_quiet_period()
1954 mutex_unlock(&ar->conf_mutex); in ath10k_read_quiet_period()
1969 struct ath10k *ar = file->private_data; in ath10k_write_btcoex()
1978 if (!ar->coex_support) in ath10k_write_btcoex()
1979 return -EOPNOTSUPP; in ath10k_write_btcoex()
1981 mutex_lock(&ar->conf_mutex); in ath10k_write_btcoex()
1983 if (ar->state != ATH10K_STATE_ON && in ath10k_write_btcoex()
1984 ar->state != ATH10K_STATE_RESTARTED) { in ath10k_write_btcoex()
1985 ret = -ENETDOWN; in ath10k_write_btcoex()
1989 if (!(test_bit(ATH10K_FLAG_BTCOEX, &ar->dev_flags) ^ val)) { in ath10k_write_btcoex()
1994 pdev_param = ar->wmi.pdev_param->enable_btcoex; in ath10k_write_btcoex()
1996 ar->running_fw->fw_file.fw_features)) { in ath10k_write_btcoex()
2009 set_bit(ATH10K_FLAG_BTCOEX, &ar->dev_flags); in ath10k_write_btcoex()
2011 clear_bit(ATH10K_FLAG_BTCOEX, &ar->dev_flags); in ath10k_write_btcoex()
2016 mutex_unlock(&ar->conf_mutex); in ath10k_write_btcoex()
2025 struct ath10k *ar = file->private_data; in ath10k_read_btcoex()
2028 mutex_lock(&ar->conf_mutex); in ath10k_read_btcoex()
2029 len = scnprintf(buf, sizeof(buf) - len, "%d\n", in ath10k_read_btcoex()
2030 test_bit(ATH10K_FLAG_BTCOEX, &ar->dev_flags)); in ath10k_read_btcoex()
2031 mutex_unlock(&ar->conf_mutex); in ath10k_read_btcoex()
2046 struct ath10k *ar = file->private_data; in ath10k_write_enable_extd_tx_stats()
2051 return -EINVAL; in ath10k_write_enable_extd_tx_stats()
2053 mutex_lock(&ar->conf_mutex); in ath10k_write_enable_extd_tx_stats()
2055 if (ar->state != ATH10K_STATE_ON) { in ath10k_write_enable_extd_tx_stats()
2056 ar->debug.enable_extd_tx_stats = filter; in ath10k_write_enable_extd_tx_stats()
2061 if (filter == ar->debug.enable_extd_tx_stats) { in ath10k_write_enable_extd_tx_stats()
2066 ar->debug.enable_extd_tx_stats = filter; in ath10k_write_enable_extd_tx_stats()
2070 mutex_unlock(&ar->conf_mutex); in ath10k_write_enable_extd_tx_stats()
2080 struct ath10k *ar = file->private_data; in ath10k_read_enable_extd_tx_stats()
2083 mutex_lock(&ar->conf_mutex); in ath10k_read_enable_extd_tx_stats()
2084 len = scnprintf(buf, sizeof(buf) - len, "%08x\n", in ath10k_read_enable_extd_tx_stats()
2085 ar->debug.enable_extd_tx_stats); in ath10k_read_enable_extd_tx_stats()
2086 mutex_unlock(&ar->conf_mutex); in ath10k_read_enable_extd_tx_stats()
2101 struct ath10k *ar = file->private_data; in ath10k_write_peer_stats()
2109 mutex_lock(&ar->conf_mutex); in ath10k_write_peer_stats()
2111 if (ar->state != ATH10K_STATE_ON && in ath10k_write_peer_stats()
2112 ar->state != ATH10K_STATE_RESTARTED) { in ath10k_write_peer_stats()
2113 ret = -ENETDOWN; in ath10k_write_peer_stats()
2117 if (!(test_bit(ATH10K_FLAG_PEER_STATS, &ar->dev_flags) ^ val)) { in ath10k_write_peer_stats()
2123 set_bit(ATH10K_FLAG_PEER_STATS, &ar->dev_flags); in ath10k_write_peer_stats()
2125 clear_bit(ATH10K_FLAG_PEER_STATS, &ar->dev_flags); in ath10k_write_peer_stats()
2133 mutex_unlock(&ar->conf_mutex); in ath10k_write_peer_stats()
2142 struct ath10k *ar = file->private_data; in ath10k_read_peer_stats()
2145 mutex_lock(&ar->conf_mutex); in ath10k_read_peer_stats()
2146 len = scnprintf(buf, sizeof(buf) - len, "%d\n", in ath10k_read_peer_stats()
2147 test_bit(ATH10K_FLAG_PEER_STATS, &ar->dev_flags)); in ath10k_read_peer_stats()
2148 mutex_unlock(&ar->conf_mutex); in ath10k_read_peer_stats()
2163 struct ath10k *ar = file->private_data; in ath10k_debug_fw_checksums_read()
2170 return -ENOMEM; in ath10k_debug_fw_checksums_read()
2172 mutex_lock(&ar->conf_mutex); in ath10k_debug_fw_checksums_read()
2174 len += scnprintf(buf + len, buf_len - len, in ath10k_debug_fw_checksums_read()
2175 "firmware-N.bin\t\t%08x\n", in ath10k_debug_fw_checksums_read()
2176 crc32_le(0, ar->normal_mode_fw.fw_file.firmware->data, in ath10k_debug_fw_checksums_read()
2177 ar->normal_mode_fw.fw_file.firmware->size)); in ath10k_debug_fw_checksums_read()
2178 len += scnprintf(buf + len, buf_len - len, in ath10k_debug_fw_checksums_read()
2180 crc32_le(0, ar->normal_mode_fw.fw_file.firmware_data, in ath10k_debug_fw_checksums_read()
2181 ar->normal_mode_fw.fw_file.firmware_len)); in ath10k_debug_fw_checksums_read()
2182 len += scnprintf(buf + len, buf_len - len, in ath10k_debug_fw_checksums_read()
2184 crc32_le(0, ar->normal_mode_fw.fw_file.otp_data, in ath10k_debug_fw_checksums_read()
2185 ar->normal_mode_fw.fw_file.otp_len)); in ath10k_debug_fw_checksums_read()
2186 len += scnprintf(buf + len, buf_len - len, in ath10k_debug_fw_checksums_read()
2188 crc32_le(0, ar->normal_mode_fw.fw_file.codeswap_data, in ath10k_debug_fw_checksums_read()
2189 ar->normal_mode_fw.fw_file.codeswap_len)); in ath10k_debug_fw_checksums_read()
2190 len += scnprintf(buf + len, buf_len - len, in ath10k_debug_fw_checksums_read()
2191 "board-N.bin\t\t%08x\n", in ath10k_debug_fw_checksums_read()
2192 crc32_le(0, ar->normal_mode_fw.board->data, in ath10k_debug_fw_checksums_read()
2193 ar->normal_mode_fw.board->size)); in ath10k_debug_fw_checksums_read()
2194 len += scnprintf(buf + len, buf_len - len, in ath10k_debug_fw_checksums_read()
2196 crc32_le(0, ar->normal_mode_fw.board_data, in ath10k_debug_fw_checksums_read()
2197 ar->normal_mode_fw.board_len)); in ath10k_debug_fw_checksums_read()
2201 mutex_unlock(&ar->conf_mutex); in ath10k_debug_fw_checksums_read()
2218 struct ath10k *ar = file->private_data; in ath10k_sta_tid_stats_mask_read()
2222 len = scnprintf(buf, sizeof(buf), "0x%08x\n", ar->sta_tid_stats_mask); in ath10k_sta_tid_stats_mask_read()
2230 struct ath10k *ar = file->private_data; in ath10k_sta_tid_stats_mask_write()
2238 ar->sta_tid_stats_mask = mask; in ath10k_sta_tid_stats_mask_write()
2256 lockdep_assert_held(&ar->conf_mutex); in ath10k_debug_tpc_stats_final_request()
2258 reinit_completion(&ar->debug.tpc_complete); in ath10k_debug_tpc_stats_final_request()
2266 time_left = wait_for_completion_timeout(&ar->debug.tpc_complete, in ath10k_debug_tpc_stats_final_request()
2269 return -ETIMEDOUT; in ath10k_debug_tpc_stats_final_request()
2276 struct ath10k *ar = inode->i_private; in ath10k_tpc_stats_final_open()
2280 mutex_lock(&ar->conf_mutex); in ath10k_tpc_stats_final_open()
2282 if (ar->state != ATH10K_STATE_ON) { in ath10k_tpc_stats_final_open()
2283 ret = -ENETDOWN; in ath10k_tpc_stats_final_open()
2289 ret = -ENOMEM; in ath10k_tpc_stats_final_open()
2300 ath10k_tpc_stats_fill(ar, ar->debug.tpc_stats, buf); in ath10k_tpc_stats_final_open()
2301 file->private_data = buf; in ath10k_tpc_stats_final_open()
2303 mutex_unlock(&ar->conf_mutex); in ath10k_tpc_stats_final_open()
2310 mutex_unlock(&ar->conf_mutex); in ath10k_tpc_stats_final_open()
2317 vfree(file->private_data); in ath10k_tpc_stats_final_release()
2326 const char *buf = file->private_data; in ath10k_tpc_stats_final_read()
2344 struct ath10k *ar = file->private_data; in ath10k_write_warm_hw_reset()
2349 return -EFAULT; in ath10k_write_warm_hw_reset()
2352 return -EINVAL; in ath10k_write_warm_hw_reset()
2354 mutex_lock(&ar->conf_mutex); in ath10k_write_warm_hw_reset()
2356 if (ar->state != ATH10K_STATE_ON) { in ath10k_write_warm_hw_reset()
2357 ret = -ENETDOWN; in ath10k_write_warm_hw_reset()
2361 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->pdev_reset, in ath10k_write_warm_hw_reset()
2365 ath10k_warn(ar, "failed to enable warm hw reset: %d\n", ret); in ath10k_write_warm_hw_reset()
2372 mutex_unlock(&ar->conf_mutex); in ath10k_write_warm_hw_reset()
2387 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv; in ath10k_peer_ps_state_disable()
2389 spin_lock_bh(&ar->data_lock); in ath10k_peer_ps_state_disable()
2390 arsta->peer_ps_state = WMI_PEER_PS_STATE_DISABLED; in ath10k_peer_ps_state_disable()
2391 spin_unlock_bh(&ar->data_lock); in ath10k_peer_ps_state_disable()
2398 struct ath10k *ar = file->private_data; in ath10k_write_ps_state_enable()
2404 return -EINVAL; in ath10k_write_ps_state_enable()
2407 return -EINVAL; in ath10k_write_ps_state_enable()
2409 mutex_lock(&ar->conf_mutex); in ath10k_write_ps_state_enable()
2411 if (ar->ps_state_enable == ps_state_enable) { in ath10k_write_ps_state_enable()
2416 param = ar->wmi.pdev_param->peer_sta_ps_statechg_enable; in ath10k_write_ps_state_enable()
2423 ar->ps_state_enable = ps_state_enable; in ath10k_write_ps_state_enable()
2425 if (!ar->ps_state_enable) in ath10k_write_ps_state_enable()
2426 ieee80211_iterate_stations_atomic(ar->hw, in ath10k_write_ps_state_enable()
2433 mutex_unlock(&ar->conf_mutex); in ath10k_write_ps_state_enable()
2442 struct ath10k *ar = file->private_data; in ath10k_read_ps_state_enable()
2446 mutex_lock(&ar->conf_mutex); in ath10k_read_ps_state_enable()
2447 len = scnprintf(buf, sizeof(buf) - len, "%d\n", in ath10k_read_ps_state_enable()
2448 ar->ps_state_enable); in ath10k_read_ps_state_enable()
2449 mutex_unlock(&ar->conf_mutex); in ath10k_read_ps_state_enable()
2466 struct ath10k *ar = file->private_data; in ath10k_write_reset_htt_stats()
2475 return -EINVAL; in ath10k_write_reset_htt_stats()
2477 mutex_lock(&ar->conf_mutex); in ath10k_write_reset_htt_stats()
2479 ar->debug.reset_htt_stats = reset; in ath10k_write_reset_htt_stats()
2485 ar->debug.reset_htt_stats = 0; in ath10k_write_reset_htt_stats()
2489 mutex_unlock(&ar->conf_mutex); in ath10k_write_reset_htt_stats()
2502 ar->debug.cal_data = vzalloc(ATH10K_DEBUG_CAL_DATA_LEN); in ath10k_debug_create()
2503 if (!ar->debug.cal_data) in ath10k_debug_create()
2504 return -ENOMEM; in ath10k_debug_create()
2506 INIT_LIST_HEAD(&ar->debug.fw_stats.pdevs); in ath10k_debug_create()
2507 INIT_LIST_HEAD(&ar->debug.fw_stats.vdevs); in ath10k_debug_create()
2508 INIT_LIST_HEAD(&ar->debug.fw_stats.peers); in ath10k_debug_create()
2509 INIT_LIST_HEAD(&ar->debug.fw_stats.peers_extd); in ath10k_debug_create()
2516 vfree(ar->debug.cal_data); in ath10k_debug_destroy()
2517 ar->debug.cal_data = NULL; in ath10k_debug_destroy()
2521 kfree(ar->debug.tpc_stats); in ath10k_debug_destroy()
2522 kfree(ar->debug.tpc_stats_final); in ath10k_debug_destroy()
2527 ar->debug.debugfs_phy = debugfs_create_dir("ath10k", in ath10k_debug_register()
2528 ar->hw->wiphy->debugfsdir); in ath10k_debug_register()
2529 if (IS_ERR_OR_NULL(ar->debug.debugfs_phy)) { in ath10k_debug_register()
2530 if (IS_ERR(ar->debug.debugfs_phy)) in ath10k_debug_register()
2531 return PTR_ERR(ar->debug.debugfs_phy); in ath10k_debug_register()
2533 return -ENOMEM; in ath10k_debug_register()
2536 INIT_DELAYED_WORK(&ar->debug.htt_stats_dwork, in ath10k_debug_register()
2539 init_completion(&ar->debug.tpc_complete); in ath10k_debug_register()
2540 init_completion(&ar->debug.fw_stats_complete); in ath10k_debug_register()
2542 debugfs_create_file("fw_stats", 0400, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2545 debugfs_create_file("fw_reset_stats", 0400, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2548 debugfs_create_file("wmi_services", 0400, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2551 debugfs_create_file("simulate_fw_crash", 0600, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2554 debugfs_create_file("reg_addr", 0600, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2557 debugfs_create_file("reg_value", 0600, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2560 debugfs_create_file("mem_value", 0600, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2563 debugfs_create_file("chip_id", 0400, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2566 debugfs_create_file("htt_stats_mask", 0600, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2569 debugfs_create_file("htt_max_amsdu_ampdu", 0600, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2572 debugfs_create_file("fw_dbglog", 0600, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2576 ar->normal_mode_fw.fw_file.fw_features)) { in ath10k_debug_register()
2577 debugfs_create_file("cal_data", 0400, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2580 debugfs_create_file("nf_cal_period", 0600, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2584 debugfs_create_file("ani_enable", 0600, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2588 debugfs_create_file("dfs_simulate_radar", 0200, ar->debug.debugfs_phy, in ath10k_debug_register()
2592 ar->debug.debugfs_phy, in ath10k_debug_register()
2593 &ar->dfs_block_radar_events); in ath10k_debug_register()
2595 debugfs_create_file("dfs_stats", 0400, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2599 debugfs_create_file("pktlog_filter", 0644, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2602 if (test_bit(WMI_SERVICE_THERM_THROT, ar->wmi.svc_map)) in ath10k_debug_register()
2603 debugfs_create_file("quiet_period", 0644, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2606 debugfs_create_file("tpc_stats", 0400, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2609 if (test_bit(WMI_SERVICE_COEX_GPIO, ar->wmi.svc_map)) in ath10k_debug_register()
2610 debugfs_create_file("btcoex", 0644, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2613 if (test_bit(WMI_SERVICE_PEER_STATS, ar->wmi.svc_map)) { in ath10k_debug_register()
2614 debugfs_create_file("peer_stats", 0644, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2618 ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2622 debugfs_create_file("fw_checksums", 0400, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2627 ar->debug.debugfs_phy, in ath10k_debug_register()
2630 if (test_bit(WMI_SERVICE_TPC_STATS_FINAL, ar->wmi.svc_map)) in ath10k_debug_register()
2632 ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2635 if (test_bit(WMI_SERVICE_RESET_CHIP, ar->wmi.svc_map)) in ath10k_debug_register()
2637 ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2640 debugfs_create_file("ps_state_enable", 0600, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2643 debugfs_create_file("reset_htt_stats", 0200, ar->debug.debugfs_phy, ar, in ath10k_debug_register()
2651 cancel_delayed_work_sync(&ar->debug.htt_stats_dwork); in ath10k_debug_unregister()
2669 dev_printk(KERN_DEBUG, ar->dev, "%pV", &vaf); in __ath10k_dbg()
2690 for (ptr = buf; (ptr - buf) < len; ptr += 16) { in ath10k_dbg_dump()
2693 sizeof(linebuf) - linebuflen, in ath10k_dbg_dump()
2696 (unsigned int)(ptr - buf)); in ath10k_dbg_dump()
2697 hex_dump_to_buffer(ptr, len - (ptr - buf), 16, 1, in ath10k_dbg_dump()
2699 sizeof(linebuf) - linebuflen, true); in ath10k_dbg_dump()
2700 dev_printk(KERN_DEBUG, ar->dev, "%s\n", linebuf); in ath10k_dbg_dump()